Replace YY_NULL with YY_NULLPTR in LANG-exp.c
[deliverable/binutils-gdb.git] / opcodes / i386-dis.c
CommitLineData
252b5132 1/* Print i386 instructions for GDB, the GNU debugger.
6f2750fe 2 Copyright (C) 1988-2016 Free Software Foundation, Inc.
252b5132 3
9b201bb5 4 This file is part of the GNU opcodes library.
20f0a1fc 5
9b201bb5 6 This library is free software; you can redistribute it and/or modify
20f0a1fc 7 it under the terms of the GNU General Public License as published by
9b201bb5
NC
8 the Free Software Foundation; either version 3, or (at your option)
9 any later version.
20f0a1fc 10
9b201bb5
NC
11 It is distributed in the hope that it will be useful, but WITHOUT
12 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
13 or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
14 License for more details.
20f0a1fc
NC
15
16 You should have received a copy of the GNU General Public License
17 along with this program; if not, write to the Free Software
9b201bb5
NC
18 Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
19 MA 02110-1301, USA. */
20
20f0a1fc
NC
21
22/* 80386 instruction printer by Pace Willisson (pace@prep.ai.mit.edu)
23 July 1988
24 modified by John Hassey (hassey@dg-rtp.dg.com)
25 x86-64 support added by Jan Hubicka (jh@suse.cz)
26 VIA PadLock support by Michal Ludvig (mludvig@suse.cz). */
27
28/* The main tables describing the instructions is essentially a copy
29 of the "Opcode Map" chapter (Appendix A) of the Intel 80386
30 Programmers Manual. Usually, there is a capital letter, followed
31 by a small letter. The capital letter tell the addressing mode,
32 and the small letter tells about the operand size. Refer to
33 the Intel manual for details. */
252b5132 34
252b5132 35#include "sysdep.h"
dabbade6 36#include "dis-asm.h"
252b5132 37#include "opintl.h"
0b1cf022 38#include "opcode/i386.h"
85f10a01 39#include "libiberty.h"
252b5132
RH
40
41#include <setjmp.h>
42
26ca5450
AJ
43static int print_insn (bfd_vma, disassemble_info *);
44static void dofloat (int);
45static void OP_ST (int, int);
46static void OP_STi (int, int);
47static int putop (const char *, int);
48static void oappend (const char *);
49static void append_seg (void);
50static void OP_indirE (int, int);
51static void print_operand_value (char *, int, bfd_vma);
c0f3af97 52static void OP_E_register (int, int);
c1e679ec 53static void OP_E_memory (int, int);
5d669648 54static void print_displacement (char *, bfd_vma);
26ca5450
AJ
55static void OP_E (int, int);
56static void OP_G (int, int);
57static bfd_vma get64 (void);
58static bfd_signed_vma get32 (void);
59static bfd_signed_vma get32s (void);
60static int get16 (void);
61static void set_op (bfd_vma, int);
b844680a 62static void OP_Skip_MODRM (int, int);
26ca5450
AJ
63static void OP_REG (int, int);
64static void OP_IMREG (int, int);
65static void OP_I (int, int);
66static void OP_I64 (int, int);
67static void OP_sI (int, int);
68static void OP_J (int, int);
69static void OP_SEG (int, int);
70static void OP_DIR (int, int);
71static void OP_OFF (int, int);
72static void OP_OFF64 (int, int);
73static void ptr_reg (int, int);
74static void OP_ESreg (int, int);
75static void OP_DSreg (int, int);
76static void OP_C (int, int);
77static void OP_D (int, int);
78static void OP_T (int, int);
6f74c397 79static void OP_R (int, int);
26ca5450
AJ
80static void OP_MMX (int, int);
81static void OP_XMM (int, int);
82static void OP_EM (int, int);
83static void OP_EX (int, int);
4d9567e0
MM
84static void OP_EMC (int,int);
85static void OP_MXC (int,int);
26ca5450
AJ
86static void OP_MS (int, int);
87static void OP_XS (int, int);
cc0ec051 88static void OP_M (int, int);
c0f3af97
L
89static void OP_VEX (int, int);
90static void OP_EX_Vex (int, int);
922d8de8 91static void OP_EX_VexW (int, int);
a683cc34 92static void OP_EX_VexImmW (int, int);
c0f3af97 93static void OP_XMM_Vex (int, int);
922d8de8 94static void OP_XMM_VexW (int, int);
43234a1e 95static void OP_Rounding (int, int);
c0f3af97
L
96static void OP_REG_VexI4 (int, int);
97static void PCLMUL_Fixup (int, int);
922d8de8 98static void VEXI4_Fixup (int, int);
c0f3af97
L
99static void VZERO_Fixup (int, int);
100static void VCMP_Fixup (int, int);
43234a1e 101static void VPCMP_Fixup (int, int);
cc0ec051 102static void OP_0f07 (int, int);
b844680a
L
103static void OP_Monitor (int, int);
104static void OP_Mwait (int, int);
9916071f 105static void OP_Mwaitx (int, int);
46e883c5
L
106static void NOP_Fixup1 (int, int);
107static void NOP_Fixup2 (int, int);
26ca5450 108static void OP_3DNowSuffix (int, int);
ad19981d 109static void CMP_Fixup (int, int);
26ca5450 110static void BadOp (void);
35c52694 111static void REP_Fixup (int, int);
7e8b059b 112static void BND_Fixup (int, int);
42164a71
L
113static void HLE_Fixup1 (int, int);
114static void HLE_Fixup2 (int, int);
115static void HLE_Fixup3 (int, int);
f5804c90 116static void CMPXCHG8B_Fixup (int, int);
42903f7f 117static void XMM_Fixup (int, int);
381d071f 118static void CRC32_Fixup (int, int);
eacc9c89 119static void FXSAVE_Fixup (int, int);
f88c9eb0
SP
120static void OP_LWPCB_E (int, int);
121static void OP_LWP_E (int, int);
5dd85c99
SP
122static void OP_Vex_2src_1 (int, int);
123static void OP_Vex_2src_2 (int, int);
c1e679ec 124
f1f8f695 125static void MOVBE_Fixup (int, int);
252b5132 126
43234a1e
L
127static void OP_Mask (int, int);
128
6608db57 129struct dis_private {
252b5132
RH
130 /* Points to first byte not fetched. */
131 bfd_byte *max_fetched;
0b1cf022 132 bfd_byte the_buffer[MAX_MNEM_SIZE];
252b5132 133 bfd_vma insn_start;
e396998b 134 int orig_sizeflag;
8df14d78 135 OPCODES_SIGJMP_BUF bailout;
252b5132
RH
136};
137
cb712a9e
L
138enum address_mode
139{
140 mode_16bit,
141 mode_32bit,
142 mode_64bit
143};
144
145enum address_mode address_mode;
52b15da3 146
5076851f
ILT
147/* Flags for the prefixes for the current instruction. See below. */
148static int prefixes;
149
52b15da3
JH
150/* REX prefix the current instruction. See below. */
151static int rex;
152/* Bits of REX we've already used. */
153static int rex_used;
d869730d 154/* REX bits in original REX prefix ignored. */
c0f3af97 155static int rex_ignored;
52b15da3
JH
156/* Mark parts used in the REX prefix. When we are testing for
157 empty prefix (for 8bit register REX extension), just mask it
158 out. Otherwise test for REX bit is excuse for existence of REX
159 only in case value is nonzero. */
160#define USED_REX(value) \
161 { \
162 if (value) \
161a04f6
L
163 { \
164 if ((rex & value)) \
165 rex_used |= (value) | REX_OPCODE; \
166 } \
52b15da3 167 else \
161a04f6 168 rex_used |= REX_OPCODE; \
52b15da3
JH
169 }
170
7d421014
ILT
171/* Flags for prefixes which we somehow handled when printing the
172 current instruction. */
173static int used_prefixes;
174
5076851f
ILT
175/* Flags stored in PREFIXES. */
176#define PREFIX_REPZ 1
177#define PREFIX_REPNZ 2
178#define PREFIX_LOCK 4
179#define PREFIX_CS 8
180#define PREFIX_SS 0x10
181#define PREFIX_DS 0x20
182#define PREFIX_ES 0x40
183#define PREFIX_FS 0x80
184#define PREFIX_GS 0x100
185#define PREFIX_DATA 0x200
186#define PREFIX_ADDR 0x400
187#define PREFIX_FWAIT 0x800
188
252b5132
RH
189/* Make sure that bytes from INFO->PRIVATE_DATA->BUFFER (inclusive)
190 to ADDR (exclusive) are valid. Returns 1 for success, longjmps
191 on error. */
192#define FETCH_DATA(info, addr) \
6608db57 193 ((addr) <= ((struct dis_private *) (info->private_data))->max_fetched \
252b5132
RH
194 ? 1 : fetch_data ((info), (addr)))
195
196static int
26ca5450 197fetch_data (struct disassemble_info *info, bfd_byte *addr)
252b5132
RH
198{
199 int status;
6608db57 200 struct dis_private *priv = (struct dis_private *) info->private_data;
252b5132
RH
201 bfd_vma start = priv->insn_start + (priv->max_fetched - priv->the_buffer);
202
0b1cf022 203 if (addr <= priv->the_buffer + MAX_MNEM_SIZE)
272c9217
JB
204 status = (*info->read_memory_func) (start,
205 priv->max_fetched,
206 addr - priv->max_fetched,
207 info);
208 else
209 status = -1;
252b5132
RH
210 if (status != 0)
211 {
7d421014 212 /* If we did manage to read at least one byte, then
db6eb5be
AM
213 print_insn_i386 will do something sensible. Otherwise, print
214 an error. We do that here because this is where we know
215 STATUS. */
7d421014 216 if (priv->max_fetched == priv->the_buffer)
5076851f 217 (*info->memory_error_func) (status, start, info);
8df14d78 218 OPCODES_SIGLONGJMP (priv->bailout, 1);
252b5132
RH
219 }
220 else
221 priv->max_fetched = addr;
222 return 1;
223}
224
bf890a93 225/* Possible values for prefix requirement. */
507bd325
L
226#define PREFIX_IGNORED_SHIFT 16
227#define PREFIX_IGNORED_REPZ (PREFIX_REPZ << PREFIX_IGNORED_SHIFT)
228#define PREFIX_IGNORED_REPNZ (PREFIX_REPNZ << PREFIX_IGNORED_SHIFT)
229#define PREFIX_IGNORED_DATA (PREFIX_DATA << PREFIX_IGNORED_SHIFT)
230#define PREFIX_IGNORED_ADDR (PREFIX_ADDR << PREFIX_IGNORED_SHIFT)
231#define PREFIX_IGNORED_LOCK (PREFIX_LOCK << PREFIX_IGNORED_SHIFT)
232
233/* Opcode prefixes. */
234#define PREFIX_OPCODE (PREFIX_REPZ \
235 | PREFIX_REPNZ \
236 | PREFIX_DATA)
237
238/* Prefixes ignored. */
239#define PREFIX_IGNORED (PREFIX_IGNORED_REPZ \
240 | PREFIX_IGNORED_REPNZ \
241 | PREFIX_IGNORED_DATA)
bf890a93 242
ce518a5f 243#define XX { NULL, 0 }
507bd325 244#define Bad_Opcode NULL, { { NULL, 0 } }, 0
ce518a5f
L
245
246#define Eb { OP_E, b_mode }
7e8b059b 247#define Ebnd { OP_E, bnd_mode }
b6169b20 248#define EbS { OP_E, b_swap_mode }
ce518a5f 249#define Ev { OP_E, v_mode }
7e8b059b 250#define Ev_bnd { OP_E, v_bnd_mode }
b6169b20 251#define EvS { OP_E, v_swap_mode }
ce518a5f
L
252#define Ed { OP_E, d_mode }
253#define Edq { OP_E, dq_mode }
254#define Edqw { OP_E, dqw_mode }
1ba585e8 255#define EdqwS { OP_E, dqw_swap_mode }
42903f7f 256#define Edqb { OP_E, dqb_mode }
1ba585e8
IT
257#define Edb { OP_E, db_mode }
258#define Edw { OP_E, dw_mode }
42903f7f 259#define Edqd { OP_E, dqd_mode }
09335d05 260#define Eq { OP_E, q_mode }
07f5af7d 261#define indirEv { OP_indirE, indir_v_mode }
ce518a5f
L
262#define indirEp { OP_indirE, f_mode }
263#define stackEv { OP_E, stack_v_mode }
264#define Em { OP_E, m_mode }
265#define Ew { OP_E, w_mode }
266#define M { OP_M, 0 } /* lea, lgdt, etc. */
34b772a6 267#define Ma { OP_M, a_mode }
b844680a 268#define Mb { OP_M, b_mode }
d9a5e5e5 269#define Md { OP_M, d_mode }
f1f8f695 270#define Mo { OP_M, o_mode }
ce518a5f
L
271#define Mp { OP_M, f_mode } /* 32 or 48 bit memory operand for LDS, LES etc */
272#define Mq { OP_M, q_mode }
4ee52178 273#define Mx { OP_M, x_mode }
c0f3af97 274#define Mxmm { OP_M, xmm_mode }
ce518a5f 275#define Gb { OP_G, b_mode }
7e8b059b 276#define Gbnd { OP_G, bnd_mode }
ce518a5f
L
277#define Gv { OP_G, v_mode }
278#define Gd { OP_G, d_mode }
279#define Gdq { OP_G, dq_mode }
280#define Gm { OP_G, m_mode }
281#define Gw { OP_G, w_mode }
6f74c397 282#define Rd { OP_R, d_mode }
43234a1e 283#define Rdq { OP_R, dq_mode }
6f74c397 284#define Rm { OP_R, m_mode }
ce518a5f
L
285#define Ib { OP_I, b_mode }
286#define sIb { OP_sI, b_mode } /* sign extened byte */
e3949f17 287#define sIbT { OP_sI, b_T_mode } /* sign extened byte like 'T' */
ce518a5f 288#define Iv { OP_I, v_mode }
7bb15c6f 289#define sIv { OP_sI, v_mode }
ce518a5f
L
290#define Iq { OP_I, q_mode }
291#define Iv64 { OP_I64, v_mode }
292#define Iw { OP_I, w_mode }
293#define I1 { OP_I, const_1_mode }
294#define Jb { OP_J, b_mode }
295#define Jv { OP_J, v_mode }
296#define Cm { OP_C, m_mode }
297#define Dm { OP_D, m_mode }
298#define Td { OP_T, d_mode }
b844680a 299#define Skip_MODRM { OP_Skip_MODRM, 0 }
ce518a5f
L
300
301#define RMeAX { OP_REG, eAX_reg }
302#define RMeBX { OP_REG, eBX_reg }
303#define RMeCX { OP_REG, eCX_reg }
304#define RMeDX { OP_REG, eDX_reg }
305#define RMeSP { OP_REG, eSP_reg }
306#define RMeBP { OP_REG, eBP_reg }
307#define RMeSI { OP_REG, eSI_reg }
308#define RMeDI { OP_REG, eDI_reg }
309#define RMrAX { OP_REG, rAX_reg }
310#define RMrBX { OP_REG, rBX_reg }
311#define RMrCX { OP_REG, rCX_reg }
312#define RMrDX { OP_REG, rDX_reg }
313#define RMrSP { OP_REG, rSP_reg }
314#define RMrBP { OP_REG, rBP_reg }
315#define RMrSI { OP_REG, rSI_reg }
316#define RMrDI { OP_REG, rDI_reg }
317#define RMAL { OP_REG, al_reg }
ce518a5f
L
318#define RMCL { OP_REG, cl_reg }
319#define RMDL { OP_REG, dl_reg }
320#define RMBL { OP_REG, bl_reg }
321#define RMAH { OP_REG, ah_reg }
322#define RMCH { OP_REG, ch_reg }
323#define RMDH { OP_REG, dh_reg }
324#define RMBH { OP_REG, bh_reg }
325#define RMAX { OP_REG, ax_reg }
326#define RMDX { OP_REG, dx_reg }
327
328#define eAX { OP_IMREG, eAX_reg }
329#define eBX { OP_IMREG, eBX_reg }
330#define eCX { OP_IMREG, eCX_reg }
331#define eDX { OP_IMREG, eDX_reg }
332#define eSP { OP_IMREG, eSP_reg }
333#define eBP { OP_IMREG, eBP_reg }
334#define eSI { OP_IMREG, eSI_reg }
335#define eDI { OP_IMREG, eDI_reg }
336#define AL { OP_IMREG, al_reg }
337#define CL { OP_IMREG, cl_reg }
338#define DL { OP_IMREG, dl_reg }
339#define BL { OP_IMREG, bl_reg }
340#define AH { OP_IMREG, ah_reg }
341#define CH { OP_IMREG, ch_reg }
342#define DH { OP_IMREG, dh_reg }
343#define BH { OP_IMREG, bh_reg }
344#define AX { OP_IMREG, ax_reg }
345#define DX { OP_IMREG, dx_reg }
346#define zAX { OP_IMREG, z_mode_ax_reg }
347#define indirDX { OP_IMREG, indir_dx_reg }
348
349#define Sw { OP_SEG, w_mode }
350#define Sv { OP_SEG, v_mode }
351#define Ap { OP_DIR, 0 }
352#define Ob { OP_OFF64, b_mode }
353#define Ov { OP_OFF64, v_mode }
354#define Xb { OP_DSreg, eSI_reg }
355#define Xv { OP_DSreg, eSI_reg }
356#define Xz { OP_DSreg, eSI_reg }
357#define Yb { OP_ESreg, eDI_reg }
358#define Yv { OP_ESreg, eDI_reg }
359#define DSBX { OP_DSreg, eBX_reg }
360
361#define es { OP_REG, es_reg }
362#define ss { OP_REG, ss_reg }
363#define cs { OP_REG, cs_reg }
364#define ds { OP_REG, ds_reg }
365#define fs { OP_REG, fs_reg }
366#define gs { OP_REG, gs_reg }
367
368#define MX { OP_MMX, 0 }
369#define XM { OP_XMM, 0 }
539f890d 370#define XMScalar { OP_XMM, scalar_mode }
6c30d220 371#define XMGatherQ { OP_XMM, vex_vsib_q_w_dq_mode }
c0f3af97 372#define XMM { OP_XMM, xmm_mode }
43234a1e 373#define XMxmmq { OP_XMM, xmmq_mode }
ce518a5f 374#define EM { OP_EM, v_mode }
b6169b20 375#define EMS { OP_EM, v_swap_mode }
09a2c6cf 376#define EMd { OP_EM, d_mode }
14051056 377#define EMx { OP_EM, x_mode }
8976381e 378#define EXw { OP_EX, w_mode }
09a2c6cf 379#define EXd { OP_EX, d_mode }
539f890d 380#define EXdScalar { OP_EX, d_scalar_mode }
fa99fab2 381#define EXdS { OP_EX, d_swap_mode }
43234a1e 382#define EXdScalarS { OP_EX, d_scalar_swap_mode }
09a2c6cf 383#define EXq { OP_EX, q_mode }
539f890d
L
384#define EXqScalar { OP_EX, q_scalar_mode }
385#define EXqScalarS { OP_EX, q_scalar_swap_mode }
b6169b20 386#define EXqS { OP_EX, q_swap_mode }
09a2c6cf 387#define EXx { OP_EX, x_mode }
b6169b20 388#define EXxS { OP_EX, x_swap_mode }
c0f3af97 389#define EXxmm { OP_EX, xmm_mode }
43234a1e 390#define EXymm { OP_EX, ymm_mode }
c0f3af97 391#define EXxmmq { OP_EX, xmmq_mode }
43234a1e 392#define EXEvexHalfBcstXmmq { OP_EX, evex_half_bcst_xmmq_mode }
6c30d220
L
393#define EXxmm_mb { OP_EX, xmm_mb_mode }
394#define EXxmm_mw { OP_EX, xmm_mw_mode }
395#define EXxmm_md { OP_EX, xmm_md_mode }
396#define EXxmm_mq { OP_EX, xmm_mq_mode }
43234a1e 397#define EXxmm_mdq { OP_EX, xmm_mdq_mode }
6c30d220
L
398#define EXxmmdw { OP_EX, xmmdw_mode }
399#define EXxmmqd { OP_EX, xmmqd_mode }
c0f3af97 400#define EXymmq { OP_EX, ymmq_mode }
0bfee649 401#define EXVexWdq { OP_EX, vex_w_dq_mode }
1c480963 402#define EXVexWdqScalar { OP_EX, vex_scalar_w_dq_mode }
43234a1e
L
403#define EXEvexXGscat { OP_EX, evex_x_gscat_mode }
404#define EXEvexXNoBcst { OP_EX, evex_x_nobcst_mode }
ce518a5f
L
405#define MS { OP_MS, v_mode }
406#define XS { OP_XS, v_mode }
09335d05 407#define EMCq { OP_EMC, q_mode }
ce518a5f 408#define MXC { OP_MXC, 0 }
ce518a5f 409#define OPSUF { OP_3DNowSuffix, 0 }
ad19981d 410#define CMP { CMP_Fixup, 0 }
42903f7f 411#define XMM0 { XMM_Fixup, 0 }
eacc9c89 412#define FXSAVE { FXSAVE_Fixup, 0 }
5dd85c99
SP
413#define Vex_2src_1 { OP_Vex_2src_1, 0 }
414#define Vex_2src_2 { OP_Vex_2src_2, 0 }
252b5132 415
c0f3af97 416#define Vex { OP_VEX, vex_mode }
539f890d 417#define VexScalar { OP_VEX, vex_scalar_mode }
6c30d220 418#define VexGatherQ { OP_VEX, vex_vsib_q_w_dq_mode }
c0f3af97
L
419#define Vex128 { OP_VEX, vex128_mode }
420#define Vex256 { OP_VEX, vex256_mode }
cb21baef 421#define VexGdq { OP_VEX, dq_mode }
922d8de8 422#define VexI4 { VEXI4_Fixup, 0}
c0f3af97 423#define EXdVex { OP_EX_Vex, d_mode }
fa99fab2 424#define EXdVexS { OP_EX_Vex, d_swap_mode }
539f890d 425#define EXdVexScalarS { OP_EX_Vex, d_scalar_swap_mode }
c0f3af97 426#define EXqVex { OP_EX_Vex, q_mode }
fa99fab2 427#define EXqVexS { OP_EX_Vex, q_swap_mode }
539f890d 428#define EXqVexScalarS { OP_EX_Vex, q_scalar_swap_mode }
922d8de8
DR
429#define EXVexW { OP_EX_VexW, x_mode }
430#define EXdVexW { OP_EX_VexW, d_mode }
431#define EXqVexW { OP_EX_VexW, q_mode }
a683cc34 432#define EXVexImmW { OP_EX_VexImmW, x_mode }
c0f3af97 433#define XMVex { OP_XMM_Vex, 0 }
539f890d 434#define XMVexScalar { OP_XMM_Vex, scalar_mode }
922d8de8 435#define XMVexW { OP_XMM_VexW, 0 }
c0f3af97
L
436#define XMVexI4 { OP_REG_VexI4, x_mode }
437#define PCLMUL { PCLMUL_Fixup, 0 }
438#define VZERO { VZERO_Fixup, 0 }
439#define VCMP { VCMP_Fixup, 0 }
43234a1e
L
440#define VPCMP { VPCMP_Fixup, 0 }
441
442#define EXxEVexR { OP_Rounding, evex_rounding_mode }
443#define EXxEVexS { OP_Rounding, evex_sae_mode }
444
445#define XMask { OP_Mask, mask_mode }
446#define MaskG { OP_G, mask_mode }
447#define MaskE { OP_E, mask_mode }
1ba585e8 448#define MaskBDE { OP_E, mask_bd_mode }
43234a1e
L
449#define MaskR { OP_R, mask_mode }
450#define MaskVex { OP_VEX, mask_mode }
c0f3af97 451
6c30d220 452#define MVexVSIBDWpX { OP_M, vex_vsib_d_w_dq_mode }
5fc35d96 453#define MVexVSIBDQWpX { OP_M, vex_vsib_d_w_d_mode }
6c30d220 454#define MVexVSIBQWpX { OP_M, vex_vsib_q_w_dq_mode }
5fc35d96 455#define MVexVSIBQDWpX { OP_M, vex_vsib_q_w_d_mode }
6c30d220 456
35c52694 457/* Used handle "rep" prefix for string instructions. */
ce518a5f
L
458#define Xbr { REP_Fixup, eSI_reg }
459#define Xvr { REP_Fixup, eSI_reg }
460#define Ybr { REP_Fixup, eDI_reg }
461#define Yvr { REP_Fixup, eDI_reg }
462#define Yzr { REP_Fixup, eDI_reg }
463#define indirDXr { REP_Fixup, indir_dx_reg }
464#define ALr { REP_Fixup, al_reg }
465#define eAXr { REP_Fixup, eAX_reg }
466
42164a71
L
467/* Used handle HLE prefix for lockable instructions. */
468#define Ebh1 { HLE_Fixup1, b_mode }
469#define Evh1 { HLE_Fixup1, v_mode }
470#define Ebh2 { HLE_Fixup2, b_mode }
471#define Evh2 { HLE_Fixup2, v_mode }
472#define Ebh3 { HLE_Fixup3, b_mode }
473#define Evh3 { HLE_Fixup3, v_mode }
474
7e8b059b
L
475#define BND { BND_Fixup, 0 }
476
ce518a5f
L
477#define cond_jump_flag { NULL, cond_jump_mode }
478#define loop_jcxz_flag { NULL, loop_jcxz_mode }
3ffd33cf 479
252b5132 480/* bits in sizeflag */
252b5132 481#define SUFFIX_ALWAYS 4
252b5132
RH
482#define AFLAG 2
483#define DFLAG 1
484
51e7da1b
L
485enum
486{
487 /* byte operand */
488 b_mode = 1,
489 /* byte operand with operand swapped */
3873ba12 490 b_swap_mode,
e3949f17
L
491 /* byte operand, sign extend like 'T' suffix */
492 b_T_mode,
51e7da1b 493 /* operand size depends on prefixes */
3873ba12 494 v_mode,
51e7da1b 495 /* operand size depends on prefixes with operand swapped */
3873ba12 496 v_swap_mode,
51e7da1b 497 /* word operand */
3873ba12 498 w_mode,
51e7da1b 499 /* double word operand */
3873ba12 500 d_mode,
51e7da1b 501 /* double word operand with operand swapped */
3873ba12 502 d_swap_mode,
51e7da1b 503 /* quad word operand */
3873ba12 504 q_mode,
51e7da1b 505 /* quad word operand with operand swapped */
3873ba12 506 q_swap_mode,
51e7da1b 507 /* ten-byte operand */
3873ba12 508 t_mode,
43234a1e
L
509 /* 16-byte XMM, 32-byte YMM or 64-byte ZMM operand. In EVEX with
510 broadcast enabled. */
3873ba12 511 x_mode,
43234a1e
L
512 /* Similar to x_mode, but with different EVEX mem shifts. */
513 evex_x_gscat_mode,
514 /* Similar to x_mode, but with disabled broadcast. */
515 evex_x_nobcst_mode,
516 /* Similar to x_mode, but with operands swapped and disabled broadcast
517 in EVEX. */
3873ba12 518 x_swap_mode,
51e7da1b 519 /* 16-byte XMM operand */
3873ba12 520 xmm_mode,
43234a1e
L
521 /* XMM, XMM or YMM register operand, or quad word, xmmword or ymmword
522 memory operand (depending on vector length). Broadcast isn't
523 allowed. */
3873ba12 524 xmmq_mode,
43234a1e
L
525 /* Same as xmmq_mode, but broadcast is allowed. */
526 evex_half_bcst_xmmq_mode,
6c30d220
L
527 /* XMM register or byte memory operand */
528 xmm_mb_mode,
529 /* XMM register or word memory operand */
530 xmm_mw_mode,
531 /* XMM register or double word memory operand */
532 xmm_md_mode,
533 /* XMM register or quad word memory operand */
534 xmm_mq_mode,
43234a1e
L
535 /* XMM register or double/quad word memory operand, depending on
536 VEX.W. */
537 xmm_mdq_mode,
538 /* 16-byte XMM, word, double word or quad word operand. */
6c30d220 539 xmmdw_mode,
43234a1e 540 /* 16-byte XMM, double word, quad word operand or xmm word operand. */
6c30d220 541 xmmqd_mode,
43234a1e
L
542 /* 32-byte YMM operand */
543 ymm_mode,
544 /* quad word, ymmword or zmmword memory operand. */
3873ba12 545 ymmq_mode,
6c30d220
L
546 /* 32-byte YMM or 16-byte word operand */
547 ymmxmm_mode,
51e7da1b 548 /* d_mode in 32bit, q_mode in 64bit mode. */
3873ba12 549 m_mode,
51e7da1b 550 /* pair of v_mode operands */
3873ba12
L
551 a_mode,
552 cond_jump_mode,
553 loop_jcxz_mode,
7e8b059b 554 v_bnd_mode,
51e7da1b 555 /* operand size depends on REX prefixes. */
3873ba12 556 dq_mode,
51e7da1b 557 /* registers like dq_mode, memory like w_mode. */
3873ba12 558 dqw_mode,
1ba585e8 559 dqw_swap_mode,
7e8b059b 560 bnd_mode,
51e7da1b 561 /* 4- or 6-byte pointer operand */
3873ba12
L
562 f_mode,
563 const_1_mode,
07f5af7d
L
564 /* v_mode for indirect branch opcodes. */
565 indir_v_mode,
51e7da1b 566 /* v_mode for stack-related opcodes. */
3873ba12 567 stack_v_mode,
51e7da1b 568 /* non-quad operand size depends on prefixes */
3873ba12 569 z_mode,
51e7da1b 570 /* 16-byte operand */
3873ba12 571 o_mode,
51e7da1b 572 /* registers like dq_mode, memory like b_mode. */
3873ba12 573 dqb_mode,
1ba585e8
IT
574 /* registers like d_mode, memory like b_mode. */
575 db_mode,
576 /* registers like d_mode, memory like w_mode. */
577 dw_mode,
51e7da1b 578 /* registers like dq_mode, memory like d_mode. */
3873ba12 579 dqd_mode,
51e7da1b 580 /* normal vex mode */
3873ba12 581 vex_mode,
51e7da1b 582 /* 128bit vex mode */
3873ba12 583 vex128_mode,
51e7da1b 584 /* 256bit vex mode */
3873ba12 585 vex256_mode,
51e7da1b 586 /* operand size depends on the VEX.W bit. */
3873ba12 587 vex_w_dq_mode,
d55ee72f 588
6c30d220
L
589 /* Similar to vex_w_dq_mode, with VSIB dword indices. */
590 vex_vsib_d_w_dq_mode,
5fc35d96
IT
591 /* Similar to vex_vsib_d_w_dq_mode, with smaller memory. */
592 vex_vsib_d_w_d_mode,
6c30d220
L
593 /* Similar to vex_w_dq_mode, with VSIB qword indices. */
594 vex_vsib_q_w_dq_mode,
5fc35d96
IT
595 /* Similar to vex_vsib_q_w_dq_mode, with smaller memory. */
596 vex_vsib_q_w_d_mode,
6c30d220 597
539f890d
L
598 /* scalar, ignore vector length. */
599 scalar_mode,
600 /* like d_mode, ignore vector length. */
601 d_scalar_mode,
602 /* like d_swap_mode, ignore vector length. */
603 d_scalar_swap_mode,
604 /* like q_mode, ignore vector length. */
605 q_scalar_mode,
606 /* like q_swap_mode, ignore vector length. */
607 q_scalar_swap_mode,
608 /* like vex_mode, ignore vector length. */
609 vex_scalar_mode,
1c480963
L
610 /* like vex_w_dq_mode, ignore vector length. */
611 vex_scalar_w_dq_mode,
539f890d 612
43234a1e
L
613 /* Static rounding. */
614 evex_rounding_mode,
615 /* Supress all exceptions. */
616 evex_sae_mode,
617
618 /* Mask register operand. */
619 mask_mode,
1ba585e8
IT
620 /* Mask register operand. */
621 mask_bd_mode,
43234a1e 622
3873ba12
L
623 es_reg,
624 cs_reg,
625 ss_reg,
626 ds_reg,
627 fs_reg,
628 gs_reg,
d55ee72f 629
3873ba12
L
630 eAX_reg,
631 eCX_reg,
632 eDX_reg,
633 eBX_reg,
634 eSP_reg,
635 eBP_reg,
636 eSI_reg,
637 eDI_reg,
d55ee72f 638
3873ba12
L
639 al_reg,
640 cl_reg,
641 dl_reg,
642 bl_reg,
643 ah_reg,
644 ch_reg,
645 dh_reg,
646 bh_reg,
d55ee72f 647
3873ba12
L
648 ax_reg,
649 cx_reg,
650 dx_reg,
651 bx_reg,
652 sp_reg,
653 bp_reg,
654 si_reg,
655 di_reg,
d55ee72f 656
3873ba12
L
657 rAX_reg,
658 rCX_reg,
659 rDX_reg,
660 rBX_reg,
661 rSP_reg,
662 rBP_reg,
663 rSI_reg,
664 rDI_reg,
d55ee72f 665
3873ba12
L
666 z_mode_ax_reg,
667 indir_dx_reg
51e7da1b 668};
252b5132 669
51e7da1b
L
670enum
671{
672 FLOATCODE = 1,
3873ba12
L
673 USE_REG_TABLE,
674 USE_MOD_TABLE,
675 USE_RM_TABLE,
676 USE_PREFIX_TABLE,
677 USE_X86_64_TABLE,
678 USE_3BYTE_TABLE,
f88c9eb0 679 USE_XOP_8F_TABLE,
3873ba12
L
680 USE_VEX_C4_TABLE,
681 USE_VEX_C5_TABLE,
9e30b8e0 682 USE_VEX_LEN_TABLE,
43234a1e
L
683 USE_VEX_W_TABLE,
684 USE_EVEX_TABLE
51e7da1b 685};
6439fc28 686
bf890a93 687#define FLOAT NULL, { { NULL, FLOATCODE } }, 0
4efba78c 688
bf890a93
IT
689#define DIS386(T, I) NULL, { { NULL, (T)}, { NULL, (I) } }, 0
690#define DIS386_PREFIX(T, I, P) NULL, { { NULL, (T)}, { NULL, (I) } }, P
1ceb70f8
L
691#define REG_TABLE(I) DIS386 (USE_REG_TABLE, (I))
692#define MOD_TABLE(I) DIS386 (USE_MOD_TABLE, (I))
693#define RM_TABLE(I) DIS386 (USE_RM_TABLE, (I))
694#define PREFIX_TABLE(I) DIS386 (USE_PREFIX_TABLE, (I))
4e7d34a6
L
695#define X86_64_TABLE(I) DIS386 (USE_X86_64_TABLE, (I))
696#define THREE_BYTE_TABLE(I) DIS386 (USE_3BYTE_TABLE, (I))
bf890a93 697#define THREE_BYTE_TABLE_PREFIX(I, P) DIS386_PREFIX (USE_3BYTE_TABLE, (I), P)
f88c9eb0 698#define XOP_8F_TABLE(I) DIS386 (USE_XOP_8F_TABLE, (I))
c0f3af97
L
699#define VEX_C4_TABLE(I) DIS386 (USE_VEX_C4_TABLE, (I))
700#define VEX_C5_TABLE(I) DIS386 (USE_VEX_C5_TABLE, (I))
701#define VEX_LEN_TABLE(I) DIS386 (USE_VEX_LEN_TABLE, (I))
9e30b8e0 702#define VEX_W_TABLE(I) DIS386 (USE_VEX_W_TABLE, (I))
43234a1e 703#define EVEX_TABLE(I) DIS386 (USE_EVEX_TABLE, (I))
1ceb70f8 704
51e7da1b
L
705enum
706{
707 REG_80 = 0,
3873ba12 708 REG_81,
7148c369 709 REG_83,
3873ba12
L
710 REG_8F,
711 REG_C0,
712 REG_C1,
713 REG_C6,
714 REG_C7,
715 REG_D0,
716 REG_D1,
717 REG_D2,
718 REG_D3,
719 REG_F6,
720 REG_F7,
721 REG_FE,
722 REG_FF,
723 REG_0F00,
724 REG_0F01,
725 REG_0F0D,
726 REG_0F18,
727 REG_0F71,
728 REG_0F72,
729 REG_0F73,
730 REG_0FA6,
731 REG_0FA7,
732 REG_0FAE,
733 REG_0FBA,
734 REG_0FC7,
592a252b
L
735 REG_VEX_0F71,
736 REG_VEX_0F72,
737 REG_VEX_0F73,
738 REG_VEX_0FAE,
f12dc422 739 REG_VEX_0F38F3,
f88c9eb0 740 REG_XOP_LWPCB,
2a2a0f38
QN
741 REG_XOP_LWP,
742 REG_XOP_TBM_01,
43234a1e
L
743 REG_XOP_TBM_02,
744
1ba585e8 745 REG_EVEX_0F71,
43234a1e
L
746 REG_EVEX_0F72,
747 REG_EVEX_0F73,
748 REG_EVEX_0F38C6,
749 REG_EVEX_0F38C7
51e7da1b 750};
1ceb70f8 751
51e7da1b
L
752enum
753{
754 MOD_8D = 0,
42164a71
L
755 MOD_C6_REG_7,
756 MOD_C7_REG_7,
4a357820
MZ
757 MOD_FF_REG_3,
758 MOD_FF_REG_5,
3873ba12
L
759 MOD_0F01_REG_0,
760 MOD_0F01_REG_1,
761 MOD_0F01_REG_2,
762 MOD_0F01_REG_3,
8eab4136 763 MOD_0F01_REG_5,
3873ba12
L
764 MOD_0F01_REG_7,
765 MOD_0F12_PREFIX_0,
766 MOD_0F13,
767 MOD_0F16_PREFIX_0,
768 MOD_0F17,
769 MOD_0F18_REG_0,
770 MOD_0F18_REG_1,
771 MOD_0F18_REG_2,
772 MOD_0F18_REG_3,
d7189fa5
RM
773 MOD_0F18_REG_4,
774 MOD_0F18_REG_5,
775 MOD_0F18_REG_6,
776 MOD_0F18_REG_7,
7e8b059b
L
777 MOD_0F1A_PREFIX_0,
778 MOD_0F1B_PREFIX_0,
779 MOD_0F1B_PREFIX_1,
3873ba12
L
780 MOD_0F24,
781 MOD_0F26,
782 MOD_0F2B_PREFIX_0,
783 MOD_0F2B_PREFIX_1,
784 MOD_0F2B_PREFIX_2,
785 MOD_0F2B_PREFIX_3,
786 MOD_0F51,
787 MOD_0F71_REG_2,
788 MOD_0F71_REG_4,
789 MOD_0F71_REG_6,
790 MOD_0F72_REG_2,
791 MOD_0F72_REG_4,
792 MOD_0F72_REG_6,
793 MOD_0F73_REG_2,
794 MOD_0F73_REG_3,
795 MOD_0F73_REG_6,
796 MOD_0F73_REG_7,
797 MOD_0FAE_REG_0,
798 MOD_0FAE_REG_1,
799 MOD_0FAE_REG_2,
800 MOD_0FAE_REG_3,
801 MOD_0FAE_REG_4,
802 MOD_0FAE_REG_5,
803 MOD_0FAE_REG_6,
804 MOD_0FAE_REG_7,
805 MOD_0FB2,
806 MOD_0FB4,
807 MOD_0FB5,
a8484f96 808 MOD_0FC3,
963f3586
IT
809 MOD_0FC7_REG_3,
810 MOD_0FC7_REG_4,
811 MOD_0FC7_REG_5,
3873ba12
L
812 MOD_0FC7_REG_6,
813 MOD_0FC7_REG_7,
814 MOD_0FD7,
815 MOD_0FE7_PREFIX_2,
816 MOD_0FF0_PREFIX_3,
817 MOD_0F382A_PREFIX_2,
818 MOD_62_32BIT,
819 MOD_C4_32BIT,
820 MOD_C5_32BIT,
592a252b
L
821 MOD_VEX_0F12_PREFIX_0,
822 MOD_VEX_0F13,
823 MOD_VEX_0F16_PREFIX_0,
824 MOD_VEX_0F17,
825 MOD_VEX_0F2B,
ab4e4ed5
AF
826 MOD_VEX_W_0_0F41_P_0_LEN_1,
827 MOD_VEX_W_1_0F41_P_0_LEN_1,
828 MOD_VEX_W_0_0F41_P_2_LEN_1,
829 MOD_VEX_W_1_0F41_P_2_LEN_1,
830 MOD_VEX_W_0_0F42_P_0_LEN_1,
831 MOD_VEX_W_1_0F42_P_0_LEN_1,
832 MOD_VEX_W_0_0F42_P_2_LEN_1,
833 MOD_VEX_W_1_0F42_P_2_LEN_1,
834 MOD_VEX_W_0_0F44_P_0_LEN_1,
835 MOD_VEX_W_1_0F44_P_0_LEN_1,
836 MOD_VEX_W_0_0F44_P_2_LEN_1,
837 MOD_VEX_W_1_0F44_P_2_LEN_1,
838 MOD_VEX_W_0_0F45_P_0_LEN_1,
839 MOD_VEX_W_1_0F45_P_0_LEN_1,
840 MOD_VEX_W_0_0F45_P_2_LEN_1,
841 MOD_VEX_W_1_0F45_P_2_LEN_1,
842 MOD_VEX_W_0_0F46_P_0_LEN_1,
843 MOD_VEX_W_1_0F46_P_0_LEN_1,
844 MOD_VEX_W_0_0F46_P_2_LEN_1,
845 MOD_VEX_W_1_0F46_P_2_LEN_1,
846 MOD_VEX_W_0_0F47_P_0_LEN_1,
847 MOD_VEX_W_1_0F47_P_0_LEN_1,
848 MOD_VEX_W_0_0F47_P_2_LEN_1,
849 MOD_VEX_W_1_0F47_P_2_LEN_1,
850 MOD_VEX_W_0_0F4A_P_0_LEN_1,
851 MOD_VEX_W_1_0F4A_P_0_LEN_1,
852 MOD_VEX_W_0_0F4A_P_2_LEN_1,
853 MOD_VEX_W_1_0F4A_P_2_LEN_1,
854 MOD_VEX_W_0_0F4B_P_0_LEN_1,
855 MOD_VEX_W_1_0F4B_P_0_LEN_1,
856 MOD_VEX_W_0_0F4B_P_2_LEN_1,
592a252b
L
857 MOD_VEX_0F50,
858 MOD_VEX_0F71_REG_2,
859 MOD_VEX_0F71_REG_4,
860 MOD_VEX_0F71_REG_6,
861 MOD_VEX_0F72_REG_2,
862 MOD_VEX_0F72_REG_4,
863 MOD_VEX_0F72_REG_6,
864 MOD_VEX_0F73_REG_2,
865 MOD_VEX_0F73_REG_3,
866 MOD_VEX_0F73_REG_6,
867 MOD_VEX_0F73_REG_7,
ab4e4ed5
AF
868 MOD_VEX_W_0_0F91_P_0_LEN_0,
869 MOD_VEX_W_1_0F91_P_0_LEN_0,
870 MOD_VEX_W_0_0F91_P_2_LEN_0,
871 MOD_VEX_W_1_0F91_P_2_LEN_0,
872 MOD_VEX_W_0_0F92_P_0_LEN_0,
873 MOD_VEX_W_0_0F92_P_2_LEN_0,
874 MOD_VEX_W_0_0F92_P_3_LEN_0,
875 MOD_VEX_W_1_0F92_P_3_LEN_0,
876 MOD_VEX_W_0_0F93_P_0_LEN_0,
877 MOD_VEX_W_0_0F93_P_2_LEN_0,
878 MOD_VEX_W_0_0F93_P_3_LEN_0,
879 MOD_VEX_W_1_0F93_P_3_LEN_0,
880 MOD_VEX_W_0_0F98_P_0_LEN_0,
881 MOD_VEX_W_1_0F98_P_0_LEN_0,
882 MOD_VEX_W_0_0F98_P_2_LEN_0,
883 MOD_VEX_W_1_0F98_P_2_LEN_0,
884 MOD_VEX_W_0_0F99_P_0_LEN_0,
885 MOD_VEX_W_1_0F99_P_0_LEN_0,
886 MOD_VEX_W_0_0F99_P_2_LEN_0,
887 MOD_VEX_W_1_0F99_P_2_LEN_0,
592a252b
L
888 MOD_VEX_0FAE_REG_2,
889 MOD_VEX_0FAE_REG_3,
890 MOD_VEX_0FD7_PREFIX_2,
891 MOD_VEX_0FE7_PREFIX_2,
892 MOD_VEX_0FF0_PREFIX_3,
592a252b
L
893 MOD_VEX_0F381A_PREFIX_2,
894 MOD_VEX_0F382A_PREFIX_2,
895 MOD_VEX_0F382C_PREFIX_2,
896 MOD_VEX_0F382D_PREFIX_2,
897 MOD_VEX_0F382E_PREFIX_2,
6c30d220
L
898 MOD_VEX_0F382F_PREFIX_2,
899 MOD_VEX_0F385A_PREFIX_2,
900 MOD_VEX_0F388C_PREFIX_2,
901 MOD_VEX_0F388E_PREFIX_2,
ab4e4ed5
AF
902 MOD_VEX_W_0_0F3A30_P_2_LEN_0,
903 MOD_VEX_W_1_0F3A30_P_2_LEN_0,
904 MOD_VEX_W_0_0F3A31_P_2_LEN_0,
905 MOD_VEX_W_1_0F3A31_P_2_LEN_0,
906 MOD_VEX_W_0_0F3A32_P_2_LEN_0,
907 MOD_VEX_W_1_0F3A32_P_2_LEN_0,
908 MOD_VEX_W_0_0F3A33_P_2_LEN_0,
909 MOD_VEX_W_1_0F3A33_P_2_LEN_0,
43234a1e
L
910
911 MOD_EVEX_0F10_PREFIX_1,
912 MOD_EVEX_0F10_PREFIX_3,
913 MOD_EVEX_0F11_PREFIX_1,
914 MOD_EVEX_0F11_PREFIX_3,
915 MOD_EVEX_0F12_PREFIX_0,
916 MOD_EVEX_0F16_PREFIX_0,
917 MOD_EVEX_0F38C6_REG_1,
918 MOD_EVEX_0F38C6_REG_2,
919 MOD_EVEX_0F38C6_REG_5,
920 MOD_EVEX_0F38C6_REG_6,
921 MOD_EVEX_0F38C7_REG_1,
922 MOD_EVEX_0F38C7_REG_2,
923 MOD_EVEX_0F38C7_REG_5,
924 MOD_EVEX_0F38C7_REG_6
51e7da1b 925};
1ceb70f8 926
51e7da1b
L
927enum
928{
42164a71
L
929 RM_C6_REG_7 = 0,
930 RM_C7_REG_7,
931 RM_0F01_REG_0,
3873ba12
L
932 RM_0F01_REG_1,
933 RM_0F01_REG_2,
934 RM_0F01_REG_3,
8eab4136 935 RM_0F01_REG_5,
3873ba12
L
936 RM_0F01_REG_7,
937 RM_0FAE_REG_5,
938 RM_0FAE_REG_6,
939 RM_0FAE_REG_7
51e7da1b 940};
1ceb70f8 941
51e7da1b
L
942enum
943{
944 PREFIX_90 = 0,
3873ba12
L
945 PREFIX_0F10,
946 PREFIX_0F11,
947 PREFIX_0F12,
948 PREFIX_0F16,
7e8b059b
L
949 PREFIX_0F1A,
950 PREFIX_0F1B,
3873ba12
L
951 PREFIX_0F2A,
952 PREFIX_0F2B,
953 PREFIX_0F2C,
954 PREFIX_0F2D,
955 PREFIX_0F2E,
956 PREFIX_0F2F,
957 PREFIX_0F51,
958 PREFIX_0F52,
959 PREFIX_0F53,
960 PREFIX_0F58,
961 PREFIX_0F59,
962 PREFIX_0F5A,
963 PREFIX_0F5B,
964 PREFIX_0F5C,
965 PREFIX_0F5D,
966 PREFIX_0F5E,
967 PREFIX_0F5F,
968 PREFIX_0F60,
969 PREFIX_0F61,
970 PREFIX_0F62,
971 PREFIX_0F6C,
972 PREFIX_0F6D,
973 PREFIX_0F6F,
974 PREFIX_0F70,
975 PREFIX_0F73_REG_3,
976 PREFIX_0F73_REG_7,
977 PREFIX_0F78,
978 PREFIX_0F79,
979 PREFIX_0F7C,
980 PREFIX_0F7D,
981 PREFIX_0F7E,
982 PREFIX_0F7F,
c7b8aa3a
L
983 PREFIX_0FAE_REG_0,
984 PREFIX_0FAE_REG_1,
985 PREFIX_0FAE_REG_2,
986 PREFIX_0FAE_REG_3,
6b40c462
L
987 PREFIX_MOD_0_0FAE_REG_4,
988 PREFIX_MOD_3_0FAE_REG_4,
c5e7287a 989 PREFIX_0FAE_REG_6,
963f3586 990 PREFIX_0FAE_REG_7,
3873ba12 991 PREFIX_0FB8,
f12dc422 992 PREFIX_0FBC,
3873ba12
L
993 PREFIX_0FBD,
994 PREFIX_0FC2,
a8484f96 995 PREFIX_MOD_0_0FC3,
f24bcbaa
L
996 PREFIX_MOD_0_0FC7_REG_6,
997 PREFIX_MOD_3_0FC7_REG_6,
998 PREFIX_MOD_3_0FC7_REG_7,
3873ba12
L
999 PREFIX_0FD0,
1000 PREFIX_0FD6,
1001 PREFIX_0FE6,
1002 PREFIX_0FE7,
1003 PREFIX_0FF0,
1004 PREFIX_0FF7,
1005 PREFIX_0F3810,
1006 PREFIX_0F3814,
1007 PREFIX_0F3815,
1008 PREFIX_0F3817,
1009 PREFIX_0F3820,
1010 PREFIX_0F3821,
1011 PREFIX_0F3822,
1012 PREFIX_0F3823,
1013 PREFIX_0F3824,
1014 PREFIX_0F3825,
1015 PREFIX_0F3828,
1016 PREFIX_0F3829,
1017 PREFIX_0F382A,
1018 PREFIX_0F382B,
1019 PREFIX_0F3830,
1020 PREFIX_0F3831,
1021 PREFIX_0F3832,
1022 PREFIX_0F3833,
1023 PREFIX_0F3834,
1024 PREFIX_0F3835,
1025 PREFIX_0F3837,
1026 PREFIX_0F3838,
1027 PREFIX_0F3839,
1028 PREFIX_0F383A,
1029 PREFIX_0F383B,
1030 PREFIX_0F383C,
1031 PREFIX_0F383D,
1032 PREFIX_0F383E,
1033 PREFIX_0F383F,
1034 PREFIX_0F3840,
1035 PREFIX_0F3841,
1036 PREFIX_0F3880,
1037 PREFIX_0F3881,
6c30d220 1038 PREFIX_0F3882,
a0046408
L
1039 PREFIX_0F38C8,
1040 PREFIX_0F38C9,
1041 PREFIX_0F38CA,
1042 PREFIX_0F38CB,
1043 PREFIX_0F38CC,
1044 PREFIX_0F38CD,
3873ba12
L
1045 PREFIX_0F38DB,
1046 PREFIX_0F38DC,
1047 PREFIX_0F38DD,
1048 PREFIX_0F38DE,
1049 PREFIX_0F38DF,
1050 PREFIX_0F38F0,
1051 PREFIX_0F38F1,
e2e1fcde 1052 PREFIX_0F38F6,
3873ba12
L
1053 PREFIX_0F3A08,
1054 PREFIX_0F3A09,
1055 PREFIX_0F3A0A,
1056 PREFIX_0F3A0B,
1057 PREFIX_0F3A0C,
1058 PREFIX_0F3A0D,
1059 PREFIX_0F3A0E,
1060 PREFIX_0F3A14,
1061 PREFIX_0F3A15,
1062 PREFIX_0F3A16,
1063 PREFIX_0F3A17,
1064 PREFIX_0F3A20,
1065 PREFIX_0F3A21,
1066 PREFIX_0F3A22,
1067 PREFIX_0F3A40,
1068 PREFIX_0F3A41,
1069 PREFIX_0F3A42,
1070 PREFIX_0F3A44,
1071 PREFIX_0F3A60,
1072 PREFIX_0F3A61,
1073 PREFIX_0F3A62,
1074 PREFIX_0F3A63,
a0046408 1075 PREFIX_0F3ACC,
3873ba12 1076 PREFIX_0F3ADF,
592a252b
L
1077 PREFIX_VEX_0F10,
1078 PREFIX_VEX_0F11,
1079 PREFIX_VEX_0F12,
1080 PREFIX_VEX_0F16,
1081 PREFIX_VEX_0F2A,
1082 PREFIX_VEX_0F2C,
1083 PREFIX_VEX_0F2D,
1084 PREFIX_VEX_0F2E,
1085 PREFIX_VEX_0F2F,
43234a1e
L
1086 PREFIX_VEX_0F41,
1087 PREFIX_VEX_0F42,
1088 PREFIX_VEX_0F44,
1089 PREFIX_VEX_0F45,
1090 PREFIX_VEX_0F46,
1091 PREFIX_VEX_0F47,
1ba585e8 1092 PREFIX_VEX_0F4A,
43234a1e 1093 PREFIX_VEX_0F4B,
592a252b
L
1094 PREFIX_VEX_0F51,
1095 PREFIX_VEX_0F52,
1096 PREFIX_VEX_0F53,
1097 PREFIX_VEX_0F58,
1098 PREFIX_VEX_0F59,
1099 PREFIX_VEX_0F5A,
1100 PREFIX_VEX_0F5B,
1101 PREFIX_VEX_0F5C,
1102 PREFIX_VEX_0F5D,
1103 PREFIX_VEX_0F5E,
1104 PREFIX_VEX_0F5F,
1105 PREFIX_VEX_0F60,
1106 PREFIX_VEX_0F61,
1107 PREFIX_VEX_0F62,
1108 PREFIX_VEX_0F63,
1109 PREFIX_VEX_0F64,
1110 PREFIX_VEX_0F65,
1111 PREFIX_VEX_0F66,
1112 PREFIX_VEX_0F67,
1113 PREFIX_VEX_0F68,
1114 PREFIX_VEX_0F69,
1115 PREFIX_VEX_0F6A,
1116 PREFIX_VEX_0F6B,
1117 PREFIX_VEX_0F6C,
1118 PREFIX_VEX_0F6D,
1119 PREFIX_VEX_0F6E,
1120 PREFIX_VEX_0F6F,
1121 PREFIX_VEX_0F70,
1122 PREFIX_VEX_0F71_REG_2,
1123 PREFIX_VEX_0F71_REG_4,
1124 PREFIX_VEX_0F71_REG_6,
1125 PREFIX_VEX_0F72_REG_2,
1126 PREFIX_VEX_0F72_REG_4,
1127 PREFIX_VEX_0F72_REG_6,
1128 PREFIX_VEX_0F73_REG_2,
1129 PREFIX_VEX_0F73_REG_3,
1130 PREFIX_VEX_0F73_REG_6,
1131 PREFIX_VEX_0F73_REG_7,
1132 PREFIX_VEX_0F74,
1133 PREFIX_VEX_0F75,
1134 PREFIX_VEX_0F76,
1135 PREFIX_VEX_0F77,
1136 PREFIX_VEX_0F7C,
1137 PREFIX_VEX_0F7D,
1138 PREFIX_VEX_0F7E,
1139 PREFIX_VEX_0F7F,
43234a1e
L
1140 PREFIX_VEX_0F90,
1141 PREFIX_VEX_0F91,
1142 PREFIX_VEX_0F92,
1143 PREFIX_VEX_0F93,
1144 PREFIX_VEX_0F98,
1ba585e8 1145 PREFIX_VEX_0F99,
592a252b
L
1146 PREFIX_VEX_0FC2,
1147 PREFIX_VEX_0FC4,
1148 PREFIX_VEX_0FC5,
1149 PREFIX_VEX_0FD0,
1150 PREFIX_VEX_0FD1,
1151 PREFIX_VEX_0FD2,
1152 PREFIX_VEX_0FD3,
1153 PREFIX_VEX_0FD4,
1154 PREFIX_VEX_0FD5,
1155 PREFIX_VEX_0FD6,
1156 PREFIX_VEX_0FD7,
1157 PREFIX_VEX_0FD8,
1158 PREFIX_VEX_0FD9,
1159 PREFIX_VEX_0FDA,
1160 PREFIX_VEX_0FDB,
1161 PREFIX_VEX_0FDC,
1162 PREFIX_VEX_0FDD,
1163 PREFIX_VEX_0FDE,
1164 PREFIX_VEX_0FDF,
1165 PREFIX_VEX_0FE0,
1166 PREFIX_VEX_0FE1,
1167 PREFIX_VEX_0FE2,
1168 PREFIX_VEX_0FE3,
1169 PREFIX_VEX_0FE4,
1170 PREFIX_VEX_0FE5,
1171 PREFIX_VEX_0FE6,
1172 PREFIX_VEX_0FE7,
1173 PREFIX_VEX_0FE8,
1174 PREFIX_VEX_0FE9,
1175 PREFIX_VEX_0FEA,
1176 PREFIX_VEX_0FEB,
1177 PREFIX_VEX_0FEC,
1178 PREFIX_VEX_0FED,
1179 PREFIX_VEX_0FEE,
1180 PREFIX_VEX_0FEF,
1181 PREFIX_VEX_0FF0,
1182 PREFIX_VEX_0FF1,
1183 PREFIX_VEX_0FF2,
1184 PREFIX_VEX_0FF3,
1185 PREFIX_VEX_0FF4,
1186 PREFIX_VEX_0FF5,
1187 PREFIX_VEX_0FF6,
1188 PREFIX_VEX_0FF7,
1189 PREFIX_VEX_0FF8,
1190 PREFIX_VEX_0FF9,
1191 PREFIX_VEX_0FFA,
1192 PREFIX_VEX_0FFB,
1193 PREFIX_VEX_0FFC,
1194 PREFIX_VEX_0FFD,
1195 PREFIX_VEX_0FFE,
1196 PREFIX_VEX_0F3800,
1197 PREFIX_VEX_0F3801,
1198 PREFIX_VEX_0F3802,
1199 PREFIX_VEX_0F3803,
1200 PREFIX_VEX_0F3804,
1201 PREFIX_VEX_0F3805,
1202 PREFIX_VEX_0F3806,
1203 PREFIX_VEX_0F3807,
1204 PREFIX_VEX_0F3808,
1205 PREFIX_VEX_0F3809,
1206 PREFIX_VEX_0F380A,
1207 PREFIX_VEX_0F380B,
1208 PREFIX_VEX_0F380C,
1209 PREFIX_VEX_0F380D,
1210 PREFIX_VEX_0F380E,
1211 PREFIX_VEX_0F380F,
1212 PREFIX_VEX_0F3813,
6c30d220 1213 PREFIX_VEX_0F3816,
592a252b
L
1214 PREFIX_VEX_0F3817,
1215 PREFIX_VEX_0F3818,
1216 PREFIX_VEX_0F3819,
1217 PREFIX_VEX_0F381A,
1218 PREFIX_VEX_0F381C,
1219 PREFIX_VEX_0F381D,
1220 PREFIX_VEX_0F381E,
1221 PREFIX_VEX_0F3820,
1222 PREFIX_VEX_0F3821,
1223 PREFIX_VEX_0F3822,
1224 PREFIX_VEX_0F3823,
1225 PREFIX_VEX_0F3824,
1226 PREFIX_VEX_0F3825,
1227 PREFIX_VEX_0F3828,
1228 PREFIX_VEX_0F3829,
1229 PREFIX_VEX_0F382A,
1230 PREFIX_VEX_0F382B,
1231 PREFIX_VEX_0F382C,
1232 PREFIX_VEX_0F382D,
1233 PREFIX_VEX_0F382E,
1234 PREFIX_VEX_0F382F,
1235 PREFIX_VEX_0F3830,
1236 PREFIX_VEX_0F3831,
1237 PREFIX_VEX_0F3832,
1238 PREFIX_VEX_0F3833,
1239 PREFIX_VEX_0F3834,
1240 PREFIX_VEX_0F3835,
6c30d220 1241 PREFIX_VEX_0F3836,
592a252b
L
1242 PREFIX_VEX_0F3837,
1243 PREFIX_VEX_0F3838,
1244 PREFIX_VEX_0F3839,
1245 PREFIX_VEX_0F383A,
1246 PREFIX_VEX_0F383B,
1247 PREFIX_VEX_0F383C,
1248 PREFIX_VEX_0F383D,
1249 PREFIX_VEX_0F383E,
1250 PREFIX_VEX_0F383F,
1251 PREFIX_VEX_0F3840,
1252 PREFIX_VEX_0F3841,
6c30d220
L
1253 PREFIX_VEX_0F3845,
1254 PREFIX_VEX_0F3846,
1255 PREFIX_VEX_0F3847,
1256 PREFIX_VEX_0F3858,
1257 PREFIX_VEX_0F3859,
1258 PREFIX_VEX_0F385A,
1259 PREFIX_VEX_0F3878,
1260 PREFIX_VEX_0F3879,
1261 PREFIX_VEX_0F388C,
1262 PREFIX_VEX_0F388E,
1263 PREFIX_VEX_0F3890,
1264 PREFIX_VEX_0F3891,
1265 PREFIX_VEX_0F3892,
1266 PREFIX_VEX_0F3893,
592a252b
L
1267 PREFIX_VEX_0F3896,
1268 PREFIX_VEX_0F3897,
1269 PREFIX_VEX_0F3898,
1270 PREFIX_VEX_0F3899,
1271 PREFIX_VEX_0F389A,
1272 PREFIX_VEX_0F389B,
1273 PREFIX_VEX_0F389C,
1274 PREFIX_VEX_0F389D,
1275 PREFIX_VEX_0F389E,
1276 PREFIX_VEX_0F389F,
1277 PREFIX_VEX_0F38A6,
1278 PREFIX_VEX_0F38A7,
1279 PREFIX_VEX_0F38A8,
1280 PREFIX_VEX_0F38A9,
1281 PREFIX_VEX_0F38AA,
1282 PREFIX_VEX_0F38AB,
1283 PREFIX_VEX_0F38AC,
1284 PREFIX_VEX_0F38AD,
1285 PREFIX_VEX_0F38AE,
1286 PREFIX_VEX_0F38AF,
1287 PREFIX_VEX_0F38B6,
1288 PREFIX_VEX_0F38B7,
1289 PREFIX_VEX_0F38B8,
1290 PREFIX_VEX_0F38B9,
1291 PREFIX_VEX_0F38BA,
1292 PREFIX_VEX_0F38BB,
1293 PREFIX_VEX_0F38BC,
1294 PREFIX_VEX_0F38BD,
1295 PREFIX_VEX_0F38BE,
1296 PREFIX_VEX_0F38BF,
1297 PREFIX_VEX_0F38DB,
1298 PREFIX_VEX_0F38DC,
1299 PREFIX_VEX_0F38DD,
1300 PREFIX_VEX_0F38DE,
1301 PREFIX_VEX_0F38DF,
f12dc422
L
1302 PREFIX_VEX_0F38F2,
1303 PREFIX_VEX_0F38F3_REG_1,
1304 PREFIX_VEX_0F38F3_REG_2,
1305 PREFIX_VEX_0F38F3_REG_3,
6c30d220
L
1306 PREFIX_VEX_0F38F5,
1307 PREFIX_VEX_0F38F6,
f12dc422 1308 PREFIX_VEX_0F38F7,
6c30d220
L
1309 PREFIX_VEX_0F3A00,
1310 PREFIX_VEX_0F3A01,
1311 PREFIX_VEX_0F3A02,
592a252b
L
1312 PREFIX_VEX_0F3A04,
1313 PREFIX_VEX_0F3A05,
1314 PREFIX_VEX_0F3A06,
1315 PREFIX_VEX_0F3A08,
1316 PREFIX_VEX_0F3A09,
1317 PREFIX_VEX_0F3A0A,
1318 PREFIX_VEX_0F3A0B,
1319 PREFIX_VEX_0F3A0C,
1320 PREFIX_VEX_0F3A0D,
1321 PREFIX_VEX_0F3A0E,
1322 PREFIX_VEX_0F3A0F,
1323 PREFIX_VEX_0F3A14,
1324 PREFIX_VEX_0F3A15,
1325 PREFIX_VEX_0F3A16,
1326 PREFIX_VEX_0F3A17,
1327 PREFIX_VEX_0F3A18,
1328 PREFIX_VEX_0F3A19,
1329 PREFIX_VEX_0F3A1D,
1330 PREFIX_VEX_0F3A20,
1331 PREFIX_VEX_0F3A21,
1332 PREFIX_VEX_0F3A22,
43234a1e 1333 PREFIX_VEX_0F3A30,
1ba585e8 1334 PREFIX_VEX_0F3A31,
43234a1e 1335 PREFIX_VEX_0F3A32,
1ba585e8 1336 PREFIX_VEX_0F3A33,
6c30d220
L
1337 PREFIX_VEX_0F3A38,
1338 PREFIX_VEX_0F3A39,
592a252b
L
1339 PREFIX_VEX_0F3A40,
1340 PREFIX_VEX_0F3A41,
1341 PREFIX_VEX_0F3A42,
1342 PREFIX_VEX_0F3A44,
6c30d220 1343 PREFIX_VEX_0F3A46,
592a252b
L
1344 PREFIX_VEX_0F3A48,
1345 PREFIX_VEX_0F3A49,
1346 PREFIX_VEX_0F3A4A,
1347 PREFIX_VEX_0F3A4B,
1348 PREFIX_VEX_0F3A4C,
1349 PREFIX_VEX_0F3A5C,
1350 PREFIX_VEX_0F3A5D,
1351 PREFIX_VEX_0F3A5E,
1352 PREFIX_VEX_0F3A5F,
1353 PREFIX_VEX_0F3A60,
1354 PREFIX_VEX_0F3A61,
1355 PREFIX_VEX_0F3A62,
1356 PREFIX_VEX_0F3A63,
1357 PREFIX_VEX_0F3A68,
1358 PREFIX_VEX_0F3A69,
1359 PREFIX_VEX_0F3A6A,
1360 PREFIX_VEX_0F3A6B,
1361 PREFIX_VEX_0F3A6C,
1362 PREFIX_VEX_0F3A6D,
1363 PREFIX_VEX_0F3A6E,
1364 PREFIX_VEX_0F3A6F,
1365 PREFIX_VEX_0F3A78,
1366 PREFIX_VEX_0F3A79,
1367 PREFIX_VEX_0F3A7A,
1368 PREFIX_VEX_0F3A7B,
1369 PREFIX_VEX_0F3A7C,
1370 PREFIX_VEX_0F3A7D,
1371 PREFIX_VEX_0F3A7E,
1372 PREFIX_VEX_0F3A7F,
6c30d220 1373 PREFIX_VEX_0F3ADF,
43234a1e
L
1374 PREFIX_VEX_0F3AF0,
1375
1376 PREFIX_EVEX_0F10,
1377 PREFIX_EVEX_0F11,
1378 PREFIX_EVEX_0F12,
1379 PREFIX_EVEX_0F13,
1380 PREFIX_EVEX_0F14,
1381 PREFIX_EVEX_0F15,
1382 PREFIX_EVEX_0F16,
1383 PREFIX_EVEX_0F17,
1384 PREFIX_EVEX_0F28,
1385 PREFIX_EVEX_0F29,
1386 PREFIX_EVEX_0F2A,
1387 PREFIX_EVEX_0F2B,
1388 PREFIX_EVEX_0F2C,
1389 PREFIX_EVEX_0F2D,
1390 PREFIX_EVEX_0F2E,
1391 PREFIX_EVEX_0F2F,
1392 PREFIX_EVEX_0F51,
90a915bf
IT
1393 PREFIX_EVEX_0F54,
1394 PREFIX_EVEX_0F55,
1395 PREFIX_EVEX_0F56,
1396 PREFIX_EVEX_0F57,
43234a1e
L
1397 PREFIX_EVEX_0F58,
1398 PREFIX_EVEX_0F59,
1399 PREFIX_EVEX_0F5A,
1400 PREFIX_EVEX_0F5B,
1401 PREFIX_EVEX_0F5C,
1402 PREFIX_EVEX_0F5D,
1403 PREFIX_EVEX_0F5E,
1404 PREFIX_EVEX_0F5F,
1ba585e8
IT
1405 PREFIX_EVEX_0F60,
1406 PREFIX_EVEX_0F61,
43234a1e 1407 PREFIX_EVEX_0F62,
1ba585e8
IT
1408 PREFIX_EVEX_0F63,
1409 PREFIX_EVEX_0F64,
1410 PREFIX_EVEX_0F65,
43234a1e 1411 PREFIX_EVEX_0F66,
1ba585e8
IT
1412 PREFIX_EVEX_0F67,
1413 PREFIX_EVEX_0F68,
1414 PREFIX_EVEX_0F69,
43234a1e 1415 PREFIX_EVEX_0F6A,
1ba585e8 1416 PREFIX_EVEX_0F6B,
43234a1e
L
1417 PREFIX_EVEX_0F6C,
1418 PREFIX_EVEX_0F6D,
1419 PREFIX_EVEX_0F6E,
1420 PREFIX_EVEX_0F6F,
1421 PREFIX_EVEX_0F70,
1ba585e8
IT
1422 PREFIX_EVEX_0F71_REG_2,
1423 PREFIX_EVEX_0F71_REG_4,
1424 PREFIX_EVEX_0F71_REG_6,
43234a1e
L
1425 PREFIX_EVEX_0F72_REG_0,
1426 PREFIX_EVEX_0F72_REG_1,
1427 PREFIX_EVEX_0F72_REG_2,
1428 PREFIX_EVEX_0F72_REG_4,
1429 PREFIX_EVEX_0F72_REG_6,
1430 PREFIX_EVEX_0F73_REG_2,
1ba585e8 1431 PREFIX_EVEX_0F73_REG_3,
43234a1e 1432 PREFIX_EVEX_0F73_REG_6,
1ba585e8
IT
1433 PREFIX_EVEX_0F73_REG_7,
1434 PREFIX_EVEX_0F74,
1435 PREFIX_EVEX_0F75,
43234a1e
L
1436 PREFIX_EVEX_0F76,
1437 PREFIX_EVEX_0F78,
1438 PREFIX_EVEX_0F79,
1439 PREFIX_EVEX_0F7A,
1440 PREFIX_EVEX_0F7B,
1441 PREFIX_EVEX_0F7E,
1442 PREFIX_EVEX_0F7F,
1443 PREFIX_EVEX_0FC2,
1ba585e8
IT
1444 PREFIX_EVEX_0FC4,
1445 PREFIX_EVEX_0FC5,
43234a1e 1446 PREFIX_EVEX_0FC6,
1ba585e8 1447 PREFIX_EVEX_0FD1,
43234a1e
L
1448 PREFIX_EVEX_0FD2,
1449 PREFIX_EVEX_0FD3,
1450 PREFIX_EVEX_0FD4,
1ba585e8 1451 PREFIX_EVEX_0FD5,
43234a1e 1452 PREFIX_EVEX_0FD6,
1ba585e8
IT
1453 PREFIX_EVEX_0FD8,
1454 PREFIX_EVEX_0FD9,
1455 PREFIX_EVEX_0FDA,
43234a1e 1456 PREFIX_EVEX_0FDB,
1ba585e8
IT
1457 PREFIX_EVEX_0FDC,
1458 PREFIX_EVEX_0FDD,
1459 PREFIX_EVEX_0FDE,
43234a1e 1460 PREFIX_EVEX_0FDF,
1ba585e8
IT
1461 PREFIX_EVEX_0FE0,
1462 PREFIX_EVEX_0FE1,
43234a1e 1463 PREFIX_EVEX_0FE2,
1ba585e8
IT
1464 PREFIX_EVEX_0FE3,
1465 PREFIX_EVEX_0FE4,
1466 PREFIX_EVEX_0FE5,
43234a1e
L
1467 PREFIX_EVEX_0FE6,
1468 PREFIX_EVEX_0FE7,
1ba585e8
IT
1469 PREFIX_EVEX_0FE8,
1470 PREFIX_EVEX_0FE9,
1471 PREFIX_EVEX_0FEA,
43234a1e 1472 PREFIX_EVEX_0FEB,
1ba585e8
IT
1473 PREFIX_EVEX_0FEC,
1474 PREFIX_EVEX_0FED,
1475 PREFIX_EVEX_0FEE,
43234a1e 1476 PREFIX_EVEX_0FEF,
1ba585e8 1477 PREFIX_EVEX_0FF1,
43234a1e
L
1478 PREFIX_EVEX_0FF2,
1479 PREFIX_EVEX_0FF3,
1480 PREFIX_EVEX_0FF4,
1ba585e8
IT
1481 PREFIX_EVEX_0FF5,
1482 PREFIX_EVEX_0FF6,
1483 PREFIX_EVEX_0FF8,
1484 PREFIX_EVEX_0FF9,
43234a1e
L
1485 PREFIX_EVEX_0FFA,
1486 PREFIX_EVEX_0FFB,
1ba585e8
IT
1487 PREFIX_EVEX_0FFC,
1488 PREFIX_EVEX_0FFD,
43234a1e 1489 PREFIX_EVEX_0FFE,
1ba585e8
IT
1490 PREFIX_EVEX_0F3800,
1491 PREFIX_EVEX_0F3804,
1492 PREFIX_EVEX_0F380B,
43234a1e
L
1493 PREFIX_EVEX_0F380C,
1494 PREFIX_EVEX_0F380D,
1ba585e8 1495 PREFIX_EVEX_0F3810,
43234a1e
L
1496 PREFIX_EVEX_0F3811,
1497 PREFIX_EVEX_0F3812,
1498 PREFIX_EVEX_0F3813,
1499 PREFIX_EVEX_0F3814,
1500 PREFIX_EVEX_0F3815,
1501 PREFIX_EVEX_0F3816,
1502 PREFIX_EVEX_0F3818,
1503 PREFIX_EVEX_0F3819,
1504 PREFIX_EVEX_0F381A,
1505 PREFIX_EVEX_0F381B,
1ba585e8
IT
1506 PREFIX_EVEX_0F381C,
1507 PREFIX_EVEX_0F381D,
43234a1e
L
1508 PREFIX_EVEX_0F381E,
1509 PREFIX_EVEX_0F381F,
1ba585e8 1510 PREFIX_EVEX_0F3820,
43234a1e
L
1511 PREFIX_EVEX_0F3821,
1512 PREFIX_EVEX_0F3822,
1513 PREFIX_EVEX_0F3823,
1514 PREFIX_EVEX_0F3824,
1515 PREFIX_EVEX_0F3825,
1ba585e8 1516 PREFIX_EVEX_0F3826,
43234a1e
L
1517 PREFIX_EVEX_0F3827,
1518 PREFIX_EVEX_0F3828,
1519 PREFIX_EVEX_0F3829,
1520 PREFIX_EVEX_0F382A,
1ba585e8 1521 PREFIX_EVEX_0F382B,
43234a1e
L
1522 PREFIX_EVEX_0F382C,
1523 PREFIX_EVEX_0F382D,
1ba585e8 1524 PREFIX_EVEX_0F3830,
43234a1e
L
1525 PREFIX_EVEX_0F3831,
1526 PREFIX_EVEX_0F3832,
1527 PREFIX_EVEX_0F3833,
1528 PREFIX_EVEX_0F3834,
1529 PREFIX_EVEX_0F3835,
1530 PREFIX_EVEX_0F3836,
1531 PREFIX_EVEX_0F3837,
1ba585e8 1532 PREFIX_EVEX_0F3838,
43234a1e
L
1533 PREFIX_EVEX_0F3839,
1534 PREFIX_EVEX_0F383A,
1535 PREFIX_EVEX_0F383B,
1ba585e8 1536 PREFIX_EVEX_0F383C,
43234a1e 1537 PREFIX_EVEX_0F383D,
1ba585e8 1538 PREFIX_EVEX_0F383E,
43234a1e
L
1539 PREFIX_EVEX_0F383F,
1540 PREFIX_EVEX_0F3840,
1541 PREFIX_EVEX_0F3842,
1542 PREFIX_EVEX_0F3843,
1543 PREFIX_EVEX_0F3844,
1544 PREFIX_EVEX_0F3845,
1545 PREFIX_EVEX_0F3846,
1546 PREFIX_EVEX_0F3847,
1547 PREFIX_EVEX_0F384C,
1548 PREFIX_EVEX_0F384D,
1549 PREFIX_EVEX_0F384E,
1550 PREFIX_EVEX_0F384F,
47acf0bd
IT
1551 PREFIX_EVEX_0F3852,
1552 PREFIX_EVEX_0F3853,
43234a1e
L
1553 PREFIX_EVEX_0F3858,
1554 PREFIX_EVEX_0F3859,
1555 PREFIX_EVEX_0F385A,
1556 PREFIX_EVEX_0F385B,
1557 PREFIX_EVEX_0F3864,
1558 PREFIX_EVEX_0F3865,
1ba585e8
IT
1559 PREFIX_EVEX_0F3866,
1560 PREFIX_EVEX_0F3875,
43234a1e
L
1561 PREFIX_EVEX_0F3876,
1562 PREFIX_EVEX_0F3877,
1ba585e8
IT
1563 PREFIX_EVEX_0F3878,
1564 PREFIX_EVEX_0F3879,
1565 PREFIX_EVEX_0F387A,
1566 PREFIX_EVEX_0F387B,
43234a1e 1567 PREFIX_EVEX_0F387C,
1ba585e8 1568 PREFIX_EVEX_0F387D,
43234a1e
L
1569 PREFIX_EVEX_0F387E,
1570 PREFIX_EVEX_0F387F,
14f195c9 1571 PREFIX_EVEX_0F3883,
43234a1e
L
1572 PREFIX_EVEX_0F3888,
1573 PREFIX_EVEX_0F3889,
1574 PREFIX_EVEX_0F388A,
1575 PREFIX_EVEX_0F388B,
1ba585e8 1576 PREFIX_EVEX_0F388D,
43234a1e
L
1577 PREFIX_EVEX_0F3890,
1578 PREFIX_EVEX_0F3891,
1579 PREFIX_EVEX_0F3892,
1580 PREFIX_EVEX_0F3893,
1581 PREFIX_EVEX_0F3896,
1582 PREFIX_EVEX_0F3897,
1583 PREFIX_EVEX_0F3898,
1584 PREFIX_EVEX_0F3899,
1585 PREFIX_EVEX_0F389A,
1586 PREFIX_EVEX_0F389B,
1587 PREFIX_EVEX_0F389C,
1588 PREFIX_EVEX_0F389D,
1589 PREFIX_EVEX_0F389E,
1590 PREFIX_EVEX_0F389F,
1591 PREFIX_EVEX_0F38A0,
1592 PREFIX_EVEX_0F38A1,
1593 PREFIX_EVEX_0F38A2,
1594 PREFIX_EVEX_0F38A3,
1595 PREFIX_EVEX_0F38A6,
1596 PREFIX_EVEX_0F38A7,
1597 PREFIX_EVEX_0F38A8,
1598 PREFIX_EVEX_0F38A9,
1599 PREFIX_EVEX_0F38AA,
1600 PREFIX_EVEX_0F38AB,
1601 PREFIX_EVEX_0F38AC,
1602 PREFIX_EVEX_0F38AD,
1603 PREFIX_EVEX_0F38AE,
1604 PREFIX_EVEX_0F38AF,
2cc1b5aa
IT
1605 PREFIX_EVEX_0F38B4,
1606 PREFIX_EVEX_0F38B5,
43234a1e
L
1607 PREFIX_EVEX_0F38B6,
1608 PREFIX_EVEX_0F38B7,
1609 PREFIX_EVEX_0F38B8,
1610 PREFIX_EVEX_0F38B9,
1611 PREFIX_EVEX_0F38BA,
1612 PREFIX_EVEX_0F38BB,
1613 PREFIX_EVEX_0F38BC,
1614 PREFIX_EVEX_0F38BD,
1615 PREFIX_EVEX_0F38BE,
1616 PREFIX_EVEX_0F38BF,
1617 PREFIX_EVEX_0F38C4,
1618 PREFIX_EVEX_0F38C6_REG_1,
1619 PREFIX_EVEX_0F38C6_REG_2,
1620 PREFIX_EVEX_0F38C6_REG_5,
1621 PREFIX_EVEX_0F38C6_REG_6,
1622 PREFIX_EVEX_0F38C7_REG_1,
1623 PREFIX_EVEX_0F38C7_REG_2,
1624 PREFIX_EVEX_0F38C7_REG_5,
1625 PREFIX_EVEX_0F38C7_REG_6,
1626 PREFIX_EVEX_0F38C8,
1627 PREFIX_EVEX_0F38CA,
1628 PREFIX_EVEX_0F38CB,
1629 PREFIX_EVEX_0F38CC,
1630 PREFIX_EVEX_0F38CD,
1631
1632 PREFIX_EVEX_0F3A00,
1633 PREFIX_EVEX_0F3A01,
1634 PREFIX_EVEX_0F3A03,
1635 PREFIX_EVEX_0F3A04,
1636 PREFIX_EVEX_0F3A05,
1637 PREFIX_EVEX_0F3A08,
1638 PREFIX_EVEX_0F3A09,
1639 PREFIX_EVEX_0F3A0A,
1640 PREFIX_EVEX_0F3A0B,
1ba585e8
IT
1641 PREFIX_EVEX_0F3A0F,
1642 PREFIX_EVEX_0F3A14,
1643 PREFIX_EVEX_0F3A15,
90a915bf 1644 PREFIX_EVEX_0F3A16,
43234a1e
L
1645 PREFIX_EVEX_0F3A17,
1646 PREFIX_EVEX_0F3A18,
1647 PREFIX_EVEX_0F3A19,
1648 PREFIX_EVEX_0F3A1A,
1649 PREFIX_EVEX_0F3A1B,
1650 PREFIX_EVEX_0F3A1D,
1651 PREFIX_EVEX_0F3A1E,
1652 PREFIX_EVEX_0F3A1F,
1ba585e8 1653 PREFIX_EVEX_0F3A20,
43234a1e 1654 PREFIX_EVEX_0F3A21,
90a915bf 1655 PREFIX_EVEX_0F3A22,
43234a1e
L
1656 PREFIX_EVEX_0F3A23,
1657 PREFIX_EVEX_0F3A25,
1658 PREFIX_EVEX_0F3A26,
1659 PREFIX_EVEX_0F3A27,
1660 PREFIX_EVEX_0F3A38,
1661 PREFIX_EVEX_0F3A39,
1662 PREFIX_EVEX_0F3A3A,
1663 PREFIX_EVEX_0F3A3B,
1ba585e8
IT
1664 PREFIX_EVEX_0F3A3E,
1665 PREFIX_EVEX_0F3A3F,
1666 PREFIX_EVEX_0F3A42,
43234a1e 1667 PREFIX_EVEX_0F3A43,
90a915bf
IT
1668 PREFIX_EVEX_0F3A50,
1669 PREFIX_EVEX_0F3A51,
43234a1e 1670 PREFIX_EVEX_0F3A54,
90a915bf
IT
1671 PREFIX_EVEX_0F3A55,
1672 PREFIX_EVEX_0F3A56,
1673 PREFIX_EVEX_0F3A57,
1674 PREFIX_EVEX_0F3A66,
1675 PREFIX_EVEX_0F3A67
51e7da1b 1676};
4e7d34a6 1677
51e7da1b
L
1678enum
1679{
1680 X86_64_06 = 0,
3873ba12
L
1681 X86_64_07,
1682 X86_64_0D,
1683 X86_64_16,
1684 X86_64_17,
1685 X86_64_1E,
1686 X86_64_1F,
1687 X86_64_27,
1688 X86_64_2F,
1689 X86_64_37,
1690 X86_64_3F,
1691 X86_64_60,
1692 X86_64_61,
1693 X86_64_62,
1694 X86_64_63,
1695 X86_64_6D,
1696 X86_64_6F,
1697 X86_64_9A,
1698 X86_64_C4,
1699 X86_64_C5,
1700 X86_64_CE,
1701 X86_64_D4,
1702 X86_64_D5,
a72d2af2
L
1703 X86_64_E8,
1704 X86_64_E9,
3873ba12
L
1705 X86_64_EA,
1706 X86_64_0F01_REG_0,
1707 X86_64_0F01_REG_1,
1708 X86_64_0F01_REG_2,
1709 X86_64_0F01_REG_3
51e7da1b 1710};
4e7d34a6 1711
51e7da1b
L
1712enum
1713{
1714 THREE_BYTE_0F38 = 0,
3873ba12
L
1715 THREE_BYTE_0F3A,
1716 THREE_BYTE_0F7A
51e7da1b 1717};
4e7d34a6 1718
f88c9eb0
SP
1719enum
1720{
5dd85c99
SP
1721 XOP_08 = 0,
1722 XOP_09,
f88c9eb0
SP
1723 XOP_0A
1724};
1725
51e7da1b
L
1726enum
1727{
1728 VEX_0F = 0,
3873ba12
L
1729 VEX_0F38,
1730 VEX_0F3A
51e7da1b 1731};
c0f3af97 1732
43234a1e
L
1733enum
1734{
1735 EVEX_0F = 0,
1736 EVEX_0F38,
1737 EVEX_0F3A
1738};
1739
51e7da1b
L
1740enum
1741{
592a252b
L
1742 VEX_LEN_0F10_P_1 = 0,
1743 VEX_LEN_0F10_P_3,
1744 VEX_LEN_0F11_P_1,
1745 VEX_LEN_0F11_P_3,
1746 VEX_LEN_0F12_P_0_M_0,
1747 VEX_LEN_0F12_P_0_M_1,
1748 VEX_LEN_0F12_P_2,
1749 VEX_LEN_0F13_M_0,
1750 VEX_LEN_0F16_P_0_M_0,
1751 VEX_LEN_0F16_P_0_M_1,
1752 VEX_LEN_0F16_P_2,
1753 VEX_LEN_0F17_M_0,
1754 VEX_LEN_0F2A_P_1,
1755 VEX_LEN_0F2A_P_3,
1756 VEX_LEN_0F2C_P_1,
1757 VEX_LEN_0F2C_P_3,
1758 VEX_LEN_0F2D_P_1,
1759 VEX_LEN_0F2D_P_3,
1760 VEX_LEN_0F2E_P_0,
1761 VEX_LEN_0F2E_P_2,
1762 VEX_LEN_0F2F_P_0,
1763 VEX_LEN_0F2F_P_2,
43234a1e 1764 VEX_LEN_0F41_P_0,
1ba585e8 1765 VEX_LEN_0F41_P_2,
43234a1e 1766 VEX_LEN_0F42_P_0,
1ba585e8 1767 VEX_LEN_0F42_P_2,
43234a1e 1768 VEX_LEN_0F44_P_0,
1ba585e8 1769 VEX_LEN_0F44_P_2,
43234a1e 1770 VEX_LEN_0F45_P_0,
1ba585e8 1771 VEX_LEN_0F45_P_2,
43234a1e 1772 VEX_LEN_0F46_P_0,
1ba585e8 1773 VEX_LEN_0F46_P_2,
43234a1e 1774 VEX_LEN_0F47_P_0,
1ba585e8
IT
1775 VEX_LEN_0F47_P_2,
1776 VEX_LEN_0F4A_P_0,
1777 VEX_LEN_0F4A_P_2,
1778 VEX_LEN_0F4B_P_0,
43234a1e 1779 VEX_LEN_0F4B_P_2,
592a252b
L
1780 VEX_LEN_0F51_P_1,
1781 VEX_LEN_0F51_P_3,
1782 VEX_LEN_0F52_P_1,
1783 VEX_LEN_0F53_P_1,
1784 VEX_LEN_0F58_P_1,
1785 VEX_LEN_0F58_P_3,
1786 VEX_LEN_0F59_P_1,
1787 VEX_LEN_0F59_P_3,
1788 VEX_LEN_0F5A_P_1,
1789 VEX_LEN_0F5A_P_3,
1790 VEX_LEN_0F5C_P_1,
1791 VEX_LEN_0F5C_P_3,
1792 VEX_LEN_0F5D_P_1,
1793 VEX_LEN_0F5D_P_3,
1794 VEX_LEN_0F5E_P_1,
1795 VEX_LEN_0F5E_P_3,
1796 VEX_LEN_0F5F_P_1,
1797 VEX_LEN_0F5F_P_3,
592a252b 1798 VEX_LEN_0F6E_P_2,
592a252b
L
1799 VEX_LEN_0F7E_P_1,
1800 VEX_LEN_0F7E_P_2,
43234a1e 1801 VEX_LEN_0F90_P_0,
1ba585e8 1802 VEX_LEN_0F90_P_2,
43234a1e 1803 VEX_LEN_0F91_P_0,
1ba585e8 1804 VEX_LEN_0F91_P_2,
43234a1e 1805 VEX_LEN_0F92_P_0,
90a915bf 1806 VEX_LEN_0F92_P_2,
1ba585e8 1807 VEX_LEN_0F92_P_3,
43234a1e 1808 VEX_LEN_0F93_P_0,
90a915bf 1809 VEX_LEN_0F93_P_2,
1ba585e8 1810 VEX_LEN_0F93_P_3,
43234a1e 1811 VEX_LEN_0F98_P_0,
1ba585e8
IT
1812 VEX_LEN_0F98_P_2,
1813 VEX_LEN_0F99_P_0,
1814 VEX_LEN_0F99_P_2,
592a252b
L
1815 VEX_LEN_0FAE_R_2_M_0,
1816 VEX_LEN_0FAE_R_3_M_0,
1817 VEX_LEN_0FC2_P_1,
1818 VEX_LEN_0FC2_P_3,
1819 VEX_LEN_0FC4_P_2,
1820 VEX_LEN_0FC5_P_2,
592a252b 1821 VEX_LEN_0FD6_P_2,
592a252b 1822 VEX_LEN_0FF7_P_2,
6c30d220
L
1823 VEX_LEN_0F3816_P_2,
1824 VEX_LEN_0F3819_P_2,
592a252b 1825 VEX_LEN_0F381A_P_2_M_0,
6c30d220 1826 VEX_LEN_0F3836_P_2,
592a252b 1827 VEX_LEN_0F3841_P_2,
6c30d220 1828 VEX_LEN_0F385A_P_2_M_0,
592a252b
L
1829 VEX_LEN_0F38DB_P_2,
1830 VEX_LEN_0F38DC_P_2,
1831 VEX_LEN_0F38DD_P_2,
1832 VEX_LEN_0F38DE_P_2,
1833 VEX_LEN_0F38DF_P_2,
f12dc422
L
1834 VEX_LEN_0F38F2_P_0,
1835 VEX_LEN_0F38F3_R_1_P_0,
1836 VEX_LEN_0F38F3_R_2_P_0,
1837 VEX_LEN_0F38F3_R_3_P_0,
6c30d220
L
1838 VEX_LEN_0F38F5_P_0,
1839 VEX_LEN_0F38F5_P_1,
1840 VEX_LEN_0F38F5_P_3,
1841 VEX_LEN_0F38F6_P_3,
f12dc422 1842 VEX_LEN_0F38F7_P_0,
6c30d220
L
1843 VEX_LEN_0F38F7_P_1,
1844 VEX_LEN_0F38F7_P_2,
1845 VEX_LEN_0F38F7_P_3,
1846 VEX_LEN_0F3A00_P_2,
1847 VEX_LEN_0F3A01_P_2,
592a252b
L
1848 VEX_LEN_0F3A06_P_2,
1849 VEX_LEN_0F3A0A_P_2,
1850 VEX_LEN_0F3A0B_P_2,
592a252b
L
1851 VEX_LEN_0F3A14_P_2,
1852 VEX_LEN_0F3A15_P_2,
1853 VEX_LEN_0F3A16_P_2,
1854 VEX_LEN_0F3A17_P_2,
1855 VEX_LEN_0F3A18_P_2,
1856 VEX_LEN_0F3A19_P_2,
1857 VEX_LEN_0F3A20_P_2,
1858 VEX_LEN_0F3A21_P_2,
1859 VEX_LEN_0F3A22_P_2,
43234a1e 1860 VEX_LEN_0F3A30_P_2,
1ba585e8 1861 VEX_LEN_0F3A31_P_2,
43234a1e 1862 VEX_LEN_0F3A32_P_2,
1ba585e8 1863 VEX_LEN_0F3A33_P_2,
6c30d220
L
1864 VEX_LEN_0F3A38_P_2,
1865 VEX_LEN_0F3A39_P_2,
592a252b 1866 VEX_LEN_0F3A41_P_2,
592a252b 1867 VEX_LEN_0F3A44_P_2,
6c30d220 1868 VEX_LEN_0F3A46_P_2,
592a252b
L
1869 VEX_LEN_0F3A60_P_2,
1870 VEX_LEN_0F3A61_P_2,
1871 VEX_LEN_0F3A62_P_2,
1872 VEX_LEN_0F3A63_P_2,
1873 VEX_LEN_0F3A6A_P_2,
1874 VEX_LEN_0F3A6B_P_2,
1875 VEX_LEN_0F3A6E_P_2,
1876 VEX_LEN_0F3A6F_P_2,
1877 VEX_LEN_0F3A7A_P_2,
1878 VEX_LEN_0F3A7B_P_2,
1879 VEX_LEN_0F3A7E_P_2,
1880 VEX_LEN_0F3A7F_P_2,
1881 VEX_LEN_0F3ADF_P_2,
6c30d220 1882 VEX_LEN_0F3AF0_P_3,
ff688e1f
L
1883 VEX_LEN_0FXOP_08_CC,
1884 VEX_LEN_0FXOP_08_CD,
1885 VEX_LEN_0FXOP_08_CE,
1886 VEX_LEN_0FXOP_08_CF,
1887 VEX_LEN_0FXOP_08_EC,
1888 VEX_LEN_0FXOP_08_ED,
1889 VEX_LEN_0FXOP_08_EE,
1890 VEX_LEN_0FXOP_08_EF,
592a252b
L
1891 VEX_LEN_0FXOP_09_80,
1892 VEX_LEN_0FXOP_09_81
51e7da1b 1893};
c0f3af97 1894
9e30b8e0
L
1895enum
1896{
592a252b
L
1897 VEX_W_0F10_P_0 = 0,
1898 VEX_W_0F10_P_1,
1899 VEX_W_0F10_P_2,
1900 VEX_W_0F10_P_3,
1901 VEX_W_0F11_P_0,
1902 VEX_W_0F11_P_1,
1903 VEX_W_0F11_P_2,
1904 VEX_W_0F11_P_3,
1905 VEX_W_0F12_P_0_M_0,
1906 VEX_W_0F12_P_0_M_1,
1907 VEX_W_0F12_P_1,
1908 VEX_W_0F12_P_2,
1909 VEX_W_0F12_P_3,
1910 VEX_W_0F13_M_0,
1911 VEX_W_0F14,
1912 VEX_W_0F15,
1913 VEX_W_0F16_P_0_M_0,
1914 VEX_W_0F16_P_0_M_1,
1915 VEX_W_0F16_P_1,
1916 VEX_W_0F16_P_2,
1917 VEX_W_0F17_M_0,
1918 VEX_W_0F28,
1919 VEX_W_0F29,
1920 VEX_W_0F2B_M_0,
1921 VEX_W_0F2E_P_0,
1922 VEX_W_0F2E_P_2,
1923 VEX_W_0F2F_P_0,
1924 VEX_W_0F2F_P_2,
43234a1e 1925 VEX_W_0F41_P_0_LEN_1,
1ba585e8 1926 VEX_W_0F41_P_2_LEN_1,
43234a1e 1927 VEX_W_0F42_P_0_LEN_1,
1ba585e8 1928 VEX_W_0F42_P_2_LEN_1,
43234a1e 1929 VEX_W_0F44_P_0_LEN_0,
1ba585e8 1930 VEX_W_0F44_P_2_LEN_0,
43234a1e 1931 VEX_W_0F45_P_0_LEN_1,
1ba585e8 1932 VEX_W_0F45_P_2_LEN_1,
43234a1e 1933 VEX_W_0F46_P_0_LEN_1,
1ba585e8 1934 VEX_W_0F46_P_2_LEN_1,
43234a1e 1935 VEX_W_0F47_P_0_LEN_1,
1ba585e8
IT
1936 VEX_W_0F47_P_2_LEN_1,
1937 VEX_W_0F4A_P_0_LEN_1,
1938 VEX_W_0F4A_P_2_LEN_1,
1939 VEX_W_0F4B_P_0_LEN_1,
43234a1e 1940 VEX_W_0F4B_P_2_LEN_1,
592a252b
L
1941 VEX_W_0F50_M_0,
1942 VEX_W_0F51_P_0,
1943 VEX_W_0F51_P_1,
1944 VEX_W_0F51_P_2,
1945 VEX_W_0F51_P_3,
1946 VEX_W_0F52_P_0,
1947 VEX_W_0F52_P_1,
1948 VEX_W_0F53_P_0,
1949 VEX_W_0F53_P_1,
1950 VEX_W_0F58_P_0,
1951 VEX_W_0F58_P_1,
1952 VEX_W_0F58_P_2,
1953 VEX_W_0F58_P_3,
1954 VEX_W_0F59_P_0,
1955 VEX_W_0F59_P_1,
1956 VEX_W_0F59_P_2,
1957 VEX_W_0F59_P_3,
1958 VEX_W_0F5A_P_0,
1959 VEX_W_0F5A_P_1,
1960 VEX_W_0F5A_P_3,
1961 VEX_W_0F5B_P_0,
1962 VEX_W_0F5B_P_1,
1963 VEX_W_0F5B_P_2,
1964 VEX_W_0F5C_P_0,
1965 VEX_W_0F5C_P_1,
1966 VEX_W_0F5C_P_2,
1967 VEX_W_0F5C_P_3,
1968 VEX_W_0F5D_P_0,
1969 VEX_W_0F5D_P_1,
1970 VEX_W_0F5D_P_2,
1971 VEX_W_0F5D_P_3,
1972 VEX_W_0F5E_P_0,
1973 VEX_W_0F5E_P_1,
1974 VEX_W_0F5E_P_2,
1975 VEX_W_0F5E_P_3,
1976 VEX_W_0F5F_P_0,
1977 VEX_W_0F5F_P_1,
1978 VEX_W_0F5F_P_2,
1979 VEX_W_0F5F_P_3,
1980 VEX_W_0F60_P_2,
1981 VEX_W_0F61_P_2,
1982 VEX_W_0F62_P_2,
1983 VEX_W_0F63_P_2,
1984 VEX_W_0F64_P_2,
1985 VEX_W_0F65_P_2,
1986 VEX_W_0F66_P_2,
1987 VEX_W_0F67_P_2,
1988 VEX_W_0F68_P_2,
1989 VEX_W_0F69_P_2,
1990 VEX_W_0F6A_P_2,
1991 VEX_W_0F6B_P_2,
1992 VEX_W_0F6C_P_2,
1993 VEX_W_0F6D_P_2,
1994 VEX_W_0F6F_P_1,
1995 VEX_W_0F6F_P_2,
1996 VEX_W_0F70_P_1,
1997 VEX_W_0F70_P_2,
1998 VEX_W_0F70_P_3,
1999 VEX_W_0F71_R_2_P_2,
2000 VEX_W_0F71_R_4_P_2,
2001 VEX_W_0F71_R_6_P_2,
2002 VEX_W_0F72_R_2_P_2,
2003 VEX_W_0F72_R_4_P_2,
2004 VEX_W_0F72_R_6_P_2,
2005 VEX_W_0F73_R_2_P_2,
2006 VEX_W_0F73_R_3_P_2,
2007 VEX_W_0F73_R_6_P_2,
2008 VEX_W_0F73_R_7_P_2,
2009 VEX_W_0F74_P_2,
2010 VEX_W_0F75_P_2,
2011 VEX_W_0F76_P_2,
2012 VEX_W_0F77_P_0,
2013 VEX_W_0F7C_P_2,
2014 VEX_W_0F7C_P_3,
2015 VEX_W_0F7D_P_2,
2016 VEX_W_0F7D_P_3,
2017 VEX_W_0F7E_P_1,
2018 VEX_W_0F7F_P_1,
2019 VEX_W_0F7F_P_2,
43234a1e 2020 VEX_W_0F90_P_0_LEN_0,
1ba585e8 2021 VEX_W_0F90_P_2_LEN_0,
43234a1e 2022 VEX_W_0F91_P_0_LEN_0,
1ba585e8 2023 VEX_W_0F91_P_2_LEN_0,
43234a1e 2024 VEX_W_0F92_P_0_LEN_0,
90a915bf 2025 VEX_W_0F92_P_2_LEN_0,
1ba585e8 2026 VEX_W_0F92_P_3_LEN_0,
43234a1e 2027 VEX_W_0F93_P_0_LEN_0,
90a915bf 2028 VEX_W_0F93_P_2_LEN_0,
1ba585e8 2029 VEX_W_0F93_P_3_LEN_0,
43234a1e 2030 VEX_W_0F98_P_0_LEN_0,
1ba585e8
IT
2031 VEX_W_0F98_P_2_LEN_0,
2032 VEX_W_0F99_P_0_LEN_0,
2033 VEX_W_0F99_P_2_LEN_0,
592a252b
L
2034 VEX_W_0FAE_R_2_M_0,
2035 VEX_W_0FAE_R_3_M_0,
2036 VEX_W_0FC2_P_0,
2037 VEX_W_0FC2_P_1,
2038 VEX_W_0FC2_P_2,
2039 VEX_W_0FC2_P_3,
2040 VEX_W_0FC4_P_2,
2041 VEX_W_0FC5_P_2,
2042 VEX_W_0FD0_P_2,
2043 VEX_W_0FD0_P_3,
2044 VEX_W_0FD1_P_2,
2045 VEX_W_0FD2_P_2,
2046 VEX_W_0FD3_P_2,
2047 VEX_W_0FD4_P_2,
2048 VEX_W_0FD5_P_2,
2049 VEX_W_0FD6_P_2,
2050 VEX_W_0FD7_P_2_M_1,
2051 VEX_W_0FD8_P_2,
2052 VEX_W_0FD9_P_2,
2053 VEX_W_0FDA_P_2,
2054 VEX_W_0FDB_P_2,
2055 VEX_W_0FDC_P_2,
2056 VEX_W_0FDD_P_2,
2057 VEX_W_0FDE_P_2,
2058 VEX_W_0FDF_P_2,
2059 VEX_W_0FE0_P_2,
2060 VEX_W_0FE1_P_2,
2061 VEX_W_0FE2_P_2,
2062 VEX_W_0FE3_P_2,
2063 VEX_W_0FE4_P_2,
2064 VEX_W_0FE5_P_2,
2065 VEX_W_0FE6_P_1,
2066 VEX_W_0FE6_P_2,
2067 VEX_W_0FE6_P_3,
2068 VEX_W_0FE7_P_2_M_0,
2069 VEX_W_0FE8_P_2,
2070 VEX_W_0FE9_P_2,
2071 VEX_W_0FEA_P_2,
2072 VEX_W_0FEB_P_2,
2073 VEX_W_0FEC_P_2,
2074 VEX_W_0FED_P_2,
2075 VEX_W_0FEE_P_2,
2076 VEX_W_0FEF_P_2,
2077 VEX_W_0FF0_P_3_M_0,
2078 VEX_W_0FF1_P_2,
2079 VEX_W_0FF2_P_2,
2080 VEX_W_0FF3_P_2,
2081 VEX_W_0FF4_P_2,
2082 VEX_W_0FF5_P_2,
2083 VEX_W_0FF6_P_2,
2084 VEX_W_0FF7_P_2,
2085 VEX_W_0FF8_P_2,
2086 VEX_W_0FF9_P_2,
2087 VEX_W_0FFA_P_2,
2088 VEX_W_0FFB_P_2,
2089 VEX_W_0FFC_P_2,
2090 VEX_W_0FFD_P_2,
2091 VEX_W_0FFE_P_2,
2092 VEX_W_0F3800_P_2,
2093 VEX_W_0F3801_P_2,
2094 VEX_W_0F3802_P_2,
2095 VEX_W_0F3803_P_2,
2096 VEX_W_0F3804_P_2,
2097 VEX_W_0F3805_P_2,
2098 VEX_W_0F3806_P_2,
2099 VEX_W_0F3807_P_2,
2100 VEX_W_0F3808_P_2,
2101 VEX_W_0F3809_P_2,
2102 VEX_W_0F380A_P_2,
2103 VEX_W_0F380B_P_2,
2104 VEX_W_0F380C_P_2,
2105 VEX_W_0F380D_P_2,
2106 VEX_W_0F380E_P_2,
2107 VEX_W_0F380F_P_2,
6c30d220 2108 VEX_W_0F3816_P_2,
592a252b 2109 VEX_W_0F3817_P_2,
6c30d220
L
2110 VEX_W_0F3818_P_2,
2111 VEX_W_0F3819_P_2,
592a252b
L
2112 VEX_W_0F381A_P_2_M_0,
2113 VEX_W_0F381C_P_2,
2114 VEX_W_0F381D_P_2,
2115 VEX_W_0F381E_P_2,
2116 VEX_W_0F3820_P_2,
2117 VEX_W_0F3821_P_2,
2118 VEX_W_0F3822_P_2,
2119 VEX_W_0F3823_P_2,
2120 VEX_W_0F3824_P_2,
2121 VEX_W_0F3825_P_2,
2122 VEX_W_0F3828_P_2,
2123 VEX_W_0F3829_P_2,
2124 VEX_W_0F382A_P_2_M_0,
2125 VEX_W_0F382B_P_2,
2126 VEX_W_0F382C_P_2_M_0,
2127 VEX_W_0F382D_P_2_M_0,
2128 VEX_W_0F382E_P_2_M_0,
2129 VEX_W_0F382F_P_2_M_0,
2130 VEX_W_0F3830_P_2,
2131 VEX_W_0F3831_P_2,
2132 VEX_W_0F3832_P_2,
2133 VEX_W_0F3833_P_2,
2134 VEX_W_0F3834_P_2,
2135 VEX_W_0F3835_P_2,
6c30d220 2136 VEX_W_0F3836_P_2,
592a252b
L
2137 VEX_W_0F3837_P_2,
2138 VEX_W_0F3838_P_2,
2139 VEX_W_0F3839_P_2,
2140 VEX_W_0F383A_P_2,
2141 VEX_W_0F383B_P_2,
2142 VEX_W_0F383C_P_2,
2143 VEX_W_0F383D_P_2,
2144 VEX_W_0F383E_P_2,
2145 VEX_W_0F383F_P_2,
2146 VEX_W_0F3840_P_2,
2147 VEX_W_0F3841_P_2,
6c30d220
L
2148 VEX_W_0F3846_P_2,
2149 VEX_W_0F3858_P_2,
2150 VEX_W_0F3859_P_2,
2151 VEX_W_0F385A_P_2_M_0,
2152 VEX_W_0F3878_P_2,
2153 VEX_W_0F3879_P_2,
592a252b
L
2154 VEX_W_0F38DB_P_2,
2155 VEX_W_0F38DC_P_2,
2156 VEX_W_0F38DD_P_2,
2157 VEX_W_0F38DE_P_2,
2158 VEX_W_0F38DF_P_2,
6c30d220
L
2159 VEX_W_0F3A00_P_2,
2160 VEX_W_0F3A01_P_2,
2161 VEX_W_0F3A02_P_2,
592a252b
L
2162 VEX_W_0F3A04_P_2,
2163 VEX_W_0F3A05_P_2,
2164 VEX_W_0F3A06_P_2,
2165 VEX_W_0F3A08_P_2,
2166 VEX_W_0F3A09_P_2,
2167 VEX_W_0F3A0A_P_2,
2168 VEX_W_0F3A0B_P_2,
2169 VEX_W_0F3A0C_P_2,
2170 VEX_W_0F3A0D_P_2,
2171 VEX_W_0F3A0E_P_2,
2172 VEX_W_0F3A0F_P_2,
2173 VEX_W_0F3A14_P_2,
2174 VEX_W_0F3A15_P_2,
2175 VEX_W_0F3A18_P_2,
2176 VEX_W_0F3A19_P_2,
2177 VEX_W_0F3A20_P_2,
2178 VEX_W_0F3A21_P_2,
43234a1e 2179 VEX_W_0F3A30_P_2_LEN_0,
1ba585e8 2180 VEX_W_0F3A31_P_2_LEN_0,
43234a1e 2181 VEX_W_0F3A32_P_2_LEN_0,
1ba585e8 2182 VEX_W_0F3A33_P_2_LEN_0,
6c30d220
L
2183 VEX_W_0F3A38_P_2,
2184 VEX_W_0F3A39_P_2,
592a252b
L
2185 VEX_W_0F3A40_P_2,
2186 VEX_W_0F3A41_P_2,
2187 VEX_W_0F3A42_P_2,
2188 VEX_W_0F3A44_P_2,
6c30d220 2189 VEX_W_0F3A46_P_2,
592a252b
L
2190 VEX_W_0F3A48_P_2,
2191 VEX_W_0F3A49_P_2,
2192 VEX_W_0F3A4A_P_2,
2193 VEX_W_0F3A4B_P_2,
2194 VEX_W_0F3A4C_P_2,
2195 VEX_W_0F3A60_P_2,
2196 VEX_W_0F3A61_P_2,
2197 VEX_W_0F3A62_P_2,
2198 VEX_W_0F3A63_P_2,
43234a1e
L
2199 VEX_W_0F3ADF_P_2,
2200
2201 EVEX_W_0F10_P_0,
2202 EVEX_W_0F10_P_1_M_0,
2203 EVEX_W_0F10_P_1_M_1,
2204 EVEX_W_0F10_P_2,
2205 EVEX_W_0F10_P_3_M_0,
2206 EVEX_W_0F10_P_3_M_1,
2207 EVEX_W_0F11_P_0,
2208 EVEX_W_0F11_P_1_M_0,
2209 EVEX_W_0F11_P_1_M_1,
2210 EVEX_W_0F11_P_2,
2211 EVEX_W_0F11_P_3_M_0,
2212 EVEX_W_0F11_P_3_M_1,
2213 EVEX_W_0F12_P_0_M_0,
2214 EVEX_W_0F12_P_0_M_1,
2215 EVEX_W_0F12_P_1,
2216 EVEX_W_0F12_P_2,
2217 EVEX_W_0F12_P_3,
2218 EVEX_W_0F13_P_0,
2219 EVEX_W_0F13_P_2,
2220 EVEX_W_0F14_P_0,
2221 EVEX_W_0F14_P_2,
2222 EVEX_W_0F15_P_0,
2223 EVEX_W_0F15_P_2,
2224 EVEX_W_0F16_P_0_M_0,
2225 EVEX_W_0F16_P_0_M_1,
2226 EVEX_W_0F16_P_1,
2227 EVEX_W_0F16_P_2,
2228 EVEX_W_0F17_P_0,
2229 EVEX_W_0F17_P_2,
2230 EVEX_W_0F28_P_0,
2231 EVEX_W_0F28_P_2,
2232 EVEX_W_0F29_P_0,
2233 EVEX_W_0F29_P_2,
2234 EVEX_W_0F2A_P_1,
2235 EVEX_W_0F2A_P_3,
2236 EVEX_W_0F2B_P_0,
2237 EVEX_W_0F2B_P_2,
2238 EVEX_W_0F2E_P_0,
2239 EVEX_W_0F2E_P_2,
2240 EVEX_W_0F2F_P_0,
2241 EVEX_W_0F2F_P_2,
2242 EVEX_W_0F51_P_0,
2243 EVEX_W_0F51_P_1,
2244 EVEX_W_0F51_P_2,
2245 EVEX_W_0F51_P_3,
90a915bf
IT
2246 EVEX_W_0F54_P_0,
2247 EVEX_W_0F54_P_2,
2248 EVEX_W_0F55_P_0,
2249 EVEX_W_0F55_P_2,
2250 EVEX_W_0F56_P_0,
2251 EVEX_W_0F56_P_2,
2252 EVEX_W_0F57_P_0,
2253 EVEX_W_0F57_P_2,
43234a1e
L
2254 EVEX_W_0F58_P_0,
2255 EVEX_W_0F58_P_1,
2256 EVEX_W_0F58_P_2,
2257 EVEX_W_0F58_P_3,
2258 EVEX_W_0F59_P_0,
2259 EVEX_W_0F59_P_1,
2260 EVEX_W_0F59_P_2,
2261 EVEX_W_0F59_P_3,
2262 EVEX_W_0F5A_P_0,
2263 EVEX_W_0F5A_P_1,
2264 EVEX_W_0F5A_P_2,
2265 EVEX_W_0F5A_P_3,
2266 EVEX_W_0F5B_P_0,
2267 EVEX_W_0F5B_P_1,
2268 EVEX_W_0F5B_P_2,
2269 EVEX_W_0F5C_P_0,
2270 EVEX_W_0F5C_P_1,
2271 EVEX_W_0F5C_P_2,
2272 EVEX_W_0F5C_P_3,
2273 EVEX_W_0F5D_P_0,
2274 EVEX_W_0F5D_P_1,
2275 EVEX_W_0F5D_P_2,
2276 EVEX_W_0F5D_P_3,
2277 EVEX_W_0F5E_P_0,
2278 EVEX_W_0F5E_P_1,
2279 EVEX_W_0F5E_P_2,
2280 EVEX_W_0F5E_P_3,
2281 EVEX_W_0F5F_P_0,
2282 EVEX_W_0F5F_P_1,
2283 EVEX_W_0F5F_P_2,
2284 EVEX_W_0F5F_P_3,
2285 EVEX_W_0F62_P_2,
2286 EVEX_W_0F66_P_2,
2287 EVEX_W_0F6A_P_2,
1ba585e8 2288 EVEX_W_0F6B_P_2,
43234a1e
L
2289 EVEX_W_0F6C_P_2,
2290 EVEX_W_0F6D_P_2,
2291 EVEX_W_0F6E_P_2,
2292 EVEX_W_0F6F_P_1,
2293 EVEX_W_0F6F_P_2,
1ba585e8 2294 EVEX_W_0F6F_P_3,
43234a1e
L
2295 EVEX_W_0F70_P_2,
2296 EVEX_W_0F72_R_2_P_2,
2297 EVEX_W_0F72_R_6_P_2,
2298 EVEX_W_0F73_R_2_P_2,
2299 EVEX_W_0F73_R_6_P_2,
2300 EVEX_W_0F76_P_2,
2301 EVEX_W_0F78_P_0,
90a915bf 2302 EVEX_W_0F78_P_2,
43234a1e 2303 EVEX_W_0F79_P_0,
90a915bf 2304 EVEX_W_0F79_P_2,
43234a1e 2305 EVEX_W_0F7A_P_1,
90a915bf 2306 EVEX_W_0F7A_P_2,
43234a1e
L
2307 EVEX_W_0F7A_P_3,
2308 EVEX_W_0F7B_P_1,
90a915bf 2309 EVEX_W_0F7B_P_2,
43234a1e
L
2310 EVEX_W_0F7B_P_3,
2311 EVEX_W_0F7E_P_1,
2312 EVEX_W_0F7E_P_2,
2313 EVEX_W_0F7F_P_1,
2314 EVEX_W_0F7F_P_2,
1ba585e8 2315 EVEX_W_0F7F_P_3,
43234a1e
L
2316 EVEX_W_0FC2_P_0,
2317 EVEX_W_0FC2_P_1,
2318 EVEX_W_0FC2_P_2,
2319 EVEX_W_0FC2_P_3,
2320 EVEX_W_0FC6_P_0,
2321 EVEX_W_0FC6_P_2,
2322 EVEX_W_0FD2_P_2,
2323 EVEX_W_0FD3_P_2,
2324 EVEX_W_0FD4_P_2,
2325 EVEX_W_0FD6_P_2,
2326 EVEX_W_0FE6_P_1,
2327 EVEX_W_0FE6_P_2,
2328 EVEX_W_0FE6_P_3,
2329 EVEX_W_0FE7_P_2,
2330 EVEX_W_0FF2_P_2,
2331 EVEX_W_0FF3_P_2,
2332 EVEX_W_0FF4_P_2,
2333 EVEX_W_0FFA_P_2,
2334 EVEX_W_0FFB_P_2,
2335 EVEX_W_0FFE_P_2,
2336 EVEX_W_0F380C_P_2,
2337 EVEX_W_0F380D_P_2,
1ba585e8
IT
2338 EVEX_W_0F3810_P_1,
2339 EVEX_W_0F3810_P_2,
43234a1e 2340 EVEX_W_0F3811_P_1,
1ba585e8 2341 EVEX_W_0F3811_P_2,
43234a1e 2342 EVEX_W_0F3812_P_1,
1ba585e8 2343 EVEX_W_0F3812_P_2,
43234a1e
L
2344 EVEX_W_0F3813_P_1,
2345 EVEX_W_0F3813_P_2,
2346 EVEX_W_0F3814_P_1,
2347 EVEX_W_0F3815_P_1,
2348 EVEX_W_0F3818_P_2,
2349 EVEX_W_0F3819_P_2,
2350 EVEX_W_0F381A_P_2,
2351 EVEX_W_0F381B_P_2,
2352 EVEX_W_0F381E_P_2,
2353 EVEX_W_0F381F_P_2,
1ba585e8 2354 EVEX_W_0F3820_P_1,
43234a1e
L
2355 EVEX_W_0F3821_P_1,
2356 EVEX_W_0F3822_P_1,
2357 EVEX_W_0F3823_P_1,
2358 EVEX_W_0F3824_P_1,
2359 EVEX_W_0F3825_P_1,
2360 EVEX_W_0F3825_P_2,
1ba585e8
IT
2361 EVEX_W_0F3826_P_1,
2362 EVEX_W_0F3826_P_2,
2363 EVEX_W_0F3828_P_1,
43234a1e 2364 EVEX_W_0F3828_P_2,
1ba585e8 2365 EVEX_W_0F3829_P_1,
43234a1e
L
2366 EVEX_W_0F3829_P_2,
2367 EVEX_W_0F382A_P_1,
2368 EVEX_W_0F382A_P_2,
1ba585e8
IT
2369 EVEX_W_0F382B_P_2,
2370 EVEX_W_0F3830_P_1,
43234a1e
L
2371 EVEX_W_0F3831_P_1,
2372 EVEX_W_0F3832_P_1,
2373 EVEX_W_0F3833_P_1,
2374 EVEX_W_0F3834_P_1,
2375 EVEX_W_0F3835_P_1,
2376 EVEX_W_0F3835_P_2,
2377 EVEX_W_0F3837_P_2,
90a915bf
IT
2378 EVEX_W_0F3838_P_1,
2379 EVEX_W_0F3839_P_1,
43234a1e
L
2380 EVEX_W_0F383A_P_1,
2381 EVEX_W_0F3840_P_2,
2382 EVEX_W_0F3858_P_2,
2383 EVEX_W_0F3859_P_2,
2384 EVEX_W_0F385A_P_2,
2385 EVEX_W_0F385B_P_2,
1ba585e8
IT
2386 EVEX_W_0F3866_P_2,
2387 EVEX_W_0F3875_P_2,
2388 EVEX_W_0F3878_P_2,
2389 EVEX_W_0F3879_P_2,
2390 EVEX_W_0F387A_P_2,
2391 EVEX_W_0F387B_P_2,
2392 EVEX_W_0F387D_P_2,
14f195c9 2393 EVEX_W_0F3883_P_2,
1ba585e8 2394 EVEX_W_0F388D_P_2,
43234a1e
L
2395 EVEX_W_0F3891_P_2,
2396 EVEX_W_0F3893_P_2,
2397 EVEX_W_0F38A1_P_2,
2398 EVEX_W_0F38A3_P_2,
2399 EVEX_W_0F38C7_R_1_P_2,
2400 EVEX_W_0F38C7_R_2_P_2,
2401 EVEX_W_0F38C7_R_5_P_2,
2402 EVEX_W_0F38C7_R_6_P_2,
2403
2404 EVEX_W_0F3A00_P_2,
2405 EVEX_W_0F3A01_P_2,
2406 EVEX_W_0F3A04_P_2,
2407 EVEX_W_0F3A05_P_2,
2408 EVEX_W_0F3A08_P_2,
2409 EVEX_W_0F3A09_P_2,
2410 EVEX_W_0F3A0A_P_2,
2411 EVEX_W_0F3A0B_P_2,
90a915bf 2412 EVEX_W_0F3A16_P_2,
43234a1e
L
2413 EVEX_W_0F3A18_P_2,
2414 EVEX_W_0F3A19_P_2,
2415 EVEX_W_0F3A1A_P_2,
2416 EVEX_W_0F3A1B_P_2,
2417 EVEX_W_0F3A1D_P_2,
2418 EVEX_W_0F3A21_P_2,
90a915bf 2419 EVEX_W_0F3A22_P_2,
43234a1e
L
2420 EVEX_W_0F3A23_P_2,
2421 EVEX_W_0F3A38_P_2,
2422 EVEX_W_0F3A39_P_2,
2423 EVEX_W_0F3A3A_P_2,
2424 EVEX_W_0F3A3B_P_2,
1ba585e8
IT
2425 EVEX_W_0F3A3E_P_2,
2426 EVEX_W_0F3A3F_P_2,
2427 EVEX_W_0F3A42_P_2,
90a915bf
IT
2428 EVEX_W_0F3A43_P_2,
2429 EVEX_W_0F3A50_P_2,
2430 EVEX_W_0F3A51_P_2,
2431 EVEX_W_0F3A56_P_2,
2432 EVEX_W_0F3A57_P_2,
2433 EVEX_W_0F3A66_P_2,
2434 EVEX_W_0F3A67_P_2
9e30b8e0
L
2435};
2436
26ca5450 2437typedef void (*op_rtn) (int bytemode, int sizeflag);
252b5132
RH
2438
2439struct dis386 {
2da11e11 2440 const char *name;
ce518a5f
L
2441 struct
2442 {
2443 op_rtn rtn;
2444 int bytemode;
2445 } op[MAX_OPERANDS];
bf890a93 2446 unsigned int prefix_requirement;
252b5132
RH
2447};
2448
2449/* Upper case letters in the instruction names here are macros.
2450 'A' => print 'b' if no register operands or suffix_always is true
2451 'B' => print 'b' if suffix_always is true
9306ca4a 2452 'C' => print 's' or 'l' ('w' or 'd' in Intel mode) depending on operand
98b528ac 2453 size prefix
ed7841b3 2454 'D' => print 'w' if no register operands or 'w', 'l' or 'q', if
98b528ac 2455 suffix_always is true
252b5132 2456 'E' => print 'e' if 32-bit form of jcxz
3ffd33cf 2457 'F' => print 'w' or 'l' depending on address size prefix (loop insns)
52fd6d94 2458 'G' => print 'w' or 'l' depending on operand size prefix (i/o insns)
5dd0794d 2459 'H' => print ",pt" or ",pn" branch hint
9306ca4a 2460 'I' => honor following macro letter even in Intel mode (implemented only
98b528ac 2461 for some of the macro letters)
9306ca4a 2462 'J' => print 'l'
42903f7f 2463 'K' => print 'd' or 'q' if rex prefix is present.
252b5132 2464 'L' => print 'l' if suffix_always is true
9d141669 2465 'M' => print 'r' if intel_mnemonic is false.
252b5132 2466 'N' => print 'n' if instruction has no wait "prefix"
a35ca55a 2467 'O' => print 'd' or 'o' (or 'q' in Intel mode)
52b15da3 2468 'P' => print 'w', 'l' or 'q' if instruction has an operand size prefix,
98b528ac
L
2469 or suffix_always is true. print 'q' if rex prefix is present.
2470 'Q' => print 'w', 'l' or 'q' for memory operand or suffix_always
2471 is true
a35ca55a 2472 'R' => print 'w', 'l' or 'q' ('d' for 'l' and 'e' in Intel mode)
52b15da3 2473 'S' => print 'w', 'l' or 'q' if suffix_always is true
a72d2af2
L
2474 'T' => print 'q' in 64bit mode if instruction has no operand size
2475 prefix and behave as 'P' otherwise
2476 'U' => print 'q' in 64bit mode if instruction has no operand size
2477 prefix and behave as 'Q' otherwise
2478 'V' => print 'q' in 64bit mode if instruction has no operand size
2479 prefix and behave as 'S' otherwise
a35ca55a 2480 'W' => print 'b', 'w' or 'l' ('d' in Intel mode)
9306ca4a 2481 'X' => print 's', 'd' depending on data16 prefix (for XMM)
8a72226a
L
2482 'Y' => 'q' if instruction has an REX 64bit overwrite prefix and
2483 suffix_always is true.
6dd5059a 2484 'Z' => print 'q' in 64bit mode and behave as 'L' otherwise
9d141669 2485 '!' => change condition from true to false or from false to true.
98b528ac 2486 '%' => add 1 upper case letter to the macro.
a72d2af2
L
2487 '^' => print 'w' or 'l' depending on operand size prefix or
2488 suffix_always is true (lcall/ljmp).
5db04b09
L
2489 '@' => print 'q' for Intel64 ISA, 'w' or 'q' for AMD64 ISA depending
2490 on operand size prefix.
07f5af7d
L
2491 '&' => print 'q' in 64bit mode for Intel64 ISA or if instruction
2492 has no operand size prefix for AMD64 ISA, behave as 'P'
2493 otherwise
98b528ac
L
2494
2495 2 upper case letter macros:
04d824a4
JB
2496 "XY" => print 'x' or 'y' if suffix_always is true or no register
2497 operands and no broadcast.
2498 "XZ" => print 'x', 'y', or 'z' if suffix_always is true or no
2499 register operands and no broadcast.
4b06377f
L
2500 "XW" => print 's', 'd' depending on the VEX.W bit (for FMA)
2501 "LQ" => print 'l' ('d' in Intel mode) or 'q' for memory operand
98b528ac 2502 or suffix_always is true
4b06377f
L
2503 "LB" => print "abs" in 64bit mode and behave as 'B' otherwise
2504 "LS" => print "abs" in 64bit mode and behave as 'S' otherwise
2505 "LV" => print "abs" for 64bit operand and behave as 'S' otherwise
6c30d220 2506 "LW" => print 'd', 'q' depending on the VEX.W bit
4b4c407a
L
2507 "LP" => print 'w' or 'l' ('d' in Intel mode) if instruction has
2508 an operand size prefix, or suffix_always is true. print
2509 'q' if rex prefix is present.
52b15da3 2510
6439fc28
AM
2511 Many of the above letters print nothing in Intel mode. See "putop"
2512 for the details.
52b15da3 2513
6439fc28 2514 Braces '{' and '}', and vertical bars '|', indicate alternative
7c52e0e8 2515 mnemonic strings for AT&T and Intel. */
252b5132 2516
6439fc28 2517static const struct dis386 dis386[] = {
252b5132 2518 /* 00 */
bf890a93
IT
2519 { "addB", { Ebh1, Gb }, 0 },
2520 { "addS", { Evh1, Gv }, 0 },
2521 { "addB", { Gb, EbS }, 0 },
2522 { "addS", { Gv, EvS }, 0 },
2523 { "addB", { AL, Ib }, 0 },
2524 { "addS", { eAX, Iv }, 0 },
4e7d34a6
L
2525 { X86_64_TABLE (X86_64_06) },
2526 { X86_64_TABLE (X86_64_07) },
252b5132 2527 /* 08 */
bf890a93
IT
2528 { "orB", { Ebh1, Gb }, 0 },
2529 { "orS", { Evh1, Gv }, 0 },
2530 { "orB", { Gb, EbS }, 0 },
2531 { "orS", { Gv, EvS }, 0 },
2532 { "orB", { AL, Ib }, 0 },
2533 { "orS", { eAX, Iv }, 0 },
4e7d34a6 2534 { X86_64_TABLE (X86_64_0D) },
592d1631 2535 { Bad_Opcode }, /* 0x0f extended opcode escape */
252b5132 2536 /* 10 */
bf890a93
IT
2537 { "adcB", { Ebh1, Gb }, 0 },
2538 { "adcS", { Evh1, Gv }, 0 },
2539 { "adcB", { Gb, EbS }, 0 },
2540 { "adcS", { Gv, EvS }, 0 },
2541 { "adcB", { AL, Ib }, 0 },
2542 { "adcS", { eAX, Iv }, 0 },
4e7d34a6
L
2543 { X86_64_TABLE (X86_64_16) },
2544 { X86_64_TABLE (X86_64_17) },
252b5132 2545 /* 18 */
bf890a93
IT
2546 { "sbbB", { Ebh1, Gb }, 0 },
2547 { "sbbS", { Evh1, Gv }, 0 },
2548 { "sbbB", { Gb, EbS }, 0 },
2549 { "sbbS", { Gv, EvS }, 0 },
2550 { "sbbB", { AL, Ib }, 0 },
2551 { "sbbS", { eAX, Iv }, 0 },
4e7d34a6
L
2552 { X86_64_TABLE (X86_64_1E) },
2553 { X86_64_TABLE (X86_64_1F) },
252b5132 2554 /* 20 */
bf890a93
IT
2555 { "andB", { Ebh1, Gb }, 0 },
2556 { "andS", { Evh1, Gv }, 0 },
2557 { "andB", { Gb, EbS }, 0 },
2558 { "andS", { Gv, EvS }, 0 },
2559 { "andB", { AL, Ib }, 0 },
2560 { "andS", { eAX, Iv }, 0 },
592d1631 2561 { Bad_Opcode }, /* SEG ES prefix */
4e7d34a6 2562 { X86_64_TABLE (X86_64_27) },
252b5132 2563 /* 28 */
bf890a93
IT
2564 { "subB", { Ebh1, Gb }, 0 },
2565 { "subS", { Evh1, Gv }, 0 },
2566 { "subB", { Gb, EbS }, 0 },
2567 { "subS", { Gv, EvS }, 0 },
2568 { "subB", { AL, Ib }, 0 },
2569 { "subS", { eAX, Iv }, 0 },
592d1631 2570 { Bad_Opcode }, /* SEG CS prefix */
4e7d34a6 2571 { X86_64_TABLE (X86_64_2F) },
252b5132 2572 /* 30 */
bf890a93
IT
2573 { "xorB", { Ebh1, Gb }, 0 },
2574 { "xorS", { Evh1, Gv }, 0 },
2575 { "xorB", { Gb, EbS }, 0 },
2576 { "xorS", { Gv, EvS }, 0 },
2577 { "xorB", { AL, Ib }, 0 },
2578 { "xorS", { eAX, Iv }, 0 },
592d1631 2579 { Bad_Opcode }, /* SEG SS prefix */
4e7d34a6 2580 { X86_64_TABLE (X86_64_37) },
252b5132 2581 /* 38 */
bf890a93
IT
2582 { "cmpB", { Eb, Gb }, 0 },
2583 { "cmpS", { Ev, Gv }, 0 },
2584 { "cmpB", { Gb, EbS }, 0 },
2585 { "cmpS", { Gv, EvS }, 0 },
2586 { "cmpB", { AL, Ib }, 0 },
2587 { "cmpS", { eAX, Iv }, 0 },
592d1631 2588 { Bad_Opcode }, /* SEG DS prefix */
4e7d34a6 2589 { X86_64_TABLE (X86_64_3F) },
252b5132 2590 /* 40 */
bf890a93
IT
2591 { "inc{S|}", { RMeAX }, 0 },
2592 { "inc{S|}", { RMeCX }, 0 },
2593 { "inc{S|}", { RMeDX }, 0 },
2594 { "inc{S|}", { RMeBX }, 0 },
2595 { "inc{S|}", { RMeSP }, 0 },
2596 { "inc{S|}", { RMeBP }, 0 },
2597 { "inc{S|}", { RMeSI }, 0 },
2598 { "inc{S|}", { RMeDI }, 0 },
252b5132 2599 /* 48 */
bf890a93
IT
2600 { "dec{S|}", { RMeAX }, 0 },
2601 { "dec{S|}", { RMeCX }, 0 },
2602 { "dec{S|}", { RMeDX }, 0 },
2603 { "dec{S|}", { RMeBX }, 0 },
2604 { "dec{S|}", { RMeSP }, 0 },
2605 { "dec{S|}", { RMeBP }, 0 },
2606 { "dec{S|}", { RMeSI }, 0 },
2607 { "dec{S|}", { RMeDI }, 0 },
252b5132 2608 /* 50 */
bf890a93
IT
2609 { "pushV", { RMrAX }, 0 },
2610 { "pushV", { RMrCX }, 0 },
2611 { "pushV", { RMrDX }, 0 },
2612 { "pushV", { RMrBX }, 0 },
2613 { "pushV", { RMrSP }, 0 },
2614 { "pushV", { RMrBP }, 0 },
2615 { "pushV", { RMrSI }, 0 },
2616 { "pushV", { RMrDI }, 0 },
252b5132 2617 /* 58 */
bf890a93
IT
2618 { "popV", { RMrAX }, 0 },
2619 { "popV", { RMrCX }, 0 },
2620 { "popV", { RMrDX }, 0 },
2621 { "popV", { RMrBX }, 0 },
2622 { "popV", { RMrSP }, 0 },
2623 { "popV", { RMrBP }, 0 },
2624 { "popV", { RMrSI }, 0 },
2625 { "popV", { RMrDI }, 0 },
252b5132 2626 /* 60 */
4e7d34a6
L
2627 { X86_64_TABLE (X86_64_60) },
2628 { X86_64_TABLE (X86_64_61) },
2629 { X86_64_TABLE (X86_64_62) },
2630 { X86_64_TABLE (X86_64_63) },
592d1631
L
2631 { Bad_Opcode }, /* seg fs */
2632 { Bad_Opcode }, /* seg gs */
2633 { Bad_Opcode }, /* op size prefix */
2634 { Bad_Opcode }, /* adr size prefix */
252b5132 2635 /* 68 */
bf890a93
IT
2636 { "pushT", { sIv }, 0 },
2637 { "imulS", { Gv, Ev, Iv }, 0 },
2638 { "pushT", { sIbT }, 0 },
2639 { "imulS", { Gv, Ev, sIb }, 0 },
2640 { "ins{b|}", { Ybr, indirDX }, 0 },
4e7d34a6 2641 { X86_64_TABLE (X86_64_6D) },
bf890a93 2642 { "outs{b|}", { indirDXr, Xb }, 0 },
4e7d34a6 2643 { X86_64_TABLE (X86_64_6F) },
252b5132 2644 /* 70 */
bf890a93
IT
2645 { "joH", { Jb, BND, cond_jump_flag }, 0 },
2646 { "jnoH", { Jb, BND, cond_jump_flag }, 0 },
2647 { "jbH", { Jb, BND, cond_jump_flag }, 0 },
2648 { "jaeH", { Jb, BND, cond_jump_flag }, 0 },
2649 { "jeH", { Jb, BND, cond_jump_flag }, 0 },
2650 { "jneH", { Jb, BND, cond_jump_flag }, 0 },
2651 { "jbeH", { Jb, BND, cond_jump_flag }, 0 },
2652 { "jaH", { Jb, BND, cond_jump_flag }, 0 },
252b5132 2653 /* 78 */
bf890a93
IT
2654 { "jsH", { Jb, BND, cond_jump_flag }, 0 },
2655 { "jnsH", { Jb, BND, cond_jump_flag }, 0 },
2656 { "jpH", { Jb, BND, cond_jump_flag }, 0 },
2657 { "jnpH", { Jb, BND, cond_jump_flag }, 0 },
2658 { "jlH", { Jb, BND, cond_jump_flag }, 0 },
2659 { "jgeH", { Jb, BND, cond_jump_flag }, 0 },
2660 { "jleH", { Jb, BND, cond_jump_flag }, 0 },
2661 { "jgH", { Jb, BND, cond_jump_flag }, 0 },
252b5132 2662 /* 80 */
1ceb70f8
L
2663 { REG_TABLE (REG_80) },
2664 { REG_TABLE (REG_81) },
592d1631 2665 { Bad_Opcode },
7148c369 2666 { REG_TABLE (REG_83) },
bf890a93
IT
2667 { "testB", { Eb, Gb }, 0 },
2668 { "testS", { Ev, Gv }, 0 },
2669 { "xchgB", { Ebh2, Gb }, 0 },
2670 { "xchgS", { Evh2, Gv }, 0 },
252b5132 2671 /* 88 */
bf890a93
IT
2672 { "movB", { Ebh3, Gb }, 0 },
2673 { "movS", { Evh3, Gv }, 0 },
2674 { "movB", { Gb, EbS }, 0 },
2675 { "movS", { Gv, EvS }, 0 },
2676 { "movD", { Sv, Sw }, 0 },
1ceb70f8 2677 { MOD_TABLE (MOD_8D) },
bf890a93 2678 { "movD", { Sw, Sv }, 0 },
1ceb70f8 2679 { REG_TABLE (REG_8F) },
252b5132 2680 /* 90 */
1ceb70f8 2681 { PREFIX_TABLE (PREFIX_90) },
bf890a93
IT
2682 { "xchgS", { RMeCX, eAX }, 0 },
2683 { "xchgS", { RMeDX, eAX }, 0 },
2684 { "xchgS", { RMeBX, eAX }, 0 },
2685 { "xchgS", { RMeSP, eAX }, 0 },
2686 { "xchgS", { RMeBP, eAX }, 0 },
2687 { "xchgS", { RMeSI, eAX }, 0 },
2688 { "xchgS", { RMeDI, eAX }, 0 },
252b5132 2689 /* 98 */
bf890a93
IT
2690 { "cW{t|}R", { XX }, 0 },
2691 { "cR{t|}O", { XX }, 0 },
4e7d34a6 2692 { X86_64_TABLE (X86_64_9A) },
592d1631 2693 { Bad_Opcode }, /* fwait */
bf890a93
IT
2694 { "pushfT", { XX }, 0 },
2695 { "popfT", { XX }, 0 },
2696 { "sahf", { XX }, 0 },
2697 { "lahf", { XX }, 0 },
252b5132 2698 /* a0 */
bf890a93
IT
2699 { "mov%LB", { AL, Ob }, 0 },
2700 { "mov%LS", { eAX, Ov }, 0 },
2701 { "mov%LB", { Ob, AL }, 0 },
2702 { "mov%LS", { Ov, eAX }, 0 },
2703 { "movs{b|}", { Ybr, Xb }, 0 },
2704 { "movs{R|}", { Yvr, Xv }, 0 },
2705 { "cmps{b|}", { Xb, Yb }, 0 },
2706 { "cmps{R|}", { Xv, Yv }, 0 },
252b5132 2707 /* a8 */
bf890a93
IT
2708 { "testB", { AL, Ib }, 0 },
2709 { "testS", { eAX, Iv }, 0 },
2710 { "stosB", { Ybr, AL }, 0 },
2711 { "stosS", { Yvr, eAX }, 0 },
2712 { "lodsB", { ALr, Xb }, 0 },
2713 { "lodsS", { eAXr, Xv }, 0 },
2714 { "scasB", { AL, Yb }, 0 },
2715 { "scasS", { eAX, Yv }, 0 },
252b5132 2716 /* b0 */
bf890a93
IT
2717 { "movB", { RMAL, Ib }, 0 },
2718 { "movB", { RMCL, Ib }, 0 },
2719 { "movB", { RMDL, Ib }, 0 },
2720 { "movB", { RMBL, Ib }, 0 },
2721 { "movB", { RMAH, Ib }, 0 },
2722 { "movB", { RMCH, Ib }, 0 },
2723 { "movB", { RMDH, Ib }, 0 },
2724 { "movB", { RMBH, Ib }, 0 },
252b5132 2725 /* b8 */
bf890a93
IT
2726 { "mov%LV", { RMeAX, Iv64 }, 0 },
2727 { "mov%LV", { RMeCX, Iv64 }, 0 },
2728 { "mov%LV", { RMeDX, Iv64 }, 0 },
2729 { "mov%LV", { RMeBX, Iv64 }, 0 },
2730 { "mov%LV", { RMeSP, Iv64 }, 0 },
2731 { "mov%LV", { RMeBP, Iv64 }, 0 },
2732 { "mov%LV", { RMeSI, Iv64 }, 0 },
2733 { "mov%LV", { RMeDI, Iv64 }, 0 },
252b5132 2734 /* c0 */
1ceb70f8
L
2735 { REG_TABLE (REG_C0) },
2736 { REG_TABLE (REG_C1) },
bf890a93
IT
2737 { "retT", { Iw, BND }, 0 },
2738 { "retT", { BND }, 0 },
4e7d34a6
L
2739 { X86_64_TABLE (X86_64_C4) },
2740 { X86_64_TABLE (X86_64_C5) },
1ceb70f8
L
2741 { REG_TABLE (REG_C6) },
2742 { REG_TABLE (REG_C7) },
252b5132 2743 /* c8 */
bf890a93
IT
2744 { "enterT", { Iw, Ib }, 0 },
2745 { "leaveT", { XX }, 0 },
2746 { "Jret{|f}P", { Iw }, 0 },
2747 { "Jret{|f}P", { XX }, 0 },
2748 { "int3", { XX }, 0 },
2749 { "int", { Ib }, 0 },
4e7d34a6 2750 { X86_64_TABLE (X86_64_CE) },
bf890a93 2751 { "iret%LP", { XX }, 0 },
252b5132 2752 /* d0 */
1ceb70f8
L
2753 { REG_TABLE (REG_D0) },
2754 { REG_TABLE (REG_D1) },
2755 { REG_TABLE (REG_D2) },
2756 { REG_TABLE (REG_D3) },
4e7d34a6
L
2757 { X86_64_TABLE (X86_64_D4) },
2758 { X86_64_TABLE (X86_64_D5) },
592d1631 2759 { Bad_Opcode },
bf890a93 2760 { "xlat", { DSBX }, 0 },
252b5132
RH
2761 /* d8 */
2762 { FLOAT },
2763 { FLOAT },
2764 { FLOAT },
2765 { FLOAT },
2766 { FLOAT },
2767 { FLOAT },
2768 { FLOAT },
2769 { FLOAT },
2770 /* e0 */
bf890a93
IT
2771 { "loopneFH", { Jb, XX, loop_jcxz_flag }, 0 },
2772 { "loopeFH", { Jb, XX, loop_jcxz_flag }, 0 },
2773 { "loopFH", { Jb, XX, loop_jcxz_flag }, 0 },
2774 { "jEcxzH", { Jb, XX, loop_jcxz_flag }, 0 },
2775 { "inB", { AL, Ib }, 0 },
2776 { "inG", { zAX, Ib }, 0 },
2777 { "outB", { Ib, AL }, 0 },
2778 { "outG", { Ib, zAX }, 0 },
252b5132 2779 /* e8 */
a72d2af2
L
2780 { X86_64_TABLE (X86_64_E8) },
2781 { X86_64_TABLE (X86_64_E9) },
4e7d34a6 2782 { X86_64_TABLE (X86_64_EA) },
bf890a93
IT
2783 { "jmp", { Jb, BND }, 0 },
2784 { "inB", { AL, indirDX }, 0 },
2785 { "inG", { zAX, indirDX }, 0 },
2786 { "outB", { indirDX, AL }, 0 },
2787 { "outG", { indirDX, zAX }, 0 },
252b5132 2788 /* f0 */
592d1631 2789 { Bad_Opcode }, /* lock prefix */
bf890a93 2790 { "icebp", { XX }, 0 },
592d1631
L
2791 { Bad_Opcode }, /* repne */
2792 { Bad_Opcode }, /* repz */
bf890a93
IT
2793 { "hlt", { XX }, 0 },
2794 { "cmc", { XX }, 0 },
1ceb70f8
L
2795 { REG_TABLE (REG_F6) },
2796 { REG_TABLE (REG_F7) },
252b5132 2797 /* f8 */
bf890a93
IT
2798 { "clc", { XX }, 0 },
2799 { "stc", { XX }, 0 },
2800 { "cli", { XX }, 0 },
2801 { "sti", { XX }, 0 },
2802 { "cld", { XX }, 0 },
2803 { "std", { XX }, 0 },
1ceb70f8
L
2804 { REG_TABLE (REG_FE) },
2805 { REG_TABLE (REG_FF) },
252b5132
RH
2806};
2807
6439fc28 2808static const struct dis386 dis386_twobyte[] = {
252b5132 2809 /* 00 */
1ceb70f8
L
2810 { REG_TABLE (REG_0F00 ) },
2811 { REG_TABLE (REG_0F01 ) },
bf890a93
IT
2812 { "larS", { Gv, Ew }, 0 },
2813 { "lslS", { Gv, Ew }, 0 },
592d1631 2814 { Bad_Opcode },
bf890a93
IT
2815 { "syscall", { XX }, 0 },
2816 { "clts", { XX }, 0 },
2817 { "sysret%LP", { XX }, 0 },
252b5132 2818 /* 08 */
bf890a93
IT
2819 { "invd", { XX }, 0 },
2820 { "wbinvd", { XX }, 0 },
592d1631 2821 { Bad_Opcode },
bf890a93 2822 { "ud2", { XX }, 0 },
592d1631 2823 { Bad_Opcode },
b5b1fc4f 2824 { REG_TABLE (REG_0F0D) },
bf890a93
IT
2825 { "femms", { XX }, 0 },
2826 { "", { MX, EM, OPSUF }, 0 }, /* See OP_3DNowSuffix. */
252b5132 2827 /* 10 */
1ceb70f8
L
2828 { PREFIX_TABLE (PREFIX_0F10) },
2829 { PREFIX_TABLE (PREFIX_0F11) },
2830 { PREFIX_TABLE (PREFIX_0F12) },
2831 { MOD_TABLE (MOD_0F13) },
507bd325
L
2832 { "unpcklpX", { XM, EXx }, PREFIX_OPCODE },
2833 { "unpckhpX", { XM, EXx }, PREFIX_OPCODE },
1ceb70f8
L
2834 { PREFIX_TABLE (PREFIX_0F16) },
2835 { MOD_TABLE (MOD_0F17) },
252b5132 2836 /* 18 */
1ceb70f8 2837 { REG_TABLE (REG_0F18) },
bf890a93 2838 { "nopQ", { Ev }, 0 },
7e8b059b
L
2839 { PREFIX_TABLE (PREFIX_0F1A) },
2840 { PREFIX_TABLE (PREFIX_0F1B) },
bf890a93
IT
2841 { "nopQ", { Ev }, 0 },
2842 { "nopQ", { Ev }, 0 },
2843 { "nopQ", { Ev }, 0 },
2844 { "nopQ", { Ev }, 0 },
252b5132 2845 /* 20 */
bf890a93
IT
2846 { "movZ", { Rm, Cm }, 0 },
2847 { "movZ", { Rm, Dm }, 0 },
2848 { "movZ", { Cm, Rm }, 0 },
2849 { "movZ", { Dm, Rm }, 0 },
1ceb70f8 2850 { MOD_TABLE (MOD_0F24) },
592d1631 2851 { Bad_Opcode },
1ceb70f8 2852 { MOD_TABLE (MOD_0F26) },
592d1631 2853 { Bad_Opcode },
252b5132 2854 /* 28 */
507bd325
L
2855 { "movapX", { XM, EXx }, PREFIX_OPCODE },
2856 { "movapX", { EXxS, XM }, PREFIX_OPCODE },
1ceb70f8
L
2857 { PREFIX_TABLE (PREFIX_0F2A) },
2858 { PREFIX_TABLE (PREFIX_0F2B) },
2859 { PREFIX_TABLE (PREFIX_0F2C) },
2860 { PREFIX_TABLE (PREFIX_0F2D) },
2861 { PREFIX_TABLE (PREFIX_0F2E) },
2862 { PREFIX_TABLE (PREFIX_0F2F) },
252b5132 2863 /* 30 */
bf890a93
IT
2864 { "wrmsr", { XX }, 0 },
2865 { "rdtsc", { XX }, 0 },
2866 { "rdmsr", { XX }, 0 },
2867 { "rdpmc", { XX }, 0 },
2868 { "sysenter", { XX }, 0 },
2869 { "sysexit", { XX }, 0 },
592d1631 2870 { Bad_Opcode },
bf890a93 2871 { "getsec", { XX }, 0 },
252b5132 2872 /* 38 */
507bd325 2873 { THREE_BYTE_TABLE_PREFIX (THREE_BYTE_0F38, PREFIX_OPCODE) },
592d1631 2874 { Bad_Opcode },
507bd325 2875 { THREE_BYTE_TABLE_PREFIX (THREE_BYTE_0F3A, PREFIX_OPCODE) },
592d1631
L
2876 { Bad_Opcode },
2877 { Bad_Opcode },
2878 { Bad_Opcode },
2879 { Bad_Opcode },
2880 { Bad_Opcode },
252b5132 2881 /* 40 */
bf890a93
IT
2882 { "cmovoS", { Gv, Ev }, 0 },
2883 { "cmovnoS", { Gv, Ev }, 0 },
2884 { "cmovbS", { Gv, Ev }, 0 },
2885 { "cmovaeS", { Gv, Ev }, 0 },
2886 { "cmoveS", { Gv, Ev }, 0 },
2887 { "cmovneS", { Gv, Ev }, 0 },
2888 { "cmovbeS", { Gv, Ev }, 0 },
2889 { "cmovaS", { Gv, Ev }, 0 },
252b5132 2890 /* 48 */
bf890a93
IT
2891 { "cmovsS", { Gv, Ev }, 0 },
2892 { "cmovnsS", { Gv, Ev }, 0 },
2893 { "cmovpS", { Gv, Ev }, 0 },
2894 { "cmovnpS", { Gv, Ev }, 0 },
2895 { "cmovlS", { Gv, Ev }, 0 },
2896 { "cmovgeS", { Gv, Ev }, 0 },
2897 { "cmovleS", { Gv, Ev }, 0 },
2898 { "cmovgS", { Gv, Ev }, 0 },
252b5132 2899 /* 50 */
75c135a8 2900 { MOD_TABLE (MOD_0F51) },
1ceb70f8
L
2901 { PREFIX_TABLE (PREFIX_0F51) },
2902 { PREFIX_TABLE (PREFIX_0F52) },
2903 { PREFIX_TABLE (PREFIX_0F53) },
507bd325
L
2904 { "andpX", { XM, EXx }, PREFIX_OPCODE },
2905 { "andnpX", { XM, EXx }, PREFIX_OPCODE },
2906 { "orpX", { XM, EXx }, PREFIX_OPCODE },
2907 { "xorpX", { XM, EXx }, PREFIX_OPCODE },
252b5132 2908 /* 58 */
1ceb70f8
L
2909 { PREFIX_TABLE (PREFIX_0F58) },
2910 { PREFIX_TABLE (PREFIX_0F59) },
2911 { PREFIX_TABLE (PREFIX_0F5A) },
2912 { PREFIX_TABLE (PREFIX_0F5B) },
2913 { PREFIX_TABLE (PREFIX_0F5C) },
2914 { PREFIX_TABLE (PREFIX_0F5D) },
2915 { PREFIX_TABLE (PREFIX_0F5E) },
2916 { PREFIX_TABLE (PREFIX_0F5F) },
252b5132 2917 /* 60 */
1ceb70f8
L
2918 { PREFIX_TABLE (PREFIX_0F60) },
2919 { PREFIX_TABLE (PREFIX_0F61) },
2920 { PREFIX_TABLE (PREFIX_0F62) },
507bd325
L
2921 { "packsswb", { MX, EM }, PREFIX_OPCODE },
2922 { "pcmpgtb", { MX, EM }, PREFIX_OPCODE },
2923 { "pcmpgtw", { MX, EM }, PREFIX_OPCODE },
2924 { "pcmpgtd", { MX, EM }, PREFIX_OPCODE },
2925 { "packuswb", { MX, EM }, PREFIX_OPCODE },
252b5132 2926 /* 68 */
507bd325
L
2927 { "punpckhbw", { MX, EM }, PREFIX_OPCODE },
2928 { "punpckhwd", { MX, EM }, PREFIX_OPCODE },
2929 { "punpckhdq", { MX, EM }, PREFIX_OPCODE },
2930 { "packssdw", { MX, EM }, PREFIX_OPCODE },
1ceb70f8
L
2931 { PREFIX_TABLE (PREFIX_0F6C) },
2932 { PREFIX_TABLE (PREFIX_0F6D) },
507bd325 2933 { "movK", { MX, Edq }, PREFIX_OPCODE },
1ceb70f8 2934 { PREFIX_TABLE (PREFIX_0F6F) },
252b5132 2935 /* 70 */
1ceb70f8
L
2936 { PREFIX_TABLE (PREFIX_0F70) },
2937 { REG_TABLE (REG_0F71) },
2938 { REG_TABLE (REG_0F72) },
2939 { REG_TABLE (REG_0F73) },
507bd325
L
2940 { "pcmpeqb", { MX, EM }, PREFIX_OPCODE },
2941 { "pcmpeqw", { MX, EM }, PREFIX_OPCODE },
2942 { "pcmpeqd", { MX, EM }, PREFIX_OPCODE },
2943 { "emms", { XX }, PREFIX_OPCODE },
252b5132 2944 /* 78 */
1ceb70f8
L
2945 { PREFIX_TABLE (PREFIX_0F78) },
2946 { PREFIX_TABLE (PREFIX_0F79) },
4e7d34a6 2947 { THREE_BYTE_TABLE (THREE_BYTE_0F7A) },
592d1631 2948 { Bad_Opcode },
1ceb70f8
L
2949 { PREFIX_TABLE (PREFIX_0F7C) },
2950 { PREFIX_TABLE (PREFIX_0F7D) },
2951 { PREFIX_TABLE (PREFIX_0F7E) },
2952 { PREFIX_TABLE (PREFIX_0F7F) },
252b5132 2953 /* 80 */
bf890a93
IT
2954 { "joH", { Jv, BND, cond_jump_flag }, 0 },
2955 { "jnoH", { Jv, BND, cond_jump_flag }, 0 },
2956 { "jbH", { Jv, BND, cond_jump_flag }, 0 },
2957 { "jaeH", { Jv, BND, cond_jump_flag }, 0 },
2958 { "jeH", { Jv, BND, cond_jump_flag }, 0 },
2959 { "jneH", { Jv, BND, cond_jump_flag }, 0 },
2960 { "jbeH", { Jv, BND, cond_jump_flag }, 0 },
2961 { "jaH", { Jv, BND, cond_jump_flag }, 0 },
252b5132 2962 /* 88 */
bf890a93
IT
2963 { "jsH", { Jv, BND, cond_jump_flag }, 0 },
2964 { "jnsH", { Jv, BND, cond_jump_flag }, 0 },
2965 { "jpH", { Jv, BND, cond_jump_flag }, 0 },
2966 { "jnpH", { Jv, BND, cond_jump_flag }, 0 },
2967 { "jlH", { Jv, BND, cond_jump_flag }, 0 },
2968 { "jgeH", { Jv, BND, cond_jump_flag }, 0 },
2969 { "jleH", { Jv, BND, cond_jump_flag }, 0 },
2970 { "jgH", { Jv, BND, cond_jump_flag }, 0 },
252b5132 2971 /* 90 */
bf890a93
IT
2972 { "seto", { Eb }, 0 },
2973 { "setno", { Eb }, 0 },
2974 { "setb", { Eb }, 0 },
2975 { "setae", { Eb }, 0 },
2976 { "sete", { Eb }, 0 },
2977 { "setne", { Eb }, 0 },
2978 { "setbe", { Eb }, 0 },
2979 { "seta", { Eb }, 0 },
252b5132 2980 /* 98 */
bf890a93
IT
2981 { "sets", { Eb }, 0 },
2982 { "setns", { Eb }, 0 },
2983 { "setp", { Eb }, 0 },
2984 { "setnp", { Eb }, 0 },
2985 { "setl", { Eb }, 0 },
2986 { "setge", { Eb }, 0 },
2987 { "setle", { Eb }, 0 },
2988 { "setg", { Eb }, 0 },
252b5132 2989 /* a0 */
bf890a93
IT
2990 { "pushT", { fs }, 0 },
2991 { "popT", { fs }, 0 },
2992 { "cpuid", { XX }, 0 },
2993 { "btS", { Ev, Gv }, 0 },
2994 { "shldS", { Ev, Gv, Ib }, 0 },
2995 { "shldS", { Ev, Gv, CL }, 0 },
1ceb70f8
L
2996 { REG_TABLE (REG_0FA6) },
2997 { REG_TABLE (REG_0FA7) },
252b5132 2998 /* a8 */
bf890a93
IT
2999 { "pushT", { gs }, 0 },
3000 { "popT", { gs }, 0 },
3001 { "rsm", { XX }, 0 },
3002 { "btsS", { Evh1, Gv }, 0 },
3003 { "shrdS", { Ev, Gv, Ib }, 0 },
3004 { "shrdS", { Ev, Gv, CL }, 0 },
1ceb70f8 3005 { REG_TABLE (REG_0FAE) },
bf890a93 3006 { "imulS", { Gv, Ev }, 0 },
252b5132 3007 /* b0 */
bf890a93
IT
3008 { "cmpxchgB", { Ebh1, Gb }, 0 },
3009 { "cmpxchgS", { Evh1, Gv }, 0 },
1ceb70f8 3010 { MOD_TABLE (MOD_0FB2) },
bf890a93 3011 { "btrS", { Evh1, Gv }, 0 },
1ceb70f8
L
3012 { MOD_TABLE (MOD_0FB4) },
3013 { MOD_TABLE (MOD_0FB5) },
bf890a93
IT
3014 { "movz{bR|x}", { Gv, Eb }, 0 },
3015 { "movz{wR|x}", { Gv, Ew }, 0 }, /* yes, there really is movzww ! */
252b5132 3016 /* b8 */
1ceb70f8 3017 { PREFIX_TABLE (PREFIX_0FB8) },
bf890a93 3018 { "ud1", { XX }, 0 },
1ceb70f8 3019 { REG_TABLE (REG_0FBA) },
bf890a93 3020 { "btcS", { Evh1, Gv }, 0 },
f12dc422 3021 { PREFIX_TABLE (PREFIX_0FBC) },
1ceb70f8 3022 { PREFIX_TABLE (PREFIX_0FBD) },
bf890a93
IT
3023 { "movs{bR|x}", { Gv, Eb }, 0 },
3024 { "movs{wR|x}", { Gv, Ew }, 0 }, /* yes, there really is movsww ! */
252b5132 3025 /* c0 */
bf890a93
IT
3026 { "xaddB", { Ebh1, Gb }, 0 },
3027 { "xaddS", { Evh1, Gv }, 0 },
1ceb70f8 3028 { PREFIX_TABLE (PREFIX_0FC2) },
a8484f96 3029 { MOD_TABLE (MOD_0FC3) },
507bd325
L
3030 { "pinsrw", { MX, Edqw, Ib }, PREFIX_OPCODE },
3031 { "pextrw", { Gdq, MS, Ib }, PREFIX_OPCODE },
3032 { "shufpX", { XM, EXx, Ib }, PREFIX_OPCODE },
1ceb70f8 3033 { REG_TABLE (REG_0FC7) },
252b5132 3034 /* c8 */
bf890a93
IT
3035 { "bswap", { RMeAX }, 0 },
3036 { "bswap", { RMeCX }, 0 },
3037 { "bswap", { RMeDX }, 0 },
3038 { "bswap", { RMeBX }, 0 },
3039 { "bswap", { RMeSP }, 0 },
3040 { "bswap", { RMeBP }, 0 },
3041 { "bswap", { RMeSI }, 0 },
3042 { "bswap", { RMeDI }, 0 },
252b5132 3043 /* d0 */
1ceb70f8 3044 { PREFIX_TABLE (PREFIX_0FD0) },
507bd325
L
3045 { "psrlw", { MX, EM }, PREFIX_OPCODE },
3046 { "psrld", { MX, EM }, PREFIX_OPCODE },
3047 { "psrlq", { MX, EM }, PREFIX_OPCODE },
3048 { "paddq", { MX, EM }, PREFIX_OPCODE },
3049 { "pmullw", { MX, EM }, PREFIX_OPCODE },
1ceb70f8 3050 { PREFIX_TABLE (PREFIX_0FD6) },
75c135a8 3051 { MOD_TABLE (MOD_0FD7) },
252b5132 3052 /* d8 */
507bd325
L
3053 { "psubusb", { MX, EM }, PREFIX_OPCODE },
3054 { "psubusw", { MX, EM }, PREFIX_OPCODE },
3055 { "pminub", { MX, EM }, PREFIX_OPCODE },
3056 { "pand", { MX, EM }, PREFIX_OPCODE },
3057 { "paddusb", { MX, EM }, PREFIX_OPCODE },
3058 { "paddusw", { MX, EM }, PREFIX_OPCODE },
3059 { "pmaxub", { MX, EM }, PREFIX_OPCODE },
3060 { "pandn", { MX, EM }, PREFIX_OPCODE },
252b5132 3061 /* e0 */
507bd325
L
3062 { "pavgb", { MX, EM }, PREFIX_OPCODE },
3063 { "psraw", { MX, EM }, PREFIX_OPCODE },
3064 { "psrad", { MX, EM }, PREFIX_OPCODE },
3065 { "pavgw", { MX, EM }, PREFIX_OPCODE },
3066 { "pmulhuw", { MX, EM }, PREFIX_OPCODE },
3067 { "pmulhw", { MX, EM }, PREFIX_OPCODE },
1ceb70f8
L
3068 { PREFIX_TABLE (PREFIX_0FE6) },
3069 { PREFIX_TABLE (PREFIX_0FE7) },
252b5132 3070 /* e8 */
507bd325
L
3071 { "psubsb", { MX, EM }, PREFIX_OPCODE },
3072 { "psubsw", { MX, EM }, PREFIX_OPCODE },
3073 { "pminsw", { MX, EM }, PREFIX_OPCODE },
3074 { "por", { MX, EM }, PREFIX_OPCODE },
3075 { "paddsb", { MX, EM }, PREFIX_OPCODE },
3076 { "paddsw", { MX, EM }, PREFIX_OPCODE },
3077 { "pmaxsw", { MX, EM }, PREFIX_OPCODE },
3078 { "pxor", { MX, EM }, PREFIX_OPCODE },
252b5132 3079 /* f0 */
1ceb70f8 3080 { PREFIX_TABLE (PREFIX_0FF0) },
507bd325
L
3081 { "psllw", { MX, EM }, PREFIX_OPCODE },
3082 { "pslld", { MX, EM }, PREFIX_OPCODE },
3083 { "psllq", { MX, EM }, PREFIX_OPCODE },
3084 { "pmuludq", { MX, EM }, PREFIX_OPCODE },
3085 { "pmaddwd", { MX, EM }, PREFIX_OPCODE },
3086 { "psadbw", { MX, EM }, PREFIX_OPCODE },
1ceb70f8 3087 { PREFIX_TABLE (PREFIX_0FF7) },
252b5132 3088 /* f8 */
507bd325
L
3089 { "psubb", { MX, EM }, PREFIX_OPCODE },
3090 { "psubw", { MX, EM }, PREFIX_OPCODE },
3091 { "psubd", { MX, EM }, PREFIX_OPCODE },
3092 { "psubq", { MX, EM }, PREFIX_OPCODE },
3093 { "paddb", { MX, EM }, PREFIX_OPCODE },
3094 { "paddw", { MX, EM }, PREFIX_OPCODE },
3095 { "paddd", { MX, EM }, PREFIX_OPCODE },
592d1631 3096 { Bad_Opcode },
252b5132
RH
3097};
3098
3099static const unsigned char onebyte_has_modrm[256] = {
c608c12e
AM
3100 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
3101 /* ------------------------------- */
3102 /* 00 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 00 */
3103 /* 10 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 10 */
3104 /* 20 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 20 */
3105 /* 30 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 30 */
3106 /* 40 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 40 */
3107 /* 50 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 50 */
3108 /* 60 */ 0,0,1,1,0,0,0,0,0,1,0,1,0,0,0,0, /* 60 */
3109 /* 70 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 70 */
3110 /* 80 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 80 */
3111 /* 90 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 90 */
3112 /* a0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* a0 */
3113 /* b0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* b0 */
3114 /* c0 */ 1,1,0,0,1,1,1,1,0,0,0,0,0,0,0,0, /* c0 */
3115 /* d0 */ 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1, /* d0 */
3116 /* e0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* e0 */
3117 /* f0 */ 0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1 /* f0 */
3118 /* ------------------------------- */
3119 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
252b5132
RH
3120};
3121
3122static const unsigned char twobyte_has_modrm[256] = {
c608c12e
AM
3123 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
3124 /* ------------------------------- */
252b5132 3125 /* 00 */ 1,1,1,1,0,0,0,0,0,0,0,0,0,1,0,1, /* 0f */
b5b1fc4f 3126 /* 10 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 1f */
85f10a01 3127 /* 20 */ 1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1, /* 2f */
331d2d0d 3128 /* 30 */ 0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0, /* 3f */
252b5132 3129 /* 40 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 4f */
4bba6815
AM
3130 /* 50 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 5f */
3131 /* 60 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 6f */
85f10a01 3132 /* 70 */ 1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1, /* 7f */
252b5132
RH
3133 /* 80 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 8f */
3134 /* 90 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 9f */
30d1c836 3135 /* a0 */ 0,0,0,1,1,1,1,1,0,0,0,1,1,1,1,1, /* af */
050dfa73 3136 /* b0 */ 1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1, /* bf */
252b5132 3137 /* c0 */ 1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0, /* cf */
ca164297 3138 /* d0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* df */
4bba6815 3139 /* e0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* ef */
ca164297 3140 /* f0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0 /* ff */
c608c12e
AM
3141 /* ------------------------------- */
3142 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
3143};
3144
252b5132
RH
3145static char obuf[100];
3146static char *obufp;
ea397f5b 3147static char *mnemonicendp;
252b5132
RH
3148static char scratchbuf[100];
3149static unsigned char *start_codep;
3150static unsigned char *insn_codep;
3151static unsigned char *codep;
285ca992 3152static unsigned char *end_codep;
f16cd0d5
L
3153static int last_lock_prefix;
3154static int last_repz_prefix;
3155static int last_repnz_prefix;
3156static int last_data_prefix;
3157static int last_addr_prefix;
3158static int last_rex_prefix;
3159static int last_seg_prefix;
d9949a36 3160static int fwait_prefix;
285ca992
L
3161/* The active segment register prefix. */
3162static int active_seg_prefix;
f16cd0d5
L
3163#define MAX_CODE_LENGTH 15
3164/* We can up to 14 prefixes since the maximum instruction length is
3165 15bytes. */
3166static int all_prefixes[MAX_CODE_LENGTH - 1];
252b5132 3167static disassemble_info *the_info;
7967e09e
L
3168static struct
3169 {
3170 int mod;
7967e09e 3171 int reg;
484c222e 3172 int rm;
7967e09e
L
3173 }
3174modrm;
4bba6815 3175static unsigned char need_modrm;
dfc8cf43
L
3176static struct
3177 {
3178 int scale;
3179 int index;
3180 int base;
3181 }
3182sib;
c0f3af97
L
3183static struct
3184 {
3185 int register_specifier;
3186 int length;
3187 int prefix;
3188 int w;
43234a1e
L
3189 int evex;
3190 int r;
3191 int v;
3192 int mask_register_specifier;
3193 int zeroing;
3194 int ll;
3195 int b;
c0f3af97
L
3196 }
3197vex;
3198static unsigned char need_vex;
3199static unsigned char need_vex_reg;
dae39acc 3200static unsigned char vex_w_done;
252b5132 3201
ea397f5b
L
3202struct op
3203 {
3204 const char *name;
3205 unsigned int len;
3206 };
3207
4bba6815
AM
3208/* If we are accessing mod/rm/reg without need_modrm set, then the
3209 values are stale. Hitting this abort likely indicates that you
3210 need to update onebyte_has_modrm or twobyte_has_modrm. */
3211#define MODRM_CHECK if (!need_modrm) abort ()
3212
d708bcba
AM
3213static const char **names64;
3214static const char **names32;
3215static const char **names16;
3216static const char **names8;
3217static const char **names8rex;
3218static const char **names_seg;
db51cc60
L
3219static const char *index64;
3220static const char *index32;
d708bcba 3221static const char **index16;
7e8b059b 3222static const char **names_bnd;
d708bcba
AM
3223
3224static const char *intel_names64[] = {
3225 "rax", "rcx", "rdx", "rbx", "rsp", "rbp", "rsi", "rdi",
3226 "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15"
3227};
3228static const char *intel_names32[] = {
3229 "eax", "ecx", "edx", "ebx", "esp", "ebp", "esi", "edi",
3230 "r8d", "r9d", "r10d", "r11d", "r12d", "r13d", "r14d", "r15d"
3231};
3232static const char *intel_names16[] = {
3233 "ax", "cx", "dx", "bx", "sp", "bp", "si", "di",
3234 "r8w", "r9w", "r10w", "r11w", "r12w", "r13w", "r14w", "r15w"
3235};
3236static const char *intel_names8[] = {
3237 "al", "cl", "dl", "bl", "ah", "ch", "dh", "bh",
3238};
3239static const char *intel_names8rex[] = {
3240 "al", "cl", "dl", "bl", "spl", "bpl", "sil", "dil",
3241 "r8b", "r9b", "r10b", "r11b", "r12b", "r13b", "r14b", "r15b"
3242};
3243static const char *intel_names_seg[] = {
3244 "es", "cs", "ss", "ds", "fs", "gs", "?", "?",
3245};
db51cc60
L
3246static const char *intel_index64 = "riz";
3247static const char *intel_index32 = "eiz";
d708bcba
AM
3248static const char *intel_index16[] = {
3249 "bx+si", "bx+di", "bp+si", "bp+di", "si", "di", "bp", "bx"
3250};
3251
3252static const char *att_names64[] = {
3253 "%rax", "%rcx", "%rdx", "%rbx", "%rsp", "%rbp", "%rsi", "%rdi",
52b15da3
JH
3254 "%r8", "%r9", "%r10", "%r11", "%r12", "%r13", "%r14", "%r15"
3255};
d708bcba
AM
3256static const char *att_names32[] = {
3257 "%eax", "%ecx", "%edx", "%ebx", "%esp", "%ebp", "%esi", "%edi",
52b15da3 3258 "%r8d", "%r9d", "%r10d", "%r11d", "%r12d", "%r13d", "%r14d", "%r15d"
252b5132 3259};
d708bcba
AM
3260static const char *att_names16[] = {
3261 "%ax", "%cx", "%dx", "%bx", "%sp", "%bp", "%si", "%di",
52b15da3 3262 "%r8w", "%r9w", "%r10w", "%r11w", "%r12w", "%r13w", "%r14w", "%r15w"
252b5132 3263};
d708bcba
AM
3264static const char *att_names8[] = {
3265 "%al", "%cl", "%dl", "%bl", "%ah", "%ch", "%dh", "%bh",
252b5132 3266};
d708bcba
AM
3267static const char *att_names8rex[] = {
3268 "%al", "%cl", "%dl", "%bl", "%spl", "%bpl", "%sil", "%dil",
52b15da3
JH
3269 "%r8b", "%r9b", "%r10b", "%r11b", "%r12b", "%r13b", "%r14b", "%r15b"
3270};
d708bcba
AM
3271static const char *att_names_seg[] = {
3272 "%es", "%cs", "%ss", "%ds", "%fs", "%gs", "%?", "%?",
252b5132 3273};
db51cc60
L
3274static const char *att_index64 = "%riz";
3275static const char *att_index32 = "%eiz";
d708bcba
AM
3276static const char *att_index16[] = {
3277 "%bx,%si", "%bx,%di", "%bp,%si", "%bp,%di", "%si", "%di", "%bp", "%bx"
252b5132
RH
3278};
3279
b9733481
L
3280static const char **names_mm;
3281static const char *intel_names_mm[] = {
3282 "mm0", "mm1", "mm2", "mm3",
3283 "mm4", "mm5", "mm6", "mm7"
3284};
3285static const char *att_names_mm[] = {
3286 "%mm0", "%mm1", "%mm2", "%mm3",
3287 "%mm4", "%mm5", "%mm6", "%mm7"
3288};
3289
7e8b059b
L
3290static const char *intel_names_bnd[] = {
3291 "bnd0", "bnd1", "bnd2", "bnd3"
3292};
3293
3294static const char *att_names_bnd[] = {
3295 "%bnd0", "%bnd1", "%bnd2", "%bnd3"
3296};
3297
b9733481
L
3298static const char **names_xmm;
3299static const char *intel_names_xmm[] = {
3300 "xmm0", "xmm1", "xmm2", "xmm3",
3301 "xmm4", "xmm5", "xmm6", "xmm7",
3302 "xmm8", "xmm9", "xmm10", "xmm11",
43234a1e
L
3303 "xmm12", "xmm13", "xmm14", "xmm15",
3304 "xmm16", "xmm17", "xmm18", "xmm19",
3305 "xmm20", "xmm21", "xmm22", "xmm23",
3306 "xmm24", "xmm25", "xmm26", "xmm27",
3307 "xmm28", "xmm29", "xmm30", "xmm31"
b9733481
L
3308};
3309static const char *att_names_xmm[] = {
3310 "%xmm0", "%xmm1", "%xmm2", "%xmm3",
3311 "%xmm4", "%xmm5", "%xmm6", "%xmm7",
3312 "%xmm8", "%xmm9", "%xmm10", "%xmm11",
43234a1e
L
3313 "%xmm12", "%xmm13", "%xmm14", "%xmm15",
3314 "%xmm16", "%xmm17", "%xmm18", "%xmm19",
3315 "%xmm20", "%xmm21", "%xmm22", "%xmm23",
3316 "%xmm24", "%xmm25", "%xmm26", "%xmm27",
3317 "%xmm28", "%xmm29", "%xmm30", "%xmm31"
b9733481
L
3318};
3319
3320static const char **names_ymm;
3321static const char *intel_names_ymm[] = {
3322 "ymm0", "ymm1", "ymm2", "ymm3",
3323 "ymm4", "ymm5", "ymm6", "ymm7",
3324 "ymm8", "ymm9", "ymm10", "ymm11",
43234a1e
L
3325 "ymm12", "ymm13", "ymm14", "ymm15",
3326 "ymm16", "ymm17", "ymm18", "ymm19",
3327 "ymm20", "ymm21", "ymm22", "ymm23",
3328 "ymm24", "ymm25", "ymm26", "ymm27",
3329 "ymm28", "ymm29", "ymm30", "ymm31"
b9733481
L
3330};
3331static const char *att_names_ymm[] = {
3332 "%ymm0", "%ymm1", "%ymm2", "%ymm3",
3333 "%ymm4", "%ymm5", "%ymm6", "%ymm7",
3334 "%ymm8", "%ymm9", "%ymm10", "%ymm11",
43234a1e
L
3335 "%ymm12", "%ymm13", "%ymm14", "%ymm15",
3336 "%ymm16", "%ymm17", "%ymm18", "%ymm19",
3337 "%ymm20", "%ymm21", "%ymm22", "%ymm23",
3338 "%ymm24", "%ymm25", "%ymm26", "%ymm27",
3339 "%ymm28", "%ymm29", "%ymm30", "%ymm31"
3340};
3341
3342static const char **names_zmm;
3343static const char *intel_names_zmm[] = {
3344 "zmm0", "zmm1", "zmm2", "zmm3",
3345 "zmm4", "zmm5", "zmm6", "zmm7",
3346 "zmm8", "zmm9", "zmm10", "zmm11",
3347 "zmm12", "zmm13", "zmm14", "zmm15",
3348 "zmm16", "zmm17", "zmm18", "zmm19",
3349 "zmm20", "zmm21", "zmm22", "zmm23",
3350 "zmm24", "zmm25", "zmm26", "zmm27",
3351 "zmm28", "zmm29", "zmm30", "zmm31"
3352};
3353static const char *att_names_zmm[] = {
3354 "%zmm0", "%zmm1", "%zmm2", "%zmm3",
3355 "%zmm4", "%zmm5", "%zmm6", "%zmm7",
3356 "%zmm8", "%zmm9", "%zmm10", "%zmm11",
3357 "%zmm12", "%zmm13", "%zmm14", "%zmm15",
3358 "%zmm16", "%zmm17", "%zmm18", "%zmm19",
3359 "%zmm20", "%zmm21", "%zmm22", "%zmm23",
3360 "%zmm24", "%zmm25", "%zmm26", "%zmm27",
3361 "%zmm28", "%zmm29", "%zmm30", "%zmm31"
3362};
3363
3364static const char **names_mask;
3365static const char *intel_names_mask[] = {
3366 "k0", "k1", "k2", "k3", "k4", "k5", "k6", "k7"
3367};
3368static const char *att_names_mask[] = {
3369 "%k0", "%k1", "%k2", "%k3", "%k4", "%k5", "%k6", "%k7"
3370};
3371
3372static const char *names_rounding[] =
3373{
3374 "{rn-sae}",
3375 "{rd-sae}",
3376 "{ru-sae}",
3377 "{rz-sae}"
b9733481
L
3378};
3379
1ceb70f8
L
3380static const struct dis386 reg_table[][8] = {
3381 /* REG_80 */
252b5132 3382 {
bf890a93
IT
3383 { "addA", { Ebh1, Ib }, 0 },
3384 { "orA", { Ebh1, Ib }, 0 },
3385 { "adcA", { Ebh1, Ib }, 0 },
3386 { "sbbA", { Ebh1, Ib }, 0 },
3387 { "andA", { Ebh1, Ib }, 0 },
3388 { "subA", { Ebh1, Ib }, 0 },
3389 { "xorA", { Ebh1, Ib }, 0 },
3390 { "cmpA", { Eb, Ib }, 0 },
252b5132 3391 },
1ceb70f8 3392 /* REG_81 */
252b5132 3393 {
bf890a93
IT
3394 { "addQ", { Evh1, Iv }, 0 },
3395 { "orQ", { Evh1, Iv }, 0 },
3396 { "adcQ", { Evh1, Iv }, 0 },
3397 { "sbbQ", { Evh1, Iv }, 0 },
3398 { "andQ", { Evh1, Iv }, 0 },
3399 { "subQ", { Evh1, Iv }, 0 },
3400 { "xorQ", { Evh1, Iv }, 0 },
3401 { "cmpQ", { Ev, Iv }, 0 },
252b5132 3402 },
7148c369 3403 /* REG_83 */
252b5132 3404 {
bf890a93
IT
3405 { "addQ", { Evh1, sIb }, 0 },
3406 { "orQ", { Evh1, sIb }, 0 },
3407 { "adcQ", { Evh1, sIb }, 0 },
3408 { "sbbQ", { Evh1, sIb }, 0 },
3409 { "andQ", { Evh1, sIb }, 0 },
3410 { "subQ", { Evh1, sIb }, 0 },
3411 { "xorQ", { Evh1, sIb }, 0 },
3412 { "cmpQ", { Ev, sIb }, 0 },
252b5132 3413 },
1ceb70f8 3414 /* REG_8F */
4e7d34a6 3415 {
bf890a93 3416 { "popU", { stackEv }, 0 },
c48244a5 3417 { XOP_8F_TABLE (XOP_09) },
592d1631
L
3418 { Bad_Opcode },
3419 { Bad_Opcode },
3420 { Bad_Opcode },
f88c9eb0 3421 { XOP_8F_TABLE (XOP_09) },
4e7d34a6 3422 },
1ceb70f8 3423 /* REG_C0 */
252b5132 3424 {
bf890a93
IT
3425 { "rolA", { Eb, Ib }, 0 },
3426 { "rorA", { Eb, Ib }, 0 },
3427 { "rclA", { Eb, Ib }, 0 },
3428 { "rcrA", { Eb, Ib }, 0 },
3429 { "shlA", { Eb, Ib }, 0 },
3430 { "shrA", { Eb, Ib }, 0 },
592d1631 3431 { Bad_Opcode },
bf890a93 3432 { "sarA", { Eb, Ib }, 0 },
252b5132 3433 },
1ceb70f8 3434 /* REG_C1 */
252b5132 3435 {
bf890a93
IT
3436 { "rolQ", { Ev, Ib }, 0 },
3437 { "rorQ", { Ev, Ib }, 0 },
3438 { "rclQ", { Ev, Ib }, 0 },
3439 { "rcrQ", { Ev, Ib }, 0 },
3440 { "shlQ", { Ev, Ib }, 0 },
3441 { "shrQ", { Ev, Ib }, 0 },
592d1631 3442 { Bad_Opcode },
bf890a93 3443 { "sarQ", { Ev, Ib }, 0 },
252b5132 3444 },
1ceb70f8 3445 /* REG_C6 */
4e7d34a6 3446 {
bf890a93 3447 { "movA", { Ebh3, Ib }, 0 },
42164a71
L
3448 { Bad_Opcode },
3449 { Bad_Opcode },
3450 { Bad_Opcode },
3451 { Bad_Opcode },
3452 { Bad_Opcode },
3453 { Bad_Opcode },
3454 { MOD_TABLE (MOD_C6_REG_7) },
4e7d34a6 3455 },
1ceb70f8 3456 /* REG_C7 */
4e7d34a6 3457 {
bf890a93 3458 { "movQ", { Evh3, Iv }, 0 },
42164a71
L
3459 { Bad_Opcode },
3460 { Bad_Opcode },
3461 { Bad_Opcode },
3462 { Bad_Opcode },
3463 { Bad_Opcode },
3464 { Bad_Opcode },
3465 { MOD_TABLE (MOD_C7_REG_7) },
4e7d34a6 3466 },
1ceb70f8 3467 /* REG_D0 */
252b5132 3468 {
bf890a93
IT
3469 { "rolA", { Eb, I1 }, 0 },
3470 { "rorA", { Eb, I1 }, 0 },
3471 { "rclA", { Eb, I1 }, 0 },
3472 { "rcrA", { Eb, I1 }, 0 },
3473 { "shlA", { Eb, I1 }, 0 },
3474 { "shrA", { Eb, I1 }, 0 },
592d1631 3475 { Bad_Opcode },
bf890a93 3476 { "sarA", { Eb, I1 }, 0 },
252b5132 3477 },
1ceb70f8 3478 /* REG_D1 */
252b5132 3479 {
bf890a93
IT
3480 { "rolQ", { Ev, I1 }, 0 },
3481 { "rorQ", { Ev, I1 }, 0 },
3482 { "rclQ", { Ev, I1 }, 0 },
3483 { "rcrQ", { Ev, I1 }, 0 },
3484 { "shlQ", { Ev, I1 }, 0 },
3485 { "shrQ", { Ev, I1 }, 0 },
592d1631 3486 { Bad_Opcode },
bf890a93 3487 { "sarQ", { Ev, I1 }, 0 },
252b5132 3488 },
1ceb70f8 3489 /* REG_D2 */
252b5132 3490 {
bf890a93
IT
3491 { "rolA", { Eb, CL }, 0 },
3492 { "rorA", { Eb, CL }, 0 },
3493 { "rclA", { Eb, CL }, 0 },
3494 { "rcrA", { Eb, CL }, 0 },
3495 { "shlA", { Eb, CL }, 0 },
3496 { "shrA", { Eb, CL }, 0 },
592d1631 3497 { Bad_Opcode },
bf890a93 3498 { "sarA", { Eb, CL }, 0 },
252b5132 3499 },
1ceb70f8 3500 /* REG_D3 */
252b5132 3501 {
bf890a93
IT
3502 { "rolQ", { Ev, CL }, 0 },
3503 { "rorQ", { Ev, CL }, 0 },
3504 { "rclQ", { Ev, CL }, 0 },
3505 { "rcrQ", { Ev, CL }, 0 },
3506 { "shlQ", { Ev, CL }, 0 },
3507 { "shrQ", { Ev, CL }, 0 },
592d1631 3508 { Bad_Opcode },
bf890a93 3509 { "sarQ", { Ev, CL }, 0 },
252b5132 3510 },
1ceb70f8 3511 /* REG_F6 */
252b5132 3512 {
bf890a93 3513 { "testA", { Eb, Ib }, 0 },
592d1631 3514 { Bad_Opcode },
bf890a93
IT
3515 { "notA", { Ebh1 }, 0 },
3516 { "negA", { Ebh1 }, 0 },
3517 { "mulA", { Eb }, 0 }, /* Don't print the implicit %al register, */
3518 { "imulA", { Eb }, 0 }, /* to distinguish these opcodes from other */
3519 { "divA", { Eb }, 0 }, /* mul/imul opcodes. Do the same for div */
3520 { "idivA", { Eb }, 0 }, /* and idiv for consistency. */
252b5132 3521 },
1ceb70f8 3522 /* REG_F7 */
252b5132 3523 {
bf890a93 3524 { "testQ", { Ev, Iv }, 0 },
592d1631 3525 { Bad_Opcode },
bf890a93
IT
3526 { "notQ", { Evh1 }, 0 },
3527 { "negQ", { Evh1 }, 0 },
3528 { "mulQ", { Ev }, 0 }, /* Don't print the implicit register. */
3529 { "imulQ", { Ev }, 0 },
3530 { "divQ", { Ev }, 0 },
3531 { "idivQ", { Ev }, 0 },
252b5132 3532 },
1ceb70f8 3533 /* REG_FE */
252b5132 3534 {
bf890a93
IT
3535 { "incA", { Ebh1 }, 0 },
3536 { "decA", { Ebh1 }, 0 },
252b5132 3537 },
1ceb70f8 3538 /* REG_FF */
252b5132 3539 {
bf890a93
IT
3540 { "incQ", { Evh1 }, 0 },
3541 { "decQ", { Evh1 }, 0 },
07f5af7d 3542 { "call{&|}", { indirEv, BND }, 0 },
4a357820 3543 { MOD_TABLE (MOD_FF_REG_3) },
07f5af7d 3544 { "jmp{&|}", { indirEv, BND }, 0 },
4a357820 3545 { MOD_TABLE (MOD_FF_REG_5) },
bf890a93 3546 { "pushU", { stackEv }, 0 },
592d1631 3547 { Bad_Opcode },
252b5132 3548 },
1ceb70f8 3549 /* REG_0F00 */
252b5132 3550 {
bf890a93
IT
3551 { "sldtD", { Sv }, 0 },
3552 { "strD", { Sv }, 0 },
3553 { "lldt", { Ew }, 0 },
3554 { "ltr", { Ew }, 0 },
3555 { "verr", { Ew }, 0 },
3556 { "verw", { Ew }, 0 },
592d1631
L
3557 { Bad_Opcode },
3558 { Bad_Opcode },
252b5132 3559 },
1ceb70f8 3560 /* REG_0F01 */
252b5132 3561 {
1ceb70f8
L
3562 { MOD_TABLE (MOD_0F01_REG_0) },
3563 { MOD_TABLE (MOD_0F01_REG_1) },
3564 { MOD_TABLE (MOD_0F01_REG_2) },
3565 { MOD_TABLE (MOD_0F01_REG_3) },
bf890a93 3566 { "smswD", { Sv }, 0 },
8eab4136 3567 { MOD_TABLE (MOD_0F01_REG_5) },
bf890a93 3568 { "lmsw", { Ew }, 0 },
1ceb70f8 3569 { MOD_TABLE (MOD_0F01_REG_7) },
252b5132 3570 },
b5b1fc4f 3571 /* REG_0F0D */
252b5132 3572 {
bf890a93
IT
3573 { "prefetch", { Mb }, 0 },
3574 { "prefetchw", { Mb }, 0 },
3575 { "prefetchwt1", { Mb }, 0 },
3576 { "prefetch", { Mb }, 0 },
3577 { "prefetch", { Mb }, 0 },
3578 { "prefetch", { Mb }, 0 },
3579 { "prefetch", { Mb }, 0 },
3580 { "prefetch", { Mb }, 0 },
252b5132 3581 },
1ceb70f8 3582 /* REG_0F18 */
252b5132 3583 {
1ceb70f8
L
3584 { MOD_TABLE (MOD_0F18_REG_0) },
3585 { MOD_TABLE (MOD_0F18_REG_1) },
3586 { MOD_TABLE (MOD_0F18_REG_2) },
3587 { MOD_TABLE (MOD_0F18_REG_3) },
d7189fa5
RM
3588 { MOD_TABLE (MOD_0F18_REG_4) },
3589 { MOD_TABLE (MOD_0F18_REG_5) },
3590 { MOD_TABLE (MOD_0F18_REG_6) },
3591 { MOD_TABLE (MOD_0F18_REG_7) },
252b5132 3592 },
1ceb70f8 3593 /* REG_0F71 */
a6bd098c 3594 {
592d1631
L
3595 { Bad_Opcode },
3596 { Bad_Opcode },
1ceb70f8 3597 { MOD_TABLE (MOD_0F71_REG_2) },
592d1631 3598 { Bad_Opcode },
1ceb70f8 3599 { MOD_TABLE (MOD_0F71_REG_4) },
592d1631 3600 { Bad_Opcode },
1ceb70f8 3601 { MOD_TABLE (MOD_0F71_REG_6) },
a6bd098c 3602 },
1ceb70f8 3603 /* REG_0F72 */
a6bd098c 3604 {
592d1631
L
3605 { Bad_Opcode },
3606 { Bad_Opcode },
1ceb70f8 3607 { MOD_TABLE (MOD_0F72_REG_2) },
592d1631 3608 { Bad_Opcode },
1ceb70f8 3609 { MOD_TABLE (MOD_0F72_REG_4) },
592d1631 3610 { Bad_Opcode },
1ceb70f8 3611 { MOD_TABLE (MOD_0F72_REG_6) },
a6bd098c 3612 },
1ceb70f8 3613 /* REG_0F73 */
252b5132 3614 {
592d1631
L
3615 { Bad_Opcode },
3616 { Bad_Opcode },
1ceb70f8
L
3617 { MOD_TABLE (MOD_0F73_REG_2) },
3618 { MOD_TABLE (MOD_0F73_REG_3) },
592d1631
L
3619 { Bad_Opcode },
3620 { Bad_Opcode },
1ceb70f8
L
3621 { MOD_TABLE (MOD_0F73_REG_6) },
3622 { MOD_TABLE (MOD_0F73_REG_7) },
252b5132 3623 },
1ceb70f8 3624 /* REG_0FA6 */
252b5132 3625 {
bf890a93
IT
3626 { "montmul", { { OP_0f07, 0 } }, 0 },
3627 { "xsha1", { { OP_0f07, 0 } }, 0 },
3628 { "xsha256", { { OP_0f07, 0 } }, 0 },
4e7d34a6 3629 },
1ceb70f8 3630 /* REG_0FA7 */
4e7d34a6 3631 {
bf890a93
IT
3632 { "xstore-rng", { { OP_0f07, 0 } }, 0 },
3633 { "xcrypt-ecb", { { OP_0f07, 0 } }, 0 },
3634 { "xcrypt-cbc", { { OP_0f07, 0 } }, 0 },
3635 { "xcrypt-ctr", { { OP_0f07, 0 } }, 0 },
3636 { "xcrypt-cfb", { { OP_0f07, 0 } }, 0 },
3637 { "xcrypt-ofb", { { OP_0f07, 0 } }, 0 },
4e7d34a6 3638 },
1ceb70f8 3639 /* REG_0FAE */
4e7d34a6 3640 {
1ceb70f8
L
3641 { MOD_TABLE (MOD_0FAE_REG_0) },
3642 { MOD_TABLE (MOD_0FAE_REG_1) },
3643 { MOD_TABLE (MOD_0FAE_REG_2) },
3644 { MOD_TABLE (MOD_0FAE_REG_3) },
475a2301 3645 { MOD_TABLE (MOD_0FAE_REG_4) },
1ceb70f8
L
3646 { MOD_TABLE (MOD_0FAE_REG_5) },
3647 { MOD_TABLE (MOD_0FAE_REG_6) },
3648 { MOD_TABLE (MOD_0FAE_REG_7) },
252b5132 3649 },
1ceb70f8 3650 /* REG_0FBA */
252b5132 3651 {
592d1631
L
3652 { Bad_Opcode },
3653 { Bad_Opcode },
3654 { Bad_Opcode },
3655 { Bad_Opcode },
bf890a93
IT
3656 { "btQ", { Ev, Ib }, 0 },
3657 { "btsQ", { Evh1, Ib }, 0 },
3658 { "btrQ", { Evh1, Ib }, 0 },
3659 { "btcQ", { Evh1, Ib }, 0 },
c608c12e 3660 },
1ceb70f8 3661 /* REG_0FC7 */
c608c12e 3662 {
592d1631 3663 { Bad_Opcode },
bf890a93 3664 { "cmpxchg8b", { { CMPXCHG8B_Fixup, q_mode } }, 0 },
592d1631 3665 { Bad_Opcode },
963f3586
IT
3666 { MOD_TABLE (MOD_0FC7_REG_3) },
3667 { MOD_TABLE (MOD_0FC7_REG_4) },
3668 { MOD_TABLE (MOD_0FC7_REG_5) },
1ceb70f8
L
3669 { MOD_TABLE (MOD_0FC7_REG_6) },
3670 { MOD_TABLE (MOD_0FC7_REG_7) },
252b5132 3671 },
592a252b 3672 /* REG_VEX_0F71 */
c0f3af97 3673 {
592d1631
L
3674 { Bad_Opcode },
3675 { Bad_Opcode },
592a252b 3676 { MOD_TABLE (MOD_VEX_0F71_REG_2) },
592d1631 3677 { Bad_Opcode },
592a252b 3678 { MOD_TABLE (MOD_VEX_0F71_REG_4) },
592d1631 3679 { Bad_Opcode },
592a252b 3680 { MOD_TABLE (MOD_VEX_0F71_REG_6) },
c0f3af97 3681 },
592a252b 3682 /* REG_VEX_0F72 */
c0f3af97 3683 {
592d1631
L
3684 { Bad_Opcode },
3685 { Bad_Opcode },
592a252b 3686 { MOD_TABLE (MOD_VEX_0F72_REG_2) },
592d1631 3687 { Bad_Opcode },
592a252b 3688 { MOD_TABLE (MOD_VEX_0F72_REG_4) },
592d1631 3689 { Bad_Opcode },
592a252b 3690 { MOD_TABLE (MOD_VEX_0F72_REG_6) },
c0f3af97 3691 },
592a252b 3692 /* REG_VEX_0F73 */
c0f3af97 3693 {
592d1631
L
3694 { Bad_Opcode },
3695 { Bad_Opcode },
592a252b
L
3696 { MOD_TABLE (MOD_VEX_0F73_REG_2) },
3697 { MOD_TABLE (MOD_VEX_0F73_REG_3) },
592d1631
L
3698 { Bad_Opcode },
3699 { Bad_Opcode },
592a252b
L
3700 { MOD_TABLE (MOD_VEX_0F73_REG_6) },
3701 { MOD_TABLE (MOD_VEX_0F73_REG_7) },
c0f3af97 3702 },
592a252b 3703 /* REG_VEX_0FAE */
c0f3af97 3704 {
592d1631
L
3705 { Bad_Opcode },
3706 { Bad_Opcode },
592a252b
L
3707 { MOD_TABLE (MOD_VEX_0FAE_REG_2) },
3708 { MOD_TABLE (MOD_VEX_0FAE_REG_3) },
c0f3af97 3709 },
f12dc422
L
3710 /* REG_VEX_0F38F3 */
3711 {
3712 { Bad_Opcode },
3713 { PREFIX_TABLE (PREFIX_VEX_0F38F3_REG_1) },
3714 { PREFIX_TABLE (PREFIX_VEX_0F38F3_REG_2) },
3715 { PREFIX_TABLE (PREFIX_VEX_0F38F3_REG_3) },
3716 },
f88c9eb0
SP
3717 /* REG_XOP_LWPCB */
3718 {
bf890a93
IT
3719 { "llwpcb", { { OP_LWPCB_E, 0 } }, 0 },
3720 { "slwpcb", { { OP_LWPCB_E, 0 } }, 0 },
f88c9eb0
SP
3721 },
3722 /* REG_XOP_LWP */
3723 {
bf890a93
IT
3724 { "lwpins", { { OP_LWP_E, 0 }, Ed, Iq }, 0 },
3725 { "lwpval", { { OP_LWP_E, 0 }, Ed, Iq }, 0 },
f88c9eb0 3726 },
2a2a0f38
QN
3727 /* REG_XOP_TBM_01 */
3728 {
3729 { Bad_Opcode },
bf890a93
IT
3730 { "blcfill", { { OP_LWP_E, 0 }, Ev }, 0 },
3731 { "blsfill", { { OP_LWP_E, 0 }, Ev }, 0 },
3732 { "blcs", { { OP_LWP_E, 0 }, Ev }, 0 },
3733 { "tzmsk", { { OP_LWP_E, 0 }, Ev }, 0 },
3734 { "blcic", { { OP_LWP_E, 0 }, Ev }, 0 },
3735 { "blsic", { { OP_LWP_E, 0 }, Ev }, 0 },
3736 { "t1mskc", { { OP_LWP_E, 0 }, Ev }, 0 },
2a2a0f38
QN
3737 },
3738 /* REG_XOP_TBM_02 */
3739 {
3740 { Bad_Opcode },
bf890a93 3741 { "blcmsk", { { OP_LWP_E, 0 }, Ev }, 0 },
2a2a0f38
QN
3742 { Bad_Opcode },
3743 { Bad_Opcode },
3744 { Bad_Opcode },
3745 { Bad_Opcode },
bf890a93 3746 { "blci", { { OP_LWP_E, 0 }, Ev }, 0 },
2a2a0f38 3747 },
43234a1e
L
3748#define NEED_REG_TABLE
3749#include "i386-dis-evex.h"
3750#undef NEED_REG_TABLE
4e7d34a6
L
3751};
3752
1ceb70f8
L
3753static const struct dis386 prefix_table[][4] = {
3754 /* PREFIX_90 */
252b5132 3755 {
bf890a93
IT
3756 { "xchgS", { { NOP_Fixup1, eAX_reg }, { NOP_Fixup2, eAX_reg } }, 0 },
3757 { "pause", { XX }, 0 },
3758 { "xchgS", { { NOP_Fixup1, eAX_reg }, { NOP_Fixup2, eAX_reg } }, 0 },
507bd325 3759 { NULL, { { NULL, 0 } }, PREFIX_IGNORED }
0f10071e 3760 },
4e7d34a6 3761
1ceb70f8 3762 /* PREFIX_0F10 */
cc0ec051 3763 {
507bd325
L
3764 { "movups", { XM, EXx }, PREFIX_OPCODE },
3765 { "movss", { XM, EXd }, PREFIX_OPCODE },
3766 { "movupd", { XM, EXx }, PREFIX_OPCODE },
3767 { "movsd", { XM, EXq }, PREFIX_OPCODE },
30d1c836 3768 },
4e7d34a6 3769
1ceb70f8 3770 /* PREFIX_0F11 */
30d1c836 3771 {
507bd325
L
3772 { "movups", { EXxS, XM }, PREFIX_OPCODE },
3773 { "movss", { EXdS, XM }, PREFIX_OPCODE },
3774 { "movupd", { EXxS, XM }, PREFIX_OPCODE },
3775 { "movsd", { EXqS, XM }, PREFIX_OPCODE },
4e7d34a6 3776 },
252b5132 3777
1ceb70f8 3778 /* PREFIX_0F12 */
c608c12e 3779 {
1ceb70f8 3780 { MOD_TABLE (MOD_0F12_PREFIX_0) },
507bd325
L
3781 { "movsldup", { XM, EXx }, PREFIX_OPCODE },
3782 { "movlpd", { XM, EXq }, PREFIX_OPCODE },
3783 { "movddup", { XM, EXq }, PREFIX_OPCODE },
c608c12e 3784 },
4e7d34a6 3785
1ceb70f8 3786 /* PREFIX_0F16 */
c608c12e 3787 {
1ceb70f8 3788 { MOD_TABLE (MOD_0F16_PREFIX_0) },
507bd325
L
3789 { "movshdup", { XM, EXx }, PREFIX_OPCODE },
3790 { "movhpd", { XM, EXq }, PREFIX_OPCODE },
c608c12e 3791 },
4e7d34a6 3792
7e8b059b
L
3793 /* PREFIX_0F1A */
3794 {
3795 { MOD_TABLE (MOD_0F1A_PREFIX_0) },
bf890a93
IT
3796 { "bndcl", { Gbnd, Ev_bnd }, 0 },
3797 { "bndmov", { Gbnd, Ebnd }, 0 },
3798 { "bndcu", { Gbnd, Ev_bnd }, 0 },
7e8b059b
L
3799 },
3800
3801 /* PREFIX_0F1B */
3802 {
3803 { MOD_TABLE (MOD_0F1B_PREFIX_0) },
3804 { MOD_TABLE (MOD_0F1B_PREFIX_1) },
bf890a93
IT
3805 { "bndmov", { Ebnd, Gbnd }, 0 },
3806 { "bndcn", { Gbnd, Ev_bnd }, 0 },
7e8b059b
L
3807 },
3808
1ceb70f8 3809 /* PREFIX_0F2A */
c608c12e 3810 {
507bd325
L
3811 { "cvtpi2ps", { XM, EMCq }, PREFIX_OPCODE },
3812 { "cvtsi2ss%LQ", { XM, Ev }, PREFIX_OPCODE },
3813 { "cvtpi2pd", { XM, EMCq }, PREFIX_OPCODE },
bf890a93 3814 { "cvtsi2sd%LQ", { XM, Ev }, 0 },
c608c12e 3815 },
4e7d34a6 3816
1ceb70f8 3817 /* PREFIX_0F2B */
c608c12e 3818 {
75c135a8
L
3819 { MOD_TABLE (MOD_0F2B_PREFIX_0) },
3820 { MOD_TABLE (MOD_0F2B_PREFIX_1) },
3821 { MOD_TABLE (MOD_0F2B_PREFIX_2) },
3822 { MOD_TABLE (MOD_0F2B_PREFIX_3) },
c608c12e 3823 },
4e7d34a6 3824
1ceb70f8 3825 /* PREFIX_0F2C */
c608c12e 3826 {
507bd325
L
3827 { "cvttps2pi", { MXC, EXq }, PREFIX_OPCODE },
3828 { "cvttss2siY", { Gv, EXd }, PREFIX_OPCODE },
3829 { "cvttpd2pi", { MXC, EXx }, PREFIX_OPCODE },
3830 { "cvttsd2siY", { Gv, EXq }, PREFIX_OPCODE },
c608c12e 3831 },
4e7d34a6 3832
1ceb70f8 3833 /* PREFIX_0F2D */
c608c12e 3834 {
507bd325
L
3835 { "cvtps2pi", { MXC, EXq }, PREFIX_OPCODE },
3836 { "cvtss2siY", { Gv, EXd }, PREFIX_OPCODE },
3837 { "cvtpd2pi", { MXC, EXx }, PREFIX_OPCODE },
3838 { "cvtsd2siY", { Gv, EXq }, PREFIX_OPCODE },
c608c12e 3839 },
4e7d34a6 3840
1ceb70f8 3841 /* PREFIX_0F2E */
c608c12e 3842 {
bf890a93 3843 { "ucomiss",{ XM, EXd }, 0 },
592d1631 3844 { Bad_Opcode },
bf890a93 3845 { "ucomisd",{ XM, EXq }, 0 },
c608c12e 3846 },
4e7d34a6 3847
1ceb70f8 3848 /* PREFIX_0F2F */
c608c12e 3849 {
bf890a93 3850 { "comiss", { XM, EXd }, 0 },
592d1631 3851 { Bad_Opcode },
bf890a93 3852 { "comisd", { XM, EXq }, 0 },
c608c12e 3853 },
4e7d34a6 3854
1ceb70f8 3855 /* PREFIX_0F51 */
c608c12e 3856 {
507bd325
L
3857 { "sqrtps", { XM, EXx }, PREFIX_OPCODE },
3858 { "sqrtss", { XM, EXd }, PREFIX_OPCODE },
3859 { "sqrtpd", { XM, EXx }, PREFIX_OPCODE },
3860 { "sqrtsd", { XM, EXq }, PREFIX_OPCODE },
c608c12e 3861 },
4e7d34a6 3862
1ceb70f8 3863 /* PREFIX_0F52 */
c608c12e 3864 {
507bd325
L
3865 { "rsqrtps",{ XM, EXx }, PREFIX_OPCODE },
3866 { "rsqrtss",{ XM, EXd }, PREFIX_OPCODE },
c608c12e 3867 },
4e7d34a6 3868
1ceb70f8 3869 /* PREFIX_0F53 */
c608c12e 3870 {
507bd325
L
3871 { "rcpps", { XM, EXx }, PREFIX_OPCODE },
3872 { "rcpss", { XM, EXd }, PREFIX_OPCODE },
c608c12e 3873 },
4e7d34a6 3874
1ceb70f8 3875 /* PREFIX_0F58 */
c608c12e 3876 {
507bd325
L
3877 { "addps", { XM, EXx }, PREFIX_OPCODE },
3878 { "addss", { XM, EXd }, PREFIX_OPCODE },
3879 { "addpd", { XM, EXx }, PREFIX_OPCODE },
3880 { "addsd", { XM, EXq }, PREFIX_OPCODE },
c608c12e 3881 },
4e7d34a6 3882
1ceb70f8 3883 /* PREFIX_0F59 */
c608c12e 3884 {
507bd325
L
3885 { "mulps", { XM, EXx }, PREFIX_OPCODE },
3886 { "mulss", { XM, EXd }, PREFIX_OPCODE },
3887 { "mulpd", { XM, EXx }, PREFIX_OPCODE },
3888 { "mulsd", { XM, EXq }, PREFIX_OPCODE },
041bd2e0 3889 },
4e7d34a6 3890
1ceb70f8 3891 /* PREFIX_0F5A */
041bd2e0 3892 {
507bd325
L
3893 { "cvtps2pd", { XM, EXq }, PREFIX_OPCODE },
3894 { "cvtss2sd", { XM, EXd }, PREFIX_OPCODE },
3895 { "cvtpd2ps", { XM, EXx }, PREFIX_OPCODE },
3896 { "cvtsd2ss", { XM, EXq }, PREFIX_OPCODE },
041bd2e0 3897 },
4e7d34a6 3898
1ceb70f8 3899 /* PREFIX_0F5B */
041bd2e0 3900 {
507bd325
L
3901 { "cvtdq2ps", { XM, EXx }, PREFIX_OPCODE },
3902 { "cvttps2dq", { XM, EXx }, PREFIX_OPCODE },
3903 { "cvtps2dq", { XM, EXx }, PREFIX_OPCODE },
041bd2e0 3904 },
4e7d34a6 3905
1ceb70f8 3906 /* PREFIX_0F5C */
041bd2e0 3907 {
507bd325
L
3908 { "subps", { XM, EXx }, PREFIX_OPCODE },
3909 { "subss", { XM, EXd }, PREFIX_OPCODE },
3910 { "subpd", { XM, EXx }, PREFIX_OPCODE },
3911 { "subsd", { XM, EXq }, PREFIX_OPCODE },
041bd2e0 3912 },
4e7d34a6 3913
1ceb70f8 3914 /* PREFIX_0F5D */
041bd2e0 3915 {
507bd325
L
3916 { "minps", { XM, EXx }, PREFIX_OPCODE },
3917 { "minss", { XM, EXd }, PREFIX_OPCODE },
3918 { "minpd", { XM, EXx }, PREFIX_OPCODE },
3919 { "minsd", { XM, EXq }, PREFIX_OPCODE },
041bd2e0 3920 },
4e7d34a6 3921
1ceb70f8 3922 /* PREFIX_0F5E */
041bd2e0 3923 {
507bd325
L
3924 { "divps", { XM, EXx }, PREFIX_OPCODE },
3925 { "divss", { XM, EXd }, PREFIX_OPCODE },
3926 { "divpd", { XM, EXx }, PREFIX_OPCODE },
3927 { "divsd", { XM, EXq }, PREFIX_OPCODE },
041bd2e0 3928 },
4e7d34a6 3929
1ceb70f8 3930 /* PREFIX_0F5F */
041bd2e0 3931 {
507bd325
L
3932 { "maxps", { XM, EXx }, PREFIX_OPCODE },
3933 { "maxss", { XM, EXd }, PREFIX_OPCODE },
3934 { "maxpd", { XM, EXx }, PREFIX_OPCODE },
3935 { "maxsd", { XM, EXq }, PREFIX_OPCODE },
041bd2e0 3936 },
4e7d34a6 3937
1ceb70f8 3938 /* PREFIX_0F60 */
041bd2e0 3939 {
507bd325 3940 { "punpcklbw",{ MX, EMd }, PREFIX_OPCODE },
592d1631 3941 { Bad_Opcode },
507bd325 3942 { "punpcklbw",{ MX, EMx }, PREFIX_OPCODE },
041bd2e0 3943 },
4e7d34a6 3944
1ceb70f8 3945 /* PREFIX_0F61 */
041bd2e0 3946 {
507bd325 3947 { "punpcklwd",{ MX, EMd }, PREFIX_OPCODE },
592d1631 3948 { Bad_Opcode },
507bd325 3949 { "punpcklwd",{ MX, EMx }, PREFIX_OPCODE },
041bd2e0 3950 },
4e7d34a6 3951
1ceb70f8 3952 /* PREFIX_0F62 */
041bd2e0 3953 {
507bd325 3954 { "punpckldq",{ MX, EMd }, PREFIX_OPCODE },
592d1631 3955 { Bad_Opcode },
507bd325 3956 { "punpckldq",{ MX, EMx }, PREFIX_OPCODE },
041bd2e0 3957 },
4e7d34a6 3958
1ceb70f8 3959 /* PREFIX_0F6C */
041bd2e0 3960 {
592d1631
L
3961 { Bad_Opcode },
3962 { Bad_Opcode },
507bd325 3963 { "punpcklqdq", { XM, EXx }, PREFIX_OPCODE },
0f17484f 3964 },
4e7d34a6 3965
1ceb70f8 3966 /* PREFIX_0F6D */
0f17484f 3967 {
592d1631
L
3968 { Bad_Opcode },
3969 { Bad_Opcode },
507bd325 3970 { "punpckhqdq", { XM, EXx }, PREFIX_OPCODE },
041bd2e0 3971 },
4e7d34a6 3972
1ceb70f8 3973 /* PREFIX_0F6F */
ca164297 3974 {
507bd325
L
3975 { "movq", { MX, EM }, PREFIX_OPCODE },
3976 { "movdqu", { XM, EXx }, PREFIX_OPCODE },
3977 { "movdqa", { XM, EXx }, PREFIX_OPCODE },
ca164297 3978 },
4e7d34a6 3979
1ceb70f8 3980 /* PREFIX_0F70 */
4e7d34a6 3981 {
507bd325
L
3982 { "pshufw", { MX, EM, Ib }, PREFIX_OPCODE },
3983 { "pshufhw",{ XM, EXx, Ib }, PREFIX_OPCODE },
3984 { "pshufd", { XM, EXx, Ib }, PREFIX_OPCODE },
3985 { "pshuflw",{ XM, EXx, Ib }, PREFIX_OPCODE },
4e7d34a6
L
3986 },
3987
92fddf8e
L
3988 /* PREFIX_0F73_REG_3 */
3989 {
592d1631
L
3990 { Bad_Opcode },
3991 { Bad_Opcode },
bf890a93 3992 { "psrldq", { XS, Ib }, 0 },
92fddf8e
L
3993 },
3994
3995 /* PREFIX_0F73_REG_7 */
3996 {
592d1631
L
3997 { Bad_Opcode },
3998 { Bad_Opcode },
bf890a93 3999 { "pslldq", { XS, Ib }, 0 },
92fddf8e
L
4000 },
4001
1ceb70f8 4002 /* PREFIX_0F78 */
4e7d34a6 4003 {
bf890a93 4004 {"vmread", { Em, Gm }, 0 },
592d1631 4005 { Bad_Opcode },
bf890a93
IT
4006 {"extrq", { XS, Ib, Ib }, 0 },
4007 {"insertq", { XM, XS, Ib, Ib }, 0 },
4e7d34a6
L
4008 },
4009
1ceb70f8 4010 /* PREFIX_0F79 */
4e7d34a6 4011 {
bf890a93 4012 {"vmwrite", { Gm, Em }, 0 },
592d1631 4013 { Bad_Opcode },
bf890a93
IT
4014 {"extrq", { XM, XS }, 0 },
4015 {"insertq", { XM, XS }, 0 },
4e7d34a6
L
4016 },
4017
1ceb70f8 4018 /* PREFIX_0F7C */
ca164297 4019 {
592d1631
L
4020 { Bad_Opcode },
4021 { Bad_Opcode },
507bd325
L
4022 { "haddpd", { XM, EXx }, PREFIX_OPCODE },
4023 { "haddps", { XM, EXx }, PREFIX_OPCODE },
ca164297 4024 },
4e7d34a6 4025
1ceb70f8 4026 /* PREFIX_0F7D */
ca164297 4027 {
592d1631
L
4028 { Bad_Opcode },
4029 { Bad_Opcode },
507bd325
L
4030 { "hsubpd", { XM, EXx }, PREFIX_OPCODE },
4031 { "hsubps", { XM, EXx }, PREFIX_OPCODE },
ca164297 4032 },
4e7d34a6 4033
1ceb70f8 4034 /* PREFIX_0F7E */
ca164297 4035 {
507bd325
L
4036 { "movK", { Edq, MX }, PREFIX_OPCODE },
4037 { "movq", { XM, EXq }, PREFIX_OPCODE },
4038 { "movK", { Edq, XM }, PREFIX_OPCODE },
ca164297 4039 },
4e7d34a6 4040
1ceb70f8 4041 /* PREFIX_0F7F */
ca164297 4042 {
507bd325
L
4043 { "movq", { EMS, MX }, PREFIX_OPCODE },
4044 { "movdqu", { EXxS, XM }, PREFIX_OPCODE },
4045 { "movdqa", { EXxS, XM }, PREFIX_OPCODE },
ca164297 4046 },
4e7d34a6 4047
c7b8aa3a
L
4048 /* PREFIX_0FAE_REG_0 */
4049 {
4050 { Bad_Opcode },
bf890a93 4051 { "rdfsbase", { Ev }, 0 },
c7b8aa3a
L
4052 },
4053
4054 /* PREFIX_0FAE_REG_1 */
4055 {
4056 { Bad_Opcode },
bf890a93 4057 { "rdgsbase", { Ev }, 0 },
c7b8aa3a
L
4058 },
4059
4060 /* PREFIX_0FAE_REG_2 */
4061 {
4062 { Bad_Opcode },
bf890a93 4063 { "wrfsbase", { Ev }, 0 },
c7b8aa3a
L
4064 },
4065
4066 /* PREFIX_0FAE_REG_3 */
4067 {
4068 { Bad_Opcode },
bf890a93 4069 { "wrgsbase", { Ev }, 0 },
c7b8aa3a
L
4070 },
4071
6b40c462
L
4072 /* PREFIX_MOD_0_0FAE_REG_4 */
4073 {
4074 { "xsave", { FXSAVE }, 0 },
4075 { "ptwrite%LQ", { Edq }, 0 },
4076 },
4077
4078 /* PREFIX_MOD_3_0FAE_REG_4 */
4079 {
4080 { Bad_Opcode },
4081 { "ptwrite%LQ", { Edq }, 0 },
4082 },
4083
c5e7287a
IT
4084 /* PREFIX_0FAE_REG_6 */
4085 {
bf890a93 4086 { "xsaveopt", { FXSAVE }, 0 },
c5e7287a 4087 { Bad_Opcode },
bf890a93 4088 { "clwb", { Mb }, 0 },
c5e7287a
IT
4089 },
4090
963f3586
IT
4091 /* PREFIX_0FAE_REG_7 */
4092 {
bf890a93 4093 { "clflush", { Mb }, 0 },
963f3586 4094 { Bad_Opcode },
bf890a93 4095 { "clflushopt", { Mb }, 0 },
963f3586
IT
4096 },
4097
1ceb70f8 4098 /* PREFIX_0FB8 */
ca164297 4099 {
592d1631 4100 { Bad_Opcode },
bf890a93 4101 { "popcntS", { Gv, Ev }, 0 },
ca164297 4102 },
4e7d34a6 4103
f12dc422
L
4104 /* PREFIX_0FBC */
4105 {
bf890a93
IT
4106 { "bsfS", { Gv, Ev }, 0 },
4107 { "tzcntS", { Gv, Ev }, 0 },
4108 { "bsfS", { Gv, Ev }, 0 },
f12dc422
L
4109 },
4110
1ceb70f8 4111 /* PREFIX_0FBD */
050dfa73 4112 {
bf890a93
IT
4113 { "bsrS", { Gv, Ev }, 0 },
4114 { "lzcntS", { Gv, Ev }, 0 },
4115 { "bsrS", { Gv, Ev }, 0 },
050dfa73
MM
4116 },
4117
1ceb70f8 4118 /* PREFIX_0FC2 */
050dfa73 4119 {
507bd325
L
4120 { "cmpps", { XM, EXx, CMP }, PREFIX_OPCODE },
4121 { "cmpss", { XM, EXd, CMP }, PREFIX_OPCODE },
4122 { "cmppd", { XM, EXx, CMP }, PREFIX_OPCODE },
4123 { "cmpsd", { XM, EXq, CMP }, PREFIX_OPCODE },
050dfa73 4124 },
246c51aa 4125
a8484f96 4126 /* PREFIX_MOD_0_0FC3 */
4ee52178 4127 {
a8484f96 4128 { "movntiS", { Ev, Gv }, PREFIX_OPCODE },
4ee52178
L
4129 },
4130
f24bcbaa 4131 /* PREFIX_MOD_0_0FC7_REG_6 */
92fddf8e 4132 {
bf890a93
IT
4133 { "vmptrld",{ Mq }, 0 },
4134 { "vmxon", { Mq }, 0 },
4135 { "vmclear",{ Mq }, 0 },
92fddf8e
L
4136 },
4137
f24bcbaa
L
4138 /* PREFIX_MOD_3_0FC7_REG_6 */
4139 {
4140 { "rdrand", { Ev }, 0 },
4141 { Bad_Opcode },
4142 { "rdrand", { Ev }, 0 }
4143 },
4144
4145 /* PREFIX_MOD_3_0FC7_REG_7 */
4146 {
4147 { "rdseed", { Ev }, 0 },
8bc52696 4148 { "rdpid", { Em }, 0 },
f24bcbaa
L
4149 { "rdseed", { Ev }, 0 },
4150 },
4151
1ceb70f8 4152 /* PREFIX_0FD0 */
050dfa73 4153 {
592d1631
L
4154 { Bad_Opcode },
4155 { Bad_Opcode },
bf890a93
IT
4156 { "addsubpd", { XM, EXx }, 0 },
4157 { "addsubps", { XM, EXx }, 0 },
246c51aa 4158 },
050dfa73 4159
1ceb70f8 4160 /* PREFIX_0FD6 */
050dfa73 4161 {
592d1631 4162 { Bad_Opcode },
bf890a93
IT
4163 { "movq2dq",{ XM, MS }, 0 },
4164 { "movq", { EXqS, XM }, 0 },
4165 { "movdq2q",{ MX, XS }, 0 },
050dfa73
MM
4166 },
4167
1ceb70f8 4168 /* PREFIX_0FE6 */
7918206c 4169 {
592d1631 4170 { Bad_Opcode },
507bd325
L
4171 { "cvtdq2pd", { XM, EXq }, PREFIX_OPCODE },
4172 { "cvttpd2dq", { XM, EXx }, PREFIX_OPCODE },
4173 { "cvtpd2dq", { XM, EXx }, PREFIX_OPCODE },
7918206c 4174 },
8b38ad71 4175
1ceb70f8 4176 /* PREFIX_0FE7 */
8b38ad71 4177 {
507bd325 4178 { "movntq", { Mq, MX }, PREFIX_OPCODE },
592d1631 4179 { Bad_Opcode },
75c135a8 4180 { MOD_TABLE (MOD_0FE7_PREFIX_2) },
4e7d34a6
L
4181 },
4182
1ceb70f8 4183 /* PREFIX_0FF0 */
4e7d34a6 4184 {
592d1631
L
4185 { Bad_Opcode },
4186 { Bad_Opcode },
4187 { Bad_Opcode },
1ceb70f8 4188 { MOD_TABLE (MOD_0FF0_PREFIX_3) },
4e7d34a6
L
4189 },
4190
1ceb70f8 4191 /* PREFIX_0FF7 */
4e7d34a6 4192 {
507bd325 4193 { "maskmovq", { MX, MS }, PREFIX_OPCODE },
592d1631 4194 { Bad_Opcode },
507bd325 4195 { "maskmovdqu", { XM, XS }, PREFIX_OPCODE },
8b38ad71 4196 },
42903f7f 4197
1ceb70f8 4198 /* PREFIX_0F3810 */
42903f7f 4199 {
592d1631
L
4200 { Bad_Opcode },
4201 { Bad_Opcode },
507bd325 4202 { "pblendvb", { XM, EXx, XMM0 }, PREFIX_OPCODE },
42903f7f
L
4203 },
4204
1ceb70f8 4205 /* PREFIX_0F3814 */
42903f7f 4206 {
592d1631
L
4207 { Bad_Opcode },
4208 { Bad_Opcode },
507bd325 4209 { "blendvps", { XM, EXx, XMM0 }, PREFIX_OPCODE },
42903f7f
L
4210 },
4211
1ceb70f8 4212 /* PREFIX_0F3815 */
42903f7f 4213 {
592d1631
L
4214 { Bad_Opcode },
4215 { Bad_Opcode },
507bd325 4216 { "blendvpd", { XM, EXx, XMM0 }, PREFIX_OPCODE },
42903f7f
L
4217 },
4218
1ceb70f8 4219 /* PREFIX_0F3817 */
42903f7f 4220 {
592d1631
L
4221 { Bad_Opcode },
4222 { Bad_Opcode },
507bd325 4223 { "ptest", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4224 },
4225
1ceb70f8 4226 /* PREFIX_0F3820 */
42903f7f 4227 {
592d1631
L
4228 { Bad_Opcode },
4229 { Bad_Opcode },
507bd325 4230 { "pmovsxbw", { XM, EXq }, PREFIX_OPCODE },
42903f7f
L
4231 },
4232
1ceb70f8 4233 /* PREFIX_0F3821 */
42903f7f 4234 {
592d1631
L
4235 { Bad_Opcode },
4236 { Bad_Opcode },
507bd325 4237 { "pmovsxbd", { XM, EXd }, PREFIX_OPCODE },
42903f7f
L
4238 },
4239
1ceb70f8 4240 /* PREFIX_0F3822 */
42903f7f 4241 {
592d1631
L
4242 { Bad_Opcode },
4243 { Bad_Opcode },
507bd325 4244 { "pmovsxbq", { XM, EXw }, PREFIX_OPCODE },
42903f7f
L
4245 },
4246
1ceb70f8 4247 /* PREFIX_0F3823 */
42903f7f 4248 {
592d1631
L
4249 { Bad_Opcode },
4250 { Bad_Opcode },
507bd325 4251 { "pmovsxwd", { XM, EXq }, PREFIX_OPCODE },
42903f7f
L
4252 },
4253
1ceb70f8 4254 /* PREFIX_0F3824 */
42903f7f 4255 {
592d1631
L
4256 { Bad_Opcode },
4257 { Bad_Opcode },
507bd325 4258 { "pmovsxwq", { XM, EXd }, PREFIX_OPCODE },
42903f7f
L
4259 },
4260
1ceb70f8 4261 /* PREFIX_0F3825 */
42903f7f 4262 {
592d1631
L
4263 { Bad_Opcode },
4264 { Bad_Opcode },
507bd325 4265 { "pmovsxdq", { XM, EXq }, PREFIX_OPCODE },
42903f7f
L
4266 },
4267
1ceb70f8 4268 /* PREFIX_0F3828 */
42903f7f 4269 {
592d1631
L
4270 { Bad_Opcode },
4271 { Bad_Opcode },
507bd325 4272 { "pmuldq", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4273 },
4274
1ceb70f8 4275 /* PREFIX_0F3829 */
42903f7f 4276 {
592d1631
L
4277 { Bad_Opcode },
4278 { Bad_Opcode },
507bd325 4279 { "pcmpeqq", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4280 },
4281
1ceb70f8 4282 /* PREFIX_0F382A */
42903f7f 4283 {
592d1631
L
4284 { Bad_Opcode },
4285 { Bad_Opcode },
75c135a8 4286 { MOD_TABLE (MOD_0F382A_PREFIX_2) },
42903f7f
L
4287 },
4288
1ceb70f8 4289 /* PREFIX_0F382B */
42903f7f 4290 {
592d1631
L
4291 { Bad_Opcode },
4292 { Bad_Opcode },
507bd325 4293 { "packusdw", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4294 },
4295
1ceb70f8 4296 /* PREFIX_0F3830 */
42903f7f 4297 {
592d1631
L
4298 { Bad_Opcode },
4299 { Bad_Opcode },
507bd325 4300 { "pmovzxbw", { XM, EXq }, PREFIX_OPCODE },
42903f7f
L
4301 },
4302
1ceb70f8 4303 /* PREFIX_0F3831 */
42903f7f 4304 {
592d1631
L
4305 { Bad_Opcode },
4306 { Bad_Opcode },
507bd325 4307 { "pmovzxbd", { XM, EXd }, PREFIX_OPCODE },
42903f7f
L
4308 },
4309
1ceb70f8 4310 /* PREFIX_0F3832 */
42903f7f 4311 {
592d1631
L
4312 { Bad_Opcode },
4313 { Bad_Opcode },
507bd325 4314 { "pmovzxbq", { XM, EXw }, PREFIX_OPCODE },
42903f7f
L
4315 },
4316
1ceb70f8 4317 /* PREFIX_0F3833 */
42903f7f 4318 {
592d1631
L
4319 { Bad_Opcode },
4320 { Bad_Opcode },
507bd325 4321 { "pmovzxwd", { XM, EXq }, PREFIX_OPCODE },
42903f7f
L
4322 },
4323
1ceb70f8 4324 /* PREFIX_0F3834 */
42903f7f 4325 {
592d1631
L
4326 { Bad_Opcode },
4327 { Bad_Opcode },
507bd325 4328 { "pmovzxwq", { XM, EXd }, PREFIX_OPCODE },
42903f7f
L
4329 },
4330
1ceb70f8 4331 /* PREFIX_0F3835 */
42903f7f 4332 {
592d1631
L
4333 { Bad_Opcode },
4334 { Bad_Opcode },
507bd325 4335 { "pmovzxdq", { XM, EXq }, PREFIX_OPCODE },
42903f7f
L
4336 },
4337
1ceb70f8 4338 /* PREFIX_0F3837 */
4e7d34a6 4339 {
592d1631
L
4340 { Bad_Opcode },
4341 { Bad_Opcode },
507bd325 4342 { "pcmpgtq", { XM, EXx }, PREFIX_OPCODE },
4e7d34a6
L
4343 },
4344
1ceb70f8 4345 /* PREFIX_0F3838 */
42903f7f 4346 {
592d1631
L
4347 { Bad_Opcode },
4348 { Bad_Opcode },
507bd325 4349 { "pminsb", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4350 },
4351
1ceb70f8 4352 /* PREFIX_0F3839 */
42903f7f 4353 {
592d1631
L
4354 { Bad_Opcode },
4355 { Bad_Opcode },
507bd325 4356 { "pminsd", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4357 },
4358
1ceb70f8 4359 /* PREFIX_0F383A */
42903f7f 4360 {
592d1631
L
4361 { Bad_Opcode },
4362 { Bad_Opcode },
507bd325 4363 { "pminuw", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4364 },
4365
1ceb70f8 4366 /* PREFIX_0F383B */
42903f7f 4367 {
592d1631
L
4368 { Bad_Opcode },
4369 { Bad_Opcode },
507bd325 4370 { "pminud", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4371 },
4372
1ceb70f8 4373 /* PREFIX_0F383C */
42903f7f 4374 {
592d1631
L
4375 { Bad_Opcode },
4376 { Bad_Opcode },
507bd325 4377 { "pmaxsb", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4378 },
4379
1ceb70f8 4380 /* PREFIX_0F383D */
42903f7f 4381 {
592d1631
L
4382 { Bad_Opcode },
4383 { Bad_Opcode },
507bd325 4384 { "pmaxsd", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4385 },
4386
1ceb70f8 4387 /* PREFIX_0F383E */
42903f7f 4388 {
592d1631
L
4389 { Bad_Opcode },
4390 { Bad_Opcode },
507bd325 4391 { "pmaxuw", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4392 },
4393
1ceb70f8 4394 /* PREFIX_0F383F */
42903f7f 4395 {
592d1631
L
4396 { Bad_Opcode },
4397 { Bad_Opcode },
507bd325 4398 { "pmaxud", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4399 },
4400
1ceb70f8 4401 /* PREFIX_0F3840 */
42903f7f 4402 {
592d1631
L
4403 { Bad_Opcode },
4404 { Bad_Opcode },
507bd325 4405 { "pmulld", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4406 },
4407
1ceb70f8 4408 /* PREFIX_0F3841 */
42903f7f 4409 {
592d1631
L
4410 { Bad_Opcode },
4411 { Bad_Opcode },
507bd325 4412 { "phminposuw", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4413 },
4414
f1f8f695
L
4415 /* PREFIX_0F3880 */
4416 {
592d1631
L
4417 { Bad_Opcode },
4418 { Bad_Opcode },
507bd325 4419 { "invept", { Gm, Mo }, PREFIX_OPCODE },
f1f8f695
L
4420 },
4421
4422 /* PREFIX_0F3881 */
4423 {
592d1631
L
4424 { Bad_Opcode },
4425 { Bad_Opcode },
507bd325 4426 { "invvpid", { Gm, Mo }, PREFIX_OPCODE },
f1f8f695
L
4427 },
4428
6c30d220
L
4429 /* PREFIX_0F3882 */
4430 {
4431 { Bad_Opcode },
4432 { Bad_Opcode },
507bd325 4433 { "invpcid", { Gm, M }, PREFIX_OPCODE },
6c30d220
L
4434 },
4435
a0046408
L
4436 /* PREFIX_0F38C8 */
4437 {
507bd325 4438 { "sha1nexte", { XM, EXxmm }, PREFIX_OPCODE },
a0046408
L
4439 },
4440
4441 /* PREFIX_0F38C9 */
4442 {
507bd325 4443 { "sha1msg1", { XM, EXxmm }, PREFIX_OPCODE },
a0046408
L
4444 },
4445
4446 /* PREFIX_0F38CA */
4447 {
507bd325 4448 { "sha1msg2", { XM, EXxmm }, PREFIX_OPCODE },
a0046408
L
4449 },
4450
4451 /* PREFIX_0F38CB */
4452 {
507bd325 4453 { "sha256rnds2", { XM, EXxmm, XMM0 }, PREFIX_OPCODE },
a0046408
L
4454 },
4455
4456 /* PREFIX_0F38CC */
4457 {
507bd325 4458 { "sha256msg1", { XM, EXxmm }, PREFIX_OPCODE },
a0046408
L
4459 },
4460
4461 /* PREFIX_0F38CD */
4462 {
507bd325 4463 { "sha256msg2", { XM, EXxmm }, PREFIX_OPCODE },
a0046408
L
4464 },
4465
c0f3af97
L
4466 /* PREFIX_0F38DB */
4467 {
592d1631
L
4468 { Bad_Opcode },
4469 { Bad_Opcode },
507bd325 4470 { "aesimc", { XM, EXx }, PREFIX_OPCODE },
c0f3af97
L
4471 },
4472
4473 /* PREFIX_0F38DC */
4474 {
592d1631
L
4475 { Bad_Opcode },
4476 { Bad_Opcode },
507bd325 4477 { "aesenc", { XM, EXx }, PREFIX_OPCODE },
c0f3af97
L
4478 },
4479
4480 /* PREFIX_0F38DD */
4481 {
592d1631
L
4482 { Bad_Opcode },
4483 { Bad_Opcode },
507bd325 4484 { "aesenclast", { XM, EXx }, PREFIX_OPCODE },
c0f3af97
L
4485 },
4486
4487 /* PREFIX_0F38DE */
4488 {
592d1631
L
4489 { Bad_Opcode },
4490 { Bad_Opcode },
507bd325 4491 { "aesdec", { XM, EXx }, PREFIX_OPCODE },
c0f3af97
L
4492 },
4493
4494 /* PREFIX_0F38DF */
4495 {
592d1631
L
4496 { Bad_Opcode },
4497 { Bad_Opcode },
507bd325 4498 { "aesdeclast", { XM, EXx }, PREFIX_OPCODE },
c0f3af97
L
4499 },
4500
1ceb70f8 4501 /* PREFIX_0F38F0 */
4e7d34a6 4502 {
507bd325 4503 { "movbeS", { Gv, { MOVBE_Fixup, v_mode } }, PREFIX_OPCODE },
592d1631 4504 { Bad_Opcode },
507bd325
L
4505 { "movbeS", { Gv, { MOVBE_Fixup, v_mode } }, PREFIX_OPCODE },
4506 { "crc32", { Gdq, { CRC32_Fixup, b_mode } }, PREFIX_OPCODE },
4e7d34a6
L
4507 },
4508
1ceb70f8 4509 /* PREFIX_0F38F1 */
4e7d34a6 4510 {
507bd325 4511 { "movbeS", { { MOVBE_Fixup, v_mode }, Gv }, PREFIX_OPCODE },
592d1631 4512 { Bad_Opcode },
507bd325
L
4513 { "movbeS", { { MOVBE_Fixup, v_mode }, Gv }, PREFIX_OPCODE },
4514 { "crc32", { Gdq, { CRC32_Fixup, v_mode } }, PREFIX_OPCODE },
4e7d34a6
L
4515 },
4516
e2e1fcde
L
4517 /* PREFIX_0F38F6 */
4518 {
4519 { Bad_Opcode },
507bd325
L
4520 { "adoxS", { Gdq, Edq}, PREFIX_OPCODE },
4521 { "adcxS", { Gdq, Edq}, PREFIX_OPCODE },
e2e1fcde
L
4522 { Bad_Opcode },
4523 },
4524
1ceb70f8 4525 /* PREFIX_0F3A08 */
42903f7f 4526 {
592d1631
L
4527 { Bad_Opcode },
4528 { Bad_Opcode },
507bd325 4529 { "roundps", { XM, EXx, Ib }, PREFIX_OPCODE },
42903f7f
L
4530 },
4531
1ceb70f8 4532 /* PREFIX_0F3A09 */
42903f7f 4533 {
592d1631
L
4534 { Bad_Opcode },
4535 { Bad_Opcode },
507bd325 4536 { "roundpd", { XM, EXx, Ib }, PREFIX_OPCODE },
42903f7f
L
4537 },
4538
1ceb70f8 4539 /* PREFIX_0F3A0A */
42903f7f 4540 {
592d1631
L
4541 { Bad_Opcode },
4542 { Bad_Opcode },
507bd325 4543 { "roundss", { XM, EXd, Ib }, PREFIX_OPCODE },
42903f7f
L
4544 },
4545
1ceb70f8 4546 /* PREFIX_0F3A0B */
42903f7f 4547 {
592d1631
L
4548 { Bad_Opcode },
4549 { Bad_Opcode },
507bd325 4550 { "roundsd", { XM, EXq, Ib }, PREFIX_OPCODE },
42903f7f
L
4551 },
4552
1ceb70f8 4553 /* PREFIX_0F3A0C */
42903f7f 4554 {
592d1631
L
4555 { Bad_Opcode },
4556 { Bad_Opcode },
507bd325 4557 { "blendps", { XM, EXx, Ib }, PREFIX_OPCODE },
42903f7f
L
4558 },
4559
1ceb70f8 4560 /* PREFIX_0F3A0D */
42903f7f 4561 {
592d1631
L
4562 { Bad_Opcode },
4563 { Bad_Opcode },
507bd325 4564 { "blendpd", { XM, EXx, Ib }, PREFIX_OPCODE },
42903f7f
L
4565 },
4566
1ceb70f8 4567 /* PREFIX_0F3A0E */
42903f7f 4568 {
592d1631
L
4569 { Bad_Opcode },
4570 { Bad_Opcode },
507bd325 4571 { "pblendw", { XM, EXx, Ib }, PREFIX_OPCODE },
42903f7f
L
4572 },
4573
1ceb70f8 4574 /* PREFIX_0F3A14 */
42903f7f 4575 {
592d1631
L
4576 { Bad_Opcode },
4577 { Bad_Opcode },
507bd325 4578 { "pextrb", { Edqb, XM, Ib }, PREFIX_OPCODE },
42903f7f
L
4579 },
4580
1ceb70f8 4581 /* PREFIX_0F3A15 */
42903f7f 4582 {
592d1631
L
4583 { Bad_Opcode },
4584 { Bad_Opcode },
507bd325 4585 { "pextrw", { Edqw, XM, Ib }, PREFIX_OPCODE },
42903f7f
L
4586 },
4587
1ceb70f8 4588 /* PREFIX_0F3A16 */
42903f7f 4589 {
592d1631
L
4590 { Bad_Opcode },
4591 { Bad_Opcode },
507bd325 4592 { "pextrK", { Edq, XM, Ib }, PREFIX_OPCODE },
42903f7f
L
4593 },
4594
1ceb70f8 4595 /* PREFIX_0F3A17 */
42903f7f 4596 {
592d1631
L
4597 { Bad_Opcode },
4598 { Bad_Opcode },
507bd325 4599 { "extractps", { Edqd, XM, Ib }, PREFIX_OPCODE },
42903f7f
L
4600 },
4601
1ceb70f8 4602 /* PREFIX_0F3A20 */
42903f7f 4603 {
592d1631
L
4604 { Bad_Opcode },
4605 { Bad_Opcode },
507bd325 4606 { "pinsrb", { XM, Edqb, Ib }, PREFIX_OPCODE },
42903f7f
L
4607 },
4608
1ceb70f8 4609 /* PREFIX_0F3A21 */
42903f7f 4610 {
592d1631
L
4611 { Bad_Opcode },
4612 { Bad_Opcode },
507bd325 4613 { "insertps", { XM, EXd, Ib }, PREFIX_OPCODE },
42903f7f
L
4614 },
4615
1ceb70f8 4616 /* PREFIX_0F3A22 */
42903f7f 4617 {
592d1631
L
4618 { Bad_Opcode },
4619 { Bad_Opcode },
507bd325 4620 { "pinsrK", { XM, Edq, Ib }, PREFIX_OPCODE },
42903f7f
L
4621 },
4622
1ceb70f8 4623 /* PREFIX_0F3A40 */
42903f7f 4624 {
592d1631
L
4625 { Bad_Opcode },
4626 { Bad_Opcode },
507bd325 4627 { "dpps", { XM, EXx, Ib }, PREFIX_OPCODE },
42903f7f
L
4628 },
4629
1ceb70f8 4630 /* PREFIX_0F3A41 */
42903f7f 4631 {
592d1631
L
4632 { Bad_Opcode },
4633 { Bad_Opcode },
507bd325 4634 { "dppd", { XM, EXx, Ib }, PREFIX_OPCODE },
42903f7f
L
4635 },
4636
1ceb70f8 4637 /* PREFIX_0F3A42 */
42903f7f 4638 {
592d1631
L
4639 { Bad_Opcode },
4640 { Bad_Opcode },
507bd325 4641 { "mpsadbw", { XM, EXx, Ib }, PREFIX_OPCODE },
42903f7f 4642 },
381d071f 4643
c0f3af97
L
4644 /* PREFIX_0F3A44 */
4645 {
592d1631
L
4646 { Bad_Opcode },
4647 { Bad_Opcode },
507bd325 4648 { "pclmulqdq", { XM, EXx, PCLMUL }, PREFIX_OPCODE },
c0f3af97
L
4649 },
4650
1ceb70f8 4651 /* PREFIX_0F3A60 */
381d071f 4652 {
592d1631
L
4653 { Bad_Opcode },
4654 { Bad_Opcode },
507bd325 4655 { "pcmpestrm", { XM, EXx, Ib }, PREFIX_OPCODE },
381d071f
L
4656 },
4657
1ceb70f8 4658 /* PREFIX_0F3A61 */
381d071f 4659 {
592d1631
L
4660 { Bad_Opcode },
4661 { Bad_Opcode },
507bd325 4662 { "pcmpestri", { XM, EXx, Ib }, PREFIX_OPCODE },
381d071f
L
4663 },
4664
1ceb70f8 4665 /* PREFIX_0F3A62 */
381d071f 4666 {
592d1631
L
4667 { Bad_Opcode },
4668 { Bad_Opcode },
507bd325 4669 { "pcmpistrm", { XM, EXx, Ib }, PREFIX_OPCODE },
381d071f
L
4670 },
4671
1ceb70f8 4672 /* PREFIX_0F3A63 */
381d071f 4673 {
592d1631
L
4674 { Bad_Opcode },
4675 { Bad_Opcode },
507bd325 4676 { "pcmpistri", { XM, EXx, Ib }, PREFIX_OPCODE },
381d071f 4677 },
09a2c6cf 4678
a0046408
L
4679 /* PREFIX_0F3ACC */
4680 {
507bd325 4681 { "sha1rnds4", { XM, EXxmm, Ib }, PREFIX_OPCODE },
a0046408
L
4682 },
4683
c0f3af97 4684 /* PREFIX_0F3ADF */
09a2c6cf 4685 {
592d1631
L
4686 { Bad_Opcode },
4687 { Bad_Opcode },
507bd325 4688 { "aeskeygenassist", { XM, EXx, Ib }, PREFIX_OPCODE },
09a2c6cf
L
4689 },
4690
592a252b 4691 /* PREFIX_VEX_0F10 */
09a2c6cf 4692 {
592a252b
L
4693 { VEX_W_TABLE (VEX_W_0F10_P_0) },
4694 { VEX_LEN_TABLE (VEX_LEN_0F10_P_1) },
4695 { VEX_W_TABLE (VEX_W_0F10_P_2) },
4696 { VEX_LEN_TABLE (VEX_LEN_0F10_P_3) },
09a2c6cf
L
4697 },
4698
592a252b 4699 /* PREFIX_VEX_0F11 */
09a2c6cf 4700 {
592a252b
L
4701 { VEX_W_TABLE (VEX_W_0F11_P_0) },
4702 { VEX_LEN_TABLE (VEX_LEN_0F11_P_1) },
4703 { VEX_W_TABLE (VEX_W_0F11_P_2) },
4704 { VEX_LEN_TABLE (VEX_LEN_0F11_P_3) },
09a2c6cf
L
4705 },
4706
592a252b 4707 /* PREFIX_VEX_0F12 */
09a2c6cf 4708 {
592a252b
L
4709 { MOD_TABLE (MOD_VEX_0F12_PREFIX_0) },
4710 { VEX_W_TABLE (VEX_W_0F12_P_1) },
4711 { VEX_LEN_TABLE (VEX_LEN_0F12_P_2) },
4712 { VEX_W_TABLE (VEX_W_0F12_P_3) },
09a2c6cf
L
4713 },
4714
592a252b 4715 /* PREFIX_VEX_0F16 */
09a2c6cf 4716 {
592a252b
L
4717 { MOD_TABLE (MOD_VEX_0F16_PREFIX_0) },
4718 { VEX_W_TABLE (VEX_W_0F16_P_1) },
4719 { VEX_LEN_TABLE (VEX_LEN_0F16_P_2) },
5f754f58 4720 },
7c52e0e8 4721
592a252b 4722 /* PREFIX_VEX_0F2A */
5f754f58 4723 {
592d1631 4724 { Bad_Opcode },
592a252b 4725 { VEX_LEN_TABLE (VEX_LEN_0F2A_P_1) },
592d1631 4726 { Bad_Opcode },
592a252b 4727 { VEX_LEN_TABLE (VEX_LEN_0F2A_P_3) },
5f754f58 4728 },
7c52e0e8 4729
592a252b 4730 /* PREFIX_VEX_0F2C */
5f754f58 4731 {
592d1631 4732 { Bad_Opcode },
592a252b 4733 { VEX_LEN_TABLE (VEX_LEN_0F2C_P_1) },
592d1631 4734 { Bad_Opcode },
592a252b 4735 { VEX_LEN_TABLE (VEX_LEN_0F2C_P_3) },
5f754f58 4736 },
7c52e0e8 4737
592a252b 4738 /* PREFIX_VEX_0F2D */
7c52e0e8 4739 {
592d1631 4740 { Bad_Opcode },
592a252b 4741 { VEX_LEN_TABLE (VEX_LEN_0F2D_P_1) },
592d1631 4742 { Bad_Opcode },
592a252b 4743 { VEX_LEN_TABLE (VEX_LEN_0F2D_P_3) },
7c52e0e8
L
4744 },
4745
592a252b 4746 /* PREFIX_VEX_0F2E */
7c52e0e8 4747 {
592a252b 4748 { VEX_LEN_TABLE (VEX_LEN_0F2E_P_0) },
592d1631 4749 { Bad_Opcode },
592a252b 4750 { VEX_LEN_TABLE (VEX_LEN_0F2E_P_2) },
7c52e0e8
L
4751 },
4752
592a252b 4753 /* PREFIX_VEX_0F2F */
7c52e0e8 4754 {
592a252b 4755 { VEX_LEN_TABLE (VEX_LEN_0F2F_P_0) },
592d1631 4756 { Bad_Opcode },
592a252b 4757 { VEX_LEN_TABLE (VEX_LEN_0F2F_P_2) },
7c52e0e8
L
4758 },
4759
43234a1e
L
4760 /* PREFIX_VEX_0F41 */
4761 {
4762 { VEX_LEN_TABLE (VEX_LEN_0F41_P_0) },
1ba585e8
IT
4763 { Bad_Opcode },
4764 { VEX_LEN_TABLE (VEX_LEN_0F41_P_2) },
43234a1e
L
4765 },
4766
4767 /* PREFIX_VEX_0F42 */
4768 {
4769 { VEX_LEN_TABLE (VEX_LEN_0F42_P_0) },
1ba585e8
IT
4770 { Bad_Opcode },
4771 { VEX_LEN_TABLE (VEX_LEN_0F42_P_2) },
43234a1e
L
4772 },
4773
4774 /* PREFIX_VEX_0F44 */
4775 {
4776 { VEX_LEN_TABLE (VEX_LEN_0F44_P_0) },
1ba585e8
IT
4777 { Bad_Opcode },
4778 { VEX_LEN_TABLE (VEX_LEN_0F44_P_2) },
43234a1e
L
4779 },
4780
4781 /* PREFIX_VEX_0F45 */
4782 {
4783 { VEX_LEN_TABLE (VEX_LEN_0F45_P_0) },
1ba585e8
IT
4784 { Bad_Opcode },
4785 { VEX_LEN_TABLE (VEX_LEN_0F45_P_2) },
43234a1e
L
4786 },
4787
4788 /* PREFIX_VEX_0F46 */
4789 {
4790 { VEX_LEN_TABLE (VEX_LEN_0F46_P_0) },
1ba585e8
IT
4791 { Bad_Opcode },
4792 { VEX_LEN_TABLE (VEX_LEN_0F46_P_2) },
43234a1e
L
4793 },
4794
4795 /* PREFIX_VEX_0F47 */
4796 {
4797 { VEX_LEN_TABLE (VEX_LEN_0F47_P_0) },
1ba585e8
IT
4798 { Bad_Opcode },
4799 { VEX_LEN_TABLE (VEX_LEN_0F47_P_2) },
43234a1e
L
4800 },
4801
1ba585e8 4802 /* PREFIX_VEX_0F4A */
43234a1e 4803 {
1ba585e8 4804 { VEX_LEN_TABLE (VEX_LEN_0F4A_P_0) },
43234a1e 4805 { Bad_Opcode },
1ba585e8
IT
4806 { VEX_LEN_TABLE (VEX_LEN_0F4A_P_2) },
4807 },
4808
4809 /* PREFIX_VEX_0F4B */
4810 {
4811 { VEX_LEN_TABLE (VEX_LEN_0F4B_P_0) },
43234a1e
L
4812 { Bad_Opcode },
4813 { VEX_LEN_TABLE (VEX_LEN_0F4B_P_2) },
4814 },
4815
592a252b 4816 /* PREFIX_VEX_0F51 */
7c52e0e8 4817 {
592a252b
L
4818 { VEX_W_TABLE (VEX_W_0F51_P_0) },
4819 { VEX_LEN_TABLE (VEX_LEN_0F51_P_1) },
4820 { VEX_W_TABLE (VEX_W_0F51_P_2) },
4821 { VEX_LEN_TABLE (VEX_LEN_0F51_P_3) },
7c52e0e8
L
4822 },
4823
592a252b 4824 /* PREFIX_VEX_0F52 */
7c52e0e8 4825 {
592a252b
L
4826 { VEX_W_TABLE (VEX_W_0F52_P_0) },
4827 { VEX_LEN_TABLE (VEX_LEN_0F52_P_1) },
7c52e0e8
L
4828 },
4829
592a252b 4830 /* PREFIX_VEX_0F53 */
7c52e0e8 4831 {
592a252b
L
4832 { VEX_W_TABLE (VEX_W_0F53_P_0) },
4833 { VEX_LEN_TABLE (VEX_LEN_0F53_P_1) },
7c52e0e8
L
4834 },
4835
592a252b 4836 /* PREFIX_VEX_0F58 */
7c52e0e8 4837 {
592a252b
L
4838 { VEX_W_TABLE (VEX_W_0F58_P_0) },
4839 { VEX_LEN_TABLE (VEX_LEN_0F58_P_1) },
4840 { VEX_W_TABLE (VEX_W_0F58_P_2) },
4841 { VEX_LEN_TABLE (VEX_LEN_0F58_P_3) },
7c52e0e8
L
4842 },
4843
592a252b 4844 /* PREFIX_VEX_0F59 */
7c52e0e8 4845 {
592a252b
L
4846 { VEX_W_TABLE (VEX_W_0F59_P_0) },
4847 { VEX_LEN_TABLE (VEX_LEN_0F59_P_1) },
4848 { VEX_W_TABLE (VEX_W_0F59_P_2) },
4849 { VEX_LEN_TABLE (VEX_LEN_0F59_P_3) },
7c52e0e8
L
4850 },
4851
592a252b 4852 /* PREFIX_VEX_0F5A */
7c52e0e8 4853 {
592a252b
L
4854 { VEX_W_TABLE (VEX_W_0F5A_P_0) },
4855 { VEX_LEN_TABLE (VEX_LEN_0F5A_P_1) },
bf890a93 4856 { "vcvtpd2ps%XY", { XMM, EXx }, 0 },
592a252b 4857 { VEX_LEN_TABLE (VEX_LEN_0F5A_P_3) },
7c52e0e8
L
4858 },
4859
592a252b 4860 /* PREFIX_VEX_0F5B */
7c52e0e8 4861 {
592a252b
L
4862 { VEX_W_TABLE (VEX_W_0F5B_P_0) },
4863 { VEX_W_TABLE (VEX_W_0F5B_P_1) },
4864 { VEX_W_TABLE (VEX_W_0F5B_P_2) },
7c52e0e8
L
4865 },
4866
592a252b 4867 /* PREFIX_VEX_0F5C */
7c52e0e8 4868 {
592a252b
L
4869 { VEX_W_TABLE (VEX_W_0F5C_P_0) },
4870 { VEX_LEN_TABLE (VEX_LEN_0F5C_P_1) },
4871 { VEX_W_TABLE (VEX_W_0F5C_P_2) },
4872 { VEX_LEN_TABLE (VEX_LEN_0F5C_P_3) },
7c52e0e8
L
4873 },
4874
592a252b 4875 /* PREFIX_VEX_0F5D */
7c52e0e8 4876 {
592a252b
L
4877 { VEX_W_TABLE (VEX_W_0F5D_P_0) },
4878 { VEX_LEN_TABLE (VEX_LEN_0F5D_P_1) },
4879 { VEX_W_TABLE (VEX_W_0F5D_P_2) },
4880 { VEX_LEN_TABLE (VEX_LEN_0F5D_P_3) },
7c52e0e8
L
4881 },
4882
592a252b 4883 /* PREFIX_VEX_0F5E */
7c52e0e8 4884 {
592a252b
L
4885 { VEX_W_TABLE (VEX_W_0F5E_P_0) },
4886 { VEX_LEN_TABLE (VEX_LEN_0F5E_P_1) },
4887 { VEX_W_TABLE (VEX_W_0F5E_P_2) },
4888 { VEX_LEN_TABLE (VEX_LEN_0F5E_P_3) },
7c52e0e8
L
4889 },
4890
592a252b 4891 /* PREFIX_VEX_0F5F */
7c52e0e8 4892 {
592a252b
L
4893 { VEX_W_TABLE (VEX_W_0F5F_P_0) },
4894 { VEX_LEN_TABLE (VEX_LEN_0F5F_P_1) },
4895 { VEX_W_TABLE (VEX_W_0F5F_P_2) },
4896 { VEX_LEN_TABLE (VEX_LEN_0F5F_P_3) },
7c52e0e8
L
4897 },
4898
592a252b 4899 /* PREFIX_VEX_0F60 */
7c52e0e8 4900 {
592d1631
L
4901 { Bad_Opcode },
4902 { Bad_Opcode },
6c30d220 4903 { VEX_W_TABLE (VEX_W_0F60_P_2) },
7c52e0e8
L
4904 },
4905
592a252b 4906 /* PREFIX_VEX_0F61 */
7c52e0e8 4907 {
592d1631
L
4908 { Bad_Opcode },
4909 { Bad_Opcode },
6c30d220 4910 { VEX_W_TABLE (VEX_W_0F61_P_2) },
7c52e0e8
L
4911 },
4912
592a252b 4913 /* PREFIX_VEX_0F62 */
7c52e0e8 4914 {
592d1631
L
4915 { Bad_Opcode },
4916 { Bad_Opcode },
6c30d220 4917 { VEX_W_TABLE (VEX_W_0F62_P_2) },
7c52e0e8
L
4918 },
4919
592a252b 4920 /* PREFIX_VEX_0F63 */
7c52e0e8 4921 {
592d1631
L
4922 { Bad_Opcode },
4923 { Bad_Opcode },
6c30d220 4924 { VEX_W_TABLE (VEX_W_0F63_P_2) },
7c52e0e8
L
4925 },
4926
592a252b 4927 /* PREFIX_VEX_0F64 */
7c52e0e8 4928 {
592d1631
L
4929 { Bad_Opcode },
4930 { Bad_Opcode },
6c30d220 4931 { VEX_W_TABLE (VEX_W_0F64_P_2) },
7c52e0e8
L
4932 },
4933
592a252b 4934 /* PREFIX_VEX_0F65 */
7c52e0e8 4935 {
592d1631
L
4936 { Bad_Opcode },
4937 { Bad_Opcode },
6c30d220 4938 { VEX_W_TABLE (VEX_W_0F65_P_2) },
7c52e0e8
L
4939 },
4940
592a252b 4941 /* PREFIX_VEX_0F66 */
7c52e0e8 4942 {
592d1631
L
4943 { Bad_Opcode },
4944 { Bad_Opcode },
6c30d220 4945 { VEX_W_TABLE (VEX_W_0F66_P_2) },
7c52e0e8 4946 },
6439fc28 4947
592a252b 4948 /* PREFIX_VEX_0F67 */
331d2d0d 4949 {
592d1631
L
4950 { Bad_Opcode },
4951 { Bad_Opcode },
6c30d220 4952 { VEX_W_TABLE (VEX_W_0F67_P_2) },
c0f3af97
L
4953 },
4954
592a252b 4955 /* PREFIX_VEX_0F68 */
c0f3af97 4956 {
592d1631
L
4957 { Bad_Opcode },
4958 { Bad_Opcode },
6c30d220 4959 { VEX_W_TABLE (VEX_W_0F68_P_2) },
c0f3af97
L
4960 },
4961
592a252b 4962 /* PREFIX_VEX_0F69 */
c0f3af97 4963 {
592d1631
L
4964 { Bad_Opcode },
4965 { Bad_Opcode },
6c30d220 4966 { VEX_W_TABLE (VEX_W_0F69_P_2) },
c0f3af97
L
4967 },
4968
592a252b 4969 /* PREFIX_VEX_0F6A */
c0f3af97 4970 {
592d1631
L
4971 { Bad_Opcode },
4972 { Bad_Opcode },
6c30d220 4973 { VEX_W_TABLE (VEX_W_0F6A_P_2) },
c0f3af97
L
4974 },
4975
592a252b 4976 /* PREFIX_VEX_0F6B */
c0f3af97 4977 {
592d1631
L
4978 { Bad_Opcode },
4979 { Bad_Opcode },
6c30d220 4980 { VEX_W_TABLE (VEX_W_0F6B_P_2) },
c0f3af97
L
4981 },
4982
592a252b 4983 /* PREFIX_VEX_0F6C */
c0f3af97 4984 {
592d1631
L
4985 { Bad_Opcode },
4986 { Bad_Opcode },
6c30d220 4987 { VEX_W_TABLE (VEX_W_0F6C_P_2) },
c0f3af97
L
4988 },
4989
592a252b 4990 /* PREFIX_VEX_0F6D */
c0f3af97 4991 {
592d1631
L
4992 { Bad_Opcode },
4993 { Bad_Opcode },
6c30d220 4994 { VEX_W_TABLE (VEX_W_0F6D_P_2) },
c0f3af97
L
4995 },
4996
592a252b 4997 /* PREFIX_VEX_0F6E */
c0f3af97 4998 {
592d1631
L
4999 { Bad_Opcode },
5000 { Bad_Opcode },
592a252b 5001 { VEX_LEN_TABLE (VEX_LEN_0F6E_P_2) },
c0f3af97
L
5002 },
5003
592a252b 5004 /* PREFIX_VEX_0F6F */
c0f3af97 5005 {
592d1631 5006 { Bad_Opcode },
592a252b
L
5007 { VEX_W_TABLE (VEX_W_0F6F_P_1) },
5008 { VEX_W_TABLE (VEX_W_0F6F_P_2) },
c0f3af97
L
5009 },
5010
592a252b 5011 /* PREFIX_VEX_0F70 */
c0f3af97 5012 {
592d1631 5013 { Bad_Opcode },
6c30d220
L
5014 { VEX_W_TABLE (VEX_W_0F70_P_1) },
5015 { VEX_W_TABLE (VEX_W_0F70_P_2) },
5016 { VEX_W_TABLE (VEX_W_0F70_P_3) },
c0f3af97
L
5017 },
5018
592a252b 5019 /* PREFIX_VEX_0F71_REG_2 */
c0f3af97 5020 {
592d1631
L
5021 { Bad_Opcode },
5022 { Bad_Opcode },
6c30d220 5023 { VEX_W_TABLE (VEX_W_0F71_R_2_P_2) },
c0f3af97
L
5024 },
5025
592a252b 5026 /* PREFIX_VEX_0F71_REG_4 */
c0f3af97 5027 {
592d1631
L
5028 { Bad_Opcode },
5029 { Bad_Opcode },
6c30d220 5030 { VEX_W_TABLE (VEX_W_0F71_R_4_P_2) },
c0f3af97
L
5031 },
5032
592a252b 5033 /* PREFIX_VEX_0F71_REG_6 */
c0f3af97 5034 {
592d1631
L
5035 { Bad_Opcode },
5036 { Bad_Opcode },
6c30d220 5037 { VEX_W_TABLE (VEX_W_0F71_R_6_P_2) },
c0f3af97
L
5038 },
5039
592a252b 5040 /* PREFIX_VEX_0F72_REG_2 */
c0f3af97 5041 {
592d1631
L
5042 { Bad_Opcode },
5043 { Bad_Opcode },
6c30d220 5044 { VEX_W_TABLE (VEX_W_0F72_R_2_P_2) },
c0f3af97
L
5045 },
5046
592a252b 5047 /* PREFIX_VEX_0F72_REG_4 */
c0f3af97 5048 {
592d1631
L
5049 { Bad_Opcode },
5050 { Bad_Opcode },
6c30d220 5051 { VEX_W_TABLE (VEX_W_0F72_R_4_P_2) },
c0f3af97
L
5052 },
5053
592a252b 5054 /* PREFIX_VEX_0F72_REG_6 */
c0f3af97 5055 {
592d1631
L
5056 { Bad_Opcode },
5057 { Bad_Opcode },
6c30d220 5058 { VEX_W_TABLE (VEX_W_0F72_R_6_P_2) },
c0f3af97
L
5059 },
5060
592a252b 5061 /* PREFIX_VEX_0F73_REG_2 */
c0f3af97 5062 {
592d1631
L
5063 { Bad_Opcode },
5064 { Bad_Opcode },
6c30d220 5065 { VEX_W_TABLE (VEX_W_0F73_R_2_P_2) },
c0f3af97
L
5066 },
5067
592a252b 5068 /* PREFIX_VEX_0F73_REG_3 */
c0f3af97 5069 {
592d1631
L
5070 { Bad_Opcode },
5071 { Bad_Opcode },
6c30d220 5072 { VEX_W_TABLE (VEX_W_0F73_R_3_P_2) },
c0f3af97
L
5073 },
5074
592a252b 5075 /* PREFIX_VEX_0F73_REG_6 */
c0f3af97 5076 {
592d1631
L
5077 { Bad_Opcode },
5078 { Bad_Opcode },
6c30d220 5079 { VEX_W_TABLE (VEX_W_0F73_R_6_P_2) },
c0f3af97
L
5080 },
5081
592a252b 5082 /* PREFIX_VEX_0F73_REG_7 */
c0f3af97 5083 {
592d1631
L
5084 { Bad_Opcode },
5085 { Bad_Opcode },
6c30d220 5086 { VEX_W_TABLE (VEX_W_0F73_R_7_P_2) },
c0f3af97
L
5087 },
5088
592a252b 5089 /* PREFIX_VEX_0F74 */
c0f3af97 5090 {
592d1631
L
5091 { Bad_Opcode },
5092 { Bad_Opcode },
6c30d220 5093 { VEX_W_TABLE (VEX_W_0F74_P_2) },
c0f3af97
L
5094 },
5095
592a252b 5096 /* PREFIX_VEX_0F75 */
c0f3af97 5097 {
592d1631
L
5098 { Bad_Opcode },
5099 { Bad_Opcode },
6c30d220 5100 { VEX_W_TABLE (VEX_W_0F75_P_2) },
c0f3af97
L
5101 },
5102
592a252b 5103 /* PREFIX_VEX_0F76 */
c0f3af97 5104 {
592d1631
L
5105 { Bad_Opcode },
5106 { Bad_Opcode },
6c30d220 5107 { VEX_W_TABLE (VEX_W_0F76_P_2) },
c0f3af97
L
5108 },
5109
592a252b 5110 /* PREFIX_VEX_0F77 */
c0f3af97 5111 {
592a252b 5112 { VEX_W_TABLE (VEX_W_0F77_P_0) },
c0f3af97
L
5113 },
5114
592a252b 5115 /* PREFIX_VEX_0F7C */
c0f3af97 5116 {
592d1631
L
5117 { Bad_Opcode },
5118 { Bad_Opcode },
592a252b
L
5119 { VEX_W_TABLE (VEX_W_0F7C_P_2) },
5120 { VEX_W_TABLE (VEX_W_0F7C_P_3) },
c0f3af97
L
5121 },
5122
592a252b 5123 /* PREFIX_VEX_0F7D */
c0f3af97 5124 {
592d1631
L
5125 { Bad_Opcode },
5126 { Bad_Opcode },
592a252b
L
5127 { VEX_W_TABLE (VEX_W_0F7D_P_2) },
5128 { VEX_W_TABLE (VEX_W_0F7D_P_3) },
c0f3af97
L
5129 },
5130
592a252b 5131 /* PREFIX_VEX_0F7E */
c0f3af97 5132 {
592d1631 5133 { Bad_Opcode },
592a252b
L
5134 { VEX_LEN_TABLE (VEX_LEN_0F7E_P_1) },
5135 { VEX_LEN_TABLE (VEX_LEN_0F7E_P_2) },
c0f3af97
L
5136 },
5137
592a252b 5138 /* PREFIX_VEX_0F7F */
c0f3af97 5139 {
592d1631 5140 { Bad_Opcode },
592a252b
L
5141 { VEX_W_TABLE (VEX_W_0F7F_P_1) },
5142 { VEX_W_TABLE (VEX_W_0F7F_P_2) },
c0f3af97
L
5143 },
5144
43234a1e
L
5145 /* PREFIX_VEX_0F90 */
5146 {
5147 { VEX_LEN_TABLE (VEX_LEN_0F90_P_0) },
1ba585e8
IT
5148 { Bad_Opcode },
5149 { VEX_LEN_TABLE (VEX_LEN_0F90_P_2) },
43234a1e
L
5150 },
5151
5152 /* PREFIX_VEX_0F91 */
5153 {
5154 { VEX_LEN_TABLE (VEX_LEN_0F91_P_0) },
1ba585e8
IT
5155 { Bad_Opcode },
5156 { VEX_LEN_TABLE (VEX_LEN_0F91_P_2) },
43234a1e
L
5157 },
5158
5159 /* PREFIX_VEX_0F92 */
5160 {
5161 { VEX_LEN_TABLE (VEX_LEN_0F92_P_0) },
1ba585e8 5162 { Bad_Opcode },
90a915bf 5163 { VEX_LEN_TABLE (VEX_LEN_0F92_P_2) },
1ba585e8 5164 { VEX_LEN_TABLE (VEX_LEN_0F92_P_3) },
43234a1e
L
5165 },
5166
5167 /* PREFIX_VEX_0F93 */
5168 {
5169 { VEX_LEN_TABLE (VEX_LEN_0F93_P_0) },
1ba585e8 5170 { Bad_Opcode },
90a915bf 5171 { VEX_LEN_TABLE (VEX_LEN_0F93_P_2) },
1ba585e8 5172 { VEX_LEN_TABLE (VEX_LEN_0F93_P_3) },
43234a1e
L
5173 },
5174
5175 /* PREFIX_VEX_0F98 */
5176 {
5177 { VEX_LEN_TABLE (VEX_LEN_0F98_P_0) },
1ba585e8
IT
5178 { Bad_Opcode },
5179 { VEX_LEN_TABLE (VEX_LEN_0F98_P_2) },
5180 },
5181
5182 /* PREFIX_VEX_0F99 */
5183 {
5184 { VEX_LEN_TABLE (VEX_LEN_0F99_P_0) },
5185 { Bad_Opcode },
5186 { VEX_LEN_TABLE (VEX_LEN_0F99_P_2) },
43234a1e
L
5187 },
5188
592a252b 5189 /* PREFIX_VEX_0FC2 */
c0f3af97 5190 {
592a252b
L
5191 { VEX_W_TABLE (VEX_W_0FC2_P_0) },
5192 { VEX_LEN_TABLE (VEX_LEN_0FC2_P_1) },
5193 { VEX_W_TABLE (VEX_W_0FC2_P_2) },
5194 { VEX_LEN_TABLE (VEX_LEN_0FC2_P_3) },
c0f3af97
L
5195 },
5196
592a252b 5197 /* PREFIX_VEX_0FC4 */
c0f3af97 5198 {
592d1631
L
5199 { Bad_Opcode },
5200 { Bad_Opcode },
592a252b 5201 { VEX_LEN_TABLE (VEX_LEN_0FC4_P_2) },
c0f3af97
L
5202 },
5203
592a252b 5204 /* PREFIX_VEX_0FC5 */
c0f3af97 5205 {
592d1631
L
5206 { Bad_Opcode },
5207 { Bad_Opcode },
592a252b 5208 { VEX_LEN_TABLE (VEX_LEN_0FC5_P_2) },
c0f3af97
L
5209 },
5210
592a252b 5211 /* PREFIX_VEX_0FD0 */
c0f3af97 5212 {
592d1631
L
5213 { Bad_Opcode },
5214 { Bad_Opcode },
592a252b
L
5215 { VEX_W_TABLE (VEX_W_0FD0_P_2) },
5216 { VEX_W_TABLE (VEX_W_0FD0_P_3) },
c0f3af97
L
5217 },
5218
592a252b 5219 /* PREFIX_VEX_0FD1 */
c0f3af97 5220 {
592d1631
L
5221 { Bad_Opcode },
5222 { Bad_Opcode },
6c30d220 5223 { VEX_W_TABLE (VEX_W_0FD1_P_2) },
c0f3af97
L
5224 },
5225
592a252b 5226 /* PREFIX_VEX_0FD2 */
c0f3af97 5227 {
592d1631
L
5228 { Bad_Opcode },
5229 { Bad_Opcode },
6c30d220 5230 { VEX_W_TABLE (VEX_W_0FD2_P_2) },
c0f3af97
L
5231 },
5232
592a252b 5233 /* PREFIX_VEX_0FD3 */
c0f3af97 5234 {
592d1631
L
5235 { Bad_Opcode },
5236 { Bad_Opcode },
6c30d220 5237 { VEX_W_TABLE (VEX_W_0FD3_P_2) },
c0f3af97
L
5238 },
5239
592a252b 5240 /* PREFIX_VEX_0FD4 */
c0f3af97 5241 {
592d1631
L
5242 { Bad_Opcode },
5243 { Bad_Opcode },
6c30d220 5244 { VEX_W_TABLE (VEX_W_0FD4_P_2) },
c0f3af97
L
5245 },
5246
592a252b 5247 /* PREFIX_VEX_0FD5 */
c0f3af97 5248 {
592d1631
L
5249 { Bad_Opcode },
5250 { Bad_Opcode },
6c30d220 5251 { VEX_W_TABLE (VEX_W_0FD5_P_2) },
c0f3af97
L
5252 },
5253
592a252b 5254 /* PREFIX_VEX_0FD6 */
c0f3af97 5255 {
592d1631
L
5256 { Bad_Opcode },
5257 { Bad_Opcode },
592a252b 5258 { VEX_LEN_TABLE (VEX_LEN_0FD6_P_2) },
c0f3af97
L
5259 },
5260
592a252b 5261 /* PREFIX_VEX_0FD7 */
c0f3af97 5262 {
592d1631
L
5263 { Bad_Opcode },
5264 { Bad_Opcode },
592a252b 5265 { MOD_TABLE (MOD_VEX_0FD7_PREFIX_2) },
c0f3af97
L
5266 },
5267
592a252b 5268 /* PREFIX_VEX_0FD8 */
c0f3af97 5269 {
592d1631
L
5270 { Bad_Opcode },
5271 { Bad_Opcode },
6c30d220 5272 { VEX_W_TABLE (VEX_W_0FD8_P_2) },
c0f3af97
L
5273 },
5274
592a252b 5275 /* PREFIX_VEX_0FD9 */
c0f3af97 5276 {
592d1631
L
5277 { Bad_Opcode },
5278 { Bad_Opcode },
6c30d220 5279 { VEX_W_TABLE (VEX_W_0FD9_P_2) },
c0f3af97
L
5280 },
5281
592a252b 5282 /* PREFIX_VEX_0FDA */
c0f3af97 5283 {
592d1631
L
5284 { Bad_Opcode },
5285 { Bad_Opcode },
6c30d220 5286 { VEX_W_TABLE (VEX_W_0FDA_P_2) },
c0f3af97
L
5287 },
5288
592a252b 5289 /* PREFIX_VEX_0FDB */
c0f3af97 5290 {
592d1631
L
5291 { Bad_Opcode },
5292 { Bad_Opcode },
6c30d220 5293 { VEX_W_TABLE (VEX_W_0FDB_P_2) },
c0f3af97
L
5294 },
5295
592a252b 5296 /* PREFIX_VEX_0FDC */
c0f3af97 5297 {
592d1631
L
5298 { Bad_Opcode },
5299 { Bad_Opcode },
6c30d220 5300 { VEX_W_TABLE (VEX_W_0FDC_P_2) },
c0f3af97
L
5301 },
5302
592a252b 5303 /* PREFIX_VEX_0FDD */
c0f3af97 5304 {
592d1631
L
5305 { Bad_Opcode },
5306 { Bad_Opcode },
6c30d220 5307 { VEX_W_TABLE (VEX_W_0FDD_P_2) },
c0f3af97
L
5308 },
5309
592a252b 5310 /* PREFIX_VEX_0FDE */
c0f3af97 5311 {
592d1631
L
5312 { Bad_Opcode },
5313 { Bad_Opcode },
6c30d220 5314 { VEX_W_TABLE (VEX_W_0FDE_P_2) },
c0f3af97
L
5315 },
5316
592a252b 5317 /* PREFIX_VEX_0FDF */
c0f3af97 5318 {
592d1631
L
5319 { Bad_Opcode },
5320 { Bad_Opcode },
6c30d220 5321 { VEX_W_TABLE (VEX_W_0FDF_P_2) },
c0f3af97
L
5322 },
5323
592a252b 5324 /* PREFIX_VEX_0FE0 */
c0f3af97 5325 {
592d1631
L
5326 { Bad_Opcode },
5327 { Bad_Opcode },
6c30d220 5328 { VEX_W_TABLE (VEX_W_0FE0_P_2) },
c0f3af97
L
5329 },
5330
592a252b 5331 /* PREFIX_VEX_0FE1 */
c0f3af97 5332 {
592d1631
L
5333 { Bad_Opcode },
5334 { Bad_Opcode },
6c30d220 5335 { VEX_W_TABLE (VEX_W_0FE1_P_2) },
c0f3af97
L
5336 },
5337
592a252b 5338 /* PREFIX_VEX_0FE2 */
c0f3af97 5339 {
592d1631
L
5340 { Bad_Opcode },
5341 { Bad_Opcode },
6c30d220 5342 { VEX_W_TABLE (VEX_W_0FE2_P_2) },
c0f3af97
L
5343 },
5344
592a252b 5345 /* PREFIX_VEX_0FE3 */
c0f3af97 5346 {
592d1631
L
5347 { Bad_Opcode },
5348 { Bad_Opcode },
6c30d220 5349 { VEX_W_TABLE (VEX_W_0FE3_P_2) },
c0f3af97
L
5350 },
5351
592a252b 5352 /* PREFIX_VEX_0FE4 */
c0f3af97 5353 {
592d1631
L
5354 { Bad_Opcode },
5355 { Bad_Opcode },
6c30d220 5356 { VEX_W_TABLE (VEX_W_0FE4_P_2) },
c0f3af97
L
5357 },
5358
592a252b 5359 /* PREFIX_VEX_0FE5 */
c0f3af97 5360 {
592d1631
L
5361 { Bad_Opcode },
5362 { Bad_Opcode },
6c30d220 5363 { VEX_W_TABLE (VEX_W_0FE5_P_2) },
c0f3af97
L
5364 },
5365
592a252b 5366 /* PREFIX_VEX_0FE6 */
c0f3af97 5367 {
592d1631 5368 { Bad_Opcode },
592a252b
L
5369 { VEX_W_TABLE (VEX_W_0FE6_P_1) },
5370 { VEX_W_TABLE (VEX_W_0FE6_P_2) },
5371 { VEX_W_TABLE (VEX_W_0FE6_P_3) },
c0f3af97
L
5372 },
5373
592a252b 5374 /* PREFIX_VEX_0FE7 */
c0f3af97 5375 {
592d1631
L
5376 { Bad_Opcode },
5377 { Bad_Opcode },
592a252b 5378 { MOD_TABLE (MOD_VEX_0FE7_PREFIX_2) },
c0f3af97
L
5379 },
5380
592a252b 5381 /* PREFIX_VEX_0FE8 */
c0f3af97 5382 {
592d1631
L
5383 { Bad_Opcode },
5384 { Bad_Opcode },
6c30d220 5385 { VEX_W_TABLE (VEX_W_0FE8_P_2) },
c0f3af97
L
5386 },
5387
592a252b 5388 /* PREFIX_VEX_0FE9 */
c0f3af97 5389 {
592d1631
L
5390 { Bad_Opcode },
5391 { Bad_Opcode },
6c30d220 5392 { VEX_W_TABLE (VEX_W_0FE9_P_2) },
c0f3af97
L
5393 },
5394
592a252b 5395 /* PREFIX_VEX_0FEA */
c0f3af97 5396 {
592d1631
L
5397 { Bad_Opcode },
5398 { Bad_Opcode },
6c30d220 5399 { VEX_W_TABLE (VEX_W_0FEA_P_2) },
c0f3af97
L
5400 },
5401
592a252b 5402 /* PREFIX_VEX_0FEB */
c0f3af97 5403 {
592d1631
L
5404 { Bad_Opcode },
5405 { Bad_Opcode },
6c30d220 5406 { VEX_W_TABLE (VEX_W_0FEB_P_2) },
c0f3af97
L
5407 },
5408
592a252b 5409 /* PREFIX_VEX_0FEC */
c0f3af97 5410 {
592d1631
L
5411 { Bad_Opcode },
5412 { Bad_Opcode },
6c30d220 5413 { VEX_W_TABLE (VEX_W_0FEC_P_2) },
c0f3af97
L
5414 },
5415
592a252b 5416 /* PREFIX_VEX_0FED */
c0f3af97 5417 {
592d1631
L
5418 { Bad_Opcode },
5419 { Bad_Opcode },
6c30d220 5420 { VEX_W_TABLE (VEX_W_0FED_P_2) },
c0f3af97
L
5421 },
5422
592a252b 5423 /* PREFIX_VEX_0FEE */
c0f3af97 5424 {
592d1631
L
5425 { Bad_Opcode },
5426 { Bad_Opcode },
6c30d220 5427 { VEX_W_TABLE (VEX_W_0FEE_P_2) },
c0f3af97
L
5428 },
5429
592a252b 5430 /* PREFIX_VEX_0FEF */
c0f3af97 5431 {
592d1631
L
5432 { Bad_Opcode },
5433 { Bad_Opcode },
6c30d220 5434 { VEX_W_TABLE (VEX_W_0FEF_P_2) },
c0f3af97
L
5435 },
5436
592a252b 5437 /* PREFIX_VEX_0FF0 */
c0f3af97 5438 {
592d1631
L
5439 { Bad_Opcode },
5440 { Bad_Opcode },
5441 { Bad_Opcode },
592a252b 5442 { MOD_TABLE (MOD_VEX_0FF0_PREFIX_3) },
c0f3af97
L
5443 },
5444
592a252b 5445 /* PREFIX_VEX_0FF1 */
c0f3af97 5446 {
592d1631
L
5447 { Bad_Opcode },
5448 { Bad_Opcode },
6c30d220 5449 { VEX_W_TABLE (VEX_W_0FF1_P_2) },
c0f3af97
L
5450 },
5451
592a252b 5452 /* PREFIX_VEX_0FF2 */
c0f3af97 5453 {
592d1631
L
5454 { Bad_Opcode },
5455 { Bad_Opcode },
6c30d220 5456 { VEX_W_TABLE (VEX_W_0FF2_P_2) },
c0f3af97
L
5457 },
5458
592a252b 5459 /* PREFIX_VEX_0FF3 */
c0f3af97 5460 {
592d1631
L
5461 { Bad_Opcode },
5462 { Bad_Opcode },
6c30d220 5463 { VEX_W_TABLE (VEX_W_0FF3_P_2) },
c0f3af97
L
5464 },
5465
592a252b 5466 /* PREFIX_VEX_0FF4 */
c0f3af97 5467 {
592d1631
L
5468 { Bad_Opcode },
5469 { Bad_Opcode },
6c30d220 5470 { VEX_W_TABLE (VEX_W_0FF4_P_2) },
c0f3af97
L
5471 },
5472
592a252b 5473 /* PREFIX_VEX_0FF5 */
c0f3af97 5474 {
592d1631
L
5475 { Bad_Opcode },
5476 { Bad_Opcode },
6c30d220 5477 { VEX_W_TABLE (VEX_W_0FF5_P_2) },
c0f3af97
L
5478 },
5479
592a252b 5480 /* PREFIX_VEX_0FF6 */
c0f3af97 5481 {
592d1631
L
5482 { Bad_Opcode },
5483 { Bad_Opcode },
6c30d220 5484 { VEX_W_TABLE (VEX_W_0FF6_P_2) },
c0f3af97
L
5485 },
5486
592a252b 5487 /* PREFIX_VEX_0FF7 */
c0f3af97 5488 {
592d1631
L
5489 { Bad_Opcode },
5490 { Bad_Opcode },
592a252b 5491 { VEX_LEN_TABLE (VEX_LEN_0FF7_P_2) },
c0f3af97
L
5492 },
5493
592a252b 5494 /* PREFIX_VEX_0FF8 */
c0f3af97 5495 {
592d1631
L
5496 { Bad_Opcode },
5497 { Bad_Opcode },
6c30d220 5498 { VEX_W_TABLE (VEX_W_0FF8_P_2) },
c0f3af97
L
5499 },
5500
592a252b 5501 /* PREFIX_VEX_0FF9 */
c0f3af97 5502 {
592d1631
L
5503 { Bad_Opcode },
5504 { Bad_Opcode },
6c30d220 5505 { VEX_W_TABLE (VEX_W_0FF9_P_2) },
c0f3af97
L
5506 },
5507
592a252b 5508 /* PREFIX_VEX_0FFA */
c0f3af97 5509 {
592d1631
L
5510 { Bad_Opcode },
5511 { Bad_Opcode },
6c30d220 5512 { VEX_W_TABLE (VEX_W_0FFA_P_2) },
c0f3af97
L
5513 },
5514
592a252b 5515 /* PREFIX_VEX_0FFB */
c0f3af97 5516 {
592d1631
L
5517 { Bad_Opcode },
5518 { Bad_Opcode },
6c30d220 5519 { VEX_W_TABLE (VEX_W_0FFB_P_2) },
c0f3af97
L
5520 },
5521
592a252b 5522 /* PREFIX_VEX_0FFC */
c0f3af97 5523 {
592d1631
L
5524 { Bad_Opcode },
5525 { Bad_Opcode },
6c30d220 5526 { VEX_W_TABLE (VEX_W_0FFC_P_2) },
c0f3af97
L
5527 },
5528
592a252b 5529 /* PREFIX_VEX_0FFD */
c0f3af97 5530 {
592d1631
L
5531 { Bad_Opcode },
5532 { Bad_Opcode },
6c30d220 5533 { VEX_W_TABLE (VEX_W_0FFD_P_2) },
c0f3af97
L
5534 },
5535
592a252b 5536 /* PREFIX_VEX_0FFE */
c0f3af97 5537 {
592d1631
L
5538 { Bad_Opcode },
5539 { Bad_Opcode },
6c30d220 5540 { VEX_W_TABLE (VEX_W_0FFE_P_2) },
c0f3af97
L
5541 },
5542
592a252b 5543 /* PREFIX_VEX_0F3800 */
c0f3af97 5544 {
592d1631
L
5545 { Bad_Opcode },
5546 { Bad_Opcode },
6c30d220 5547 { VEX_W_TABLE (VEX_W_0F3800_P_2) },
c0f3af97
L
5548 },
5549
592a252b 5550 /* PREFIX_VEX_0F3801 */
c0f3af97 5551 {
592d1631
L
5552 { Bad_Opcode },
5553 { Bad_Opcode },
6c30d220 5554 { VEX_W_TABLE (VEX_W_0F3801_P_2) },
c0f3af97
L
5555 },
5556
592a252b 5557 /* PREFIX_VEX_0F3802 */
c0f3af97 5558 {
592d1631
L
5559 { Bad_Opcode },
5560 { Bad_Opcode },
6c30d220 5561 { VEX_W_TABLE (VEX_W_0F3802_P_2) },
c0f3af97
L
5562 },
5563
592a252b 5564 /* PREFIX_VEX_0F3803 */
c0f3af97 5565 {
592d1631
L
5566 { Bad_Opcode },
5567 { Bad_Opcode },
6c30d220 5568 { VEX_W_TABLE (VEX_W_0F3803_P_2) },
c0f3af97
L
5569 },
5570
592a252b 5571 /* PREFIX_VEX_0F3804 */
c0f3af97 5572 {
592d1631
L
5573 { Bad_Opcode },
5574 { Bad_Opcode },
6c30d220 5575 { VEX_W_TABLE (VEX_W_0F3804_P_2) },
c0f3af97
L
5576 },
5577
592a252b 5578 /* PREFIX_VEX_0F3805 */
c0f3af97 5579 {
592d1631
L
5580 { Bad_Opcode },
5581 { Bad_Opcode },
6c30d220 5582 { VEX_W_TABLE (VEX_W_0F3805_P_2) },
c0f3af97
L
5583 },
5584
592a252b 5585 /* PREFIX_VEX_0F3806 */
c0f3af97 5586 {
592d1631
L
5587 { Bad_Opcode },
5588 { Bad_Opcode },
6c30d220 5589 { VEX_W_TABLE (VEX_W_0F3806_P_2) },
c0f3af97
L
5590 },
5591
592a252b 5592 /* PREFIX_VEX_0F3807 */
c0f3af97 5593 {
592d1631
L
5594 { Bad_Opcode },
5595 { Bad_Opcode },
6c30d220 5596 { VEX_W_TABLE (VEX_W_0F3807_P_2) },
c0f3af97
L
5597 },
5598
592a252b 5599 /* PREFIX_VEX_0F3808 */
c0f3af97 5600 {
592d1631
L
5601 { Bad_Opcode },
5602 { Bad_Opcode },
6c30d220 5603 { VEX_W_TABLE (VEX_W_0F3808_P_2) },
c0f3af97
L
5604 },
5605
592a252b 5606 /* PREFIX_VEX_0F3809 */
c0f3af97 5607 {
592d1631
L
5608 { Bad_Opcode },
5609 { Bad_Opcode },
6c30d220 5610 { VEX_W_TABLE (VEX_W_0F3809_P_2) },
c0f3af97
L
5611 },
5612
592a252b 5613 /* PREFIX_VEX_0F380A */
c0f3af97 5614 {
592d1631
L
5615 { Bad_Opcode },
5616 { Bad_Opcode },
6c30d220 5617 { VEX_W_TABLE (VEX_W_0F380A_P_2) },
c0f3af97
L
5618 },
5619
592a252b 5620 /* PREFIX_VEX_0F380B */
c0f3af97 5621 {
592d1631
L
5622 { Bad_Opcode },
5623 { Bad_Opcode },
6c30d220 5624 { VEX_W_TABLE (VEX_W_0F380B_P_2) },
c0f3af97
L
5625 },
5626
592a252b 5627 /* PREFIX_VEX_0F380C */
c0f3af97 5628 {
592d1631
L
5629 { Bad_Opcode },
5630 { Bad_Opcode },
592a252b 5631 { VEX_W_TABLE (VEX_W_0F380C_P_2) },
c0f3af97
L
5632 },
5633
592a252b 5634 /* PREFIX_VEX_0F380D */
c0f3af97 5635 {
592d1631
L
5636 { Bad_Opcode },
5637 { Bad_Opcode },
592a252b 5638 { VEX_W_TABLE (VEX_W_0F380D_P_2) },
c0f3af97
L
5639 },
5640
592a252b 5641 /* PREFIX_VEX_0F380E */
c0f3af97 5642 {
592d1631
L
5643 { Bad_Opcode },
5644 { Bad_Opcode },
592a252b 5645 { VEX_W_TABLE (VEX_W_0F380E_P_2) },
c0f3af97
L
5646 },
5647
592a252b 5648 /* PREFIX_VEX_0F380F */
c0f3af97 5649 {
592d1631
L
5650 { Bad_Opcode },
5651 { Bad_Opcode },
592a252b 5652 { VEX_W_TABLE (VEX_W_0F380F_P_2) },
c0f3af97
L
5653 },
5654
592a252b 5655 /* PREFIX_VEX_0F3813 */
c7b8aa3a
L
5656 {
5657 { Bad_Opcode },
5658 { Bad_Opcode },
bf890a93 5659 { "vcvtph2ps", { XM, EXxmmq }, 0 },
c7b8aa3a
L
5660 },
5661
6c30d220
L
5662 /* PREFIX_VEX_0F3816 */
5663 {
5664 { Bad_Opcode },
5665 { Bad_Opcode },
5666 { VEX_LEN_TABLE (VEX_LEN_0F3816_P_2) },
5667 },
5668
592a252b 5669 /* PREFIX_VEX_0F3817 */
c0f3af97 5670 {
592d1631
L
5671 { Bad_Opcode },
5672 { Bad_Opcode },
592a252b 5673 { VEX_W_TABLE (VEX_W_0F3817_P_2) },
c0f3af97
L
5674 },
5675
592a252b 5676 /* PREFIX_VEX_0F3818 */
c0f3af97 5677 {
592d1631
L
5678 { Bad_Opcode },
5679 { Bad_Opcode },
6c30d220 5680 { VEX_W_TABLE (VEX_W_0F3818_P_2) },
c0f3af97
L
5681 },
5682
592a252b 5683 /* PREFIX_VEX_0F3819 */
c0f3af97 5684 {
592d1631
L
5685 { Bad_Opcode },
5686 { Bad_Opcode },
6c30d220 5687 { VEX_LEN_TABLE (VEX_LEN_0F3819_P_2) },
c0f3af97
L
5688 },
5689
592a252b 5690 /* PREFIX_VEX_0F381A */
c0f3af97 5691 {
592d1631
L
5692 { Bad_Opcode },
5693 { Bad_Opcode },
592a252b 5694 { MOD_TABLE (MOD_VEX_0F381A_PREFIX_2) },
c0f3af97
L
5695 },
5696
592a252b 5697 /* PREFIX_VEX_0F381C */
c0f3af97 5698 {
592d1631
L
5699 { Bad_Opcode },
5700 { Bad_Opcode },
6c30d220 5701 { VEX_W_TABLE (VEX_W_0F381C_P_2) },
c0f3af97
L
5702 },
5703
592a252b 5704 /* PREFIX_VEX_0F381D */
c0f3af97 5705 {
592d1631
L
5706 { Bad_Opcode },
5707 { Bad_Opcode },
6c30d220 5708 { VEX_W_TABLE (VEX_W_0F381D_P_2) },
c0f3af97
L
5709 },
5710
592a252b 5711 /* PREFIX_VEX_0F381E */
c0f3af97 5712 {
592d1631
L
5713 { Bad_Opcode },
5714 { Bad_Opcode },
6c30d220 5715 { VEX_W_TABLE (VEX_W_0F381E_P_2) },
c0f3af97
L
5716 },
5717
592a252b 5718 /* PREFIX_VEX_0F3820 */
c0f3af97 5719 {
592d1631
L
5720 { Bad_Opcode },
5721 { Bad_Opcode },
6c30d220 5722 { VEX_W_TABLE (VEX_W_0F3820_P_2) },
c0f3af97
L
5723 },
5724
592a252b 5725 /* PREFIX_VEX_0F3821 */
c0f3af97 5726 {
592d1631
L
5727 { Bad_Opcode },
5728 { Bad_Opcode },
6c30d220 5729 { VEX_W_TABLE (VEX_W_0F3821_P_2) },
c0f3af97
L
5730 },
5731
592a252b 5732 /* PREFIX_VEX_0F3822 */
c0f3af97 5733 {
592d1631
L
5734 { Bad_Opcode },
5735 { Bad_Opcode },
6c30d220 5736 { VEX_W_TABLE (VEX_W_0F3822_P_2) },
c0f3af97
L
5737 },
5738
592a252b 5739 /* PREFIX_VEX_0F3823 */
c0f3af97 5740 {
592d1631
L
5741 { Bad_Opcode },
5742 { Bad_Opcode },
6c30d220 5743 { VEX_W_TABLE (VEX_W_0F3823_P_2) },
c0f3af97
L
5744 },
5745
592a252b 5746 /* PREFIX_VEX_0F3824 */
c0f3af97 5747 {
592d1631
L
5748 { Bad_Opcode },
5749 { Bad_Opcode },
6c30d220 5750 { VEX_W_TABLE (VEX_W_0F3824_P_2) },
c0f3af97
L
5751 },
5752
592a252b 5753 /* PREFIX_VEX_0F3825 */
c0f3af97 5754 {
592d1631
L
5755 { Bad_Opcode },
5756 { Bad_Opcode },
6c30d220 5757 { VEX_W_TABLE (VEX_W_0F3825_P_2) },
c0f3af97
L
5758 },
5759
592a252b 5760 /* PREFIX_VEX_0F3828 */
c0f3af97 5761 {
592d1631
L
5762 { Bad_Opcode },
5763 { Bad_Opcode },
6c30d220 5764 { VEX_W_TABLE (VEX_W_0F3828_P_2) },
c0f3af97
L
5765 },
5766
592a252b 5767 /* PREFIX_VEX_0F3829 */
c0f3af97 5768 {
592d1631
L
5769 { Bad_Opcode },
5770 { Bad_Opcode },
6c30d220 5771 { VEX_W_TABLE (VEX_W_0F3829_P_2) },
c0f3af97
L
5772 },
5773
592a252b 5774 /* PREFIX_VEX_0F382A */
c0f3af97 5775 {
592d1631
L
5776 { Bad_Opcode },
5777 { Bad_Opcode },
592a252b 5778 { MOD_TABLE (MOD_VEX_0F382A_PREFIX_2) },
c0f3af97
L
5779 },
5780
592a252b 5781 /* PREFIX_VEX_0F382B */
c0f3af97 5782 {
592d1631
L
5783 { Bad_Opcode },
5784 { Bad_Opcode },
6c30d220 5785 { VEX_W_TABLE (VEX_W_0F382B_P_2) },
c0f3af97
L
5786 },
5787
592a252b 5788 /* PREFIX_VEX_0F382C */
c0f3af97 5789 {
592d1631
L
5790 { Bad_Opcode },
5791 { Bad_Opcode },
592a252b 5792 { MOD_TABLE (MOD_VEX_0F382C_PREFIX_2) },
c0f3af97
L
5793 },
5794
592a252b 5795 /* PREFIX_VEX_0F382D */
c0f3af97 5796 {
592d1631
L
5797 { Bad_Opcode },
5798 { Bad_Opcode },
592a252b 5799 { MOD_TABLE (MOD_VEX_0F382D_PREFIX_2) },
c0f3af97
L
5800 },
5801
592a252b 5802 /* PREFIX_VEX_0F382E */
c0f3af97 5803 {
592d1631
L
5804 { Bad_Opcode },
5805 { Bad_Opcode },
592a252b 5806 { MOD_TABLE (MOD_VEX_0F382E_PREFIX_2) },
c0f3af97
L
5807 },
5808
592a252b 5809 /* PREFIX_VEX_0F382F */
c0f3af97 5810 {
592d1631
L
5811 { Bad_Opcode },
5812 { Bad_Opcode },
592a252b 5813 { MOD_TABLE (MOD_VEX_0F382F_PREFIX_2) },
c0f3af97
L
5814 },
5815
592a252b 5816 /* PREFIX_VEX_0F3830 */
c0f3af97 5817 {
592d1631
L
5818 { Bad_Opcode },
5819 { Bad_Opcode },
6c30d220 5820 { VEX_W_TABLE (VEX_W_0F3830_P_2) },
c0f3af97
L
5821 },
5822
592a252b 5823 /* PREFIX_VEX_0F3831 */
c0f3af97 5824 {
592d1631
L
5825 { Bad_Opcode },
5826 { Bad_Opcode },
6c30d220 5827 { VEX_W_TABLE (VEX_W_0F3831_P_2) },
c0f3af97
L
5828 },
5829
592a252b 5830 /* PREFIX_VEX_0F3832 */
c0f3af97 5831 {
592d1631
L
5832 { Bad_Opcode },
5833 { Bad_Opcode },
6c30d220 5834 { VEX_W_TABLE (VEX_W_0F3832_P_2) },
c0f3af97
L
5835 },
5836
592a252b 5837 /* PREFIX_VEX_0F3833 */
c0f3af97 5838 {
592d1631
L
5839 { Bad_Opcode },
5840 { Bad_Opcode },
6c30d220 5841 { VEX_W_TABLE (VEX_W_0F3833_P_2) },
c0f3af97
L
5842 },
5843
592a252b 5844 /* PREFIX_VEX_0F3834 */
c0f3af97 5845 {
592d1631
L
5846 { Bad_Opcode },
5847 { Bad_Opcode },
6c30d220 5848 { VEX_W_TABLE (VEX_W_0F3834_P_2) },
c0f3af97
L
5849 },
5850
592a252b 5851 /* PREFIX_VEX_0F3835 */
c0f3af97 5852 {
592d1631
L
5853 { Bad_Opcode },
5854 { Bad_Opcode },
6c30d220
L
5855 { VEX_W_TABLE (VEX_W_0F3835_P_2) },
5856 },
5857
5858 /* PREFIX_VEX_0F3836 */
5859 {
5860 { Bad_Opcode },
5861 { Bad_Opcode },
5862 { VEX_LEN_TABLE (VEX_LEN_0F3836_P_2) },
c0f3af97
L
5863 },
5864
592a252b 5865 /* PREFIX_VEX_0F3837 */
c0f3af97 5866 {
592d1631
L
5867 { Bad_Opcode },
5868 { Bad_Opcode },
6c30d220 5869 { VEX_W_TABLE (VEX_W_0F3837_P_2) },
c0f3af97
L
5870 },
5871
592a252b 5872 /* PREFIX_VEX_0F3838 */
c0f3af97 5873 {
592d1631
L
5874 { Bad_Opcode },
5875 { Bad_Opcode },
6c30d220 5876 { VEX_W_TABLE (VEX_W_0F3838_P_2) },
c0f3af97
L
5877 },
5878
592a252b 5879 /* PREFIX_VEX_0F3839 */
c0f3af97 5880 {
592d1631
L
5881 { Bad_Opcode },
5882 { Bad_Opcode },
6c30d220 5883 { VEX_W_TABLE (VEX_W_0F3839_P_2) },
c0f3af97
L
5884 },
5885
592a252b 5886 /* PREFIX_VEX_0F383A */
c0f3af97 5887 {
592d1631
L
5888 { Bad_Opcode },
5889 { Bad_Opcode },
6c30d220 5890 { VEX_W_TABLE (VEX_W_0F383A_P_2) },
c0f3af97
L
5891 },
5892
592a252b 5893 /* PREFIX_VEX_0F383B */
c0f3af97 5894 {
592d1631
L
5895 { Bad_Opcode },
5896 { Bad_Opcode },
6c30d220 5897 { VEX_W_TABLE (VEX_W_0F383B_P_2) },
c0f3af97
L
5898 },
5899
592a252b 5900 /* PREFIX_VEX_0F383C */
c0f3af97 5901 {
592d1631
L
5902 { Bad_Opcode },
5903 { Bad_Opcode },
6c30d220 5904 { VEX_W_TABLE (VEX_W_0F383C_P_2) },
c0f3af97
L
5905 },
5906
592a252b 5907 /* PREFIX_VEX_0F383D */
c0f3af97 5908 {
592d1631
L
5909 { Bad_Opcode },
5910 { Bad_Opcode },
6c30d220 5911 { VEX_W_TABLE (VEX_W_0F383D_P_2) },
c0f3af97
L
5912 },
5913
592a252b 5914 /* PREFIX_VEX_0F383E */
c0f3af97 5915 {
592d1631
L
5916 { Bad_Opcode },
5917 { Bad_Opcode },
6c30d220 5918 { VEX_W_TABLE (VEX_W_0F383E_P_2) },
c0f3af97
L
5919 },
5920
592a252b 5921 /* PREFIX_VEX_0F383F */
c0f3af97 5922 {
592d1631
L
5923 { Bad_Opcode },
5924 { Bad_Opcode },
6c30d220 5925 { VEX_W_TABLE (VEX_W_0F383F_P_2) },
c0f3af97
L
5926 },
5927
592a252b 5928 /* PREFIX_VEX_0F3840 */
c0f3af97 5929 {
592d1631
L
5930 { Bad_Opcode },
5931 { Bad_Opcode },
6c30d220 5932 { VEX_W_TABLE (VEX_W_0F3840_P_2) },
c0f3af97
L
5933 },
5934
592a252b 5935 /* PREFIX_VEX_0F3841 */
c0f3af97 5936 {
592d1631
L
5937 { Bad_Opcode },
5938 { Bad_Opcode },
592a252b 5939 { VEX_LEN_TABLE (VEX_LEN_0F3841_P_2) },
c0f3af97
L
5940 },
5941
6c30d220
L
5942 /* PREFIX_VEX_0F3845 */
5943 {
5944 { Bad_Opcode },
5945 { Bad_Opcode },
bf890a93 5946 { "vpsrlv%LW", { XM, Vex, EXx }, 0 },
6c30d220
L
5947 },
5948
5949 /* PREFIX_VEX_0F3846 */
5950 {
5951 { Bad_Opcode },
5952 { Bad_Opcode },
5953 { VEX_W_TABLE (VEX_W_0F3846_P_2) },
5954 },
5955
5956 /* PREFIX_VEX_0F3847 */
5957 {
5958 { Bad_Opcode },
5959 { Bad_Opcode },
bf890a93 5960 { "vpsllv%LW", { XM, Vex, EXx }, 0 },
6c30d220
L
5961 },
5962
5963 /* PREFIX_VEX_0F3858 */
5964 {
5965 { Bad_Opcode },
5966 { Bad_Opcode },
5967 { VEX_W_TABLE (VEX_W_0F3858_P_2) },
5968 },
5969
5970 /* PREFIX_VEX_0F3859 */
5971 {
5972 { Bad_Opcode },
5973 { Bad_Opcode },
5974 { VEX_W_TABLE (VEX_W_0F3859_P_2) },
5975 },
5976
5977 /* PREFIX_VEX_0F385A */
5978 {
5979 { Bad_Opcode },
5980 { Bad_Opcode },
5981 { MOD_TABLE (MOD_VEX_0F385A_PREFIX_2) },
5982 },
5983
5984 /* PREFIX_VEX_0F3878 */
5985 {
5986 { Bad_Opcode },
5987 { Bad_Opcode },
5988 { VEX_W_TABLE (VEX_W_0F3878_P_2) },
5989 },
5990
5991 /* PREFIX_VEX_0F3879 */
5992 {
5993 { Bad_Opcode },
5994 { Bad_Opcode },
5995 { VEX_W_TABLE (VEX_W_0F3879_P_2) },
5996 },
5997
5998 /* PREFIX_VEX_0F388C */
5999 {
6000 { Bad_Opcode },
6001 { Bad_Opcode },
f7002f42 6002 { MOD_TABLE (MOD_VEX_0F388C_PREFIX_2) },
6c30d220
L
6003 },
6004
6005 /* PREFIX_VEX_0F388E */
6006 {
6007 { Bad_Opcode },
6008 { Bad_Opcode },
f7002f42 6009 { MOD_TABLE (MOD_VEX_0F388E_PREFIX_2) },
6c30d220
L
6010 },
6011
6012 /* PREFIX_VEX_0F3890 */
6013 {
6014 { Bad_Opcode },
6015 { Bad_Opcode },
bf890a93 6016 { "vpgatherd%LW", { XM, MVexVSIBDWpX, Vex }, 0 },
6c30d220
L
6017 },
6018
6019 /* PREFIX_VEX_0F3891 */
6020 {
6021 { Bad_Opcode },
6022 { Bad_Opcode },
bf890a93 6023 { "vpgatherq%LW", { XMGatherQ, MVexVSIBQWpX, VexGatherQ }, 0 },
6c30d220
L
6024 },
6025
6026 /* PREFIX_VEX_0F3892 */
6027 {
6028 { Bad_Opcode },
6029 { Bad_Opcode },
bf890a93 6030 { "vgatherdp%XW", { XM, MVexVSIBDWpX, Vex }, 0 },
6c30d220
L
6031 },
6032
6033 /* PREFIX_VEX_0F3893 */
6034 {
6035 { Bad_Opcode },
6036 { Bad_Opcode },
bf890a93 6037 { "vgatherqp%XW", { XMGatherQ, MVexVSIBQWpX, VexGatherQ }, 0 },
6c30d220
L
6038 },
6039
592a252b 6040 /* PREFIX_VEX_0F3896 */
a5ff0eb2 6041 {
592d1631
L
6042 { Bad_Opcode },
6043 { Bad_Opcode },
bf890a93 6044 { "vfmaddsub132p%XW", { XM, Vex, EXx }, 0 },
a5ff0eb2
L
6045 },
6046
592a252b 6047 /* PREFIX_VEX_0F3897 */
a5ff0eb2 6048 {
592d1631
L
6049 { Bad_Opcode },
6050 { Bad_Opcode },
bf890a93 6051 { "vfmsubadd132p%XW", { XM, Vex, EXx }, 0 },
a5ff0eb2
L
6052 },
6053
592a252b 6054 /* PREFIX_VEX_0F3898 */
a5ff0eb2 6055 {
592d1631
L
6056 { Bad_Opcode },
6057 { Bad_Opcode },
bf890a93 6058 { "vfmadd132p%XW", { XM, Vex, EXx }, 0 },
a5ff0eb2
L
6059 },
6060
592a252b 6061 /* PREFIX_VEX_0F3899 */
a5ff0eb2 6062 {
592d1631
L
6063 { Bad_Opcode },
6064 { Bad_Opcode },
bf890a93 6065 { "vfmadd132s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
a5ff0eb2
L
6066 },
6067
592a252b 6068 /* PREFIX_VEX_0F389A */
a5ff0eb2 6069 {
592d1631
L
6070 { Bad_Opcode },
6071 { Bad_Opcode },
bf890a93 6072 { "vfmsub132p%XW", { XM, Vex, EXx }, 0 },
a5ff0eb2
L
6073 },
6074
592a252b 6075 /* PREFIX_VEX_0F389B */
c0f3af97 6076 {
592d1631
L
6077 { Bad_Opcode },
6078 { Bad_Opcode },
bf890a93 6079 { "vfmsub132s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6080 },
6081
592a252b 6082 /* PREFIX_VEX_0F389C */
c0f3af97 6083 {
592d1631
L
6084 { Bad_Opcode },
6085 { Bad_Opcode },
bf890a93 6086 { "vfnmadd132p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6087 },
6088
592a252b 6089 /* PREFIX_VEX_0F389D */
c0f3af97 6090 {
592d1631
L
6091 { Bad_Opcode },
6092 { Bad_Opcode },
bf890a93 6093 { "vfnmadd132s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6094 },
6095
592a252b 6096 /* PREFIX_VEX_0F389E */
c0f3af97 6097 {
592d1631
L
6098 { Bad_Opcode },
6099 { Bad_Opcode },
bf890a93 6100 { "vfnmsub132p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6101 },
6102
592a252b 6103 /* PREFIX_VEX_0F389F */
c0f3af97 6104 {
592d1631
L
6105 { Bad_Opcode },
6106 { Bad_Opcode },
bf890a93 6107 { "vfnmsub132s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6108 },
6109
592a252b 6110 /* PREFIX_VEX_0F38A6 */
c0f3af97 6111 {
592d1631
L
6112 { Bad_Opcode },
6113 { Bad_Opcode },
bf890a93 6114 { "vfmaddsub213p%XW", { XM, Vex, EXx }, 0 },
592d1631 6115 { Bad_Opcode },
c0f3af97
L
6116 },
6117
592a252b 6118 /* PREFIX_VEX_0F38A7 */
c0f3af97 6119 {
592d1631
L
6120 { Bad_Opcode },
6121 { Bad_Opcode },
bf890a93 6122 { "vfmsubadd213p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6123 },
6124
592a252b 6125 /* PREFIX_VEX_0F38A8 */
c0f3af97 6126 {
592d1631
L
6127 { Bad_Opcode },
6128 { Bad_Opcode },
bf890a93 6129 { "vfmadd213p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6130 },
6131
592a252b 6132 /* PREFIX_VEX_0F38A9 */
c0f3af97 6133 {
592d1631
L
6134 { Bad_Opcode },
6135 { Bad_Opcode },
bf890a93 6136 { "vfmadd213s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6137 },
6138
592a252b 6139 /* PREFIX_VEX_0F38AA */
c0f3af97 6140 {
592d1631
L
6141 { Bad_Opcode },
6142 { Bad_Opcode },
bf890a93 6143 { "vfmsub213p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6144 },
6145
592a252b 6146 /* PREFIX_VEX_0F38AB */
c0f3af97 6147 {
592d1631
L
6148 { Bad_Opcode },
6149 { Bad_Opcode },
bf890a93 6150 { "vfmsub213s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6151 },
6152
592a252b 6153 /* PREFIX_VEX_0F38AC */
c0f3af97 6154 {
592d1631
L
6155 { Bad_Opcode },
6156 { Bad_Opcode },
bf890a93 6157 { "vfnmadd213p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6158 },
6159
592a252b 6160 /* PREFIX_VEX_0F38AD */
c0f3af97 6161 {
592d1631
L
6162 { Bad_Opcode },
6163 { Bad_Opcode },
bf890a93 6164 { "vfnmadd213s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6165 },
6166
592a252b 6167 /* PREFIX_VEX_0F38AE */
c0f3af97 6168 {
592d1631
L
6169 { Bad_Opcode },
6170 { Bad_Opcode },
bf890a93 6171 { "vfnmsub213p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6172 },
6173
592a252b 6174 /* PREFIX_VEX_0F38AF */
c0f3af97 6175 {
592d1631
L
6176 { Bad_Opcode },
6177 { Bad_Opcode },
bf890a93 6178 { "vfnmsub213s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6179 },
6180
592a252b 6181 /* PREFIX_VEX_0F38B6 */
c0f3af97 6182 {
592d1631
L
6183 { Bad_Opcode },
6184 { Bad_Opcode },
bf890a93 6185 { "vfmaddsub231p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6186 },
6187
592a252b 6188 /* PREFIX_VEX_0F38B7 */
c0f3af97 6189 {
592d1631
L
6190 { Bad_Opcode },
6191 { Bad_Opcode },
bf890a93 6192 { "vfmsubadd231p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6193 },
6194
592a252b 6195 /* PREFIX_VEX_0F38B8 */
c0f3af97 6196 {
592d1631
L
6197 { Bad_Opcode },
6198 { Bad_Opcode },
bf890a93 6199 { "vfmadd231p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6200 },
6201
592a252b 6202 /* PREFIX_VEX_0F38B9 */
c0f3af97 6203 {
592d1631
L
6204 { Bad_Opcode },
6205 { Bad_Opcode },
bf890a93 6206 { "vfmadd231s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6207 },
6208
592a252b 6209 /* PREFIX_VEX_0F38BA */
c0f3af97 6210 {
592d1631
L
6211 { Bad_Opcode },
6212 { Bad_Opcode },
bf890a93 6213 { "vfmsub231p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6214 },
6215
592a252b 6216 /* PREFIX_VEX_0F38BB */
c0f3af97 6217 {
592d1631
L
6218 { Bad_Opcode },
6219 { Bad_Opcode },
bf890a93 6220 { "vfmsub231s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6221 },
6222
592a252b 6223 /* PREFIX_VEX_0F38BC */
c0f3af97 6224 {
592d1631
L
6225 { Bad_Opcode },
6226 { Bad_Opcode },
bf890a93 6227 { "vfnmadd231p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6228 },
6229
592a252b 6230 /* PREFIX_VEX_0F38BD */
c0f3af97 6231 {
592d1631
L
6232 { Bad_Opcode },
6233 { Bad_Opcode },
bf890a93 6234 { "vfnmadd231s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6235 },
6236
592a252b 6237 /* PREFIX_VEX_0F38BE */
c0f3af97 6238 {
592d1631
L
6239 { Bad_Opcode },
6240 { Bad_Opcode },
bf890a93 6241 { "vfnmsub231p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6242 },
6243
592a252b 6244 /* PREFIX_VEX_0F38BF */
c0f3af97 6245 {
592d1631
L
6246 { Bad_Opcode },
6247 { Bad_Opcode },
bf890a93 6248 { "vfnmsub231s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6249 },
6250
592a252b 6251 /* PREFIX_VEX_0F38DB */
c0f3af97 6252 {
592d1631
L
6253 { Bad_Opcode },
6254 { Bad_Opcode },
592a252b 6255 { VEX_LEN_TABLE (VEX_LEN_0F38DB_P_2) },
c0f3af97
L
6256 },
6257
592a252b 6258 /* PREFIX_VEX_0F38DC */
c0f3af97 6259 {
592d1631
L
6260 { Bad_Opcode },
6261 { Bad_Opcode },
592a252b 6262 { VEX_LEN_TABLE (VEX_LEN_0F38DC_P_2) },
c0f3af97
L
6263 },
6264
592a252b 6265 /* PREFIX_VEX_0F38DD */
c0f3af97 6266 {
592d1631
L
6267 { Bad_Opcode },
6268 { Bad_Opcode },
592a252b 6269 { VEX_LEN_TABLE (VEX_LEN_0F38DD_P_2) },
c0f3af97
L
6270 },
6271
592a252b 6272 /* PREFIX_VEX_0F38DE */
c0f3af97 6273 {
592d1631
L
6274 { Bad_Opcode },
6275 { Bad_Opcode },
592a252b 6276 { VEX_LEN_TABLE (VEX_LEN_0F38DE_P_2) },
c0f3af97
L
6277 },
6278
592a252b 6279 /* PREFIX_VEX_0F38DF */
c0f3af97 6280 {
592d1631
L
6281 { Bad_Opcode },
6282 { Bad_Opcode },
592a252b 6283 { VEX_LEN_TABLE (VEX_LEN_0F38DF_P_2) },
c0f3af97
L
6284 },
6285
f12dc422
L
6286 /* PREFIX_VEX_0F38F2 */
6287 {
6288 { VEX_LEN_TABLE (VEX_LEN_0F38F2_P_0) },
6289 },
6290
6291 /* PREFIX_VEX_0F38F3_REG_1 */
6292 {
6293 { VEX_LEN_TABLE (VEX_LEN_0F38F3_R_1_P_0) },
6294 },
6295
6296 /* PREFIX_VEX_0F38F3_REG_2 */
6297 {
6298 { VEX_LEN_TABLE (VEX_LEN_0F38F3_R_2_P_0) },
6299 },
6300
6301 /* PREFIX_VEX_0F38F3_REG_3 */
6302 {
6303 { VEX_LEN_TABLE (VEX_LEN_0F38F3_R_3_P_0) },
6304 },
6305
6c30d220
L
6306 /* PREFIX_VEX_0F38F5 */
6307 {
6308 { VEX_LEN_TABLE (VEX_LEN_0F38F5_P_0) },
6309 { VEX_LEN_TABLE (VEX_LEN_0F38F5_P_1) },
6310 { Bad_Opcode },
6311 { VEX_LEN_TABLE (VEX_LEN_0F38F5_P_3) },
6312 },
6313
6314 /* PREFIX_VEX_0F38F6 */
6315 {
6316 { Bad_Opcode },
6317 { Bad_Opcode },
6318 { Bad_Opcode },
6319 { VEX_LEN_TABLE (VEX_LEN_0F38F6_P_3) },
6320 },
6321
f12dc422
L
6322 /* PREFIX_VEX_0F38F7 */
6323 {
6324 { VEX_LEN_TABLE (VEX_LEN_0F38F7_P_0) },
6c30d220
L
6325 { VEX_LEN_TABLE (VEX_LEN_0F38F7_P_1) },
6326 { VEX_LEN_TABLE (VEX_LEN_0F38F7_P_2) },
6327 { VEX_LEN_TABLE (VEX_LEN_0F38F7_P_3) },
6328 },
6329
6330 /* PREFIX_VEX_0F3A00 */
6331 {
6332 { Bad_Opcode },
6333 { Bad_Opcode },
6334 { VEX_LEN_TABLE (VEX_LEN_0F3A00_P_2) },
6335 },
6336
6337 /* PREFIX_VEX_0F3A01 */
6338 {
6339 { Bad_Opcode },
6340 { Bad_Opcode },
6341 { VEX_LEN_TABLE (VEX_LEN_0F3A01_P_2) },
6342 },
6343
6344 /* PREFIX_VEX_0F3A02 */
6345 {
6346 { Bad_Opcode },
6347 { Bad_Opcode },
6348 { VEX_W_TABLE (VEX_W_0F3A02_P_2) },
f12dc422
L
6349 },
6350
592a252b 6351 /* PREFIX_VEX_0F3A04 */
c0f3af97 6352 {
592d1631
L
6353 { Bad_Opcode },
6354 { Bad_Opcode },
592a252b 6355 { VEX_W_TABLE (VEX_W_0F3A04_P_2) },
c0f3af97
L
6356 },
6357
592a252b 6358 /* PREFIX_VEX_0F3A05 */
c0f3af97 6359 {
592d1631
L
6360 { Bad_Opcode },
6361 { Bad_Opcode },
592a252b 6362 { VEX_W_TABLE (VEX_W_0F3A05_P_2) },
c0f3af97
L
6363 },
6364
592a252b 6365 /* PREFIX_VEX_0F3A06 */
c0f3af97 6366 {
592d1631
L
6367 { Bad_Opcode },
6368 { Bad_Opcode },
592a252b 6369 { VEX_LEN_TABLE (VEX_LEN_0F3A06_P_2) },
c0f3af97
L
6370 },
6371
592a252b 6372 /* PREFIX_VEX_0F3A08 */
c0f3af97 6373 {
592d1631
L
6374 { Bad_Opcode },
6375 { Bad_Opcode },
592a252b 6376 { VEX_W_TABLE (VEX_W_0F3A08_P_2) },
c0f3af97
L
6377 },
6378
592a252b 6379 /* PREFIX_VEX_0F3A09 */
c0f3af97 6380 {
592d1631
L
6381 { Bad_Opcode },
6382 { Bad_Opcode },
592a252b 6383 { VEX_W_TABLE (VEX_W_0F3A09_P_2) },
c0f3af97
L
6384 },
6385
592a252b 6386 /* PREFIX_VEX_0F3A0A */
c0f3af97 6387 {
592d1631
L
6388 { Bad_Opcode },
6389 { Bad_Opcode },
592a252b 6390 { VEX_LEN_TABLE (VEX_LEN_0F3A0A_P_2) },
0bfee649
L
6391 },
6392
592a252b 6393 /* PREFIX_VEX_0F3A0B */
0bfee649 6394 {
592d1631
L
6395 { Bad_Opcode },
6396 { Bad_Opcode },
592a252b 6397 { VEX_LEN_TABLE (VEX_LEN_0F3A0B_P_2) },
0bfee649
L
6398 },
6399
592a252b 6400 /* PREFIX_VEX_0F3A0C */
0bfee649 6401 {
592d1631
L
6402 { Bad_Opcode },
6403 { Bad_Opcode },
592a252b 6404 { VEX_W_TABLE (VEX_W_0F3A0C_P_2) },
0bfee649
L
6405 },
6406
592a252b 6407 /* PREFIX_VEX_0F3A0D */
0bfee649 6408 {
592d1631
L
6409 { Bad_Opcode },
6410 { Bad_Opcode },
592a252b 6411 { VEX_W_TABLE (VEX_W_0F3A0D_P_2) },
c0f3af97
L
6412 },
6413
592a252b 6414 /* PREFIX_VEX_0F3A0E */
0bfee649 6415 {
592d1631
L
6416 { Bad_Opcode },
6417 { Bad_Opcode },
6c30d220 6418 { VEX_W_TABLE (VEX_W_0F3A0E_P_2) },
0bfee649
L
6419 },
6420
592a252b 6421 /* PREFIX_VEX_0F3A0F */
0bfee649 6422 {
592d1631
L
6423 { Bad_Opcode },
6424 { Bad_Opcode },
6c30d220 6425 { VEX_W_TABLE (VEX_W_0F3A0F_P_2) },
0bfee649
L
6426 },
6427
592a252b 6428 /* PREFIX_VEX_0F3A14 */
0bfee649 6429 {
592d1631
L
6430 { Bad_Opcode },
6431 { Bad_Opcode },
592a252b 6432 { VEX_LEN_TABLE (VEX_LEN_0F3A14_P_2) },
0bfee649
L
6433 },
6434
592a252b 6435 /* PREFIX_VEX_0F3A15 */
0bfee649 6436 {
592d1631
L
6437 { Bad_Opcode },
6438 { Bad_Opcode },
592a252b 6439 { VEX_LEN_TABLE (VEX_LEN_0F3A15_P_2) },
0bfee649
L
6440 },
6441
592a252b 6442 /* PREFIX_VEX_0F3A16 */
c0f3af97 6443 {
592d1631
L
6444 { Bad_Opcode },
6445 { Bad_Opcode },
592a252b 6446 { VEX_LEN_TABLE (VEX_LEN_0F3A16_P_2) },
c0f3af97
L
6447 },
6448
592a252b 6449 /* PREFIX_VEX_0F3A17 */
c0f3af97 6450 {
592d1631
L
6451 { Bad_Opcode },
6452 { Bad_Opcode },
592a252b 6453 { VEX_LEN_TABLE (VEX_LEN_0F3A17_P_2) },
c0f3af97
L
6454 },
6455
592a252b 6456 /* PREFIX_VEX_0F3A18 */
c0f3af97 6457 {
592d1631
L
6458 { Bad_Opcode },
6459 { Bad_Opcode },
592a252b 6460 { VEX_LEN_TABLE (VEX_LEN_0F3A18_P_2) },
c0f3af97
L
6461 },
6462
592a252b 6463 /* PREFIX_VEX_0F3A19 */
c0f3af97 6464 {
592d1631
L
6465 { Bad_Opcode },
6466 { Bad_Opcode },
592a252b 6467 { VEX_LEN_TABLE (VEX_LEN_0F3A19_P_2) },
c0f3af97
L
6468 },
6469
592a252b 6470 /* PREFIX_VEX_0F3A1D */
c7b8aa3a
L
6471 {
6472 { Bad_Opcode },
6473 { Bad_Opcode },
bf890a93 6474 { "vcvtps2ph", { EXxmmq, XM, Ib }, 0 },
c7b8aa3a
L
6475 },
6476
592a252b 6477 /* PREFIX_VEX_0F3A20 */
c0f3af97 6478 {
592d1631
L
6479 { Bad_Opcode },
6480 { Bad_Opcode },
592a252b 6481 { VEX_LEN_TABLE (VEX_LEN_0F3A20_P_2) },
c0f3af97
L
6482 },
6483
592a252b 6484 /* PREFIX_VEX_0F3A21 */
c0f3af97 6485 {
592d1631
L
6486 { Bad_Opcode },
6487 { Bad_Opcode },
592a252b 6488 { VEX_LEN_TABLE (VEX_LEN_0F3A21_P_2) },
c0f3af97
L
6489 },
6490
592a252b 6491 /* PREFIX_VEX_0F3A22 */
0bfee649 6492 {
592d1631
L
6493 { Bad_Opcode },
6494 { Bad_Opcode },
592a252b 6495 { VEX_LEN_TABLE (VEX_LEN_0F3A22_P_2) },
0bfee649
L
6496 },
6497
43234a1e
L
6498 /* PREFIX_VEX_0F3A30 */
6499 {
6500 { Bad_Opcode },
6501 { Bad_Opcode },
6502 { VEX_LEN_TABLE (VEX_LEN_0F3A30_P_2) },
6503 },
6504
1ba585e8
IT
6505 /* PREFIX_VEX_0F3A31 */
6506 {
6507 { Bad_Opcode },
6508 { Bad_Opcode },
6509 { VEX_LEN_TABLE (VEX_LEN_0F3A31_P_2) },
6510 },
6511
43234a1e
L
6512 /* PREFIX_VEX_0F3A32 */
6513 {
6514 { Bad_Opcode },
6515 { Bad_Opcode },
6516 { VEX_LEN_TABLE (VEX_LEN_0F3A32_P_2) },
6517 },
6518
1ba585e8
IT
6519 /* PREFIX_VEX_0F3A33 */
6520 {
6521 { Bad_Opcode },
6522 { Bad_Opcode },
6523 { VEX_LEN_TABLE (VEX_LEN_0F3A33_P_2) },
6524 },
6525
6c30d220
L
6526 /* PREFIX_VEX_0F3A38 */
6527 {
6528 { Bad_Opcode },
6529 { Bad_Opcode },
6530 { VEX_LEN_TABLE (VEX_LEN_0F3A38_P_2) },
6531 },
6532
6533 /* PREFIX_VEX_0F3A39 */
6534 {
6535 { Bad_Opcode },
6536 { Bad_Opcode },
6537 { VEX_LEN_TABLE (VEX_LEN_0F3A39_P_2) },
6538 },
6539
592a252b 6540 /* PREFIX_VEX_0F3A40 */
c0f3af97 6541 {
592d1631
L
6542 { Bad_Opcode },
6543 { Bad_Opcode },
592a252b 6544 { VEX_W_TABLE (VEX_W_0F3A40_P_2) },
c0f3af97
L
6545 },
6546
592a252b 6547 /* PREFIX_VEX_0F3A41 */
c0f3af97 6548 {
592d1631
L
6549 { Bad_Opcode },
6550 { Bad_Opcode },
592a252b 6551 { VEX_LEN_TABLE (VEX_LEN_0F3A41_P_2) },
c0f3af97
L
6552 },
6553
592a252b 6554 /* PREFIX_VEX_0F3A42 */
c0f3af97 6555 {
592d1631
L
6556 { Bad_Opcode },
6557 { Bad_Opcode },
6c30d220 6558 { VEX_W_TABLE (VEX_W_0F3A42_P_2) },
c0f3af97
L
6559 },
6560
592a252b 6561 /* PREFIX_VEX_0F3A44 */
ce2f5b3c 6562 {
592d1631
L
6563 { Bad_Opcode },
6564 { Bad_Opcode },
592a252b 6565 { VEX_LEN_TABLE (VEX_LEN_0F3A44_P_2) },
ce2f5b3c
L
6566 },
6567
6c30d220
L
6568 /* PREFIX_VEX_0F3A46 */
6569 {
6570 { Bad_Opcode },
6571 { Bad_Opcode },
6572 { VEX_LEN_TABLE (VEX_LEN_0F3A46_P_2) },
6573 },
6574
592a252b 6575 /* PREFIX_VEX_0F3A48 */
a683cc34
SP
6576 {
6577 { Bad_Opcode },
6578 { Bad_Opcode },
592a252b 6579 { VEX_W_TABLE (VEX_W_0F3A48_P_2) },
a683cc34
SP
6580 },
6581
592a252b 6582 /* PREFIX_VEX_0F3A49 */
a683cc34
SP
6583 {
6584 { Bad_Opcode },
6585 { Bad_Opcode },
592a252b 6586 { VEX_W_TABLE (VEX_W_0F3A49_P_2) },
a683cc34
SP
6587 },
6588
592a252b 6589 /* PREFIX_VEX_0F3A4A */
c0f3af97 6590 {
592d1631
L
6591 { Bad_Opcode },
6592 { Bad_Opcode },
592a252b 6593 { VEX_W_TABLE (VEX_W_0F3A4A_P_2) },
c0f3af97
L
6594 },
6595
592a252b 6596 /* PREFIX_VEX_0F3A4B */
c0f3af97 6597 {
592d1631
L
6598 { Bad_Opcode },
6599 { Bad_Opcode },
592a252b 6600 { VEX_W_TABLE (VEX_W_0F3A4B_P_2) },
c0f3af97
L
6601 },
6602
592a252b 6603 /* PREFIX_VEX_0F3A4C */
c0f3af97 6604 {
592d1631
L
6605 { Bad_Opcode },
6606 { Bad_Opcode },
6c30d220 6607 { VEX_W_TABLE (VEX_W_0F3A4C_P_2) },
c0f3af97
L
6608 },
6609
592a252b 6610 /* PREFIX_VEX_0F3A5C */
922d8de8 6611 {
592d1631
L
6612 { Bad_Opcode },
6613 { Bad_Opcode },
bf890a93 6614 { "vfmaddsubps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
922d8de8
DR
6615 },
6616
592a252b 6617 /* PREFIX_VEX_0F3A5D */
922d8de8 6618 {
592d1631
L
6619 { Bad_Opcode },
6620 { Bad_Opcode },
bf890a93 6621 { "vfmaddsubpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
922d8de8
DR
6622 },
6623
592a252b 6624 /* PREFIX_VEX_0F3A5E */
922d8de8 6625 {
592d1631
L
6626 { Bad_Opcode },
6627 { Bad_Opcode },
bf890a93 6628 { "vfmsubaddps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
922d8de8
DR
6629 },
6630
592a252b 6631 /* PREFIX_VEX_0F3A5F */
922d8de8 6632 {
592d1631
L
6633 { Bad_Opcode },
6634 { Bad_Opcode },
bf890a93 6635 { "vfmsubaddpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
922d8de8
DR
6636 },
6637
592a252b 6638 /* PREFIX_VEX_0F3A60 */
c0f3af97 6639 {
592d1631
L
6640 { Bad_Opcode },
6641 { Bad_Opcode },
592a252b 6642 { VEX_LEN_TABLE (VEX_LEN_0F3A60_P_2) },
592d1631 6643 { Bad_Opcode },
c0f3af97
L
6644 },
6645
592a252b 6646 /* PREFIX_VEX_0F3A61 */
c0f3af97 6647 {
592d1631
L
6648 { Bad_Opcode },
6649 { Bad_Opcode },
592a252b 6650 { VEX_LEN_TABLE (VEX_LEN_0F3A61_P_2) },
c0f3af97
L
6651 },
6652
592a252b 6653 /* PREFIX_VEX_0F3A62 */
c0f3af97 6654 {
592d1631
L
6655 { Bad_Opcode },
6656 { Bad_Opcode },
592a252b 6657 { VEX_LEN_TABLE (VEX_LEN_0F3A62_P_2) },
c0f3af97
L
6658 },
6659
592a252b 6660 /* PREFIX_VEX_0F3A63 */
c0f3af97 6661 {
592d1631
L
6662 { Bad_Opcode },
6663 { Bad_Opcode },
592a252b 6664 { VEX_LEN_TABLE (VEX_LEN_0F3A63_P_2) },
c0f3af97 6665 },
a5ff0eb2 6666
592a252b 6667 /* PREFIX_VEX_0F3A68 */
922d8de8 6668 {
592d1631
L
6669 { Bad_Opcode },
6670 { Bad_Opcode },
bf890a93 6671 { "vfmaddps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
922d8de8
DR
6672 },
6673
592a252b 6674 /* PREFIX_VEX_0F3A69 */
922d8de8 6675 {
592d1631
L
6676 { Bad_Opcode },
6677 { Bad_Opcode },
bf890a93 6678 { "vfmaddpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
922d8de8
DR
6679 },
6680
592a252b 6681 /* PREFIX_VEX_0F3A6A */
922d8de8 6682 {
592d1631
L
6683 { Bad_Opcode },
6684 { Bad_Opcode },
592a252b 6685 { VEX_LEN_TABLE (VEX_LEN_0F3A6A_P_2) },
922d8de8
DR
6686 },
6687
592a252b 6688 /* PREFIX_VEX_0F3A6B */
922d8de8 6689 {
592d1631
L
6690 { Bad_Opcode },
6691 { Bad_Opcode },
592a252b 6692 { VEX_LEN_TABLE (VEX_LEN_0F3A6B_P_2) },
922d8de8
DR
6693 },
6694
592a252b 6695 /* PREFIX_VEX_0F3A6C */
922d8de8 6696 {
592d1631
L
6697 { Bad_Opcode },
6698 { Bad_Opcode },
bf890a93 6699 { "vfmsubps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
922d8de8
DR
6700 },
6701
592a252b 6702 /* PREFIX_VEX_0F3A6D */
922d8de8 6703 {
592d1631
L
6704 { Bad_Opcode },
6705 { Bad_Opcode },
bf890a93 6706 { "vfmsubpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
922d8de8
DR
6707 },
6708
592a252b 6709 /* PREFIX_VEX_0F3A6E */
922d8de8 6710 {
592d1631
L
6711 { Bad_Opcode },
6712 { Bad_Opcode },
592a252b 6713 { VEX_LEN_TABLE (VEX_LEN_0F3A6E_P_2) },
922d8de8
DR
6714 },
6715
592a252b 6716 /* PREFIX_VEX_0F3A6F */
922d8de8 6717 {
592d1631
L
6718 { Bad_Opcode },
6719 { Bad_Opcode },
592a252b 6720 { VEX_LEN_TABLE (VEX_LEN_0F3A6F_P_2) },
922d8de8
DR
6721 },
6722
592a252b 6723 /* PREFIX_VEX_0F3A78 */
922d8de8 6724 {
592d1631
L
6725 { Bad_Opcode },
6726 { Bad_Opcode },
bf890a93 6727 { "vfnmaddps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
922d8de8
DR
6728 },
6729
592a252b 6730 /* PREFIX_VEX_0F3A79 */
922d8de8 6731 {
592d1631
L
6732 { Bad_Opcode },
6733 { Bad_Opcode },
bf890a93 6734 { "vfnmaddpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
922d8de8
DR
6735 },
6736
592a252b 6737 /* PREFIX_VEX_0F3A7A */
922d8de8 6738 {
592d1631
L
6739 { Bad_Opcode },
6740 { Bad_Opcode },
592a252b 6741 { VEX_LEN_TABLE (VEX_LEN_0F3A7A_P_2) },
922d8de8
DR
6742 },
6743
592a252b 6744 /* PREFIX_VEX_0F3A7B */
922d8de8 6745 {
592d1631
L
6746 { Bad_Opcode },
6747 { Bad_Opcode },
592a252b 6748 { VEX_LEN_TABLE (VEX_LEN_0F3A7B_P_2) },
922d8de8
DR
6749 },
6750
592a252b 6751 /* PREFIX_VEX_0F3A7C */
922d8de8 6752 {
592d1631
L
6753 { Bad_Opcode },
6754 { Bad_Opcode },
bf890a93 6755 { "vfnmsubps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
592d1631 6756 { Bad_Opcode },
922d8de8
DR
6757 },
6758
592a252b 6759 /* PREFIX_VEX_0F3A7D */
922d8de8 6760 {
592d1631
L
6761 { Bad_Opcode },
6762 { Bad_Opcode },
bf890a93 6763 { "vfnmsubpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
922d8de8
DR
6764 },
6765
592a252b 6766 /* PREFIX_VEX_0F3A7E */
922d8de8 6767 {
592d1631
L
6768 { Bad_Opcode },
6769 { Bad_Opcode },
592a252b 6770 { VEX_LEN_TABLE (VEX_LEN_0F3A7E_P_2) },
922d8de8
DR
6771 },
6772
592a252b 6773 /* PREFIX_VEX_0F3A7F */
922d8de8 6774 {
592d1631
L
6775 { Bad_Opcode },
6776 { Bad_Opcode },
592a252b 6777 { VEX_LEN_TABLE (VEX_LEN_0F3A7F_P_2) },
922d8de8
DR
6778 },
6779
592a252b 6780 /* PREFIX_VEX_0F3ADF */
a5ff0eb2 6781 {
592d1631
L
6782 { Bad_Opcode },
6783 { Bad_Opcode },
592a252b 6784 { VEX_LEN_TABLE (VEX_LEN_0F3ADF_P_2) },
a5ff0eb2 6785 },
6c30d220
L
6786
6787 /* PREFIX_VEX_0F3AF0 */
6788 {
6789 { Bad_Opcode },
6790 { Bad_Opcode },
6791 { Bad_Opcode },
6792 { VEX_LEN_TABLE (VEX_LEN_0F3AF0_P_3) },
6793 },
43234a1e
L
6794
6795#define NEED_PREFIX_TABLE
6796#include "i386-dis-evex.h"
6797#undef NEED_PREFIX_TABLE
c0f3af97
L
6798};
6799
6800static const struct dis386 x86_64_table[][2] = {
6801 /* X86_64_06 */
6802 {
bf890a93 6803 { "pushP", { es }, 0 },
c0f3af97
L
6804 },
6805
6806 /* X86_64_07 */
6807 {
bf890a93 6808 { "popP", { es }, 0 },
c0f3af97
L
6809 },
6810
6811 /* X86_64_0D */
6812 {
bf890a93 6813 { "pushP", { cs }, 0 },
c0f3af97
L
6814 },
6815
6816 /* X86_64_16 */
6817 {
bf890a93 6818 { "pushP", { ss }, 0 },
c0f3af97
L
6819 },
6820
6821 /* X86_64_17 */
6822 {
bf890a93 6823 { "popP", { ss }, 0 },
c0f3af97
L
6824 },
6825
6826 /* X86_64_1E */
6827 {
bf890a93 6828 { "pushP", { ds }, 0 },
c0f3af97
L
6829 },
6830
6831 /* X86_64_1F */
6832 {
bf890a93 6833 { "popP", { ds }, 0 },
c0f3af97
L
6834 },
6835
6836 /* X86_64_27 */
6837 {
bf890a93 6838 { "daa", { XX }, 0 },
c0f3af97
L
6839 },
6840
6841 /* X86_64_2F */
6842 {
bf890a93 6843 { "das", { XX }, 0 },
c0f3af97
L
6844 },
6845
6846 /* X86_64_37 */
6847 {
bf890a93 6848 { "aaa", { XX }, 0 },
c0f3af97
L
6849 },
6850
6851 /* X86_64_3F */
6852 {
bf890a93 6853 { "aas", { XX }, 0 },
c0f3af97
L
6854 },
6855
6856 /* X86_64_60 */
6857 {
bf890a93 6858 { "pushaP", { XX }, 0 },
c0f3af97
L
6859 },
6860
6861 /* X86_64_61 */
6862 {
bf890a93 6863 { "popaP", { XX }, 0 },
c0f3af97
L
6864 },
6865
6866 /* X86_64_62 */
6867 {
6868 { MOD_TABLE (MOD_62_32BIT) },
43234a1e 6869 { EVEX_TABLE (EVEX_0F) },
c0f3af97
L
6870 },
6871
6872 /* X86_64_63 */
6873 {
bf890a93
IT
6874 { "arpl", { Ew, Gw }, 0 },
6875 { "movs{lq|xd}", { Gv, Ed }, 0 },
c0f3af97
L
6876 },
6877
6878 /* X86_64_6D */
6879 {
bf890a93
IT
6880 { "ins{R|}", { Yzr, indirDX }, 0 },
6881 { "ins{G|}", { Yzr, indirDX }, 0 },
c0f3af97
L
6882 },
6883
6884 /* X86_64_6F */
6885 {
bf890a93
IT
6886 { "outs{R|}", { indirDXr, Xz }, 0 },
6887 { "outs{G|}", { indirDXr, Xz }, 0 },
c0f3af97
L
6888 },
6889
6890 /* X86_64_9A */
6891 {
bf890a93 6892 { "Jcall{T|}", { Ap }, 0 },
c0f3af97
L
6893 },
6894
6895 /* X86_64_C4 */
6896 {
6897 { MOD_TABLE (MOD_C4_32BIT) },
6898 { VEX_C4_TABLE (VEX_0F) },
6899 },
6900
6901 /* X86_64_C5 */
6902 {
6903 { MOD_TABLE (MOD_C5_32BIT) },
6904 { VEX_C5_TABLE (VEX_0F) },
6905 },
6906
6907 /* X86_64_CE */
6908 {
bf890a93 6909 { "into", { XX }, 0 },
c0f3af97
L
6910 },
6911
6912 /* X86_64_D4 */
6913 {
bf890a93 6914 { "aam", { Ib }, 0 },
c0f3af97
L
6915 },
6916
6917 /* X86_64_D5 */
6918 {
bf890a93 6919 { "aad", { Ib }, 0 },
c0f3af97
L
6920 },
6921
a72d2af2
L
6922 /* X86_64_E8 */
6923 {
6924 { "callP", { Jv, BND }, 0 },
5db04b09 6925 { "call@", { Jv, BND }, 0 }
a72d2af2
L
6926 },
6927
6928 /* X86_64_E9 */
6929 {
6930 { "jmpP", { Jv, BND }, 0 },
5db04b09 6931 { "jmp@", { Jv, BND }, 0 }
a72d2af2
L
6932 },
6933
c0f3af97
L
6934 /* X86_64_EA */
6935 {
bf890a93 6936 { "Jjmp{T|}", { Ap }, 0 },
c0f3af97
L
6937 },
6938
6939 /* X86_64_0F01_REG_0 */
6940 {
bf890a93
IT
6941 { "sgdt{Q|IQ}", { M }, 0 },
6942 { "sgdt", { M }, 0 },
c0f3af97
L
6943 },
6944
6945 /* X86_64_0F01_REG_1 */
6946 {
bf890a93
IT
6947 { "sidt{Q|IQ}", { M }, 0 },
6948 { "sidt", { M }, 0 },
c0f3af97
L
6949 },
6950
6951 /* X86_64_0F01_REG_2 */
6952 {
bf890a93
IT
6953 { "lgdt{Q|Q}", { M }, 0 },
6954 { "lgdt", { M }, 0 },
c0f3af97
L
6955 },
6956
6957 /* X86_64_0F01_REG_3 */
6958 {
bf890a93
IT
6959 { "lidt{Q|Q}", { M }, 0 },
6960 { "lidt", { M }, 0 },
c0f3af97
L
6961 },
6962};
6963
6964static const struct dis386 three_byte_table[][256] = {
c1e679ec
DR
6965
6966 /* THREE_BYTE_0F38 */
c0f3af97
L
6967 {
6968 /* 00 */
507bd325
L
6969 { "pshufb", { MX, EM }, PREFIX_OPCODE },
6970 { "phaddw", { MX, EM }, PREFIX_OPCODE },
6971 { "phaddd", { MX, EM }, PREFIX_OPCODE },
6972 { "phaddsw", { MX, EM }, PREFIX_OPCODE },
6973 { "pmaddubsw", { MX, EM }, PREFIX_OPCODE },
6974 { "phsubw", { MX, EM }, PREFIX_OPCODE },
6975 { "phsubd", { MX, EM }, PREFIX_OPCODE },
6976 { "phsubsw", { MX, EM }, PREFIX_OPCODE },
c0f3af97 6977 /* 08 */
507bd325
L
6978 { "psignb", { MX, EM }, PREFIX_OPCODE },
6979 { "psignw", { MX, EM }, PREFIX_OPCODE },
6980 { "psignd", { MX, EM }, PREFIX_OPCODE },
6981 { "pmulhrsw", { MX, EM }, PREFIX_OPCODE },
592d1631
L
6982 { Bad_Opcode },
6983 { Bad_Opcode },
6984 { Bad_Opcode },
6985 { Bad_Opcode },
f88c9eb0
SP
6986 /* 10 */
6987 { PREFIX_TABLE (PREFIX_0F3810) },
592d1631
L
6988 { Bad_Opcode },
6989 { Bad_Opcode },
6990 { Bad_Opcode },
f88c9eb0
SP
6991 { PREFIX_TABLE (PREFIX_0F3814) },
6992 { PREFIX_TABLE (PREFIX_0F3815) },
592d1631 6993 { Bad_Opcode },
f88c9eb0
SP
6994 { PREFIX_TABLE (PREFIX_0F3817) },
6995 /* 18 */
592d1631
L
6996 { Bad_Opcode },
6997 { Bad_Opcode },
6998 { Bad_Opcode },
6999 { Bad_Opcode },
507bd325
L
7000 { "pabsb", { MX, EM }, PREFIX_OPCODE },
7001 { "pabsw", { MX, EM }, PREFIX_OPCODE },
7002 { "pabsd", { MX, EM }, PREFIX_OPCODE },
592d1631 7003 { Bad_Opcode },
f88c9eb0
SP
7004 /* 20 */
7005 { PREFIX_TABLE (PREFIX_0F3820) },
7006 { PREFIX_TABLE (PREFIX_0F3821) },
7007 { PREFIX_TABLE (PREFIX_0F3822) },
7008 { PREFIX_TABLE (PREFIX_0F3823) },
7009 { PREFIX_TABLE (PREFIX_0F3824) },
7010 { PREFIX_TABLE (PREFIX_0F3825) },
592d1631
L
7011 { Bad_Opcode },
7012 { Bad_Opcode },
f88c9eb0
SP
7013 /* 28 */
7014 { PREFIX_TABLE (PREFIX_0F3828) },
7015 { PREFIX_TABLE (PREFIX_0F3829) },
7016 { PREFIX_TABLE (PREFIX_0F382A) },
7017 { PREFIX_TABLE (PREFIX_0F382B) },
592d1631
L
7018 { Bad_Opcode },
7019 { Bad_Opcode },
7020 { Bad_Opcode },
7021 { Bad_Opcode },
f88c9eb0
SP
7022 /* 30 */
7023 { PREFIX_TABLE (PREFIX_0F3830) },
7024 { PREFIX_TABLE (PREFIX_0F3831) },
7025 { PREFIX_TABLE (PREFIX_0F3832) },
7026 { PREFIX_TABLE (PREFIX_0F3833) },
7027 { PREFIX_TABLE (PREFIX_0F3834) },
7028 { PREFIX_TABLE (PREFIX_0F3835) },
592d1631 7029 { Bad_Opcode },
f88c9eb0
SP
7030 { PREFIX_TABLE (PREFIX_0F3837) },
7031 /* 38 */
7032 { PREFIX_TABLE (PREFIX_0F3838) },
7033 { PREFIX_TABLE (PREFIX_0F3839) },
7034 { PREFIX_TABLE (PREFIX_0F383A) },
7035 { PREFIX_TABLE (PREFIX_0F383B) },
7036 { PREFIX_TABLE (PREFIX_0F383C) },
7037 { PREFIX_TABLE (PREFIX_0F383D) },
7038 { PREFIX_TABLE (PREFIX_0F383E) },
7039 { PREFIX_TABLE (PREFIX_0F383F) },
7040 /* 40 */
7041 { PREFIX_TABLE (PREFIX_0F3840) },
7042 { PREFIX_TABLE (PREFIX_0F3841) },
592d1631
L
7043 { Bad_Opcode },
7044 { Bad_Opcode },
7045 { Bad_Opcode },
7046 { Bad_Opcode },
7047 { Bad_Opcode },
7048 { Bad_Opcode },
f88c9eb0 7049 /* 48 */
592d1631
L
7050 { Bad_Opcode },
7051 { Bad_Opcode },
7052 { Bad_Opcode },
7053 { Bad_Opcode },
7054 { Bad_Opcode },
7055 { Bad_Opcode },
7056 { Bad_Opcode },
7057 { Bad_Opcode },
f88c9eb0 7058 /* 50 */
592d1631
L
7059 { Bad_Opcode },
7060 { Bad_Opcode },
7061 { Bad_Opcode },
7062 { Bad_Opcode },
7063 { Bad_Opcode },
7064 { Bad_Opcode },
7065 { Bad_Opcode },
7066 { Bad_Opcode },
f88c9eb0 7067 /* 58 */
592d1631
L
7068 { Bad_Opcode },
7069 { Bad_Opcode },
7070 { Bad_Opcode },
7071 { Bad_Opcode },
7072 { Bad_Opcode },
7073 { Bad_Opcode },
7074 { Bad_Opcode },
7075 { Bad_Opcode },
f88c9eb0 7076 /* 60 */
592d1631
L
7077 { Bad_Opcode },
7078 { Bad_Opcode },
7079 { Bad_Opcode },
7080 { Bad_Opcode },
7081 { Bad_Opcode },
7082 { Bad_Opcode },
7083 { Bad_Opcode },
7084 { Bad_Opcode },
f88c9eb0 7085 /* 68 */
592d1631
L
7086 { Bad_Opcode },
7087 { Bad_Opcode },
7088 { Bad_Opcode },
7089 { Bad_Opcode },
7090 { Bad_Opcode },
7091 { Bad_Opcode },
7092 { Bad_Opcode },
7093 { Bad_Opcode },
f88c9eb0 7094 /* 70 */
592d1631
L
7095 { Bad_Opcode },
7096 { Bad_Opcode },
7097 { Bad_Opcode },
7098 { Bad_Opcode },
7099 { Bad_Opcode },
7100 { Bad_Opcode },
7101 { Bad_Opcode },
7102 { Bad_Opcode },
f88c9eb0 7103 /* 78 */
592d1631
L
7104 { Bad_Opcode },
7105 { Bad_Opcode },
7106 { Bad_Opcode },
7107 { Bad_Opcode },
7108 { Bad_Opcode },
7109 { Bad_Opcode },
7110 { Bad_Opcode },
7111 { Bad_Opcode },
f88c9eb0
SP
7112 /* 80 */
7113 { PREFIX_TABLE (PREFIX_0F3880) },
7114 { PREFIX_TABLE (PREFIX_0F3881) },
6c30d220 7115 { PREFIX_TABLE (PREFIX_0F3882) },
592d1631
L
7116 { Bad_Opcode },
7117 { Bad_Opcode },
7118 { Bad_Opcode },
7119 { Bad_Opcode },
7120 { Bad_Opcode },
f88c9eb0 7121 /* 88 */
592d1631
L
7122 { Bad_Opcode },
7123 { Bad_Opcode },
7124 { Bad_Opcode },
7125 { Bad_Opcode },
7126 { Bad_Opcode },
7127 { Bad_Opcode },
7128 { Bad_Opcode },
7129 { Bad_Opcode },
f88c9eb0 7130 /* 90 */
592d1631
L
7131 { Bad_Opcode },
7132 { Bad_Opcode },
7133 { Bad_Opcode },
7134 { Bad_Opcode },
7135 { Bad_Opcode },
7136 { Bad_Opcode },
7137 { Bad_Opcode },
7138 { Bad_Opcode },
f88c9eb0 7139 /* 98 */
592d1631
L
7140 { Bad_Opcode },
7141 { Bad_Opcode },
7142 { Bad_Opcode },
7143 { Bad_Opcode },
7144 { Bad_Opcode },
7145 { Bad_Opcode },
7146 { Bad_Opcode },
7147 { Bad_Opcode },
f88c9eb0 7148 /* a0 */
592d1631
L
7149 { Bad_Opcode },
7150 { Bad_Opcode },
7151 { Bad_Opcode },
7152 { Bad_Opcode },
7153 { Bad_Opcode },
7154 { Bad_Opcode },
7155 { Bad_Opcode },
7156 { Bad_Opcode },
f88c9eb0 7157 /* a8 */
592d1631
L
7158 { Bad_Opcode },
7159 { Bad_Opcode },
7160 { Bad_Opcode },
7161 { Bad_Opcode },
7162 { Bad_Opcode },
7163 { Bad_Opcode },
7164 { Bad_Opcode },
7165 { Bad_Opcode },
f88c9eb0 7166 /* b0 */
592d1631
L
7167 { Bad_Opcode },
7168 { Bad_Opcode },
7169 { Bad_Opcode },
7170 { Bad_Opcode },
7171 { Bad_Opcode },
7172 { Bad_Opcode },
7173 { Bad_Opcode },
7174 { Bad_Opcode },
f88c9eb0 7175 /* b8 */
592d1631
L
7176 { Bad_Opcode },
7177 { Bad_Opcode },
7178 { Bad_Opcode },
7179 { Bad_Opcode },
7180 { Bad_Opcode },
7181 { Bad_Opcode },
7182 { Bad_Opcode },
7183 { Bad_Opcode },
f88c9eb0 7184 /* c0 */
592d1631
L
7185 { Bad_Opcode },
7186 { Bad_Opcode },
7187 { Bad_Opcode },
7188 { Bad_Opcode },
7189 { Bad_Opcode },
7190 { Bad_Opcode },
7191 { Bad_Opcode },
7192 { Bad_Opcode },
f88c9eb0 7193 /* c8 */
a0046408
L
7194 { PREFIX_TABLE (PREFIX_0F38C8) },
7195 { PREFIX_TABLE (PREFIX_0F38C9) },
7196 { PREFIX_TABLE (PREFIX_0F38CA) },
7197 { PREFIX_TABLE (PREFIX_0F38CB) },
7198 { PREFIX_TABLE (PREFIX_0F38CC) },
7199 { PREFIX_TABLE (PREFIX_0F38CD) },
592d1631
L
7200 { Bad_Opcode },
7201 { Bad_Opcode },
f88c9eb0 7202 /* d0 */
592d1631
L
7203 { Bad_Opcode },
7204 { Bad_Opcode },
7205 { Bad_Opcode },
7206 { Bad_Opcode },
7207 { Bad_Opcode },
7208 { Bad_Opcode },
7209 { Bad_Opcode },
7210 { Bad_Opcode },
f88c9eb0 7211 /* d8 */
592d1631
L
7212 { Bad_Opcode },
7213 { Bad_Opcode },
7214 { Bad_Opcode },
f88c9eb0
SP
7215 { PREFIX_TABLE (PREFIX_0F38DB) },
7216 { PREFIX_TABLE (PREFIX_0F38DC) },
7217 { PREFIX_TABLE (PREFIX_0F38DD) },
7218 { PREFIX_TABLE (PREFIX_0F38DE) },
7219 { PREFIX_TABLE (PREFIX_0F38DF) },
7220 /* e0 */
592d1631
L
7221 { Bad_Opcode },
7222 { Bad_Opcode },
7223 { Bad_Opcode },
7224 { Bad_Opcode },
7225 { Bad_Opcode },
7226 { Bad_Opcode },
7227 { Bad_Opcode },
7228 { Bad_Opcode },
f88c9eb0 7229 /* e8 */
592d1631
L
7230 { Bad_Opcode },
7231 { Bad_Opcode },
7232 { Bad_Opcode },
7233 { Bad_Opcode },
7234 { Bad_Opcode },
7235 { Bad_Opcode },
7236 { Bad_Opcode },
7237 { Bad_Opcode },
f88c9eb0
SP
7238 /* f0 */
7239 { PREFIX_TABLE (PREFIX_0F38F0) },
7240 { PREFIX_TABLE (PREFIX_0F38F1) },
592d1631
L
7241 { Bad_Opcode },
7242 { Bad_Opcode },
7243 { Bad_Opcode },
7244 { Bad_Opcode },
e2e1fcde 7245 { PREFIX_TABLE (PREFIX_0F38F6) },
592d1631 7246 { Bad_Opcode },
f88c9eb0 7247 /* f8 */
592d1631
L
7248 { Bad_Opcode },
7249 { Bad_Opcode },
7250 { Bad_Opcode },
7251 { Bad_Opcode },
7252 { Bad_Opcode },
7253 { Bad_Opcode },
7254 { Bad_Opcode },
7255 { Bad_Opcode },
f88c9eb0
SP
7256 },
7257 /* THREE_BYTE_0F3A */
7258 {
7259 /* 00 */
592d1631
L
7260 { Bad_Opcode },
7261 { Bad_Opcode },
7262 { Bad_Opcode },
7263 { Bad_Opcode },
7264 { Bad_Opcode },
7265 { Bad_Opcode },
7266 { Bad_Opcode },
7267 { Bad_Opcode },
f88c9eb0
SP
7268 /* 08 */
7269 { PREFIX_TABLE (PREFIX_0F3A08) },
7270 { PREFIX_TABLE (PREFIX_0F3A09) },
7271 { PREFIX_TABLE (PREFIX_0F3A0A) },
7272 { PREFIX_TABLE (PREFIX_0F3A0B) },
7273 { PREFIX_TABLE (PREFIX_0F3A0C) },
7274 { PREFIX_TABLE (PREFIX_0F3A0D) },
7275 { PREFIX_TABLE (PREFIX_0F3A0E) },
507bd325 7276 { "palignr", { MX, EM, Ib }, PREFIX_OPCODE },
f88c9eb0 7277 /* 10 */
592d1631
L
7278 { Bad_Opcode },
7279 { Bad_Opcode },
7280 { Bad_Opcode },
7281 { Bad_Opcode },
f88c9eb0
SP
7282 { PREFIX_TABLE (PREFIX_0F3A14) },
7283 { PREFIX_TABLE (PREFIX_0F3A15) },
7284 { PREFIX_TABLE (PREFIX_0F3A16) },
7285 { PREFIX_TABLE (PREFIX_0F3A17) },
7286 /* 18 */
592d1631
L
7287 { Bad_Opcode },
7288 { Bad_Opcode },
7289 { Bad_Opcode },
7290 { Bad_Opcode },
7291 { Bad_Opcode },
7292 { Bad_Opcode },
7293 { Bad_Opcode },
7294 { Bad_Opcode },
f88c9eb0
SP
7295 /* 20 */
7296 { PREFIX_TABLE (PREFIX_0F3A20) },
7297 { PREFIX_TABLE (PREFIX_0F3A21) },
7298 { PREFIX_TABLE (PREFIX_0F3A22) },
592d1631
L
7299 { Bad_Opcode },
7300 { Bad_Opcode },
7301 { Bad_Opcode },
7302 { Bad_Opcode },
7303 { Bad_Opcode },
f88c9eb0 7304 /* 28 */
592d1631
L
7305 { Bad_Opcode },
7306 { Bad_Opcode },
7307 { Bad_Opcode },
7308 { Bad_Opcode },
7309 { Bad_Opcode },
7310 { Bad_Opcode },
7311 { Bad_Opcode },
7312 { Bad_Opcode },
f88c9eb0 7313 /* 30 */
592d1631
L
7314 { Bad_Opcode },
7315 { Bad_Opcode },
7316 { Bad_Opcode },
7317 { Bad_Opcode },
7318 { Bad_Opcode },
7319 { Bad_Opcode },
7320 { Bad_Opcode },
7321 { Bad_Opcode },
f88c9eb0 7322 /* 38 */
592d1631
L
7323 { Bad_Opcode },
7324 { Bad_Opcode },
7325 { Bad_Opcode },
7326 { Bad_Opcode },
7327 { Bad_Opcode },
7328 { Bad_Opcode },
7329 { Bad_Opcode },
7330 { Bad_Opcode },
f88c9eb0
SP
7331 /* 40 */
7332 { PREFIX_TABLE (PREFIX_0F3A40) },
7333 { PREFIX_TABLE (PREFIX_0F3A41) },
7334 { PREFIX_TABLE (PREFIX_0F3A42) },
592d1631 7335 { Bad_Opcode },
f88c9eb0 7336 { PREFIX_TABLE (PREFIX_0F3A44) },
592d1631
L
7337 { Bad_Opcode },
7338 { Bad_Opcode },
7339 { Bad_Opcode },
f88c9eb0 7340 /* 48 */
592d1631
L
7341 { Bad_Opcode },
7342 { Bad_Opcode },
7343 { Bad_Opcode },
7344 { Bad_Opcode },
7345 { Bad_Opcode },
7346 { Bad_Opcode },
7347 { Bad_Opcode },
7348 { Bad_Opcode },
f88c9eb0 7349 /* 50 */
592d1631
L
7350 { Bad_Opcode },
7351 { Bad_Opcode },
7352 { Bad_Opcode },
7353 { Bad_Opcode },
7354 { Bad_Opcode },
7355 { Bad_Opcode },
7356 { Bad_Opcode },
7357 { Bad_Opcode },
f88c9eb0 7358 /* 58 */
592d1631
L
7359 { Bad_Opcode },
7360 { Bad_Opcode },
7361 { Bad_Opcode },
7362 { Bad_Opcode },
7363 { Bad_Opcode },
7364 { Bad_Opcode },
7365 { Bad_Opcode },
7366 { Bad_Opcode },
f88c9eb0
SP
7367 /* 60 */
7368 { PREFIX_TABLE (PREFIX_0F3A60) },
7369 { PREFIX_TABLE (PREFIX_0F3A61) },
7370 { PREFIX_TABLE (PREFIX_0F3A62) },
7371 { PREFIX_TABLE (PREFIX_0F3A63) },
592d1631
L
7372 { Bad_Opcode },
7373 { Bad_Opcode },
7374 { Bad_Opcode },
7375 { Bad_Opcode },
f88c9eb0 7376 /* 68 */
592d1631
L
7377 { Bad_Opcode },
7378 { Bad_Opcode },
7379 { Bad_Opcode },
7380 { Bad_Opcode },
7381 { Bad_Opcode },
7382 { Bad_Opcode },
7383 { Bad_Opcode },
7384 { Bad_Opcode },
f88c9eb0 7385 /* 70 */
592d1631
L
7386 { Bad_Opcode },
7387 { Bad_Opcode },
7388 { Bad_Opcode },
7389 { Bad_Opcode },
7390 { Bad_Opcode },
7391 { Bad_Opcode },
7392 { Bad_Opcode },
7393 { Bad_Opcode },
f88c9eb0 7394 /* 78 */
592d1631
L
7395 { Bad_Opcode },
7396 { Bad_Opcode },
7397 { Bad_Opcode },
7398 { Bad_Opcode },
7399 { Bad_Opcode },
7400 { Bad_Opcode },
7401 { Bad_Opcode },
7402 { Bad_Opcode },
f88c9eb0 7403 /* 80 */
592d1631
L
7404 { Bad_Opcode },
7405 { Bad_Opcode },
7406 { Bad_Opcode },
7407 { Bad_Opcode },
7408 { Bad_Opcode },
7409 { Bad_Opcode },
7410 { Bad_Opcode },
7411 { Bad_Opcode },
f88c9eb0 7412 /* 88 */
592d1631
L
7413 { Bad_Opcode },
7414 { Bad_Opcode },
7415 { Bad_Opcode },
7416 { Bad_Opcode },
7417 { Bad_Opcode },
7418 { Bad_Opcode },
7419 { Bad_Opcode },
7420 { Bad_Opcode },
f88c9eb0 7421 /* 90 */
592d1631
L
7422 { Bad_Opcode },
7423 { Bad_Opcode },
7424 { Bad_Opcode },
7425 { Bad_Opcode },
7426 { Bad_Opcode },
7427 { Bad_Opcode },
7428 { Bad_Opcode },
7429 { Bad_Opcode },
f88c9eb0 7430 /* 98 */
592d1631
L
7431 { Bad_Opcode },
7432 { Bad_Opcode },
7433 { Bad_Opcode },
7434 { Bad_Opcode },
7435 { Bad_Opcode },
7436 { Bad_Opcode },
7437 { Bad_Opcode },
7438 { Bad_Opcode },
f88c9eb0 7439 /* a0 */
592d1631
L
7440 { Bad_Opcode },
7441 { Bad_Opcode },
7442 { Bad_Opcode },
7443 { Bad_Opcode },
7444 { Bad_Opcode },
7445 { Bad_Opcode },
7446 { Bad_Opcode },
7447 { Bad_Opcode },
f88c9eb0 7448 /* a8 */
592d1631
L
7449 { Bad_Opcode },
7450 { Bad_Opcode },
7451 { Bad_Opcode },
7452 { Bad_Opcode },
7453 { Bad_Opcode },
7454 { Bad_Opcode },
7455 { Bad_Opcode },
7456 { Bad_Opcode },
f88c9eb0 7457 /* b0 */
592d1631
L
7458 { Bad_Opcode },
7459 { Bad_Opcode },
7460 { Bad_Opcode },
7461 { Bad_Opcode },
7462 { Bad_Opcode },
7463 { Bad_Opcode },
7464 { Bad_Opcode },
7465 { Bad_Opcode },
f88c9eb0 7466 /* b8 */
592d1631
L
7467 { Bad_Opcode },
7468 { Bad_Opcode },
7469 { Bad_Opcode },
7470 { Bad_Opcode },
7471 { Bad_Opcode },
7472 { Bad_Opcode },
7473 { Bad_Opcode },
7474 { Bad_Opcode },
f88c9eb0 7475 /* c0 */
592d1631
L
7476 { Bad_Opcode },
7477 { Bad_Opcode },
7478 { Bad_Opcode },
7479 { Bad_Opcode },
7480 { Bad_Opcode },
7481 { Bad_Opcode },
7482 { Bad_Opcode },
7483 { Bad_Opcode },
f88c9eb0 7484 /* c8 */
592d1631
L
7485 { Bad_Opcode },
7486 { Bad_Opcode },
7487 { Bad_Opcode },
7488 { Bad_Opcode },
a0046408 7489 { PREFIX_TABLE (PREFIX_0F3ACC) },
592d1631
L
7490 { Bad_Opcode },
7491 { Bad_Opcode },
7492 { Bad_Opcode },
f88c9eb0 7493 /* d0 */
592d1631
L
7494 { Bad_Opcode },
7495 { Bad_Opcode },
7496 { Bad_Opcode },
7497 { Bad_Opcode },
7498 { Bad_Opcode },
7499 { Bad_Opcode },
7500 { Bad_Opcode },
7501 { Bad_Opcode },
f88c9eb0 7502 /* d8 */
592d1631
L
7503 { Bad_Opcode },
7504 { Bad_Opcode },
7505 { Bad_Opcode },
7506 { Bad_Opcode },
7507 { Bad_Opcode },
7508 { Bad_Opcode },
7509 { Bad_Opcode },
f88c9eb0
SP
7510 { PREFIX_TABLE (PREFIX_0F3ADF) },
7511 /* e0 */
592d1631
L
7512 { Bad_Opcode },
7513 { Bad_Opcode },
7514 { Bad_Opcode },
7515 { Bad_Opcode },
7516 { Bad_Opcode },
7517 { Bad_Opcode },
7518 { Bad_Opcode },
7519 { Bad_Opcode },
f88c9eb0 7520 /* e8 */
592d1631
L
7521 { Bad_Opcode },
7522 { Bad_Opcode },
7523 { Bad_Opcode },
7524 { Bad_Opcode },
7525 { Bad_Opcode },
7526 { Bad_Opcode },
7527 { Bad_Opcode },
7528 { Bad_Opcode },
f88c9eb0 7529 /* f0 */
592d1631
L
7530 { Bad_Opcode },
7531 { Bad_Opcode },
7532 { Bad_Opcode },
7533 { Bad_Opcode },
7534 { Bad_Opcode },
7535 { Bad_Opcode },
7536 { Bad_Opcode },
7537 { Bad_Opcode },
f88c9eb0 7538 /* f8 */
592d1631
L
7539 { Bad_Opcode },
7540 { Bad_Opcode },
7541 { Bad_Opcode },
7542 { Bad_Opcode },
7543 { Bad_Opcode },
7544 { Bad_Opcode },
7545 { Bad_Opcode },
7546 { Bad_Opcode },
f88c9eb0
SP
7547 },
7548
7549 /* THREE_BYTE_0F7A */
7550 {
7551 /* 00 */
592d1631
L
7552 { Bad_Opcode },
7553 { Bad_Opcode },
7554 { Bad_Opcode },
7555 { Bad_Opcode },
7556 { Bad_Opcode },
7557 { Bad_Opcode },
7558 { Bad_Opcode },
7559 { Bad_Opcode },
f88c9eb0 7560 /* 08 */
592d1631
L
7561 { Bad_Opcode },
7562 { Bad_Opcode },
7563 { Bad_Opcode },
7564 { Bad_Opcode },
7565 { Bad_Opcode },
7566 { Bad_Opcode },
7567 { Bad_Opcode },
7568 { Bad_Opcode },
f88c9eb0 7569 /* 10 */
592d1631
L
7570 { Bad_Opcode },
7571 { Bad_Opcode },
7572 { Bad_Opcode },
7573 { Bad_Opcode },
7574 { Bad_Opcode },
7575 { Bad_Opcode },
7576 { Bad_Opcode },
7577 { Bad_Opcode },
f88c9eb0 7578 /* 18 */
592d1631
L
7579 { Bad_Opcode },
7580 { Bad_Opcode },
7581 { Bad_Opcode },
7582 { Bad_Opcode },
7583 { Bad_Opcode },
7584 { Bad_Opcode },
7585 { Bad_Opcode },
7586 { Bad_Opcode },
f88c9eb0 7587 /* 20 */
da8d7d66 7588 { Bad_Opcode },
592d1631
L
7589 { Bad_Opcode },
7590 { Bad_Opcode },
7591 { Bad_Opcode },
7592 { Bad_Opcode },
7593 { Bad_Opcode },
7594 { Bad_Opcode },
7595 { Bad_Opcode },
f88c9eb0 7596 /* 28 */
592d1631
L
7597 { Bad_Opcode },
7598 { Bad_Opcode },
7599 { Bad_Opcode },
7600 { Bad_Opcode },
7601 { Bad_Opcode },
7602 { Bad_Opcode },
7603 { Bad_Opcode },
7604 { Bad_Opcode },
f88c9eb0 7605 /* 30 */
592d1631
L
7606 { Bad_Opcode },
7607 { Bad_Opcode },
7608 { Bad_Opcode },
7609 { Bad_Opcode },
7610 { Bad_Opcode },
7611 { Bad_Opcode },
7612 { Bad_Opcode },
7613 { Bad_Opcode },
f88c9eb0 7614 /* 38 */
592d1631
L
7615 { Bad_Opcode },
7616 { Bad_Opcode },
7617 { Bad_Opcode },
7618 { Bad_Opcode },
7619 { Bad_Opcode },
7620 { Bad_Opcode },
7621 { Bad_Opcode },
7622 { Bad_Opcode },
f88c9eb0 7623 /* 40 */
592d1631 7624 { Bad_Opcode },
507bd325
L
7625 { "phaddbw", { XM, EXq }, PREFIX_OPCODE },
7626 { "phaddbd", { XM, EXq }, PREFIX_OPCODE },
7627 { "phaddbq", { XM, EXq }, PREFIX_OPCODE },
592d1631
L
7628 { Bad_Opcode },
7629 { Bad_Opcode },
507bd325
L
7630 { "phaddwd", { XM, EXq }, PREFIX_OPCODE },
7631 { "phaddwq", { XM, EXq }, PREFIX_OPCODE },
f88c9eb0 7632 /* 48 */
592d1631
L
7633 { Bad_Opcode },
7634 { Bad_Opcode },
7635 { Bad_Opcode },
507bd325 7636 { "phadddq", { XM, EXq }, PREFIX_OPCODE },
592d1631
L
7637 { Bad_Opcode },
7638 { Bad_Opcode },
7639 { Bad_Opcode },
7640 { Bad_Opcode },
f88c9eb0 7641 /* 50 */
592d1631 7642 { Bad_Opcode },
507bd325
L
7643 { "phaddubw", { XM, EXq }, PREFIX_OPCODE },
7644 { "phaddubd", { XM, EXq }, PREFIX_OPCODE },
7645 { "phaddubq", { XM, EXq }, PREFIX_OPCODE },
592d1631
L
7646 { Bad_Opcode },
7647 { Bad_Opcode },
507bd325
L
7648 { "phadduwd", { XM, EXq }, PREFIX_OPCODE },
7649 { "phadduwq", { XM, EXq }, PREFIX_OPCODE },
f88c9eb0 7650 /* 58 */
592d1631
L
7651 { Bad_Opcode },
7652 { Bad_Opcode },
7653 { Bad_Opcode },
507bd325 7654 { "phaddudq", { XM, EXq }, PREFIX_OPCODE },
592d1631
L
7655 { Bad_Opcode },
7656 { Bad_Opcode },
7657 { Bad_Opcode },
7658 { Bad_Opcode },
f88c9eb0 7659 /* 60 */
592d1631 7660 { Bad_Opcode },
507bd325
L
7661 { "phsubbw", { XM, EXq }, PREFIX_OPCODE },
7662 { "phsubbd", { XM, EXq }, PREFIX_OPCODE },
7663 { "phsubbq", { XM, EXq }, PREFIX_OPCODE },
592d1631
L
7664 { Bad_Opcode },
7665 { Bad_Opcode },
7666 { Bad_Opcode },
7667 { Bad_Opcode },
4e7d34a6 7668 /* 68 */
592d1631
L
7669 { Bad_Opcode },
7670 { Bad_Opcode },
7671 { Bad_Opcode },
7672 { Bad_Opcode },
7673 { Bad_Opcode },
7674 { Bad_Opcode },
7675 { Bad_Opcode },
7676 { Bad_Opcode },
85f10a01 7677 /* 70 */
592d1631
L
7678 { Bad_Opcode },
7679 { Bad_Opcode },
7680 { Bad_Opcode },
7681 { Bad_Opcode },
7682 { Bad_Opcode },
7683 { Bad_Opcode },
7684 { Bad_Opcode },
7685 { Bad_Opcode },
85f10a01 7686 /* 78 */
592d1631
L
7687 { Bad_Opcode },
7688 { Bad_Opcode },
7689 { Bad_Opcode },
7690 { Bad_Opcode },
7691 { Bad_Opcode },
7692 { Bad_Opcode },
7693 { Bad_Opcode },
7694 { Bad_Opcode },
85f10a01 7695 /* 80 */
592d1631
L
7696 { Bad_Opcode },
7697 { Bad_Opcode },
7698 { Bad_Opcode },
7699 { Bad_Opcode },
7700 { Bad_Opcode },
7701 { Bad_Opcode },
7702 { Bad_Opcode },
7703 { Bad_Opcode },
85f10a01 7704 /* 88 */
592d1631
L
7705 { Bad_Opcode },
7706 { Bad_Opcode },
7707 { Bad_Opcode },
7708 { Bad_Opcode },
7709 { Bad_Opcode },
7710 { Bad_Opcode },
7711 { Bad_Opcode },
7712 { Bad_Opcode },
85f10a01 7713 /* 90 */
592d1631
L
7714 { Bad_Opcode },
7715 { Bad_Opcode },
7716 { Bad_Opcode },
7717 { Bad_Opcode },
7718 { Bad_Opcode },
7719 { Bad_Opcode },
7720 { Bad_Opcode },
7721 { Bad_Opcode },
85f10a01 7722 /* 98 */
592d1631
L
7723 { Bad_Opcode },
7724 { Bad_Opcode },
7725 { Bad_Opcode },
7726 { Bad_Opcode },
7727 { Bad_Opcode },
7728 { Bad_Opcode },
7729 { Bad_Opcode },
7730 { Bad_Opcode },
85f10a01 7731 /* a0 */
592d1631
L
7732 { Bad_Opcode },
7733 { Bad_Opcode },
7734 { Bad_Opcode },
7735 { Bad_Opcode },
7736 { Bad_Opcode },
7737 { Bad_Opcode },
7738 { Bad_Opcode },
7739 { Bad_Opcode },
85f10a01 7740 /* a8 */
592d1631
L
7741 { Bad_Opcode },
7742 { Bad_Opcode },
7743 { Bad_Opcode },
7744 { Bad_Opcode },
7745 { Bad_Opcode },
7746 { Bad_Opcode },
7747 { Bad_Opcode },
7748 { Bad_Opcode },
85f10a01 7749 /* b0 */
592d1631
L
7750 { Bad_Opcode },
7751 { Bad_Opcode },
7752 { Bad_Opcode },
7753 { Bad_Opcode },
7754 { Bad_Opcode },
7755 { Bad_Opcode },
7756 { Bad_Opcode },
7757 { Bad_Opcode },
85f10a01 7758 /* b8 */
592d1631
L
7759 { Bad_Opcode },
7760 { Bad_Opcode },
7761 { Bad_Opcode },
7762 { Bad_Opcode },
7763 { Bad_Opcode },
7764 { Bad_Opcode },
7765 { Bad_Opcode },
7766 { Bad_Opcode },
85f10a01 7767 /* c0 */
592d1631
L
7768 { Bad_Opcode },
7769 { Bad_Opcode },
7770 { Bad_Opcode },
7771 { Bad_Opcode },
7772 { Bad_Opcode },
7773 { Bad_Opcode },
7774 { Bad_Opcode },
7775 { Bad_Opcode },
85f10a01 7776 /* c8 */
592d1631
L
7777 { Bad_Opcode },
7778 { Bad_Opcode },
7779 { Bad_Opcode },
7780 { Bad_Opcode },
7781 { Bad_Opcode },
7782 { Bad_Opcode },
7783 { Bad_Opcode },
7784 { Bad_Opcode },
85f10a01 7785 /* d0 */
592d1631
L
7786 { Bad_Opcode },
7787 { Bad_Opcode },
7788 { Bad_Opcode },
7789 { Bad_Opcode },
7790 { Bad_Opcode },
7791 { Bad_Opcode },
7792 { Bad_Opcode },
7793 { Bad_Opcode },
85f10a01 7794 /* d8 */
592d1631
L
7795 { Bad_Opcode },
7796 { Bad_Opcode },
7797 { Bad_Opcode },
7798 { Bad_Opcode },
7799 { Bad_Opcode },
7800 { Bad_Opcode },
7801 { Bad_Opcode },
7802 { Bad_Opcode },
85f10a01 7803 /* e0 */
592d1631
L
7804 { Bad_Opcode },
7805 { Bad_Opcode },
7806 { Bad_Opcode },
7807 { Bad_Opcode },
7808 { Bad_Opcode },
7809 { Bad_Opcode },
7810 { Bad_Opcode },
7811 { Bad_Opcode },
85f10a01 7812 /* e8 */
592d1631
L
7813 { Bad_Opcode },
7814 { Bad_Opcode },
7815 { Bad_Opcode },
7816 { Bad_Opcode },
7817 { Bad_Opcode },
7818 { Bad_Opcode },
7819 { Bad_Opcode },
7820 { Bad_Opcode },
85f10a01 7821 /* f0 */
592d1631
L
7822 { Bad_Opcode },
7823 { Bad_Opcode },
7824 { Bad_Opcode },
7825 { Bad_Opcode },
7826 { Bad_Opcode },
7827 { Bad_Opcode },
7828 { Bad_Opcode },
7829 { Bad_Opcode },
85f10a01 7830 /* f8 */
592d1631
L
7831 { Bad_Opcode },
7832 { Bad_Opcode },
7833 { Bad_Opcode },
7834 { Bad_Opcode },
7835 { Bad_Opcode },
7836 { Bad_Opcode },
7837 { Bad_Opcode },
7838 { Bad_Opcode },
85f10a01 7839 },
f88c9eb0
SP
7840};
7841
7842static const struct dis386 xop_table[][256] = {
5dd85c99 7843 /* XOP_08 */
85f10a01
MM
7844 {
7845 /* 00 */
592d1631
L
7846 { Bad_Opcode },
7847 { Bad_Opcode },
7848 { Bad_Opcode },
7849 { Bad_Opcode },
7850 { Bad_Opcode },
7851 { Bad_Opcode },
7852 { Bad_Opcode },
7853 { Bad_Opcode },
85f10a01 7854 /* 08 */
592d1631
L
7855 { Bad_Opcode },
7856 { Bad_Opcode },
7857 { Bad_Opcode },
7858 { Bad_Opcode },
7859 { Bad_Opcode },
7860 { Bad_Opcode },
7861 { Bad_Opcode },
7862 { Bad_Opcode },
85f10a01 7863 /* 10 */
3929df09 7864 { Bad_Opcode },
592d1631
L
7865 { Bad_Opcode },
7866 { Bad_Opcode },
7867 { Bad_Opcode },
7868 { Bad_Opcode },
7869 { Bad_Opcode },
7870 { Bad_Opcode },
7871 { Bad_Opcode },
85f10a01 7872 /* 18 */
592d1631
L
7873 { Bad_Opcode },
7874 { Bad_Opcode },
7875 { Bad_Opcode },
7876 { Bad_Opcode },
7877 { Bad_Opcode },
7878 { Bad_Opcode },
7879 { Bad_Opcode },
7880 { Bad_Opcode },
85f10a01 7881 /* 20 */
592d1631
L
7882 { Bad_Opcode },
7883 { Bad_Opcode },
7884 { Bad_Opcode },
7885 { Bad_Opcode },
7886 { Bad_Opcode },
7887 { Bad_Opcode },
7888 { Bad_Opcode },
7889 { Bad_Opcode },
85f10a01 7890 /* 28 */
592d1631
L
7891 { Bad_Opcode },
7892 { Bad_Opcode },
7893 { Bad_Opcode },
7894 { Bad_Opcode },
7895 { Bad_Opcode },
7896 { Bad_Opcode },
7897 { Bad_Opcode },
7898 { Bad_Opcode },
c0f3af97 7899 /* 30 */
592d1631
L
7900 { Bad_Opcode },
7901 { Bad_Opcode },
7902 { Bad_Opcode },
7903 { Bad_Opcode },
7904 { Bad_Opcode },
7905 { Bad_Opcode },
7906 { Bad_Opcode },
7907 { Bad_Opcode },
c0f3af97 7908 /* 38 */
592d1631
L
7909 { Bad_Opcode },
7910 { Bad_Opcode },
7911 { Bad_Opcode },
7912 { Bad_Opcode },
7913 { Bad_Opcode },
7914 { Bad_Opcode },
7915 { Bad_Opcode },
7916 { Bad_Opcode },
c0f3af97 7917 /* 40 */
592d1631
L
7918 { Bad_Opcode },
7919 { Bad_Opcode },
7920 { Bad_Opcode },
7921 { Bad_Opcode },
7922 { Bad_Opcode },
7923 { Bad_Opcode },
7924 { Bad_Opcode },
7925 { Bad_Opcode },
85f10a01 7926 /* 48 */
592d1631
L
7927 { Bad_Opcode },
7928 { Bad_Opcode },
7929 { Bad_Opcode },
7930 { Bad_Opcode },
7931 { Bad_Opcode },
7932 { Bad_Opcode },
7933 { Bad_Opcode },
7934 { Bad_Opcode },
c0f3af97 7935 /* 50 */
592d1631
L
7936 { Bad_Opcode },
7937 { Bad_Opcode },
7938 { Bad_Opcode },
7939 { Bad_Opcode },
7940 { Bad_Opcode },
7941 { Bad_Opcode },
7942 { Bad_Opcode },
7943 { Bad_Opcode },
85f10a01 7944 /* 58 */
592d1631
L
7945 { Bad_Opcode },
7946 { Bad_Opcode },
7947 { Bad_Opcode },
7948 { Bad_Opcode },
7949 { Bad_Opcode },
7950 { Bad_Opcode },
7951 { Bad_Opcode },
7952 { Bad_Opcode },
c1e679ec 7953 /* 60 */
592d1631
L
7954 { Bad_Opcode },
7955 { Bad_Opcode },
7956 { Bad_Opcode },
7957 { Bad_Opcode },
7958 { Bad_Opcode },
7959 { Bad_Opcode },
7960 { Bad_Opcode },
7961 { Bad_Opcode },
c0f3af97 7962 /* 68 */
592d1631
L
7963 { Bad_Opcode },
7964 { Bad_Opcode },
7965 { Bad_Opcode },
7966 { Bad_Opcode },
7967 { Bad_Opcode },
7968 { Bad_Opcode },
7969 { Bad_Opcode },
7970 { Bad_Opcode },
85f10a01 7971 /* 70 */
592d1631
L
7972 { Bad_Opcode },
7973 { Bad_Opcode },
7974 { Bad_Opcode },
7975 { Bad_Opcode },
7976 { Bad_Opcode },
7977 { Bad_Opcode },
7978 { Bad_Opcode },
7979 { Bad_Opcode },
85f10a01 7980 /* 78 */
592d1631
L
7981 { Bad_Opcode },
7982 { Bad_Opcode },
7983 { Bad_Opcode },
7984 { Bad_Opcode },
7985 { Bad_Opcode },
7986 { Bad_Opcode },
7987 { Bad_Opcode },
7988 { Bad_Opcode },
85f10a01 7989 /* 80 */
592d1631
L
7990 { Bad_Opcode },
7991 { Bad_Opcode },
7992 { Bad_Opcode },
7993 { Bad_Opcode },
7994 { Bad_Opcode },
bf890a93
IT
7995 { "vpmacssww", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
7996 { "vpmacsswd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
7997 { "vpmacssdql", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
5dd85c99 7998 /* 88 */
592d1631
L
7999 { Bad_Opcode },
8000 { Bad_Opcode },
8001 { Bad_Opcode },
8002 { Bad_Opcode },
8003 { Bad_Opcode },
8004 { Bad_Opcode },
bf890a93
IT
8005 { "vpmacssdd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
8006 { "vpmacssdqh", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
5dd85c99 8007 /* 90 */
592d1631
L
8008 { Bad_Opcode },
8009 { Bad_Opcode },
8010 { Bad_Opcode },
8011 { Bad_Opcode },
8012 { Bad_Opcode },
bf890a93
IT
8013 { "vpmacsww", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
8014 { "vpmacswd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
8015 { "vpmacsdql", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
5dd85c99 8016 /* 98 */
592d1631
L
8017 { Bad_Opcode },
8018 { Bad_Opcode },
8019 { Bad_Opcode },
8020 { Bad_Opcode },
8021 { Bad_Opcode },
8022 { Bad_Opcode },
bf890a93
IT
8023 { "vpmacsdd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
8024 { "vpmacsdqh", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
5dd85c99 8025 /* a0 */
592d1631
L
8026 { Bad_Opcode },
8027 { Bad_Opcode },
bf890a93
IT
8028 { "vpcmov", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
8029 { "vpperm", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
592d1631
L
8030 { Bad_Opcode },
8031 { Bad_Opcode },
bf890a93 8032 { "vpmadcsswd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
592d1631 8033 { Bad_Opcode },
5dd85c99 8034 /* a8 */
592d1631
L
8035 { Bad_Opcode },
8036 { Bad_Opcode },
8037 { Bad_Opcode },
8038 { Bad_Opcode },
8039 { Bad_Opcode },
8040 { Bad_Opcode },
8041 { Bad_Opcode },
8042 { Bad_Opcode },
5dd85c99 8043 /* b0 */
592d1631
L
8044 { Bad_Opcode },
8045 { Bad_Opcode },
8046 { Bad_Opcode },
8047 { Bad_Opcode },
8048 { Bad_Opcode },
8049 { Bad_Opcode },
bf890a93 8050 { "vpmadcswd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
592d1631 8051 { Bad_Opcode },
5dd85c99 8052 /* b8 */
592d1631
L
8053 { Bad_Opcode },
8054 { Bad_Opcode },
8055 { Bad_Opcode },
8056 { Bad_Opcode },
8057 { Bad_Opcode },
8058 { Bad_Opcode },
8059 { Bad_Opcode },
8060 { Bad_Opcode },
5dd85c99 8061 /* c0 */
bf890a93
IT
8062 { "vprotb", { XM, Vex_2src_1, Ib }, 0 },
8063 { "vprotw", { XM, Vex_2src_1, Ib }, 0 },
8064 { "vprotd", { XM, Vex_2src_1, Ib }, 0 },
8065 { "vprotq", { XM, Vex_2src_1, Ib }, 0 },
592d1631
L
8066 { Bad_Opcode },
8067 { Bad_Opcode },
8068 { Bad_Opcode },
8069 { Bad_Opcode },
5dd85c99 8070 /* c8 */
592d1631
L
8071 { Bad_Opcode },
8072 { Bad_Opcode },
8073 { Bad_Opcode },
8074 { Bad_Opcode },
ff688e1f
L
8075 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_CC) },
8076 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_CD) },
8077 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_CE) },
8078 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_CF) },
5dd85c99 8079 /* d0 */
592d1631
L
8080 { Bad_Opcode },
8081 { Bad_Opcode },
8082 { Bad_Opcode },
8083 { Bad_Opcode },
8084 { Bad_Opcode },
8085 { Bad_Opcode },
8086 { Bad_Opcode },
8087 { Bad_Opcode },
5dd85c99 8088 /* d8 */
592d1631
L
8089 { Bad_Opcode },
8090 { Bad_Opcode },
8091 { Bad_Opcode },
8092 { Bad_Opcode },
8093 { Bad_Opcode },
8094 { Bad_Opcode },
8095 { Bad_Opcode },
8096 { Bad_Opcode },
5dd85c99 8097 /* e0 */
592d1631
L
8098 { Bad_Opcode },
8099 { Bad_Opcode },
8100 { Bad_Opcode },
8101 { Bad_Opcode },
8102 { Bad_Opcode },
8103 { Bad_Opcode },
8104 { Bad_Opcode },
8105 { Bad_Opcode },
5dd85c99 8106 /* e8 */
592d1631
L
8107 { Bad_Opcode },
8108 { Bad_Opcode },
8109 { Bad_Opcode },
8110 { Bad_Opcode },
ff688e1f
L
8111 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_EC) },
8112 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_ED) },
8113 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_EE) },
8114 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_EF) },
5dd85c99 8115 /* f0 */
592d1631
L
8116 { Bad_Opcode },
8117 { Bad_Opcode },
8118 { Bad_Opcode },
8119 { Bad_Opcode },
8120 { Bad_Opcode },
8121 { Bad_Opcode },
8122 { Bad_Opcode },
8123 { Bad_Opcode },
5dd85c99 8124 /* f8 */
592d1631
L
8125 { Bad_Opcode },
8126 { Bad_Opcode },
8127 { Bad_Opcode },
8128 { Bad_Opcode },
8129 { Bad_Opcode },
8130 { Bad_Opcode },
8131 { Bad_Opcode },
8132 { Bad_Opcode },
5dd85c99
SP
8133 },
8134 /* XOP_09 */
8135 {
8136 /* 00 */
592d1631 8137 { Bad_Opcode },
2a2a0f38
QN
8138 { REG_TABLE (REG_XOP_TBM_01) },
8139 { REG_TABLE (REG_XOP_TBM_02) },
592d1631
L
8140 { Bad_Opcode },
8141 { Bad_Opcode },
8142 { Bad_Opcode },
8143 { Bad_Opcode },
8144 { Bad_Opcode },
5dd85c99 8145 /* 08 */
592d1631
L
8146 { Bad_Opcode },
8147 { Bad_Opcode },
8148 { Bad_Opcode },
8149 { Bad_Opcode },
8150 { Bad_Opcode },
8151 { Bad_Opcode },
8152 { Bad_Opcode },
8153 { Bad_Opcode },
5dd85c99 8154 /* 10 */
592d1631
L
8155 { Bad_Opcode },
8156 { Bad_Opcode },
5dd85c99 8157 { REG_TABLE (REG_XOP_LWPCB) },
592d1631
L
8158 { Bad_Opcode },
8159 { Bad_Opcode },
8160 { Bad_Opcode },
8161 { Bad_Opcode },
8162 { Bad_Opcode },
5dd85c99 8163 /* 18 */
592d1631
L
8164 { Bad_Opcode },
8165 { Bad_Opcode },
8166 { Bad_Opcode },
8167 { Bad_Opcode },
8168 { Bad_Opcode },
8169 { Bad_Opcode },
8170 { Bad_Opcode },
8171 { Bad_Opcode },
5dd85c99 8172 /* 20 */
592d1631
L
8173 { Bad_Opcode },
8174 { Bad_Opcode },
8175 { Bad_Opcode },
8176 { Bad_Opcode },
8177 { Bad_Opcode },
8178 { Bad_Opcode },
8179 { Bad_Opcode },
8180 { Bad_Opcode },
5dd85c99 8181 /* 28 */
592d1631
L
8182 { Bad_Opcode },
8183 { Bad_Opcode },
8184 { Bad_Opcode },
8185 { Bad_Opcode },
8186 { Bad_Opcode },
8187 { Bad_Opcode },
8188 { Bad_Opcode },
8189 { Bad_Opcode },
5dd85c99 8190 /* 30 */
592d1631
L
8191 { Bad_Opcode },
8192 { Bad_Opcode },
8193 { Bad_Opcode },
8194 { Bad_Opcode },
8195 { Bad_Opcode },
8196 { Bad_Opcode },
8197 { Bad_Opcode },
8198 { Bad_Opcode },
5dd85c99 8199 /* 38 */
592d1631
L
8200 { Bad_Opcode },
8201 { Bad_Opcode },
8202 { Bad_Opcode },
8203 { Bad_Opcode },
8204 { Bad_Opcode },
8205 { Bad_Opcode },
8206 { Bad_Opcode },
8207 { Bad_Opcode },
5dd85c99 8208 /* 40 */
592d1631
L
8209 { Bad_Opcode },
8210 { Bad_Opcode },
8211 { Bad_Opcode },
8212 { Bad_Opcode },
8213 { Bad_Opcode },
8214 { Bad_Opcode },
8215 { Bad_Opcode },
8216 { Bad_Opcode },
5dd85c99 8217 /* 48 */
592d1631
L
8218 { Bad_Opcode },
8219 { Bad_Opcode },
8220 { Bad_Opcode },
8221 { Bad_Opcode },
8222 { Bad_Opcode },
8223 { Bad_Opcode },
8224 { Bad_Opcode },
8225 { Bad_Opcode },
5dd85c99 8226 /* 50 */
592d1631
L
8227 { Bad_Opcode },
8228 { Bad_Opcode },
8229 { Bad_Opcode },
8230 { Bad_Opcode },
8231 { Bad_Opcode },
8232 { Bad_Opcode },
8233 { Bad_Opcode },
8234 { Bad_Opcode },
5dd85c99 8235 /* 58 */
592d1631
L
8236 { Bad_Opcode },
8237 { Bad_Opcode },
8238 { Bad_Opcode },
8239 { Bad_Opcode },
8240 { Bad_Opcode },
8241 { Bad_Opcode },
8242 { Bad_Opcode },
8243 { Bad_Opcode },
5dd85c99 8244 /* 60 */
592d1631
L
8245 { Bad_Opcode },
8246 { Bad_Opcode },
8247 { Bad_Opcode },
8248 { Bad_Opcode },
8249 { Bad_Opcode },
8250 { Bad_Opcode },
8251 { Bad_Opcode },
8252 { Bad_Opcode },
5dd85c99 8253 /* 68 */
592d1631
L
8254 { Bad_Opcode },
8255 { Bad_Opcode },
8256 { Bad_Opcode },
8257 { Bad_Opcode },
8258 { Bad_Opcode },
8259 { Bad_Opcode },
8260 { Bad_Opcode },
8261 { Bad_Opcode },
5dd85c99 8262 /* 70 */
592d1631
L
8263 { Bad_Opcode },
8264 { Bad_Opcode },
8265 { Bad_Opcode },
8266 { Bad_Opcode },
8267 { Bad_Opcode },
8268 { Bad_Opcode },
8269 { Bad_Opcode },
8270 { Bad_Opcode },
5dd85c99 8271 /* 78 */
592d1631
L
8272 { Bad_Opcode },
8273 { Bad_Opcode },
8274 { Bad_Opcode },
8275 { Bad_Opcode },
8276 { Bad_Opcode },
8277 { Bad_Opcode },
8278 { Bad_Opcode },
8279 { Bad_Opcode },
5dd85c99 8280 /* 80 */
592a252b
L
8281 { VEX_LEN_TABLE (VEX_LEN_0FXOP_09_80) },
8282 { VEX_LEN_TABLE (VEX_LEN_0FXOP_09_81) },
bf890a93
IT
8283 { "vfrczss", { XM, EXd }, 0 },
8284 { "vfrczsd", { XM, EXq }, 0 },
592d1631
L
8285 { Bad_Opcode },
8286 { Bad_Opcode },
8287 { Bad_Opcode },
8288 { Bad_Opcode },
5dd85c99 8289 /* 88 */
592d1631
L
8290 { Bad_Opcode },
8291 { Bad_Opcode },
8292 { Bad_Opcode },
8293 { Bad_Opcode },
8294 { Bad_Opcode },
8295 { Bad_Opcode },
8296 { Bad_Opcode },
8297 { Bad_Opcode },
5dd85c99 8298 /* 90 */
bf890a93
IT
8299 { "vprotb", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8300 { "vprotw", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8301 { "vprotd", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8302 { "vprotq", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8303 { "vpshlb", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8304 { "vpshlw", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8305 { "vpshld", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8306 { "vpshlq", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
5dd85c99 8307 /* 98 */
bf890a93
IT
8308 { "vpshab", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8309 { "vpshaw", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8310 { "vpshad", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8311 { "vpshaq", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
592d1631
L
8312 { Bad_Opcode },
8313 { Bad_Opcode },
8314 { Bad_Opcode },
8315 { Bad_Opcode },
5dd85c99 8316 /* a0 */
592d1631
L
8317 { Bad_Opcode },
8318 { Bad_Opcode },
8319 { Bad_Opcode },
8320 { Bad_Opcode },
8321 { Bad_Opcode },
8322 { Bad_Opcode },
8323 { Bad_Opcode },
8324 { Bad_Opcode },
5dd85c99 8325 /* a8 */
592d1631
L
8326 { Bad_Opcode },
8327 { Bad_Opcode },
8328 { Bad_Opcode },
8329 { Bad_Opcode },
8330 { Bad_Opcode },
8331 { Bad_Opcode },
8332 { Bad_Opcode },
8333 { Bad_Opcode },
5dd85c99 8334 /* b0 */
592d1631
L
8335 { Bad_Opcode },
8336 { Bad_Opcode },
8337 { Bad_Opcode },
8338 { Bad_Opcode },
8339 { Bad_Opcode },
8340 { Bad_Opcode },
8341 { Bad_Opcode },
8342 { Bad_Opcode },
5dd85c99 8343 /* b8 */
592d1631
L
8344 { Bad_Opcode },
8345 { Bad_Opcode },
8346 { Bad_Opcode },
8347 { Bad_Opcode },
8348 { Bad_Opcode },
8349 { Bad_Opcode },
8350 { Bad_Opcode },
8351 { Bad_Opcode },
5dd85c99 8352 /* c0 */
592d1631 8353 { Bad_Opcode },
bf890a93
IT
8354 { "vphaddbw", { XM, EXxmm }, 0 },
8355 { "vphaddbd", { XM, EXxmm }, 0 },
8356 { "vphaddbq", { XM, EXxmm }, 0 },
592d1631
L
8357 { Bad_Opcode },
8358 { Bad_Opcode },
bf890a93
IT
8359 { "vphaddwd", { XM, EXxmm }, 0 },
8360 { "vphaddwq", { XM, EXxmm }, 0 },
5dd85c99 8361 /* c8 */
592d1631
L
8362 { Bad_Opcode },
8363 { Bad_Opcode },
8364 { Bad_Opcode },
bf890a93 8365 { "vphadddq", { XM, EXxmm }, 0 },
592d1631
L
8366 { Bad_Opcode },
8367 { Bad_Opcode },
8368 { Bad_Opcode },
8369 { Bad_Opcode },
5dd85c99 8370 /* d0 */
592d1631 8371 { Bad_Opcode },
bf890a93
IT
8372 { "vphaddubw", { XM, EXxmm }, 0 },
8373 { "vphaddubd", { XM, EXxmm }, 0 },
8374 { "vphaddubq", { XM, EXxmm }, 0 },
592d1631
L
8375 { Bad_Opcode },
8376 { Bad_Opcode },
bf890a93
IT
8377 { "vphadduwd", { XM, EXxmm }, 0 },
8378 { "vphadduwq", { XM, EXxmm }, 0 },
5dd85c99 8379 /* d8 */
592d1631
L
8380 { Bad_Opcode },
8381 { Bad_Opcode },
8382 { Bad_Opcode },
bf890a93 8383 { "vphaddudq", { XM, EXxmm }, 0 },
592d1631
L
8384 { Bad_Opcode },
8385 { Bad_Opcode },
8386 { Bad_Opcode },
8387 { Bad_Opcode },
5dd85c99 8388 /* e0 */
592d1631 8389 { Bad_Opcode },
bf890a93
IT
8390 { "vphsubbw", { XM, EXxmm }, 0 },
8391 { "vphsubwd", { XM, EXxmm }, 0 },
8392 { "vphsubdq", { XM, EXxmm }, 0 },
592d1631
L
8393 { Bad_Opcode },
8394 { Bad_Opcode },
8395 { Bad_Opcode },
8396 { Bad_Opcode },
4e7d34a6 8397 /* e8 */
592d1631
L
8398 { Bad_Opcode },
8399 { Bad_Opcode },
8400 { Bad_Opcode },
8401 { Bad_Opcode },
8402 { Bad_Opcode },
8403 { Bad_Opcode },
8404 { Bad_Opcode },
8405 { Bad_Opcode },
4e7d34a6 8406 /* f0 */
592d1631
L
8407 { Bad_Opcode },
8408 { Bad_Opcode },
8409 { Bad_Opcode },
8410 { Bad_Opcode },
8411 { Bad_Opcode },
8412 { Bad_Opcode },
8413 { Bad_Opcode },
8414 { Bad_Opcode },
4e7d34a6 8415 /* f8 */
592d1631
L
8416 { Bad_Opcode },
8417 { Bad_Opcode },
8418 { Bad_Opcode },
8419 { Bad_Opcode },
8420 { Bad_Opcode },
8421 { Bad_Opcode },
8422 { Bad_Opcode },
8423 { Bad_Opcode },
4e7d34a6 8424 },
f88c9eb0 8425 /* XOP_0A */
4e7d34a6
L
8426 {
8427 /* 00 */
592d1631
L
8428 { Bad_Opcode },
8429 { Bad_Opcode },
8430 { Bad_Opcode },
8431 { Bad_Opcode },
8432 { Bad_Opcode },
8433 { Bad_Opcode },
8434 { Bad_Opcode },
8435 { Bad_Opcode },
4e7d34a6 8436 /* 08 */
592d1631
L
8437 { Bad_Opcode },
8438 { Bad_Opcode },
8439 { Bad_Opcode },
8440 { Bad_Opcode },
8441 { Bad_Opcode },
8442 { Bad_Opcode },
8443 { Bad_Opcode },
8444 { Bad_Opcode },
4e7d34a6 8445 /* 10 */
bf890a93 8446 { "bextr", { Gv, Ev, Iq }, 0 },
592d1631 8447 { Bad_Opcode },
f88c9eb0 8448 { REG_TABLE (REG_XOP_LWP) },
592d1631
L
8449 { Bad_Opcode },
8450 { Bad_Opcode },
8451 { Bad_Opcode },
8452 { Bad_Opcode },
8453 { Bad_Opcode },
4e7d34a6 8454 /* 18 */
592d1631
L
8455 { Bad_Opcode },
8456 { Bad_Opcode },
8457 { Bad_Opcode },
8458 { Bad_Opcode },
8459 { Bad_Opcode },
8460 { Bad_Opcode },
8461 { Bad_Opcode },
8462 { Bad_Opcode },
4e7d34a6 8463 /* 20 */
592d1631
L
8464 { Bad_Opcode },
8465 { Bad_Opcode },
8466 { Bad_Opcode },
8467 { Bad_Opcode },
8468 { Bad_Opcode },
8469 { Bad_Opcode },
8470 { Bad_Opcode },
8471 { Bad_Opcode },
4e7d34a6 8472 /* 28 */
592d1631
L
8473 { Bad_Opcode },
8474 { Bad_Opcode },
8475 { Bad_Opcode },
8476 { Bad_Opcode },
8477 { Bad_Opcode },
8478 { Bad_Opcode },
8479 { Bad_Opcode },
8480 { Bad_Opcode },
4e7d34a6 8481 /* 30 */
592d1631
L
8482 { Bad_Opcode },
8483 { Bad_Opcode },
8484 { Bad_Opcode },
8485 { Bad_Opcode },
8486 { Bad_Opcode },
8487 { Bad_Opcode },
8488 { Bad_Opcode },
8489 { Bad_Opcode },
c0f3af97 8490 /* 38 */
592d1631
L
8491 { Bad_Opcode },
8492 { Bad_Opcode },
8493 { Bad_Opcode },
8494 { Bad_Opcode },
8495 { Bad_Opcode },
8496 { Bad_Opcode },
8497 { Bad_Opcode },
8498 { Bad_Opcode },
c0f3af97 8499 /* 40 */
592d1631
L
8500 { Bad_Opcode },
8501 { Bad_Opcode },
8502 { Bad_Opcode },
8503 { Bad_Opcode },
8504 { Bad_Opcode },
8505 { Bad_Opcode },
8506 { Bad_Opcode },
8507 { Bad_Opcode },
c1e679ec 8508 /* 48 */
592d1631
L
8509 { Bad_Opcode },
8510 { Bad_Opcode },
8511 { Bad_Opcode },
8512 { Bad_Opcode },
8513 { Bad_Opcode },
8514 { Bad_Opcode },
8515 { Bad_Opcode },
8516 { Bad_Opcode },
c1e679ec 8517 /* 50 */
592d1631
L
8518 { Bad_Opcode },
8519 { Bad_Opcode },
8520 { Bad_Opcode },
8521 { Bad_Opcode },
8522 { Bad_Opcode },
8523 { Bad_Opcode },
8524 { Bad_Opcode },
8525 { Bad_Opcode },
4e7d34a6 8526 /* 58 */
592d1631
L
8527 { Bad_Opcode },
8528 { Bad_Opcode },
8529 { Bad_Opcode },
8530 { Bad_Opcode },
8531 { Bad_Opcode },
8532 { Bad_Opcode },
8533 { Bad_Opcode },
8534 { Bad_Opcode },
4e7d34a6 8535 /* 60 */
592d1631
L
8536 { Bad_Opcode },
8537 { Bad_Opcode },
8538 { Bad_Opcode },
8539 { Bad_Opcode },
8540 { Bad_Opcode },
8541 { Bad_Opcode },
8542 { Bad_Opcode },
8543 { Bad_Opcode },
4e7d34a6 8544 /* 68 */
592d1631
L
8545 { Bad_Opcode },
8546 { Bad_Opcode },
8547 { Bad_Opcode },
8548 { Bad_Opcode },
8549 { Bad_Opcode },
8550 { Bad_Opcode },
8551 { Bad_Opcode },
8552 { Bad_Opcode },
4e7d34a6 8553 /* 70 */
592d1631
L
8554 { Bad_Opcode },
8555 { Bad_Opcode },
8556 { Bad_Opcode },
8557 { Bad_Opcode },
8558 { Bad_Opcode },
8559 { Bad_Opcode },
8560 { Bad_Opcode },
8561 { Bad_Opcode },
4e7d34a6 8562 /* 78 */
592d1631
L
8563 { Bad_Opcode },
8564 { Bad_Opcode },
8565 { Bad_Opcode },
8566 { Bad_Opcode },
8567 { Bad_Opcode },
8568 { Bad_Opcode },
8569 { Bad_Opcode },
8570 { Bad_Opcode },
4e7d34a6 8571 /* 80 */
592d1631
L
8572 { Bad_Opcode },
8573 { Bad_Opcode },
8574 { Bad_Opcode },
8575 { Bad_Opcode },
8576 { Bad_Opcode },
8577 { Bad_Opcode },
8578 { Bad_Opcode },
8579 { Bad_Opcode },
4e7d34a6 8580 /* 88 */
592d1631
L
8581 { Bad_Opcode },
8582 { Bad_Opcode },
8583 { Bad_Opcode },
8584 { Bad_Opcode },
8585 { Bad_Opcode },
8586 { Bad_Opcode },
8587 { Bad_Opcode },
8588 { Bad_Opcode },
4e7d34a6 8589 /* 90 */
592d1631
L
8590 { Bad_Opcode },
8591 { Bad_Opcode },
8592 { Bad_Opcode },
8593 { Bad_Opcode },
8594 { Bad_Opcode },
8595 { Bad_Opcode },
8596 { Bad_Opcode },
8597 { Bad_Opcode },
4e7d34a6 8598 /* 98 */
592d1631
L
8599 { Bad_Opcode },
8600 { Bad_Opcode },
8601 { Bad_Opcode },
8602 { Bad_Opcode },
8603 { Bad_Opcode },
8604 { Bad_Opcode },
8605 { Bad_Opcode },
8606 { Bad_Opcode },
4e7d34a6 8607 /* a0 */
592d1631
L
8608 { Bad_Opcode },
8609 { Bad_Opcode },
8610 { Bad_Opcode },
8611 { Bad_Opcode },
8612 { Bad_Opcode },
8613 { Bad_Opcode },
8614 { Bad_Opcode },
8615 { Bad_Opcode },
4e7d34a6 8616 /* a8 */
592d1631
L
8617 { Bad_Opcode },
8618 { Bad_Opcode },
8619 { Bad_Opcode },
8620 { Bad_Opcode },
8621 { Bad_Opcode },
8622 { Bad_Opcode },
8623 { Bad_Opcode },
8624 { Bad_Opcode },
d5d7db8e 8625 /* b0 */
592d1631
L
8626 { Bad_Opcode },
8627 { Bad_Opcode },
8628 { Bad_Opcode },
8629 { Bad_Opcode },
8630 { Bad_Opcode },
8631 { Bad_Opcode },
8632 { Bad_Opcode },
8633 { Bad_Opcode },
85f10a01 8634 /* b8 */
592d1631
L
8635 { Bad_Opcode },
8636 { Bad_Opcode },
8637 { Bad_Opcode },
8638 { Bad_Opcode },
8639 { Bad_Opcode },
8640 { Bad_Opcode },
8641 { Bad_Opcode },
8642 { Bad_Opcode },
85f10a01 8643 /* c0 */
592d1631
L
8644 { Bad_Opcode },
8645 { Bad_Opcode },
8646 { Bad_Opcode },
8647 { Bad_Opcode },
8648 { Bad_Opcode },
8649 { Bad_Opcode },
8650 { Bad_Opcode },
8651 { Bad_Opcode },
85f10a01 8652 /* c8 */
592d1631
L
8653 { Bad_Opcode },
8654 { Bad_Opcode },
8655 { Bad_Opcode },
8656 { Bad_Opcode },
8657 { Bad_Opcode },
8658 { Bad_Opcode },
8659 { Bad_Opcode },
8660 { Bad_Opcode },
85f10a01 8661 /* d0 */
592d1631
L
8662 { Bad_Opcode },
8663 { Bad_Opcode },
8664 { Bad_Opcode },
8665 { Bad_Opcode },
8666 { Bad_Opcode },
8667 { Bad_Opcode },
8668 { Bad_Opcode },
8669 { Bad_Opcode },
85f10a01 8670 /* d8 */
592d1631
L
8671 { Bad_Opcode },
8672 { Bad_Opcode },
8673 { Bad_Opcode },
8674 { Bad_Opcode },
8675 { Bad_Opcode },
8676 { Bad_Opcode },
8677 { Bad_Opcode },
8678 { Bad_Opcode },
85f10a01 8679 /* e0 */
592d1631
L
8680 { Bad_Opcode },
8681 { Bad_Opcode },
8682 { Bad_Opcode },
8683 { Bad_Opcode },
8684 { Bad_Opcode },
8685 { Bad_Opcode },
8686 { Bad_Opcode },
8687 { Bad_Opcode },
85f10a01 8688 /* e8 */
592d1631
L
8689 { Bad_Opcode },
8690 { Bad_Opcode },
8691 { Bad_Opcode },
8692 { Bad_Opcode },
8693 { Bad_Opcode },
8694 { Bad_Opcode },
8695 { Bad_Opcode },
8696 { Bad_Opcode },
85f10a01 8697 /* f0 */
592d1631
L
8698 { Bad_Opcode },
8699 { Bad_Opcode },
8700 { Bad_Opcode },
8701 { Bad_Opcode },
8702 { Bad_Opcode },
8703 { Bad_Opcode },
8704 { Bad_Opcode },
8705 { Bad_Opcode },
85f10a01 8706 /* f8 */
592d1631
L
8707 { Bad_Opcode },
8708 { Bad_Opcode },
8709 { Bad_Opcode },
8710 { Bad_Opcode },
8711 { Bad_Opcode },
8712 { Bad_Opcode },
8713 { Bad_Opcode },
8714 { Bad_Opcode },
85f10a01 8715 },
c0f3af97
L
8716};
8717
8718static const struct dis386 vex_table[][256] = {
8719 /* VEX_0F */
85f10a01
MM
8720 {
8721 /* 00 */
592d1631
L
8722 { Bad_Opcode },
8723 { Bad_Opcode },
8724 { Bad_Opcode },
8725 { Bad_Opcode },
8726 { Bad_Opcode },
8727 { Bad_Opcode },
8728 { Bad_Opcode },
8729 { Bad_Opcode },
85f10a01 8730 /* 08 */
592d1631
L
8731 { Bad_Opcode },
8732 { Bad_Opcode },
8733 { Bad_Opcode },
8734 { Bad_Opcode },
8735 { Bad_Opcode },
8736 { Bad_Opcode },
8737 { Bad_Opcode },
8738 { Bad_Opcode },
c0f3af97 8739 /* 10 */
592a252b
L
8740 { PREFIX_TABLE (PREFIX_VEX_0F10) },
8741 { PREFIX_TABLE (PREFIX_VEX_0F11) },
8742 { PREFIX_TABLE (PREFIX_VEX_0F12) },
8743 { MOD_TABLE (MOD_VEX_0F13) },
8744 { VEX_W_TABLE (VEX_W_0F14) },
8745 { VEX_W_TABLE (VEX_W_0F15) },
8746 { PREFIX_TABLE (PREFIX_VEX_0F16) },
8747 { MOD_TABLE (MOD_VEX_0F17) },
c0f3af97 8748 /* 18 */
592d1631
L
8749 { Bad_Opcode },
8750 { Bad_Opcode },
8751 { Bad_Opcode },
8752 { Bad_Opcode },
8753 { Bad_Opcode },
8754 { Bad_Opcode },
8755 { Bad_Opcode },
8756 { Bad_Opcode },
c0f3af97 8757 /* 20 */
592d1631
L
8758 { Bad_Opcode },
8759 { Bad_Opcode },
8760 { Bad_Opcode },
8761 { Bad_Opcode },
8762 { Bad_Opcode },
8763 { Bad_Opcode },
8764 { Bad_Opcode },
8765 { Bad_Opcode },
c0f3af97 8766 /* 28 */
592a252b
L
8767 { VEX_W_TABLE (VEX_W_0F28) },
8768 { VEX_W_TABLE (VEX_W_0F29) },
8769 { PREFIX_TABLE (PREFIX_VEX_0F2A) },
8770 { MOD_TABLE (MOD_VEX_0F2B) },
8771 { PREFIX_TABLE (PREFIX_VEX_0F2C) },
8772 { PREFIX_TABLE (PREFIX_VEX_0F2D) },
8773 { PREFIX_TABLE (PREFIX_VEX_0F2E) },
8774 { PREFIX_TABLE (PREFIX_VEX_0F2F) },
85f10a01 8775 /* 30 */
592d1631
L
8776 { Bad_Opcode },
8777 { Bad_Opcode },
8778 { Bad_Opcode },
8779 { Bad_Opcode },
8780 { Bad_Opcode },
8781 { Bad_Opcode },
8782 { Bad_Opcode },
8783 { Bad_Opcode },
4e7d34a6 8784 /* 38 */
592d1631
L
8785 { Bad_Opcode },
8786 { Bad_Opcode },
8787 { Bad_Opcode },
8788 { Bad_Opcode },
8789 { Bad_Opcode },
8790 { Bad_Opcode },
8791 { Bad_Opcode },
8792 { Bad_Opcode },
d5d7db8e 8793 /* 40 */
592d1631 8794 { Bad_Opcode },
43234a1e
L
8795 { PREFIX_TABLE (PREFIX_VEX_0F41) },
8796 { PREFIX_TABLE (PREFIX_VEX_0F42) },
592d1631 8797 { Bad_Opcode },
43234a1e
L
8798 { PREFIX_TABLE (PREFIX_VEX_0F44) },
8799 { PREFIX_TABLE (PREFIX_VEX_0F45) },
8800 { PREFIX_TABLE (PREFIX_VEX_0F46) },
8801 { PREFIX_TABLE (PREFIX_VEX_0F47) },
85f10a01 8802 /* 48 */
592d1631
L
8803 { Bad_Opcode },
8804 { Bad_Opcode },
1ba585e8 8805 { PREFIX_TABLE (PREFIX_VEX_0F4A) },
43234a1e 8806 { PREFIX_TABLE (PREFIX_VEX_0F4B) },
592d1631
L
8807 { Bad_Opcode },
8808 { Bad_Opcode },
8809 { Bad_Opcode },
8810 { Bad_Opcode },
d5d7db8e 8811 /* 50 */
592a252b
L
8812 { MOD_TABLE (MOD_VEX_0F50) },
8813 { PREFIX_TABLE (PREFIX_VEX_0F51) },
8814 { PREFIX_TABLE (PREFIX_VEX_0F52) },
8815 { PREFIX_TABLE (PREFIX_VEX_0F53) },
bf890a93
IT
8816 { "vandpX", { XM, Vex, EXx }, 0 },
8817 { "vandnpX", { XM, Vex, EXx }, 0 },
8818 { "vorpX", { XM, Vex, EXx }, 0 },
8819 { "vxorpX", { XM, Vex, EXx }, 0 },
c0f3af97 8820 /* 58 */
592a252b
L
8821 { PREFIX_TABLE (PREFIX_VEX_0F58) },
8822 { PREFIX_TABLE (PREFIX_VEX_0F59) },
8823 { PREFIX_TABLE (PREFIX_VEX_0F5A) },
8824 { PREFIX_TABLE (PREFIX_VEX_0F5B) },
8825 { PREFIX_TABLE (PREFIX_VEX_0F5C) },
8826 { PREFIX_TABLE (PREFIX_VEX_0F5D) },
8827 { PREFIX_TABLE (PREFIX_VEX_0F5E) },
8828 { PREFIX_TABLE (PREFIX_VEX_0F5F) },
c0f3af97 8829 /* 60 */
592a252b
L
8830 { PREFIX_TABLE (PREFIX_VEX_0F60) },
8831 { PREFIX_TABLE (PREFIX_VEX_0F61) },
8832 { PREFIX_TABLE (PREFIX_VEX_0F62) },
8833 { PREFIX_TABLE (PREFIX_VEX_0F63) },
8834 { PREFIX_TABLE (PREFIX_VEX_0F64) },
8835 { PREFIX_TABLE (PREFIX_VEX_0F65) },
8836 { PREFIX_TABLE (PREFIX_VEX_0F66) },
8837 { PREFIX_TABLE (PREFIX_VEX_0F67) },
c0f3af97 8838 /* 68 */
592a252b
L
8839 { PREFIX_TABLE (PREFIX_VEX_0F68) },
8840 { PREFIX_TABLE (PREFIX_VEX_0F69) },
8841 { PREFIX_TABLE (PREFIX_VEX_0F6A) },
8842 { PREFIX_TABLE (PREFIX_VEX_0F6B) },
8843 { PREFIX_TABLE (PREFIX_VEX_0F6C) },
8844 { PREFIX_TABLE (PREFIX_VEX_0F6D) },
8845 { PREFIX_TABLE (PREFIX_VEX_0F6E) },
8846 { PREFIX_TABLE (PREFIX_VEX_0F6F) },
c0f3af97 8847 /* 70 */
592a252b
L
8848 { PREFIX_TABLE (PREFIX_VEX_0F70) },
8849 { REG_TABLE (REG_VEX_0F71) },
8850 { REG_TABLE (REG_VEX_0F72) },
8851 { REG_TABLE (REG_VEX_0F73) },
8852 { PREFIX_TABLE (PREFIX_VEX_0F74) },
8853 { PREFIX_TABLE (PREFIX_VEX_0F75) },
8854 { PREFIX_TABLE (PREFIX_VEX_0F76) },
8855 { PREFIX_TABLE (PREFIX_VEX_0F77) },
c0f3af97 8856 /* 78 */
592d1631
L
8857 { Bad_Opcode },
8858 { Bad_Opcode },
8859 { Bad_Opcode },
8860 { Bad_Opcode },
592a252b
L
8861 { PREFIX_TABLE (PREFIX_VEX_0F7C) },
8862 { PREFIX_TABLE (PREFIX_VEX_0F7D) },
8863 { PREFIX_TABLE (PREFIX_VEX_0F7E) },
8864 { PREFIX_TABLE (PREFIX_VEX_0F7F) },
c0f3af97 8865 /* 80 */
592d1631
L
8866 { Bad_Opcode },
8867 { Bad_Opcode },
8868 { Bad_Opcode },
8869 { Bad_Opcode },
8870 { Bad_Opcode },
8871 { Bad_Opcode },
8872 { Bad_Opcode },
8873 { Bad_Opcode },
c0f3af97 8874 /* 88 */
592d1631
L
8875 { Bad_Opcode },
8876 { Bad_Opcode },
8877 { Bad_Opcode },
8878 { Bad_Opcode },
8879 { Bad_Opcode },
8880 { Bad_Opcode },
8881 { Bad_Opcode },
8882 { Bad_Opcode },
c0f3af97 8883 /* 90 */
43234a1e
L
8884 { PREFIX_TABLE (PREFIX_VEX_0F90) },
8885 { PREFIX_TABLE (PREFIX_VEX_0F91) },
8886 { PREFIX_TABLE (PREFIX_VEX_0F92) },
8887 { PREFIX_TABLE (PREFIX_VEX_0F93) },
592d1631
L
8888 { Bad_Opcode },
8889 { Bad_Opcode },
8890 { Bad_Opcode },
8891 { Bad_Opcode },
c0f3af97 8892 /* 98 */
43234a1e 8893 { PREFIX_TABLE (PREFIX_VEX_0F98) },
1ba585e8 8894 { PREFIX_TABLE (PREFIX_VEX_0F99) },
592d1631
L
8895 { Bad_Opcode },
8896 { Bad_Opcode },
8897 { Bad_Opcode },
8898 { Bad_Opcode },
8899 { Bad_Opcode },
8900 { Bad_Opcode },
c0f3af97 8901 /* a0 */
592d1631
L
8902 { Bad_Opcode },
8903 { Bad_Opcode },
8904 { Bad_Opcode },
8905 { Bad_Opcode },
8906 { Bad_Opcode },
8907 { Bad_Opcode },
8908 { Bad_Opcode },
8909 { Bad_Opcode },
c0f3af97 8910 /* a8 */
592d1631
L
8911 { Bad_Opcode },
8912 { Bad_Opcode },
8913 { Bad_Opcode },
8914 { Bad_Opcode },
8915 { Bad_Opcode },
8916 { Bad_Opcode },
592a252b 8917 { REG_TABLE (REG_VEX_0FAE) },
592d1631 8918 { Bad_Opcode },
c0f3af97 8919 /* b0 */
592d1631
L
8920 { Bad_Opcode },
8921 { Bad_Opcode },
8922 { Bad_Opcode },
8923 { Bad_Opcode },
8924 { Bad_Opcode },
8925 { Bad_Opcode },
8926 { Bad_Opcode },
8927 { Bad_Opcode },
c0f3af97 8928 /* b8 */
592d1631
L
8929 { Bad_Opcode },
8930 { Bad_Opcode },
8931 { Bad_Opcode },
8932 { Bad_Opcode },
8933 { Bad_Opcode },
8934 { Bad_Opcode },
8935 { Bad_Opcode },
8936 { Bad_Opcode },
c0f3af97 8937 /* c0 */
592d1631
L
8938 { Bad_Opcode },
8939 { Bad_Opcode },
592a252b 8940 { PREFIX_TABLE (PREFIX_VEX_0FC2) },
592d1631 8941 { Bad_Opcode },
592a252b
L
8942 { PREFIX_TABLE (PREFIX_VEX_0FC4) },
8943 { PREFIX_TABLE (PREFIX_VEX_0FC5) },
bf890a93 8944 { "vshufpX", { XM, Vex, EXx, Ib }, 0 },
592d1631 8945 { Bad_Opcode },
c0f3af97 8946 /* c8 */
592d1631
L
8947 { Bad_Opcode },
8948 { Bad_Opcode },
8949 { Bad_Opcode },
8950 { Bad_Opcode },
8951 { Bad_Opcode },
8952 { Bad_Opcode },
8953 { Bad_Opcode },
8954 { Bad_Opcode },
c0f3af97 8955 /* d0 */
592a252b
L
8956 { PREFIX_TABLE (PREFIX_VEX_0FD0) },
8957 { PREFIX_TABLE (PREFIX_VEX_0FD1) },
8958 { PREFIX_TABLE (PREFIX_VEX_0FD2) },
8959 { PREFIX_TABLE (PREFIX_VEX_0FD3) },
8960 { PREFIX_TABLE (PREFIX_VEX_0FD4) },
8961 { PREFIX_TABLE (PREFIX_VEX_0FD5) },
8962 { PREFIX_TABLE (PREFIX_VEX_0FD6) },
8963 { PREFIX_TABLE (PREFIX_VEX_0FD7) },
c0f3af97 8964 /* d8 */
592a252b
L
8965 { PREFIX_TABLE (PREFIX_VEX_0FD8) },
8966 { PREFIX_TABLE (PREFIX_VEX_0FD9) },
8967 { PREFIX_TABLE (PREFIX_VEX_0FDA) },
8968 { PREFIX_TABLE (PREFIX_VEX_0FDB) },
8969 { PREFIX_TABLE (PREFIX_VEX_0FDC) },
8970 { PREFIX_TABLE (PREFIX_VEX_0FDD) },
8971 { PREFIX_TABLE (PREFIX_VEX_0FDE) },
8972 { PREFIX_TABLE (PREFIX_VEX_0FDF) },
c0f3af97 8973 /* e0 */
592a252b
L
8974 { PREFIX_TABLE (PREFIX_VEX_0FE0) },
8975 { PREFIX_TABLE (PREFIX_VEX_0FE1) },
8976 { PREFIX_TABLE (PREFIX_VEX_0FE2) },
8977 { PREFIX_TABLE (PREFIX_VEX_0FE3) },
8978 { PREFIX_TABLE (PREFIX_VEX_0FE4) },
8979 { PREFIX_TABLE (PREFIX_VEX_0FE5) },
8980 { PREFIX_TABLE (PREFIX_VEX_0FE6) },
8981 { PREFIX_TABLE (PREFIX_VEX_0FE7) },
c0f3af97 8982 /* e8 */
592a252b
L
8983 { PREFIX_TABLE (PREFIX_VEX_0FE8) },
8984 { PREFIX_TABLE (PREFIX_VEX_0FE9) },
8985 { PREFIX_TABLE (PREFIX_VEX_0FEA) },
8986 { PREFIX_TABLE (PREFIX_VEX_0FEB) },
8987 { PREFIX_TABLE (PREFIX_VEX_0FEC) },
8988 { PREFIX_TABLE (PREFIX_VEX_0FED) },
8989 { PREFIX_TABLE (PREFIX_VEX_0FEE) },
8990 { PREFIX_TABLE (PREFIX_VEX_0FEF) },
c0f3af97 8991 /* f0 */
592a252b
L
8992 { PREFIX_TABLE (PREFIX_VEX_0FF0) },
8993 { PREFIX_TABLE (PREFIX_VEX_0FF1) },
8994 { PREFIX_TABLE (PREFIX_VEX_0FF2) },
8995 { PREFIX_TABLE (PREFIX_VEX_0FF3) },
8996 { PREFIX_TABLE (PREFIX_VEX_0FF4) },
8997 { PREFIX_TABLE (PREFIX_VEX_0FF5) },
8998 { PREFIX_TABLE (PREFIX_VEX_0FF6) },
8999 { PREFIX_TABLE (PREFIX_VEX_0FF7) },
c0f3af97 9000 /* f8 */
592a252b
L
9001 { PREFIX_TABLE (PREFIX_VEX_0FF8) },
9002 { PREFIX_TABLE (PREFIX_VEX_0FF9) },
9003 { PREFIX_TABLE (PREFIX_VEX_0FFA) },
9004 { PREFIX_TABLE (PREFIX_VEX_0FFB) },
9005 { PREFIX_TABLE (PREFIX_VEX_0FFC) },
9006 { PREFIX_TABLE (PREFIX_VEX_0FFD) },
9007 { PREFIX_TABLE (PREFIX_VEX_0FFE) },
592d1631 9008 { Bad_Opcode },
c0f3af97
L
9009 },
9010 /* VEX_0F38 */
9011 {
9012 /* 00 */
592a252b
L
9013 { PREFIX_TABLE (PREFIX_VEX_0F3800) },
9014 { PREFIX_TABLE (PREFIX_VEX_0F3801) },
9015 { PREFIX_TABLE (PREFIX_VEX_0F3802) },
9016 { PREFIX_TABLE (PREFIX_VEX_0F3803) },
9017 { PREFIX_TABLE (PREFIX_VEX_0F3804) },
9018 { PREFIX_TABLE (PREFIX_VEX_0F3805) },
9019 { PREFIX_TABLE (PREFIX_VEX_0F3806) },
9020 { PREFIX_TABLE (PREFIX_VEX_0F3807) },
c0f3af97 9021 /* 08 */
592a252b
L
9022 { PREFIX_TABLE (PREFIX_VEX_0F3808) },
9023 { PREFIX_TABLE (PREFIX_VEX_0F3809) },
9024 { PREFIX_TABLE (PREFIX_VEX_0F380A) },
9025 { PREFIX_TABLE (PREFIX_VEX_0F380B) },
9026 { PREFIX_TABLE (PREFIX_VEX_0F380C) },
9027 { PREFIX_TABLE (PREFIX_VEX_0F380D) },
9028 { PREFIX_TABLE (PREFIX_VEX_0F380E) },
9029 { PREFIX_TABLE (PREFIX_VEX_0F380F) },
c0f3af97 9030 /* 10 */
592d1631
L
9031 { Bad_Opcode },
9032 { Bad_Opcode },
9033 { Bad_Opcode },
592a252b 9034 { PREFIX_TABLE (PREFIX_VEX_0F3813) },
592d1631
L
9035 { Bad_Opcode },
9036 { Bad_Opcode },
6c30d220 9037 { PREFIX_TABLE (PREFIX_VEX_0F3816) },
592a252b 9038 { PREFIX_TABLE (PREFIX_VEX_0F3817) },
c0f3af97 9039 /* 18 */
592a252b
L
9040 { PREFIX_TABLE (PREFIX_VEX_0F3818) },
9041 { PREFIX_TABLE (PREFIX_VEX_0F3819) },
9042 { PREFIX_TABLE (PREFIX_VEX_0F381A) },
592d1631 9043 { Bad_Opcode },
592a252b
L
9044 { PREFIX_TABLE (PREFIX_VEX_0F381C) },
9045 { PREFIX_TABLE (PREFIX_VEX_0F381D) },
9046 { PREFIX_TABLE (PREFIX_VEX_0F381E) },
592d1631 9047 { Bad_Opcode },
c0f3af97 9048 /* 20 */
592a252b
L
9049 { PREFIX_TABLE (PREFIX_VEX_0F3820) },
9050 { PREFIX_TABLE (PREFIX_VEX_0F3821) },
9051 { PREFIX_TABLE (PREFIX_VEX_0F3822) },
9052 { PREFIX_TABLE (PREFIX_VEX_0F3823) },
9053 { PREFIX_TABLE (PREFIX_VEX_0F3824) },
9054 { PREFIX_TABLE (PREFIX_VEX_0F3825) },
592d1631
L
9055 { Bad_Opcode },
9056 { Bad_Opcode },
c0f3af97 9057 /* 28 */
592a252b
L
9058 { PREFIX_TABLE (PREFIX_VEX_0F3828) },
9059 { PREFIX_TABLE (PREFIX_VEX_0F3829) },
9060 { PREFIX_TABLE (PREFIX_VEX_0F382A) },
9061 { PREFIX_TABLE (PREFIX_VEX_0F382B) },
9062 { PREFIX_TABLE (PREFIX_VEX_0F382C) },
9063 { PREFIX_TABLE (PREFIX_VEX_0F382D) },
9064 { PREFIX_TABLE (PREFIX_VEX_0F382E) },
9065 { PREFIX_TABLE (PREFIX_VEX_0F382F) },
c0f3af97 9066 /* 30 */
592a252b
L
9067 { PREFIX_TABLE (PREFIX_VEX_0F3830) },
9068 { PREFIX_TABLE (PREFIX_VEX_0F3831) },
9069 { PREFIX_TABLE (PREFIX_VEX_0F3832) },
9070 { PREFIX_TABLE (PREFIX_VEX_0F3833) },
9071 { PREFIX_TABLE (PREFIX_VEX_0F3834) },
9072 { PREFIX_TABLE (PREFIX_VEX_0F3835) },
6c30d220 9073 { PREFIX_TABLE (PREFIX_VEX_0F3836) },
592a252b 9074 { PREFIX_TABLE (PREFIX_VEX_0F3837) },
c0f3af97 9075 /* 38 */
592a252b
L
9076 { PREFIX_TABLE (PREFIX_VEX_0F3838) },
9077 { PREFIX_TABLE (PREFIX_VEX_0F3839) },
9078 { PREFIX_TABLE (PREFIX_VEX_0F383A) },
9079 { PREFIX_TABLE (PREFIX_VEX_0F383B) },
9080 { PREFIX_TABLE (PREFIX_VEX_0F383C) },
9081 { PREFIX_TABLE (PREFIX_VEX_0F383D) },
9082 { PREFIX_TABLE (PREFIX_VEX_0F383E) },
9083 { PREFIX_TABLE (PREFIX_VEX_0F383F) },
c0f3af97 9084 /* 40 */
592a252b
L
9085 { PREFIX_TABLE (PREFIX_VEX_0F3840) },
9086 { PREFIX_TABLE (PREFIX_VEX_0F3841) },
592d1631
L
9087 { Bad_Opcode },
9088 { Bad_Opcode },
9089 { Bad_Opcode },
6c30d220
L
9090 { PREFIX_TABLE (PREFIX_VEX_0F3845) },
9091 { PREFIX_TABLE (PREFIX_VEX_0F3846) },
9092 { PREFIX_TABLE (PREFIX_VEX_0F3847) },
c0f3af97 9093 /* 48 */
592d1631
L
9094 { Bad_Opcode },
9095 { Bad_Opcode },
9096 { Bad_Opcode },
9097 { Bad_Opcode },
9098 { Bad_Opcode },
9099 { Bad_Opcode },
9100 { Bad_Opcode },
9101 { Bad_Opcode },
c0f3af97 9102 /* 50 */
592d1631
L
9103 { Bad_Opcode },
9104 { Bad_Opcode },
9105 { Bad_Opcode },
9106 { Bad_Opcode },
9107 { Bad_Opcode },
9108 { Bad_Opcode },
9109 { Bad_Opcode },
9110 { Bad_Opcode },
c0f3af97 9111 /* 58 */
6c30d220
L
9112 { PREFIX_TABLE (PREFIX_VEX_0F3858) },
9113 { PREFIX_TABLE (PREFIX_VEX_0F3859) },
9114 { PREFIX_TABLE (PREFIX_VEX_0F385A) },
592d1631
L
9115 { Bad_Opcode },
9116 { Bad_Opcode },
9117 { Bad_Opcode },
9118 { Bad_Opcode },
9119 { Bad_Opcode },
c0f3af97 9120 /* 60 */
592d1631
L
9121 { Bad_Opcode },
9122 { Bad_Opcode },
9123 { Bad_Opcode },
9124 { Bad_Opcode },
9125 { Bad_Opcode },
9126 { Bad_Opcode },
9127 { Bad_Opcode },
9128 { Bad_Opcode },
c0f3af97 9129 /* 68 */
592d1631
L
9130 { Bad_Opcode },
9131 { Bad_Opcode },
9132 { Bad_Opcode },
9133 { Bad_Opcode },
9134 { Bad_Opcode },
9135 { Bad_Opcode },
9136 { Bad_Opcode },
9137 { Bad_Opcode },
c0f3af97 9138 /* 70 */
592d1631
L
9139 { Bad_Opcode },
9140 { Bad_Opcode },
9141 { Bad_Opcode },
9142 { Bad_Opcode },
9143 { Bad_Opcode },
9144 { Bad_Opcode },
9145 { Bad_Opcode },
9146 { Bad_Opcode },
c0f3af97 9147 /* 78 */
6c30d220
L
9148 { PREFIX_TABLE (PREFIX_VEX_0F3878) },
9149 { PREFIX_TABLE (PREFIX_VEX_0F3879) },
592d1631
L
9150 { Bad_Opcode },
9151 { Bad_Opcode },
9152 { Bad_Opcode },
9153 { Bad_Opcode },
9154 { Bad_Opcode },
9155 { Bad_Opcode },
c0f3af97 9156 /* 80 */
592d1631
L
9157 { Bad_Opcode },
9158 { Bad_Opcode },
9159 { Bad_Opcode },
9160 { Bad_Opcode },
9161 { Bad_Opcode },
9162 { Bad_Opcode },
9163 { Bad_Opcode },
9164 { Bad_Opcode },
c0f3af97 9165 /* 88 */
592d1631
L
9166 { Bad_Opcode },
9167 { Bad_Opcode },
9168 { Bad_Opcode },
9169 { Bad_Opcode },
6c30d220 9170 { PREFIX_TABLE (PREFIX_VEX_0F388C) },
592d1631 9171 { Bad_Opcode },
6c30d220 9172 { PREFIX_TABLE (PREFIX_VEX_0F388E) },
592d1631 9173 { Bad_Opcode },
c0f3af97 9174 /* 90 */
6c30d220
L
9175 { PREFIX_TABLE (PREFIX_VEX_0F3890) },
9176 { PREFIX_TABLE (PREFIX_VEX_0F3891) },
9177 { PREFIX_TABLE (PREFIX_VEX_0F3892) },
9178 { PREFIX_TABLE (PREFIX_VEX_0F3893) },
592d1631
L
9179 { Bad_Opcode },
9180 { Bad_Opcode },
592a252b
L
9181 { PREFIX_TABLE (PREFIX_VEX_0F3896) },
9182 { PREFIX_TABLE (PREFIX_VEX_0F3897) },
c0f3af97 9183 /* 98 */
592a252b
L
9184 { PREFIX_TABLE (PREFIX_VEX_0F3898) },
9185 { PREFIX_TABLE (PREFIX_VEX_0F3899) },
9186 { PREFIX_TABLE (PREFIX_VEX_0F389A) },
9187 { PREFIX_TABLE (PREFIX_VEX_0F389B) },
9188 { PREFIX_TABLE (PREFIX_VEX_0F389C) },
9189 { PREFIX_TABLE (PREFIX_VEX_0F389D) },
9190 { PREFIX_TABLE (PREFIX_VEX_0F389E) },
9191 { PREFIX_TABLE (PREFIX_VEX_0F389F) },
c0f3af97 9192 /* a0 */
592d1631
L
9193 { Bad_Opcode },
9194 { Bad_Opcode },
9195 { Bad_Opcode },
9196 { Bad_Opcode },
9197 { Bad_Opcode },
9198 { Bad_Opcode },
592a252b
L
9199 { PREFIX_TABLE (PREFIX_VEX_0F38A6) },
9200 { PREFIX_TABLE (PREFIX_VEX_0F38A7) },
c0f3af97 9201 /* a8 */
592a252b
L
9202 { PREFIX_TABLE (PREFIX_VEX_0F38A8) },
9203 { PREFIX_TABLE (PREFIX_VEX_0F38A9) },
9204 { PREFIX_TABLE (PREFIX_VEX_0F38AA) },
9205 { PREFIX_TABLE (PREFIX_VEX_0F38AB) },
9206 { PREFIX_TABLE (PREFIX_VEX_0F38AC) },
9207 { PREFIX_TABLE (PREFIX_VEX_0F38AD) },
9208 { PREFIX_TABLE (PREFIX_VEX_0F38AE) },
9209 { PREFIX_TABLE (PREFIX_VEX_0F38AF) },
c0f3af97 9210 /* b0 */
592d1631
L
9211 { Bad_Opcode },
9212 { Bad_Opcode },
9213 { Bad_Opcode },
9214 { Bad_Opcode },
9215 { Bad_Opcode },
9216 { Bad_Opcode },
592a252b
L
9217 { PREFIX_TABLE (PREFIX_VEX_0F38B6) },
9218 { PREFIX_TABLE (PREFIX_VEX_0F38B7) },
c0f3af97 9219 /* b8 */
592a252b
L
9220 { PREFIX_TABLE (PREFIX_VEX_0F38B8) },
9221 { PREFIX_TABLE (PREFIX_VEX_0F38B9) },
9222 { PREFIX_TABLE (PREFIX_VEX_0F38BA) },
9223 { PREFIX_TABLE (PREFIX_VEX_0F38BB) },
9224 { PREFIX_TABLE (PREFIX_VEX_0F38BC) },
9225 { PREFIX_TABLE (PREFIX_VEX_0F38BD) },
9226 { PREFIX_TABLE (PREFIX_VEX_0F38BE) },
9227 { PREFIX_TABLE (PREFIX_VEX_0F38BF) },
c0f3af97 9228 /* c0 */
592d1631
L
9229 { Bad_Opcode },
9230 { Bad_Opcode },
9231 { Bad_Opcode },
9232 { Bad_Opcode },
9233 { Bad_Opcode },
9234 { Bad_Opcode },
9235 { Bad_Opcode },
9236 { Bad_Opcode },
c0f3af97 9237 /* c8 */
592d1631
L
9238 { Bad_Opcode },
9239 { Bad_Opcode },
9240 { Bad_Opcode },
9241 { Bad_Opcode },
9242 { Bad_Opcode },
9243 { Bad_Opcode },
9244 { Bad_Opcode },
9245 { Bad_Opcode },
c0f3af97 9246 /* d0 */
592d1631
L
9247 { Bad_Opcode },
9248 { Bad_Opcode },
9249 { Bad_Opcode },
9250 { Bad_Opcode },
9251 { Bad_Opcode },
9252 { Bad_Opcode },
9253 { Bad_Opcode },
9254 { Bad_Opcode },
c0f3af97 9255 /* d8 */
592d1631
L
9256 { Bad_Opcode },
9257 { Bad_Opcode },
9258 { Bad_Opcode },
592a252b
L
9259 { PREFIX_TABLE (PREFIX_VEX_0F38DB) },
9260 { PREFIX_TABLE (PREFIX_VEX_0F38DC) },
9261 { PREFIX_TABLE (PREFIX_VEX_0F38DD) },
9262 { PREFIX_TABLE (PREFIX_VEX_0F38DE) },
9263 { PREFIX_TABLE (PREFIX_VEX_0F38DF) },
c0f3af97 9264 /* e0 */
592d1631
L
9265 { Bad_Opcode },
9266 { Bad_Opcode },
9267 { Bad_Opcode },
9268 { Bad_Opcode },
9269 { Bad_Opcode },
9270 { Bad_Opcode },
9271 { Bad_Opcode },
9272 { Bad_Opcode },
c0f3af97 9273 /* e8 */
592d1631
L
9274 { Bad_Opcode },
9275 { Bad_Opcode },
9276 { Bad_Opcode },
9277 { Bad_Opcode },
9278 { Bad_Opcode },
9279 { Bad_Opcode },
9280 { Bad_Opcode },
9281 { Bad_Opcode },
c0f3af97 9282 /* f0 */
592d1631
L
9283 { Bad_Opcode },
9284 { Bad_Opcode },
f12dc422
L
9285 { PREFIX_TABLE (PREFIX_VEX_0F38F2) },
9286 { REG_TABLE (REG_VEX_0F38F3) },
592d1631 9287 { Bad_Opcode },
6c30d220
L
9288 { PREFIX_TABLE (PREFIX_VEX_0F38F5) },
9289 { PREFIX_TABLE (PREFIX_VEX_0F38F6) },
f12dc422 9290 { PREFIX_TABLE (PREFIX_VEX_0F38F7) },
c0f3af97 9291 /* f8 */
592d1631
L
9292 { Bad_Opcode },
9293 { Bad_Opcode },
9294 { Bad_Opcode },
9295 { Bad_Opcode },
9296 { Bad_Opcode },
9297 { Bad_Opcode },
9298 { Bad_Opcode },
9299 { Bad_Opcode },
c0f3af97
L
9300 },
9301 /* VEX_0F3A */
9302 {
9303 /* 00 */
6c30d220
L
9304 { PREFIX_TABLE (PREFIX_VEX_0F3A00) },
9305 { PREFIX_TABLE (PREFIX_VEX_0F3A01) },
9306 { PREFIX_TABLE (PREFIX_VEX_0F3A02) },
592d1631 9307 { Bad_Opcode },
592a252b
L
9308 { PREFIX_TABLE (PREFIX_VEX_0F3A04) },
9309 { PREFIX_TABLE (PREFIX_VEX_0F3A05) },
9310 { PREFIX_TABLE (PREFIX_VEX_0F3A06) },
592d1631 9311 { Bad_Opcode },
c0f3af97 9312 /* 08 */
592a252b
L
9313 { PREFIX_TABLE (PREFIX_VEX_0F3A08) },
9314 { PREFIX_TABLE (PREFIX_VEX_0F3A09) },
9315 { PREFIX_TABLE (PREFIX_VEX_0F3A0A) },
9316 { PREFIX_TABLE (PREFIX_VEX_0F3A0B) },
9317 { PREFIX_TABLE (PREFIX_VEX_0F3A0C) },
9318 { PREFIX_TABLE (PREFIX_VEX_0F3A0D) },
9319 { PREFIX_TABLE (PREFIX_VEX_0F3A0E) },
9320 { PREFIX_TABLE (PREFIX_VEX_0F3A0F) },
c0f3af97 9321 /* 10 */
592d1631
L
9322 { Bad_Opcode },
9323 { Bad_Opcode },
9324 { Bad_Opcode },
9325 { Bad_Opcode },
592a252b
L
9326 { PREFIX_TABLE (PREFIX_VEX_0F3A14) },
9327 { PREFIX_TABLE (PREFIX_VEX_0F3A15) },
9328 { PREFIX_TABLE (PREFIX_VEX_0F3A16) },
9329 { PREFIX_TABLE (PREFIX_VEX_0F3A17) },
c0f3af97 9330 /* 18 */
592a252b
L
9331 { PREFIX_TABLE (PREFIX_VEX_0F3A18) },
9332 { PREFIX_TABLE (PREFIX_VEX_0F3A19) },
592d1631
L
9333 { Bad_Opcode },
9334 { Bad_Opcode },
9335 { Bad_Opcode },
592a252b 9336 { PREFIX_TABLE (PREFIX_VEX_0F3A1D) },
592d1631
L
9337 { Bad_Opcode },
9338 { Bad_Opcode },
c0f3af97 9339 /* 20 */
592a252b
L
9340 { PREFIX_TABLE (PREFIX_VEX_0F3A20) },
9341 { PREFIX_TABLE (PREFIX_VEX_0F3A21) },
9342 { PREFIX_TABLE (PREFIX_VEX_0F3A22) },
592d1631
L
9343 { Bad_Opcode },
9344 { Bad_Opcode },
9345 { Bad_Opcode },
9346 { Bad_Opcode },
9347 { Bad_Opcode },
c0f3af97 9348 /* 28 */
592d1631
L
9349 { Bad_Opcode },
9350 { Bad_Opcode },
9351 { Bad_Opcode },
9352 { Bad_Opcode },
9353 { Bad_Opcode },
9354 { Bad_Opcode },
9355 { Bad_Opcode },
9356 { Bad_Opcode },
c0f3af97 9357 /* 30 */
43234a1e 9358 { PREFIX_TABLE (PREFIX_VEX_0F3A30) },
1ba585e8 9359 { PREFIX_TABLE (PREFIX_VEX_0F3A31) },
43234a1e 9360 { PREFIX_TABLE (PREFIX_VEX_0F3A32) },
1ba585e8 9361 { PREFIX_TABLE (PREFIX_VEX_0F3A33) },
592d1631
L
9362 { Bad_Opcode },
9363 { Bad_Opcode },
9364 { Bad_Opcode },
9365 { Bad_Opcode },
c0f3af97 9366 /* 38 */
6c30d220
L
9367 { PREFIX_TABLE (PREFIX_VEX_0F3A38) },
9368 { PREFIX_TABLE (PREFIX_VEX_0F3A39) },
592d1631
L
9369 { Bad_Opcode },
9370 { Bad_Opcode },
9371 { Bad_Opcode },
9372 { Bad_Opcode },
9373 { Bad_Opcode },
9374 { Bad_Opcode },
c0f3af97 9375 /* 40 */
592a252b
L
9376 { PREFIX_TABLE (PREFIX_VEX_0F3A40) },
9377 { PREFIX_TABLE (PREFIX_VEX_0F3A41) },
9378 { PREFIX_TABLE (PREFIX_VEX_0F3A42) },
592d1631 9379 { Bad_Opcode },
592a252b 9380 { PREFIX_TABLE (PREFIX_VEX_0F3A44) },
592d1631 9381 { Bad_Opcode },
6c30d220 9382 { PREFIX_TABLE (PREFIX_VEX_0F3A46) },
592d1631 9383 { Bad_Opcode },
c0f3af97 9384 /* 48 */
592a252b
L
9385 { PREFIX_TABLE (PREFIX_VEX_0F3A48) },
9386 { PREFIX_TABLE (PREFIX_VEX_0F3A49) },
9387 { PREFIX_TABLE (PREFIX_VEX_0F3A4A) },
9388 { PREFIX_TABLE (PREFIX_VEX_0F3A4B) },
9389 { PREFIX_TABLE (PREFIX_VEX_0F3A4C) },
592d1631
L
9390 { Bad_Opcode },
9391 { Bad_Opcode },
9392 { Bad_Opcode },
c0f3af97 9393 /* 50 */
592d1631
L
9394 { Bad_Opcode },
9395 { Bad_Opcode },
9396 { Bad_Opcode },
9397 { Bad_Opcode },
9398 { Bad_Opcode },
9399 { Bad_Opcode },
9400 { Bad_Opcode },
9401 { Bad_Opcode },
c0f3af97 9402 /* 58 */
592d1631
L
9403 { Bad_Opcode },
9404 { Bad_Opcode },
9405 { Bad_Opcode },
9406 { Bad_Opcode },
592a252b
L
9407 { PREFIX_TABLE (PREFIX_VEX_0F3A5C) },
9408 { PREFIX_TABLE (PREFIX_VEX_0F3A5D) },
9409 { PREFIX_TABLE (PREFIX_VEX_0F3A5E) },
9410 { PREFIX_TABLE (PREFIX_VEX_0F3A5F) },
c0f3af97 9411 /* 60 */
592a252b
L
9412 { PREFIX_TABLE (PREFIX_VEX_0F3A60) },
9413 { PREFIX_TABLE (PREFIX_VEX_0F3A61) },
9414 { PREFIX_TABLE (PREFIX_VEX_0F3A62) },
9415 { PREFIX_TABLE (PREFIX_VEX_0F3A63) },
592d1631
L
9416 { Bad_Opcode },
9417 { Bad_Opcode },
9418 { Bad_Opcode },
9419 { Bad_Opcode },
c0f3af97 9420 /* 68 */
592a252b
L
9421 { PREFIX_TABLE (PREFIX_VEX_0F3A68) },
9422 { PREFIX_TABLE (PREFIX_VEX_0F3A69) },
9423 { PREFIX_TABLE (PREFIX_VEX_0F3A6A) },
9424 { PREFIX_TABLE (PREFIX_VEX_0F3A6B) },
9425 { PREFIX_TABLE (PREFIX_VEX_0F3A6C) },
9426 { PREFIX_TABLE (PREFIX_VEX_0F3A6D) },
9427 { PREFIX_TABLE (PREFIX_VEX_0F3A6E) },
9428 { PREFIX_TABLE (PREFIX_VEX_0F3A6F) },
c0f3af97 9429 /* 70 */
592d1631
L
9430 { Bad_Opcode },
9431 { Bad_Opcode },
9432 { Bad_Opcode },
9433 { Bad_Opcode },
9434 { Bad_Opcode },
9435 { Bad_Opcode },
9436 { Bad_Opcode },
9437 { Bad_Opcode },
c0f3af97 9438 /* 78 */
592a252b
L
9439 { PREFIX_TABLE (PREFIX_VEX_0F3A78) },
9440 { PREFIX_TABLE (PREFIX_VEX_0F3A79) },
9441 { PREFIX_TABLE (PREFIX_VEX_0F3A7A) },
9442 { PREFIX_TABLE (PREFIX_VEX_0F3A7B) },
9443 { PREFIX_TABLE (PREFIX_VEX_0F3A7C) },
9444 { PREFIX_TABLE (PREFIX_VEX_0F3A7D) },
9445 { PREFIX_TABLE (PREFIX_VEX_0F3A7E) },
9446 { PREFIX_TABLE (PREFIX_VEX_0F3A7F) },
c0f3af97 9447 /* 80 */
592d1631
L
9448 { Bad_Opcode },
9449 { Bad_Opcode },
9450 { Bad_Opcode },
9451 { Bad_Opcode },
9452 { Bad_Opcode },
9453 { Bad_Opcode },
9454 { Bad_Opcode },
9455 { Bad_Opcode },
c0f3af97 9456 /* 88 */
592d1631
L
9457 { Bad_Opcode },
9458 { Bad_Opcode },
9459 { Bad_Opcode },
9460 { Bad_Opcode },
9461 { Bad_Opcode },
9462 { Bad_Opcode },
9463 { Bad_Opcode },
9464 { Bad_Opcode },
c0f3af97 9465 /* 90 */
592d1631
L
9466 { Bad_Opcode },
9467 { Bad_Opcode },
9468 { Bad_Opcode },
9469 { Bad_Opcode },
9470 { Bad_Opcode },
9471 { Bad_Opcode },
9472 { Bad_Opcode },
9473 { Bad_Opcode },
c0f3af97 9474 /* 98 */
592d1631
L
9475 { Bad_Opcode },
9476 { Bad_Opcode },
9477 { Bad_Opcode },
9478 { Bad_Opcode },
9479 { Bad_Opcode },
9480 { Bad_Opcode },
9481 { Bad_Opcode },
9482 { Bad_Opcode },
c0f3af97 9483 /* a0 */
592d1631
L
9484 { Bad_Opcode },
9485 { Bad_Opcode },
9486 { Bad_Opcode },
9487 { Bad_Opcode },
9488 { Bad_Opcode },
9489 { Bad_Opcode },
9490 { Bad_Opcode },
9491 { Bad_Opcode },
c0f3af97 9492 /* a8 */
592d1631
L
9493 { Bad_Opcode },
9494 { Bad_Opcode },
9495 { Bad_Opcode },
9496 { Bad_Opcode },
9497 { Bad_Opcode },
9498 { Bad_Opcode },
9499 { Bad_Opcode },
9500 { Bad_Opcode },
c0f3af97 9501 /* b0 */
592d1631
L
9502 { Bad_Opcode },
9503 { Bad_Opcode },
9504 { Bad_Opcode },
9505 { Bad_Opcode },
9506 { Bad_Opcode },
9507 { Bad_Opcode },
9508 { Bad_Opcode },
9509 { Bad_Opcode },
c0f3af97 9510 /* b8 */
592d1631
L
9511 { Bad_Opcode },
9512 { Bad_Opcode },
9513 { Bad_Opcode },
9514 { Bad_Opcode },
9515 { Bad_Opcode },
9516 { Bad_Opcode },
9517 { Bad_Opcode },
9518 { Bad_Opcode },
c0f3af97 9519 /* c0 */
592d1631
L
9520 { Bad_Opcode },
9521 { Bad_Opcode },
9522 { Bad_Opcode },
9523 { Bad_Opcode },
9524 { Bad_Opcode },
9525 { Bad_Opcode },
9526 { Bad_Opcode },
9527 { Bad_Opcode },
c0f3af97 9528 /* c8 */
592d1631
L
9529 { Bad_Opcode },
9530 { Bad_Opcode },
9531 { Bad_Opcode },
9532 { Bad_Opcode },
9533 { Bad_Opcode },
9534 { Bad_Opcode },
9535 { Bad_Opcode },
9536 { Bad_Opcode },
c0f3af97 9537 /* d0 */
592d1631
L
9538 { Bad_Opcode },
9539 { Bad_Opcode },
9540 { Bad_Opcode },
9541 { Bad_Opcode },
9542 { Bad_Opcode },
9543 { Bad_Opcode },
9544 { Bad_Opcode },
9545 { Bad_Opcode },
c0f3af97 9546 /* d8 */
592d1631
L
9547 { Bad_Opcode },
9548 { Bad_Opcode },
9549 { Bad_Opcode },
9550 { Bad_Opcode },
9551 { Bad_Opcode },
9552 { Bad_Opcode },
9553 { Bad_Opcode },
592a252b 9554 { PREFIX_TABLE (PREFIX_VEX_0F3ADF) },
c0f3af97 9555 /* e0 */
592d1631
L
9556 { Bad_Opcode },
9557 { Bad_Opcode },
9558 { Bad_Opcode },
9559 { Bad_Opcode },
9560 { Bad_Opcode },
9561 { Bad_Opcode },
9562 { Bad_Opcode },
9563 { Bad_Opcode },
c0f3af97 9564 /* e8 */
592d1631
L
9565 { Bad_Opcode },
9566 { Bad_Opcode },
9567 { Bad_Opcode },
9568 { Bad_Opcode },
9569 { Bad_Opcode },
9570 { Bad_Opcode },
9571 { Bad_Opcode },
9572 { Bad_Opcode },
c0f3af97 9573 /* f0 */
6c30d220 9574 { PREFIX_TABLE (PREFIX_VEX_0F3AF0) },
592d1631
L
9575 { Bad_Opcode },
9576 { Bad_Opcode },
9577 { Bad_Opcode },
9578 { Bad_Opcode },
9579 { Bad_Opcode },
9580 { Bad_Opcode },
9581 { Bad_Opcode },
c0f3af97 9582 /* f8 */
592d1631
L
9583 { Bad_Opcode },
9584 { Bad_Opcode },
9585 { Bad_Opcode },
9586 { Bad_Opcode },
9587 { Bad_Opcode },
9588 { Bad_Opcode },
9589 { Bad_Opcode },
9590 { Bad_Opcode },
c0f3af97
L
9591 },
9592};
9593
43234a1e
L
9594#define NEED_OPCODE_TABLE
9595#include "i386-dis-evex.h"
9596#undef NEED_OPCODE_TABLE
c0f3af97 9597static const struct dis386 vex_len_table[][2] = {
592a252b 9598 /* VEX_LEN_0F10_P_1 */
c0f3af97 9599 {
592a252b
L
9600 { VEX_W_TABLE (VEX_W_0F10_P_1) },
9601 { VEX_W_TABLE (VEX_W_0F10_P_1) },
c0f3af97
L
9602 },
9603
592a252b 9604 /* VEX_LEN_0F10_P_3 */
c0f3af97 9605 {
592a252b
L
9606 { VEX_W_TABLE (VEX_W_0F10_P_3) },
9607 { VEX_W_TABLE (VEX_W_0F10_P_3) },
c0f3af97
L
9608 },
9609
592a252b 9610 /* VEX_LEN_0F11_P_1 */
c0f3af97 9611 {
592a252b
L
9612 { VEX_W_TABLE (VEX_W_0F11_P_1) },
9613 { VEX_W_TABLE (VEX_W_0F11_P_1) },
c0f3af97
L
9614 },
9615
592a252b 9616 /* VEX_LEN_0F11_P_3 */
c0f3af97 9617 {
592a252b
L
9618 { VEX_W_TABLE (VEX_W_0F11_P_3) },
9619 { VEX_W_TABLE (VEX_W_0F11_P_3) },
c0f3af97
L
9620 },
9621
592a252b 9622 /* VEX_LEN_0F12_P_0_M_0 */
c0f3af97 9623 {
592a252b 9624 { VEX_W_TABLE (VEX_W_0F12_P_0_M_0) },
c0f3af97
L
9625 },
9626
592a252b 9627 /* VEX_LEN_0F12_P_0_M_1 */
c0f3af97 9628 {
592a252b 9629 { VEX_W_TABLE (VEX_W_0F12_P_0_M_1) },
c0f3af97
L
9630 },
9631
592a252b 9632 /* VEX_LEN_0F12_P_2 */
c0f3af97 9633 {
592a252b 9634 { VEX_W_TABLE (VEX_W_0F12_P_2) },
c0f3af97
L
9635 },
9636
592a252b 9637 /* VEX_LEN_0F13_M_0 */
c0f3af97 9638 {
592a252b 9639 { VEX_W_TABLE (VEX_W_0F13_M_0) },
c0f3af97
L
9640 },
9641
592a252b 9642 /* VEX_LEN_0F16_P_0_M_0 */
c0f3af97 9643 {
592a252b 9644 { VEX_W_TABLE (VEX_W_0F16_P_0_M_0) },
c0f3af97
L
9645 },
9646
592a252b 9647 /* VEX_LEN_0F16_P_0_M_1 */
c0f3af97 9648 {
592a252b 9649 { VEX_W_TABLE (VEX_W_0F16_P_0_M_1) },
c0f3af97
L
9650 },
9651
592a252b 9652 /* VEX_LEN_0F16_P_2 */
c0f3af97 9653 {
592a252b 9654 { VEX_W_TABLE (VEX_W_0F16_P_2) },
c0f3af97
L
9655 },
9656
592a252b 9657 /* VEX_LEN_0F17_M_0 */
c0f3af97 9658 {
592a252b 9659 { VEX_W_TABLE (VEX_W_0F17_M_0) },
c0f3af97
L
9660 },
9661
592a252b 9662 /* VEX_LEN_0F2A_P_1 */
c0f3af97 9663 {
bf890a93
IT
9664 { "vcvtsi2ss%LQ", { XMScalar, VexScalar, Ev }, 0 },
9665 { "vcvtsi2ss%LQ", { XMScalar, VexScalar, Ev }, 0 },
c0f3af97
L
9666 },
9667
592a252b 9668 /* VEX_LEN_0F2A_P_3 */
c0f3af97 9669 {
bf890a93
IT
9670 { "vcvtsi2sd%LQ", { XMScalar, VexScalar, Ev }, 0 },
9671 { "vcvtsi2sd%LQ", { XMScalar, VexScalar, Ev }, 0 },
c0f3af97
L
9672 },
9673
592a252b 9674 /* VEX_LEN_0F2C_P_1 */
c0f3af97 9675 {
bf890a93
IT
9676 { "vcvttss2siY", { Gv, EXdScalar }, 0 },
9677 { "vcvttss2siY", { Gv, EXdScalar }, 0 },
c0f3af97
L
9678 },
9679
592a252b 9680 /* VEX_LEN_0F2C_P_3 */
c0f3af97 9681 {
bf890a93
IT
9682 { "vcvttsd2siY", { Gv, EXqScalar }, 0 },
9683 { "vcvttsd2siY", { Gv, EXqScalar }, 0 },
c0f3af97
L
9684 },
9685
592a252b 9686 /* VEX_LEN_0F2D_P_1 */
c0f3af97 9687 {
bf890a93
IT
9688 { "vcvtss2siY", { Gv, EXdScalar }, 0 },
9689 { "vcvtss2siY", { Gv, EXdScalar }, 0 },
c0f3af97
L
9690 },
9691
592a252b 9692 /* VEX_LEN_0F2D_P_3 */
c0f3af97 9693 {
bf890a93
IT
9694 { "vcvtsd2siY", { Gv, EXqScalar }, 0 },
9695 { "vcvtsd2siY", { Gv, EXqScalar }, 0 },
c0f3af97
L
9696 },
9697
592a252b 9698 /* VEX_LEN_0F2E_P_0 */
c0f3af97 9699 {
592a252b
L
9700 { VEX_W_TABLE (VEX_W_0F2E_P_0) },
9701 { VEX_W_TABLE (VEX_W_0F2E_P_0) },
c0f3af97
L
9702 },
9703
592a252b 9704 /* VEX_LEN_0F2E_P_2 */
c0f3af97 9705 {
592a252b
L
9706 { VEX_W_TABLE (VEX_W_0F2E_P_2) },
9707 { VEX_W_TABLE (VEX_W_0F2E_P_2) },
c0f3af97
L
9708 },
9709
592a252b 9710 /* VEX_LEN_0F2F_P_0 */
c0f3af97 9711 {
592a252b
L
9712 { VEX_W_TABLE (VEX_W_0F2F_P_0) },
9713 { VEX_W_TABLE (VEX_W_0F2F_P_0) },
c0f3af97
L
9714 },
9715
592a252b 9716 /* VEX_LEN_0F2F_P_2 */
c0f3af97 9717 {
592a252b
L
9718 { VEX_W_TABLE (VEX_W_0F2F_P_2) },
9719 { VEX_W_TABLE (VEX_W_0F2F_P_2) },
c0f3af97
L
9720 },
9721
43234a1e
L
9722 /* VEX_LEN_0F41_P_0 */
9723 {
9724 { Bad_Opcode },
9725 { VEX_W_TABLE (VEX_W_0F41_P_0_LEN_1) },
9726 },
1ba585e8
IT
9727 /* VEX_LEN_0F41_P_2 */
9728 {
9729 { Bad_Opcode },
9730 { VEX_W_TABLE (VEX_W_0F41_P_2_LEN_1) },
9731 },
43234a1e
L
9732 /* VEX_LEN_0F42_P_0 */
9733 {
9734 { Bad_Opcode },
9735 { VEX_W_TABLE (VEX_W_0F42_P_0_LEN_1) },
9736 },
1ba585e8
IT
9737 /* VEX_LEN_0F42_P_2 */
9738 {
9739 { Bad_Opcode },
9740 { VEX_W_TABLE (VEX_W_0F42_P_2_LEN_1) },
9741 },
43234a1e
L
9742 /* VEX_LEN_0F44_P_0 */
9743 {
9744 { VEX_W_TABLE (VEX_W_0F44_P_0_LEN_0) },
9745 },
1ba585e8
IT
9746 /* VEX_LEN_0F44_P_2 */
9747 {
9748 { VEX_W_TABLE (VEX_W_0F44_P_2_LEN_0) },
9749 },
43234a1e
L
9750 /* VEX_LEN_0F45_P_0 */
9751 {
9752 { Bad_Opcode },
9753 { VEX_W_TABLE (VEX_W_0F45_P_0_LEN_1) },
9754 },
1ba585e8
IT
9755 /* VEX_LEN_0F45_P_2 */
9756 {
9757 { Bad_Opcode },
9758 { VEX_W_TABLE (VEX_W_0F45_P_2_LEN_1) },
9759 },
43234a1e
L
9760 /* VEX_LEN_0F46_P_0 */
9761 {
9762 { Bad_Opcode },
9763 { VEX_W_TABLE (VEX_W_0F46_P_0_LEN_1) },
9764 },
1ba585e8
IT
9765 /* VEX_LEN_0F46_P_2 */
9766 {
9767 { Bad_Opcode },
9768 { VEX_W_TABLE (VEX_W_0F46_P_2_LEN_1) },
9769 },
43234a1e
L
9770 /* VEX_LEN_0F47_P_0 */
9771 {
9772 { Bad_Opcode },
9773 { VEX_W_TABLE (VEX_W_0F47_P_0_LEN_1) },
9774 },
1ba585e8
IT
9775 /* VEX_LEN_0F47_P_2 */
9776 {
9777 { Bad_Opcode },
9778 { VEX_W_TABLE (VEX_W_0F47_P_2_LEN_1) },
9779 },
9780 /* VEX_LEN_0F4A_P_0 */
9781 {
9782 { Bad_Opcode },
9783 { VEX_W_TABLE (VEX_W_0F4A_P_0_LEN_1) },
9784 },
9785 /* VEX_LEN_0F4A_P_2 */
9786 {
9787 { Bad_Opcode },
9788 { VEX_W_TABLE (VEX_W_0F4A_P_2_LEN_1) },
9789 },
9790 /* VEX_LEN_0F4B_P_0 */
9791 {
9792 { Bad_Opcode },
9793 { VEX_W_TABLE (VEX_W_0F4B_P_0_LEN_1) },
9794 },
43234a1e
L
9795 /* VEX_LEN_0F4B_P_2 */
9796 {
9797 { Bad_Opcode },
9798 { VEX_W_TABLE (VEX_W_0F4B_P_2_LEN_1) },
9799 },
9800
592a252b 9801 /* VEX_LEN_0F51_P_1 */
c0f3af97 9802 {
592a252b
L
9803 { VEX_W_TABLE (VEX_W_0F51_P_1) },
9804 { VEX_W_TABLE (VEX_W_0F51_P_1) },
c0f3af97
L
9805 },
9806
592a252b 9807 /* VEX_LEN_0F51_P_3 */
c0f3af97 9808 {
592a252b
L
9809 { VEX_W_TABLE (VEX_W_0F51_P_3) },
9810 { VEX_W_TABLE (VEX_W_0F51_P_3) },
c0f3af97
L
9811 },
9812
592a252b 9813 /* VEX_LEN_0F52_P_1 */
c0f3af97 9814 {
592a252b
L
9815 { VEX_W_TABLE (VEX_W_0F52_P_1) },
9816 { VEX_W_TABLE (VEX_W_0F52_P_1) },
c0f3af97
L
9817 },
9818
592a252b 9819 /* VEX_LEN_0F53_P_1 */
c0f3af97 9820 {
592a252b
L
9821 { VEX_W_TABLE (VEX_W_0F53_P_1) },
9822 { VEX_W_TABLE (VEX_W_0F53_P_1) },
c0f3af97
L
9823 },
9824
592a252b 9825 /* VEX_LEN_0F58_P_1 */
c0f3af97 9826 {
592a252b
L
9827 { VEX_W_TABLE (VEX_W_0F58_P_1) },
9828 { VEX_W_TABLE (VEX_W_0F58_P_1) },
c0f3af97
L
9829 },
9830
592a252b 9831 /* VEX_LEN_0F58_P_3 */
c0f3af97 9832 {
592a252b
L
9833 { VEX_W_TABLE (VEX_W_0F58_P_3) },
9834 { VEX_W_TABLE (VEX_W_0F58_P_3) },
c0f3af97
L
9835 },
9836
592a252b 9837 /* VEX_LEN_0F59_P_1 */
c0f3af97 9838 {
592a252b
L
9839 { VEX_W_TABLE (VEX_W_0F59_P_1) },
9840 { VEX_W_TABLE (VEX_W_0F59_P_1) },
c0f3af97
L
9841 },
9842
592a252b 9843 /* VEX_LEN_0F59_P_3 */
c0f3af97 9844 {
592a252b
L
9845 { VEX_W_TABLE (VEX_W_0F59_P_3) },
9846 { VEX_W_TABLE (VEX_W_0F59_P_3) },
c0f3af97
L
9847 },
9848
592a252b 9849 /* VEX_LEN_0F5A_P_1 */
c0f3af97 9850 {
592a252b
L
9851 { VEX_W_TABLE (VEX_W_0F5A_P_1) },
9852 { VEX_W_TABLE (VEX_W_0F5A_P_1) },
c0f3af97
L
9853 },
9854
592a252b 9855 /* VEX_LEN_0F5A_P_3 */
c0f3af97 9856 {
592a252b
L
9857 { VEX_W_TABLE (VEX_W_0F5A_P_3) },
9858 { VEX_W_TABLE (VEX_W_0F5A_P_3) },
c0f3af97
L
9859 },
9860
592a252b 9861 /* VEX_LEN_0F5C_P_1 */
c0f3af97 9862 {
592a252b
L
9863 { VEX_W_TABLE (VEX_W_0F5C_P_1) },
9864 { VEX_W_TABLE (VEX_W_0F5C_P_1) },
c0f3af97
L
9865 },
9866
592a252b 9867 /* VEX_LEN_0F5C_P_3 */
c0f3af97 9868 {
592a252b
L
9869 { VEX_W_TABLE (VEX_W_0F5C_P_3) },
9870 { VEX_W_TABLE (VEX_W_0F5C_P_3) },
c0f3af97
L
9871 },
9872
592a252b 9873 /* VEX_LEN_0F5D_P_1 */
c0f3af97 9874 {
592a252b
L
9875 { VEX_W_TABLE (VEX_W_0F5D_P_1) },
9876 { VEX_W_TABLE (VEX_W_0F5D_P_1) },
c0f3af97
L
9877 },
9878
592a252b 9879 /* VEX_LEN_0F5D_P_3 */
c0f3af97 9880 {
592a252b
L
9881 { VEX_W_TABLE (VEX_W_0F5D_P_3) },
9882 { VEX_W_TABLE (VEX_W_0F5D_P_3) },
c0f3af97
L
9883 },
9884
592a252b 9885 /* VEX_LEN_0F5E_P_1 */
c0f3af97 9886 {
592a252b
L
9887 { VEX_W_TABLE (VEX_W_0F5E_P_1) },
9888 { VEX_W_TABLE (VEX_W_0F5E_P_1) },
c0f3af97
L
9889 },
9890
592a252b 9891 /* VEX_LEN_0F5E_P_3 */
c0f3af97 9892 {
592a252b
L
9893 { VEX_W_TABLE (VEX_W_0F5E_P_3) },
9894 { VEX_W_TABLE (VEX_W_0F5E_P_3) },
c0f3af97
L
9895 },
9896
592a252b 9897 /* VEX_LEN_0F5F_P_1 */
c0f3af97 9898 {
592a252b
L
9899 { VEX_W_TABLE (VEX_W_0F5F_P_1) },
9900 { VEX_W_TABLE (VEX_W_0F5F_P_1) },
c0f3af97
L
9901 },
9902
592a252b 9903 /* VEX_LEN_0F5F_P_3 */
c0f3af97 9904 {
592a252b
L
9905 { VEX_W_TABLE (VEX_W_0F5F_P_3) },
9906 { VEX_W_TABLE (VEX_W_0F5F_P_3) },
c0f3af97
L
9907 },
9908
592a252b 9909 /* VEX_LEN_0F6E_P_2 */
c0f3af97 9910 {
bf890a93
IT
9911 { "vmovK", { XMScalar, Edq }, 0 },
9912 { "vmovK", { XMScalar, Edq }, 0 },
c0f3af97
L
9913 },
9914
592a252b 9915 /* VEX_LEN_0F7E_P_1 */
c0f3af97 9916 {
592a252b
L
9917 { VEX_W_TABLE (VEX_W_0F7E_P_1) },
9918 { VEX_W_TABLE (VEX_W_0F7E_P_1) },
c0f3af97
L
9919 },
9920
592a252b 9921 /* VEX_LEN_0F7E_P_2 */
c0f3af97 9922 {
bf890a93
IT
9923 { "vmovK", { Edq, XMScalar }, 0 },
9924 { "vmovK", { Edq, XMScalar }, 0 },
c0f3af97
L
9925 },
9926
43234a1e
L
9927 /* VEX_LEN_0F90_P_0 */
9928 {
9929 { VEX_W_TABLE (VEX_W_0F90_P_0_LEN_0) },
9930 },
9931
1ba585e8
IT
9932 /* VEX_LEN_0F90_P_2 */
9933 {
9934 { VEX_W_TABLE (VEX_W_0F90_P_2_LEN_0) },
9935 },
9936
43234a1e
L
9937 /* VEX_LEN_0F91_P_0 */
9938 {
9939 { VEX_W_TABLE (VEX_W_0F91_P_0_LEN_0) },
9940 },
9941
1ba585e8
IT
9942 /* VEX_LEN_0F91_P_2 */
9943 {
9944 { VEX_W_TABLE (VEX_W_0F91_P_2_LEN_0) },
9945 },
9946
43234a1e
L
9947 /* VEX_LEN_0F92_P_0 */
9948 {
9949 { VEX_W_TABLE (VEX_W_0F92_P_0_LEN_0) },
9950 },
9951
90a915bf
IT
9952 /* VEX_LEN_0F92_P_2 */
9953 {
9954 { VEX_W_TABLE (VEX_W_0F92_P_2_LEN_0) },
9955 },
9956
1ba585e8
IT
9957 /* VEX_LEN_0F92_P_3 */
9958 {
9959 { VEX_W_TABLE (VEX_W_0F92_P_3_LEN_0) },
9960 },
9961
43234a1e
L
9962 /* VEX_LEN_0F93_P_0 */
9963 {
9964 { VEX_W_TABLE (VEX_W_0F93_P_0_LEN_0) },
9965 },
9966
90a915bf
IT
9967 /* VEX_LEN_0F93_P_2 */
9968 {
9969 { VEX_W_TABLE (VEX_W_0F93_P_2_LEN_0) },
9970 },
9971
1ba585e8
IT
9972 /* VEX_LEN_0F93_P_3 */
9973 {
9974 { VEX_W_TABLE (VEX_W_0F93_P_3_LEN_0) },
9975 },
9976
43234a1e
L
9977 /* VEX_LEN_0F98_P_0 */
9978 {
9979 { VEX_W_TABLE (VEX_W_0F98_P_0_LEN_0) },
9980 },
9981
1ba585e8
IT
9982 /* VEX_LEN_0F98_P_2 */
9983 {
9984 { VEX_W_TABLE (VEX_W_0F98_P_2_LEN_0) },
9985 },
9986
9987 /* VEX_LEN_0F99_P_0 */
9988 {
9989 { VEX_W_TABLE (VEX_W_0F99_P_0_LEN_0) },
9990 },
9991
9992 /* VEX_LEN_0F99_P_2 */
9993 {
9994 { VEX_W_TABLE (VEX_W_0F99_P_2_LEN_0) },
9995 },
9996
6c30d220 9997 /* VEX_LEN_0FAE_R_2_M_0 */
c0f3af97 9998 {
6c30d220 9999 { VEX_W_TABLE (VEX_W_0FAE_R_2_M_0) },
c0f3af97
L
10000 },
10001
6c30d220 10002 /* VEX_LEN_0FAE_R_3_M_0 */
c0f3af97 10003 {
6c30d220 10004 { VEX_W_TABLE (VEX_W_0FAE_R_3_M_0) },
c0f3af97
L
10005 },
10006
6c30d220 10007 /* VEX_LEN_0FC2_P_1 */
c0f3af97 10008 {
6c30d220
L
10009 { VEX_W_TABLE (VEX_W_0FC2_P_1) },
10010 { VEX_W_TABLE (VEX_W_0FC2_P_1) },
c0f3af97
L
10011 },
10012
6c30d220 10013 /* VEX_LEN_0FC2_P_3 */
c0f3af97 10014 {
6c30d220
L
10015 { VEX_W_TABLE (VEX_W_0FC2_P_3) },
10016 { VEX_W_TABLE (VEX_W_0FC2_P_3) },
c0f3af97
L
10017 },
10018
6c30d220 10019 /* VEX_LEN_0FC4_P_2 */
c0f3af97 10020 {
6c30d220 10021 { VEX_W_TABLE (VEX_W_0FC4_P_2) },
c0f3af97
L
10022 },
10023
6c30d220 10024 /* VEX_LEN_0FC5_P_2 */
c0f3af97 10025 {
6c30d220 10026 { VEX_W_TABLE (VEX_W_0FC5_P_2) },
c0f3af97
L
10027 },
10028
6c30d220 10029 /* VEX_LEN_0FD6_P_2 */
c0f3af97 10030 {
6c30d220
L
10031 { VEX_W_TABLE (VEX_W_0FD6_P_2) },
10032 { VEX_W_TABLE (VEX_W_0FD6_P_2) },
c0f3af97
L
10033 },
10034
6c30d220 10035 /* VEX_LEN_0FF7_P_2 */
c0f3af97 10036 {
6c30d220 10037 { VEX_W_TABLE (VEX_W_0FF7_P_2) },
c0f3af97
L
10038 },
10039
6c30d220 10040 /* VEX_LEN_0F3816_P_2 */
c0f3af97 10041 {
6c30d220
L
10042 { Bad_Opcode },
10043 { VEX_W_TABLE (VEX_W_0F3816_P_2) },
c0f3af97
L
10044 },
10045
6c30d220 10046 /* VEX_LEN_0F3819_P_2 */
c0f3af97 10047 {
6c30d220
L
10048 { Bad_Opcode },
10049 { VEX_W_TABLE (VEX_W_0F3819_P_2) },
c0f3af97
L
10050 },
10051
6c30d220 10052 /* VEX_LEN_0F381A_P_2_M_0 */
c0f3af97 10053 {
6c30d220
L
10054 { Bad_Opcode },
10055 { VEX_W_TABLE (VEX_W_0F381A_P_2_M_0) },
c0f3af97
L
10056 },
10057
6c30d220 10058 /* VEX_LEN_0F3836_P_2 */
c0f3af97 10059 {
6c30d220
L
10060 { Bad_Opcode },
10061 { VEX_W_TABLE (VEX_W_0F3836_P_2) },
c0f3af97
L
10062 },
10063
592a252b 10064 /* VEX_LEN_0F3841_P_2 */
c0f3af97 10065 {
592a252b 10066 { VEX_W_TABLE (VEX_W_0F3841_P_2) },
c0f3af97
L
10067 },
10068
6c30d220
L
10069 /* VEX_LEN_0F385A_P_2_M_0 */
10070 {
10071 { Bad_Opcode },
10072 { VEX_W_TABLE (VEX_W_0F385A_P_2_M_0) },
10073 },
10074
592a252b 10075 /* VEX_LEN_0F38DB_P_2 */
a5ff0eb2 10076 {
592a252b 10077 { VEX_W_TABLE (VEX_W_0F38DB_P_2) },
a5ff0eb2
L
10078 },
10079
592a252b 10080 /* VEX_LEN_0F38DC_P_2 */
a5ff0eb2 10081 {
592a252b 10082 { VEX_W_TABLE (VEX_W_0F38DC_P_2) },
a5ff0eb2
L
10083 },
10084
592a252b 10085 /* VEX_LEN_0F38DD_P_2 */
a5ff0eb2 10086 {
592a252b 10087 { VEX_W_TABLE (VEX_W_0F38DD_P_2) },
a5ff0eb2
L
10088 },
10089
592a252b 10090 /* VEX_LEN_0F38DE_P_2 */
a5ff0eb2 10091 {
592a252b 10092 { VEX_W_TABLE (VEX_W_0F38DE_P_2) },
a5ff0eb2
L
10093 },
10094
592a252b 10095 /* VEX_LEN_0F38DF_P_2 */
a5ff0eb2 10096 {
592a252b 10097 { VEX_W_TABLE (VEX_W_0F38DF_P_2) },
a5ff0eb2
L
10098 },
10099
f12dc422
L
10100 /* VEX_LEN_0F38F2_P_0 */
10101 {
bf890a93 10102 { "andnS", { Gdq, VexGdq, Edq }, 0 },
f12dc422
L
10103 },
10104
10105 /* VEX_LEN_0F38F3_R_1_P_0 */
10106 {
bf890a93 10107 { "blsrS", { VexGdq, Edq }, 0 },
f12dc422
L
10108 },
10109
10110 /* VEX_LEN_0F38F3_R_2_P_0 */
10111 {
bf890a93 10112 { "blsmskS", { VexGdq, Edq }, 0 },
f12dc422
L
10113 },
10114
10115 /* VEX_LEN_0F38F3_R_3_P_0 */
10116 {
bf890a93 10117 { "blsiS", { VexGdq, Edq }, 0 },
f12dc422
L
10118 },
10119
6c30d220
L
10120 /* VEX_LEN_0F38F5_P_0 */
10121 {
bf890a93 10122 { "bzhiS", { Gdq, Edq, VexGdq }, 0 },
6c30d220
L
10123 },
10124
10125 /* VEX_LEN_0F38F5_P_1 */
10126 {
bf890a93 10127 { "pextS", { Gdq, VexGdq, Edq }, 0 },
6c30d220
L
10128 },
10129
10130 /* VEX_LEN_0F38F5_P_3 */
10131 {
bf890a93 10132 { "pdepS", { Gdq, VexGdq, Edq }, 0 },
6c30d220
L
10133 },
10134
10135 /* VEX_LEN_0F38F6_P_3 */
10136 {
bf890a93 10137 { "mulxS", { Gdq, VexGdq, Edq }, 0 },
6c30d220
L
10138 },
10139
f12dc422
L
10140 /* VEX_LEN_0F38F7_P_0 */
10141 {
bf890a93 10142 { "bextrS", { Gdq, Edq, VexGdq }, 0 },
f12dc422
L
10143 },
10144
6c30d220
L
10145 /* VEX_LEN_0F38F7_P_1 */
10146 {
bf890a93 10147 { "sarxS", { Gdq, Edq, VexGdq }, 0 },
6c30d220
L
10148 },
10149
10150 /* VEX_LEN_0F38F7_P_2 */
10151 {
bf890a93 10152 { "shlxS", { Gdq, Edq, VexGdq }, 0 },
6c30d220
L
10153 },
10154
10155 /* VEX_LEN_0F38F7_P_3 */
10156 {
bf890a93 10157 { "shrxS", { Gdq, Edq, VexGdq }, 0 },
6c30d220
L
10158 },
10159
10160 /* VEX_LEN_0F3A00_P_2 */
10161 {
10162 { Bad_Opcode },
10163 { VEX_W_TABLE (VEX_W_0F3A00_P_2) },
10164 },
10165
10166 /* VEX_LEN_0F3A01_P_2 */
10167 {
10168 { Bad_Opcode },
10169 { VEX_W_TABLE (VEX_W_0F3A01_P_2) },
10170 },
10171
592a252b 10172 /* VEX_LEN_0F3A06_P_2 */
c0f3af97 10173 {
592d1631 10174 { Bad_Opcode },
592a252b 10175 { VEX_W_TABLE (VEX_W_0F3A06_P_2) },
c0f3af97
L
10176 },
10177
592a252b 10178 /* VEX_LEN_0F3A0A_P_2 */
c0f3af97 10179 {
592a252b
L
10180 { VEX_W_TABLE (VEX_W_0F3A0A_P_2) },
10181 { VEX_W_TABLE (VEX_W_0F3A0A_P_2) },
c0f3af97
L
10182 },
10183
592a252b 10184 /* VEX_LEN_0F3A0B_P_2 */
c0f3af97 10185 {
592a252b
L
10186 { VEX_W_TABLE (VEX_W_0F3A0B_P_2) },
10187 { VEX_W_TABLE (VEX_W_0F3A0B_P_2) },
c0f3af97
L
10188 },
10189
592a252b 10190 /* VEX_LEN_0F3A14_P_2 */
c0f3af97 10191 {
592a252b 10192 { VEX_W_TABLE (VEX_W_0F3A14_P_2) },
c0f3af97
L
10193 },
10194
592a252b 10195 /* VEX_LEN_0F3A15_P_2 */
c0f3af97 10196 {
592a252b 10197 { VEX_W_TABLE (VEX_W_0F3A15_P_2) },
c0f3af97
L
10198 },
10199
592a252b 10200 /* VEX_LEN_0F3A16_P_2 */
c0f3af97 10201 {
bf890a93 10202 { "vpextrK", { Edq, XM, Ib }, 0 },
c0f3af97
L
10203 },
10204
592a252b 10205 /* VEX_LEN_0F3A17_P_2 */
c0f3af97 10206 {
bf890a93 10207 { "vextractps", { Edqd, XM, Ib }, 0 },
c0f3af97
L
10208 },
10209
592a252b 10210 /* VEX_LEN_0F3A18_P_2 */
c0f3af97 10211 {
592d1631 10212 { Bad_Opcode },
592a252b 10213 { VEX_W_TABLE (VEX_W_0F3A18_P_2) },
c0f3af97
L
10214 },
10215
592a252b 10216 /* VEX_LEN_0F3A19_P_2 */
c0f3af97 10217 {
592d1631 10218 { Bad_Opcode },
592a252b 10219 { VEX_W_TABLE (VEX_W_0F3A19_P_2) },
c0f3af97
L
10220 },
10221
592a252b 10222 /* VEX_LEN_0F3A20_P_2 */
c0f3af97 10223 {
592a252b 10224 { VEX_W_TABLE (VEX_W_0F3A20_P_2) },
c0f3af97
L
10225 },
10226
592a252b 10227 /* VEX_LEN_0F3A21_P_2 */
c0f3af97 10228 {
592a252b 10229 { VEX_W_TABLE (VEX_W_0F3A21_P_2) },
c0f3af97
L
10230 },
10231
592a252b 10232 /* VEX_LEN_0F3A22_P_2 */
c0f3af97 10233 {
bf890a93 10234 { "vpinsrK", { XM, Vex128, Edq, Ib }, 0 },
c0f3af97
L
10235 },
10236
43234a1e
L
10237 /* VEX_LEN_0F3A30_P_2 */
10238 {
10239 { VEX_W_TABLE (VEX_W_0F3A30_P_2_LEN_0) },
10240 },
10241
1ba585e8
IT
10242 /* VEX_LEN_0F3A31_P_2 */
10243 {
10244 { VEX_W_TABLE (VEX_W_0F3A31_P_2_LEN_0) },
10245 },
10246
43234a1e
L
10247 /* VEX_LEN_0F3A32_P_2 */
10248 {
10249 { VEX_W_TABLE (VEX_W_0F3A32_P_2_LEN_0) },
10250 },
10251
1ba585e8
IT
10252 /* VEX_LEN_0F3A33_P_2 */
10253 {
10254 { VEX_W_TABLE (VEX_W_0F3A33_P_2_LEN_0) },
10255 },
10256
6c30d220 10257 /* VEX_LEN_0F3A38_P_2 */
c0f3af97 10258 {
6c30d220
L
10259 { Bad_Opcode },
10260 { VEX_W_TABLE (VEX_W_0F3A38_P_2) },
c0f3af97
L
10261 },
10262
6c30d220 10263 /* VEX_LEN_0F3A39_P_2 */
c0f3af97 10264 {
6c30d220
L
10265 { Bad_Opcode },
10266 { VEX_W_TABLE (VEX_W_0F3A39_P_2) },
10267 },
10268
10269 /* VEX_LEN_0F3A41_P_2 */
10270 {
10271 { VEX_W_TABLE (VEX_W_0F3A41_P_2) },
c0f3af97
L
10272 },
10273
592a252b 10274 /* VEX_LEN_0F3A44_P_2 */
ce2f5b3c 10275 {
592a252b 10276 { VEX_W_TABLE (VEX_W_0F3A44_P_2) },
ce2f5b3c
L
10277 },
10278
6c30d220 10279 /* VEX_LEN_0F3A46_P_2 */
c0f3af97 10280 {
6c30d220
L
10281 { Bad_Opcode },
10282 { VEX_W_TABLE (VEX_W_0F3A46_P_2) },
c0f3af97
L
10283 },
10284
592a252b 10285 /* VEX_LEN_0F3A60_P_2 */
c0f3af97 10286 {
592a252b 10287 { VEX_W_TABLE (VEX_W_0F3A60_P_2) },
c0f3af97
L
10288 },
10289
592a252b 10290 /* VEX_LEN_0F3A61_P_2 */
c0f3af97 10291 {
592a252b 10292 { VEX_W_TABLE (VEX_W_0F3A61_P_2) },
c0f3af97
L
10293 },
10294
592a252b 10295 /* VEX_LEN_0F3A62_P_2 */
c0f3af97 10296 {
592a252b 10297 { VEX_W_TABLE (VEX_W_0F3A62_P_2) },
c0f3af97
L
10298 },
10299
592a252b 10300 /* VEX_LEN_0F3A63_P_2 */
c0f3af97 10301 {
592a252b 10302 { VEX_W_TABLE (VEX_W_0F3A63_P_2) },
c0f3af97
L
10303 },
10304
592a252b 10305 /* VEX_LEN_0F3A6A_P_2 */
922d8de8 10306 {
bf890a93 10307 { "vfmaddss", { XMVexW, Vex128, EXdVexW, EXdVexW, VexI4 }, 0 },
922d8de8
DR
10308 },
10309
592a252b 10310 /* VEX_LEN_0F3A6B_P_2 */
922d8de8 10311 {
bf890a93 10312 { "vfmaddsd", { XMVexW, Vex128, EXqVexW, EXqVexW, VexI4 }, 0 },
922d8de8
DR
10313 },
10314
592a252b 10315 /* VEX_LEN_0F3A6E_P_2 */
922d8de8 10316 {
bf890a93 10317 { "vfmsubss", { XMVexW, Vex128, EXdVexW, EXdVexW, VexI4 }, 0 },
922d8de8
DR
10318 },
10319
592a252b 10320 /* VEX_LEN_0F3A6F_P_2 */
922d8de8 10321 {
bf890a93 10322 { "vfmsubsd", { XMVexW, Vex128, EXqVexW, EXqVexW, VexI4 }, 0 },
922d8de8
DR
10323 },
10324
592a252b 10325 /* VEX_LEN_0F3A7A_P_2 */
922d8de8 10326 {
bf890a93 10327 { "vfnmaddss", { XMVexW, Vex128, EXdVexW, EXdVexW, VexI4 }, 0 },
922d8de8
DR
10328 },
10329
592a252b 10330 /* VEX_LEN_0F3A7B_P_2 */
922d8de8 10331 {
bf890a93 10332 { "vfnmaddsd", { XMVexW, Vex128, EXqVexW, EXqVexW, VexI4 }, 0 },
922d8de8
DR
10333 },
10334
592a252b 10335 /* VEX_LEN_0F3A7E_P_2 */
922d8de8 10336 {
bf890a93 10337 { "vfnmsubss", { XMVexW, Vex128, EXdVexW, EXdVexW, VexI4 }, 0 },
922d8de8
DR
10338 },
10339
592a252b 10340 /* VEX_LEN_0F3A7F_P_2 */
922d8de8 10341 {
bf890a93 10342 { "vfnmsubsd", { XMVexW, Vex128, EXqVexW, EXqVexW, VexI4 }, 0 },
922d8de8
DR
10343 },
10344
592a252b 10345 /* VEX_LEN_0F3ADF_P_2 */
a5ff0eb2 10346 {
592a252b 10347 { VEX_W_TABLE (VEX_W_0F3ADF_P_2) },
a5ff0eb2 10348 },
4c807e72 10349
6c30d220
L
10350 /* VEX_LEN_0F3AF0_P_3 */
10351 {
bf890a93 10352 { "rorxS", { Gdq, Edq, Ib }, 0 },
6c30d220
L
10353 },
10354
ff688e1f
L
10355 /* VEX_LEN_0FXOP_08_CC */
10356 {
bf890a93 10357 { "vpcomb", { XM, Vex128, EXx, Ib }, 0 },
ff688e1f
L
10358 },
10359
10360 /* VEX_LEN_0FXOP_08_CD */
10361 {
bf890a93 10362 { "vpcomw", { XM, Vex128, EXx, Ib }, 0 },
ff688e1f
L
10363 },
10364
10365 /* VEX_LEN_0FXOP_08_CE */
10366 {
bf890a93 10367 { "vpcomd", { XM, Vex128, EXx, Ib }, 0 },
ff688e1f
L
10368 },
10369
10370 /* VEX_LEN_0FXOP_08_CF */
10371 {
bf890a93 10372 { "vpcomq", { XM, Vex128, EXx, Ib }, 0 },
ff688e1f
L
10373 },
10374
10375 /* VEX_LEN_0FXOP_08_EC */
10376 {
bf890a93 10377 { "vpcomub", { XM, Vex128, EXx, Ib }, 0 },
ff688e1f
L
10378 },
10379
10380 /* VEX_LEN_0FXOP_08_ED */
10381 {
bf890a93 10382 { "vpcomuw", { XM, Vex128, EXx, Ib }, 0 },
ff688e1f
L
10383 },
10384
10385 /* VEX_LEN_0FXOP_08_EE */
10386 {
bf890a93 10387 { "vpcomud", { XM, Vex128, EXx, Ib }, 0 },
ff688e1f
L
10388 },
10389
10390 /* VEX_LEN_0FXOP_08_EF */
10391 {
bf890a93 10392 { "vpcomuq", { XM, Vex128, EXx, Ib }, 0 },
ff688e1f
L
10393 },
10394
592a252b 10395 /* VEX_LEN_0FXOP_09_80 */
5dd85c99 10396 {
bf890a93
IT
10397 { "vfrczps", { XM, EXxmm }, 0 },
10398 { "vfrczps", { XM, EXymmq }, 0 },
5dd85c99 10399 },
4c807e72 10400
592a252b 10401 /* VEX_LEN_0FXOP_09_81 */
5dd85c99 10402 {
bf890a93
IT
10403 { "vfrczpd", { XM, EXxmm }, 0 },
10404 { "vfrczpd", { XM, EXymmq }, 0 },
5dd85c99 10405 },
331d2d0d
L
10406};
10407
9e30b8e0 10408static const struct dis386 vex_w_table[][2] = {
b844680a 10409 {
592a252b 10410 /* VEX_W_0F10_P_0 */
bf890a93 10411 { "vmovups", { XM, EXx }, 0 },
d8faab4e
L
10412 },
10413 {
592a252b 10414 /* VEX_W_0F10_P_1 */
bf890a93 10415 { "vmovss", { XMVexScalar, VexScalar, EXdScalar }, 0 },
d8faab4e
L
10416 },
10417 {
592a252b 10418 /* VEX_W_0F10_P_2 */
bf890a93 10419 { "vmovupd", { XM, EXx }, 0 },
d8faab4e
L
10420 },
10421 {
592a252b 10422 /* VEX_W_0F10_P_3 */
bf890a93 10423 { "vmovsd", { XMVexScalar, VexScalar, EXqScalar }, 0 },
d8faab4e
L
10424 },
10425 {
592a252b 10426 /* VEX_W_0F11_P_0 */
bf890a93 10427 { "vmovups", { EXxS, XM }, 0 },
d8faab4e
L
10428 },
10429 {
592a252b 10430 /* VEX_W_0F11_P_1 */
bf890a93 10431 { "vmovss", { EXdVexScalarS, VexScalar, XMScalar }, 0 },
b844680a
L
10432 },
10433 {
592a252b 10434 /* VEX_W_0F11_P_2 */
bf890a93 10435 { "vmovupd", { EXxS, XM }, 0 },
b844680a
L
10436 },
10437 {
592a252b 10438 /* VEX_W_0F11_P_3 */
bf890a93 10439 { "vmovsd", { EXqVexScalarS, VexScalar, XMScalar }, 0 },
d8faab4e
L
10440 },
10441 {
592a252b 10442 /* VEX_W_0F12_P_0_M_0 */
bf890a93 10443 { "vmovlps", { XM, Vex128, EXq }, 0 },
b844680a
L
10444 },
10445 {
592a252b 10446 /* VEX_W_0F12_P_0_M_1 */
bf890a93 10447 { "vmovhlps", { XM, Vex128, EXq }, 0 },
b844680a
L
10448 },
10449 {
592a252b 10450 /* VEX_W_0F12_P_1 */
bf890a93 10451 { "vmovsldup", { XM, EXx }, 0 },
b844680a
L
10452 },
10453 {
592a252b 10454 /* VEX_W_0F12_P_2 */
bf890a93 10455 { "vmovlpd", { XM, Vex128, EXq }, 0 },
b844680a
L
10456 },
10457 {
592a252b 10458 /* VEX_W_0F12_P_3 */
bf890a93 10459 { "vmovddup", { XM, EXymmq }, 0 },
b844680a
L
10460 },
10461 {
592a252b 10462 /* VEX_W_0F13_M_0 */
bf890a93 10463 { "vmovlpX", { EXq, XM }, 0 },
b844680a
L
10464 },
10465 {
592a252b 10466 /* VEX_W_0F14 */
bf890a93 10467 { "vunpcklpX", { XM, Vex, EXx }, 0 },
b844680a
L
10468 },
10469 {
592a252b 10470 /* VEX_W_0F15 */
bf890a93 10471 { "vunpckhpX", { XM, Vex, EXx }, 0 },
b844680a
L
10472 },
10473 {
592a252b 10474 /* VEX_W_0F16_P_0_M_0 */
bf890a93 10475 { "vmovhps", { XM, Vex128, EXq }, 0 },
9e30b8e0
L
10476 },
10477 {
592a252b 10478 /* VEX_W_0F16_P_0_M_1 */
bf890a93 10479 { "vmovlhps", { XM, Vex128, EXq }, 0 },
9e30b8e0
L
10480 },
10481 {
592a252b 10482 /* VEX_W_0F16_P_1 */
bf890a93 10483 { "vmovshdup", { XM, EXx }, 0 },
9e30b8e0
L
10484 },
10485 {
592a252b 10486 /* VEX_W_0F16_P_2 */
bf890a93 10487 { "vmovhpd", { XM, Vex128, EXq }, 0 },
9e30b8e0
L
10488 },
10489 {
592a252b 10490 /* VEX_W_0F17_M_0 */
bf890a93 10491 { "vmovhpX", { EXq, XM }, 0 },
9e30b8e0
L
10492 },
10493 {
592a252b 10494 /* VEX_W_0F28 */
bf890a93 10495 { "vmovapX", { XM, EXx }, 0 },
9e30b8e0
L
10496 },
10497 {
592a252b 10498 /* VEX_W_0F29 */
bf890a93 10499 { "vmovapX", { EXxS, XM }, 0 },
9e30b8e0
L
10500 },
10501 {
592a252b 10502 /* VEX_W_0F2B_M_0 */
bf890a93 10503 { "vmovntpX", { Mx, XM }, 0 },
9e30b8e0
L
10504 },
10505 {
592a252b 10506 /* VEX_W_0F2E_P_0 */
bf890a93 10507 { "vucomiss", { XMScalar, EXdScalar }, 0 },
9e30b8e0
L
10508 },
10509 {
592a252b 10510 /* VEX_W_0F2E_P_2 */
bf890a93 10511 { "vucomisd", { XMScalar, EXqScalar }, 0 },
9e30b8e0
L
10512 },
10513 {
592a252b 10514 /* VEX_W_0F2F_P_0 */
bf890a93 10515 { "vcomiss", { XMScalar, EXdScalar }, 0 },
9e30b8e0
L
10516 },
10517 {
592a252b 10518 /* VEX_W_0F2F_P_2 */
bf890a93 10519 { "vcomisd", { XMScalar, EXqScalar }, 0 },
9e30b8e0 10520 },
43234a1e
L
10521 {
10522 /* VEX_W_0F41_P_0_LEN_1 */
ab4e4ed5
AF
10523 { MOD_TABLE (MOD_VEX_W_0_0F41_P_0_LEN_1) },
10524 { MOD_TABLE (MOD_VEX_W_1_0F41_P_0_LEN_1) },
1ba585e8
IT
10525 },
10526 {
10527 /* VEX_W_0F41_P_2_LEN_1 */
ab4e4ed5
AF
10528 { MOD_TABLE (MOD_VEX_W_0_0F41_P_2_LEN_1) },
10529 { MOD_TABLE (MOD_VEX_W_1_0F41_P_2_LEN_1) }
43234a1e
L
10530 },
10531 {
10532 /* VEX_W_0F42_P_0_LEN_1 */
ab4e4ed5
AF
10533 { MOD_TABLE (MOD_VEX_W_0_0F42_P_0_LEN_1) },
10534 { MOD_TABLE (MOD_VEX_W_1_0F42_P_0_LEN_1) },
1ba585e8
IT
10535 },
10536 {
10537 /* VEX_W_0F42_P_2_LEN_1 */
ab4e4ed5
AF
10538 { MOD_TABLE (MOD_VEX_W_0_0F42_P_2_LEN_1) },
10539 { MOD_TABLE (MOD_VEX_W_1_0F42_P_2_LEN_1) },
43234a1e
L
10540 },
10541 {
10542 /* VEX_W_0F44_P_0_LEN_0 */
ab4e4ed5
AF
10543 { MOD_TABLE (MOD_VEX_W_0_0F44_P_0_LEN_1) },
10544 { MOD_TABLE (MOD_VEX_W_1_0F44_P_0_LEN_1) },
1ba585e8
IT
10545 },
10546 {
10547 /* VEX_W_0F44_P_2_LEN_0 */
ab4e4ed5
AF
10548 { MOD_TABLE (MOD_VEX_W_0_0F44_P_2_LEN_1) },
10549 { MOD_TABLE (MOD_VEX_W_1_0F44_P_2_LEN_1) },
43234a1e
L
10550 },
10551 {
10552 /* VEX_W_0F45_P_0_LEN_1 */
ab4e4ed5
AF
10553 { MOD_TABLE (MOD_VEX_W_0_0F45_P_0_LEN_1) },
10554 { MOD_TABLE (MOD_VEX_W_1_0F45_P_0_LEN_1) },
1ba585e8
IT
10555 },
10556 {
10557 /* VEX_W_0F45_P_2_LEN_1 */
ab4e4ed5
AF
10558 { MOD_TABLE (MOD_VEX_W_0_0F45_P_2_LEN_1) },
10559 { MOD_TABLE (MOD_VEX_W_1_0F45_P_2_LEN_1) },
43234a1e
L
10560 },
10561 {
10562 /* VEX_W_0F46_P_0_LEN_1 */
ab4e4ed5
AF
10563 { MOD_TABLE (MOD_VEX_W_0_0F46_P_0_LEN_1) },
10564 { MOD_TABLE (MOD_VEX_W_1_0F46_P_0_LEN_1) },
1ba585e8
IT
10565 },
10566 {
10567 /* VEX_W_0F46_P_2_LEN_1 */
ab4e4ed5
AF
10568 { MOD_TABLE (MOD_VEX_W_0_0F46_P_2_LEN_1) },
10569 { MOD_TABLE (MOD_VEX_W_1_0F46_P_2_LEN_1) },
43234a1e
L
10570 },
10571 {
10572 /* VEX_W_0F47_P_0_LEN_1 */
ab4e4ed5
AF
10573 { MOD_TABLE (MOD_VEX_W_0_0F47_P_0_LEN_1) },
10574 { MOD_TABLE (MOD_VEX_W_1_0F47_P_0_LEN_1) },
1ba585e8
IT
10575 },
10576 {
10577 /* VEX_W_0F47_P_2_LEN_1 */
ab4e4ed5
AF
10578 { MOD_TABLE (MOD_VEX_W_0_0F47_P_2_LEN_1) },
10579 { MOD_TABLE (MOD_VEX_W_1_0F47_P_2_LEN_1) },
1ba585e8
IT
10580 },
10581 {
10582 /* VEX_W_0F4A_P_0_LEN_1 */
ab4e4ed5
AF
10583 { MOD_TABLE (MOD_VEX_W_0_0F4A_P_0_LEN_1) },
10584 { MOD_TABLE (MOD_VEX_W_1_0F4A_P_0_LEN_1) },
1ba585e8
IT
10585 },
10586 {
10587 /* VEX_W_0F4A_P_2_LEN_1 */
ab4e4ed5
AF
10588 { MOD_TABLE (MOD_VEX_W_0_0F4A_P_2_LEN_1) },
10589 { MOD_TABLE (MOD_VEX_W_1_0F4A_P_2_LEN_1) },
1ba585e8
IT
10590 },
10591 {
10592 /* VEX_W_0F4B_P_0_LEN_1 */
ab4e4ed5
AF
10593 { MOD_TABLE (MOD_VEX_W_0_0F4B_P_0_LEN_1) },
10594 { MOD_TABLE (MOD_VEX_W_1_0F4B_P_0_LEN_1) },
43234a1e
L
10595 },
10596 {
10597 /* VEX_W_0F4B_P_2_LEN_1 */
ab4e4ed5 10598 { MOD_TABLE (MOD_VEX_W_0_0F4B_P_2_LEN_1) },
43234a1e 10599 },
9e30b8e0 10600 {
592a252b 10601 /* VEX_W_0F50_M_0 */
bf890a93 10602 { "vmovmskpX", { Gdq, XS }, 0 },
9e30b8e0
L
10603 },
10604 {
592a252b 10605 /* VEX_W_0F51_P_0 */
bf890a93 10606 { "vsqrtps", { XM, EXx }, 0 },
9e30b8e0
L
10607 },
10608 {
592a252b 10609 /* VEX_W_0F51_P_1 */
bf890a93 10610 { "vsqrtss", { XMScalar, VexScalar, EXdScalar }, 0 },
9e30b8e0
L
10611 },
10612 {
592a252b 10613 /* VEX_W_0F51_P_2 */
bf890a93 10614 { "vsqrtpd", { XM, EXx }, 0 },
9e30b8e0
L
10615 },
10616 {
592a252b 10617 /* VEX_W_0F51_P_3 */
bf890a93 10618 { "vsqrtsd", { XMScalar, VexScalar, EXqScalar }, 0 },
9e30b8e0
L
10619 },
10620 {
592a252b 10621 /* VEX_W_0F52_P_0 */
bf890a93 10622 { "vrsqrtps", { XM, EXx }, 0 },
9e30b8e0
L
10623 },
10624 {
592a252b 10625 /* VEX_W_0F52_P_1 */
bf890a93 10626 { "vrsqrtss", { XMScalar, VexScalar, EXdScalar }, 0 },
9e30b8e0
L
10627 },
10628 {
592a252b 10629 /* VEX_W_0F53_P_0 */
bf890a93 10630 { "vrcpps", { XM, EXx }, 0 },
9e30b8e0
L
10631 },
10632 {
592a252b 10633 /* VEX_W_0F53_P_1 */
bf890a93 10634 { "vrcpss", { XMScalar, VexScalar, EXdScalar }, 0 },
9e30b8e0
L
10635 },
10636 {
592a252b 10637 /* VEX_W_0F58_P_0 */
bf890a93 10638 { "vaddps", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10639 },
10640 {
592a252b 10641 /* VEX_W_0F58_P_1 */
bf890a93 10642 { "vaddss", { XMScalar, VexScalar, EXdScalar }, 0 },
9e30b8e0
L
10643 },
10644 {
592a252b 10645 /* VEX_W_0F58_P_2 */
bf890a93 10646 { "vaddpd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10647 },
10648 {
592a252b 10649 /* VEX_W_0F58_P_3 */
bf890a93 10650 { "vaddsd", { XMScalar, VexScalar, EXqScalar }, 0 },
9e30b8e0
L
10651 },
10652 {
592a252b 10653 /* VEX_W_0F59_P_0 */
bf890a93 10654 { "vmulps", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10655 },
10656 {
592a252b 10657 /* VEX_W_0F59_P_1 */
bf890a93 10658 { "vmulss", { XMScalar, VexScalar, EXdScalar }, 0 },
9e30b8e0
L
10659 },
10660 {
592a252b 10661 /* VEX_W_0F59_P_2 */
bf890a93 10662 { "vmulpd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10663 },
10664 {
592a252b 10665 /* VEX_W_0F59_P_3 */
bf890a93 10666 { "vmulsd", { XMScalar, VexScalar, EXqScalar }, 0 },
9e30b8e0
L
10667 },
10668 {
592a252b 10669 /* VEX_W_0F5A_P_0 */
bf890a93 10670 { "vcvtps2pd", { XM, EXxmmq }, 0 },
9e30b8e0
L
10671 },
10672 {
592a252b 10673 /* VEX_W_0F5A_P_1 */
bf890a93 10674 { "vcvtss2sd", { XMScalar, VexScalar, EXdScalar }, 0 },
9e30b8e0
L
10675 },
10676 {
592a252b 10677 /* VEX_W_0F5A_P_3 */
bf890a93 10678 { "vcvtsd2ss", { XMScalar, VexScalar, EXqScalar }, 0 },
9e30b8e0
L
10679 },
10680 {
592a252b 10681 /* VEX_W_0F5B_P_0 */
bf890a93 10682 { "vcvtdq2ps", { XM, EXx }, 0 },
9e30b8e0
L
10683 },
10684 {
592a252b 10685 /* VEX_W_0F5B_P_1 */
bf890a93 10686 { "vcvttps2dq", { XM, EXx }, 0 },
9e30b8e0
L
10687 },
10688 {
592a252b 10689 /* VEX_W_0F5B_P_2 */
bf890a93 10690 { "vcvtps2dq", { XM, EXx }, 0 },
9e30b8e0
L
10691 },
10692 {
592a252b 10693 /* VEX_W_0F5C_P_0 */
bf890a93 10694 { "vsubps", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10695 },
10696 {
592a252b 10697 /* VEX_W_0F5C_P_1 */
bf890a93 10698 { "vsubss", { XMScalar, VexScalar, EXdScalar }, 0 },
9e30b8e0
L
10699 },
10700 {
592a252b 10701 /* VEX_W_0F5C_P_2 */
bf890a93 10702 { "vsubpd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10703 },
10704 {
592a252b 10705 /* VEX_W_0F5C_P_3 */
bf890a93 10706 { "vsubsd", { XMScalar, VexScalar, EXqScalar }, 0 },
9e30b8e0
L
10707 },
10708 {
592a252b 10709 /* VEX_W_0F5D_P_0 */
bf890a93 10710 { "vminps", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10711 },
10712 {
592a252b 10713 /* VEX_W_0F5D_P_1 */
bf890a93 10714 { "vminss", { XMScalar, VexScalar, EXdScalar }, 0 },
9e30b8e0
L
10715 },
10716 {
592a252b 10717 /* VEX_W_0F5D_P_2 */
bf890a93 10718 { "vminpd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10719 },
10720 {
592a252b 10721 /* VEX_W_0F5D_P_3 */
bf890a93 10722 { "vminsd", { XMScalar, VexScalar, EXqScalar }, 0 },
9e30b8e0
L
10723 },
10724 {
592a252b 10725 /* VEX_W_0F5E_P_0 */
bf890a93 10726 { "vdivps", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10727 },
10728 {
592a252b 10729 /* VEX_W_0F5E_P_1 */
bf890a93 10730 { "vdivss", { XMScalar, VexScalar, EXdScalar }, 0 },
9e30b8e0
L
10731 },
10732 {
592a252b 10733 /* VEX_W_0F5E_P_2 */
bf890a93 10734 { "vdivpd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10735 },
10736 {
592a252b 10737 /* VEX_W_0F5E_P_3 */
bf890a93 10738 { "vdivsd", { XMScalar, VexScalar, EXqScalar }, 0 },
9e30b8e0
L
10739 },
10740 {
592a252b 10741 /* VEX_W_0F5F_P_0 */
bf890a93 10742 { "vmaxps", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10743 },
10744 {
592a252b 10745 /* VEX_W_0F5F_P_1 */
bf890a93 10746 { "vmaxss", { XMScalar, VexScalar, EXdScalar }, 0 },
9e30b8e0
L
10747 },
10748 {
592a252b 10749 /* VEX_W_0F5F_P_2 */
bf890a93 10750 { "vmaxpd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10751 },
10752 {
592a252b 10753 /* VEX_W_0F5F_P_3 */
bf890a93 10754 { "vmaxsd", { XMScalar, VexScalar, EXqScalar }, 0 },
9e30b8e0
L
10755 },
10756 {
592a252b 10757 /* VEX_W_0F60_P_2 */
bf890a93 10758 { "vpunpcklbw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10759 },
10760 {
592a252b 10761 /* VEX_W_0F61_P_2 */
bf890a93 10762 { "vpunpcklwd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10763 },
10764 {
592a252b 10765 /* VEX_W_0F62_P_2 */
bf890a93 10766 { "vpunpckldq", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10767 },
10768 {
592a252b 10769 /* VEX_W_0F63_P_2 */
bf890a93 10770 { "vpacksswb", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10771 },
10772 {
592a252b 10773 /* VEX_W_0F64_P_2 */
bf890a93 10774 { "vpcmpgtb", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10775 },
10776 {
592a252b 10777 /* VEX_W_0F65_P_2 */
bf890a93 10778 { "vpcmpgtw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10779 },
10780 {
592a252b 10781 /* VEX_W_0F66_P_2 */
bf890a93 10782 { "vpcmpgtd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10783 },
10784 {
592a252b 10785 /* VEX_W_0F67_P_2 */
bf890a93 10786 { "vpackuswb", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10787 },
10788 {
592a252b 10789 /* VEX_W_0F68_P_2 */
bf890a93 10790 { "vpunpckhbw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10791 },
10792 {
592a252b 10793 /* VEX_W_0F69_P_2 */
bf890a93 10794 { "vpunpckhwd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10795 },
10796 {
592a252b 10797 /* VEX_W_0F6A_P_2 */
bf890a93 10798 { "vpunpckhdq", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10799 },
10800 {
592a252b 10801 /* VEX_W_0F6B_P_2 */
bf890a93 10802 { "vpackssdw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10803 },
10804 {
592a252b 10805 /* VEX_W_0F6C_P_2 */
bf890a93 10806 { "vpunpcklqdq", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10807 },
10808 {
592a252b 10809 /* VEX_W_0F6D_P_2 */
bf890a93 10810 { "vpunpckhqdq", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10811 },
10812 {
592a252b 10813 /* VEX_W_0F6F_P_1 */
bf890a93 10814 { "vmovdqu", { XM, EXx }, 0 },
9e30b8e0
L
10815 },
10816 {
592a252b 10817 /* VEX_W_0F6F_P_2 */
bf890a93 10818 { "vmovdqa", { XM, EXx }, 0 },
9e30b8e0
L
10819 },
10820 {
592a252b 10821 /* VEX_W_0F70_P_1 */
bf890a93 10822 { "vpshufhw", { XM, EXx, Ib }, 0 },
9e30b8e0
L
10823 },
10824 {
592a252b 10825 /* VEX_W_0F70_P_2 */
bf890a93 10826 { "vpshufd", { XM, EXx, Ib }, 0 },
9e30b8e0
L
10827 },
10828 {
592a252b 10829 /* VEX_W_0F70_P_3 */
bf890a93 10830 { "vpshuflw", { XM, EXx, Ib }, 0 },
9e30b8e0
L
10831 },
10832 {
592a252b 10833 /* VEX_W_0F71_R_2_P_2 */
bf890a93 10834 { "vpsrlw", { Vex, XS, Ib }, 0 },
9e30b8e0
L
10835 },
10836 {
592a252b 10837 /* VEX_W_0F71_R_4_P_2 */
bf890a93 10838 { "vpsraw", { Vex, XS, Ib }, 0 },
9e30b8e0
L
10839 },
10840 {
592a252b 10841 /* VEX_W_0F71_R_6_P_2 */
bf890a93 10842 { "vpsllw", { Vex, XS, Ib }, 0 },
9e30b8e0
L
10843 },
10844 {
592a252b 10845 /* VEX_W_0F72_R_2_P_2 */
bf890a93 10846 { "vpsrld", { Vex, XS, Ib }, 0 },
9e30b8e0
L
10847 },
10848 {
592a252b 10849 /* VEX_W_0F72_R_4_P_2 */
bf890a93 10850 { "vpsrad", { Vex, XS, Ib }, 0 },
9e30b8e0
L
10851 },
10852 {
592a252b 10853 /* VEX_W_0F72_R_6_P_2 */
bf890a93 10854 { "vpslld", { Vex, XS, Ib }, 0 },
9e30b8e0
L
10855 },
10856 {
592a252b 10857 /* VEX_W_0F73_R_2_P_2 */
bf890a93 10858 { "vpsrlq", { Vex, XS, Ib }, 0 },
9e30b8e0
L
10859 },
10860 {
592a252b 10861 /* VEX_W_0F73_R_3_P_2 */
bf890a93 10862 { "vpsrldq", { Vex, XS, Ib }, 0 },
9e30b8e0
L
10863 },
10864 {
592a252b 10865 /* VEX_W_0F73_R_6_P_2 */
bf890a93 10866 { "vpsllq", { Vex, XS, Ib }, 0 },
9e30b8e0
L
10867 },
10868 {
592a252b 10869 /* VEX_W_0F73_R_7_P_2 */
bf890a93 10870 { "vpslldq", { Vex, XS, Ib }, 0 },
9e30b8e0
L
10871 },
10872 {
592a252b 10873 /* VEX_W_0F74_P_2 */
bf890a93 10874 { "vpcmpeqb", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10875 },
10876 {
592a252b 10877 /* VEX_W_0F75_P_2 */
bf890a93 10878 { "vpcmpeqw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10879 },
10880 {
592a252b 10881 /* VEX_W_0F76_P_2 */
bf890a93 10882 { "vpcmpeqd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10883 },
10884 {
592a252b 10885 /* VEX_W_0F77_P_0 */
bf890a93 10886 { "", { VZERO }, 0 },
9e30b8e0
L
10887 },
10888 {
592a252b 10889 /* VEX_W_0F7C_P_2 */
bf890a93 10890 { "vhaddpd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10891 },
10892 {
592a252b 10893 /* VEX_W_0F7C_P_3 */
bf890a93 10894 { "vhaddps", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10895 },
10896 {
592a252b 10897 /* VEX_W_0F7D_P_2 */
bf890a93 10898 { "vhsubpd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10899 },
10900 {
592a252b 10901 /* VEX_W_0F7D_P_3 */
bf890a93 10902 { "vhsubps", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10903 },
10904 {
592a252b 10905 /* VEX_W_0F7E_P_1 */
bf890a93 10906 { "vmovq", { XMScalar, EXqScalar }, 0 },
9e30b8e0
L
10907 },
10908 {
592a252b 10909 /* VEX_W_0F7F_P_1 */
bf890a93 10910 { "vmovdqu", { EXxS, XM }, 0 },
9e30b8e0
L
10911 },
10912 {
592a252b 10913 /* VEX_W_0F7F_P_2 */
bf890a93 10914 { "vmovdqa", { EXxS, XM }, 0 },
9e30b8e0 10915 },
43234a1e
L
10916 {
10917 /* VEX_W_0F90_P_0_LEN_0 */
bf890a93
IT
10918 { "kmovw", { MaskG, MaskE }, 0 },
10919 { "kmovq", { MaskG, MaskE }, 0 },
1ba585e8
IT
10920 },
10921 {
10922 /* VEX_W_0F90_P_2_LEN_0 */
bf890a93
IT
10923 { "kmovb", { MaskG, MaskBDE }, 0 },
10924 { "kmovd", { MaskG, MaskBDE }, 0 },
43234a1e
L
10925 },
10926 {
10927 /* VEX_W_0F91_P_0_LEN_0 */
ab4e4ed5
AF
10928 { MOD_TABLE (MOD_VEX_W_0_0F91_P_0_LEN_0) },
10929 { MOD_TABLE (MOD_VEX_W_1_0F91_P_0_LEN_0) },
1ba585e8
IT
10930 },
10931 {
10932 /* VEX_W_0F91_P_2_LEN_0 */
ab4e4ed5
AF
10933 { MOD_TABLE (MOD_VEX_W_0_0F91_P_2_LEN_0) },
10934 { MOD_TABLE (MOD_VEX_W_1_0F91_P_2_LEN_0) },
43234a1e
L
10935 },
10936 {
10937 /* VEX_W_0F92_P_0_LEN_0 */
ab4e4ed5 10938 { MOD_TABLE (MOD_VEX_W_0_0F92_P_0_LEN_0) },
43234a1e 10939 },
90a915bf
IT
10940 {
10941 /* VEX_W_0F92_P_2_LEN_0 */
ab4e4ed5 10942 { MOD_TABLE (MOD_VEX_W_0_0F92_P_2_LEN_0) },
90a915bf 10943 },
1ba585e8
IT
10944 {
10945 /* VEX_W_0F92_P_3_LEN_0 */
ab4e4ed5
AF
10946 { MOD_TABLE (MOD_VEX_W_0_0F92_P_3_LEN_0) },
10947 { MOD_TABLE (MOD_VEX_W_1_0F92_P_3_LEN_0) },
1ba585e8 10948 },
43234a1e
L
10949 {
10950 /* VEX_W_0F93_P_0_LEN_0 */
ab4e4ed5 10951 { MOD_TABLE (MOD_VEX_W_0_0F93_P_0_LEN_0) },
43234a1e 10952 },
90a915bf
IT
10953 {
10954 /* VEX_W_0F93_P_2_LEN_0 */
ab4e4ed5 10955 { MOD_TABLE (MOD_VEX_W_0_0F93_P_2_LEN_0) },
90a915bf 10956 },
1ba585e8
IT
10957 {
10958 /* VEX_W_0F93_P_3_LEN_0 */
ab4e4ed5
AF
10959 { MOD_TABLE (MOD_VEX_W_0_0F93_P_3_LEN_0) },
10960 { MOD_TABLE (MOD_VEX_W_1_0F93_P_3_LEN_0) },
1ba585e8 10961 },
43234a1e
L
10962 {
10963 /* VEX_W_0F98_P_0_LEN_0 */
ab4e4ed5
AF
10964 { MOD_TABLE (MOD_VEX_W_0_0F98_P_0_LEN_0) },
10965 { MOD_TABLE (MOD_VEX_W_1_0F98_P_0_LEN_0) },
1ba585e8
IT
10966 },
10967 {
10968 /* VEX_W_0F98_P_2_LEN_0 */
ab4e4ed5
AF
10969 { MOD_TABLE (MOD_VEX_W_0_0F98_P_2_LEN_0) },
10970 { MOD_TABLE (MOD_VEX_W_1_0F98_P_2_LEN_0) },
1ba585e8
IT
10971 },
10972 {
10973 /* VEX_W_0F99_P_0_LEN_0 */
ab4e4ed5
AF
10974 { MOD_TABLE (MOD_VEX_W_0_0F99_P_0_LEN_0) },
10975 { MOD_TABLE (MOD_VEX_W_1_0F99_P_0_LEN_0) },
1ba585e8
IT
10976 },
10977 {
10978 /* VEX_W_0F99_P_2_LEN_0 */
ab4e4ed5
AF
10979 { MOD_TABLE (MOD_VEX_W_0_0F99_P_2_LEN_0) },
10980 { MOD_TABLE (MOD_VEX_W_1_0F99_P_2_LEN_0) },
43234a1e 10981 },
9e30b8e0 10982 {
592a252b 10983 /* VEX_W_0FAE_R_2_M_0 */
bf890a93 10984 { "vldmxcsr", { Md }, 0 },
9e30b8e0
L
10985 },
10986 {
592a252b 10987 /* VEX_W_0FAE_R_3_M_0 */
bf890a93 10988 { "vstmxcsr", { Md }, 0 },
9e30b8e0
L
10989 },
10990 {
592a252b 10991 /* VEX_W_0FC2_P_0 */
bf890a93 10992 { "vcmpps", { XM, Vex, EXx, VCMP }, 0 },
9e30b8e0
L
10993 },
10994 {
592a252b 10995 /* VEX_W_0FC2_P_1 */
bf890a93 10996 { "vcmpss", { XMScalar, VexScalar, EXdScalar, VCMP }, 0 },
9e30b8e0
L
10997 },
10998 {
592a252b 10999 /* VEX_W_0FC2_P_2 */
bf890a93 11000 { "vcmppd", { XM, Vex, EXx, VCMP }, 0 },
9e30b8e0
L
11001 },
11002 {
592a252b 11003 /* VEX_W_0FC2_P_3 */
bf890a93 11004 { "vcmpsd", { XMScalar, VexScalar, EXqScalar, VCMP }, 0 },
9e30b8e0
L
11005 },
11006 {
592a252b 11007 /* VEX_W_0FC4_P_2 */
bf890a93 11008 { "vpinsrw", { XM, Vex128, Edqw, Ib }, 0 },
9e30b8e0
L
11009 },
11010 {
592a252b 11011 /* VEX_W_0FC5_P_2 */
bf890a93 11012 { "vpextrw", { Gdq, XS, Ib }, 0 },
9e30b8e0
L
11013 },
11014 {
592a252b 11015 /* VEX_W_0FD0_P_2 */
bf890a93 11016 { "vaddsubpd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11017 },
11018 {
592a252b 11019 /* VEX_W_0FD0_P_3 */
bf890a93 11020 { "vaddsubps", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11021 },
11022 {
592a252b 11023 /* VEX_W_0FD1_P_2 */
bf890a93 11024 { "vpsrlw", { XM, Vex, EXxmm }, 0 },
9e30b8e0
L
11025 },
11026 {
592a252b 11027 /* VEX_W_0FD2_P_2 */
bf890a93 11028 { "vpsrld", { XM, Vex, EXxmm }, 0 },
9e30b8e0
L
11029 },
11030 {
592a252b 11031 /* VEX_W_0FD3_P_2 */
bf890a93 11032 { "vpsrlq", { XM, Vex, EXxmm }, 0 },
9e30b8e0
L
11033 },
11034 {
592a252b 11035 /* VEX_W_0FD4_P_2 */
bf890a93 11036 { "vpaddq", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11037 },
11038 {
592a252b 11039 /* VEX_W_0FD5_P_2 */
bf890a93 11040 { "vpmullw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11041 },
11042 {
592a252b 11043 /* VEX_W_0FD6_P_2 */
bf890a93 11044 { "vmovq", { EXqScalarS, XMScalar }, 0 },
9e30b8e0
L
11045 },
11046 {
592a252b 11047 /* VEX_W_0FD7_P_2_M_1 */
bf890a93 11048 { "vpmovmskb", { Gdq, XS }, 0 },
9e30b8e0
L
11049 },
11050 {
592a252b 11051 /* VEX_W_0FD8_P_2 */
bf890a93 11052 { "vpsubusb", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11053 },
11054 {
592a252b 11055 /* VEX_W_0FD9_P_2 */
bf890a93 11056 { "vpsubusw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11057 },
11058 {
592a252b 11059 /* VEX_W_0FDA_P_2 */
bf890a93 11060 { "vpminub", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11061 },
11062 {
592a252b 11063 /* VEX_W_0FDB_P_2 */
bf890a93 11064 { "vpand", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11065 },
11066 {
592a252b 11067 /* VEX_W_0FDC_P_2 */
bf890a93 11068 { "vpaddusb", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11069 },
11070 {
592a252b 11071 /* VEX_W_0FDD_P_2 */
bf890a93 11072 { "vpaddusw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11073 },
11074 {
592a252b 11075 /* VEX_W_0FDE_P_2 */
bf890a93 11076 { "vpmaxub", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11077 },
11078 {
592a252b 11079 /* VEX_W_0FDF_P_2 */
bf890a93 11080 { "vpandn", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11081 },
11082 {
592a252b 11083 /* VEX_W_0FE0_P_2 */
bf890a93 11084 { "vpavgb", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11085 },
11086 {
592a252b 11087 /* VEX_W_0FE1_P_2 */
bf890a93 11088 { "vpsraw", { XM, Vex, EXxmm }, 0 },
9e30b8e0
L
11089 },
11090 {
592a252b 11091 /* VEX_W_0FE2_P_2 */
bf890a93 11092 { "vpsrad", { XM, Vex, EXxmm }, 0 },
9e30b8e0
L
11093 },
11094 {
592a252b 11095 /* VEX_W_0FE3_P_2 */
bf890a93 11096 { "vpavgw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11097 },
11098 {
592a252b 11099 /* VEX_W_0FE4_P_2 */
bf890a93 11100 { "vpmulhuw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11101 },
11102 {
592a252b 11103 /* VEX_W_0FE5_P_2 */
bf890a93 11104 { "vpmulhw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11105 },
11106 {
592a252b 11107 /* VEX_W_0FE6_P_1 */
bf890a93 11108 { "vcvtdq2pd", { XM, EXxmmq }, 0 },
9e30b8e0
L
11109 },
11110 {
592a252b 11111 /* VEX_W_0FE6_P_2 */
bf890a93 11112 { "vcvttpd2dq%XY", { XMM, EXx }, 0 },
9e30b8e0
L
11113 },
11114 {
592a252b 11115 /* VEX_W_0FE6_P_3 */
bf890a93 11116 { "vcvtpd2dq%XY", { XMM, EXx }, 0 },
9e30b8e0
L
11117 },
11118 {
592a252b 11119 /* VEX_W_0FE7_P_2_M_0 */
bf890a93 11120 { "vmovntdq", { Mx, XM }, 0 },
9e30b8e0
L
11121 },
11122 {
592a252b 11123 /* VEX_W_0FE8_P_2 */
bf890a93 11124 { "vpsubsb", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11125 },
11126 {
592a252b 11127 /* VEX_W_0FE9_P_2 */
bf890a93 11128 { "vpsubsw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11129 },
11130 {
592a252b 11131 /* VEX_W_0FEA_P_2 */
bf890a93 11132 { "vpminsw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11133 },
11134 {
592a252b 11135 /* VEX_W_0FEB_P_2 */
bf890a93 11136 { "vpor", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11137 },
11138 {
592a252b 11139 /* VEX_W_0FEC_P_2 */
bf890a93 11140 { "vpaddsb", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11141 },
11142 {
592a252b 11143 /* VEX_W_0FED_P_2 */
bf890a93 11144 { "vpaddsw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11145 },
11146 {
592a252b 11147 /* VEX_W_0FEE_P_2 */
bf890a93 11148 { "vpmaxsw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11149 },
11150 {
592a252b 11151 /* VEX_W_0FEF_P_2 */
bf890a93 11152 { "vpxor", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11153 },
11154 {
592a252b 11155 /* VEX_W_0FF0_P_3_M_0 */
bf890a93 11156 { "vlddqu", { XM, M }, 0 },
9e30b8e0
L
11157 },
11158 {
592a252b 11159 /* VEX_W_0FF1_P_2 */
bf890a93 11160 { "vpsllw", { XM, Vex, EXxmm }, 0 },
9e30b8e0
L
11161 },
11162 {
592a252b 11163 /* VEX_W_0FF2_P_2 */
bf890a93 11164 { "vpslld", { XM, Vex, EXxmm }, 0 },
9e30b8e0
L
11165 },
11166 {
592a252b 11167 /* VEX_W_0FF3_P_2 */
bf890a93 11168 { "vpsllq", { XM, Vex, EXxmm }, 0 },
9e30b8e0
L
11169 },
11170 {
592a252b 11171 /* VEX_W_0FF4_P_2 */
bf890a93 11172 { "vpmuludq", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11173 },
11174 {
592a252b 11175 /* VEX_W_0FF5_P_2 */
bf890a93 11176 { "vpmaddwd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11177 },
11178 {
592a252b 11179 /* VEX_W_0FF6_P_2 */
bf890a93 11180 { "vpsadbw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11181 },
11182 {
592a252b 11183 /* VEX_W_0FF7_P_2 */
bf890a93 11184 { "vmaskmovdqu", { XM, XS }, 0 },
9e30b8e0
L
11185 },
11186 {
592a252b 11187 /* VEX_W_0FF8_P_2 */
bf890a93 11188 { "vpsubb", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11189 },
11190 {
592a252b 11191 /* VEX_W_0FF9_P_2 */
bf890a93 11192 { "vpsubw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11193 },
11194 {
592a252b 11195 /* VEX_W_0FFA_P_2 */
bf890a93 11196 { "vpsubd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11197 },
11198 {
592a252b 11199 /* VEX_W_0FFB_P_2 */
bf890a93 11200 { "vpsubq", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11201 },
11202 {
592a252b 11203 /* VEX_W_0FFC_P_2 */
bf890a93 11204 { "vpaddb", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11205 },
11206 {
592a252b 11207 /* VEX_W_0FFD_P_2 */
bf890a93 11208 { "vpaddw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11209 },
11210 {
592a252b 11211 /* VEX_W_0FFE_P_2 */
bf890a93 11212 { "vpaddd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11213 },
11214 {
592a252b 11215 /* VEX_W_0F3800_P_2 */
bf890a93 11216 { "vpshufb", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11217 },
11218 {
592a252b 11219 /* VEX_W_0F3801_P_2 */
bf890a93 11220 { "vphaddw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11221 },
11222 {
592a252b 11223 /* VEX_W_0F3802_P_2 */
bf890a93 11224 { "vphaddd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11225 },
11226 {
592a252b 11227 /* VEX_W_0F3803_P_2 */
bf890a93 11228 { "vphaddsw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11229 },
11230 {
592a252b 11231 /* VEX_W_0F3804_P_2 */
bf890a93 11232 { "vpmaddubsw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11233 },
11234 {
592a252b 11235 /* VEX_W_0F3805_P_2 */
bf890a93 11236 { "vphsubw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11237 },
11238 {
592a252b 11239 /* VEX_W_0F3806_P_2 */
bf890a93 11240 { "vphsubd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11241 },
11242 {
592a252b 11243 /* VEX_W_0F3807_P_2 */
bf890a93 11244 { "vphsubsw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11245 },
11246 {
592a252b 11247 /* VEX_W_0F3808_P_2 */
bf890a93 11248 { "vpsignb", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11249 },
11250 {
592a252b 11251 /* VEX_W_0F3809_P_2 */
bf890a93 11252 { "vpsignw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11253 },
11254 {
592a252b 11255 /* VEX_W_0F380A_P_2 */
bf890a93 11256 { "vpsignd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11257 },
11258 {
592a252b 11259 /* VEX_W_0F380B_P_2 */
bf890a93 11260 { "vpmulhrsw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11261 },
11262 {
592a252b 11263 /* VEX_W_0F380C_P_2 */
bf890a93 11264 { "vpermilps", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11265 },
11266 {
592a252b 11267 /* VEX_W_0F380D_P_2 */
bf890a93 11268 { "vpermilpd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11269 },
11270 {
592a252b 11271 /* VEX_W_0F380E_P_2 */
bf890a93 11272 { "vtestps", { XM, EXx }, 0 },
9e30b8e0
L
11273 },
11274 {
592a252b 11275 /* VEX_W_0F380F_P_2 */
bf890a93 11276 { "vtestpd", { XM, EXx }, 0 },
9e30b8e0 11277 },
6c30d220
L
11278 {
11279 /* VEX_W_0F3816_P_2 */
bf890a93 11280 { "vpermps", { XM, Vex, EXx }, 0 },
6c30d220 11281 },
9e30b8e0 11282 {
592a252b 11283 /* VEX_W_0F3817_P_2 */
bf890a93 11284 { "vptest", { XM, EXx }, 0 },
9e30b8e0 11285 },
bcf2684f 11286 {
6c30d220 11287 /* VEX_W_0F3818_P_2 */
bf890a93 11288 { "vbroadcastss", { XM, EXxmm_md }, 0 },
bcf2684f 11289 },
9e30b8e0 11290 {
6c30d220 11291 /* VEX_W_0F3819_P_2 */
bf890a93 11292 { "vbroadcastsd", { XM, EXxmm_mq }, 0 },
9e30b8e0
L
11293 },
11294 {
592a252b 11295 /* VEX_W_0F381A_P_2_M_0 */
bf890a93 11296 { "vbroadcastf128", { XM, Mxmm }, 0 },
9e30b8e0
L
11297 },
11298 {
592a252b 11299 /* VEX_W_0F381C_P_2 */
bf890a93 11300 { "vpabsb", { XM, EXx }, 0 },
9e30b8e0
L
11301 },
11302 {
592a252b 11303 /* VEX_W_0F381D_P_2 */
bf890a93 11304 { "vpabsw", { XM, EXx }, 0 },
9e30b8e0
L
11305 },
11306 {
592a252b 11307 /* VEX_W_0F381E_P_2 */
bf890a93 11308 { "vpabsd", { XM, EXx }, 0 },
9e30b8e0
L
11309 },
11310 {
592a252b 11311 /* VEX_W_0F3820_P_2 */
bf890a93 11312 { "vpmovsxbw", { XM, EXxmmq }, 0 },
9e30b8e0
L
11313 },
11314 {
592a252b 11315 /* VEX_W_0F3821_P_2 */
bf890a93 11316 { "vpmovsxbd", { XM, EXxmmqd }, 0 },
9e30b8e0
L
11317 },
11318 {
592a252b 11319 /* VEX_W_0F3822_P_2 */
bf890a93 11320 { "vpmovsxbq", { XM, EXxmmdw }, 0 },
9e30b8e0
L
11321 },
11322 {
592a252b 11323 /* VEX_W_0F3823_P_2 */
bf890a93 11324 { "vpmovsxwd", { XM, EXxmmq }, 0 },
9e30b8e0
L
11325 },
11326 {
592a252b 11327 /* VEX_W_0F3824_P_2 */
bf890a93 11328 { "vpmovsxwq", { XM, EXxmmqd }, 0 },
9e30b8e0
L
11329 },
11330 {
592a252b 11331 /* VEX_W_0F3825_P_2 */
bf890a93 11332 { "vpmovsxdq", { XM, EXxmmq }, 0 },
9e30b8e0
L
11333 },
11334 {
592a252b 11335 /* VEX_W_0F3828_P_2 */
bf890a93 11336 { "vpmuldq", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11337 },
11338 {
592a252b 11339 /* VEX_W_0F3829_P_2 */
bf890a93 11340 { "vpcmpeqq", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11341 },
11342 {
592a252b 11343 /* VEX_W_0F382A_P_2_M_0 */
bf890a93 11344 { "vmovntdqa", { XM, Mx }, 0 },
9e30b8e0
L
11345 },
11346 {
592a252b 11347 /* VEX_W_0F382B_P_2 */
bf890a93 11348 { "vpackusdw", { XM, Vex, EXx }, 0 },
9e30b8e0 11349 },
53aa04a0 11350 {
592a252b 11351 /* VEX_W_0F382C_P_2_M_0 */
bf890a93 11352 { "vmaskmovps", { XM, Vex, Mx }, 0 },
53aa04a0
L
11353 },
11354 {
592a252b 11355 /* VEX_W_0F382D_P_2_M_0 */
bf890a93 11356 { "vmaskmovpd", { XM, Vex, Mx }, 0 },
53aa04a0
L
11357 },
11358 {
592a252b 11359 /* VEX_W_0F382E_P_2_M_0 */
bf890a93 11360 { "vmaskmovps", { Mx, Vex, XM }, 0 },
53aa04a0
L
11361 },
11362 {
592a252b 11363 /* VEX_W_0F382F_P_2_M_0 */
bf890a93 11364 { "vmaskmovpd", { Mx, Vex, XM }, 0 },
53aa04a0 11365 },
9e30b8e0 11366 {
592a252b 11367 /* VEX_W_0F3830_P_2 */
bf890a93 11368 { "vpmovzxbw", { XM, EXxmmq }, 0 },
9e30b8e0
L
11369 },
11370 {
592a252b 11371 /* VEX_W_0F3831_P_2 */
bf890a93 11372 { "vpmovzxbd", { XM, EXxmmqd }, 0 },
9e30b8e0
L
11373 },
11374 {
592a252b 11375 /* VEX_W_0F3832_P_2 */
bf890a93 11376 { "vpmovzxbq", { XM, EXxmmdw }, 0 },
9e30b8e0
L
11377 },
11378 {
592a252b 11379 /* VEX_W_0F3833_P_2 */
bf890a93 11380 { "vpmovzxwd", { XM, EXxmmq }, 0 },
9e30b8e0
L
11381 },
11382 {
592a252b 11383 /* VEX_W_0F3834_P_2 */
bf890a93 11384 { "vpmovzxwq", { XM, EXxmmqd }, 0 },
9e30b8e0
L
11385 },
11386 {
592a252b 11387 /* VEX_W_0F3835_P_2 */
bf890a93 11388 { "vpmovzxdq", { XM, EXxmmq }, 0 },
6c30d220
L
11389 },
11390 {
11391 /* VEX_W_0F3836_P_2 */
bf890a93 11392 { "vpermd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11393 },
11394 {
592a252b 11395 /* VEX_W_0F3837_P_2 */
bf890a93 11396 { "vpcmpgtq", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11397 },
11398 {
592a252b 11399 /* VEX_W_0F3838_P_2 */
bf890a93 11400 { "vpminsb", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11401 },
11402 {
592a252b 11403 /* VEX_W_0F3839_P_2 */
bf890a93 11404 { "vpminsd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11405 },
11406 {
592a252b 11407 /* VEX_W_0F383A_P_2 */
bf890a93 11408 { "vpminuw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11409 },
11410 {
592a252b 11411 /* VEX_W_0F383B_P_2 */
bf890a93 11412 { "vpminud", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11413 },
11414 {
592a252b 11415 /* VEX_W_0F383C_P_2 */
bf890a93 11416 { "vpmaxsb", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11417 },
11418 {
592a252b 11419 /* VEX_W_0F383D_P_2 */
bf890a93 11420 { "vpmaxsd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11421 },
11422 {
592a252b 11423 /* VEX_W_0F383E_P_2 */
bf890a93 11424 { "vpmaxuw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11425 },
11426 {
592a252b 11427 /* VEX_W_0F383F_P_2 */
bf890a93 11428 { "vpmaxud", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11429 },
11430 {
592a252b 11431 /* VEX_W_0F3840_P_2 */
bf890a93 11432 { "vpmulld", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11433 },
11434 {
592a252b 11435 /* VEX_W_0F3841_P_2 */
bf890a93 11436 { "vphminposuw", { XM, EXx }, 0 },
9e30b8e0 11437 },
6c30d220
L
11438 {
11439 /* VEX_W_0F3846_P_2 */
bf890a93 11440 { "vpsravd", { XM, Vex, EXx }, 0 },
6c30d220
L
11441 },
11442 {
11443 /* VEX_W_0F3858_P_2 */
bf890a93 11444 { "vpbroadcastd", { XM, EXxmm_md }, 0 },
6c30d220
L
11445 },
11446 {
11447 /* VEX_W_0F3859_P_2 */
bf890a93 11448 { "vpbroadcastq", { XM, EXxmm_mq }, 0 },
6c30d220
L
11449 },
11450 {
11451 /* VEX_W_0F385A_P_2_M_0 */
bf890a93 11452 { "vbroadcasti128", { XM, Mxmm }, 0 },
6c30d220
L
11453 },
11454 {
11455 /* VEX_W_0F3878_P_2 */
bf890a93 11456 { "vpbroadcastb", { XM, EXxmm_mb }, 0 },
6c30d220
L
11457 },
11458 {
11459 /* VEX_W_0F3879_P_2 */
bf890a93 11460 { "vpbroadcastw", { XM, EXxmm_mw }, 0 },
6c30d220 11461 },
9e30b8e0 11462 {
592a252b 11463 /* VEX_W_0F38DB_P_2 */
bf890a93 11464 { "vaesimc", { XM, EXx }, 0 },
9e30b8e0
L
11465 },
11466 {
592a252b 11467 /* VEX_W_0F38DC_P_2 */
bf890a93 11468 { "vaesenc", { XM, Vex128, EXx }, 0 },
9e30b8e0
L
11469 },
11470 {
592a252b 11471 /* VEX_W_0F38DD_P_2 */
bf890a93 11472 { "vaesenclast", { XM, Vex128, EXx }, 0 },
9e30b8e0
L
11473 },
11474 {
592a252b 11475 /* VEX_W_0F38DE_P_2 */
bf890a93 11476 { "vaesdec", { XM, Vex128, EXx }, 0 },
9e30b8e0
L
11477 },
11478 {
592a252b 11479 /* VEX_W_0F38DF_P_2 */
bf890a93 11480 { "vaesdeclast", { XM, Vex128, EXx }, 0 },
9e30b8e0 11481 },
6c30d220
L
11482 {
11483 /* VEX_W_0F3A00_P_2 */
11484 { Bad_Opcode },
bf890a93 11485 { "vpermq", { XM, EXx, Ib }, 0 },
6c30d220
L
11486 },
11487 {
11488 /* VEX_W_0F3A01_P_2 */
11489 { Bad_Opcode },
bf890a93 11490 { "vpermpd", { XM, EXx, Ib }, 0 },
6c30d220
L
11491 },
11492 {
11493 /* VEX_W_0F3A02_P_2 */
bf890a93 11494 { "vpblendd", { XM, Vex, EXx, Ib }, 0 },
6c30d220 11495 },
9e30b8e0 11496 {
592a252b 11497 /* VEX_W_0F3A04_P_2 */
bf890a93 11498 { "vpermilps", { XM, EXx, Ib }, 0 },
9e30b8e0
L
11499 },
11500 {
592a252b 11501 /* VEX_W_0F3A05_P_2 */
bf890a93 11502 { "vpermilpd", { XM, EXx, Ib }, 0 },
9e30b8e0
L
11503 },
11504 {
592a252b 11505 /* VEX_W_0F3A06_P_2 */
bf890a93 11506 { "vperm2f128", { XM, Vex256, EXx, Ib }, 0 },
9e30b8e0
L
11507 },
11508 {
592a252b 11509 /* VEX_W_0F3A08_P_2 */
bf890a93 11510 { "vroundps", { XM, EXx, Ib }, 0 },
9e30b8e0
L
11511 },
11512 {
592a252b 11513 /* VEX_W_0F3A09_P_2 */
bf890a93 11514 { "vroundpd", { XM, EXx, Ib }, 0 },
9e30b8e0
L
11515 },
11516 {
592a252b 11517 /* VEX_W_0F3A0A_P_2 */
bf890a93 11518 { "vroundss", { XMScalar, VexScalar, EXdScalar, Ib }, 0 },
9e30b8e0
L
11519 },
11520 {
592a252b 11521 /* VEX_W_0F3A0B_P_2 */
bf890a93 11522 { "vroundsd", { XMScalar, VexScalar, EXqScalar, Ib }, 0 },
9e30b8e0
L
11523 },
11524 {
592a252b 11525 /* VEX_W_0F3A0C_P_2 */
bf890a93 11526 { "vblendps", { XM, Vex, EXx, Ib }, 0 },
9e30b8e0
L
11527 },
11528 {
592a252b 11529 /* VEX_W_0F3A0D_P_2 */
bf890a93 11530 { "vblendpd", { XM, Vex, EXx, Ib }, 0 },
9e30b8e0
L
11531 },
11532 {
592a252b 11533 /* VEX_W_0F3A0E_P_2 */
bf890a93 11534 { "vpblendw", { XM, Vex, EXx, Ib }, 0 },
9e30b8e0
L
11535 },
11536 {
592a252b 11537 /* VEX_W_0F3A0F_P_2 */
bf890a93 11538 { "vpalignr", { XM, Vex, EXx, Ib }, 0 },
9e30b8e0
L
11539 },
11540 {
592a252b 11541 /* VEX_W_0F3A14_P_2 */
bf890a93 11542 { "vpextrb", { Edqb, XM, Ib }, 0 },
9e30b8e0
L
11543 },
11544 {
592a252b 11545 /* VEX_W_0F3A15_P_2 */
bf890a93 11546 { "vpextrw", { Edqw, XM, Ib }, 0 },
9e30b8e0
L
11547 },
11548 {
592a252b 11549 /* VEX_W_0F3A18_P_2 */
bf890a93 11550 { "vinsertf128", { XM, Vex256, EXxmm, Ib }, 0 },
9e30b8e0
L
11551 },
11552 {
592a252b 11553 /* VEX_W_0F3A19_P_2 */
bf890a93 11554 { "vextractf128", { EXxmm, XM, Ib }, 0 },
9e30b8e0
L
11555 },
11556 {
592a252b 11557 /* VEX_W_0F3A20_P_2 */
bf890a93 11558 { "vpinsrb", { XM, Vex128, Edqb, Ib }, 0 },
9e30b8e0
L
11559 },
11560 {
592a252b 11561 /* VEX_W_0F3A21_P_2 */
bf890a93 11562 { "vinsertps", { XM, Vex128, EXd, Ib }, 0 },
9e30b8e0 11563 },
43234a1e 11564 {
1ba585e8 11565 /* VEX_W_0F3A30_P_2_LEN_0 */
ab4e4ed5
AF
11566 { MOD_TABLE (MOD_VEX_W_0_0F3A30_P_2_LEN_0) },
11567 { MOD_TABLE (MOD_VEX_W_1_0F3A30_P_2_LEN_0) },
43234a1e
L
11568 },
11569 {
1ba585e8 11570 /* VEX_W_0F3A31_P_2_LEN_0 */
ab4e4ed5
AF
11571 { MOD_TABLE (MOD_VEX_W_0_0F3A31_P_2_LEN_0) },
11572 { MOD_TABLE (MOD_VEX_W_1_0F3A31_P_2_LEN_0) },
1ba585e8
IT
11573 },
11574 {
11575 /* VEX_W_0F3A32_P_2_LEN_0 */
ab4e4ed5
AF
11576 { MOD_TABLE (MOD_VEX_W_0_0F3A32_P_2_LEN_0) },
11577 { MOD_TABLE (MOD_VEX_W_1_0F3A32_P_2_LEN_0) },
43234a1e 11578 },
1ba585e8
IT
11579 {
11580 /* VEX_W_0F3A33_P_2_LEN_0 */
ab4e4ed5
AF
11581 { MOD_TABLE (MOD_VEX_W_0_0F3A33_P_2_LEN_0) },
11582 { MOD_TABLE (MOD_VEX_W_1_0F3A33_P_2_LEN_0) },
1ba585e8 11583 },
6c30d220
L
11584 {
11585 /* VEX_W_0F3A38_P_2 */
bf890a93 11586 { "vinserti128", { XM, Vex256, EXxmm, Ib }, 0 },
6c30d220
L
11587 },
11588 {
11589 /* VEX_W_0F3A39_P_2 */
bf890a93 11590 { "vextracti128", { EXxmm, XM, Ib }, 0 },
6c30d220 11591 },
9e30b8e0 11592 {
592a252b 11593 /* VEX_W_0F3A40_P_2 */
bf890a93 11594 { "vdpps", { XM, Vex, EXx, Ib }, 0 },
9e30b8e0
L
11595 },
11596 {
592a252b 11597 /* VEX_W_0F3A41_P_2 */
bf890a93 11598 { "vdppd", { XM, Vex128, EXx, Ib }, 0 },
9e30b8e0
L
11599 },
11600 {
592a252b 11601 /* VEX_W_0F3A42_P_2 */
bf890a93 11602 { "vmpsadbw", { XM, Vex, EXx, Ib }, 0 },
9e30b8e0
L
11603 },
11604 {
592a252b 11605 /* VEX_W_0F3A44_P_2 */
bf890a93 11606 { "vpclmulqdq", { XM, Vex128, EXx, PCLMUL }, 0 },
9e30b8e0 11607 },
6c30d220
L
11608 {
11609 /* VEX_W_0F3A46_P_2 */
bf890a93 11610 { "vperm2i128", { XM, Vex256, EXx, Ib }, 0 },
6c30d220 11611 },
a683cc34 11612 {
592a252b 11613 /* VEX_W_0F3A48_P_2 */
bf890a93
IT
11614 { "vpermil2ps", { XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW }, 0 },
11615 { "vpermil2ps", { XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW }, 0 },
a683cc34
SP
11616 },
11617 {
592a252b 11618 /* VEX_W_0F3A49_P_2 */
bf890a93
IT
11619 { "vpermil2pd", { XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW }, 0 },
11620 { "vpermil2pd", { XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW }, 0 },
a683cc34 11621 },
9e30b8e0 11622 {
592a252b 11623 /* VEX_W_0F3A4A_P_2 */
bf890a93 11624 { "vblendvps", { XM, Vex, EXx, XMVexI4 }, 0 },
9e30b8e0
L
11625 },
11626 {
592a252b 11627 /* VEX_W_0F3A4B_P_2 */
bf890a93 11628 { "vblendvpd", { XM, Vex, EXx, XMVexI4 }, 0 },
9e30b8e0
L
11629 },
11630 {
592a252b 11631 /* VEX_W_0F3A4C_P_2 */
bf890a93 11632 { "vpblendvb", { XM, Vex, EXx, XMVexI4 }, 0 },
9e30b8e0
L
11633 },
11634 {
592a252b 11635 /* VEX_W_0F3A60_P_2 */
bf890a93 11636 { "vpcmpestrm", { XM, EXx, Ib }, 0 },
9e30b8e0
L
11637 },
11638 {
592a252b 11639 /* VEX_W_0F3A61_P_2 */
bf890a93 11640 { "vpcmpestri", { XM, EXx, Ib }, 0 },
9e30b8e0
L
11641 },
11642 {
592a252b 11643 /* VEX_W_0F3A62_P_2 */
bf890a93 11644 { "vpcmpistrm", { XM, EXx, Ib }, 0 },
9e30b8e0
L
11645 },
11646 {
592a252b 11647 /* VEX_W_0F3A63_P_2 */
bf890a93 11648 { "vpcmpistri", { XM, EXx, Ib }, 0 },
9e30b8e0
L
11649 },
11650 {
592a252b 11651 /* VEX_W_0F3ADF_P_2 */
bf890a93 11652 { "vaeskeygenassist", { XM, EXx, Ib }, 0 },
9e30b8e0 11653 },
43234a1e
L
11654#define NEED_VEX_W_TABLE
11655#include "i386-dis-evex.h"
11656#undef NEED_VEX_W_TABLE
9e30b8e0
L
11657};
11658
11659static const struct dis386 mod_table[][2] = {
11660 {
11661 /* MOD_8D */
bf890a93 11662 { "leaS", { Gv, M }, 0 },
9e30b8e0 11663 },
42164a71
L
11664 {
11665 /* MOD_C6_REG_7 */
11666 { Bad_Opcode },
11667 { RM_TABLE (RM_C6_REG_7) },
11668 },
11669 {
11670 /* MOD_C7_REG_7 */
11671 { Bad_Opcode },
11672 { RM_TABLE (RM_C7_REG_7) },
11673 },
4a357820
MZ
11674 {
11675 /* MOD_FF_REG_3 */
a72d2af2 11676 { "Jcall^", { indirEp }, 0 },
4a357820
MZ
11677 },
11678 {
11679 /* MOD_FF_REG_5 */
a72d2af2 11680 { "Jjmp^", { indirEp }, 0 },
4a357820 11681 },
9e30b8e0
L
11682 {
11683 /* MOD_0F01_REG_0 */
11684 { X86_64_TABLE (X86_64_0F01_REG_0) },
11685 { RM_TABLE (RM_0F01_REG_0) },
11686 },
11687 {
11688 /* MOD_0F01_REG_1 */
11689 { X86_64_TABLE (X86_64_0F01_REG_1) },
11690 { RM_TABLE (RM_0F01_REG_1) },
11691 },
11692 {
11693 /* MOD_0F01_REG_2 */
11694 { X86_64_TABLE (X86_64_0F01_REG_2) },
11695 { RM_TABLE (RM_0F01_REG_2) },
11696 },
11697 {
11698 /* MOD_0F01_REG_3 */
11699 { X86_64_TABLE (X86_64_0F01_REG_3) },
11700 { RM_TABLE (RM_0F01_REG_3) },
11701 },
8eab4136
L
11702 {
11703 /* MOD_0F01_REG_5 */
11704 { Bad_Opcode },
11705 { RM_TABLE (RM_0F01_REG_5) },
11706 },
9e30b8e0
L
11707 {
11708 /* MOD_0F01_REG_7 */
bf890a93 11709 { "invlpg", { Mb }, 0 },
9e30b8e0
L
11710 { RM_TABLE (RM_0F01_REG_7) },
11711 },
11712 {
11713 /* MOD_0F12_PREFIX_0 */
507bd325
L
11714 { "movlps", { XM, EXq }, PREFIX_OPCODE },
11715 { "movhlps", { XM, EXq }, PREFIX_OPCODE },
9e30b8e0
L
11716 },
11717 {
11718 /* MOD_0F13 */
507bd325 11719 { "movlpX", { EXq, XM }, PREFIX_OPCODE },
9e30b8e0
L
11720 },
11721 {
11722 /* MOD_0F16_PREFIX_0 */
bf890a93
IT
11723 { "movhps", { XM, EXq }, 0 },
11724 { "movlhps", { XM, EXq }, 0 },
9e30b8e0
L
11725 },
11726 {
11727 /* MOD_0F17 */
507bd325 11728 { "movhpX", { EXq, XM }, PREFIX_OPCODE },
9e30b8e0
L
11729 },
11730 {
11731 /* MOD_0F18_REG_0 */
bf890a93 11732 { "prefetchnta", { Mb }, 0 },
9e30b8e0
L
11733 },
11734 {
11735 /* MOD_0F18_REG_1 */
bf890a93 11736 { "prefetcht0", { Mb }, 0 },
9e30b8e0
L
11737 },
11738 {
11739 /* MOD_0F18_REG_2 */
bf890a93 11740 { "prefetcht1", { Mb }, 0 },
9e30b8e0
L
11741 },
11742 {
11743 /* MOD_0F18_REG_3 */
bf890a93 11744 { "prefetcht2", { Mb }, 0 },
9e30b8e0 11745 },
d7189fa5
RM
11746 {
11747 /* MOD_0F18_REG_4 */
bf890a93 11748 { "nop/reserved", { Mb }, 0 },
d7189fa5
RM
11749 },
11750 {
11751 /* MOD_0F18_REG_5 */
bf890a93 11752 { "nop/reserved", { Mb }, 0 },
d7189fa5
RM
11753 },
11754 {
11755 /* MOD_0F18_REG_6 */
bf890a93 11756 { "nop/reserved", { Mb }, 0 },
d7189fa5
RM
11757 },
11758 {
11759 /* MOD_0F18_REG_7 */
bf890a93 11760 { "nop/reserved", { Mb }, 0 },
d7189fa5 11761 },
7e8b059b
L
11762 {
11763 /* MOD_0F1A_PREFIX_0 */
bf890a93
IT
11764 { "bndldx", { Gbnd, Ev_bnd }, 0 },
11765 { "nopQ", { Ev }, 0 },
7e8b059b
L
11766 },
11767 {
11768 /* MOD_0F1B_PREFIX_0 */
bf890a93
IT
11769 { "bndstx", { Ev_bnd, Gbnd }, 0 },
11770 { "nopQ", { Ev }, 0 },
7e8b059b
L
11771 },
11772 {
11773 /* MOD_0F1B_PREFIX_1 */
bf890a93
IT
11774 { "bndmk", { Gbnd, Ev_bnd }, 0 },
11775 { "nopQ", { Ev }, 0 },
7e8b059b 11776 },
b844680a 11777 {
92fddf8e 11778 /* MOD_0F24 */
7bb15c6f 11779 { Bad_Opcode },
bf890a93 11780 { "movL", { Rd, Td }, 0 },
b844680a
L
11781 },
11782 {
92fddf8e 11783 /* MOD_0F26 */
592d1631 11784 { Bad_Opcode },
bf890a93 11785 { "movL", { Td, Rd }, 0 },
b844680a 11786 },
75c135a8
L
11787 {
11788 /* MOD_0F2B_PREFIX_0 */
507bd325 11789 {"movntps", { Mx, XM }, PREFIX_OPCODE },
75c135a8
L
11790 },
11791 {
11792 /* MOD_0F2B_PREFIX_1 */
507bd325 11793 {"movntss", { Md, XM }, PREFIX_OPCODE },
75c135a8
L
11794 },
11795 {
11796 /* MOD_0F2B_PREFIX_2 */
507bd325 11797 {"movntpd", { Mx, XM }, PREFIX_OPCODE },
75c135a8
L
11798 },
11799 {
11800 /* MOD_0F2B_PREFIX_3 */
507bd325 11801 {"movntsd", { Mq, XM }, PREFIX_OPCODE },
75c135a8
L
11802 },
11803 {
11804 /* MOD_0F51 */
592d1631 11805 { Bad_Opcode },
507bd325 11806 { "movmskpX", { Gdq, XS }, PREFIX_OPCODE },
75c135a8 11807 },
b844680a 11808 {
1ceb70f8 11809 /* MOD_0F71_REG_2 */
592d1631 11810 { Bad_Opcode },
bf890a93 11811 { "psrlw", { MS, Ib }, 0 },
b844680a
L
11812 },
11813 {
1ceb70f8 11814 /* MOD_0F71_REG_4 */
592d1631 11815 { Bad_Opcode },
bf890a93 11816 { "psraw", { MS, Ib }, 0 },
b844680a
L
11817 },
11818 {
1ceb70f8 11819 /* MOD_0F71_REG_6 */
592d1631 11820 { Bad_Opcode },
bf890a93 11821 { "psllw", { MS, Ib }, 0 },
b844680a
L
11822 },
11823 {
1ceb70f8 11824 /* MOD_0F72_REG_2 */
592d1631 11825 { Bad_Opcode },
bf890a93 11826 { "psrld", { MS, Ib }, 0 },
b844680a
L
11827 },
11828 {
1ceb70f8 11829 /* MOD_0F72_REG_4 */
592d1631 11830 { Bad_Opcode },
bf890a93 11831 { "psrad", { MS, Ib }, 0 },
b844680a
L
11832 },
11833 {
1ceb70f8 11834 /* MOD_0F72_REG_6 */
592d1631 11835 { Bad_Opcode },
bf890a93 11836 { "pslld", { MS, Ib }, 0 },
b844680a
L
11837 },
11838 {
1ceb70f8 11839 /* MOD_0F73_REG_2 */
592d1631 11840 { Bad_Opcode },
bf890a93 11841 { "psrlq", { MS, Ib }, 0 },
b844680a
L
11842 },
11843 {
1ceb70f8 11844 /* MOD_0F73_REG_3 */
592d1631 11845 { Bad_Opcode },
c0f3af97
L
11846 { PREFIX_TABLE (PREFIX_0F73_REG_3) },
11847 },
11848 {
11849 /* MOD_0F73_REG_6 */
592d1631 11850 { Bad_Opcode },
bf890a93 11851 { "psllq", { MS, Ib }, 0 },
c0f3af97
L
11852 },
11853 {
11854 /* MOD_0F73_REG_7 */
592d1631 11855 { Bad_Opcode },
c0f3af97
L
11856 { PREFIX_TABLE (PREFIX_0F73_REG_7) },
11857 },
11858 {
11859 /* MOD_0FAE_REG_0 */
bf890a93 11860 { "fxsave", { FXSAVE }, 0 },
c7b8aa3a 11861 { PREFIX_TABLE (PREFIX_0FAE_REG_0) },
c0f3af97
L
11862 },
11863 {
11864 /* MOD_0FAE_REG_1 */
bf890a93 11865 { "fxrstor", { FXSAVE }, 0 },
c7b8aa3a 11866 { PREFIX_TABLE (PREFIX_0FAE_REG_1) },
c0f3af97
L
11867 },
11868 {
11869 /* MOD_0FAE_REG_2 */
bf890a93 11870 { "ldmxcsr", { Md }, 0 },
c7b8aa3a 11871 { PREFIX_TABLE (PREFIX_0FAE_REG_2) },
c0f3af97
L
11872 },
11873 {
11874 /* MOD_0FAE_REG_3 */
bf890a93 11875 { "stmxcsr", { Md }, 0 },
c7b8aa3a 11876 { PREFIX_TABLE (PREFIX_0FAE_REG_3) },
c0f3af97
L
11877 },
11878 {
11879 /* MOD_0FAE_REG_4 */
6b40c462
L
11880 { PREFIX_TABLE (PREFIX_MOD_0_0FAE_REG_4) },
11881 { PREFIX_TABLE (PREFIX_MOD_3_0FAE_REG_4) },
c0f3af97
L
11882 },
11883 {
11884 /* MOD_0FAE_REG_5 */
bf890a93 11885 { "xrstor", { FXSAVE }, 0 },
c0f3af97
L
11886 { RM_TABLE (RM_0FAE_REG_5) },
11887 },
11888 {
11889 /* MOD_0FAE_REG_6 */
c5e7287a 11890 { PREFIX_TABLE (PREFIX_0FAE_REG_6) },
c0f3af97
L
11891 { RM_TABLE (RM_0FAE_REG_6) },
11892 },
11893 {
11894 /* MOD_0FAE_REG_7 */
963f3586 11895 { PREFIX_TABLE (PREFIX_0FAE_REG_7) },
c0f3af97
L
11896 { RM_TABLE (RM_0FAE_REG_7) },
11897 },
11898 {
11899 /* MOD_0FB2 */
bf890a93 11900 { "lssS", { Gv, Mp }, 0 },
c0f3af97
L
11901 },
11902 {
11903 /* MOD_0FB4 */
bf890a93 11904 { "lfsS", { Gv, Mp }, 0 },
c0f3af97
L
11905 },
11906 {
11907 /* MOD_0FB5 */
bf890a93 11908 { "lgsS", { Gv, Mp }, 0 },
c0f3af97 11909 },
a8484f96
L
11910 {
11911 /* MOD_0FC3 */
11912 { PREFIX_TABLE (PREFIX_MOD_0_0FC3) },
11913 },
963f3586
IT
11914 {
11915 /* MOD_0FC7_REG_3 */
a8484f96 11916 { "xrstors", { FXSAVE }, 0 },
963f3586
IT
11917 },
11918 {
11919 /* MOD_0FC7_REG_4 */
bf890a93 11920 { "xsavec", { FXSAVE }, 0 },
963f3586
IT
11921 },
11922 {
11923 /* MOD_0FC7_REG_5 */
bf890a93 11924 { "xsaves", { FXSAVE }, 0 },
963f3586 11925 },
c0f3af97
L
11926 {
11927 /* MOD_0FC7_REG_6 */
f24bcbaa
L
11928 { PREFIX_TABLE (PREFIX_MOD_0_0FC7_REG_6) },
11929 { PREFIX_TABLE (PREFIX_MOD_3_0FC7_REG_6) }
c0f3af97
L
11930 },
11931 {
11932 /* MOD_0FC7_REG_7 */
bf890a93 11933 { "vmptrst", { Mq }, 0 },
f24bcbaa 11934 { PREFIX_TABLE (PREFIX_MOD_3_0FC7_REG_7) }
c0f3af97
L
11935 },
11936 {
11937 /* MOD_0FD7 */
592d1631 11938 { Bad_Opcode },
bf890a93 11939 { "pmovmskb", { Gdq, MS }, 0 },
c0f3af97
L
11940 },
11941 {
11942 /* MOD_0FE7_PREFIX_2 */
bf890a93 11943 { "movntdq", { Mx, XM }, 0 },
c0f3af97
L
11944 },
11945 {
11946 /* MOD_0FF0_PREFIX_3 */
bf890a93 11947 { "lddqu", { XM, M }, 0 },
c0f3af97
L
11948 },
11949 {
11950 /* MOD_0F382A_PREFIX_2 */
bf890a93 11951 { "movntdqa", { XM, Mx }, 0 },
c0f3af97
L
11952 },
11953 {
11954 /* MOD_62_32BIT */
bf890a93 11955 { "bound{S|}", { Gv, Ma }, 0 },
43234a1e 11956 { EVEX_TABLE (EVEX_0F) },
c0f3af97
L
11957 },
11958 {
11959 /* MOD_C4_32BIT */
bf890a93 11960 { "lesS", { Gv, Mp }, 0 },
c0f3af97
L
11961 { VEX_C4_TABLE (VEX_0F) },
11962 },
11963 {
11964 /* MOD_C5_32BIT */
bf890a93 11965 { "ldsS", { Gv, Mp }, 0 },
c0f3af97
L
11966 { VEX_C5_TABLE (VEX_0F) },
11967 },
11968 {
592a252b
L
11969 /* MOD_VEX_0F12_PREFIX_0 */
11970 { VEX_LEN_TABLE (VEX_LEN_0F12_P_0_M_0) },
11971 { VEX_LEN_TABLE (VEX_LEN_0F12_P_0_M_1) },
c0f3af97
L
11972 },
11973 {
592a252b
L
11974 /* MOD_VEX_0F13 */
11975 { VEX_LEN_TABLE (VEX_LEN_0F13_M_0) },
c0f3af97
L
11976 },
11977 {
592a252b
L
11978 /* MOD_VEX_0F16_PREFIX_0 */
11979 { VEX_LEN_TABLE (VEX_LEN_0F16_P_0_M_0) },
11980 { VEX_LEN_TABLE (VEX_LEN_0F16_P_0_M_1) },
c0f3af97
L
11981 },
11982 {
592a252b
L
11983 /* MOD_VEX_0F17 */
11984 { VEX_LEN_TABLE (VEX_LEN_0F17_M_0) },
c0f3af97
L
11985 },
11986 {
592a252b
L
11987 /* MOD_VEX_0F2B */
11988 { VEX_W_TABLE (VEX_W_0F2B_M_0) },
c0f3af97 11989 },
ab4e4ed5
AF
11990 {
11991 /* MOD_VEX_W_0_0F41_P_0_LEN_1 */
11992 { Bad_Opcode },
11993 { "kandw", { MaskG, MaskVex, MaskR }, 0 },
11994 },
11995 {
11996 /* MOD_VEX_W_1_0F41_P_0_LEN_1 */
11997 { Bad_Opcode },
11998 { "kandq", { MaskG, MaskVex, MaskR }, 0 },
11999 },
12000 {
12001 /* MOD_VEX_W_0_0F41_P_2_LEN_1 */
12002 { Bad_Opcode },
12003 { "kandb", { MaskG, MaskVex, MaskR }, 0 },
12004 },
12005 {
12006 /* MOD_VEX_W_1_0F41_P_2_LEN_1 */
12007 { Bad_Opcode },
12008 { "kandd", { MaskG, MaskVex, MaskR }, 0 },
12009 },
12010 {
12011 /* MOD_VEX_W_0_0F42_P_0_LEN_1 */
12012 { Bad_Opcode },
12013 { "kandnw", { MaskG, MaskVex, MaskR }, 0 },
12014 },
12015 {
12016 /* MOD_VEX_W_1_0F42_P_0_LEN_1 */
12017 { Bad_Opcode },
12018 { "kandnq", { MaskG, MaskVex, MaskR }, 0 },
12019 },
12020 {
12021 /* MOD_VEX_W_0_0F42_P_2_LEN_1 */
12022 { Bad_Opcode },
12023 { "kandnb", { MaskG, MaskVex, MaskR }, 0 },
12024 },
12025 {
12026 /* MOD_VEX_W_1_0F42_P_2_LEN_1 */
12027 { Bad_Opcode },
12028 { "kandnd", { MaskG, MaskVex, MaskR }, 0 },
12029 },
12030 {
12031 /* MOD_VEX_W_0_0F44_P_0_LEN_0 */
12032 { Bad_Opcode },
12033 { "knotw", { MaskG, MaskR }, 0 },
12034 },
12035 {
12036 /* MOD_VEX_W_1_0F44_P_0_LEN_0 */
12037 { Bad_Opcode },
12038 { "knotq", { MaskG, MaskR }, 0 },
12039 },
12040 {
12041 /* MOD_VEX_W_0_0F44_P_2_LEN_0 */
12042 { Bad_Opcode },
12043 { "knotb", { MaskG, MaskR }, 0 },
12044 },
12045 {
12046 /* MOD_VEX_W_1_0F44_P_2_LEN_0 */
12047 { Bad_Opcode },
12048 { "knotd", { MaskG, MaskR }, 0 },
12049 },
12050 {
12051 /* MOD_VEX_W_0_0F45_P_0_LEN_1 */
12052 { Bad_Opcode },
12053 { "korw", { MaskG, MaskVex, MaskR }, 0 },
12054 },
12055 {
12056 /* MOD_VEX_W_1_0F45_P_0_LEN_1 */
12057 { Bad_Opcode },
12058 { "korq", { MaskG, MaskVex, MaskR }, 0 },
12059 },
12060 {
12061 /* MOD_VEX_W_0_0F45_P_2_LEN_1 */
12062 { Bad_Opcode },
12063 { "korb", { MaskG, MaskVex, MaskR }, 0 },
12064 },
12065 {
12066 /* MOD_VEX_W_1_0F45_P_2_LEN_1 */
12067 { Bad_Opcode },
12068 { "kord", { MaskG, MaskVex, MaskR }, 0 },
12069 },
12070 {
12071 /* MOD_VEX_W_0_0F46_P_0_LEN_1 */
12072 { Bad_Opcode },
12073 { "kxnorw", { MaskG, MaskVex, MaskR }, 0 },
12074 },
12075 {
12076 /* MOD_VEX_W_1_0F46_P_0_LEN_1 */
12077 { Bad_Opcode },
12078 { "kxnorq", { MaskG, MaskVex, MaskR }, 0 },
12079 },
12080 {
12081 /* MOD_VEX_W_0_0F46_P_2_LEN_1 */
12082 { Bad_Opcode },
12083 { "kxnorb", { MaskG, MaskVex, MaskR }, 0 },
12084 },
12085 {
12086 /* MOD_VEX_W_1_0F46_P_2_LEN_1 */
12087 { Bad_Opcode },
12088 { "kxnord", { MaskG, MaskVex, MaskR }, 0 },
12089 },
12090 {
12091 /* MOD_VEX_W_0_0F47_P_0_LEN_1 */
12092 { Bad_Opcode },
12093 { "kxorw", { MaskG, MaskVex, MaskR }, 0 },
12094 },
12095 {
12096 /* MOD_VEX_W_1_0F47_P_0_LEN_1 */
12097 { Bad_Opcode },
12098 { "kxorq", { MaskG, MaskVex, MaskR }, 0 },
12099 },
12100 {
12101 /* MOD_VEX_W_0_0F47_P_2_LEN_1 */
12102 { Bad_Opcode },
12103 { "kxorb", { MaskG, MaskVex, MaskR }, 0 },
12104 },
12105 {
12106 /* MOD_VEX_W_1_0F47_P_2_LEN_1 */
12107 { Bad_Opcode },
12108 { "kxord", { MaskG, MaskVex, MaskR }, 0 },
12109 },
12110 {
12111 /* MOD_VEX_W_0_0F4A_P_0_LEN_1 */
12112 { Bad_Opcode },
12113 { "kaddw", { MaskG, MaskVex, MaskR }, 0 },
12114 },
12115 {
12116 /* MOD_VEX_W_1_0F4A_P_0_LEN_1 */
12117 { Bad_Opcode },
12118 { "kaddq", { MaskG, MaskVex, MaskR }, 0 },
12119 },
12120 {
12121 /* MOD_VEX_W_0_0F4A_P_2_LEN_1 */
12122 { Bad_Opcode },
12123 { "kaddb", { MaskG, MaskVex, MaskR }, 0 },
12124 },
12125 {
12126 /* MOD_VEX_W_1_0F4A_P_2_LEN_1 */
12127 { Bad_Opcode },
12128 { "kaddd", { MaskG, MaskVex, MaskR }, 0 },
12129 },
12130 {
12131 /* MOD_VEX_W_0_0F4B_P_0_LEN_1 */
12132 { Bad_Opcode },
12133 { "kunpckwd", { MaskG, MaskVex, MaskR }, 0 },
12134 },
12135 {
12136 /* MOD_VEX_W_1_0F4B_P_0_LEN_1 */
12137 { Bad_Opcode },
12138 { "kunpckdq", { MaskG, MaskVex, MaskR }, 0 },
12139 },
12140 {
12141 /* MOD_VEX_W_0_0F4B_P_2_LEN_1 */
12142 { Bad_Opcode },
12143 { "kunpckbw", { MaskG, MaskVex, MaskR }, 0 },
12144 },
c0f3af97 12145 {
592a252b 12146 /* MOD_VEX_0F50 */
592d1631 12147 { Bad_Opcode },
592a252b 12148 { VEX_W_TABLE (VEX_W_0F50_M_0) },
c0f3af97
L
12149 },
12150 {
592a252b 12151 /* MOD_VEX_0F71_REG_2 */
592d1631 12152 { Bad_Opcode },
592a252b 12153 { PREFIX_TABLE (PREFIX_VEX_0F71_REG_2) },
b844680a
L
12154 },
12155 {
592a252b 12156 /* MOD_VEX_0F71_REG_4 */
592d1631 12157 { Bad_Opcode },
592a252b 12158 { PREFIX_TABLE (PREFIX_VEX_0F71_REG_4) },
b844680a
L
12159 },
12160 {
592a252b 12161 /* MOD_VEX_0F71_REG_6 */
592d1631 12162 { Bad_Opcode },
592a252b 12163 { PREFIX_TABLE (PREFIX_VEX_0F71_REG_6) },
b844680a
L
12164 },
12165 {
592a252b 12166 /* MOD_VEX_0F72_REG_2 */
592d1631 12167 { Bad_Opcode },
592a252b 12168 { PREFIX_TABLE (PREFIX_VEX_0F72_REG_2) },
b844680a 12169 },
d8faab4e 12170 {
592a252b 12171 /* MOD_VEX_0F72_REG_4 */
592d1631 12172 { Bad_Opcode },
592a252b 12173 { PREFIX_TABLE (PREFIX_VEX_0F72_REG_4) },
d8faab4e
L
12174 },
12175 {
592a252b 12176 /* MOD_VEX_0F72_REG_6 */
592d1631 12177 { Bad_Opcode },
592a252b 12178 { PREFIX_TABLE (PREFIX_VEX_0F72_REG_6) },
d8faab4e 12179 },
876d4bfa 12180 {
592a252b 12181 /* MOD_VEX_0F73_REG_2 */
592d1631 12182 { Bad_Opcode },
592a252b 12183 { PREFIX_TABLE (PREFIX_VEX_0F73_REG_2) },
876d4bfa
L
12184 },
12185 {
592a252b 12186 /* MOD_VEX_0F73_REG_3 */
592d1631 12187 { Bad_Opcode },
592a252b 12188 { PREFIX_TABLE (PREFIX_VEX_0F73_REG_3) },
475a2301
L
12189 },
12190 {
592a252b 12191 /* MOD_VEX_0F73_REG_6 */
592d1631 12192 { Bad_Opcode },
592a252b 12193 { PREFIX_TABLE (PREFIX_VEX_0F73_REG_6) },
876d4bfa
L
12194 },
12195 {
592a252b 12196 /* MOD_VEX_0F73_REG_7 */
592d1631 12197 { Bad_Opcode },
592a252b 12198 { PREFIX_TABLE (PREFIX_VEX_0F73_REG_7) },
876d4bfa 12199 },
ab4e4ed5
AF
12200 {
12201 /* MOD_VEX_W_0_0F91_P_0_LEN_0 */
12202 { "kmovw", { Ew, MaskG }, 0 },
12203 { Bad_Opcode },
12204 },
12205 {
12206 /* MOD_VEX_W_0_0F91_P_0_LEN_0 */
12207 { "kmovq", { Eq, MaskG }, 0 },
12208 { Bad_Opcode },
12209 },
12210 {
12211 /* MOD_VEX_W_0_0F91_P_2_LEN_0 */
12212 { "kmovb", { Eb, MaskG }, 0 },
12213 { Bad_Opcode },
12214 },
12215 {
12216 /* MOD_VEX_W_0_0F91_P_2_LEN_0 */
12217 { "kmovd", { Ed, MaskG }, 0 },
12218 { Bad_Opcode },
12219 },
12220 {
12221 /* MOD_VEX_W_0_0F92_P_0_LEN_0 */
12222 { Bad_Opcode },
12223 { "kmovw", { MaskG, Rdq }, 0 },
12224 },
12225 {
12226 /* MOD_VEX_W_0_0F92_P_2_LEN_0 */
12227 { Bad_Opcode },
12228 { "kmovb", { MaskG, Rdq }, 0 },
12229 },
12230 {
12231 /* MOD_VEX_W_0_0F92_P_3_LEN_0 */
12232 { Bad_Opcode },
12233 { "kmovd", { MaskG, Rdq }, 0 },
12234 },
12235 {
12236 /* MOD_VEX_W_1_0F92_P_3_LEN_0 */
12237 { Bad_Opcode },
12238 { "kmovq", { MaskG, Rdq }, 0 },
12239 },
12240 {
12241 /* MOD_VEX_W_0_0F93_P_0_LEN_0 */
12242 { Bad_Opcode },
12243 { "kmovw", { Gdq, MaskR }, 0 },
12244 },
12245 {
12246 /* MOD_VEX_W_0_0F93_P_2_LEN_0 */
12247 { Bad_Opcode },
12248 { "kmovb", { Gdq, MaskR }, 0 },
12249 },
12250 {
12251 /* MOD_VEX_W_0_0F93_P_3_LEN_0 */
12252 { Bad_Opcode },
12253 { "kmovd", { Gdq, MaskR }, 0 },
12254 },
12255 {
12256 /* MOD_VEX_W_1_0F93_P_3_LEN_0 */
12257 { Bad_Opcode },
12258 { "kmovq", { Gdq, MaskR }, 0 },
12259 },
12260 {
12261 /* MOD_VEX_W_0_0F98_P_0_LEN_0 */
12262 { Bad_Opcode },
12263 { "kortestw", { MaskG, MaskR }, 0 },
12264 },
12265 {
12266 /* MOD_VEX_W_1_0F98_P_0_LEN_0 */
12267 { Bad_Opcode },
12268 { "kortestq", { MaskG, MaskR }, 0 },
12269 },
12270 {
12271 /* MOD_VEX_W_0_0F98_P_2_LEN_0 */
12272 { Bad_Opcode },
12273 { "kortestb", { MaskG, MaskR }, 0 },
12274 },
12275 {
12276 /* MOD_VEX_W_1_0F98_P_2_LEN_0 */
12277 { Bad_Opcode },
12278 { "kortestd", { MaskG, MaskR }, 0 },
12279 },
12280 {
12281 /* MOD_VEX_W_0_0F99_P_0_LEN_0 */
12282 { Bad_Opcode },
12283 { "ktestw", { MaskG, MaskR }, 0 },
12284 },
12285 {
12286 /* MOD_VEX_W_1_0F99_P_0_LEN_0 */
12287 { Bad_Opcode },
12288 { "ktestq", { MaskG, MaskR }, 0 },
12289 },
12290 {
12291 /* MOD_VEX_W_0_0F99_P_2_LEN_0 */
12292 { Bad_Opcode },
12293 { "ktestb", { MaskG, MaskR }, 0 },
12294 },
12295 {
12296 /* MOD_VEX_W_1_0F99_P_2_LEN_0 */
12297 { Bad_Opcode },
12298 { "ktestd", { MaskG, MaskR }, 0 },
12299 },
876d4bfa 12300 {
592a252b
L
12301 /* MOD_VEX_0FAE_REG_2 */
12302 { VEX_LEN_TABLE (VEX_LEN_0FAE_R_2_M_0) },
876d4bfa 12303 },
bbedc832 12304 {
592a252b
L
12305 /* MOD_VEX_0FAE_REG_3 */
12306 { VEX_LEN_TABLE (VEX_LEN_0FAE_R_3_M_0) },
bbedc832 12307 },
144c41d9 12308 {
592a252b 12309 /* MOD_VEX_0FD7_PREFIX_2 */
592d1631 12310 { Bad_Opcode },
6c30d220 12311 { VEX_W_TABLE (VEX_W_0FD7_P_2_M_1) },
144c41d9 12312 },
1afd85e3 12313 {
592a252b
L
12314 /* MOD_VEX_0FE7_PREFIX_2 */
12315 { VEX_W_TABLE (VEX_W_0FE7_P_2_M_0) },
1afd85e3
L
12316 },
12317 {
592a252b
L
12318 /* MOD_VEX_0FF0_PREFIX_3 */
12319 { VEX_W_TABLE (VEX_W_0FF0_P_3_M_0) },
92fddf8e 12320 },
75c135a8 12321 {
592a252b
L
12322 /* MOD_VEX_0F381A_PREFIX_2 */
12323 { VEX_LEN_TABLE (VEX_LEN_0F381A_P_2_M_0) },
75c135a8 12324 },
1afd85e3 12325 {
592a252b 12326 /* MOD_VEX_0F382A_PREFIX_2 */
6c30d220 12327 { VEX_W_TABLE (VEX_W_0F382A_P_2_M_0) },
1afd85e3 12328 },
75c135a8 12329 {
592a252b
L
12330 /* MOD_VEX_0F382C_PREFIX_2 */
12331 { VEX_W_TABLE (VEX_W_0F382C_P_2_M_0) },
75c135a8 12332 },
1afd85e3 12333 {
592a252b
L
12334 /* MOD_VEX_0F382D_PREFIX_2 */
12335 { VEX_W_TABLE (VEX_W_0F382D_P_2_M_0) },
1afd85e3
L
12336 },
12337 {
592a252b
L
12338 /* MOD_VEX_0F382E_PREFIX_2 */
12339 { VEX_W_TABLE (VEX_W_0F382E_P_2_M_0) },
1afd85e3
L
12340 },
12341 {
592a252b
L
12342 /* MOD_VEX_0F382F_PREFIX_2 */
12343 { VEX_W_TABLE (VEX_W_0F382F_P_2_M_0) },
1afd85e3 12344 },
6c30d220
L
12345 {
12346 /* MOD_VEX_0F385A_PREFIX_2 */
12347 { VEX_LEN_TABLE (VEX_LEN_0F385A_P_2_M_0) },
12348 },
12349 {
12350 /* MOD_VEX_0F388C_PREFIX_2 */
bf890a93 12351 { "vpmaskmov%LW", { XM, Vex, Mx }, 0 },
6c30d220
L
12352 },
12353 {
12354 /* MOD_VEX_0F388E_PREFIX_2 */
bf890a93 12355 { "vpmaskmov%LW", { Mx, Vex, XM }, 0 },
6c30d220 12356 },
ab4e4ed5
AF
12357 {
12358 /* MOD_VEX_W_0_0F3A30_P_2_LEN_0 */
12359 { Bad_Opcode },
12360 { "kshiftrb", { MaskG, MaskR, Ib }, 0 },
12361 },
12362 {
12363 /* MOD_VEX_W_1_0F3A30_P_2_LEN_0 */
12364 { Bad_Opcode },
12365 { "kshiftrw", { MaskG, MaskR, Ib }, 0 },
12366 },
12367 {
12368 /* MOD_VEX_W_0_0F3A31_P_2_LEN_0 */
12369 { Bad_Opcode },
12370 { "kshiftrd", { MaskG, MaskR, Ib }, 0 },
12371 },
12372 {
12373 /* MOD_VEX_W_1_0F3A31_P_2_LEN_0 */
12374 { Bad_Opcode },
12375 { "kshiftrq", { MaskG, MaskR, Ib }, 0 },
12376 },
12377 {
12378 /* MOD_VEX_W_0_0F3A32_P_2_LEN_0 */
12379 { Bad_Opcode },
12380 { "kshiftlb", { MaskG, MaskR, Ib }, 0 },
12381 },
12382 {
12383 /* MOD_VEX_W_1_0F3A32_P_2_LEN_0 */
12384 { Bad_Opcode },
12385 { "kshiftlw", { MaskG, MaskR, Ib }, 0 },
12386 },
12387 {
12388 /* MOD_VEX_W_0_0F3A33_P_2_LEN_0 */
12389 { Bad_Opcode },
12390 { "kshiftld", { MaskG, MaskR, Ib }, 0 },
12391 },
12392 {
12393 /* MOD_VEX_W_1_0F3A33_P_2_LEN_0 */
12394 { Bad_Opcode },
12395 { "kshiftlq", { MaskG, MaskR, Ib }, 0 },
12396 },
43234a1e
L
12397#define NEED_MOD_TABLE
12398#include "i386-dis-evex.h"
12399#undef NEED_MOD_TABLE
b844680a
L
12400};
12401
1ceb70f8 12402static const struct dis386 rm_table[][8] = {
42164a71
L
12403 {
12404 /* RM_C6_REG_7 */
bf890a93 12405 { "xabort", { Skip_MODRM, Ib }, 0 },
42164a71
L
12406 },
12407 {
12408 /* RM_C7_REG_7 */
bf890a93 12409 { "xbeginT", { Skip_MODRM, Jv }, 0 },
42164a71 12410 },
b844680a 12411 {
1ceb70f8 12412 /* RM_0F01_REG_0 */
592d1631 12413 { Bad_Opcode },
bf890a93
IT
12414 { "vmcall", { Skip_MODRM }, 0 },
12415 { "vmlaunch", { Skip_MODRM }, 0 },
12416 { "vmresume", { Skip_MODRM }, 0 },
12417 { "vmxoff", { Skip_MODRM }, 0 },
b844680a
L
12418 },
12419 {
1ceb70f8 12420 /* RM_0F01_REG_1 */
bf890a93
IT
12421 { "monitor", { { OP_Monitor, 0 } }, 0 },
12422 { "mwait", { { OP_Mwait, 0 } }, 0 },
12423 { "clac", { Skip_MODRM }, 0 },
12424 { "stac", { Skip_MODRM }, 0 },
2cf200a4
IT
12425 { Bad_Opcode },
12426 { Bad_Opcode },
12427 { Bad_Opcode },
bf890a93 12428 { "encls", { Skip_MODRM }, 0 },
b844680a 12429 },
475a2301
L
12430 {
12431 /* RM_0F01_REG_2 */
bf890a93
IT
12432 { "xgetbv", { Skip_MODRM }, 0 },
12433 { "xsetbv", { Skip_MODRM }, 0 },
8729a6f6
L
12434 { Bad_Opcode },
12435 { Bad_Opcode },
bf890a93
IT
12436 { "vmfunc", { Skip_MODRM }, 0 },
12437 { "xend", { Skip_MODRM }, 0 },
12438 { "xtest", { Skip_MODRM }, 0 },
12439 { "enclu", { Skip_MODRM }, 0 },
475a2301 12440 },
b844680a 12441 {
1ceb70f8 12442 /* RM_0F01_REG_3 */
bf890a93
IT
12443 { "vmrun", { Skip_MODRM }, 0 },
12444 { "vmmcall", { Skip_MODRM }, 0 },
12445 { "vmload", { Skip_MODRM }, 0 },
12446 { "vmsave", { Skip_MODRM }, 0 },
12447 { "stgi", { Skip_MODRM }, 0 },
12448 { "clgi", { Skip_MODRM }, 0 },
12449 { "skinit", { Skip_MODRM }, 0 },
12450 { "invlpga", { Skip_MODRM }, 0 },
4e7d34a6 12451 },
8eab4136
L
12452 {
12453 /* RM_0F01_REG_5 */
12454 { Bad_Opcode },
12455 { Bad_Opcode },
12456 { Bad_Opcode },
12457 { Bad_Opcode },
12458 { Bad_Opcode },
12459 { Bad_Opcode },
12460 { "rdpkru", { Skip_MODRM }, 0 },
12461 { "wrpkru", { Skip_MODRM }, 0 },
12462 },
4e7d34a6 12463 {
1ceb70f8 12464 /* RM_0F01_REG_7 */
bf890a93
IT
12465 { "swapgs", { Skip_MODRM }, 0 },
12466 { "rdtscp", { Skip_MODRM }, 0 },
9916071f
AP
12467 { "monitorx", { { OP_Monitor, 0 } }, 0 },
12468 { "mwaitx", { { OP_Mwaitx, 0 } }, 0 },
bf890a93 12469 { "clzero", { Skip_MODRM }, 0 },
b844680a
L
12470 },
12471 {
1ceb70f8 12472 /* RM_0FAE_REG_5 */
bf890a93 12473 { "lfence", { Skip_MODRM }, 0 },
b844680a
L
12474 },
12475 {
1ceb70f8 12476 /* RM_0FAE_REG_6 */
bf890a93 12477 { "mfence", { Skip_MODRM }, 0 },
b844680a 12478 },
bbedc832 12479 {
1ceb70f8 12480 /* RM_0FAE_REG_7 */
b5cefcca
L
12481 { "sfence", { Skip_MODRM }, 0 },
12482
144c41d9 12483 },
b844680a
L
12484};
12485
c608c12e
AM
12486#define INTERNAL_DISASSEMBLER_ERROR _("<internal disassembler error>")
12487
f16cd0d5
L
12488/* We use the high bit to indicate different name for the same
12489 prefix. */
f16cd0d5 12490#define REP_PREFIX (0xf3 | 0x100)
42164a71
L
12491#define XACQUIRE_PREFIX (0xf2 | 0x200)
12492#define XRELEASE_PREFIX (0xf3 | 0x400)
7e8b059b 12493#define BND_PREFIX (0xf2 | 0x400)
f16cd0d5
L
12494
12495static int
26ca5450 12496ckprefix (void)
252b5132 12497{
f16cd0d5 12498 int newrex, i, length;
52b15da3 12499 rex = 0;
c0f3af97 12500 rex_ignored = 0;
252b5132 12501 prefixes = 0;
7d421014 12502 used_prefixes = 0;
52b15da3 12503 rex_used = 0;
f16cd0d5
L
12504 last_lock_prefix = -1;
12505 last_repz_prefix = -1;
12506 last_repnz_prefix = -1;
12507 last_data_prefix = -1;
12508 last_addr_prefix = -1;
12509 last_rex_prefix = -1;
12510 last_seg_prefix = -1;
d9949a36 12511 fwait_prefix = -1;
285ca992 12512 active_seg_prefix = 0;
f310f33d
L
12513 for (i = 0; i < (int) ARRAY_SIZE (all_prefixes); i++)
12514 all_prefixes[i] = 0;
12515 i = 0;
f16cd0d5
L
12516 length = 0;
12517 /* The maximum instruction length is 15bytes. */
12518 while (length < MAX_CODE_LENGTH - 1)
252b5132
RH
12519 {
12520 FETCH_DATA (the_info, codep + 1);
52b15da3 12521 newrex = 0;
252b5132
RH
12522 switch (*codep)
12523 {
52b15da3
JH
12524 /* REX prefixes family. */
12525 case 0x40:
12526 case 0x41:
12527 case 0x42:
12528 case 0x43:
12529 case 0x44:
12530 case 0x45:
12531 case 0x46:
12532 case 0x47:
12533 case 0x48:
12534 case 0x49:
12535 case 0x4a:
12536 case 0x4b:
12537 case 0x4c:
12538 case 0x4d:
12539 case 0x4e:
12540 case 0x4f:
f16cd0d5
L
12541 if (address_mode == mode_64bit)
12542 newrex = *codep;
12543 else
12544 return 1;
12545 last_rex_prefix = i;
52b15da3 12546 break;
252b5132
RH
12547 case 0xf3:
12548 prefixes |= PREFIX_REPZ;
f16cd0d5 12549 last_repz_prefix = i;
252b5132
RH
12550 break;
12551 case 0xf2:
12552 prefixes |= PREFIX_REPNZ;
f16cd0d5 12553 last_repnz_prefix = i;
252b5132
RH
12554 break;
12555 case 0xf0:
12556 prefixes |= PREFIX_LOCK;
f16cd0d5 12557 last_lock_prefix = i;
252b5132
RH
12558 break;
12559 case 0x2e:
12560 prefixes |= PREFIX_CS;
f16cd0d5 12561 last_seg_prefix = i;
285ca992 12562 active_seg_prefix = PREFIX_CS;
252b5132
RH
12563 break;
12564 case 0x36:
12565 prefixes |= PREFIX_SS;
f16cd0d5 12566 last_seg_prefix = i;
285ca992 12567 active_seg_prefix = PREFIX_SS;
252b5132
RH
12568 break;
12569 case 0x3e:
12570 prefixes |= PREFIX_DS;
f16cd0d5 12571 last_seg_prefix = i;
285ca992 12572 active_seg_prefix = PREFIX_DS;
252b5132
RH
12573 break;
12574 case 0x26:
12575 prefixes |= PREFIX_ES;
f16cd0d5 12576 last_seg_prefix = i;
285ca992 12577 active_seg_prefix = PREFIX_ES;
252b5132
RH
12578 break;
12579 case 0x64:
12580 prefixes |= PREFIX_FS;
f16cd0d5 12581 last_seg_prefix = i;
285ca992 12582 active_seg_prefix = PREFIX_FS;
252b5132
RH
12583 break;
12584 case 0x65:
12585 prefixes |= PREFIX_GS;
f16cd0d5 12586 last_seg_prefix = i;
285ca992 12587 active_seg_prefix = PREFIX_GS;
252b5132
RH
12588 break;
12589 case 0x66:
12590 prefixes |= PREFIX_DATA;
f16cd0d5 12591 last_data_prefix = i;
252b5132
RH
12592 break;
12593 case 0x67:
12594 prefixes |= PREFIX_ADDR;
f16cd0d5 12595 last_addr_prefix = i;
252b5132 12596 break;
5076851f 12597 case FWAIT_OPCODE:
252b5132
RH
12598 /* fwait is really an instruction. If there are prefixes
12599 before the fwait, they belong to the fwait, *not* to the
12600 following instruction. */
d9949a36 12601 fwait_prefix = i;
3e7d61b2 12602 if (prefixes || rex)
252b5132
RH
12603 {
12604 prefixes |= PREFIX_FWAIT;
12605 codep++;
6c067bbb
RM
12606 /* This ensures that the previous REX prefixes are noticed
12607 as unused prefixes, as in the return case below. */
12608 rex_used = rex;
f16cd0d5 12609 return 1;
252b5132
RH
12610 }
12611 prefixes = PREFIX_FWAIT;
12612 break;
12613 default:
f16cd0d5 12614 return 1;
252b5132 12615 }
52b15da3
JH
12616 /* Rex is ignored when followed by another prefix. */
12617 if (rex)
12618 {
3e7d61b2 12619 rex_used = rex;
f16cd0d5 12620 return 1;
52b15da3 12621 }
f16cd0d5
L
12622 if (*codep != FWAIT_OPCODE)
12623 all_prefixes[i++] = *codep;
52b15da3 12624 rex = newrex;
252b5132 12625 codep++;
f16cd0d5
L
12626 length++;
12627 }
12628 return 0;
12629}
12630
7d421014
ILT
12631/* Return the name of the prefix byte PREF, or NULL if PREF is not a
12632 prefix byte. */
12633
12634static const char *
26ca5450 12635prefix_name (int pref, int sizeflag)
7d421014 12636{
0003779b
L
12637 static const char *rexes [16] =
12638 {
12639 "rex", /* 0x40 */
12640 "rex.B", /* 0x41 */
12641 "rex.X", /* 0x42 */
12642 "rex.XB", /* 0x43 */
12643 "rex.R", /* 0x44 */
12644 "rex.RB", /* 0x45 */
12645 "rex.RX", /* 0x46 */
12646 "rex.RXB", /* 0x47 */
12647 "rex.W", /* 0x48 */
12648 "rex.WB", /* 0x49 */
12649 "rex.WX", /* 0x4a */
12650 "rex.WXB", /* 0x4b */
12651 "rex.WR", /* 0x4c */
12652 "rex.WRB", /* 0x4d */
12653 "rex.WRX", /* 0x4e */
12654 "rex.WRXB", /* 0x4f */
12655 };
12656
7d421014
ILT
12657 switch (pref)
12658 {
52b15da3
JH
12659 /* REX prefixes family. */
12660 case 0x40:
52b15da3 12661 case 0x41:
52b15da3 12662 case 0x42:
52b15da3 12663 case 0x43:
52b15da3 12664 case 0x44:
52b15da3 12665 case 0x45:
52b15da3 12666 case 0x46:
52b15da3 12667 case 0x47:
52b15da3 12668 case 0x48:
52b15da3 12669 case 0x49:
52b15da3 12670 case 0x4a:
52b15da3 12671 case 0x4b:
52b15da3 12672 case 0x4c:
52b15da3 12673 case 0x4d:
52b15da3 12674 case 0x4e:
52b15da3 12675 case 0x4f:
0003779b 12676 return rexes [pref - 0x40];
7d421014
ILT
12677 case 0xf3:
12678 return "repz";
12679 case 0xf2:
12680 return "repnz";
12681 case 0xf0:
12682 return "lock";
12683 case 0x2e:
12684 return "cs";
12685 case 0x36:
12686 return "ss";
12687 case 0x3e:
12688 return "ds";
12689 case 0x26:
12690 return "es";
12691 case 0x64:
12692 return "fs";
12693 case 0x65:
12694 return "gs";
12695 case 0x66:
12696 return (sizeflag & DFLAG) ? "data16" : "data32";
12697 case 0x67:
cb712a9e 12698 if (address_mode == mode_64bit)
db6eb5be 12699 return (sizeflag & AFLAG) ? "addr32" : "addr64";
c1a64871 12700 else
2888cb7a 12701 return (sizeflag & AFLAG) ? "addr16" : "addr32";
7d421014
ILT
12702 case FWAIT_OPCODE:
12703 return "fwait";
f16cd0d5
L
12704 case REP_PREFIX:
12705 return "rep";
42164a71
L
12706 case XACQUIRE_PREFIX:
12707 return "xacquire";
12708 case XRELEASE_PREFIX:
12709 return "xrelease";
7e8b059b
L
12710 case BND_PREFIX:
12711 return "bnd";
7d421014
ILT
12712 default:
12713 return NULL;
12714 }
12715}
12716
ce518a5f
L
12717static char op_out[MAX_OPERANDS][100];
12718static int op_ad, op_index[MAX_OPERANDS];
1d9f512f 12719static int two_source_ops;
ce518a5f
L
12720static bfd_vma op_address[MAX_OPERANDS];
12721static bfd_vma op_riprel[MAX_OPERANDS];
52b15da3 12722static bfd_vma start_pc;
ce518a5f 12723
252b5132
RH
12724/*
12725 * On the 386's of 1988, the maximum length of an instruction is 15 bytes.
12726 * (see topic "Redundant prefixes" in the "Differences from 8086"
12727 * section of the "Virtual 8086 Mode" chapter.)
12728 * 'pc' should be the address of this instruction, it will
12729 * be used to print the target address if this is a relative jump or call
12730 * The function returns the length of this instruction in bytes.
12731 */
12732
252b5132 12733static char intel_syntax;
9d141669 12734static char intel_mnemonic = !SYSV386_COMPAT;
252b5132
RH
12735static char open_char;
12736static char close_char;
12737static char separator_char;
12738static char scale_char;
12739
5db04b09
L
12740enum x86_64_isa
12741{
12742 amd64 = 0,
12743 intel64
12744};
12745
12746static enum x86_64_isa isa64;
12747
e396998b
AM
12748/* Here for backwards compatibility. When gdb stops using
12749 print_insn_i386_att and print_insn_i386_intel these functions can
12750 disappear, and print_insn_i386 be merged into print_insn. */
252b5132 12751int
26ca5450 12752print_insn_i386_att (bfd_vma pc, disassemble_info *info)
252b5132
RH
12753{
12754 intel_syntax = 0;
e396998b
AM
12755
12756 return print_insn (pc, info);
252b5132
RH
12757}
12758
12759int
26ca5450 12760print_insn_i386_intel (bfd_vma pc, disassemble_info *info)
252b5132
RH
12761{
12762 intel_syntax = 1;
e396998b
AM
12763
12764 return print_insn (pc, info);
252b5132
RH
12765}
12766
e396998b 12767int
26ca5450 12768print_insn_i386 (bfd_vma pc, disassemble_info *info)
e396998b
AM
12769{
12770 intel_syntax = -1;
12771
12772 return print_insn (pc, info);
12773}
12774
f59a29b9
L
12775void
12776print_i386_disassembler_options (FILE *stream)
12777{
12778 fprintf (stream, _("\n\
12779The following i386/x86-64 specific disassembler options are supported for use\n\
12780with the -M switch (multiple options should be separated by commas):\n"));
12781
12782 fprintf (stream, _(" x86-64 Disassemble in 64bit mode\n"));
12783 fprintf (stream, _(" i386 Disassemble in 32bit mode\n"));
12784 fprintf (stream, _(" i8086 Disassemble in 16bit mode\n"));
12785 fprintf (stream, _(" att Display instruction in AT&T syntax\n"));
12786 fprintf (stream, _(" intel Display instruction in Intel syntax\n"));
9d141669
L
12787 fprintf (stream, _(" att-mnemonic\n"
12788 " Display instruction in AT&T mnemonic\n"));
12789 fprintf (stream, _(" intel-mnemonic\n"
12790 " Display instruction in Intel mnemonic\n"));
f59a29b9
L
12791 fprintf (stream, _(" addr64 Assume 64bit address size\n"));
12792 fprintf (stream, _(" addr32 Assume 32bit address size\n"));
12793 fprintf (stream, _(" addr16 Assume 16bit address size\n"));
12794 fprintf (stream, _(" data32 Assume 32bit data size\n"));
12795 fprintf (stream, _(" data16 Assume 16bit data size\n"));
12796 fprintf (stream, _(" suffix Always display instruction suffix in AT&T syntax\n"));
5db04b09
L
12797 fprintf (stream, _(" amd64 Display instruction in AMD64 ISA\n"));
12798 fprintf (stream, _(" intel64 Display instruction in Intel64 ISA\n"));
f59a29b9
L
12799}
12800
592d1631 12801/* Bad opcode. */
bf890a93 12802static const struct dis386 bad_opcode = { "(bad)", { XX }, 0 };
592d1631 12803
b844680a
L
12804/* Get a pointer to struct dis386 with a valid name. */
12805
12806static const struct dis386 *
8bb15339 12807get_valid_dis386 (const struct dis386 *dp, disassemble_info *info)
b844680a 12808{
91d6fa6a 12809 int vindex, vex_table_index;
b844680a
L
12810
12811 if (dp->name != NULL)
12812 return dp;
12813
12814 switch (dp->op[0].bytemode)
12815 {
1ceb70f8
L
12816 case USE_REG_TABLE:
12817 dp = &reg_table[dp->op[1].bytemode][modrm.reg];
12818 break;
12819
12820 case USE_MOD_TABLE:
91d6fa6a
NC
12821 vindex = modrm.mod == 0x3 ? 1 : 0;
12822 dp = &mod_table[dp->op[1].bytemode][vindex];
1ceb70f8
L
12823 break;
12824
12825 case USE_RM_TABLE:
12826 dp = &rm_table[dp->op[1].bytemode][modrm.rm];
b844680a
L
12827 break;
12828
4e7d34a6 12829 case USE_PREFIX_TABLE:
c0f3af97 12830 if (need_vex)
b844680a 12831 {
c0f3af97
L
12832 /* The prefix in VEX is implicit. */
12833 switch (vex.prefix)
12834 {
12835 case 0:
91d6fa6a 12836 vindex = 0;
c0f3af97
L
12837 break;
12838 case REPE_PREFIX_OPCODE:
91d6fa6a 12839 vindex = 1;
c0f3af97
L
12840 break;
12841 case DATA_PREFIX_OPCODE:
91d6fa6a 12842 vindex = 2;
c0f3af97
L
12843 break;
12844 case REPNE_PREFIX_OPCODE:
91d6fa6a 12845 vindex = 3;
c0f3af97
L
12846 break;
12847 default:
12848 abort ();
12849 break;
12850 }
b844680a 12851 }
7bb15c6f 12852 else
b844680a 12853 {
285ca992
L
12854 int last_prefix = -1;
12855 int prefix = 0;
91d6fa6a 12856 vindex = 0;
285ca992
L
12857 /* We check PREFIX_REPNZ and PREFIX_REPZ before PREFIX_DATA.
12858 When there are multiple PREFIX_REPNZ and PREFIX_REPZ, the
12859 last one wins. */
12860 if ((prefixes & (PREFIX_REPZ | PREFIX_REPNZ)) != 0)
b844680a 12861 {
285ca992 12862 if (last_repz_prefix > last_repnz_prefix)
c0f3af97 12863 {
285ca992
L
12864 vindex = 1;
12865 prefix = PREFIX_REPZ;
12866 last_prefix = last_repz_prefix;
c0f3af97
L
12867 }
12868 else
b844680a 12869 {
285ca992
L
12870 vindex = 3;
12871 prefix = PREFIX_REPNZ;
12872 last_prefix = last_repnz_prefix;
b844680a 12873 }
285ca992 12874
507bd325
L
12875 /* Check if prefix should be ignored. */
12876 if ((((prefix_table[dp->op[1].bytemode][vindex].prefix_requirement
12877 & PREFIX_IGNORED) >> PREFIX_IGNORED_SHIFT)
12878 & prefix) != 0)
285ca992
L
12879 vindex = 0;
12880 }
12881
12882 if (vindex == 0 && (prefixes & PREFIX_DATA) != 0)
12883 {
12884 vindex = 2;
12885 prefix = PREFIX_DATA;
12886 last_prefix = last_data_prefix;
12887 }
12888
12889 if (vindex != 0)
12890 {
12891 used_prefixes |= prefix;
12892 all_prefixes[last_prefix] = 0;
b844680a
L
12893 }
12894 }
91d6fa6a 12895 dp = &prefix_table[dp->op[1].bytemode][vindex];
b844680a
L
12896 break;
12897
4e7d34a6 12898 case USE_X86_64_TABLE:
91d6fa6a
NC
12899 vindex = address_mode == mode_64bit ? 1 : 0;
12900 dp = &x86_64_table[dp->op[1].bytemode][vindex];
b844680a
L
12901 break;
12902
4e7d34a6 12903 case USE_3BYTE_TABLE:
8bb15339 12904 FETCH_DATA (info, codep + 2);
91d6fa6a
NC
12905 vindex = *codep++;
12906 dp = &three_byte_table[dp->op[1].bytemode][vindex];
285ca992 12907 end_codep = codep;
8bb15339
L
12908 modrm.mod = (*codep >> 6) & 3;
12909 modrm.reg = (*codep >> 3) & 7;
12910 modrm.rm = *codep & 7;
12911 break;
12912
c0f3af97
L
12913 case USE_VEX_LEN_TABLE:
12914 if (!need_vex)
12915 abort ();
12916
12917 switch (vex.length)
12918 {
12919 case 128:
91d6fa6a 12920 vindex = 0;
c0f3af97
L
12921 break;
12922 case 256:
91d6fa6a 12923 vindex = 1;
c0f3af97
L
12924 break;
12925 default:
12926 abort ();
12927 break;
12928 }
12929
91d6fa6a 12930 dp = &vex_len_table[dp->op[1].bytemode][vindex];
c0f3af97
L
12931 break;
12932
f88c9eb0
SP
12933 case USE_XOP_8F_TABLE:
12934 FETCH_DATA (info, codep + 3);
12935 /* All bits in the REX prefix are ignored. */
12936 rex_ignored = rex;
12937 rex = ~(*codep >> 5) & 0x7;
12938
12939 /* VEX_TABLE_INDEX is the mmmmm part of the XOP byte 1 "RCB.mmmmm". */
12940 switch ((*codep & 0x1f))
12941 {
12942 default:
f07af43e
L
12943 dp = &bad_opcode;
12944 return dp;
5dd85c99
SP
12945 case 0x8:
12946 vex_table_index = XOP_08;
12947 break;
f88c9eb0
SP
12948 case 0x9:
12949 vex_table_index = XOP_09;
12950 break;
12951 case 0xa:
12952 vex_table_index = XOP_0A;
12953 break;
12954 }
12955 codep++;
12956 vex.w = *codep & 0x80;
12957 if (vex.w && address_mode == mode_64bit)
12958 rex |= REX_W;
12959
12960 vex.register_specifier = (~(*codep >> 3)) & 0xf;
12961 if (address_mode != mode_64bit
12962 && vex.register_specifier > 0x7)
f07af43e
L
12963 {
12964 dp = &bad_opcode;
12965 return dp;
12966 }
f88c9eb0
SP
12967
12968 vex.length = (*codep & 0x4) ? 256 : 128;
12969 switch ((*codep & 0x3))
12970 {
12971 case 0:
12972 vex.prefix = 0;
12973 break;
12974 case 1:
12975 vex.prefix = DATA_PREFIX_OPCODE;
12976 break;
12977 case 2:
12978 vex.prefix = REPE_PREFIX_OPCODE;
12979 break;
12980 case 3:
12981 vex.prefix = REPNE_PREFIX_OPCODE;
12982 break;
12983 }
12984 need_vex = 1;
12985 need_vex_reg = 1;
12986 codep++;
91d6fa6a
NC
12987 vindex = *codep++;
12988 dp = &xop_table[vex_table_index][vindex];
c48244a5 12989
285ca992 12990 end_codep = codep;
c48244a5
SP
12991 FETCH_DATA (info, codep + 1);
12992 modrm.mod = (*codep >> 6) & 3;
12993 modrm.reg = (*codep >> 3) & 7;
12994 modrm.rm = *codep & 7;
f88c9eb0
SP
12995 break;
12996
c0f3af97 12997 case USE_VEX_C4_TABLE:
43234a1e 12998 /* VEX prefix. */
c0f3af97
L
12999 FETCH_DATA (info, codep + 3);
13000 /* All bits in the REX prefix are ignored. */
13001 rex_ignored = rex;
13002 rex = ~(*codep >> 5) & 0x7;
13003 switch ((*codep & 0x1f))
13004 {
13005 default:
f07af43e
L
13006 dp = &bad_opcode;
13007 return dp;
c0f3af97 13008 case 0x1:
f88c9eb0 13009 vex_table_index = VEX_0F;
c0f3af97
L
13010 break;
13011 case 0x2:
f88c9eb0 13012 vex_table_index = VEX_0F38;
c0f3af97
L
13013 break;
13014 case 0x3:
f88c9eb0 13015 vex_table_index = VEX_0F3A;
c0f3af97
L
13016 break;
13017 }
13018 codep++;
13019 vex.w = *codep & 0x80;
9889cbb1 13020 if (address_mode == mode_64bit)
f07af43e 13021 {
9889cbb1
L
13022 if (vex.w)
13023 rex |= REX_W;
13024 vex.register_specifier = (~(*codep >> 3)) & 0xf;
13025 }
13026 else
13027 {
13028 /* For the 3-byte VEX prefix in 32-bit mode, the REX_B bit
13029 is ignored, other REX bits are 0 and the highest bit in
13030 VEX.vvvv is also ignored. */
13031 rex = 0;
13032 vex.register_specifier = (~(*codep >> 3)) & 0x7;
f07af43e 13033 }
c0f3af97
L
13034 vex.length = (*codep & 0x4) ? 256 : 128;
13035 switch ((*codep & 0x3))
13036 {
13037 case 0:
13038 vex.prefix = 0;
13039 break;
13040 case 1:
13041 vex.prefix = DATA_PREFIX_OPCODE;
13042 break;
13043 case 2:
13044 vex.prefix = REPE_PREFIX_OPCODE;
13045 break;
13046 case 3:
13047 vex.prefix = REPNE_PREFIX_OPCODE;
13048 break;
13049 }
13050 need_vex = 1;
13051 need_vex_reg = 1;
13052 codep++;
91d6fa6a
NC
13053 vindex = *codep++;
13054 dp = &vex_table[vex_table_index][vindex];
285ca992 13055 end_codep = codep;
c0f3af97 13056 /* There is no MODRM byte for VEX [82|77]. */
91d6fa6a 13057 if (vindex != 0x77 && vindex != 0x82)
c0f3af97
L
13058 {
13059 FETCH_DATA (info, codep + 1);
13060 modrm.mod = (*codep >> 6) & 3;
13061 modrm.reg = (*codep >> 3) & 7;
13062 modrm.rm = *codep & 7;
13063 }
13064 break;
13065
13066 case USE_VEX_C5_TABLE:
43234a1e 13067 /* VEX prefix. */
c0f3af97
L
13068 FETCH_DATA (info, codep + 2);
13069 /* All bits in the REX prefix are ignored. */
13070 rex_ignored = rex;
13071 rex = (*codep & 0x80) ? 0 : REX_R;
13072
9889cbb1
L
13073 /* For the 2-byte VEX prefix in 32-bit mode, the highest bit in
13074 VEX.vvvv is 1. */
c0f3af97 13075 vex.register_specifier = (~(*codep >> 3)) & 0xf;
759a05ce 13076 vex.w = 0;
c0f3af97
L
13077 vex.length = (*codep & 0x4) ? 256 : 128;
13078 switch ((*codep & 0x3))
13079 {
13080 case 0:
13081 vex.prefix = 0;
13082 break;
13083 case 1:
13084 vex.prefix = DATA_PREFIX_OPCODE;
13085 break;
13086 case 2:
13087 vex.prefix = REPE_PREFIX_OPCODE;
13088 break;
13089 case 3:
13090 vex.prefix = REPNE_PREFIX_OPCODE;
13091 break;
13092 }
13093 need_vex = 1;
13094 need_vex_reg = 1;
13095 codep++;
91d6fa6a
NC
13096 vindex = *codep++;
13097 dp = &vex_table[dp->op[1].bytemode][vindex];
285ca992 13098 end_codep = codep;
c0f3af97 13099 /* There is no MODRM byte for VEX [82|77]. */
91d6fa6a 13100 if (vindex != 0x77 && vindex != 0x82)
c0f3af97
L
13101 {
13102 FETCH_DATA (info, codep + 1);
13103 modrm.mod = (*codep >> 6) & 3;
13104 modrm.reg = (*codep >> 3) & 7;
13105 modrm.rm = *codep & 7;
13106 }
13107 break;
13108
9e30b8e0
L
13109 case USE_VEX_W_TABLE:
13110 if (!need_vex)
13111 abort ();
13112
13113 dp = &vex_w_table[dp->op[1].bytemode][vex.w ? 1 : 0];
13114 break;
13115
43234a1e
L
13116 case USE_EVEX_TABLE:
13117 two_source_ops = 0;
13118 /* EVEX prefix. */
13119 vex.evex = 1;
13120 FETCH_DATA (info, codep + 4);
13121 /* All bits in the REX prefix are ignored. */
13122 rex_ignored = rex;
13123 /* The first byte after 0x62. */
13124 rex = ~(*codep >> 5) & 0x7;
13125 vex.r = *codep & 0x10;
13126 switch ((*codep & 0xf))
13127 {
13128 default:
13129 return &bad_opcode;
13130 case 0x1:
13131 vex_table_index = EVEX_0F;
13132 break;
13133 case 0x2:
13134 vex_table_index = EVEX_0F38;
13135 break;
13136 case 0x3:
13137 vex_table_index = EVEX_0F3A;
13138 break;
13139 }
13140
13141 /* The second byte after 0x62. */
13142 codep++;
13143 vex.w = *codep & 0x80;
13144 if (vex.w && address_mode == mode_64bit)
13145 rex |= REX_W;
13146
13147 vex.register_specifier = (~(*codep >> 3)) & 0xf;
13148 if (address_mode != mode_64bit)
13149 {
13150 /* In 16/32-bit mode silently ignore following bits. */
13151 rex &= ~REX_B;
13152 vex.r = 1;
13153 vex.v = 1;
13154 vex.register_specifier &= 0x7;
13155 }
13156
13157 /* The U bit. */
13158 if (!(*codep & 0x4))
13159 return &bad_opcode;
13160
13161 switch ((*codep & 0x3))
13162 {
13163 case 0:
13164 vex.prefix = 0;
13165 break;
13166 case 1:
13167 vex.prefix = DATA_PREFIX_OPCODE;
13168 break;
13169 case 2:
13170 vex.prefix = REPE_PREFIX_OPCODE;
13171 break;
13172 case 3:
13173 vex.prefix = REPNE_PREFIX_OPCODE;
13174 break;
13175 }
13176
13177 /* The third byte after 0x62. */
13178 codep++;
13179
13180 /* Remember the static rounding bits. */
13181 vex.ll = (*codep >> 5) & 3;
13182 vex.b = (*codep & 0x10) != 0;
13183
13184 vex.v = *codep & 0x8;
13185 vex.mask_register_specifier = *codep & 0x7;
13186 vex.zeroing = *codep & 0x80;
13187
13188 need_vex = 1;
13189 need_vex_reg = 1;
13190 codep++;
13191 vindex = *codep++;
13192 dp = &evex_table[vex_table_index][vindex];
285ca992 13193 end_codep = codep;
43234a1e
L
13194 FETCH_DATA (info, codep + 1);
13195 modrm.mod = (*codep >> 6) & 3;
13196 modrm.reg = (*codep >> 3) & 7;
13197 modrm.rm = *codep & 7;
13198
13199 /* Set vector length. */
13200 if (modrm.mod == 3 && vex.b)
13201 vex.length = 512;
13202 else
13203 {
13204 switch (vex.ll)
13205 {
13206 case 0x0:
13207 vex.length = 128;
13208 break;
13209 case 0x1:
13210 vex.length = 256;
13211 break;
13212 case 0x2:
13213 vex.length = 512;
13214 break;
13215 default:
13216 return &bad_opcode;
13217 }
13218 }
13219 break;
13220
592d1631
L
13221 case 0:
13222 dp = &bad_opcode;
13223 break;
13224
b844680a 13225 default:
d34b5006 13226 abort ();
b844680a
L
13227 }
13228
13229 if (dp->name != NULL)
13230 return dp;
13231 else
8bb15339 13232 return get_valid_dis386 (dp, info);
b844680a
L
13233}
13234
dfc8cf43 13235static void
55cf16e1 13236get_sib (disassemble_info *info, int sizeflag)
dfc8cf43
L
13237{
13238 /* If modrm.mod == 3, operand must be register. */
13239 if (need_modrm
55cf16e1 13240 && ((sizeflag & AFLAG) || address_mode == mode_64bit)
dfc8cf43
L
13241 && modrm.mod != 3
13242 && modrm.rm == 4)
13243 {
13244 FETCH_DATA (info, codep + 2);
13245 sib.index = (codep [1] >> 3) & 7;
13246 sib.scale = (codep [1] >> 6) & 3;
13247 sib.base = codep [1] & 7;
13248 }
13249}
13250
e396998b 13251static int
26ca5450 13252print_insn (bfd_vma pc, disassemble_info *info)
252b5132 13253{
2da11e11 13254 const struct dis386 *dp;
252b5132 13255 int i;
ce518a5f 13256 char *op_txt[MAX_OPERANDS];
252b5132 13257 int needcomma;
df18fdba 13258 int sizeflag, orig_sizeflag;
e396998b 13259 const char *p;
252b5132 13260 struct dis_private priv;
f16cd0d5 13261 int prefix_length;
252b5132 13262
d7921315
L
13263 priv.orig_sizeflag = AFLAG | DFLAG;
13264 if ((info->mach & bfd_mach_i386_i386) != 0)
cb712a9e 13265 address_mode = mode_32bit;
2da11e11 13266 else if (info->mach == bfd_mach_i386_i8086)
d7921315
L
13267 {
13268 address_mode = mode_16bit;
13269 priv.orig_sizeflag = 0;
13270 }
2da11e11 13271 else
d7921315
L
13272 address_mode = mode_64bit;
13273
13274 if (intel_syntax == (char) -1)
13275 intel_syntax = (info->mach & bfd_mach_i386_intel_syntax) != 0;
e396998b
AM
13276
13277 for (p = info->disassembler_options; p != NULL; )
13278 {
5db04b09
L
13279 if (CONST_STRNEQ (p, "amd64"))
13280 isa64 = amd64;
13281 else if (CONST_STRNEQ (p, "intel64"))
13282 isa64 = intel64;
13283 else if (CONST_STRNEQ (p, "x86-64"))
e396998b 13284 {
cb712a9e 13285 address_mode = mode_64bit;
e396998b
AM
13286 priv.orig_sizeflag = AFLAG | DFLAG;
13287 }
0112cd26 13288 else if (CONST_STRNEQ (p, "i386"))
e396998b 13289 {
cb712a9e 13290 address_mode = mode_32bit;
e396998b
AM
13291 priv.orig_sizeflag = AFLAG | DFLAG;
13292 }
0112cd26 13293 else if (CONST_STRNEQ (p, "i8086"))
e396998b 13294 {
cb712a9e 13295 address_mode = mode_16bit;
e396998b
AM
13296 priv.orig_sizeflag = 0;
13297 }
0112cd26 13298 else if (CONST_STRNEQ (p, "intel"))
e396998b
AM
13299 {
13300 intel_syntax = 1;
9d141669
L
13301 if (CONST_STRNEQ (p + 5, "-mnemonic"))
13302 intel_mnemonic = 1;
e396998b 13303 }
0112cd26 13304 else if (CONST_STRNEQ (p, "att"))
e396998b
AM
13305 {
13306 intel_syntax = 0;
9d141669
L
13307 if (CONST_STRNEQ (p + 3, "-mnemonic"))
13308 intel_mnemonic = 0;
e396998b 13309 }
0112cd26 13310 else if (CONST_STRNEQ (p, "addr"))
e396998b 13311 {
f59a29b9
L
13312 if (address_mode == mode_64bit)
13313 {
13314 if (p[4] == '3' && p[5] == '2')
13315 priv.orig_sizeflag &= ~AFLAG;
13316 else if (p[4] == '6' && p[5] == '4')
13317 priv.orig_sizeflag |= AFLAG;
13318 }
13319 else
13320 {
13321 if (p[4] == '1' && p[5] == '6')
13322 priv.orig_sizeflag &= ~AFLAG;
13323 else if (p[4] == '3' && p[5] == '2')
13324 priv.orig_sizeflag |= AFLAG;
13325 }
e396998b 13326 }
0112cd26 13327 else if (CONST_STRNEQ (p, "data"))
e396998b
AM
13328 {
13329 if (p[4] == '1' && p[5] == '6')
13330 priv.orig_sizeflag &= ~DFLAG;
13331 else if (p[4] == '3' && p[5] == '2')
13332 priv.orig_sizeflag |= DFLAG;
13333 }
0112cd26 13334 else if (CONST_STRNEQ (p, "suffix"))
e396998b
AM
13335 priv.orig_sizeflag |= SUFFIX_ALWAYS;
13336
13337 p = strchr (p, ',');
13338 if (p != NULL)
13339 p++;
13340 }
13341
c0f92bf9
L
13342 if (address_mode == mode_64bit && sizeof (bfd_vma) < 8)
13343 {
13344 (*info->fprintf_func) (info->stream,
13345 _("64-bit address is disabled"));
13346 return -1;
13347 }
13348
e396998b
AM
13349 if (intel_syntax)
13350 {
13351 names64 = intel_names64;
13352 names32 = intel_names32;
13353 names16 = intel_names16;
13354 names8 = intel_names8;
13355 names8rex = intel_names8rex;
13356 names_seg = intel_names_seg;
b9733481 13357 names_mm = intel_names_mm;
7e8b059b 13358 names_bnd = intel_names_bnd;
b9733481
L
13359 names_xmm = intel_names_xmm;
13360 names_ymm = intel_names_ymm;
43234a1e 13361 names_zmm = intel_names_zmm;
db51cc60
L
13362 index64 = intel_index64;
13363 index32 = intel_index32;
43234a1e 13364 names_mask = intel_names_mask;
e396998b
AM
13365 index16 = intel_index16;
13366 open_char = '[';
13367 close_char = ']';
13368 separator_char = '+';
13369 scale_char = '*';
13370 }
13371 else
13372 {
13373 names64 = att_names64;
13374 names32 = att_names32;
13375 names16 = att_names16;
13376 names8 = att_names8;
13377 names8rex = att_names8rex;
13378 names_seg = att_names_seg;
b9733481 13379 names_mm = att_names_mm;
7e8b059b 13380 names_bnd = att_names_bnd;
b9733481
L
13381 names_xmm = att_names_xmm;
13382 names_ymm = att_names_ymm;
43234a1e 13383 names_zmm = att_names_zmm;
db51cc60
L
13384 index64 = att_index64;
13385 index32 = att_index32;
43234a1e 13386 names_mask = att_names_mask;
e396998b
AM
13387 index16 = att_index16;
13388 open_char = '(';
13389 close_char = ')';
13390 separator_char = ',';
13391 scale_char = ',';
13392 }
2da11e11 13393
4fe53c98 13394 /* The output looks better if we put 7 bytes on a line, since that
8a9036a4
L
13395 puts most long word instructions on a single line. Use 8 bytes
13396 for Intel L1OM. */
d7921315 13397 if ((info->mach & bfd_mach_l1om) != 0)
8a9036a4
L
13398 info->bytes_per_line = 8;
13399 else
13400 info->bytes_per_line = 7;
252b5132 13401
26ca5450 13402 info->private_data = &priv;
252b5132
RH
13403 priv.max_fetched = priv.the_buffer;
13404 priv.insn_start = pc;
252b5132
RH
13405
13406 obuf[0] = 0;
ce518a5f
L
13407 for (i = 0; i < MAX_OPERANDS; ++i)
13408 {
13409 op_out[i][0] = 0;
13410 op_index[i] = -1;
13411 }
252b5132
RH
13412
13413 the_info = info;
13414 start_pc = pc;
e396998b
AM
13415 start_codep = priv.the_buffer;
13416 codep = priv.the_buffer;
252b5132 13417
8df14d78 13418 if (OPCODES_SIGSETJMP (priv.bailout) != 0)
5076851f 13419 {
7d421014
ILT
13420 const char *name;
13421
5076851f 13422 /* Getting here means we tried for data but didn't get it. That
e396998b
AM
13423 means we have an incomplete instruction of some sort. Just
13424 print the first byte as a prefix or a .byte pseudo-op. */
13425 if (codep > priv.the_buffer)
5076851f 13426 {
e396998b 13427 name = prefix_name (priv.the_buffer[0], priv.orig_sizeflag);
7d421014
ILT
13428 if (name != NULL)
13429 (*info->fprintf_func) (info->stream, "%s", name);
13430 else
5076851f 13431 {
7d421014
ILT
13432 /* Just print the first byte as a .byte instruction. */
13433 (*info->fprintf_func) (info->stream, ".byte 0x%x",
e396998b 13434 (unsigned int) priv.the_buffer[0]);
5076851f 13435 }
5076851f 13436
7d421014 13437 return 1;
5076851f
ILT
13438 }
13439
13440 return -1;
13441 }
13442
52b15da3 13443 obufp = obuf;
f16cd0d5
L
13444 sizeflag = priv.orig_sizeflag;
13445
13446 if (!ckprefix () || rex_used)
13447 {
13448 /* Too many prefixes or unused REX prefixes. */
13449 for (i = 0;
f6dd4781 13450 i < (int) ARRAY_SIZE (all_prefixes) && all_prefixes[i];
f16cd0d5 13451 i++)
de882298 13452 (*info->fprintf_func) (info->stream, "%s%s",
6c067bbb 13453 i == 0 ? "" : " ",
f16cd0d5 13454 prefix_name (all_prefixes[i], sizeflag));
de882298 13455 return i;
f16cd0d5 13456 }
252b5132
RH
13457
13458 insn_codep = codep;
13459
13460 FETCH_DATA (info, codep + 1);
13461 two_source_ops = (*codep == 0x62) || (*codep == 0xc8);
13462
3e7d61b2 13463 if (((prefixes & PREFIX_FWAIT)
f16cd0d5 13464 && ((*codep < 0xd8) || (*codep > 0xdf))))
252b5132 13465 {
86a80a50 13466 /* Handle prefixes before fwait. */
d9949a36 13467 for (i = 0; i < fwait_prefix && all_prefixes[i];
86a80a50
L
13468 i++)
13469 (*info->fprintf_func) (info->stream, "%s ",
13470 prefix_name (all_prefixes[i], sizeflag));
f16cd0d5 13471 (*info->fprintf_func) (info->stream, "fwait");
86a80a50 13472 return i + 1;
252b5132
RH
13473 }
13474
252b5132
RH
13475 if (*codep == 0x0f)
13476 {
eec0f4ca 13477 unsigned char threebyte;
5f40e14d
JS
13478
13479 codep++;
13480 FETCH_DATA (info, codep + 1);
13481 threebyte = *codep;
eec0f4ca 13482 dp = &dis386_twobyte[threebyte];
252b5132 13483 need_modrm = twobyte_has_modrm[*codep];
eec0f4ca 13484 codep++;
252b5132
RH
13485 }
13486 else
13487 {
6439fc28 13488 dp = &dis386[*codep];
252b5132 13489 need_modrm = onebyte_has_modrm[*codep];
eec0f4ca 13490 codep++;
252b5132 13491 }
246c51aa 13492
df18fdba
L
13493 /* Save sizeflag for printing the extra prefixes later before updating
13494 it for mnemonic and operand processing. The prefix names depend
13495 only on the address mode. */
13496 orig_sizeflag = sizeflag;
c608c12e 13497 if (prefixes & PREFIX_ADDR)
df18fdba 13498 sizeflag ^= AFLAG;
b844680a 13499 if ((prefixes & PREFIX_DATA))
df18fdba 13500 sizeflag ^= DFLAG;
3ffd33cf 13501
285ca992 13502 end_codep = codep;
8bb15339 13503 if (need_modrm)
252b5132
RH
13504 {
13505 FETCH_DATA (info, codep + 1);
7967e09e
L
13506 modrm.mod = (*codep >> 6) & 3;
13507 modrm.reg = (*codep >> 3) & 7;
13508 modrm.rm = *codep & 7;
252b5132
RH
13509 }
13510
42d5f9c6
MS
13511 need_vex = 0;
13512 need_vex_reg = 0;
13513 vex_w_done = 0;
43234a1e 13514 vex.evex = 0;
55b126d4 13515
ce518a5f 13516 if (dp->name == NULL && dp->op[0].bytemode == FLOATCODE)
252b5132 13517 {
55cf16e1 13518 get_sib (info, sizeflag);
252b5132
RH
13519 dofloat (sizeflag);
13520 }
13521 else
13522 {
8bb15339 13523 dp = get_valid_dis386 (dp, info);
b844680a 13524 if (dp != NULL && putop (dp->name, sizeflag) == 0)
6c067bbb 13525 {
55cf16e1 13526 get_sib (info, sizeflag);
ce518a5f
L
13527 for (i = 0; i < MAX_OPERANDS; ++i)
13528 {
246c51aa 13529 obufp = op_out[i];
ce518a5f
L
13530 op_ad = MAX_OPERANDS - 1 - i;
13531 if (dp->op[i].rtn)
13532 (*dp->op[i].rtn) (dp->op[i].bytemode, sizeflag);
43234a1e
L
13533 /* For EVEX instruction after the last operand masking
13534 should be printed. */
13535 if (i == 0 && vex.evex)
13536 {
13537 /* Don't print {%k0}. */
13538 if (vex.mask_register_specifier)
13539 {
13540 oappend ("{");
13541 oappend (names_mask[vex.mask_register_specifier]);
13542 oappend ("}");
13543 }
13544 if (vex.zeroing)
13545 oappend ("{z}");
13546 }
ce518a5f 13547 }
6439fc28 13548 }
252b5132
RH
13549 }
13550
d869730d 13551 /* Check if the REX prefix is used. */
e2e6193d 13552 if (rex_ignored == 0 && (rex ^ rex_used) == 0 && last_rex_prefix >= 0)
f16cd0d5
L
13553 all_prefixes[last_rex_prefix] = 0;
13554
5e6718e4 13555 /* Check if the SEG prefix is used. */
f16cd0d5
L
13556 if ((prefixes & (PREFIX_CS | PREFIX_SS | PREFIX_DS | PREFIX_ES
13557 | PREFIX_FS | PREFIX_GS)) != 0
285ca992 13558 && (used_prefixes & active_seg_prefix) != 0)
f16cd0d5
L
13559 all_prefixes[last_seg_prefix] = 0;
13560
5e6718e4 13561 /* Check if the ADDR prefix is used. */
f16cd0d5
L
13562 if ((prefixes & PREFIX_ADDR) != 0
13563 && (used_prefixes & PREFIX_ADDR) != 0)
13564 all_prefixes[last_addr_prefix] = 0;
13565
df18fdba
L
13566 /* Check if the DATA prefix is used. */
13567 if ((prefixes & PREFIX_DATA) != 0
13568 && (used_prefixes & PREFIX_DATA) != 0)
13569 all_prefixes[last_data_prefix] = 0;
f16cd0d5 13570
df18fdba 13571 /* Print the extra prefixes. */
f16cd0d5 13572 prefix_length = 0;
f310f33d 13573 for (i = 0; i < (int) ARRAY_SIZE (all_prefixes); i++)
f16cd0d5
L
13574 if (all_prefixes[i])
13575 {
13576 const char *name;
df18fdba 13577 name = prefix_name (all_prefixes[i], orig_sizeflag);
f16cd0d5
L
13578 if (name == NULL)
13579 abort ();
13580 prefix_length += strlen (name) + 1;
13581 (*info->fprintf_func) (info->stream, "%s ", name);
13582 }
b844680a 13583
285ca992
L
13584 /* If the mandatory PREFIX_REPZ/PREFIX_REPNZ/PREFIX_DATA prefix is
13585 unused, opcode is invalid. Since the PREFIX_DATA prefix may be
13586 used by putop and MMX/SSE operand and may be overriden by the
13587 PREFIX_REPZ/PREFIX_REPNZ fix, we check the PREFIX_DATA prefix
13588 separately. */
3888916d 13589 if (dp->prefix_requirement == PREFIX_OPCODE
285ca992
L
13590 && dp != &bad_opcode
13591 && (((prefixes
13592 & (PREFIX_REPZ | PREFIX_REPNZ)) != 0
13593 && (used_prefixes
13594 & (PREFIX_REPZ | PREFIX_REPNZ)) == 0)
13595 || ((((prefixes
13596 & (PREFIX_REPZ | PREFIX_REPNZ | PREFIX_DATA))
13597 == PREFIX_DATA)
13598 && (used_prefixes & PREFIX_DATA) == 0))))
13599 {
13600 (*info->fprintf_func) (info->stream, "(bad)");
13601 return end_codep - priv.the_buffer;
13602 }
13603
f16cd0d5
L
13604 /* Check maximum code length. */
13605 if ((codep - start_codep) > MAX_CODE_LENGTH)
13606 {
13607 (*info->fprintf_func) (info->stream, "(bad)");
13608 return MAX_CODE_LENGTH;
13609 }
b844680a 13610
ea397f5b 13611 obufp = mnemonicendp;
f16cd0d5 13612 for (i = strlen (obuf) + prefix_length; i < 6; i++)
252b5132
RH
13613 oappend (" ");
13614 oappend (" ");
13615 (*info->fprintf_func) (info->stream, "%s", obuf);
13616
13617 /* The enter and bound instructions are printed with operands in the same
13618 order as the intel book; everything else is printed in reverse order. */
2da11e11 13619 if (intel_syntax || two_source_ops)
252b5132 13620 {
185b1163
L
13621 bfd_vma riprel;
13622
ce518a5f 13623 for (i = 0; i < MAX_OPERANDS; ++i)
6c067bbb 13624 op_txt[i] = op_out[i];
246c51aa 13625
3a8547d2
JB
13626 if (intel_syntax && dp && dp->op[2].rtn == OP_Rounding
13627 && dp->op[3].rtn == OP_E && dp->op[4].rtn == NULL)
13628 {
13629 op_txt[2] = op_out[3];
13630 op_txt[3] = op_out[2];
13631 }
13632
ce518a5f
L
13633 for (i = 0; i < (MAX_OPERANDS >> 1); ++i)
13634 {
6c067bbb
RM
13635 op_ad = op_index[i];
13636 op_index[i] = op_index[MAX_OPERANDS - 1 - i];
13637 op_index[MAX_OPERANDS - 1 - i] = op_ad;
185b1163
L
13638 riprel = op_riprel[i];
13639 op_riprel[i] = op_riprel [MAX_OPERANDS - 1 - i];
13640 op_riprel[MAX_OPERANDS - 1 - i] = riprel;
ce518a5f 13641 }
252b5132
RH
13642 }
13643 else
13644 {
ce518a5f 13645 for (i = 0; i < MAX_OPERANDS; ++i)
6c067bbb 13646 op_txt[MAX_OPERANDS - 1 - i] = op_out[i];
050dfa73
MM
13647 }
13648
ce518a5f
L
13649 needcomma = 0;
13650 for (i = 0; i < MAX_OPERANDS; ++i)
13651 if (*op_txt[i])
13652 {
13653 if (needcomma)
13654 (*info->fprintf_func) (info->stream, ",");
13655 if (op_index[i] != -1 && !op_riprel[i])
13656 (*info->print_address_func) ((bfd_vma) op_address[op_index[i]], info);
13657 else
13658 (*info->fprintf_func) (info->stream, "%s", op_txt[i]);
13659 needcomma = 1;
13660 }
050dfa73 13661
ce518a5f 13662 for (i = 0; i < MAX_OPERANDS; i++)
52b15da3
JH
13663 if (op_index[i] != -1 && op_riprel[i])
13664 {
13665 (*info->fprintf_func) (info->stream, " # ");
4fd7268a 13666 (*info->print_address_func) ((bfd_vma) (start_pc + (codep - start_codep)
52b15da3 13667 + op_address[op_index[i]]), info);
185b1163 13668 break;
52b15da3 13669 }
e396998b 13670 return codep - priv.the_buffer;
252b5132
RH
13671}
13672
6439fc28 13673static const char *float_mem[] = {
252b5132 13674 /* d8 */
7c52e0e8
L
13675 "fadd{s|}",
13676 "fmul{s|}",
13677 "fcom{s|}",
13678 "fcomp{s|}",
13679 "fsub{s|}",
13680 "fsubr{s|}",
13681 "fdiv{s|}",
13682 "fdivr{s|}",
db6eb5be 13683 /* d9 */
7c52e0e8 13684 "fld{s|}",
252b5132 13685 "(bad)",
7c52e0e8
L
13686 "fst{s|}",
13687 "fstp{s|}",
9306ca4a 13688 "fldenvIC",
252b5132 13689 "fldcw",
9306ca4a 13690 "fNstenvIC",
252b5132
RH
13691 "fNstcw",
13692 /* da */
7c52e0e8
L
13693 "fiadd{l|}",
13694 "fimul{l|}",
13695 "ficom{l|}",
13696 "ficomp{l|}",
13697 "fisub{l|}",
13698 "fisubr{l|}",
13699 "fidiv{l|}",
13700 "fidivr{l|}",
252b5132 13701 /* db */
7c52e0e8
L
13702 "fild{l|}",
13703 "fisttp{l|}",
13704 "fist{l|}",
13705 "fistp{l|}",
252b5132 13706 "(bad)",
6439fc28 13707 "fld{t||t|}",
252b5132 13708 "(bad)",
6439fc28 13709 "fstp{t||t|}",
252b5132 13710 /* dc */
7c52e0e8
L
13711 "fadd{l|}",
13712 "fmul{l|}",
13713 "fcom{l|}",
13714 "fcomp{l|}",
13715 "fsub{l|}",
13716 "fsubr{l|}",
13717 "fdiv{l|}",
13718 "fdivr{l|}",
252b5132 13719 /* dd */
7c52e0e8
L
13720 "fld{l|}",
13721 "fisttp{ll|}",
13722 "fst{l||}",
13723 "fstp{l|}",
9306ca4a 13724 "frstorIC",
252b5132 13725 "(bad)",
9306ca4a 13726 "fNsaveIC",
252b5132
RH
13727 "fNstsw",
13728 /* de */
13729 "fiadd",
13730 "fimul",
13731 "ficom",
13732 "ficomp",
13733 "fisub",
13734 "fisubr",
13735 "fidiv",
13736 "fidivr",
13737 /* df */
13738 "fild",
ca164297 13739 "fisttp",
252b5132
RH
13740 "fist",
13741 "fistp",
13742 "fbld",
7c52e0e8 13743 "fild{ll|}",
252b5132 13744 "fbstp",
7c52e0e8 13745 "fistp{ll|}",
1d9f512f
AM
13746};
13747
13748static const unsigned char float_mem_mode[] = {
13749 /* d8 */
13750 d_mode,
13751 d_mode,
13752 d_mode,
13753 d_mode,
13754 d_mode,
13755 d_mode,
13756 d_mode,
13757 d_mode,
13758 /* d9 */
13759 d_mode,
13760 0,
13761 d_mode,
13762 d_mode,
13763 0,
13764 w_mode,
13765 0,
13766 w_mode,
13767 /* da */
13768 d_mode,
13769 d_mode,
13770 d_mode,
13771 d_mode,
13772 d_mode,
13773 d_mode,
13774 d_mode,
13775 d_mode,
13776 /* db */
13777 d_mode,
13778 d_mode,
13779 d_mode,
13780 d_mode,
13781 0,
9306ca4a 13782 t_mode,
1d9f512f 13783 0,
9306ca4a 13784 t_mode,
1d9f512f
AM
13785 /* dc */
13786 q_mode,
13787 q_mode,
13788 q_mode,
13789 q_mode,
13790 q_mode,
13791 q_mode,
13792 q_mode,
13793 q_mode,
13794 /* dd */
13795 q_mode,
13796 q_mode,
13797 q_mode,
13798 q_mode,
13799 0,
13800 0,
13801 0,
13802 w_mode,
13803 /* de */
13804 w_mode,
13805 w_mode,
13806 w_mode,
13807 w_mode,
13808 w_mode,
13809 w_mode,
13810 w_mode,
13811 w_mode,
13812 /* df */
13813 w_mode,
13814 w_mode,
13815 w_mode,
13816 w_mode,
9306ca4a 13817 t_mode,
1d9f512f 13818 q_mode,
9306ca4a 13819 t_mode,
1d9f512f 13820 q_mode
252b5132
RH
13821};
13822
ce518a5f
L
13823#define ST { OP_ST, 0 }
13824#define STi { OP_STi, 0 }
252b5132 13825
bf890a93
IT
13826#define FGRPd9_2 NULL, { { NULL, 0 } }, 0
13827#define FGRPd9_4 NULL, { { NULL, 1 } }, 0
13828#define FGRPd9_5 NULL, { { NULL, 2 } }, 0
13829#define FGRPd9_6 NULL, { { NULL, 3 } }, 0
13830#define FGRPd9_7 NULL, { { NULL, 4 } }, 0
13831#define FGRPda_5 NULL, { { NULL, 5 } }, 0
13832#define FGRPdb_4 NULL, { { NULL, 6 } }, 0
13833#define FGRPde_3 NULL, { { NULL, 7 } }, 0
13834#define FGRPdf_4 NULL, { { NULL, 8 } }, 0
252b5132 13835
2da11e11 13836static const struct dis386 float_reg[][8] = {
252b5132
RH
13837 /* d8 */
13838 {
bf890a93
IT
13839 { "fadd", { ST, STi }, 0 },
13840 { "fmul", { ST, STi }, 0 },
13841 { "fcom", { STi }, 0 },
13842 { "fcomp", { STi }, 0 },
13843 { "fsub", { ST, STi }, 0 },
13844 { "fsubr", { ST, STi }, 0 },
13845 { "fdiv", { ST, STi }, 0 },
13846 { "fdivr", { ST, STi }, 0 },
252b5132
RH
13847 },
13848 /* d9 */
13849 {
bf890a93
IT
13850 { "fld", { STi }, 0 },
13851 { "fxch", { STi }, 0 },
252b5132 13852 { FGRPd9_2 },
592d1631 13853 { Bad_Opcode },
252b5132
RH
13854 { FGRPd9_4 },
13855 { FGRPd9_5 },
13856 { FGRPd9_6 },
13857 { FGRPd9_7 },
13858 },
13859 /* da */
13860 {
bf890a93
IT
13861 { "fcmovb", { ST, STi }, 0 },
13862 { "fcmove", { ST, STi }, 0 },
13863 { "fcmovbe",{ ST, STi }, 0 },
13864 { "fcmovu", { ST, STi }, 0 },
592d1631 13865 { Bad_Opcode },
252b5132 13866 { FGRPda_5 },
592d1631
L
13867 { Bad_Opcode },
13868 { Bad_Opcode },
252b5132
RH
13869 },
13870 /* db */
13871 {
bf890a93
IT
13872 { "fcmovnb",{ ST, STi }, 0 },
13873 { "fcmovne",{ ST, STi }, 0 },
13874 { "fcmovnbe",{ ST, STi }, 0 },
13875 { "fcmovnu",{ ST, STi }, 0 },
252b5132 13876 { FGRPdb_4 },
bf890a93
IT
13877 { "fucomi", { ST, STi }, 0 },
13878 { "fcomi", { ST, STi }, 0 },
592d1631 13879 { Bad_Opcode },
252b5132
RH
13880 },
13881 /* dc */
13882 {
bf890a93
IT
13883 { "fadd", { STi, ST }, 0 },
13884 { "fmul", { STi, ST }, 0 },
592d1631
L
13885 { Bad_Opcode },
13886 { Bad_Opcode },
bf890a93
IT
13887 { "fsub!M", { STi, ST }, 0 },
13888 { "fsubM", { STi, ST }, 0 },
13889 { "fdiv!M", { STi, ST }, 0 },
13890 { "fdivM", { STi, ST }, 0 },
252b5132
RH
13891 },
13892 /* dd */
13893 {
bf890a93 13894 { "ffree", { STi }, 0 },
592d1631 13895 { Bad_Opcode },
bf890a93
IT
13896 { "fst", { STi }, 0 },
13897 { "fstp", { STi }, 0 },
13898 { "fucom", { STi }, 0 },
13899 { "fucomp", { STi }, 0 },
592d1631
L
13900 { Bad_Opcode },
13901 { Bad_Opcode },
252b5132
RH
13902 },
13903 /* de */
13904 {
bf890a93
IT
13905 { "faddp", { STi, ST }, 0 },
13906 { "fmulp", { STi, ST }, 0 },
592d1631 13907 { Bad_Opcode },
252b5132 13908 { FGRPde_3 },
bf890a93
IT
13909 { "fsub!Mp", { STi, ST }, 0 },
13910 { "fsubMp", { STi, ST }, 0 },
13911 { "fdiv!Mp", { STi, ST }, 0 },
13912 { "fdivMp", { STi, ST }, 0 },
252b5132
RH
13913 },
13914 /* df */
13915 {
bf890a93 13916 { "ffreep", { STi }, 0 },
592d1631
L
13917 { Bad_Opcode },
13918 { Bad_Opcode },
13919 { Bad_Opcode },
252b5132 13920 { FGRPdf_4 },
bf890a93
IT
13921 { "fucomip", { ST, STi }, 0 },
13922 { "fcomip", { ST, STi }, 0 },
592d1631 13923 { Bad_Opcode },
252b5132
RH
13924 },
13925};
13926
252b5132
RH
13927static char *fgrps[][8] = {
13928 /* d9_2 0 */
13929 {
13930 "fnop","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
13931 },
13932
13933 /* d9_4 1 */
13934 {
13935 "fchs","fabs","(bad)","(bad)","ftst","fxam","(bad)","(bad)",
13936 },
13937
13938 /* d9_5 2 */
13939 {
13940 "fld1","fldl2t","fldl2e","fldpi","fldlg2","fldln2","fldz","(bad)",
13941 },
13942
13943 /* d9_6 3 */
13944 {
13945 "f2xm1","fyl2x","fptan","fpatan","fxtract","fprem1","fdecstp","fincstp",
13946 },
13947
13948 /* d9_7 4 */
13949 {
13950 "fprem","fyl2xp1","fsqrt","fsincos","frndint","fscale","fsin","fcos",
13951 },
13952
13953 /* da_5 5 */
13954 {
13955 "(bad)","fucompp","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
13956 },
13957
13958 /* db_4 6 */
13959 {
309d3373
JB
13960 "fNeni(8087 only)","fNdisi(8087 only)","fNclex","fNinit",
13961 "fNsetpm(287 only)","frstpm(287 only)","(bad)","(bad)",
252b5132
RH
13962 },
13963
13964 /* de_3 7 */
13965 {
13966 "(bad)","fcompp","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
13967 },
13968
13969 /* df_4 8 */
13970 {
13971 "fNstsw","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
13972 },
13973};
13974
b6169b20
L
13975static void
13976swap_operand (void)
13977{
13978 mnemonicendp[0] = '.';
13979 mnemonicendp[1] = 's';
13980 mnemonicendp += 2;
13981}
13982
b844680a
L
13983static void
13984OP_Skip_MODRM (int bytemode ATTRIBUTE_UNUSED,
13985 int sizeflag ATTRIBUTE_UNUSED)
13986{
13987 /* Skip mod/rm byte. */
13988 MODRM_CHECK;
13989 codep++;
13990}
13991
252b5132 13992static void
26ca5450 13993dofloat (int sizeflag)
252b5132 13994{
2da11e11 13995 const struct dis386 *dp;
252b5132
RH
13996 unsigned char floatop;
13997
13998 floatop = codep[-1];
13999
7967e09e 14000 if (modrm.mod != 3)
252b5132 14001 {
7967e09e 14002 int fp_indx = (floatop - 0xd8) * 8 + modrm.reg;
1d9f512f
AM
14003
14004 putop (float_mem[fp_indx], sizeflag);
ce518a5f 14005 obufp = op_out[0];
6e50d963 14006 op_ad = 2;
1d9f512f 14007 OP_E (float_mem_mode[fp_indx], sizeflag);
252b5132
RH
14008 return;
14009 }
6608db57 14010 /* Skip mod/rm byte. */
4bba6815 14011 MODRM_CHECK;
252b5132
RH
14012 codep++;
14013
7967e09e 14014 dp = &float_reg[floatop - 0xd8][modrm.reg];
252b5132
RH
14015 if (dp->name == NULL)
14016 {
7967e09e 14017 putop (fgrps[dp->op[0].bytemode][modrm.rm], sizeflag);
252b5132 14018
6608db57 14019 /* Instruction fnstsw is only one with strange arg. */
252b5132 14020 if (floatop == 0xdf && codep[-1] == 0xe0)
ce518a5f 14021 strcpy (op_out[0], names16[0]);
252b5132
RH
14022 }
14023 else
14024 {
14025 putop (dp->name, sizeflag);
14026
ce518a5f 14027 obufp = op_out[0];
6e50d963 14028 op_ad = 2;
ce518a5f
L
14029 if (dp->op[0].rtn)
14030 (*dp->op[0].rtn) (dp->op[0].bytemode, sizeflag);
6e50d963 14031
ce518a5f 14032 obufp = op_out[1];
6e50d963 14033 op_ad = 1;
ce518a5f
L
14034 if (dp->op[1].rtn)
14035 (*dp->op[1].rtn) (dp->op[1].bytemode, sizeflag);
252b5132
RH
14036 }
14037}
14038
9ce09ba2
RM
14039/* Like oappend (below), but S is a string starting with '%'.
14040 In Intel syntax, the '%' is elided. */
14041static void
14042oappend_maybe_intel (const char *s)
14043{
14044 oappend (s + intel_syntax);
14045}
14046
252b5132 14047static void
26ca5450 14048OP_ST (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 14049{
9ce09ba2 14050 oappend_maybe_intel ("%st");
252b5132
RH
14051}
14052
252b5132 14053static void
26ca5450 14054OP_STi (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 14055{
7967e09e 14056 sprintf (scratchbuf, "%%st(%d)", modrm.rm);
9ce09ba2 14057 oappend_maybe_intel (scratchbuf);
252b5132
RH
14058}
14059
6608db57 14060/* Capital letters in template are macros. */
6439fc28 14061static int
d3ce72d0 14062putop (const char *in_template, int sizeflag)
252b5132 14063{
2da11e11 14064 const char *p;
9306ca4a 14065 int alt = 0;
9d141669 14066 int cond = 1;
98b528ac
L
14067 unsigned int l = 0, len = 1;
14068 char last[4];
14069
14070#define SAVE_LAST(c) \
14071 if (l < len && l < sizeof (last)) \
14072 last[l++] = c; \
14073 else \
14074 abort ();
252b5132 14075
d3ce72d0 14076 for (p = in_template; *p; p++)
252b5132
RH
14077 {
14078 switch (*p)
14079 {
14080 default:
14081 *obufp++ = *p;
14082 break;
98b528ac
L
14083 case '%':
14084 len++;
14085 break;
9d141669
L
14086 case '!':
14087 cond = 0;
14088 break;
6439fc28 14089 case '{':
6439fc28 14090 if (intel_syntax)
6439fc28
AM
14091 {
14092 while (*++p != '|')
7c52e0e8
L
14093 if (*p == '}' || *p == '\0')
14094 abort ();
6439fc28 14095 }
9306ca4a
JB
14096 /* Fall through. */
14097 case 'I':
14098 alt = 1;
14099 continue;
6439fc28
AM
14100 case '|':
14101 while (*++p != '}')
14102 {
14103 if (*p == '\0')
14104 abort ();
14105 }
14106 break;
14107 case '}':
14108 break;
252b5132 14109 case 'A':
db6eb5be
AM
14110 if (intel_syntax)
14111 break;
7967e09e 14112 if (modrm.mod != 3 || (sizeflag & SUFFIX_ALWAYS))
252b5132
RH
14113 *obufp++ = 'b';
14114 break;
14115 case 'B':
4b06377f
L
14116 if (l == 0 && len == 1)
14117 {
14118case_B:
14119 if (intel_syntax)
14120 break;
14121 if (sizeflag & SUFFIX_ALWAYS)
14122 *obufp++ = 'b';
14123 }
14124 else
14125 {
14126 if (l != 1
14127 || len != 2
14128 || last[0] != 'L')
14129 {
14130 SAVE_LAST (*p);
14131 break;
14132 }
14133
14134 if (address_mode == mode_64bit
14135 && !(prefixes & PREFIX_ADDR))
14136 {
14137 *obufp++ = 'a';
14138 *obufp++ = 'b';
14139 *obufp++ = 's';
14140 }
14141
14142 goto case_B;
14143 }
252b5132 14144 break;
9306ca4a
JB
14145 case 'C':
14146 if (intel_syntax && !alt)
14147 break;
14148 if ((prefixes & PREFIX_DATA) || (sizeflag & SUFFIX_ALWAYS))
14149 {
14150 if (sizeflag & DFLAG)
14151 *obufp++ = intel_syntax ? 'd' : 'l';
14152 else
14153 *obufp++ = intel_syntax ? 'w' : 's';
14154 used_prefixes |= (prefixes & PREFIX_DATA);
14155 }
14156 break;
ed7841b3
JB
14157 case 'D':
14158 if (intel_syntax || !(sizeflag & SUFFIX_ALWAYS))
14159 break;
161a04f6 14160 USED_REX (REX_W);
7967e09e 14161 if (modrm.mod == 3)
ed7841b3 14162 {
161a04f6 14163 if (rex & REX_W)
ed7841b3 14164 *obufp++ = 'q';
ed7841b3 14165 else
f16cd0d5
L
14166 {
14167 if (sizeflag & DFLAG)
14168 *obufp++ = intel_syntax ? 'd' : 'l';
14169 else
14170 *obufp++ = 'w';
14171 used_prefixes |= (prefixes & PREFIX_DATA);
14172 }
ed7841b3
JB
14173 }
14174 else
14175 *obufp++ = 'w';
14176 break;
252b5132 14177 case 'E': /* For jcxz/jecxz */
cb712a9e 14178 if (address_mode == mode_64bit)
c1a64871
JH
14179 {
14180 if (sizeflag & AFLAG)
14181 *obufp++ = 'r';
14182 else
14183 *obufp++ = 'e';
14184 }
14185 else
14186 if (sizeflag & AFLAG)
14187 *obufp++ = 'e';
3ffd33cf
AM
14188 used_prefixes |= (prefixes & PREFIX_ADDR);
14189 break;
14190 case 'F':
db6eb5be
AM
14191 if (intel_syntax)
14192 break;
e396998b 14193 if ((prefixes & PREFIX_ADDR) || (sizeflag & SUFFIX_ALWAYS))
3ffd33cf
AM
14194 {
14195 if (sizeflag & AFLAG)
cb712a9e 14196 *obufp++ = address_mode == mode_64bit ? 'q' : 'l';
3ffd33cf 14197 else
cb712a9e 14198 *obufp++ = address_mode == mode_64bit ? 'l' : 'w';
3ffd33cf
AM
14199 used_prefixes |= (prefixes & PREFIX_ADDR);
14200 }
252b5132 14201 break;
52fd6d94
JB
14202 case 'G':
14203 if (intel_syntax || (obufp[-1] != 's' && !(sizeflag & SUFFIX_ALWAYS)))
14204 break;
161a04f6 14205 if ((rex & REX_W) || (sizeflag & DFLAG))
52fd6d94
JB
14206 *obufp++ = 'l';
14207 else
14208 *obufp++ = 'w';
161a04f6 14209 if (!(rex & REX_W))
52fd6d94
JB
14210 used_prefixes |= (prefixes & PREFIX_DATA);
14211 break;
5dd0794d 14212 case 'H':
db6eb5be
AM
14213 if (intel_syntax)
14214 break;
5dd0794d
AM
14215 if ((prefixes & (PREFIX_CS | PREFIX_DS)) == PREFIX_CS
14216 || (prefixes & (PREFIX_CS | PREFIX_DS)) == PREFIX_DS)
14217 {
14218 used_prefixes |= prefixes & (PREFIX_CS | PREFIX_DS);
14219 *obufp++ = ',';
14220 *obufp++ = 'p';
14221 if (prefixes & PREFIX_DS)
14222 *obufp++ = 't';
14223 else
14224 *obufp++ = 'n';
14225 }
14226 break;
9306ca4a
JB
14227 case 'J':
14228 if (intel_syntax)
14229 break;
14230 *obufp++ = 'l';
14231 break;
42903f7f
L
14232 case 'K':
14233 USED_REX (REX_W);
14234 if (rex & REX_W)
14235 *obufp++ = 'q';
14236 else
14237 *obufp++ = 'd';
14238 break;
6dd5059a 14239 case 'Z':
04d824a4
JB
14240 if (l != 0 || len != 1)
14241 {
14242 if (l != 1 || len != 2 || last[0] != 'X')
14243 {
14244 SAVE_LAST (*p);
14245 break;
14246 }
14247 if (!need_vex || !vex.evex)
14248 abort ();
14249 if (intel_syntax
14250 || ((modrm.mod == 3 || vex.b) && !(sizeflag & SUFFIX_ALWAYS)))
14251 break;
14252 switch (vex.length)
14253 {
14254 case 128:
14255 *obufp++ = 'x';
14256 break;
14257 case 256:
14258 *obufp++ = 'y';
14259 break;
14260 case 512:
14261 *obufp++ = 'z';
14262 break;
14263 default:
14264 abort ();
14265 }
14266 break;
14267 }
6dd5059a
L
14268 if (intel_syntax)
14269 break;
14270 if (address_mode == mode_64bit && (sizeflag & SUFFIX_ALWAYS))
14271 {
14272 *obufp++ = 'q';
14273 break;
14274 }
14275 /* Fall through. */
98b528ac 14276 goto case_L;
252b5132 14277 case 'L':
98b528ac
L
14278 if (l != 0 || len != 1)
14279 {
14280 SAVE_LAST (*p);
14281 break;
14282 }
14283case_L:
db6eb5be
AM
14284 if (intel_syntax)
14285 break;
252b5132
RH
14286 if (sizeflag & SUFFIX_ALWAYS)
14287 *obufp++ = 'l';
252b5132 14288 break;
9d141669
L
14289 case 'M':
14290 if (intel_mnemonic != cond)
14291 *obufp++ = 'r';
14292 break;
252b5132
RH
14293 case 'N':
14294 if ((prefixes & PREFIX_FWAIT) == 0)
14295 *obufp++ = 'n';
7d421014
ILT
14296 else
14297 used_prefixes |= PREFIX_FWAIT;
252b5132 14298 break;
52b15da3 14299 case 'O':
161a04f6
L
14300 USED_REX (REX_W);
14301 if (rex & REX_W)
6439fc28 14302 *obufp++ = 'o';
a35ca55a
JB
14303 else if (intel_syntax && (sizeflag & DFLAG))
14304 *obufp++ = 'q';
52b15da3
JH
14305 else
14306 *obufp++ = 'd';
161a04f6 14307 if (!(rex & REX_W))
a35ca55a 14308 used_prefixes |= (prefixes & PREFIX_DATA);
52b15da3 14309 break;
07f5af7d
L
14310 case '&':
14311 if (!intel_syntax
14312 && address_mode == mode_64bit
14313 && isa64 == intel64)
14314 {
14315 *obufp++ = 'q';
14316 break;
14317 }
14318 /* Fall through. */
6439fc28 14319 case 'T':
d9e3625e
L
14320 if (!intel_syntax
14321 && address_mode == mode_64bit
7bb15c6f 14322 && ((sizeflag & DFLAG) || (rex & REX_W)))
6439fc28
AM
14323 {
14324 *obufp++ = 'q';
14325 break;
14326 }
6608db57 14327 /* Fall through. */
4b4c407a 14328 goto case_P;
252b5132 14329 case 'P':
4b4c407a 14330 if (l == 0 && len == 1)
d9e3625e 14331 {
4b4c407a
L
14332case_P:
14333 if (intel_syntax)
d9e3625e 14334 {
4b4c407a
L
14335 if ((rex & REX_W) == 0
14336 && (prefixes & PREFIX_DATA))
14337 {
14338 if ((sizeflag & DFLAG) == 0)
14339 *obufp++ = 'w';
14340 used_prefixes |= (prefixes & PREFIX_DATA);
14341 }
14342 break;
14343 }
14344 if ((prefixes & PREFIX_DATA)
14345 || (rex & REX_W)
14346 || (sizeflag & SUFFIX_ALWAYS))
14347 {
14348 USED_REX (REX_W);
14349 if (rex & REX_W)
14350 *obufp++ = 'q';
14351 else
14352 {
14353 if (sizeflag & DFLAG)
14354 *obufp++ = 'l';
14355 else
14356 *obufp++ = 'w';
14357 used_prefixes |= (prefixes & PREFIX_DATA);
14358 }
d9e3625e 14359 }
d9e3625e 14360 }
4b4c407a 14361 else
252b5132 14362 {
4b4c407a
L
14363 if (l != 1 || len != 2 || last[0] != 'L')
14364 {
14365 SAVE_LAST (*p);
14366 break;
14367 }
14368
14369 if ((prefixes & PREFIX_DATA)
14370 || (rex & REX_W)
14371 || (sizeflag & SUFFIX_ALWAYS))
52b15da3 14372 {
4b4c407a
L
14373 USED_REX (REX_W);
14374 if (rex & REX_W)
14375 *obufp++ = 'q';
14376 else
14377 {
14378 if (sizeflag & DFLAG)
14379 *obufp++ = intel_syntax ? 'd' : 'l';
14380 else
14381 *obufp++ = 'w';
14382 used_prefixes |= (prefixes & PREFIX_DATA);
14383 }
52b15da3 14384 }
252b5132
RH
14385 }
14386 break;
6439fc28 14387 case 'U':
db6eb5be
AM
14388 if (intel_syntax)
14389 break;
7bb15c6f 14390 if (address_mode == mode_64bit
6c067bbb 14391 && ((sizeflag & DFLAG) || (rex & REX_W)))
6439fc28 14392 {
7967e09e 14393 if (modrm.mod != 3 || (sizeflag & SUFFIX_ALWAYS))
1a114b12 14394 *obufp++ = 'q';
6439fc28
AM
14395 break;
14396 }
6608db57 14397 /* Fall through. */
98b528ac 14398 goto case_Q;
252b5132 14399 case 'Q':
98b528ac 14400 if (l == 0 && len == 1)
252b5132 14401 {
98b528ac
L
14402case_Q:
14403 if (intel_syntax && !alt)
14404 break;
14405 USED_REX (REX_W);
14406 if (modrm.mod != 3 || (sizeflag & SUFFIX_ALWAYS))
52b15da3 14407 {
98b528ac
L
14408 if (rex & REX_W)
14409 *obufp++ = 'q';
52b15da3 14410 else
98b528ac
L
14411 {
14412 if (sizeflag & DFLAG)
14413 *obufp++ = intel_syntax ? 'd' : 'l';
14414 else
14415 *obufp++ = 'w';
f16cd0d5 14416 used_prefixes |= (prefixes & PREFIX_DATA);
98b528ac 14417 }
52b15da3 14418 }
98b528ac
L
14419 }
14420 else
14421 {
14422 if (l != 1 || len != 2 || last[0] != 'L')
14423 {
14424 SAVE_LAST (*p);
14425 break;
14426 }
14427 if (intel_syntax
14428 || (modrm.mod == 3 && !(sizeflag & SUFFIX_ALWAYS)))
14429 break;
14430 if ((rex & REX_W))
14431 {
14432 USED_REX (REX_W);
14433 *obufp++ = 'q';
14434 }
14435 else
14436 *obufp++ = 'l';
252b5132
RH
14437 }
14438 break;
14439 case 'R':
161a04f6
L
14440 USED_REX (REX_W);
14441 if (rex & REX_W)
a35ca55a
JB
14442 *obufp++ = 'q';
14443 else if (sizeflag & DFLAG)
c608c12e 14444 {
a35ca55a 14445 if (intel_syntax)
c608c12e 14446 *obufp++ = 'd';
c608c12e 14447 else
a35ca55a 14448 *obufp++ = 'l';
c608c12e 14449 }
252b5132 14450 else
a35ca55a
JB
14451 *obufp++ = 'w';
14452 if (intel_syntax && !p[1]
161a04f6 14453 && ((rex & REX_W) || (sizeflag & DFLAG)))
a35ca55a 14454 *obufp++ = 'e';
161a04f6 14455 if (!(rex & REX_W))
52b15da3 14456 used_prefixes |= (prefixes & PREFIX_DATA);
252b5132 14457 break;
1a114b12 14458 case 'V':
4b06377f 14459 if (l == 0 && len == 1)
1a114b12 14460 {
4b06377f
L
14461 if (intel_syntax)
14462 break;
7bb15c6f 14463 if (address_mode == mode_64bit
6c067bbb 14464 && ((sizeflag & DFLAG) || (rex & REX_W)))
4b06377f
L
14465 {
14466 if (sizeflag & SUFFIX_ALWAYS)
14467 *obufp++ = 'q';
14468 break;
14469 }
14470 }
14471 else
14472 {
14473 if (l != 1
14474 || len != 2
14475 || last[0] != 'L')
14476 {
14477 SAVE_LAST (*p);
14478 break;
14479 }
14480
14481 if (rex & REX_W)
14482 {
14483 *obufp++ = 'a';
14484 *obufp++ = 'b';
14485 *obufp++ = 's';
14486 }
1a114b12
JB
14487 }
14488 /* Fall through. */
4b06377f 14489 goto case_S;
252b5132 14490 case 'S':
4b06377f 14491 if (l == 0 && len == 1)
252b5132 14492 {
4b06377f
L
14493case_S:
14494 if (intel_syntax)
14495 break;
14496 if (sizeflag & SUFFIX_ALWAYS)
52b15da3 14497 {
4b06377f
L
14498 if (rex & REX_W)
14499 *obufp++ = 'q';
52b15da3 14500 else
4b06377f
L
14501 {
14502 if (sizeflag & DFLAG)
14503 *obufp++ = 'l';
14504 else
14505 *obufp++ = 'w';
14506 used_prefixes |= (prefixes & PREFIX_DATA);
14507 }
14508 }
14509 }
14510 else
14511 {
14512 if (l != 1
14513 || len != 2
14514 || last[0] != 'L')
14515 {
14516 SAVE_LAST (*p);
14517 break;
52b15da3 14518 }
4b06377f
L
14519
14520 if (address_mode == mode_64bit
14521 && !(prefixes & PREFIX_ADDR))
14522 {
14523 *obufp++ = 'a';
14524 *obufp++ = 'b';
14525 *obufp++ = 's';
14526 }
14527
14528 goto case_S;
252b5132 14529 }
252b5132 14530 break;
041bd2e0 14531 case 'X':
c0f3af97
L
14532 if (l != 0 || len != 1)
14533 {
14534 SAVE_LAST (*p);
14535 break;
14536 }
14537 if (need_vex && vex.prefix)
14538 {
14539 if (vex.prefix == DATA_PREFIX_OPCODE)
14540 *obufp++ = 'd';
14541 else
14542 *obufp++ = 's';
14543 }
041bd2e0 14544 else
f16cd0d5
L
14545 {
14546 if (prefixes & PREFIX_DATA)
14547 *obufp++ = 'd';
14548 else
14549 *obufp++ = 's';
14550 used_prefixes |= (prefixes & PREFIX_DATA);
14551 }
041bd2e0 14552 break;
76f227a5 14553 case 'Y':
c0f3af97 14554 if (l == 0 && len == 1)
76f227a5 14555 {
c0f3af97
L
14556 if (intel_syntax || !(sizeflag & SUFFIX_ALWAYS))
14557 break;
14558 if (rex & REX_W)
14559 {
14560 USED_REX (REX_W);
14561 *obufp++ = 'q';
14562 }
14563 break;
14564 }
14565 else
14566 {
14567 if (l != 1 || len != 2 || last[0] != 'X')
14568 {
14569 SAVE_LAST (*p);
14570 break;
14571 }
14572 if (!need_vex)
14573 abort ();
14574 if (intel_syntax
04d824a4 14575 || ((modrm.mod == 3 || vex.b) && !(sizeflag & SUFFIX_ALWAYS)))
c0f3af97
L
14576 break;
14577 switch (vex.length)
14578 {
14579 case 128:
14580 *obufp++ = 'x';
14581 break;
14582 case 256:
14583 *obufp++ = 'y';
14584 break;
04d824a4
JB
14585 case 512:
14586 if (!vex.evex)
c0f3af97 14587 default:
04d824a4 14588 abort ();
c0f3af97 14589 }
76f227a5
JH
14590 }
14591 break;
252b5132 14592 case 'W':
0bfee649 14593 if (l == 0 && len == 1)
a35ca55a 14594 {
0bfee649
L
14595 /* operand size flag for cwtl, cbtw */
14596 USED_REX (REX_W);
14597 if (rex & REX_W)
14598 {
14599 if (intel_syntax)
14600 *obufp++ = 'd';
14601 else
14602 *obufp++ = 'l';
14603 }
14604 else if (sizeflag & DFLAG)
14605 *obufp++ = 'w';
a35ca55a 14606 else
0bfee649
L
14607 *obufp++ = 'b';
14608 if (!(rex & REX_W))
14609 used_prefixes |= (prefixes & PREFIX_DATA);
a35ca55a 14610 }
252b5132 14611 else
0bfee649 14612 {
6c30d220
L
14613 if (l != 1
14614 || len != 2
14615 || (last[0] != 'X'
14616 && last[0] != 'L'))
0bfee649
L
14617 {
14618 SAVE_LAST (*p);
14619 break;
14620 }
14621 if (!need_vex)
14622 abort ();
6c30d220
L
14623 if (last[0] == 'X')
14624 *obufp++ = vex.w ? 'd': 's';
14625 else
14626 *obufp++ = vex.w ? 'q': 'd';
0bfee649 14627 }
252b5132 14628 break;
a72d2af2
L
14629 case '^':
14630 if (intel_syntax)
14631 break;
14632 if ((prefixes & PREFIX_DATA) || (sizeflag & SUFFIX_ALWAYS))
14633 {
14634 if (sizeflag & DFLAG)
14635 *obufp++ = 'l';
14636 else
14637 *obufp++ = 'w';
14638 used_prefixes |= (prefixes & PREFIX_DATA);
14639 }
14640 break;
5db04b09
L
14641 case '@':
14642 if (intel_syntax)
14643 break;
14644 if (address_mode == mode_64bit
14645 && (isa64 == intel64
14646 || ((sizeflag & DFLAG) || (rex & REX_W))))
14647 *obufp++ = 'q';
14648 else if ((prefixes & PREFIX_DATA))
14649 {
14650 if (!(sizeflag & DFLAG))
14651 *obufp++ = 'w';
14652 used_prefixes |= (prefixes & PREFIX_DATA);
14653 }
14654 break;
252b5132 14655 }
9306ca4a 14656 alt = 0;
252b5132
RH
14657 }
14658 *obufp = 0;
ea397f5b 14659 mnemonicendp = obufp;
6439fc28 14660 return 0;
252b5132
RH
14661}
14662
14663static void
26ca5450 14664oappend (const char *s)
252b5132 14665{
ea397f5b 14666 obufp = stpcpy (obufp, s);
252b5132
RH
14667}
14668
14669static void
26ca5450 14670append_seg (void)
252b5132 14671{
285ca992
L
14672 /* Only print the active segment register. */
14673 if (!active_seg_prefix)
14674 return;
14675
14676 used_prefixes |= active_seg_prefix;
14677 switch (active_seg_prefix)
7d421014 14678 {
285ca992 14679 case PREFIX_CS:
9ce09ba2 14680 oappend_maybe_intel ("%cs:");
285ca992
L
14681 break;
14682 case PREFIX_DS:
9ce09ba2 14683 oappend_maybe_intel ("%ds:");
285ca992
L
14684 break;
14685 case PREFIX_SS:
9ce09ba2 14686 oappend_maybe_intel ("%ss:");
285ca992
L
14687 break;
14688 case PREFIX_ES:
9ce09ba2 14689 oappend_maybe_intel ("%es:");
285ca992
L
14690 break;
14691 case PREFIX_FS:
9ce09ba2 14692 oappend_maybe_intel ("%fs:");
285ca992
L
14693 break;
14694 case PREFIX_GS:
9ce09ba2 14695 oappend_maybe_intel ("%gs:");
285ca992
L
14696 break;
14697 default:
14698 break;
7d421014 14699 }
252b5132
RH
14700}
14701
14702static void
26ca5450 14703OP_indirE (int bytemode, int sizeflag)
252b5132
RH
14704{
14705 if (!intel_syntax)
14706 oappend ("*");
14707 OP_E (bytemode, sizeflag);
14708}
14709
52b15da3 14710static void
26ca5450 14711print_operand_value (char *buf, int hex, bfd_vma disp)
52b15da3 14712{
cb712a9e 14713 if (address_mode == mode_64bit)
52b15da3
JH
14714 {
14715 if (hex)
14716 {
14717 char tmp[30];
14718 int i;
14719 buf[0] = '0';
14720 buf[1] = 'x';
14721 sprintf_vma (tmp, disp);
6608db57 14722 for (i = 0; tmp[i] == '0' && tmp[i + 1]; i++);
52b15da3
JH
14723 strcpy (buf + 2, tmp + i);
14724 }
14725 else
14726 {
14727 bfd_signed_vma v = disp;
14728 char tmp[30];
14729 int i;
14730 if (v < 0)
14731 {
14732 *(buf++) = '-';
14733 v = -disp;
6608db57 14734 /* Check for possible overflow on 0x8000000000000000. */
52b15da3
JH
14735 if (v < 0)
14736 {
14737 strcpy (buf, "9223372036854775808");
14738 return;
14739 }
14740 }
14741 if (!v)
14742 {
14743 strcpy (buf, "0");
14744 return;
14745 }
14746
14747 i = 0;
14748 tmp[29] = 0;
14749 while (v)
14750 {
6608db57 14751 tmp[28 - i] = (v % 10) + '0';
52b15da3
JH
14752 v /= 10;
14753 i++;
14754 }
14755 strcpy (buf, tmp + 29 - i);
14756 }
14757 }
14758 else
14759 {
14760 if (hex)
14761 sprintf (buf, "0x%x", (unsigned int) disp);
14762 else
14763 sprintf (buf, "%d", (int) disp);
14764 }
14765}
14766
5d669648
L
14767/* Put DISP in BUF as signed hex number. */
14768
14769static void
14770print_displacement (char *buf, bfd_vma disp)
14771{
14772 bfd_signed_vma val = disp;
14773 char tmp[30];
14774 int i, j = 0;
14775
14776 if (val < 0)
14777 {
14778 buf[j++] = '-';
14779 val = -disp;
14780
14781 /* Check for possible overflow. */
14782 if (val < 0)
14783 {
14784 switch (address_mode)
14785 {
14786 case mode_64bit:
14787 strcpy (buf + j, "0x8000000000000000");
14788 break;
14789 case mode_32bit:
14790 strcpy (buf + j, "0x80000000");
14791 break;
14792 case mode_16bit:
14793 strcpy (buf + j, "0x8000");
14794 break;
14795 }
14796 return;
14797 }
14798 }
14799
14800 buf[j++] = '0';
14801 buf[j++] = 'x';
14802
0af1713e 14803 sprintf_vma (tmp, (bfd_vma) val);
5d669648
L
14804 for (i = 0; tmp[i] == '0'; i++)
14805 continue;
14806 if (tmp[i] == '\0')
14807 i--;
14808 strcpy (buf + j, tmp + i);
14809}
14810
3f31e633
JB
14811static void
14812intel_operand_size (int bytemode, int sizeflag)
14813{
43234a1e
L
14814 if (vex.evex
14815 && vex.b
14816 && (bytemode == x_mode
14817 || bytemode == evex_half_bcst_xmmq_mode))
14818 {
14819 if (vex.w)
14820 oappend ("QWORD PTR ");
14821 else
14822 oappend ("DWORD PTR ");
14823 return;
14824 }
3f31e633
JB
14825 switch (bytemode)
14826 {
14827 case b_mode:
b6169b20 14828 case b_swap_mode:
42903f7f 14829 case dqb_mode:
1ba585e8 14830 case db_mode:
3f31e633
JB
14831 oappend ("BYTE PTR ");
14832 break;
14833 case w_mode:
1ba585e8 14834 case dw_mode:
3f31e633 14835 case dqw_mode:
1ba585e8 14836 case dqw_swap_mode:
3f31e633
JB
14837 oappend ("WORD PTR ");
14838 break;
07f5af7d
L
14839 case indir_v_mode:
14840 if (address_mode == mode_64bit && isa64 == intel64)
14841 {
14842 oappend ("QWORD PTR ");
14843 break;
14844 }
1a0670f3 14845 /* Fall through. */
1a114b12 14846 case stack_v_mode:
7bb15c6f 14847 if (address_mode == mode_64bit && ((sizeflag & DFLAG) || (rex & REX_W)))
3f31e633
JB
14848 {
14849 oappend ("QWORD PTR ");
3f31e633
JB
14850 break;
14851 }
1a0670f3 14852 /* Fall through. */
3f31e633 14853 case v_mode:
b6169b20 14854 case v_swap_mode:
3f31e633 14855 case dq_mode:
161a04f6
L
14856 USED_REX (REX_W);
14857 if (rex & REX_W)
3f31e633 14858 oappend ("QWORD PTR ");
3f31e633 14859 else
f16cd0d5
L
14860 {
14861 if ((sizeflag & DFLAG) || bytemode == dq_mode)
14862 oappend ("DWORD PTR ");
14863 else
14864 oappend ("WORD PTR ");
14865 used_prefixes |= (prefixes & PREFIX_DATA);
14866 }
3f31e633 14867 break;
52fd6d94 14868 case z_mode:
161a04f6 14869 if ((rex & REX_W) || (sizeflag & DFLAG))
52fd6d94
JB
14870 *obufp++ = 'D';
14871 oappend ("WORD PTR ");
161a04f6 14872 if (!(rex & REX_W))
52fd6d94
JB
14873 used_prefixes |= (prefixes & PREFIX_DATA);
14874 break;
34b772a6
JB
14875 case a_mode:
14876 if (sizeflag & DFLAG)
14877 oappend ("QWORD PTR ");
14878 else
14879 oappend ("DWORD PTR ");
14880 used_prefixes |= (prefixes & PREFIX_DATA);
14881 break;
3f31e633 14882 case d_mode:
539f890d
L
14883 case d_scalar_mode:
14884 case d_scalar_swap_mode:
fa99fab2 14885 case d_swap_mode:
42903f7f 14886 case dqd_mode:
3f31e633
JB
14887 oappend ("DWORD PTR ");
14888 break;
14889 case q_mode:
539f890d
L
14890 case q_scalar_mode:
14891 case q_scalar_swap_mode:
b6169b20 14892 case q_swap_mode:
3f31e633
JB
14893 oappend ("QWORD PTR ");
14894 break;
14895 case m_mode:
cb712a9e 14896 if (address_mode == mode_64bit)
3f31e633
JB
14897 oappend ("QWORD PTR ");
14898 else
14899 oappend ("DWORD PTR ");
14900 break;
14901 case f_mode:
14902 if (sizeflag & DFLAG)
14903 oappend ("FWORD PTR ");
14904 else
14905 oappend ("DWORD PTR ");
14906 used_prefixes |= (prefixes & PREFIX_DATA);
14907 break;
14908 case t_mode:
14909 oappend ("TBYTE PTR ");
14910 break;
14911 case x_mode:
b6169b20 14912 case x_swap_mode:
43234a1e
L
14913 case evex_x_gscat_mode:
14914 case evex_x_nobcst_mode:
c0f3af97
L
14915 if (need_vex)
14916 {
14917 switch (vex.length)
14918 {
14919 case 128:
14920 oappend ("XMMWORD PTR ");
14921 break;
14922 case 256:
14923 oappend ("YMMWORD PTR ");
14924 break;
43234a1e
L
14925 case 512:
14926 oappend ("ZMMWORD PTR ");
14927 break;
c0f3af97
L
14928 default:
14929 abort ();
14930 }
14931 }
14932 else
14933 oappend ("XMMWORD PTR ");
14934 break;
14935 case xmm_mode:
3f31e633
JB
14936 oappend ("XMMWORD PTR ");
14937 break;
43234a1e
L
14938 case ymm_mode:
14939 oappend ("YMMWORD PTR ");
14940 break;
c0f3af97 14941 case xmmq_mode:
43234a1e 14942 case evex_half_bcst_xmmq_mode:
c0f3af97
L
14943 if (!need_vex)
14944 abort ();
14945
14946 switch (vex.length)
14947 {
14948 case 128:
14949 oappend ("QWORD PTR ");
14950 break;
14951 case 256:
14952 oappend ("XMMWORD PTR ");
14953 break;
43234a1e
L
14954 case 512:
14955 oappend ("YMMWORD PTR ");
14956 break;
c0f3af97
L
14957 default:
14958 abort ();
14959 }
14960 break;
6c30d220
L
14961 case xmm_mb_mode:
14962 if (!need_vex)
14963 abort ();
14964
14965 switch (vex.length)
14966 {
14967 case 128:
14968 case 256:
43234a1e 14969 case 512:
6c30d220
L
14970 oappend ("BYTE PTR ");
14971 break;
14972 default:
14973 abort ();
14974 }
14975 break;
14976 case xmm_mw_mode:
14977 if (!need_vex)
14978 abort ();
14979
14980 switch (vex.length)
14981 {
14982 case 128:
14983 case 256:
43234a1e 14984 case 512:
6c30d220
L
14985 oappend ("WORD PTR ");
14986 break;
14987 default:
14988 abort ();
14989 }
14990 break;
14991 case xmm_md_mode:
14992 if (!need_vex)
14993 abort ();
14994
14995 switch (vex.length)
14996 {
14997 case 128:
14998 case 256:
43234a1e 14999 case 512:
6c30d220
L
15000 oappend ("DWORD PTR ");
15001 break;
15002 default:
15003 abort ();
15004 }
15005 break;
15006 case xmm_mq_mode:
15007 if (!need_vex)
15008 abort ();
15009
15010 switch (vex.length)
15011 {
15012 case 128:
15013 case 256:
43234a1e 15014 case 512:
6c30d220
L
15015 oappend ("QWORD PTR ");
15016 break;
15017 default:
15018 abort ();
15019 }
15020 break;
15021 case xmmdw_mode:
15022 if (!need_vex)
15023 abort ();
15024
15025 switch (vex.length)
15026 {
15027 case 128:
15028 oappend ("WORD PTR ");
15029 break;
15030 case 256:
15031 oappend ("DWORD PTR ");
15032 break;
43234a1e
L
15033 case 512:
15034 oappend ("QWORD PTR ");
15035 break;
6c30d220
L
15036 default:
15037 abort ();
15038 }
15039 break;
15040 case xmmqd_mode:
15041 if (!need_vex)
15042 abort ();
15043
15044 switch (vex.length)
15045 {
15046 case 128:
15047 oappend ("DWORD PTR ");
15048 break;
15049 case 256:
15050 oappend ("QWORD PTR ");
15051 break;
43234a1e
L
15052 case 512:
15053 oappend ("XMMWORD PTR ");
15054 break;
6c30d220
L
15055 default:
15056 abort ();
15057 }
15058 break;
c0f3af97
L
15059 case ymmq_mode:
15060 if (!need_vex)
15061 abort ();
15062
15063 switch (vex.length)
15064 {
15065 case 128:
15066 oappend ("QWORD PTR ");
15067 break;
15068 case 256:
15069 oappend ("YMMWORD PTR ");
15070 break;
43234a1e
L
15071 case 512:
15072 oappend ("ZMMWORD PTR ");
15073 break;
c0f3af97
L
15074 default:
15075 abort ();
15076 }
15077 break;
6c30d220
L
15078 case ymmxmm_mode:
15079 if (!need_vex)
15080 abort ();
15081
15082 switch (vex.length)
15083 {
15084 case 128:
15085 case 256:
15086 oappend ("XMMWORD PTR ");
15087 break;
15088 default:
15089 abort ();
15090 }
15091 break;
fb9c77c7
L
15092 case o_mode:
15093 oappend ("OWORD PTR ");
15094 break;
43234a1e 15095 case xmm_mdq_mode:
0bfee649 15096 case vex_w_dq_mode:
1c480963 15097 case vex_scalar_w_dq_mode:
0bfee649
L
15098 if (!need_vex)
15099 abort ();
15100
15101 if (vex.w)
15102 oappend ("QWORD PTR ");
15103 else
15104 oappend ("DWORD PTR ");
15105 break;
43234a1e
L
15106 case vex_vsib_d_w_dq_mode:
15107 case vex_vsib_q_w_dq_mode:
15108 if (!need_vex)
15109 abort ();
15110
15111 if (!vex.evex)
15112 {
15113 if (vex.w)
15114 oappend ("QWORD PTR ");
15115 else
15116 oappend ("DWORD PTR ");
15117 }
15118 else
15119 {
b28d1bda
IT
15120 switch (vex.length)
15121 {
15122 case 128:
15123 oappend ("XMMWORD PTR ");
15124 break;
15125 case 256:
15126 oappend ("YMMWORD PTR ");
15127 break;
15128 case 512:
15129 oappend ("ZMMWORD PTR ");
15130 break;
15131 default:
15132 abort ();
15133 }
43234a1e
L
15134 }
15135 break;
5fc35d96
IT
15136 case vex_vsib_q_w_d_mode:
15137 case vex_vsib_d_w_d_mode:
b28d1bda 15138 if (!need_vex || !vex.evex)
5fc35d96
IT
15139 abort ();
15140
b28d1bda
IT
15141 switch (vex.length)
15142 {
15143 case 128:
15144 oappend ("QWORD PTR ");
15145 break;
15146 case 256:
15147 oappend ("XMMWORD PTR ");
15148 break;
15149 case 512:
15150 oappend ("YMMWORD PTR ");
15151 break;
15152 default:
15153 abort ();
15154 }
5fc35d96
IT
15155
15156 break;
1ba585e8
IT
15157 case mask_bd_mode:
15158 if (!need_vex || vex.length != 128)
15159 abort ();
15160 if (vex.w)
15161 oappend ("DWORD PTR ");
15162 else
15163 oappend ("BYTE PTR ");
15164 break;
43234a1e
L
15165 case mask_mode:
15166 if (!need_vex)
15167 abort ();
1ba585e8
IT
15168 if (vex.w)
15169 oappend ("QWORD PTR ");
15170 else
15171 oappend ("WORD PTR ");
43234a1e 15172 break;
6c75cc62 15173 case v_bnd_mode:
3f31e633
JB
15174 default:
15175 break;
15176 }
15177}
15178
252b5132 15179static void
c0f3af97 15180OP_E_register (int bytemode, int sizeflag)
252b5132 15181{
c0f3af97
L
15182 int reg = modrm.rm;
15183 const char **names;
252b5132 15184
c0f3af97
L
15185 USED_REX (REX_B);
15186 if ((rex & REX_B))
15187 reg += 8;
252b5132 15188
b6169b20 15189 if ((sizeflag & SUFFIX_ALWAYS)
1ba585e8
IT
15190 && (bytemode == b_swap_mode
15191 || bytemode == v_swap_mode
15192 || bytemode == dqw_swap_mode))
b6169b20
L
15193 swap_operand ();
15194
c0f3af97 15195 switch (bytemode)
252b5132 15196 {
c0f3af97 15197 case b_mode:
b6169b20 15198 case b_swap_mode:
c0f3af97
L
15199 USED_REX (0);
15200 if (rex)
15201 names = names8rex;
15202 else
15203 names = names8;
15204 break;
15205 case w_mode:
15206 names = names16;
15207 break;
15208 case d_mode:
1ba585e8
IT
15209 case dw_mode:
15210 case db_mode:
c0f3af97
L
15211 names = names32;
15212 break;
15213 case q_mode:
15214 names = names64;
15215 break;
15216 case m_mode:
6c75cc62 15217 case v_bnd_mode:
c0f3af97
L
15218 names = address_mode == mode_64bit ? names64 : names32;
15219 break;
7e8b059b
L
15220 case bnd_mode:
15221 names = names_bnd;
15222 break;
07f5af7d
L
15223 case indir_v_mode:
15224 if (address_mode == mode_64bit && isa64 == intel64)
15225 {
15226 names = names64;
15227 break;
15228 }
1a0670f3 15229 /* Fall through. */
c0f3af97 15230 case stack_v_mode:
7bb15c6f 15231 if (address_mode == mode_64bit && ((sizeflag & DFLAG) || (rex & REX_W)))
252b5132 15232 {
c0f3af97 15233 names = names64;
252b5132 15234 break;
252b5132 15235 }
c0f3af97 15236 bytemode = v_mode;
1a0670f3 15237 /* Fall through. */
c0f3af97 15238 case v_mode:
b6169b20 15239 case v_swap_mode:
c0f3af97
L
15240 case dq_mode:
15241 case dqb_mode:
15242 case dqd_mode:
15243 case dqw_mode:
1ba585e8 15244 case dqw_swap_mode:
c0f3af97
L
15245 USED_REX (REX_W);
15246 if (rex & REX_W)
15247 names = names64;
c0f3af97 15248 else
f16cd0d5 15249 {
7bb15c6f 15250 if ((sizeflag & DFLAG)
f16cd0d5
L
15251 || (bytemode != v_mode
15252 && bytemode != v_swap_mode))
15253 names = names32;
15254 else
15255 names = names16;
15256 used_prefixes |= (prefixes & PREFIX_DATA);
15257 }
c0f3af97 15258 break;
1ba585e8 15259 case mask_bd_mode:
43234a1e 15260 case mask_mode:
9889cbb1
L
15261 if (reg > 0x7)
15262 {
15263 oappend ("(bad)");
15264 return;
15265 }
43234a1e
L
15266 names = names_mask;
15267 break;
c0f3af97
L
15268 case 0:
15269 return;
15270 default:
15271 oappend (INTERNAL_DISASSEMBLER_ERROR);
252b5132
RH
15272 return;
15273 }
c0f3af97
L
15274 oappend (names[reg]);
15275}
15276
15277static void
c1e679ec 15278OP_E_memory (int bytemode, int sizeflag)
c0f3af97
L
15279{
15280 bfd_vma disp = 0;
15281 int add = (rex & REX_B) ? 8 : 0;
15282 int riprel = 0;
43234a1e
L
15283 int shift;
15284
15285 if (vex.evex)
15286 {
15287 /* In EVEX, if operand doesn't allow broadcast, vex.b should be 0. */
15288 if (vex.b
15289 && bytemode != x_mode
90a915bf 15290 && bytemode != xmmq_mode
43234a1e
L
15291 && bytemode != evex_half_bcst_xmmq_mode)
15292 {
15293 BadOp ();
15294 return;
15295 }
15296 switch (bytemode)
15297 {
1ba585e8
IT
15298 case dqw_mode:
15299 case dw_mode:
15300 case dqw_swap_mode:
15301 shift = 1;
15302 break;
15303 case dqb_mode:
15304 case db_mode:
15305 shift = 0;
15306 break;
43234a1e 15307 case vex_vsib_d_w_dq_mode:
5fc35d96 15308 case vex_vsib_d_w_d_mode:
eaa9d1ad 15309 case vex_vsib_q_w_dq_mode:
5fc35d96 15310 case vex_vsib_q_w_d_mode:
43234a1e
L
15311 case evex_x_gscat_mode:
15312 case xmm_mdq_mode:
15313 shift = vex.w ? 3 : 2;
15314 break;
43234a1e
L
15315 case x_mode:
15316 case evex_half_bcst_xmmq_mode:
90a915bf 15317 case xmmq_mode:
43234a1e
L
15318 if (vex.b)
15319 {
15320 shift = vex.w ? 3 : 2;
15321 break;
15322 }
1a0670f3 15323 /* Fall through. */
43234a1e
L
15324 case xmmqd_mode:
15325 case xmmdw_mode:
43234a1e
L
15326 case ymmq_mode:
15327 case evex_x_nobcst_mode:
15328 case x_swap_mode:
15329 switch (vex.length)
15330 {
15331 case 128:
15332 shift = 4;
15333 break;
15334 case 256:
15335 shift = 5;
15336 break;
15337 case 512:
15338 shift = 6;
15339 break;
15340 default:
15341 abort ();
15342 }
15343 break;
15344 case ymm_mode:
15345 shift = 5;
15346 break;
15347 case xmm_mode:
15348 shift = 4;
15349 break;
15350 case xmm_mq_mode:
15351 case q_mode:
15352 case q_scalar_mode:
15353 case q_swap_mode:
15354 case q_scalar_swap_mode:
15355 shift = 3;
15356 break;
15357 case dqd_mode:
15358 case xmm_md_mode:
15359 case d_mode:
15360 case d_scalar_mode:
15361 case d_swap_mode:
15362 case d_scalar_swap_mode:
15363 shift = 2;
15364 break;
15365 case xmm_mw_mode:
15366 shift = 1;
15367 break;
15368 case xmm_mb_mode:
15369 shift = 0;
15370 break;
15371 default:
15372 abort ();
15373 }
15374 /* Make necessary corrections to shift for modes that need it.
15375 For these modes we currently have shift 4, 5 or 6 depending on
15376 vex.length (it corresponds to xmmword, ymmword or zmmword
15377 operand). We might want to make it 3, 4 or 5 (e.g. for
15378 xmmq_mode). In case of broadcast enabled the corrections
15379 aren't needed, as element size is always 32 or 64 bits. */
90a915bf
IT
15380 if (!vex.b
15381 && (bytemode == xmmq_mode
15382 || bytemode == evex_half_bcst_xmmq_mode))
43234a1e
L
15383 shift -= 1;
15384 else if (bytemode == xmmqd_mode)
15385 shift -= 2;
15386 else if (bytemode == xmmdw_mode)
15387 shift -= 3;
b28d1bda
IT
15388 else if (bytemode == ymmq_mode && vex.length == 128)
15389 shift -= 1;
43234a1e
L
15390 }
15391 else
15392 shift = 0;
252b5132 15393
c0f3af97 15394 USED_REX (REX_B);
3f31e633
JB
15395 if (intel_syntax)
15396 intel_operand_size (bytemode, sizeflag);
252b5132
RH
15397 append_seg ();
15398
5d669648 15399 if ((sizeflag & AFLAG) || address_mode == mode_64bit)
252b5132 15400 {
5d669648
L
15401 /* 32/64 bit address mode */
15402 int havedisp;
252b5132
RH
15403 int havesib;
15404 int havebase;
0f7da397 15405 int haveindex;
20afcfb7 15406 int needindex;
82c18208 15407 int base, rbase;
91d6fa6a 15408 int vindex = 0;
252b5132 15409 int scale = 0;
7e8b059b
L
15410 int addr32flag = !((sizeflag & AFLAG)
15411 || bytemode == v_bnd_mode
15412 || bytemode == bnd_mode);
6c30d220
L
15413 const char **indexes64 = names64;
15414 const char **indexes32 = names32;
252b5132
RH
15415
15416 havesib = 0;
15417 havebase = 1;
0f7da397 15418 haveindex = 0;
7967e09e 15419 base = modrm.rm;
252b5132
RH
15420
15421 if (base == 4)
15422 {
15423 havesib = 1;
dfc8cf43 15424 vindex = sib.index;
161a04f6
L
15425 USED_REX (REX_X);
15426 if (rex & REX_X)
91d6fa6a 15427 vindex += 8;
6c30d220
L
15428 switch (bytemode)
15429 {
15430 case vex_vsib_d_w_dq_mode:
5fc35d96 15431 case vex_vsib_d_w_d_mode:
6c30d220 15432 case vex_vsib_q_w_dq_mode:
5fc35d96 15433 case vex_vsib_q_w_d_mode:
6c30d220
L
15434 if (!need_vex)
15435 abort ();
43234a1e
L
15436 if (vex.evex)
15437 {
15438 if (!vex.v)
15439 vindex += 16;
15440 }
6c30d220
L
15441
15442 haveindex = 1;
15443 switch (vex.length)
15444 {
15445 case 128:
7bb15c6f 15446 indexes64 = indexes32 = names_xmm;
6c30d220
L
15447 break;
15448 case 256:
5fc35d96
IT
15449 if (!vex.w
15450 || bytemode == vex_vsib_q_w_dq_mode
15451 || bytemode == vex_vsib_q_w_d_mode)
7bb15c6f 15452 indexes64 = indexes32 = names_ymm;
6c30d220 15453 else
7bb15c6f 15454 indexes64 = indexes32 = names_xmm;
6c30d220 15455 break;
43234a1e 15456 case 512:
5fc35d96
IT
15457 if (!vex.w
15458 || bytemode == vex_vsib_q_w_dq_mode
15459 || bytemode == vex_vsib_q_w_d_mode)
43234a1e
L
15460 indexes64 = indexes32 = names_zmm;
15461 else
15462 indexes64 = indexes32 = names_ymm;
15463 break;
6c30d220
L
15464 default:
15465 abort ();
15466 }
15467 break;
15468 default:
15469 haveindex = vindex != 4;
15470 break;
15471 }
15472 scale = sib.scale;
15473 base = sib.base;
252b5132
RH
15474 codep++;
15475 }
82c18208 15476 rbase = base + add;
252b5132 15477
7967e09e 15478 switch (modrm.mod)
252b5132
RH
15479 {
15480 case 0:
82c18208 15481 if (base == 5)
252b5132
RH
15482 {
15483 havebase = 0;
cb712a9e 15484 if (address_mode == mode_64bit && !havesib)
52b15da3
JH
15485 riprel = 1;
15486 disp = get32s ();
252b5132
RH
15487 }
15488 break;
15489 case 1:
15490 FETCH_DATA (the_info, codep + 1);
15491 disp = *codep++;
15492 if ((disp & 0x80) != 0)
15493 disp -= 0x100;
43234a1e
L
15494 if (vex.evex && shift > 0)
15495 disp <<= shift;
252b5132
RH
15496 break;
15497 case 2:
52b15da3 15498 disp = get32s ();
252b5132
RH
15499 break;
15500 }
15501
20afcfb7
L
15502 /* In 32bit mode, we need index register to tell [offset] from
15503 [eiz*1 + offset]. */
15504 needindex = (havesib
15505 && !havebase
15506 && !haveindex
15507 && address_mode == mode_32bit);
15508 havedisp = (havebase
15509 || needindex
15510 || (havesib && (haveindex || scale != 0)));
5d669648 15511
252b5132 15512 if (!intel_syntax)
82c18208 15513 if (modrm.mod != 0 || base == 5)
db6eb5be 15514 {
5d669648
L
15515 if (havedisp || riprel)
15516 print_displacement (scratchbuf, disp);
15517 else
15518 print_operand_value (scratchbuf, 1, disp);
db6eb5be 15519 oappend (scratchbuf);
52b15da3
JH
15520 if (riprel)
15521 {
15522 set_op (disp, 1);
28596323 15523 oappend (!addr32flag ? "(%rip)" : "(%eip)");
52b15da3 15524 }
db6eb5be 15525 }
2da11e11 15526
7e8b059b
L
15527 if ((havebase || haveindex || riprel)
15528 && (bytemode != v_bnd_mode)
15529 && (bytemode != bnd_mode))
87767711
JB
15530 used_prefixes |= PREFIX_ADDR;
15531
5d669648 15532 if (havedisp || (intel_syntax && riprel))
252b5132 15533 {
252b5132 15534 *obufp++ = open_char;
52b15da3 15535 if (intel_syntax && riprel)
185b1163
L
15536 {
15537 set_op (disp, 1);
28596323 15538 oappend (!addr32flag ? "rip" : "eip");
185b1163 15539 }
db6eb5be 15540 *obufp = '\0';
252b5132 15541 if (havebase)
7e8b059b 15542 oappend (address_mode == mode_64bit && !addr32flag
82c18208 15543 ? names64[rbase] : names32[rbase]);
252b5132
RH
15544 if (havesib)
15545 {
db51cc60
L
15546 /* ESP/RSP won't allow index. If base isn't ESP/RSP,
15547 print index to tell base + index from base. */
15548 if (scale != 0
20afcfb7 15549 || needindex
db51cc60
L
15550 || haveindex
15551 || (havebase && base != ESP_REG_NUM))
252b5132 15552 {
9306ca4a 15553 if (!intel_syntax || havebase)
db6eb5be 15554 {
9306ca4a
JB
15555 *obufp++ = separator_char;
15556 *obufp = '\0';
db6eb5be 15557 }
db51cc60 15558 if (haveindex)
7e8b059b 15559 oappend (address_mode == mode_64bit && !addr32flag
6c30d220 15560 ? indexes64[vindex] : indexes32[vindex]);
db51cc60 15561 else
7e8b059b 15562 oappend (address_mode == mode_64bit && !addr32flag
db51cc60
L
15563 ? index64 : index32);
15564
db6eb5be
AM
15565 *obufp++ = scale_char;
15566 *obufp = '\0';
15567 sprintf (scratchbuf, "%d", 1 << scale);
15568 oappend (scratchbuf);
15569 }
252b5132 15570 }
185b1163 15571 if (intel_syntax
82c18208 15572 && (disp || modrm.mod != 0 || base == 5))
3d456fa1 15573 {
db51cc60 15574 if (!havedisp || (bfd_signed_vma) disp >= 0)
3d456fa1
JB
15575 {
15576 *obufp++ = '+';
15577 *obufp = '\0';
15578 }
05203043 15579 else if (modrm.mod != 1 && disp != -disp)
3d456fa1
JB
15580 {
15581 *obufp++ = '-';
15582 *obufp = '\0';
15583 disp = - (bfd_signed_vma) disp;
15584 }
15585
db51cc60
L
15586 if (havedisp)
15587 print_displacement (scratchbuf, disp);
15588 else
15589 print_operand_value (scratchbuf, 1, disp);
3d456fa1
JB
15590 oappend (scratchbuf);
15591 }
252b5132
RH
15592
15593 *obufp++ = close_char;
db6eb5be 15594 *obufp = '\0';
252b5132
RH
15595 }
15596 else if (intel_syntax)
db6eb5be 15597 {
82c18208 15598 if (modrm.mod != 0 || base == 5)
db6eb5be 15599 {
285ca992 15600 if (!active_seg_prefix)
252b5132 15601 {
d708bcba 15602 oappend (names_seg[ds_reg - es_reg]);
252b5132
RH
15603 oappend (":");
15604 }
52b15da3 15605 print_operand_value (scratchbuf, 1, disp);
db6eb5be
AM
15606 oappend (scratchbuf);
15607 }
15608 }
252b5132
RH
15609 }
15610 else
f16cd0d5
L
15611 {
15612 /* 16 bit address mode */
15613 used_prefixes |= prefixes & PREFIX_ADDR;
7967e09e 15614 switch (modrm.mod)
252b5132
RH
15615 {
15616 case 0:
7967e09e 15617 if (modrm.rm == 6)
252b5132
RH
15618 {
15619 disp = get16 ();
15620 if ((disp & 0x8000) != 0)
15621 disp -= 0x10000;
15622 }
15623 break;
15624 case 1:
15625 FETCH_DATA (the_info, codep + 1);
15626 disp = *codep++;
15627 if ((disp & 0x80) != 0)
15628 disp -= 0x100;
15629 break;
15630 case 2:
15631 disp = get16 ();
15632 if ((disp & 0x8000) != 0)
15633 disp -= 0x10000;
15634 break;
15635 }
15636
15637 if (!intel_syntax)
7967e09e 15638 if (modrm.mod != 0 || modrm.rm == 6)
db6eb5be 15639 {
5d669648 15640 print_displacement (scratchbuf, disp);
db6eb5be
AM
15641 oappend (scratchbuf);
15642 }
252b5132 15643
7967e09e 15644 if (modrm.mod != 0 || modrm.rm != 6)
252b5132
RH
15645 {
15646 *obufp++ = open_char;
db6eb5be 15647 *obufp = '\0';
7967e09e 15648 oappend (index16[modrm.rm]);
5d669648
L
15649 if (intel_syntax
15650 && (disp || modrm.mod != 0 || modrm.rm == 6))
3d456fa1 15651 {
5d669648 15652 if ((bfd_signed_vma) disp >= 0)
3d456fa1
JB
15653 {
15654 *obufp++ = '+';
15655 *obufp = '\0';
15656 }
7967e09e 15657 else if (modrm.mod != 1)
3d456fa1
JB
15658 {
15659 *obufp++ = '-';
15660 *obufp = '\0';
15661 disp = - (bfd_signed_vma) disp;
15662 }
15663
5d669648 15664 print_displacement (scratchbuf, disp);
3d456fa1
JB
15665 oappend (scratchbuf);
15666 }
15667
db6eb5be
AM
15668 *obufp++ = close_char;
15669 *obufp = '\0';
252b5132 15670 }
3d456fa1
JB
15671 else if (intel_syntax)
15672 {
285ca992 15673 if (!active_seg_prefix)
3d456fa1
JB
15674 {
15675 oappend (names_seg[ds_reg - es_reg]);
15676 oappend (":");
15677 }
15678 print_operand_value (scratchbuf, 1, disp & 0xffff);
15679 oappend (scratchbuf);
15680 }
252b5132 15681 }
43234a1e
L
15682 if (vex.evex && vex.b
15683 && (bytemode == x_mode
90a915bf 15684 || bytemode == xmmq_mode
43234a1e
L
15685 || bytemode == evex_half_bcst_xmmq_mode))
15686 {
90a915bf
IT
15687 if (vex.w
15688 || bytemode == xmmq_mode
15689 || bytemode == evex_half_bcst_xmmq_mode)
b28d1bda
IT
15690 {
15691 switch (vex.length)
15692 {
15693 case 128:
15694 oappend ("{1to2}");
15695 break;
15696 case 256:
15697 oappend ("{1to4}");
15698 break;
15699 case 512:
15700 oappend ("{1to8}");
15701 break;
15702 default:
15703 abort ();
15704 }
15705 }
43234a1e 15706 else
b28d1bda
IT
15707 {
15708 switch (vex.length)
15709 {
15710 case 128:
15711 oappend ("{1to4}");
15712 break;
15713 case 256:
15714 oappend ("{1to8}");
15715 break;
15716 case 512:
15717 oappend ("{1to16}");
15718 break;
15719 default:
15720 abort ();
15721 }
15722 }
43234a1e 15723 }
252b5132
RH
15724}
15725
c0f3af97 15726static void
8b3f93e7 15727OP_E (int bytemode, int sizeflag)
c0f3af97
L
15728{
15729 /* Skip mod/rm byte. */
15730 MODRM_CHECK;
15731 codep++;
15732
15733 if (modrm.mod == 3)
15734 OP_E_register (bytemode, sizeflag);
15735 else
c1e679ec 15736 OP_E_memory (bytemode, sizeflag);
c0f3af97
L
15737}
15738
252b5132 15739static void
26ca5450 15740OP_G (int bytemode, int sizeflag)
252b5132 15741{
52b15da3 15742 int add = 0;
161a04f6
L
15743 USED_REX (REX_R);
15744 if (rex & REX_R)
52b15da3 15745 add += 8;
252b5132
RH
15746 switch (bytemode)
15747 {
15748 case b_mode:
52b15da3
JH
15749 USED_REX (0);
15750 if (rex)
7967e09e 15751 oappend (names8rex[modrm.reg + add]);
52b15da3 15752 else
7967e09e 15753 oappend (names8[modrm.reg + add]);
252b5132
RH
15754 break;
15755 case w_mode:
7967e09e 15756 oappend (names16[modrm.reg + add]);
252b5132
RH
15757 break;
15758 case d_mode:
1ba585e8
IT
15759 case db_mode:
15760 case dw_mode:
7967e09e 15761 oappend (names32[modrm.reg + add]);
52b15da3
JH
15762 break;
15763 case q_mode:
7967e09e 15764 oappend (names64[modrm.reg + add]);
252b5132 15765 break;
7e8b059b
L
15766 case bnd_mode:
15767 oappend (names_bnd[modrm.reg]);
15768 break;
252b5132 15769 case v_mode:
9306ca4a 15770 case dq_mode:
42903f7f
L
15771 case dqb_mode:
15772 case dqd_mode:
9306ca4a 15773 case dqw_mode:
1ba585e8 15774 case dqw_swap_mode:
161a04f6
L
15775 USED_REX (REX_W);
15776 if (rex & REX_W)
7967e09e 15777 oappend (names64[modrm.reg + add]);
252b5132 15778 else
f16cd0d5
L
15779 {
15780 if ((sizeflag & DFLAG) || bytemode != v_mode)
15781 oappend (names32[modrm.reg + add]);
15782 else
15783 oappend (names16[modrm.reg + add]);
15784 used_prefixes |= (prefixes & PREFIX_DATA);
15785 }
252b5132 15786 break;
90700ea2 15787 case m_mode:
cb712a9e 15788 if (address_mode == mode_64bit)
7967e09e 15789 oappend (names64[modrm.reg + add]);
90700ea2 15790 else
7967e09e 15791 oappend (names32[modrm.reg + add]);
90700ea2 15792 break;
1ba585e8 15793 case mask_bd_mode:
43234a1e 15794 case mask_mode:
9889cbb1
L
15795 if ((modrm.reg + add) > 0x7)
15796 {
15797 oappend ("(bad)");
15798 return;
15799 }
43234a1e
L
15800 oappend (names_mask[modrm.reg + add]);
15801 break;
252b5132
RH
15802 default:
15803 oappend (INTERNAL_DISASSEMBLER_ERROR);
15804 break;
15805 }
15806}
15807
52b15da3 15808static bfd_vma
26ca5450 15809get64 (void)
52b15da3 15810{
5dd0794d 15811 bfd_vma x;
52b15da3 15812#ifdef BFD64
5dd0794d
AM
15813 unsigned int a;
15814 unsigned int b;
15815
52b15da3
JH
15816 FETCH_DATA (the_info, codep + 8);
15817 a = *codep++ & 0xff;
15818 a |= (*codep++ & 0xff) << 8;
15819 a |= (*codep++ & 0xff) << 16;
070fe95d 15820 a |= (*codep++ & 0xffu) << 24;
5dd0794d 15821 b = *codep++ & 0xff;
52b15da3
JH
15822 b |= (*codep++ & 0xff) << 8;
15823 b |= (*codep++ & 0xff) << 16;
070fe95d 15824 b |= (*codep++ & 0xffu) << 24;
52b15da3
JH
15825 x = a + ((bfd_vma) b << 32);
15826#else
6608db57 15827 abort ();
5dd0794d 15828 x = 0;
52b15da3
JH
15829#endif
15830 return x;
15831}
15832
15833static bfd_signed_vma
26ca5450 15834get32 (void)
252b5132 15835{
52b15da3 15836 bfd_signed_vma x = 0;
252b5132
RH
15837
15838 FETCH_DATA (the_info, codep + 4);
52b15da3
JH
15839 x = *codep++ & (bfd_signed_vma) 0xff;
15840 x |= (*codep++ & (bfd_signed_vma) 0xff) << 8;
15841 x |= (*codep++ & (bfd_signed_vma) 0xff) << 16;
15842 x |= (*codep++ & (bfd_signed_vma) 0xff) << 24;
15843 return x;
15844}
15845
15846static bfd_signed_vma
26ca5450 15847get32s (void)
52b15da3
JH
15848{
15849 bfd_signed_vma x = 0;
15850
15851 FETCH_DATA (the_info, codep + 4);
15852 x = *codep++ & (bfd_signed_vma) 0xff;
15853 x |= (*codep++ & (bfd_signed_vma) 0xff) << 8;
15854 x |= (*codep++ & (bfd_signed_vma) 0xff) << 16;
15855 x |= (*codep++ & (bfd_signed_vma) 0xff) << 24;
15856
15857 x = (x ^ ((bfd_signed_vma) 1 << 31)) - ((bfd_signed_vma) 1 << 31);
15858
252b5132
RH
15859 return x;
15860}
15861
15862static int
26ca5450 15863get16 (void)
252b5132
RH
15864{
15865 int x = 0;
15866
15867 FETCH_DATA (the_info, codep + 2);
15868 x = *codep++ & 0xff;
15869 x |= (*codep++ & 0xff) << 8;
15870 return x;
15871}
15872
15873static void
26ca5450 15874set_op (bfd_vma op, int riprel)
252b5132
RH
15875{
15876 op_index[op_ad] = op_ad;
cb712a9e 15877 if (address_mode == mode_64bit)
7081ff04
AJ
15878 {
15879 op_address[op_ad] = op;
15880 op_riprel[op_ad] = riprel;
15881 }
15882 else
15883 {
15884 /* Mask to get a 32-bit address. */
15885 op_address[op_ad] = op & 0xffffffff;
15886 op_riprel[op_ad] = riprel & 0xffffffff;
15887 }
252b5132
RH
15888}
15889
15890static void
26ca5450 15891OP_REG (int code, int sizeflag)
252b5132 15892{
2da11e11 15893 const char *s;
9b60702d 15894 int add;
de882298
RM
15895
15896 switch (code)
15897 {
15898 case es_reg: case ss_reg: case cs_reg:
15899 case ds_reg: case fs_reg: case gs_reg:
15900 oappend (names_seg[code - es_reg]);
15901 return;
15902 }
15903
161a04f6
L
15904 USED_REX (REX_B);
15905 if (rex & REX_B)
52b15da3 15906 add = 8;
9b60702d
L
15907 else
15908 add = 0;
52b15da3
JH
15909
15910 switch (code)
15911 {
52b15da3
JH
15912 case ax_reg: case cx_reg: case dx_reg: case bx_reg:
15913 case sp_reg: case bp_reg: case si_reg: case di_reg:
15914 s = names16[code - ax_reg + add];
15915 break;
52b15da3
JH
15916 case al_reg: case ah_reg: case cl_reg: case ch_reg:
15917 case dl_reg: case dh_reg: case bl_reg: case bh_reg:
15918 USED_REX (0);
15919 if (rex)
15920 s = names8rex[code - al_reg + add];
15921 else
15922 s = names8[code - al_reg];
15923 break;
6439fc28
AM
15924 case rAX_reg: case rCX_reg: case rDX_reg: case rBX_reg:
15925 case rSP_reg: case rBP_reg: case rSI_reg: case rDI_reg:
7bb15c6f 15926 if (address_mode == mode_64bit
6c067bbb 15927 && ((sizeflag & DFLAG) || (rex & REX_W)))
6439fc28
AM
15928 {
15929 s = names64[code - rAX_reg + add];
15930 break;
15931 }
15932 code += eAX_reg - rAX_reg;
6608db57 15933 /* Fall through. */
52b15da3
JH
15934 case eAX_reg: case eCX_reg: case eDX_reg: case eBX_reg:
15935 case eSP_reg: case eBP_reg: case eSI_reg: case eDI_reg:
161a04f6
L
15936 USED_REX (REX_W);
15937 if (rex & REX_W)
52b15da3 15938 s = names64[code - eAX_reg + add];
52b15da3 15939 else
f16cd0d5
L
15940 {
15941 if (sizeflag & DFLAG)
15942 s = names32[code - eAX_reg + add];
15943 else
15944 s = names16[code - eAX_reg + add];
15945 used_prefixes |= (prefixes & PREFIX_DATA);
15946 }
52b15da3 15947 break;
52b15da3
JH
15948 default:
15949 s = INTERNAL_DISASSEMBLER_ERROR;
15950 break;
15951 }
15952 oappend (s);
15953}
15954
15955static void
26ca5450 15956OP_IMREG (int code, int sizeflag)
52b15da3
JH
15957{
15958 const char *s;
252b5132
RH
15959
15960 switch (code)
15961 {
15962 case indir_dx_reg:
d708bcba 15963 if (intel_syntax)
52fd6d94 15964 s = "dx";
d708bcba 15965 else
db6eb5be 15966 s = "(%dx)";
252b5132
RH
15967 break;
15968 case ax_reg: case cx_reg: case dx_reg: case bx_reg:
15969 case sp_reg: case bp_reg: case si_reg: case di_reg:
15970 s = names16[code - ax_reg];
15971 break;
15972 case es_reg: case ss_reg: case cs_reg:
15973 case ds_reg: case fs_reg: case gs_reg:
15974 s = names_seg[code - es_reg];
15975 break;
15976 case al_reg: case ah_reg: case cl_reg: case ch_reg:
15977 case dl_reg: case dh_reg: case bl_reg: case bh_reg:
52b15da3
JH
15978 USED_REX (0);
15979 if (rex)
15980 s = names8rex[code - al_reg];
15981 else
15982 s = names8[code - al_reg];
252b5132
RH
15983 break;
15984 case eAX_reg: case eCX_reg: case eDX_reg: case eBX_reg:
15985 case eSP_reg: case eBP_reg: case eSI_reg: case eDI_reg:
161a04f6
L
15986 USED_REX (REX_W);
15987 if (rex & REX_W)
52b15da3 15988 s = names64[code - eAX_reg];
252b5132 15989 else
f16cd0d5
L
15990 {
15991 if (sizeflag & DFLAG)
15992 s = names32[code - eAX_reg];
15993 else
15994 s = names16[code - eAX_reg];
15995 used_prefixes |= (prefixes & PREFIX_DATA);
15996 }
252b5132 15997 break;
52fd6d94 15998 case z_mode_ax_reg:
161a04f6 15999 if ((rex & REX_W) || (sizeflag & DFLAG))
52fd6d94
JB
16000 s = *names32;
16001 else
16002 s = *names16;
161a04f6 16003 if (!(rex & REX_W))
52fd6d94
JB
16004 used_prefixes |= (prefixes & PREFIX_DATA);
16005 break;
252b5132
RH
16006 default:
16007 s = INTERNAL_DISASSEMBLER_ERROR;
16008 break;
16009 }
16010 oappend (s);
16011}
16012
16013static void
26ca5450 16014OP_I (int bytemode, int sizeflag)
252b5132 16015{
52b15da3
JH
16016 bfd_signed_vma op;
16017 bfd_signed_vma mask = -1;
252b5132
RH
16018
16019 switch (bytemode)
16020 {
16021 case b_mode:
16022 FETCH_DATA (the_info, codep + 1);
52b15da3
JH
16023 op = *codep++;
16024 mask = 0xff;
16025 break;
16026 case q_mode:
cb712a9e 16027 if (address_mode == mode_64bit)
6439fc28
AM
16028 {
16029 op = get32s ();
16030 break;
16031 }
6608db57 16032 /* Fall through. */
252b5132 16033 case v_mode:
161a04f6
L
16034 USED_REX (REX_W);
16035 if (rex & REX_W)
52b15da3 16036 op = get32s ();
252b5132 16037 else
52b15da3 16038 {
f16cd0d5
L
16039 if (sizeflag & DFLAG)
16040 {
16041 op = get32 ();
16042 mask = 0xffffffff;
16043 }
16044 else
16045 {
16046 op = get16 ();
16047 mask = 0xfffff;
16048 }
16049 used_prefixes |= (prefixes & PREFIX_DATA);
52b15da3 16050 }
252b5132
RH
16051 break;
16052 case w_mode:
52b15da3 16053 mask = 0xfffff;
252b5132
RH
16054 op = get16 ();
16055 break;
9306ca4a
JB
16056 case const_1_mode:
16057 if (intel_syntax)
6c067bbb 16058 oappend ("1");
9306ca4a 16059 return;
252b5132
RH
16060 default:
16061 oappend (INTERNAL_DISASSEMBLER_ERROR);
16062 return;
16063 }
16064
52b15da3
JH
16065 op &= mask;
16066 scratchbuf[0] = '$';
d708bcba 16067 print_operand_value (scratchbuf + 1, 1, op);
9ce09ba2 16068 oappend_maybe_intel (scratchbuf);
52b15da3
JH
16069 scratchbuf[0] = '\0';
16070}
16071
16072static void
26ca5450 16073OP_I64 (int bytemode, int sizeflag)
52b15da3
JH
16074{
16075 bfd_signed_vma op;
16076 bfd_signed_vma mask = -1;
16077
cb712a9e 16078 if (address_mode != mode_64bit)
6439fc28
AM
16079 {
16080 OP_I (bytemode, sizeflag);
16081 return;
16082 }
16083
52b15da3
JH
16084 switch (bytemode)
16085 {
16086 case b_mode:
16087 FETCH_DATA (the_info, codep + 1);
16088 op = *codep++;
16089 mask = 0xff;
16090 break;
16091 case v_mode:
161a04f6
L
16092 USED_REX (REX_W);
16093 if (rex & REX_W)
52b15da3 16094 op = get64 ();
52b15da3
JH
16095 else
16096 {
f16cd0d5
L
16097 if (sizeflag & DFLAG)
16098 {
16099 op = get32 ();
16100 mask = 0xffffffff;
16101 }
16102 else
16103 {
16104 op = get16 ();
16105 mask = 0xfffff;
16106 }
16107 used_prefixes |= (prefixes & PREFIX_DATA);
52b15da3 16108 }
52b15da3
JH
16109 break;
16110 case w_mode:
16111 mask = 0xfffff;
16112 op = get16 ();
16113 break;
16114 default:
16115 oappend (INTERNAL_DISASSEMBLER_ERROR);
16116 return;
16117 }
16118
16119 op &= mask;
16120 scratchbuf[0] = '$';
d708bcba 16121 print_operand_value (scratchbuf + 1, 1, op);
9ce09ba2 16122 oappend_maybe_intel (scratchbuf);
252b5132
RH
16123 scratchbuf[0] = '\0';
16124}
16125
16126static void
26ca5450 16127OP_sI (int bytemode, int sizeflag)
252b5132 16128{
52b15da3 16129 bfd_signed_vma op;
252b5132
RH
16130
16131 switch (bytemode)
16132 {
16133 case b_mode:
e3949f17 16134 case b_T_mode:
252b5132
RH
16135 FETCH_DATA (the_info, codep + 1);
16136 op = *codep++;
16137 if ((op & 0x80) != 0)
16138 op -= 0x100;
e3949f17
L
16139 if (bytemode == b_T_mode)
16140 {
16141 if (address_mode != mode_64bit
7bb15c6f 16142 || !((sizeflag & DFLAG) || (rex & REX_W)))
e3949f17 16143 {
6c067bbb
RM
16144 /* The operand-size prefix is overridden by a REX prefix. */
16145 if ((sizeflag & DFLAG) || (rex & REX_W))
e3949f17
L
16146 op &= 0xffffffff;
16147 else
16148 op &= 0xffff;
16149 }
16150 }
16151 else
16152 {
16153 if (!(rex & REX_W))
16154 {
16155 if (sizeflag & DFLAG)
16156 op &= 0xffffffff;
16157 else
16158 op &= 0xffff;
16159 }
16160 }
252b5132
RH
16161 break;
16162 case v_mode:
7bb15c6f
RM
16163 /* The operand-size prefix is overridden by a REX prefix. */
16164 if ((sizeflag & DFLAG) || (rex & REX_W))
52b15da3 16165 op = get32s ();
252b5132 16166 else
d9e3625e 16167 op = get16 ();
252b5132
RH
16168 break;
16169 default:
16170 oappend (INTERNAL_DISASSEMBLER_ERROR);
16171 return;
16172 }
52b15da3
JH
16173
16174 scratchbuf[0] = '$';
16175 print_operand_value (scratchbuf + 1, 1, op);
9ce09ba2 16176 oappend_maybe_intel (scratchbuf);
252b5132
RH
16177}
16178
16179static void
26ca5450 16180OP_J (int bytemode, int sizeflag)
252b5132 16181{
52b15da3 16182 bfd_vma disp;
7081ff04 16183 bfd_vma mask = -1;
65ca155d 16184 bfd_vma segment = 0;
252b5132
RH
16185
16186 switch (bytemode)
16187 {
16188 case b_mode:
16189 FETCH_DATA (the_info, codep + 1);
16190 disp = *codep++;
16191 if ((disp & 0x80) != 0)
16192 disp -= 0x100;
16193 break;
16194 case v_mode:
5db04b09
L
16195 if (isa64 == amd64)
16196 USED_REX (REX_W);
16197 if ((sizeflag & DFLAG)
16198 || (address_mode == mode_64bit
16199 && (isa64 != amd64 || (rex & REX_W))))
52b15da3 16200 disp = get32s ();
252b5132
RH
16201 else
16202 {
16203 disp = get16 ();
206717e8
L
16204 if ((disp & 0x8000) != 0)
16205 disp -= 0x10000;
65ca155d
L
16206 /* In 16bit mode, address is wrapped around at 64k within
16207 the same segment. Otherwise, a data16 prefix on a jump
16208 instruction means that the pc is masked to 16 bits after
16209 the displacement is added! */
16210 mask = 0xffff;
16211 if ((prefixes & PREFIX_DATA) == 0)
4fd7268a 16212 segment = ((start_pc + (codep - start_codep))
65ca155d 16213 & ~((bfd_vma) 0xffff));
252b5132 16214 }
5db04b09
L
16215 if (address_mode != mode_64bit
16216 || (isa64 == amd64 && !(rex & REX_W)))
f16cd0d5 16217 used_prefixes |= (prefixes & PREFIX_DATA);
252b5132
RH
16218 break;
16219 default:
16220 oappend (INTERNAL_DISASSEMBLER_ERROR);
16221 return;
16222 }
42d5f9c6 16223 disp = ((start_pc + (codep - start_codep) + disp) & mask) | segment;
52b15da3
JH
16224 set_op (disp, 0);
16225 print_operand_value (scratchbuf, 1, disp);
252b5132
RH
16226 oappend (scratchbuf);
16227}
16228
252b5132 16229static void
ed7841b3 16230OP_SEG (int bytemode, int sizeflag)
252b5132 16231{
ed7841b3 16232 if (bytemode == w_mode)
7967e09e 16233 oappend (names_seg[modrm.reg]);
ed7841b3 16234 else
7967e09e 16235 OP_E (modrm.mod == 3 ? bytemode : w_mode, sizeflag);
252b5132
RH
16236}
16237
16238static void
26ca5450 16239OP_DIR (int dummy ATTRIBUTE_UNUSED, int sizeflag)
252b5132
RH
16240{
16241 int seg, offset;
16242
c608c12e 16243 if (sizeflag & DFLAG)
252b5132 16244 {
c608c12e
AM
16245 offset = get32 ();
16246 seg = get16 ();
252b5132 16247 }
c608c12e
AM
16248 else
16249 {
16250 offset = get16 ();
16251 seg = get16 ();
16252 }
7d421014 16253 used_prefixes |= (prefixes & PREFIX_DATA);
d708bcba 16254 if (intel_syntax)
3f31e633 16255 sprintf (scratchbuf, "0x%x:0x%x", seg, offset);
d708bcba
AM
16256 else
16257 sprintf (scratchbuf, "$0x%x,$0x%x", seg, offset);
c608c12e 16258 oappend (scratchbuf);
252b5132
RH
16259}
16260
252b5132 16261static void
3f31e633 16262OP_OFF (int bytemode, int sizeflag)
252b5132 16263{
52b15da3 16264 bfd_vma off;
252b5132 16265
3f31e633
JB
16266 if (intel_syntax && (sizeflag & SUFFIX_ALWAYS))
16267 intel_operand_size (bytemode, sizeflag);
252b5132
RH
16268 append_seg ();
16269
cb712a9e 16270 if ((sizeflag & AFLAG) || address_mode == mode_64bit)
252b5132
RH
16271 off = get32 ();
16272 else
16273 off = get16 ();
16274
16275 if (intel_syntax)
16276 {
285ca992 16277 if (!active_seg_prefix)
252b5132 16278 {
d708bcba 16279 oappend (names_seg[ds_reg - es_reg]);
252b5132
RH
16280 oappend (":");
16281 }
16282 }
52b15da3
JH
16283 print_operand_value (scratchbuf, 1, off);
16284 oappend (scratchbuf);
16285}
6439fc28 16286
52b15da3 16287static void
3f31e633 16288OP_OFF64 (int bytemode, int sizeflag)
52b15da3
JH
16289{
16290 bfd_vma off;
16291
539e75ad
L
16292 if (address_mode != mode_64bit
16293 || (prefixes & PREFIX_ADDR))
6439fc28
AM
16294 {
16295 OP_OFF (bytemode, sizeflag);
16296 return;
16297 }
16298
3f31e633
JB
16299 if (intel_syntax && (sizeflag & SUFFIX_ALWAYS))
16300 intel_operand_size (bytemode, sizeflag);
52b15da3
JH
16301 append_seg ();
16302
6608db57 16303 off = get64 ();
52b15da3
JH
16304
16305 if (intel_syntax)
16306 {
285ca992 16307 if (!active_seg_prefix)
52b15da3 16308 {
d708bcba 16309 oappend (names_seg[ds_reg - es_reg]);
52b15da3
JH
16310 oappend (":");
16311 }
16312 }
16313 print_operand_value (scratchbuf, 1, off);
252b5132
RH
16314 oappend (scratchbuf);
16315}
16316
16317static void
26ca5450 16318ptr_reg (int code, int sizeflag)
252b5132 16319{
2da11e11 16320 const char *s;
d708bcba 16321
1d9f512f 16322 *obufp++ = open_char;
20f0a1fc 16323 used_prefixes |= (prefixes & PREFIX_ADDR);
cb712a9e 16324 if (address_mode == mode_64bit)
c1a64871
JH
16325 {
16326 if (!(sizeflag & AFLAG))
db6eb5be 16327 s = names32[code - eAX_reg];
c1a64871 16328 else
db6eb5be 16329 s = names64[code - eAX_reg];
c1a64871 16330 }
52b15da3 16331 else if (sizeflag & AFLAG)
252b5132
RH
16332 s = names32[code - eAX_reg];
16333 else
16334 s = names16[code - eAX_reg];
16335 oappend (s);
1d9f512f
AM
16336 *obufp++ = close_char;
16337 *obufp = 0;
252b5132
RH
16338}
16339
16340static void
26ca5450 16341OP_ESreg (int code, int sizeflag)
252b5132 16342{
9306ca4a 16343 if (intel_syntax)
52fd6d94
JB
16344 {
16345 switch (codep[-1])
16346 {
16347 case 0x6d: /* insw/insl */
16348 intel_operand_size (z_mode, sizeflag);
16349 break;
16350 case 0xa5: /* movsw/movsl/movsq */
16351 case 0xa7: /* cmpsw/cmpsl/cmpsq */
16352 case 0xab: /* stosw/stosl */
16353 case 0xaf: /* scasw/scasl */
16354 intel_operand_size (v_mode, sizeflag);
16355 break;
16356 default:
16357 intel_operand_size (b_mode, sizeflag);
16358 }
16359 }
9ce09ba2 16360 oappend_maybe_intel ("%es:");
252b5132
RH
16361 ptr_reg (code, sizeflag);
16362}
16363
16364static void
26ca5450 16365OP_DSreg (int code, int sizeflag)
252b5132 16366{
9306ca4a 16367 if (intel_syntax)
52fd6d94
JB
16368 {
16369 switch (codep[-1])
16370 {
16371 case 0x6f: /* outsw/outsl */
16372 intel_operand_size (z_mode, sizeflag);
16373 break;
16374 case 0xa5: /* movsw/movsl/movsq */
16375 case 0xa7: /* cmpsw/cmpsl/cmpsq */
16376 case 0xad: /* lodsw/lodsl/lodsq */
16377 intel_operand_size (v_mode, sizeflag);
16378 break;
16379 default:
16380 intel_operand_size (b_mode, sizeflag);
16381 }
16382 }
285ca992
L
16383 /* Set active_seg_prefix to PREFIX_DS if it is unset so that the
16384 default segment register DS is printed. */
16385 if (!active_seg_prefix)
16386 active_seg_prefix = PREFIX_DS;
6608db57 16387 append_seg ();
252b5132
RH
16388 ptr_reg (code, sizeflag);
16389}
16390
252b5132 16391static void
26ca5450 16392OP_C (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 16393{
9b60702d 16394 int add;
161a04f6 16395 if (rex & REX_R)
c4a530c5 16396 {
161a04f6 16397 USED_REX (REX_R);
c4a530c5
JB
16398 add = 8;
16399 }
cb712a9e 16400 else if (address_mode != mode_64bit && (prefixes & PREFIX_LOCK))
c4a530c5 16401 {
f16cd0d5 16402 all_prefixes[last_lock_prefix] = 0;
c4a530c5
JB
16403 used_prefixes |= PREFIX_LOCK;
16404 add = 8;
16405 }
9b60702d
L
16406 else
16407 add = 0;
7967e09e 16408 sprintf (scratchbuf, "%%cr%d", modrm.reg + add);
9ce09ba2 16409 oappend_maybe_intel (scratchbuf);
252b5132
RH
16410}
16411
252b5132 16412static void
26ca5450 16413OP_D (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 16414{
9b60702d 16415 int add;
161a04f6
L
16416 USED_REX (REX_R);
16417 if (rex & REX_R)
52b15da3 16418 add = 8;
9b60702d
L
16419 else
16420 add = 0;
d708bcba 16421 if (intel_syntax)
7967e09e 16422 sprintf (scratchbuf, "db%d", modrm.reg + add);
d708bcba 16423 else
7967e09e 16424 sprintf (scratchbuf, "%%db%d", modrm.reg + add);
252b5132
RH
16425 oappend (scratchbuf);
16426}
16427
252b5132 16428static void
26ca5450 16429OP_T (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 16430{
7967e09e 16431 sprintf (scratchbuf, "%%tr%d", modrm.reg);
9ce09ba2 16432 oappend_maybe_intel (scratchbuf);
252b5132
RH
16433}
16434
16435static void
6f74c397 16436OP_R (int bytemode, int sizeflag)
252b5132 16437{
68f34464
L
16438 /* Skip mod/rm byte. */
16439 MODRM_CHECK;
16440 codep++;
16441 OP_E_register (bytemode, sizeflag);
252b5132
RH
16442}
16443
16444static void
26ca5450 16445OP_MMX (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 16446{
b9733481
L
16447 int reg = modrm.reg;
16448 const char **names;
16449
041bd2e0
JH
16450 used_prefixes |= (prefixes & PREFIX_DATA);
16451 if (prefixes & PREFIX_DATA)
20f0a1fc 16452 {
b9733481 16453 names = names_xmm;
161a04f6
L
16454 USED_REX (REX_R);
16455 if (rex & REX_R)
b9733481 16456 reg += 8;
20f0a1fc 16457 }
041bd2e0 16458 else
b9733481
L
16459 names = names_mm;
16460 oappend (names[reg]);
252b5132
RH
16461}
16462
c608c12e 16463static void
c0f3af97 16464OP_XMM (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
c608c12e 16465{
b9733481
L
16466 int reg = modrm.reg;
16467 const char **names;
16468
161a04f6
L
16469 USED_REX (REX_R);
16470 if (rex & REX_R)
b9733481 16471 reg += 8;
43234a1e
L
16472 if (vex.evex)
16473 {
16474 if (!vex.r)
16475 reg += 16;
16476 }
16477
539f890d
L
16478 if (need_vex
16479 && bytemode != xmm_mode
43234a1e
L
16480 && bytemode != xmmq_mode
16481 && bytemode != evex_half_bcst_xmmq_mode
16482 && bytemode != ymm_mode
539f890d 16483 && bytemode != scalar_mode)
c0f3af97
L
16484 {
16485 switch (vex.length)
16486 {
16487 case 128:
b9733481 16488 names = names_xmm;
c0f3af97
L
16489 break;
16490 case 256:
5fc35d96
IT
16491 if (vex.w
16492 || (bytemode != vex_vsib_q_w_dq_mode
16493 && bytemode != vex_vsib_q_w_d_mode))
6c30d220
L
16494 names = names_ymm;
16495 else
16496 names = names_xmm;
c0f3af97 16497 break;
43234a1e
L
16498 case 512:
16499 names = names_zmm;
16500 break;
c0f3af97
L
16501 default:
16502 abort ();
16503 }
16504 }
43234a1e
L
16505 else if (bytemode == xmmq_mode
16506 || bytemode == evex_half_bcst_xmmq_mode)
16507 {
16508 switch (vex.length)
16509 {
16510 case 128:
16511 case 256:
16512 names = names_xmm;
16513 break;
16514 case 512:
16515 names = names_ymm;
16516 break;
16517 default:
16518 abort ();
16519 }
16520 }
16521 else if (bytemode == ymm_mode)
16522 names = names_ymm;
c0f3af97 16523 else
b9733481
L
16524 names = names_xmm;
16525 oappend (names[reg]);
c608c12e
AM
16526}
16527
252b5132 16528static void
26ca5450 16529OP_EM (int bytemode, int sizeflag)
252b5132 16530{
b9733481
L
16531 int reg;
16532 const char **names;
16533
7967e09e 16534 if (modrm.mod != 3)
252b5132 16535 {
b6169b20
L
16536 if (intel_syntax
16537 && (bytemode == v_mode || bytemode == v_swap_mode))
9306ca4a
JB
16538 {
16539 bytemode = (prefixes & PREFIX_DATA) ? x_mode : q_mode;
16540 used_prefixes |= (prefixes & PREFIX_DATA);
6c067bbb 16541 }
252b5132
RH
16542 OP_E (bytemode, sizeflag);
16543 return;
16544 }
16545
b6169b20
L
16546 if ((sizeflag & SUFFIX_ALWAYS) && bytemode == v_swap_mode)
16547 swap_operand ();
16548
6608db57 16549 /* Skip mod/rm byte. */
4bba6815 16550 MODRM_CHECK;
252b5132 16551 codep++;
041bd2e0 16552 used_prefixes |= (prefixes & PREFIX_DATA);
b9733481 16553 reg = modrm.rm;
041bd2e0 16554 if (prefixes & PREFIX_DATA)
20f0a1fc 16555 {
b9733481 16556 names = names_xmm;
161a04f6
L
16557 USED_REX (REX_B);
16558 if (rex & REX_B)
b9733481 16559 reg += 8;
20f0a1fc 16560 }
041bd2e0 16561 else
b9733481
L
16562 names = names_mm;
16563 oappend (names[reg]);
252b5132
RH
16564}
16565
246c51aa
L
16566/* cvt* are the only instructions in sse2 which have
16567 both SSE and MMX operands and also have 0x66 prefix
16568 in their opcode. 0x66 was originally used to differentiate
16569 between SSE and MMX instruction(operands). So we have to handle the
4d9567e0
MM
16570 cvt* separately using OP_EMC and OP_MXC */
16571static void
16572OP_EMC (int bytemode, int sizeflag)
16573{
7967e09e 16574 if (modrm.mod != 3)
4d9567e0
MM
16575 {
16576 if (intel_syntax && bytemode == v_mode)
16577 {
16578 bytemode = (prefixes & PREFIX_DATA) ? x_mode : q_mode;
16579 used_prefixes |= (prefixes & PREFIX_DATA);
6c067bbb 16580 }
4d9567e0
MM
16581 OP_E (bytemode, sizeflag);
16582 return;
16583 }
246c51aa 16584
4d9567e0
MM
16585 /* Skip mod/rm byte. */
16586 MODRM_CHECK;
16587 codep++;
16588 used_prefixes |= (prefixes & PREFIX_DATA);
b9733481 16589 oappend (names_mm[modrm.rm]);
4d9567e0
MM
16590}
16591
16592static void
16593OP_MXC (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
16594{
16595 used_prefixes |= (prefixes & PREFIX_DATA);
b9733481 16596 oappend (names_mm[modrm.reg]);
4d9567e0
MM
16597}
16598
c608c12e 16599static void
26ca5450 16600OP_EX (int bytemode, int sizeflag)
c608c12e 16601{
b9733481
L
16602 int reg;
16603 const char **names;
d6f574e0
L
16604
16605 /* Skip mod/rm byte. */
16606 MODRM_CHECK;
16607 codep++;
16608
7967e09e 16609 if (modrm.mod != 3)
c608c12e 16610 {
c1e679ec 16611 OP_E_memory (bytemode, sizeflag);
c608c12e
AM
16612 return;
16613 }
d6f574e0 16614
b9733481 16615 reg = modrm.rm;
161a04f6
L
16616 USED_REX (REX_B);
16617 if (rex & REX_B)
b9733481 16618 reg += 8;
43234a1e
L
16619 if (vex.evex)
16620 {
16621 USED_REX (REX_X);
16622 if ((rex & REX_X))
16623 reg += 16;
16624 }
c608c12e 16625
b6169b20 16626 if ((sizeflag & SUFFIX_ALWAYS)
fa99fab2
L
16627 && (bytemode == x_swap_mode
16628 || bytemode == d_swap_mode
1ba585e8 16629 || bytemode == dqw_swap_mode
7bb15c6f 16630 || bytemode == d_scalar_swap_mode
539f890d
L
16631 || bytemode == q_swap_mode
16632 || bytemode == q_scalar_swap_mode))
b6169b20
L
16633 swap_operand ();
16634
c0f3af97
L
16635 if (need_vex
16636 && bytemode != xmm_mode
6c30d220
L
16637 && bytemode != xmmdw_mode
16638 && bytemode != xmmqd_mode
16639 && bytemode != xmm_mb_mode
16640 && bytemode != xmm_mw_mode
16641 && bytemode != xmm_md_mode
16642 && bytemode != xmm_mq_mode
43234a1e 16643 && bytemode != xmm_mdq_mode
539f890d 16644 && bytemode != xmmq_mode
43234a1e
L
16645 && bytemode != evex_half_bcst_xmmq_mode
16646 && bytemode != ymm_mode
539f890d 16647 && bytemode != d_scalar_mode
7bb15c6f 16648 && bytemode != d_scalar_swap_mode
539f890d 16649 && bytemode != q_scalar_mode
1c480963
L
16650 && bytemode != q_scalar_swap_mode
16651 && bytemode != vex_scalar_w_dq_mode)
c0f3af97
L
16652 {
16653 switch (vex.length)
16654 {
16655 case 128:
b9733481 16656 names = names_xmm;
c0f3af97
L
16657 break;
16658 case 256:
b9733481 16659 names = names_ymm;
c0f3af97 16660 break;
43234a1e
L
16661 case 512:
16662 names = names_zmm;
16663 break;
c0f3af97
L
16664 default:
16665 abort ();
16666 }
16667 }
43234a1e
L
16668 else if (bytemode == xmmq_mode
16669 || bytemode == evex_half_bcst_xmmq_mode)
16670 {
16671 switch (vex.length)
16672 {
16673 case 128:
16674 case 256:
16675 names = names_xmm;
16676 break;
16677 case 512:
16678 names = names_ymm;
16679 break;
16680 default:
16681 abort ();
16682 }
16683 }
16684 else if (bytemode == ymm_mode)
16685 names = names_ymm;
c0f3af97 16686 else
b9733481
L
16687 names = names_xmm;
16688 oappend (names[reg]);
c608c12e
AM
16689}
16690
252b5132 16691static void
26ca5450 16692OP_MS (int bytemode, int sizeflag)
252b5132 16693{
7967e09e 16694 if (modrm.mod == 3)
2da11e11
AM
16695 OP_EM (bytemode, sizeflag);
16696 else
6608db57 16697 BadOp ();
252b5132
RH
16698}
16699
992aaec9 16700static void
26ca5450 16701OP_XS (int bytemode, int sizeflag)
992aaec9 16702{
7967e09e 16703 if (modrm.mod == 3)
992aaec9
AM
16704 OP_EX (bytemode, sizeflag);
16705 else
6608db57 16706 BadOp ();
992aaec9
AM
16707}
16708
cc0ec051
AM
16709static void
16710OP_M (int bytemode, int sizeflag)
16711{
7967e09e 16712 if (modrm.mod == 3)
75413a22
L
16713 /* bad bound,lea,lds,les,lfs,lgs,lss,cmpxchg8b,vmptrst modrm */
16714 BadOp ();
cc0ec051
AM
16715 else
16716 OP_E (bytemode, sizeflag);
16717}
16718
16719static void
16720OP_0f07 (int bytemode, int sizeflag)
16721{
7967e09e 16722 if (modrm.mod != 3 || modrm.rm != 0)
cc0ec051
AM
16723 BadOp ();
16724 else
16725 OP_E (bytemode, sizeflag);
16726}
16727
46e883c5 16728/* NOP is an alias of "xchg %ax,%ax" in 16bit mode, "xchg %eax,%eax" in
246c51aa 16729 32bit mode and "xchg %rax,%rax" in 64bit mode. */
46e883c5 16730
cc0ec051 16731static void
46e883c5 16732NOP_Fixup1 (int bytemode, int sizeflag)
cc0ec051 16733{
8b38ad71
L
16734 if ((prefixes & PREFIX_DATA) != 0
16735 || (rex != 0
16736 && rex != 0x48
16737 && address_mode == mode_64bit))
46e883c5
L
16738 OP_REG (bytemode, sizeflag);
16739 else
16740 strcpy (obuf, "nop");
16741}
16742
16743static void
16744NOP_Fixup2 (int bytemode, int sizeflag)
16745{
8b38ad71
L
16746 if ((prefixes & PREFIX_DATA) != 0
16747 || (rex != 0
16748 && rex != 0x48
16749 && address_mode == mode_64bit))
46e883c5 16750 OP_IMREG (bytemode, sizeflag);
cc0ec051
AM
16751}
16752
84037f8c 16753static const char *const Suffix3DNow[] = {
252b5132
RH
16754/* 00 */ NULL, NULL, NULL, NULL,
16755/* 04 */ NULL, NULL, NULL, NULL,
16756/* 08 */ NULL, NULL, NULL, NULL,
9e525108 16757/* 0C */ "pi2fw", "pi2fd", NULL, NULL,
252b5132
RH
16758/* 10 */ NULL, NULL, NULL, NULL,
16759/* 14 */ NULL, NULL, NULL, NULL,
16760/* 18 */ NULL, NULL, NULL, NULL,
9e525108 16761/* 1C */ "pf2iw", "pf2id", NULL, NULL,
252b5132
RH
16762/* 20 */ NULL, NULL, NULL, NULL,
16763/* 24 */ NULL, NULL, NULL, NULL,
16764/* 28 */ NULL, NULL, NULL, NULL,
16765/* 2C */ NULL, NULL, NULL, NULL,
16766/* 30 */ NULL, NULL, NULL, NULL,
16767/* 34 */ NULL, NULL, NULL, NULL,
16768/* 38 */ NULL, NULL, NULL, NULL,
16769/* 3C */ NULL, NULL, NULL, NULL,
16770/* 40 */ NULL, NULL, NULL, NULL,
16771/* 44 */ NULL, NULL, NULL, NULL,
16772/* 48 */ NULL, NULL, NULL, NULL,
16773/* 4C */ NULL, NULL, NULL, NULL,
16774/* 50 */ NULL, NULL, NULL, NULL,
16775/* 54 */ NULL, NULL, NULL, NULL,
16776/* 58 */ NULL, NULL, NULL, NULL,
16777/* 5C */ NULL, NULL, NULL, NULL,
16778/* 60 */ NULL, NULL, NULL, NULL,
16779/* 64 */ NULL, NULL, NULL, NULL,
16780/* 68 */ NULL, NULL, NULL, NULL,
16781/* 6C */ NULL, NULL, NULL, NULL,
16782/* 70 */ NULL, NULL, NULL, NULL,
16783/* 74 */ NULL, NULL, NULL, NULL,
16784/* 78 */ NULL, NULL, NULL, NULL,
16785/* 7C */ NULL, NULL, NULL, NULL,
16786/* 80 */ NULL, NULL, NULL, NULL,
16787/* 84 */ NULL, NULL, NULL, NULL,
9e525108
AM
16788/* 88 */ NULL, NULL, "pfnacc", NULL,
16789/* 8C */ NULL, NULL, "pfpnacc", NULL,
252b5132
RH
16790/* 90 */ "pfcmpge", NULL, NULL, NULL,
16791/* 94 */ "pfmin", NULL, "pfrcp", "pfrsqrt",
16792/* 98 */ NULL, NULL, "pfsub", NULL,
16793/* 9C */ NULL, NULL, "pfadd", NULL,
16794/* A0 */ "pfcmpgt", NULL, NULL, NULL,
16795/* A4 */ "pfmax", NULL, "pfrcpit1", "pfrsqit1",
16796/* A8 */ NULL, NULL, "pfsubr", NULL,
16797/* AC */ NULL, NULL, "pfacc", NULL,
16798/* B0 */ "pfcmpeq", NULL, NULL, NULL,
9beff690 16799/* B4 */ "pfmul", NULL, "pfrcpit2", "pmulhrw",
9e525108 16800/* B8 */ NULL, NULL, NULL, "pswapd",
252b5132
RH
16801/* BC */ NULL, NULL, NULL, "pavgusb",
16802/* C0 */ NULL, NULL, NULL, NULL,
16803/* C4 */ NULL, NULL, NULL, NULL,
16804/* C8 */ NULL, NULL, NULL, NULL,
16805/* CC */ NULL, NULL, NULL, NULL,
16806/* D0 */ NULL, NULL, NULL, NULL,
16807/* D4 */ NULL, NULL, NULL, NULL,
16808/* D8 */ NULL, NULL, NULL, NULL,
16809/* DC */ NULL, NULL, NULL, NULL,
16810/* E0 */ NULL, NULL, NULL, NULL,
16811/* E4 */ NULL, NULL, NULL, NULL,
16812/* E8 */ NULL, NULL, NULL, NULL,
16813/* EC */ NULL, NULL, NULL, NULL,
16814/* F0 */ NULL, NULL, NULL, NULL,
16815/* F4 */ NULL, NULL, NULL, NULL,
16816/* F8 */ NULL, NULL, NULL, NULL,
16817/* FC */ NULL, NULL, NULL, NULL,
16818};
16819
16820static void
26ca5450 16821OP_3DNowSuffix (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132
RH
16822{
16823 const char *mnemonic;
16824
16825 FETCH_DATA (the_info, codep + 1);
16826 /* AMD 3DNow! instructions are specified by an opcode suffix in the
16827 place where an 8-bit immediate would normally go. ie. the last
16828 byte of the instruction. */
ea397f5b 16829 obufp = mnemonicendp;
c608c12e 16830 mnemonic = Suffix3DNow[*codep++ & 0xff];
252b5132 16831 if (mnemonic)
2da11e11 16832 oappend (mnemonic);
252b5132
RH
16833 else
16834 {
16835 /* Since a variable sized modrm/sib chunk is between the start
16836 of the opcode (0x0f0f) and the opcode suffix, we need to do
16837 all the modrm processing first, and don't know until now that
16838 we have a bad opcode. This necessitates some cleaning up. */
ce518a5f
L
16839 op_out[0][0] = '\0';
16840 op_out[1][0] = '\0';
6608db57 16841 BadOp ();
252b5132 16842 }
ea397f5b 16843 mnemonicendp = obufp;
252b5132 16844}
c608c12e 16845
ea397f5b
L
16846static struct op simd_cmp_op[] =
16847{
16848 { STRING_COMMA_LEN ("eq") },
16849 { STRING_COMMA_LEN ("lt") },
16850 { STRING_COMMA_LEN ("le") },
16851 { STRING_COMMA_LEN ("unord") },
16852 { STRING_COMMA_LEN ("neq") },
16853 { STRING_COMMA_LEN ("nlt") },
16854 { STRING_COMMA_LEN ("nle") },
16855 { STRING_COMMA_LEN ("ord") }
c608c12e
AM
16856};
16857
16858static void
ad19981d 16859CMP_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
c608c12e
AM
16860{
16861 unsigned int cmp_type;
16862
16863 FETCH_DATA (the_info, codep + 1);
16864 cmp_type = *codep++ & 0xff;
c0f3af97 16865 if (cmp_type < ARRAY_SIZE (simd_cmp_op))
c608c12e 16866 {
ad19981d 16867 char suffix [3];
ea397f5b 16868 char *p = mnemonicendp - 2;
ad19981d
L
16869 suffix[0] = p[0];
16870 suffix[1] = p[1];
16871 suffix[2] = '\0';
ea397f5b
L
16872 sprintf (p, "%s%s", simd_cmp_op[cmp_type].name, suffix);
16873 mnemonicendp += simd_cmp_op[cmp_type].len;
c608c12e
AM
16874 }
16875 else
16876 {
ad19981d
L
16877 /* We have a reserved extension byte. Output it directly. */
16878 scratchbuf[0] = '$';
16879 print_operand_value (scratchbuf + 1, 1, cmp_type);
9ce09ba2 16880 oappend_maybe_intel (scratchbuf);
ad19981d 16881 scratchbuf[0] = '\0';
c608c12e
AM
16882 }
16883}
16884
9916071f
AP
16885static void
16886OP_Mwaitx (int bytemode ATTRIBUTE_UNUSED,
16887 int sizeflag ATTRIBUTE_UNUSED)
16888{
16889 /* mwaitx %eax,%ecx,%ebx */
16890 if (!intel_syntax)
16891 {
16892 const char **names = (address_mode == mode_64bit
16893 ? names64 : names32);
16894 strcpy (op_out[0], names[0]);
16895 strcpy (op_out[1], names[1]);
16896 strcpy (op_out[2], names[3]);
16897 two_source_ops = 1;
16898 }
16899 /* Skip mod/rm byte. */
16900 MODRM_CHECK;
16901 codep++;
16902}
16903
ca164297 16904static void
b844680a
L
16905OP_Mwait (int bytemode ATTRIBUTE_UNUSED,
16906 int sizeflag ATTRIBUTE_UNUSED)
16907{
16908 /* mwait %eax,%ecx */
16909 if (!intel_syntax)
16910 {
16911 const char **names = (address_mode == mode_64bit
16912 ? names64 : names32);
16913 strcpy (op_out[0], names[0]);
16914 strcpy (op_out[1], names[1]);
16915 two_source_ops = 1;
16916 }
16917 /* Skip mod/rm byte. */
16918 MODRM_CHECK;
16919 codep++;
16920}
16921
16922static void
16923OP_Monitor (int bytemode ATTRIBUTE_UNUSED,
16924 int sizeflag ATTRIBUTE_UNUSED)
ca164297 16925{
b844680a
L
16926 /* monitor %eax,%ecx,%edx" */
16927 if (!intel_syntax)
ca164297 16928 {
b844680a 16929 const char **op1_names;
cb712a9e
L
16930 const char **names = (address_mode == mode_64bit
16931 ? names64 : names32);
1d9f512f 16932
b844680a
L
16933 if (!(prefixes & PREFIX_ADDR))
16934 op1_names = (address_mode == mode_16bit
16935 ? names16 : names);
ca164297
L
16936 else
16937 {
b844680a 16938 /* Remove "addr16/addr32". */
f16cd0d5 16939 all_prefixes[last_addr_prefix] = 0;
b844680a
L
16940 op1_names = (address_mode != mode_32bit
16941 ? names32 : names16);
16942 used_prefixes |= PREFIX_ADDR;
ca164297 16943 }
b844680a
L
16944 strcpy (op_out[0], op1_names[0]);
16945 strcpy (op_out[1], names[1]);
16946 strcpy (op_out[2], names[2]);
16947 two_source_ops = 1;
ca164297 16948 }
b844680a
L
16949 /* Skip mod/rm byte. */
16950 MODRM_CHECK;
16951 codep++;
30123838
JB
16952}
16953
6608db57
KH
16954static void
16955BadOp (void)
2da11e11 16956{
6608db57
KH
16957 /* Throw away prefixes and 1st. opcode byte. */
16958 codep = insn_codep + 1;
2da11e11
AM
16959 oappend ("(bad)");
16960}
4cc91dba 16961
35c52694
L
16962static void
16963REP_Fixup (int bytemode, int sizeflag)
16964{
16965 /* The 0xf3 prefix should be displayed as "rep" for ins, outs, movs,
16966 lods and stos. */
35c52694 16967 if (prefixes & PREFIX_REPZ)
f16cd0d5 16968 all_prefixes[last_repz_prefix] = REP_PREFIX;
35c52694
L
16969
16970 switch (bytemode)
16971 {
16972 case al_reg:
16973 case eAX_reg:
16974 case indir_dx_reg:
16975 OP_IMREG (bytemode, sizeflag);
16976 break;
16977 case eDI_reg:
16978 OP_ESreg (bytemode, sizeflag);
16979 break;
16980 case eSI_reg:
16981 OP_DSreg (bytemode, sizeflag);
16982 break;
16983 default:
16984 abort ();
16985 break;
16986 }
16987}
f5804c90 16988
7e8b059b
L
16989/* For BND-prefixed instructions 0xF2 prefix should be displayed as
16990 "bnd". */
16991
16992static void
16993BND_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
16994{
16995 if (prefixes & PREFIX_REPNZ)
16996 all_prefixes[last_repnz_prefix] = BND_PREFIX;
16997}
16998
42164a71
L
16999/* Similar to OP_E. But the 0xf2/0xf3 prefixes should be displayed as
17000 "xacquire"/"xrelease" for memory operand if there is a LOCK prefix.
17001 */
17002
17003static void
17004HLE_Fixup1 (int bytemode, int sizeflag)
17005{
17006 if (modrm.mod != 3
17007 && (prefixes & PREFIX_LOCK) != 0)
17008 {
17009 if (prefixes & PREFIX_REPZ)
17010 all_prefixes[last_repz_prefix] = XRELEASE_PREFIX;
17011 if (prefixes & PREFIX_REPNZ)
17012 all_prefixes[last_repnz_prefix] = XACQUIRE_PREFIX;
17013 }
17014
17015 OP_E (bytemode, sizeflag);
17016}
17017
17018/* Similar to OP_E. But the 0xf2/0xf3 prefixes should be displayed as
17019 "xacquire"/"xrelease" for memory operand. No check for LOCK prefix.
17020 */
17021
17022static void
17023HLE_Fixup2 (int bytemode, int sizeflag)
17024{
17025 if (modrm.mod != 3)
17026 {
17027 if (prefixes & PREFIX_REPZ)
17028 all_prefixes[last_repz_prefix] = XRELEASE_PREFIX;
17029 if (prefixes & PREFIX_REPNZ)
17030 all_prefixes[last_repnz_prefix] = XACQUIRE_PREFIX;
17031 }
17032
17033 OP_E (bytemode, sizeflag);
17034}
17035
17036/* Similar to OP_E. But the 0xf3 prefixes should be displayed as
17037 "xrelease" for memory operand. No check for LOCK prefix. */
17038
17039static void
17040HLE_Fixup3 (int bytemode, int sizeflag)
17041{
17042 if (modrm.mod != 3
17043 && last_repz_prefix > last_repnz_prefix
17044 && (prefixes & PREFIX_REPZ) != 0)
17045 all_prefixes[last_repz_prefix] = XRELEASE_PREFIX;
17046
17047 OP_E (bytemode, sizeflag);
17048}
17049
f5804c90
L
17050static void
17051CMPXCHG8B_Fixup (int bytemode, int sizeflag)
17052{
161a04f6
L
17053 USED_REX (REX_W);
17054 if (rex & REX_W)
f5804c90
L
17055 {
17056 /* Change cmpxchg8b to cmpxchg16b. */
ea397f5b
L
17057 char *p = mnemonicendp - 2;
17058 mnemonicendp = stpcpy (p, "16b");
fb9c77c7 17059 bytemode = o_mode;
f5804c90 17060 }
42164a71
L
17061 else if ((prefixes & PREFIX_LOCK) != 0)
17062 {
17063 if (prefixes & PREFIX_REPZ)
17064 all_prefixes[last_repz_prefix] = XRELEASE_PREFIX;
17065 if (prefixes & PREFIX_REPNZ)
17066 all_prefixes[last_repnz_prefix] = XACQUIRE_PREFIX;
17067 }
17068
f5804c90
L
17069 OP_M (bytemode, sizeflag);
17070}
42903f7f
L
17071
17072static void
17073XMM_Fixup (int reg, int sizeflag ATTRIBUTE_UNUSED)
17074{
b9733481
L
17075 const char **names;
17076
c0f3af97
L
17077 if (need_vex)
17078 {
17079 switch (vex.length)
17080 {
17081 case 128:
b9733481 17082 names = names_xmm;
c0f3af97
L
17083 break;
17084 case 256:
b9733481 17085 names = names_ymm;
c0f3af97
L
17086 break;
17087 default:
17088 abort ();
17089 }
17090 }
17091 else
b9733481
L
17092 names = names_xmm;
17093 oappend (names[reg]);
42903f7f 17094}
381d071f
L
17095
17096static void
17097CRC32_Fixup (int bytemode, int sizeflag)
17098{
17099 /* Add proper suffix to "crc32". */
ea397f5b 17100 char *p = mnemonicendp;
381d071f
L
17101
17102 switch (bytemode)
17103 {
17104 case b_mode:
20592a94 17105 if (intel_syntax)
ea397f5b 17106 goto skip;
20592a94 17107
381d071f
L
17108 *p++ = 'b';
17109 break;
17110 case v_mode:
20592a94 17111 if (intel_syntax)
ea397f5b 17112 goto skip;
20592a94 17113
381d071f
L
17114 USED_REX (REX_W);
17115 if (rex & REX_W)
17116 *p++ = 'q';
7bb15c6f 17117 else
f16cd0d5
L
17118 {
17119 if (sizeflag & DFLAG)
17120 *p++ = 'l';
17121 else
17122 *p++ = 'w';
17123 used_prefixes |= (prefixes & PREFIX_DATA);
17124 }
381d071f
L
17125 break;
17126 default:
17127 oappend (INTERNAL_DISASSEMBLER_ERROR);
17128 break;
17129 }
ea397f5b 17130 mnemonicendp = p;
381d071f
L
17131 *p = '\0';
17132
ea397f5b 17133skip:
381d071f
L
17134 if (modrm.mod == 3)
17135 {
17136 int add;
17137
17138 /* Skip mod/rm byte. */
17139 MODRM_CHECK;
17140 codep++;
17141
17142 USED_REX (REX_B);
17143 add = (rex & REX_B) ? 8 : 0;
17144 if (bytemode == b_mode)
17145 {
17146 USED_REX (0);
17147 if (rex)
17148 oappend (names8rex[modrm.rm + add]);
17149 else
17150 oappend (names8[modrm.rm + add]);
17151 }
17152 else
17153 {
17154 USED_REX (REX_W);
17155 if (rex & REX_W)
17156 oappend (names64[modrm.rm + add]);
17157 else if ((prefixes & PREFIX_DATA))
17158 oappend (names16[modrm.rm + add]);
17159 else
17160 oappend (names32[modrm.rm + add]);
17161 }
17162 }
17163 else
9344ff29 17164 OP_E (bytemode, sizeflag);
381d071f 17165}
85f10a01 17166
eacc9c89
L
17167static void
17168FXSAVE_Fixup (int bytemode, int sizeflag)
17169{
17170 /* Add proper suffix to "fxsave" and "fxrstor". */
17171 USED_REX (REX_W);
17172 if (rex & REX_W)
17173 {
17174 char *p = mnemonicendp;
17175 *p++ = '6';
17176 *p++ = '4';
17177 *p = '\0';
17178 mnemonicendp = p;
17179 }
17180 OP_M (bytemode, sizeflag);
17181}
17182
c0f3af97
L
17183/* Display the destination register operand for instructions with
17184 VEX. */
17185
17186static void
17187OP_VEX (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
17188{
539f890d 17189 int reg;
b9733481
L
17190 const char **names;
17191
c0f3af97
L
17192 if (!need_vex)
17193 abort ();
17194
17195 if (!need_vex_reg)
17196 return;
17197
539f890d 17198 reg = vex.register_specifier;
43234a1e
L
17199 if (vex.evex)
17200 {
17201 if (!vex.v)
17202 reg += 16;
17203 }
17204
539f890d
L
17205 if (bytemode == vex_scalar_mode)
17206 {
17207 oappend (names_xmm[reg]);
17208 return;
17209 }
17210
c0f3af97
L
17211 switch (vex.length)
17212 {
17213 case 128:
17214 switch (bytemode)
17215 {
17216 case vex_mode:
17217 case vex128_mode:
6c30d220 17218 case vex_vsib_q_w_dq_mode:
5fc35d96 17219 case vex_vsib_q_w_d_mode:
cb21baef
L
17220 names = names_xmm;
17221 break;
17222 case dq_mode:
17223 if (vex.w)
17224 names = names64;
17225 else
17226 names = names32;
c0f3af97 17227 break;
1ba585e8 17228 case mask_bd_mode:
43234a1e 17229 case mask_mode:
9889cbb1
L
17230 if (reg > 0x7)
17231 {
17232 oappend ("(bad)");
17233 return;
17234 }
43234a1e
L
17235 names = names_mask;
17236 break;
c0f3af97
L
17237 default:
17238 abort ();
17239 return;
17240 }
c0f3af97
L
17241 break;
17242 case 256:
17243 switch (bytemode)
17244 {
17245 case vex_mode:
17246 case vex256_mode:
6c30d220
L
17247 names = names_ymm;
17248 break;
17249 case vex_vsib_q_w_dq_mode:
5fc35d96 17250 case vex_vsib_q_w_d_mode:
6c30d220 17251 names = vex.w ? names_ymm : names_xmm;
c0f3af97 17252 break;
1ba585e8 17253 case mask_bd_mode:
43234a1e 17254 case mask_mode:
9889cbb1
L
17255 if (reg > 0x7)
17256 {
17257 oappend ("(bad)");
17258 return;
17259 }
43234a1e
L
17260 names = names_mask;
17261 break;
c0f3af97
L
17262 default:
17263 abort ();
17264 return;
17265 }
c0f3af97 17266 break;
43234a1e
L
17267 case 512:
17268 names = names_zmm;
17269 break;
c0f3af97
L
17270 default:
17271 abort ();
17272 break;
17273 }
539f890d 17274 oappend (names[reg]);
c0f3af97
L
17275}
17276
922d8de8
DR
17277/* Get the VEX immediate byte without moving codep. */
17278
17279static unsigned char
ccc5981b 17280get_vex_imm8 (int sizeflag, int opnum)
922d8de8
DR
17281{
17282 int bytes_before_imm = 0;
17283
922d8de8
DR
17284 if (modrm.mod != 3)
17285 {
17286 /* There are SIB/displacement bytes. */
17287 if ((sizeflag & AFLAG) || address_mode == mode_64bit)
6c067bbb 17288 {
922d8de8 17289 /* 32/64 bit address mode */
6c067bbb 17290 int base = modrm.rm;
922d8de8
DR
17291
17292 /* Check SIB byte. */
6c067bbb
RM
17293 if (base == 4)
17294 {
17295 FETCH_DATA (the_info, codep + 1);
17296 base = *codep & 7;
17297 /* When decoding the third source, don't increase
17298 bytes_before_imm as this has already been incremented
17299 by one in OP_E_memory while decoding the second
17300 source operand. */
17301 if (opnum == 0)
17302 bytes_before_imm++;
17303 }
17304
17305 /* Don't increase bytes_before_imm when decoding the third source,
17306 it has already been incremented by OP_E_memory while decoding
17307 the second source operand. */
17308 if (opnum == 0)
17309 {
17310 switch (modrm.mod)
17311 {
17312 case 0:
17313 /* When modrm.rm == 5 or modrm.rm == 4 and base in
17314 SIB == 5, there is a 4 byte displacement. */
17315 if (base != 5)
17316 /* No displacement. */
17317 break;
1a0670f3 17318 /* Fall through. */
6c067bbb
RM
17319 case 2:
17320 /* 4 byte displacement. */
17321 bytes_before_imm += 4;
17322 break;
17323 case 1:
17324 /* 1 byte displacement. */
17325 bytes_before_imm++;
17326 break;
17327 }
17328 }
17329 }
922d8de8 17330 else
02e647f9
SP
17331 {
17332 /* 16 bit address mode */
6c067bbb
RM
17333 /* Don't increase bytes_before_imm when decoding the third source,
17334 it has already been incremented by OP_E_memory while decoding
17335 the second source operand. */
17336 if (opnum == 0)
17337 {
02e647f9
SP
17338 switch (modrm.mod)
17339 {
17340 case 0:
17341 /* When modrm.rm == 6, there is a 2 byte displacement. */
17342 if (modrm.rm != 6)
17343 /* No displacement. */
17344 break;
1a0670f3 17345 /* Fall through. */
02e647f9
SP
17346 case 2:
17347 /* 2 byte displacement. */
17348 bytes_before_imm += 2;
17349 break;
17350 case 1:
17351 /* 1 byte displacement: when decoding the third source,
17352 don't increase bytes_before_imm as this has already
17353 been incremented by one in OP_E_memory while decoding
17354 the second source operand. */
17355 if (opnum == 0)
17356 bytes_before_imm++;
ccc5981b 17357
02e647f9
SP
17358 break;
17359 }
922d8de8
DR
17360 }
17361 }
17362 }
17363
17364 FETCH_DATA (the_info, codep + bytes_before_imm + 1);
17365 return codep [bytes_before_imm];
17366}
17367
17368static void
17369OP_EX_VexReg (int bytemode, int sizeflag, int reg)
17370{
b9733481
L
17371 const char **names;
17372
922d8de8
DR
17373 if (reg == -1 && modrm.mod != 3)
17374 {
17375 OP_E_memory (bytemode, sizeflag);
17376 return;
17377 }
17378 else
17379 {
17380 if (reg == -1)
17381 {
17382 reg = modrm.rm;
17383 USED_REX (REX_B);
17384 if (rex & REX_B)
17385 reg += 8;
17386 }
17387 else if (reg > 7 && address_mode != mode_64bit)
17388 BadOp ();
17389 }
17390
17391 switch (vex.length)
17392 {
17393 case 128:
b9733481 17394 names = names_xmm;
922d8de8
DR
17395 break;
17396 case 256:
b9733481 17397 names = names_ymm;
922d8de8
DR
17398 break;
17399 default:
17400 abort ();
17401 }
b9733481 17402 oappend (names[reg]);
922d8de8
DR
17403}
17404
a683cc34
SP
17405static void
17406OP_EX_VexImmW (int bytemode, int sizeflag)
17407{
17408 int reg = -1;
17409 static unsigned char vex_imm8;
17410
17411 if (vex_w_done == 0)
17412 {
17413 vex_w_done = 1;
17414
17415 /* Skip mod/rm byte. */
17416 MODRM_CHECK;
17417 codep++;
17418
17419 vex_imm8 = get_vex_imm8 (sizeflag, 0);
17420
17421 if (vex.w)
17422 reg = vex_imm8 >> 4;
17423
17424 OP_EX_VexReg (bytemode, sizeflag, reg);
17425 }
17426 else if (vex_w_done == 1)
17427 {
17428 vex_w_done = 2;
17429
17430 if (!vex.w)
17431 reg = vex_imm8 >> 4;
17432
17433 OP_EX_VexReg (bytemode, sizeflag, reg);
17434 }
17435 else
17436 {
17437 /* Output the imm8 directly. */
17438 scratchbuf[0] = '$';
17439 print_operand_value (scratchbuf + 1, 1, vex_imm8 & 0xf);
9ce09ba2 17440 oappend_maybe_intel (scratchbuf);
a683cc34
SP
17441 scratchbuf[0] = '\0';
17442 codep++;
17443 }
17444}
17445
5dd85c99
SP
17446static void
17447OP_Vex_2src (int bytemode, int sizeflag)
17448{
17449 if (modrm.mod == 3)
17450 {
b9733481 17451 int reg = modrm.rm;
5dd85c99 17452 USED_REX (REX_B);
b9733481
L
17453 if (rex & REX_B)
17454 reg += 8;
17455 oappend (names_xmm[reg]);
5dd85c99
SP
17456 }
17457 else
17458 {
17459 if (intel_syntax
17460 && (bytemode == v_mode || bytemode == v_swap_mode))
17461 {
17462 bytemode = (prefixes & PREFIX_DATA) ? x_mode : q_mode;
17463 used_prefixes |= (prefixes & PREFIX_DATA);
17464 }
17465 OP_E (bytemode, sizeflag);
17466 }
17467}
17468
17469static void
17470OP_Vex_2src_1 (int bytemode, int sizeflag)
17471{
17472 if (modrm.mod == 3)
17473 {
17474 /* Skip mod/rm byte. */
17475 MODRM_CHECK;
17476 codep++;
17477 }
17478
17479 if (vex.w)
b9733481 17480 oappend (names_xmm[vex.register_specifier]);
5dd85c99
SP
17481 else
17482 OP_Vex_2src (bytemode, sizeflag);
17483}
17484
17485static void
17486OP_Vex_2src_2 (int bytemode, int sizeflag)
17487{
17488 if (vex.w)
17489 OP_Vex_2src (bytemode, sizeflag);
17490 else
b9733481 17491 oappend (names_xmm[vex.register_specifier]);
5dd85c99
SP
17492}
17493
922d8de8
DR
17494static void
17495OP_EX_VexW (int bytemode, int sizeflag)
17496{
17497 int reg = -1;
17498
17499 if (!vex_w_done)
17500 {
17501 vex_w_done = 1;
41effecb
SP
17502
17503 /* Skip mod/rm byte. */
17504 MODRM_CHECK;
17505 codep++;
17506
922d8de8 17507 if (vex.w)
ccc5981b 17508 reg = get_vex_imm8 (sizeflag, 0) >> 4;
922d8de8
DR
17509 }
17510 else
17511 {
17512 if (!vex.w)
ccc5981b 17513 reg = get_vex_imm8 (sizeflag, 1) >> 4;
922d8de8
DR
17514 }
17515
17516 OP_EX_VexReg (bytemode, sizeflag, reg);
17517}
17518
922d8de8
DR
17519static void
17520VEXI4_Fixup (int bytemode ATTRIBUTE_UNUSED,
17521 int sizeflag ATTRIBUTE_UNUSED)
17522{
17523 /* Skip the immediate byte and check for invalid bits. */
17524 FETCH_DATA (the_info, codep + 1);
17525 if (*codep++ & 0xf)
17526 BadOp ();
17527}
17528
c0f3af97
L
17529static void
17530OP_REG_VexI4 (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
17531{
17532 int reg;
b9733481
L
17533 const char **names;
17534
c0f3af97
L
17535 FETCH_DATA (the_info, codep + 1);
17536 reg = *codep++;
17537
17538 if (bytemode != x_mode)
17539 abort ();
17540
17541 if (reg & 0xf)
17542 BadOp ();
17543
17544 reg >>= 4;
dae39acc
L
17545 if (reg > 7 && address_mode != mode_64bit)
17546 BadOp ();
17547
c0f3af97
L
17548 switch (vex.length)
17549 {
17550 case 128:
b9733481 17551 names = names_xmm;
c0f3af97
L
17552 break;
17553 case 256:
b9733481 17554 names = names_ymm;
c0f3af97
L
17555 break;
17556 default:
17557 abort ();
17558 }
b9733481 17559 oappend (names[reg]);
c0f3af97
L
17560}
17561
922d8de8
DR
17562static void
17563OP_XMM_VexW (int bytemode, int sizeflag)
17564{
17565 /* Turn off the REX.W bit since it is used for swapping operands
17566 now. */
17567 rex &= ~REX_W;
17568 OP_XMM (bytemode, sizeflag);
17569}
17570
c0f3af97
L
17571static void
17572OP_EX_Vex (int bytemode, int sizeflag)
17573{
17574 if (modrm.mod != 3)
17575 {
17576 if (vex.register_specifier != 0)
17577 BadOp ();
17578 need_vex_reg = 0;
17579 }
17580 OP_EX (bytemode, sizeflag);
17581}
17582
17583static void
17584OP_XMM_Vex (int bytemode, int sizeflag)
17585{
17586 if (modrm.mod != 3)
17587 {
17588 if (vex.register_specifier != 0)
17589 BadOp ();
17590 need_vex_reg = 0;
17591 }
17592 OP_XMM (bytemode, sizeflag);
17593}
17594
17595static void
17596VZERO_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
17597{
17598 switch (vex.length)
17599 {
17600 case 128:
ea397f5b 17601 mnemonicendp = stpcpy (obuf, "vzeroupper");
c0f3af97
L
17602 break;
17603 case 256:
ea397f5b 17604 mnemonicendp = stpcpy (obuf, "vzeroall");
c0f3af97
L
17605 break;
17606 default:
17607 abort ();
17608 }
17609}
17610
ea397f5b
L
17611static struct op vex_cmp_op[] =
17612{
17613 { STRING_COMMA_LEN ("eq") },
17614 { STRING_COMMA_LEN ("lt") },
17615 { STRING_COMMA_LEN ("le") },
17616 { STRING_COMMA_LEN ("unord") },
17617 { STRING_COMMA_LEN ("neq") },
17618 { STRING_COMMA_LEN ("nlt") },
17619 { STRING_COMMA_LEN ("nle") },
17620 { STRING_COMMA_LEN ("ord") },
17621 { STRING_COMMA_LEN ("eq_uq") },
17622 { STRING_COMMA_LEN ("nge") },
17623 { STRING_COMMA_LEN ("ngt") },
17624 { STRING_COMMA_LEN ("false") },
17625 { STRING_COMMA_LEN ("neq_oq") },
17626 { STRING_COMMA_LEN ("ge") },
17627 { STRING_COMMA_LEN ("gt") },
17628 { STRING_COMMA_LEN ("true") },
17629 { STRING_COMMA_LEN ("eq_os") },
17630 { STRING_COMMA_LEN ("lt_oq") },
17631 { STRING_COMMA_LEN ("le_oq") },
17632 { STRING_COMMA_LEN ("unord_s") },
17633 { STRING_COMMA_LEN ("neq_us") },
17634 { STRING_COMMA_LEN ("nlt_uq") },
17635 { STRING_COMMA_LEN ("nle_uq") },
17636 { STRING_COMMA_LEN ("ord_s") },
17637 { STRING_COMMA_LEN ("eq_us") },
17638 { STRING_COMMA_LEN ("nge_uq") },
17639 { STRING_COMMA_LEN ("ngt_uq") },
17640 { STRING_COMMA_LEN ("false_os") },
17641 { STRING_COMMA_LEN ("neq_os") },
17642 { STRING_COMMA_LEN ("ge_oq") },
17643 { STRING_COMMA_LEN ("gt_oq") },
17644 { STRING_COMMA_LEN ("true_us") },
c0f3af97
L
17645};
17646
17647static void
17648VCMP_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
17649{
17650 unsigned int cmp_type;
17651
17652 FETCH_DATA (the_info, codep + 1);
17653 cmp_type = *codep++ & 0xff;
17654 if (cmp_type < ARRAY_SIZE (vex_cmp_op))
17655 {
17656 char suffix [3];
ea397f5b 17657 char *p = mnemonicendp - 2;
c0f3af97
L
17658 suffix[0] = p[0];
17659 suffix[1] = p[1];
17660 suffix[2] = '\0';
ea397f5b
L
17661 sprintf (p, "%s%s", vex_cmp_op[cmp_type].name, suffix);
17662 mnemonicendp += vex_cmp_op[cmp_type].len;
c0f3af97
L
17663 }
17664 else
17665 {
17666 /* We have a reserved extension byte. Output it directly. */
17667 scratchbuf[0] = '$';
17668 print_operand_value (scratchbuf + 1, 1, cmp_type);
9ce09ba2 17669 oappend_maybe_intel (scratchbuf);
c0f3af97
L
17670 scratchbuf[0] = '\0';
17671 }
17672}
17673
43234a1e
L
17674static void
17675VPCMP_Fixup (int bytemode ATTRIBUTE_UNUSED,
17676 int sizeflag ATTRIBUTE_UNUSED)
17677{
17678 unsigned int cmp_type;
17679
17680 if (!vex.evex)
17681 abort ();
17682
17683 FETCH_DATA (the_info, codep + 1);
17684 cmp_type = *codep++ & 0xff;
17685 /* There are aliases for immediates 0, 1, 2, 4, 5, 6.
17686 If it's the case, print suffix, otherwise - print the immediate. */
17687 if (cmp_type < ARRAY_SIZE (simd_cmp_op)
17688 && cmp_type != 3
17689 && cmp_type != 7)
17690 {
17691 char suffix [3];
17692 char *p = mnemonicendp - 2;
17693
17694 /* vpcmp* can have both one- and two-lettered suffix. */
17695 if (p[0] == 'p')
17696 {
17697 p++;
17698 suffix[0] = p[0];
17699 suffix[1] = '\0';
17700 }
17701 else
17702 {
17703 suffix[0] = p[0];
17704 suffix[1] = p[1];
17705 suffix[2] = '\0';
17706 }
17707
17708 sprintf (p, "%s%s", simd_cmp_op[cmp_type].name, suffix);
17709 mnemonicendp += simd_cmp_op[cmp_type].len;
17710 }
17711 else
17712 {
17713 /* We have a reserved extension byte. Output it directly. */
17714 scratchbuf[0] = '$';
17715 print_operand_value (scratchbuf + 1, 1, cmp_type);
9ce09ba2 17716 oappend_maybe_intel (scratchbuf);
43234a1e
L
17717 scratchbuf[0] = '\0';
17718 }
17719}
17720
ea397f5b
L
17721static const struct op pclmul_op[] =
17722{
17723 { STRING_COMMA_LEN ("lql") },
17724 { STRING_COMMA_LEN ("hql") },
17725 { STRING_COMMA_LEN ("lqh") },
17726 { STRING_COMMA_LEN ("hqh") }
c0f3af97
L
17727};
17728
17729static void
17730PCLMUL_Fixup (int bytemode ATTRIBUTE_UNUSED,
17731 int sizeflag ATTRIBUTE_UNUSED)
17732{
17733 unsigned int pclmul_type;
17734
17735 FETCH_DATA (the_info, codep + 1);
17736 pclmul_type = *codep++ & 0xff;
17737 switch (pclmul_type)
17738 {
17739 case 0x10:
17740 pclmul_type = 2;
17741 break;
17742 case 0x11:
17743 pclmul_type = 3;
17744 break;
17745 default:
17746 break;
7bb15c6f 17747 }
c0f3af97
L
17748 if (pclmul_type < ARRAY_SIZE (pclmul_op))
17749 {
17750 char suffix [4];
ea397f5b 17751 char *p = mnemonicendp - 3;
c0f3af97
L
17752 suffix[0] = p[0];
17753 suffix[1] = p[1];
17754 suffix[2] = p[2];
17755 suffix[3] = '\0';
ea397f5b
L
17756 sprintf (p, "%s%s", pclmul_op[pclmul_type].name, suffix);
17757 mnemonicendp += pclmul_op[pclmul_type].len;
c0f3af97
L
17758 }
17759 else
17760 {
17761 /* We have a reserved extension byte. Output it directly. */
17762 scratchbuf[0] = '$';
17763 print_operand_value (scratchbuf + 1, 1, pclmul_type);
9ce09ba2 17764 oappend_maybe_intel (scratchbuf);
c0f3af97
L
17765 scratchbuf[0] = '\0';
17766 }
17767}
17768
f1f8f695
L
17769static void
17770MOVBE_Fixup (int bytemode, int sizeflag)
17771{
17772 /* Add proper suffix to "movbe". */
ea397f5b 17773 char *p = mnemonicendp;
f1f8f695
L
17774
17775 switch (bytemode)
17776 {
17777 case v_mode:
17778 if (intel_syntax)
ea397f5b 17779 goto skip;
f1f8f695
L
17780
17781 USED_REX (REX_W);
17782 if (sizeflag & SUFFIX_ALWAYS)
17783 {
17784 if (rex & REX_W)
17785 *p++ = 'q';
f1f8f695 17786 else
f16cd0d5
L
17787 {
17788 if (sizeflag & DFLAG)
17789 *p++ = 'l';
17790 else
17791 *p++ = 'w';
17792 used_prefixes |= (prefixes & PREFIX_DATA);
17793 }
f1f8f695 17794 }
f1f8f695
L
17795 break;
17796 default:
17797 oappend (INTERNAL_DISASSEMBLER_ERROR);
17798 break;
17799 }
ea397f5b 17800 mnemonicendp = p;
f1f8f695
L
17801 *p = '\0';
17802
ea397f5b 17803skip:
f1f8f695
L
17804 OP_M (bytemode, sizeflag);
17805}
f88c9eb0
SP
17806
17807static void
17808OP_LWPCB_E (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
17809{
17810 int reg;
17811 const char **names;
17812
17813 /* Skip mod/rm byte. */
17814 MODRM_CHECK;
17815 codep++;
17816
17817 if (vex.w)
17818 names = names64;
f88c9eb0 17819 else
ce7d077e 17820 names = names32;
f88c9eb0
SP
17821
17822 reg = modrm.rm;
17823 USED_REX (REX_B);
17824 if (rex & REX_B)
17825 reg += 8;
17826
17827 oappend (names[reg]);
17828}
17829
17830static void
17831OP_LWP_E (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
17832{
17833 const char **names;
17834
17835 if (vex.w)
17836 names = names64;
f88c9eb0 17837 else
ce7d077e 17838 names = names32;
f88c9eb0
SP
17839
17840 oappend (names[vex.register_specifier]);
17841}
43234a1e
L
17842
17843static void
17844OP_Mask (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
17845{
17846 if (!vex.evex
1ba585e8 17847 || (bytemode != mask_mode && bytemode != mask_bd_mode))
43234a1e
L
17848 abort ();
17849
17850 USED_REX (REX_R);
17851 if ((rex & REX_R) != 0 || !vex.r)
17852 {
17853 BadOp ();
17854 return;
17855 }
17856
17857 oappend (names_mask [modrm.reg]);
17858}
17859
17860static void
17861OP_Rounding (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
17862{
17863 if (!vex.evex
17864 || (bytemode != evex_rounding_mode
17865 && bytemode != evex_sae_mode))
17866 abort ();
17867 if (modrm.mod == 3 && vex.b)
17868 switch (bytemode)
17869 {
17870 case evex_rounding_mode:
17871 oappend (names_rounding[vex.ll]);
17872 break;
17873 case evex_sae_mode:
17874 oappend ("{sae}");
17875 break;
17876 default:
17877 break;
17878 }
17879}
This page took 2.085228 seconds and 4 git commands to generate.