i386: Reformat OP_E_memory
[deliverable/binutils-gdb.git] / opcodes / i386-dis.c
CommitLineData
252b5132 1/* Print i386 instructions for GDB, the GNU debugger.
219d1afa 2 Copyright (C) 1988-2018 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"
88c1242d 36#include "disassemble.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);
c0f3af97
L
98static void VZERO_Fixup (int, int);
99static void VCMP_Fixup (int, int);
43234a1e 100static void VPCMP_Fixup (int, int);
be92cb14 101static void VPCOM_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);
04ef582a 113static void NOTRACK_Fixup (int, int);
42164a71
L
114static void HLE_Fixup1 (int, int);
115static void HLE_Fixup2 (int, int);
116static void HLE_Fixup3 (int, int);
f5804c90 117static void CMPXCHG8B_Fixup (int, int);
42903f7f 118static void XMM_Fixup (int, int);
381d071f 119static void CRC32_Fixup (int, int);
eacc9c89 120static void FXSAVE_Fixup (int, int);
15c7c1d8 121static void PCMPESTR_Fixup (int, int);
f88c9eb0
SP
122static void OP_LWPCB_E (int, int);
123static void OP_LWP_E (int, int);
5dd85c99
SP
124static void OP_Vex_2src_1 (int, int);
125static void OP_Vex_2src_2 (int, int);
c1e679ec 126
f1f8f695 127static void MOVBE_Fixup (int, int);
252b5132 128
43234a1e
L
129static void OP_Mask (int, int);
130
6608db57 131struct dis_private {
252b5132
RH
132 /* Points to first byte not fetched. */
133 bfd_byte *max_fetched;
0b1cf022 134 bfd_byte the_buffer[MAX_MNEM_SIZE];
252b5132 135 bfd_vma insn_start;
e396998b 136 int orig_sizeflag;
8df14d78 137 OPCODES_SIGJMP_BUF bailout;
252b5132
RH
138};
139
cb712a9e
L
140enum address_mode
141{
142 mode_16bit,
143 mode_32bit,
144 mode_64bit
145};
146
147enum address_mode address_mode;
52b15da3 148
5076851f
ILT
149/* Flags for the prefixes for the current instruction. See below. */
150static int prefixes;
151
52b15da3
JH
152/* REX prefix the current instruction. See below. */
153static int rex;
154/* Bits of REX we've already used. */
155static int rex_used;
d869730d 156/* REX bits in original REX prefix ignored. */
c0f3af97 157static int rex_ignored;
52b15da3
JH
158/* Mark parts used in the REX prefix. When we are testing for
159 empty prefix (for 8bit register REX extension), just mask it
160 out. Otherwise test for REX bit is excuse for existence of REX
161 only in case value is nonzero. */
162#define USED_REX(value) \
163 { \
164 if (value) \
161a04f6
L
165 { \
166 if ((rex & value)) \
167 rex_used |= (value) | REX_OPCODE; \
168 } \
52b15da3 169 else \
161a04f6 170 rex_used |= REX_OPCODE; \
52b15da3
JH
171 }
172
7d421014
ILT
173/* Flags for prefixes which we somehow handled when printing the
174 current instruction. */
175static int used_prefixes;
176
5076851f
ILT
177/* Flags stored in PREFIXES. */
178#define PREFIX_REPZ 1
179#define PREFIX_REPNZ 2
180#define PREFIX_LOCK 4
181#define PREFIX_CS 8
182#define PREFIX_SS 0x10
183#define PREFIX_DS 0x20
184#define PREFIX_ES 0x40
185#define PREFIX_FS 0x80
186#define PREFIX_GS 0x100
187#define PREFIX_DATA 0x200
188#define PREFIX_ADDR 0x400
189#define PREFIX_FWAIT 0x800
190
252b5132
RH
191/* Make sure that bytes from INFO->PRIVATE_DATA->BUFFER (inclusive)
192 to ADDR (exclusive) are valid. Returns 1 for success, longjmps
193 on error. */
194#define FETCH_DATA(info, addr) \
6608db57 195 ((addr) <= ((struct dis_private *) (info->private_data))->max_fetched \
252b5132
RH
196 ? 1 : fetch_data ((info), (addr)))
197
198static int
26ca5450 199fetch_data (struct disassemble_info *info, bfd_byte *addr)
252b5132
RH
200{
201 int status;
6608db57 202 struct dis_private *priv = (struct dis_private *) info->private_data;
252b5132
RH
203 bfd_vma start = priv->insn_start + (priv->max_fetched - priv->the_buffer);
204
0b1cf022 205 if (addr <= priv->the_buffer + MAX_MNEM_SIZE)
272c9217
JB
206 status = (*info->read_memory_func) (start,
207 priv->max_fetched,
208 addr - priv->max_fetched,
209 info);
210 else
211 status = -1;
252b5132
RH
212 if (status != 0)
213 {
7d421014 214 /* If we did manage to read at least one byte, then
db6eb5be
AM
215 print_insn_i386 will do something sensible. Otherwise, print
216 an error. We do that here because this is where we know
217 STATUS. */
7d421014 218 if (priv->max_fetched == priv->the_buffer)
5076851f 219 (*info->memory_error_func) (status, start, info);
8df14d78 220 OPCODES_SIGLONGJMP (priv->bailout, 1);
252b5132
RH
221 }
222 else
223 priv->max_fetched = addr;
224 return 1;
225}
226
bf890a93 227/* Possible values for prefix requirement. */
507bd325
L
228#define PREFIX_IGNORED_SHIFT 16
229#define PREFIX_IGNORED_REPZ (PREFIX_REPZ << PREFIX_IGNORED_SHIFT)
230#define PREFIX_IGNORED_REPNZ (PREFIX_REPNZ << PREFIX_IGNORED_SHIFT)
231#define PREFIX_IGNORED_DATA (PREFIX_DATA << PREFIX_IGNORED_SHIFT)
232#define PREFIX_IGNORED_ADDR (PREFIX_ADDR << PREFIX_IGNORED_SHIFT)
233#define PREFIX_IGNORED_LOCK (PREFIX_LOCK << PREFIX_IGNORED_SHIFT)
234
235/* Opcode prefixes. */
236#define PREFIX_OPCODE (PREFIX_REPZ \
237 | PREFIX_REPNZ \
238 | PREFIX_DATA)
239
240/* Prefixes ignored. */
241#define PREFIX_IGNORED (PREFIX_IGNORED_REPZ \
242 | PREFIX_IGNORED_REPNZ \
243 | PREFIX_IGNORED_DATA)
bf890a93 244
ce518a5f 245#define XX { NULL, 0 }
507bd325 246#define Bad_Opcode NULL, { { NULL, 0 } }, 0
ce518a5f
L
247
248#define Eb { OP_E, b_mode }
7e8b059b 249#define Ebnd { OP_E, bnd_mode }
b6169b20 250#define EbS { OP_E, b_swap_mode }
9f79e886 251#define EbndS { OP_E, bnd_swap_mode }
ce518a5f 252#define Ev { OP_E, v_mode }
de89d0a3 253#define Eva { OP_E, va_mode }
7e8b059b 254#define Ev_bnd { OP_E, v_bnd_mode }
b6169b20 255#define EvS { OP_E, v_swap_mode }
ce518a5f
L
256#define Ed { OP_E, d_mode }
257#define Edq { OP_E, dq_mode }
258#define Edqw { OP_E, dqw_mode }
42903f7f 259#define Edqb { OP_E, dqb_mode }
1ba585e8
IT
260#define Edb { OP_E, db_mode }
261#define Edw { OP_E, dw_mode }
42903f7f 262#define Edqd { OP_E, dqd_mode }
09335d05 263#define Eq { OP_E, q_mode }
07f5af7d 264#define indirEv { OP_indirE, indir_v_mode }
ce518a5f
L
265#define indirEp { OP_indirE, f_mode }
266#define stackEv { OP_E, stack_v_mode }
267#define Em { OP_E, m_mode }
268#define Ew { OP_E, w_mode }
269#define M { OP_M, 0 } /* lea, lgdt, etc. */
34b772a6 270#define Ma { OP_M, a_mode }
b844680a 271#define Mb { OP_M, b_mode }
d9a5e5e5 272#define Md { OP_M, d_mode }
f1f8f695 273#define Mo { OP_M, o_mode }
ce518a5f
L
274#define Mp { OP_M, f_mode } /* 32 or 48 bit memory operand for LDS, LES etc */
275#define Mq { OP_M, q_mode }
d276ec69 276#define Mv_bnd { OP_M, v_bndmk_mode }
4ee52178 277#define Mx { OP_M, x_mode }
c0f3af97 278#define Mxmm { OP_M, xmm_mode }
ce518a5f 279#define Gb { OP_G, b_mode }
7e8b059b 280#define Gbnd { OP_G, bnd_mode }
ce518a5f
L
281#define Gv { OP_G, v_mode }
282#define Gd { OP_G, d_mode }
283#define Gdq { OP_G, dq_mode }
284#define Gm { OP_G, m_mode }
c0a30a9f 285#define Gva { OP_G, va_mode }
ce518a5f 286#define Gw { OP_G, w_mode }
6f74c397 287#define Rd { OP_R, d_mode }
43234a1e 288#define Rdq { OP_R, dq_mode }
6f74c397 289#define Rm { OP_R, m_mode }
ce518a5f
L
290#define Ib { OP_I, b_mode }
291#define sIb { OP_sI, b_mode } /* sign extened byte */
e3949f17 292#define sIbT { OP_sI, b_T_mode } /* sign extened byte like 'T' */
ce518a5f 293#define Iv { OP_I, v_mode }
7bb15c6f 294#define sIv { OP_sI, v_mode }
ce518a5f
L
295#define Iq { OP_I, q_mode }
296#define Iv64 { OP_I64, v_mode }
297#define Iw { OP_I, w_mode }
298#define I1 { OP_I, const_1_mode }
299#define Jb { OP_J, b_mode }
300#define Jv { OP_J, v_mode }
301#define Cm { OP_C, m_mode }
302#define Dm { OP_D, m_mode }
303#define Td { OP_T, d_mode }
b844680a 304#define Skip_MODRM { OP_Skip_MODRM, 0 }
ce518a5f
L
305
306#define RMeAX { OP_REG, eAX_reg }
307#define RMeBX { OP_REG, eBX_reg }
308#define RMeCX { OP_REG, eCX_reg }
309#define RMeDX { OP_REG, eDX_reg }
310#define RMeSP { OP_REG, eSP_reg }
311#define RMeBP { OP_REG, eBP_reg }
312#define RMeSI { OP_REG, eSI_reg }
313#define RMeDI { OP_REG, eDI_reg }
314#define RMrAX { OP_REG, rAX_reg }
315#define RMrBX { OP_REG, rBX_reg }
316#define RMrCX { OP_REG, rCX_reg }
317#define RMrDX { OP_REG, rDX_reg }
318#define RMrSP { OP_REG, rSP_reg }
319#define RMrBP { OP_REG, rBP_reg }
320#define RMrSI { OP_REG, rSI_reg }
321#define RMrDI { OP_REG, rDI_reg }
322#define RMAL { OP_REG, al_reg }
ce518a5f
L
323#define RMCL { OP_REG, cl_reg }
324#define RMDL { OP_REG, dl_reg }
325#define RMBL { OP_REG, bl_reg }
326#define RMAH { OP_REG, ah_reg }
327#define RMCH { OP_REG, ch_reg }
328#define RMDH { OP_REG, dh_reg }
329#define RMBH { OP_REG, bh_reg }
330#define RMAX { OP_REG, ax_reg }
331#define RMDX { OP_REG, dx_reg }
332
333#define eAX { OP_IMREG, eAX_reg }
334#define eBX { OP_IMREG, eBX_reg }
335#define eCX { OP_IMREG, eCX_reg }
336#define eDX { OP_IMREG, eDX_reg }
337#define eSP { OP_IMREG, eSP_reg }
338#define eBP { OP_IMREG, eBP_reg }
339#define eSI { OP_IMREG, eSI_reg }
340#define eDI { OP_IMREG, eDI_reg }
341#define AL { OP_IMREG, al_reg }
342#define CL { OP_IMREG, cl_reg }
343#define DL { OP_IMREG, dl_reg }
344#define BL { OP_IMREG, bl_reg }
345#define AH { OP_IMREG, ah_reg }
346#define CH { OP_IMREG, ch_reg }
347#define DH { OP_IMREG, dh_reg }
348#define BH { OP_IMREG, bh_reg }
349#define AX { OP_IMREG, ax_reg }
350#define DX { OP_IMREG, dx_reg }
351#define zAX { OP_IMREG, z_mode_ax_reg }
352#define indirDX { OP_IMREG, indir_dx_reg }
353
354#define Sw { OP_SEG, w_mode }
355#define Sv { OP_SEG, v_mode }
356#define Ap { OP_DIR, 0 }
357#define Ob { OP_OFF64, b_mode }
358#define Ov { OP_OFF64, v_mode }
359#define Xb { OP_DSreg, eSI_reg }
360#define Xv { OP_DSreg, eSI_reg }
361#define Xz { OP_DSreg, eSI_reg }
362#define Yb { OP_ESreg, eDI_reg }
363#define Yv { OP_ESreg, eDI_reg }
364#define DSBX { OP_DSreg, eBX_reg }
365
366#define es { OP_REG, es_reg }
367#define ss { OP_REG, ss_reg }
368#define cs { OP_REG, cs_reg }
369#define ds { OP_REG, ds_reg }
370#define fs { OP_REG, fs_reg }
371#define gs { OP_REG, gs_reg }
372
373#define MX { OP_MMX, 0 }
374#define XM { OP_XMM, 0 }
539f890d 375#define XMScalar { OP_XMM, scalar_mode }
6c30d220 376#define XMGatherQ { OP_XMM, vex_vsib_q_w_dq_mode }
c0f3af97 377#define XMM { OP_XMM, xmm_mode }
43234a1e 378#define XMxmmq { OP_XMM, xmmq_mode }
ce518a5f 379#define EM { OP_EM, v_mode }
b6169b20 380#define EMS { OP_EM, v_swap_mode }
09a2c6cf 381#define EMd { OP_EM, d_mode }
14051056 382#define EMx { OP_EM, x_mode }
53467f57 383#define EXbScalar { OP_EX, b_scalar_mode }
8976381e 384#define EXw { OP_EX, w_mode }
53467f57 385#define EXwScalar { OP_EX, w_scalar_mode }
09a2c6cf 386#define EXd { OP_EX, d_mode }
539f890d 387#define EXdScalar { OP_EX, d_scalar_mode }
fa99fab2 388#define EXdS { OP_EX, d_swap_mode }
43234a1e 389#define EXdScalarS { OP_EX, d_scalar_swap_mode }
09a2c6cf 390#define EXq { OP_EX, q_mode }
539f890d
L
391#define EXqScalar { OP_EX, q_scalar_mode }
392#define EXqScalarS { OP_EX, q_scalar_swap_mode }
b6169b20 393#define EXqS { OP_EX, q_swap_mode }
09a2c6cf 394#define EXx { OP_EX, x_mode }
b6169b20 395#define EXxS { OP_EX, x_swap_mode }
c0f3af97 396#define EXxmm { OP_EX, xmm_mode }
43234a1e 397#define EXymm { OP_EX, ymm_mode }
c0f3af97 398#define EXxmmq { OP_EX, xmmq_mode }
43234a1e 399#define EXEvexHalfBcstXmmq { OP_EX, evex_half_bcst_xmmq_mode }
6c30d220
L
400#define EXxmm_mb { OP_EX, xmm_mb_mode }
401#define EXxmm_mw { OP_EX, xmm_mw_mode }
402#define EXxmm_md { OP_EX, xmm_md_mode }
403#define EXxmm_mq { OP_EX, xmm_mq_mode }
43234a1e 404#define EXxmm_mdq { OP_EX, xmm_mdq_mode }
6c30d220
L
405#define EXxmmdw { OP_EX, xmmdw_mode }
406#define EXxmmqd { OP_EX, xmmqd_mode }
c0f3af97 407#define EXymmq { OP_EX, ymmq_mode }
0bfee649 408#define EXVexWdq { OP_EX, vex_w_dq_mode }
1c480963 409#define EXVexWdqScalar { OP_EX, vex_scalar_w_dq_mode }
43234a1e
L
410#define EXEvexXGscat { OP_EX, evex_x_gscat_mode }
411#define EXEvexXNoBcst { OP_EX, evex_x_nobcst_mode }
ce518a5f
L
412#define MS { OP_MS, v_mode }
413#define XS { OP_XS, v_mode }
09335d05 414#define EMCq { OP_EMC, q_mode }
ce518a5f 415#define MXC { OP_MXC, 0 }
ce518a5f 416#define OPSUF { OP_3DNowSuffix, 0 }
ad19981d 417#define CMP { CMP_Fixup, 0 }
42903f7f 418#define XMM0 { XMM_Fixup, 0 }
eacc9c89 419#define FXSAVE { FXSAVE_Fixup, 0 }
5dd85c99
SP
420#define Vex_2src_1 { OP_Vex_2src_1, 0 }
421#define Vex_2src_2 { OP_Vex_2src_2, 0 }
252b5132 422
c0f3af97 423#define Vex { OP_VEX, vex_mode }
539f890d 424#define VexScalar { OP_VEX, vex_scalar_mode }
6c30d220 425#define VexGatherQ { OP_VEX, vex_vsib_q_w_dq_mode }
c0f3af97
L
426#define Vex128 { OP_VEX, vex128_mode }
427#define Vex256 { OP_VEX, vex256_mode }
cb21baef 428#define VexGdq { OP_VEX, dq_mode }
c0f3af97 429#define EXdVex { OP_EX_Vex, d_mode }
fa99fab2 430#define EXdVexS { OP_EX_Vex, d_swap_mode }
539f890d 431#define EXdVexScalarS { OP_EX_Vex, d_scalar_swap_mode }
c0f3af97 432#define EXqVex { OP_EX_Vex, q_mode }
fa99fab2 433#define EXqVexS { OP_EX_Vex, q_swap_mode }
539f890d 434#define EXqVexScalarS { OP_EX_Vex, q_scalar_swap_mode }
922d8de8
DR
435#define EXVexW { OP_EX_VexW, x_mode }
436#define EXdVexW { OP_EX_VexW, d_mode }
437#define EXqVexW { OP_EX_VexW, q_mode }
a683cc34 438#define EXVexImmW { OP_EX_VexImmW, x_mode }
c0f3af97 439#define XMVex { OP_XMM_Vex, 0 }
539f890d 440#define XMVexScalar { OP_XMM_Vex, scalar_mode }
922d8de8 441#define XMVexW { OP_XMM_VexW, 0 }
c0f3af97
L
442#define XMVexI4 { OP_REG_VexI4, x_mode }
443#define PCLMUL { PCLMUL_Fixup, 0 }
444#define VZERO { VZERO_Fixup, 0 }
445#define VCMP { VCMP_Fixup, 0 }
43234a1e 446#define VPCMP { VPCMP_Fixup, 0 }
be92cb14 447#define VPCOM { VPCOM_Fixup, 0 }
43234a1e
L
448
449#define EXxEVexR { OP_Rounding, evex_rounding_mode }
450#define EXxEVexS { OP_Rounding, evex_sae_mode }
451
452#define XMask { OP_Mask, mask_mode }
453#define MaskG { OP_G, mask_mode }
454#define MaskE { OP_E, mask_mode }
1ba585e8 455#define MaskBDE { OP_E, mask_bd_mode }
43234a1e
L
456#define MaskR { OP_R, mask_mode }
457#define MaskVex { OP_VEX, mask_mode }
c0f3af97 458
6c30d220 459#define MVexVSIBDWpX { OP_M, vex_vsib_d_w_dq_mode }
5fc35d96 460#define MVexVSIBDQWpX { OP_M, vex_vsib_d_w_d_mode }
6c30d220 461#define MVexVSIBQWpX { OP_M, vex_vsib_q_w_dq_mode }
5fc35d96 462#define MVexVSIBQDWpX { OP_M, vex_vsib_q_w_d_mode }
6c30d220 463
35c52694 464/* Used handle "rep" prefix for string instructions. */
ce518a5f
L
465#define Xbr { REP_Fixup, eSI_reg }
466#define Xvr { REP_Fixup, eSI_reg }
467#define Ybr { REP_Fixup, eDI_reg }
468#define Yvr { REP_Fixup, eDI_reg }
469#define Yzr { REP_Fixup, eDI_reg }
470#define indirDXr { REP_Fixup, indir_dx_reg }
471#define ALr { REP_Fixup, al_reg }
472#define eAXr { REP_Fixup, eAX_reg }
473
42164a71
L
474/* Used handle HLE prefix for lockable instructions. */
475#define Ebh1 { HLE_Fixup1, b_mode }
476#define Evh1 { HLE_Fixup1, v_mode }
477#define Ebh2 { HLE_Fixup2, b_mode }
478#define Evh2 { HLE_Fixup2, v_mode }
479#define Ebh3 { HLE_Fixup3, b_mode }
480#define Evh3 { HLE_Fixup3, v_mode }
481
7e8b059b 482#define BND { BND_Fixup, 0 }
04ef582a 483#define NOTRACK { NOTRACK_Fixup, 0 }
7e8b059b 484
ce518a5f
L
485#define cond_jump_flag { NULL, cond_jump_mode }
486#define loop_jcxz_flag { NULL, loop_jcxz_mode }
3ffd33cf 487
252b5132 488/* bits in sizeflag */
252b5132 489#define SUFFIX_ALWAYS 4
252b5132
RH
490#define AFLAG 2
491#define DFLAG 1
492
51e7da1b
L
493enum
494{
495 /* byte operand */
496 b_mode = 1,
497 /* byte operand with operand swapped */
3873ba12 498 b_swap_mode,
e3949f17
L
499 /* byte operand, sign extend like 'T' suffix */
500 b_T_mode,
51e7da1b 501 /* operand size depends on prefixes */
3873ba12 502 v_mode,
51e7da1b 503 /* operand size depends on prefixes with operand swapped */
3873ba12 504 v_swap_mode,
de89d0a3
IT
505 /* operand size depends on address prefix */
506 va_mode,
51e7da1b 507 /* word operand */
3873ba12 508 w_mode,
51e7da1b 509 /* double word operand */
3873ba12 510 d_mode,
51e7da1b 511 /* double word operand with operand swapped */
3873ba12 512 d_swap_mode,
51e7da1b 513 /* quad word operand */
3873ba12 514 q_mode,
51e7da1b 515 /* quad word operand with operand swapped */
3873ba12 516 q_swap_mode,
51e7da1b 517 /* ten-byte operand */
3873ba12 518 t_mode,
43234a1e
L
519 /* 16-byte XMM, 32-byte YMM or 64-byte ZMM operand. In EVEX with
520 broadcast enabled. */
3873ba12 521 x_mode,
43234a1e
L
522 /* Similar to x_mode, but with different EVEX mem shifts. */
523 evex_x_gscat_mode,
524 /* Similar to x_mode, but with disabled broadcast. */
525 evex_x_nobcst_mode,
526 /* Similar to x_mode, but with operands swapped and disabled broadcast
527 in EVEX. */
3873ba12 528 x_swap_mode,
51e7da1b 529 /* 16-byte XMM operand */
3873ba12 530 xmm_mode,
43234a1e
L
531 /* XMM, XMM or YMM register operand, or quad word, xmmword or ymmword
532 memory operand (depending on vector length). Broadcast isn't
533 allowed. */
3873ba12 534 xmmq_mode,
43234a1e
L
535 /* Same as xmmq_mode, but broadcast is allowed. */
536 evex_half_bcst_xmmq_mode,
6c30d220
L
537 /* XMM register or byte memory operand */
538 xmm_mb_mode,
539 /* XMM register or word memory operand */
540 xmm_mw_mode,
541 /* XMM register or double word memory operand */
542 xmm_md_mode,
543 /* XMM register or quad word memory operand */
544 xmm_mq_mode,
43234a1e
L
545 /* XMM register or double/quad word memory operand, depending on
546 VEX.W. */
547 xmm_mdq_mode,
548 /* 16-byte XMM, word, double word or quad word operand. */
6c30d220 549 xmmdw_mode,
43234a1e 550 /* 16-byte XMM, double word, quad word operand or xmm word operand. */
6c30d220 551 xmmqd_mode,
43234a1e
L
552 /* 32-byte YMM operand */
553 ymm_mode,
554 /* quad word, ymmword or zmmword memory operand. */
3873ba12 555 ymmq_mode,
6c30d220
L
556 /* 32-byte YMM or 16-byte word operand */
557 ymmxmm_mode,
51e7da1b 558 /* d_mode in 32bit, q_mode in 64bit mode. */
3873ba12 559 m_mode,
51e7da1b 560 /* pair of v_mode operands */
3873ba12
L
561 a_mode,
562 cond_jump_mode,
563 loop_jcxz_mode,
7e8b059b 564 v_bnd_mode,
d276ec69
JB
565 /* like v_bnd_mode in 32bit, no RIP-rel in 64bit mode. */
566 v_bndmk_mode,
51e7da1b 567 /* operand size depends on REX prefixes. */
3873ba12 568 dq_mode,
51e7da1b 569 /* registers like dq_mode, memory like w_mode. */
3873ba12 570 dqw_mode,
9f79e886 571 /* bounds operand */
7e8b059b 572 bnd_mode,
9f79e886
JB
573 /* bounds operand with operand swapped */
574 bnd_swap_mode,
51e7da1b 575 /* 4- or 6-byte pointer operand */
3873ba12
L
576 f_mode,
577 const_1_mode,
07f5af7d
L
578 /* v_mode for indirect branch opcodes. */
579 indir_v_mode,
51e7da1b 580 /* v_mode for stack-related opcodes. */
3873ba12 581 stack_v_mode,
51e7da1b 582 /* non-quad operand size depends on prefixes */
3873ba12 583 z_mode,
51e7da1b 584 /* 16-byte operand */
3873ba12 585 o_mode,
51e7da1b 586 /* registers like dq_mode, memory like b_mode. */
3873ba12 587 dqb_mode,
1ba585e8
IT
588 /* registers like d_mode, memory like b_mode. */
589 db_mode,
590 /* registers like d_mode, memory like w_mode. */
591 dw_mode,
51e7da1b 592 /* registers like dq_mode, memory like d_mode. */
3873ba12 593 dqd_mode,
51e7da1b 594 /* normal vex mode */
3873ba12 595 vex_mode,
51e7da1b 596 /* 128bit vex mode */
3873ba12 597 vex128_mode,
51e7da1b 598 /* 256bit vex mode */
3873ba12 599 vex256_mode,
51e7da1b 600 /* operand size depends on the VEX.W bit. */
3873ba12 601 vex_w_dq_mode,
d55ee72f 602
6c30d220
L
603 /* Similar to vex_w_dq_mode, with VSIB dword indices. */
604 vex_vsib_d_w_dq_mode,
5fc35d96
IT
605 /* Similar to vex_vsib_d_w_dq_mode, with smaller memory. */
606 vex_vsib_d_w_d_mode,
6c30d220
L
607 /* Similar to vex_w_dq_mode, with VSIB qword indices. */
608 vex_vsib_q_w_dq_mode,
5fc35d96
IT
609 /* Similar to vex_vsib_q_w_dq_mode, with smaller memory. */
610 vex_vsib_q_w_d_mode,
6c30d220 611
539f890d
L
612 /* scalar, ignore vector length. */
613 scalar_mode,
53467f57
IT
614 /* like b_mode, ignore vector length. */
615 b_scalar_mode,
616 /* like w_mode, ignore vector length. */
617 w_scalar_mode,
539f890d
L
618 /* like d_mode, ignore vector length. */
619 d_scalar_mode,
620 /* like d_swap_mode, ignore vector length. */
621 d_scalar_swap_mode,
622 /* like q_mode, ignore vector length. */
623 q_scalar_mode,
624 /* like q_swap_mode, ignore vector length. */
625 q_scalar_swap_mode,
626 /* like vex_mode, ignore vector length. */
627 vex_scalar_mode,
1c480963
L
628 /* like vex_w_dq_mode, ignore vector length. */
629 vex_scalar_w_dq_mode,
539f890d 630
43234a1e
L
631 /* Static rounding. */
632 evex_rounding_mode,
633 /* Supress all exceptions. */
634 evex_sae_mode,
635
636 /* Mask register operand. */
637 mask_mode,
1ba585e8
IT
638 /* Mask register operand. */
639 mask_bd_mode,
43234a1e 640
3873ba12
L
641 es_reg,
642 cs_reg,
643 ss_reg,
644 ds_reg,
645 fs_reg,
646 gs_reg,
d55ee72f 647
3873ba12
L
648 eAX_reg,
649 eCX_reg,
650 eDX_reg,
651 eBX_reg,
652 eSP_reg,
653 eBP_reg,
654 eSI_reg,
655 eDI_reg,
d55ee72f 656
3873ba12
L
657 al_reg,
658 cl_reg,
659 dl_reg,
660 bl_reg,
661 ah_reg,
662 ch_reg,
663 dh_reg,
664 bh_reg,
d55ee72f 665
3873ba12
L
666 ax_reg,
667 cx_reg,
668 dx_reg,
669 bx_reg,
670 sp_reg,
671 bp_reg,
672 si_reg,
673 di_reg,
d55ee72f 674
3873ba12
L
675 rAX_reg,
676 rCX_reg,
677 rDX_reg,
678 rBX_reg,
679 rSP_reg,
680 rBP_reg,
681 rSI_reg,
682 rDI_reg,
d55ee72f 683
3873ba12
L
684 z_mode_ax_reg,
685 indir_dx_reg
51e7da1b 686};
252b5132 687
51e7da1b
L
688enum
689{
690 FLOATCODE = 1,
3873ba12
L
691 USE_REG_TABLE,
692 USE_MOD_TABLE,
693 USE_RM_TABLE,
694 USE_PREFIX_TABLE,
695 USE_X86_64_TABLE,
696 USE_3BYTE_TABLE,
f88c9eb0 697 USE_XOP_8F_TABLE,
3873ba12
L
698 USE_VEX_C4_TABLE,
699 USE_VEX_C5_TABLE,
9e30b8e0 700 USE_VEX_LEN_TABLE,
43234a1e
L
701 USE_VEX_W_TABLE,
702 USE_EVEX_TABLE
51e7da1b 703};
6439fc28 704
bf890a93 705#define FLOAT NULL, { { NULL, FLOATCODE } }, 0
4efba78c 706
bf890a93
IT
707#define DIS386(T, I) NULL, { { NULL, (T)}, { NULL, (I) } }, 0
708#define DIS386_PREFIX(T, I, P) NULL, { { NULL, (T)}, { NULL, (I) } }, P
1ceb70f8
L
709#define REG_TABLE(I) DIS386 (USE_REG_TABLE, (I))
710#define MOD_TABLE(I) DIS386 (USE_MOD_TABLE, (I))
711#define RM_TABLE(I) DIS386 (USE_RM_TABLE, (I))
712#define PREFIX_TABLE(I) DIS386 (USE_PREFIX_TABLE, (I))
4e7d34a6
L
713#define X86_64_TABLE(I) DIS386 (USE_X86_64_TABLE, (I))
714#define THREE_BYTE_TABLE(I) DIS386 (USE_3BYTE_TABLE, (I))
bf890a93 715#define THREE_BYTE_TABLE_PREFIX(I, P) DIS386_PREFIX (USE_3BYTE_TABLE, (I), P)
f88c9eb0 716#define XOP_8F_TABLE(I) DIS386 (USE_XOP_8F_TABLE, (I))
c0f3af97
L
717#define VEX_C4_TABLE(I) DIS386 (USE_VEX_C4_TABLE, (I))
718#define VEX_C5_TABLE(I) DIS386 (USE_VEX_C5_TABLE, (I))
719#define VEX_LEN_TABLE(I) DIS386 (USE_VEX_LEN_TABLE, (I))
9e30b8e0 720#define VEX_W_TABLE(I) DIS386 (USE_VEX_W_TABLE, (I))
43234a1e 721#define EVEX_TABLE(I) DIS386 (USE_EVEX_TABLE, (I))
1ceb70f8 722
51e7da1b
L
723enum
724{
725 REG_80 = 0,
3873ba12 726 REG_81,
7148c369 727 REG_83,
3873ba12
L
728 REG_8F,
729 REG_C0,
730 REG_C1,
731 REG_C6,
732 REG_C7,
733 REG_D0,
734 REG_D1,
735 REG_D2,
736 REG_D3,
737 REG_F6,
738 REG_F7,
739 REG_FE,
740 REG_FF,
741 REG_0F00,
742 REG_0F01,
743 REG_0F0D,
744 REG_0F18,
c48935d7 745 REG_0F1C_MOD_0,
603555e5 746 REG_0F1E_MOD_3,
3873ba12
L
747 REG_0F71,
748 REG_0F72,
749 REG_0F73,
750 REG_0FA6,
751 REG_0FA7,
752 REG_0FAE,
753 REG_0FBA,
754 REG_0FC7,
592a252b
L
755 REG_VEX_0F71,
756 REG_VEX_0F72,
757 REG_VEX_0F73,
758 REG_VEX_0FAE,
f12dc422 759 REG_VEX_0F38F3,
f88c9eb0 760 REG_XOP_LWPCB,
2a2a0f38
QN
761 REG_XOP_LWP,
762 REG_XOP_TBM_01,
43234a1e
L
763 REG_XOP_TBM_02,
764
1ba585e8 765 REG_EVEX_0F71,
43234a1e
L
766 REG_EVEX_0F72,
767 REG_EVEX_0F73,
768 REG_EVEX_0F38C6,
769 REG_EVEX_0F38C7
51e7da1b 770};
1ceb70f8 771
51e7da1b
L
772enum
773{
774 MOD_8D = 0,
42164a71
L
775 MOD_C6_REG_7,
776 MOD_C7_REG_7,
4a357820
MZ
777 MOD_FF_REG_3,
778 MOD_FF_REG_5,
3873ba12
L
779 MOD_0F01_REG_0,
780 MOD_0F01_REG_1,
781 MOD_0F01_REG_2,
782 MOD_0F01_REG_3,
8eab4136 783 MOD_0F01_REG_5,
3873ba12
L
784 MOD_0F01_REG_7,
785 MOD_0F12_PREFIX_0,
786 MOD_0F13,
787 MOD_0F16_PREFIX_0,
788 MOD_0F17,
789 MOD_0F18_REG_0,
790 MOD_0F18_REG_1,
791 MOD_0F18_REG_2,
792 MOD_0F18_REG_3,
d7189fa5
RM
793 MOD_0F18_REG_4,
794 MOD_0F18_REG_5,
795 MOD_0F18_REG_6,
796 MOD_0F18_REG_7,
7e8b059b
L
797 MOD_0F1A_PREFIX_0,
798 MOD_0F1B_PREFIX_0,
799 MOD_0F1B_PREFIX_1,
c48935d7 800 MOD_0F1C_PREFIX_0,
603555e5 801 MOD_0F1E_PREFIX_1,
3873ba12
L
802 MOD_0F24,
803 MOD_0F26,
804 MOD_0F2B_PREFIX_0,
805 MOD_0F2B_PREFIX_1,
806 MOD_0F2B_PREFIX_2,
807 MOD_0F2B_PREFIX_3,
808 MOD_0F51,
809 MOD_0F71_REG_2,
810 MOD_0F71_REG_4,
811 MOD_0F71_REG_6,
812 MOD_0F72_REG_2,
813 MOD_0F72_REG_4,
814 MOD_0F72_REG_6,
815 MOD_0F73_REG_2,
816 MOD_0F73_REG_3,
817 MOD_0F73_REG_6,
818 MOD_0F73_REG_7,
819 MOD_0FAE_REG_0,
820 MOD_0FAE_REG_1,
821 MOD_0FAE_REG_2,
822 MOD_0FAE_REG_3,
823 MOD_0FAE_REG_4,
824 MOD_0FAE_REG_5,
825 MOD_0FAE_REG_6,
826 MOD_0FAE_REG_7,
827 MOD_0FB2,
828 MOD_0FB4,
829 MOD_0FB5,
a8484f96 830 MOD_0FC3,
963f3586
IT
831 MOD_0FC7_REG_3,
832 MOD_0FC7_REG_4,
833 MOD_0FC7_REG_5,
3873ba12
L
834 MOD_0FC7_REG_6,
835 MOD_0FC7_REG_7,
836 MOD_0FD7,
837 MOD_0FE7_PREFIX_2,
838 MOD_0FF0_PREFIX_3,
839 MOD_0F382A_PREFIX_2,
603555e5
L
840 MOD_0F38F5_PREFIX_2,
841 MOD_0F38F6_PREFIX_0,
c0a30a9f
L
842 MOD_0F38F8_PREFIX_2,
843 MOD_0F38F9_PREFIX_0,
3873ba12
L
844 MOD_62_32BIT,
845 MOD_C4_32BIT,
846 MOD_C5_32BIT,
592a252b
L
847 MOD_VEX_0F12_PREFIX_0,
848 MOD_VEX_0F13,
849 MOD_VEX_0F16_PREFIX_0,
850 MOD_VEX_0F17,
851 MOD_VEX_0F2B,
ab4e4ed5
AF
852 MOD_VEX_W_0_0F41_P_0_LEN_1,
853 MOD_VEX_W_1_0F41_P_0_LEN_1,
854 MOD_VEX_W_0_0F41_P_2_LEN_1,
855 MOD_VEX_W_1_0F41_P_2_LEN_1,
856 MOD_VEX_W_0_0F42_P_0_LEN_1,
857 MOD_VEX_W_1_0F42_P_0_LEN_1,
858 MOD_VEX_W_0_0F42_P_2_LEN_1,
859 MOD_VEX_W_1_0F42_P_2_LEN_1,
860 MOD_VEX_W_0_0F44_P_0_LEN_1,
861 MOD_VEX_W_1_0F44_P_0_LEN_1,
862 MOD_VEX_W_0_0F44_P_2_LEN_1,
863 MOD_VEX_W_1_0F44_P_2_LEN_1,
864 MOD_VEX_W_0_0F45_P_0_LEN_1,
865 MOD_VEX_W_1_0F45_P_0_LEN_1,
866 MOD_VEX_W_0_0F45_P_2_LEN_1,
867 MOD_VEX_W_1_0F45_P_2_LEN_1,
868 MOD_VEX_W_0_0F46_P_0_LEN_1,
869 MOD_VEX_W_1_0F46_P_0_LEN_1,
870 MOD_VEX_W_0_0F46_P_2_LEN_1,
871 MOD_VEX_W_1_0F46_P_2_LEN_1,
872 MOD_VEX_W_0_0F47_P_0_LEN_1,
873 MOD_VEX_W_1_0F47_P_0_LEN_1,
874 MOD_VEX_W_0_0F47_P_2_LEN_1,
875 MOD_VEX_W_1_0F47_P_2_LEN_1,
876 MOD_VEX_W_0_0F4A_P_0_LEN_1,
877 MOD_VEX_W_1_0F4A_P_0_LEN_1,
878 MOD_VEX_W_0_0F4A_P_2_LEN_1,
879 MOD_VEX_W_1_0F4A_P_2_LEN_1,
880 MOD_VEX_W_0_0F4B_P_0_LEN_1,
881 MOD_VEX_W_1_0F4B_P_0_LEN_1,
882 MOD_VEX_W_0_0F4B_P_2_LEN_1,
592a252b
L
883 MOD_VEX_0F50,
884 MOD_VEX_0F71_REG_2,
885 MOD_VEX_0F71_REG_4,
886 MOD_VEX_0F71_REG_6,
887 MOD_VEX_0F72_REG_2,
888 MOD_VEX_0F72_REG_4,
889 MOD_VEX_0F72_REG_6,
890 MOD_VEX_0F73_REG_2,
891 MOD_VEX_0F73_REG_3,
892 MOD_VEX_0F73_REG_6,
893 MOD_VEX_0F73_REG_7,
ab4e4ed5
AF
894 MOD_VEX_W_0_0F91_P_0_LEN_0,
895 MOD_VEX_W_1_0F91_P_0_LEN_0,
896 MOD_VEX_W_0_0F91_P_2_LEN_0,
897 MOD_VEX_W_1_0F91_P_2_LEN_0,
898 MOD_VEX_W_0_0F92_P_0_LEN_0,
899 MOD_VEX_W_0_0F92_P_2_LEN_0,
900 MOD_VEX_W_0_0F92_P_3_LEN_0,
901 MOD_VEX_W_1_0F92_P_3_LEN_0,
902 MOD_VEX_W_0_0F93_P_0_LEN_0,
903 MOD_VEX_W_0_0F93_P_2_LEN_0,
904 MOD_VEX_W_0_0F93_P_3_LEN_0,
905 MOD_VEX_W_1_0F93_P_3_LEN_0,
906 MOD_VEX_W_0_0F98_P_0_LEN_0,
907 MOD_VEX_W_1_0F98_P_0_LEN_0,
908 MOD_VEX_W_0_0F98_P_2_LEN_0,
909 MOD_VEX_W_1_0F98_P_2_LEN_0,
910 MOD_VEX_W_0_0F99_P_0_LEN_0,
911 MOD_VEX_W_1_0F99_P_0_LEN_0,
912 MOD_VEX_W_0_0F99_P_2_LEN_0,
913 MOD_VEX_W_1_0F99_P_2_LEN_0,
592a252b
L
914 MOD_VEX_0FAE_REG_2,
915 MOD_VEX_0FAE_REG_3,
916 MOD_VEX_0FD7_PREFIX_2,
917 MOD_VEX_0FE7_PREFIX_2,
918 MOD_VEX_0FF0_PREFIX_3,
592a252b
L
919 MOD_VEX_0F381A_PREFIX_2,
920 MOD_VEX_0F382A_PREFIX_2,
921 MOD_VEX_0F382C_PREFIX_2,
922 MOD_VEX_0F382D_PREFIX_2,
923 MOD_VEX_0F382E_PREFIX_2,
6c30d220
L
924 MOD_VEX_0F382F_PREFIX_2,
925 MOD_VEX_0F385A_PREFIX_2,
926 MOD_VEX_0F388C_PREFIX_2,
927 MOD_VEX_0F388E_PREFIX_2,
ab4e4ed5
AF
928 MOD_VEX_W_0_0F3A30_P_2_LEN_0,
929 MOD_VEX_W_1_0F3A30_P_2_LEN_0,
930 MOD_VEX_W_0_0F3A31_P_2_LEN_0,
931 MOD_VEX_W_1_0F3A31_P_2_LEN_0,
932 MOD_VEX_W_0_0F3A32_P_2_LEN_0,
933 MOD_VEX_W_1_0F3A32_P_2_LEN_0,
934 MOD_VEX_W_0_0F3A33_P_2_LEN_0,
935 MOD_VEX_W_1_0F3A33_P_2_LEN_0,
43234a1e
L
936
937 MOD_EVEX_0F10_PREFIX_1,
938 MOD_EVEX_0F10_PREFIX_3,
939 MOD_EVEX_0F11_PREFIX_1,
940 MOD_EVEX_0F11_PREFIX_3,
941 MOD_EVEX_0F12_PREFIX_0,
942 MOD_EVEX_0F16_PREFIX_0,
943 MOD_EVEX_0F38C6_REG_1,
944 MOD_EVEX_0F38C6_REG_2,
945 MOD_EVEX_0F38C6_REG_5,
946 MOD_EVEX_0F38C6_REG_6,
947 MOD_EVEX_0F38C7_REG_1,
948 MOD_EVEX_0F38C7_REG_2,
949 MOD_EVEX_0F38C7_REG_5,
950 MOD_EVEX_0F38C7_REG_6
51e7da1b 951};
1ceb70f8 952
51e7da1b
L
953enum
954{
42164a71
L
955 RM_C6_REG_7 = 0,
956 RM_C7_REG_7,
957 RM_0F01_REG_0,
3873ba12
L
958 RM_0F01_REG_1,
959 RM_0F01_REG_2,
960 RM_0F01_REG_3,
8eab4136 961 RM_0F01_REG_5,
3873ba12 962 RM_0F01_REG_7,
603555e5 963 RM_0F1E_MOD_3_REG_7,
3873ba12
L
964 RM_0FAE_REG_6,
965 RM_0FAE_REG_7
51e7da1b 966};
1ceb70f8 967
51e7da1b
L
968enum
969{
970 PREFIX_90 = 0,
603555e5 971 PREFIX_MOD_0_0F01_REG_5,
2234eee6 972 PREFIX_MOD_3_0F01_REG_5_RM_0,
603555e5 973 PREFIX_MOD_3_0F01_REG_5_RM_2,
3233d7d0 974 PREFIX_0F09,
3873ba12
L
975 PREFIX_0F10,
976 PREFIX_0F11,
977 PREFIX_0F12,
978 PREFIX_0F16,
7e8b059b
L
979 PREFIX_0F1A,
980 PREFIX_0F1B,
c48935d7 981 PREFIX_0F1C,
603555e5 982 PREFIX_0F1E,
3873ba12
L
983 PREFIX_0F2A,
984 PREFIX_0F2B,
985 PREFIX_0F2C,
986 PREFIX_0F2D,
987 PREFIX_0F2E,
988 PREFIX_0F2F,
989 PREFIX_0F51,
990 PREFIX_0F52,
991 PREFIX_0F53,
992 PREFIX_0F58,
993 PREFIX_0F59,
994 PREFIX_0F5A,
995 PREFIX_0F5B,
996 PREFIX_0F5C,
997 PREFIX_0F5D,
998 PREFIX_0F5E,
999 PREFIX_0F5F,
1000 PREFIX_0F60,
1001 PREFIX_0F61,
1002 PREFIX_0F62,
1003 PREFIX_0F6C,
1004 PREFIX_0F6D,
1005 PREFIX_0F6F,
1006 PREFIX_0F70,
1007 PREFIX_0F73_REG_3,
1008 PREFIX_0F73_REG_7,
1009 PREFIX_0F78,
1010 PREFIX_0F79,
1011 PREFIX_0F7C,
1012 PREFIX_0F7D,
1013 PREFIX_0F7E,
1014 PREFIX_0F7F,
c7b8aa3a
L
1015 PREFIX_0FAE_REG_0,
1016 PREFIX_0FAE_REG_1,
1017 PREFIX_0FAE_REG_2,
1018 PREFIX_0FAE_REG_3,
6b40c462
L
1019 PREFIX_MOD_0_0FAE_REG_4,
1020 PREFIX_MOD_3_0FAE_REG_4,
603555e5 1021 PREFIX_MOD_0_0FAE_REG_5,
2234eee6 1022 PREFIX_MOD_3_0FAE_REG_5,
de89d0a3
IT
1023 PREFIX_MOD_0_0FAE_REG_6,
1024 PREFIX_MOD_1_0FAE_REG_6,
963f3586 1025 PREFIX_0FAE_REG_7,
3873ba12 1026 PREFIX_0FB8,
f12dc422 1027 PREFIX_0FBC,
3873ba12
L
1028 PREFIX_0FBD,
1029 PREFIX_0FC2,
a8484f96 1030 PREFIX_MOD_0_0FC3,
f24bcbaa
L
1031 PREFIX_MOD_0_0FC7_REG_6,
1032 PREFIX_MOD_3_0FC7_REG_6,
1033 PREFIX_MOD_3_0FC7_REG_7,
3873ba12
L
1034 PREFIX_0FD0,
1035 PREFIX_0FD6,
1036 PREFIX_0FE6,
1037 PREFIX_0FE7,
1038 PREFIX_0FF0,
1039 PREFIX_0FF7,
1040 PREFIX_0F3810,
1041 PREFIX_0F3814,
1042 PREFIX_0F3815,
1043 PREFIX_0F3817,
1044 PREFIX_0F3820,
1045 PREFIX_0F3821,
1046 PREFIX_0F3822,
1047 PREFIX_0F3823,
1048 PREFIX_0F3824,
1049 PREFIX_0F3825,
1050 PREFIX_0F3828,
1051 PREFIX_0F3829,
1052 PREFIX_0F382A,
1053 PREFIX_0F382B,
1054 PREFIX_0F3830,
1055 PREFIX_0F3831,
1056 PREFIX_0F3832,
1057 PREFIX_0F3833,
1058 PREFIX_0F3834,
1059 PREFIX_0F3835,
1060 PREFIX_0F3837,
1061 PREFIX_0F3838,
1062 PREFIX_0F3839,
1063 PREFIX_0F383A,
1064 PREFIX_0F383B,
1065 PREFIX_0F383C,
1066 PREFIX_0F383D,
1067 PREFIX_0F383E,
1068 PREFIX_0F383F,
1069 PREFIX_0F3840,
1070 PREFIX_0F3841,
1071 PREFIX_0F3880,
1072 PREFIX_0F3881,
6c30d220 1073 PREFIX_0F3882,
a0046408
L
1074 PREFIX_0F38C8,
1075 PREFIX_0F38C9,
1076 PREFIX_0F38CA,
1077 PREFIX_0F38CB,
1078 PREFIX_0F38CC,
1079 PREFIX_0F38CD,
48521003 1080 PREFIX_0F38CF,
3873ba12
L
1081 PREFIX_0F38DB,
1082 PREFIX_0F38DC,
1083 PREFIX_0F38DD,
1084 PREFIX_0F38DE,
1085 PREFIX_0F38DF,
1086 PREFIX_0F38F0,
1087 PREFIX_0F38F1,
603555e5 1088 PREFIX_0F38F5,
e2e1fcde 1089 PREFIX_0F38F6,
c0a30a9f
L
1090 PREFIX_0F38F8,
1091 PREFIX_0F38F9,
3873ba12
L
1092 PREFIX_0F3A08,
1093 PREFIX_0F3A09,
1094 PREFIX_0F3A0A,
1095 PREFIX_0F3A0B,
1096 PREFIX_0F3A0C,
1097 PREFIX_0F3A0D,
1098 PREFIX_0F3A0E,
1099 PREFIX_0F3A14,
1100 PREFIX_0F3A15,
1101 PREFIX_0F3A16,
1102 PREFIX_0F3A17,
1103 PREFIX_0F3A20,
1104 PREFIX_0F3A21,
1105 PREFIX_0F3A22,
1106 PREFIX_0F3A40,
1107 PREFIX_0F3A41,
1108 PREFIX_0F3A42,
1109 PREFIX_0F3A44,
1110 PREFIX_0F3A60,
1111 PREFIX_0F3A61,
1112 PREFIX_0F3A62,
1113 PREFIX_0F3A63,
a0046408 1114 PREFIX_0F3ACC,
48521003
IT
1115 PREFIX_0F3ACE,
1116 PREFIX_0F3ACF,
3873ba12 1117 PREFIX_0F3ADF,
592a252b
L
1118 PREFIX_VEX_0F10,
1119 PREFIX_VEX_0F11,
1120 PREFIX_VEX_0F12,
1121 PREFIX_VEX_0F16,
1122 PREFIX_VEX_0F2A,
1123 PREFIX_VEX_0F2C,
1124 PREFIX_VEX_0F2D,
1125 PREFIX_VEX_0F2E,
1126 PREFIX_VEX_0F2F,
43234a1e
L
1127 PREFIX_VEX_0F41,
1128 PREFIX_VEX_0F42,
1129 PREFIX_VEX_0F44,
1130 PREFIX_VEX_0F45,
1131 PREFIX_VEX_0F46,
1132 PREFIX_VEX_0F47,
1ba585e8 1133 PREFIX_VEX_0F4A,
43234a1e 1134 PREFIX_VEX_0F4B,
592a252b
L
1135 PREFIX_VEX_0F51,
1136 PREFIX_VEX_0F52,
1137 PREFIX_VEX_0F53,
1138 PREFIX_VEX_0F58,
1139 PREFIX_VEX_0F59,
1140 PREFIX_VEX_0F5A,
1141 PREFIX_VEX_0F5B,
1142 PREFIX_VEX_0F5C,
1143 PREFIX_VEX_0F5D,
1144 PREFIX_VEX_0F5E,
1145 PREFIX_VEX_0F5F,
1146 PREFIX_VEX_0F60,
1147 PREFIX_VEX_0F61,
1148 PREFIX_VEX_0F62,
1149 PREFIX_VEX_0F63,
1150 PREFIX_VEX_0F64,
1151 PREFIX_VEX_0F65,
1152 PREFIX_VEX_0F66,
1153 PREFIX_VEX_0F67,
1154 PREFIX_VEX_0F68,
1155 PREFIX_VEX_0F69,
1156 PREFIX_VEX_0F6A,
1157 PREFIX_VEX_0F6B,
1158 PREFIX_VEX_0F6C,
1159 PREFIX_VEX_0F6D,
1160 PREFIX_VEX_0F6E,
1161 PREFIX_VEX_0F6F,
1162 PREFIX_VEX_0F70,
1163 PREFIX_VEX_0F71_REG_2,
1164 PREFIX_VEX_0F71_REG_4,
1165 PREFIX_VEX_0F71_REG_6,
1166 PREFIX_VEX_0F72_REG_2,
1167 PREFIX_VEX_0F72_REG_4,
1168 PREFIX_VEX_0F72_REG_6,
1169 PREFIX_VEX_0F73_REG_2,
1170 PREFIX_VEX_0F73_REG_3,
1171 PREFIX_VEX_0F73_REG_6,
1172 PREFIX_VEX_0F73_REG_7,
1173 PREFIX_VEX_0F74,
1174 PREFIX_VEX_0F75,
1175 PREFIX_VEX_0F76,
1176 PREFIX_VEX_0F77,
1177 PREFIX_VEX_0F7C,
1178 PREFIX_VEX_0F7D,
1179 PREFIX_VEX_0F7E,
1180 PREFIX_VEX_0F7F,
43234a1e
L
1181 PREFIX_VEX_0F90,
1182 PREFIX_VEX_0F91,
1183 PREFIX_VEX_0F92,
1184 PREFIX_VEX_0F93,
1185 PREFIX_VEX_0F98,
1ba585e8 1186 PREFIX_VEX_0F99,
592a252b
L
1187 PREFIX_VEX_0FC2,
1188 PREFIX_VEX_0FC4,
1189 PREFIX_VEX_0FC5,
1190 PREFIX_VEX_0FD0,
1191 PREFIX_VEX_0FD1,
1192 PREFIX_VEX_0FD2,
1193 PREFIX_VEX_0FD3,
1194 PREFIX_VEX_0FD4,
1195 PREFIX_VEX_0FD5,
1196 PREFIX_VEX_0FD6,
1197 PREFIX_VEX_0FD7,
1198 PREFIX_VEX_0FD8,
1199 PREFIX_VEX_0FD9,
1200 PREFIX_VEX_0FDA,
1201 PREFIX_VEX_0FDB,
1202 PREFIX_VEX_0FDC,
1203 PREFIX_VEX_0FDD,
1204 PREFIX_VEX_0FDE,
1205 PREFIX_VEX_0FDF,
1206 PREFIX_VEX_0FE0,
1207 PREFIX_VEX_0FE1,
1208 PREFIX_VEX_0FE2,
1209 PREFIX_VEX_0FE3,
1210 PREFIX_VEX_0FE4,
1211 PREFIX_VEX_0FE5,
1212 PREFIX_VEX_0FE6,
1213 PREFIX_VEX_0FE7,
1214 PREFIX_VEX_0FE8,
1215 PREFIX_VEX_0FE9,
1216 PREFIX_VEX_0FEA,
1217 PREFIX_VEX_0FEB,
1218 PREFIX_VEX_0FEC,
1219 PREFIX_VEX_0FED,
1220 PREFIX_VEX_0FEE,
1221 PREFIX_VEX_0FEF,
1222 PREFIX_VEX_0FF0,
1223 PREFIX_VEX_0FF1,
1224 PREFIX_VEX_0FF2,
1225 PREFIX_VEX_0FF3,
1226 PREFIX_VEX_0FF4,
1227 PREFIX_VEX_0FF5,
1228 PREFIX_VEX_0FF6,
1229 PREFIX_VEX_0FF7,
1230 PREFIX_VEX_0FF8,
1231 PREFIX_VEX_0FF9,
1232 PREFIX_VEX_0FFA,
1233 PREFIX_VEX_0FFB,
1234 PREFIX_VEX_0FFC,
1235 PREFIX_VEX_0FFD,
1236 PREFIX_VEX_0FFE,
1237 PREFIX_VEX_0F3800,
1238 PREFIX_VEX_0F3801,
1239 PREFIX_VEX_0F3802,
1240 PREFIX_VEX_0F3803,
1241 PREFIX_VEX_0F3804,
1242 PREFIX_VEX_0F3805,
1243 PREFIX_VEX_0F3806,
1244 PREFIX_VEX_0F3807,
1245 PREFIX_VEX_0F3808,
1246 PREFIX_VEX_0F3809,
1247 PREFIX_VEX_0F380A,
1248 PREFIX_VEX_0F380B,
1249 PREFIX_VEX_0F380C,
1250 PREFIX_VEX_0F380D,
1251 PREFIX_VEX_0F380E,
1252 PREFIX_VEX_0F380F,
1253 PREFIX_VEX_0F3813,
6c30d220 1254 PREFIX_VEX_0F3816,
592a252b
L
1255 PREFIX_VEX_0F3817,
1256 PREFIX_VEX_0F3818,
1257 PREFIX_VEX_0F3819,
1258 PREFIX_VEX_0F381A,
1259 PREFIX_VEX_0F381C,
1260 PREFIX_VEX_0F381D,
1261 PREFIX_VEX_0F381E,
1262 PREFIX_VEX_0F3820,
1263 PREFIX_VEX_0F3821,
1264 PREFIX_VEX_0F3822,
1265 PREFIX_VEX_0F3823,
1266 PREFIX_VEX_0F3824,
1267 PREFIX_VEX_0F3825,
1268 PREFIX_VEX_0F3828,
1269 PREFIX_VEX_0F3829,
1270 PREFIX_VEX_0F382A,
1271 PREFIX_VEX_0F382B,
1272 PREFIX_VEX_0F382C,
1273 PREFIX_VEX_0F382D,
1274 PREFIX_VEX_0F382E,
1275 PREFIX_VEX_0F382F,
1276 PREFIX_VEX_0F3830,
1277 PREFIX_VEX_0F3831,
1278 PREFIX_VEX_0F3832,
1279 PREFIX_VEX_0F3833,
1280 PREFIX_VEX_0F3834,
1281 PREFIX_VEX_0F3835,
6c30d220 1282 PREFIX_VEX_0F3836,
592a252b
L
1283 PREFIX_VEX_0F3837,
1284 PREFIX_VEX_0F3838,
1285 PREFIX_VEX_0F3839,
1286 PREFIX_VEX_0F383A,
1287 PREFIX_VEX_0F383B,
1288 PREFIX_VEX_0F383C,
1289 PREFIX_VEX_0F383D,
1290 PREFIX_VEX_0F383E,
1291 PREFIX_VEX_0F383F,
1292 PREFIX_VEX_0F3840,
1293 PREFIX_VEX_0F3841,
6c30d220
L
1294 PREFIX_VEX_0F3845,
1295 PREFIX_VEX_0F3846,
1296 PREFIX_VEX_0F3847,
1297 PREFIX_VEX_0F3858,
1298 PREFIX_VEX_0F3859,
1299 PREFIX_VEX_0F385A,
1300 PREFIX_VEX_0F3878,
1301 PREFIX_VEX_0F3879,
1302 PREFIX_VEX_0F388C,
1303 PREFIX_VEX_0F388E,
1304 PREFIX_VEX_0F3890,
1305 PREFIX_VEX_0F3891,
1306 PREFIX_VEX_0F3892,
1307 PREFIX_VEX_0F3893,
592a252b
L
1308 PREFIX_VEX_0F3896,
1309 PREFIX_VEX_0F3897,
1310 PREFIX_VEX_0F3898,
1311 PREFIX_VEX_0F3899,
1312 PREFIX_VEX_0F389A,
1313 PREFIX_VEX_0F389B,
1314 PREFIX_VEX_0F389C,
1315 PREFIX_VEX_0F389D,
1316 PREFIX_VEX_0F389E,
1317 PREFIX_VEX_0F389F,
1318 PREFIX_VEX_0F38A6,
1319 PREFIX_VEX_0F38A7,
1320 PREFIX_VEX_0F38A8,
1321 PREFIX_VEX_0F38A9,
1322 PREFIX_VEX_0F38AA,
1323 PREFIX_VEX_0F38AB,
1324 PREFIX_VEX_0F38AC,
1325 PREFIX_VEX_0F38AD,
1326 PREFIX_VEX_0F38AE,
1327 PREFIX_VEX_0F38AF,
1328 PREFIX_VEX_0F38B6,
1329 PREFIX_VEX_0F38B7,
1330 PREFIX_VEX_0F38B8,
1331 PREFIX_VEX_0F38B9,
1332 PREFIX_VEX_0F38BA,
1333 PREFIX_VEX_0F38BB,
1334 PREFIX_VEX_0F38BC,
1335 PREFIX_VEX_0F38BD,
1336 PREFIX_VEX_0F38BE,
1337 PREFIX_VEX_0F38BF,
48521003 1338 PREFIX_VEX_0F38CF,
592a252b
L
1339 PREFIX_VEX_0F38DB,
1340 PREFIX_VEX_0F38DC,
1341 PREFIX_VEX_0F38DD,
1342 PREFIX_VEX_0F38DE,
1343 PREFIX_VEX_0F38DF,
f12dc422
L
1344 PREFIX_VEX_0F38F2,
1345 PREFIX_VEX_0F38F3_REG_1,
1346 PREFIX_VEX_0F38F3_REG_2,
1347 PREFIX_VEX_0F38F3_REG_3,
6c30d220
L
1348 PREFIX_VEX_0F38F5,
1349 PREFIX_VEX_0F38F6,
f12dc422 1350 PREFIX_VEX_0F38F7,
6c30d220
L
1351 PREFIX_VEX_0F3A00,
1352 PREFIX_VEX_0F3A01,
1353 PREFIX_VEX_0F3A02,
592a252b
L
1354 PREFIX_VEX_0F3A04,
1355 PREFIX_VEX_0F3A05,
1356 PREFIX_VEX_0F3A06,
1357 PREFIX_VEX_0F3A08,
1358 PREFIX_VEX_0F3A09,
1359 PREFIX_VEX_0F3A0A,
1360 PREFIX_VEX_0F3A0B,
1361 PREFIX_VEX_0F3A0C,
1362 PREFIX_VEX_0F3A0D,
1363 PREFIX_VEX_0F3A0E,
1364 PREFIX_VEX_0F3A0F,
1365 PREFIX_VEX_0F3A14,
1366 PREFIX_VEX_0F3A15,
1367 PREFIX_VEX_0F3A16,
1368 PREFIX_VEX_0F3A17,
1369 PREFIX_VEX_0F3A18,
1370 PREFIX_VEX_0F3A19,
1371 PREFIX_VEX_0F3A1D,
1372 PREFIX_VEX_0F3A20,
1373 PREFIX_VEX_0F3A21,
1374 PREFIX_VEX_0F3A22,
43234a1e 1375 PREFIX_VEX_0F3A30,
1ba585e8 1376 PREFIX_VEX_0F3A31,
43234a1e 1377 PREFIX_VEX_0F3A32,
1ba585e8 1378 PREFIX_VEX_0F3A33,
6c30d220
L
1379 PREFIX_VEX_0F3A38,
1380 PREFIX_VEX_0F3A39,
592a252b
L
1381 PREFIX_VEX_0F3A40,
1382 PREFIX_VEX_0F3A41,
1383 PREFIX_VEX_0F3A42,
1384 PREFIX_VEX_0F3A44,
6c30d220 1385 PREFIX_VEX_0F3A46,
592a252b
L
1386 PREFIX_VEX_0F3A48,
1387 PREFIX_VEX_0F3A49,
1388 PREFIX_VEX_0F3A4A,
1389 PREFIX_VEX_0F3A4B,
1390 PREFIX_VEX_0F3A4C,
1391 PREFIX_VEX_0F3A5C,
1392 PREFIX_VEX_0F3A5D,
1393 PREFIX_VEX_0F3A5E,
1394 PREFIX_VEX_0F3A5F,
1395 PREFIX_VEX_0F3A60,
1396 PREFIX_VEX_0F3A61,
1397 PREFIX_VEX_0F3A62,
1398 PREFIX_VEX_0F3A63,
1399 PREFIX_VEX_0F3A68,
1400 PREFIX_VEX_0F3A69,
1401 PREFIX_VEX_0F3A6A,
1402 PREFIX_VEX_0F3A6B,
1403 PREFIX_VEX_0F3A6C,
1404 PREFIX_VEX_0F3A6D,
1405 PREFIX_VEX_0F3A6E,
1406 PREFIX_VEX_0F3A6F,
1407 PREFIX_VEX_0F3A78,
1408 PREFIX_VEX_0F3A79,
1409 PREFIX_VEX_0F3A7A,
1410 PREFIX_VEX_0F3A7B,
1411 PREFIX_VEX_0F3A7C,
1412 PREFIX_VEX_0F3A7D,
1413 PREFIX_VEX_0F3A7E,
1414 PREFIX_VEX_0F3A7F,
48521003
IT
1415 PREFIX_VEX_0F3ACE,
1416 PREFIX_VEX_0F3ACF,
6c30d220 1417 PREFIX_VEX_0F3ADF,
43234a1e
L
1418 PREFIX_VEX_0F3AF0,
1419
1420 PREFIX_EVEX_0F10,
1421 PREFIX_EVEX_0F11,
1422 PREFIX_EVEX_0F12,
1423 PREFIX_EVEX_0F13,
1424 PREFIX_EVEX_0F14,
1425 PREFIX_EVEX_0F15,
1426 PREFIX_EVEX_0F16,
1427 PREFIX_EVEX_0F17,
1428 PREFIX_EVEX_0F28,
1429 PREFIX_EVEX_0F29,
1430 PREFIX_EVEX_0F2A,
1431 PREFIX_EVEX_0F2B,
1432 PREFIX_EVEX_0F2C,
1433 PREFIX_EVEX_0F2D,
1434 PREFIX_EVEX_0F2E,
1435 PREFIX_EVEX_0F2F,
1436 PREFIX_EVEX_0F51,
90a915bf
IT
1437 PREFIX_EVEX_0F54,
1438 PREFIX_EVEX_0F55,
1439 PREFIX_EVEX_0F56,
1440 PREFIX_EVEX_0F57,
43234a1e
L
1441 PREFIX_EVEX_0F58,
1442 PREFIX_EVEX_0F59,
1443 PREFIX_EVEX_0F5A,
1444 PREFIX_EVEX_0F5B,
1445 PREFIX_EVEX_0F5C,
1446 PREFIX_EVEX_0F5D,
1447 PREFIX_EVEX_0F5E,
1448 PREFIX_EVEX_0F5F,
1ba585e8
IT
1449 PREFIX_EVEX_0F60,
1450 PREFIX_EVEX_0F61,
43234a1e 1451 PREFIX_EVEX_0F62,
1ba585e8
IT
1452 PREFIX_EVEX_0F63,
1453 PREFIX_EVEX_0F64,
1454 PREFIX_EVEX_0F65,
43234a1e 1455 PREFIX_EVEX_0F66,
1ba585e8
IT
1456 PREFIX_EVEX_0F67,
1457 PREFIX_EVEX_0F68,
1458 PREFIX_EVEX_0F69,
43234a1e 1459 PREFIX_EVEX_0F6A,
1ba585e8 1460 PREFIX_EVEX_0F6B,
43234a1e
L
1461 PREFIX_EVEX_0F6C,
1462 PREFIX_EVEX_0F6D,
1463 PREFIX_EVEX_0F6E,
1464 PREFIX_EVEX_0F6F,
1465 PREFIX_EVEX_0F70,
1ba585e8
IT
1466 PREFIX_EVEX_0F71_REG_2,
1467 PREFIX_EVEX_0F71_REG_4,
1468 PREFIX_EVEX_0F71_REG_6,
43234a1e
L
1469 PREFIX_EVEX_0F72_REG_0,
1470 PREFIX_EVEX_0F72_REG_1,
1471 PREFIX_EVEX_0F72_REG_2,
1472 PREFIX_EVEX_0F72_REG_4,
1473 PREFIX_EVEX_0F72_REG_6,
1474 PREFIX_EVEX_0F73_REG_2,
1ba585e8 1475 PREFIX_EVEX_0F73_REG_3,
43234a1e 1476 PREFIX_EVEX_0F73_REG_6,
1ba585e8
IT
1477 PREFIX_EVEX_0F73_REG_7,
1478 PREFIX_EVEX_0F74,
1479 PREFIX_EVEX_0F75,
43234a1e
L
1480 PREFIX_EVEX_0F76,
1481 PREFIX_EVEX_0F78,
1482 PREFIX_EVEX_0F79,
1483 PREFIX_EVEX_0F7A,
1484 PREFIX_EVEX_0F7B,
1485 PREFIX_EVEX_0F7E,
1486 PREFIX_EVEX_0F7F,
1487 PREFIX_EVEX_0FC2,
1ba585e8
IT
1488 PREFIX_EVEX_0FC4,
1489 PREFIX_EVEX_0FC5,
43234a1e 1490 PREFIX_EVEX_0FC6,
1ba585e8 1491 PREFIX_EVEX_0FD1,
43234a1e
L
1492 PREFIX_EVEX_0FD2,
1493 PREFIX_EVEX_0FD3,
1494 PREFIX_EVEX_0FD4,
1ba585e8 1495 PREFIX_EVEX_0FD5,
43234a1e 1496 PREFIX_EVEX_0FD6,
1ba585e8
IT
1497 PREFIX_EVEX_0FD8,
1498 PREFIX_EVEX_0FD9,
1499 PREFIX_EVEX_0FDA,
43234a1e 1500 PREFIX_EVEX_0FDB,
1ba585e8
IT
1501 PREFIX_EVEX_0FDC,
1502 PREFIX_EVEX_0FDD,
1503 PREFIX_EVEX_0FDE,
43234a1e 1504 PREFIX_EVEX_0FDF,
1ba585e8
IT
1505 PREFIX_EVEX_0FE0,
1506 PREFIX_EVEX_0FE1,
43234a1e 1507 PREFIX_EVEX_0FE2,
1ba585e8
IT
1508 PREFIX_EVEX_0FE3,
1509 PREFIX_EVEX_0FE4,
1510 PREFIX_EVEX_0FE5,
43234a1e
L
1511 PREFIX_EVEX_0FE6,
1512 PREFIX_EVEX_0FE7,
1ba585e8
IT
1513 PREFIX_EVEX_0FE8,
1514 PREFIX_EVEX_0FE9,
1515 PREFIX_EVEX_0FEA,
43234a1e 1516 PREFIX_EVEX_0FEB,
1ba585e8
IT
1517 PREFIX_EVEX_0FEC,
1518 PREFIX_EVEX_0FED,
1519 PREFIX_EVEX_0FEE,
43234a1e 1520 PREFIX_EVEX_0FEF,
1ba585e8 1521 PREFIX_EVEX_0FF1,
43234a1e
L
1522 PREFIX_EVEX_0FF2,
1523 PREFIX_EVEX_0FF3,
1524 PREFIX_EVEX_0FF4,
1ba585e8
IT
1525 PREFIX_EVEX_0FF5,
1526 PREFIX_EVEX_0FF6,
1527 PREFIX_EVEX_0FF8,
1528 PREFIX_EVEX_0FF9,
43234a1e
L
1529 PREFIX_EVEX_0FFA,
1530 PREFIX_EVEX_0FFB,
1ba585e8
IT
1531 PREFIX_EVEX_0FFC,
1532 PREFIX_EVEX_0FFD,
43234a1e 1533 PREFIX_EVEX_0FFE,
1ba585e8
IT
1534 PREFIX_EVEX_0F3800,
1535 PREFIX_EVEX_0F3804,
1536 PREFIX_EVEX_0F380B,
43234a1e
L
1537 PREFIX_EVEX_0F380C,
1538 PREFIX_EVEX_0F380D,
1ba585e8 1539 PREFIX_EVEX_0F3810,
43234a1e
L
1540 PREFIX_EVEX_0F3811,
1541 PREFIX_EVEX_0F3812,
1542 PREFIX_EVEX_0F3813,
1543 PREFIX_EVEX_0F3814,
1544 PREFIX_EVEX_0F3815,
1545 PREFIX_EVEX_0F3816,
1546 PREFIX_EVEX_0F3818,
1547 PREFIX_EVEX_0F3819,
1548 PREFIX_EVEX_0F381A,
1549 PREFIX_EVEX_0F381B,
1ba585e8
IT
1550 PREFIX_EVEX_0F381C,
1551 PREFIX_EVEX_0F381D,
43234a1e
L
1552 PREFIX_EVEX_0F381E,
1553 PREFIX_EVEX_0F381F,
1ba585e8 1554 PREFIX_EVEX_0F3820,
43234a1e
L
1555 PREFIX_EVEX_0F3821,
1556 PREFIX_EVEX_0F3822,
1557 PREFIX_EVEX_0F3823,
1558 PREFIX_EVEX_0F3824,
1559 PREFIX_EVEX_0F3825,
1ba585e8 1560 PREFIX_EVEX_0F3826,
43234a1e
L
1561 PREFIX_EVEX_0F3827,
1562 PREFIX_EVEX_0F3828,
1563 PREFIX_EVEX_0F3829,
1564 PREFIX_EVEX_0F382A,
1ba585e8 1565 PREFIX_EVEX_0F382B,
43234a1e
L
1566 PREFIX_EVEX_0F382C,
1567 PREFIX_EVEX_0F382D,
1ba585e8 1568 PREFIX_EVEX_0F3830,
43234a1e
L
1569 PREFIX_EVEX_0F3831,
1570 PREFIX_EVEX_0F3832,
1571 PREFIX_EVEX_0F3833,
1572 PREFIX_EVEX_0F3834,
1573 PREFIX_EVEX_0F3835,
1574 PREFIX_EVEX_0F3836,
1575 PREFIX_EVEX_0F3837,
1ba585e8 1576 PREFIX_EVEX_0F3838,
43234a1e
L
1577 PREFIX_EVEX_0F3839,
1578 PREFIX_EVEX_0F383A,
1579 PREFIX_EVEX_0F383B,
1ba585e8 1580 PREFIX_EVEX_0F383C,
43234a1e 1581 PREFIX_EVEX_0F383D,
1ba585e8 1582 PREFIX_EVEX_0F383E,
43234a1e
L
1583 PREFIX_EVEX_0F383F,
1584 PREFIX_EVEX_0F3840,
1585 PREFIX_EVEX_0F3842,
1586 PREFIX_EVEX_0F3843,
1587 PREFIX_EVEX_0F3844,
1588 PREFIX_EVEX_0F3845,
1589 PREFIX_EVEX_0F3846,
1590 PREFIX_EVEX_0F3847,
1591 PREFIX_EVEX_0F384C,
1592 PREFIX_EVEX_0F384D,
1593 PREFIX_EVEX_0F384E,
1594 PREFIX_EVEX_0F384F,
8cfcb765
IT
1595 PREFIX_EVEX_0F3850,
1596 PREFIX_EVEX_0F3851,
47acf0bd
IT
1597 PREFIX_EVEX_0F3852,
1598 PREFIX_EVEX_0F3853,
ee6872be 1599 PREFIX_EVEX_0F3854,
620214f7 1600 PREFIX_EVEX_0F3855,
43234a1e
L
1601 PREFIX_EVEX_0F3858,
1602 PREFIX_EVEX_0F3859,
1603 PREFIX_EVEX_0F385A,
1604 PREFIX_EVEX_0F385B,
53467f57
IT
1605 PREFIX_EVEX_0F3862,
1606 PREFIX_EVEX_0F3863,
43234a1e
L
1607 PREFIX_EVEX_0F3864,
1608 PREFIX_EVEX_0F3865,
1ba585e8 1609 PREFIX_EVEX_0F3866,
53467f57
IT
1610 PREFIX_EVEX_0F3870,
1611 PREFIX_EVEX_0F3871,
1612 PREFIX_EVEX_0F3872,
1613 PREFIX_EVEX_0F3873,
1ba585e8 1614 PREFIX_EVEX_0F3875,
43234a1e
L
1615 PREFIX_EVEX_0F3876,
1616 PREFIX_EVEX_0F3877,
1ba585e8
IT
1617 PREFIX_EVEX_0F3878,
1618 PREFIX_EVEX_0F3879,
1619 PREFIX_EVEX_0F387A,
1620 PREFIX_EVEX_0F387B,
43234a1e 1621 PREFIX_EVEX_0F387C,
1ba585e8 1622 PREFIX_EVEX_0F387D,
43234a1e
L
1623 PREFIX_EVEX_0F387E,
1624 PREFIX_EVEX_0F387F,
14f195c9 1625 PREFIX_EVEX_0F3883,
43234a1e
L
1626 PREFIX_EVEX_0F3888,
1627 PREFIX_EVEX_0F3889,
1628 PREFIX_EVEX_0F388A,
1629 PREFIX_EVEX_0F388B,
1ba585e8 1630 PREFIX_EVEX_0F388D,
ee6872be 1631 PREFIX_EVEX_0F388F,
43234a1e
L
1632 PREFIX_EVEX_0F3890,
1633 PREFIX_EVEX_0F3891,
1634 PREFIX_EVEX_0F3892,
1635 PREFIX_EVEX_0F3893,
1636 PREFIX_EVEX_0F3896,
1637 PREFIX_EVEX_0F3897,
1638 PREFIX_EVEX_0F3898,
1639 PREFIX_EVEX_0F3899,
1640 PREFIX_EVEX_0F389A,
1641 PREFIX_EVEX_0F389B,
1642 PREFIX_EVEX_0F389C,
1643 PREFIX_EVEX_0F389D,
1644 PREFIX_EVEX_0F389E,
1645 PREFIX_EVEX_0F389F,
1646 PREFIX_EVEX_0F38A0,
1647 PREFIX_EVEX_0F38A1,
1648 PREFIX_EVEX_0F38A2,
1649 PREFIX_EVEX_0F38A3,
1650 PREFIX_EVEX_0F38A6,
1651 PREFIX_EVEX_0F38A7,
1652 PREFIX_EVEX_0F38A8,
1653 PREFIX_EVEX_0F38A9,
1654 PREFIX_EVEX_0F38AA,
1655 PREFIX_EVEX_0F38AB,
1656 PREFIX_EVEX_0F38AC,
1657 PREFIX_EVEX_0F38AD,
1658 PREFIX_EVEX_0F38AE,
1659 PREFIX_EVEX_0F38AF,
2cc1b5aa
IT
1660 PREFIX_EVEX_0F38B4,
1661 PREFIX_EVEX_0F38B5,
43234a1e
L
1662 PREFIX_EVEX_0F38B6,
1663 PREFIX_EVEX_0F38B7,
1664 PREFIX_EVEX_0F38B8,
1665 PREFIX_EVEX_0F38B9,
1666 PREFIX_EVEX_0F38BA,
1667 PREFIX_EVEX_0F38BB,
1668 PREFIX_EVEX_0F38BC,
1669 PREFIX_EVEX_0F38BD,
1670 PREFIX_EVEX_0F38BE,
1671 PREFIX_EVEX_0F38BF,
1672 PREFIX_EVEX_0F38C4,
1673 PREFIX_EVEX_0F38C6_REG_1,
1674 PREFIX_EVEX_0F38C6_REG_2,
1675 PREFIX_EVEX_0F38C6_REG_5,
1676 PREFIX_EVEX_0F38C6_REG_6,
1677 PREFIX_EVEX_0F38C7_REG_1,
1678 PREFIX_EVEX_0F38C7_REG_2,
1679 PREFIX_EVEX_0F38C7_REG_5,
1680 PREFIX_EVEX_0F38C7_REG_6,
1681 PREFIX_EVEX_0F38C8,
1682 PREFIX_EVEX_0F38CA,
1683 PREFIX_EVEX_0F38CB,
1684 PREFIX_EVEX_0F38CC,
1685 PREFIX_EVEX_0F38CD,
48521003 1686 PREFIX_EVEX_0F38CF,
8dcf1fad
IT
1687 PREFIX_EVEX_0F38DC,
1688 PREFIX_EVEX_0F38DD,
1689 PREFIX_EVEX_0F38DE,
1690 PREFIX_EVEX_0F38DF,
43234a1e
L
1691
1692 PREFIX_EVEX_0F3A00,
1693 PREFIX_EVEX_0F3A01,
1694 PREFIX_EVEX_0F3A03,
1695 PREFIX_EVEX_0F3A04,
1696 PREFIX_EVEX_0F3A05,
1697 PREFIX_EVEX_0F3A08,
1698 PREFIX_EVEX_0F3A09,
1699 PREFIX_EVEX_0F3A0A,
1700 PREFIX_EVEX_0F3A0B,
1ba585e8
IT
1701 PREFIX_EVEX_0F3A0F,
1702 PREFIX_EVEX_0F3A14,
1703 PREFIX_EVEX_0F3A15,
90a915bf 1704 PREFIX_EVEX_0F3A16,
43234a1e
L
1705 PREFIX_EVEX_0F3A17,
1706 PREFIX_EVEX_0F3A18,
1707 PREFIX_EVEX_0F3A19,
1708 PREFIX_EVEX_0F3A1A,
1709 PREFIX_EVEX_0F3A1B,
1710 PREFIX_EVEX_0F3A1D,
1711 PREFIX_EVEX_0F3A1E,
1712 PREFIX_EVEX_0F3A1F,
1ba585e8 1713 PREFIX_EVEX_0F3A20,
43234a1e 1714 PREFIX_EVEX_0F3A21,
90a915bf 1715 PREFIX_EVEX_0F3A22,
43234a1e
L
1716 PREFIX_EVEX_0F3A23,
1717 PREFIX_EVEX_0F3A25,
1718 PREFIX_EVEX_0F3A26,
1719 PREFIX_EVEX_0F3A27,
1720 PREFIX_EVEX_0F3A38,
1721 PREFIX_EVEX_0F3A39,
1722 PREFIX_EVEX_0F3A3A,
1723 PREFIX_EVEX_0F3A3B,
1ba585e8
IT
1724 PREFIX_EVEX_0F3A3E,
1725 PREFIX_EVEX_0F3A3F,
1726 PREFIX_EVEX_0F3A42,
43234a1e 1727 PREFIX_EVEX_0F3A43,
ff1982d5 1728 PREFIX_EVEX_0F3A44,
90a915bf
IT
1729 PREFIX_EVEX_0F3A50,
1730 PREFIX_EVEX_0F3A51,
43234a1e 1731 PREFIX_EVEX_0F3A54,
90a915bf
IT
1732 PREFIX_EVEX_0F3A55,
1733 PREFIX_EVEX_0F3A56,
1734 PREFIX_EVEX_0F3A57,
1735 PREFIX_EVEX_0F3A66,
53467f57
IT
1736 PREFIX_EVEX_0F3A67,
1737 PREFIX_EVEX_0F3A70,
1738 PREFIX_EVEX_0F3A71,
1739 PREFIX_EVEX_0F3A72,
48521003
IT
1740 PREFIX_EVEX_0F3A73,
1741 PREFIX_EVEX_0F3ACE,
1742 PREFIX_EVEX_0F3ACF
51e7da1b 1743};
4e7d34a6 1744
51e7da1b
L
1745enum
1746{
1747 X86_64_06 = 0,
3873ba12
L
1748 X86_64_07,
1749 X86_64_0D,
1750 X86_64_16,
1751 X86_64_17,
1752 X86_64_1E,
1753 X86_64_1F,
1754 X86_64_27,
1755 X86_64_2F,
1756 X86_64_37,
1757 X86_64_3F,
1758 X86_64_60,
1759 X86_64_61,
1760 X86_64_62,
1761 X86_64_63,
1762 X86_64_6D,
1763 X86_64_6F,
d039fef3 1764 X86_64_82,
3873ba12
L
1765 X86_64_9A,
1766 X86_64_C4,
1767 X86_64_C5,
1768 X86_64_CE,
1769 X86_64_D4,
1770 X86_64_D5,
a72d2af2
L
1771 X86_64_E8,
1772 X86_64_E9,
3873ba12
L
1773 X86_64_EA,
1774 X86_64_0F01_REG_0,
1775 X86_64_0F01_REG_1,
1776 X86_64_0F01_REG_2,
1777 X86_64_0F01_REG_3
51e7da1b 1778};
4e7d34a6 1779
51e7da1b
L
1780enum
1781{
1782 THREE_BYTE_0F38 = 0,
1f334aeb 1783 THREE_BYTE_0F3A
51e7da1b 1784};
4e7d34a6 1785
f88c9eb0
SP
1786enum
1787{
5dd85c99
SP
1788 XOP_08 = 0,
1789 XOP_09,
f88c9eb0
SP
1790 XOP_0A
1791};
1792
51e7da1b
L
1793enum
1794{
1795 VEX_0F = 0,
3873ba12
L
1796 VEX_0F38,
1797 VEX_0F3A
51e7da1b 1798};
c0f3af97 1799
43234a1e
L
1800enum
1801{
1802 EVEX_0F = 0,
1803 EVEX_0F38,
1804 EVEX_0F3A
1805};
1806
51e7da1b
L
1807enum
1808{
592a252b
L
1809 VEX_LEN_0F10_P_1 = 0,
1810 VEX_LEN_0F10_P_3,
1811 VEX_LEN_0F11_P_1,
1812 VEX_LEN_0F11_P_3,
1813 VEX_LEN_0F12_P_0_M_0,
1814 VEX_LEN_0F12_P_0_M_1,
1815 VEX_LEN_0F12_P_2,
1816 VEX_LEN_0F13_M_0,
1817 VEX_LEN_0F16_P_0_M_0,
1818 VEX_LEN_0F16_P_0_M_1,
1819 VEX_LEN_0F16_P_2,
1820 VEX_LEN_0F17_M_0,
1821 VEX_LEN_0F2A_P_1,
1822 VEX_LEN_0F2A_P_3,
1823 VEX_LEN_0F2C_P_1,
1824 VEX_LEN_0F2C_P_3,
1825 VEX_LEN_0F2D_P_1,
1826 VEX_LEN_0F2D_P_3,
1827 VEX_LEN_0F2E_P_0,
1828 VEX_LEN_0F2E_P_2,
1829 VEX_LEN_0F2F_P_0,
1830 VEX_LEN_0F2F_P_2,
43234a1e 1831 VEX_LEN_0F41_P_0,
1ba585e8 1832 VEX_LEN_0F41_P_2,
43234a1e 1833 VEX_LEN_0F42_P_0,
1ba585e8 1834 VEX_LEN_0F42_P_2,
43234a1e 1835 VEX_LEN_0F44_P_0,
1ba585e8 1836 VEX_LEN_0F44_P_2,
43234a1e 1837 VEX_LEN_0F45_P_0,
1ba585e8 1838 VEX_LEN_0F45_P_2,
43234a1e 1839 VEX_LEN_0F46_P_0,
1ba585e8 1840 VEX_LEN_0F46_P_2,
43234a1e 1841 VEX_LEN_0F47_P_0,
1ba585e8
IT
1842 VEX_LEN_0F47_P_2,
1843 VEX_LEN_0F4A_P_0,
1844 VEX_LEN_0F4A_P_2,
1845 VEX_LEN_0F4B_P_0,
43234a1e 1846 VEX_LEN_0F4B_P_2,
592a252b
L
1847 VEX_LEN_0F51_P_1,
1848 VEX_LEN_0F51_P_3,
1849 VEX_LEN_0F52_P_1,
1850 VEX_LEN_0F53_P_1,
1851 VEX_LEN_0F58_P_1,
1852 VEX_LEN_0F58_P_3,
1853 VEX_LEN_0F59_P_1,
1854 VEX_LEN_0F59_P_3,
1855 VEX_LEN_0F5A_P_1,
1856 VEX_LEN_0F5A_P_3,
1857 VEX_LEN_0F5C_P_1,
1858 VEX_LEN_0F5C_P_3,
1859 VEX_LEN_0F5D_P_1,
1860 VEX_LEN_0F5D_P_3,
1861 VEX_LEN_0F5E_P_1,
1862 VEX_LEN_0F5E_P_3,
1863 VEX_LEN_0F5F_P_1,
1864 VEX_LEN_0F5F_P_3,
592a252b 1865 VEX_LEN_0F6E_P_2,
592a252b
L
1866 VEX_LEN_0F7E_P_1,
1867 VEX_LEN_0F7E_P_2,
43234a1e 1868 VEX_LEN_0F90_P_0,
1ba585e8 1869 VEX_LEN_0F90_P_2,
43234a1e 1870 VEX_LEN_0F91_P_0,
1ba585e8 1871 VEX_LEN_0F91_P_2,
43234a1e 1872 VEX_LEN_0F92_P_0,
90a915bf 1873 VEX_LEN_0F92_P_2,
1ba585e8 1874 VEX_LEN_0F92_P_3,
43234a1e 1875 VEX_LEN_0F93_P_0,
90a915bf 1876 VEX_LEN_0F93_P_2,
1ba585e8 1877 VEX_LEN_0F93_P_3,
43234a1e 1878 VEX_LEN_0F98_P_0,
1ba585e8
IT
1879 VEX_LEN_0F98_P_2,
1880 VEX_LEN_0F99_P_0,
1881 VEX_LEN_0F99_P_2,
592a252b
L
1882 VEX_LEN_0FAE_R_2_M_0,
1883 VEX_LEN_0FAE_R_3_M_0,
1884 VEX_LEN_0FC2_P_1,
1885 VEX_LEN_0FC2_P_3,
1886 VEX_LEN_0FC4_P_2,
1887 VEX_LEN_0FC5_P_2,
592a252b 1888 VEX_LEN_0FD6_P_2,
592a252b 1889 VEX_LEN_0FF7_P_2,
6c30d220
L
1890 VEX_LEN_0F3816_P_2,
1891 VEX_LEN_0F3819_P_2,
592a252b 1892 VEX_LEN_0F381A_P_2_M_0,
6c30d220 1893 VEX_LEN_0F3836_P_2,
592a252b 1894 VEX_LEN_0F3841_P_2,
6c30d220 1895 VEX_LEN_0F385A_P_2_M_0,
592a252b 1896 VEX_LEN_0F38DB_P_2,
f12dc422
L
1897 VEX_LEN_0F38F2_P_0,
1898 VEX_LEN_0F38F3_R_1_P_0,
1899 VEX_LEN_0F38F3_R_2_P_0,
1900 VEX_LEN_0F38F3_R_3_P_0,
6c30d220
L
1901 VEX_LEN_0F38F5_P_0,
1902 VEX_LEN_0F38F5_P_1,
1903 VEX_LEN_0F38F5_P_3,
1904 VEX_LEN_0F38F6_P_3,
f12dc422 1905 VEX_LEN_0F38F7_P_0,
6c30d220
L
1906 VEX_LEN_0F38F7_P_1,
1907 VEX_LEN_0F38F7_P_2,
1908 VEX_LEN_0F38F7_P_3,
1909 VEX_LEN_0F3A00_P_2,
1910 VEX_LEN_0F3A01_P_2,
592a252b
L
1911 VEX_LEN_0F3A06_P_2,
1912 VEX_LEN_0F3A0A_P_2,
1913 VEX_LEN_0F3A0B_P_2,
592a252b
L
1914 VEX_LEN_0F3A14_P_2,
1915 VEX_LEN_0F3A15_P_2,
1916 VEX_LEN_0F3A16_P_2,
1917 VEX_LEN_0F3A17_P_2,
1918 VEX_LEN_0F3A18_P_2,
1919 VEX_LEN_0F3A19_P_2,
1920 VEX_LEN_0F3A20_P_2,
1921 VEX_LEN_0F3A21_P_2,
1922 VEX_LEN_0F3A22_P_2,
43234a1e 1923 VEX_LEN_0F3A30_P_2,
1ba585e8 1924 VEX_LEN_0F3A31_P_2,
43234a1e 1925 VEX_LEN_0F3A32_P_2,
1ba585e8 1926 VEX_LEN_0F3A33_P_2,
6c30d220
L
1927 VEX_LEN_0F3A38_P_2,
1928 VEX_LEN_0F3A39_P_2,
592a252b 1929 VEX_LEN_0F3A41_P_2,
6c30d220 1930 VEX_LEN_0F3A46_P_2,
592a252b
L
1931 VEX_LEN_0F3A60_P_2,
1932 VEX_LEN_0F3A61_P_2,
1933 VEX_LEN_0F3A62_P_2,
1934 VEX_LEN_0F3A63_P_2,
1935 VEX_LEN_0F3A6A_P_2,
1936 VEX_LEN_0F3A6B_P_2,
1937 VEX_LEN_0F3A6E_P_2,
1938 VEX_LEN_0F3A6F_P_2,
1939 VEX_LEN_0F3A7A_P_2,
1940 VEX_LEN_0F3A7B_P_2,
1941 VEX_LEN_0F3A7E_P_2,
1942 VEX_LEN_0F3A7F_P_2,
1943 VEX_LEN_0F3ADF_P_2,
6c30d220 1944 VEX_LEN_0F3AF0_P_3,
ff688e1f
L
1945 VEX_LEN_0FXOP_08_CC,
1946 VEX_LEN_0FXOP_08_CD,
1947 VEX_LEN_0FXOP_08_CE,
1948 VEX_LEN_0FXOP_08_CF,
1949 VEX_LEN_0FXOP_08_EC,
1950 VEX_LEN_0FXOP_08_ED,
1951 VEX_LEN_0FXOP_08_EE,
1952 VEX_LEN_0FXOP_08_EF,
592a252b
L
1953 VEX_LEN_0FXOP_09_80,
1954 VEX_LEN_0FXOP_09_81
51e7da1b 1955};
c0f3af97 1956
9e30b8e0
L
1957enum
1958{
592a252b
L
1959 VEX_W_0F10_P_0 = 0,
1960 VEX_W_0F10_P_1,
1961 VEX_W_0F10_P_2,
1962 VEX_W_0F10_P_3,
1963 VEX_W_0F11_P_0,
1964 VEX_W_0F11_P_1,
1965 VEX_W_0F11_P_2,
1966 VEX_W_0F11_P_3,
1967 VEX_W_0F12_P_0_M_0,
1968 VEX_W_0F12_P_0_M_1,
1969 VEX_W_0F12_P_1,
1970 VEX_W_0F12_P_2,
1971 VEX_W_0F12_P_3,
1972 VEX_W_0F13_M_0,
1973 VEX_W_0F14,
1974 VEX_W_0F15,
1975 VEX_W_0F16_P_0_M_0,
1976 VEX_W_0F16_P_0_M_1,
1977 VEX_W_0F16_P_1,
1978 VEX_W_0F16_P_2,
1979 VEX_W_0F17_M_0,
1980 VEX_W_0F28,
1981 VEX_W_0F29,
1982 VEX_W_0F2B_M_0,
1983 VEX_W_0F2E_P_0,
1984 VEX_W_0F2E_P_2,
1985 VEX_W_0F2F_P_0,
1986 VEX_W_0F2F_P_2,
43234a1e 1987 VEX_W_0F41_P_0_LEN_1,
1ba585e8 1988 VEX_W_0F41_P_2_LEN_1,
43234a1e 1989 VEX_W_0F42_P_0_LEN_1,
1ba585e8 1990 VEX_W_0F42_P_2_LEN_1,
43234a1e 1991 VEX_W_0F44_P_0_LEN_0,
1ba585e8 1992 VEX_W_0F44_P_2_LEN_0,
43234a1e 1993 VEX_W_0F45_P_0_LEN_1,
1ba585e8 1994 VEX_W_0F45_P_2_LEN_1,
43234a1e 1995 VEX_W_0F46_P_0_LEN_1,
1ba585e8 1996 VEX_W_0F46_P_2_LEN_1,
43234a1e 1997 VEX_W_0F47_P_0_LEN_1,
1ba585e8
IT
1998 VEX_W_0F47_P_2_LEN_1,
1999 VEX_W_0F4A_P_0_LEN_1,
2000 VEX_W_0F4A_P_2_LEN_1,
2001 VEX_W_0F4B_P_0_LEN_1,
43234a1e 2002 VEX_W_0F4B_P_2_LEN_1,
592a252b
L
2003 VEX_W_0F50_M_0,
2004 VEX_W_0F51_P_0,
2005 VEX_W_0F51_P_1,
2006 VEX_W_0F51_P_2,
2007 VEX_W_0F51_P_3,
2008 VEX_W_0F52_P_0,
2009 VEX_W_0F52_P_1,
2010 VEX_W_0F53_P_0,
2011 VEX_W_0F53_P_1,
2012 VEX_W_0F58_P_0,
2013 VEX_W_0F58_P_1,
2014 VEX_W_0F58_P_2,
2015 VEX_W_0F58_P_3,
2016 VEX_W_0F59_P_0,
2017 VEX_W_0F59_P_1,
2018 VEX_W_0F59_P_2,
2019 VEX_W_0F59_P_3,
2020 VEX_W_0F5A_P_0,
2021 VEX_W_0F5A_P_1,
2022 VEX_W_0F5A_P_3,
2023 VEX_W_0F5B_P_0,
2024 VEX_W_0F5B_P_1,
2025 VEX_W_0F5B_P_2,
2026 VEX_W_0F5C_P_0,
2027 VEX_W_0F5C_P_1,
2028 VEX_W_0F5C_P_2,
2029 VEX_W_0F5C_P_3,
2030 VEX_W_0F5D_P_0,
2031 VEX_W_0F5D_P_1,
2032 VEX_W_0F5D_P_2,
2033 VEX_W_0F5D_P_3,
2034 VEX_W_0F5E_P_0,
2035 VEX_W_0F5E_P_1,
2036 VEX_W_0F5E_P_2,
2037 VEX_W_0F5E_P_3,
2038 VEX_W_0F5F_P_0,
2039 VEX_W_0F5F_P_1,
2040 VEX_W_0F5F_P_2,
2041 VEX_W_0F5F_P_3,
2042 VEX_W_0F60_P_2,
2043 VEX_W_0F61_P_2,
2044 VEX_W_0F62_P_2,
2045 VEX_W_0F63_P_2,
2046 VEX_W_0F64_P_2,
2047 VEX_W_0F65_P_2,
2048 VEX_W_0F66_P_2,
2049 VEX_W_0F67_P_2,
2050 VEX_W_0F68_P_2,
2051 VEX_W_0F69_P_2,
2052 VEX_W_0F6A_P_2,
2053 VEX_W_0F6B_P_2,
2054 VEX_W_0F6C_P_2,
2055 VEX_W_0F6D_P_2,
2056 VEX_W_0F6F_P_1,
2057 VEX_W_0F6F_P_2,
2058 VEX_W_0F70_P_1,
2059 VEX_W_0F70_P_2,
2060 VEX_W_0F70_P_3,
2061 VEX_W_0F71_R_2_P_2,
2062 VEX_W_0F71_R_4_P_2,
2063 VEX_W_0F71_R_6_P_2,
2064 VEX_W_0F72_R_2_P_2,
2065 VEX_W_0F72_R_4_P_2,
2066 VEX_W_0F72_R_6_P_2,
2067 VEX_W_0F73_R_2_P_2,
2068 VEX_W_0F73_R_3_P_2,
2069 VEX_W_0F73_R_6_P_2,
2070 VEX_W_0F73_R_7_P_2,
2071 VEX_W_0F74_P_2,
2072 VEX_W_0F75_P_2,
2073 VEX_W_0F76_P_2,
2074 VEX_W_0F77_P_0,
2075 VEX_W_0F7C_P_2,
2076 VEX_W_0F7C_P_3,
2077 VEX_W_0F7D_P_2,
2078 VEX_W_0F7D_P_3,
2079 VEX_W_0F7E_P_1,
2080 VEX_W_0F7F_P_1,
2081 VEX_W_0F7F_P_2,
43234a1e 2082 VEX_W_0F90_P_0_LEN_0,
1ba585e8 2083 VEX_W_0F90_P_2_LEN_0,
43234a1e 2084 VEX_W_0F91_P_0_LEN_0,
1ba585e8 2085 VEX_W_0F91_P_2_LEN_0,
43234a1e 2086 VEX_W_0F92_P_0_LEN_0,
90a915bf 2087 VEX_W_0F92_P_2_LEN_0,
1ba585e8 2088 VEX_W_0F92_P_3_LEN_0,
43234a1e 2089 VEX_W_0F93_P_0_LEN_0,
90a915bf 2090 VEX_W_0F93_P_2_LEN_0,
1ba585e8 2091 VEX_W_0F93_P_3_LEN_0,
43234a1e 2092 VEX_W_0F98_P_0_LEN_0,
1ba585e8
IT
2093 VEX_W_0F98_P_2_LEN_0,
2094 VEX_W_0F99_P_0_LEN_0,
2095 VEX_W_0F99_P_2_LEN_0,
592a252b
L
2096 VEX_W_0FAE_R_2_M_0,
2097 VEX_W_0FAE_R_3_M_0,
2098 VEX_W_0FC2_P_0,
2099 VEX_W_0FC2_P_1,
2100 VEX_W_0FC2_P_2,
2101 VEX_W_0FC2_P_3,
2102 VEX_W_0FC4_P_2,
2103 VEX_W_0FC5_P_2,
2104 VEX_W_0FD0_P_2,
2105 VEX_W_0FD0_P_3,
2106 VEX_W_0FD1_P_2,
2107 VEX_W_0FD2_P_2,
2108 VEX_W_0FD3_P_2,
2109 VEX_W_0FD4_P_2,
2110 VEX_W_0FD5_P_2,
2111 VEX_W_0FD6_P_2,
2112 VEX_W_0FD7_P_2_M_1,
2113 VEX_W_0FD8_P_2,
2114 VEX_W_0FD9_P_2,
2115 VEX_W_0FDA_P_2,
2116 VEX_W_0FDB_P_2,
2117 VEX_W_0FDC_P_2,
2118 VEX_W_0FDD_P_2,
2119 VEX_W_0FDE_P_2,
2120 VEX_W_0FDF_P_2,
2121 VEX_W_0FE0_P_2,
2122 VEX_W_0FE1_P_2,
2123 VEX_W_0FE2_P_2,
2124 VEX_W_0FE3_P_2,
2125 VEX_W_0FE4_P_2,
2126 VEX_W_0FE5_P_2,
2127 VEX_W_0FE6_P_1,
2128 VEX_W_0FE6_P_2,
2129 VEX_W_0FE6_P_3,
2130 VEX_W_0FE7_P_2_M_0,
2131 VEX_W_0FE8_P_2,
2132 VEX_W_0FE9_P_2,
2133 VEX_W_0FEA_P_2,
2134 VEX_W_0FEB_P_2,
2135 VEX_W_0FEC_P_2,
2136 VEX_W_0FED_P_2,
2137 VEX_W_0FEE_P_2,
2138 VEX_W_0FEF_P_2,
2139 VEX_W_0FF0_P_3_M_0,
2140 VEX_W_0FF1_P_2,
2141 VEX_W_0FF2_P_2,
2142 VEX_W_0FF3_P_2,
2143 VEX_W_0FF4_P_2,
2144 VEX_W_0FF5_P_2,
2145 VEX_W_0FF6_P_2,
2146 VEX_W_0FF7_P_2,
2147 VEX_W_0FF8_P_2,
2148 VEX_W_0FF9_P_2,
2149 VEX_W_0FFA_P_2,
2150 VEX_W_0FFB_P_2,
2151 VEX_W_0FFC_P_2,
2152 VEX_W_0FFD_P_2,
2153 VEX_W_0FFE_P_2,
2154 VEX_W_0F3800_P_2,
2155 VEX_W_0F3801_P_2,
2156 VEX_W_0F3802_P_2,
2157 VEX_W_0F3803_P_2,
2158 VEX_W_0F3804_P_2,
2159 VEX_W_0F3805_P_2,
2160 VEX_W_0F3806_P_2,
2161 VEX_W_0F3807_P_2,
2162 VEX_W_0F3808_P_2,
2163 VEX_W_0F3809_P_2,
2164 VEX_W_0F380A_P_2,
2165 VEX_W_0F380B_P_2,
2166 VEX_W_0F380C_P_2,
2167 VEX_W_0F380D_P_2,
2168 VEX_W_0F380E_P_2,
2169 VEX_W_0F380F_P_2,
6c30d220 2170 VEX_W_0F3816_P_2,
592a252b 2171 VEX_W_0F3817_P_2,
6c30d220
L
2172 VEX_W_0F3818_P_2,
2173 VEX_W_0F3819_P_2,
592a252b
L
2174 VEX_W_0F381A_P_2_M_0,
2175 VEX_W_0F381C_P_2,
2176 VEX_W_0F381D_P_2,
2177 VEX_W_0F381E_P_2,
2178 VEX_W_0F3820_P_2,
2179 VEX_W_0F3821_P_2,
2180 VEX_W_0F3822_P_2,
2181 VEX_W_0F3823_P_2,
2182 VEX_W_0F3824_P_2,
2183 VEX_W_0F3825_P_2,
2184 VEX_W_0F3828_P_2,
2185 VEX_W_0F3829_P_2,
2186 VEX_W_0F382A_P_2_M_0,
2187 VEX_W_0F382B_P_2,
2188 VEX_W_0F382C_P_2_M_0,
2189 VEX_W_0F382D_P_2_M_0,
2190 VEX_W_0F382E_P_2_M_0,
2191 VEX_W_0F382F_P_2_M_0,
2192 VEX_W_0F3830_P_2,
2193 VEX_W_0F3831_P_2,
2194 VEX_W_0F3832_P_2,
2195 VEX_W_0F3833_P_2,
2196 VEX_W_0F3834_P_2,
2197 VEX_W_0F3835_P_2,
6c30d220 2198 VEX_W_0F3836_P_2,
592a252b
L
2199 VEX_W_0F3837_P_2,
2200 VEX_W_0F3838_P_2,
2201 VEX_W_0F3839_P_2,
2202 VEX_W_0F383A_P_2,
2203 VEX_W_0F383B_P_2,
2204 VEX_W_0F383C_P_2,
2205 VEX_W_0F383D_P_2,
2206 VEX_W_0F383E_P_2,
2207 VEX_W_0F383F_P_2,
2208 VEX_W_0F3840_P_2,
2209 VEX_W_0F3841_P_2,
6c30d220
L
2210 VEX_W_0F3846_P_2,
2211 VEX_W_0F3858_P_2,
2212 VEX_W_0F3859_P_2,
2213 VEX_W_0F385A_P_2_M_0,
2214 VEX_W_0F3878_P_2,
2215 VEX_W_0F3879_P_2,
48521003 2216 VEX_W_0F38CF_P_2,
592a252b 2217 VEX_W_0F38DB_P_2,
6c30d220
L
2218 VEX_W_0F3A00_P_2,
2219 VEX_W_0F3A01_P_2,
2220 VEX_W_0F3A02_P_2,
592a252b
L
2221 VEX_W_0F3A04_P_2,
2222 VEX_W_0F3A05_P_2,
2223 VEX_W_0F3A06_P_2,
2224 VEX_W_0F3A08_P_2,
2225 VEX_W_0F3A09_P_2,
2226 VEX_W_0F3A0A_P_2,
2227 VEX_W_0F3A0B_P_2,
2228 VEX_W_0F3A0C_P_2,
2229 VEX_W_0F3A0D_P_2,
2230 VEX_W_0F3A0E_P_2,
2231 VEX_W_0F3A0F_P_2,
2232 VEX_W_0F3A14_P_2,
2233 VEX_W_0F3A15_P_2,
2234 VEX_W_0F3A18_P_2,
2235 VEX_W_0F3A19_P_2,
2236 VEX_W_0F3A20_P_2,
2237 VEX_W_0F3A21_P_2,
43234a1e 2238 VEX_W_0F3A30_P_2_LEN_0,
1ba585e8 2239 VEX_W_0F3A31_P_2_LEN_0,
43234a1e 2240 VEX_W_0F3A32_P_2_LEN_0,
1ba585e8 2241 VEX_W_0F3A33_P_2_LEN_0,
6c30d220
L
2242 VEX_W_0F3A38_P_2,
2243 VEX_W_0F3A39_P_2,
592a252b
L
2244 VEX_W_0F3A40_P_2,
2245 VEX_W_0F3A41_P_2,
2246 VEX_W_0F3A42_P_2,
6c30d220 2247 VEX_W_0F3A46_P_2,
592a252b
L
2248 VEX_W_0F3A48_P_2,
2249 VEX_W_0F3A49_P_2,
2250 VEX_W_0F3A4A_P_2,
2251 VEX_W_0F3A4B_P_2,
2252 VEX_W_0F3A4C_P_2,
592a252b
L
2253 VEX_W_0F3A62_P_2,
2254 VEX_W_0F3A63_P_2,
48521003
IT
2255 VEX_W_0F3ACE_P_2,
2256 VEX_W_0F3ACF_P_2,
43234a1e
L
2257 VEX_W_0F3ADF_P_2,
2258
2259 EVEX_W_0F10_P_0,
2260 EVEX_W_0F10_P_1_M_0,
2261 EVEX_W_0F10_P_1_M_1,
2262 EVEX_W_0F10_P_2,
2263 EVEX_W_0F10_P_3_M_0,
2264 EVEX_W_0F10_P_3_M_1,
2265 EVEX_W_0F11_P_0,
2266 EVEX_W_0F11_P_1_M_0,
2267 EVEX_W_0F11_P_1_M_1,
2268 EVEX_W_0F11_P_2,
2269 EVEX_W_0F11_P_3_M_0,
2270 EVEX_W_0F11_P_3_M_1,
2271 EVEX_W_0F12_P_0_M_0,
2272 EVEX_W_0F12_P_0_M_1,
2273 EVEX_W_0F12_P_1,
2274 EVEX_W_0F12_P_2,
2275 EVEX_W_0F12_P_3,
2276 EVEX_W_0F13_P_0,
2277 EVEX_W_0F13_P_2,
2278 EVEX_W_0F14_P_0,
2279 EVEX_W_0F14_P_2,
2280 EVEX_W_0F15_P_0,
2281 EVEX_W_0F15_P_2,
2282 EVEX_W_0F16_P_0_M_0,
2283 EVEX_W_0F16_P_0_M_1,
2284 EVEX_W_0F16_P_1,
2285 EVEX_W_0F16_P_2,
2286 EVEX_W_0F17_P_0,
2287 EVEX_W_0F17_P_2,
2288 EVEX_W_0F28_P_0,
2289 EVEX_W_0F28_P_2,
2290 EVEX_W_0F29_P_0,
2291 EVEX_W_0F29_P_2,
2292 EVEX_W_0F2A_P_1,
2293 EVEX_W_0F2A_P_3,
2294 EVEX_W_0F2B_P_0,
2295 EVEX_W_0F2B_P_2,
2296 EVEX_W_0F2E_P_0,
2297 EVEX_W_0F2E_P_2,
2298 EVEX_W_0F2F_P_0,
2299 EVEX_W_0F2F_P_2,
2300 EVEX_W_0F51_P_0,
2301 EVEX_W_0F51_P_1,
2302 EVEX_W_0F51_P_2,
2303 EVEX_W_0F51_P_3,
90a915bf
IT
2304 EVEX_W_0F54_P_0,
2305 EVEX_W_0F54_P_2,
2306 EVEX_W_0F55_P_0,
2307 EVEX_W_0F55_P_2,
2308 EVEX_W_0F56_P_0,
2309 EVEX_W_0F56_P_2,
2310 EVEX_W_0F57_P_0,
2311 EVEX_W_0F57_P_2,
43234a1e
L
2312 EVEX_W_0F58_P_0,
2313 EVEX_W_0F58_P_1,
2314 EVEX_W_0F58_P_2,
2315 EVEX_W_0F58_P_3,
2316 EVEX_W_0F59_P_0,
2317 EVEX_W_0F59_P_1,
2318 EVEX_W_0F59_P_2,
2319 EVEX_W_0F59_P_3,
2320 EVEX_W_0F5A_P_0,
2321 EVEX_W_0F5A_P_1,
2322 EVEX_W_0F5A_P_2,
2323 EVEX_W_0F5A_P_3,
2324 EVEX_W_0F5B_P_0,
2325 EVEX_W_0F5B_P_1,
2326 EVEX_W_0F5B_P_2,
2327 EVEX_W_0F5C_P_0,
2328 EVEX_W_0F5C_P_1,
2329 EVEX_W_0F5C_P_2,
2330 EVEX_W_0F5C_P_3,
2331 EVEX_W_0F5D_P_0,
2332 EVEX_W_0F5D_P_1,
2333 EVEX_W_0F5D_P_2,
2334 EVEX_W_0F5D_P_3,
2335 EVEX_W_0F5E_P_0,
2336 EVEX_W_0F5E_P_1,
2337 EVEX_W_0F5E_P_2,
2338 EVEX_W_0F5E_P_3,
2339 EVEX_W_0F5F_P_0,
2340 EVEX_W_0F5F_P_1,
2341 EVEX_W_0F5F_P_2,
2342 EVEX_W_0F5F_P_3,
2343 EVEX_W_0F62_P_2,
2344 EVEX_W_0F66_P_2,
2345 EVEX_W_0F6A_P_2,
1ba585e8 2346 EVEX_W_0F6B_P_2,
43234a1e
L
2347 EVEX_W_0F6C_P_2,
2348 EVEX_W_0F6D_P_2,
2349 EVEX_W_0F6E_P_2,
2350 EVEX_W_0F6F_P_1,
2351 EVEX_W_0F6F_P_2,
1ba585e8 2352 EVEX_W_0F6F_P_3,
43234a1e
L
2353 EVEX_W_0F70_P_2,
2354 EVEX_W_0F72_R_2_P_2,
2355 EVEX_W_0F72_R_6_P_2,
2356 EVEX_W_0F73_R_2_P_2,
2357 EVEX_W_0F73_R_6_P_2,
2358 EVEX_W_0F76_P_2,
2359 EVEX_W_0F78_P_0,
90a915bf 2360 EVEX_W_0F78_P_2,
43234a1e 2361 EVEX_W_0F79_P_0,
90a915bf 2362 EVEX_W_0F79_P_2,
43234a1e 2363 EVEX_W_0F7A_P_1,
90a915bf 2364 EVEX_W_0F7A_P_2,
43234a1e
L
2365 EVEX_W_0F7A_P_3,
2366 EVEX_W_0F7B_P_1,
90a915bf 2367 EVEX_W_0F7B_P_2,
43234a1e
L
2368 EVEX_W_0F7B_P_3,
2369 EVEX_W_0F7E_P_1,
2370 EVEX_W_0F7E_P_2,
2371 EVEX_W_0F7F_P_1,
2372 EVEX_W_0F7F_P_2,
1ba585e8 2373 EVEX_W_0F7F_P_3,
43234a1e
L
2374 EVEX_W_0FC2_P_0,
2375 EVEX_W_0FC2_P_1,
2376 EVEX_W_0FC2_P_2,
2377 EVEX_W_0FC2_P_3,
2378 EVEX_W_0FC6_P_0,
2379 EVEX_W_0FC6_P_2,
2380 EVEX_W_0FD2_P_2,
2381 EVEX_W_0FD3_P_2,
2382 EVEX_W_0FD4_P_2,
2383 EVEX_W_0FD6_P_2,
2384 EVEX_W_0FE6_P_1,
2385 EVEX_W_0FE6_P_2,
2386 EVEX_W_0FE6_P_3,
2387 EVEX_W_0FE7_P_2,
2388 EVEX_W_0FF2_P_2,
2389 EVEX_W_0FF3_P_2,
2390 EVEX_W_0FF4_P_2,
2391 EVEX_W_0FFA_P_2,
2392 EVEX_W_0FFB_P_2,
2393 EVEX_W_0FFE_P_2,
2394 EVEX_W_0F380C_P_2,
2395 EVEX_W_0F380D_P_2,
1ba585e8
IT
2396 EVEX_W_0F3810_P_1,
2397 EVEX_W_0F3810_P_2,
43234a1e 2398 EVEX_W_0F3811_P_1,
1ba585e8 2399 EVEX_W_0F3811_P_2,
43234a1e 2400 EVEX_W_0F3812_P_1,
1ba585e8 2401 EVEX_W_0F3812_P_2,
43234a1e
L
2402 EVEX_W_0F3813_P_1,
2403 EVEX_W_0F3813_P_2,
2404 EVEX_W_0F3814_P_1,
2405 EVEX_W_0F3815_P_1,
2406 EVEX_W_0F3818_P_2,
2407 EVEX_W_0F3819_P_2,
2408 EVEX_W_0F381A_P_2,
2409 EVEX_W_0F381B_P_2,
2410 EVEX_W_0F381E_P_2,
2411 EVEX_W_0F381F_P_2,
1ba585e8 2412 EVEX_W_0F3820_P_1,
43234a1e
L
2413 EVEX_W_0F3821_P_1,
2414 EVEX_W_0F3822_P_1,
2415 EVEX_W_0F3823_P_1,
2416 EVEX_W_0F3824_P_1,
2417 EVEX_W_0F3825_P_1,
2418 EVEX_W_0F3825_P_2,
1ba585e8
IT
2419 EVEX_W_0F3826_P_1,
2420 EVEX_W_0F3826_P_2,
2421 EVEX_W_0F3828_P_1,
43234a1e 2422 EVEX_W_0F3828_P_2,
1ba585e8 2423 EVEX_W_0F3829_P_1,
43234a1e
L
2424 EVEX_W_0F3829_P_2,
2425 EVEX_W_0F382A_P_1,
2426 EVEX_W_0F382A_P_2,
1ba585e8
IT
2427 EVEX_W_0F382B_P_2,
2428 EVEX_W_0F3830_P_1,
43234a1e
L
2429 EVEX_W_0F3831_P_1,
2430 EVEX_W_0F3832_P_1,
2431 EVEX_W_0F3833_P_1,
2432 EVEX_W_0F3834_P_1,
2433 EVEX_W_0F3835_P_1,
2434 EVEX_W_0F3835_P_2,
2435 EVEX_W_0F3837_P_2,
90a915bf
IT
2436 EVEX_W_0F3838_P_1,
2437 EVEX_W_0F3839_P_1,
43234a1e
L
2438 EVEX_W_0F383A_P_1,
2439 EVEX_W_0F3840_P_2,
ee6872be 2440 EVEX_W_0F3854_P_2,
620214f7 2441 EVEX_W_0F3855_P_2,
43234a1e
L
2442 EVEX_W_0F3858_P_2,
2443 EVEX_W_0F3859_P_2,
2444 EVEX_W_0F385A_P_2,
2445 EVEX_W_0F385B_P_2,
53467f57
IT
2446 EVEX_W_0F3862_P_2,
2447 EVEX_W_0F3863_P_2,
1ba585e8 2448 EVEX_W_0F3866_P_2,
53467f57
IT
2449 EVEX_W_0F3870_P_2,
2450 EVEX_W_0F3871_P_2,
2451 EVEX_W_0F3872_P_2,
2452 EVEX_W_0F3873_P_2,
1ba585e8
IT
2453 EVEX_W_0F3875_P_2,
2454 EVEX_W_0F3878_P_2,
2455 EVEX_W_0F3879_P_2,
2456 EVEX_W_0F387A_P_2,
2457 EVEX_W_0F387B_P_2,
2458 EVEX_W_0F387D_P_2,
14f195c9 2459 EVEX_W_0F3883_P_2,
1ba585e8 2460 EVEX_W_0F388D_P_2,
43234a1e
L
2461 EVEX_W_0F3891_P_2,
2462 EVEX_W_0F3893_P_2,
2463 EVEX_W_0F38A1_P_2,
2464 EVEX_W_0F38A3_P_2,
2465 EVEX_W_0F38C7_R_1_P_2,
2466 EVEX_W_0F38C7_R_2_P_2,
2467 EVEX_W_0F38C7_R_5_P_2,
2468 EVEX_W_0F38C7_R_6_P_2,
2469
2470 EVEX_W_0F3A00_P_2,
2471 EVEX_W_0F3A01_P_2,
2472 EVEX_W_0F3A04_P_2,
2473 EVEX_W_0F3A05_P_2,
2474 EVEX_W_0F3A08_P_2,
2475 EVEX_W_0F3A09_P_2,
2476 EVEX_W_0F3A0A_P_2,
2477 EVEX_W_0F3A0B_P_2,
90a915bf 2478 EVEX_W_0F3A16_P_2,
43234a1e
L
2479 EVEX_W_0F3A18_P_2,
2480 EVEX_W_0F3A19_P_2,
2481 EVEX_W_0F3A1A_P_2,
2482 EVEX_W_0F3A1B_P_2,
2483 EVEX_W_0F3A1D_P_2,
2484 EVEX_W_0F3A21_P_2,
90a915bf 2485 EVEX_W_0F3A22_P_2,
43234a1e
L
2486 EVEX_W_0F3A23_P_2,
2487 EVEX_W_0F3A38_P_2,
2488 EVEX_W_0F3A39_P_2,
2489 EVEX_W_0F3A3A_P_2,
2490 EVEX_W_0F3A3B_P_2,
1ba585e8
IT
2491 EVEX_W_0F3A3E_P_2,
2492 EVEX_W_0F3A3F_P_2,
2493 EVEX_W_0F3A42_P_2,
90a915bf
IT
2494 EVEX_W_0F3A43_P_2,
2495 EVEX_W_0F3A50_P_2,
2496 EVEX_W_0F3A51_P_2,
2497 EVEX_W_0F3A56_P_2,
2498 EVEX_W_0F3A57_P_2,
2499 EVEX_W_0F3A66_P_2,
53467f57
IT
2500 EVEX_W_0F3A67_P_2,
2501 EVEX_W_0F3A70_P_2,
2502 EVEX_W_0F3A71_P_2,
2503 EVEX_W_0F3A72_P_2,
48521003
IT
2504 EVEX_W_0F3A73_P_2,
2505 EVEX_W_0F3ACE_P_2,
2506 EVEX_W_0F3ACF_P_2
9e30b8e0
L
2507};
2508
26ca5450 2509typedef void (*op_rtn) (int bytemode, int sizeflag);
252b5132
RH
2510
2511struct dis386 {
2da11e11 2512 const char *name;
ce518a5f
L
2513 struct
2514 {
2515 op_rtn rtn;
2516 int bytemode;
2517 } op[MAX_OPERANDS];
bf890a93 2518 unsigned int prefix_requirement;
252b5132
RH
2519};
2520
2521/* Upper case letters in the instruction names here are macros.
2522 'A' => print 'b' if no register operands or suffix_always is true
2523 'B' => print 'b' if suffix_always is true
9306ca4a 2524 'C' => print 's' or 'l' ('w' or 'd' in Intel mode) depending on operand
98b528ac 2525 size prefix
ed7841b3 2526 'D' => print 'w' if no register operands or 'w', 'l' or 'q', if
98b528ac 2527 suffix_always is true
252b5132 2528 'E' => print 'e' if 32-bit form of jcxz
3ffd33cf 2529 'F' => print 'w' or 'l' depending on address size prefix (loop insns)
52fd6d94 2530 'G' => print 'w' or 'l' depending on operand size prefix (i/o insns)
5dd0794d 2531 'H' => print ",pt" or ",pn" branch hint
9306ca4a 2532 'I' => honor following macro letter even in Intel mode (implemented only
98b528ac 2533 for some of the macro letters)
9306ca4a 2534 'J' => print 'l'
42903f7f 2535 'K' => print 'd' or 'q' if rex prefix is present.
252b5132 2536 'L' => print 'l' if suffix_always is true
9d141669 2537 'M' => print 'r' if intel_mnemonic is false.
252b5132 2538 'N' => print 'n' if instruction has no wait "prefix"
a35ca55a 2539 'O' => print 'd' or 'o' (or 'q' in Intel mode)
52b15da3 2540 'P' => print 'w', 'l' or 'q' if instruction has an operand size prefix,
98b528ac
L
2541 or suffix_always is true. print 'q' if rex prefix is present.
2542 'Q' => print 'w', 'l' or 'q' for memory operand or suffix_always
2543 is true
a35ca55a 2544 'R' => print 'w', 'l' or 'q' ('d' for 'l' and 'e' in Intel mode)
52b15da3 2545 'S' => print 'w', 'l' or 'q' if suffix_always is true
a72d2af2
L
2546 'T' => print 'q' in 64bit mode if instruction has no operand size
2547 prefix and behave as 'P' otherwise
2548 'U' => print 'q' in 64bit mode if instruction has no operand size
2549 prefix and behave as 'Q' otherwise
2550 'V' => print 'q' in 64bit mode if instruction has no operand size
2551 prefix and behave as 'S' otherwise
a35ca55a 2552 'W' => print 'b', 'w' or 'l' ('d' in Intel mode)
9306ca4a 2553 'X' => print 's', 'd' depending on data16 prefix (for XMM)
9646c87b 2554 'Y' unused.
6dd5059a 2555 'Z' => print 'q' in 64bit mode and behave as 'L' otherwise
9d141669 2556 '!' => change condition from true to false or from false to true.
98b528ac 2557 '%' => add 1 upper case letter to the macro.
a72d2af2
L
2558 '^' => print 'w' or 'l' depending on operand size prefix or
2559 suffix_always is true (lcall/ljmp).
5db04b09
L
2560 '@' => print 'q' for Intel64 ISA, 'w' or 'q' for AMD64 ISA depending
2561 on operand size prefix.
07f5af7d
L
2562 '&' => print 'q' in 64bit mode for Intel64 ISA or if instruction
2563 has no operand size prefix for AMD64 ISA, behave as 'P'
2564 otherwise
98b528ac
L
2565
2566 2 upper case letter macros:
04d824a4
JB
2567 "XY" => print 'x' or 'y' if suffix_always is true or no register
2568 operands and no broadcast.
2569 "XZ" => print 'x', 'y', or 'z' if suffix_always is true or no
2570 register operands and no broadcast.
4b06377f
L
2571 "XW" => print 's', 'd' depending on the VEX.W bit (for FMA)
2572 "LQ" => print 'l' ('d' in Intel mode) or 'q' for memory operand
98b528ac 2573 or suffix_always is true
4b06377f
L
2574 "LB" => print "abs" in 64bit mode and behave as 'B' otherwise
2575 "LS" => print "abs" in 64bit mode and behave as 'S' otherwise
2576 "LV" => print "abs" for 64bit operand and behave as 'S' otherwise
6c30d220 2577 "LW" => print 'd', 'q' depending on the VEX.W bit
4b4c407a
L
2578 "LP" => print 'w' or 'l' ('d' in Intel mode) if instruction has
2579 an operand size prefix, or suffix_always is true. print
2580 'q' if rex prefix is present.
52b15da3 2581
6439fc28
AM
2582 Many of the above letters print nothing in Intel mode. See "putop"
2583 for the details.
52b15da3 2584
6439fc28 2585 Braces '{' and '}', and vertical bars '|', indicate alternative
7c52e0e8 2586 mnemonic strings for AT&T and Intel. */
252b5132 2587
6439fc28 2588static const struct dis386 dis386[] = {
252b5132 2589 /* 00 */
bf890a93
IT
2590 { "addB", { Ebh1, Gb }, 0 },
2591 { "addS", { Evh1, Gv }, 0 },
2592 { "addB", { Gb, EbS }, 0 },
2593 { "addS", { Gv, EvS }, 0 },
2594 { "addB", { AL, Ib }, 0 },
2595 { "addS", { eAX, Iv }, 0 },
4e7d34a6
L
2596 { X86_64_TABLE (X86_64_06) },
2597 { X86_64_TABLE (X86_64_07) },
252b5132 2598 /* 08 */
bf890a93
IT
2599 { "orB", { Ebh1, Gb }, 0 },
2600 { "orS", { Evh1, Gv }, 0 },
2601 { "orB", { Gb, EbS }, 0 },
2602 { "orS", { Gv, EvS }, 0 },
2603 { "orB", { AL, Ib }, 0 },
2604 { "orS", { eAX, Iv }, 0 },
4e7d34a6 2605 { X86_64_TABLE (X86_64_0D) },
592d1631 2606 { Bad_Opcode }, /* 0x0f extended opcode escape */
252b5132 2607 /* 10 */
bf890a93
IT
2608 { "adcB", { Ebh1, Gb }, 0 },
2609 { "adcS", { Evh1, Gv }, 0 },
2610 { "adcB", { Gb, EbS }, 0 },
2611 { "adcS", { Gv, EvS }, 0 },
2612 { "adcB", { AL, Ib }, 0 },
2613 { "adcS", { eAX, Iv }, 0 },
4e7d34a6
L
2614 { X86_64_TABLE (X86_64_16) },
2615 { X86_64_TABLE (X86_64_17) },
252b5132 2616 /* 18 */
bf890a93
IT
2617 { "sbbB", { Ebh1, Gb }, 0 },
2618 { "sbbS", { Evh1, Gv }, 0 },
2619 { "sbbB", { Gb, EbS }, 0 },
2620 { "sbbS", { Gv, EvS }, 0 },
2621 { "sbbB", { AL, Ib }, 0 },
2622 { "sbbS", { eAX, Iv }, 0 },
4e7d34a6
L
2623 { X86_64_TABLE (X86_64_1E) },
2624 { X86_64_TABLE (X86_64_1F) },
252b5132 2625 /* 20 */
bf890a93
IT
2626 { "andB", { Ebh1, Gb }, 0 },
2627 { "andS", { Evh1, Gv }, 0 },
2628 { "andB", { Gb, EbS }, 0 },
2629 { "andS", { Gv, EvS }, 0 },
2630 { "andB", { AL, Ib }, 0 },
2631 { "andS", { eAX, Iv }, 0 },
592d1631 2632 { Bad_Opcode }, /* SEG ES prefix */
4e7d34a6 2633 { X86_64_TABLE (X86_64_27) },
252b5132 2634 /* 28 */
bf890a93
IT
2635 { "subB", { Ebh1, Gb }, 0 },
2636 { "subS", { Evh1, Gv }, 0 },
2637 { "subB", { Gb, EbS }, 0 },
2638 { "subS", { Gv, EvS }, 0 },
2639 { "subB", { AL, Ib }, 0 },
2640 { "subS", { eAX, Iv }, 0 },
592d1631 2641 { Bad_Opcode }, /* SEG CS prefix */
4e7d34a6 2642 { X86_64_TABLE (X86_64_2F) },
252b5132 2643 /* 30 */
bf890a93
IT
2644 { "xorB", { Ebh1, Gb }, 0 },
2645 { "xorS", { Evh1, Gv }, 0 },
2646 { "xorB", { Gb, EbS }, 0 },
2647 { "xorS", { Gv, EvS }, 0 },
2648 { "xorB", { AL, Ib }, 0 },
2649 { "xorS", { eAX, Iv }, 0 },
592d1631 2650 { Bad_Opcode }, /* SEG SS prefix */
4e7d34a6 2651 { X86_64_TABLE (X86_64_37) },
252b5132 2652 /* 38 */
bf890a93
IT
2653 { "cmpB", { Eb, Gb }, 0 },
2654 { "cmpS", { Ev, Gv }, 0 },
2655 { "cmpB", { Gb, EbS }, 0 },
2656 { "cmpS", { Gv, EvS }, 0 },
2657 { "cmpB", { AL, Ib }, 0 },
2658 { "cmpS", { eAX, Iv }, 0 },
592d1631 2659 { Bad_Opcode }, /* SEG DS prefix */
4e7d34a6 2660 { X86_64_TABLE (X86_64_3F) },
252b5132 2661 /* 40 */
bf890a93
IT
2662 { "inc{S|}", { RMeAX }, 0 },
2663 { "inc{S|}", { RMeCX }, 0 },
2664 { "inc{S|}", { RMeDX }, 0 },
2665 { "inc{S|}", { RMeBX }, 0 },
2666 { "inc{S|}", { RMeSP }, 0 },
2667 { "inc{S|}", { RMeBP }, 0 },
2668 { "inc{S|}", { RMeSI }, 0 },
2669 { "inc{S|}", { RMeDI }, 0 },
252b5132 2670 /* 48 */
bf890a93
IT
2671 { "dec{S|}", { RMeAX }, 0 },
2672 { "dec{S|}", { RMeCX }, 0 },
2673 { "dec{S|}", { RMeDX }, 0 },
2674 { "dec{S|}", { RMeBX }, 0 },
2675 { "dec{S|}", { RMeSP }, 0 },
2676 { "dec{S|}", { RMeBP }, 0 },
2677 { "dec{S|}", { RMeSI }, 0 },
2678 { "dec{S|}", { RMeDI }, 0 },
252b5132 2679 /* 50 */
bf890a93
IT
2680 { "pushV", { RMrAX }, 0 },
2681 { "pushV", { RMrCX }, 0 },
2682 { "pushV", { RMrDX }, 0 },
2683 { "pushV", { RMrBX }, 0 },
2684 { "pushV", { RMrSP }, 0 },
2685 { "pushV", { RMrBP }, 0 },
2686 { "pushV", { RMrSI }, 0 },
2687 { "pushV", { RMrDI }, 0 },
252b5132 2688 /* 58 */
bf890a93
IT
2689 { "popV", { RMrAX }, 0 },
2690 { "popV", { RMrCX }, 0 },
2691 { "popV", { RMrDX }, 0 },
2692 { "popV", { RMrBX }, 0 },
2693 { "popV", { RMrSP }, 0 },
2694 { "popV", { RMrBP }, 0 },
2695 { "popV", { RMrSI }, 0 },
2696 { "popV", { RMrDI }, 0 },
252b5132 2697 /* 60 */
4e7d34a6
L
2698 { X86_64_TABLE (X86_64_60) },
2699 { X86_64_TABLE (X86_64_61) },
2700 { X86_64_TABLE (X86_64_62) },
2701 { X86_64_TABLE (X86_64_63) },
592d1631
L
2702 { Bad_Opcode }, /* seg fs */
2703 { Bad_Opcode }, /* seg gs */
2704 { Bad_Opcode }, /* op size prefix */
2705 { Bad_Opcode }, /* adr size prefix */
252b5132 2706 /* 68 */
bf890a93
IT
2707 { "pushT", { sIv }, 0 },
2708 { "imulS", { Gv, Ev, Iv }, 0 },
2709 { "pushT", { sIbT }, 0 },
2710 { "imulS", { Gv, Ev, sIb }, 0 },
2711 { "ins{b|}", { Ybr, indirDX }, 0 },
4e7d34a6 2712 { X86_64_TABLE (X86_64_6D) },
bf890a93 2713 { "outs{b|}", { indirDXr, Xb }, 0 },
4e7d34a6 2714 { X86_64_TABLE (X86_64_6F) },
252b5132 2715 /* 70 */
bf890a93
IT
2716 { "joH", { Jb, BND, cond_jump_flag }, 0 },
2717 { "jnoH", { Jb, BND, cond_jump_flag }, 0 },
2718 { "jbH", { Jb, BND, cond_jump_flag }, 0 },
2719 { "jaeH", { Jb, BND, cond_jump_flag }, 0 },
2720 { "jeH", { Jb, BND, cond_jump_flag }, 0 },
2721 { "jneH", { Jb, BND, cond_jump_flag }, 0 },
2722 { "jbeH", { Jb, BND, cond_jump_flag }, 0 },
2723 { "jaH", { Jb, BND, cond_jump_flag }, 0 },
252b5132 2724 /* 78 */
bf890a93
IT
2725 { "jsH", { Jb, BND, cond_jump_flag }, 0 },
2726 { "jnsH", { Jb, BND, cond_jump_flag }, 0 },
2727 { "jpH", { Jb, BND, cond_jump_flag }, 0 },
2728 { "jnpH", { Jb, BND, cond_jump_flag }, 0 },
2729 { "jlH", { Jb, BND, cond_jump_flag }, 0 },
2730 { "jgeH", { Jb, BND, cond_jump_flag }, 0 },
2731 { "jleH", { Jb, BND, cond_jump_flag }, 0 },
2732 { "jgH", { Jb, BND, cond_jump_flag }, 0 },
252b5132 2733 /* 80 */
1ceb70f8
L
2734 { REG_TABLE (REG_80) },
2735 { REG_TABLE (REG_81) },
d039fef3 2736 { X86_64_TABLE (X86_64_82) },
7148c369 2737 { REG_TABLE (REG_83) },
bf890a93
IT
2738 { "testB", { Eb, Gb }, 0 },
2739 { "testS", { Ev, Gv }, 0 },
2740 { "xchgB", { Ebh2, Gb }, 0 },
2741 { "xchgS", { Evh2, Gv }, 0 },
252b5132 2742 /* 88 */
bf890a93
IT
2743 { "movB", { Ebh3, Gb }, 0 },
2744 { "movS", { Evh3, Gv }, 0 },
2745 { "movB", { Gb, EbS }, 0 },
2746 { "movS", { Gv, EvS }, 0 },
2747 { "movD", { Sv, Sw }, 0 },
1ceb70f8 2748 { MOD_TABLE (MOD_8D) },
bf890a93 2749 { "movD", { Sw, Sv }, 0 },
1ceb70f8 2750 { REG_TABLE (REG_8F) },
252b5132 2751 /* 90 */
1ceb70f8 2752 { PREFIX_TABLE (PREFIX_90) },
bf890a93
IT
2753 { "xchgS", { RMeCX, eAX }, 0 },
2754 { "xchgS", { RMeDX, eAX }, 0 },
2755 { "xchgS", { RMeBX, eAX }, 0 },
2756 { "xchgS", { RMeSP, eAX }, 0 },
2757 { "xchgS", { RMeBP, eAX }, 0 },
2758 { "xchgS", { RMeSI, eAX }, 0 },
2759 { "xchgS", { RMeDI, eAX }, 0 },
252b5132 2760 /* 98 */
bf890a93
IT
2761 { "cW{t|}R", { XX }, 0 },
2762 { "cR{t|}O", { XX }, 0 },
4e7d34a6 2763 { X86_64_TABLE (X86_64_9A) },
592d1631 2764 { Bad_Opcode }, /* fwait */
bf890a93
IT
2765 { "pushfT", { XX }, 0 },
2766 { "popfT", { XX }, 0 },
2767 { "sahf", { XX }, 0 },
2768 { "lahf", { XX }, 0 },
252b5132 2769 /* a0 */
bf890a93
IT
2770 { "mov%LB", { AL, Ob }, 0 },
2771 { "mov%LS", { eAX, Ov }, 0 },
2772 { "mov%LB", { Ob, AL }, 0 },
2773 { "mov%LS", { Ov, eAX }, 0 },
2774 { "movs{b|}", { Ybr, Xb }, 0 },
2775 { "movs{R|}", { Yvr, Xv }, 0 },
2776 { "cmps{b|}", { Xb, Yb }, 0 },
2777 { "cmps{R|}", { Xv, Yv }, 0 },
252b5132 2778 /* a8 */
bf890a93
IT
2779 { "testB", { AL, Ib }, 0 },
2780 { "testS", { eAX, Iv }, 0 },
2781 { "stosB", { Ybr, AL }, 0 },
2782 { "stosS", { Yvr, eAX }, 0 },
2783 { "lodsB", { ALr, Xb }, 0 },
2784 { "lodsS", { eAXr, Xv }, 0 },
2785 { "scasB", { AL, Yb }, 0 },
2786 { "scasS", { eAX, Yv }, 0 },
252b5132 2787 /* b0 */
bf890a93
IT
2788 { "movB", { RMAL, Ib }, 0 },
2789 { "movB", { RMCL, Ib }, 0 },
2790 { "movB", { RMDL, Ib }, 0 },
2791 { "movB", { RMBL, Ib }, 0 },
2792 { "movB", { RMAH, Ib }, 0 },
2793 { "movB", { RMCH, Ib }, 0 },
2794 { "movB", { RMDH, Ib }, 0 },
2795 { "movB", { RMBH, Ib }, 0 },
252b5132 2796 /* b8 */
bf890a93
IT
2797 { "mov%LV", { RMeAX, Iv64 }, 0 },
2798 { "mov%LV", { RMeCX, Iv64 }, 0 },
2799 { "mov%LV", { RMeDX, Iv64 }, 0 },
2800 { "mov%LV", { RMeBX, Iv64 }, 0 },
2801 { "mov%LV", { RMeSP, Iv64 }, 0 },
2802 { "mov%LV", { RMeBP, Iv64 }, 0 },
2803 { "mov%LV", { RMeSI, Iv64 }, 0 },
2804 { "mov%LV", { RMeDI, Iv64 }, 0 },
252b5132 2805 /* c0 */
1ceb70f8
L
2806 { REG_TABLE (REG_C0) },
2807 { REG_TABLE (REG_C1) },
bf890a93
IT
2808 { "retT", { Iw, BND }, 0 },
2809 { "retT", { BND }, 0 },
4e7d34a6
L
2810 { X86_64_TABLE (X86_64_C4) },
2811 { X86_64_TABLE (X86_64_C5) },
1ceb70f8
L
2812 { REG_TABLE (REG_C6) },
2813 { REG_TABLE (REG_C7) },
252b5132 2814 /* c8 */
bf890a93
IT
2815 { "enterT", { Iw, Ib }, 0 },
2816 { "leaveT", { XX }, 0 },
2817 { "Jret{|f}P", { Iw }, 0 },
2818 { "Jret{|f}P", { XX }, 0 },
2819 { "int3", { XX }, 0 },
2820 { "int", { Ib }, 0 },
4e7d34a6 2821 { X86_64_TABLE (X86_64_CE) },
bf890a93 2822 { "iret%LP", { XX }, 0 },
252b5132 2823 /* d0 */
1ceb70f8
L
2824 { REG_TABLE (REG_D0) },
2825 { REG_TABLE (REG_D1) },
2826 { REG_TABLE (REG_D2) },
2827 { REG_TABLE (REG_D3) },
4e7d34a6
L
2828 { X86_64_TABLE (X86_64_D4) },
2829 { X86_64_TABLE (X86_64_D5) },
592d1631 2830 { Bad_Opcode },
bf890a93 2831 { "xlat", { DSBX }, 0 },
252b5132
RH
2832 /* d8 */
2833 { FLOAT },
2834 { FLOAT },
2835 { FLOAT },
2836 { FLOAT },
2837 { FLOAT },
2838 { FLOAT },
2839 { FLOAT },
2840 { FLOAT },
2841 /* e0 */
bf890a93
IT
2842 { "loopneFH", { Jb, XX, loop_jcxz_flag }, 0 },
2843 { "loopeFH", { Jb, XX, loop_jcxz_flag }, 0 },
2844 { "loopFH", { Jb, XX, loop_jcxz_flag }, 0 },
2845 { "jEcxzH", { Jb, XX, loop_jcxz_flag }, 0 },
2846 { "inB", { AL, Ib }, 0 },
2847 { "inG", { zAX, Ib }, 0 },
2848 { "outB", { Ib, AL }, 0 },
2849 { "outG", { Ib, zAX }, 0 },
252b5132 2850 /* e8 */
a72d2af2
L
2851 { X86_64_TABLE (X86_64_E8) },
2852 { X86_64_TABLE (X86_64_E9) },
4e7d34a6 2853 { X86_64_TABLE (X86_64_EA) },
bf890a93
IT
2854 { "jmp", { Jb, BND }, 0 },
2855 { "inB", { AL, indirDX }, 0 },
2856 { "inG", { zAX, indirDX }, 0 },
2857 { "outB", { indirDX, AL }, 0 },
2858 { "outG", { indirDX, zAX }, 0 },
252b5132 2859 /* f0 */
592d1631 2860 { Bad_Opcode }, /* lock prefix */
bf890a93 2861 { "icebp", { XX }, 0 },
592d1631
L
2862 { Bad_Opcode }, /* repne */
2863 { Bad_Opcode }, /* repz */
bf890a93
IT
2864 { "hlt", { XX }, 0 },
2865 { "cmc", { XX }, 0 },
1ceb70f8
L
2866 { REG_TABLE (REG_F6) },
2867 { REG_TABLE (REG_F7) },
252b5132 2868 /* f8 */
bf890a93
IT
2869 { "clc", { XX }, 0 },
2870 { "stc", { XX }, 0 },
2871 { "cli", { XX }, 0 },
2872 { "sti", { XX }, 0 },
2873 { "cld", { XX }, 0 },
2874 { "std", { XX }, 0 },
1ceb70f8
L
2875 { REG_TABLE (REG_FE) },
2876 { REG_TABLE (REG_FF) },
252b5132
RH
2877};
2878
6439fc28 2879static const struct dis386 dis386_twobyte[] = {
252b5132 2880 /* 00 */
1ceb70f8
L
2881 { REG_TABLE (REG_0F00 ) },
2882 { REG_TABLE (REG_0F01 ) },
bf890a93
IT
2883 { "larS", { Gv, Ew }, 0 },
2884 { "lslS", { Gv, Ew }, 0 },
592d1631 2885 { Bad_Opcode },
bf890a93
IT
2886 { "syscall", { XX }, 0 },
2887 { "clts", { XX }, 0 },
2888 { "sysret%LP", { XX }, 0 },
252b5132 2889 /* 08 */
bf890a93 2890 { "invd", { XX }, 0 },
3233d7d0 2891 { PREFIX_TABLE (PREFIX_0F09) },
592d1631 2892 { Bad_Opcode },
bf890a93 2893 { "ud2", { XX }, 0 },
592d1631 2894 { Bad_Opcode },
b5b1fc4f 2895 { REG_TABLE (REG_0F0D) },
bf890a93
IT
2896 { "femms", { XX }, 0 },
2897 { "", { MX, EM, OPSUF }, 0 }, /* See OP_3DNowSuffix. */
252b5132 2898 /* 10 */
1ceb70f8
L
2899 { PREFIX_TABLE (PREFIX_0F10) },
2900 { PREFIX_TABLE (PREFIX_0F11) },
2901 { PREFIX_TABLE (PREFIX_0F12) },
2902 { MOD_TABLE (MOD_0F13) },
507bd325
L
2903 { "unpcklpX", { XM, EXx }, PREFIX_OPCODE },
2904 { "unpckhpX", { XM, EXx }, PREFIX_OPCODE },
1ceb70f8
L
2905 { PREFIX_TABLE (PREFIX_0F16) },
2906 { MOD_TABLE (MOD_0F17) },
252b5132 2907 /* 18 */
1ceb70f8 2908 { REG_TABLE (REG_0F18) },
bf890a93 2909 { "nopQ", { Ev }, 0 },
7e8b059b
L
2910 { PREFIX_TABLE (PREFIX_0F1A) },
2911 { PREFIX_TABLE (PREFIX_0F1B) },
c48935d7 2912 { PREFIX_TABLE (PREFIX_0F1C) },
bf890a93 2913 { "nopQ", { Ev }, 0 },
603555e5 2914 { PREFIX_TABLE (PREFIX_0F1E) },
bf890a93 2915 { "nopQ", { Ev }, 0 },
252b5132 2916 /* 20 */
bf890a93
IT
2917 { "movZ", { Rm, Cm }, 0 },
2918 { "movZ", { Rm, Dm }, 0 },
2919 { "movZ", { Cm, Rm }, 0 },
2920 { "movZ", { Dm, Rm }, 0 },
1ceb70f8 2921 { MOD_TABLE (MOD_0F24) },
592d1631 2922 { Bad_Opcode },
1ceb70f8 2923 { MOD_TABLE (MOD_0F26) },
592d1631 2924 { Bad_Opcode },
252b5132 2925 /* 28 */
507bd325
L
2926 { "movapX", { XM, EXx }, PREFIX_OPCODE },
2927 { "movapX", { EXxS, XM }, PREFIX_OPCODE },
1ceb70f8
L
2928 { PREFIX_TABLE (PREFIX_0F2A) },
2929 { PREFIX_TABLE (PREFIX_0F2B) },
2930 { PREFIX_TABLE (PREFIX_0F2C) },
2931 { PREFIX_TABLE (PREFIX_0F2D) },
2932 { PREFIX_TABLE (PREFIX_0F2E) },
2933 { PREFIX_TABLE (PREFIX_0F2F) },
252b5132 2934 /* 30 */
bf890a93
IT
2935 { "wrmsr", { XX }, 0 },
2936 { "rdtsc", { XX }, 0 },
2937 { "rdmsr", { XX }, 0 },
2938 { "rdpmc", { XX }, 0 },
2939 { "sysenter", { XX }, 0 },
2940 { "sysexit", { XX }, 0 },
592d1631 2941 { Bad_Opcode },
bf890a93 2942 { "getsec", { XX }, 0 },
252b5132 2943 /* 38 */
507bd325 2944 { THREE_BYTE_TABLE_PREFIX (THREE_BYTE_0F38, PREFIX_OPCODE) },
592d1631 2945 { Bad_Opcode },
507bd325 2946 { THREE_BYTE_TABLE_PREFIX (THREE_BYTE_0F3A, PREFIX_OPCODE) },
592d1631
L
2947 { Bad_Opcode },
2948 { Bad_Opcode },
2949 { Bad_Opcode },
2950 { Bad_Opcode },
2951 { Bad_Opcode },
252b5132 2952 /* 40 */
bf890a93
IT
2953 { "cmovoS", { Gv, Ev }, 0 },
2954 { "cmovnoS", { Gv, Ev }, 0 },
2955 { "cmovbS", { Gv, Ev }, 0 },
2956 { "cmovaeS", { Gv, Ev }, 0 },
2957 { "cmoveS", { Gv, Ev }, 0 },
2958 { "cmovneS", { Gv, Ev }, 0 },
2959 { "cmovbeS", { Gv, Ev }, 0 },
2960 { "cmovaS", { Gv, Ev }, 0 },
252b5132 2961 /* 48 */
bf890a93
IT
2962 { "cmovsS", { Gv, Ev }, 0 },
2963 { "cmovnsS", { Gv, Ev }, 0 },
2964 { "cmovpS", { Gv, Ev }, 0 },
2965 { "cmovnpS", { Gv, Ev }, 0 },
2966 { "cmovlS", { Gv, Ev }, 0 },
2967 { "cmovgeS", { Gv, Ev }, 0 },
2968 { "cmovleS", { Gv, Ev }, 0 },
2969 { "cmovgS", { Gv, Ev }, 0 },
252b5132 2970 /* 50 */
75c135a8 2971 { MOD_TABLE (MOD_0F51) },
1ceb70f8
L
2972 { PREFIX_TABLE (PREFIX_0F51) },
2973 { PREFIX_TABLE (PREFIX_0F52) },
2974 { PREFIX_TABLE (PREFIX_0F53) },
507bd325
L
2975 { "andpX", { XM, EXx }, PREFIX_OPCODE },
2976 { "andnpX", { XM, EXx }, PREFIX_OPCODE },
2977 { "orpX", { XM, EXx }, PREFIX_OPCODE },
2978 { "xorpX", { XM, EXx }, PREFIX_OPCODE },
252b5132 2979 /* 58 */
1ceb70f8
L
2980 { PREFIX_TABLE (PREFIX_0F58) },
2981 { PREFIX_TABLE (PREFIX_0F59) },
2982 { PREFIX_TABLE (PREFIX_0F5A) },
2983 { PREFIX_TABLE (PREFIX_0F5B) },
2984 { PREFIX_TABLE (PREFIX_0F5C) },
2985 { PREFIX_TABLE (PREFIX_0F5D) },
2986 { PREFIX_TABLE (PREFIX_0F5E) },
2987 { PREFIX_TABLE (PREFIX_0F5F) },
252b5132 2988 /* 60 */
1ceb70f8
L
2989 { PREFIX_TABLE (PREFIX_0F60) },
2990 { PREFIX_TABLE (PREFIX_0F61) },
2991 { PREFIX_TABLE (PREFIX_0F62) },
507bd325
L
2992 { "packsswb", { MX, EM }, PREFIX_OPCODE },
2993 { "pcmpgtb", { MX, EM }, PREFIX_OPCODE },
2994 { "pcmpgtw", { MX, EM }, PREFIX_OPCODE },
2995 { "pcmpgtd", { MX, EM }, PREFIX_OPCODE },
2996 { "packuswb", { MX, EM }, PREFIX_OPCODE },
252b5132 2997 /* 68 */
507bd325
L
2998 { "punpckhbw", { MX, EM }, PREFIX_OPCODE },
2999 { "punpckhwd", { MX, EM }, PREFIX_OPCODE },
3000 { "punpckhdq", { MX, EM }, PREFIX_OPCODE },
3001 { "packssdw", { MX, EM }, PREFIX_OPCODE },
1ceb70f8
L
3002 { PREFIX_TABLE (PREFIX_0F6C) },
3003 { PREFIX_TABLE (PREFIX_0F6D) },
507bd325 3004 { "movK", { MX, Edq }, PREFIX_OPCODE },
1ceb70f8 3005 { PREFIX_TABLE (PREFIX_0F6F) },
252b5132 3006 /* 70 */
1ceb70f8
L
3007 { PREFIX_TABLE (PREFIX_0F70) },
3008 { REG_TABLE (REG_0F71) },
3009 { REG_TABLE (REG_0F72) },
3010 { REG_TABLE (REG_0F73) },
507bd325
L
3011 { "pcmpeqb", { MX, EM }, PREFIX_OPCODE },
3012 { "pcmpeqw", { MX, EM }, PREFIX_OPCODE },
3013 { "pcmpeqd", { MX, EM }, PREFIX_OPCODE },
3014 { "emms", { XX }, PREFIX_OPCODE },
252b5132 3015 /* 78 */
1ceb70f8
L
3016 { PREFIX_TABLE (PREFIX_0F78) },
3017 { PREFIX_TABLE (PREFIX_0F79) },
1f334aeb 3018 { Bad_Opcode },
592d1631 3019 { Bad_Opcode },
1ceb70f8
L
3020 { PREFIX_TABLE (PREFIX_0F7C) },
3021 { PREFIX_TABLE (PREFIX_0F7D) },
3022 { PREFIX_TABLE (PREFIX_0F7E) },
3023 { PREFIX_TABLE (PREFIX_0F7F) },
252b5132 3024 /* 80 */
bf890a93
IT
3025 { "joH", { Jv, BND, cond_jump_flag }, 0 },
3026 { "jnoH", { Jv, BND, cond_jump_flag }, 0 },
3027 { "jbH", { Jv, BND, cond_jump_flag }, 0 },
3028 { "jaeH", { Jv, BND, cond_jump_flag }, 0 },
3029 { "jeH", { Jv, BND, cond_jump_flag }, 0 },
3030 { "jneH", { Jv, BND, cond_jump_flag }, 0 },
3031 { "jbeH", { Jv, BND, cond_jump_flag }, 0 },
3032 { "jaH", { Jv, BND, cond_jump_flag }, 0 },
252b5132 3033 /* 88 */
bf890a93
IT
3034 { "jsH", { Jv, BND, cond_jump_flag }, 0 },
3035 { "jnsH", { Jv, BND, cond_jump_flag }, 0 },
3036 { "jpH", { Jv, BND, cond_jump_flag }, 0 },
3037 { "jnpH", { Jv, BND, cond_jump_flag }, 0 },
3038 { "jlH", { Jv, BND, cond_jump_flag }, 0 },
3039 { "jgeH", { Jv, BND, cond_jump_flag }, 0 },
3040 { "jleH", { Jv, BND, cond_jump_flag }, 0 },
3041 { "jgH", { Jv, BND, cond_jump_flag }, 0 },
252b5132 3042 /* 90 */
bf890a93
IT
3043 { "seto", { Eb }, 0 },
3044 { "setno", { Eb }, 0 },
3045 { "setb", { Eb }, 0 },
3046 { "setae", { Eb }, 0 },
3047 { "sete", { Eb }, 0 },
3048 { "setne", { Eb }, 0 },
3049 { "setbe", { Eb }, 0 },
3050 { "seta", { Eb }, 0 },
252b5132 3051 /* 98 */
bf890a93
IT
3052 { "sets", { Eb }, 0 },
3053 { "setns", { Eb }, 0 },
3054 { "setp", { Eb }, 0 },
3055 { "setnp", { Eb }, 0 },
3056 { "setl", { Eb }, 0 },
3057 { "setge", { Eb }, 0 },
3058 { "setle", { Eb }, 0 },
3059 { "setg", { Eb }, 0 },
252b5132 3060 /* a0 */
bf890a93
IT
3061 { "pushT", { fs }, 0 },
3062 { "popT", { fs }, 0 },
3063 { "cpuid", { XX }, 0 },
3064 { "btS", { Ev, Gv }, 0 },
3065 { "shldS", { Ev, Gv, Ib }, 0 },
3066 { "shldS", { Ev, Gv, CL }, 0 },
1ceb70f8
L
3067 { REG_TABLE (REG_0FA6) },
3068 { REG_TABLE (REG_0FA7) },
252b5132 3069 /* a8 */
bf890a93
IT
3070 { "pushT", { gs }, 0 },
3071 { "popT", { gs }, 0 },
3072 { "rsm", { XX }, 0 },
3073 { "btsS", { Evh1, Gv }, 0 },
3074 { "shrdS", { Ev, Gv, Ib }, 0 },
3075 { "shrdS", { Ev, Gv, CL }, 0 },
1ceb70f8 3076 { REG_TABLE (REG_0FAE) },
bf890a93 3077 { "imulS", { Gv, Ev }, 0 },
252b5132 3078 /* b0 */
bf890a93
IT
3079 { "cmpxchgB", { Ebh1, Gb }, 0 },
3080 { "cmpxchgS", { Evh1, Gv }, 0 },
1ceb70f8 3081 { MOD_TABLE (MOD_0FB2) },
bf890a93 3082 { "btrS", { Evh1, Gv }, 0 },
1ceb70f8
L
3083 { MOD_TABLE (MOD_0FB4) },
3084 { MOD_TABLE (MOD_0FB5) },
bf890a93
IT
3085 { "movz{bR|x}", { Gv, Eb }, 0 },
3086 { "movz{wR|x}", { Gv, Ew }, 0 }, /* yes, there really is movzww ! */
252b5132 3087 /* b8 */
1ceb70f8 3088 { PREFIX_TABLE (PREFIX_0FB8) },
66f1eba0 3089 { "ud1S", { Gv, Ev }, 0 },
1ceb70f8 3090 { REG_TABLE (REG_0FBA) },
bf890a93 3091 { "btcS", { Evh1, Gv }, 0 },
f12dc422 3092 { PREFIX_TABLE (PREFIX_0FBC) },
1ceb70f8 3093 { PREFIX_TABLE (PREFIX_0FBD) },
bf890a93
IT
3094 { "movs{bR|x}", { Gv, Eb }, 0 },
3095 { "movs{wR|x}", { Gv, Ew }, 0 }, /* yes, there really is movsww ! */
252b5132 3096 /* c0 */
bf890a93
IT
3097 { "xaddB", { Ebh1, Gb }, 0 },
3098 { "xaddS", { Evh1, Gv }, 0 },
1ceb70f8 3099 { PREFIX_TABLE (PREFIX_0FC2) },
a8484f96 3100 { MOD_TABLE (MOD_0FC3) },
507bd325
L
3101 { "pinsrw", { MX, Edqw, Ib }, PREFIX_OPCODE },
3102 { "pextrw", { Gdq, MS, Ib }, PREFIX_OPCODE },
3103 { "shufpX", { XM, EXx, Ib }, PREFIX_OPCODE },
1ceb70f8 3104 { REG_TABLE (REG_0FC7) },
252b5132 3105 /* c8 */
bf890a93
IT
3106 { "bswap", { RMeAX }, 0 },
3107 { "bswap", { RMeCX }, 0 },
3108 { "bswap", { RMeDX }, 0 },
3109 { "bswap", { RMeBX }, 0 },
3110 { "bswap", { RMeSP }, 0 },
3111 { "bswap", { RMeBP }, 0 },
3112 { "bswap", { RMeSI }, 0 },
3113 { "bswap", { RMeDI }, 0 },
252b5132 3114 /* d0 */
1ceb70f8 3115 { PREFIX_TABLE (PREFIX_0FD0) },
507bd325
L
3116 { "psrlw", { MX, EM }, PREFIX_OPCODE },
3117 { "psrld", { MX, EM }, PREFIX_OPCODE },
3118 { "psrlq", { MX, EM }, PREFIX_OPCODE },
3119 { "paddq", { MX, EM }, PREFIX_OPCODE },
3120 { "pmullw", { MX, EM }, PREFIX_OPCODE },
1ceb70f8 3121 { PREFIX_TABLE (PREFIX_0FD6) },
75c135a8 3122 { MOD_TABLE (MOD_0FD7) },
252b5132 3123 /* d8 */
507bd325
L
3124 { "psubusb", { MX, EM }, PREFIX_OPCODE },
3125 { "psubusw", { MX, EM }, PREFIX_OPCODE },
3126 { "pminub", { MX, EM }, PREFIX_OPCODE },
3127 { "pand", { MX, EM }, PREFIX_OPCODE },
3128 { "paddusb", { MX, EM }, PREFIX_OPCODE },
3129 { "paddusw", { MX, EM }, PREFIX_OPCODE },
3130 { "pmaxub", { MX, EM }, PREFIX_OPCODE },
3131 { "pandn", { MX, EM }, PREFIX_OPCODE },
252b5132 3132 /* e0 */
507bd325
L
3133 { "pavgb", { MX, EM }, PREFIX_OPCODE },
3134 { "psraw", { MX, EM }, PREFIX_OPCODE },
3135 { "psrad", { MX, EM }, PREFIX_OPCODE },
3136 { "pavgw", { MX, EM }, PREFIX_OPCODE },
3137 { "pmulhuw", { MX, EM }, PREFIX_OPCODE },
3138 { "pmulhw", { MX, EM }, PREFIX_OPCODE },
1ceb70f8
L
3139 { PREFIX_TABLE (PREFIX_0FE6) },
3140 { PREFIX_TABLE (PREFIX_0FE7) },
252b5132 3141 /* e8 */
507bd325
L
3142 { "psubsb", { MX, EM }, PREFIX_OPCODE },
3143 { "psubsw", { MX, EM }, PREFIX_OPCODE },
3144 { "pminsw", { MX, EM }, PREFIX_OPCODE },
3145 { "por", { MX, EM }, PREFIX_OPCODE },
3146 { "paddsb", { MX, EM }, PREFIX_OPCODE },
3147 { "paddsw", { MX, EM }, PREFIX_OPCODE },
3148 { "pmaxsw", { MX, EM }, PREFIX_OPCODE },
3149 { "pxor", { MX, EM }, PREFIX_OPCODE },
252b5132 3150 /* f0 */
1ceb70f8 3151 { PREFIX_TABLE (PREFIX_0FF0) },
507bd325
L
3152 { "psllw", { MX, EM }, PREFIX_OPCODE },
3153 { "pslld", { MX, EM }, PREFIX_OPCODE },
3154 { "psllq", { MX, EM }, PREFIX_OPCODE },
3155 { "pmuludq", { MX, EM }, PREFIX_OPCODE },
3156 { "pmaddwd", { MX, EM }, PREFIX_OPCODE },
3157 { "psadbw", { MX, EM }, PREFIX_OPCODE },
1ceb70f8 3158 { PREFIX_TABLE (PREFIX_0FF7) },
252b5132 3159 /* f8 */
507bd325
L
3160 { "psubb", { MX, EM }, PREFIX_OPCODE },
3161 { "psubw", { MX, EM }, PREFIX_OPCODE },
3162 { "psubd", { MX, EM }, PREFIX_OPCODE },
3163 { "psubq", { MX, EM }, PREFIX_OPCODE },
3164 { "paddb", { MX, EM }, PREFIX_OPCODE },
3165 { "paddw", { MX, EM }, PREFIX_OPCODE },
3166 { "paddd", { MX, EM }, PREFIX_OPCODE },
66f1eba0 3167 { "ud0S", { Gv, Ev }, 0 },
252b5132
RH
3168};
3169
3170static const unsigned char onebyte_has_modrm[256] = {
c608c12e
AM
3171 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
3172 /* ------------------------------- */
3173 /* 00 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 00 */
3174 /* 10 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 10 */
3175 /* 20 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 20 */
3176 /* 30 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 30 */
3177 /* 40 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 40 */
3178 /* 50 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 50 */
3179 /* 60 */ 0,0,1,1,0,0,0,0,0,1,0,1,0,0,0,0, /* 60 */
3180 /* 70 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 70 */
3181 /* 80 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 80 */
3182 /* 90 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 90 */
3183 /* a0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* a0 */
3184 /* b0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* b0 */
3185 /* c0 */ 1,1,0,0,1,1,1,1,0,0,0,0,0,0,0,0, /* c0 */
3186 /* d0 */ 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1, /* d0 */
3187 /* e0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* e0 */
3188 /* f0 */ 0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1 /* f0 */
3189 /* ------------------------------- */
3190 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
252b5132
RH
3191};
3192
3193static const unsigned char twobyte_has_modrm[256] = {
c608c12e
AM
3194 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
3195 /* ------------------------------- */
252b5132 3196 /* 00 */ 1,1,1,1,0,0,0,0,0,0,0,0,0,1,0,1, /* 0f */
b5b1fc4f 3197 /* 10 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 1f */
85f10a01 3198 /* 20 */ 1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1, /* 2f */
331d2d0d 3199 /* 30 */ 0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0, /* 3f */
252b5132 3200 /* 40 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 4f */
4bba6815
AM
3201 /* 50 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 5f */
3202 /* 60 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 6f */
85f10a01 3203 /* 70 */ 1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1, /* 7f */
252b5132
RH
3204 /* 80 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 8f */
3205 /* 90 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 9f */
30d1c836 3206 /* a0 */ 0,0,0,1,1,1,1,1,0,0,0,1,1,1,1,1, /* af */
66f1eba0 3207 /* b0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* bf */
252b5132 3208 /* c0 */ 1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0, /* cf */
ca164297 3209 /* d0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* df */
4bba6815 3210 /* e0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* ef */
66f1eba0 3211 /* f0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 /* ff */
c608c12e
AM
3212 /* ------------------------------- */
3213 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
3214};
3215
252b5132
RH
3216static char obuf[100];
3217static char *obufp;
ea397f5b 3218static char *mnemonicendp;
252b5132
RH
3219static char scratchbuf[100];
3220static unsigned char *start_codep;
3221static unsigned char *insn_codep;
3222static unsigned char *codep;
285ca992 3223static unsigned char *end_codep;
f16cd0d5
L
3224static int last_lock_prefix;
3225static int last_repz_prefix;
3226static int last_repnz_prefix;
3227static int last_data_prefix;
3228static int last_addr_prefix;
3229static int last_rex_prefix;
3230static int last_seg_prefix;
d9949a36 3231static int fwait_prefix;
285ca992
L
3232/* The active segment register prefix. */
3233static int active_seg_prefix;
f16cd0d5
L
3234#define MAX_CODE_LENGTH 15
3235/* We can up to 14 prefixes since the maximum instruction length is
3236 15bytes. */
3237static int all_prefixes[MAX_CODE_LENGTH - 1];
252b5132 3238static disassemble_info *the_info;
7967e09e
L
3239static struct
3240 {
3241 int mod;
7967e09e 3242 int reg;
484c222e 3243 int rm;
7967e09e
L
3244 }
3245modrm;
4bba6815 3246static unsigned char need_modrm;
dfc8cf43
L
3247static struct
3248 {
3249 int scale;
3250 int index;
3251 int base;
3252 }
3253sib;
c0f3af97
L
3254static struct
3255 {
3256 int register_specifier;
3257 int length;
3258 int prefix;
3259 int w;
43234a1e
L
3260 int evex;
3261 int r;
3262 int v;
3263 int mask_register_specifier;
3264 int zeroing;
3265 int ll;
3266 int b;
c0f3af97
L
3267 }
3268vex;
3269static unsigned char need_vex;
3270static unsigned char need_vex_reg;
dae39acc 3271static unsigned char vex_w_done;
252b5132 3272
ea397f5b
L
3273struct op
3274 {
3275 const char *name;
3276 unsigned int len;
3277 };
3278
4bba6815
AM
3279/* If we are accessing mod/rm/reg without need_modrm set, then the
3280 values are stale. Hitting this abort likely indicates that you
3281 need to update onebyte_has_modrm or twobyte_has_modrm. */
3282#define MODRM_CHECK if (!need_modrm) abort ()
3283
d708bcba
AM
3284static const char **names64;
3285static const char **names32;
3286static const char **names16;
3287static const char **names8;
3288static const char **names8rex;
3289static const char **names_seg;
db51cc60
L
3290static const char *index64;
3291static const char *index32;
d708bcba 3292static const char **index16;
7e8b059b 3293static const char **names_bnd;
d708bcba
AM
3294
3295static const char *intel_names64[] = {
3296 "rax", "rcx", "rdx", "rbx", "rsp", "rbp", "rsi", "rdi",
3297 "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15"
3298};
3299static const char *intel_names32[] = {
3300 "eax", "ecx", "edx", "ebx", "esp", "ebp", "esi", "edi",
3301 "r8d", "r9d", "r10d", "r11d", "r12d", "r13d", "r14d", "r15d"
3302};
3303static const char *intel_names16[] = {
3304 "ax", "cx", "dx", "bx", "sp", "bp", "si", "di",
3305 "r8w", "r9w", "r10w", "r11w", "r12w", "r13w", "r14w", "r15w"
3306};
3307static const char *intel_names8[] = {
3308 "al", "cl", "dl", "bl", "ah", "ch", "dh", "bh",
3309};
3310static const char *intel_names8rex[] = {
3311 "al", "cl", "dl", "bl", "spl", "bpl", "sil", "dil",
3312 "r8b", "r9b", "r10b", "r11b", "r12b", "r13b", "r14b", "r15b"
3313};
3314static const char *intel_names_seg[] = {
3315 "es", "cs", "ss", "ds", "fs", "gs", "?", "?",
3316};
db51cc60
L
3317static const char *intel_index64 = "riz";
3318static const char *intel_index32 = "eiz";
d708bcba
AM
3319static const char *intel_index16[] = {
3320 "bx+si", "bx+di", "bp+si", "bp+di", "si", "di", "bp", "bx"
3321};
3322
3323static const char *att_names64[] = {
3324 "%rax", "%rcx", "%rdx", "%rbx", "%rsp", "%rbp", "%rsi", "%rdi",
52b15da3
JH
3325 "%r8", "%r9", "%r10", "%r11", "%r12", "%r13", "%r14", "%r15"
3326};
d708bcba
AM
3327static const char *att_names32[] = {
3328 "%eax", "%ecx", "%edx", "%ebx", "%esp", "%ebp", "%esi", "%edi",
52b15da3 3329 "%r8d", "%r9d", "%r10d", "%r11d", "%r12d", "%r13d", "%r14d", "%r15d"
252b5132 3330};
d708bcba
AM
3331static const char *att_names16[] = {
3332 "%ax", "%cx", "%dx", "%bx", "%sp", "%bp", "%si", "%di",
52b15da3 3333 "%r8w", "%r9w", "%r10w", "%r11w", "%r12w", "%r13w", "%r14w", "%r15w"
252b5132 3334};
d708bcba
AM
3335static const char *att_names8[] = {
3336 "%al", "%cl", "%dl", "%bl", "%ah", "%ch", "%dh", "%bh",
252b5132 3337};
d708bcba
AM
3338static const char *att_names8rex[] = {
3339 "%al", "%cl", "%dl", "%bl", "%spl", "%bpl", "%sil", "%dil",
52b15da3
JH
3340 "%r8b", "%r9b", "%r10b", "%r11b", "%r12b", "%r13b", "%r14b", "%r15b"
3341};
d708bcba
AM
3342static const char *att_names_seg[] = {
3343 "%es", "%cs", "%ss", "%ds", "%fs", "%gs", "%?", "%?",
252b5132 3344};
db51cc60
L
3345static const char *att_index64 = "%riz";
3346static const char *att_index32 = "%eiz";
d708bcba
AM
3347static const char *att_index16[] = {
3348 "%bx,%si", "%bx,%di", "%bp,%si", "%bp,%di", "%si", "%di", "%bp", "%bx"
252b5132
RH
3349};
3350
b9733481
L
3351static const char **names_mm;
3352static const char *intel_names_mm[] = {
3353 "mm0", "mm1", "mm2", "mm3",
3354 "mm4", "mm5", "mm6", "mm7"
3355};
3356static const char *att_names_mm[] = {
3357 "%mm0", "%mm1", "%mm2", "%mm3",
3358 "%mm4", "%mm5", "%mm6", "%mm7"
3359};
3360
7e8b059b
L
3361static const char *intel_names_bnd[] = {
3362 "bnd0", "bnd1", "bnd2", "bnd3"
3363};
3364
3365static const char *att_names_bnd[] = {
3366 "%bnd0", "%bnd1", "%bnd2", "%bnd3"
3367};
3368
b9733481
L
3369static const char **names_xmm;
3370static const char *intel_names_xmm[] = {
3371 "xmm0", "xmm1", "xmm2", "xmm3",
3372 "xmm4", "xmm5", "xmm6", "xmm7",
3373 "xmm8", "xmm9", "xmm10", "xmm11",
43234a1e
L
3374 "xmm12", "xmm13", "xmm14", "xmm15",
3375 "xmm16", "xmm17", "xmm18", "xmm19",
3376 "xmm20", "xmm21", "xmm22", "xmm23",
3377 "xmm24", "xmm25", "xmm26", "xmm27",
3378 "xmm28", "xmm29", "xmm30", "xmm31"
b9733481
L
3379};
3380static const char *att_names_xmm[] = {
3381 "%xmm0", "%xmm1", "%xmm2", "%xmm3",
3382 "%xmm4", "%xmm5", "%xmm6", "%xmm7",
3383 "%xmm8", "%xmm9", "%xmm10", "%xmm11",
43234a1e
L
3384 "%xmm12", "%xmm13", "%xmm14", "%xmm15",
3385 "%xmm16", "%xmm17", "%xmm18", "%xmm19",
3386 "%xmm20", "%xmm21", "%xmm22", "%xmm23",
3387 "%xmm24", "%xmm25", "%xmm26", "%xmm27",
3388 "%xmm28", "%xmm29", "%xmm30", "%xmm31"
b9733481
L
3389};
3390
3391static const char **names_ymm;
3392static const char *intel_names_ymm[] = {
3393 "ymm0", "ymm1", "ymm2", "ymm3",
3394 "ymm4", "ymm5", "ymm6", "ymm7",
3395 "ymm8", "ymm9", "ymm10", "ymm11",
43234a1e
L
3396 "ymm12", "ymm13", "ymm14", "ymm15",
3397 "ymm16", "ymm17", "ymm18", "ymm19",
3398 "ymm20", "ymm21", "ymm22", "ymm23",
3399 "ymm24", "ymm25", "ymm26", "ymm27",
3400 "ymm28", "ymm29", "ymm30", "ymm31"
b9733481
L
3401};
3402static const char *att_names_ymm[] = {
3403 "%ymm0", "%ymm1", "%ymm2", "%ymm3",
3404 "%ymm4", "%ymm5", "%ymm6", "%ymm7",
3405 "%ymm8", "%ymm9", "%ymm10", "%ymm11",
43234a1e
L
3406 "%ymm12", "%ymm13", "%ymm14", "%ymm15",
3407 "%ymm16", "%ymm17", "%ymm18", "%ymm19",
3408 "%ymm20", "%ymm21", "%ymm22", "%ymm23",
3409 "%ymm24", "%ymm25", "%ymm26", "%ymm27",
3410 "%ymm28", "%ymm29", "%ymm30", "%ymm31"
3411};
3412
3413static const char **names_zmm;
3414static const char *intel_names_zmm[] = {
3415 "zmm0", "zmm1", "zmm2", "zmm3",
3416 "zmm4", "zmm5", "zmm6", "zmm7",
3417 "zmm8", "zmm9", "zmm10", "zmm11",
3418 "zmm12", "zmm13", "zmm14", "zmm15",
3419 "zmm16", "zmm17", "zmm18", "zmm19",
3420 "zmm20", "zmm21", "zmm22", "zmm23",
3421 "zmm24", "zmm25", "zmm26", "zmm27",
3422 "zmm28", "zmm29", "zmm30", "zmm31"
3423};
3424static const char *att_names_zmm[] = {
3425 "%zmm0", "%zmm1", "%zmm2", "%zmm3",
3426 "%zmm4", "%zmm5", "%zmm6", "%zmm7",
3427 "%zmm8", "%zmm9", "%zmm10", "%zmm11",
3428 "%zmm12", "%zmm13", "%zmm14", "%zmm15",
3429 "%zmm16", "%zmm17", "%zmm18", "%zmm19",
3430 "%zmm20", "%zmm21", "%zmm22", "%zmm23",
3431 "%zmm24", "%zmm25", "%zmm26", "%zmm27",
3432 "%zmm28", "%zmm29", "%zmm30", "%zmm31"
3433};
3434
3435static const char **names_mask;
3436static const char *intel_names_mask[] = {
3437 "k0", "k1", "k2", "k3", "k4", "k5", "k6", "k7"
3438};
3439static const char *att_names_mask[] = {
3440 "%k0", "%k1", "%k2", "%k3", "%k4", "%k5", "%k6", "%k7"
3441};
3442
3443static const char *names_rounding[] =
3444{
3445 "{rn-sae}",
3446 "{rd-sae}",
3447 "{ru-sae}",
3448 "{rz-sae}"
b9733481
L
3449};
3450
1ceb70f8
L
3451static const struct dis386 reg_table[][8] = {
3452 /* REG_80 */
252b5132 3453 {
bf890a93
IT
3454 { "addA", { Ebh1, Ib }, 0 },
3455 { "orA", { Ebh1, Ib }, 0 },
3456 { "adcA", { Ebh1, Ib }, 0 },
3457 { "sbbA", { Ebh1, Ib }, 0 },
3458 { "andA", { Ebh1, Ib }, 0 },
3459 { "subA", { Ebh1, Ib }, 0 },
3460 { "xorA", { Ebh1, Ib }, 0 },
3461 { "cmpA", { Eb, Ib }, 0 },
252b5132 3462 },
1ceb70f8 3463 /* REG_81 */
252b5132 3464 {
bf890a93
IT
3465 { "addQ", { Evh1, Iv }, 0 },
3466 { "orQ", { Evh1, Iv }, 0 },
3467 { "adcQ", { Evh1, Iv }, 0 },
3468 { "sbbQ", { Evh1, Iv }, 0 },
3469 { "andQ", { Evh1, Iv }, 0 },
3470 { "subQ", { Evh1, Iv }, 0 },
3471 { "xorQ", { Evh1, Iv }, 0 },
3472 { "cmpQ", { Ev, Iv }, 0 },
252b5132 3473 },
7148c369 3474 /* REG_83 */
252b5132 3475 {
bf890a93
IT
3476 { "addQ", { Evh1, sIb }, 0 },
3477 { "orQ", { Evh1, sIb }, 0 },
3478 { "adcQ", { Evh1, sIb }, 0 },
3479 { "sbbQ", { Evh1, sIb }, 0 },
3480 { "andQ", { Evh1, sIb }, 0 },
3481 { "subQ", { Evh1, sIb }, 0 },
3482 { "xorQ", { Evh1, sIb }, 0 },
3483 { "cmpQ", { Ev, sIb }, 0 },
252b5132 3484 },
1ceb70f8 3485 /* REG_8F */
4e7d34a6 3486 {
bf890a93 3487 { "popU", { stackEv }, 0 },
c48244a5 3488 { XOP_8F_TABLE (XOP_09) },
592d1631
L
3489 { Bad_Opcode },
3490 { Bad_Opcode },
3491 { Bad_Opcode },
f88c9eb0 3492 { XOP_8F_TABLE (XOP_09) },
4e7d34a6 3493 },
1ceb70f8 3494 /* REG_C0 */
252b5132 3495 {
bf890a93
IT
3496 { "rolA", { Eb, Ib }, 0 },
3497 { "rorA", { Eb, Ib }, 0 },
3498 { "rclA", { Eb, Ib }, 0 },
3499 { "rcrA", { Eb, Ib }, 0 },
3500 { "shlA", { Eb, Ib }, 0 },
3501 { "shrA", { Eb, Ib }, 0 },
e4bdd679 3502 { "shlA", { Eb, Ib }, 0 },
bf890a93 3503 { "sarA", { Eb, Ib }, 0 },
252b5132 3504 },
1ceb70f8 3505 /* REG_C1 */
252b5132 3506 {
bf890a93
IT
3507 { "rolQ", { Ev, Ib }, 0 },
3508 { "rorQ", { Ev, Ib }, 0 },
3509 { "rclQ", { Ev, Ib }, 0 },
3510 { "rcrQ", { Ev, Ib }, 0 },
3511 { "shlQ", { Ev, Ib }, 0 },
3512 { "shrQ", { Ev, Ib }, 0 },
e4bdd679 3513 { "shlQ", { Ev, Ib }, 0 },
bf890a93 3514 { "sarQ", { Ev, Ib }, 0 },
252b5132 3515 },
1ceb70f8 3516 /* REG_C6 */
4e7d34a6 3517 {
bf890a93 3518 { "movA", { Ebh3, Ib }, 0 },
42164a71
L
3519 { Bad_Opcode },
3520 { Bad_Opcode },
3521 { Bad_Opcode },
3522 { Bad_Opcode },
3523 { Bad_Opcode },
3524 { Bad_Opcode },
3525 { MOD_TABLE (MOD_C6_REG_7) },
4e7d34a6 3526 },
1ceb70f8 3527 /* REG_C7 */
4e7d34a6 3528 {
bf890a93 3529 { "movQ", { Evh3, Iv }, 0 },
42164a71
L
3530 { Bad_Opcode },
3531 { Bad_Opcode },
3532 { Bad_Opcode },
3533 { Bad_Opcode },
3534 { Bad_Opcode },
3535 { Bad_Opcode },
3536 { MOD_TABLE (MOD_C7_REG_7) },
4e7d34a6 3537 },
1ceb70f8 3538 /* REG_D0 */
252b5132 3539 {
bf890a93
IT
3540 { "rolA", { Eb, I1 }, 0 },
3541 { "rorA", { Eb, I1 }, 0 },
3542 { "rclA", { Eb, I1 }, 0 },
3543 { "rcrA", { Eb, I1 }, 0 },
3544 { "shlA", { Eb, I1 }, 0 },
3545 { "shrA", { Eb, I1 }, 0 },
e4bdd679 3546 { "shlA", { Eb, I1 }, 0 },
bf890a93 3547 { "sarA", { Eb, I1 }, 0 },
252b5132 3548 },
1ceb70f8 3549 /* REG_D1 */
252b5132 3550 {
bf890a93
IT
3551 { "rolQ", { Ev, I1 }, 0 },
3552 { "rorQ", { Ev, I1 }, 0 },
3553 { "rclQ", { Ev, I1 }, 0 },
3554 { "rcrQ", { Ev, I1 }, 0 },
3555 { "shlQ", { Ev, I1 }, 0 },
3556 { "shrQ", { Ev, I1 }, 0 },
e4bdd679 3557 { "shlQ", { Ev, I1 }, 0 },
bf890a93 3558 { "sarQ", { Ev, I1 }, 0 },
252b5132 3559 },
1ceb70f8 3560 /* REG_D2 */
252b5132 3561 {
bf890a93
IT
3562 { "rolA", { Eb, CL }, 0 },
3563 { "rorA", { Eb, CL }, 0 },
3564 { "rclA", { Eb, CL }, 0 },
3565 { "rcrA", { Eb, CL }, 0 },
3566 { "shlA", { Eb, CL }, 0 },
3567 { "shrA", { Eb, CL }, 0 },
e4bdd679 3568 { "shlA", { Eb, CL }, 0 },
bf890a93 3569 { "sarA", { Eb, CL }, 0 },
252b5132 3570 },
1ceb70f8 3571 /* REG_D3 */
252b5132 3572 {
bf890a93
IT
3573 { "rolQ", { Ev, CL }, 0 },
3574 { "rorQ", { Ev, CL }, 0 },
3575 { "rclQ", { Ev, CL }, 0 },
3576 { "rcrQ", { Ev, CL }, 0 },
3577 { "shlQ", { Ev, CL }, 0 },
3578 { "shrQ", { Ev, CL }, 0 },
e4bdd679 3579 { "shlQ", { Ev, CL }, 0 },
bf890a93 3580 { "sarQ", { Ev, CL }, 0 },
252b5132 3581 },
1ceb70f8 3582 /* REG_F6 */
252b5132 3583 {
bf890a93 3584 { "testA", { Eb, Ib }, 0 },
7db2c588 3585 { "testA", { Eb, Ib }, 0 },
bf890a93
IT
3586 { "notA", { Ebh1 }, 0 },
3587 { "negA", { Ebh1 }, 0 },
3588 { "mulA", { Eb }, 0 }, /* Don't print the implicit %al register, */
3589 { "imulA", { Eb }, 0 }, /* to distinguish these opcodes from other */
3590 { "divA", { Eb }, 0 }, /* mul/imul opcodes. Do the same for div */
3591 { "idivA", { Eb }, 0 }, /* and idiv for consistency. */
252b5132 3592 },
1ceb70f8 3593 /* REG_F7 */
252b5132 3594 {
bf890a93 3595 { "testQ", { Ev, Iv }, 0 },
7db2c588 3596 { "testQ", { Ev, Iv }, 0 },
bf890a93
IT
3597 { "notQ", { Evh1 }, 0 },
3598 { "negQ", { Evh1 }, 0 },
3599 { "mulQ", { Ev }, 0 }, /* Don't print the implicit register. */
3600 { "imulQ", { Ev }, 0 },
3601 { "divQ", { Ev }, 0 },
3602 { "idivQ", { Ev }, 0 },
252b5132 3603 },
1ceb70f8 3604 /* REG_FE */
252b5132 3605 {
bf890a93
IT
3606 { "incA", { Ebh1 }, 0 },
3607 { "decA", { Ebh1 }, 0 },
252b5132 3608 },
1ceb70f8 3609 /* REG_FF */
252b5132 3610 {
bf890a93
IT
3611 { "incQ", { Evh1 }, 0 },
3612 { "decQ", { Evh1 }, 0 },
9fef80d6 3613 { "call{&|}", { NOTRACK, indirEv, BND }, 0 },
4a357820 3614 { MOD_TABLE (MOD_FF_REG_3) },
9fef80d6 3615 { "jmp{&|}", { NOTRACK, indirEv, BND }, 0 },
4a357820 3616 { MOD_TABLE (MOD_FF_REG_5) },
bf890a93 3617 { "pushU", { stackEv }, 0 },
592d1631 3618 { Bad_Opcode },
252b5132 3619 },
1ceb70f8 3620 /* REG_0F00 */
252b5132 3621 {
bf890a93
IT
3622 { "sldtD", { Sv }, 0 },
3623 { "strD", { Sv }, 0 },
3624 { "lldt", { Ew }, 0 },
3625 { "ltr", { Ew }, 0 },
3626 { "verr", { Ew }, 0 },
3627 { "verw", { Ew }, 0 },
592d1631
L
3628 { Bad_Opcode },
3629 { Bad_Opcode },
252b5132 3630 },
1ceb70f8 3631 /* REG_0F01 */
252b5132 3632 {
1ceb70f8
L
3633 { MOD_TABLE (MOD_0F01_REG_0) },
3634 { MOD_TABLE (MOD_0F01_REG_1) },
3635 { MOD_TABLE (MOD_0F01_REG_2) },
3636 { MOD_TABLE (MOD_0F01_REG_3) },
bf890a93 3637 { "smswD", { Sv }, 0 },
8eab4136 3638 { MOD_TABLE (MOD_0F01_REG_5) },
bf890a93 3639 { "lmsw", { Ew }, 0 },
1ceb70f8 3640 { MOD_TABLE (MOD_0F01_REG_7) },
252b5132 3641 },
b5b1fc4f 3642 /* REG_0F0D */
252b5132 3643 {
bf890a93
IT
3644 { "prefetch", { Mb }, 0 },
3645 { "prefetchw", { Mb }, 0 },
3646 { "prefetchwt1", { Mb }, 0 },
3647 { "prefetch", { Mb }, 0 },
3648 { "prefetch", { Mb }, 0 },
3649 { "prefetch", { Mb }, 0 },
3650 { "prefetch", { Mb }, 0 },
3651 { "prefetch", { Mb }, 0 },
252b5132 3652 },
1ceb70f8 3653 /* REG_0F18 */
252b5132 3654 {
1ceb70f8
L
3655 { MOD_TABLE (MOD_0F18_REG_0) },
3656 { MOD_TABLE (MOD_0F18_REG_1) },
3657 { MOD_TABLE (MOD_0F18_REG_2) },
3658 { MOD_TABLE (MOD_0F18_REG_3) },
d7189fa5
RM
3659 { MOD_TABLE (MOD_0F18_REG_4) },
3660 { MOD_TABLE (MOD_0F18_REG_5) },
3661 { MOD_TABLE (MOD_0F18_REG_6) },
3662 { MOD_TABLE (MOD_0F18_REG_7) },
252b5132 3663 },
c48935d7
IT
3664 /* REG_0F1C_MOD_0 */
3665 {
3666 { "cldemote", { Mb }, 0 },
3667 { "nopQ", { Ev }, 0 },
3668 { "nopQ", { Ev }, 0 },
3669 { "nopQ", { Ev }, 0 },
3670 { "nopQ", { Ev }, 0 },
3671 { "nopQ", { Ev }, 0 },
3672 { "nopQ", { Ev }, 0 },
3673 { "nopQ", { Ev }, 0 },
3674 },
603555e5
L
3675 /* REG_0F1E_MOD_3 */
3676 {
3677 { "nopQ", { Ev }, 0 },
3678 { "rdsspK", { Rdq }, PREFIX_OPCODE },
3679 { "nopQ", { Ev }, 0 },
3680 { "nopQ", { Ev }, 0 },
3681 { "nopQ", { Ev }, 0 },
3682 { "nopQ", { Ev }, 0 },
3683 { "nopQ", { Ev }, 0 },
3684 { RM_TABLE (RM_0F1E_MOD_3_REG_7) },
3685 },
1ceb70f8 3686 /* REG_0F71 */
a6bd098c 3687 {
592d1631
L
3688 { Bad_Opcode },
3689 { Bad_Opcode },
1ceb70f8 3690 { MOD_TABLE (MOD_0F71_REG_2) },
592d1631 3691 { Bad_Opcode },
1ceb70f8 3692 { MOD_TABLE (MOD_0F71_REG_4) },
592d1631 3693 { Bad_Opcode },
1ceb70f8 3694 { MOD_TABLE (MOD_0F71_REG_6) },
a6bd098c 3695 },
1ceb70f8 3696 /* REG_0F72 */
a6bd098c 3697 {
592d1631
L
3698 { Bad_Opcode },
3699 { Bad_Opcode },
1ceb70f8 3700 { MOD_TABLE (MOD_0F72_REG_2) },
592d1631 3701 { Bad_Opcode },
1ceb70f8 3702 { MOD_TABLE (MOD_0F72_REG_4) },
592d1631 3703 { Bad_Opcode },
1ceb70f8 3704 { MOD_TABLE (MOD_0F72_REG_6) },
a6bd098c 3705 },
1ceb70f8 3706 /* REG_0F73 */
252b5132 3707 {
592d1631
L
3708 { Bad_Opcode },
3709 { Bad_Opcode },
1ceb70f8
L
3710 { MOD_TABLE (MOD_0F73_REG_2) },
3711 { MOD_TABLE (MOD_0F73_REG_3) },
592d1631
L
3712 { Bad_Opcode },
3713 { Bad_Opcode },
1ceb70f8
L
3714 { MOD_TABLE (MOD_0F73_REG_6) },
3715 { MOD_TABLE (MOD_0F73_REG_7) },
252b5132 3716 },
1ceb70f8 3717 /* REG_0FA6 */
252b5132 3718 {
bf890a93
IT
3719 { "montmul", { { OP_0f07, 0 } }, 0 },
3720 { "xsha1", { { OP_0f07, 0 } }, 0 },
3721 { "xsha256", { { OP_0f07, 0 } }, 0 },
4e7d34a6 3722 },
1ceb70f8 3723 /* REG_0FA7 */
4e7d34a6 3724 {
bf890a93
IT
3725 { "xstore-rng", { { OP_0f07, 0 } }, 0 },
3726 { "xcrypt-ecb", { { OP_0f07, 0 } }, 0 },
3727 { "xcrypt-cbc", { { OP_0f07, 0 } }, 0 },
3728 { "xcrypt-ctr", { { OP_0f07, 0 } }, 0 },
3729 { "xcrypt-cfb", { { OP_0f07, 0 } }, 0 },
3730 { "xcrypt-ofb", { { OP_0f07, 0 } }, 0 },
4e7d34a6 3731 },
1ceb70f8 3732 /* REG_0FAE */
4e7d34a6 3733 {
1ceb70f8
L
3734 { MOD_TABLE (MOD_0FAE_REG_0) },
3735 { MOD_TABLE (MOD_0FAE_REG_1) },
3736 { MOD_TABLE (MOD_0FAE_REG_2) },
3737 { MOD_TABLE (MOD_0FAE_REG_3) },
475a2301 3738 { MOD_TABLE (MOD_0FAE_REG_4) },
1ceb70f8
L
3739 { MOD_TABLE (MOD_0FAE_REG_5) },
3740 { MOD_TABLE (MOD_0FAE_REG_6) },
3741 { MOD_TABLE (MOD_0FAE_REG_7) },
252b5132 3742 },
1ceb70f8 3743 /* REG_0FBA */
252b5132 3744 {
592d1631
L
3745 { Bad_Opcode },
3746 { Bad_Opcode },
3747 { Bad_Opcode },
3748 { Bad_Opcode },
bf890a93
IT
3749 { "btQ", { Ev, Ib }, 0 },
3750 { "btsQ", { Evh1, Ib }, 0 },
3751 { "btrQ", { Evh1, Ib }, 0 },
3752 { "btcQ", { Evh1, Ib }, 0 },
c608c12e 3753 },
1ceb70f8 3754 /* REG_0FC7 */
c608c12e 3755 {
592d1631 3756 { Bad_Opcode },
bf890a93 3757 { "cmpxchg8b", { { CMPXCHG8B_Fixup, q_mode } }, 0 },
592d1631 3758 { Bad_Opcode },
963f3586
IT
3759 { MOD_TABLE (MOD_0FC7_REG_3) },
3760 { MOD_TABLE (MOD_0FC7_REG_4) },
3761 { MOD_TABLE (MOD_0FC7_REG_5) },
1ceb70f8
L
3762 { MOD_TABLE (MOD_0FC7_REG_6) },
3763 { MOD_TABLE (MOD_0FC7_REG_7) },
252b5132 3764 },
592a252b 3765 /* REG_VEX_0F71 */
c0f3af97 3766 {
592d1631
L
3767 { Bad_Opcode },
3768 { Bad_Opcode },
592a252b 3769 { MOD_TABLE (MOD_VEX_0F71_REG_2) },
592d1631 3770 { Bad_Opcode },
592a252b 3771 { MOD_TABLE (MOD_VEX_0F71_REG_4) },
592d1631 3772 { Bad_Opcode },
592a252b 3773 { MOD_TABLE (MOD_VEX_0F71_REG_6) },
c0f3af97 3774 },
592a252b 3775 /* REG_VEX_0F72 */
c0f3af97 3776 {
592d1631
L
3777 { Bad_Opcode },
3778 { Bad_Opcode },
592a252b 3779 { MOD_TABLE (MOD_VEX_0F72_REG_2) },
592d1631 3780 { Bad_Opcode },
592a252b 3781 { MOD_TABLE (MOD_VEX_0F72_REG_4) },
592d1631 3782 { Bad_Opcode },
592a252b 3783 { MOD_TABLE (MOD_VEX_0F72_REG_6) },
c0f3af97 3784 },
592a252b 3785 /* REG_VEX_0F73 */
c0f3af97 3786 {
592d1631
L
3787 { Bad_Opcode },
3788 { Bad_Opcode },
592a252b
L
3789 { MOD_TABLE (MOD_VEX_0F73_REG_2) },
3790 { MOD_TABLE (MOD_VEX_0F73_REG_3) },
592d1631
L
3791 { Bad_Opcode },
3792 { Bad_Opcode },
592a252b
L
3793 { MOD_TABLE (MOD_VEX_0F73_REG_6) },
3794 { MOD_TABLE (MOD_VEX_0F73_REG_7) },
c0f3af97 3795 },
592a252b 3796 /* REG_VEX_0FAE */
c0f3af97 3797 {
592d1631
L
3798 { Bad_Opcode },
3799 { Bad_Opcode },
592a252b
L
3800 { MOD_TABLE (MOD_VEX_0FAE_REG_2) },
3801 { MOD_TABLE (MOD_VEX_0FAE_REG_3) },
c0f3af97 3802 },
f12dc422
L
3803 /* REG_VEX_0F38F3 */
3804 {
3805 { Bad_Opcode },
3806 { PREFIX_TABLE (PREFIX_VEX_0F38F3_REG_1) },
3807 { PREFIX_TABLE (PREFIX_VEX_0F38F3_REG_2) },
3808 { PREFIX_TABLE (PREFIX_VEX_0F38F3_REG_3) },
3809 },
f88c9eb0
SP
3810 /* REG_XOP_LWPCB */
3811 {
bf890a93
IT
3812 { "llwpcb", { { OP_LWPCB_E, 0 } }, 0 },
3813 { "slwpcb", { { OP_LWPCB_E, 0 } }, 0 },
f88c9eb0
SP
3814 },
3815 /* REG_XOP_LWP */
3816 {
bf890a93
IT
3817 { "lwpins", { { OP_LWP_E, 0 }, Ed, Iq }, 0 },
3818 { "lwpval", { { OP_LWP_E, 0 }, Ed, Iq }, 0 },
f88c9eb0 3819 },
2a2a0f38
QN
3820 /* REG_XOP_TBM_01 */
3821 {
3822 { Bad_Opcode },
bf890a93
IT
3823 { "blcfill", { { OP_LWP_E, 0 }, Ev }, 0 },
3824 { "blsfill", { { OP_LWP_E, 0 }, Ev }, 0 },
3825 { "blcs", { { OP_LWP_E, 0 }, Ev }, 0 },
3826 { "tzmsk", { { OP_LWP_E, 0 }, Ev }, 0 },
3827 { "blcic", { { OP_LWP_E, 0 }, Ev }, 0 },
3828 { "blsic", { { OP_LWP_E, 0 }, Ev }, 0 },
3829 { "t1mskc", { { OP_LWP_E, 0 }, Ev }, 0 },
2a2a0f38
QN
3830 },
3831 /* REG_XOP_TBM_02 */
3832 {
3833 { Bad_Opcode },
bf890a93 3834 { "blcmsk", { { OP_LWP_E, 0 }, Ev }, 0 },
2a2a0f38
QN
3835 { Bad_Opcode },
3836 { Bad_Opcode },
3837 { Bad_Opcode },
3838 { Bad_Opcode },
bf890a93 3839 { "blci", { { OP_LWP_E, 0 }, Ev }, 0 },
2a2a0f38 3840 },
43234a1e
L
3841#define NEED_REG_TABLE
3842#include "i386-dis-evex.h"
3843#undef NEED_REG_TABLE
4e7d34a6
L
3844};
3845
1ceb70f8
L
3846static const struct dis386 prefix_table[][4] = {
3847 /* PREFIX_90 */
252b5132 3848 {
bf890a93
IT
3849 { "xchgS", { { NOP_Fixup1, eAX_reg }, { NOP_Fixup2, eAX_reg } }, 0 },
3850 { "pause", { XX }, 0 },
3851 { "xchgS", { { NOP_Fixup1, eAX_reg }, { NOP_Fixup2, eAX_reg } }, 0 },
507bd325 3852 { NULL, { { NULL, 0 } }, PREFIX_IGNORED }
0f10071e 3853 },
4e7d34a6 3854
603555e5
L
3855 /* PREFIX_MOD_0_0F01_REG_5 */
3856 {
3857 { Bad_Opcode },
3858 { "rstorssp", { Mq }, PREFIX_OPCODE },
3859 },
3860
2234eee6 3861 /* PREFIX_MOD_3_0F01_REG_5_RM_0 */
603555e5
L
3862 {
3863 { Bad_Opcode },
2234eee6 3864 { "setssbsy", { Skip_MODRM }, PREFIX_OPCODE },
603555e5
L
3865 },
3866
3867 /* PREFIX_MOD_3_0F01_REG_5_RM_2 */
3868 {
3869 { Bad_Opcode },
c2f76402 3870 { "saveprevssp", { Skip_MODRM }, PREFIX_OPCODE },
603555e5
L
3871 },
3872
3233d7d0
IT
3873 /* PREFIX_0F09 */
3874 {
3875 { "wbinvd", { XX }, 0 },
3876 { "wbnoinvd", { XX }, 0 },
3877 },
3878
1ceb70f8 3879 /* PREFIX_0F10 */
cc0ec051 3880 {
507bd325
L
3881 { "movups", { XM, EXx }, PREFIX_OPCODE },
3882 { "movss", { XM, EXd }, PREFIX_OPCODE },
3883 { "movupd", { XM, EXx }, PREFIX_OPCODE },
3884 { "movsd", { XM, EXq }, PREFIX_OPCODE },
30d1c836 3885 },
4e7d34a6 3886
1ceb70f8 3887 /* PREFIX_0F11 */
30d1c836 3888 {
507bd325
L
3889 { "movups", { EXxS, XM }, PREFIX_OPCODE },
3890 { "movss", { EXdS, XM }, PREFIX_OPCODE },
3891 { "movupd", { EXxS, XM }, PREFIX_OPCODE },
3892 { "movsd", { EXqS, XM }, PREFIX_OPCODE },
4e7d34a6 3893 },
252b5132 3894
1ceb70f8 3895 /* PREFIX_0F12 */
c608c12e 3896 {
1ceb70f8 3897 { MOD_TABLE (MOD_0F12_PREFIX_0) },
507bd325
L
3898 { "movsldup", { XM, EXx }, PREFIX_OPCODE },
3899 { "movlpd", { XM, EXq }, PREFIX_OPCODE },
3900 { "movddup", { XM, EXq }, PREFIX_OPCODE },
c608c12e 3901 },
4e7d34a6 3902
1ceb70f8 3903 /* PREFIX_0F16 */
c608c12e 3904 {
1ceb70f8 3905 { MOD_TABLE (MOD_0F16_PREFIX_0) },
507bd325
L
3906 { "movshdup", { XM, EXx }, PREFIX_OPCODE },
3907 { "movhpd", { XM, EXq }, PREFIX_OPCODE },
c608c12e 3908 },
4e7d34a6 3909
7e8b059b
L
3910 /* PREFIX_0F1A */
3911 {
3912 { MOD_TABLE (MOD_0F1A_PREFIX_0) },
bf890a93
IT
3913 { "bndcl", { Gbnd, Ev_bnd }, 0 },
3914 { "bndmov", { Gbnd, Ebnd }, 0 },
3915 { "bndcu", { Gbnd, Ev_bnd }, 0 },
7e8b059b
L
3916 },
3917
3918 /* PREFIX_0F1B */
3919 {
3920 { MOD_TABLE (MOD_0F1B_PREFIX_0) },
3921 { MOD_TABLE (MOD_0F1B_PREFIX_1) },
9f79e886 3922 { "bndmov", { EbndS, Gbnd }, 0 },
bf890a93 3923 { "bndcn", { Gbnd, Ev_bnd }, 0 },
7e8b059b
L
3924 },
3925
c48935d7
IT
3926 /* PREFIX_0F1C */
3927 {
3928 { MOD_TABLE (MOD_0F1C_PREFIX_0) },
3929 { "nopQ", { Ev }, PREFIX_OPCODE },
3930 { "nopQ", { Ev }, PREFIX_OPCODE },
3931 { "nopQ", { Ev }, PREFIX_OPCODE },
3932 },
3933
603555e5
L
3934 /* PREFIX_0F1E */
3935 {
3936 { "nopQ", { Ev }, PREFIX_OPCODE },
3937 { MOD_TABLE (MOD_0F1E_PREFIX_1) },
3938 { "nopQ", { Ev }, PREFIX_OPCODE },
3939 { "nopQ", { Ev }, PREFIX_OPCODE },
3940 },
3941
1ceb70f8 3942 /* PREFIX_0F2A */
c608c12e 3943 {
507bd325
L
3944 { "cvtpi2ps", { XM, EMCq }, PREFIX_OPCODE },
3945 { "cvtsi2ss%LQ", { XM, Ev }, PREFIX_OPCODE },
3946 { "cvtpi2pd", { XM, EMCq }, PREFIX_OPCODE },
bf890a93 3947 { "cvtsi2sd%LQ", { XM, Ev }, 0 },
c608c12e 3948 },
4e7d34a6 3949
1ceb70f8 3950 /* PREFIX_0F2B */
c608c12e 3951 {
75c135a8
L
3952 { MOD_TABLE (MOD_0F2B_PREFIX_0) },
3953 { MOD_TABLE (MOD_0F2B_PREFIX_1) },
3954 { MOD_TABLE (MOD_0F2B_PREFIX_2) },
3955 { MOD_TABLE (MOD_0F2B_PREFIX_3) },
c608c12e 3956 },
4e7d34a6 3957
1ceb70f8 3958 /* PREFIX_0F2C */
c608c12e 3959 {
507bd325 3960 { "cvttps2pi", { MXC, EXq }, PREFIX_OPCODE },
9646c87b 3961 { "cvttss2si", { Gv, EXd }, PREFIX_OPCODE },
507bd325 3962 { "cvttpd2pi", { MXC, EXx }, PREFIX_OPCODE },
9646c87b 3963 { "cvttsd2si", { Gv, EXq }, PREFIX_OPCODE },
c608c12e 3964 },
4e7d34a6 3965
1ceb70f8 3966 /* PREFIX_0F2D */
c608c12e 3967 {
507bd325 3968 { "cvtps2pi", { MXC, EXq }, PREFIX_OPCODE },
9646c87b 3969 { "cvtss2si", { Gv, EXd }, PREFIX_OPCODE },
507bd325 3970 { "cvtpd2pi", { MXC, EXx }, PREFIX_OPCODE },
9646c87b 3971 { "cvtsd2si", { Gv, EXq }, PREFIX_OPCODE },
c608c12e 3972 },
4e7d34a6 3973
1ceb70f8 3974 /* PREFIX_0F2E */
c608c12e 3975 {
bf890a93 3976 { "ucomiss",{ XM, EXd }, 0 },
592d1631 3977 { Bad_Opcode },
bf890a93 3978 { "ucomisd",{ XM, EXq }, 0 },
c608c12e 3979 },
4e7d34a6 3980
1ceb70f8 3981 /* PREFIX_0F2F */
c608c12e 3982 {
bf890a93 3983 { "comiss", { XM, EXd }, 0 },
592d1631 3984 { Bad_Opcode },
bf890a93 3985 { "comisd", { XM, EXq }, 0 },
c608c12e 3986 },
4e7d34a6 3987
1ceb70f8 3988 /* PREFIX_0F51 */
c608c12e 3989 {
507bd325
L
3990 { "sqrtps", { XM, EXx }, PREFIX_OPCODE },
3991 { "sqrtss", { XM, EXd }, PREFIX_OPCODE },
3992 { "sqrtpd", { XM, EXx }, PREFIX_OPCODE },
3993 { "sqrtsd", { XM, EXq }, PREFIX_OPCODE },
c608c12e 3994 },
4e7d34a6 3995
1ceb70f8 3996 /* PREFIX_0F52 */
c608c12e 3997 {
507bd325
L
3998 { "rsqrtps",{ XM, EXx }, PREFIX_OPCODE },
3999 { "rsqrtss",{ XM, EXd }, PREFIX_OPCODE },
c608c12e 4000 },
4e7d34a6 4001
1ceb70f8 4002 /* PREFIX_0F53 */
c608c12e 4003 {
507bd325
L
4004 { "rcpps", { XM, EXx }, PREFIX_OPCODE },
4005 { "rcpss", { XM, EXd }, PREFIX_OPCODE },
c608c12e 4006 },
4e7d34a6 4007
1ceb70f8 4008 /* PREFIX_0F58 */
c608c12e 4009 {
507bd325
L
4010 { "addps", { XM, EXx }, PREFIX_OPCODE },
4011 { "addss", { XM, EXd }, PREFIX_OPCODE },
4012 { "addpd", { XM, EXx }, PREFIX_OPCODE },
4013 { "addsd", { XM, EXq }, PREFIX_OPCODE },
c608c12e 4014 },
4e7d34a6 4015
1ceb70f8 4016 /* PREFIX_0F59 */
c608c12e 4017 {
507bd325
L
4018 { "mulps", { XM, EXx }, PREFIX_OPCODE },
4019 { "mulss", { XM, EXd }, PREFIX_OPCODE },
4020 { "mulpd", { XM, EXx }, PREFIX_OPCODE },
4021 { "mulsd", { XM, EXq }, PREFIX_OPCODE },
041bd2e0 4022 },
4e7d34a6 4023
1ceb70f8 4024 /* PREFIX_0F5A */
041bd2e0 4025 {
507bd325
L
4026 { "cvtps2pd", { XM, EXq }, PREFIX_OPCODE },
4027 { "cvtss2sd", { XM, EXd }, PREFIX_OPCODE },
4028 { "cvtpd2ps", { XM, EXx }, PREFIX_OPCODE },
4029 { "cvtsd2ss", { XM, EXq }, PREFIX_OPCODE },
041bd2e0 4030 },
4e7d34a6 4031
1ceb70f8 4032 /* PREFIX_0F5B */
041bd2e0 4033 {
507bd325
L
4034 { "cvtdq2ps", { XM, EXx }, PREFIX_OPCODE },
4035 { "cvttps2dq", { XM, EXx }, PREFIX_OPCODE },
4036 { "cvtps2dq", { XM, EXx }, PREFIX_OPCODE },
041bd2e0 4037 },
4e7d34a6 4038
1ceb70f8 4039 /* PREFIX_0F5C */
041bd2e0 4040 {
507bd325
L
4041 { "subps", { XM, EXx }, PREFIX_OPCODE },
4042 { "subss", { XM, EXd }, PREFIX_OPCODE },
4043 { "subpd", { XM, EXx }, PREFIX_OPCODE },
4044 { "subsd", { XM, EXq }, PREFIX_OPCODE },
041bd2e0 4045 },
4e7d34a6 4046
1ceb70f8 4047 /* PREFIX_0F5D */
041bd2e0 4048 {
507bd325
L
4049 { "minps", { XM, EXx }, PREFIX_OPCODE },
4050 { "minss", { XM, EXd }, PREFIX_OPCODE },
4051 { "minpd", { XM, EXx }, PREFIX_OPCODE },
4052 { "minsd", { XM, EXq }, PREFIX_OPCODE },
041bd2e0 4053 },
4e7d34a6 4054
1ceb70f8 4055 /* PREFIX_0F5E */
041bd2e0 4056 {
507bd325
L
4057 { "divps", { XM, EXx }, PREFIX_OPCODE },
4058 { "divss", { XM, EXd }, PREFIX_OPCODE },
4059 { "divpd", { XM, EXx }, PREFIX_OPCODE },
4060 { "divsd", { XM, EXq }, PREFIX_OPCODE },
041bd2e0 4061 },
4e7d34a6 4062
1ceb70f8 4063 /* PREFIX_0F5F */
041bd2e0 4064 {
507bd325
L
4065 { "maxps", { XM, EXx }, PREFIX_OPCODE },
4066 { "maxss", { XM, EXd }, PREFIX_OPCODE },
4067 { "maxpd", { XM, EXx }, PREFIX_OPCODE },
4068 { "maxsd", { XM, EXq }, PREFIX_OPCODE },
041bd2e0 4069 },
4e7d34a6 4070
1ceb70f8 4071 /* PREFIX_0F60 */
041bd2e0 4072 {
507bd325 4073 { "punpcklbw",{ MX, EMd }, PREFIX_OPCODE },
592d1631 4074 { Bad_Opcode },
507bd325 4075 { "punpcklbw",{ MX, EMx }, PREFIX_OPCODE },
041bd2e0 4076 },
4e7d34a6 4077
1ceb70f8 4078 /* PREFIX_0F61 */
041bd2e0 4079 {
507bd325 4080 { "punpcklwd",{ MX, EMd }, PREFIX_OPCODE },
592d1631 4081 { Bad_Opcode },
507bd325 4082 { "punpcklwd",{ MX, EMx }, PREFIX_OPCODE },
041bd2e0 4083 },
4e7d34a6 4084
1ceb70f8 4085 /* PREFIX_0F62 */
041bd2e0 4086 {
507bd325 4087 { "punpckldq",{ MX, EMd }, PREFIX_OPCODE },
592d1631 4088 { Bad_Opcode },
507bd325 4089 { "punpckldq",{ MX, EMx }, PREFIX_OPCODE },
041bd2e0 4090 },
4e7d34a6 4091
1ceb70f8 4092 /* PREFIX_0F6C */
041bd2e0 4093 {
592d1631
L
4094 { Bad_Opcode },
4095 { Bad_Opcode },
507bd325 4096 { "punpcklqdq", { XM, EXx }, PREFIX_OPCODE },
0f17484f 4097 },
4e7d34a6 4098
1ceb70f8 4099 /* PREFIX_0F6D */
0f17484f 4100 {
592d1631
L
4101 { Bad_Opcode },
4102 { Bad_Opcode },
507bd325 4103 { "punpckhqdq", { XM, EXx }, PREFIX_OPCODE },
041bd2e0 4104 },
4e7d34a6 4105
1ceb70f8 4106 /* PREFIX_0F6F */
ca164297 4107 {
507bd325
L
4108 { "movq", { MX, EM }, PREFIX_OPCODE },
4109 { "movdqu", { XM, EXx }, PREFIX_OPCODE },
4110 { "movdqa", { XM, EXx }, PREFIX_OPCODE },
ca164297 4111 },
4e7d34a6 4112
1ceb70f8 4113 /* PREFIX_0F70 */
4e7d34a6 4114 {
507bd325
L
4115 { "pshufw", { MX, EM, Ib }, PREFIX_OPCODE },
4116 { "pshufhw",{ XM, EXx, Ib }, PREFIX_OPCODE },
4117 { "pshufd", { XM, EXx, Ib }, PREFIX_OPCODE },
4118 { "pshuflw",{ XM, EXx, Ib }, PREFIX_OPCODE },
4e7d34a6
L
4119 },
4120
92fddf8e
L
4121 /* PREFIX_0F73_REG_3 */
4122 {
592d1631
L
4123 { Bad_Opcode },
4124 { Bad_Opcode },
bf890a93 4125 { "psrldq", { XS, Ib }, 0 },
92fddf8e
L
4126 },
4127
4128 /* PREFIX_0F73_REG_7 */
4129 {
592d1631
L
4130 { Bad_Opcode },
4131 { Bad_Opcode },
bf890a93 4132 { "pslldq", { XS, Ib }, 0 },
92fddf8e
L
4133 },
4134
1ceb70f8 4135 /* PREFIX_0F78 */
4e7d34a6 4136 {
bf890a93 4137 {"vmread", { Em, Gm }, 0 },
592d1631 4138 { Bad_Opcode },
bf890a93
IT
4139 {"extrq", { XS, Ib, Ib }, 0 },
4140 {"insertq", { XM, XS, Ib, Ib }, 0 },
4e7d34a6
L
4141 },
4142
1ceb70f8 4143 /* PREFIX_0F79 */
4e7d34a6 4144 {
bf890a93 4145 {"vmwrite", { Gm, Em }, 0 },
592d1631 4146 { Bad_Opcode },
bf890a93
IT
4147 {"extrq", { XM, XS }, 0 },
4148 {"insertq", { XM, XS }, 0 },
4e7d34a6
L
4149 },
4150
1ceb70f8 4151 /* PREFIX_0F7C */
ca164297 4152 {
592d1631
L
4153 { Bad_Opcode },
4154 { Bad_Opcode },
507bd325
L
4155 { "haddpd", { XM, EXx }, PREFIX_OPCODE },
4156 { "haddps", { XM, EXx }, PREFIX_OPCODE },
ca164297 4157 },
4e7d34a6 4158
1ceb70f8 4159 /* PREFIX_0F7D */
ca164297 4160 {
592d1631
L
4161 { Bad_Opcode },
4162 { Bad_Opcode },
507bd325
L
4163 { "hsubpd", { XM, EXx }, PREFIX_OPCODE },
4164 { "hsubps", { XM, EXx }, PREFIX_OPCODE },
ca164297 4165 },
4e7d34a6 4166
1ceb70f8 4167 /* PREFIX_0F7E */
ca164297 4168 {
507bd325
L
4169 { "movK", { Edq, MX }, PREFIX_OPCODE },
4170 { "movq", { XM, EXq }, PREFIX_OPCODE },
4171 { "movK", { Edq, XM }, PREFIX_OPCODE },
ca164297 4172 },
4e7d34a6 4173
1ceb70f8 4174 /* PREFIX_0F7F */
ca164297 4175 {
507bd325
L
4176 { "movq", { EMS, MX }, PREFIX_OPCODE },
4177 { "movdqu", { EXxS, XM }, PREFIX_OPCODE },
4178 { "movdqa", { EXxS, XM }, PREFIX_OPCODE },
ca164297 4179 },
4e7d34a6 4180
c7b8aa3a
L
4181 /* PREFIX_0FAE_REG_0 */
4182 {
4183 { Bad_Opcode },
bf890a93 4184 { "rdfsbase", { Ev }, 0 },
c7b8aa3a
L
4185 },
4186
4187 /* PREFIX_0FAE_REG_1 */
4188 {
4189 { Bad_Opcode },
bf890a93 4190 { "rdgsbase", { Ev }, 0 },
c7b8aa3a
L
4191 },
4192
4193 /* PREFIX_0FAE_REG_2 */
4194 {
4195 { Bad_Opcode },
bf890a93 4196 { "wrfsbase", { Ev }, 0 },
c7b8aa3a
L
4197 },
4198
4199 /* PREFIX_0FAE_REG_3 */
4200 {
4201 { Bad_Opcode },
bf890a93 4202 { "wrgsbase", { Ev }, 0 },
c7b8aa3a
L
4203 },
4204
6b40c462
L
4205 /* PREFIX_MOD_0_0FAE_REG_4 */
4206 {
4207 { "xsave", { FXSAVE }, 0 },
4208 { "ptwrite%LQ", { Edq }, 0 },
4209 },
4210
4211 /* PREFIX_MOD_3_0FAE_REG_4 */
4212 {
4213 { Bad_Opcode },
4214 { "ptwrite%LQ", { Edq }, 0 },
4215 },
4216
603555e5
L
4217 /* PREFIX_MOD_0_0FAE_REG_5 */
4218 {
4219 { "xrstor", { FXSAVE }, PREFIX_OPCODE },
2234eee6
L
4220 },
4221
4222 /* PREFIX_MOD_3_0FAE_REG_5 */
4223 {
4224 { "lfence", { Skip_MODRM }, 0 },
4225 { "incsspK", { Rdq }, PREFIX_OPCODE },
603555e5
L
4226 },
4227
de89d0a3 4228 /* PREFIX_MOD_0_0FAE_REG_6 */
c5e7287a 4229 {
603555e5
L
4230 { "xsaveopt", { FXSAVE }, PREFIX_OPCODE },
4231 { "clrssbsy", { Mq }, PREFIX_OPCODE },
4232 { "clwb", { Mb }, PREFIX_OPCODE },
c5e7287a
IT
4233 },
4234
de89d0a3
IT
4235 /* PREFIX_MOD_1_0FAE_REG_6 */
4236 {
4237 { RM_TABLE (RM_0FAE_REG_6) },
4238 { "umonitor", { Eva }, PREFIX_OPCODE },
ae1d3843
L
4239 { "tpause", { Edq }, PREFIX_OPCODE },
4240 { "umwait", { Edq }, PREFIX_OPCODE },
de89d0a3
IT
4241 },
4242
963f3586
IT
4243 /* PREFIX_0FAE_REG_7 */
4244 {
bf890a93 4245 { "clflush", { Mb }, 0 },
963f3586 4246 { Bad_Opcode },
bf890a93 4247 { "clflushopt", { Mb }, 0 },
963f3586
IT
4248 },
4249
1ceb70f8 4250 /* PREFIX_0FB8 */
ca164297 4251 {
592d1631 4252 { Bad_Opcode },
bf890a93 4253 { "popcntS", { Gv, Ev }, 0 },
ca164297 4254 },
4e7d34a6 4255
f12dc422
L
4256 /* PREFIX_0FBC */
4257 {
bf890a93
IT
4258 { "bsfS", { Gv, Ev }, 0 },
4259 { "tzcntS", { Gv, Ev }, 0 },
4260 { "bsfS", { Gv, Ev }, 0 },
f12dc422
L
4261 },
4262
1ceb70f8 4263 /* PREFIX_0FBD */
050dfa73 4264 {
bf890a93
IT
4265 { "bsrS", { Gv, Ev }, 0 },
4266 { "lzcntS", { Gv, Ev }, 0 },
4267 { "bsrS", { Gv, Ev }, 0 },
050dfa73
MM
4268 },
4269
1ceb70f8 4270 /* PREFIX_0FC2 */
050dfa73 4271 {
507bd325
L
4272 { "cmpps", { XM, EXx, CMP }, PREFIX_OPCODE },
4273 { "cmpss", { XM, EXd, CMP }, PREFIX_OPCODE },
4274 { "cmppd", { XM, EXx, CMP }, PREFIX_OPCODE },
4275 { "cmpsd", { XM, EXq, CMP }, PREFIX_OPCODE },
050dfa73 4276 },
246c51aa 4277
a8484f96 4278 /* PREFIX_MOD_0_0FC3 */
4ee52178 4279 {
a8484f96 4280 { "movntiS", { Ev, Gv }, PREFIX_OPCODE },
4ee52178
L
4281 },
4282
f24bcbaa 4283 /* PREFIX_MOD_0_0FC7_REG_6 */
92fddf8e 4284 {
bf890a93
IT
4285 { "vmptrld",{ Mq }, 0 },
4286 { "vmxon", { Mq }, 0 },
4287 { "vmclear",{ Mq }, 0 },
92fddf8e
L
4288 },
4289
f24bcbaa
L
4290 /* PREFIX_MOD_3_0FC7_REG_6 */
4291 {
4292 { "rdrand", { Ev }, 0 },
4293 { Bad_Opcode },
4294 { "rdrand", { Ev }, 0 }
4295 },
4296
4297 /* PREFIX_MOD_3_0FC7_REG_7 */
4298 {
4299 { "rdseed", { Ev }, 0 },
8bc52696 4300 { "rdpid", { Em }, 0 },
f24bcbaa
L
4301 { "rdseed", { Ev }, 0 },
4302 },
4303
1ceb70f8 4304 /* PREFIX_0FD0 */
050dfa73 4305 {
592d1631
L
4306 { Bad_Opcode },
4307 { Bad_Opcode },
bf890a93
IT
4308 { "addsubpd", { XM, EXx }, 0 },
4309 { "addsubps", { XM, EXx }, 0 },
246c51aa 4310 },
050dfa73 4311
1ceb70f8 4312 /* PREFIX_0FD6 */
050dfa73 4313 {
592d1631 4314 { Bad_Opcode },
bf890a93
IT
4315 { "movq2dq",{ XM, MS }, 0 },
4316 { "movq", { EXqS, XM }, 0 },
4317 { "movdq2q",{ MX, XS }, 0 },
050dfa73
MM
4318 },
4319
1ceb70f8 4320 /* PREFIX_0FE6 */
7918206c 4321 {
592d1631 4322 { Bad_Opcode },
507bd325
L
4323 { "cvtdq2pd", { XM, EXq }, PREFIX_OPCODE },
4324 { "cvttpd2dq", { XM, EXx }, PREFIX_OPCODE },
4325 { "cvtpd2dq", { XM, EXx }, PREFIX_OPCODE },
7918206c 4326 },
8b38ad71 4327
1ceb70f8 4328 /* PREFIX_0FE7 */
8b38ad71 4329 {
507bd325 4330 { "movntq", { Mq, MX }, PREFIX_OPCODE },
592d1631 4331 { Bad_Opcode },
75c135a8 4332 { MOD_TABLE (MOD_0FE7_PREFIX_2) },
4e7d34a6
L
4333 },
4334
1ceb70f8 4335 /* PREFIX_0FF0 */
4e7d34a6 4336 {
592d1631
L
4337 { Bad_Opcode },
4338 { Bad_Opcode },
4339 { Bad_Opcode },
1ceb70f8 4340 { MOD_TABLE (MOD_0FF0_PREFIX_3) },
4e7d34a6
L
4341 },
4342
1ceb70f8 4343 /* PREFIX_0FF7 */
4e7d34a6 4344 {
507bd325 4345 { "maskmovq", { MX, MS }, PREFIX_OPCODE },
592d1631 4346 { Bad_Opcode },
507bd325 4347 { "maskmovdqu", { XM, XS }, PREFIX_OPCODE },
8b38ad71 4348 },
42903f7f 4349
1ceb70f8 4350 /* PREFIX_0F3810 */
42903f7f 4351 {
592d1631
L
4352 { Bad_Opcode },
4353 { Bad_Opcode },
507bd325 4354 { "pblendvb", { XM, EXx, XMM0 }, PREFIX_OPCODE },
42903f7f
L
4355 },
4356
1ceb70f8 4357 /* PREFIX_0F3814 */
42903f7f 4358 {
592d1631
L
4359 { Bad_Opcode },
4360 { Bad_Opcode },
507bd325 4361 { "blendvps", { XM, EXx, XMM0 }, PREFIX_OPCODE },
42903f7f
L
4362 },
4363
1ceb70f8 4364 /* PREFIX_0F3815 */
42903f7f 4365 {
592d1631
L
4366 { Bad_Opcode },
4367 { Bad_Opcode },
507bd325 4368 { "blendvpd", { XM, EXx, XMM0 }, PREFIX_OPCODE },
42903f7f
L
4369 },
4370
1ceb70f8 4371 /* PREFIX_0F3817 */
42903f7f 4372 {
592d1631
L
4373 { Bad_Opcode },
4374 { Bad_Opcode },
507bd325 4375 { "ptest", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4376 },
4377
1ceb70f8 4378 /* PREFIX_0F3820 */
42903f7f 4379 {
592d1631
L
4380 { Bad_Opcode },
4381 { Bad_Opcode },
507bd325 4382 { "pmovsxbw", { XM, EXq }, PREFIX_OPCODE },
42903f7f
L
4383 },
4384
1ceb70f8 4385 /* PREFIX_0F3821 */
42903f7f 4386 {
592d1631
L
4387 { Bad_Opcode },
4388 { Bad_Opcode },
507bd325 4389 { "pmovsxbd", { XM, EXd }, PREFIX_OPCODE },
42903f7f
L
4390 },
4391
1ceb70f8 4392 /* PREFIX_0F3822 */
42903f7f 4393 {
592d1631
L
4394 { Bad_Opcode },
4395 { Bad_Opcode },
507bd325 4396 { "pmovsxbq", { XM, EXw }, PREFIX_OPCODE },
42903f7f
L
4397 },
4398
1ceb70f8 4399 /* PREFIX_0F3823 */
42903f7f 4400 {
592d1631
L
4401 { Bad_Opcode },
4402 { Bad_Opcode },
507bd325 4403 { "pmovsxwd", { XM, EXq }, PREFIX_OPCODE },
42903f7f
L
4404 },
4405
1ceb70f8 4406 /* PREFIX_0F3824 */
42903f7f 4407 {
592d1631
L
4408 { Bad_Opcode },
4409 { Bad_Opcode },
507bd325 4410 { "pmovsxwq", { XM, EXd }, PREFIX_OPCODE },
42903f7f
L
4411 },
4412
1ceb70f8 4413 /* PREFIX_0F3825 */
42903f7f 4414 {
592d1631
L
4415 { Bad_Opcode },
4416 { Bad_Opcode },
507bd325 4417 { "pmovsxdq", { XM, EXq }, PREFIX_OPCODE },
42903f7f
L
4418 },
4419
1ceb70f8 4420 /* PREFIX_0F3828 */
42903f7f 4421 {
592d1631
L
4422 { Bad_Opcode },
4423 { Bad_Opcode },
507bd325 4424 { "pmuldq", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4425 },
4426
1ceb70f8 4427 /* PREFIX_0F3829 */
42903f7f 4428 {
592d1631
L
4429 { Bad_Opcode },
4430 { Bad_Opcode },
507bd325 4431 { "pcmpeqq", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4432 },
4433
1ceb70f8 4434 /* PREFIX_0F382A */
42903f7f 4435 {
592d1631
L
4436 { Bad_Opcode },
4437 { Bad_Opcode },
75c135a8 4438 { MOD_TABLE (MOD_0F382A_PREFIX_2) },
42903f7f
L
4439 },
4440
1ceb70f8 4441 /* PREFIX_0F382B */
42903f7f 4442 {
592d1631
L
4443 { Bad_Opcode },
4444 { Bad_Opcode },
507bd325 4445 { "packusdw", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4446 },
4447
1ceb70f8 4448 /* PREFIX_0F3830 */
42903f7f 4449 {
592d1631
L
4450 { Bad_Opcode },
4451 { Bad_Opcode },
507bd325 4452 { "pmovzxbw", { XM, EXq }, PREFIX_OPCODE },
42903f7f
L
4453 },
4454
1ceb70f8 4455 /* PREFIX_0F3831 */
42903f7f 4456 {
592d1631
L
4457 { Bad_Opcode },
4458 { Bad_Opcode },
507bd325 4459 { "pmovzxbd", { XM, EXd }, PREFIX_OPCODE },
42903f7f
L
4460 },
4461
1ceb70f8 4462 /* PREFIX_0F3832 */
42903f7f 4463 {
592d1631
L
4464 { Bad_Opcode },
4465 { Bad_Opcode },
507bd325 4466 { "pmovzxbq", { XM, EXw }, PREFIX_OPCODE },
42903f7f
L
4467 },
4468
1ceb70f8 4469 /* PREFIX_0F3833 */
42903f7f 4470 {
592d1631
L
4471 { Bad_Opcode },
4472 { Bad_Opcode },
507bd325 4473 { "pmovzxwd", { XM, EXq }, PREFIX_OPCODE },
42903f7f
L
4474 },
4475
1ceb70f8 4476 /* PREFIX_0F3834 */
42903f7f 4477 {
592d1631
L
4478 { Bad_Opcode },
4479 { Bad_Opcode },
507bd325 4480 { "pmovzxwq", { XM, EXd }, PREFIX_OPCODE },
42903f7f
L
4481 },
4482
1ceb70f8 4483 /* PREFIX_0F3835 */
42903f7f 4484 {
592d1631
L
4485 { Bad_Opcode },
4486 { Bad_Opcode },
507bd325 4487 { "pmovzxdq", { XM, EXq }, PREFIX_OPCODE },
42903f7f
L
4488 },
4489
1ceb70f8 4490 /* PREFIX_0F3837 */
4e7d34a6 4491 {
592d1631
L
4492 { Bad_Opcode },
4493 { Bad_Opcode },
507bd325 4494 { "pcmpgtq", { XM, EXx }, PREFIX_OPCODE },
4e7d34a6
L
4495 },
4496
1ceb70f8 4497 /* PREFIX_0F3838 */
42903f7f 4498 {
592d1631
L
4499 { Bad_Opcode },
4500 { Bad_Opcode },
507bd325 4501 { "pminsb", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4502 },
4503
1ceb70f8 4504 /* PREFIX_0F3839 */
42903f7f 4505 {
592d1631
L
4506 { Bad_Opcode },
4507 { Bad_Opcode },
507bd325 4508 { "pminsd", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4509 },
4510
1ceb70f8 4511 /* PREFIX_0F383A */
42903f7f 4512 {
592d1631
L
4513 { Bad_Opcode },
4514 { Bad_Opcode },
507bd325 4515 { "pminuw", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4516 },
4517
1ceb70f8 4518 /* PREFIX_0F383B */
42903f7f 4519 {
592d1631
L
4520 { Bad_Opcode },
4521 { Bad_Opcode },
507bd325 4522 { "pminud", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4523 },
4524
1ceb70f8 4525 /* PREFIX_0F383C */
42903f7f 4526 {
592d1631
L
4527 { Bad_Opcode },
4528 { Bad_Opcode },
507bd325 4529 { "pmaxsb", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4530 },
4531
1ceb70f8 4532 /* PREFIX_0F383D */
42903f7f 4533 {
592d1631
L
4534 { Bad_Opcode },
4535 { Bad_Opcode },
507bd325 4536 { "pmaxsd", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4537 },
4538
1ceb70f8 4539 /* PREFIX_0F383E */
42903f7f 4540 {
592d1631
L
4541 { Bad_Opcode },
4542 { Bad_Opcode },
507bd325 4543 { "pmaxuw", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4544 },
4545
1ceb70f8 4546 /* PREFIX_0F383F */
42903f7f 4547 {
592d1631
L
4548 { Bad_Opcode },
4549 { Bad_Opcode },
507bd325 4550 { "pmaxud", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4551 },
4552
1ceb70f8 4553 /* PREFIX_0F3840 */
42903f7f 4554 {
592d1631
L
4555 { Bad_Opcode },
4556 { Bad_Opcode },
507bd325 4557 { "pmulld", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4558 },
4559
1ceb70f8 4560 /* PREFIX_0F3841 */
42903f7f 4561 {
592d1631
L
4562 { Bad_Opcode },
4563 { Bad_Opcode },
507bd325 4564 { "phminposuw", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4565 },
4566
f1f8f695
L
4567 /* PREFIX_0F3880 */
4568 {
592d1631
L
4569 { Bad_Opcode },
4570 { Bad_Opcode },
507bd325 4571 { "invept", { Gm, Mo }, PREFIX_OPCODE },
f1f8f695
L
4572 },
4573
4574 /* PREFIX_0F3881 */
4575 {
592d1631
L
4576 { Bad_Opcode },
4577 { Bad_Opcode },
507bd325 4578 { "invvpid", { Gm, Mo }, PREFIX_OPCODE },
f1f8f695
L
4579 },
4580
6c30d220
L
4581 /* PREFIX_0F3882 */
4582 {
4583 { Bad_Opcode },
4584 { Bad_Opcode },
507bd325 4585 { "invpcid", { Gm, M }, PREFIX_OPCODE },
6c30d220
L
4586 },
4587
a0046408
L
4588 /* PREFIX_0F38C8 */
4589 {
507bd325 4590 { "sha1nexte", { XM, EXxmm }, PREFIX_OPCODE },
a0046408
L
4591 },
4592
4593 /* PREFIX_0F38C9 */
4594 {
507bd325 4595 { "sha1msg1", { XM, EXxmm }, PREFIX_OPCODE },
a0046408
L
4596 },
4597
4598 /* PREFIX_0F38CA */
4599 {
507bd325 4600 { "sha1msg2", { XM, EXxmm }, PREFIX_OPCODE },
a0046408
L
4601 },
4602
4603 /* PREFIX_0F38CB */
4604 {
507bd325 4605 { "sha256rnds2", { XM, EXxmm, XMM0 }, PREFIX_OPCODE },
a0046408
L
4606 },
4607
4608 /* PREFIX_0F38CC */
4609 {
507bd325 4610 { "sha256msg1", { XM, EXxmm }, PREFIX_OPCODE },
a0046408
L
4611 },
4612
4613 /* PREFIX_0F38CD */
4614 {
507bd325 4615 { "sha256msg2", { XM, EXxmm }, PREFIX_OPCODE },
a0046408
L
4616 },
4617
48521003
IT
4618 /* PREFIX_0F38CF */
4619 {
4620 { Bad_Opcode },
4621 { Bad_Opcode },
4622 { "gf2p8mulb", { XM, EXxmm }, PREFIX_OPCODE },
4623 },
4624
c0f3af97
L
4625 /* PREFIX_0F38DB */
4626 {
592d1631
L
4627 { Bad_Opcode },
4628 { Bad_Opcode },
507bd325 4629 { "aesimc", { XM, EXx }, PREFIX_OPCODE },
c0f3af97
L
4630 },
4631
4632 /* PREFIX_0F38DC */
4633 {
592d1631
L
4634 { Bad_Opcode },
4635 { Bad_Opcode },
507bd325 4636 { "aesenc", { XM, EXx }, PREFIX_OPCODE },
c0f3af97
L
4637 },
4638
4639 /* PREFIX_0F38DD */
4640 {
592d1631
L
4641 { Bad_Opcode },
4642 { Bad_Opcode },
507bd325 4643 { "aesenclast", { XM, EXx }, PREFIX_OPCODE },
c0f3af97
L
4644 },
4645
4646 /* PREFIX_0F38DE */
4647 {
592d1631
L
4648 { Bad_Opcode },
4649 { Bad_Opcode },
507bd325 4650 { "aesdec", { XM, EXx }, PREFIX_OPCODE },
c0f3af97
L
4651 },
4652
4653 /* PREFIX_0F38DF */
4654 {
592d1631
L
4655 { Bad_Opcode },
4656 { Bad_Opcode },
507bd325 4657 { "aesdeclast", { XM, EXx }, PREFIX_OPCODE },
c0f3af97
L
4658 },
4659
1ceb70f8 4660 /* PREFIX_0F38F0 */
4e7d34a6 4661 {
507bd325 4662 { "movbeS", { Gv, { MOVBE_Fixup, v_mode } }, PREFIX_OPCODE },
592d1631 4663 { Bad_Opcode },
507bd325
L
4664 { "movbeS", { Gv, { MOVBE_Fixup, v_mode } }, PREFIX_OPCODE },
4665 { "crc32", { Gdq, { CRC32_Fixup, b_mode } }, PREFIX_OPCODE },
4e7d34a6
L
4666 },
4667
1ceb70f8 4668 /* PREFIX_0F38F1 */
4e7d34a6 4669 {
507bd325 4670 { "movbeS", { { MOVBE_Fixup, v_mode }, Gv }, PREFIX_OPCODE },
592d1631 4671 { Bad_Opcode },
507bd325
L
4672 { "movbeS", { { MOVBE_Fixup, v_mode }, Gv }, PREFIX_OPCODE },
4673 { "crc32", { Gdq, { CRC32_Fixup, v_mode } }, PREFIX_OPCODE },
4e7d34a6
L
4674 },
4675
603555e5 4676 /* PREFIX_0F38F5 */
e2e1fcde
L
4677 {
4678 { Bad_Opcode },
603555e5
L
4679 { Bad_Opcode },
4680 { MOD_TABLE (MOD_0F38F5_PREFIX_2) },
4681 },
4682
4683 /* PREFIX_0F38F6 */
4684 {
4685 { MOD_TABLE (MOD_0F38F6_PREFIX_0) },
507bd325
L
4686 { "adoxS", { Gdq, Edq}, PREFIX_OPCODE },
4687 { "adcxS", { Gdq, Edq}, PREFIX_OPCODE },
e2e1fcde
L
4688 { Bad_Opcode },
4689 },
4690
c0a30a9f
L
4691 /* PREFIX_0F38F8 */
4692 {
4693 { Bad_Opcode },
4694 { Bad_Opcode },
4695 { MOD_TABLE (MOD_0F38F8_PREFIX_2) },
4696 },
4697
4698 /* PREFIX_0F38F9 */
4699 {
4700 { MOD_TABLE (MOD_0F38F9_PREFIX_0) },
4701 },
4702
1ceb70f8 4703 /* PREFIX_0F3A08 */
42903f7f 4704 {
592d1631
L
4705 { Bad_Opcode },
4706 { Bad_Opcode },
507bd325 4707 { "roundps", { XM, EXx, Ib }, PREFIX_OPCODE },
42903f7f
L
4708 },
4709
1ceb70f8 4710 /* PREFIX_0F3A09 */
42903f7f 4711 {
592d1631
L
4712 { Bad_Opcode },
4713 { Bad_Opcode },
507bd325 4714 { "roundpd", { XM, EXx, Ib }, PREFIX_OPCODE },
42903f7f
L
4715 },
4716
1ceb70f8 4717 /* PREFIX_0F3A0A */
42903f7f 4718 {
592d1631
L
4719 { Bad_Opcode },
4720 { Bad_Opcode },
507bd325 4721 { "roundss", { XM, EXd, Ib }, PREFIX_OPCODE },
42903f7f
L
4722 },
4723
1ceb70f8 4724 /* PREFIX_0F3A0B */
42903f7f 4725 {
592d1631
L
4726 { Bad_Opcode },
4727 { Bad_Opcode },
507bd325 4728 { "roundsd", { XM, EXq, Ib }, PREFIX_OPCODE },
42903f7f
L
4729 },
4730
1ceb70f8 4731 /* PREFIX_0F3A0C */
42903f7f 4732 {
592d1631
L
4733 { Bad_Opcode },
4734 { Bad_Opcode },
507bd325 4735 { "blendps", { XM, EXx, Ib }, PREFIX_OPCODE },
42903f7f
L
4736 },
4737
1ceb70f8 4738 /* PREFIX_0F3A0D */
42903f7f 4739 {
592d1631
L
4740 { Bad_Opcode },
4741 { Bad_Opcode },
507bd325 4742 { "blendpd", { XM, EXx, Ib }, PREFIX_OPCODE },
42903f7f
L
4743 },
4744
1ceb70f8 4745 /* PREFIX_0F3A0E */
42903f7f 4746 {
592d1631
L
4747 { Bad_Opcode },
4748 { Bad_Opcode },
507bd325 4749 { "pblendw", { XM, EXx, Ib }, PREFIX_OPCODE },
42903f7f
L
4750 },
4751
1ceb70f8 4752 /* PREFIX_0F3A14 */
42903f7f 4753 {
592d1631
L
4754 { Bad_Opcode },
4755 { Bad_Opcode },
507bd325 4756 { "pextrb", { Edqb, XM, Ib }, PREFIX_OPCODE },
42903f7f
L
4757 },
4758
1ceb70f8 4759 /* PREFIX_0F3A15 */
42903f7f 4760 {
592d1631
L
4761 { Bad_Opcode },
4762 { Bad_Opcode },
507bd325 4763 { "pextrw", { Edqw, XM, Ib }, PREFIX_OPCODE },
42903f7f
L
4764 },
4765
1ceb70f8 4766 /* PREFIX_0F3A16 */
42903f7f 4767 {
592d1631
L
4768 { Bad_Opcode },
4769 { Bad_Opcode },
507bd325 4770 { "pextrK", { Edq, XM, Ib }, PREFIX_OPCODE },
42903f7f
L
4771 },
4772
1ceb70f8 4773 /* PREFIX_0F3A17 */
42903f7f 4774 {
592d1631
L
4775 { Bad_Opcode },
4776 { Bad_Opcode },
507bd325 4777 { "extractps", { Edqd, XM, Ib }, PREFIX_OPCODE },
42903f7f
L
4778 },
4779
1ceb70f8 4780 /* PREFIX_0F3A20 */
42903f7f 4781 {
592d1631
L
4782 { Bad_Opcode },
4783 { Bad_Opcode },
507bd325 4784 { "pinsrb", { XM, Edqb, Ib }, PREFIX_OPCODE },
42903f7f
L
4785 },
4786
1ceb70f8 4787 /* PREFIX_0F3A21 */
42903f7f 4788 {
592d1631
L
4789 { Bad_Opcode },
4790 { Bad_Opcode },
507bd325 4791 { "insertps", { XM, EXd, Ib }, PREFIX_OPCODE },
42903f7f
L
4792 },
4793
1ceb70f8 4794 /* PREFIX_0F3A22 */
42903f7f 4795 {
592d1631
L
4796 { Bad_Opcode },
4797 { Bad_Opcode },
507bd325 4798 { "pinsrK", { XM, Edq, Ib }, PREFIX_OPCODE },
42903f7f
L
4799 },
4800
1ceb70f8 4801 /* PREFIX_0F3A40 */
42903f7f 4802 {
592d1631
L
4803 { Bad_Opcode },
4804 { Bad_Opcode },
507bd325 4805 { "dpps", { XM, EXx, Ib }, PREFIX_OPCODE },
42903f7f
L
4806 },
4807
1ceb70f8 4808 /* PREFIX_0F3A41 */
42903f7f 4809 {
592d1631
L
4810 { Bad_Opcode },
4811 { Bad_Opcode },
507bd325 4812 { "dppd", { XM, EXx, Ib }, PREFIX_OPCODE },
42903f7f
L
4813 },
4814
1ceb70f8 4815 /* PREFIX_0F3A42 */
42903f7f 4816 {
592d1631
L
4817 { Bad_Opcode },
4818 { Bad_Opcode },
507bd325 4819 { "mpsadbw", { XM, EXx, Ib }, PREFIX_OPCODE },
42903f7f 4820 },
381d071f 4821
c0f3af97
L
4822 /* PREFIX_0F3A44 */
4823 {
592d1631
L
4824 { Bad_Opcode },
4825 { Bad_Opcode },
507bd325 4826 { "pclmulqdq", { XM, EXx, PCLMUL }, PREFIX_OPCODE },
c0f3af97
L
4827 },
4828
1ceb70f8 4829 /* PREFIX_0F3A60 */
381d071f 4830 {
592d1631
L
4831 { Bad_Opcode },
4832 { Bad_Opcode },
15c7c1d8 4833 { "pcmpestrm", { XM, { PCMPESTR_Fixup, x_mode }, Ib }, PREFIX_OPCODE },
381d071f
L
4834 },
4835
1ceb70f8 4836 /* PREFIX_0F3A61 */
381d071f 4837 {
592d1631
L
4838 { Bad_Opcode },
4839 { Bad_Opcode },
15c7c1d8 4840 { "pcmpestri", { XM, { PCMPESTR_Fixup, x_mode }, Ib }, PREFIX_OPCODE },
381d071f
L
4841 },
4842
1ceb70f8 4843 /* PREFIX_0F3A62 */
381d071f 4844 {
592d1631
L
4845 { Bad_Opcode },
4846 { Bad_Opcode },
507bd325 4847 { "pcmpistrm", { XM, EXx, Ib }, PREFIX_OPCODE },
381d071f
L
4848 },
4849
1ceb70f8 4850 /* PREFIX_0F3A63 */
381d071f 4851 {
592d1631
L
4852 { Bad_Opcode },
4853 { Bad_Opcode },
507bd325 4854 { "pcmpistri", { XM, EXx, Ib }, PREFIX_OPCODE },
381d071f 4855 },
09a2c6cf 4856
a0046408
L
4857 /* PREFIX_0F3ACC */
4858 {
507bd325 4859 { "sha1rnds4", { XM, EXxmm, Ib }, PREFIX_OPCODE },
a0046408
L
4860 },
4861
48521003
IT
4862 /* PREFIX_0F3ACE */
4863 {
4864 { Bad_Opcode },
4865 { Bad_Opcode },
4866 { "gf2p8affineqb", { XM, EXxmm, Ib }, PREFIX_OPCODE },
4867 },
4868
4869 /* PREFIX_0F3ACF */
4870 {
4871 { Bad_Opcode },
4872 { Bad_Opcode },
4873 { "gf2p8affineinvqb", { XM, EXxmm, Ib }, PREFIX_OPCODE },
4874 },
4875
c0f3af97 4876 /* PREFIX_0F3ADF */
09a2c6cf 4877 {
592d1631
L
4878 { Bad_Opcode },
4879 { Bad_Opcode },
507bd325 4880 { "aeskeygenassist", { XM, EXx, Ib }, PREFIX_OPCODE },
09a2c6cf
L
4881 },
4882
592a252b 4883 /* PREFIX_VEX_0F10 */
09a2c6cf 4884 {
592a252b
L
4885 { VEX_W_TABLE (VEX_W_0F10_P_0) },
4886 { VEX_LEN_TABLE (VEX_LEN_0F10_P_1) },
4887 { VEX_W_TABLE (VEX_W_0F10_P_2) },
4888 { VEX_LEN_TABLE (VEX_LEN_0F10_P_3) },
09a2c6cf
L
4889 },
4890
592a252b 4891 /* PREFIX_VEX_0F11 */
09a2c6cf 4892 {
592a252b
L
4893 { VEX_W_TABLE (VEX_W_0F11_P_0) },
4894 { VEX_LEN_TABLE (VEX_LEN_0F11_P_1) },
4895 { VEX_W_TABLE (VEX_W_0F11_P_2) },
4896 { VEX_LEN_TABLE (VEX_LEN_0F11_P_3) },
09a2c6cf
L
4897 },
4898
592a252b 4899 /* PREFIX_VEX_0F12 */
09a2c6cf 4900 {
592a252b
L
4901 { MOD_TABLE (MOD_VEX_0F12_PREFIX_0) },
4902 { VEX_W_TABLE (VEX_W_0F12_P_1) },
4903 { VEX_LEN_TABLE (VEX_LEN_0F12_P_2) },
4904 { VEX_W_TABLE (VEX_W_0F12_P_3) },
09a2c6cf
L
4905 },
4906
592a252b 4907 /* PREFIX_VEX_0F16 */
09a2c6cf 4908 {
592a252b
L
4909 { MOD_TABLE (MOD_VEX_0F16_PREFIX_0) },
4910 { VEX_W_TABLE (VEX_W_0F16_P_1) },
4911 { VEX_LEN_TABLE (VEX_LEN_0F16_P_2) },
5f754f58 4912 },
7c52e0e8 4913
592a252b 4914 /* PREFIX_VEX_0F2A */
5f754f58 4915 {
592d1631 4916 { Bad_Opcode },
592a252b 4917 { VEX_LEN_TABLE (VEX_LEN_0F2A_P_1) },
592d1631 4918 { Bad_Opcode },
592a252b 4919 { VEX_LEN_TABLE (VEX_LEN_0F2A_P_3) },
5f754f58 4920 },
7c52e0e8 4921
592a252b 4922 /* PREFIX_VEX_0F2C */
5f754f58 4923 {
592d1631 4924 { Bad_Opcode },
592a252b 4925 { VEX_LEN_TABLE (VEX_LEN_0F2C_P_1) },
592d1631 4926 { Bad_Opcode },
592a252b 4927 { VEX_LEN_TABLE (VEX_LEN_0F2C_P_3) },
5f754f58 4928 },
7c52e0e8 4929
592a252b 4930 /* PREFIX_VEX_0F2D */
7c52e0e8 4931 {
592d1631 4932 { Bad_Opcode },
592a252b 4933 { VEX_LEN_TABLE (VEX_LEN_0F2D_P_1) },
592d1631 4934 { Bad_Opcode },
592a252b 4935 { VEX_LEN_TABLE (VEX_LEN_0F2D_P_3) },
7c52e0e8
L
4936 },
4937
592a252b 4938 /* PREFIX_VEX_0F2E */
7c52e0e8 4939 {
592a252b 4940 { VEX_LEN_TABLE (VEX_LEN_0F2E_P_0) },
592d1631 4941 { Bad_Opcode },
592a252b 4942 { VEX_LEN_TABLE (VEX_LEN_0F2E_P_2) },
7c52e0e8
L
4943 },
4944
592a252b 4945 /* PREFIX_VEX_0F2F */
7c52e0e8 4946 {
592a252b 4947 { VEX_LEN_TABLE (VEX_LEN_0F2F_P_0) },
592d1631 4948 { Bad_Opcode },
592a252b 4949 { VEX_LEN_TABLE (VEX_LEN_0F2F_P_2) },
7c52e0e8
L
4950 },
4951
43234a1e
L
4952 /* PREFIX_VEX_0F41 */
4953 {
4954 { VEX_LEN_TABLE (VEX_LEN_0F41_P_0) },
1ba585e8
IT
4955 { Bad_Opcode },
4956 { VEX_LEN_TABLE (VEX_LEN_0F41_P_2) },
43234a1e
L
4957 },
4958
4959 /* PREFIX_VEX_0F42 */
4960 {
4961 { VEX_LEN_TABLE (VEX_LEN_0F42_P_0) },
1ba585e8
IT
4962 { Bad_Opcode },
4963 { VEX_LEN_TABLE (VEX_LEN_0F42_P_2) },
43234a1e
L
4964 },
4965
4966 /* PREFIX_VEX_0F44 */
4967 {
4968 { VEX_LEN_TABLE (VEX_LEN_0F44_P_0) },
1ba585e8
IT
4969 { Bad_Opcode },
4970 { VEX_LEN_TABLE (VEX_LEN_0F44_P_2) },
43234a1e
L
4971 },
4972
4973 /* PREFIX_VEX_0F45 */
4974 {
4975 { VEX_LEN_TABLE (VEX_LEN_0F45_P_0) },
1ba585e8
IT
4976 { Bad_Opcode },
4977 { VEX_LEN_TABLE (VEX_LEN_0F45_P_2) },
43234a1e
L
4978 },
4979
4980 /* PREFIX_VEX_0F46 */
4981 {
4982 { VEX_LEN_TABLE (VEX_LEN_0F46_P_0) },
1ba585e8
IT
4983 { Bad_Opcode },
4984 { VEX_LEN_TABLE (VEX_LEN_0F46_P_2) },
43234a1e
L
4985 },
4986
4987 /* PREFIX_VEX_0F47 */
4988 {
4989 { VEX_LEN_TABLE (VEX_LEN_0F47_P_0) },
1ba585e8
IT
4990 { Bad_Opcode },
4991 { VEX_LEN_TABLE (VEX_LEN_0F47_P_2) },
43234a1e
L
4992 },
4993
1ba585e8 4994 /* PREFIX_VEX_0F4A */
43234a1e 4995 {
1ba585e8 4996 { VEX_LEN_TABLE (VEX_LEN_0F4A_P_0) },
43234a1e 4997 { Bad_Opcode },
1ba585e8
IT
4998 { VEX_LEN_TABLE (VEX_LEN_0F4A_P_2) },
4999 },
5000
5001 /* PREFIX_VEX_0F4B */
5002 {
5003 { VEX_LEN_TABLE (VEX_LEN_0F4B_P_0) },
43234a1e
L
5004 { Bad_Opcode },
5005 { VEX_LEN_TABLE (VEX_LEN_0F4B_P_2) },
5006 },
5007
592a252b 5008 /* PREFIX_VEX_0F51 */
7c52e0e8 5009 {
592a252b
L
5010 { VEX_W_TABLE (VEX_W_0F51_P_0) },
5011 { VEX_LEN_TABLE (VEX_LEN_0F51_P_1) },
5012 { VEX_W_TABLE (VEX_W_0F51_P_2) },
5013 { VEX_LEN_TABLE (VEX_LEN_0F51_P_3) },
7c52e0e8
L
5014 },
5015
592a252b 5016 /* PREFIX_VEX_0F52 */
7c52e0e8 5017 {
592a252b
L
5018 { VEX_W_TABLE (VEX_W_0F52_P_0) },
5019 { VEX_LEN_TABLE (VEX_LEN_0F52_P_1) },
7c52e0e8
L
5020 },
5021
592a252b 5022 /* PREFIX_VEX_0F53 */
7c52e0e8 5023 {
592a252b
L
5024 { VEX_W_TABLE (VEX_W_0F53_P_0) },
5025 { VEX_LEN_TABLE (VEX_LEN_0F53_P_1) },
7c52e0e8
L
5026 },
5027
592a252b 5028 /* PREFIX_VEX_0F58 */
7c52e0e8 5029 {
592a252b
L
5030 { VEX_W_TABLE (VEX_W_0F58_P_0) },
5031 { VEX_LEN_TABLE (VEX_LEN_0F58_P_1) },
5032 { VEX_W_TABLE (VEX_W_0F58_P_2) },
5033 { VEX_LEN_TABLE (VEX_LEN_0F58_P_3) },
7c52e0e8
L
5034 },
5035
592a252b 5036 /* PREFIX_VEX_0F59 */
7c52e0e8 5037 {
592a252b
L
5038 { VEX_W_TABLE (VEX_W_0F59_P_0) },
5039 { VEX_LEN_TABLE (VEX_LEN_0F59_P_1) },
5040 { VEX_W_TABLE (VEX_W_0F59_P_2) },
5041 { VEX_LEN_TABLE (VEX_LEN_0F59_P_3) },
7c52e0e8
L
5042 },
5043
592a252b 5044 /* PREFIX_VEX_0F5A */
7c52e0e8 5045 {
592a252b
L
5046 { VEX_W_TABLE (VEX_W_0F5A_P_0) },
5047 { VEX_LEN_TABLE (VEX_LEN_0F5A_P_1) },
bf890a93 5048 { "vcvtpd2ps%XY", { XMM, EXx }, 0 },
592a252b 5049 { VEX_LEN_TABLE (VEX_LEN_0F5A_P_3) },
7c52e0e8
L
5050 },
5051
592a252b 5052 /* PREFIX_VEX_0F5B */
7c52e0e8 5053 {
592a252b
L
5054 { VEX_W_TABLE (VEX_W_0F5B_P_0) },
5055 { VEX_W_TABLE (VEX_W_0F5B_P_1) },
5056 { VEX_W_TABLE (VEX_W_0F5B_P_2) },
7c52e0e8
L
5057 },
5058
592a252b 5059 /* PREFIX_VEX_0F5C */
7c52e0e8 5060 {
592a252b
L
5061 { VEX_W_TABLE (VEX_W_0F5C_P_0) },
5062 { VEX_LEN_TABLE (VEX_LEN_0F5C_P_1) },
5063 { VEX_W_TABLE (VEX_W_0F5C_P_2) },
5064 { VEX_LEN_TABLE (VEX_LEN_0F5C_P_3) },
7c52e0e8
L
5065 },
5066
592a252b 5067 /* PREFIX_VEX_0F5D */
7c52e0e8 5068 {
592a252b
L
5069 { VEX_W_TABLE (VEX_W_0F5D_P_0) },
5070 { VEX_LEN_TABLE (VEX_LEN_0F5D_P_1) },
5071 { VEX_W_TABLE (VEX_W_0F5D_P_2) },
5072 { VEX_LEN_TABLE (VEX_LEN_0F5D_P_3) },
7c52e0e8
L
5073 },
5074
592a252b 5075 /* PREFIX_VEX_0F5E */
7c52e0e8 5076 {
592a252b
L
5077 { VEX_W_TABLE (VEX_W_0F5E_P_0) },
5078 { VEX_LEN_TABLE (VEX_LEN_0F5E_P_1) },
5079 { VEX_W_TABLE (VEX_W_0F5E_P_2) },
5080 { VEX_LEN_TABLE (VEX_LEN_0F5E_P_3) },
7c52e0e8
L
5081 },
5082
592a252b 5083 /* PREFIX_VEX_0F5F */
7c52e0e8 5084 {
592a252b
L
5085 { VEX_W_TABLE (VEX_W_0F5F_P_0) },
5086 { VEX_LEN_TABLE (VEX_LEN_0F5F_P_1) },
5087 { VEX_W_TABLE (VEX_W_0F5F_P_2) },
5088 { VEX_LEN_TABLE (VEX_LEN_0F5F_P_3) },
7c52e0e8
L
5089 },
5090
592a252b 5091 /* PREFIX_VEX_0F60 */
7c52e0e8 5092 {
592d1631
L
5093 { Bad_Opcode },
5094 { Bad_Opcode },
6c30d220 5095 { VEX_W_TABLE (VEX_W_0F60_P_2) },
7c52e0e8
L
5096 },
5097
592a252b 5098 /* PREFIX_VEX_0F61 */
7c52e0e8 5099 {
592d1631
L
5100 { Bad_Opcode },
5101 { Bad_Opcode },
6c30d220 5102 { VEX_W_TABLE (VEX_W_0F61_P_2) },
7c52e0e8
L
5103 },
5104
592a252b 5105 /* PREFIX_VEX_0F62 */
7c52e0e8 5106 {
592d1631
L
5107 { Bad_Opcode },
5108 { Bad_Opcode },
6c30d220 5109 { VEX_W_TABLE (VEX_W_0F62_P_2) },
7c52e0e8
L
5110 },
5111
592a252b 5112 /* PREFIX_VEX_0F63 */
7c52e0e8 5113 {
592d1631
L
5114 { Bad_Opcode },
5115 { Bad_Opcode },
6c30d220 5116 { VEX_W_TABLE (VEX_W_0F63_P_2) },
7c52e0e8
L
5117 },
5118
592a252b 5119 /* PREFIX_VEX_0F64 */
7c52e0e8 5120 {
592d1631
L
5121 { Bad_Opcode },
5122 { Bad_Opcode },
6c30d220 5123 { VEX_W_TABLE (VEX_W_0F64_P_2) },
7c52e0e8
L
5124 },
5125
592a252b 5126 /* PREFIX_VEX_0F65 */
7c52e0e8 5127 {
592d1631
L
5128 { Bad_Opcode },
5129 { Bad_Opcode },
6c30d220 5130 { VEX_W_TABLE (VEX_W_0F65_P_2) },
7c52e0e8
L
5131 },
5132
592a252b 5133 /* PREFIX_VEX_0F66 */
7c52e0e8 5134 {
592d1631
L
5135 { Bad_Opcode },
5136 { Bad_Opcode },
6c30d220 5137 { VEX_W_TABLE (VEX_W_0F66_P_2) },
7c52e0e8 5138 },
6439fc28 5139
592a252b 5140 /* PREFIX_VEX_0F67 */
331d2d0d 5141 {
592d1631
L
5142 { Bad_Opcode },
5143 { Bad_Opcode },
6c30d220 5144 { VEX_W_TABLE (VEX_W_0F67_P_2) },
c0f3af97
L
5145 },
5146
592a252b 5147 /* PREFIX_VEX_0F68 */
c0f3af97 5148 {
592d1631
L
5149 { Bad_Opcode },
5150 { Bad_Opcode },
6c30d220 5151 { VEX_W_TABLE (VEX_W_0F68_P_2) },
c0f3af97
L
5152 },
5153
592a252b 5154 /* PREFIX_VEX_0F69 */
c0f3af97 5155 {
592d1631
L
5156 { Bad_Opcode },
5157 { Bad_Opcode },
6c30d220 5158 { VEX_W_TABLE (VEX_W_0F69_P_2) },
c0f3af97
L
5159 },
5160
592a252b 5161 /* PREFIX_VEX_0F6A */
c0f3af97 5162 {
592d1631
L
5163 { Bad_Opcode },
5164 { Bad_Opcode },
6c30d220 5165 { VEX_W_TABLE (VEX_W_0F6A_P_2) },
c0f3af97
L
5166 },
5167
592a252b 5168 /* PREFIX_VEX_0F6B */
c0f3af97 5169 {
592d1631
L
5170 { Bad_Opcode },
5171 { Bad_Opcode },
6c30d220 5172 { VEX_W_TABLE (VEX_W_0F6B_P_2) },
c0f3af97
L
5173 },
5174
592a252b 5175 /* PREFIX_VEX_0F6C */
c0f3af97 5176 {
592d1631
L
5177 { Bad_Opcode },
5178 { Bad_Opcode },
6c30d220 5179 { VEX_W_TABLE (VEX_W_0F6C_P_2) },
c0f3af97
L
5180 },
5181
592a252b 5182 /* PREFIX_VEX_0F6D */
c0f3af97 5183 {
592d1631
L
5184 { Bad_Opcode },
5185 { Bad_Opcode },
6c30d220 5186 { VEX_W_TABLE (VEX_W_0F6D_P_2) },
c0f3af97
L
5187 },
5188
592a252b 5189 /* PREFIX_VEX_0F6E */
c0f3af97 5190 {
592d1631
L
5191 { Bad_Opcode },
5192 { Bad_Opcode },
592a252b 5193 { VEX_LEN_TABLE (VEX_LEN_0F6E_P_2) },
c0f3af97
L
5194 },
5195
592a252b 5196 /* PREFIX_VEX_0F6F */
c0f3af97 5197 {
592d1631 5198 { Bad_Opcode },
592a252b
L
5199 { VEX_W_TABLE (VEX_W_0F6F_P_1) },
5200 { VEX_W_TABLE (VEX_W_0F6F_P_2) },
c0f3af97
L
5201 },
5202
592a252b 5203 /* PREFIX_VEX_0F70 */
c0f3af97 5204 {
592d1631 5205 { Bad_Opcode },
6c30d220
L
5206 { VEX_W_TABLE (VEX_W_0F70_P_1) },
5207 { VEX_W_TABLE (VEX_W_0F70_P_2) },
5208 { VEX_W_TABLE (VEX_W_0F70_P_3) },
c0f3af97
L
5209 },
5210
592a252b 5211 /* PREFIX_VEX_0F71_REG_2 */
c0f3af97 5212 {
592d1631
L
5213 { Bad_Opcode },
5214 { Bad_Opcode },
6c30d220 5215 { VEX_W_TABLE (VEX_W_0F71_R_2_P_2) },
c0f3af97
L
5216 },
5217
592a252b 5218 /* PREFIX_VEX_0F71_REG_4 */
c0f3af97 5219 {
592d1631
L
5220 { Bad_Opcode },
5221 { Bad_Opcode },
6c30d220 5222 { VEX_W_TABLE (VEX_W_0F71_R_4_P_2) },
c0f3af97
L
5223 },
5224
592a252b 5225 /* PREFIX_VEX_0F71_REG_6 */
c0f3af97 5226 {
592d1631
L
5227 { Bad_Opcode },
5228 { Bad_Opcode },
6c30d220 5229 { VEX_W_TABLE (VEX_W_0F71_R_6_P_2) },
c0f3af97
L
5230 },
5231
592a252b 5232 /* PREFIX_VEX_0F72_REG_2 */
c0f3af97 5233 {
592d1631
L
5234 { Bad_Opcode },
5235 { Bad_Opcode },
6c30d220 5236 { VEX_W_TABLE (VEX_W_0F72_R_2_P_2) },
c0f3af97
L
5237 },
5238
592a252b 5239 /* PREFIX_VEX_0F72_REG_4 */
c0f3af97 5240 {
592d1631
L
5241 { Bad_Opcode },
5242 { Bad_Opcode },
6c30d220 5243 { VEX_W_TABLE (VEX_W_0F72_R_4_P_2) },
c0f3af97
L
5244 },
5245
592a252b 5246 /* PREFIX_VEX_0F72_REG_6 */
c0f3af97 5247 {
592d1631
L
5248 { Bad_Opcode },
5249 { Bad_Opcode },
6c30d220 5250 { VEX_W_TABLE (VEX_W_0F72_R_6_P_2) },
c0f3af97
L
5251 },
5252
592a252b 5253 /* PREFIX_VEX_0F73_REG_2 */
c0f3af97 5254 {
592d1631
L
5255 { Bad_Opcode },
5256 { Bad_Opcode },
6c30d220 5257 { VEX_W_TABLE (VEX_W_0F73_R_2_P_2) },
c0f3af97
L
5258 },
5259
592a252b 5260 /* PREFIX_VEX_0F73_REG_3 */
c0f3af97 5261 {
592d1631
L
5262 { Bad_Opcode },
5263 { Bad_Opcode },
6c30d220 5264 { VEX_W_TABLE (VEX_W_0F73_R_3_P_2) },
c0f3af97
L
5265 },
5266
592a252b 5267 /* PREFIX_VEX_0F73_REG_6 */
c0f3af97 5268 {
592d1631
L
5269 { Bad_Opcode },
5270 { Bad_Opcode },
6c30d220 5271 { VEX_W_TABLE (VEX_W_0F73_R_6_P_2) },
c0f3af97
L
5272 },
5273
592a252b 5274 /* PREFIX_VEX_0F73_REG_7 */
c0f3af97 5275 {
592d1631
L
5276 { Bad_Opcode },
5277 { Bad_Opcode },
6c30d220 5278 { VEX_W_TABLE (VEX_W_0F73_R_7_P_2) },
c0f3af97
L
5279 },
5280
592a252b 5281 /* PREFIX_VEX_0F74 */
c0f3af97 5282 {
592d1631
L
5283 { Bad_Opcode },
5284 { Bad_Opcode },
6c30d220 5285 { VEX_W_TABLE (VEX_W_0F74_P_2) },
c0f3af97
L
5286 },
5287
592a252b 5288 /* PREFIX_VEX_0F75 */
c0f3af97 5289 {
592d1631
L
5290 { Bad_Opcode },
5291 { Bad_Opcode },
6c30d220 5292 { VEX_W_TABLE (VEX_W_0F75_P_2) },
c0f3af97
L
5293 },
5294
592a252b 5295 /* PREFIX_VEX_0F76 */
c0f3af97 5296 {
592d1631
L
5297 { Bad_Opcode },
5298 { Bad_Opcode },
6c30d220 5299 { VEX_W_TABLE (VEX_W_0F76_P_2) },
c0f3af97
L
5300 },
5301
592a252b 5302 /* PREFIX_VEX_0F77 */
c0f3af97 5303 {
592a252b 5304 { VEX_W_TABLE (VEX_W_0F77_P_0) },
c0f3af97
L
5305 },
5306
592a252b 5307 /* PREFIX_VEX_0F7C */
c0f3af97 5308 {
592d1631
L
5309 { Bad_Opcode },
5310 { Bad_Opcode },
592a252b
L
5311 { VEX_W_TABLE (VEX_W_0F7C_P_2) },
5312 { VEX_W_TABLE (VEX_W_0F7C_P_3) },
c0f3af97
L
5313 },
5314
592a252b 5315 /* PREFIX_VEX_0F7D */
c0f3af97 5316 {
592d1631
L
5317 { Bad_Opcode },
5318 { Bad_Opcode },
592a252b
L
5319 { VEX_W_TABLE (VEX_W_0F7D_P_2) },
5320 { VEX_W_TABLE (VEX_W_0F7D_P_3) },
c0f3af97
L
5321 },
5322
592a252b 5323 /* PREFIX_VEX_0F7E */
c0f3af97 5324 {
592d1631 5325 { Bad_Opcode },
592a252b
L
5326 { VEX_LEN_TABLE (VEX_LEN_0F7E_P_1) },
5327 { VEX_LEN_TABLE (VEX_LEN_0F7E_P_2) },
c0f3af97
L
5328 },
5329
592a252b 5330 /* PREFIX_VEX_0F7F */
c0f3af97 5331 {
592d1631 5332 { Bad_Opcode },
592a252b
L
5333 { VEX_W_TABLE (VEX_W_0F7F_P_1) },
5334 { VEX_W_TABLE (VEX_W_0F7F_P_2) },
c0f3af97
L
5335 },
5336
43234a1e
L
5337 /* PREFIX_VEX_0F90 */
5338 {
5339 { VEX_LEN_TABLE (VEX_LEN_0F90_P_0) },
1ba585e8
IT
5340 { Bad_Opcode },
5341 { VEX_LEN_TABLE (VEX_LEN_0F90_P_2) },
43234a1e
L
5342 },
5343
5344 /* PREFIX_VEX_0F91 */
5345 {
5346 { VEX_LEN_TABLE (VEX_LEN_0F91_P_0) },
1ba585e8
IT
5347 { Bad_Opcode },
5348 { VEX_LEN_TABLE (VEX_LEN_0F91_P_2) },
43234a1e
L
5349 },
5350
5351 /* PREFIX_VEX_0F92 */
5352 {
5353 { VEX_LEN_TABLE (VEX_LEN_0F92_P_0) },
1ba585e8 5354 { Bad_Opcode },
90a915bf 5355 { VEX_LEN_TABLE (VEX_LEN_0F92_P_2) },
1ba585e8 5356 { VEX_LEN_TABLE (VEX_LEN_0F92_P_3) },
43234a1e
L
5357 },
5358
5359 /* PREFIX_VEX_0F93 */
5360 {
5361 { VEX_LEN_TABLE (VEX_LEN_0F93_P_0) },
1ba585e8 5362 { Bad_Opcode },
90a915bf 5363 { VEX_LEN_TABLE (VEX_LEN_0F93_P_2) },
1ba585e8 5364 { VEX_LEN_TABLE (VEX_LEN_0F93_P_3) },
43234a1e
L
5365 },
5366
5367 /* PREFIX_VEX_0F98 */
5368 {
5369 { VEX_LEN_TABLE (VEX_LEN_0F98_P_0) },
1ba585e8
IT
5370 { Bad_Opcode },
5371 { VEX_LEN_TABLE (VEX_LEN_0F98_P_2) },
5372 },
5373
5374 /* PREFIX_VEX_0F99 */
5375 {
5376 { VEX_LEN_TABLE (VEX_LEN_0F99_P_0) },
5377 { Bad_Opcode },
5378 { VEX_LEN_TABLE (VEX_LEN_0F99_P_2) },
43234a1e
L
5379 },
5380
592a252b 5381 /* PREFIX_VEX_0FC2 */
c0f3af97 5382 {
592a252b
L
5383 { VEX_W_TABLE (VEX_W_0FC2_P_0) },
5384 { VEX_LEN_TABLE (VEX_LEN_0FC2_P_1) },
5385 { VEX_W_TABLE (VEX_W_0FC2_P_2) },
5386 { VEX_LEN_TABLE (VEX_LEN_0FC2_P_3) },
c0f3af97
L
5387 },
5388
592a252b 5389 /* PREFIX_VEX_0FC4 */
c0f3af97 5390 {
592d1631
L
5391 { Bad_Opcode },
5392 { Bad_Opcode },
592a252b 5393 { VEX_LEN_TABLE (VEX_LEN_0FC4_P_2) },
c0f3af97
L
5394 },
5395
592a252b 5396 /* PREFIX_VEX_0FC5 */
c0f3af97 5397 {
592d1631
L
5398 { Bad_Opcode },
5399 { Bad_Opcode },
592a252b 5400 { VEX_LEN_TABLE (VEX_LEN_0FC5_P_2) },
c0f3af97
L
5401 },
5402
592a252b 5403 /* PREFIX_VEX_0FD0 */
c0f3af97 5404 {
592d1631
L
5405 { Bad_Opcode },
5406 { Bad_Opcode },
592a252b
L
5407 { VEX_W_TABLE (VEX_W_0FD0_P_2) },
5408 { VEX_W_TABLE (VEX_W_0FD0_P_3) },
c0f3af97
L
5409 },
5410
592a252b 5411 /* PREFIX_VEX_0FD1 */
c0f3af97 5412 {
592d1631
L
5413 { Bad_Opcode },
5414 { Bad_Opcode },
6c30d220 5415 { VEX_W_TABLE (VEX_W_0FD1_P_2) },
c0f3af97
L
5416 },
5417
592a252b 5418 /* PREFIX_VEX_0FD2 */
c0f3af97 5419 {
592d1631
L
5420 { Bad_Opcode },
5421 { Bad_Opcode },
6c30d220 5422 { VEX_W_TABLE (VEX_W_0FD2_P_2) },
c0f3af97
L
5423 },
5424
592a252b 5425 /* PREFIX_VEX_0FD3 */
c0f3af97 5426 {
592d1631
L
5427 { Bad_Opcode },
5428 { Bad_Opcode },
6c30d220 5429 { VEX_W_TABLE (VEX_W_0FD3_P_2) },
c0f3af97
L
5430 },
5431
592a252b 5432 /* PREFIX_VEX_0FD4 */
c0f3af97 5433 {
592d1631
L
5434 { Bad_Opcode },
5435 { Bad_Opcode },
6c30d220 5436 { VEX_W_TABLE (VEX_W_0FD4_P_2) },
c0f3af97
L
5437 },
5438
592a252b 5439 /* PREFIX_VEX_0FD5 */
c0f3af97 5440 {
592d1631
L
5441 { Bad_Opcode },
5442 { Bad_Opcode },
6c30d220 5443 { VEX_W_TABLE (VEX_W_0FD5_P_2) },
c0f3af97
L
5444 },
5445
592a252b 5446 /* PREFIX_VEX_0FD6 */
c0f3af97 5447 {
592d1631
L
5448 { Bad_Opcode },
5449 { Bad_Opcode },
592a252b 5450 { VEX_LEN_TABLE (VEX_LEN_0FD6_P_2) },
c0f3af97
L
5451 },
5452
592a252b 5453 /* PREFIX_VEX_0FD7 */
c0f3af97 5454 {
592d1631
L
5455 { Bad_Opcode },
5456 { Bad_Opcode },
592a252b 5457 { MOD_TABLE (MOD_VEX_0FD7_PREFIX_2) },
c0f3af97
L
5458 },
5459
592a252b 5460 /* PREFIX_VEX_0FD8 */
c0f3af97 5461 {
592d1631
L
5462 { Bad_Opcode },
5463 { Bad_Opcode },
6c30d220 5464 { VEX_W_TABLE (VEX_W_0FD8_P_2) },
c0f3af97
L
5465 },
5466
592a252b 5467 /* PREFIX_VEX_0FD9 */
c0f3af97 5468 {
592d1631
L
5469 { Bad_Opcode },
5470 { Bad_Opcode },
6c30d220 5471 { VEX_W_TABLE (VEX_W_0FD9_P_2) },
c0f3af97
L
5472 },
5473
592a252b 5474 /* PREFIX_VEX_0FDA */
c0f3af97 5475 {
592d1631
L
5476 { Bad_Opcode },
5477 { Bad_Opcode },
6c30d220 5478 { VEX_W_TABLE (VEX_W_0FDA_P_2) },
c0f3af97
L
5479 },
5480
592a252b 5481 /* PREFIX_VEX_0FDB */
c0f3af97 5482 {
592d1631
L
5483 { Bad_Opcode },
5484 { Bad_Opcode },
6c30d220 5485 { VEX_W_TABLE (VEX_W_0FDB_P_2) },
c0f3af97
L
5486 },
5487
592a252b 5488 /* PREFIX_VEX_0FDC */
c0f3af97 5489 {
592d1631
L
5490 { Bad_Opcode },
5491 { Bad_Opcode },
6c30d220 5492 { VEX_W_TABLE (VEX_W_0FDC_P_2) },
c0f3af97
L
5493 },
5494
592a252b 5495 /* PREFIX_VEX_0FDD */
c0f3af97 5496 {
592d1631
L
5497 { Bad_Opcode },
5498 { Bad_Opcode },
6c30d220 5499 { VEX_W_TABLE (VEX_W_0FDD_P_2) },
c0f3af97
L
5500 },
5501
592a252b 5502 /* PREFIX_VEX_0FDE */
c0f3af97 5503 {
592d1631
L
5504 { Bad_Opcode },
5505 { Bad_Opcode },
6c30d220 5506 { VEX_W_TABLE (VEX_W_0FDE_P_2) },
c0f3af97
L
5507 },
5508
592a252b 5509 /* PREFIX_VEX_0FDF */
c0f3af97 5510 {
592d1631
L
5511 { Bad_Opcode },
5512 { Bad_Opcode },
6c30d220 5513 { VEX_W_TABLE (VEX_W_0FDF_P_2) },
c0f3af97
L
5514 },
5515
592a252b 5516 /* PREFIX_VEX_0FE0 */
c0f3af97 5517 {
592d1631
L
5518 { Bad_Opcode },
5519 { Bad_Opcode },
6c30d220 5520 { VEX_W_TABLE (VEX_W_0FE0_P_2) },
c0f3af97
L
5521 },
5522
592a252b 5523 /* PREFIX_VEX_0FE1 */
c0f3af97 5524 {
592d1631
L
5525 { Bad_Opcode },
5526 { Bad_Opcode },
6c30d220 5527 { VEX_W_TABLE (VEX_W_0FE1_P_2) },
c0f3af97
L
5528 },
5529
592a252b 5530 /* PREFIX_VEX_0FE2 */
c0f3af97 5531 {
592d1631
L
5532 { Bad_Opcode },
5533 { Bad_Opcode },
6c30d220 5534 { VEX_W_TABLE (VEX_W_0FE2_P_2) },
c0f3af97
L
5535 },
5536
592a252b 5537 /* PREFIX_VEX_0FE3 */
c0f3af97 5538 {
592d1631
L
5539 { Bad_Opcode },
5540 { Bad_Opcode },
6c30d220 5541 { VEX_W_TABLE (VEX_W_0FE3_P_2) },
c0f3af97
L
5542 },
5543
592a252b 5544 /* PREFIX_VEX_0FE4 */
c0f3af97 5545 {
592d1631
L
5546 { Bad_Opcode },
5547 { Bad_Opcode },
6c30d220 5548 { VEX_W_TABLE (VEX_W_0FE4_P_2) },
c0f3af97
L
5549 },
5550
592a252b 5551 /* PREFIX_VEX_0FE5 */
c0f3af97 5552 {
592d1631
L
5553 { Bad_Opcode },
5554 { Bad_Opcode },
6c30d220 5555 { VEX_W_TABLE (VEX_W_0FE5_P_2) },
c0f3af97
L
5556 },
5557
592a252b 5558 /* PREFIX_VEX_0FE6 */
c0f3af97 5559 {
592d1631 5560 { Bad_Opcode },
592a252b
L
5561 { VEX_W_TABLE (VEX_W_0FE6_P_1) },
5562 { VEX_W_TABLE (VEX_W_0FE6_P_2) },
5563 { VEX_W_TABLE (VEX_W_0FE6_P_3) },
c0f3af97
L
5564 },
5565
592a252b 5566 /* PREFIX_VEX_0FE7 */
c0f3af97 5567 {
592d1631
L
5568 { Bad_Opcode },
5569 { Bad_Opcode },
592a252b 5570 { MOD_TABLE (MOD_VEX_0FE7_PREFIX_2) },
c0f3af97
L
5571 },
5572
592a252b 5573 /* PREFIX_VEX_0FE8 */
c0f3af97 5574 {
592d1631
L
5575 { Bad_Opcode },
5576 { Bad_Opcode },
6c30d220 5577 { VEX_W_TABLE (VEX_W_0FE8_P_2) },
c0f3af97
L
5578 },
5579
592a252b 5580 /* PREFIX_VEX_0FE9 */
c0f3af97 5581 {
592d1631
L
5582 { Bad_Opcode },
5583 { Bad_Opcode },
6c30d220 5584 { VEX_W_TABLE (VEX_W_0FE9_P_2) },
c0f3af97
L
5585 },
5586
592a252b 5587 /* PREFIX_VEX_0FEA */
c0f3af97 5588 {
592d1631
L
5589 { Bad_Opcode },
5590 { Bad_Opcode },
6c30d220 5591 { VEX_W_TABLE (VEX_W_0FEA_P_2) },
c0f3af97
L
5592 },
5593
592a252b 5594 /* PREFIX_VEX_0FEB */
c0f3af97 5595 {
592d1631
L
5596 { Bad_Opcode },
5597 { Bad_Opcode },
6c30d220 5598 { VEX_W_TABLE (VEX_W_0FEB_P_2) },
c0f3af97
L
5599 },
5600
592a252b 5601 /* PREFIX_VEX_0FEC */
c0f3af97 5602 {
592d1631
L
5603 { Bad_Opcode },
5604 { Bad_Opcode },
6c30d220 5605 { VEX_W_TABLE (VEX_W_0FEC_P_2) },
c0f3af97
L
5606 },
5607
592a252b 5608 /* PREFIX_VEX_0FED */
c0f3af97 5609 {
592d1631
L
5610 { Bad_Opcode },
5611 { Bad_Opcode },
6c30d220 5612 { VEX_W_TABLE (VEX_W_0FED_P_2) },
c0f3af97
L
5613 },
5614
592a252b 5615 /* PREFIX_VEX_0FEE */
c0f3af97 5616 {
592d1631
L
5617 { Bad_Opcode },
5618 { Bad_Opcode },
6c30d220 5619 { VEX_W_TABLE (VEX_W_0FEE_P_2) },
c0f3af97
L
5620 },
5621
592a252b 5622 /* PREFIX_VEX_0FEF */
c0f3af97 5623 {
592d1631
L
5624 { Bad_Opcode },
5625 { Bad_Opcode },
6c30d220 5626 { VEX_W_TABLE (VEX_W_0FEF_P_2) },
c0f3af97
L
5627 },
5628
592a252b 5629 /* PREFIX_VEX_0FF0 */
c0f3af97 5630 {
592d1631
L
5631 { Bad_Opcode },
5632 { Bad_Opcode },
5633 { Bad_Opcode },
592a252b 5634 { MOD_TABLE (MOD_VEX_0FF0_PREFIX_3) },
c0f3af97
L
5635 },
5636
592a252b 5637 /* PREFIX_VEX_0FF1 */
c0f3af97 5638 {
592d1631
L
5639 { Bad_Opcode },
5640 { Bad_Opcode },
6c30d220 5641 { VEX_W_TABLE (VEX_W_0FF1_P_2) },
c0f3af97
L
5642 },
5643
592a252b 5644 /* PREFIX_VEX_0FF2 */
c0f3af97 5645 {
592d1631
L
5646 { Bad_Opcode },
5647 { Bad_Opcode },
6c30d220 5648 { VEX_W_TABLE (VEX_W_0FF2_P_2) },
c0f3af97
L
5649 },
5650
592a252b 5651 /* PREFIX_VEX_0FF3 */
c0f3af97 5652 {
592d1631
L
5653 { Bad_Opcode },
5654 { Bad_Opcode },
6c30d220 5655 { VEX_W_TABLE (VEX_W_0FF3_P_2) },
c0f3af97
L
5656 },
5657
592a252b 5658 /* PREFIX_VEX_0FF4 */
c0f3af97 5659 {
592d1631
L
5660 { Bad_Opcode },
5661 { Bad_Opcode },
6c30d220 5662 { VEX_W_TABLE (VEX_W_0FF4_P_2) },
c0f3af97
L
5663 },
5664
592a252b 5665 /* PREFIX_VEX_0FF5 */
c0f3af97 5666 {
592d1631
L
5667 { Bad_Opcode },
5668 { Bad_Opcode },
6c30d220 5669 { VEX_W_TABLE (VEX_W_0FF5_P_2) },
c0f3af97
L
5670 },
5671
592a252b 5672 /* PREFIX_VEX_0FF6 */
c0f3af97 5673 {
592d1631
L
5674 { Bad_Opcode },
5675 { Bad_Opcode },
6c30d220 5676 { VEX_W_TABLE (VEX_W_0FF6_P_2) },
c0f3af97
L
5677 },
5678
592a252b 5679 /* PREFIX_VEX_0FF7 */
c0f3af97 5680 {
592d1631
L
5681 { Bad_Opcode },
5682 { Bad_Opcode },
592a252b 5683 { VEX_LEN_TABLE (VEX_LEN_0FF7_P_2) },
c0f3af97
L
5684 },
5685
592a252b 5686 /* PREFIX_VEX_0FF8 */
c0f3af97 5687 {
592d1631
L
5688 { Bad_Opcode },
5689 { Bad_Opcode },
6c30d220 5690 { VEX_W_TABLE (VEX_W_0FF8_P_2) },
c0f3af97
L
5691 },
5692
592a252b 5693 /* PREFIX_VEX_0FF9 */
c0f3af97 5694 {
592d1631
L
5695 { Bad_Opcode },
5696 { Bad_Opcode },
6c30d220 5697 { VEX_W_TABLE (VEX_W_0FF9_P_2) },
c0f3af97
L
5698 },
5699
592a252b 5700 /* PREFIX_VEX_0FFA */
c0f3af97 5701 {
592d1631
L
5702 { Bad_Opcode },
5703 { Bad_Opcode },
6c30d220 5704 { VEX_W_TABLE (VEX_W_0FFA_P_2) },
c0f3af97
L
5705 },
5706
592a252b 5707 /* PREFIX_VEX_0FFB */
c0f3af97 5708 {
592d1631
L
5709 { Bad_Opcode },
5710 { Bad_Opcode },
6c30d220 5711 { VEX_W_TABLE (VEX_W_0FFB_P_2) },
c0f3af97
L
5712 },
5713
592a252b 5714 /* PREFIX_VEX_0FFC */
c0f3af97 5715 {
592d1631
L
5716 { Bad_Opcode },
5717 { Bad_Opcode },
6c30d220 5718 { VEX_W_TABLE (VEX_W_0FFC_P_2) },
c0f3af97
L
5719 },
5720
592a252b 5721 /* PREFIX_VEX_0FFD */
c0f3af97 5722 {
592d1631
L
5723 { Bad_Opcode },
5724 { Bad_Opcode },
6c30d220 5725 { VEX_W_TABLE (VEX_W_0FFD_P_2) },
c0f3af97
L
5726 },
5727
592a252b 5728 /* PREFIX_VEX_0FFE */
c0f3af97 5729 {
592d1631
L
5730 { Bad_Opcode },
5731 { Bad_Opcode },
6c30d220 5732 { VEX_W_TABLE (VEX_W_0FFE_P_2) },
c0f3af97
L
5733 },
5734
592a252b 5735 /* PREFIX_VEX_0F3800 */
c0f3af97 5736 {
592d1631
L
5737 { Bad_Opcode },
5738 { Bad_Opcode },
6c30d220 5739 { VEX_W_TABLE (VEX_W_0F3800_P_2) },
c0f3af97
L
5740 },
5741
592a252b 5742 /* PREFIX_VEX_0F3801 */
c0f3af97 5743 {
592d1631
L
5744 { Bad_Opcode },
5745 { Bad_Opcode },
6c30d220 5746 { VEX_W_TABLE (VEX_W_0F3801_P_2) },
c0f3af97
L
5747 },
5748
592a252b 5749 /* PREFIX_VEX_0F3802 */
c0f3af97 5750 {
592d1631
L
5751 { Bad_Opcode },
5752 { Bad_Opcode },
6c30d220 5753 { VEX_W_TABLE (VEX_W_0F3802_P_2) },
c0f3af97
L
5754 },
5755
592a252b 5756 /* PREFIX_VEX_0F3803 */
c0f3af97 5757 {
592d1631
L
5758 { Bad_Opcode },
5759 { Bad_Opcode },
6c30d220 5760 { VEX_W_TABLE (VEX_W_0F3803_P_2) },
c0f3af97
L
5761 },
5762
592a252b 5763 /* PREFIX_VEX_0F3804 */
c0f3af97 5764 {
592d1631
L
5765 { Bad_Opcode },
5766 { Bad_Opcode },
6c30d220 5767 { VEX_W_TABLE (VEX_W_0F3804_P_2) },
c0f3af97
L
5768 },
5769
592a252b 5770 /* PREFIX_VEX_0F3805 */
c0f3af97 5771 {
592d1631
L
5772 { Bad_Opcode },
5773 { Bad_Opcode },
6c30d220 5774 { VEX_W_TABLE (VEX_W_0F3805_P_2) },
c0f3af97
L
5775 },
5776
592a252b 5777 /* PREFIX_VEX_0F3806 */
c0f3af97 5778 {
592d1631
L
5779 { Bad_Opcode },
5780 { Bad_Opcode },
6c30d220 5781 { VEX_W_TABLE (VEX_W_0F3806_P_2) },
c0f3af97
L
5782 },
5783
592a252b 5784 /* PREFIX_VEX_0F3807 */
c0f3af97 5785 {
592d1631
L
5786 { Bad_Opcode },
5787 { Bad_Opcode },
6c30d220 5788 { VEX_W_TABLE (VEX_W_0F3807_P_2) },
c0f3af97
L
5789 },
5790
592a252b 5791 /* PREFIX_VEX_0F3808 */
c0f3af97 5792 {
592d1631
L
5793 { Bad_Opcode },
5794 { Bad_Opcode },
6c30d220 5795 { VEX_W_TABLE (VEX_W_0F3808_P_2) },
c0f3af97
L
5796 },
5797
592a252b 5798 /* PREFIX_VEX_0F3809 */
c0f3af97 5799 {
592d1631
L
5800 { Bad_Opcode },
5801 { Bad_Opcode },
6c30d220 5802 { VEX_W_TABLE (VEX_W_0F3809_P_2) },
c0f3af97
L
5803 },
5804
592a252b 5805 /* PREFIX_VEX_0F380A */
c0f3af97 5806 {
592d1631
L
5807 { Bad_Opcode },
5808 { Bad_Opcode },
6c30d220 5809 { VEX_W_TABLE (VEX_W_0F380A_P_2) },
c0f3af97
L
5810 },
5811
592a252b 5812 /* PREFIX_VEX_0F380B */
c0f3af97 5813 {
592d1631
L
5814 { Bad_Opcode },
5815 { Bad_Opcode },
6c30d220 5816 { VEX_W_TABLE (VEX_W_0F380B_P_2) },
c0f3af97
L
5817 },
5818
592a252b 5819 /* PREFIX_VEX_0F380C */
c0f3af97 5820 {
592d1631
L
5821 { Bad_Opcode },
5822 { Bad_Opcode },
592a252b 5823 { VEX_W_TABLE (VEX_W_0F380C_P_2) },
c0f3af97
L
5824 },
5825
592a252b 5826 /* PREFIX_VEX_0F380D */
c0f3af97 5827 {
592d1631
L
5828 { Bad_Opcode },
5829 { Bad_Opcode },
592a252b 5830 { VEX_W_TABLE (VEX_W_0F380D_P_2) },
c0f3af97
L
5831 },
5832
592a252b 5833 /* PREFIX_VEX_0F380E */
c0f3af97 5834 {
592d1631
L
5835 { Bad_Opcode },
5836 { Bad_Opcode },
592a252b 5837 { VEX_W_TABLE (VEX_W_0F380E_P_2) },
c0f3af97
L
5838 },
5839
592a252b 5840 /* PREFIX_VEX_0F380F */
c0f3af97 5841 {
592d1631
L
5842 { Bad_Opcode },
5843 { Bad_Opcode },
592a252b 5844 { VEX_W_TABLE (VEX_W_0F380F_P_2) },
c0f3af97
L
5845 },
5846
592a252b 5847 /* PREFIX_VEX_0F3813 */
c7b8aa3a
L
5848 {
5849 { Bad_Opcode },
5850 { Bad_Opcode },
bf890a93 5851 { "vcvtph2ps", { XM, EXxmmq }, 0 },
c7b8aa3a
L
5852 },
5853
6c30d220
L
5854 /* PREFIX_VEX_0F3816 */
5855 {
5856 { Bad_Opcode },
5857 { Bad_Opcode },
5858 { VEX_LEN_TABLE (VEX_LEN_0F3816_P_2) },
5859 },
5860
592a252b 5861 /* PREFIX_VEX_0F3817 */
c0f3af97 5862 {
592d1631
L
5863 { Bad_Opcode },
5864 { Bad_Opcode },
592a252b 5865 { VEX_W_TABLE (VEX_W_0F3817_P_2) },
c0f3af97
L
5866 },
5867
592a252b 5868 /* PREFIX_VEX_0F3818 */
c0f3af97 5869 {
592d1631
L
5870 { Bad_Opcode },
5871 { Bad_Opcode },
6c30d220 5872 { VEX_W_TABLE (VEX_W_0F3818_P_2) },
c0f3af97
L
5873 },
5874
592a252b 5875 /* PREFIX_VEX_0F3819 */
c0f3af97 5876 {
592d1631
L
5877 { Bad_Opcode },
5878 { Bad_Opcode },
6c30d220 5879 { VEX_LEN_TABLE (VEX_LEN_0F3819_P_2) },
c0f3af97
L
5880 },
5881
592a252b 5882 /* PREFIX_VEX_0F381A */
c0f3af97 5883 {
592d1631
L
5884 { Bad_Opcode },
5885 { Bad_Opcode },
592a252b 5886 { MOD_TABLE (MOD_VEX_0F381A_PREFIX_2) },
c0f3af97
L
5887 },
5888
592a252b 5889 /* PREFIX_VEX_0F381C */
c0f3af97 5890 {
592d1631
L
5891 { Bad_Opcode },
5892 { Bad_Opcode },
6c30d220 5893 { VEX_W_TABLE (VEX_W_0F381C_P_2) },
c0f3af97
L
5894 },
5895
592a252b 5896 /* PREFIX_VEX_0F381D */
c0f3af97 5897 {
592d1631
L
5898 { Bad_Opcode },
5899 { Bad_Opcode },
6c30d220 5900 { VEX_W_TABLE (VEX_W_0F381D_P_2) },
c0f3af97
L
5901 },
5902
592a252b 5903 /* PREFIX_VEX_0F381E */
c0f3af97 5904 {
592d1631
L
5905 { Bad_Opcode },
5906 { Bad_Opcode },
6c30d220 5907 { VEX_W_TABLE (VEX_W_0F381E_P_2) },
c0f3af97
L
5908 },
5909
592a252b 5910 /* PREFIX_VEX_0F3820 */
c0f3af97 5911 {
592d1631
L
5912 { Bad_Opcode },
5913 { Bad_Opcode },
6c30d220 5914 { VEX_W_TABLE (VEX_W_0F3820_P_2) },
c0f3af97
L
5915 },
5916
592a252b 5917 /* PREFIX_VEX_0F3821 */
c0f3af97 5918 {
592d1631
L
5919 { Bad_Opcode },
5920 { Bad_Opcode },
6c30d220 5921 { VEX_W_TABLE (VEX_W_0F3821_P_2) },
c0f3af97
L
5922 },
5923
592a252b 5924 /* PREFIX_VEX_0F3822 */
c0f3af97 5925 {
592d1631
L
5926 { Bad_Opcode },
5927 { Bad_Opcode },
6c30d220 5928 { VEX_W_TABLE (VEX_W_0F3822_P_2) },
c0f3af97
L
5929 },
5930
592a252b 5931 /* PREFIX_VEX_0F3823 */
c0f3af97 5932 {
592d1631
L
5933 { Bad_Opcode },
5934 { Bad_Opcode },
6c30d220 5935 { VEX_W_TABLE (VEX_W_0F3823_P_2) },
c0f3af97
L
5936 },
5937
592a252b 5938 /* PREFIX_VEX_0F3824 */
c0f3af97 5939 {
592d1631
L
5940 { Bad_Opcode },
5941 { Bad_Opcode },
6c30d220 5942 { VEX_W_TABLE (VEX_W_0F3824_P_2) },
c0f3af97
L
5943 },
5944
592a252b 5945 /* PREFIX_VEX_0F3825 */
c0f3af97 5946 {
592d1631
L
5947 { Bad_Opcode },
5948 { Bad_Opcode },
6c30d220 5949 { VEX_W_TABLE (VEX_W_0F3825_P_2) },
c0f3af97
L
5950 },
5951
592a252b 5952 /* PREFIX_VEX_0F3828 */
c0f3af97 5953 {
592d1631
L
5954 { Bad_Opcode },
5955 { Bad_Opcode },
6c30d220 5956 { VEX_W_TABLE (VEX_W_0F3828_P_2) },
c0f3af97
L
5957 },
5958
592a252b 5959 /* PREFIX_VEX_0F3829 */
c0f3af97 5960 {
592d1631
L
5961 { Bad_Opcode },
5962 { Bad_Opcode },
6c30d220 5963 { VEX_W_TABLE (VEX_W_0F3829_P_2) },
c0f3af97
L
5964 },
5965
592a252b 5966 /* PREFIX_VEX_0F382A */
c0f3af97 5967 {
592d1631
L
5968 { Bad_Opcode },
5969 { Bad_Opcode },
592a252b 5970 { MOD_TABLE (MOD_VEX_0F382A_PREFIX_2) },
c0f3af97
L
5971 },
5972
592a252b 5973 /* PREFIX_VEX_0F382B */
c0f3af97 5974 {
592d1631
L
5975 { Bad_Opcode },
5976 { Bad_Opcode },
6c30d220 5977 { VEX_W_TABLE (VEX_W_0F382B_P_2) },
c0f3af97
L
5978 },
5979
592a252b 5980 /* PREFIX_VEX_0F382C */
c0f3af97 5981 {
592d1631
L
5982 { Bad_Opcode },
5983 { Bad_Opcode },
592a252b 5984 { MOD_TABLE (MOD_VEX_0F382C_PREFIX_2) },
c0f3af97
L
5985 },
5986
592a252b 5987 /* PREFIX_VEX_0F382D */
c0f3af97 5988 {
592d1631
L
5989 { Bad_Opcode },
5990 { Bad_Opcode },
592a252b 5991 { MOD_TABLE (MOD_VEX_0F382D_PREFIX_2) },
c0f3af97
L
5992 },
5993
592a252b 5994 /* PREFIX_VEX_0F382E */
c0f3af97 5995 {
592d1631
L
5996 { Bad_Opcode },
5997 { Bad_Opcode },
592a252b 5998 { MOD_TABLE (MOD_VEX_0F382E_PREFIX_2) },
c0f3af97
L
5999 },
6000
592a252b 6001 /* PREFIX_VEX_0F382F */
c0f3af97 6002 {
592d1631
L
6003 { Bad_Opcode },
6004 { Bad_Opcode },
592a252b 6005 { MOD_TABLE (MOD_VEX_0F382F_PREFIX_2) },
c0f3af97
L
6006 },
6007
592a252b 6008 /* PREFIX_VEX_0F3830 */
c0f3af97 6009 {
592d1631
L
6010 { Bad_Opcode },
6011 { Bad_Opcode },
6c30d220 6012 { VEX_W_TABLE (VEX_W_0F3830_P_2) },
c0f3af97
L
6013 },
6014
592a252b 6015 /* PREFIX_VEX_0F3831 */
c0f3af97 6016 {
592d1631
L
6017 { Bad_Opcode },
6018 { Bad_Opcode },
6c30d220 6019 { VEX_W_TABLE (VEX_W_0F3831_P_2) },
c0f3af97
L
6020 },
6021
592a252b 6022 /* PREFIX_VEX_0F3832 */
c0f3af97 6023 {
592d1631
L
6024 { Bad_Opcode },
6025 { Bad_Opcode },
6c30d220 6026 { VEX_W_TABLE (VEX_W_0F3832_P_2) },
c0f3af97
L
6027 },
6028
592a252b 6029 /* PREFIX_VEX_0F3833 */
c0f3af97 6030 {
592d1631
L
6031 { Bad_Opcode },
6032 { Bad_Opcode },
6c30d220 6033 { VEX_W_TABLE (VEX_W_0F3833_P_2) },
c0f3af97
L
6034 },
6035
592a252b 6036 /* PREFIX_VEX_0F3834 */
c0f3af97 6037 {
592d1631
L
6038 { Bad_Opcode },
6039 { Bad_Opcode },
6c30d220 6040 { VEX_W_TABLE (VEX_W_0F3834_P_2) },
c0f3af97
L
6041 },
6042
592a252b 6043 /* PREFIX_VEX_0F3835 */
c0f3af97 6044 {
592d1631
L
6045 { Bad_Opcode },
6046 { Bad_Opcode },
6c30d220
L
6047 { VEX_W_TABLE (VEX_W_0F3835_P_2) },
6048 },
6049
6050 /* PREFIX_VEX_0F3836 */
6051 {
6052 { Bad_Opcode },
6053 { Bad_Opcode },
6054 { VEX_LEN_TABLE (VEX_LEN_0F3836_P_2) },
c0f3af97
L
6055 },
6056
592a252b 6057 /* PREFIX_VEX_0F3837 */
c0f3af97 6058 {
592d1631
L
6059 { Bad_Opcode },
6060 { Bad_Opcode },
6c30d220 6061 { VEX_W_TABLE (VEX_W_0F3837_P_2) },
c0f3af97
L
6062 },
6063
592a252b 6064 /* PREFIX_VEX_0F3838 */
c0f3af97 6065 {
592d1631
L
6066 { Bad_Opcode },
6067 { Bad_Opcode },
6c30d220 6068 { VEX_W_TABLE (VEX_W_0F3838_P_2) },
c0f3af97
L
6069 },
6070
592a252b 6071 /* PREFIX_VEX_0F3839 */
c0f3af97 6072 {
592d1631
L
6073 { Bad_Opcode },
6074 { Bad_Opcode },
6c30d220 6075 { VEX_W_TABLE (VEX_W_0F3839_P_2) },
c0f3af97
L
6076 },
6077
592a252b 6078 /* PREFIX_VEX_0F383A */
c0f3af97 6079 {
592d1631
L
6080 { Bad_Opcode },
6081 { Bad_Opcode },
6c30d220 6082 { VEX_W_TABLE (VEX_W_0F383A_P_2) },
c0f3af97
L
6083 },
6084
592a252b 6085 /* PREFIX_VEX_0F383B */
c0f3af97 6086 {
592d1631
L
6087 { Bad_Opcode },
6088 { Bad_Opcode },
6c30d220 6089 { VEX_W_TABLE (VEX_W_0F383B_P_2) },
c0f3af97
L
6090 },
6091
592a252b 6092 /* PREFIX_VEX_0F383C */
c0f3af97 6093 {
592d1631
L
6094 { Bad_Opcode },
6095 { Bad_Opcode },
6c30d220 6096 { VEX_W_TABLE (VEX_W_0F383C_P_2) },
c0f3af97
L
6097 },
6098
592a252b 6099 /* PREFIX_VEX_0F383D */
c0f3af97 6100 {
592d1631
L
6101 { Bad_Opcode },
6102 { Bad_Opcode },
6c30d220 6103 { VEX_W_TABLE (VEX_W_0F383D_P_2) },
c0f3af97
L
6104 },
6105
592a252b 6106 /* PREFIX_VEX_0F383E */
c0f3af97 6107 {
592d1631
L
6108 { Bad_Opcode },
6109 { Bad_Opcode },
6c30d220 6110 { VEX_W_TABLE (VEX_W_0F383E_P_2) },
c0f3af97
L
6111 },
6112
592a252b 6113 /* PREFIX_VEX_0F383F */
c0f3af97 6114 {
592d1631
L
6115 { Bad_Opcode },
6116 { Bad_Opcode },
6c30d220 6117 { VEX_W_TABLE (VEX_W_0F383F_P_2) },
c0f3af97
L
6118 },
6119
592a252b 6120 /* PREFIX_VEX_0F3840 */
c0f3af97 6121 {
592d1631
L
6122 { Bad_Opcode },
6123 { Bad_Opcode },
6c30d220 6124 { VEX_W_TABLE (VEX_W_0F3840_P_2) },
c0f3af97
L
6125 },
6126
592a252b 6127 /* PREFIX_VEX_0F3841 */
c0f3af97 6128 {
592d1631
L
6129 { Bad_Opcode },
6130 { Bad_Opcode },
592a252b 6131 { VEX_LEN_TABLE (VEX_LEN_0F3841_P_2) },
c0f3af97
L
6132 },
6133
6c30d220
L
6134 /* PREFIX_VEX_0F3845 */
6135 {
6136 { Bad_Opcode },
6137 { Bad_Opcode },
bf890a93 6138 { "vpsrlv%LW", { XM, Vex, EXx }, 0 },
6c30d220
L
6139 },
6140
6141 /* PREFIX_VEX_0F3846 */
6142 {
6143 { Bad_Opcode },
6144 { Bad_Opcode },
6145 { VEX_W_TABLE (VEX_W_0F3846_P_2) },
6146 },
6147
6148 /* PREFIX_VEX_0F3847 */
6149 {
6150 { Bad_Opcode },
6151 { Bad_Opcode },
bf890a93 6152 { "vpsllv%LW", { XM, Vex, EXx }, 0 },
6c30d220
L
6153 },
6154
6155 /* PREFIX_VEX_0F3858 */
6156 {
6157 { Bad_Opcode },
6158 { Bad_Opcode },
6159 { VEX_W_TABLE (VEX_W_0F3858_P_2) },
6160 },
6161
6162 /* PREFIX_VEX_0F3859 */
6163 {
6164 { Bad_Opcode },
6165 { Bad_Opcode },
6166 { VEX_W_TABLE (VEX_W_0F3859_P_2) },
6167 },
6168
6169 /* PREFIX_VEX_0F385A */
6170 {
6171 { Bad_Opcode },
6172 { Bad_Opcode },
6173 { MOD_TABLE (MOD_VEX_0F385A_PREFIX_2) },
6174 },
6175
6176 /* PREFIX_VEX_0F3878 */
6177 {
6178 { Bad_Opcode },
6179 { Bad_Opcode },
6180 { VEX_W_TABLE (VEX_W_0F3878_P_2) },
6181 },
6182
6183 /* PREFIX_VEX_0F3879 */
6184 {
6185 { Bad_Opcode },
6186 { Bad_Opcode },
6187 { VEX_W_TABLE (VEX_W_0F3879_P_2) },
6188 },
6189
6190 /* PREFIX_VEX_0F388C */
6191 {
6192 { Bad_Opcode },
6193 { Bad_Opcode },
f7002f42 6194 { MOD_TABLE (MOD_VEX_0F388C_PREFIX_2) },
6c30d220
L
6195 },
6196
6197 /* PREFIX_VEX_0F388E */
6198 {
6199 { Bad_Opcode },
6200 { Bad_Opcode },
f7002f42 6201 { MOD_TABLE (MOD_VEX_0F388E_PREFIX_2) },
6c30d220
L
6202 },
6203
6204 /* PREFIX_VEX_0F3890 */
6205 {
6206 { Bad_Opcode },
6207 { Bad_Opcode },
bf890a93 6208 { "vpgatherd%LW", { XM, MVexVSIBDWpX, Vex }, 0 },
6c30d220
L
6209 },
6210
6211 /* PREFIX_VEX_0F3891 */
6212 {
6213 { Bad_Opcode },
6214 { Bad_Opcode },
bf890a93 6215 { "vpgatherq%LW", { XMGatherQ, MVexVSIBQWpX, VexGatherQ }, 0 },
6c30d220
L
6216 },
6217
6218 /* PREFIX_VEX_0F3892 */
6219 {
6220 { Bad_Opcode },
6221 { Bad_Opcode },
bf890a93 6222 { "vgatherdp%XW", { XM, MVexVSIBDWpX, Vex }, 0 },
6c30d220
L
6223 },
6224
6225 /* PREFIX_VEX_0F3893 */
6226 {
6227 { Bad_Opcode },
6228 { Bad_Opcode },
bf890a93 6229 { "vgatherqp%XW", { XMGatherQ, MVexVSIBQWpX, VexGatherQ }, 0 },
6c30d220
L
6230 },
6231
592a252b 6232 /* PREFIX_VEX_0F3896 */
a5ff0eb2 6233 {
592d1631
L
6234 { Bad_Opcode },
6235 { Bad_Opcode },
bf890a93 6236 { "vfmaddsub132p%XW", { XM, Vex, EXx }, 0 },
a5ff0eb2
L
6237 },
6238
592a252b 6239 /* PREFIX_VEX_0F3897 */
a5ff0eb2 6240 {
592d1631
L
6241 { Bad_Opcode },
6242 { Bad_Opcode },
bf890a93 6243 { "vfmsubadd132p%XW", { XM, Vex, EXx }, 0 },
a5ff0eb2
L
6244 },
6245
592a252b 6246 /* PREFIX_VEX_0F3898 */
a5ff0eb2 6247 {
592d1631
L
6248 { Bad_Opcode },
6249 { Bad_Opcode },
bf890a93 6250 { "vfmadd132p%XW", { XM, Vex, EXx }, 0 },
a5ff0eb2
L
6251 },
6252
592a252b 6253 /* PREFIX_VEX_0F3899 */
a5ff0eb2 6254 {
592d1631
L
6255 { Bad_Opcode },
6256 { Bad_Opcode },
bf890a93 6257 { "vfmadd132s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
a5ff0eb2
L
6258 },
6259
592a252b 6260 /* PREFIX_VEX_0F389A */
a5ff0eb2 6261 {
592d1631
L
6262 { Bad_Opcode },
6263 { Bad_Opcode },
bf890a93 6264 { "vfmsub132p%XW", { XM, Vex, EXx }, 0 },
a5ff0eb2
L
6265 },
6266
592a252b 6267 /* PREFIX_VEX_0F389B */
c0f3af97 6268 {
592d1631
L
6269 { Bad_Opcode },
6270 { Bad_Opcode },
bf890a93 6271 { "vfmsub132s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6272 },
6273
592a252b 6274 /* PREFIX_VEX_0F389C */
c0f3af97 6275 {
592d1631
L
6276 { Bad_Opcode },
6277 { Bad_Opcode },
bf890a93 6278 { "vfnmadd132p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6279 },
6280
592a252b 6281 /* PREFIX_VEX_0F389D */
c0f3af97 6282 {
592d1631
L
6283 { Bad_Opcode },
6284 { Bad_Opcode },
bf890a93 6285 { "vfnmadd132s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6286 },
6287
592a252b 6288 /* PREFIX_VEX_0F389E */
c0f3af97 6289 {
592d1631
L
6290 { Bad_Opcode },
6291 { Bad_Opcode },
bf890a93 6292 { "vfnmsub132p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6293 },
6294
592a252b 6295 /* PREFIX_VEX_0F389F */
c0f3af97 6296 {
592d1631
L
6297 { Bad_Opcode },
6298 { Bad_Opcode },
bf890a93 6299 { "vfnmsub132s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6300 },
6301
592a252b 6302 /* PREFIX_VEX_0F38A6 */
c0f3af97 6303 {
592d1631
L
6304 { Bad_Opcode },
6305 { Bad_Opcode },
bf890a93 6306 { "vfmaddsub213p%XW", { XM, Vex, EXx }, 0 },
592d1631 6307 { Bad_Opcode },
c0f3af97
L
6308 },
6309
592a252b 6310 /* PREFIX_VEX_0F38A7 */
c0f3af97 6311 {
592d1631
L
6312 { Bad_Opcode },
6313 { Bad_Opcode },
bf890a93 6314 { "vfmsubadd213p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6315 },
6316
592a252b 6317 /* PREFIX_VEX_0F38A8 */
c0f3af97 6318 {
592d1631
L
6319 { Bad_Opcode },
6320 { Bad_Opcode },
bf890a93 6321 { "vfmadd213p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6322 },
6323
592a252b 6324 /* PREFIX_VEX_0F38A9 */
c0f3af97 6325 {
592d1631
L
6326 { Bad_Opcode },
6327 { Bad_Opcode },
bf890a93 6328 { "vfmadd213s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6329 },
6330
592a252b 6331 /* PREFIX_VEX_0F38AA */
c0f3af97 6332 {
592d1631
L
6333 { Bad_Opcode },
6334 { Bad_Opcode },
bf890a93 6335 { "vfmsub213p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6336 },
6337
592a252b 6338 /* PREFIX_VEX_0F38AB */
c0f3af97 6339 {
592d1631
L
6340 { Bad_Opcode },
6341 { Bad_Opcode },
bf890a93 6342 { "vfmsub213s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6343 },
6344
592a252b 6345 /* PREFIX_VEX_0F38AC */
c0f3af97 6346 {
592d1631
L
6347 { Bad_Opcode },
6348 { Bad_Opcode },
bf890a93 6349 { "vfnmadd213p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6350 },
6351
592a252b 6352 /* PREFIX_VEX_0F38AD */
c0f3af97 6353 {
592d1631
L
6354 { Bad_Opcode },
6355 { Bad_Opcode },
bf890a93 6356 { "vfnmadd213s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6357 },
6358
592a252b 6359 /* PREFIX_VEX_0F38AE */
c0f3af97 6360 {
592d1631
L
6361 { Bad_Opcode },
6362 { Bad_Opcode },
bf890a93 6363 { "vfnmsub213p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6364 },
6365
592a252b 6366 /* PREFIX_VEX_0F38AF */
c0f3af97 6367 {
592d1631
L
6368 { Bad_Opcode },
6369 { Bad_Opcode },
bf890a93 6370 { "vfnmsub213s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6371 },
6372
592a252b 6373 /* PREFIX_VEX_0F38B6 */
c0f3af97 6374 {
592d1631
L
6375 { Bad_Opcode },
6376 { Bad_Opcode },
bf890a93 6377 { "vfmaddsub231p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6378 },
6379
592a252b 6380 /* PREFIX_VEX_0F38B7 */
c0f3af97 6381 {
592d1631
L
6382 { Bad_Opcode },
6383 { Bad_Opcode },
bf890a93 6384 { "vfmsubadd231p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6385 },
6386
592a252b 6387 /* PREFIX_VEX_0F38B8 */
c0f3af97 6388 {
592d1631
L
6389 { Bad_Opcode },
6390 { Bad_Opcode },
bf890a93 6391 { "vfmadd231p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6392 },
6393
592a252b 6394 /* PREFIX_VEX_0F38B9 */
c0f3af97 6395 {
592d1631
L
6396 { Bad_Opcode },
6397 { Bad_Opcode },
bf890a93 6398 { "vfmadd231s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6399 },
6400
592a252b 6401 /* PREFIX_VEX_0F38BA */
c0f3af97 6402 {
592d1631
L
6403 { Bad_Opcode },
6404 { Bad_Opcode },
bf890a93 6405 { "vfmsub231p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6406 },
6407
592a252b 6408 /* PREFIX_VEX_0F38BB */
c0f3af97 6409 {
592d1631
L
6410 { Bad_Opcode },
6411 { Bad_Opcode },
bf890a93 6412 { "vfmsub231s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6413 },
6414
592a252b 6415 /* PREFIX_VEX_0F38BC */
c0f3af97 6416 {
592d1631
L
6417 { Bad_Opcode },
6418 { Bad_Opcode },
bf890a93 6419 { "vfnmadd231p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6420 },
6421
592a252b 6422 /* PREFIX_VEX_0F38BD */
c0f3af97 6423 {
592d1631
L
6424 { Bad_Opcode },
6425 { Bad_Opcode },
bf890a93 6426 { "vfnmadd231s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6427 },
6428
592a252b 6429 /* PREFIX_VEX_0F38BE */
c0f3af97 6430 {
592d1631
L
6431 { Bad_Opcode },
6432 { Bad_Opcode },
bf890a93 6433 { "vfnmsub231p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6434 },
6435
592a252b 6436 /* PREFIX_VEX_0F38BF */
c0f3af97 6437 {
592d1631
L
6438 { Bad_Opcode },
6439 { Bad_Opcode },
bf890a93 6440 { "vfnmsub231s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6441 },
6442
48521003
IT
6443 /* PREFIX_VEX_0F38CF */
6444 {
6445 { Bad_Opcode },
6446 { Bad_Opcode },
6447 { VEX_W_TABLE (VEX_W_0F38CF_P_2) },
6448 },
6449
592a252b 6450 /* PREFIX_VEX_0F38DB */
c0f3af97 6451 {
592d1631
L
6452 { Bad_Opcode },
6453 { Bad_Opcode },
592a252b 6454 { VEX_LEN_TABLE (VEX_LEN_0F38DB_P_2) },
c0f3af97
L
6455 },
6456
592a252b 6457 /* PREFIX_VEX_0F38DC */
c0f3af97 6458 {
592d1631
L
6459 { Bad_Opcode },
6460 { Bad_Opcode },
8dcf1fad 6461 { "vaesenc", { XM, Vex, EXx }, 0 },
c0f3af97
L
6462 },
6463
592a252b 6464 /* PREFIX_VEX_0F38DD */
c0f3af97 6465 {
592d1631
L
6466 { Bad_Opcode },
6467 { Bad_Opcode },
8dcf1fad 6468 { "vaesenclast", { XM, Vex, EXx }, 0 },
c0f3af97
L
6469 },
6470
592a252b 6471 /* PREFIX_VEX_0F38DE */
c0f3af97 6472 {
592d1631
L
6473 { Bad_Opcode },
6474 { Bad_Opcode },
8dcf1fad 6475 { "vaesdec", { XM, Vex, EXx }, 0 },
c0f3af97
L
6476 },
6477
592a252b 6478 /* PREFIX_VEX_0F38DF */
c0f3af97 6479 {
592d1631
L
6480 { Bad_Opcode },
6481 { Bad_Opcode },
8dcf1fad 6482 { "vaesdeclast", { XM, Vex, EXx }, 0 },
c0f3af97
L
6483 },
6484
f12dc422
L
6485 /* PREFIX_VEX_0F38F2 */
6486 {
6487 { VEX_LEN_TABLE (VEX_LEN_0F38F2_P_0) },
6488 },
6489
6490 /* PREFIX_VEX_0F38F3_REG_1 */
6491 {
6492 { VEX_LEN_TABLE (VEX_LEN_0F38F3_R_1_P_0) },
6493 },
6494
6495 /* PREFIX_VEX_0F38F3_REG_2 */
6496 {
6497 { VEX_LEN_TABLE (VEX_LEN_0F38F3_R_2_P_0) },
6498 },
6499
6500 /* PREFIX_VEX_0F38F3_REG_3 */
6501 {
6502 { VEX_LEN_TABLE (VEX_LEN_0F38F3_R_3_P_0) },
6503 },
6504
6c30d220
L
6505 /* PREFIX_VEX_0F38F5 */
6506 {
6507 { VEX_LEN_TABLE (VEX_LEN_0F38F5_P_0) },
6508 { VEX_LEN_TABLE (VEX_LEN_0F38F5_P_1) },
6509 { Bad_Opcode },
6510 { VEX_LEN_TABLE (VEX_LEN_0F38F5_P_3) },
6511 },
6512
6513 /* PREFIX_VEX_0F38F6 */
6514 {
6515 { Bad_Opcode },
6516 { Bad_Opcode },
6517 { Bad_Opcode },
6518 { VEX_LEN_TABLE (VEX_LEN_0F38F6_P_3) },
6519 },
6520
f12dc422
L
6521 /* PREFIX_VEX_0F38F7 */
6522 {
6523 { VEX_LEN_TABLE (VEX_LEN_0F38F7_P_0) },
6c30d220
L
6524 { VEX_LEN_TABLE (VEX_LEN_0F38F7_P_1) },
6525 { VEX_LEN_TABLE (VEX_LEN_0F38F7_P_2) },
6526 { VEX_LEN_TABLE (VEX_LEN_0F38F7_P_3) },
6527 },
6528
6529 /* PREFIX_VEX_0F3A00 */
6530 {
6531 { Bad_Opcode },
6532 { Bad_Opcode },
6533 { VEX_LEN_TABLE (VEX_LEN_0F3A00_P_2) },
6534 },
6535
6536 /* PREFIX_VEX_0F3A01 */
6537 {
6538 { Bad_Opcode },
6539 { Bad_Opcode },
6540 { VEX_LEN_TABLE (VEX_LEN_0F3A01_P_2) },
6541 },
6542
6543 /* PREFIX_VEX_0F3A02 */
6544 {
6545 { Bad_Opcode },
6546 { Bad_Opcode },
6547 { VEX_W_TABLE (VEX_W_0F3A02_P_2) },
f12dc422
L
6548 },
6549
592a252b 6550 /* PREFIX_VEX_0F3A04 */
c0f3af97 6551 {
592d1631
L
6552 { Bad_Opcode },
6553 { Bad_Opcode },
592a252b 6554 { VEX_W_TABLE (VEX_W_0F3A04_P_2) },
c0f3af97
L
6555 },
6556
592a252b 6557 /* PREFIX_VEX_0F3A05 */
c0f3af97 6558 {
592d1631
L
6559 { Bad_Opcode },
6560 { Bad_Opcode },
592a252b 6561 { VEX_W_TABLE (VEX_W_0F3A05_P_2) },
c0f3af97
L
6562 },
6563
592a252b 6564 /* PREFIX_VEX_0F3A06 */
c0f3af97 6565 {
592d1631
L
6566 { Bad_Opcode },
6567 { Bad_Opcode },
592a252b 6568 { VEX_LEN_TABLE (VEX_LEN_0F3A06_P_2) },
c0f3af97
L
6569 },
6570
592a252b 6571 /* PREFIX_VEX_0F3A08 */
c0f3af97 6572 {
592d1631
L
6573 { Bad_Opcode },
6574 { Bad_Opcode },
592a252b 6575 { VEX_W_TABLE (VEX_W_0F3A08_P_2) },
c0f3af97
L
6576 },
6577
592a252b 6578 /* PREFIX_VEX_0F3A09 */
c0f3af97 6579 {
592d1631
L
6580 { Bad_Opcode },
6581 { Bad_Opcode },
592a252b 6582 { VEX_W_TABLE (VEX_W_0F3A09_P_2) },
c0f3af97
L
6583 },
6584
592a252b 6585 /* PREFIX_VEX_0F3A0A */
c0f3af97 6586 {
592d1631
L
6587 { Bad_Opcode },
6588 { Bad_Opcode },
592a252b 6589 { VEX_LEN_TABLE (VEX_LEN_0F3A0A_P_2) },
0bfee649
L
6590 },
6591
592a252b 6592 /* PREFIX_VEX_0F3A0B */
0bfee649 6593 {
592d1631
L
6594 { Bad_Opcode },
6595 { Bad_Opcode },
592a252b 6596 { VEX_LEN_TABLE (VEX_LEN_0F3A0B_P_2) },
0bfee649
L
6597 },
6598
592a252b 6599 /* PREFIX_VEX_0F3A0C */
0bfee649 6600 {
592d1631
L
6601 { Bad_Opcode },
6602 { Bad_Opcode },
592a252b 6603 { VEX_W_TABLE (VEX_W_0F3A0C_P_2) },
0bfee649
L
6604 },
6605
592a252b 6606 /* PREFIX_VEX_0F3A0D */
0bfee649 6607 {
592d1631
L
6608 { Bad_Opcode },
6609 { Bad_Opcode },
592a252b 6610 { VEX_W_TABLE (VEX_W_0F3A0D_P_2) },
c0f3af97
L
6611 },
6612
592a252b 6613 /* PREFIX_VEX_0F3A0E */
0bfee649 6614 {
592d1631
L
6615 { Bad_Opcode },
6616 { Bad_Opcode },
6c30d220 6617 { VEX_W_TABLE (VEX_W_0F3A0E_P_2) },
0bfee649
L
6618 },
6619
592a252b 6620 /* PREFIX_VEX_0F3A0F */
0bfee649 6621 {
592d1631
L
6622 { Bad_Opcode },
6623 { Bad_Opcode },
6c30d220 6624 { VEX_W_TABLE (VEX_W_0F3A0F_P_2) },
0bfee649
L
6625 },
6626
592a252b 6627 /* PREFIX_VEX_0F3A14 */
0bfee649 6628 {
592d1631
L
6629 { Bad_Opcode },
6630 { Bad_Opcode },
592a252b 6631 { VEX_LEN_TABLE (VEX_LEN_0F3A14_P_2) },
0bfee649
L
6632 },
6633
592a252b 6634 /* PREFIX_VEX_0F3A15 */
0bfee649 6635 {
592d1631
L
6636 { Bad_Opcode },
6637 { Bad_Opcode },
592a252b 6638 { VEX_LEN_TABLE (VEX_LEN_0F3A15_P_2) },
0bfee649
L
6639 },
6640
592a252b 6641 /* PREFIX_VEX_0F3A16 */
c0f3af97 6642 {
592d1631
L
6643 { Bad_Opcode },
6644 { Bad_Opcode },
592a252b 6645 { VEX_LEN_TABLE (VEX_LEN_0F3A16_P_2) },
c0f3af97
L
6646 },
6647
592a252b 6648 /* PREFIX_VEX_0F3A17 */
c0f3af97 6649 {
592d1631
L
6650 { Bad_Opcode },
6651 { Bad_Opcode },
592a252b 6652 { VEX_LEN_TABLE (VEX_LEN_0F3A17_P_2) },
c0f3af97
L
6653 },
6654
592a252b 6655 /* PREFIX_VEX_0F3A18 */
c0f3af97 6656 {
592d1631
L
6657 { Bad_Opcode },
6658 { Bad_Opcode },
592a252b 6659 { VEX_LEN_TABLE (VEX_LEN_0F3A18_P_2) },
c0f3af97
L
6660 },
6661
592a252b 6662 /* PREFIX_VEX_0F3A19 */
c0f3af97 6663 {
592d1631
L
6664 { Bad_Opcode },
6665 { Bad_Opcode },
592a252b 6666 { VEX_LEN_TABLE (VEX_LEN_0F3A19_P_2) },
c0f3af97
L
6667 },
6668
592a252b 6669 /* PREFIX_VEX_0F3A1D */
c7b8aa3a
L
6670 {
6671 { Bad_Opcode },
6672 { Bad_Opcode },
bf890a93 6673 { "vcvtps2ph", { EXxmmq, XM, Ib }, 0 },
c7b8aa3a
L
6674 },
6675
592a252b 6676 /* PREFIX_VEX_0F3A20 */
c0f3af97 6677 {
592d1631
L
6678 { Bad_Opcode },
6679 { Bad_Opcode },
592a252b 6680 { VEX_LEN_TABLE (VEX_LEN_0F3A20_P_2) },
c0f3af97
L
6681 },
6682
592a252b 6683 /* PREFIX_VEX_0F3A21 */
c0f3af97 6684 {
592d1631
L
6685 { Bad_Opcode },
6686 { Bad_Opcode },
592a252b 6687 { VEX_LEN_TABLE (VEX_LEN_0F3A21_P_2) },
c0f3af97
L
6688 },
6689
592a252b 6690 /* PREFIX_VEX_0F3A22 */
0bfee649 6691 {
592d1631
L
6692 { Bad_Opcode },
6693 { Bad_Opcode },
592a252b 6694 { VEX_LEN_TABLE (VEX_LEN_0F3A22_P_2) },
0bfee649
L
6695 },
6696
43234a1e
L
6697 /* PREFIX_VEX_0F3A30 */
6698 {
6699 { Bad_Opcode },
6700 { Bad_Opcode },
6701 { VEX_LEN_TABLE (VEX_LEN_0F3A30_P_2) },
6702 },
6703
1ba585e8
IT
6704 /* PREFIX_VEX_0F3A31 */
6705 {
6706 { Bad_Opcode },
6707 { Bad_Opcode },
6708 { VEX_LEN_TABLE (VEX_LEN_0F3A31_P_2) },
6709 },
6710
43234a1e
L
6711 /* PREFIX_VEX_0F3A32 */
6712 {
6713 { Bad_Opcode },
6714 { Bad_Opcode },
6715 { VEX_LEN_TABLE (VEX_LEN_0F3A32_P_2) },
6716 },
6717
1ba585e8
IT
6718 /* PREFIX_VEX_0F3A33 */
6719 {
6720 { Bad_Opcode },
6721 { Bad_Opcode },
6722 { VEX_LEN_TABLE (VEX_LEN_0F3A33_P_2) },
6723 },
6724
6c30d220
L
6725 /* PREFIX_VEX_0F3A38 */
6726 {
6727 { Bad_Opcode },
6728 { Bad_Opcode },
6729 { VEX_LEN_TABLE (VEX_LEN_0F3A38_P_2) },
6730 },
6731
6732 /* PREFIX_VEX_0F3A39 */
6733 {
6734 { Bad_Opcode },
6735 { Bad_Opcode },
6736 { VEX_LEN_TABLE (VEX_LEN_0F3A39_P_2) },
6737 },
6738
592a252b 6739 /* PREFIX_VEX_0F3A40 */
c0f3af97 6740 {
592d1631
L
6741 { Bad_Opcode },
6742 { Bad_Opcode },
592a252b 6743 { VEX_W_TABLE (VEX_W_0F3A40_P_2) },
c0f3af97
L
6744 },
6745
592a252b 6746 /* PREFIX_VEX_0F3A41 */
c0f3af97 6747 {
592d1631
L
6748 { Bad_Opcode },
6749 { Bad_Opcode },
592a252b 6750 { VEX_LEN_TABLE (VEX_LEN_0F3A41_P_2) },
c0f3af97
L
6751 },
6752
592a252b 6753 /* PREFIX_VEX_0F3A42 */
c0f3af97 6754 {
592d1631
L
6755 { Bad_Opcode },
6756 { Bad_Opcode },
6c30d220 6757 { VEX_W_TABLE (VEX_W_0F3A42_P_2) },
c0f3af97
L
6758 },
6759
592a252b 6760 /* PREFIX_VEX_0F3A44 */
ce2f5b3c 6761 {
592d1631
L
6762 { Bad_Opcode },
6763 { Bad_Opcode },
ff1982d5 6764 { "vpclmulqdq", { XM, Vex, EXx, PCLMUL }, 0 },
ce2f5b3c
L
6765 },
6766
6c30d220
L
6767 /* PREFIX_VEX_0F3A46 */
6768 {
6769 { Bad_Opcode },
6770 { Bad_Opcode },
6771 { VEX_LEN_TABLE (VEX_LEN_0F3A46_P_2) },
6772 },
6773
592a252b 6774 /* PREFIX_VEX_0F3A48 */
a683cc34
SP
6775 {
6776 { Bad_Opcode },
6777 { Bad_Opcode },
592a252b 6778 { VEX_W_TABLE (VEX_W_0F3A48_P_2) },
a683cc34
SP
6779 },
6780
592a252b 6781 /* PREFIX_VEX_0F3A49 */
a683cc34
SP
6782 {
6783 { Bad_Opcode },
6784 { Bad_Opcode },
592a252b 6785 { VEX_W_TABLE (VEX_W_0F3A49_P_2) },
a683cc34
SP
6786 },
6787
592a252b 6788 /* PREFIX_VEX_0F3A4A */
c0f3af97 6789 {
592d1631
L
6790 { Bad_Opcode },
6791 { Bad_Opcode },
592a252b 6792 { VEX_W_TABLE (VEX_W_0F3A4A_P_2) },
c0f3af97
L
6793 },
6794
592a252b 6795 /* PREFIX_VEX_0F3A4B */
c0f3af97 6796 {
592d1631
L
6797 { Bad_Opcode },
6798 { Bad_Opcode },
592a252b 6799 { VEX_W_TABLE (VEX_W_0F3A4B_P_2) },
c0f3af97
L
6800 },
6801
592a252b 6802 /* PREFIX_VEX_0F3A4C */
c0f3af97 6803 {
592d1631
L
6804 { Bad_Opcode },
6805 { Bad_Opcode },
6c30d220 6806 { VEX_W_TABLE (VEX_W_0F3A4C_P_2) },
c0f3af97
L
6807 },
6808
592a252b 6809 /* PREFIX_VEX_0F3A5C */
922d8de8 6810 {
592d1631
L
6811 { Bad_Opcode },
6812 { Bad_Opcode },
3a2430e0 6813 { "vfmaddsubps", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
922d8de8
DR
6814 },
6815
592a252b 6816 /* PREFIX_VEX_0F3A5D */
922d8de8 6817 {
592d1631
L
6818 { Bad_Opcode },
6819 { Bad_Opcode },
3a2430e0 6820 { "vfmaddsubpd", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
922d8de8
DR
6821 },
6822
592a252b 6823 /* PREFIX_VEX_0F3A5E */
922d8de8 6824 {
592d1631
L
6825 { Bad_Opcode },
6826 { Bad_Opcode },
3a2430e0 6827 { "vfmsubaddps", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
922d8de8
DR
6828 },
6829
592a252b 6830 /* PREFIX_VEX_0F3A5F */
922d8de8 6831 {
592d1631
L
6832 { Bad_Opcode },
6833 { Bad_Opcode },
3a2430e0 6834 { "vfmsubaddpd", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
922d8de8
DR
6835 },
6836
592a252b 6837 /* PREFIX_VEX_0F3A60 */
c0f3af97 6838 {
592d1631
L
6839 { Bad_Opcode },
6840 { Bad_Opcode },
592a252b 6841 { VEX_LEN_TABLE (VEX_LEN_0F3A60_P_2) },
592d1631 6842 { Bad_Opcode },
c0f3af97
L
6843 },
6844
592a252b 6845 /* PREFIX_VEX_0F3A61 */
c0f3af97 6846 {
592d1631
L
6847 { Bad_Opcode },
6848 { Bad_Opcode },
592a252b 6849 { VEX_LEN_TABLE (VEX_LEN_0F3A61_P_2) },
c0f3af97
L
6850 },
6851
592a252b 6852 /* PREFIX_VEX_0F3A62 */
c0f3af97 6853 {
592d1631
L
6854 { Bad_Opcode },
6855 { Bad_Opcode },
592a252b 6856 { VEX_LEN_TABLE (VEX_LEN_0F3A62_P_2) },
c0f3af97
L
6857 },
6858
592a252b 6859 /* PREFIX_VEX_0F3A63 */
c0f3af97 6860 {
592d1631
L
6861 { Bad_Opcode },
6862 { Bad_Opcode },
592a252b 6863 { VEX_LEN_TABLE (VEX_LEN_0F3A63_P_2) },
c0f3af97 6864 },
a5ff0eb2 6865
592a252b 6866 /* PREFIX_VEX_0F3A68 */
922d8de8 6867 {
592d1631
L
6868 { Bad_Opcode },
6869 { Bad_Opcode },
3a2430e0 6870 { "vfmaddps", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
922d8de8
DR
6871 },
6872
592a252b 6873 /* PREFIX_VEX_0F3A69 */
922d8de8 6874 {
592d1631
L
6875 { Bad_Opcode },
6876 { Bad_Opcode },
3a2430e0 6877 { "vfmaddpd", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
922d8de8
DR
6878 },
6879
592a252b 6880 /* PREFIX_VEX_0F3A6A */
922d8de8 6881 {
592d1631
L
6882 { Bad_Opcode },
6883 { Bad_Opcode },
592a252b 6884 { VEX_LEN_TABLE (VEX_LEN_0F3A6A_P_2) },
922d8de8
DR
6885 },
6886
592a252b 6887 /* PREFIX_VEX_0F3A6B */
922d8de8 6888 {
592d1631
L
6889 { Bad_Opcode },
6890 { Bad_Opcode },
592a252b 6891 { VEX_LEN_TABLE (VEX_LEN_0F3A6B_P_2) },
922d8de8
DR
6892 },
6893
592a252b 6894 /* PREFIX_VEX_0F3A6C */
922d8de8 6895 {
592d1631
L
6896 { Bad_Opcode },
6897 { Bad_Opcode },
3a2430e0 6898 { "vfmsubps", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
922d8de8
DR
6899 },
6900
592a252b 6901 /* PREFIX_VEX_0F3A6D */
922d8de8 6902 {
592d1631
L
6903 { Bad_Opcode },
6904 { Bad_Opcode },
3a2430e0 6905 { "vfmsubpd", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
922d8de8
DR
6906 },
6907
592a252b 6908 /* PREFIX_VEX_0F3A6E */
922d8de8 6909 {
592d1631
L
6910 { Bad_Opcode },
6911 { Bad_Opcode },
592a252b 6912 { VEX_LEN_TABLE (VEX_LEN_0F3A6E_P_2) },
922d8de8
DR
6913 },
6914
592a252b 6915 /* PREFIX_VEX_0F3A6F */
922d8de8 6916 {
592d1631
L
6917 { Bad_Opcode },
6918 { Bad_Opcode },
592a252b 6919 { VEX_LEN_TABLE (VEX_LEN_0F3A6F_P_2) },
922d8de8
DR
6920 },
6921
592a252b 6922 /* PREFIX_VEX_0F3A78 */
922d8de8 6923 {
592d1631
L
6924 { Bad_Opcode },
6925 { Bad_Opcode },
3a2430e0 6926 { "vfnmaddps", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
922d8de8
DR
6927 },
6928
592a252b 6929 /* PREFIX_VEX_0F3A79 */
922d8de8 6930 {
592d1631
L
6931 { Bad_Opcode },
6932 { Bad_Opcode },
3a2430e0 6933 { "vfnmaddpd", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
922d8de8
DR
6934 },
6935
592a252b 6936 /* PREFIX_VEX_0F3A7A */
922d8de8 6937 {
592d1631
L
6938 { Bad_Opcode },
6939 { Bad_Opcode },
592a252b 6940 { VEX_LEN_TABLE (VEX_LEN_0F3A7A_P_2) },
922d8de8
DR
6941 },
6942
592a252b 6943 /* PREFIX_VEX_0F3A7B */
922d8de8 6944 {
592d1631
L
6945 { Bad_Opcode },
6946 { Bad_Opcode },
592a252b 6947 { VEX_LEN_TABLE (VEX_LEN_0F3A7B_P_2) },
922d8de8
DR
6948 },
6949
592a252b 6950 /* PREFIX_VEX_0F3A7C */
922d8de8 6951 {
592d1631
L
6952 { Bad_Opcode },
6953 { Bad_Opcode },
3a2430e0 6954 { "vfnmsubps", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
592d1631 6955 { Bad_Opcode },
922d8de8
DR
6956 },
6957
592a252b 6958 /* PREFIX_VEX_0F3A7D */
922d8de8 6959 {
592d1631
L
6960 { Bad_Opcode },
6961 { Bad_Opcode },
3a2430e0 6962 { "vfnmsubpd", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
922d8de8
DR
6963 },
6964
592a252b 6965 /* PREFIX_VEX_0F3A7E */
922d8de8 6966 {
592d1631
L
6967 { Bad_Opcode },
6968 { Bad_Opcode },
592a252b 6969 { VEX_LEN_TABLE (VEX_LEN_0F3A7E_P_2) },
922d8de8
DR
6970 },
6971
592a252b 6972 /* PREFIX_VEX_0F3A7F */
922d8de8 6973 {
592d1631
L
6974 { Bad_Opcode },
6975 { Bad_Opcode },
592a252b 6976 { VEX_LEN_TABLE (VEX_LEN_0F3A7F_P_2) },
922d8de8
DR
6977 },
6978
48521003
IT
6979 /* PREFIX_VEX_0F3ACE */
6980 {
6981 { Bad_Opcode },
6982 { Bad_Opcode },
6983 { VEX_W_TABLE (VEX_W_0F3ACE_P_2) },
6984 },
6985
6986 /* PREFIX_VEX_0F3ACF */
6987 {
6988 { Bad_Opcode },
6989 { Bad_Opcode },
6990 { VEX_W_TABLE (VEX_W_0F3ACF_P_2) },
6991 },
6992
592a252b 6993 /* PREFIX_VEX_0F3ADF */
a5ff0eb2 6994 {
592d1631
L
6995 { Bad_Opcode },
6996 { Bad_Opcode },
592a252b 6997 { VEX_LEN_TABLE (VEX_LEN_0F3ADF_P_2) },
a5ff0eb2 6998 },
6c30d220
L
6999
7000 /* PREFIX_VEX_0F3AF0 */
7001 {
7002 { Bad_Opcode },
7003 { Bad_Opcode },
7004 { Bad_Opcode },
7005 { VEX_LEN_TABLE (VEX_LEN_0F3AF0_P_3) },
7006 },
43234a1e
L
7007
7008#define NEED_PREFIX_TABLE
7009#include "i386-dis-evex.h"
7010#undef NEED_PREFIX_TABLE
c0f3af97
L
7011};
7012
7013static const struct dis386 x86_64_table[][2] = {
7014 /* X86_64_06 */
7015 {
bf890a93 7016 { "pushP", { es }, 0 },
c0f3af97
L
7017 },
7018
7019 /* X86_64_07 */
7020 {
bf890a93 7021 { "popP", { es }, 0 },
c0f3af97
L
7022 },
7023
7024 /* X86_64_0D */
7025 {
bf890a93 7026 { "pushP", { cs }, 0 },
c0f3af97
L
7027 },
7028
7029 /* X86_64_16 */
7030 {
bf890a93 7031 { "pushP", { ss }, 0 },
c0f3af97
L
7032 },
7033
7034 /* X86_64_17 */
7035 {
bf890a93 7036 { "popP", { ss }, 0 },
c0f3af97
L
7037 },
7038
7039 /* X86_64_1E */
7040 {
bf890a93 7041 { "pushP", { ds }, 0 },
c0f3af97
L
7042 },
7043
7044 /* X86_64_1F */
7045 {
bf890a93 7046 { "popP", { ds }, 0 },
c0f3af97
L
7047 },
7048
7049 /* X86_64_27 */
7050 {
bf890a93 7051 { "daa", { XX }, 0 },
c0f3af97
L
7052 },
7053
7054 /* X86_64_2F */
7055 {
bf890a93 7056 { "das", { XX }, 0 },
c0f3af97
L
7057 },
7058
7059 /* X86_64_37 */
7060 {
bf890a93 7061 { "aaa", { XX }, 0 },
c0f3af97
L
7062 },
7063
7064 /* X86_64_3F */
7065 {
bf890a93 7066 { "aas", { XX }, 0 },
c0f3af97
L
7067 },
7068
7069 /* X86_64_60 */
7070 {
bf890a93 7071 { "pushaP", { XX }, 0 },
c0f3af97
L
7072 },
7073
7074 /* X86_64_61 */
7075 {
bf890a93 7076 { "popaP", { XX }, 0 },
c0f3af97
L
7077 },
7078
7079 /* X86_64_62 */
7080 {
7081 { MOD_TABLE (MOD_62_32BIT) },
43234a1e 7082 { EVEX_TABLE (EVEX_0F) },
c0f3af97
L
7083 },
7084
7085 /* X86_64_63 */
7086 {
bf890a93
IT
7087 { "arpl", { Ew, Gw }, 0 },
7088 { "movs{lq|xd}", { Gv, Ed }, 0 },
c0f3af97
L
7089 },
7090
7091 /* X86_64_6D */
7092 {
bf890a93
IT
7093 { "ins{R|}", { Yzr, indirDX }, 0 },
7094 { "ins{G|}", { Yzr, indirDX }, 0 },
c0f3af97
L
7095 },
7096
7097 /* X86_64_6F */
7098 {
bf890a93
IT
7099 { "outs{R|}", { indirDXr, Xz }, 0 },
7100 { "outs{G|}", { indirDXr, Xz }, 0 },
c0f3af97
L
7101 },
7102
d039fef3 7103 /* X86_64_82 */
8b89fe14 7104 {
de194d85 7105 /* Opcode 0x82 is an alias of opcode 0x80 in 32-bit mode. */
d039fef3 7106 { REG_TABLE (REG_80) },
8b89fe14
L
7107 },
7108
c0f3af97
L
7109 /* X86_64_9A */
7110 {
bf890a93 7111 { "Jcall{T|}", { Ap }, 0 },
c0f3af97
L
7112 },
7113
7114 /* X86_64_C4 */
7115 {
7116 { MOD_TABLE (MOD_C4_32BIT) },
7117 { VEX_C4_TABLE (VEX_0F) },
7118 },
7119
7120 /* X86_64_C5 */
7121 {
7122 { MOD_TABLE (MOD_C5_32BIT) },
7123 { VEX_C5_TABLE (VEX_0F) },
7124 },
7125
7126 /* X86_64_CE */
7127 {
bf890a93 7128 { "into", { XX }, 0 },
c0f3af97
L
7129 },
7130
7131 /* X86_64_D4 */
7132 {
bf890a93 7133 { "aam", { Ib }, 0 },
c0f3af97
L
7134 },
7135
7136 /* X86_64_D5 */
7137 {
bf890a93 7138 { "aad", { Ib }, 0 },
c0f3af97
L
7139 },
7140
a72d2af2
L
7141 /* X86_64_E8 */
7142 {
7143 { "callP", { Jv, BND }, 0 },
5db04b09 7144 { "call@", { Jv, BND }, 0 }
a72d2af2
L
7145 },
7146
7147 /* X86_64_E9 */
7148 {
7149 { "jmpP", { Jv, BND }, 0 },
5db04b09 7150 { "jmp@", { Jv, BND }, 0 }
a72d2af2
L
7151 },
7152
c0f3af97
L
7153 /* X86_64_EA */
7154 {
bf890a93 7155 { "Jjmp{T|}", { Ap }, 0 },
c0f3af97
L
7156 },
7157
7158 /* X86_64_0F01_REG_0 */
7159 {
bf890a93
IT
7160 { "sgdt{Q|IQ}", { M }, 0 },
7161 { "sgdt", { M }, 0 },
c0f3af97
L
7162 },
7163
7164 /* X86_64_0F01_REG_1 */
7165 {
bf890a93
IT
7166 { "sidt{Q|IQ}", { M }, 0 },
7167 { "sidt", { M }, 0 },
c0f3af97
L
7168 },
7169
7170 /* X86_64_0F01_REG_2 */
7171 {
bf890a93
IT
7172 { "lgdt{Q|Q}", { M }, 0 },
7173 { "lgdt", { M }, 0 },
c0f3af97
L
7174 },
7175
7176 /* X86_64_0F01_REG_3 */
7177 {
bf890a93
IT
7178 { "lidt{Q|Q}", { M }, 0 },
7179 { "lidt", { M }, 0 },
c0f3af97
L
7180 },
7181};
7182
7183static const struct dis386 three_byte_table[][256] = {
c1e679ec
DR
7184
7185 /* THREE_BYTE_0F38 */
c0f3af97
L
7186 {
7187 /* 00 */
507bd325
L
7188 { "pshufb", { MX, EM }, PREFIX_OPCODE },
7189 { "phaddw", { MX, EM }, PREFIX_OPCODE },
7190 { "phaddd", { MX, EM }, PREFIX_OPCODE },
7191 { "phaddsw", { MX, EM }, PREFIX_OPCODE },
7192 { "pmaddubsw", { MX, EM }, PREFIX_OPCODE },
7193 { "phsubw", { MX, EM }, PREFIX_OPCODE },
7194 { "phsubd", { MX, EM }, PREFIX_OPCODE },
7195 { "phsubsw", { MX, EM }, PREFIX_OPCODE },
c0f3af97 7196 /* 08 */
507bd325
L
7197 { "psignb", { MX, EM }, PREFIX_OPCODE },
7198 { "psignw", { MX, EM }, PREFIX_OPCODE },
7199 { "psignd", { MX, EM }, PREFIX_OPCODE },
7200 { "pmulhrsw", { MX, EM }, PREFIX_OPCODE },
592d1631
L
7201 { Bad_Opcode },
7202 { Bad_Opcode },
7203 { Bad_Opcode },
7204 { Bad_Opcode },
f88c9eb0
SP
7205 /* 10 */
7206 { PREFIX_TABLE (PREFIX_0F3810) },
592d1631
L
7207 { Bad_Opcode },
7208 { Bad_Opcode },
7209 { Bad_Opcode },
f88c9eb0
SP
7210 { PREFIX_TABLE (PREFIX_0F3814) },
7211 { PREFIX_TABLE (PREFIX_0F3815) },
592d1631 7212 { Bad_Opcode },
f88c9eb0
SP
7213 { PREFIX_TABLE (PREFIX_0F3817) },
7214 /* 18 */
592d1631
L
7215 { Bad_Opcode },
7216 { Bad_Opcode },
7217 { Bad_Opcode },
7218 { Bad_Opcode },
507bd325
L
7219 { "pabsb", { MX, EM }, PREFIX_OPCODE },
7220 { "pabsw", { MX, EM }, PREFIX_OPCODE },
7221 { "pabsd", { MX, EM }, PREFIX_OPCODE },
592d1631 7222 { Bad_Opcode },
f88c9eb0
SP
7223 /* 20 */
7224 { PREFIX_TABLE (PREFIX_0F3820) },
7225 { PREFIX_TABLE (PREFIX_0F3821) },
7226 { PREFIX_TABLE (PREFIX_0F3822) },
7227 { PREFIX_TABLE (PREFIX_0F3823) },
7228 { PREFIX_TABLE (PREFIX_0F3824) },
7229 { PREFIX_TABLE (PREFIX_0F3825) },
592d1631
L
7230 { Bad_Opcode },
7231 { Bad_Opcode },
f88c9eb0
SP
7232 /* 28 */
7233 { PREFIX_TABLE (PREFIX_0F3828) },
7234 { PREFIX_TABLE (PREFIX_0F3829) },
7235 { PREFIX_TABLE (PREFIX_0F382A) },
7236 { PREFIX_TABLE (PREFIX_0F382B) },
592d1631
L
7237 { Bad_Opcode },
7238 { Bad_Opcode },
7239 { Bad_Opcode },
7240 { Bad_Opcode },
f88c9eb0
SP
7241 /* 30 */
7242 { PREFIX_TABLE (PREFIX_0F3830) },
7243 { PREFIX_TABLE (PREFIX_0F3831) },
7244 { PREFIX_TABLE (PREFIX_0F3832) },
7245 { PREFIX_TABLE (PREFIX_0F3833) },
7246 { PREFIX_TABLE (PREFIX_0F3834) },
7247 { PREFIX_TABLE (PREFIX_0F3835) },
592d1631 7248 { Bad_Opcode },
f88c9eb0
SP
7249 { PREFIX_TABLE (PREFIX_0F3837) },
7250 /* 38 */
7251 { PREFIX_TABLE (PREFIX_0F3838) },
7252 { PREFIX_TABLE (PREFIX_0F3839) },
7253 { PREFIX_TABLE (PREFIX_0F383A) },
7254 { PREFIX_TABLE (PREFIX_0F383B) },
7255 { PREFIX_TABLE (PREFIX_0F383C) },
7256 { PREFIX_TABLE (PREFIX_0F383D) },
7257 { PREFIX_TABLE (PREFIX_0F383E) },
7258 { PREFIX_TABLE (PREFIX_0F383F) },
7259 /* 40 */
7260 { PREFIX_TABLE (PREFIX_0F3840) },
7261 { PREFIX_TABLE (PREFIX_0F3841) },
592d1631
L
7262 { Bad_Opcode },
7263 { Bad_Opcode },
7264 { Bad_Opcode },
7265 { Bad_Opcode },
7266 { Bad_Opcode },
7267 { Bad_Opcode },
f88c9eb0 7268 /* 48 */
592d1631
L
7269 { Bad_Opcode },
7270 { Bad_Opcode },
7271 { Bad_Opcode },
7272 { Bad_Opcode },
7273 { Bad_Opcode },
7274 { Bad_Opcode },
7275 { Bad_Opcode },
7276 { Bad_Opcode },
f88c9eb0 7277 /* 50 */
592d1631
L
7278 { Bad_Opcode },
7279 { Bad_Opcode },
7280 { Bad_Opcode },
7281 { Bad_Opcode },
7282 { Bad_Opcode },
7283 { Bad_Opcode },
7284 { Bad_Opcode },
7285 { Bad_Opcode },
f88c9eb0 7286 /* 58 */
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 7295 /* 60 */
592d1631
L
7296 { Bad_Opcode },
7297 { Bad_Opcode },
7298 { Bad_Opcode },
7299 { Bad_Opcode },
7300 { Bad_Opcode },
7301 { Bad_Opcode },
7302 { Bad_Opcode },
7303 { Bad_Opcode },
f88c9eb0 7304 /* 68 */
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 /* 70 */
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 /* 78 */
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 /* 80 */
7332 { PREFIX_TABLE (PREFIX_0F3880) },
7333 { PREFIX_TABLE (PREFIX_0F3881) },
6c30d220 7334 { PREFIX_TABLE (PREFIX_0F3882) },
592d1631
L
7335 { Bad_Opcode },
7336 { Bad_Opcode },
7337 { Bad_Opcode },
7338 { Bad_Opcode },
7339 { Bad_Opcode },
f88c9eb0 7340 /* 88 */
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 /* 90 */
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 /* 98 */
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 7367 /* a0 */
592d1631
L
7368 { Bad_Opcode },
7369 { Bad_Opcode },
7370 { Bad_Opcode },
7371 { Bad_Opcode },
7372 { Bad_Opcode },
7373 { Bad_Opcode },
7374 { Bad_Opcode },
7375 { Bad_Opcode },
f88c9eb0 7376 /* a8 */
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 /* b0 */
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 /* b8 */
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 /* c0 */
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 /* c8 */
a0046408
L
7413 { PREFIX_TABLE (PREFIX_0F38C8) },
7414 { PREFIX_TABLE (PREFIX_0F38C9) },
7415 { PREFIX_TABLE (PREFIX_0F38CA) },
7416 { PREFIX_TABLE (PREFIX_0F38CB) },
7417 { PREFIX_TABLE (PREFIX_0F38CC) },
7418 { PREFIX_TABLE (PREFIX_0F38CD) },
592d1631 7419 { Bad_Opcode },
48521003 7420 { PREFIX_TABLE (PREFIX_0F38CF) },
f88c9eb0 7421 /* d0 */
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 /* d8 */
592d1631
L
7431 { Bad_Opcode },
7432 { Bad_Opcode },
7433 { Bad_Opcode },
f88c9eb0
SP
7434 { PREFIX_TABLE (PREFIX_0F38DB) },
7435 { PREFIX_TABLE (PREFIX_0F38DC) },
7436 { PREFIX_TABLE (PREFIX_0F38DD) },
7437 { PREFIX_TABLE (PREFIX_0F38DE) },
7438 { PREFIX_TABLE (PREFIX_0F38DF) },
7439 /* e0 */
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 /* e8 */
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
SP
7457 /* f0 */
7458 { PREFIX_TABLE (PREFIX_0F38F0) },
7459 { PREFIX_TABLE (PREFIX_0F38F1) },
592d1631
L
7460 { Bad_Opcode },
7461 { Bad_Opcode },
7462 { Bad_Opcode },
603555e5 7463 { PREFIX_TABLE (PREFIX_0F38F5) },
e2e1fcde 7464 { PREFIX_TABLE (PREFIX_0F38F6) },
592d1631 7465 { Bad_Opcode },
f88c9eb0 7466 /* f8 */
c0a30a9f
L
7467 { PREFIX_TABLE (PREFIX_0F38F8) },
7468 { PREFIX_TABLE (PREFIX_0F38F9) },
592d1631
L
7469 { Bad_Opcode },
7470 { Bad_Opcode },
7471 { Bad_Opcode },
7472 { Bad_Opcode },
7473 { Bad_Opcode },
7474 { Bad_Opcode },
f88c9eb0
SP
7475 },
7476 /* THREE_BYTE_0F3A */
7477 {
7478 /* 00 */
592d1631
L
7479 { Bad_Opcode },
7480 { Bad_Opcode },
7481 { Bad_Opcode },
7482 { Bad_Opcode },
7483 { Bad_Opcode },
7484 { Bad_Opcode },
7485 { Bad_Opcode },
7486 { Bad_Opcode },
f88c9eb0
SP
7487 /* 08 */
7488 { PREFIX_TABLE (PREFIX_0F3A08) },
7489 { PREFIX_TABLE (PREFIX_0F3A09) },
7490 { PREFIX_TABLE (PREFIX_0F3A0A) },
7491 { PREFIX_TABLE (PREFIX_0F3A0B) },
7492 { PREFIX_TABLE (PREFIX_0F3A0C) },
7493 { PREFIX_TABLE (PREFIX_0F3A0D) },
7494 { PREFIX_TABLE (PREFIX_0F3A0E) },
507bd325 7495 { "palignr", { MX, EM, Ib }, PREFIX_OPCODE },
f88c9eb0 7496 /* 10 */
592d1631
L
7497 { Bad_Opcode },
7498 { Bad_Opcode },
7499 { Bad_Opcode },
7500 { Bad_Opcode },
f88c9eb0
SP
7501 { PREFIX_TABLE (PREFIX_0F3A14) },
7502 { PREFIX_TABLE (PREFIX_0F3A15) },
7503 { PREFIX_TABLE (PREFIX_0F3A16) },
7504 { PREFIX_TABLE (PREFIX_0F3A17) },
7505 /* 18 */
592d1631
L
7506 { Bad_Opcode },
7507 { Bad_Opcode },
7508 { Bad_Opcode },
7509 { Bad_Opcode },
7510 { Bad_Opcode },
7511 { Bad_Opcode },
7512 { Bad_Opcode },
7513 { Bad_Opcode },
f88c9eb0
SP
7514 /* 20 */
7515 { PREFIX_TABLE (PREFIX_0F3A20) },
7516 { PREFIX_TABLE (PREFIX_0F3A21) },
7517 { PREFIX_TABLE (PREFIX_0F3A22) },
592d1631
L
7518 { Bad_Opcode },
7519 { Bad_Opcode },
7520 { Bad_Opcode },
7521 { Bad_Opcode },
7522 { Bad_Opcode },
f88c9eb0 7523 /* 28 */
592d1631
L
7524 { Bad_Opcode },
7525 { Bad_Opcode },
7526 { Bad_Opcode },
7527 { Bad_Opcode },
7528 { Bad_Opcode },
7529 { Bad_Opcode },
7530 { Bad_Opcode },
7531 { Bad_Opcode },
f88c9eb0 7532 /* 30 */
592d1631
L
7533 { Bad_Opcode },
7534 { Bad_Opcode },
7535 { Bad_Opcode },
7536 { Bad_Opcode },
7537 { Bad_Opcode },
7538 { Bad_Opcode },
7539 { Bad_Opcode },
7540 { Bad_Opcode },
f88c9eb0 7541 /* 38 */
592d1631
L
7542 { Bad_Opcode },
7543 { Bad_Opcode },
7544 { Bad_Opcode },
7545 { Bad_Opcode },
7546 { Bad_Opcode },
7547 { Bad_Opcode },
7548 { Bad_Opcode },
7549 { Bad_Opcode },
f88c9eb0
SP
7550 /* 40 */
7551 { PREFIX_TABLE (PREFIX_0F3A40) },
7552 { PREFIX_TABLE (PREFIX_0F3A41) },
7553 { PREFIX_TABLE (PREFIX_0F3A42) },
592d1631 7554 { Bad_Opcode },
f88c9eb0 7555 { PREFIX_TABLE (PREFIX_0F3A44) },
592d1631
L
7556 { Bad_Opcode },
7557 { Bad_Opcode },
7558 { Bad_Opcode },
f88c9eb0 7559 /* 48 */
592d1631
L
7560 { Bad_Opcode },
7561 { Bad_Opcode },
7562 { Bad_Opcode },
7563 { Bad_Opcode },
7564 { Bad_Opcode },
7565 { Bad_Opcode },
7566 { Bad_Opcode },
7567 { Bad_Opcode },
f88c9eb0 7568 /* 50 */
592d1631
L
7569 { Bad_Opcode },
7570 { Bad_Opcode },
7571 { Bad_Opcode },
7572 { Bad_Opcode },
7573 { Bad_Opcode },
7574 { Bad_Opcode },
7575 { Bad_Opcode },
7576 { Bad_Opcode },
f88c9eb0 7577 /* 58 */
592d1631
L
7578 { Bad_Opcode },
7579 { Bad_Opcode },
7580 { Bad_Opcode },
7581 { Bad_Opcode },
7582 { Bad_Opcode },
7583 { Bad_Opcode },
7584 { Bad_Opcode },
7585 { Bad_Opcode },
f88c9eb0
SP
7586 /* 60 */
7587 { PREFIX_TABLE (PREFIX_0F3A60) },
7588 { PREFIX_TABLE (PREFIX_0F3A61) },
7589 { PREFIX_TABLE (PREFIX_0F3A62) },
7590 { PREFIX_TABLE (PREFIX_0F3A63) },
592d1631
L
7591 { Bad_Opcode },
7592 { Bad_Opcode },
7593 { Bad_Opcode },
7594 { Bad_Opcode },
f88c9eb0 7595 /* 68 */
592d1631
L
7596 { Bad_Opcode },
7597 { Bad_Opcode },
7598 { Bad_Opcode },
7599 { Bad_Opcode },
7600 { Bad_Opcode },
7601 { Bad_Opcode },
7602 { Bad_Opcode },
7603 { Bad_Opcode },
f88c9eb0 7604 /* 70 */
592d1631
L
7605 { Bad_Opcode },
7606 { Bad_Opcode },
7607 { Bad_Opcode },
7608 { Bad_Opcode },
7609 { Bad_Opcode },
7610 { Bad_Opcode },
7611 { Bad_Opcode },
7612 { Bad_Opcode },
f88c9eb0 7613 /* 78 */
592d1631
L
7614 { Bad_Opcode },
7615 { Bad_Opcode },
7616 { Bad_Opcode },
7617 { Bad_Opcode },
7618 { Bad_Opcode },
7619 { Bad_Opcode },
7620 { Bad_Opcode },
7621 { Bad_Opcode },
f88c9eb0 7622 /* 80 */
592d1631
L
7623 { Bad_Opcode },
7624 { Bad_Opcode },
7625 { Bad_Opcode },
7626 { Bad_Opcode },
7627 { Bad_Opcode },
7628 { Bad_Opcode },
7629 { Bad_Opcode },
7630 { Bad_Opcode },
f88c9eb0 7631 /* 88 */
592d1631
L
7632 { Bad_Opcode },
7633 { Bad_Opcode },
7634 { Bad_Opcode },
7635 { Bad_Opcode },
7636 { Bad_Opcode },
7637 { Bad_Opcode },
7638 { Bad_Opcode },
7639 { Bad_Opcode },
f88c9eb0 7640 /* 90 */
592d1631
L
7641 { Bad_Opcode },
7642 { Bad_Opcode },
7643 { Bad_Opcode },
7644 { Bad_Opcode },
7645 { Bad_Opcode },
7646 { Bad_Opcode },
7647 { Bad_Opcode },
7648 { Bad_Opcode },
f88c9eb0 7649 /* 98 */
592d1631
L
7650 { Bad_Opcode },
7651 { Bad_Opcode },
7652 { Bad_Opcode },
7653 { Bad_Opcode },
7654 { Bad_Opcode },
7655 { Bad_Opcode },
7656 { Bad_Opcode },
7657 { Bad_Opcode },
f88c9eb0 7658 /* a0 */
592d1631
L
7659 { Bad_Opcode },
7660 { Bad_Opcode },
7661 { Bad_Opcode },
7662 { Bad_Opcode },
7663 { Bad_Opcode },
7664 { Bad_Opcode },
7665 { Bad_Opcode },
7666 { Bad_Opcode },
f88c9eb0 7667 /* a8 */
592d1631
L
7668 { Bad_Opcode },
7669 { Bad_Opcode },
7670 { Bad_Opcode },
7671 { Bad_Opcode },
7672 { Bad_Opcode },
7673 { Bad_Opcode },
7674 { Bad_Opcode },
7675 { Bad_Opcode },
f88c9eb0 7676 /* b0 */
592d1631
L
7677 { Bad_Opcode },
7678 { Bad_Opcode },
7679 { Bad_Opcode },
7680 { Bad_Opcode },
7681 { Bad_Opcode },
7682 { Bad_Opcode },
7683 { Bad_Opcode },
7684 { Bad_Opcode },
f88c9eb0 7685 /* b8 */
592d1631
L
7686 { Bad_Opcode },
7687 { Bad_Opcode },
7688 { Bad_Opcode },
7689 { Bad_Opcode },
7690 { Bad_Opcode },
7691 { Bad_Opcode },
7692 { Bad_Opcode },
7693 { Bad_Opcode },
f88c9eb0 7694 /* c0 */
592d1631
L
7695 { Bad_Opcode },
7696 { Bad_Opcode },
7697 { Bad_Opcode },
7698 { Bad_Opcode },
7699 { Bad_Opcode },
7700 { Bad_Opcode },
7701 { Bad_Opcode },
7702 { Bad_Opcode },
f88c9eb0 7703 /* c8 */
592d1631
L
7704 { Bad_Opcode },
7705 { Bad_Opcode },
7706 { Bad_Opcode },
7707 { Bad_Opcode },
a0046408 7708 { PREFIX_TABLE (PREFIX_0F3ACC) },
592d1631 7709 { Bad_Opcode },
48521003
IT
7710 { PREFIX_TABLE (PREFIX_0F3ACE) },
7711 { PREFIX_TABLE (PREFIX_0F3ACF) },
f88c9eb0 7712 /* d0 */
592d1631
L
7713 { Bad_Opcode },
7714 { Bad_Opcode },
7715 { Bad_Opcode },
7716 { Bad_Opcode },
7717 { Bad_Opcode },
7718 { Bad_Opcode },
7719 { Bad_Opcode },
7720 { Bad_Opcode },
f88c9eb0 7721 /* d8 */
592d1631
L
7722 { Bad_Opcode },
7723 { Bad_Opcode },
7724 { Bad_Opcode },
7725 { Bad_Opcode },
7726 { Bad_Opcode },
7727 { Bad_Opcode },
7728 { Bad_Opcode },
f88c9eb0
SP
7729 { PREFIX_TABLE (PREFIX_0F3ADF) },
7730 /* e0 */
592d1631
L
7731 { Bad_Opcode },
7732 { Bad_Opcode },
7733 { Bad_Opcode },
7734 { Bad_Opcode },
7735 { Bad_Opcode },
592d1631
L
7736 { Bad_Opcode },
7737 { Bad_Opcode },
7738 { Bad_Opcode },
85f10a01 7739 /* e8 */
592d1631
L
7740 { Bad_Opcode },
7741 { Bad_Opcode },
7742 { Bad_Opcode },
7743 { Bad_Opcode },
7744 { Bad_Opcode },
7745 { Bad_Opcode },
7746 { Bad_Opcode },
7747 { Bad_Opcode },
85f10a01 7748 /* f0 */
592d1631
L
7749 { Bad_Opcode },
7750 { Bad_Opcode },
7751 { Bad_Opcode },
7752 { Bad_Opcode },
7753 { Bad_Opcode },
7754 { Bad_Opcode },
7755 { Bad_Opcode },
7756 { Bad_Opcode },
85f10a01 7757 /* f8 */
592d1631
L
7758 { Bad_Opcode },
7759 { Bad_Opcode },
7760 { Bad_Opcode },
7761 { Bad_Opcode },
7762 { Bad_Opcode },
7763 { Bad_Opcode },
7764 { Bad_Opcode },
7765 { Bad_Opcode },
85f10a01 7766 },
f88c9eb0
SP
7767};
7768
7769static const struct dis386 xop_table[][256] = {
5dd85c99 7770 /* XOP_08 */
85f10a01
MM
7771 {
7772 /* 00 */
592d1631
L
7773 { Bad_Opcode },
7774 { Bad_Opcode },
7775 { Bad_Opcode },
7776 { Bad_Opcode },
7777 { Bad_Opcode },
7778 { Bad_Opcode },
7779 { Bad_Opcode },
7780 { Bad_Opcode },
85f10a01 7781 /* 08 */
592d1631
L
7782 { Bad_Opcode },
7783 { Bad_Opcode },
7784 { Bad_Opcode },
7785 { Bad_Opcode },
7786 { Bad_Opcode },
7787 { Bad_Opcode },
7788 { Bad_Opcode },
7789 { Bad_Opcode },
85f10a01 7790 /* 10 */
3929df09 7791 { Bad_Opcode },
592d1631
L
7792 { Bad_Opcode },
7793 { Bad_Opcode },
7794 { Bad_Opcode },
7795 { Bad_Opcode },
7796 { Bad_Opcode },
7797 { Bad_Opcode },
7798 { Bad_Opcode },
85f10a01 7799 /* 18 */
592d1631
L
7800 { Bad_Opcode },
7801 { Bad_Opcode },
7802 { Bad_Opcode },
7803 { Bad_Opcode },
7804 { Bad_Opcode },
7805 { Bad_Opcode },
7806 { Bad_Opcode },
7807 { Bad_Opcode },
85f10a01 7808 /* 20 */
592d1631
L
7809 { Bad_Opcode },
7810 { Bad_Opcode },
7811 { Bad_Opcode },
7812 { Bad_Opcode },
7813 { Bad_Opcode },
7814 { Bad_Opcode },
7815 { Bad_Opcode },
7816 { Bad_Opcode },
85f10a01 7817 /* 28 */
592d1631
L
7818 { Bad_Opcode },
7819 { Bad_Opcode },
7820 { Bad_Opcode },
7821 { Bad_Opcode },
7822 { Bad_Opcode },
7823 { Bad_Opcode },
7824 { Bad_Opcode },
7825 { Bad_Opcode },
c0f3af97 7826 /* 30 */
592d1631
L
7827 { Bad_Opcode },
7828 { Bad_Opcode },
7829 { Bad_Opcode },
7830 { Bad_Opcode },
7831 { Bad_Opcode },
7832 { Bad_Opcode },
7833 { Bad_Opcode },
7834 { Bad_Opcode },
c0f3af97 7835 /* 38 */
592d1631
L
7836 { Bad_Opcode },
7837 { Bad_Opcode },
7838 { Bad_Opcode },
7839 { Bad_Opcode },
7840 { Bad_Opcode },
7841 { Bad_Opcode },
7842 { Bad_Opcode },
7843 { Bad_Opcode },
c0f3af97 7844 /* 40 */
592d1631
L
7845 { Bad_Opcode },
7846 { Bad_Opcode },
7847 { Bad_Opcode },
7848 { Bad_Opcode },
7849 { Bad_Opcode },
7850 { Bad_Opcode },
7851 { Bad_Opcode },
7852 { Bad_Opcode },
85f10a01 7853 /* 48 */
592d1631
L
7854 { Bad_Opcode },
7855 { Bad_Opcode },
7856 { Bad_Opcode },
7857 { Bad_Opcode },
7858 { Bad_Opcode },
7859 { Bad_Opcode },
7860 { Bad_Opcode },
7861 { Bad_Opcode },
c0f3af97 7862 /* 50 */
592d1631
L
7863 { Bad_Opcode },
7864 { Bad_Opcode },
7865 { Bad_Opcode },
7866 { Bad_Opcode },
7867 { Bad_Opcode },
7868 { Bad_Opcode },
7869 { Bad_Opcode },
7870 { Bad_Opcode },
85f10a01 7871 /* 58 */
592d1631
L
7872 { Bad_Opcode },
7873 { Bad_Opcode },
7874 { Bad_Opcode },
7875 { Bad_Opcode },
7876 { Bad_Opcode },
7877 { Bad_Opcode },
7878 { Bad_Opcode },
7879 { Bad_Opcode },
c1e679ec 7880 /* 60 */
592d1631
L
7881 { Bad_Opcode },
7882 { Bad_Opcode },
7883 { Bad_Opcode },
7884 { Bad_Opcode },
7885 { Bad_Opcode },
7886 { Bad_Opcode },
7887 { Bad_Opcode },
7888 { Bad_Opcode },
c0f3af97 7889 /* 68 */
592d1631
L
7890 { Bad_Opcode },
7891 { Bad_Opcode },
7892 { Bad_Opcode },
7893 { Bad_Opcode },
7894 { Bad_Opcode },
7895 { Bad_Opcode },
7896 { Bad_Opcode },
7897 { Bad_Opcode },
85f10a01 7898 /* 70 */
592d1631
L
7899 { Bad_Opcode },
7900 { Bad_Opcode },
7901 { Bad_Opcode },
7902 { Bad_Opcode },
7903 { Bad_Opcode },
7904 { Bad_Opcode },
7905 { Bad_Opcode },
7906 { Bad_Opcode },
85f10a01 7907 /* 78 */
592d1631
L
7908 { Bad_Opcode },
7909 { Bad_Opcode },
7910 { Bad_Opcode },
7911 { Bad_Opcode },
7912 { Bad_Opcode },
7913 { Bad_Opcode },
7914 { Bad_Opcode },
7915 { Bad_Opcode },
85f10a01 7916 /* 80 */
592d1631
L
7917 { Bad_Opcode },
7918 { Bad_Opcode },
7919 { Bad_Opcode },
7920 { Bad_Opcode },
7921 { Bad_Opcode },
3a2430e0
JB
7922 { "vpmacssww", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
7923 { "vpmacsswd", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
7924 { "vpmacssdql", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
5dd85c99 7925 /* 88 */
592d1631
L
7926 { Bad_Opcode },
7927 { Bad_Opcode },
7928 { Bad_Opcode },
7929 { Bad_Opcode },
7930 { Bad_Opcode },
7931 { Bad_Opcode },
3a2430e0
JB
7932 { "vpmacssdd", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
7933 { "vpmacssdqh", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
5dd85c99 7934 /* 90 */
592d1631
L
7935 { Bad_Opcode },
7936 { Bad_Opcode },
7937 { Bad_Opcode },
7938 { Bad_Opcode },
7939 { Bad_Opcode },
3a2430e0
JB
7940 { "vpmacsww", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
7941 { "vpmacswd", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
7942 { "vpmacsdql", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
5dd85c99 7943 /* 98 */
592d1631
L
7944 { Bad_Opcode },
7945 { Bad_Opcode },
7946 { Bad_Opcode },
7947 { Bad_Opcode },
7948 { Bad_Opcode },
7949 { Bad_Opcode },
3a2430e0
JB
7950 { "vpmacsdd", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
7951 { "vpmacsdqh", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
5dd85c99 7952 /* a0 */
592d1631
L
7953 { Bad_Opcode },
7954 { Bad_Opcode },
3a2430e0
JB
7955 { "vpcmov", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
7956 { "vpperm", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
592d1631
L
7957 { Bad_Opcode },
7958 { Bad_Opcode },
3a2430e0 7959 { "vpmadcsswd", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
592d1631 7960 { Bad_Opcode },
5dd85c99 7961 /* a8 */
592d1631
L
7962 { Bad_Opcode },
7963 { Bad_Opcode },
7964 { Bad_Opcode },
7965 { Bad_Opcode },
7966 { Bad_Opcode },
7967 { Bad_Opcode },
7968 { Bad_Opcode },
7969 { Bad_Opcode },
5dd85c99 7970 /* b0 */
592d1631
L
7971 { Bad_Opcode },
7972 { Bad_Opcode },
7973 { Bad_Opcode },
7974 { Bad_Opcode },
7975 { Bad_Opcode },
7976 { Bad_Opcode },
3a2430e0 7977 { "vpmadcswd", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
592d1631 7978 { Bad_Opcode },
5dd85c99 7979 /* b8 */
592d1631
L
7980 { Bad_Opcode },
7981 { Bad_Opcode },
7982 { Bad_Opcode },
7983 { Bad_Opcode },
7984 { Bad_Opcode },
7985 { Bad_Opcode },
7986 { Bad_Opcode },
7987 { Bad_Opcode },
5dd85c99 7988 /* c0 */
bf890a93
IT
7989 { "vprotb", { XM, Vex_2src_1, Ib }, 0 },
7990 { "vprotw", { XM, Vex_2src_1, Ib }, 0 },
7991 { "vprotd", { XM, Vex_2src_1, Ib }, 0 },
7992 { "vprotq", { XM, Vex_2src_1, Ib }, 0 },
592d1631
L
7993 { Bad_Opcode },
7994 { Bad_Opcode },
7995 { Bad_Opcode },
7996 { Bad_Opcode },
5dd85c99 7997 /* c8 */
592d1631
L
7998 { Bad_Opcode },
7999 { Bad_Opcode },
8000 { Bad_Opcode },
8001 { Bad_Opcode },
ff688e1f
L
8002 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_CC) },
8003 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_CD) },
8004 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_CE) },
8005 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_CF) },
5dd85c99 8006 /* d0 */
592d1631
L
8007 { Bad_Opcode },
8008 { Bad_Opcode },
8009 { Bad_Opcode },
8010 { Bad_Opcode },
8011 { Bad_Opcode },
8012 { Bad_Opcode },
8013 { Bad_Opcode },
8014 { Bad_Opcode },
5dd85c99 8015 /* d8 */
592d1631
L
8016 { Bad_Opcode },
8017 { Bad_Opcode },
8018 { Bad_Opcode },
8019 { Bad_Opcode },
8020 { Bad_Opcode },
8021 { Bad_Opcode },
8022 { Bad_Opcode },
8023 { Bad_Opcode },
5dd85c99 8024 /* e0 */
592d1631
L
8025 { Bad_Opcode },
8026 { Bad_Opcode },
8027 { Bad_Opcode },
8028 { Bad_Opcode },
8029 { Bad_Opcode },
8030 { Bad_Opcode },
8031 { Bad_Opcode },
8032 { Bad_Opcode },
5dd85c99 8033 /* e8 */
592d1631
L
8034 { Bad_Opcode },
8035 { Bad_Opcode },
8036 { Bad_Opcode },
8037 { Bad_Opcode },
ff688e1f
L
8038 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_EC) },
8039 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_ED) },
8040 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_EE) },
8041 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_EF) },
5dd85c99 8042 /* f0 */
592d1631
L
8043 { Bad_Opcode },
8044 { Bad_Opcode },
8045 { Bad_Opcode },
8046 { Bad_Opcode },
8047 { Bad_Opcode },
8048 { Bad_Opcode },
8049 { Bad_Opcode },
8050 { Bad_Opcode },
5dd85c99 8051 /* f8 */
592d1631
L
8052 { Bad_Opcode },
8053 { Bad_Opcode },
8054 { Bad_Opcode },
8055 { Bad_Opcode },
8056 { Bad_Opcode },
8057 { Bad_Opcode },
8058 { Bad_Opcode },
8059 { Bad_Opcode },
5dd85c99
SP
8060 },
8061 /* XOP_09 */
8062 {
8063 /* 00 */
592d1631 8064 { Bad_Opcode },
2a2a0f38
QN
8065 { REG_TABLE (REG_XOP_TBM_01) },
8066 { REG_TABLE (REG_XOP_TBM_02) },
592d1631
L
8067 { Bad_Opcode },
8068 { Bad_Opcode },
8069 { Bad_Opcode },
8070 { Bad_Opcode },
8071 { Bad_Opcode },
5dd85c99 8072 /* 08 */
592d1631
L
8073 { Bad_Opcode },
8074 { Bad_Opcode },
8075 { Bad_Opcode },
8076 { Bad_Opcode },
8077 { Bad_Opcode },
8078 { Bad_Opcode },
8079 { Bad_Opcode },
8080 { Bad_Opcode },
5dd85c99 8081 /* 10 */
592d1631
L
8082 { Bad_Opcode },
8083 { Bad_Opcode },
5dd85c99 8084 { REG_TABLE (REG_XOP_LWPCB) },
592d1631
L
8085 { Bad_Opcode },
8086 { Bad_Opcode },
8087 { Bad_Opcode },
8088 { Bad_Opcode },
8089 { Bad_Opcode },
5dd85c99 8090 /* 18 */
592d1631
L
8091 { Bad_Opcode },
8092 { Bad_Opcode },
8093 { Bad_Opcode },
8094 { Bad_Opcode },
8095 { Bad_Opcode },
8096 { Bad_Opcode },
8097 { Bad_Opcode },
8098 { Bad_Opcode },
5dd85c99 8099 /* 20 */
592d1631
L
8100 { Bad_Opcode },
8101 { Bad_Opcode },
8102 { Bad_Opcode },
8103 { Bad_Opcode },
8104 { Bad_Opcode },
8105 { Bad_Opcode },
8106 { Bad_Opcode },
8107 { Bad_Opcode },
5dd85c99 8108 /* 28 */
592d1631
L
8109 { Bad_Opcode },
8110 { Bad_Opcode },
8111 { Bad_Opcode },
8112 { Bad_Opcode },
8113 { Bad_Opcode },
8114 { Bad_Opcode },
8115 { Bad_Opcode },
8116 { Bad_Opcode },
5dd85c99 8117 /* 30 */
592d1631
L
8118 { Bad_Opcode },
8119 { Bad_Opcode },
8120 { Bad_Opcode },
8121 { Bad_Opcode },
8122 { Bad_Opcode },
8123 { Bad_Opcode },
8124 { Bad_Opcode },
8125 { Bad_Opcode },
5dd85c99 8126 /* 38 */
592d1631
L
8127 { Bad_Opcode },
8128 { Bad_Opcode },
8129 { Bad_Opcode },
8130 { Bad_Opcode },
8131 { Bad_Opcode },
8132 { Bad_Opcode },
8133 { Bad_Opcode },
8134 { Bad_Opcode },
5dd85c99 8135 /* 40 */
592d1631
L
8136 { Bad_Opcode },
8137 { Bad_Opcode },
8138 { Bad_Opcode },
8139 { Bad_Opcode },
8140 { Bad_Opcode },
8141 { Bad_Opcode },
8142 { Bad_Opcode },
8143 { Bad_Opcode },
5dd85c99 8144 /* 48 */
592d1631
L
8145 { Bad_Opcode },
8146 { Bad_Opcode },
8147 { Bad_Opcode },
8148 { Bad_Opcode },
8149 { Bad_Opcode },
8150 { Bad_Opcode },
8151 { Bad_Opcode },
8152 { Bad_Opcode },
5dd85c99 8153 /* 50 */
592d1631
L
8154 { Bad_Opcode },
8155 { Bad_Opcode },
8156 { Bad_Opcode },
8157 { Bad_Opcode },
8158 { Bad_Opcode },
8159 { Bad_Opcode },
8160 { Bad_Opcode },
8161 { Bad_Opcode },
5dd85c99 8162 /* 58 */
592d1631
L
8163 { Bad_Opcode },
8164 { Bad_Opcode },
8165 { Bad_Opcode },
8166 { Bad_Opcode },
8167 { Bad_Opcode },
8168 { Bad_Opcode },
8169 { Bad_Opcode },
8170 { Bad_Opcode },
5dd85c99 8171 /* 60 */
592d1631
L
8172 { Bad_Opcode },
8173 { Bad_Opcode },
8174 { Bad_Opcode },
8175 { Bad_Opcode },
8176 { Bad_Opcode },
8177 { Bad_Opcode },
8178 { Bad_Opcode },
8179 { Bad_Opcode },
5dd85c99 8180 /* 68 */
592d1631
L
8181 { Bad_Opcode },
8182 { Bad_Opcode },
8183 { Bad_Opcode },
8184 { Bad_Opcode },
8185 { Bad_Opcode },
8186 { Bad_Opcode },
8187 { Bad_Opcode },
8188 { Bad_Opcode },
5dd85c99 8189 /* 70 */
592d1631
L
8190 { Bad_Opcode },
8191 { Bad_Opcode },
8192 { Bad_Opcode },
8193 { Bad_Opcode },
8194 { Bad_Opcode },
8195 { Bad_Opcode },
8196 { Bad_Opcode },
8197 { Bad_Opcode },
5dd85c99 8198 /* 78 */
592d1631
L
8199 { Bad_Opcode },
8200 { Bad_Opcode },
8201 { Bad_Opcode },
8202 { Bad_Opcode },
8203 { Bad_Opcode },
8204 { Bad_Opcode },
8205 { Bad_Opcode },
8206 { Bad_Opcode },
5dd85c99 8207 /* 80 */
592a252b
L
8208 { VEX_LEN_TABLE (VEX_LEN_0FXOP_09_80) },
8209 { VEX_LEN_TABLE (VEX_LEN_0FXOP_09_81) },
bf890a93
IT
8210 { "vfrczss", { XM, EXd }, 0 },
8211 { "vfrczsd", { XM, EXq }, 0 },
592d1631
L
8212 { Bad_Opcode },
8213 { Bad_Opcode },
8214 { Bad_Opcode },
8215 { Bad_Opcode },
5dd85c99 8216 /* 88 */
592d1631
L
8217 { Bad_Opcode },
8218 { Bad_Opcode },
8219 { Bad_Opcode },
8220 { Bad_Opcode },
8221 { Bad_Opcode },
8222 { Bad_Opcode },
8223 { Bad_Opcode },
8224 { Bad_Opcode },
5dd85c99 8225 /* 90 */
bf890a93
IT
8226 { "vprotb", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8227 { "vprotw", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8228 { "vprotd", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8229 { "vprotq", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8230 { "vpshlb", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8231 { "vpshlw", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8232 { "vpshld", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8233 { "vpshlq", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
5dd85c99 8234 /* 98 */
bf890a93
IT
8235 { "vpshab", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8236 { "vpshaw", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8237 { "vpshad", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8238 { "vpshaq", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
592d1631
L
8239 { Bad_Opcode },
8240 { Bad_Opcode },
8241 { Bad_Opcode },
8242 { Bad_Opcode },
5dd85c99 8243 /* a0 */
592d1631
L
8244 { Bad_Opcode },
8245 { Bad_Opcode },
8246 { Bad_Opcode },
8247 { Bad_Opcode },
8248 { Bad_Opcode },
8249 { Bad_Opcode },
8250 { Bad_Opcode },
8251 { Bad_Opcode },
5dd85c99 8252 /* a8 */
592d1631
L
8253 { Bad_Opcode },
8254 { Bad_Opcode },
8255 { Bad_Opcode },
8256 { Bad_Opcode },
8257 { Bad_Opcode },
8258 { Bad_Opcode },
8259 { Bad_Opcode },
8260 { Bad_Opcode },
5dd85c99 8261 /* b0 */
592d1631
L
8262 { Bad_Opcode },
8263 { Bad_Opcode },
8264 { Bad_Opcode },
8265 { Bad_Opcode },
8266 { Bad_Opcode },
8267 { Bad_Opcode },
8268 { Bad_Opcode },
8269 { Bad_Opcode },
5dd85c99 8270 /* b8 */
592d1631
L
8271 { Bad_Opcode },
8272 { Bad_Opcode },
8273 { Bad_Opcode },
8274 { Bad_Opcode },
8275 { Bad_Opcode },
8276 { Bad_Opcode },
8277 { Bad_Opcode },
8278 { Bad_Opcode },
5dd85c99 8279 /* c0 */
592d1631 8280 { Bad_Opcode },
bf890a93
IT
8281 { "vphaddbw", { XM, EXxmm }, 0 },
8282 { "vphaddbd", { XM, EXxmm }, 0 },
8283 { "vphaddbq", { XM, EXxmm }, 0 },
592d1631
L
8284 { Bad_Opcode },
8285 { Bad_Opcode },
bf890a93
IT
8286 { "vphaddwd", { XM, EXxmm }, 0 },
8287 { "vphaddwq", { XM, EXxmm }, 0 },
5dd85c99 8288 /* c8 */
592d1631
L
8289 { Bad_Opcode },
8290 { Bad_Opcode },
8291 { Bad_Opcode },
bf890a93 8292 { "vphadddq", { XM, EXxmm }, 0 },
592d1631
L
8293 { Bad_Opcode },
8294 { Bad_Opcode },
8295 { Bad_Opcode },
8296 { Bad_Opcode },
5dd85c99 8297 /* d0 */
592d1631 8298 { Bad_Opcode },
bf890a93
IT
8299 { "vphaddubw", { XM, EXxmm }, 0 },
8300 { "vphaddubd", { XM, EXxmm }, 0 },
8301 { "vphaddubq", { XM, EXxmm }, 0 },
592d1631
L
8302 { Bad_Opcode },
8303 { Bad_Opcode },
bf890a93
IT
8304 { "vphadduwd", { XM, EXxmm }, 0 },
8305 { "vphadduwq", { XM, EXxmm }, 0 },
5dd85c99 8306 /* d8 */
592d1631
L
8307 { Bad_Opcode },
8308 { Bad_Opcode },
8309 { Bad_Opcode },
bf890a93 8310 { "vphaddudq", { XM, EXxmm }, 0 },
592d1631
L
8311 { Bad_Opcode },
8312 { Bad_Opcode },
8313 { Bad_Opcode },
8314 { Bad_Opcode },
5dd85c99 8315 /* e0 */
592d1631 8316 { Bad_Opcode },
bf890a93
IT
8317 { "vphsubbw", { XM, EXxmm }, 0 },
8318 { "vphsubwd", { XM, EXxmm }, 0 },
8319 { "vphsubdq", { XM, EXxmm }, 0 },
592d1631
L
8320 { Bad_Opcode },
8321 { Bad_Opcode },
8322 { Bad_Opcode },
8323 { Bad_Opcode },
4e7d34a6 8324 /* e8 */
592d1631
L
8325 { Bad_Opcode },
8326 { Bad_Opcode },
8327 { Bad_Opcode },
8328 { Bad_Opcode },
8329 { Bad_Opcode },
8330 { Bad_Opcode },
8331 { Bad_Opcode },
8332 { Bad_Opcode },
4e7d34a6 8333 /* f0 */
592d1631
L
8334 { Bad_Opcode },
8335 { Bad_Opcode },
8336 { Bad_Opcode },
8337 { Bad_Opcode },
8338 { Bad_Opcode },
8339 { Bad_Opcode },
8340 { Bad_Opcode },
8341 { Bad_Opcode },
4e7d34a6 8342 /* f8 */
592d1631
L
8343 { Bad_Opcode },
8344 { Bad_Opcode },
8345 { Bad_Opcode },
8346 { Bad_Opcode },
8347 { Bad_Opcode },
8348 { Bad_Opcode },
8349 { Bad_Opcode },
8350 { Bad_Opcode },
4e7d34a6 8351 },
f88c9eb0 8352 /* XOP_0A */
4e7d34a6
L
8353 {
8354 /* 00 */
592d1631
L
8355 { Bad_Opcode },
8356 { Bad_Opcode },
8357 { Bad_Opcode },
8358 { Bad_Opcode },
8359 { Bad_Opcode },
8360 { Bad_Opcode },
8361 { Bad_Opcode },
8362 { Bad_Opcode },
4e7d34a6 8363 /* 08 */
592d1631
L
8364 { Bad_Opcode },
8365 { Bad_Opcode },
8366 { Bad_Opcode },
8367 { Bad_Opcode },
8368 { Bad_Opcode },
8369 { Bad_Opcode },
8370 { Bad_Opcode },
8371 { Bad_Opcode },
4e7d34a6 8372 /* 10 */
bf890a93 8373 { "bextr", { Gv, Ev, Iq }, 0 },
592d1631 8374 { Bad_Opcode },
f88c9eb0 8375 { REG_TABLE (REG_XOP_LWP) },
592d1631
L
8376 { Bad_Opcode },
8377 { Bad_Opcode },
8378 { Bad_Opcode },
8379 { Bad_Opcode },
8380 { Bad_Opcode },
4e7d34a6 8381 /* 18 */
592d1631
L
8382 { Bad_Opcode },
8383 { Bad_Opcode },
8384 { Bad_Opcode },
8385 { Bad_Opcode },
8386 { Bad_Opcode },
8387 { Bad_Opcode },
8388 { Bad_Opcode },
8389 { Bad_Opcode },
4e7d34a6 8390 /* 20 */
592d1631
L
8391 { Bad_Opcode },
8392 { Bad_Opcode },
8393 { Bad_Opcode },
8394 { Bad_Opcode },
8395 { Bad_Opcode },
8396 { Bad_Opcode },
8397 { Bad_Opcode },
8398 { Bad_Opcode },
4e7d34a6 8399 /* 28 */
592d1631
L
8400 { Bad_Opcode },
8401 { Bad_Opcode },
8402 { Bad_Opcode },
8403 { Bad_Opcode },
8404 { Bad_Opcode },
8405 { Bad_Opcode },
8406 { Bad_Opcode },
8407 { Bad_Opcode },
4e7d34a6 8408 /* 30 */
592d1631
L
8409 { Bad_Opcode },
8410 { Bad_Opcode },
8411 { Bad_Opcode },
8412 { Bad_Opcode },
8413 { Bad_Opcode },
8414 { Bad_Opcode },
8415 { Bad_Opcode },
8416 { Bad_Opcode },
c0f3af97 8417 /* 38 */
592d1631
L
8418 { Bad_Opcode },
8419 { Bad_Opcode },
8420 { Bad_Opcode },
8421 { Bad_Opcode },
8422 { Bad_Opcode },
8423 { Bad_Opcode },
8424 { Bad_Opcode },
8425 { Bad_Opcode },
c0f3af97 8426 /* 40 */
592d1631
L
8427 { Bad_Opcode },
8428 { Bad_Opcode },
8429 { Bad_Opcode },
8430 { Bad_Opcode },
8431 { Bad_Opcode },
8432 { Bad_Opcode },
8433 { Bad_Opcode },
8434 { Bad_Opcode },
c1e679ec 8435 /* 48 */
592d1631
L
8436 { Bad_Opcode },
8437 { Bad_Opcode },
8438 { Bad_Opcode },
8439 { Bad_Opcode },
8440 { Bad_Opcode },
8441 { Bad_Opcode },
8442 { Bad_Opcode },
8443 { Bad_Opcode },
c1e679ec 8444 /* 50 */
592d1631
L
8445 { Bad_Opcode },
8446 { Bad_Opcode },
8447 { Bad_Opcode },
8448 { Bad_Opcode },
8449 { Bad_Opcode },
8450 { Bad_Opcode },
8451 { Bad_Opcode },
8452 { Bad_Opcode },
4e7d34a6 8453 /* 58 */
592d1631
L
8454 { Bad_Opcode },
8455 { Bad_Opcode },
8456 { Bad_Opcode },
8457 { Bad_Opcode },
8458 { Bad_Opcode },
8459 { Bad_Opcode },
8460 { Bad_Opcode },
8461 { Bad_Opcode },
4e7d34a6 8462 /* 60 */
592d1631
L
8463 { Bad_Opcode },
8464 { Bad_Opcode },
8465 { Bad_Opcode },
8466 { Bad_Opcode },
8467 { Bad_Opcode },
8468 { Bad_Opcode },
8469 { Bad_Opcode },
8470 { Bad_Opcode },
4e7d34a6 8471 /* 68 */
592d1631
L
8472 { Bad_Opcode },
8473 { Bad_Opcode },
8474 { Bad_Opcode },
8475 { Bad_Opcode },
8476 { Bad_Opcode },
8477 { Bad_Opcode },
8478 { Bad_Opcode },
8479 { Bad_Opcode },
4e7d34a6 8480 /* 70 */
592d1631
L
8481 { Bad_Opcode },
8482 { Bad_Opcode },
8483 { Bad_Opcode },
8484 { Bad_Opcode },
8485 { Bad_Opcode },
8486 { Bad_Opcode },
8487 { Bad_Opcode },
8488 { Bad_Opcode },
4e7d34a6 8489 /* 78 */
592d1631
L
8490 { Bad_Opcode },
8491 { Bad_Opcode },
8492 { Bad_Opcode },
8493 { Bad_Opcode },
8494 { Bad_Opcode },
8495 { Bad_Opcode },
8496 { Bad_Opcode },
8497 { Bad_Opcode },
4e7d34a6 8498 /* 80 */
592d1631
L
8499 { Bad_Opcode },
8500 { Bad_Opcode },
8501 { Bad_Opcode },
8502 { Bad_Opcode },
8503 { Bad_Opcode },
8504 { Bad_Opcode },
8505 { Bad_Opcode },
8506 { Bad_Opcode },
4e7d34a6 8507 /* 88 */
592d1631
L
8508 { Bad_Opcode },
8509 { Bad_Opcode },
8510 { Bad_Opcode },
8511 { Bad_Opcode },
8512 { Bad_Opcode },
8513 { Bad_Opcode },
8514 { Bad_Opcode },
8515 { Bad_Opcode },
4e7d34a6 8516 /* 90 */
592d1631
L
8517 { Bad_Opcode },
8518 { Bad_Opcode },
8519 { Bad_Opcode },
8520 { Bad_Opcode },
8521 { Bad_Opcode },
8522 { Bad_Opcode },
8523 { Bad_Opcode },
8524 { Bad_Opcode },
4e7d34a6 8525 /* 98 */
592d1631
L
8526 { Bad_Opcode },
8527 { Bad_Opcode },
8528 { Bad_Opcode },
8529 { Bad_Opcode },
8530 { Bad_Opcode },
8531 { Bad_Opcode },
8532 { Bad_Opcode },
8533 { Bad_Opcode },
4e7d34a6 8534 /* a0 */
592d1631
L
8535 { Bad_Opcode },
8536 { Bad_Opcode },
8537 { Bad_Opcode },
8538 { Bad_Opcode },
8539 { Bad_Opcode },
8540 { Bad_Opcode },
8541 { Bad_Opcode },
8542 { Bad_Opcode },
4e7d34a6 8543 /* a8 */
592d1631
L
8544 { Bad_Opcode },
8545 { Bad_Opcode },
8546 { Bad_Opcode },
8547 { Bad_Opcode },
8548 { Bad_Opcode },
8549 { Bad_Opcode },
8550 { Bad_Opcode },
8551 { Bad_Opcode },
d5d7db8e 8552 /* b0 */
592d1631
L
8553 { Bad_Opcode },
8554 { Bad_Opcode },
8555 { Bad_Opcode },
8556 { Bad_Opcode },
8557 { Bad_Opcode },
8558 { Bad_Opcode },
8559 { Bad_Opcode },
8560 { Bad_Opcode },
85f10a01 8561 /* b8 */
592d1631
L
8562 { Bad_Opcode },
8563 { Bad_Opcode },
8564 { Bad_Opcode },
8565 { Bad_Opcode },
8566 { Bad_Opcode },
8567 { Bad_Opcode },
8568 { Bad_Opcode },
8569 { Bad_Opcode },
85f10a01 8570 /* c0 */
592d1631
L
8571 { Bad_Opcode },
8572 { Bad_Opcode },
8573 { Bad_Opcode },
8574 { Bad_Opcode },
8575 { Bad_Opcode },
8576 { Bad_Opcode },
8577 { Bad_Opcode },
8578 { Bad_Opcode },
85f10a01 8579 /* c8 */
592d1631
L
8580 { Bad_Opcode },
8581 { Bad_Opcode },
8582 { Bad_Opcode },
8583 { Bad_Opcode },
8584 { Bad_Opcode },
8585 { Bad_Opcode },
8586 { Bad_Opcode },
8587 { Bad_Opcode },
85f10a01 8588 /* d0 */
592d1631
L
8589 { Bad_Opcode },
8590 { Bad_Opcode },
8591 { Bad_Opcode },
8592 { Bad_Opcode },
8593 { Bad_Opcode },
8594 { Bad_Opcode },
8595 { Bad_Opcode },
8596 { Bad_Opcode },
85f10a01 8597 /* d8 */
592d1631
L
8598 { Bad_Opcode },
8599 { Bad_Opcode },
8600 { Bad_Opcode },
8601 { Bad_Opcode },
8602 { Bad_Opcode },
8603 { Bad_Opcode },
8604 { Bad_Opcode },
8605 { Bad_Opcode },
85f10a01 8606 /* e0 */
592d1631
L
8607 { Bad_Opcode },
8608 { Bad_Opcode },
8609 { Bad_Opcode },
8610 { Bad_Opcode },
8611 { Bad_Opcode },
8612 { Bad_Opcode },
8613 { Bad_Opcode },
8614 { Bad_Opcode },
85f10a01 8615 /* e8 */
592d1631
L
8616 { Bad_Opcode },
8617 { Bad_Opcode },
8618 { Bad_Opcode },
8619 { Bad_Opcode },
8620 { Bad_Opcode },
8621 { Bad_Opcode },
8622 { Bad_Opcode },
8623 { Bad_Opcode },
85f10a01 8624 /* f0 */
592d1631
L
8625 { Bad_Opcode },
8626 { Bad_Opcode },
8627 { Bad_Opcode },
8628 { Bad_Opcode },
8629 { Bad_Opcode },
8630 { Bad_Opcode },
8631 { Bad_Opcode },
8632 { Bad_Opcode },
85f10a01 8633 /* f8 */
592d1631
L
8634 { Bad_Opcode },
8635 { Bad_Opcode },
8636 { Bad_Opcode },
8637 { Bad_Opcode },
8638 { Bad_Opcode },
8639 { Bad_Opcode },
8640 { Bad_Opcode },
8641 { Bad_Opcode },
85f10a01 8642 },
c0f3af97
L
8643};
8644
8645static const struct dis386 vex_table[][256] = {
8646 /* VEX_0F */
85f10a01
MM
8647 {
8648 /* 00 */
592d1631
L
8649 { Bad_Opcode },
8650 { Bad_Opcode },
8651 { Bad_Opcode },
8652 { Bad_Opcode },
8653 { Bad_Opcode },
8654 { Bad_Opcode },
8655 { Bad_Opcode },
8656 { Bad_Opcode },
85f10a01 8657 /* 08 */
592d1631
L
8658 { Bad_Opcode },
8659 { Bad_Opcode },
8660 { Bad_Opcode },
8661 { Bad_Opcode },
8662 { Bad_Opcode },
8663 { Bad_Opcode },
8664 { Bad_Opcode },
8665 { Bad_Opcode },
c0f3af97 8666 /* 10 */
592a252b
L
8667 { PREFIX_TABLE (PREFIX_VEX_0F10) },
8668 { PREFIX_TABLE (PREFIX_VEX_0F11) },
8669 { PREFIX_TABLE (PREFIX_VEX_0F12) },
8670 { MOD_TABLE (MOD_VEX_0F13) },
8671 { VEX_W_TABLE (VEX_W_0F14) },
8672 { VEX_W_TABLE (VEX_W_0F15) },
8673 { PREFIX_TABLE (PREFIX_VEX_0F16) },
8674 { MOD_TABLE (MOD_VEX_0F17) },
c0f3af97 8675 /* 18 */
592d1631
L
8676 { Bad_Opcode },
8677 { Bad_Opcode },
8678 { Bad_Opcode },
8679 { Bad_Opcode },
8680 { Bad_Opcode },
8681 { Bad_Opcode },
8682 { Bad_Opcode },
8683 { Bad_Opcode },
c0f3af97 8684 /* 20 */
592d1631
L
8685 { Bad_Opcode },
8686 { Bad_Opcode },
8687 { Bad_Opcode },
8688 { Bad_Opcode },
8689 { Bad_Opcode },
8690 { Bad_Opcode },
8691 { Bad_Opcode },
8692 { Bad_Opcode },
c0f3af97 8693 /* 28 */
592a252b
L
8694 { VEX_W_TABLE (VEX_W_0F28) },
8695 { VEX_W_TABLE (VEX_W_0F29) },
8696 { PREFIX_TABLE (PREFIX_VEX_0F2A) },
8697 { MOD_TABLE (MOD_VEX_0F2B) },
8698 { PREFIX_TABLE (PREFIX_VEX_0F2C) },
8699 { PREFIX_TABLE (PREFIX_VEX_0F2D) },
8700 { PREFIX_TABLE (PREFIX_VEX_0F2E) },
8701 { PREFIX_TABLE (PREFIX_VEX_0F2F) },
85f10a01 8702 /* 30 */
592d1631
L
8703 { Bad_Opcode },
8704 { Bad_Opcode },
8705 { Bad_Opcode },
8706 { Bad_Opcode },
8707 { Bad_Opcode },
8708 { Bad_Opcode },
8709 { Bad_Opcode },
8710 { Bad_Opcode },
4e7d34a6 8711 /* 38 */
592d1631
L
8712 { Bad_Opcode },
8713 { Bad_Opcode },
8714 { Bad_Opcode },
8715 { Bad_Opcode },
8716 { Bad_Opcode },
8717 { Bad_Opcode },
8718 { Bad_Opcode },
8719 { Bad_Opcode },
d5d7db8e 8720 /* 40 */
592d1631 8721 { Bad_Opcode },
43234a1e
L
8722 { PREFIX_TABLE (PREFIX_VEX_0F41) },
8723 { PREFIX_TABLE (PREFIX_VEX_0F42) },
592d1631 8724 { Bad_Opcode },
43234a1e
L
8725 { PREFIX_TABLE (PREFIX_VEX_0F44) },
8726 { PREFIX_TABLE (PREFIX_VEX_0F45) },
8727 { PREFIX_TABLE (PREFIX_VEX_0F46) },
8728 { PREFIX_TABLE (PREFIX_VEX_0F47) },
85f10a01 8729 /* 48 */
592d1631
L
8730 { Bad_Opcode },
8731 { Bad_Opcode },
1ba585e8 8732 { PREFIX_TABLE (PREFIX_VEX_0F4A) },
43234a1e 8733 { PREFIX_TABLE (PREFIX_VEX_0F4B) },
592d1631
L
8734 { Bad_Opcode },
8735 { Bad_Opcode },
8736 { Bad_Opcode },
8737 { Bad_Opcode },
d5d7db8e 8738 /* 50 */
592a252b
L
8739 { MOD_TABLE (MOD_VEX_0F50) },
8740 { PREFIX_TABLE (PREFIX_VEX_0F51) },
8741 { PREFIX_TABLE (PREFIX_VEX_0F52) },
8742 { PREFIX_TABLE (PREFIX_VEX_0F53) },
bf890a93
IT
8743 { "vandpX", { XM, Vex, EXx }, 0 },
8744 { "vandnpX", { XM, Vex, EXx }, 0 },
8745 { "vorpX", { XM, Vex, EXx }, 0 },
8746 { "vxorpX", { XM, Vex, EXx }, 0 },
c0f3af97 8747 /* 58 */
592a252b
L
8748 { PREFIX_TABLE (PREFIX_VEX_0F58) },
8749 { PREFIX_TABLE (PREFIX_VEX_0F59) },
8750 { PREFIX_TABLE (PREFIX_VEX_0F5A) },
8751 { PREFIX_TABLE (PREFIX_VEX_0F5B) },
8752 { PREFIX_TABLE (PREFIX_VEX_0F5C) },
8753 { PREFIX_TABLE (PREFIX_VEX_0F5D) },
8754 { PREFIX_TABLE (PREFIX_VEX_0F5E) },
8755 { PREFIX_TABLE (PREFIX_VEX_0F5F) },
c0f3af97 8756 /* 60 */
592a252b
L
8757 { PREFIX_TABLE (PREFIX_VEX_0F60) },
8758 { PREFIX_TABLE (PREFIX_VEX_0F61) },
8759 { PREFIX_TABLE (PREFIX_VEX_0F62) },
8760 { PREFIX_TABLE (PREFIX_VEX_0F63) },
8761 { PREFIX_TABLE (PREFIX_VEX_0F64) },
8762 { PREFIX_TABLE (PREFIX_VEX_0F65) },
8763 { PREFIX_TABLE (PREFIX_VEX_0F66) },
8764 { PREFIX_TABLE (PREFIX_VEX_0F67) },
c0f3af97 8765 /* 68 */
592a252b
L
8766 { PREFIX_TABLE (PREFIX_VEX_0F68) },
8767 { PREFIX_TABLE (PREFIX_VEX_0F69) },
8768 { PREFIX_TABLE (PREFIX_VEX_0F6A) },
8769 { PREFIX_TABLE (PREFIX_VEX_0F6B) },
8770 { PREFIX_TABLE (PREFIX_VEX_0F6C) },
8771 { PREFIX_TABLE (PREFIX_VEX_0F6D) },
8772 { PREFIX_TABLE (PREFIX_VEX_0F6E) },
8773 { PREFIX_TABLE (PREFIX_VEX_0F6F) },
c0f3af97 8774 /* 70 */
592a252b
L
8775 { PREFIX_TABLE (PREFIX_VEX_0F70) },
8776 { REG_TABLE (REG_VEX_0F71) },
8777 { REG_TABLE (REG_VEX_0F72) },
8778 { REG_TABLE (REG_VEX_0F73) },
8779 { PREFIX_TABLE (PREFIX_VEX_0F74) },
8780 { PREFIX_TABLE (PREFIX_VEX_0F75) },
8781 { PREFIX_TABLE (PREFIX_VEX_0F76) },
8782 { PREFIX_TABLE (PREFIX_VEX_0F77) },
c0f3af97 8783 /* 78 */
592d1631
L
8784 { Bad_Opcode },
8785 { Bad_Opcode },
8786 { Bad_Opcode },
8787 { Bad_Opcode },
592a252b
L
8788 { PREFIX_TABLE (PREFIX_VEX_0F7C) },
8789 { PREFIX_TABLE (PREFIX_VEX_0F7D) },
8790 { PREFIX_TABLE (PREFIX_VEX_0F7E) },
8791 { PREFIX_TABLE (PREFIX_VEX_0F7F) },
c0f3af97 8792 /* 80 */
592d1631
L
8793 { Bad_Opcode },
8794 { Bad_Opcode },
8795 { Bad_Opcode },
8796 { Bad_Opcode },
8797 { Bad_Opcode },
8798 { Bad_Opcode },
8799 { Bad_Opcode },
8800 { Bad_Opcode },
c0f3af97 8801 /* 88 */
592d1631
L
8802 { Bad_Opcode },
8803 { Bad_Opcode },
8804 { Bad_Opcode },
8805 { Bad_Opcode },
8806 { Bad_Opcode },
8807 { Bad_Opcode },
8808 { Bad_Opcode },
8809 { Bad_Opcode },
c0f3af97 8810 /* 90 */
43234a1e
L
8811 { PREFIX_TABLE (PREFIX_VEX_0F90) },
8812 { PREFIX_TABLE (PREFIX_VEX_0F91) },
8813 { PREFIX_TABLE (PREFIX_VEX_0F92) },
8814 { PREFIX_TABLE (PREFIX_VEX_0F93) },
592d1631
L
8815 { Bad_Opcode },
8816 { Bad_Opcode },
8817 { Bad_Opcode },
8818 { Bad_Opcode },
c0f3af97 8819 /* 98 */
43234a1e 8820 { PREFIX_TABLE (PREFIX_VEX_0F98) },
1ba585e8 8821 { PREFIX_TABLE (PREFIX_VEX_0F99) },
592d1631
L
8822 { Bad_Opcode },
8823 { Bad_Opcode },
8824 { Bad_Opcode },
8825 { Bad_Opcode },
8826 { Bad_Opcode },
8827 { Bad_Opcode },
c0f3af97 8828 /* a0 */
592d1631
L
8829 { Bad_Opcode },
8830 { Bad_Opcode },
8831 { Bad_Opcode },
8832 { Bad_Opcode },
8833 { Bad_Opcode },
8834 { Bad_Opcode },
8835 { Bad_Opcode },
8836 { Bad_Opcode },
c0f3af97 8837 /* a8 */
592d1631
L
8838 { Bad_Opcode },
8839 { Bad_Opcode },
8840 { Bad_Opcode },
8841 { Bad_Opcode },
8842 { Bad_Opcode },
8843 { Bad_Opcode },
592a252b 8844 { REG_TABLE (REG_VEX_0FAE) },
592d1631 8845 { Bad_Opcode },
c0f3af97 8846 /* b0 */
592d1631
L
8847 { Bad_Opcode },
8848 { Bad_Opcode },
8849 { Bad_Opcode },
8850 { Bad_Opcode },
8851 { Bad_Opcode },
8852 { Bad_Opcode },
8853 { Bad_Opcode },
8854 { Bad_Opcode },
c0f3af97 8855 /* b8 */
592d1631
L
8856 { Bad_Opcode },
8857 { Bad_Opcode },
8858 { Bad_Opcode },
8859 { Bad_Opcode },
8860 { Bad_Opcode },
8861 { Bad_Opcode },
8862 { Bad_Opcode },
8863 { Bad_Opcode },
c0f3af97 8864 /* c0 */
592d1631
L
8865 { Bad_Opcode },
8866 { Bad_Opcode },
592a252b 8867 { PREFIX_TABLE (PREFIX_VEX_0FC2) },
592d1631 8868 { Bad_Opcode },
592a252b
L
8869 { PREFIX_TABLE (PREFIX_VEX_0FC4) },
8870 { PREFIX_TABLE (PREFIX_VEX_0FC5) },
bf890a93 8871 { "vshufpX", { XM, Vex, EXx, Ib }, 0 },
592d1631 8872 { Bad_Opcode },
c0f3af97 8873 /* c8 */
592d1631
L
8874 { Bad_Opcode },
8875 { Bad_Opcode },
8876 { Bad_Opcode },
8877 { Bad_Opcode },
8878 { Bad_Opcode },
8879 { Bad_Opcode },
8880 { Bad_Opcode },
8881 { Bad_Opcode },
c0f3af97 8882 /* d0 */
592a252b
L
8883 { PREFIX_TABLE (PREFIX_VEX_0FD0) },
8884 { PREFIX_TABLE (PREFIX_VEX_0FD1) },
8885 { PREFIX_TABLE (PREFIX_VEX_0FD2) },
8886 { PREFIX_TABLE (PREFIX_VEX_0FD3) },
8887 { PREFIX_TABLE (PREFIX_VEX_0FD4) },
8888 { PREFIX_TABLE (PREFIX_VEX_0FD5) },
8889 { PREFIX_TABLE (PREFIX_VEX_0FD6) },
8890 { PREFIX_TABLE (PREFIX_VEX_0FD7) },
c0f3af97 8891 /* d8 */
592a252b
L
8892 { PREFIX_TABLE (PREFIX_VEX_0FD8) },
8893 { PREFIX_TABLE (PREFIX_VEX_0FD9) },
8894 { PREFIX_TABLE (PREFIX_VEX_0FDA) },
8895 { PREFIX_TABLE (PREFIX_VEX_0FDB) },
8896 { PREFIX_TABLE (PREFIX_VEX_0FDC) },
8897 { PREFIX_TABLE (PREFIX_VEX_0FDD) },
8898 { PREFIX_TABLE (PREFIX_VEX_0FDE) },
8899 { PREFIX_TABLE (PREFIX_VEX_0FDF) },
c0f3af97 8900 /* e0 */
592a252b
L
8901 { PREFIX_TABLE (PREFIX_VEX_0FE0) },
8902 { PREFIX_TABLE (PREFIX_VEX_0FE1) },
8903 { PREFIX_TABLE (PREFIX_VEX_0FE2) },
8904 { PREFIX_TABLE (PREFIX_VEX_0FE3) },
8905 { PREFIX_TABLE (PREFIX_VEX_0FE4) },
8906 { PREFIX_TABLE (PREFIX_VEX_0FE5) },
8907 { PREFIX_TABLE (PREFIX_VEX_0FE6) },
8908 { PREFIX_TABLE (PREFIX_VEX_0FE7) },
c0f3af97 8909 /* e8 */
592a252b
L
8910 { PREFIX_TABLE (PREFIX_VEX_0FE8) },
8911 { PREFIX_TABLE (PREFIX_VEX_0FE9) },
8912 { PREFIX_TABLE (PREFIX_VEX_0FEA) },
8913 { PREFIX_TABLE (PREFIX_VEX_0FEB) },
8914 { PREFIX_TABLE (PREFIX_VEX_0FEC) },
8915 { PREFIX_TABLE (PREFIX_VEX_0FED) },
8916 { PREFIX_TABLE (PREFIX_VEX_0FEE) },
8917 { PREFIX_TABLE (PREFIX_VEX_0FEF) },
c0f3af97 8918 /* f0 */
592a252b
L
8919 { PREFIX_TABLE (PREFIX_VEX_0FF0) },
8920 { PREFIX_TABLE (PREFIX_VEX_0FF1) },
8921 { PREFIX_TABLE (PREFIX_VEX_0FF2) },
8922 { PREFIX_TABLE (PREFIX_VEX_0FF3) },
8923 { PREFIX_TABLE (PREFIX_VEX_0FF4) },
8924 { PREFIX_TABLE (PREFIX_VEX_0FF5) },
8925 { PREFIX_TABLE (PREFIX_VEX_0FF6) },
8926 { PREFIX_TABLE (PREFIX_VEX_0FF7) },
c0f3af97 8927 /* f8 */
592a252b
L
8928 { PREFIX_TABLE (PREFIX_VEX_0FF8) },
8929 { PREFIX_TABLE (PREFIX_VEX_0FF9) },
8930 { PREFIX_TABLE (PREFIX_VEX_0FFA) },
8931 { PREFIX_TABLE (PREFIX_VEX_0FFB) },
8932 { PREFIX_TABLE (PREFIX_VEX_0FFC) },
8933 { PREFIX_TABLE (PREFIX_VEX_0FFD) },
8934 { PREFIX_TABLE (PREFIX_VEX_0FFE) },
592d1631 8935 { Bad_Opcode },
c0f3af97
L
8936 },
8937 /* VEX_0F38 */
8938 {
8939 /* 00 */
592a252b
L
8940 { PREFIX_TABLE (PREFIX_VEX_0F3800) },
8941 { PREFIX_TABLE (PREFIX_VEX_0F3801) },
8942 { PREFIX_TABLE (PREFIX_VEX_0F3802) },
8943 { PREFIX_TABLE (PREFIX_VEX_0F3803) },
8944 { PREFIX_TABLE (PREFIX_VEX_0F3804) },
8945 { PREFIX_TABLE (PREFIX_VEX_0F3805) },
8946 { PREFIX_TABLE (PREFIX_VEX_0F3806) },
8947 { PREFIX_TABLE (PREFIX_VEX_0F3807) },
c0f3af97 8948 /* 08 */
592a252b
L
8949 { PREFIX_TABLE (PREFIX_VEX_0F3808) },
8950 { PREFIX_TABLE (PREFIX_VEX_0F3809) },
8951 { PREFIX_TABLE (PREFIX_VEX_0F380A) },
8952 { PREFIX_TABLE (PREFIX_VEX_0F380B) },
8953 { PREFIX_TABLE (PREFIX_VEX_0F380C) },
8954 { PREFIX_TABLE (PREFIX_VEX_0F380D) },
8955 { PREFIX_TABLE (PREFIX_VEX_0F380E) },
8956 { PREFIX_TABLE (PREFIX_VEX_0F380F) },
c0f3af97 8957 /* 10 */
592d1631
L
8958 { Bad_Opcode },
8959 { Bad_Opcode },
8960 { Bad_Opcode },
592a252b 8961 { PREFIX_TABLE (PREFIX_VEX_0F3813) },
592d1631
L
8962 { Bad_Opcode },
8963 { Bad_Opcode },
6c30d220 8964 { PREFIX_TABLE (PREFIX_VEX_0F3816) },
592a252b 8965 { PREFIX_TABLE (PREFIX_VEX_0F3817) },
c0f3af97 8966 /* 18 */
592a252b
L
8967 { PREFIX_TABLE (PREFIX_VEX_0F3818) },
8968 { PREFIX_TABLE (PREFIX_VEX_0F3819) },
8969 { PREFIX_TABLE (PREFIX_VEX_0F381A) },
592d1631 8970 { Bad_Opcode },
592a252b
L
8971 { PREFIX_TABLE (PREFIX_VEX_0F381C) },
8972 { PREFIX_TABLE (PREFIX_VEX_0F381D) },
8973 { PREFIX_TABLE (PREFIX_VEX_0F381E) },
592d1631 8974 { Bad_Opcode },
c0f3af97 8975 /* 20 */
592a252b
L
8976 { PREFIX_TABLE (PREFIX_VEX_0F3820) },
8977 { PREFIX_TABLE (PREFIX_VEX_0F3821) },
8978 { PREFIX_TABLE (PREFIX_VEX_0F3822) },
8979 { PREFIX_TABLE (PREFIX_VEX_0F3823) },
8980 { PREFIX_TABLE (PREFIX_VEX_0F3824) },
8981 { PREFIX_TABLE (PREFIX_VEX_0F3825) },
592d1631
L
8982 { Bad_Opcode },
8983 { Bad_Opcode },
c0f3af97 8984 /* 28 */
592a252b
L
8985 { PREFIX_TABLE (PREFIX_VEX_0F3828) },
8986 { PREFIX_TABLE (PREFIX_VEX_0F3829) },
8987 { PREFIX_TABLE (PREFIX_VEX_0F382A) },
8988 { PREFIX_TABLE (PREFIX_VEX_0F382B) },
8989 { PREFIX_TABLE (PREFIX_VEX_0F382C) },
8990 { PREFIX_TABLE (PREFIX_VEX_0F382D) },
8991 { PREFIX_TABLE (PREFIX_VEX_0F382E) },
8992 { PREFIX_TABLE (PREFIX_VEX_0F382F) },
c0f3af97 8993 /* 30 */
592a252b
L
8994 { PREFIX_TABLE (PREFIX_VEX_0F3830) },
8995 { PREFIX_TABLE (PREFIX_VEX_0F3831) },
8996 { PREFIX_TABLE (PREFIX_VEX_0F3832) },
8997 { PREFIX_TABLE (PREFIX_VEX_0F3833) },
8998 { PREFIX_TABLE (PREFIX_VEX_0F3834) },
8999 { PREFIX_TABLE (PREFIX_VEX_0F3835) },
6c30d220 9000 { PREFIX_TABLE (PREFIX_VEX_0F3836) },
592a252b 9001 { PREFIX_TABLE (PREFIX_VEX_0F3837) },
c0f3af97 9002 /* 38 */
592a252b
L
9003 { PREFIX_TABLE (PREFIX_VEX_0F3838) },
9004 { PREFIX_TABLE (PREFIX_VEX_0F3839) },
9005 { PREFIX_TABLE (PREFIX_VEX_0F383A) },
9006 { PREFIX_TABLE (PREFIX_VEX_0F383B) },
9007 { PREFIX_TABLE (PREFIX_VEX_0F383C) },
9008 { PREFIX_TABLE (PREFIX_VEX_0F383D) },
9009 { PREFIX_TABLE (PREFIX_VEX_0F383E) },
9010 { PREFIX_TABLE (PREFIX_VEX_0F383F) },
c0f3af97 9011 /* 40 */
592a252b
L
9012 { PREFIX_TABLE (PREFIX_VEX_0F3840) },
9013 { PREFIX_TABLE (PREFIX_VEX_0F3841) },
592d1631
L
9014 { Bad_Opcode },
9015 { Bad_Opcode },
9016 { Bad_Opcode },
6c30d220
L
9017 { PREFIX_TABLE (PREFIX_VEX_0F3845) },
9018 { PREFIX_TABLE (PREFIX_VEX_0F3846) },
9019 { PREFIX_TABLE (PREFIX_VEX_0F3847) },
c0f3af97 9020 /* 48 */
592d1631
L
9021 { Bad_Opcode },
9022 { Bad_Opcode },
9023 { Bad_Opcode },
9024 { Bad_Opcode },
9025 { Bad_Opcode },
9026 { Bad_Opcode },
9027 { Bad_Opcode },
9028 { Bad_Opcode },
c0f3af97 9029 /* 50 */
592d1631
L
9030 { Bad_Opcode },
9031 { Bad_Opcode },
9032 { Bad_Opcode },
9033 { Bad_Opcode },
9034 { Bad_Opcode },
9035 { Bad_Opcode },
9036 { Bad_Opcode },
9037 { Bad_Opcode },
c0f3af97 9038 /* 58 */
6c30d220
L
9039 { PREFIX_TABLE (PREFIX_VEX_0F3858) },
9040 { PREFIX_TABLE (PREFIX_VEX_0F3859) },
9041 { PREFIX_TABLE (PREFIX_VEX_0F385A) },
592d1631
L
9042 { Bad_Opcode },
9043 { Bad_Opcode },
9044 { Bad_Opcode },
9045 { Bad_Opcode },
9046 { Bad_Opcode },
c0f3af97 9047 /* 60 */
592d1631
L
9048 { Bad_Opcode },
9049 { Bad_Opcode },
9050 { Bad_Opcode },
9051 { Bad_Opcode },
9052 { Bad_Opcode },
9053 { Bad_Opcode },
9054 { Bad_Opcode },
9055 { Bad_Opcode },
c0f3af97 9056 /* 68 */
592d1631
L
9057 { Bad_Opcode },
9058 { Bad_Opcode },
9059 { Bad_Opcode },
9060 { Bad_Opcode },
9061 { Bad_Opcode },
9062 { Bad_Opcode },
9063 { Bad_Opcode },
9064 { Bad_Opcode },
c0f3af97 9065 /* 70 */
592d1631
L
9066 { Bad_Opcode },
9067 { Bad_Opcode },
9068 { Bad_Opcode },
9069 { Bad_Opcode },
9070 { Bad_Opcode },
9071 { Bad_Opcode },
9072 { Bad_Opcode },
9073 { Bad_Opcode },
c0f3af97 9074 /* 78 */
6c30d220
L
9075 { PREFIX_TABLE (PREFIX_VEX_0F3878) },
9076 { PREFIX_TABLE (PREFIX_VEX_0F3879) },
592d1631
L
9077 { Bad_Opcode },
9078 { Bad_Opcode },
9079 { Bad_Opcode },
9080 { Bad_Opcode },
9081 { Bad_Opcode },
9082 { Bad_Opcode },
c0f3af97 9083 /* 80 */
592d1631
L
9084 { Bad_Opcode },
9085 { Bad_Opcode },
9086 { Bad_Opcode },
9087 { Bad_Opcode },
9088 { Bad_Opcode },
9089 { Bad_Opcode },
9090 { Bad_Opcode },
9091 { Bad_Opcode },
c0f3af97 9092 /* 88 */
592d1631
L
9093 { Bad_Opcode },
9094 { Bad_Opcode },
9095 { Bad_Opcode },
9096 { Bad_Opcode },
6c30d220 9097 { PREFIX_TABLE (PREFIX_VEX_0F388C) },
592d1631 9098 { Bad_Opcode },
6c30d220 9099 { PREFIX_TABLE (PREFIX_VEX_0F388E) },
592d1631 9100 { Bad_Opcode },
c0f3af97 9101 /* 90 */
6c30d220
L
9102 { PREFIX_TABLE (PREFIX_VEX_0F3890) },
9103 { PREFIX_TABLE (PREFIX_VEX_0F3891) },
9104 { PREFIX_TABLE (PREFIX_VEX_0F3892) },
9105 { PREFIX_TABLE (PREFIX_VEX_0F3893) },
592d1631
L
9106 { Bad_Opcode },
9107 { Bad_Opcode },
592a252b
L
9108 { PREFIX_TABLE (PREFIX_VEX_0F3896) },
9109 { PREFIX_TABLE (PREFIX_VEX_0F3897) },
c0f3af97 9110 /* 98 */
592a252b
L
9111 { PREFIX_TABLE (PREFIX_VEX_0F3898) },
9112 { PREFIX_TABLE (PREFIX_VEX_0F3899) },
9113 { PREFIX_TABLE (PREFIX_VEX_0F389A) },
9114 { PREFIX_TABLE (PREFIX_VEX_0F389B) },
9115 { PREFIX_TABLE (PREFIX_VEX_0F389C) },
9116 { PREFIX_TABLE (PREFIX_VEX_0F389D) },
9117 { PREFIX_TABLE (PREFIX_VEX_0F389E) },
9118 { PREFIX_TABLE (PREFIX_VEX_0F389F) },
c0f3af97 9119 /* a0 */
592d1631
L
9120 { Bad_Opcode },
9121 { Bad_Opcode },
9122 { Bad_Opcode },
9123 { Bad_Opcode },
9124 { Bad_Opcode },
9125 { Bad_Opcode },
592a252b
L
9126 { PREFIX_TABLE (PREFIX_VEX_0F38A6) },
9127 { PREFIX_TABLE (PREFIX_VEX_0F38A7) },
c0f3af97 9128 /* a8 */
592a252b
L
9129 { PREFIX_TABLE (PREFIX_VEX_0F38A8) },
9130 { PREFIX_TABLE (PREFIX_VEX_0F38A9) },
9131 { PREFIX_TABLE (PREFIX_VEX_0F38AA) },
9132 { PREFIX_TABLE (PREFIX_VEX_0F38AB) },
9133 { PREFIX_TABLE (PREFIX_VEX_0F38AC) },
9134 { PREFIX_TABLE (PREFIX_VEX_0F38AD) },
9135 { PREFIX_TABLE (PREFIX_VEX_0F38AE) },
9136 { PREFIX_TABLE (PREFIX_VEX_0F38AF) },
c0f3af97 9137 /* b0 */
592d1631
L
9138 { Bad_Opcode },
9139 { Bad_Opcode },
9140 { Bad_Opcode },
9141 { Bad_Opcode },
9142 { Bad_Opcode },
9143 { Bad_Opcode },
592a252b
L
9144 { PREFIX_TABLE (PREFIX_VEX_0F38B6) },
9145 { PREFIX_TABLE (PREFIX_VEX_0F38B7) },
c0f3af97 9146 /* b8 */
592a252b
L
9147 { PREFIX_TABLE (PREFIX_VEX_0F38B8) },
9148 { PREFIX_TABLE (PREFIX_VEX_0F38B9) },
9149 { PREFIX_TABLE (PREFIX_VEX_0F38BA) },
9150 { PREFIX_TABLE (PREFIX_VEX_0F38BB) },
9151 { PREFIX_TABLE (PREFIX_VEX_0F38BC) },
9152 { PREFIX_TABLE (PREFIX_VEX_0F38BD) },
9153 { PREFIX_TABLE (PREFIX_VEX_0F38BE) },
9154 { PREFIX_TABLE (PREFIX_VEX_0F38BF) },
c0f3af97 9155 /* c0 */
592d1631
L
9156 { Bad_Opcode },
9157 { Bad_Opcode },
9158 { Bad_Opcode },
9159 { Bad_Opcode },
9160 { Bad_Opcode },
9161 { Bad_Opcode },
9162 { Bad_Opcode },
9163 { Bad_Opcode },
c0f3af97 9164 /* c8 */
592d1631
L
9165 { Bad_Opcode },
9166 { Bad_Opcode },
9167 { Bad_Opcode },
9168 { Bad_Opcode },
9169 { Bad_Opcode },
9170 { Bad_Opcode },
9171 { Bad_Opcode },
48521003 9172 { PREFIX_TABLE (PREFIX_VEX_0F38CF) },
c0f3af97 9173 /* d0 */
592d1631
L
9174 { Bad_Opcode },
9175 { Bad_Opcode },
9176 { Bad_Opcode },
9177 { Bad_Opcode },
9178 { Bad_Opcode },
9179 { Bad_Opcode },
9180 { Bad_Opcode },
9181 { Bad_Opcode },
c0f3af97 9182 /* d8 */
592d1631
L
9183 { Bad_Opcode },
9184 { Bad_Opcode },
9185 { Bad_Opcode },
592a252b
L
9186 { PREFIX_TABLE (PREFIX_VEX_0F38DB) },
9187 { PREFIX_TABLE (PREFIX_VEX_0F38DC) },
9188 { PREFIX_TABLE (PREFIX_VEX_0F38DD) },
9189 { PREFIX_TABLE (PREFIX_VEX_0F38DE) },
9190 { PREFIX_TABLE (PREFIX_VEX_0F38DF) },
c0f3af97 9191 /* e0 */
592d1631
L
9192 { Bad_Opcode },
9193 { Bad_Opcode },
9194 { Bad_Opcode },
9195 { Bad_Opcode },
9196 { Bad_Opcode },
9197 { Bad_Opcode },
9198 { Bad_Opcode },
9199 { Bad_Opcode },
c0f3af97 9200 /* e8 */
592d1631
L
9201 { Bad_Opcode },
9202 { Bad_Opcode },
9203 { Bad_Opcode },
9204 { Bad_Opcode },
9205 { Bad_Opcode },
9206 { Bad_Opcode },
9207 { Bad_Opcode },
9208 { Bad_Opcode },
c0f3af97 9209 /* f0 */
592d1631
L
9210 { Bad_Opcode },
9211 { Bad_Opcode },
f12dc422
L
9212 { PREFIX_TABLE (PREFIX_VEX_0F38F2) },
9213 { REG_TABLE (REG_VEX_0F38F3) },
592d1631 9214 { Bad_Opcode },
6c30d220
L
9215 { PREFIX_TABLE (PREFIX_VEX_0F38F5) },
9216 { PREFIX_TABLE (PREFIX_VEX_0F38F6) },
f12dc422 9217 { PREFIX_TABLE (PREFIX_VEX_0F38F7) },
c0f3af97 9218 /* f8 */
592d1631
L
9219 { Bad_Opcode },
9220 { Bad_Opcode },
9221 { Bad_Opcode },
9222 { Bad_Opcode },
9223 { Bad_Opcode },
9224 { Bad_Opcode },
9225 { Bad_Opcode },
9226 { Bad_Opcode },
c0f3af97
L
9227 },
9228 /* VEX_0F3A */
9229 {
9230 /* 00 */
6c30d220
L
9231 { PREFIX_TABLE (PREFIX_VEX_0F3A00) },
9232 { PREFIX_TABLE (PREFIX_VEX_0F3A01) },
9233 { PREFIX_TABLE (PREFIX_VEX_0F3A02) },
592d1631 9234 { Bad_Opcode },
592a252b
L
9235 { PREFIX_TABLE (PREFIX_VEX_0F3A04) },
9236 { PREFIX_TABLE (PREFIX_VEX_0F3A05) },
9237 { PREFIX_TABLE (PREFIX_VEX_0F3A06) },
592d1631 9238 { Bad_Opcode },
c0f3af97 9239 /* 08 */
592a252b
L
9240 { PREFIX_TABLE (PREFIX_VEX_0F3A08) },
9241 { PREFIX_TABLE (PREFIX_VEX_0F3A09) },
9242 { PREFIX_TABLE (PREFIX_VEX_0F3A0A) },
9243 { PREFIX_TABLE (PREFIX_VEX_0F3A0B) },
9244 { PREFIX_TABLE (PREFIX_VEX_0F3A0C) },
9245 { PREFIX_TABLE (PREFIX_VEX_0F3A0D) },
9246 { PREFIX_TABLE (PREFIX_VEX_0F3A0E) },
9247 { PREFIX_TABLE (PREFIX_VEX_0F3A0F) },
c0f3af97 9248 /* 10 */
592d1631
L
9249 { Bad_Opcode },
9250 { Bad_Opcode },
9251 { Bad_Opcode },
9252 { Bad_Opcode },
592a252b
L
9253 { PREFIX_TABLE (PREFIX_VEX_0F3A14) },
9254 { PREFIX_TABLE (PREFIX_VEX_0F3A15) },
9255 { PREFIX_TABLE (PREFIX_VEX_0F3A16) },
9256 { PREFIX_TABLE (PREFIX_VEX_0F3A17) },
c0f3af97 9257 /* 18 */
592a252b
L
9258 { PREFIX_TABLE (PREFIX_VEX_0F3A18) },
9259 { PREFIX_TABLE (PREFIX_VEX_0F3A19) },
592d1631
L
9260 { Bad_Opcode },
9261 { Bad_Opcode },
9262 { Bad_Opcode },
592a252b 9263 { PREFIX_TABLE (PREFIX_VEX_0F3A1D) },
592d1631
L
9264 { Bad_Opcode },
9265 { Bad_Opcode },
c0f3af97 9266 /* 20 */
592a252b
L
9267 { PREFIX_TABLE (PREFIX_VEX_0F3A20) },
9268 { PREFIX_TABLE (PREFIX_VEX_0F3A21) },
9269 { PREFIX_TABLE (PREFIX_VEX_0F3A22) },
592d1631
L
9270 { Bad_Opcode },
9271 { Bad_Opcode },
9272 { Bad_Opcode },
9273 { Bad_Opcode },
9274 { Bad_Opcode },
c0f3af97 9275 /* 28 */
592d1631
L
9276 { Bad_Opcode },
9277 { Bad_Opcode },
9278 { Bad_Opcode },
9279 { Bad_Opcode },
9280 { Bad_Opcode },
9281 { Bad_Opcode },
9282 { Bad_Opcode },
9283 { Bad_Opcode },
c0f3af97 9284 /* 30 */
43234a1e 9285 { PREFIX_TABLE (PREFIX_VEX_0F3A30) },
1ba585e8 9286 { PREFIX_TABLE (PREFIX_VEX_0F3A31) },
43234a1e 9287 { PREFIX_TABLE (PREFIX_VEX_0F3A32) },
1ba585e8 9288 { PREFIX_TABLE (PREFIX_VEX_0F3A33) },
592d1631
L
9289 { Bad_Opcode },
9290 { Bad_Opcode },
9291 { Bad_Opcode },
9292 { Bad_Opcode },
c0f3af97 9293 /* 38 */
6c30d220
L
9294 { PREFIX_TABLE (PREFIX_VEX_0F3A38) },
9295 { PREFIX_TABLE (PREFIX_VEX_0F3A39) },
592d1631
L
9296 { Bad_Opcode },
9297 { Bad_Opcode },
9298 { Bad_Opcode },
9299 { Bad_Opcode },
9300 { Bad_Opcode },
9301 { Bad_Opcode },
c0f3af97 9302 /* 40 */
592a252b
L
9303 { PREFIX_TABLE (PREFIX_VEX_0F3A40) },
9304 { PREFIX_TABLE (PREFIX_VEX_0F3A41) },
9305 { PREFIX_TABLE (PREFIX_VEX_0F3A42) },
592d1631 9306 { Bad_Opcode },
592a252b 9307 { PREFIX_TABLE (PREFIX_VEX_0F3A44) },
592d1631 9308 { Bad_Opcode },
6c30d220 9309 { PREFIX_TABLE (PREFIX_VEX_0F3A46) },
592d1631 9310 { Bad_Opcode },
c0f3af97 9311 /* 48 */
592a252b
L
9312 { PREFIX_TABLE (PREFIX_VEX_0F3A48) },
9313 { PREFIX_TABLE (PREFIX_VEX_0F3A49) },
9314 { PREFIX_TABLE (PREFIX_VEX_0F3A4A) },
9315 { PREFIX_TABLE (PREFIX_VEX_0F3A4B) },
9316 { PREFIX_TABLE (PREFIX_VEX_0F3A4C) },
592d1631
L
9317 { Bad_Opcode },
9318 { Bad_Opcode },
9319 { Bad_Opcode },
c0f3af97 9320 /* 50 */
592d1631
L
9321 { Bad_Opcode },
9322 { Bad_Opcode },
9323 { Bad_Opcode },
9324 { Bad_Opcode },
9325 { Bad_Opcode },
9326 { Bad_Opcode },
9327 { Bad_Opcode },
9328 { Bad_Opcode },
c0f3af97 9329 /* 58 */
592d1631
L
9330 { Bad_Opcode },
9331 { Bad_Opcode },
9332 { Bad_Opcode },
9333 { Bad_Opcode },
592a252b
L
9334 { PREFIX_TABLE (PREFIX_VEX_0F3A5C) },
9335 { PREFIX_TABLE (PREFIX_VEX_0F3A5D) },
9336 { PREFIX_TABLE (PREFIX_VEX_0F3A5E) },
9337 { PREFIX_TABLE (PREFIX_VEX_0F3A5F) },
c0f3af97 9338 /* 60 */
592a252b
L
9339 { PREFIX_TABLE (PREFIX_VEX_0F3A60) },
9340 { PREFIX_TABLE (PREFIX_VEX_0F3A61) },
9341 { PREFIX_TABLE (PREFIX_VEX_0F3A62) },
9342 { PREFIX_TABLE (PREFIX_VEX_0F3A63) },
592d1631
L
9343 { Bad_Opcode },
9344 { Bad_Opcode },
9345 { Bad_Opcode },
9346 { Bad_Opcode },
c0f3af97 9347 /* 68 */
592a252b
L
9348 { PREFIX_TABLE (PREFIX_VEX_0F3A68) },
9349 { PREFIX_TABLE (PREFIX_VEX_0F3A69) },
9350 { PREFIX_TABLE (PREFIX_VEX_0F3A6A) },
9351 { PREFIX_TABLE (PREFIX_VEX_0F3A6B) },
9352 { PREFIX_TABLE (PREFIX_VEX_0F3A6C) },
9353 { PREFIX_TABLE (PREFIX_VEX_0F3A6D) },
9354 { PREFIX_TABLE (PREFIX_VEX_0F3A6E) },
9355 { PREFIX_TABLE (PREFIX_VEX_0F3A6F) },
c0f3af97 9356 /* 70 */
592d1631
L
9357 { Bad_Opcode },
9358 { Bad_Opcode },
9359 { Bad_Opcode },
9360 { Bad_Opcode },
9361 { Bad_Opcode },
9362 { Bad_Opcode },
9363 { Bad_Opcode },
9364 { Bad_Opcode },
c0f3af97 9365 /* 78 */
592a252b
L
9366 { PREFIX_TABLE (PREFIX_VEX_0F3A78) },
9367 { PREFIX_TABLE (PREFIX_VEX_0F3A79) },
9368 { PREFIX_TABLE (PREFIX_VEX_0F3A7A) },
9369 { PREFIX_TABLE (PREFIX_VEX_0F3A7B) },
9370 { PREFIX_TABLE (PREFIX_VEX_0F3A7C) },
9371 { PREFIX_TABLE (PREFIX_VEX_0F3A7D) },
9372 { PREFIX_TABLE (PREFIX_VEX_0F3A7E) },
9373 { PREFIX_TABLE (PREFIX_VEX_0F3A7F) },
c0f3af97 9374 /* 80 */
592d1631
L
9375 { Bad_Opcode },
9376 { Bad_Opcode },
9377 { Bad_Opcode },
9378 { Bad_Opcode },
9379 { Bad_Opcode },
9380 { Bad_Opcode },
9381 { Bad_Opcode },
9382 { Bad_Opcode },
c0f3af97 9383 /* 88 */
592d1631
L
9384 { Bad_Opcode },
9385 { Bad_Opcode },
9386 { Bad_Opcode },
9387 { Bad_Opcode },
9388 { Bad_Opcode },
9389 { Bad_Opcode },
9390 { Bad_Opcode },
9391 { Bad_Opcode },
c0f3af97 9392 /* 90 */
592d1631
L
9393 { Bad_Opcode },
9394 { Bad_Opcode },
9395 { Bad_Opcode },
9396 { Bad_Opcode },
9397 { Bad_Opcode },
9398 { Bad_Opcode },
9399 { Bad_Opcode },
9400 { Bad_Opcode },
c0f3af97 9401 /* 98 */
592d1631
L
9402 { Bad_Opcode },
9403 { Bad_Opcode },
9404 { Bad_Opcode },
9405 { Bad_Opcode },
9406 { Bad_Opcode },
9407 { Bad_Opcode },
9408 { Bad_Opcode },
9409 { Bad_Opcode },
c0f3af97 9410 /* a0 */
592d1631
L
9411 { Bad_Opcode },
9412 { Bad_Opcode },
9413 { Bad_Opcode },
9414 { Bad_Opcode },
9415 { Bad_Opcode },
9416 { Bad_Opcode },
9417 { Bad_Opcode },
9418 { Bad_Opcode },
c0f3af97 9419 /* a8 */
592d1631
L
9420 { Bad_Opcode },
9421 { Bad_Opcode },
9422 { Bad_Opcode },
9423 { Bad_Opcode },
9424 { Bad_Opcode },
9425 { Bad_Opcode },
9426 { Bad_Opcode },
9427 { Bad_Opcode },
c0f3af97 9428 /* b0 */
592d1631
L
9429 { Bad_Opcode },
9430 { Bad_Opcode },
9431 { Bad_Opcode },
9432 { Bad_Opcode },
9433 { Bad_Opcode },
9434 { Bad_Opcode },
9435 { Bad_Opcode },
9436 { Bad_Opcode },
c0f3af97 9437 /* b8 */
592d1631
L
9438 { Bad_Opcode },
9439 { Bad_Opcode },
9440 { Bad_Opcode },
9441 { Bad_Opcode },
9442 { Bad_Opcode },
9443 { Bad_Opcode },
9444 { Bad_Opcode },
9445 { Bad_Opcode },
c0f3af97 9446 /* c0 */
592d1631
L
9447 { Bad_Opcode },
9448 { Bad_Opcode },
9449 { Bad_Opcode },
9450 { Bad_Opcode },
9451 { Bad_Opcode },
9452 { Bad_Opcode },
9453 { Bad_Opcode },
9454 { Bad_Opcode },
c0f3af97 9455 /* c8 */
592d1631
L
9456 { Bad_Opcode },
9457 { Bad_Opcode },
9458 { Bad_Opcode },
9459 { Bad_Opcode },
9460 { Bad_Opcode },
9461 { Bad_Opcode },
48521003
IT
9462 { PREFIX_TABLE(PREFIX_VEX_0F3ACE) },
9463 { PREFIX_TABLE(PREFIX_VEX_0F3ACF) },
c0f3af97 9464 /* d0 */
592d1631
L
9465 { Bad_Opcode },
9466 { Bad_Opcode },
9467 { Bad_Opcode },
9468 { Bad_Opcode },
9469 { Bad_Opcode },
9470 { Bad_Opcode },
9471 { Bad_Opcode },
9472 { Bad_Opcode },
c0f3af97 9473 /* d8 */
592d1631
L
9474 { Bad_Opcode },
9475 { Bad_Opcode },
9476 { Bad_Opcode },
9477 { Bad_Opcode },
9478 { Bad_Opcode },
9479 { Bad_Opcode },
9480 { Bad_Opcode },
592a252b 9481 { PREFIX_TABLE (PREFIX_VEX_0F3ADF) },
c0f3af97 9482 /* e0 */
592d1631
L
9483 { Bad_Opcode },
9484 { Bad_Opcode },
9485 { Bad_Opcode },
9486 { Bad_Opcode },
9487 { Bad_Opcode },
9488 { Bad_Opcode },
9489 { Bad_Opcode },
9490 { Bad_Opcode },
c0f3af97 9491 /* e8 */
592d1631
L
9492 { Bad_Opcode },
9493 { Bad_Opcode },
9494 { Bad_Opcode },
9495 { Bad_Opcode },
9496 { Bad_Opcode },
9497 { Bad_Opcode },
9498 { Bad_Opcode },
9499 { Bad_Opcode },
c0f3af97 9500 /* f0 */
6c30d220 9501 { PREFIX_TABLE (PREFIX_VEX_0F3AF0) },
592d1631
L
9502 { Bad_Opcode },
9503 { Bad_Opcode },
9504 { Bad_Opcode },
9505 { Bad_Opcode },
9506 { Bad_Opcode },
9507 { Bad_Opcode },
9508 { Bad_Opcode },
c0f3af97 9509 /* f8 */
592d1631
L
9510 { Bad_Opcode },
9511 { Bad_Opcode },
9512 { Bad_Opcode },
9513 { Bad_Opcode },
9514 { Bad_Opcode },
9515 { Bad_Opcode },
9516 { Bad_Opcode },
9517 { Bad_Opcode },
c0f3af97
L
9518 },
9519};
9520
43234a1e
L
9521#define NEED_OPCODE_TABLE
9522#include "i386-dis-evex.h"
9523#undef NEED_OPCODE_TABLE
c0f3af97 9524static const struct dis386 vex_len_table[][2] = {
592a252b 9525 /* VEX_LEN_0F10_P_1 */
c0f3af97 9526 {
592a252b
L
9527 { VEX_W_TABLE (VEX_W_0F10_P_1) },
9528 { VEX_W_TABLE (VEX_W_0F10_P_1) },
c0f3af97
L
9529 },
9530
592a252b 9531 /* VEX_LEN_0F10_P_3 */
c0f3af97 9532 {
592a252b
L
9533 { VEX_W_TABLE (VEX_W_0F10_P_3) },
9534 { VEX_W_TABLE (VEX_W_0F10_P_3) },
c0f3af97
L
9535 },
9536
592a252b 9537 /* VEX_LEN_0F11_P_1 */
c0f3af97 9538 {
592a252b
L
9539 { VEX_W_TABLE (VEX_W_0F11_P_1) },
9540 { VEX_W_TABLE (VEX_W_0F11_P_1) },
c0f3af97
L
9541 },
9542
592a252b 9543 /* VEX_LEN_0F11_P_3 */
c0f3af97 9544 {
592a252b
L
9545 { VEX_W_TABLE (VEX_W_0F11_P_3) },
9546 { VEX_W_TABLE (VEX_W_0F11_P_3) },
c0f3af97
L
9547 },
9548
592a252b 9549 /* VEX_LEN_0F12_P_0_M_0 */
c0f3af97 9550 {
592a252b 9551 { VEX_W_TABLE (VEX_W_0F12_P_0_M_0) },
c0f3af97
L
9552 },
9553
592a252b 9554 /* VEX_LEN_0F12_P_0_M_1 */
c0f3af97 9555 {
592a252b 9556 { VEX_W_TABLE (VEX_W_0F12_P_0_M_1) },
c0f3af97
L
9557 },
9558
592a252b 9559 /* VEX_LEN_0F12_P_2 */
c0f3af97 9560 {
592a252b 9561 { VEX_W_TABLE (VEX_W_0F12_P_2) },
c0f3af97
L
9562 },
9563
592a252b 9564 /* VEX_LEN_0F13_M_0 */
c0f3af97 9565 {
592a252b 9566 { VEX_W_TABLE (VEX_W_0F13_M_0) },
c0f3af97
L
9567 },
9568
592a252b 9569 /* VEX_LEN_0F16_P_0_M_0 */
c0f3af97 9570 {
592a252b 9571 { VEX_W_TABLE (VEX_W_0F16_P_0_M_0) },
c0f3af97
L
9572 },
9573
592a252b 9574 /* VEX_LEN_0F16_P_0_M_1 */
c0f3af97 9575 {
592a252b 9576 { VEX_W_TABLE (VEX_W_0F16_P_0_M_1) },
c0f3af97
L
9577 },
9578
592a252b 9579 /* VEX_LEN_0F16_P_2 */
c0f3af97 9580 {
592a252b 9581 { VEX_W_TABLE (VEX_W_0F16_P_2) },
c0f3af97
L
9582 },
9583
592a252b 9584 /* VEX_LEN_0F17_M_0 */
c0f3af97 9585 {
592a252b 9586 { VEX_W_TABLE (VEX_W_0F17_M_0) },
c0f3af97
L
9587 },
9588
592a252b 9589 /* VEX_LEN_0F2A_P_1 */
c0f3af97 9590 {
bf890a93
IT
9591 { "vcvtsi2ss%LQ", { XMScalar, VexScalar, Ev }, 0 },
9592 { "vcvtsi2ss%LQ", { XMScalar, VexScalar, Ev }, 0 },
c0f3af97
L
9593 },
9594
592a252b 9595 /* VEX_LEN_0F2A_P_3 */
c0f3af97 9596 {
bf890a93
IT
9597 { "vcvtsi2sd%LQ", { XMScalar, VexScalar, Ev }, 0 },
9598 { "vcvtsi2sd%LQ", { XMScalar, VexScalar, Ev }, 0 },
c0f3af97
L
9599 },
9600
592a252b 9601 /* VEX_LEN_0F2C_P_1 */
c0f3af97 9602 {
9646c87b
JB
9603 { "vcvttss2si", { Gv, EXdScalar }, 0 },
9604 { "vcvttss2si", { Gv, EXdScalar }, 0 },
c0f3af97
L
9605 },
9606
592a252b 9607 /* VEX_LEN_0F2C_P_3 */
c0f3af97 9608 {
9646c87b
JB
9609 { "vcvttsd2si", { Gv, EXqScalar }, 0 },
9610 { "vcvttsd2si", { Gv, EXqScalar }, 0 },
c0f3af97
L
9611 },
9612
592a252b 9613 /* VEX_LEN_0F2D_P_1 */
c0f3af97 9614 {
9646c87b
JB
9615 { "vcvtss2si", { Gv, EXdScalar }, 0 },
9616 { "vcvtss2si", { Gv, EXdScalar }, 0 },
c0f3af97
L
9617 },
9618
592a252b 9619 /* VEX_LEN_0F2D_P_3 */
c0f3af97 9620 {
9646c87b
JB
9621 { "vcvtsd2si", { Gv, EXqScalar }, 0 },
9622 { "vcvtsd2si", { Gv, EXqScalar }, 0 },
c0f3af97
L
9623 },
9624
592a252b 9625 /* VEX_LEN_0F2E_P_0 */
c0f3af97 9626 {
592a252b
L
9627 { VEX_W_TABLE (VEX_W_0F2E_P_0) },
9628 { VEX_W_TABLE (VEX_W_0F2E_P_0) },
c0f3af97
L
9629 },
9630
592a252b 9631 /* VEX_LEN_0F2E_P_2 */
c0f3af97 9632 {
592a252b
L
9633 { VEX_W_TABLE (VEX_W_0F2E_P_2) },
9634 { VEX_W_TABLE (VEX_W_0F2E_P_2) },
c0f3af97
L
9635 },
9636
592a252b 9637 /* VEX_LEN_0F2F_P_0 */
c0f3af97 9638 {
592a252b
L
9639 { VEX_W_TABLE (VEX_W_0F2F_P_0) },
9640 { VEX_W_TABLE (VEX_W_0F2F_P_0) },
c0f3af97
L
9641 },
9642
592a252b 9643 /* VEX_LEN_0F2F_P_2 */
c0f3af97 9644 {
592a252b
L
9645 { VEX_W_TABLE (VEX_W_0F2F_P_2) },
9646 { VEX_W_TABLE (VEX_W_0F2F_P_2) },
c0f3af97
L
9647 },
9648
43234a1e
L
9649 /* VEX_LEN_0F41_P_0 */
9650 {
9651 { Bad_Opcode },
9652 { VEX_W_TABLE (VEX_W_0F41_P_0_LEN_1) },
9653 },
1ba585e8
IT
9654 /* VEX_LEN_0F41_P_2 */
9655 {
9656 { Bad_Opcode },
9657 { VEX_W_TABLE (VEX_W_0F41_P_2_LEN_1) },
9658 },
43234a1e
L
9659 /* VEX_LEN_0F42_P_0 */
9660 {
9661 { Bad_Opcode },
9662 { VEX_W_TABLE (VEX_W_0F42_P_0_LEN_1) },
9663 },
1ba585e8
IT
9664 /* VEX_LEN_0F42_P_2 */
9665 {
9666 { Bad_Opcode },
9667 { VEX_W_TABLE (VEX_W_0F42_P_2_LEN_1) },
9668 },
43234a1e
L
9669 /* VEX_LEN_0F44_P_0 */
9670 {
9671 { VEX_W_TABLE (VEX_W_0F44_P_0_LEN_0) },
9672 },
1ba585e8
IT
9673 /* VEX_LEN_0F44_P_2 */
9674 {
9675 { VEX_W_TABLE (VEX_W_0F44_P_2_LEN_0) },
9676 },
43234a1e
L
9677 /* VEX_LEN_0F45_P_0 */
9678 {
9679 { Bad_Opcode },
9680 { VEX_W_TABLE (VEX_W_0F45_P_0_LEN_1) },
9681 },
1ba585e8
IT
9682 /* VEX_LEN_0F45_P_2 */
9683 {
9684 { Bad_Opcode },
9685 { VEX_W_TABLE (VEX_W_0F45_P_2_LEN_1) },
9686 },
43234a1e
L
9687 /* VEX_LEN_0F46_P_0 */
9688 {
9689 { Bad_Opcode },
9690 { VEX_W_TABLE (VEX_W_0F46_P_0_LEN_1) },
9691 },
1ba585e8
IT
9692 /* VEX_LEN_0F46_P_2 */
9693 {
9694 { Bad_Opcode },
9695 { VEX_W_TABLE (VEX_W_0F46_P_2_LEN_1) },
9696 },
43234a1e
L
9697 /* VEX_LEN_0F47_P_0 */
9698 {
9699 { Bad_Opcode },
9700 { VEX_W_TABLE (VEX_W_0F47_P_0_LEN_1) },
9701 },
1ba585e8
IT
9702 /* VEX_LEN_0F47_P_2 */
9703 {
9704 { Bad_Opcode },
9705 { VEX_W_TABLE (VEX_W_0F47_P_2_LEN_1) },
9706 },
9707 /* VEX_LEN_0F4A_P_0 */
9708 {
9709 { Bad_Opcode },
9710 { VEX_W_TABLE (VEX_W_0F4A_P_0_LEN_1) },
9711 },
9712 /* VEX_LEN_0F4A_P_2 */
9713 {
9714 { Bad_Opcode },
9715 { VEX_W_TABLE (VEX_W_0F4A_P_2_LEN_1) },
9716 },
9717 /* VEX_LEN_0F4B_P_0 */
9718 {
9719 { Bad_Opcode },
9720 { VEX_W_TABLE (VEX_W_0F4B_P_0_LEN_1) },
9721 },
43234a1e
L
9722 /* VEX_LEN_0F4B_P_2 */
9723 {
9724 { Bad_Opcode },
9725 { VEX_W_TABLE (VEX_W_0F4B_P_2_LEN_1) },
9726 },
9727
592a252b 9728 /* VEX_LEN_0F51_P_1 */
c0f3af97 9729 {
592a252b
L
9730 { VEX_W_TABLE (VEX_W_0F51_P_1) },
9731 { VEX_W_TABLE (VEX_W_0F51_P_1) },
c0f3af97
L
9732 },
9733
592a252b 9734 /* VEX_LEN_0F51_P_3 */
c0f3af97 9735 {
592a252b
L
9736 { VEX_W_TABLE (VEX_W_0F51_P_3) },
9737 { VEX_W_TABLE (VEX_W_0F51_P_3) },
c0f3af97
L
9738 },
9739
592a252b 9740 /* VEX_LEN_0F52_P_1 */
c0f3af97 9741 {
592a252b
L
9742 { VEX_W_TABLE (VEX_W_0F52_P_1) },
9743 { VEX_W_TABLE (VEX_W_0F52_P_1) },
c0f3af97
L
9744 },
9745
592a252b 9746 /* VEX_LEN_0F53_P_1 */
c0f3af97 9747 {
592a252b
L
9748 { VEX_W_TABLE (VEX_W_0F53_P_1) },
9749 { VEX_W_TABLE (VEX_W_0F53_P_1) },
c0f3af97
L
9750 },
9751
592a252b 9752 /* VEX_LEN_0F58_P_1 */
c0f3af97 9753 {
592a252b
L
9754 { VEX_W_TABLE (VEX_W_0F58_P_1) },
9755 { VEX_W_TABLE (VEX_W_0F58_P_1) },
c0f3af97
L
9756 },
9757
592a252b 9758 /* VEX_LEN_0F58_P_3 */
c0f3af97 9759 {
592a252b
L
9760 { VEX_W_TABLE (VEX_W_0F58_P_3) },
9761 { VEX_W_TABLE (VEX_W_0F58_P_3) },
c0f3af97
L
9762 },
9763
592a252b 9764 /* VEX_LEN_0F59_P_1 */
c0f3af97 9765 {
592a252b
L
9766 { VEX_W_TABLE (VEX_W_0F59_P_1) },
9767 { VEX_W_TABLE (VEX_W_0F59_P_1) },
c0f3af97
L
9768 },
9769
592a252b 9770 /* VEX_LEN_0F59_P_3 */
c0f3af97 9771 {
592a252b
L
9772 { VEX_W_TABLE (VEX_W_0F59_P_3) },
9773 { VEX_W_TABLE (VEX_W_0F59_P_3) },
c0f3af97
L
9774 },
9775
592a252b 9776 /* VEX_LEN_0F5A_P_1 */
c0f3af97 9777 {
592a252b
L
9778 { VEX_W_TABLE (VEX_W_0F5A_P_1) },
9779 { VEX_W_TABLE (VEX_W_0F5A_P_1) },
c0f3af97
L
9780 },
9781
592a252b 9782 /* VEX_LEN_0F5A_P_3 */
c0f3af97 9783 {
592a252b
L
9784 { VEX_W_TABLE (VEX_W_0F5A_P_3) },
9785 { VEX_W_TABLE (VEX_W_0F5A_P_3) },
c0f3af97
L
9786 },
9787
592a252b 9788 /* VEX_LEN_0F5C_P_1 */
c0f3af97 9789 {
592a252b
L
9790 { VEX_W_TABLE (VEX_W_0F5C_P_1) },
9791 { VEX_W_TABLE (VEX_W_0F5C_P_1) },
c0f3af97
L
9792 },
9793
592a252b 9794 /* VEX_LEN_0F5C_P_3 */
c0f3af97 9795 {
592a252b
L
9796 { VEX_W_TABLE (VEX_W_0F5C_P_3) },
9797 { VEX_W_TABLE (VEX_W_0F5C_P_3) },
c0f3af97
L
9798 },
9799
592a252b 9800 /* VEX_LEN_0F5D_P_1 */
c0f3af97 9801 {
592a252b
L
9802 { VEX_W_TABLE (VEX_W_0F5D_P_1) },
9803 { VEX_W_TABLE (VEX_W_0F5D_P_1) },
c0f3af97
L
9804 },
9805
592a252b 9806 /* VEX_LEN_0F5D_P_3 */
c0f3af97 9807 {
592a252b
L
9808 { VEX_W_TABLE (VEX_W_0F5D_P_3) },
9809 { VEX_W_TABLE (VEX_W_0F5D_P_3) },
c0f3af97
L
9810 },
9811
592a252b 9812 /* VEX_LEN_0F5E_P_1 */
c0f3af97 9813 {
592a252b
L
9814 { VEX_W_TABLE (VEX_W_0F5E_P_1) },
9815 { VEX_W_TABLE (VEX_W_0F5E_P_1) },
c0f3af97
L
9816 },
9817
592a252b 9818 /* VEX_LEN_0F5E_P_3 */
c0f3af97 9819 {
592a252b
L
9820 { VEX_W_TABLE (VEX_W_0F5E_P_3) },
9821 { VEX_W_TABLE (VEX_W_0F5E_P_3) },
c0f3af97
L
9822 },
9823
592a252b 9824 /* VEX_LEN_0F5F_P_1 */
c0f3af97 9825 {
592a252b
L
9826 { VEX_W_TABLE (VEX_W_0F5F_P_1) },
9827 { VEX_W_TABLE (VEX_W_0F5F_P_1) },
c0f3af97
L
9828 },
9829
592a252b 9830 /* VEX_LEN_0F5F_P_3 */
c0f3af97 9831 {
592a252b
L
9832 { VEX_W_TABLE (VEX_W_0F5F_P_3) },
9833 { VEX_W_TABLE (VEX_W_0F5F_P_3) },
c0f3af97
L
9834 },
9835
592a252b 9836 /* VEX_LEN_0F6E_P_2 */
c0f3af97 9837 {
bf890a93
IT
9838 { "vmovK", { XMScalar, Edq }, 0 },
9839 { "vmovK", { XMScalar, Edq }, 0 },
c0f3af97
L
9840 },
9841
592a252b 9842 /* VEX_LEN_0F7E_P_1 */
c0f3af97 9843 {
592a252b
L
9844 { VEX_W_TABLE (VEX_W_0F7E_P_1) },
9845 { VEX_W_TABLE (VEX_W_0F7E_P_1) },
c0f3af97
L
9846 },
9847
592a252b 9848 /* VEX_LEN_0F7E_P_2 */
c0f3af97 9849 {
bf890a93
IT
9850 { "vmovK", { Edq, XMScalar }, 0 },
9851 { "vmovK", { Edq, XMScalar }, 0 },
c0f3af97
L
9852 },
9853
43234a1e
L
9854 /* VEX_LEN_0F90_P_0 */
9855 {
9856 { VEX_W_TABLE (VEX_W_0F90_P_0_LEN_0) },
9857 },
9858
1ba585e8
IT
9859 /* VEX_LEN_0F90_P_2 */
9860 {
9861 { VEX_W_TABLE (VEX_W_0F90_P_2_LEN_0) },
9862 },
9863
43234a1e
L
9864 /* VEX_LEN_0F91_P_0 */
9865 {
9866 { VEX_W_TABLE (VEX_W_0F91_P_0_LEN_0) },
9867 },
9868
1ba585e8
IT
9869 /* VEX_LEN_0F91_P_2 */
9870 {
9871 { VEX_W_TABLE (VEX_W_0F91_P_2_LEN_0) },
9872 },
9873
43234a1e
L
9874 /* VEX_LEN_0F92_P_0 */
9875 {
9876 { VEX_W_TABLE (VEX_W_0F92_P_0_LEN_0) },
9877 },
9878
90a915bf
IT
9879 /* VEX_LEN_0F92_P_2 */
9880 {
9881 { VEX_W_TABLE (VEX_W_0F92_P_2_LEN_0) },
9882 },
9883
1ba585e8
IT
9884 /* VEX_LEN_0F92_P_3 */
9885 {
9886 { VEX_W_TABLE (VEX_W_0F92_P_3_LEN_0) },
9887 },
9888
43234a1e
L
9889 /* VEX_LEN_0F93_P_0 */
9890 {
9891 { VEX_W_TABLE (VEX_W_0F93_P_0_LEN_0) },
9892 },
9893
90a915bf
IT
9894 /* VEX_LEN_0F93_P_2 */
9895 {
9896 { VEX_W_TABLE (VEX_W_0F93_P_2_LEN_0) },
9897 },
9898
1ba585e8
IT
9899 /* VEX_LEN_0F93_P_3 */
9900 {
9901 { VEX_W_TABLE (VEX_W_0F93_P_3_LEN_0) },
9902 },
9903
43234a1e
L
9904 /* VEX_LEN_0F98_P_0 */
9905 {
9906 { VEX_W_TABLE (VEX_W_0F98_P_0_LEN_0) },
9907 },
9908
1ba585e8
IT
9909 /* VEX_LEN_0F98_P_2 */
9910 {
9911 { VEX_W_TABLE (VEX_W_0F98_P_2_LEN_0) },
9912 },
9913
9914 /* VEX_LEN_0F99_P_0 */
9915 {
9916 { VEX_W_TABLE (VEX_W_0F99_P_0_LEN_0) },
9917 },
9918
9919 /* VEX_LEN_0F99_P_2 */
9920 {
9921 { VEX_W_TABLE (VEX_W_0F99_P_2_LEN_0) },
9922 },
9923
6c30d220 9924 /* VEX_LEN_0FAE_R_2_M_0 */
c0f3af97 9925 {
6c30d220 9926 { VEX_W_TABLE (VEX_W_0FAE_R_2_M_0) },
c0f3af97
L
9927 },
9928
6c30d220 9929 /* VEX_LEN_0FAE_R_3_M_0 */
c0f3af97 9930 {
6c30d220 9931 { VEX_W_TABLE (VEX_W_0FAE_R_3_M_0) },
c0f3af97
L
9932 },
9933
6c30d220 9934 /* VEX_LEN_0FC2_P_1 */
c0f3af97 9935 {
6c30d220
L
9936 { VEX_W_TABLE (VEX_W_0FC2_P_1) },
9937 { VEX_W_TABLE (VEX_W_0FC2_P_1) },
c0f3af97
L
9938 },
9939
6c30d220 9940 /* VEX_LEN_0FC2_P_3 */
c0f3af97 9941 {
6c30d220
L
9942 { VEX_W_TABLE (VEX_W_0FC2_P_3) },
9943 { VEX_W_TABLE (VEX_W_0FC2_P_3) },
c0f3af97
L
9944 },
9945
6c30d220 9946 /* VEX_LEN_0FC4_P_2 */
c0f3af97 9947 {
6c30d220 9948 { VEX_W_TABLE (VEX_W_0FC4_P_2) },
c0f3af97
L
9949 },
9950
6c30d220 9951 /* VEX_LEN_0FC5_P_2 */
c0f3af97 9952 {
6c30d220 9953 { VEX_W_TABLE (VEX_W_0FC5_P_2) },
c0f3af97
L
9954 },
9955
6c30d220 9956 /* VEX_LEN_0FD6_P_2 */
c0f3af97 9957 {
6c30d220
L
9958 { VEX_W_TABLE (VEX_W_0FD6_P_2) },
9959 { VEX_W_TABLE (VEX_W_0FD6_P_2) },
c0f3af97
L
9960 },
9961
6c30d220 9962 /* VEX_LEN_0FF7_P_2 */
c0f3af97 9963 {
6c30d220 9964 { VEX_W_TABLE (VEX_W_0FF7_P_2) },
c0f3af97
L
9965 },
9966
6c30d220 9967 /* VEX_LEN_0F3816_P_2 */
c0f3af97 9968 {
6c30d220
L
9969 { Bad_Opcode },
9970 { VEX_W_TABLE (VEX_W_0F3816_P_2) },
c0f3af97
L
9971 },
9972
6c30d220 9973 /* VEX_LEN_0F3819_P_2 */
c0f3af97 9974 {
6c30d220
L
9975 { Bad_Opcode },
9976 { VEX_W_TABLE (VEX_W_0F3819_P_2) },
c0f3af97
L
9977 },
9978
6c30d220 9979 /* VEX_LEN_0F381A_P_2_M_0 */
c0f3af97 9980 {
6c30d220
L
9981 { Bad_Opcode },
9982 { VEX_W_TABLE (VEX_W_0F381A_P_2_M_0) },
c0f3af97
L
9983 },
9984
6c30d220 9985 /* VEX_LEN_0F3836_P_2 */
c0f3af97 9986 {
6c30d220
L
9987 { Bad_Opcode },
9988 { VEX_W_TABLE (VEX_W_0F3836_P_2) },
c0f3af97
L
9989 },
9990
592a252b 9991 /* VEX_LEN_0F3841_P_2 */
c0f3af97 9992 {
592a252b 9993 { VEX_W_TABLE (VEX_W_0F3841_P_2) },
c0f3af97
L
9994 },
9995
6c30d220
L
9996 /* VEX_LEN_0F385A_P_2_M_0 */
9997 {
9998 { Bad_Opcode },
9999 { VEX_W_TABLE (VEX_W_0F385A_P_2_M_0) },
10000 },
10001
592a252b 10002 /* VEX_LEN_0F38DB_P_2 */
a5ff0eb2 10003 {
592a252b 10004 { VEX_W_TABLE (VEX_W_0F38DB_P_2) },
a5ff0eb2
L
10005 },
10006
f12dc422
L
10007 /* VEX_LEN_0F38F2_P_0 */
10008 {
bf890a93 10009 { "andnS", { Gdq, VexGdq, Edq }, 0 },
f12dc422
L
10010 },
10011
10012 /* VEX_LEN_0F38F3_R_1_P_0 */
10013 {
bf890a93 10014 { "blsrS", { VexGdq, Edq }, 0 },
f12dc422
L
10015 },
10016
10017 /* VEX_LEN_0F38F3_R_2_P_0 */
10018 {
bf890a93 10019 { "blsmskS", { VexGdq, Edq }, 0 },
f12dc422
L
10020 },
10021
10022 /* VEX_LEN_0F38F3_R_3_P_0 */
10023 {
bf890a93 10024 { "blsiS", { VexGdq, Edq }, 0 },
f12dc422
L
10025 },
10026
6c30d220
L
10027 /* VEX_LEN_0F38F5_P_0 */
10028 {
bf890a93 10029 { "bzhiS", { Gdq, Edq, VexGdq }, 0 },
6c30d220
L
10030 },
10031
10032 /* VEX_LEN_0F38F5_P_1 */
10033 {
bf890a93 10034 { "pextS", { Gdq, VexGdq, Edq }, 0 },
6c30d220
L
10035 },
10036
10037 /* VEX_LEN_0F38F5_P_3 */
10038 {
bf890a93 10039 { "pdepS", { Gdq, VexGdq, Edq }, 0 },
6c30d220
L
10040 },
10041
10042 /* VEX_LEN_0F38F6_P_3 */
10043 {
bf890a93 10044 { "mulxS", { Gdq, VexGdq, Edq }, 0 },
6c30d220
L
10045 },
10046
f12dc422
L
10047 /* VEX_LEN_0F38F7_P_0 */
10048 {
bf890a93 10049 { "bextrS", { Gdq, Edq, VexGdq }, 0 },
f12dc422
L
10050 },
10051
6c30d220
L
10052 /* VEX_LEN_0F38F7_P_1 */
10053 {
bf890a93 10054 { "sarxS", { Gdq, Edq, VexGdq }, 0 },
6c30d220
L
10055 },
10056
10057 /* VEX_LEN_0F38F7_P_2 */
10058 {
bf890a93 10059 { "shlxS", { Gdq, Edq, VexGdq }, 0 },
6c30d220
L
10060 },
10061
10062 /* VEX_LEN_0F38F7_P_3 */
10063 {
bf890a93 10064 { "shrxS", { Gdq, Edq, VexGdq }, 0 },
6c30d220
L
10065 },
10066
10067 /* VEX_LEN_0F3A00_P_2 */
10068 {
10069 { Bad_Opcode },
10070 { VEX_W_TABLE (VEX_W_0F3A00_P_2) },
10071 },
10072
10073 /* VEX_LEN_0F3A01_P_2 */
10074 {
10075 { Bad_Opcode },
10076 { VEX_W_TABLE (VEX_W_0F3A01_P_2) },
10077 },
10078
592a252b 10079 /* VEX_LEN_0F3A06_P_2 */
c0f3af97 10080 {
592d1631 10081 { Bad_Opcode },
592a252b 10082 { VEX_W_TABLE (VEX_W_0F3A06_P_2) },
c0f3af97
L
10083 },
10084
592a252b 10085 /* VEX_LEN_0F3A0A_P_2 */
c0f3af97 10086 {
592a252b
L
10087 { VEX_W_TABLE (VEX_W_0F3A0A_P_2) },
10088 { VEX_W_TABLE (VEX_W_0F3A0A_P_2) },
c0f3af97
L
10089 },
10090
592a252b 10091 /* VEX_LEN_0F3A0B_P_2 */
c0f3af97 10092 {
592a252b
L
10093 { VEX_W_TABLE (VEX_W_0F3A0B_P_2) },
10094 { VEX_W_TABLE (VEX_W_0F3A0B_P_2) },
c0f3af97
L
10095 },
10096
592a252b 10097 /* VEX_LEN_0F3A14_P_2 */
c0f3af97 10098 {
592a252b 10099 { VEX_W_TABLE (VEX_W_0F3A14_P_2) },
c0f3af97
L
10100 },
10101
592a252b 10102 /* VEX_LEN_0F3A15_P_2 */
c0f3af97 10103 {
592a252b 10104 { VEX_W_TABLE (VEX_W_0F3A15_P_2) },
c0f3af97
L
10105 },
10106
592a252b 10107 /* VEX_LEN_0F3A16_P_2 */
c0f3af97 10108 {
bf890a93 10109 { "vpextrK", { Edq, XM, Ib }, 0 },
c0f3af97
L
10110 },
10111
592a252b 10112 /* VEX_LEN_0F3A17_P_2 */
c0f3af97 10113 {
bf890a93 10114 { "vextractps", { Edqd, XM, Ib }, 0 },
c0f3af97
L
10115 },
10116
592a252b 10117 /* VEX_LEN_0F3A18_P_2 */
c0f3af97 10118 {
592d1631 10119 { Bad_Opcode },
592a252b 10120 { VEX_W_TABLE (VEX_W_0F3A18_P_2) },
c0f3af97
L
10121 },
10122
592a252b 10123 /* VEX_LEN_0F3A19_P_2 */
c0f3af97 10124 {
592d1631 10125 { Bad_Opcode },
592a252b 10126 { VEX_W_TABLE (VEX_W_0F3A19_P_2) },
c0f3af97
L
10127 },
10128
592a252b 10129 /* VEX_LEN_0F3A20_P_2 */
c0f3af97 10130 {
592a252b 10131 { VEX_W_TABLE (VEX_W_0F3A20_P_2) },
c0f3af97
L
10132 },
10133
592a252b 10134 /* VEX_LEN_0F3A21_P_2 */
c0f3af97 10135 {
592a252b 10136 { VEX_W_TABLE (VEX_W_0F3A21_P_2) },
c0f3af97
L
10137 },
10138
592a252b 10139 /* VEX_LEN_0F3A22_P_2 */
c0f3af97 10140 {
bf890a93 10141 { "vpinsrK", { XM, Vex128, Edq, Ib }, 0 },
c0f3af97
L
10142 },
10143
43234a1e
L
10144 /* VEX_LEN_0F3A30_P_2 */
10145 {
10146 { VEX_W_TABLE (VEX_W_0F3A30_P_2_LEN_0) },
10147 },
10148
1ba585e8
IT
10149 /* VEX_LEN_0F3A31_P_2 */
10150 {
10151 { VEX_W_TABLE (VEX_W_0F3A31_P_2_LEN_0) },
10152 },
10153
43234a1e
L
10154 /* VEX_LEN_0F3A32_P_2 */
10155 {
10156 { VEX_W_TABLE (VEX_W_0F3A32_P_2_LEN_0) },
10157 },
10158
1ba585e8
IT
10159 /* VEX_LEN_0F3A33_P_2 */
10160 {
10161 { VEX_W_TABLE (VEX_W_0F3A33_P_2_LEN_0) },
10162 },
10163
6c30d220 10164 /* VEX_LEN_0F3A38_P_2 */
c0f3af97 10165 {
6c30d220
L
10166 { Bad_Opcode },
10167 { VEX_W_TABLE (VEX_W_0F3A38_P_2) },
c0f3af97
L
10168 },
10169
6c30d220 10170 /* VEX_LEN_0F3A39_P_2 */
c0f3af97 10171 {
6c30d220
L
10172 { Bad_Opcode },
10173 { VEX_W_TABLE (VEX_W_0F3A39_P_2) },
10174 },
10175
10176 /* VEX_LEN_0F3A41_P_2 */
10177 {
10178 { VEX_W_TABLE (VEX_W_0F3A41_P_2) },
c0f3af97
L
10179 },
10180
6c30d220 10181 /* VEX_LEN_0F3A46_P_2 */
c0f3af97 10182 {
6c30d220
L
10183 { Bad_Opcode },
10184 { VEX_W_TABLE (VEX_W_0F3A46_P_2) },
c0f3af97
L
10185 },
10186
592a252b 10187 /* VEX_LEN_0F3A60_P_2 */
c0f3af97 10188 {
15c7c1d8 10189 { "vpcmpestrm", { XM, { PCMPESTR_Fixup, x_mode }, Ib }, 0 },
c0f3af97
L
10190 },
10191
592a252b 10192 /* VEX_LEN_0F3A61_P_2 */
c0f3af97 10193 {
15c7c1d8 10194 { "vpcmpestri", { XM, { PCMPESTR_Fixup, x_mode }, Ib }, 0 },
c0f3af97
L
10195 },
10196
592a252b 10197 /* VEX_LEN_0F3A62_P_2 */
c0f3af97 10198 {
592a252b 10199 { VEX_W_TABLE (VEX_W_0F3A62_P_2) },
c0f3af97
L
10200 },
10201
592a252b 10202 /* VEX_LEN_0F3A63_P_2 */
c0f3af97 10203 {
592a252b 10204 { VEX_W_TABLE (VEX_W_0F3A63_P_2) },
c0f3af97
L
10205 },
10206
592a252b 10207 /* VEX_LEN_0F3A6A_P_2 */
922d8de8 10208 {
3a2430e0 10209 { "vfmaddss", { XMVexW, Vex128, EXdVexW, EXdVexW }, 0 },
922d8de8
DR
10210 },
10211
592a252b 10212 /* VEX_LEN_0F3A6B_P_2 */
922d8de8 10213 {
3a2430e0 10214 { "vfmaddsd", { XMVexW, Vex128, EXqVexW, EXqVexW }, 0 },
922d8de8
DR
10215 },
10216
592a252b 10217 /* VEX_LEN_0F3A6E_P_2 */
922d8de8 10218 {
3a2430e0 10219 { "vfmsubss", { XMVexW, Vex128, EXdVexW, EXdVexW }, 0 },
922d8de8
DR
10220 },
10221
592a252b 10222 /* VEX_LEN_0F3A6F_P_2 */
922d8de8 10223 {
3a2430e0 10224 { "vfmsubsd", { XMVexW, Vex128, EXqVexW, EXqVexW }, 0 },
922d8de8
DR
10225 },
10226
592a252b 10227 /* VEX_LEN_0F3A7A_P_2 */
922d8de8 10228 {
3a2430e0 10229 { "vfnmaddss", { XMVexW, Vex128, EXdVexW, EXdVexW }, 0 },
922d8de8
DR
10230 },
10231
592a252b 10232 /* VEX_LEN_0F3A7B_P_2 */
922d8de8 10233 {
3a2430e0 10234 { "vfnmaddsd", { XMVexW, Vex128, EXqVexW, EXqVexW }, 0 },
922d8de8
DR
10235 },
10236
592a252b 10237 /* VEX_LEN_0F3A7E_P_2 */
922d8de8 10238 {
3a2430e0 10239 { "vfnmsubss", { XMVexW, Vex128, EXdVexW, EXdVexW }, 0 },
922d8de8
DR
10240 },
10241
592a252b 10242 /* VEX_LEN_0F3A7F_P_2 */
922d8de8 10243 {
3a2430e0 10244 { "vfnmsubsd", { XMVexW, Vex128, EXqVexW, EXqVexW }, 0 },
922d8de8
DR
10245 },
10246
592a252b 10247 /* VEX_LEN_0F3ADF_P_2 */
a5ff0eb2 10248 {
592a252b 10249 { VEX_W_TABLE (VEX_W_0F3ADF_P_2) },
a5ff0eb2 10250 },
4c807e72 10251
6c30d220
L
10252 /* VEX_LEN_0F3AF0_P_3 */
10253 {
bf890a93 10254 { "rorxS", { Gdq, Edq, Ib }, 0 },
6c30d220
L
10255 },
10256
ff688e1f
L
10257 /* VEX_LEN_0FXOP_08_CC */
10258 {
be92cb14 10259 { "vpcomb", { XM, Vex128, EXx, VPCOM }, 0 },
ff688e1f
L
10260 },
10261
10262 /* VEX_LEN_0FXOP_08_CD */
10263 {
be92cb14 10264 { "vpcomw", { XM, Vex128, EXx, VPCOM }, 0 },
ff688e1f
L
10265 },
10266
10267 /* VEX_LEN_0FXOP_08_CE */
10268 {
be92cb14 10269 { "vpcomd", { XM, Vex128, EXx, VPCOM }, 0 },
ff688e1f
L
10270 },
10271
10272 /* VEX_LEN_0FXOP_08_CF */
10273 {
be92cb14 10274 { "vpcomq", { XM, Vex128, EXx, VPCOM }, 0 },
ff688e1f
L
10275 },
10276
10277 /* VEX_LEN_0FXOP_08_EC */
10278 {
be92cb14 10279 { "vpcomub", { XM, Vex128, EXx, VPCOM }, 0 },
ff688e1f
L
10280 },
10281
10282 /* VEX_LEN_0FXOP_08_ED */
10283 {
be92cb14 10284 { "vpcomuw", { XM, Vex128, EXx, VPCOM }, 0 },
ff688e1f
L
10285 },
10286
10287 /* VEX_LEN_0FXOP_08_EE */
10288 {
be92cb14 10289 { "vpcomud", { XM, Vex128, EXx, VPCOM }, 0 },
ff688e1f
L
10290 },
10291
10292 /* VEX_LEN_0FXOP_08_EF */
10293 {
be92cb14 10294 { "vpcomuq", { XM, Vex128, EXx, VPCOM }, 0 },
ff688e1f
L
10295 },
10296
592a252b 10297 /* VEX_LEN_0FXOP_09_80 */
5dd85c99 10298 {
bf890a93
IT
10299 { "vfrczps", { XM, EXxmm }, 0 },
10300 { "vfrczps", { XM, EXymmq }, 0 },
5dd85c99 10301 },
4c807e72 10302
592a252b 10303 /* VEX_LEN_0FXOP_09_81 */
5dd85c99 10304 {
bf890a93
IT
10305 { "vfrczpd", { XM, EXxmm }, 0 },
10306 { "vfrczpd", { XM, EXymmq }, 0 },
5dd85c99 10307 },
331d2d0d
L
10308};
10309
9e30b8e0 10310static const struct dis386 vex_w_table[][2] = {
b844680a 10311 {
592a252b 10312 /* VEX_W_0F10_P_0 */
bf890a93 10313 { "vmovups", { XM, EXx }, 0 },
d8faab4e
L
10314 },
10315 {
592a252b 10316 /* VEX_W_0F10_P_1 */
bf890a93 10317 { "vmovss", { XMVexScalar, VexScalar, EXdScalar }, 0 },
d8faab4e
L
10318 },
10319 {
592a252b 10320 /* VEX_W_0F10_P_2 */
bf890a93 10321 { "vmovupd", { XM, EXx }, 0 },
d8faab4e
L
10322 },
10323 {
592a252b 10324 /* VEX_W_0F10_P_3 */
bf890a93 10325 { "vmovsd", { XMVexScalar, VexScalar, EXqScalar }, 0 },
d8faab4e
L
10326 },
10327 {
592a252b 10328 /* VEX_W_0F11_P_0 */
bf890a93 10329 { "vmovups", { EXxS, XM }, 0 },
d8faab4e
L
10330 },
10331 {
592a252b 10332 /* VEX_W_0F11_P_1 */
bf890a93 10333 { "vmovss", { EXdVexScalarS, VexScalar, XMScalar }, 0 },
b844680a
L
10334 },
10335 {
592a252b 10336 /* VEX_W_0F11_P_2 */
bf890a93 10337 { "vmovupd", { EXxS, XM }, 0 },
b844680a
L
10338 },
10339 {
592a252b 10340 /* VEX_W_0F11_P_3 */
bf890a93 10341 { "vmovsd", { EXqVexScalarS, VexScalar, XMScalar }, 0 },
d8faab4e
L
10342 },
10343 {
592a252b 10344 /* VEX_W_0F12_P_0_M_0 */
bf890a93 10345 { "vmovlps", { XM, Vex128, EXq }, 0 },
b844680a
L
10346 },
10347 {
592a252b 10348 /* VEX_W_0F12_P_0_M_1 */
bf890a93 10349 { "vmovhlps", { XM, Vex128, EXq }, 0 },
b844680a
L
10350 },
10351 {
592a252b 10352 /* VEX_W_0F12_P_1 */
bf890a93 10353 { "vmovsldup", { XM, EXx }, 0 },
b844680a
L
10354 },
10355 {
592a252b 10356 /* VEX_W_0F12_P_2 */
bf890a93 10357 { "vmovlpd", { XM, Vex128, EXq }, 0 },
b844680a
L
10358 },
10359 {
592a252b 10360 /* VEX_W_0F12_P_3 */
bf890a93 10361 { "vmovddup", { XM, EXymmq }, 0 },
b844680a
L
10362 },
10363 {
592a252b 10364 /* VEX_W_0F13_M_0 */
bf890a93 10365 { "vmovlpX", { EXq, XM }, 0 },
b844680a
L
10366 },
10367 {
592a252b 10368 /* VEX_W_0F14 */
bf890a93 10369 { "vunpcklpX", { XM, Vex, EXx }, 0 },
b844680a
L
10370 },
10371 {
592a252b 10372 /* VEX_W_0F15 */
bf890a93 10373 { "vunpckhpX", { XM, Vex, EXx }, 0 },
b844680a
L
10374 },
10375 {
592a252b 10376 /* VEX_W_0F16_P_0_M_0 */
bf890a93 10377 { "vmovhps", { XM, Vex128, EXq }, 0 },
9e30b8e0
L
10378 },
10379 {
592a252b 10380 /* VEX_W_0F16_P_0_M_1 */
bf890a93 10381 { "vmovlhps", { XM, Vex128, EXq }, 0 },
9e30b8e0
L
10382 },
10383 {
592a252b 10384 /* VEX_W_0F16_P_1 */
bf890a93 10385 { "vmovshdup", { XM, EXx }, 0 },
9e30b8e0
L
10386 },
10387 {
592a252b 10388 /* VEX_W_0F16_P_2 */
bf890a93 10389 { "vmovhpd", { XM, Vex128, EXq }, 0 },
9e30b8e0
L
10390 },
10391 {
592a252b 10392 /* VEX_W_0F17_M_0 */
bf890a93 10393 { "vmovhpX", { EXq, XM }, 0 },
9e30b8e0
L
10394 },
10395 {
592a252b 10396 /* VEX_W_0F28 */
bf890a93 10397 { "vmovapX", { XM, EXx }, 0 },
9e30b8e0
L
10398 },
10399 {
592a252b 10400 /* VEX_W_0F29 */
bf890a93 10401 { "vmovapX", { EXxS, XM }, 0 },
9e30b8e0
L
10402 },
10403 {
592a252b 10404 /* VEX_W_0F2B_M_0 */
bf890a93 10405 { "vmovntpX", { Mx, XM }, 0 },
9e30b8e0
L
10406 },
10407 {
592a252b 10408 /* VEX_W_0F2E_P_0 */
bf890a93 10409 { "vucomiss", { XMScalar, EXdScalar }, 0 },
9e30b8e0
L
10410 },
10411 {
592a252b 10412 /* VEX_W_0F2E_P_2 */
bf890a93 10413 { "vucomisd", { XMScalar, EXqScalar }, 0 },
9e30b8e0
L
10414 },
10415 {
592a252b 10416 /* VEX_W_0F2F_P_0 */
bf890a93 10417 { "vcomiss", { XMScalar, EXdScalar }, 0 },
9e30b8e0
L
10418 },
10419 {
592a252b 10420 /* VEX_W_0F2F_P_2 */
bf890a93 10421 { "vcomisd", { XMScalar, EXqScalar }, 0 },
9e30b8e0 10422 },
43234a1e
L
10423 {
10424 /* VEX_W_0F41_P_0_LEN_1 */
ab4e4ed5
AF
10425 { MOD_TABLE (MOD_VEX_W_0_0F41_P_0_LEN_1) },
10426 { MOD_TABLE (MOD_VEX_W_1_0F41_P_0_LEN_1) },
1ba585e8
IT
10427 },
10428 {
10429 /* VEX_W_0F41_P_2_LEN_1 */
ab4e4ed5
AF
10430 { MOD_TABLE (MOD_VEX_W_0_0F41_P_2_LEN_1) },
10431 { MOD_TABLE (MOD_VEX_W_1_0F41_P_2_LEN_1) }
43234a1e
L
10432 },
10433 {
10434 /* VEX_W_0F42_P_0_LEN_1 */
ab4e4ed5
AF
10435 { MOD_TABLE (MOD_VEX_W_0_0F42_P_0_LEN_1) },
10436 { MOD_TABLE (MOD_VEX_W_1_0F42_P_0_LEN_1) },
1ba585e8
IT
10437 },
10438 {
10439 /* VEX_W_0F42_P_2_LEN_1 */
ab4e4ed5
AF
10440 { MOD_TABLE (MOD_VEX_W_0_0F42_P_2_LEN_1) },
10441 { MOD_TABLE (MOD_VEX_W_1_0F42_P_2_LEN_1) },
43234a1e
L
10442 },
10443 {
10444 /* VEX_W_0F44_P_0_LEN_0 */
ab4e4ed5
AF
10445 { MOD_TABLE (MOD_VEX_W_0_0F44_P_0_LEN_1) },
10446 { MOD_TABLE (MOD_VEX_W_1_0F44_P_0_LEN_1) },
1ba585e8
IT
10447 },
10448 {
10449 /* VEX_W_0F44_P_2_LEN_0 */
ab4e4ed5
AF
10450 { MOD_TABLE (MOD_VEX_W_0_0F44_P_2_LEN_1) },
10451 { MOD_TABLE (MOD_VEX_W_1_0F44_P_2_LEN_1) },
43234a1e
L
10452 },
10453 {
10454 /* VEX_W_0F45_P_0_LEN_1 */
ab4e4ed5
AF
10455 { MOD_TABLE (MOD_VEX_W_0_0F45_P_0_LEN_1) },
10456 { MOD_TABLE (MOD_VEX_W_1_0F45_P_0_LEN_1) },
1ba585e8
IT
10457 },
10458 {
10459 /* VEX_W_0F45_P_2_LEN_1 */
ab4e4ed5
AF
10460 { MOD_TABLE (MOD_VEX_W_0_0F45_P_2_LEN_1) },
10461 { MOD_TABLE (MOD_VEX_W_1_0F45_P_2_LEN_1) },
43234a1e
L
10462 },
10463 {
10464 /* VEX_W_0F46_P_0_LEN_1 */
ab4e4ed5
AF
10465 { MOD_TABLE (MOD_VEX_W_0_0F46_P_0_LEN_1) },
10466 { MOD_TABLE (MOD_VEX_W_1_0F46_P_0_LEN_1) },
1ba585e8
IT
10467 },
10468 {
10469 /* VEX_W_0F46_P_2_LEN_1 */
ab4e4ed5
AF
10470 { MOD_TABLE (MOD_VEX_W_0_0F46_P_2_LEN_1) },
10471 { MOD_TABLE (MOD_VEX_W_1_0F46_P_2_LEN_1) },
43234a1e
L
10472 },
10473 {
10474 /* VEX_W_0F47_P_0_LEN_1 */
ab4e4ed5
AF
10475 { MOD_TABLE (MOD_VEX_W_0_0F47_P_0_LEN_1) },
10476 { MOD_TABLE (MOD_VEX_W_1_0F47_P_0_LEN_1) },
1ba585e8
IT
10477 },
10478 {
10479 /* VEX_W_0F47_P_2_LEN_1 */
ab4e4ed5
AF
10480 { MOD_TABLE (MOD_VEX_W_0_0F47_P_2_LEN_1) },
10481 { MOD_TABLE (MOD_VEX_W_1_0F47_P_2_LEN_1) },
1ba585e8
IT
10482 },
10483 {
10484 /* VEX_W_0F4A_P_0_LEN_1 */
ab4e4ed5
AF
10485 { MOD_TABLE (MOD_VEX_W_0_0F4A_P_0_LEN_1) },
10486 { MOD_TABLE (MOD_VEX_W_1_0F4A_P_0_LEN_1) },
1ba585e8
IT
10487 },
10488 {
10489 /* VEX_W_0F4A_P_2_LEN_1 */
ab4e4ed5
AF
10490 { MOD_TABLE (MOD_VEX_W_0_0F4A_P_2_LEN_1) },
10491 { MOD_TABLE (MOD_VEX_W_1_0F4A_P_2_LEN_1) },
1ba585e8
IT
10492 },
10493 {
10494 /* VEX_W_0F4B_P_0_LEN_1 */
ab4e4ed5
AF
10495 { MOD_TABLE (MOD_VEX_W_0_0F4B_P_0_LEN_1) },
10496 { MOD_TABLE (MOD_VEX_W_1_0F4B_P_0_LEN_1) },
43234a1e
L
10497 },
10498 {
10499 /* VEX_W_0F4B_P_2_LEN_1 */
ab4e4ed5 10500 { MOD_TABLE (MOD_VEX_W_0_0F4B_P_2_LEN_1) },
43234a1e 10501 },
9e30b8e0 10502 {
592a252b 10503 /* VEX_W_0F50_M_0 */
bf890a93 10504 { "vmovmskpX", { Gdq, XS }, 0 },
9e30b8e0
L
10505 },
10506 {
592a252b 10507 /* VEX_W_0F51_P_0 */
bf890a93 10508 { "vsqrtps", { XM, EXx }, 0 },
9e30b8e0
L
10509 },
10510 {
592a252b 10511 /* VEX_W_0F51_P_1 */
bf890a93 10512 { "vsqrtss", { XMScalar, VexScalar, EXdScalar }, 0 },
9e30b8e0
L
10513 },
10514 {
592a252b 10515 /* VEX_W_0F51_P_2 */
bf890a93 10516 { "vsqrtpd", { XM, EXx }, 0 },
9e30b8e0
L
10517 },
10518 {
592a252b 10519 /* VEX_W_0F51_P_3 */
bf890a93 10520 { "vsqrtsd", { XMScalar, VexScalar, EXqScalar }, 0 },
9e30b8e0
L
10521 },
10522 {
592a252b 10523 /* VEX_W_0F52_P_0 */
bf890a93 10524 { "vrsqrtps", { XM, EXx }, 0 },
9e30b8e0
L
10525 },
10526 {
592a252b 10527 /* VEX_W_0F52_P_1 */
bf890a93 10528 { "vrsqrtss", { XMScalar, VexScalar, EXdScalar }, 0 },
9e30b8e0
L
10529 },
10530 {
592a252b 10531 /* VEX_W_0F53_P_0 */
bf890a93 10532 { "vrcpps", { XM, EXx }, 0 },
9e30b8e0
L
10533 },
10534 {
592a252b 10535 /* VEX_W_0F53_P_1 */
bf890a93 10536 { "vrcpss", { XMScalar, VexScalar, EXdScalar }, 0 },
9e30b8e0
L
10537 },
10538 {
592a252b 10539 /* VEX_W_0F58_P_0 */
bf890a93 10540 { "vaddps", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10541 },
10542 {
592a252b 10543 /* VEX_W_0F58_P_1 */
bf890a93 10544 { "vaddss", { XMScalar, VexScalar, EXdScalar }, 0 },
9e30b8e0
L
10545 },
10546 {
592a252b 10547 /* VEX_W_0F58_P_2 */
bf890a93 10548 { "vaddpd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10549 },
10550 {
592a252b 10551 /* VEX_W_0F58_P_3 */
bf890a93 10552 { "vaddsd", { XMScalar, VexScalar, EXqScalar }, 0 },
9e30b8e0
L
10553 },
10554 {
592a252b 10555 /* VEX_W_0F59_P_0 */
bf890a93 10556 { "vmulps", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10557 },
10558 {
592a252b 10559 /* VEX_W_0F59_P_1 */
bf890a93 10560 { "vmulss", { XMScalar, VexScalar, EXdScalar }, 0 },
9e30b8e0
L
10561 },
10562 {
592a252b 10563 /* VEX_W_0F59_P_2 */
bf890a93 10564 { "vmulpd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10565 },
10566 {
592a252b 10567 /* VEX_W_0F59_P_3 */
bf890a93 10568 { "vmulsd", { XMScalar, VexScalar, EXqScalar }, 0 },
9e30b8e0
L
10569 },
10570 {
592a252b 10571 /* VEX_W_0F5A_P_0 */
bf890a93 10572 { "vcvtps2pd", { XM, EXxmmq }, 0 },
9e30b8e0
L
10573 },
10574 {
592a252b 10575 /* VEX_W_0F5A_P_1 */
bf890a93 10576 { "vcvtss2sd", { XMScalar, VexScalar, EXdScalar }, 0 },
9e30b8e0
L
10577 },
10578 {
592a252b 10579 /* VEX_W_0F5A_P_3 */
bf890a93 10580 { "vcvtsd2ss", { XMScalar, VexScalar, EXqScalar }, 0 },
9e30b8e0
L
10581 },
10582 {
592a252b 10583 /* VEX_W_0F5B_P_0 */
bf890a93 10584 { "vcvtdq2ps", { XM, EXx }, 0 },
9e30b8e0
L
10585 },
10586 {
592a252b 10587 /* VEX_W_0F5B_P_1 */
bf890a93 10588 { "vcvttps2dq", { XM, EXx }, 0 },
9e30b8e0
L
10589 },
10590 {
592a252b 10591 /* VEX_W_0F5B_P_2 */
bf890a93 10592 { "vcvtps2dq", { XM, EXx }, 0 },
9e30b8e0
L
10593 },
10594 {
592a252b 10595 /* VEX_W_0F5C_P_0 */
bf890a93 10596 { "vsubps", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10597 },
10598 {
592a252b 10599 /* VEX_W_0F5C_P_1 */
bf890a93 10600 { "vsubss", { XMScalar, VexScalar, EXdScalar }, 0 },
9e30b8e0
L
10601 },
10602 {
592a252b 10603 /* VEX_W_0F5C_P_2 */
bf890a93 10604 { "vsubpd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10605 },
10606 {
592a252b 10607 /* VEX_W_0F5C_P_3 */
bf890a93 10608 { "vsubsd", { XMScalar, VexScalar, EXqScalar }, 0 },
9e30b8e0
L
10609 },
10610 {
592a252b 10611 /* VEX_W_0F5D_P_0 */
bf890a93 10612 { "vminps", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10613 },
10614 {
592a252b 10615 /* VEX_W_0F5D_P_1 */
bf890a93 10616 { "vminss", { XMScalar, VexScalar, EXdScalar }, 0 },
9e30b8e0
L
10617 },
10618 {
592a252b 10619 /* VEX_W_0F5D_P_2 */
bf890a93 10620 { "vminpd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10621 },
10622 {
592a252b 10623 /* VEX_W_0F5D_P_3 */
bf890a93 10624 { "vminsd", { XMScalar, VexScalar, EXqScalar }, 0 },
9e30b8e0
L
10625 },
10626 {
592a252b 10627 /* VEX_W_0F5E_P_0 */
bf890a93 10628 { "vdivps", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10629 },
10630 {
592a252b 10631 /* VEX_W_0F5E_P_1 */
bf890a93 10632 { "vdivss", { XMScalar, VexScalar, EXdScalar }, 0 },
9e30b8e0
L
10633 },
10634 {
592a252b 10635 /* VEX_W_0F5E_P_2 */
bf890a93 10636 { "vdivpd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10637 },
10638 {
592a252b 10639 /* VEX_W_0F5E_P_3 */
bf890a93 10640 { "vdivsd", { XMScalar, VexScalar, EXqScalar }, 0 },
9e30b8e0
L
10641 },
10642 {
592a252b 10643 /* VEX_W_0F5F_P_0 */
bf890a93 10644 { "vmaxps", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10645 },
10646 {
592a252b 10647 /* VEX_W_0F5F_P_1 */
bf890a93 10648 { "vmaxss", { XMScalar, VexScalar, EXdScalar }, 0 },
9e30b8e0
L
10649 },
10650 {
592a252b 10651 /* VEX_W_0F5F_P_2 */
bf890a93 10652 { "vmaxpd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10653 },
10654 {
592a252b 10655 /* VEX_W_0F5F_P_3 */
bf890a93 10656 { "vmaxsd", { XMScalar, VexScalar, EXqScalar }, 0 },
9e30b8e0
L
10657 },
10658 {
592a252b 10659 /* VEX_W_0F60_P_2 */
bf890a93 10660 { "vpunpcklbw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10661 },
10662 {
592a252b 10663 /* VEX_W_0F61_P_2 */
bf890a93 10664 { "vpunpcklwd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10665 },
10666 {
592a252b 10667 /* VEX_W_0F62_P_2 */
bf890a93 10668 { "vpunpckldq", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10669 },
10670 {
592a252b 10671 /* VEX_W_0F63_P_2 */
bf890a93 10672 { "vpacksswb", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10673 },
10674 {
592a252b 10675 /* VEX_W_0F64_P_2 */
bf890a93 10676 { "vpcmpgtb", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10677 },
10678 {
592a252b 10679 /* VEX_W_0F65_P_2 */
bf890a93 10680 { "vpcmpgtw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10681 },
10682 {
592a252b 10683 /* VEX_W_0F66_P_2 */
bf890a93 10684 { "vpcmpgtd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10685 },
10686 {
592a252b 10687 /* VEX_W_0F67_P_2 */
bf890a93 10688 { "vpackuswb", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10689 },
10690 {
592a252b 10691 /* VEX_W_0F68_P_2 */
bf890a93 10692 { "vpunpckhbw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10693 },
10694 {
592a252b 10695 /* VEX_W_0F69_P_2 */
bf890a93 10696 { "vpunpckhwd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10697 },
10698 {
592a252b 10699 /* VEX_W_0F6A_P_2 */
bf890a93 10700 { "vpunpckhdq", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10701 },
10702 {
592a252b 10703 /* VEX_W_0F6B_P_2 */
bf890a93 10704 { "vpackssdw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10705 },
10706 {
592a252b 10707 /* VEX_W_0F6C_P_2 */
bf890a93 10708 { "vpunpcklqdq", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10709 },
10710 {
592a252b 10711 /* VEX_W_0F6D_P_2 */
bf890a93 10712 { "vpunpckhqdq", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10713 },
10714 {
592a252b 10715 /* VEX_W_0F6F_P_1 */
bf890a93 10716 { "vmovdqu", { XM, EXx }, 0 },
9e30b8e0
L
10717 },
10718 {
592a252b 10719 /* VEX_W_0F6F_P_2 */
bf890a93 10720 { "vmovdqa", { XM, EXx }, 0 },
9e30b8e0
L
10721 },
10722 {
592a252b 10723 /* VEX_W_0F70_P_1 */
bf890a93 10724 { "vpshufhw", { XM, EXx, Ib }, 0 },
9e30b8e0
L
10725 },
10726 {
592a252b 10727 /* VEX_W_0F70_P_2 */
bf890a93 10728 { "vpshufd", { XM, EXx, Ib }, 0 },
9e30b8e0
L
10729 },
10730 {
592a252b 10731 /* VEX_W_0F70_P_3 */
bf890a93 10732 { "vpshuflw", { XM, EXx, Ib }, 0 },
9e30b8e0
L
10733 },
10734 {
592a252b 10735 /* VEX_W_0F71_R_2_P_2 */
bf890a93 10736 { "vpsrlw", { Vex, XS, Ib }, 0 },
9e30b8e0
L
10737 },
10738 {
592a252b 10739 /* VEX_W_0F71_R_4_P_2 */
bf890a93 10740 { "vpsraw", { Vex, XS, Ib }, 0 },
9e30b8e0
L
10741 },
10742 {
592a252b 10743 /* VEX_W_0F71_R_6_P_2 */
bf890a93 10744 { "vpsllw", { Vex, XS, Ib }, 0 },
9e30b8e0
L
10745 },
10746 {
592a252b 10747 /* VEX_W_0F72_R_2_P_2 */
bf890a93 10748 { "vpsrld", { Vex, XS, Ib }, 0 },
9e30b8e0
L
10749 },
10750 {
592a252b 10751 /* VEX_W_0F72_R_4_P_2 */
bf890a93 10752 { "vpsrad", { Vex, XS, Ib }, 0 },
9e30b8e0
L
10753 },
10754 {
592a252b 10755 /* VEX_W_0F72_R_6_P_2 */
bf890a93 10756 { "vpslld", { Vex, XS, Ib }, 0 },
9e30b8e0
L
10757 },
10758 {
592a252b 10759 /* VEX_W_0F73_R_2_P_2 */
bf890a93 10760 { "vpsrlq", { Vex, XS, Ib }, 0 },
9e30b8e0
L
10761 },
10762 {
592a252b 10763 /* VEX_W_0F73_R_3_P_2 */
bf890a93 10764 { "vpsrldq", { Vex, XS, Ib }, 0 },
9e30b8e0
L
10765 },
10766 {
592a252b 10767 /* VEX_W_0F73_R_6_P_2 */
bf890a93 10768 { "vpsllq", { Vex, XS, Ib }, 0 },
9e30b8e0
L
10769 },
10770 {
592a252b 10771 /* VEX_W_0F73_R_7_P_2 */
bf890a93 10772 { "vpslldq", { Vex, XS, Ib }, 0 },
9e30b8e0
L
10773 },
10774 {
592a252b 10775 /* VEX_W_0F74_P_2 */
bf890a93 10776 { "vpcmpeqb", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10777 },
10778 {
592a252b 10779 /* VEX_W_0F75_P_2 */
bf890a93 10780 { "vpcmpeqw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10781 },
10782 {
592a252b 10783 /* VEX_W_0F76_P_2 */
bf890a93 10784 { "vpcmpeqd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10785 },
10786 {
592a252b 10787 /* VEX_W_0F77_P_0 */
bf890a93 10788 { "", { VZERO }, 0 },
9e30b8e0
L
10789 },
10790 {
592a252b 10791 /* VEX_W_0F7C_P_2 */
bf890a93 10792 { "vhaddpd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10793 },
10794 {
592a252b 10795 /* VEX_W_0F7C_P_3 */
bf890a93 10796 { "vhaddps", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10797 },
10798 {
592a252b 10799 /* VEX_W_0F7D_P_2 */
bf890a93 10800 { "vhsubpd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10801 },
10802 {
592a252b 10803 /* VEX_W_0F7D_P_3 */
bf890a93 10804 { "vhsubps", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10805 },
10806 {
592a252b 10807 /* VEX_W_0F7E_P_1 */
bf890a93 10808 { "vmovq", { XMScalar, EXqScalar }, 0 },
9e30b8e0
L
10809 },
10810 {
592a252b 10811 /* VEX_W_0F7F_P_1 */
bf890a93 10812 { "vmovdqu", { EXxS, XM }, 0 },
9e30b8e0
L
10813 },
10814 {
592a252b 10815 /* VEX_W_0F7F_P_2 */
bf890a93 10816 { "vmovdqa", { EXxS, XM }, 0 },
9e30b8e0 10817 },
43234a1e
L
10818 {
10819 /* VEX_W_0F90_P_0_LEN_0 */
bf890a93
IT
10820 { "kmovw", { MaskG, MaskE }, 0 },
10821 { "kmovq", { MaskG, MaskE }, 0 },
1ba585e8
IT
10822 },
10823 {
10824 /* VEX_W_0F90_P_2_LEN_0 */
bf890a93
IT
10825 { "kmovb", { MaskG, MaskBDE }, 0 },
10826 { "kmovd", { MaskG, MaskBDE }, 0 },
43234a1e
L
10827 },
10828 {
10829 /* VEX_W_0F91_P_0_LEN_0 */
ab4e4ed5
AF
10830 { MOD_TABLE (MOD_VEX_W_0_0F91_P_0_LEN_0) },
10831 { MOD_TABLE (MOD_VEX_W_1_0F91_P_0_LEN_0) },
1ba585e8
IT
10832 },
10833 {
10834 /* VEX_W_0F91_P_2_LEN_0 */
ab4e4ed5
AF
10835 { MOD_TABLE (MOD_VEX_W_0_0F91_P_2_LEN_0) },
10836 { MOD_TABLE (MOD_VEX_W_1_0F91_P_2_LEN_0) },
43234a1e
L
10837 },
10838 {
10839 /* VEX_W_0F92_P_0_LEN_0 */
ab4e4ed5 10840 { MOD_TABLE (MOD_VEX_W_0_0F92_P_0_LEN_0) },
43234a1e 10841 },
90a915bf
IT
10842 {
10843 /* VEX_W_0F92_P_2_LEN_0 */
ab4e4ed5 10844 { MOD_TABLE (MOD_VEX_W_0_0F92_P_2_LEN_0) },
90a915bf 10845 },
1ba585e8
IT
10846 {
10847 /* VEX_W_0F92_P_3_LEN_0 */
ab4e4ed5
AF
10848 { MOD_TABLE (MOD_VEX_W_0_0F92_P_3_LEN_0) },
10849 { MOD_TABLE (MOD_VEX_W_1_0F92_P_3_LEN_0) },
1ba585e8 10850 },
43234a1e
L
10851 {
10852 /* VEX_W_0F93_P_0_LEN_0 */
ab4e4ed5 10853 { MOD_TABLE (MOD_VEX_W_0_0F93_P_0_LEN_0) },
43234a1e 10854 },
90a915bf
IT
10855 {
10856 /* VEX_W_0F93_P_2_LEN_0 */
ab4e4ed5 10857 { MOD_TABLE (MOD_VEX_W_0_0F93_P_2_LEN_0) },
90a915bf 10858 },
1ba585e8
IT
10859 {
10860 /* VEX_W_0F93_P_3_LEN_0 */
ab4e4ed5
AF
10861 { MOD_TABLE (MOD_VEX_W_0_0F93_P_3_LEN_0) },
10862 { MOD_TABLE (MOD_VEX_W_1_0F93_P_3_LEN_0) },
1ba585e8 10863 },
43234a1e
L
10864 {
10865 /* VEX_W_0F98_P_0_LEN_0 */
ab4e4ed5
AF
10866 { MOD_TABLE (MOD_VEX_W_0_0F98_P_0_LEN_0) },
10867 { MOD_TABLE (MOD_VEX_W_1_0F98_P_0_LEN_0) },
1ba585e8
IT
10868 },
10869 {
10870 /* VEX_W_0F98_P_2_LEN_0 */
ab4e4ed5
AF
10871 { MOD_TABLE (MOD_VEX_W_0_0F98_P_2_LEN_0) },
10872 { MOD_TABLE (MOD_VEX_W_1_0F98_P_2_LEN_0) },
1ba585e8
IT
10873 },
10874 {
10875 /* VEX_W_0F99_P_0_LEN_0 */
ab4e4ed5
AF
10876 { MOD_TABLE (MOD_VEX_W_0_0F99_P_0_LEN_0) },
10877 { MOD_TABLE (MOD_VEX_W_1_0F99_P_0_LEN_0) },
1ba585e8
IT
10878 },
10879 {
10880 /* VEX_W_0F99_P_2_LEN_0 */
ab4e4ed5
AF
10881 { MOD_TABLE (MOD_VEX_W_0_0F99_P_2_LEN_0) },
10882 { MOD_TABLE (MOD_VEX_W_1_0F99_P_2_LEN_0) },
43234a1e 10883 },
9e30b8e0 10884 {
592a252b 10885 /* VEX_W_0FAE_R_2_M_0 */
bf890a93 10886 { "vldmxcsr", { Md }, 0 },
9e30b8e0
L
10887 },
10888 {
592a252b 10889 /* VEX_W_0FAE_R_3_M_0 */
bf890a93 10890 { "vstmxcsr", { Md }, 0 },
9e30b8e0
L
10891 },
10892 {
592a252b 10893 /* VEX_W_0FC2_P_0 */
bf890a93 10894 { "vcmpps", { XM, Vex, EXx, VCMP }, 0 },
9e30b8e0
L
10895 },
10896 {
592a252b 10897 /* VEX_W_0FC2_P_1 */
bf890a93 10898 { "vcmpss", { XMScalar, VexScalar, EXdScalar, VCMP }, 0 },
9e30b8e0
L
10899 },
10900 {
592a252b 10901 /* VEX_W_0FC2_P_2 */
bf890a93 10902 { "vcmppd", { XM, Vex, EXx, VCMP }, 0 },
9e30b8e0
L
10903 },
10904 {
592a252b 10905 /* VEX_W_0FC2_P_3 */
bf890a93 10906 { "vcmpsd", { XMScalar, VexScalar, EXqScalar, VCMP }, 0 },
9e30b8e0
L
10907 },
10908 {
592a252b 10909 /* VEX_W_0FC4_P_2 */
bf890a93 10910 { "vpinsrw", { XM, Vex128, Edqw, Ib }, 0 },
9e30b8e0
L
10911 },
10912 {
592a252b 10913 /* VEX_W_0FC5_P_2 */
bf890a93 10914 { "vpextrw", { Gdq, XS, Ib }, 0 },
9e30b8e0
L
10915 },
10916 {
592a252b 10917 /* VEX_W_0FD0_P_2 */
bf890a93 10918 { "vaddsubpd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10919 },
10920 {
592a252b 10921 /* VEX_W_0FD0_P_3 */
bf890a93 10922 { "vaddsubps", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10923 },
10924 {
592a252b 10925 /* VEX_W_0FD1_P_2 */
bf890a93 10926 { "vpsrlw", { XM, Vex, EXxmm }, 0 },
9e30b8e0
L
10927 },
10928 {
592a252b 10929 /* VEX_W_0FD2_P_2 */
bf890a93 10930 { "vpsrld", { XM, Vex, EXxmm }, 0 },
9e30b8e0
L
10931 },
10932 {
592a252b 10933 /* VEX_W_0FD3_P_2 */
bf890a93 10934 { "vpsrlq", { XM, Vex, EXxmm }, 0 },
9e30b8e0
L
10935 },
10936 {
592a252b 10937 /* VEX_W_0FD4_P_2 */
bf890a93 10938 { "vpaddq", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10939 },
10940 {
592a252b 10941 /* VEX_W_0FD5_P_2 */
bf890a93 10942 { "vpmullw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10943 },
10944 {
592a252b 10945 /* VEX_W_0FD6_P_2 */
bf890a93 10946 { "vmovq", { EXqScalarS, XMScalar }, 0 },
9e30b8e0
L
10947 },
10948 {
592a252b 10949 /* VEX_W_0FD7_P_2_M_1 */
bf890a93 10950 { "vpmovmskb", { Gdq, XS }, 0 },
9e30b8e0
L
10951 },
10952 {
592a252b 10953 /* VEX_W_0FD8_P_2 */
bf890a93 10954 { "vpsubusb", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10955 },
10956 {
592a252b 10957 /* VEX_W_0FD9_P_2 */
bf890a93 10958 { "vpsubusw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10959 },
10960 {
592a252b 10961 /* VEX_W_0FDA_P_2 */
bf890a93 10962 { "vpminub", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10963 },
10964 {
592a252b 10965 /* VEX_W_0FDB_P_2 */
bf890a93 10966 { "vpand", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10967 },
10968 {
592a252b 10969 /* VEX_W_0FDC_P_2 */
bf890a93 10970 { "vpaddusb", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10971 },
10972 {
592a252b 10973 /* VEX_W_0FDD_P_2 */
bf890a93 10974 { "vpaddusw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10975 },
10976 {
592a252b 10977 /* VEX_W_0FDE_P_2 */
bf890a93 10978 { "vpmaxub", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10979 },
10980 {
592a252b 10981 /* VEX_W_0FDF_P_2 */
bf890a93 10982 { "vpandn", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10983 },
10984 {
592a252b 10985 /* VEX_W_0FE0_P_2 */
bf890a93 10986 { "vpavgb", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10987 },
10988 {
592a252b 10989 /* VEX_W_0FE1_P_2 */
bf890a93 10990 { "vpsraw", { XM, Vex, EXxmm }, 0 },
9e30b8e0
L
10991 },
10992 {
592a252b 10993 /* VEX_W_0FE2_P_2 */
bf890a93 10994 { "vpsrad", { XM, Vex, EXxmm }, 0 },
9e30b8e0
L
10995 },
10996 {
592a252b 10997 /* VEX_W_0FE3_P_2 */
bf890a93 10998 { "vpavgw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10999 },
11000 {
592a252b 11001 /* VEX_W_0FE4_P_2 */
bf890a93 11002 { "vpmulhuw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11003 },
11004 {
592a252b 11005 /* VEX_W_0FE5_P_2 */
bf890a93 11006 { "vpmulhw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11007 },
11008 {
592a252b 11009 /* VEX_W_0FE6_P_1 */
bf890a93 11010 { "vcvtdq2pd", { XM, EXxmmq }, 0 },
9e30b8e0
L
11011 },
11012 {
592a252b 11013 /* VEX_W_0FE6_P_2 */
bf890a93 11014 { "vcvttpd2dq%XY", { XMM, EXx }, 0 },
9e30b8e0
L
11015 },
11016 {
592a252b 11017 /* VEX_W_0FE6_P_3 */
bf890a93 11018 { "vcvtpd2dq%XY", { XMM, EXx }, 0 },
9e30b8e0
L
11019 },
11020 {
592a252b 11021 /* VEX_W_0FE7_P_2_M_0 */
bf890a93 11022 { "vmovntdq", { Mx, XM }, 0 },
9e30b8e0
L
11023 },
11024 {
592a252b 11025 /* VEX_W_0FE8_P_2 */
bf890a93 11026 { "vpsubsb", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11027 },
11028 {
592a252b 11029 /* VEX_W_0FE9_P_2 */
bf890a93 11030 { "vpsubsw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11031 },
11032 {
592a252b 11033 /* VEX_W_0FEA_P_2 */
bf890a93 11034 { "vpminsw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11035 },
11036 {
592a252b 11037 /* VEX_W_0FEB_P_2 */
bf890a93 11038 { "vpor", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11039 },
11040 {
592a252b 11041 /* VEX_W_0FEC_P_2 */
bf890a93 11042 { "vpaddsb", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11043 },
11044 {
592a252b 11045 /* VEX_W_0FED_P_2 */
bf890a93 11046 { "vpaddsw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11047 },
11048 {
592a252b 11049 /* VEX_W_0FEE_P_2 */
bf890a93 11050 { "vpmaxsw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11051 },
11052 {
592a252b 11053 /* VEX_W_0FEF_P_2 */
bf890a93 11054 { "vpxor", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11055 },
11056 {
592a252b 11057 /* VEX_W_0FF0_P_3_M_0 */
bf890a93 11058 { "vlddqu", { XM, M }, 0 },
9e30b8e0
L
11059 },
11060 {
592a252b 11061 /* VEX_W_0FF1_P_2 */
bf890a93 11062 { "vpsllw", { XM, Vex, EXxmm }, 0 },
9e30b8e0
L
11063 },
11064 {
592a252b 11065 /* VEX_W_0FF2_P_2 */
bf890a93 11066 { "vpslld", { XM, Vex, EXxmm }, 0 },
9e30b8e0
L
11067 },
11068 {
592a252b 11069 /* VEX_W_0FF3_P_2 */
bf890a93 11070 { "vpsllq", { XM, Vex, EXxmm }, 0 },
9e30b8e0
L
11071 },
11072 {
592a252b 11073 /* VEX_W_0FF4_P_2 */
bf890a93 11074 { "vpmuludq", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11075 },
11076 {
592a252b 11077 /* VEX_W_0FF5_P_2 */
bf890a93 11078 { "vpmaddwd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11079 },
11080 {
592a252b 11081 /* VEX_W_0FF6_P_2 */
bf890a93 11082 { "vpsadbw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11083 },
11084 {
592a252b 11085 /* VEX_W_0FF7_P_2 */
bf890a93 11086 { "vmaskmovdqu", { XM, XS }, 0 },
9e30b8e0
L
11087 },
11088 {
592a252b 11089 /* VEX_W_0FF8_P_2 */
bf890a93 11090 { "vpsubb", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11091 },
11092 {
592a252b 11093 /* VEX_W_0FF9_P_2 */
bf890a93 11094 { "vpsubw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11095 },
11096 {
592a252b 11097 /* VEX_W_0FFA_P_2 */
bf890a93 11098 { "vpsubd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11099 },
11100 {
592a252b 11101 /* VEX_W_0FFB_P_2 */
bf890a93 11102 { "vpsubq", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11103 },
11104 {
592a252b 11105 /* VEX_W_0FFC_P_2 */
bf890a93 11106 { "vpaddb", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11107 },
11108 {
592a252b 11109 /* VEX_W_0FFD_P_2 */
bf890a93 11110 { "vpaddw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11111 },
11112 {
592a252b 11113 /* VEX_W_0FFE_P_2 */
bf890a93 11114 { "vpaddd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11115 },
11116 {
592a252b 11117 /* VEX_W_0F3800_P_2 */
bf890a93 11118 { "vpshufb", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11119 },
11120 {
592a252b 11121 /* VEX_W_0F3801_P_2 */
bf890a93 11122 { "vphaddw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11123 },
11124 {
592a252b 11125 /* VEX_W_0F3802_P_2 */
bf890a93 11126 { "vphaddd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11127 },
11128 {
592a252b 11129 /* VEX_W_0F3803_P_2 */
bf890a93 11130 { "vphaddsw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11131 },
11132 {
592a252b 11133 /* VEX_W_0F3804_P_2 */
bf890a93 11134 { "vpmaddubsw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11135 },
11136 {
592a252b 11137 /* VEX_W_0F3805_P_2 */
bf890a93 11138 { "vphsubw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11139 },
11140 {
592a252b 11141 /* VEX_W_0F3806_P_2 */
bf890a93 11142 { "vphsubd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11143 },
11144 {
592a252b 11145 /* VEX_W_0F3807_P_2 */
bf890a93 11146 { "vphsubsw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11147 },
11148 {
592a252b 11149 /* VEX_W_0F3808_P_2 */
bf890a93 11150 { "vpsignb", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11151 },
11152 {
592a252b 11153 /* VEX_W_0F3809_P_2 */
bf890a93 11154 { "vpsignw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11155 },
11156 {
592a252b 11157 /* VEX_W_0F380A_P_2 */
bf890a93 11158 { "vpsignd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11159 },
11160 {
592a252b 11161 /* VEX_W_0F380B_P_2 */
bf890a93 11162 { "vpmulhrsw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11163 },
11164 {
592a252b 11165 /* VEX_W_0F380C_P_2 */
bf890a93 11166 { "vpermilps", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11167 },
11168 {
592a252b 11169 /* VEX_W_0F380D_P_2 */
bf890a93 11170 { "vpermilpd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11171 },
11172 {
592a252b 11173 /* VEX_W_0F380E_P_2 */
bf890a93 11174 { "vtestps", { XM, EXx }, 0 },
9e30b8e0
L
11175 },
11176 {
592a252b 11177 /* VEX_W_0F380F_P_2 */
bf890a93 11178 { "vtestpd", { XM, EXx }, 0 },
9e30b8e0 11179 },
6c30d220
L
11180 {
11181 /* VEX_W_0F3816_P_2 */
bf890a93 11182 { "vpermps", { XM, Vex, EXx }, 0 },
6c30d220 11183 },
9e30b8e0 11184 {
592a252b 11185 /* VEX_W_0F3817_P_2 */
bf890a93 11186 { "vptest", { XM, EXx }, 0 },
9e30b8e0 11187 },
bcf2684f 11188 {
6c30d220 11189 /* VEX_W_0F3818_P_2 */
bf890a93 11190 { "vbroadcastss", { XM, EXxmm_md }, 0 },
bcf2684f 11191 },
9e30b8e0 11192 {
6c30d220 11193 /* VEX_W_0F3819_P_2 */
bf890a93 11194 { "vbroadcastsd", { XM, EXxmm_mq }, 0 },
9e30b8e0
L
11195 },
11196 {
592a252b 11197 /* VEX_W_0F381A_P_2_M_0 */
bf890a93 11198 { "vbroadcastf128", { XM, Mxmm }, 0 },
9e30b8e0
L
11199 },
11200 {
592a252b 11201 /* VEX_W_0F381C_P_2 */
bf890a93 11202 { "vpabsb", { XM, EXx }, 0 },
9e30b8e0
L
11203 },
11204 {
592a252b 11205 /* VEX_W_0F381D_P_2 */
bf890a93 11206 { "vpabsw", { XM, EXx }, 0 },
9e30b8e0
L
11207 },
11208 {
592a252b 11209 /* VEX_W_0F381E_P_2 */
bf890a93 11210 { "vpabsd", { XM, EXx }, 0 },
9e30b8e0
L
11211 },
11212 {
592a252b 11213 /* VEX_W_0F3820_P_2 */
bf890a93 11214 { "vpmovsxbw", { XM, EXxmmq }, 0 },
9e30b8e0
L
11215 },
11216 {
592a252b 11217 /* VEX_W_0F3821_P_2 */
bf890a93 11218 { "vpmovsxbd", { XM, EXxmmqd }, 0 },
9e30b8e0
L
11219 },
11220 {
592a252b 11221 /* VEX_W_0F3822_P_2 */
bf890a93 11222 { "vpmovsxbq", { XM, EXxmmdw }, 0 },
9e30b8e0
L
11223 },
11224 {
592a252b 11225 /* VEX_W_0F3823_P_2 */
bf890a93 11226 { "vpmovsxwd", { XM, EXxmmq }, 0 },
9e30b8e0
L
11227 },
11228 {
592a252b 11229 /* VEX_W_0F3824_P_2 */
bf890a93 11230 { "vpmovsxwq", { XM, EXxmmqd }, 0 },
9e30b8e0
L
11231 },
11232 {
592a252b 11233 /* VEX_W_0F3825_P_2 */
bf890a93 11234 { "vpmovsxdq", { XM, EXxmmq }, 0 },
9e30b8e0
L
11235 },
11236 {
592a252b 11237 /* VEX_W_0F3828_P_2 */
bf890a93 11238 { "vpmuldq", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11239 },
11240 {
592a252b 11241 /* VEX_W_0F3829_P_2 */
bf890a93 11242 { "vpcmpeqq", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11243 },
11244 {
592a252b 11245 /* VEX_W_0F382A_P_2_M_0 */
bf890a93 11246 { "vmovntdqa", { XM, Mx }, 0 },
9e30b8e0
L
11247 },
11248 {
592a252b 11249 /* VEX_W_0F382B_P_2 */
bf890a93 11250 { "vpackusdw", { XM, Vex, EXx }, 0 },
9e30b8e0 11251 },
53aa04a0 11252 {
592a252b 11253 /* VEX_W_0F382C_P_2_M_0 */
bf890a93 11254 { "vmaskmovps", { XM, Vex, Mx }, 0 },
53aa04a0
L
11255 },
11256 {
592a252b 11257 /* VEX_W_0F382D_P_2_M_0 */
bf890a93 11258 { "vmaskmovpd", { XM, Vex, Mx }, 0 },
53aa04a0
L
11259 },
11260 {
592a252b 11261 /* VEX_W_0F382E_P_2_M_0 */
bf890a93 11262 { "vmaskmovps", { Mx, Vex, XM }, 0 },
53aa04a0
L
11263 },
11264 {
592a252b 11265 /* VEX_W_0F382F_P_2_M_0 */
bf890a93 11266 { "vmaskmovpd", { Mx, Vex, XM }, 0 },
53aa04a0 11267 },
9e30b8e0 11268 {
592a252b 11269 /* VEX_W_0F3830_P_2 */
bf890a93 11270 { "vpmovzxbw", { XM, EXxmmq }, 0 },
9e30b8e0
L
11271 },
11272 {
592a252b 11273 /* VEX_W_0F3831_P_2 */
bf890a93 11274 { "vpmovzxbd", { XM, EXxmmqd }, 0 },
9e30b8e0
L
11275 },
11276 {
592a252b 11277 /* VEX_W_0F3832_P_2 */
bf890a93 11278 { "vpmovzxbq", { XM, EXxmmdw }, 0 },
9e30b8e0
L
11279 },
11280 {
592a252b 11281 /* VEX_W_0F3833_P_2 */
bf890a93 11282 { "vpmovzxwd", { XM, EXxmmq }, 0 },
9e30b8e0
L
11283 },
11284 {
592a252b 11285 /* VEX_W_0F3834_P_2 */
bf890a93 11286 { "vpmovzxwq", { XM, EXxmmqd }, 0 },
9e30b8e0
L
11287 },
11288 {
592a252b 11289 /* VEX_W_0F3835_P_2 */
bf890a93 11290 { "vpmovzxdq", { XM, EXxmmq }, 0 },
6c30d220
L
11291 },
11292 {
11293 /* VEX_W_0F3836_P_2 */
bf890a93 11294 { "vpermd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11295 },
11296 {
592a252b 11297 /* VEX_W_0F3837_P_2 */
bf890a93 11298 { "vpcmpgtq", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11299 },
11300 {
592a252b 11301 /* VEX_W_0F3838_P_2 */
bf890a93 11302 { "vpminsb", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11303 },
11304 {
592a252b 11305 /* VEX_W_0F3839_P_2 */
bf890a93 11306 { "vpminsd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11307 },
11308 {
592a252b 11309 /* VEX_W_0F383A_P_2 */
bf890a93 11310 { "vpminuw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11311 },
11312 {
592a252b 11313 /* VEX_W_0F383B_P_2 */
bf890a93 11314 { "vpminud", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11315 },
11316 {
592a252b 11317 /* VEX_W_0F383C_P_2 */
bf890a93 11318 { "vpmaxsb", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11319 },
11320 {
592a252b 11321 /* VEX_W_0F383D_P_2 */
bf890a93 11322 { "vpmaxsd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11323 },
11324 {
592a252b 11325 /* VEX_W_0F383E_P_2 */
bf890a93 11326 { "vpmaxuw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11327 },
11328 {
592a252b 11329 /* VEX_W_0F383F_P_2 */
bf890a93 11330 { "vpmaxud", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11331 },
11332 {
592a252b 11333 /* VEX_W_0F3840_P_2 */
bf890a93 11334 { "vpmulld", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11335 },
11336 {
592a252b 11337 /* VEX_W_0F3841_P_2 */
bf890a93 11338 { "vphminposuw", { XM, EXx }, 0 },
9e30b8e0 11339 },
6c30d220
L
11340 {
11341 /* VEX_W_0F3846_P_2 */
bf890a93 11342 { "vpsravd", { XM, Vex, EXx }, 0 },
6c30d220
L
11343 },
11344 {
11345 /* VEX_W_0F3858_P_2 */
bf890a93 11346 { "vpbroadcastd", { XM, EXxmm_md }, 0 },
6c30d220
L
11347 },
11348 {
11349 /* VEX_W_0F3859_P_2 */
bf890a93 11350 { "vpbroadcastq", { XM, EXxmm_mq }, 0 },
6c30d220
L
11351 },
11352 {
11353 /* VEX_W_0F385A_P_2_M_0 */
bf890a93 11354 { "vbroadcasti128", { XM, Mxmm }, 0 },
6c30d220
L
11355 },
11356 {
11357 /* VEX_W_0F3878_P_2 */
bf890a93 11358 { "vpbroadcastb", { XM, EXxmm_mb }, 0 },
6c30d220
L
11359 },
11360 {
11361 /* VEX_W_0F3879_P_2 */
bf890a93 11362 { "vpbroadcastw", { XM, EXxmm_mw }, 0 },
6c30d220 11363 },
48521003
IT
11364 {
11365 /* VEX_W_0F38CF_P_2 */
11366 { "vgf2p8mulb", { XM, Vex, EXx }, 0 },
11367 },
9e30b8e0 11368 {
592a252b 11369 /* VEX_W_0F38DB_P_2 */
bf890a93 11370 { "vaesimc", { XM, EXx }, 0 },
9e30b8e0 11371 },
6c30d220
L
11372 {
11373 /* VEX_W_0F3A00_P_2 */
11374 { Bad_Opcode },
bf890a93 11375 { "vpermq", { XM, EXx, Ib }, 0 },
6c30d220
L
11376 },
11377 {
11378 /* VEX_W_0F3A01_P_2 */
11379 { Bad_Opcode },
bf890a93 11380 { "vpermpd", { XM, EXx, Ib }, 0 },
6c30d220
L
11381 },
11382 {
11383 /* VEX_W_0F3A02_P_2 */
bf890a93 11384 { "vpblendd", { XM, Vex, EXx, Ib }, 0 },
6c30d220 11385 },
9e30b8e0 11386 {
592a252b 11387 /* VEX_W_0F3A04_P_2 */
bf890a93 11388 { "vpermilps", { XM, EXx, Ib }, 0 },
9e30b8e0
L
11389 },
11390 {
592a252b 11391 /* VEX_W_0F3A05_P_2 */
bf890a93 11392 { "vpermilpd", { XM, EXx, Ib }, 0 },
9e30b8e0
L
11393 },
11394 {
592a252b 11395 /* VEX_W_0F3A06_P_2 */
bf890a93 11396 { "vperm2f128", { XM, Vex256, EXx, Ib }, 0 },
9e30b8e0
L
11397 },
11398 {
592a252b 11399 /* VEX_W_0F3A08_P_2 */
bf890a93 11400 { "vroundps", { XM, EXx, Ib }, 0 },
9e30b8e0
L
11401 },
11402 {
592a252b 11403 /* VEX_W_0F3A09_P_2 */
bf890a93 11404 { "vroundpd", { XM, EXx, Ib }, 0 },
9e30b8e0
L
11405 },
11406 {
592a252b 11407 /* VEX_W_0F3A0A_P_2 */
bf890a93 11408 { "vroundss", { XMScalar, VexScalar, EXdScalar, Ib }, 0 },
9e30b8e0
L
11409 },
11410 {
592a252b 11411 /* VEX_W_0F3A0B_P_2 */
bf890a93 11412 { "vroundsd", { XMScalar, VexScalar, EXqScalar, Ib }, 0 },
9e30b8e0
L
11413 },
11414 {
592a252b 11415 /* VEX_W_0F3A0C_P_2 */
bf890a93 11416 { "vblendps", { XM, Vex, EXx, Ib }, 0 },
9e30b8e0
L
11417 },
11418 {
592a252b 11419 /* VEX_W_0F3A0D_P_2 */
bf890a93 11420 { "vblendpd", { XM, Vex, EXx, Ib }, 0 },
9e30b8e0
L
11421 },
11422 {
592a252b 11423 /* VEX_W_0F3A0E_P_2 */
bf890a93 11424 { "vpblendw", { XM, Vex, EXx, Ib }, 0 },
9e30b8e0
L
11425 },
11426 {
592a252b 11427 /* VEX_W_0F3A0F_P_2 */
bf890a93 11428 { "vpalignr", { XM, Vex, EXx, Ib }, 0 },
9e30b8e0
L
11429 },
11430 {
592a252b 11431 /* VEX_W_0F3A14_P_2 */
bf890a93 11432 { "vpextrb", { Edqb, XM, Ib }, 0 },
9e30b8e0
L
11433 },
11434 {
592a252b 11435 /* VEX_W_0F3A15_P_2 */
bf890a93 11436 { "vpextrw", { Edqw, XM, Ib }, 0 },
9e30b8e0
L
11437 },
11438 {
592a252b 11439 /* VEX_W_0F3A18_P_2 */
bf890a93 11440 { "vinsertf128", { XM, Vex256, EXxmm, Ib }, 0 },
9e30b8e0
L
11441 },
11442 {
592a252b 11443 /* VEX_W_0F3A19_P_2 */
bf890a93 11444 { "vextractf128", { EXxmm, XM, Ib }, 0 },
9e30b8e0
L
11445 },
11446 {
592a252b 11447 /* VEX_W_0F3A20_P_2 */
bf890a93 11448 { "vpinsrb", { XM, Vex128, Edqb, Ib }, 0 },
9e30b8e0
L
11449 },
11450 {
592a252b 11451 /* VEX_W_0F3A21_P_2 */
bf890a93 11452 { "vinsertps", { XM, Vex128, EXd, Ib }, 0 },
9e30b8e0 11453 },
43234a1e 11454 {
1ba585e8 11455 /* VEX_W_0F3A30_P_2_LEN_0 */
ab4e4ed5
AF
11456 { MOD_TABLE (MOD_VEX_W_0_0F3A30_P_2_LEN_0) },
11457 { MOD_TABLE (MOD_VEX_W_1_0F3A30_P_2_LEN_0) },
43234a1e
L
11458 },
11459 {
1ba585e8 11460 /* VEX_W_0F3A31_P_2_LEN_0 */
ab4e4ed5
AF
11461 { MOD_TABLE (MOD_VEX_W_0_0F3A31_P_2_LEN_0) },
11462 { MOD_TABLE (MOD_VEX_W_1_0F3A31_P_2_LEN_0) },
1ba585e8
IT
11463 },
11464 {
11465 /* VEX_W_0F3A32_P_2_LEN_0 */
ab4e4ed5
AF
11466 { MOD_TABLE (MOD_VEX_W_0_0F3A32_P_2_LEN_0) },
11467 { MOD_TABLE (MOD_VEX_W_1_0F3A32_P_2_LEN_0) },
43234a1e 11468 },
1ba585e8
IT
11469 {
11470 /* VEX_W_0F3A33_P_2_LEN_0 */
ab4e4ed5
AF
11471 { MOD_TABLE (MOD_VEX_W_0_0F3A33_P_2_LEN_0) },
11472 { MOD_TABLE (MOD_VEX_W_1_0F3A33_P_2_LEN_0) },
1ba585e8 11473 },
6c30d220
L
11474 {
11475 /* VEX_W_0F3A38_P_2 */
bf890a93 11476 { "vinserti128", { XM, Vex256, EXxmm, Ib }, 0 },
6c30d220
L
11477 },
11478 {
11479 /* VEX_W_0F3A39_P_2 */
bf890a93 11480 { "vextracti128", { EXxmm, XM, Ib }, 0 },
6c30d220 11481 },
9e30b8e0 11482 {
592a252b 11483 /* VEX_W_0F3A40_P_2 */
bf890a93 11484 { "vdpps", { XM, Vex, EXx, Ib }, 0 },
9e30b8e0
L
11485 },
11486 {
592a252b 11487 /* VEX_W_0F3A41_P_2 */
bf890a93 11488 { "vdppd", { XM, Vex128, EXx, Ib }, 0 },
9e30b8e0
L
11489 },
11490 {
592a252b 11491 /* VEX_W_0F3A42_P_2 */
bf890a93 11492 { "vmpsadbw", { XM, Vex, EXx, Ib }, 0 },
9e30b8e0 11493 },
6c30d220
L
11494 {
11495 /* VEX_W_0F3A46_P_2 */
bf890a93 11496 { "vperm2i128", { XM, Vex256, EXx, Ib }, 0 },
6c30d220 11497 },
a683cc34 11498 {
592a252b 11499 /* VEX_W_0F3A48_P_2 */
bf890a93
IT
11500 { "vpermil2ps", { XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW }, 0 },
11501 { "vpermil2ps", { XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW }, 0 },
a683cc34
SP
11502 },
11503 {
592a252b 11504 /* VEX_W_0F3A49_P_2 */
bf890a93
IT
11505 { "vpermil2pd", { XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW }, 0 },
11506 { "vpermil2pd", { XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW }, 0 },
a683cc34 11507 },
9e30b8e0 11508 {
592a252b 11509 /* VEX_W_0F3A4A_P_2 */
bf890a93 11510 { "vblendvps", { XM, Vex, EXx, XMVexI4 }, 0 },
9e30b8e0
L
11511 },
11512 {
592a252b 11513 /* VEX_W_0F3A4B_P_2 */
bf890a93 11514 { "vblendvpd", { XM, Vex, EXx, XMVexI4 }, 0 },
9e30b8e0
L
11515 },
11516 {
592a252b 11517 /* VEX_W_0F3A4C_P_2 */
bf890a93 11518 { "vpblendvb", { XM, Vex, EXx, XMVexI4 }, 0 },
9e30b8e0 11519 },
9e30b8e0 11520 {
592a252b 11521 /* VEX_W_0F3A62_P_2 */
bf890a93 11522 { "vpcmpistrm", { XM, EXx, Ib }, 0 },
9e30b8e0
L
11523 },
11524 {
592a252b 11525 /* VEX_W_0F3A63_P_2 */
bf890a93 11526 { "vpcmpistri", { XM, EXx, Ib }, 0 },
9e30b8e0 11527 },
48521003
IT
11528 {
11529 /* VEX_W_0F3ACE_P_2 */
11530 { Bad_Opcode },
11531 { "vgf2p8affineqb", { XM, Vex, EXx, Ib }, 0 },
11532 },
11533 {
11534 /* VEX_W_0F3ACF_P_2 */
11535 { Bad_Opcode },
11536 { "vgf2p8affineinvqb", { XM, Vex, EXx, Ib }, 0 },
11537 },
9e30b8e0 11538 {
592a252b 11539 /* VEX_W_0F3ADF_P_2 */
bf890a93 11540 { "vaeskeygenassist", { XM, EXx, Ib }, 0 },
9e30b8e0 11541 },
43234a1e
L
11542#define NEED_VEX_W_TABLE
11543#include "i386-dis-evex.h"
11544#undef NEED_VEX_W_TABLE
9e30b8e0
L
11545};
11546
11547static const struct dis386 mod_table[][2] = {
11548 {
11549 /* MOD_8D */
bf890a93 11550 { "leaS", { Gv, M }, 0 },
9e30b8e0 11551 },
42164a71
L
11552 {
11553 /* MOD_C6_REG_7 */
11554 { Bad_Opcode },
11555 { RM_TABLE (RM_C6_REG_7) },
11556 },
11557 {
11558 /* MOD_C7_REG_7 */
11559 { Bad_Opcode },
11560 { RM_TABLE (RM_C7_REG_7) },
11561 },
4a357820
MZ
11562 {
11563 /* MOD_FF_REG_3 */
a72d2af2 11564 { "Jcall^", { indirEp }, 0 },
4a357820
MZ
11565 },
11566 {
11567 /* MOD_FF_REG_5 */
a72d2af2 11568 { "Jjmp^", { indirEp }, 0 },
4a357820 11569 },
9e30b8e0
L
11570 {
11571 /* MOD_0F01_REG_0 */
11572 { X86_64_TABLE (X86_64_0F01_REG_0) },
11573 { RM_TABLE (RM_0F01_REG_0) },
11574 },
11575 {
11576 /* MOD_0F01_REG_1 */
11577 { X86_64_TABLE (X86_64_0F01_REG_1) },
11578 { RM_TABLE (RM_0F01_REG_1) },
11579 },
11580 {
11581 /* MOD_0F01_REG_2 */
11582 { X86_64_TABLE (X86_64_0F01_REG_2) },
11583 { RM_TABLE (RM_0F01_REG_2) },
11584 },
11585 {
11586 /* MOD_0F01_REG_3 */
11587 { X86_64_TABLE (X86_64_0F01_REG_3) },
11588 { RM_TABLE (RM_0F01_REG_3) },
11589 },
8eab4136
L
11590 {
11591 /* MOD_0F01_REG_5 */
603555e5 11592 { PREFIX_TABLE (PREFIX_MOD_0_0F01_REG_5) },
8eab4136
L
11593 { RM_TABLE (RM_0F01_REG_5) },
11594 },
9e30b8e0
L
11595 {
11596 /* MOD_0F01_REG_7 */
bf890a93 11597 { "invlpg", { Mb }, 0 },
9e30b8e0
L
11598 { RM_TABLE (RM_0F01_REG_7) },
11599 },
11600 {
11601 /* MOD_0F12_PREFIX_0 */
507bd325
L
11602 { "movlps", { XM, EXq }, PREFIX_OPCODE },
11603 { "movhlps", { XM, EXq }, PREFIX_OPCODE },
9e30b8e0
L
11604 },
11605 {
11606 /* MOD_0F13 */
507bd325 11607 { "movlpX", { EXq, XM }, PREFIX_OPCODE },
9e30b8e0
L
11608 },
11609 {
11610 /* MOD_0F16_PREFIX_0 */
bf890a93
IT
11611 { "movhps", { XM, EXq }, 0 },
11612 { "movlhps", { XM, EXq }, 0 },
9e30b8e0
L
11613 },
11614 {
11615 /* MOD_0F17 */
507bd325 11616 { "movhpX", { EXq, XM }, PREFIX_OPCODE },
9e30b8e0
L
11617 },
11618 {
11619 /* MOD_0F18_REG_0 */
bf890a93 11620 { "prefetchnta", { Mb }, 0 },
9e30b8e0
L
11621 },
11622 {
11623 /* MOD_0F18_REG_1 */
bf890a93 11624 { "prefetcht0", { Mb }, 0 },
9e30b8e0
L
11625 },
11626 {
11627 /* MOD_0F18_REG_2 */
bf890a93 11628 { "prefetcht1", { Mb }, 0 },
9e30b8e0
L
11629 },
11630 {
11631 /* MOD_0F18_REG_3 */
bf890a93 11632 { "prefetcht2", { Mb }, 0 },
9e30b8e0 11633 },
d7189fa5
RM
11634 {
11635 /* MOD_0F18_REG_4 */
bf890a93 11636 { "nop/reserved", { Mb }, 0 },
d7189fa5
RM
11637 },
11638 {
11639 /* MOD_0F18_REG_5 */
bf890a93 11640 { "nop/reserved", { Mb }, 0 },
d7189fa5
RM
11641 },
11642 {
11643 /* MOD_0F18_REG_6 */
bf890a93 11644 { "nop/reserved", { Mb }, 0 },
d7189fa5
RM
11645 },
11646 {
11647 /* MOD_0F18_REG_7 */
bf890a93 11648 { "nop/reserved", { Mb }, 0 },
d7189fa5 11649 },
7e8b059b
L
11650 {
11651 /* MOD_0F1A_PREFIX_0 */
d276ec69 11652 { "bndldx", { Gbnd, Mv_bnd }, 0 },
bf890a93 11653 { "nopQ", { Ev }, 0 },
7e8b059b
L
11654 },
11655 {
11656 /* MOD_0F1B_PREFIX_0 */
d276ec69 11657 { "bndstx", { Mv_bnd, Gbnd }, 0 },
bf890a93 11658 { "nopQ", { Ev }, 0 },
7e8b059b
L
11659 },
11660 {
11661 /* MOD_0F1B_PREFIX_1 */
d276ec69 11662 { "bndmk", { Gbnd, Mv_bnd }, 0 },
bf890a93 11663 { "nopQ", { Ev }, 0 },
7e8b059b 11664 },
c48935d7
IT
11665 {
11666 /* MOD_0F1C_PREFIX_0 */
11667 { REG_TABLE (REG_0F1C_MOD_0) },
11668 { "nopQ", { Ev }, 0 },
11669 },
603555e5
L
11670 {
11671 /* MOD_0F1E_PREFIX_1 */
11672 { "nopQ", { Ev }, 0 },
11673 { REG_TABLE (REG_0F1E_MOD_3) },
11674 },
b844680a 11675 {
92fddf8e 11676 /* MOD_0F24 */
7bb15c6f 11677 { Bad_Opcode },
bf890a93 11678 { "movL", { Rd, Td }, 0 },
b844680a
L
11679 },
11680 {
92fddf8e 11681 /* MOD_0F26 */
592d1631 11682 { Bad_Opcode },
bf890a93 11683 { "movL", { Td, Rd }, 0 },
b844680a 11684 },
75c135a8
L
11685 {
11686 /* MOD_0F2B_PREFIX_0 */
507bd325 11687 {"movntps", { Mx, XM }, PREFIX_OPCODE },
75c135a8
L
11688 },
11689 {
11690 /* MOD_0F2B_PREFIX_1 */
507bd325 11691 {"movntss", { Md, XM }, PREFIX_OPCODE },
75c135a8
L
11692 },
11693 {
11694 /* MOD_0F2B_PREFIX_2 */
507bd325 11695 {"movntpd", { Mx, XM }, PREFIX_OPCODE },
75c135a8
L
11696 },
11697 {
11698 /* MOD_0F2B_PREFIX_3 */
507bd325 11699 {"movntsd", { Mq, XM }, PREFIX_OPCODE },
75c135a8
L
11700 },
11701 {
11702 /* MOD_0F51 */
592d1631 11703 { Bad_Opcode },
507bd325 11704 { "movmskpX", { Gdq, XS }, PREFIX_OPCODE },
75c135a8 11705 },
b844680a 11706 {
1ceb70f8 11707 /* MOD_0F71_REG_2 */
592d1631 11708 { Bad_Opcode },
bf890a93 11709 { "psrlw", { MS, Ib }, 0 },
b844680a
L
11710 },
11711 {
1ceb70f8 11712 /* MOD_0F71_REG_4 */
592d1631 11713 { Bad_Opcode },
bf890a93 11714 { "psraw", { MS, Ib }, 0 },
b844680a
L
11715 },
11716 {
1ceb70f8 11717 /* MOD_0F71_REG_6 */
592d1631 11718 { Bad_Opcode },
bf890a93 11719 { "psllw", { MS, Ib }, 0 },
b844680a
L
11720 },
11721 {
1ceb70f8 11722 /* MOD_0F72_REG_2 */
592d1631 11723 { Bad_Opcode },
bf890a93 11724 { "psrld", { MS, Ib }, 0 },
b844680a
L
11725 },
11726 {
1ceb70f8 11727 /* MOD_0F72_REG_4 */
592d1631 11728 { Bad_Opcode },
bf890a93 11729 { "psrad", { MS, Ib }, 0 },
b844680a
L
11730 },
11731 {
1ceb70f8 11732 /* MOD_0F72_REG_6 */
592d1631 11733 { Bad_Opcode },
bf890a93 11734 { "pslld", { MS, Ib }, 0 },
b844680a
L
11735 },
11736 {
1ceb70f8 11737 /* MOD_0F73_REG_2 */
592d1631 11738 { Bad_Opcode },
bf890a93 11739 { "psrlq", { MS, Ib }, 0 },
b844680a
L
11740 },
11741 {
1ceb70f8 11742 /* MOD_0F73_REG_3 */
592d1631 11743 { Bad_Opcode },
c0f3af97
L
11744 { PREFIX_TABLE (PREFIX_0F73_REG_3) },
11745 },
11746 {
11747 /* MOD_0F73_REG_6 */
592d1631 11748 { Bad_Opcode },
bf890a93 11749 { "psllq", { MS, Ib }, 0 },
c0f3af97
L
11750 },
11751 {
11752 /* MOD_0F73_REG_7 */
592d1631 11753 { Bad_Opcode },
c0f3af97
L
11754 { PREFIX_TABLE (PREFIX_0F73_REG_7) },
11755 },
11756 {
11757 /* MOD_0FAE_REG_0 */
bf890a93 11758 { "fxsave", { FXSAVE }, 0 },
c7b8aa3a 11759 { PREFIX_TABLE (PREFIX_0FAE_REG_0) },
c0f3af97
L
11760 },
11761 {
11762 /* MOD_0FAE_REG_1 */
bf890a93 11763 { "fxrstor", { FXSAVE }, 0 },
c7b8aa3a 11764 { PREFIX_TABLE (PREFIX_0FAE_REG_1) },
c0f3af97
L
11765 },
11766 {
11767 /* MOD_0FAE_REG_2 */
bf890a93 11768 { "ldmxcsr", { Md }, 0 },
c7b8aa3a 11769 { PREFIX_TABLE (PREFIX_0FAE_REG_2) },
c0f3af97
L
11770 },
11771 {
11772 /* MOD_0FAE_REG_3 */
bf890a93 11773 { "stmxcsr", { Md }, 0 },
c7b8aa3a 11774 { PREFIX_TABLE (PREFIX_0FAE_REG_3) },
c0f3af97
L
11775 },
11776 {
11777 /* MOD_0FAE_REG_4 */
6b40c462
L
11778 { PREFIX_TABLE (PREFIX_MOD_0_0FAE_REG_4) },
11779 { PREFIX_TABLE (PREFIX_MOD_3_0FAE_REG_4) },
c0f3af97
L
11780 },
11781 {
11782 /* MOD_0FAE_REG_5 */
603555e5 11783 { PREFIX_TABLE (PREFIX_MOD_0_0FAE_REG_5) },
2234eee6 11784 { PREFIX_TABLE (PREFIX_MOD_3_0FAE_REG_5) },
c0f3af97
L
11785 },
11786 {
11787 /* MOD_0FAE_REG_6 */
de89d0a3
IT
11788 { PREFIX_TABLE (PREFIX_MOD_0_0FAE_REG_6) },
11789 { PREFIX_TABLE (PREFIX_MOD_1_0FAE_REG_6) },
c0f3af97
L
11790 },
11791 {
11792 /* MOD_0FAE_REG_7 */
963f3586 11793 { PREFIX_TABLE (PREFIX_0FAE_REG_7) },
c0f3af97
L
11794 { RM_TABLE (RM_0FAE_REG_7) },
11795 },
11796 {
11797 /* MOD_0FB2 */
bf890a93 11798 { "lssS", { Gv, Mp }, 0 },
c0f3af97
L
11799 },
11800 {
11801 /* MOD_0FB4 */
bf890a93 11802 { "lfsS", { Gv, Mp }, 0 },
c0f3af97
L
11803 },
11804 {
11805 /* MOD_0FB5 */
bf890a93 11806 { "lgsS", { Gv, Mp }, 0 },
c0f3af97 11807 },
a8484f96
L
11808 {
11809 /* MOD_0FC3 */
11810 { PREFIX_TABLE (PREFIX_MOD_0_0FC3) },
11811 },
963f3586
IT
11812 {
11813 /* MOD_0FC7_REG_3 */
a8484f96 11814 { "xrstors", { FXSAVE }, 0 },
963f3586
IT
11815 },
11816 {
11817 /* MOD_0FC7_REG_4 */
bf890a93 11818 { "xsavec", { FXSAVE }, 0 },
963f3586
IT
11819 },
11820 {
11821 /* MOD_0FC7_REG_5 */
bf890a93 11822 { "xsaves", { FXSAVE }, 0 },
963f3586 11823 },
c0f3af97
L
11824 {
11825 /* MOD_0FC7_REG_6 */
f24bcbaa
L
11826 { PREFIX_TABLE (PREFIX_MOD_0_0FC7_REG_6) },
11827 { PREFIX_TABLE (PREFIX_MOD_3_0FC7_REG_6) }
c0f3af97
L
11828 },
11829 {
11830 /* MOD_0FC7_REG_7 */
bf890a93 11831 { "vmptrst", { Mq }, 0 },
f24bcbaa 11832 { PREFIX_TABLE (PREFIX_MOD_3_0FC7_REG_7) }
c0f3af97
L
11833 },
11834 {
11835 /* MOD_0FD7 */
592d1631 11836 { Bad_Opcode },
bf890a93 11837 { "pmovmskb", { Gdq, MS }, 0 },
c0f3af97
L
11838 },
11839 {
11840 /* MOD_0FE7_PREFIX_2 */
bf890a93 11841 { "movntdq", { Mx, XM }, 0 },
c0f3af97
L
11842 },
11843 {
11844 /* MOD_0FF0_PREFIX_3 */
bf890a93 11845 { "lddqu", { XM, M }, 0 },
c0f3af97
L
11846 },
11847 {
11848 /* MOD_0F382A_PREFIX_2 */
bf890a93 11849 { "movntdqa", { XM, Mx }, 0 },
c0f3af97 11850 },
603555e5
L
11851 {
11852 /* MOD_0F38F5_PREFIX_2 */
11853 { "wrussK", { M, Gdq }, PREFIX_OPCODE },
11854 },
11855 {
11856 /* MOD_0F38F6_PREFIX_0 */
11857 { "wrssK", { M, Gdq }, PREFIX_OPCODE },
11858 },
c0a30a9f
L
11859 {
11860 /* MOD_0F38F8_PREFIX_2 */
11861 { "movdir64b", { Gva, M }, PREFIX_OPCODE },
11862 },
11863 {
11864 /* MOD_0F38F9_PREFIX_0 */
11865 { "movdiri", { Em, Gv }, PREFIX_OPCODE },
11866 },
c0f3af97
L
11867 {
11868 /* MOD_62_32BIT */
bf890a93 11869 { "bound{S|}", { Gv, Ma }, 0 },
43234a1e 11870 { EVEX_TABLE (EVEX_0F) },
c0f3af97
L
11871 },
11872 {
11873 /* MOD_C4_32BIT */
bf890a93 11874 { "lesS", { Gv, Mp }, 0 },
c0f3af97
L
11875 { VEX_C4_TABLE (VEX_0F) },
11876 },
11877 {
11878 /* MOD_C5_32BIT */
bf890a93 11879 { "ldsS", { Gv, Mp }, 0 },
c0f3af97
L
11880 { VEX_C5_TABLE (VEX_0F) },
11881 },
11882 {
592a252b
L
11883 /* MOD_VEX_0F12_PREFIX_0 */
11884 { VEX_LEN_TABLE (VEX_LEN_0F12_P_0_M_0) },
11885 { VEX_LEN_TABLE (VEX_LEN_0F12_P_0_M_1) },
c0f3af97
L
11886 },
11887 {
592a252b
L
11888 /* MOD_VEX_0F13 */
11889 { VEX_LEN_TABLE (VEX_LEN_0F13_M_0) },
c0f3af97
L
11890 },
11891 {
592a252b
L
11892 /* MOD_VEX_0F16_PREFIX_0 */
11893 { VEX_LEN_TABLE (VEX_LEN_0F16_P_0_M_0) },
11894 { VEX_LEN_TABLE (VEX_LEN_0F16_P_0_M_1) },
c0f3af97
L
11895 },
11896 {
592a252b
L
11897 /* MOD_VEX_0F17 */
11898 { VEX_LEN_TABLE (VEX_LEN_0F17_M_0) },
c0f3af97
L
11899 },
11900 {
592a252b
L
11901 /* MOD_VEX_0F2B */
11902 { VEX_W_TABLE (VEX_W_0F2B_M_0) },
c0f3af97 11903 },
ab4e4ed5
AF
11904 {
11905 /* MOD_VEX_W_0_0F41_P_0_LEN_1 */
11906 { Bad_Opcode },
11907 { "kandw", { MaskG, MaskVex, MaskR }, 0 },
11908 },
11909 {
11910 /* MOD_VEX_W_1_0F41_P_0_LEN_1 */
11911 { Bad_Opcode },
11912 { "kandq", { MaskG, MaskVex, MaskR }, 0 },
11913 },
11914 {
11915 /* MOD_VEX_W_0_0F41_P_2_LEN_1 */
11916 { Bad_Opcode },
11917 { "kandb", { MaskG, MaskVex, MaskR }, 0 },
11918 },
11919 {
11920 /* MOD_VEX_W_1_0F41_P_2_LEN_1 */
11921 { Bad_Opcode },
11922 { "kandd", { MaskG, MaskVex, MaskR }, 0 },
11923 },
11924 {
11925 /* MOD_VEX_W_0_0F42_P_0_LEN_1 */
11926 { Bad_Opcode },
11927 { "kandnw", { MaskG, MaskVex, MaskR }, 0 },
11928 },
11929 {
11930 /* MOD_VEX_W_1_0F42_P_0_LEN_1 */
11931 { Bad_Opcode },
11932 { "kandnq", { MaskG, MaskVex, MaskR }, 0 },
11933 },
11934 {
11935 /* MOD_VEX_W_0_0F42_P_2_LEN_1 */
11936 { Bad_Opcode },
11937 { "kandnb", { MaskG, MaskVex, MaskR }, 0 },
11938 },
11939 {
11940 /* MOD_VEX_W_1_0F42_P_2_LEN_1 */
11941 { Bad_Opcode },
11942 { "kandnd", { MaskG, MaskVex, MaskR }, 0 },
11943 },
11944 {
11945 /* MOD_VEX_W_0_0F44_P_0_LEN_0 */
11946 { Bad_Opcode },
11947 { "knotw", { MaskG, MaskR }, 0 },
11948 },
11949 {
11950 /* MOD_VEX_W_1_0F44_P_0_LEN_0 */
11951 { Bad_Opcode },
11952 { "knotq", { MaskG, MaskR }, 0 },
11953 },
11954 {
11955 /* MOD_VEX_W_0_0F44_P_2_LEN_0 */
11956 { Bad_Opcode },
11957 { "knotb", { MaskG, MaskR }, 0 },
11958 },
11959 {
11960 /* MOD_VEX_W_1_0F44_P_2_LEN_0 */
11961 { Bad_Opcode },
11962 { "knotd", { MaskG, MaskR }, 0 },
11963 },
11964 {
11965 /* MOD_VEX_W_0_0F45_P_0_LEN_1 */
11966 { Bad_Opcode },
11967 { "korw", { MaskG, MaskVex, MaskR }, 0 },
11968 },
11969 {
11970 /* MOD_VEX_W_1_0F45_P_0_LEN_1 */
11971 { Bad_Opcode },
11972 { "korq", { MaskG, MaskVex, MaskR }, 0 },
11973 },
11974 {
11975 /* MOD_VEX_W_0_0F45_P_2_LEN_1 */
11976 { Bad_Opcode },
11977 { "korb", { MaskG, MaskVex, MaskR }, 0 },
11978 },
11979 {
11980 /* MOD_VEX_W_1_0F45_P_2_LEN_1 */
11981 { Bad_Opcode },
11982 { "kord", { MaskG, MaskVex, MaskR }, 0 },
11983 },
11984 {
11985 /* MOD_VEX_W_0_0F46_P_0_LEN_1 */
11986 { Bad_Opcode },
11987 { "kxnorw", { MaskG, MaskVex, MaskR }, 0 },
11988 },
11989 {
11990 /* MOD_VEX_W_1_0F46_P_0_LEN_1 */
11991 { Bad_Opcode },
11992 { "kxnorq", { MaskG, MaskVex, MaskR }, 0 },
11993 },
11994 {
11995 /* MOD_VEX_W_0_0F46_P_2_LEN_1 */
11996 { Bad_Opcode },
11997 { "kxnorb", { MaskG, MaskVex, MaskR }, 0 },
11998 },
11999 {
12000 /* MOD_VEX_W_1_0F46_P_2_LEN_1 */
12001 { Bad_Opcode },
12002 { "kxnord", { MaskG, MaskVex, MaskR }, 0 },
12003 },
12004 {
12005 /* MOD_VEX_W_0_0F47_P_0_LEN_1 */
12006 { Bad_Opcode },
12007 { "kxorw", { MaskG, MaskVex, MaskR }, 0 },
12008 },
12009 {
12010 /* MOD_VEX_W_1_0F47_P_0_LEN_1 */
12011 { Bad_Opcode },
12012 { "kxorq", { MaskG, MaskVex, MaskR }, 0 },
12013 },
12014 {
12015 /* MOD_VEX_W_0_0F47_P_2_LEN_1 */
12016 { Bad_Opcode },
12017 { "kxorb", { MaskG, MaskVex, MaskR }, 0 },
12018 },
12019 {
12020 /* MOD_VEX_W_1_0F47_P_2_LEN_1 */
12021 { Bad_Opcode },
12022 { "kxord", { MaskG, MaskVex, MaskR }, 0 },
12023 },
12024 {
12025 /* MOD_VEX_W_0_0F4A_P_0_LEN_1 */
12026 { Bad_Opcode },
12027 { "kaddw", { MaskG, MaskVex, MaskR }, 0 },
12028 },
12029 {
12030 /* MOD_VEX_W_1_0F4A_P_0_LEN_1 */
12031 { Bad_Opcode },
12032 { "kaddq", { MaskG, MaskVex, MaskR }, 0 },
12033 },
12034 {
12035 /* MOD_VEX_W_0_0F4A_P_2_LEN_1 */
12036 { Bad_Opcode },
12037 { "kaddb", { MaskG, MaskVex, MaskR }, 0 },
12038 },
12039 {
12040 /* MOD_VEX_W_1_0F4A_P_2_LEN_1 */
12041 { Bad_Opcode },
12042 { "kaddd", { MaskG, MaskVex, MaskR }, 0 },
12043 },
12044 {
12045 /* MOD_VEX_W_0_0F4B_P_0_LEN_1 */
12046 { Bad_Opcode },
12047 { "kunpckwd", { MaskG, MaskVex, MaskR }, 0 },
12048 },
12049 {
12050 /* MOD_VEX_W_1_0F4B_P_0_LEN_1 */
12051 { Bad_Opcode },
12052 { "kunpckdq", { MaskG, MaskVex, MaskR }, 0 },
12053 },
12054 {
12055 /* MOD_VEX_W_0_0F4B_P_2_LEN_1 */
12056 { Bad_Opcode },
12057 { "kunpckbw", { MaskG, MaskVex, MaskR }, 0 },
12058 },
c0f3af97 12059 {
592a252b 12060 /* MOD_VEX_0F50 */
592d1631 12061 { Bad_Opcode },
592a252b 12062 { VEX_W_TABLE (VEX_W_0F50_M_0) },
c0f3af97
L
12063 },
12064 {
592a252b 12065 /* MOD_VEX_0F71_REG_2 */
592d1631 12066 { Bad_Opcode },
592a252b 12067 { PREFIX_TABLE (PREFIX_VEX_0F71_REG_2) },
b844680a
L
12068 },
12069 {
592a252b 12070 /* MOD_VEX_0F71_REG_4 */
592d1631 12071 { Bad_Opcode },
592a252b 12072 { PREFIX_TABLE (PREFIX_VEX_0F71_REG_4) },
b844680a
L
12073 },
12074 {
592a252b 12075 /* MOD_VEX_0F71_REG_6 */
592d1631 12076 { Bad_Opcode },
592a252b 12077 { PREFIX_TABLE (PREFIX_VEX_0F71_REG_6) },
b844680a
L
12078 },
12079 {
592a252b 12080 /* MOD_VEX_0F72_REG_2 */
592d1631 12081 { Bad_Opcode },
592a252b 12082 { PREFIX_TABLE (PREFIX_VEX_0F72_REG_2) },
b844680a 12083 },
d8faab4e 12084 {
592a252b 12085 /* MOD_VEX_0F72_REG_4 */
592d1631 12086 { Bad_Opcode },
592a252b 12087 { PREFIX_TABLE (PREFIX_VEX_0F72_REG_4) },
d8faab4e
L
12088 },
12089 {
592a252b 12090 /* MOD_VEX_0F72_REG_6 */
592d1631 12091 { Bad_Opcode },
592a252b 12092 { PREFIX_TABLE (PREFIX_VEX_0F72_REG_6) },
d8faab4e 12093 },
876d4bfa 12094 {
592a252b 12095 /* MOD_VEX_0F73_REG_2 */
592d1631 12096 { Bad_Opcode },
592a252b 12097 { PREFIX_TABLE (PREFIX_VEX_0F73_REG_2) },
876d4bfa
L
12098 },
12099 {
592a252b 12100 /* MOD_VEX_0F73_REG_3 */
592d1631 12101 { Bad_Opcode },
592a252b 12102 { PREFIX_TABLE (PREFIX_VEX_0F73_REG_3) },
475a2301
L
12103 },
12104 {
592a252b 12105 /* MOD_VEX_0F73_REG_6 */
592d1631 12106 { Bad_Opcode },
592a252b 12107 { PREFIX_TABLE (PREFIX_VEX_0F73_REG_6) },
876d4bfa
L
12108 },
12109 {
592a252b 12110 /* MOD_VEX_0F73_REG_7 */
592d1631 12111 { Bad_Opcode },
592a252b 12112 { PREFIX_TABLE (PREFIX_VEX_0F73_REG_7) },
876d4bfa 12113 },
ab4e4ed5
AF
12114 {
12115 /* MOD_VEX_W_0_0F91_P_0_LEN_0 */
12116 { "kmovw", { Ew, MaskG }, 0 },
12117 { Bad_Opcode },
12118 },
12119 {
12120 /* MOD_VEX_W_0_0F91_P_0_LEN_0 */
12121 { "kmovq", { Eq, MaskG }, 0 },
12122 { Bad_Opcode },
12123 },
12124 {
12125 /* MOD_VEX_W_0_0F91_P_2_LEN_0 */
12126 { "kmovb", { Eb, MaskG }, 0 },
12127 { Bad_Opcode },
12128 },
12129 {
12130 /* MOD_VEX_W_0_0F91_P_2_LEN_0 */
12131 { "kmovd", { Ed, MaskG }, 0 },
12132 { Bad_Opcode },
12133 },
12134 {
12135 /* MOD_VEX_W_0_0F92_P_0_LEN_0 */
12136 { Bad_Opcode },
12137 { "kmovw", { MaskG, Rdq }, 0 },
12138 },
12139 {
12140 /* MOD_VEX_W_0_0F92_P_2_LEN_0 */
12141 { Bad_Opcode },
12142 { "kmovb", { MaskG, Rdq }, 0 },
12143 },
12144 {
12145 /* MOD_VEX_W_0_0F92_P_3_LEN_0 */
12146 { Bad_Opcode },
12147 { "kmovd", { MaskG, Rdq }, 0 },
12148 },
12149 {
12150 /* MOD_VEX_W_1_0F92_P_3_LEN_0 */
12151 { Bad_Opcode },
12152 { "kmovq", { MaskG, Rdq }, 0 },
12153 },
12154 {
12155 /* MOD_VEX_W_0_0F93_P_0_LEN_0 */
12156 { Bad_Opcode },
12157 { "kmovw", { Gdq, MaskR }, 0 },
12158 },
12159 {
12160 /* MOD_VEX_W_0_0F93_P_2_LEN_0 */
12161 { Bad_Opcode },
12162 { "kmovb", { Gdq, MaskR }, 0 },
12163 },
12164 {
12165 /* MOD_VEX_W_0_0F93_P_3_LEN_0 */
12166 { Bad_Opcode },
12167 { "kmovd", { Gdq, MaskR }, 0 },
12168 },
12169 {
12170 /* MOD_VEX_W_1_0F93_P_3_LEN_0 */
12171 { Bad_Opcode },
12172 { "kmovq", { Gdq, MaskR }, 0 },
12173 },
12174 {
12175 /* MOD_VEX_W_0_0F98_P_0_LEN_0 */
12176 { Bad_Opcode },
12177 { "kortestw", { MaskG, MaskR }, 0 },
12178 },
12179 {
12180 /* MOD_VEX_W_1_0F98_P_0_LEN_0 */
12181 { Bad_Opcode },
12182 { "kortestq", { MaskG, MaskR }, 0 },
12183 },
12184 {
12185 /* MOD_VEX_W_0_0F98_P_2_LEN_0 */
12186 { Bad_Opcode },
12187 { "kortestb", { MaskG, MaskR }, 0 },
12188 },
12189 {
12190 /* MOD_VEX_W_1_0F98_P_2_LEN_0 */
12191 { Bad_Opcode },
12192 { "kortestd", { MaskG, MaskR }, 0 },
12193 },
12194 {
12195 /* MOD_VEX_W_0_0F99_P_0_LEN_0 */
12196 { Bad_Opcode },
12197 { "ktestw", { MaskG, MaskR }, 0 },
12198 },
12199 {
12200 /* MOD_VEX_W_1_0F99_P_0_LEN_0 */
12201 { Bad_Opcode },
12202 { "ktestq", { MaskG, MaskR }, 0 },
12203 },
12204 {
12205 /* MOD_VEX_W_0_0F99_P_2_LEN_0 */
12206 { Bad_Opcode },
12207 { "ktestb", { MaskG, MaskR }, 0 },
12208 },
12209 {
12210 /* MOD_VEX_W_1_0F99_P_2_LEN_0 */
12211 { Bad_Opcode },
12212 { "ktestd", { MaskG, MaskR }, 0 },
12213 },
876d4bfa 12214 {
592a252b
L
12215 /* MOD_VEX_0FAE_REG_2 */
12216 { VEX_LEN_TABLE (VEX_LEN_0FAE_R_2_M_0) },
876d4bfa 12217 },
bbedc832 12218 {
592a252b
L
12219 /* MOD_VEX_0FAE_REG_3 */
12220 { VEX_LEN_TABLE (VEX_LEN_0FAE_R_3_M_0) },
bbedc832 12221 },
144c41d9 12222 {
592a252b 12223 /* MOD_VEX_0FD7_PREFIX_2 */
592d1631 12224 { Bad_Opcode },
6c30d220 12225 { VEX_W_TABLE (VEX_W_0FD7_P_2_M_1) },
144c41d9 12226 },
1afd85e3 12227 {
592a252b
L
12228 /* MOD_VEX_0FE7_PREFIX_2 */
12229 { VEX_W_TABLE (VEX_W_0FE7_P_2_M_0) },
1afd85e3
L
12230 },
12231 {
592a252b
L
12232 /* MOD_VEX_0FF0_PREFIX_3 */
12233 { VEX_W_TABLE (VEX_W_0FF0_P_3_M_0) },
92fddf8e 12234 },
75c135a8 12235 {
592a252b
L
12236 /* MOD_VEX_0F381A_PREFIX_2 */
12237 { VEX_LEN_TABLE (VEX_LEN_0F381A_P_2_M_0) },
75c135a8 12238 },
1afd85e3 12239 {
592a252b 12240 /* MOD_VEX_0F382A_PREFIX_2 */
6c30d220 12241 { VEX_W_TABLE (VEX_W_0F382A_P_2_M_0) },
1afd85e3 12242 },
75c135a8 12243 {
592a252b
L
12244 /* MOD_VEX_0F382C_PREFIX_2 */
12245 { VEX_W_TABLE (VEX_W_0F382C_P_2_M_0) },
75c135a8 12246 },
1afd85e3 12247 {
592a252b
L
12248 /* MOD_VEX_0F382D_PREFIX_2 */
12249 { VEX_W_TABLE (VEX_W_0F382D_P_2_M_0) },
1afd85e3
L
12250 },
12251 {
592a252b
L
12252 /* MOD_VEX_0F382E_PREFIX_2 */
12253 { VEX_W_TABLE (VEX_W_0F382E_P_2_M_0) },
1afd85e3
L
12254 },
12255 {
592a252b
L
12256 /* MOD_VEX_0F382F_PREFIX_2 */
12257 { VEX_W_TABLE (VEX_W_0F382F_P_2_M_0) },
1afd85e3 12258 },
6c30d220
L
12259 {
12260 /* MOD_VEX_0F385A_PREFIX_2 */
12261 { VEX_LEN_TABLE (VEX_LEN_0F385A_P_2_M_0) },
12262 },
12263 {
12264 /* MOD_VEX_0F388C_PREFIX_2 */
bf890a93 12265 { "vpmaskmov%LW", { XM, Vex, Mx }, 0 },
6c30d220
L
12266 },
12267 {
12268 /* MOD_VEX_0F388E_PREFIX_2 */
bf890a93 12269 { "vpmaskmov%LW", { Mx, Vex, XM }, 0 },
6c30d220 12270 },
ab4e4ed5
AF
12271 {
12272 /* MOD_VEX_W_0_0F3A30_P_2_LEN_0 */
12273 { Bad_Opcode },
12274 { "kshiftrb", { MaskG, MaskR, Ib }, 0 },
12275 },
12276 {
12277 /* MOD_VEX_W_1_0F3A30_P_2_LEN_0 */
12278 { Bad_Opcode },
12279 { "kshiftrw", { MaskG, MaskR, Ib }, 0 },
12280 },
12281 {
12282 /* MOD_VEX_W_0_0F3A31_P_2_LEN_0 */
12283 { Bad_Opcode },
12284 { "kshiftrd", { MaskG, MaskR, Ib }, 0 },
12285 },
12286 {
12287 /* MOD_VEX_W_1_0F3A31_P_2_LEN_0 */
12288 { Bad_Opcode },
12289 { "kshiftrq", { MaskG, MaskR, Ib }, 0 },
12290 },
12291 {
12292 /* MOD_VEX_W_0_0F3A32_P_2_LEN_0 */
12293 { Bad_Opcode },
12294 { "kshiftlb", { MaskG, MaskR, Ib }, 0 },
12295 },
12296 {
12297 /* MOD_VEX_W_1_0F3A32_P_2_LEN_0 */
12298 { Bad_Opcode },
12299 { "kshiftlw", { MaskG, MaskR, Ib }, 0 },
12300 },
12301 {
12302 /* MOD_VEX_W_0_0F3A33_P_2_LEN_0 */
12303 { Bad_Opcode },
12304 { "kshiftld", { MaskG, MaskR, Ib }, 0 },
12305 },
12306 {
12307 /* MOD_VEX_W_1_0F3A33_P_2_LEN_0 */
12308 { Bad_Opcode },
12309 { "kshiftlq", { MaskG, MaskR, Ib }, 0 },
12310 },
43234a1e
L
12311#define NEED_MOD_TABLE
12312#include "i386-dis-evex.h"
12313#undef NEED_MOD_TABLE
b844680a
L
12314};
12315
1ceb70f8 12316static const struct dis386 rm_table[][8] = {
42164a71
L
12317 {
12318 /* RM_C6_REG_7 */
bf890a93 12319 { "xabort", { Skip_MODRM, Ib }, 0 },
42164a71
L
12320 },
12321 {
12322 /* RM_C7_REG_7 */
bf890a93 12323 { "xbeginT", { Skip_MODRM, Jv }, 0 },
42164a71 12324 },
b844680a 12325 {
1ceb70f8 12326 /* RM_0F01_REG_0 */
592d1631 12327 { Bad_Opcode },
bf890a93
IT
12328 { "vmcall", { Skip_MODRM }, 0 },
12329 { "vmlaunch", { Skip_MODRM }, 0 },
12330 { "vmresume", { Skip_MODRM }, 0 },
12331 { "vmxoff", { Skip_MODRM }, 0 },
be3a8dca 12332 { "pconfig", { Skip_MODRM }, 0 },
b844680a
L
12333 },
12334 {
1ceb70f8 12335 /* RM_0F01_REG_1 */
bf890a93
IT
12336 { "monitor", { { OP_Monitor, 0 } }, 0 },
12337 { "mwait", { { OP_Mwait, 0 } }, 0 },
12338 { "clac", { Skip_MODRM }, 0 },
12339 { "stac", { Skip_MODRM }, 0 },
2cf200a4
IT
12340 { Bad_Opcode },
12341 { Bad_Opcode },
12342 { Bad_Opcode },
bf890a93 12343 { "encls", { Skip_MODRM }, 0 },
b844680a 12344 },
475a2301
L
12345 {
12346 /* RM_0F01_REG_2 */
bf890a93
IT
12347 { "xgetbv", { Skip_MODRM }, 0 },
12348 { "xsetbv", { Skip_MODRM }, 0 },
8729a6f6
L
12349 { Bad_Opcode },
12350 { Bad_Opcode },
bf890a93
IT
12351 { "vmfunc", { Skip_MODRM }, 0 },
12352 { "xend", { Skip_MODRM }, 0 },
12353 { "xtest", { Skip_MODRM }, 0 },
12354 { "enclu", { Skip_MODRM }, 0 },
475a2301 12355 },
b844680a 12356 {
1ceb70f8 12357 /* RM_0F01_REG_3 */
bf890a93
IT
12358 { "vmrun", { Skip_MODRM }, 0 },
12359 { "vmmcall", { Skip_MODRM }, 0 },
12360 { "vmload", { Skip_MODRM }, 0 },
12361 { "vmsave", { Skip_MODRM }, 0 },
12362 { "stgi", { Skip_MODRM }, 0 },
12363 { "clgi", { Skip_MODRM }, 0 },
12364 { "skinit", { Skip_MODRM }, 0 },
12365 { "invlpga", { Skip_MODRM }, 0 },
4e7d34a6 12366 },
8eab4136
L
12367 {
12368 /* RM_0F01_REG_5 */
2234eee6 12369 { PREFIX_TABLE (PREFIX_MOD_3_0F01_REG_5_RM_0) },
8eab4136 12370 { Bad_Opcode },
603555e5 12371 { PREFIX_TABLE (PREFIX_MOD_3_0F01_REG_5_RM_2) },
8eab4136
L
12372 { Bad_Opcode },
12373 { Bad_Opcode },
12374 { Bad_Opcode },
12375 { "rdpkru", { Skip_MODRM }, 0 },
12376 { "wrpkru", { Skip_MODRM }, 0 },
12377 },
4e7d34a6 12378 {
1ceb70f8 12379 /* RM_0F01_REG_7 */
bf890a93
IT
12380 { "swapgs", { Skip_MODRM }, 0 },
12381 { "rdtscp", { Skip_MODRM }, 0 },
9916071f
AP
12382 { "monitorx", { { OP_Monitor, 0 } }, 0 },
12383 { "mwaitx", { { OP_Mwaitx, 0 } }, 0 },
bf890a93 12384 { "clzero", { Skip_MODRM }, 0 },
b844680a 12385 },
603555e5
L
12386 {
12387 /* RM_0F1E_MOD_3_REG_7 */
12388 { "nopQ", { Ev }, 0 },
12389 { "nopQ", { Ev }, 0 },
12390 { "endbr64", { Skip_MODRM }, PREFIX_OPCODE },
12391 { "endbr32", { Skip_MODRM }, PREFIX_OPCODE },
12392 { "nopQ", { Ev }, 0 },
12393 { "nopQ", { Ev }, 0 },
12394 { "nopQ", { Ev }, 0 },
12395 { "nopQ", { Ev }, 0 },
12396 },
b844680a 12397 {
1ceb70f8 12398 /* RM_0FAE_REG_6 */
bf890a93 12399 { "mfence", { Skip_MODRM }, 0 },
b844680a 12400 },
bbedc832 12401 {
1ceb70f8 12402 /* RM_0FAE_REG_7 */
b5cefcca
L
12403 { "sfence", { Skip_MODRM }, 0 },
12404
144c41d9 12405 },
b844680a
L
12406};
12407
c608c12e
AM
12408#define INTERNAL_DISASSEMBLER_ERROR _("<internal disassembler error>")
12409
f16cd0d5
L
12410/* We use the high bit to indicate different name for the same
12411 prefix. */
f16cd0d5 12412#define REP_PREFIX (0xf3 | 0x100)
42164a71
L
12413#define XACQUIRE_PREFIX (0xf2 | 0x200)
12414#define XRELEASE_PREFIX (0xf3 | 0x400)
7e8b059b 12415#define BND_PREFIX (0xf2 | 0x400)
04ef582a 12416#define NOTRACK_PREFIX (0x3e | 0x100)
f16cd0d5
L
12417
12418static int
26ca5450 12419ckprefix (void)
252b5132 12420{
f16cd0d5 12421 int newrex, i, length;
52b15da3 12422 rex = 0;
c0f3af97 12423 rex_ignored = 0;
252b5132 12424 prefixes = 0;
7d421014 12425 used_prefixes = 0;
52b15da3 12426 rex_used = 0;
f16cd0d5
L
12427 last_lock_prefix = -1;
12428 last_repz_prefix = -1;
12429 last_repnz_prefix = -1;
12430 last_data_prefix = -1;
12431 last_addr_prefix = -1;
12432 last_rex_prefix = -1;
12433 last_seg_prefix = -1;
d9949a36 12434 fwait_prefix = -1;
285ca992 12435 active_seg_prefix = 0;
f310f33d
L
12436 for (i = 0; i < (int) ARRAY_SIZE (all_prefixes); i++)
12437 all_prefixes[i] = 0;
12438 i = 0;
f16cd0d5
L
12439 length = 0;
12440 /* The maximum instruction length is 15bytes. */
12441 while (length < MAX_CODE_LENGTH - 1)
252b5132
RH
12442 {
12443 FETCH_DATA (the_info, codep + 1);
52b15da3 12444 newrex = 0;
252b5132
RH
12445 switch (*codep)
12446 {
52b15da3
JH
12447 /* REX prefixes family. */
12448 case 0x40:
12449 case 0x41:
12450 case 0x42:
12451 case 0x43:
12452 case 0x44:
12453 case 0x45:
12454 case 0x46:
12455 case 0x47:
12456 case 0x48:
12457 case 0x49:
12458 case 0x4a:
12459 case 0x4b:
12460 case 0x4c:
12461 case 0x4d:
12462 case 0x4e:
12463 case 0x4f:
f16cd0d5
L
12464 if (address_mode == mode_64bit)
12465 newrex = *codep;
12466 else
12467 return 1;
12468 last_rex_prefix = i;
52b15da3 12469 break;
252b5132
RH
12470 case 0xf3:
12471 prefixes |= PREFIX_REPZ;
f16cd0d5 12472 last_repz_prefix = i;
252b5132
RH
12473 break;
12474 case 0xf2:
12475 prefixes |= PREFIX_REPNZ;
f16cd0d5 12476 last_repnz_prefix = i;
252b5132
RH
12477 break;
12478 case 0xf0:
12479 prefixes |= PREFIX_LOCK;
f16cd0d5 12480 last_lock_prefix = i;
252b5132
RH
12481 break;
12482 case 0x2e:
12483 prefixes |= PREFIX_CS;
f16cd0d5 12484 last_seg_prefix = i;
285ca992 12485 active_seg_prefix = PREFIX_CS;
252b5132
RH
12486 break;
12487 case 0x36:
12488 prefixes |= PREFIX_SS;
f16cd0d5 12489 last_seg_prefix = i;
285ca992 12490 active_seg_prefix = PREFIX_SS;
252b5132
RH
12491 break;
12492 case 0x3e:
12493 prefixes |= PREFIX_DS;
f16cd0d5 12494 last_seg_prefix = i;
285ca992 12495 active_seg_prefix = PREFIX_DS;
252b5132
RH
12496 break;
12497 case 0x26:
12498 prefixes |= PREFIX_ES;
f16cd0d5 12499 last_seg_prefix = i;
285ca992 12500 active_seg_prefix = PREFIX_ES;
252b5132
RH
12501 break;
12502 case 0x64:
12503 prefixes |= PREFIX_FS;
f16cd0d5 12504 last_seg_prefix = i;
285ca992 12505 active_seg_prefix = PREFIX_FS;
252b5132
RH
12506 break;
12507 case 0x65:
12508 prefixes |= PREFIX_GS;
f16cd0d5 12509 last_seg_prefix = i;
285ca992 12510 active_seg_prefix = PREFIX_GS;
252b5132
RH
12511 break;
12512 case 0x66:
12513 prefixes |= PREFIX_DATA;
f16cd0d5 12514 last_data_prefix = i;
252b5132
RH
12515 break;
12516 case 0x67:
12517 prefixes |= PREFIX_ADDR;
f16cd0d5 12518 last_addr_prefix = i;
252b5132 12519 break;
5076851f 12520 case FWAIT_OPCODE:
252b5132
RH
12521 /* fwait is really an instruction. If there are prefixes
12522 before the fwait, they belong to the fwait, *not* to the
12523 following instruction. */
d9949a36 12524 fwait_prefix = i;
3e7d61b2 12525 if (prefixes || rex)
252b5132
RH
12526 {
12527 prefixes |= PREFIX_FWAIT;
12528 codep++;
6c067bbb
RM
12529 /* This ensures that the previous REX prefixes are noticed
12530 as unused prefixes, as in the return case below. */
12531 rex_used = rex;
f16cd0d5 12532 return 1;
252b5132
RH
12533 }
12534 prefixes = PREFIX_FWAIT;
12535 break;
12536 default:
f16cd0d5 12537 return 1;
252b5132 12538 }
52b15da3
JH
12539 /* Rex is ignored when followed by another prefix. */
12540 if (rex)
12541 {
3e7d61b2 12542 rex_used = rex;
f16cd0d5 12543 return 1;
52b15da3 12544 }
f16cd0d5 12545 if (*codep != FWAIT_OPCODE)
4e9ac44a 12546 all_prefixes[i++] = *codep;
52b15da3 12547 rex = newrex;
252b5132 12548 codep++;
f16cd0d5
L
12549 length++;
12550 }
12551 return 0;
12552}
12553
7d421014
ILT
12554/* Return the name of the prefix byte PREF, or NULL if PREF is not a
12555 prefix byte. */
12556
12557static const char *
26ca5450 12558prefix_name (int pref, int sizeflag)
7d421014 12559{
0003779b
L
12560 static const char *rexes [16] =
12561 {
12562 "rex", /* 0x40 */
12563 "rex.B", /* 0x41 */
12564 "rex.X", /* 0x42 */
12565 "rex.XB", /* 0x43 */
12566 "rex.R", /* 0x44 */
12567 "rex.RB", /* 0x45 */
12568 "rex.RX", /* 0x46 */
12569 "rex.RXB", /* 0x47 */
12570 "rex.W", /* 0x48 */
12571 "rex.WB", /* 0x49 */
12572 "rex.WX", /* 0x4a */
12573 "rex.WXB", /* 0x4b */
12574 "rex.WR", /* 0x4c */
12575 "rex.WRB", /* 0x4d */
12576 "rex.WRX", /* 0x4e */
12577 "rex.WRXB", /* 0x4f */
12578 };
12579
7d421014
ILT
12580 switch (pref)
12581 {
52b15da3
JH
12582 /* REX prefixes family. */
12583 case 0x40:
52b15da3 12584 case 0x41:
52b15da3 12585 case 0x42:
52b15da3 12586 case 0x43:
52b15da3 12587 case 0x44:
52b15da3 12588 case 0x45:
52b15da3 12589 case 0x46:
52b15da3 12590 case 0x47:
52b15da3 12591 case 0x48:
52b15da3 12592 case 0x49:
52b15da3 12593 case 0x4a:
52b15da3 12594 case 0x4b:
52b15da3 12595 case 0x4c:
52b15da3 12596 case 0x4d:
52b15da3 12597 case 0x4e:
52b15da3 12598 case 0x4f:
0003779b 12599 return rexes [pref - 0x40];
7d421014
ILT
12600 case 0xf3:
12601 return "repz";
12602 case 0xf2:
12603 return "repnz";
12604 case 0xf0:
12605 return "lock";
12606 case 0x2e:
12607 return "cs";
12608 case 0x36:
12609 return "ss";
12610 case 0x3e:
12611 return "ds";
12612 case 0x26:
12613 return "es";
12614 case 0x64:
12615 return "fs";
12616 case 0x65:
12617 return "gs";
12618 case 0x66:
12619 return (sizeflag & DFLAG) ? "data16" : "data32";
12620 case 0x67:
cb712a9e 12621 if (address_mode == mode_64bit)
db6eb5be 12622 return (sizeflag & AFLAG) ? "addr32" : "addr64";
c1a64871 12623 else
2888cb7a 12624 return (sizeflag & AFLAG) ? "addr16" : "addr32";
7d421014
ILT
12625 case FWAIT_OPCODE:
12626 return "fwait";
f16cd0d5
L
12627 case REP_PREFIX:
12628 return "rep";
42164a71
L
12629 case XACQUIRE_PREFIX:
12630 return "xacquire";
12631 case XRELEASE_PREFIX:
12632 return "xrelease";
7e8b059b
L
12633 case BND_PREFIX:
12634 return "bnd";
04ef582a
L
12635 case NOTRACK_PREFIX:
12636 return "notrack";
7d421014
ILT
12637 default:
12638 return NULL;
12639 }
12640}
12641
ce518a5f
L
12642static char op_out[MAX_OPERANDS][100];
12643static int op_ad, op_index[MAX_OPERANDS];
1d9f512f 12644static int two_source_ops;
ce518a5f
L
12645static bfd_vma op_address[MAX_OPERANDS];
12646static bfd_vma op_riprel[MAX_OPERANDS];
52b15da3 12647static bfd_vma start_pc;
ce518a5f 12648
252b5132
RH
12649/*
12650 * On the 386's of 1988, the maximum length of an instruction is 15 bytes.
12651 * (see topic "Redundant prefixes" in the "Differences from 8086"
12652 * section of the "Virtual 8086 Mode" chapter.)
12653 * 'pc' should be the address of this instruction, it will
12654 * be used to print the target address if this is a relative jump or call
12655 * The function returns the length of this instruction in bytes.
12656 */
12657
252b5132 12658static char intel_syntax;
9d141669 12659static char intel_mnemonic = !SYSV386_COMPAT;
252b5132
RH
12660static char open_char;
12661static char close_char;
12662static char separator_char;
12663static char scale_char;
12664
5db04b09
L
12665enum x86_64_isa
12666{
12667 amd64 = 0,
12668 intel64
12669};
12670
12671static enum x86_64_isa isa64;
12672
e396998b
AM
12673/* Here for backwards compatibility. When gdb stops using
12674 print_insn_i386_att and print_insn_i386_intel these functions can
12675 disappear, and print_insn_i386 be merged into print_insn. */
252b5132 12676int
26ca5450 12677print_insn_i386_att (bfd_vma pc, disassemble_info *info)
252b5132
RH
12678{
12679 intel_syntax = 0;
e396998b
AM
12680
12681 return print_insn (pc, info);
252b5132
RH
12682}
12683
12684int
26ca5450 12685print_insn_i386_intel (bfd_vma pc, disassemble_info *info)
252b5132
RH
12686{
12687 intel_syntax = 1;
e396998b
AM
12688
12689 return print_insn (pc, info);
252b5132
RH
12690}
12691
e396998b 12692int
26ca5450 12693print_insn_i386 (bfd_vma pc, disassemble_info *info)
e396998b
AM
12694{
12695 intel_syntax = -1;
12696
12697 return print_insn (pc, info);
12698}
12699
f59a29b9
L
12700void
12701print_i386_disassembler_options (FILE *stream)
12702{
12703 fprintf (stream, _("\n\
12704The following i386/x86-64 specific disassembler options are supported for use\n\
12705with the -M switch (multiple options should be separated by commas):\n"));
12706
12707 fprintf (stream, _(" x86-64 Disassemble in 64bit mode\n"));
12708 fprintf (stream, _(" i386 Disassemble in 32bit mode\n"));
12709 fprintf (stream, _(" i8086 Disassemble in 16bit mode\n"));
12710 fprintf (stream, _(" att Display instruction in AT&T syntax\n"));
12711 fprintf (stream, _(" intel Display instruction in Intel syntax\n"));
9d141669
L
12712 fprintf (stream, _(" att-mnemonic\n"
12713 " Display instruction in AT&T mnemonic\n"));
12714 fprintf (stream, _(" intel-mnemonic\n"
12715 " Display instruction in Intel mnemonic\n"));
f59a29b9
L
12716 fprintf (stream, _(" addr64 Assume 64bit address size\n"));
12717 fprintf (stream, _(" addr32 Assume 32bit address size\n"));
12718 fprintf (stream, _(" addr16 Assume 16bit address size\n"));
12719 fprintf (stream, _(" data32 Assume 32bit data size\n"));
12720 fprintf (stream, _(" data16 Assume 16bit data size\n"));
12721 fprintf (stream, _(" suffix Always display instruction suffix in AT&T syntax\n"));
5db04b09
L
12722 fprintf (stream, _(" amd64 Display instruction in AMD64 ISA\n"));
12723 fprintf (stream, _(" intel64 Display instruction in Intel64 ISA\n"));
f59a29b9
L
12724}
12725
592d1631 12726/* Bad opcode. */
bf890a93 12727static const struct dis386 bad_opcode = { "(bad)", { XX }, 0 };
592d1631 12728
b844680a
L
12729/* Get a pointer to struct dis386 with a valid name. */
12730
12731static const struct dis386 *
8bb15339 12732get_valid_dis386 (const struct dis386 *dp, disassemble_info *info)
b844680a 12733{
91d6fa6a 12734 int vindex, vex_table_index;
b844680a
L
12735
12736 if (dp->name != NULL)
12737 return dp;
12738
12739 switch (dp->op[0].bytemode)
12740 {
1ceb70f8
L
12741 case USE_REG_TABLE:
12742 dp = &reg_table[dp->op[1].bytemode][modrm.reg];
12743 break;
12744
12745 case USE_MOD_TABLE:
91d6fa6a
NC
12746 vindex = modrm.mod == 0x3 ? 1 : 0;
12747 dp = &mod_table[dp->op[1].bytemode][vindex];
1ceb70f8
L
12748 break;
12749
12750 case USE_RM_TABLE:
12751 dp = &rm_table[dp->op[1].bytemode][modrm.rm];
b844680a
L
12752 break;
12753
4e7d34a6 12754 case USE_PREFIX_TABLE:
c0f3af97 12755 if (need_vex)
b844680a 12756 {
c0f3af97
L
12757 /* The prefix in VEX is implicit. */
12758 switch (vex.prefix)
12759 {
12760 case 0:
91d6fa6a 12761 vindex = 0;
c0f3af97
L
12762 break;
12763 case REPE_PREFIX_OPCODE:
91d6fa6a 12764 vindex = 1;
c0f3af97
L
12765 break;
12766 case DATA_PREFIX_OPCODE:
91d6fa6a 12767 vindex = 2;
c0f3af97
L
12768 break;
12769 case REPNE_PREFIX_OPCODE:
91d6fa6a 12770 vindex = 3;
c0f3af97
L
12771 break;
12772 default:
12773 abort ();
12774 break;
12775 }
b844680a 12776 }
7bb15c6f 12777 else
b844680a 12778 {
285ca992
L
12779 int last_prefix = -1;
12780 int prefix = 0;
91d6fa6a 12781 vindex = 0;
285ca992
L
12782 /* We check PREFIX_REPNZ and PREFIX_REPZ before PREFIX_DATA.
12783 When there are multiple PREFIX_REPNZ and PREFIX_REPZ, the
12784 last one wins. */
12785 if ((prefixes & (PREFIX_REPZ | PREFIX_REPNZ)) != 0)
b844680a 12786 {
285ca992 12787 if (last_repz_prefix > last_repnz_prefix)
c0f3af97 12788 {
285ca992
L
12789 vindex = 1;
12790 prefix = PREFIX_REPZ;
12791 last_prefix = last_repz_prefix;
c0f3af97
L
12792 }
12793 else
b844680a 12794 {
285ca992
L
12795 vindex = 3;
12796 prefix = PREFIX_REPNZ;
12797 last_prefix = last_repnz_prefix;
b844680a 12798 }
285ca992 12799
507bd325
L
12800 /* Check if prefix should be ignored. */
12801 if ((((prefix_table[dp->op[1].bytemode][vindex].prefix_requirement
12802 & PREFIX_IGNORED) >> PREFIX_IGNORED_SHIFT)
12803 & prefix) != 0)
285ca992
L
12804 vindex = 0;
12805 }
12806
12807 if (vindex == 0 && (prefixes & PREFIX_DATA) != 0)
12808 {
12809 vindex = 2;
12810 prefix = PREFIX_DATA;
12811 last_prefix = last_data_prefix;
12812 }
12813
12814 if (vindex != 0)
12815 {
12816 used_prefixes |= prefix;
12817 all_prefixes[last_prefix] = 0;
b844680a
L
12818 }
12819 }
91d6fa6a 12820 dp = &prefix_table[dp->op[1].bytemode][vindex];
b844680a
L
12821 break;
12822
4e7d34a6 12823 case USE_X86_64_TABLE:
91d6fa6a
NC
12824 vindex = address_mode == mode_64bit ? 1 : 0;
12825 dp = &x86_64_table[dp->op[1].bytemode][vindex];
b844680a
L
12826 break;
12827
4e7d34a6 12828 case USE_3BYTE_TABLE:
8bb15339 12829 FETCH_DATA (info, codep + 2);
91d6fa6a
NC
12830 vindex = *codep++;
12831 dp = &three_byte_table[dp->op[1].bytemode][vindex];
285ca992 12832 end_codep = codep;
8bb15339
L
12833 modrm.mod = (*codep >> 6) & 3;
12834 modrm.reg = (*codep >> 3) & 7;
12835 modrm.rm = *codep & 7;
12836 break;
12837
c0f3af97
L
12838 case USE_VEX_LEN_TABLE:
12839 if (!need_vex)
12840 abort ();
12841
12842 switch (vex.length)
12843 {
12844 case 128:
91d6fa6a 12845 vindex = 0;
c0f3af97
L
12846 break;
12847 case 256:
91d6fa6a 12848 vindex = 1;
c0f3af97
L
12849 break;
12850 default:
12851 abort ();
12852 break;
12853 }
12854
91d6fa6a 12855 dp = &vex_len_table[dp->op[1].bytemode][vindex];
c0f3af97
L
12856 break;
12857
f88c9eb0
SP
12858 case USE_XOP_8F_TABLE:
12859 FETCH_DATA (info, codep + 3);
12860 /* All bits in the REX prefix are ignored. */
12861 rex_ignored = rex;
12862 rex = ~(*codep >> 5) & 0x7;
12863
12864 /* VEX_TABLE_INDEX is the mmmmm part of the XOP byte 1 "RCB.mmmmm". */
12865 switch ((*codep & 0x1f))
12866 {
12867 default:
f07af43e
L
12868 dp = &bad_opcode;
12869 return dp;
5dd85c99
SP
12870 case 0x8:
12871 vex_table_index = XOP_08;
12872 break;
f88c9eb0
SP
12873 case 0x9:
12874 vex_table_index = XOP_09;
12875 break;
12876 case 0xa:
12877 vex_table_index = XOP_0A;
12878 break;
12879 }
12880 codep++;
12881 vex.w = *codep & 0x80;
12882 if (vex.w && address_mode == mode_64bit)
12883 rex |= REX_W;
12884
12885 vex.register_specifier = (~(*codep >> 3)) & 0xf;
abfcb414 12886 if (address_mode != mode_64bit)
f07af43e 12887 {
abfcb414
AP
12888 /* In 16/32-bit mode REX_B is silently ignored. */
12889 rex &= ~REX_B;
f07af43e 12890 }
f88c9eb0
SP
12891
12892 vex.length = (*codep & 0x4) ? 256 : 128;
12893 switch ((*codep & 0x3))
12894 {
12895 case 0:
f88c9eb0
SP
12896 break;
12897 case 1:
12898 vex.prefix = DATA_PREFIX_OPCODE;
12899 break;
12900 case 2:
12901 vex.prefix = REPE_PREFIX_OPCODE;
12902 break;
12903 case 3:
12904 vex.prefix = REPNE_PREFIX_OPCODE;
12905 break;
12906 }
12907 need_vex = 1;
12908 need_vex_reg = 1;
12909 codep++;
91d6fa6a
NC
12910 vindex = *codep++;
12911 dp = &xop_table[vex_table_index][vindex];
c48244a5 12912
285ca992 12913 end_codep = codep;
c48244a5
SP
12914 FETCH_DATA (info, codep + 1);
12915 modrm.mod = (*codep >> 6) & 3;
12916 modrm.reg = (*codep >> 3) & 7;
12917 modrm.rm = *codep & 7;
f88c9eb0
SP
12918 break;
12919
c0f3af97 12920 case USE_VEX_C4_TABLE:
43234a1e 12921 /* VEX prefix. */
c0f3af97
L
12922 FETCH_DATA (info, codep + 3);
12923 /* All bits in the REX prefix are ignored. */
12924 rex_ignored = rex;
12925 rex = ~(*codep >> 5) & 0x7;
12926 switch ((*codep & 0x1f))
12927 {
12928 default:
f07af43e
L
12929 dp = &bad_opcode;
12930 return dp;
c0f3af97 12931 case 0x1:
f88c9eb0 12932 vex_table_index = VEX_0F;
c0f3af97
L
12933 break;
12934 case 0x2:
f88c9eb0 12935 vex_table_index = VEX_0F38;
c0f3af97
L
12936 break;
12937 case 0x3:
f88c9eb0 12938 vex_table_index = VEX_0F3A;
c0f3af97
L
12939 break;
12940 }
12941 codep++;
12942 vex.w = *codep & 0x80;
9889cbb1 12943 if (address_mode == mode_64bit)
f07af43e 12944 {
9889cbb1
L
12945 if (vex.w)
12946 rex |= REX_W;
9889cbb1
L
12947 }
12948 else
12949 {
12950 /* For the 3-byte VEX prefix in 32-bit mode, the REX_B bit
12951 is ignored, other REX bits are 0 and the highest bit in
5f847646 12952 VEX.vvvv is also ignored (but we mustn't clear it here). */
9889cbb1 12953 rex = 0;
f07af43e 12954 }
5f847646 12955 vex.register_specifier = (~(*codep >> 3)) & 0xf;
c0f3af97
L
12956 vex.length = (*codep & 0x4) ? 256 : 128;
12957 switch ((*codep & 0x3))
12958 {
12959 case 0:
c0f3af97
L
12960 break;
12961 case 1:
12962 vex.prefix = DATA_PREFIX_OPCODE;
12963 break;
12964 case 2:
12965 vex.prefix = REPE_PREFIX_OPCODE;
12966 break;
12967 case 3:
12968 vex.prefix = REPNE_PREFIX_OPCODE;
12969 break;
12970 }
12971 need_vex = 1;
12972 need_vex_reg = 1;
12973 codep++;
91d6fa6a
NC
12974 vindex = *codep++;
12975 dp = &vex_table[vex_table_index][vindex];
285ca992 12976 end_codep = codep;
53c4d625
JB
12977 /* There is no MODRM byte for VEX0F 77. */
12978 if (vex_table_index != VEX_0F || vindex != 0x77)
c0f3af97
L
12979 {
12980 FETCH_DATA (info, codep + 1);
12981 modrm.mod = (*codep >> 6) & 3;
12982 modrm.reg = (*codep >> 3) & 7;
12983 modrm.rm = *codep & 7;
12984 }
12985 break;
12986
12987 case USE_VEX_C5_TABLE:
43234a1e 12988 /* VEX prefix. */
c0f3af97
L
12989 FETCH_DATA (info, codep + 2);
12990 /* All bits in the REX prefix are ignored. */
12991 rex_ignored = rex;
12992 rex = (*codep & 0x80) ? 0 : REX_R;
12993
9889cbb1
L
12994 /* For the 2-byte VEX prefix in 32-bit mode, the highest bit in
12995 VEX.vvvv is 1. */
c0f3af97 12996 vex.register_specifier = (~(*codep >> 3)) & 0xf;
c0f3af97
L
12997 vex.length = (*codep & 0x4) ? 256 : 128;
12998 switch ((*codep & 0x3))
12999 {
13000 case 0:
c0f3af97
L
13001 break;
13002 case 1:
13003 vex.prefix = DATA_PREFIX_OPCODE;
13004 break;
13005 case 2:
13006 vex.prefix = REPE_PREFIX_OPCODE;
13007 break;
13008 case 3:
13009 vex.prefix = REPNE_PREFIX_OPCODE;
13010 break;
13011 }
13012 need_vex = 1;
13013 need_vex_reg = 1;
13014 codep++;
91d6fa6a
NC
13015 vindex = *codep++;
13016 dp = &vex_table[dp->op[1].bytemode][vindex];
285ca992 13017 end_codep = codep;
53c4d625
JB
13018 /* There is no MODRM byte for VEX 77. */
13019 if (vindex != 0x77)
c0f3af97
L
13020 {
13021 FETCH_DATA (info, codep + 1);
13022 modrm.mod = (*codep >> 6) & 3;
13023 modrm.reg = (*codep >> 3) & 7;
13024 modrm.rm = *codep & 7;
13025 }
13026 break;
13027
9e30b8e0
L
13028 case USE_VEX_W_TABLE:
13029 if (!need_vex)
13030 abort ();
13031
13032 dp = &vex_w_table[dp->op[1].bytemode][vex.w ? 1 : 0];
13033 break;
13034
43234a1e
L
13035 case USE_EVEX_TABLE:
13036 two_source_ops = 0;
13037 /* EVEX prefix. */
13038 vex.evex = 1;
13039 FETCH_DATA (info, codep + 4);
13040 /* All bits in the REX prefix are ignored. */
13041 rex_ignored = rex;
13042 /* The first byte after 0x62. */
13043 rex = ~(*codep >> 5) & 0x7;
13044 vex.r = *codep & 0x10;
13045 switch ((*codep & 0xf))
13046 {
13047 default:
13048 return &bad_opcode;
13049 case 0x1:
13050 vex_table_index = EVEX_0F;
13051 break;
13052 case 0x2:
13053 vex_table_index = EVEX_0F38;
13054 break;
13055 case 0x3:
13056 vex_table_index = EVEX_0F3A;
13057 break;
13058 }
13059
13060 /* The second byte after 0x62. */
13061 codep++;
13062 vex.w = *codep & 0x80;
13063 if (vex.w && address_mode == mode_64bit)
13064 rex |= REX_W;
13065
13066 vex.register_specifier = (~(*codep >> 3)) & 0xf;
43234a1e
L
13067
13068 /* The U bit. */
13069 if (!(*codep & 0x4))
13070 return &bad_opcode;
13071
13072 switch ((*codep & 0x3))
13073 {
13074 case 0:
43234a1e
L
13075 break;
13076 case 1:
13077 vex.prefix = DATA_PREFIX_OPCODE;
13078 break;
13079 case 2:
13080 vex.prefix = REPE_PREFIX_OPCODE;
13081 break;
13082 case 3:
13083 vex.prefix = REPNE_PREFIX_OPCODE;
13084 break;
13085 }
13086
13087 /* The third byte after 0x62. */
13088 codep++;
13089
13090 /* Remember the static rounding bits. */
13091 vex.ll = (*codep >> 5) & 3;
13092 vex.b = (*codep & 0x10) != 0;
13093
13094 vex.v = *codep & 0x8;
13095 vex.mask_register_specifier = *codep & 0x7;
13096 vex.zeroing = *codep & 0x80;
13097
5f847646
JB
13098 if (address_mode != mode_64bit)
13099 {
13100 /* In 16/32-bit mode silently ignore following bits. */
13101 rex &= ~REX_B;
13102 vex.r = 1;
13103 vex.v = 1;
13104 }
13105
43234a1e
L
13106 need_vex = 1;
13107 need_vex_reg = 1;
13108 codep++;
13109 vindex = *codep++;
13110 dp = &evex_table[vex_table_index][vindex];
285ca992 13111 end_codep = codep;
43234a1e
L
13112 FETCH_DATA (info, codep + 1);
13113 modrm.mod = (*codep >> 6) & 3;
13114 modrm.reg = (*codep >> 3) & 7;
13115 modrm.rm = *codep & 7;
13116
13117 /* Set vector length. */
13118 if (modrm.mod == 3 && vex.b)
13119 vex.length = 512;
13120 else
13121 {
13122 switch (vex.ll)
13123 {
13124 case 0x0:
13125 vex.length = 128;
13126 break;
13127 case 0x1:
13128 vex.length = 256;
13129 break;
13130 case 0x2:
13131 vex.length = 512;
13132 break;
13133 default:
13134 return &bad_opcode;
13135 }
13136 }
13137 break;
13138
592d1631
L
13139 case 0:
13140 dp = &bad_opcode;
13141 break;
13142
b844680a 13143 default:
d34b5006 13144 abort ();
b844680a
L
13145 }
13146
13147 if (dp->name != NULL)
13148 return dp;
13149 else
8bb15339 13150 return get_valid_dis386 (dp, info);
b844680a
L
13151}
13152
dfc8cf43 13153static void
55cf16e1 13154get_sib (disassemble_info *info, int sizeflag)
dfc8cf43
L
13155{
13156 /* If modrm.mod == 3, operand must be register. */
13157 if (need_modrm
55cf16e1 13158 && ((sizeflag & AFLAG) || address_mode == mode_64bit)
dfc8cf43
L
13159 && modrm.mod != 3
13160 && modrm.rm == 4)
13161 {
13162 FETCH_DATA (info, codep + 2);
13163 sib.index = (codep [1] >> 3) & 7;
13164 sib.scale = (codep [1] >> 6) & 3;
13165 sib.base = codep [1] & 7;
13166 }
13167}
13168
e396998b 13169static int
26ca5450 13170print_insn (bfd_vma pc, disassemble_info *info)
252b5132 13171{
2da11e11 13172 const struct dis386 *dp;
252b5132 13173 int i;
ce518a5f 13174 char *op_txt[MAX_OPERANDS];
252b5132 13175 int needcomma;
df18fdba 13176 int sizeflag, orig_sizeflag;
e396998b 13177 const char *p;
252b5132 13178 struct dis_private priv;
f16cd0d5 13179 int prefix_length;
252b5132 13180
d7921315
L
13181 priv.orig_sizeflag = AFLAG | DFLAG;
13182 if ((info->mach & bfd_mach_i386_i386) != 0)
cb712a9e 13183 address_mode = mode_32bit;
2da11e11 13184 else if (info->mach == bfd_mach_i386_i8086)
d7921315
L
13185 {
13186 address_mode = mode_16bit;
13187 priv.orig_sizeflag = 0;
13188 }
2da11e11 13189 else
d7921315
L
13190 address_mode = mode_64bit;
13191
13192 if (intel_syntax == (char) -1)
13193 intel_syntax = (info->mach & bfd_mach_i386_intel_syntax) != 0;
e396998b
AM
13194
13195 for (p = info->disassembler_options; p != NULL; )
13196 {
5db04b09
L
13197 if (CONST_STRNEQ (p, "amd64"))
13198 isa64 = amd64;
13199 else if (CONST_STRNEQ (p, "intel64"))
13200 isa64 = intel64;
13201 else if (CONST_STRNEQ (p, "x86-64"))
e396998b 13202 {
cb712a9e 13203 address_mode = mode_64bit;
e396998b
AM
13204 priv.orig_sizeflag = AFLAG | DFLAG;
13205 }
0112cd26 13206 else if (CONST_STRNEQ (p, "i386"))
e396998b 13207 {
cb712a9e 13208 address_mode = mode_32bit;
e396998b
AM
13209 priv.orig_sizeflag = AFLAG | DFLAG;
13210 }
0112cd26 13211 else if (CONST_STRNEQ (p, "i8086"))
e396998b 13212 {
cb712a9e 13213 address_mode = mode_16bit;
e396998b
AM
13214 priv.orig_sizeflag = 0;
13215 }
0112cd26 13216 else if (CONST_STRNEQ (p, "intel"))
e396998b
AM
13217 {
13218 intel_syntax = 1;
9d141669
L
13219 if (CONST_STRNEQ (p + 5, "-mnemonic"))
13220 intel_mnemonic = 1;
e396998b 13221 }
0112cd26 13222 else if (CONST_STRNEQ (p, "att"))
e396998b
AM
13223 {
13224 intel_syntax = 0;
9d141669
L
13225 if (CONST_STRNEQ (p + 3, "-mnemonic"))
13226 intel_mnemonic = 0;
e396998b 13227 }
0112cd26 13228 else if (CONST_STRNEQ (p, "addr"))
e396998b 13229 {
f59a29b9
L
13230 if (address_mode == mode_64bit)
13231 {
13232 if (p[4] == '3' && p[5] == '2')
13233 priv.orig_sizeflag &= ~AFLAG;
13234 else if (p[4] == '6' && p[5] == '4')
13235 priv.orig_sizeflag |= AFLAG;
13236 }
13237 else
13238 {
13239 if (p[4] == '1' && p[5] == '6')
13240 priv.orig_sizeflag &= ~AFLAG;
13241 else if (p[4] == '3' && p[5] == '2')
13242 priv.orig_sizeflag |= AFLAG;
13243 }
e396998b 13244 }
0112cd26 13245 else if (CONST_STRNEQ (p, "data"))
e396998b
AM
13246 {
13247 if (p[4] == '1' && p[5] == '6')
13248 priv.orig_sizeflag &= ~DFLAG;
13249 else if (p[4] == '3' && p[5] == '2')
13250 priv.orig_sizeflag |= DFLAG;
13251 }
0112cd26 13252 else if (CONST_STRNEQ (p, "suffix"))
e396998b
AM
13253 priv.orig_sizeflag |= SUFFIX_ALWAYS;
13254
13255 p = strchr (p, ',');
13256 if (p != NULL)
13257 p++;
13258 }
13259
c0f92bf9
L
13260 if (address_mode == mode_64bit && sizeof (bfd_vma) < 8)
13261 {
13262 (*info->fprintf_func) (info->stream,
13263 _("64-bit address is disabled"));
13264 return -1;
13265 }
13266
e396998b
AM
13267 if (intel_syntax)
13268 {
13269 names64 = intel_names64;
13270 names32 = intel_names32;
13271 names16 = intel_names16;
13272 names8 = intel_names8;
13273 names8rex = intel_names8rex;
13274 names_seg = intel_names_seg;
b9733481 13275 names_mm = intel_names_mm;
7e8b059b 13276 names_bnd = intel_names_bnd;
b9733481
L
13277 names_xmm = intel_names_xmm;
13278 names_ymm = intel_names_ymm;
43234a1e 13279 names_zmm = intel_names_zmm;
db51cc60
L
13280 index64 = intel_index64;
13281 index32 = intel_index32;
43234a1e 13282 names_mask = intel_names_mask;
e396998b
AM
13283 index16 = intel_index16;
13284 open_char = '[';
13285 close_char = ']';
13286 separator_char = '+';
13287 scale_char = '*';
13288 }
13289 else
13290 {
13291 names64 = att_names64;
13292 names32 = att_names32;
13293 names16 = att_names16;
13294 names8 = att_names8;
13295 names8rex = att_names8rex;
13296 names_seg = att_names_seg;
b9733481 13297 names_mm = att_names_mm;
7e8b059b 13298 names_bnd = att_names_bnd;
b9733481
L
13299 names_xmm = att_names_xmm;
13300 names_ymm = att_names_ymm;
43234a1e 13301 names_zmm = att_names_zmm;
db51cc60
L
13302 index64 = att_index64;
13303 index32 = att_index32;
43234a1e 13304 names_mask = att_names_mask;
e396998b
AM
13305 index16 = att_index16;
13306 open_char = '(';
13307 close_char = ')';
13308 separator_char = ',';
13309 scale_char = ',';
13310 }
2da11e11 13311
4fe53c98 13312 /* The output looks better if we put 7 bytes on a line, since that
8a9036a4
L
13313 puts most long word instructions on a single line. Use 8 bytes
13314 for Intel L1OM. */
d7921315 13315 if ((info->mach & bfd_mach_l1om) != 0)
8a9036a4
L
13316 info->bytes_per_line = 8;
13317 else
13318 info->bytes_per_line = 7;
252b5132 13319
26ca5450 13320 info->private_data = &priv;
252b5132
RH
13321 priv.max_fetched = priv.the_buffer;
13322 priv.insn_start = pc;
252b5132
RH
13323
13324 obuf[0] = 0;
ce518a5f
L
13325 for (i = 0; i < MAX_OPERANDS; ++i)
13326 {
13327 op_out[i][0] = 0;
13328 op_index[i] = -1;
13329 }
252b5132
RH
13330
13331 the_info = info;
13332 start_pc = pc;
e396998b
AM
13333 start_codep = priv.the_buffer;
13334 codep = priv.the_buffer;
252b5132 13335
8df14d78 13336 if (OPCODES_SIGSETJMP (priv.bailout) != 0)
5076851f 13337 {
7d421014
ILT
13338 const char *name;
13339
5076851f 13340 /* Getting here means we tried for data but didn't get it. That
e396998b
AM
13341 means we have an incomplete instruction of some sort. Just
13342 print the first byte as a prefix or a .byte pseudo-op. */
13343 if (codep > priv.the_buffer)
5076851f 13344 {
e396998b 13345 name = prefix_name (priv.the_buffer[0], priv.orig_sizeflag);
7d421014
ILT
13346 if (name != NULL)
13347 (*info->fprintf_func) (info->stream, "%s", name);
13348 else
5076851f 13349 {
7d421014
ILT
13350 /* Just print the first byte as a .byte instruction. */
13351 (*info->fprintf_func) (info->stream, ".byte 0x%x",
e396998b 13352 (unsigned int) priv.the_buffer[0]);
5076851f 13353 }
5076851f 13354
7d421014 13355 return 1;
5076851f
ILT
13356 }
13357
13358 return -1;
13359 }
13360
52b15da3 13361 obufp = obuf;
f16cd0d5
L
13362 sizeflag = priv.orig_sizeflag;
13363
13364 if (!ckprefix () || rex_used)
13365 {
13366 /* Too many prefixes or unused REX prefixes. */
13367 for (i = 0;
f6dd4781 13368 i < (int) ARRAY_SIZE (all_prefixes) && all_prefixes[i];
f16cd0d5 13369 i++)
de882298 13370 (*info->fprintf_func) (info->stream, "%s%s",
6c067bbb 13371 i == 0 ? "" : " ",
f16cd0d5 13372 prefix_name (all_prefixes[i], sizeflag));
de882298 13373 return i;
f16cd0d5 13374 }
252b5132
RH
13375
13376 insn_codep = codep;
13377
13378 FETCH_DATA (info, codep + 1);
13379 two_source_ops = (*codep == 0x62) || (*codep == 0xc8);
13380
3e7d61b2 13381 if (((prefixes & PREFIX_FWAIT)
f16cd0d5 13382 && ((*codep < 0xd8) || (*codep > 0xdf))))
252b5132 13383 {
86a80a50 13384 /* Handle prefixes before fwait. */
d9949a36 13385 for (i = 0; i < fwait_prefix && all_prefixes[i];
86a80a50
L
13386 i++)
13387 (*info->fprintf_func) (info->stream, "%s ",
13388 prefix_name (all_prefixes[i], sizeflag));
f16cd0d5 13389 (*info->fprintf_func) (info->stream, "fwait");
86a80a50 13390 return i + 1;
252b5132
RH
13391 }
13392
252b5132
RH
13393 if (*codep == 0x0f)
13394 {
eec0f4ca 13395 unsigned char threebyte;
5f40e14d
JS
13396
13397 codep++;
13398 FETCH_DATA (info, codep + 1);
13399 threebyte = *codep;
eec0f4ca 13400 dp = &dis386_twobyte[threebyte];
252b5132 13401 need_modrm = twobyte_has_modrm[*codep];
eec0f4ca 13402 codep++;
252b5132
RH
13403 }
13404 else
13405 {
6439fc28 13406 dp = &dis386[*codep];
252b5132 13407 need_modrm = onebyte_has_modrm[*codep];
eec0f4ca 13408 codep++;
252b5132 13409 }
246c51aa 13410
df18fdba
L
13411 /* Save sizeflag for printing the extra prefixes later before updating
13412 it for mnemonic and operand processing. The prefix names depend
13413 only on the address mode. */
13414 orig_sizeflag = sizeflag;
c608c12e 13415 if (prefixes & PREFIX_ADDR)
df18fdba 13416 sizeflag ^= AFLAG;
b844680a 13417 if ((prefixes & PREFIX_DATA))
df18fdba 13418 sizeflag ^= DFLAG;
3ffd33cf 13419
285ca992 13420 end_codep = codep;
8bb15339 13421 if (need_modrm)
252b5132
RH
13422 {
13423 FETCH_DATA (info, codep + 1);
7967e09e
L
13424 modrm.mod = (*codep >> 6) & 3;
13425 modrm.reg = (*codep >> 3) & 7;
13426 modrm.rm = *codep & 7;
252b5132
RH
13427 }
13428
42d5f9c6
MS
13429 need_vex = 0;
13430 need_vex_reg = 0;
13431 vex_w_done = 0;
caf0678c 13432 memset (&vex, 0, sizeof (vex));
55b126d4 13433
ce518a5f 13434 if (dp->name == NULL && dp->op[0].bytemode == FLOATCODE)
252b5132 13435 {
55cf16e1 13436 get_sib (info, sizeflag);
252b5132
RH
13437 dofloat (sizeflag);
13438 }
13439 else
13440 {
8bb15339 13441 dp = get_valid_dis386 (dp, info);
b844680a 13442 if (dp != NULL && putop (dp->name, sizeflag) == 0)
6c067bbb 13443 {
55cf16e1 13444 get_sib (info, sizeflag);
ce518a5f
L
13445 for (i = 0; i < MAX_OPERANDS; ++i)
13446 {
246c51aa 13447 obufp = op_out[i];
ce518a5f
L
13448 op_ad = MAX_OPERANDS - 1 - i;
13449 if (dp->op[i].rtn)
13450 (*dp->op[i].rtn) (dp->op[i].bytemode, sizeflag);
43234a1e
L
13451 /* For EVEX instruction after the last operand masking
13452 should be printed. */
13453 if (i == 0 && vex.evex)
13454 {
13455 /* Don't print {%k0}. */
13456 if (vex.mask_register_specifier)
13457 {
13458 oappend ("{");
13459 oappend (names_mask[vex.mask_register_specifier]);
13460 oappend ("}");
13461 }
13462 if (vex.zeroing)
13463 oappend ("{z}");
13464 }
ce518a5f 13465 }
6439fc28 13466 }
252b5132
RH
13467 }
13468
d869730d 13469 /* Check if the REX prefix is used. */
e2e6193d 13470 if (rex_ignored == 0 && (rex ^ rex_used) == 0 && last_rex_prefix >= 0)
f16cd0d5
L
13471 all_prefixes[last_rex_prefix] = 0;
13472
5e6718e4 13473 /* Check if the SEG prefix is used. */
f16cd0d5
L
13474 if ((prefixes & (PREFIX_CS | PREFIX_SS | PREFIX_DS | PREFIX_ES
13475 | PREFIX_FS | PREFIX_GS)) != 0
285ca992 13476 && (used_prefixes & active_seg_prefix) != 0)
f16cd0d5
L
13477 all_prefixes[last_seg_prefix] = 0;
13478
5e6718e4 13479 /* Check if the ADDR prefix is used. */
f16cd0d5
L
13480 if ((prefixes & PREFIX_ADDR) != 0
13481 && (used_prefixes & PREFIX_ADDR) != 0)
13482 all_prefixes[last_addr_prefix] = 0;
13483
df18fdba
L
13484 /* Check if the DATA prefix is used. */
13485 if ((prefixes & PREFIX_DATA) != 0
13486 && (used_prefixes & PREFIX_DATA) != 0)
13487 all_prefixes[last_data_prefix] = 0;
f16cd0d5 13488
df18fdba 13489 /* Print the extra prefixes. */
f16cd0d5 13490 prefix_length = 0;
f310f33d 13491 for (i = 0; i < (int) ARRAY_SIZE (all_prefixes); i++)
f16cd0d5
L
13492 if (all_prefixes[i])
13493 {
13494 const char *name;
df18fdba 13495 name = prefix_name (all_prefixes[i], orig_sizeflag);
f16cd0d5
L
13496 if (name == NULL)
13497 abort ();
13498 prefix_length += strlen (name) + 1;
13499 (*info->fprintf_func) (info->stream, "%s ", name);
13500 }
b844680a 13501
285ca992
L
13502 /* If the mandatory PREFIX_REPZ/PREFIX_REPNZ/PREFIX_DATA prefix is
13503 unused, opcode is invalid. Since the PREFIX_DATA prefix may be
13504 used by putop and MMX/SSE operand and may be overriden by the
13505 PREFIX_REPZ/PREFIX_REPNZ fix, we check the PREFIX_DATA prefix
13506 separately. */
3888916d 13507 if (dp->prefix_requirement == PREFIX_OPCODE
285ca992
L
13508 && dp != &bad_opcode
13509 && (((prefixes
13510 & (PREFIX_REPZ | PREFIX_REPNZ)) != 0
13511 && (used_prefixes
13512 & (PREFIX_REPZ | PREFIX_REPNZ)) == 0)
13513 || ((((prefixes
13514 & (PREFIX_REPZ | PREFIX_REPNZ | PREFIX_DATA))
13515 == PREFIX_DATA)
13516 && (used_prefixes & PREFIX_DATA) == 0))))
13517 {
13518 (*info->fprintf_func) (info->stream, "(bad)");
13519 return end_codep - priv.the_buffer;
13520 }
13521
f16cd0d5
L
13522 /* Check maximum code length. */
13523 if ((codep - start_codep) > MAX_CODE_LENGTH)
13524 {
13525 (*info->fprintf_func) (info->stream, "(bad)");
13526 return MAX_CODE_LENGTH;
13527 }
b844680a 13528
ea397f5b 13529 obufp = mnemonicendp;
f16cd0d5 13530 for (i = strlen (obuf) + prefix_length; i < 6; i++)
252b5132
RH
13531 oappend (" ");
13532 oappend (" ");
13533 (*info->fprintf_func) (info->stream, "%s", obuf);
13534
13535 /* The enter and bound instructions are printed with operands in the same
13536 order as the intel book; everything else is printed in reverse order. */
2da11e11 13537 if (intel_syntax || two_source_ops)
252b5132 13538 {
185b1163
L
13539 bfd_vma riprel;
13540
ce518a5f 13541 for (i = 0; i < MAX_OPERANDS; ++i)
6c067bbb 13542 op_txt[i] = op_out[i];
246c51aa 13543
3a8547d2
JB
13544 if (intel_syntax && dp && dp->op[2].rtn == OP_Rounding
13545 && dp->op[3].rtn == OP_E && dp->op[4].rtn == NULL)
13546 {
13547 op_txt[2] = op_out[3];
13548 op_txt[3] = op_out[2];
13549 }
13550
ce518a5f
L
13551 for (i = 0; i < (MAX_OPERANDS >> 1); ++i)
13552 {
6c067bbb
RM
13553 op_ad = op_index[i];
13554 op_index[i] = op_index[MAX_OPERANDS - 1 - i];
13555 op_index[MAX_OPERANDS - 1 - i] = op_ad;
185b1163
L
13556 riprel = op_riprel[i];
13557 op_riprel[i] = op_riprel [MAX_OPERANDS - 1 - i];
13558 op_riprel[MAX_OPERANDS - 1 - i] = riprel;
ce518a5f 13559 }
252b5132
RH
13560 }
13561 else
13562 {
ce518a5f 13563 for (i = 0; i < MAX_OPERANDS; ++i)
6c067bbb 13564 op_txt[MAX_OPERANDS - 1 - i] = op_out[i];
050dfa73
MM
13565 }
13566
ce518a5f
L
13567 needcomma = 0;
13568 for (i = 0; i < MAX_OPERANDS; ++i)
13569 if (*op_txt[i])
13570 {
13571 if (needcomma)
13572 (*info->fprintf_func) (info->stream, ",");
13573 if (op_index[i] != -1 && !op_riprel[i])
13574 (*info->print_address_func) ((bfd_vma) op_address[op_index[i]], info);
13575 else
13576 (*info->fprintf_func) (info->stream, "%s", op_txt[i]);
13577 needcomma = 1;
13578 }
050dfa73 13579
ce518a5f 13580 for (i = 0; i < MAX_OPERANDS; i++)
52b15da3
JH
13581 if (op_index[i] != -1 && op_riprel[i])
13582 {
13583 (*info->fprintf_func) (info->stream, " # ");
4fd7268a 13584 (*info->print_address_func) ((bfd_vma) (start_pc + (codep - start_codep)
52b15da3 13585 + op_address[op_index[i]]), info);
185b1163 13586 break;
52b15da3 13587 }
e396998b 13588 return codep - priv.the_buffer;
252b5132
RH
13589}
13590
6439fc28 13591static const char *float_mem[] = {
252b5132 13592 /* d8 */
7c52e0e8
L
13593 "fadd{s|}",
13594 "fmul{s|}",
13595 "fcom{s|}",
13596 "fcomp{s|}",
13597 "fsub{s|}",
13598 "fsubr{s|}",
13599 "fdiv{s|}",
13600 "fdivr{s|}",
db6eb5be 13601 /* d9 */
7c52e0e8 13602 "fld{s|}",
252b5132 13603 "(bad)",
7c52e0e8
L
13604 "fst{s|}",
13605 "fstp{s|}",
9306ca4a 13606 "fldenvIC",
252b5132 13607 "fldcw",
9306ca4a 13608 "fNstenvIC",
252b5132
RH
13609 "fNstcw",
13610 /* da */
7c52e0e8
L
13611 "fiadd{l|}",
13612 "fimul{l|}",
13613 "ficom{l|}",
13614 "ficomp{l|}",
13615 "fisub{l|}",
13616 "fisubr{l|}",
13617 "fidiv{l|}",
13618 "fidivr{l|}",
252b5132 13619 /* db */
7c52e0e8
L
13620 "fild{l|}",
13621 "fisttp{l|}",
13622 "fist{l|}",
13623 "fistp{l|}",
252b5132 13624 "(bad)",
6439fc28 13625 "fld{t||t|}",
252b5132 13626 "(bad)",
6439fc28 13627 "fstp{t||t|}",
252b5132 13628 /* dc */
7c52e0e8
L
13629 "fadd{l|}",
13630 "fmul{l|}",
13631 "fcom{l|}",
13632 "fcomp{l|}",
13633 "fsub{l|}",
13634 "fsubr{l|}",
13635 "fdiv{l|}",
13636 "fdivr{l|}",
252b5132 13637 /* dd */
7c52e0e8
L
13638 "fld{l|}",
13639 "fisttp{ll|}",
13640 "fst{l||}",
13641 "fstp{l|}",
9306ca4a 13642 "frstorIC",
252b5132 13643 "(bad)",
9306ca4a 13644 "fNsaveIC",
252b5132
RH
13645 "fNstsw",
13646 /* de */
ac465521
JB
13647 "fiadd{s|}",
13648 "fimul{s|}",
13649 "ficom{s|}",
13650 "ficomp{s|}",
13651 "fisub{s|}",
13652 "fisubr{s|}",
13653 "fidiv{s|}",
13654 "fidivr{s|}",
252b5132 13655 /* df */
ac465521
JB
13656 "fild{s|}",
13657 "fisttp{s|}",
13658 "fist{s|}",
13659 "fistp{s|}",
252b5132 13660 "fbld",
7c52e0e8 13661 "fild{ll|}",
252b5132 13662 "fbstp",
7c52e0e8 13663 "fistp{ll|}",
1d9f512f
AM
13664};
13665
13666static const unsigned char float_mem_mode[] = {
13667 /* d8 */
13668 d_mode,
13669 d_mode,
13670 d_mode,
13671 d_mode,
13672 d_mode,
13673 d_mode,
13674 d_mode,
13675 d_mode,
13676 /* d9 */
13677 d_mode,
13678 0,
13679 d_mode,
13680 d_mode,
13681 0,
13682 w_mode,
13683 0,
13684 w_mode,
13685 /* da */
13686 d_mode,
13687 d_mode,
13688 d_mode,
13689 d_mode,
13690 d_mode,
13691 d_mode,
13692 d_mode,
13693 d_mode,
13694 /* db */
13695 d_mode,
13696 d_mode,
13697 d_mode,
13698 d_mode,
13699 0,
9306ca4a 13700 t_mode,
1d9f512f 13701 0,
9306ca4a 13702 t_mode,
1d9f512f
AM
13703 /* dc */
13704 q_mode,
13705 q_mode,
13706 q_mode,
13707 q_mode,
13708 q_mode,
13709 q_mode,
13710 q_mode,
13711 q_mode,
13712 /* dd */
13713 q_mode,
13714 q_mode,
13715 q_mode,
13716 q_mode,
13717 0,
13718 0,
13719 0,
13720 w_mode,
13721 /* de */
13722 w_mode,
13723 w_mode,
13724 w_mode,
13725 w_mode,
13726 w_mode,
13727 w_mode,
13728 w_mode,
13729 w_mode,
13730 /* df */
13731 w_mode,
13732 w_mode,
13733 w_mode,
13734 w_mode,
9306ca4a 13735 t_mode,
1d9f512f 13736 q_mode,
9306ca4a 13737 t_mode,
1d9f512f 13738 q_mode
252b5132
RH
13739};
13740
ce518a5f
L
13741#define ST { OP_ST, 0 }
13742#define STi { OP_STi, 0 }
252b5132 13743
48c97fa1
L
13744#define FGRPd9_2 NULL, { { NULL, 1 } }, 0
13745#define FGRPd9_4 NULL, { { NULL, 2 } }, 0
13746#define FGRPd9_5 NULL, { { NULL, 3 } }, 0
13747#define FGRPd9_6 NULL, { { NULL, 4 } }, 0
13748#define FGRPd9_7 NULL, { { NULL, 5 } }, 0
13749#define FGRPda_5 NULL, { { NULL, 6 } }, 0
13750#define FGRPdb_4 NULL, { { NULL, 7 } }, 0
13751#define FGRPde_3 NULL, { { NULL, 8 } }, 0
13752#define FGRPdf_4 NULL, { { NULL, 9 } }, 0
252b5132 13753
2da11e11 13754static const struct dis386 float_reg[][8] = {
252b5132
RH
13755 /* d8 */
13756 {
bf890a93
IT
13757 { "fadd", { ST, STi }, 0 },
13758 { "fmul", { ST, STi }, 0 },
13759 { "fcom", { STi }, 0 },
13760 { "fcomp", { STi }, 0 },
13761 { "fsub", { ST, STi }, 0 },
13762 { "fsubr", { ST, STi }, 0 },
13763 { "fdiv", { ST, STi }, 0 },
13764 { "fdivr", { ST, STi }, 0 },
252b5132
RH
13765 },
13766 /* d9 */
13767 {
bf890a93
IT
13768 { "fld", { STi }, 0 },
13769 { "fxch", { STi }, 0 },
252b5132 13770 { FGRPd9_2 },
592d1631 13771 { Bad_Opcode },
252b5132
RH
13772 { FGRPd9_4 },
13773 { FGRPd9_5 },
13774 { FGRPd9_6 },
13775 { FGRPd9_7 },
13776 },
13777 /* da */
13778 {
bf890a93
IT
13779 { "fcmovb", { ST, STi }, 0 },
13780 { "fcmove", { ST, STi }, 0 },
13781 { "fcmovbe",{ ST, STi }, 0 },
13782 { "fcmovu", { ST, STi }, 0 },
592d1631 13783 { Bad_Opcode },
252b5132 13784 { FGRPda_5 },
592d1631
L
13785 { Bad_Opcode },
13786 { Bad_Opcode },
252b5132
RH
13787 },
13788 /* db */
13789 {
bf890a93
IT
13790 { "fcmovnb",{ ST, STi }, 0 },
13791 { "fcmovne",{ ST, STi }, 0 },
13792 { "fcmovnbe",{ ST, STi }, 0 },
13793 { "fcmovnu",{ ST, STi }, 0 },
252b5132 13794 { FGRPdb_4 },
bf890a93
IT
13795 { "fucomi", { ST, STi }, 0 },
13796 { "fcomi", { ST, STi }, 0 },
592d1631 13797 { Bad_Opcode },
252b5132
RH
13798 },
13799 /* dc */
13800 {
bf890a93
IT
13801 { "fadd", { STi, ST }, 0 },
13802 { "fmul", { STi, ST }, 0 },
592d1631
L
13803 { Bad_Opcode },
13804 { Bad_Opcode },
d53e6b98
JB
13805 { "fsub{!M|r}", { STi, ST }, 0 },
13806 { "fsub{M|}", { STi, ST }, 0 },
13807 { "fdiv{!M|r}", { STi, ST }, 0 },
13808 { "fdiv{M|}", { STi, ST }, 0 },
252b5132
RH
13809 },
13810 /* dd */
13811 {
bf890a93 13812 { "ffree", { STi }, 0 },
592d1631 13813 { Bad_Opcode },
bf890a93
IT
13814 { "fst", { STi }, 0 },
13815 { "fstp", { STi }, 0 },
13816 { "fucom", { STi }, 0 },
13817 { "fucomp", { STi }, 0 },
592d1631
L
13818 { Bad_Opcode },
13819 { Bad_Opcode },
252b5132
RH
13820 },
13821 /* de */
13822 {
bf890a93
IT
13823 { "faddp", { STi, ST }, 0 },
13824 { "fmulp", { STi, ST }, 0 },
592d1631 13825 { Bad_Opcode },
252b5132 13826 { FGRPde_3 },
d53e6b98
JB
13827 { "fsub{!M|r}p", { STi, ST }, 0 },
13828 { "fsub{M|}p", { STi, ST }, 0 },
13829 { "fdiv{!M|r}p", { STi, ST }, 0 },
13830 { "fdiv{M|}p", { STi, ST }, 0 },
252b5132
RH
13831 },
13832 /* df */
13833 {
bf890a93 13834 { "ffreep", { STi }, 0 },
592d1631
L
13835 { Bad_Opcode },
13836 { Bad_Opcode },
13837 { Bad_Opcode },
252b5132 13838 { FGRPdf_4 },
bf890a93
IT
13839 { "fucomip", { ST, STi }, 0 },
13840 { "fcomip", { ST, STi }, 0 },
592d1631 13841 { Bad_Opcode },
252b5132
RH
13842 },
13843};
13844
252b5132 13845static char *fgrps[][8] = {
48c97fa1
L
13846 /* Bad opcode 0 */
13847 {
13848 "(bad)","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
13849 },
13850
13851 /* d9_2 1 */
252b5132
RH
13852 {
13853 "fnop","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
13854 },
13855
48c97fa1 13856 /* d9_4 2 */
252b5132
RH
13857 {
13858 "fchs","fabs","(bad)","(bad)","ftst","fxam","(bad)","(bad)",
13859 },
13860
48c97fa1 13861 /* d9_5 3 */
252b5132
RH
13862 {
13863 "fld1","fldl2t","fldl2e","fldpi","fldlg2","fldln2","fldz","(bad)",
13864 },
13865
48c97fa1 13866 /* d9_6 4 */
252b5132
RH
13867 {
13868 "f2xm1","fyl2x","fptan","fpatan","fxtract","fprem1","fdecstp","fincstp",
13869 },
13870
48c97fa1 13871 /* d9_7 5 */
252b5132
RH
13872 {
13873 "fprem","fyl2xp1","fsqrt","fsincos","frndint","fscale","fsin","fcos",
13874 },
13875
48c97fa1 13876 /* da_5 6 */
252b5132
RH
13877 {
13878 "(bad)","fucompp","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
13879 },
13880
48c97fa1 13881 /* db_4 7 */
252b5132 13882 {
309d3373
JB
13883 "fNeni(8087 only)","fNdisi(8087 only)","fNclex","fNinit",
13884 "fNsetpm(287 only)","frstpm(287 only)","(bad)","(bad)",
252b5132
RH
13885 },
13886
48c97fa1 13887 /* de_3 8 */
252b5132
RH
13888 {
13889 "(bad)","fcompp","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
13890 },
13891
48c97fa1 13892 /* df_4 9 */
252b5132
RH
13893 {
13894 "fNstsw","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
13895 },
13896};
13897
b6169b20
L
13898static void
13899swap_operand (void)
13900{
13901 mnemonicendp[0] = '.';
13902 mnemonicendp[1] = 's';
13903 mnemonicendp += 2;
13904}
13905
b844680a
L
13906static void
13907OP_Skip_MODRM (int bytemode ATTRIBUTE_UNUSED,
13908 int sizeflag ATTRIBUTE_UNUSED)
13909{
13910 /* Skip mod/rm byte. */
13911 MODRM_CHECK;
13912 codep++;
13913}
13914
252b5132 13915static void
26ca5450 13916dofloat (int sizeflag)
252b5132 13917{
2da11e11 13918 const struct dis386 *dp;
252b5132
RH
13919 unsigned char floatop;
13920
13921 floatop = codep[-1];
13922
7967e09e 13923 if (modrm.mod != 3)
252b5132 13924 {
7967e09e 13925 int fp_indx = (floatop - 0xd8) * 8 + modrm.reg;
1d9f512f
AM
13926
13927 putop (float_mem[fp_indx], sizeflag);
ce518a5f 13928 obufp = op_out[0];
6e50d963 13929 op_ad = 2;
1d9f512f 13930 OP_E (float_mem_mode[fp_indx], sizeflag);
252b5132
RH
13931 return;
13932 }
6608db57 13933 /* Skip mod/rm byte. */
4bba6815 13934 MODRM_CHECK;
252b5132
RH
13935 codep++;
13936
7967e09e 13937 dp = &float_reg[floatop - 0xd8][modrm.reg];
252b5132
RH
13938 if (dp->name == NULL)
13939 {
7967e09e 13940 putop (fgrps[dp->op[0].bytemode][modrm.rm], sizeflag);
252b5132 13941
6608db57 13942 /* Instruction fnstsw is only one with strange arg. */
252b5132 13943 if (floatop == 0xdf && codep[-1] == 0xe0)
ce518a5f 13944 strcpy (op_out[0], names16[0]);
252b5132
RH
13945 }
13946 else
13947 {
13948 putop (dp->name, sizeflag);
13949
ce518a5f 13950 obufp = op_out[0];
6e50d963 13951 op_ad = 2;
ce518a5f
L
13952 if (dp->op[0].rtn)
13953 (*dp->op[0].rtn) (dp->op[0].bytemode, sizeflag);
6e50d963 13954
ce518a5f 13955 obufp = op_out[1];
6e50d963 13956 op_ad = 1;
ce518a5f
L
13957 if (dp->op[1].rtn)
13958 (*dp->op[1].rtn) (dp->op[1].bytemode, sizeflag);
252b5132
RH
13959 }
13960}
13961
9ce09ba2
RM
13962/* Like oappend (below), but S is a string starting with '%'.
13963 In Intel syntax, the '%' is elided. */
13964static void
13965oappend_maybe_intel (const char *s)
13966{
13967 oappend (s + intel_syntax);
13968}
13969
252b5132 13970static void
26ca5450 13971OP_ST (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 13972{
9ce09ba2 13973 oappend_maybe_intel ("%st");
252b5132
RH
13974}
13975
252b5132 13976static void
26ca5450 13977OP_STi (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 13978{
7967e09e 13979 sprintf (scratchbuf, "%%st(%d)", modrm.rm);
9ce09ba2 13980 oappend_maybe_intel (scratchbuf);
252b5132
RH
13981}
13982
6608db57 13983/* Capital letters in template are macros. */
6439fc28 13984static int
d3ce72d0 13985putop (const char *in_template, int sizeflag)
252b5132 13986{
2da11e11 13987 const char *p;
9306ca4a 13988 int alt = 0;
9d141669 13989 int cond = 1;
98b528ac
L
13990 unsigned int l = 0, len = 1;
13991 char last[4];
13992
13993#define SAVE_LAST(c) \
13994 if (l < len && l < sizeof (last)) \
13995 last[l++] = c; \
13996 else \
13997 abort ();
252b5132 13998
d3ce72d0 13999 for (p = in_template; *p; p++)
252b5132
RH
14000 {
14001 switch (*p)
14002 {
14003 default:
14004 *obufp++ = *p;
14005 break;
98b528ac
L
14006 case '%':
14007 len++;
14008 break;
9d141669
L
14009 case '!':
14010 cond = 0;
14011 break;
6439fc28 14012 case '{':
6439fc28 14013 if (intel_syntax)
6439fc28
AM
14014 {
14015 while (*++p != '|')
7c52e0e8
L
14016 if (*p == '}' || *p == '\0')
14017 abort ();
6439fc28 14018 }
9306ca4a
JB
14019 /* Fall through. */
14020 case 'I':
14021 alt = 1;
14022 continue;
6439fc28
AM
14023 case '|':
14024 while (*++p != '}')
14025 {
14026 if (*p == '\0')
14027 abort ();
14028 }
14029 break;
14030 case '}':
14031 break;
252b5132 14032 case 'A':
db6eb5be
AM
14033 if (intel_syntax)
14034 break;
7967e09e 14035 if (modrm.mod != 3 || (sizeflag & SUFFIX_ALWAYS))
252b5132
RH
14036 *obufp++ = 'b';
14037 break;
14038 case 'B':
4b06377f
L
14039 if (l == 0 && len == 1)
14040 {
14041case_B:
14042 if (intel_syntax)
14043 break;
14044 if (sizeflag & SUFFIX_ALWAYS)
14045 *obufp++ = 'b';
14046 }
14047 else
14048 {
14049 if (l != 1
14050 || len != 2
14051 || last[0] != 'L')
14052 {
14053 SAVE_LAST (*p);
14054 break;
14055 }
14056
14057 if (address_mode == mode_64bit
14058 && !(prefixes & PREFIX_ADDR))
14059 {
14060 *obufp++ = 'a';
14061 *obufp++ = 'b';
14062 *obufp++ = 's';
14063 }
14064
14065 goto case_B;
14066 }
252b5132 14067 break;
9306ca4a
JB
14068 case 'C':
14069 if (intel_syntax && !alt)
14070 break;
14071 if ((prefixes & PREFIX_DATA) || (sizeflag & SUFFIX_ALWAYS))
14072 {
14073 if (sizeflag & DFLAG)
14074 *obufp++ = intel_syntax ? 'd' : 'l';
14075 else
14076 *obufp++ = intel_syntax ? 'w' : 's';
14077 used_prefixes |= (prefixes & PREFIX_DATA);
14078 }
14079 break;
ed7841b3
JB
14080 case 'D':
14081 if (intel_syntax || !(sizeflag & SUFFIX_ALWAYS))
14082 break;
161a04f6 14083 USED_REX (REX_W);
7967e09e 14084 if (modrm.mod == 3)
ed7841b3 14085 {
161a04f6 14086 if (rex & REX_W)
ed7841b3 14087 *obufp++ = 'q';
ed7841b3 14088 else
f16cd0d5
L
14089 {
14090 if (sizeflag & DFLAG)
14091 *obufp++ = intel_syntax ? 'd' : 'l';
14092 else
14093 *obufp++ = 'w';
14094 used_prefixes |= (prefixes & PREFIX_DATA);
14095 }
ed7841b3
JB
14096 }
14097 else
14098 *obufp++ = 'w';
14099 break;
252b5132 14100 case 'E': /* For jcxz/jecxz */
cb712a9e 14101 if (address_mode == mode_64bit)
c1a64871
JH
14102 {
14103 if (sizeflag & AFLAG)
14104 *obufp++ = 'r';
14105 else
14106 *obufp++ = 'e';
14107 }
14108 else
14109 if (sizeflag & AFLAG)
14110 *obufp++ = 'e';
3ffd33cf
AM
14111 used_prefixes |= (prefixes & PREFIX_ADDR);
14112 break;
14113 case 'F':
db6eb5be
AM
14114 if (intel_syntax)
14115 break;
e396998b 14116 if ((prefixes & PREFIX_ADDR) || (sizeflag & SUFFIX_ALWAYS))
3ffd33cf
AM
14117 {
14118 if (sizeflag & AFLAG)
cb712a9e 14119 *obufp++ = address_mode == mode_64bit ? 'q' : 'l';
3ffd33cf 14120 else
cb712a9e 14121 *obufp++ = address_mode == mode_64bit ? 'l' : 'w';
3ffd33cf
AM
14122 used_prefixes |= (prefixes & PREFIX_ADDR);
14123 }
252b5132 14124 break;
52fd6d94
JB
14125 case 'G':
14126 if (intel_syntax || (obufp[-1] != 's' && !(sizeflag & SUFFIX_ALWAYS)))
14127 break;
161a04f6 14128 if ((rex & REX_W) || (sizeflag & DFLAG))
52fd6d94
JB
14129 *obufp++ = 'l';
14130 else
14131 *obufp++ = 'w';
161a04f6 14132 if (!(rex & REX_W))
52fd6d94
JB
14133 used_prefixes |= (prefixes & PREFIX_DATA);
14134 break;
5dd0794d 14135 case 'H':
db6eb5be
AM
14136 if (intel_syntax)
14137 break;
5dd0794d
AM
14138 if ((prefixes & (PREFIX_CS | PREFIX_DS)) == PREFIX_CS
14139 || (prefixes & (PREFIX_CS | PREFIX_DS)) == PREFIX_DS)
14140 {
14141 used_prefixes |= prefixes & (PREFIX_CS | PREFIX_DS);
14142 *obufp++ = ',';
14143 *obufp++ = 'p';
14144 if (prefixes & PREFIX_DS)
14145 *obufp++ = 't';
14146 else
14147 *obufp++ = 'n';
14148 }
14149 break;
9306ca4a
JB
14150 case 'J':
14151 if (intel_syntax)
14152 break;
14153 *obufp++ = 'l';
14154 break;
42903f7f
L
14155 case 'K':
14156 USED_REX (REX_W);
14157 if (rex & REX_W)
14158 *obufp++ = 'q';
14159 else
14160 *obufp++ = 'd';
14161 break;
6dd5059a 14162 case 'Z':
04d824a4
JB
14163 if (l != 0 || len != 1)
14164 {
14165 if (l != 1 || len != 2 || last[0] != 'X')
14166 {
14167 SAVE_LAST (*p);
14168 break;
14169 }
14170 if (!need_vex || !vex.evex)
14171 abort ();
14172 if (intel_syntax
14173 || ((modrm.mod == 3 || vex.b) && !(sizeflag & SUFFIX_ALWAYS)))
14174 break;
14175 switch (vex.length)
14176 {
14177 case 128:
14178 *obufp++ = 'x';
14179 break;
14180 case 256:
14181 *obufp++ = 'y';
14182 break;
14183 case 512:
14184 *obufp++ = 'z';
14185 break;
14186 default:
14187 abort ();
14188 }
14189 break;
14190 }
6dd5059a
L
14191 if (intel_syntax)
14192 break;
14193 if (address_mode == mode_64bit && (sizeflag & SUFFIX_ALWAYS))
14194 {
14195 *obufp++ = 'q';
14196 break;
14197 }
14198 /* Fall through. */
98b528ac 14199 goto case_L;
252b5132 14200 case 'L':
98b528ac
L
14201 if (l != 0 || len != 1)
14202 {
14203 SAVE_LAST (*p);
14204 break;
14205 }
14206case_L:
db6eb5be
AM
14207 if (intel_syntax)
14208 break;
252b5132
RH
14209 if (sizeflag & SUFFIX_ALWAYS)
14210 *obufp++ = 'l';
252b5132 14211 break;
9d141669
L
14212 case 'M':
14213 if (intel_mnemonic != cond)
14214 *obufp++ = 'r';
14215 break;
252b5132
RH
14216 case 'N':
14217 if ((prefixes & PREFIX_FWAIT) == 0)
14218 *obufp++ = 'n';
7d421014
ILT
14219 else
14220 used_prefixes |= PREFIX_FWAIT;
252b5132 14221 break;
52b15da3 14222 case 'O':
161a04f6
L
14223 USED_REX (REX_W);
14224 if (rex & REX_W)
6439fc28 14225 *obufp++ = 'o';
a35ca55a
JB
14226 else if (intel_syntax && (sizeflag & DFLAG))
14227 *obufp++ = 'q';
52b15da3
JH
14228 else
14229 *obufp++ = 'd';
161a04f6 14230 if (!(rex & REX_W))
a35ca55a 14231 used_prefixes |= (prefixes & PREFIX_DATA);
52b15da3 14232 break;
07f5af7d
L
14233 case '&':
14234 if (!intel_syntax
14235 && address_mode == mode_64bit
14236 && isa64 == intel64)
14237 {
14238 *obufp++ = 'q';
14239 break;
14240 }
14241 /* Fall through. */
6439fc28 14242 case 'T':
d9e3625e
L
14243 if (!intel_syntax
14244 && address_mode == mode_64bit
7bb15c6f 14245 && ((sizeflag & DFLAG) || (rex & REX_W)))
6439fc28
AM
14246 {
14247 *obufp++ = 'q';
14248 break;
14249 }
6608db57 14250 /* Fall through. */
4b4c407a 14251 goto case_P;
252b5132 14252 case 'P':
4b4c407a 14253 if (l == 0 && len == 1)
d9e3625e 14254 {
4b4c407a
L
14255case_P:
14256 if (intel_syntax)
d9e3625e 14257 {
4b4c407a
L
14258 if ((rex & REX_W) == 0
14259 && (prefixes & PREFIX_DATA))
14260 {
14261 if ((sizeflag & DFLAG) == 0)
14262 *obufp++ = 'w';
14263 used_prefixes |= (prefixes & PREFIX_DATA);
14264 }
14265 break;
14266 }
14267 if ((prefixes & PREFIX_DATA)
14268 || (rex & REX_W)
14269 || (sizeflag & SUFFIX_ALWAYS))
14270 {
14271 USED_REX (REX_W);
14272 if (rex & REX_W)
14273 *obufp++ = 'q';
14274 else
14275 {
14276 if (sizeflag & DFLAG)
14277 *obufp++ = 'l';
14278 else
14279 *obufp++ = 'w';
14280 used_prefixes |= (prefixes & PREFIX_DATA);
14281 }
d9e3625e 14282 }
d9e3625e 14283 }
4b4c407a 14284 else
252b5132 14285 {
4b4c407a
L
14286 if (l != 1 || len != 2 || last[0] != 'L')
14287 {
14288 SAVE_LAST (*p);
14289 break;
14290 }
14291
14292 if ((prefixes & PREFIX_DATA)
14293 || (rex & REX_W)
14294 || (sizeflag & SUFFIX_ALWAYS))
52b15da3 14295 {
4b4c407a
L
14296 USED_REX (REX_W);
14297 if (rex & REX_W)
14298 *obufp++ = 'q';
14299 else
14300 {
14301 if (sizeflag & DFLAG)
14302 *obufp++ = intel_syntax ? 'd' : 'l';
14303 else
14304 *obufp++ = 'w';
14305 used_prefixes |= (prefixes & PREFIX_DATA);
14306 }
52b15da3 14307 }
252b5132
RH
14308 }
14309 break;
6439fc28 14310 case 'U':
db6eb5be
AM
14311 if (intel_syntax)
14312 break;
7bb15c6f 14313 if (address_mode == mode_64bit
6c067bbb 14314 && ((sizeflag & DFLAG) || (rex & REX_W)))
6439fc28 14315 {
7967e09e 14316 if (modrm.mod != 3 || (sizeflag & SUFFIX_ALWAYS))
1a114b12 14317 *obufp++ = 'q';
6439fc28
AM
14318 break;
14319 }
6608db57 14320 /* Fall through. */
98b528ac 14321 goto case_Q;
252b5132 14322 case 'Q':
98b528ac 14323 if (l == 0 && len == 1)
252b5132 14324 {
98b528ac
L
14325case_Q:
14326 if (intel_syntax && !alt)
14327 break;
14328 USED_REX (REX_W);
14329 if (modrm.mod != 3 || (sizeflag & SUFFIX_ALWAYS))
52b15da3 14330 {
98b528ac
L
14331 if (rex & REX_W)
14332 *obufp++ = 'q';
52b15da3 14333 else
98b528ac
L
14334 {
14335 if (sizeflag & DFLAG)
14336 *obufp++ = intel_syntax ? 'd' : 'l';
14337 else
14338 *obufp++ = 'w';
f16cd0d5 14339 used_prefixes |= (prefixes & PREFIX_DATA);
98b528ac 14340 }
52b15da3 14341 }
98b528ac
L
14342 }
14343 else
14344 {
14345 if (l != 1 || len != 2 || last[0] != 'L')
14346 {
14347 SAVE_LAST (*p);
14348 break;
14349 }
14350 if (intel_syntax
14351 || (modrm.mod == 3 && !(sizeflag & SUFFIX_ALWAYS)))
14352 break;
14353 if ((rex & REX_W))
14354 {
14355 USED_REX (REX_W);
14356 *obufp++ = 'q';
14357 }
14358 else
14359 *obufp++ = 'l';
252b5132
RH
14360 }
14361 break;
14362 case 'R':
161a04f6
L
14363 USED_REX (REX_W);
14364 if (rex & REX_W)
a35ca55a
JB
14365 *obufp++ = 'q';
14366 else if (sizeflag & DFLAG)
c608c12e 14367 {
a35ca55a 14368 if (intel_syntax)
c608c12e 14369 *obufp++ = 'd';
c608c12e 14370 else
a35ca55a 14371 *obufp++ = 'l';
c608c12e 14372 }
252b5132 14373 else
a35ca55a
JB
14374 *obufp++ = 'w';
14375 if (intel_syntax && !p[1]
161a04f6 14376 && ((rex & REX_W) || (sizeflag & DFLAG)))
a35ca55a 14377 *obufp++ = 'e';
161a04f6 14378 if (!(rex & REX_W))
52b15da3 14379 used_prefixes |= (prefixes & PREFIX_DATA);
252b5132 14380 break;
1a114b12 14381 case 'V':
4b06377f 14382 if (l == 0 && len == 1)
1a114b12 14383 {
4b06377f
L
14384 if (intel_syntax)
14385 break;
7bb15c6f 14386 if (address_mode == mode_64bit
6c067bbb 14387 && ((sizeflag & DFLAG) || (rex & REX_W)))
4b06377f
L
14388 {
14389 if (sizeflag & SUFFIX_ALWAYS)
14390 *obufp++ = 'q';
14391 break;
14392 }
14393 }
14394 else
14395 {
14396 if (l != 1
14397 || len != 2
14398 || last[0] != 'L')
14399 {
14400 SAVE_LAST (*p);
14401 break;
14402 }
14403
14404 if (rex & REX_W)
14405 {
14406 *obufp++ = 'a';
14407 *obufp++ = 'b';
14408 *obufp++ = 's';
14409 }
1a114b12
JB
14410 }
14411 /* Fall through. */
4b06377f 14412 goto case_S;
252b5132 14413 case 'S':
4b06377f 14414 if (l == 0 && len == 1)
252b5132 14415 {
4b06377f
L
14416case_S:
14417 if (intel_syntax)
14418 break;
14419 if (sizeflag & SUFFIX_ALWAYS)
52b15da3 14420 {
4b06377f
L
14421 if (rex & REX_W)
14422 *obufp++ = 'q';
52b15da3 14423 else
4b06377f
L
14424 {
14425 if (sizeflag & DFLAG)
14426 *obufp++ = 'l';
14427 else
14428 *obufp++ = 'w';
14429 used_prefixes |= (prefixes & PREFIX_DATA);
14430 }
14431 }
14432 }
14433 else
14434 {
14435 if (l != 1
14436 || len != 2
14437 || last[0] != 'L')
14438 {
14439 SAVE_LAST (*p);
14440 break;
52b15da3 14441 }
4b06377f
L
14442
14443 if (address_mode == mode_64bit
14444 && !(prefixes & PREFIX_ADDR))
14445 {
14446 *obufp++ = 'a';
14447 *obufp++ = 'b';
14448 *obufp++ = 's';
14449 }
14450
14451 goto case_S;
252b5132 14452 }
252b5132 14453 break;
041bd2e0 14454 case 'X':
c0f3af97
L
14455 if (l != 0 || len != 1)
14456 {
14457 SAVE_LAST (*p);
14458 break;
14459 }
14460 if (need_vex && vex.prefix)
14461 {
14462 if (vex.prefix == DATA_PREFIX_OPCODE)
14463 *obufp++ = 'd';
14464 else
14465 *obufp++ = 's';
14466 }
041bd2e0 14467 else
f16cd0d5
L
14468 {
14469 if (prefixes & PREFIX_DATA)
14470 *obufp++ = 'd';
14471 else
14472 *obufp++ = 's';
14473 used_prefixes |= (prefixes & PREFIX_DATA);
14474 }
041bd2e0 14475 break;
76f227a5 14476 case 'Y':
c0f3af97 14477 if (l == 0 && len == 1)
9646c87b 14478 abort ();
c0f3af97
L
14479 else
14480 {
14481 if (l != 1 || len != 2 || last[0] != 'X')
14482 {
14483 SAVE_LAST (*p);
14484 break;
14485 }
14486 if (!need_vex)
14487 abort ();
14488 if (intel_syntax
04d824a4 14489 || ((modrm.mod == 3 || vex.b) && !(sizeflag & SUFFIX_ALWAYS)))
c0f3af97
L
14490 break;
14491 switch (vex.length)
14492 {
14493 case 128:
14494 *obufp++ = 'x';
14495 break;
14496 case 256:
14497 *obufp++ = 'y';
14498 break;
04d824a4
JB
14499 case 512:
14500 if (!vex.evex)
c0f3af97 14501 default:
04d824a4 14502 abort ();
c0f3af97 14503 }
76f227a5
JH
14504 }
14505 break;
252b5132 14506 case 'W':
0bfee649 14507 if (l == 0 && len == 1)
a35ca55a 14508 {
0bfee649
L
14509 /* operand size flag for cwtl, cbtw */
14510 USED_REX (REX_W);
14511 if (rex & REX_W)
14512 {
14513 if (intel_syntax)
14514 *obufp++ = 'd';
14515 else
14516 *obufp++ = 'l';
14517 }
14518 else if (sizeflag & DFLAG)
14519 *obufp++ = 'w';
a35ca55a 14520 else
0bfee649
L
14521 *obufp++ = 'b';
14522 if (!(rex & REX_W))
14523 used_prefixes |= (prefixes & PREFIX_DATA);
a35ca55a 14524 }
252b5132 14525 else
0bfee649 14526 {
6c30d220
L
14527 if (l != 1
14528 || len != 2
14529 || (last[0] != 'X'
14530 && last[0] != 'L'))
0bfee649
L
14531 {
14532 SAVE_LAST (*p);
14533 break;
14534 }
14535 if (!need_vex)
14536 abort ();
6c30d220
L
14537 if (last[0] == 'X')
14538 *obufp++ = vex.w ? 'd': 's';
14539 else
14540 *obufp++ = vex.w ? 'q': 'd';
0bfee649 14541 }
252b5132 14542 break;
a72d2af2
L
14543 case '^':
14544 if (intel_syntax)
14545 break;
14546 if ((prefixes & PREFIX_DATA) || (sizeflag & SUFFIX_ALWAYS))
14547 {
14548 if (sizeflag & DFLAG)
14549 *obufp++ = 'l';
14550 else
14551 *obufp++ = 'w';
14552 used_prefixes |= (prefixes & PREFIX_DATA);
14553 }
14554 break;
5db04b09
L
14555 case '@':
14556 if (intel_syntax)
14557 break;
14558 if (address_mode == mode_64bit
14559 && (isa64 == intel64
14560 || ((sizeflag & DFLAG) || (rex & REX_W))))
14561 *obufp++ = 'q';
14562 else if ((prefixes & PREFIX_DATA))
14563 {
14564 if (!(sizeflag & DFLAG))
14565 *obufp++ = 'w';
14566 used_prefixes |= (prefixes & PREFIX_DATA);
14567 }
14568 break;
252b5132 14569 }
9306ca4a 14570 alt = 0;
252b5132
RH
14571 }
14572 *obufp = 0;
ea397f5b 14573 mnemonicendp = obufp;
6439fc28 14574 return 0;
252b5132
RH
14575}
14576
14577static void
26ca5450 14578oappend (const char *s)
252b5132 14579{
ea397f5b 14580 obufp = stpcpy (obufp, s);
252b5132
RH
14581}
14582
14583static void
26ca5450 14584append_seg (void)
252b5132 14585{
285ca992
L
14586 /* Only print the active segment register. */
14587 if (!active_seg_prefix)
14588 return;
14589
14590 used_prefixes |= active_seg_prefix;
14591 switch (active_seg_prefix)
7d421014 14592 {
285ca992 14593 case PREFIX_CS:
9ce09ba2 14594 oappend_maybe_intel ("%cs:");
285ca992
L
14595 break;
14596 case PREFIX_DS:
9ce09ba2 14597 oappend_maybe_intel ("%ds:");
285ca992
L
14598 break;
14599 case PREFIX_SS:
9ce09ba2 14600 oappend_maybe_intel ("%ss:");
285ca992
L
14601 break;
14602 case PREFIX_ES:
9ce09ba2 14603 oappend_maybe_intel ("%es:");
285ca992
L
14604 break;
14605 case PREFIX_FS:
9ce09ba2 14606 oappend_maybe_intel ("%fs:");
285ca992
L
14607 break;
14608 case PREFIX_GS:
9ce09ba2 14609 oappend_maybe_intel ("%gs:");
285ca992
L
14610 break;
14611 default:
14612 break;
7d421014 14613 }
252b5132
RH
14614}
14615
14616static void
26ca5450 14617OP_indirE (int bytemode, int sizeflag)
252b5132
RH
14618{
14619 if (!intel_syntax)
14620 oappend ("*");
14621 OP_E (bytemode, sizeflag);
14622}
14623
52b15da3 14624static void
26ca5450 14625print_operand_value (char *buf, int hex, bfd_vma disp)
52b15da3 14626{
cb712a9e 14627 if (address_mode == mode_64bit)
52b15da3
JH
14628 {
14629 if (hex)
14630 {
14631 char tmp[30];
14632 int i;
14633 buf[0] = '0';
14634 buf[1] = 'x';
14635 sprintf_vma (tmp, disp);
6608db57 14636 for (i = 0; tmp[i] == '0' && tmp[i + 1]; i++);
52b15da3
JH
14637 strcpy (buf + 2, tmp + i);
14638 }
14639 else
14640 {
14641 bfd_signed_vma v = disp;
14642 char tmp[30];
14643 int i;
14644 if (v < 0)
14645 {
14646 *(buf++) = '-';
14647 v = -disp;
6608db57 14648 /* Check for possible overflow on 0x8000000000000000. */
52b15da3
JH
14649 if (v < 0)
14650 {
14651 strcpy (buf, "9223372036854775808");
14652 return;
14653 }
14654 }
14655 if (!v)
14656 {
14657 strcpy (buf, "0");
14658 return;
14659 }
14660
14661 i = 0;
14662 tmp[29] = 0;
14663 while (v)
14664 {
6608db57 14665 tmp[28 - i] = (v % 10) + '0';
52b15da3
JH
14666 v /= 10;
14667 i++;
14668 }
14669 strcpy (buf, tmp + 29 - i);
14670 }
14671 }
14672 else
14673 {
14674 if (hex)
14675 sprintf (buf, "0x%x", (unsigned int) disp);
14676 else
14677 sprintf (buf, "%d", (int) disp);
14678 }
14679}
14680
5d669648
L
14681/* Put DISP in BUF as signed hex number. */
14682
14683static void
14684print_displacement (char *buf, bfd_vma disp)
14685{
14686 bfd_signed_vma val = disp;
14687 char tmp[30];
14688 int i, j = 0;
14689
14690 if (val < 0)
14691 {
14692 buf[j++] = '-';
14693 val = -disp;
14694
14695 /* Check for possible overflow. */
14696 if (val < 0)
14697 {
14698 switch (address_mode)
14699 {
14700 case mode_64bit:
14701 strcpy (buf + j, "0x8000000000000000");
14702 break;
14703 case mode_32bit:
14704 strcpy (buf + j, "0x80000000");
14705 break;
14706 case mode_16bit:
14707 strcpy (buf + j, "0x8000");
14708 break;
14709 }
14710 return;
14711 }
14712 }
14713
14714 buf[j++] = '0';
14715 buf[j++] = 'x';
14716
0af1713e 14717 sprintf_vma (tmp, (bfd_vma) val);
5d669648
L
14718 for (i = 0; tmp[i] == '0'; i++)
14719 continue;
14720 if (tmp[i] == '\0')
14721 i--;
14722 strcpy (buf + j, tmp + i);
14723}
14724
3f31e633
JB
14725static void
14726intel_operand_size (int bytemode, int sizeflag)
14727{
43234a1e
L
14728 if (vex.evex
14729 && vex.b
14730 && (bytemode == x_mode
14731 || bytemode == evex_half_bcst_xmmq_mode))
14732 {
14733 if (vex.w)
14734 oappend ("QWORD PTR ");
14735 else
14736 oappend ("DWORD PTR ");
14737 return;
14738 }
3f31e633
JB
14739 switch (bytemode)
14740 {
14741 case b_mode:
b6169b20 14742 case b_swap_mode:
42903f7f 14743 case dqb_mode:
1ba585e8 14744 case db_mode:
3f31e633
JB
14745 oappend ("BYTE PTR ");
14746 break;
14747 case w_mode:
1ba585e8 14748 case dw_mode:
3f31e633
JB
14749 case dqw_mode:
14750 oappend ("WORD PTR ");
14751 break;
07f5af7d
L
14752 case indir_v_mode:
14753 if (address_mode == mode_64bit && isa64 == intel64)
14754 {
14755 oappend ("QWORD PTR ");
14756 break;
14757 }
1a0670f3 14758 /* Fall through. */
1a114b12 14759 case stack_v_mode:
7bb15c6f 14760 if (address_mode == mode_64bit && ((sizeflag & DFLAG) || (rex & REX_W)))
3f31e633
JB
14761 {
14762 oappend ("QWORD PTR ");
3f31e633
JB
14763 break;
14764 }
1a0670f3 14765 /* Fall through. */
3f31e633 14766 case v_mode:
b6169b20 14767 case v_swap_mode:
3f31e633 14768 case dq_mode:
161a04f6
L
14769 USED_REX (REX_W);
14770 if (rex & REX_W)
3f31e633 14771 oappend ("QWORD PTR ");
3f31e633 14772 else
f16cd0d5
L
14773 {
14774 if ((sizeflag & DFLAG) || bytemode == dq_mode)
14775 oappend ("DWORD PTR ");
14776 else
14777 oappend ("WORD PTR ");
14778 used_prefixes |= (prefixes & PREFIX_DATA);
14779 }
3f31e633 14780 break;
52fd6d94 14781 case z_mode:
161a04f6 14782 if ((rex & REX_W) || (sizeflag & DFLAG))
52fd6d94
JB
14783 *obufp++ = 'D';
14784 oappend ("WORD PTR ");
161a04f6 14785 if (!(rex & REX_W))
52fd6d94
JB
14786 used_prefixes |= (prefixes & PREFIX_DATA);
14787 break;
34b772a6
JB
14788 case a_mode:
14789 if (sizeflag & DFLAG)
14790 oappend ("QWORD PTR ");
14791 else
14792 oappend ("DWORD PTR ");
14793 used_prefixes |= (prefixes & PREFIX_DATA);
14794 break;
3f31e633 14795 case d_mode:
539f890d
L
14796 case d_scalar_mode:
14797 case d_scalar_swap_mode:
fa99fab2 14798 case d_swap_mode:
42903f7f 14799 case dqd_mode:
3f31e633
JB
14800 oappend ("DWORD PTR ");
14801 break;
14802 case q_mode:
539f890d
L
14803 case q_scalar_mode:
14804 case q_scalar_swap_mode:
b6169b20 14805 case q_swap_mode:
3f31e633
JB
14806 oappend ("QWORD PTR ");
14807 break;
14808 case m_mode:
cb712a9e 14809 if (address_mode == mode_64bit)
3f31e633
JB
14810 oappend ("QWORD PTR ");
14811 else
14812 oappend ("DWORD PTR ");
14813 break;
14814 case f_mode:
14815 if (sizeflag & DFLAG)
14816 oappend ("FWORD PTR ");
14817 else
14818 oappend ("DWORD PTR ");
14819 used_prefixes |= (prefixes & PREFIX_DATA);
14820 break;
14821 case t_mode:
14822 oappend ("TBYTE PTR ");
14823 break;
14824 case x_mode:
b6169b20 14825 case x_swap_mode:
43234a1e
L
14826 case evex_x_gscat_mode:
14827 case evex_x_nobcst_mode:
53467f57
IT
14828 case b_scalar_mode:
14829 case w_scalar_mode:
c0f3af97
L
14830 if (need_vex)
14831 {
14832 switch (vex.length)
14833 {
14834 case 128:
14835 oappend ("XMMWORD PTR ");
14836 break;
14837 case 256:
14838 oappend ("YMMWORD PTR ");
14839 break;
43234a1e
L
14840 case 512:
14841 oappend ("ZMMWORD PTR ");
14842 break;
c0f3af97
L
14843 default:
14844 abort ();
14845 }
14846 }
14847 else
14848 oappend ("XMMWORD PTR ");
14849 break;
14850 case xmm_mode:
3f31e633
JB
14851 oappend ("XMMWORD PTR ");
14852 break;
43234a1e
L
14853 case ymm_mode:
14854 oappend ("YMMWORD PTR ");
14855 break;
c0f3af97 14856 case xmmq_mode:
43234a1e 14857 case evex_half_bcst_xmmq_mode:
c0f3af97
L
14858 if (!need_vex)
14859 abort ();
14860
14861 switch (vex.length)
14862 {
14863 case 128:
14864 oappend ("QWORD PTR ");
14865 break;
14866 case 256:
14867 oappend ("XMMWORD PTR ");
14868 break;
43234a1e
L
14869 case 512:
14870 oappend ("YMMWORD PTR ");
14871 break;
c0f3af97
L
14872 default:
14873 abort ();
14874 }
14875 break;
6c30d220
L
14876 case xmm_mb_mode:
14877 if (!need_vex)
14878 abort ();
14879
14880 switch (vex.length)
14881 {
14882 case 128:
14883 case 256:
43234a1e 14884 case 512:
6c30d220
L
14885 oappend ("BYTE PTR ");
14886 break;
14887 default:
14888 abort ();
14889 }
14890 break;
14891 case xmm_mw_mode:
14892 if (!need_vex)
14893 abort ();
14894
14895 switch (vex.length)
14896 {
14897 case 128:
14898 case 256:
43234a1e 14899 case 512:
6c30d220
L
14900 oappend ("WORD PTR ");
14901 break;
14902 default:
14903 abort ();
14904 }
14905 break;
14906 case xmm_md_mode:
14907 if (!need_vex)
14908 abort ();
14909
14910 switch (vex.length)
14911 {
14912 case 128:
14913 case 256:
43234a1e 14914 case 512:
6c30d220
L
14915 oappend ("DWORD PTR ");
14916 break;
14917 default:
14918 abort ();
14919 }
14920 break;
14921 case xmm_mq_mode:
14922 if (!need_vex)
14923 abort ();
14924
14925 switch (vex.length)
14926 {
14927 case 128:
14928 case 256:
43234a1e 14929 case 512:
6c30d220
L
14930 oappend ("QWORD PTR ");
14931 break;
14932 default:
14933 abort ();
14934 }
14935 break;
14936 case xmmdw_mode:
14937 if (!need_vex)
14938 abort ();
14939
14940 switch (vex.length)
14941 {
14942 case 128:
14943 oappend ("WORD PTR ");
14944 break;
14945 case 256:
14946 oappend ("DWORD PTR ");
14947 break;
43234a1e
L
14948 case 512:
14949 oappend ("QWORD PTR ");
14950 break;
6c30d220
L
14951 default:
14952 abort ();
14953 }
14954 break;
14955 case xmmqd_mode:
14956 if (!need_vex)
14957 abort ();
14958
14959 switch (vex.length)
14960 {
14961 case 128:
14962 oappend ("DWORD PTR ");
14963 break;
14964 case 256:
14965 oappend ("QWORD PTR ");
14966 break;
43234a1e
L
14967 case 512:
14968 oappend ("XMMWORD PTR ");
14969 break;
6c30d220
L
14970 default:
14971 abort ();
14972 }
14973 break;
c0f3af97
L
14974 case ymmq_mode:
14975 if (!need_vex)
14976 abort ();
14977
14978 switch (vex.length)
14979 {
14980 case 128:
14981 oappend ("QWORD PTR ");
14982 break;
14983 case 256:
14984 oappend ("YMMWORD PTR ");
14985 break;
43234a1e
L
14986 case 512:
14987 oappend ("ZMMWORD PTR ");
14988 break;
c0f3af97
L
14989 default:
14990 abort ();
14991 }
14992 break;
6c30d220
L
14993 case ymmxmm_mode:
14994 if (!need_vex)
14995 abort ();
14996
14997 switch (vex.length)
14998 {
14999 case 128:
15000 case 256:
15001 oappend ("XMMWORD PTR ");
15002 break;
15003 default:
15004 abort ();
15005 }
15006 break;
fb9c77c7
L
15007 case o_mode:
15008 oappend ("OWORD PTR ");
15009 break;
43234a1e 15010 case xmm_mdq_mode:
0bfee649 15011 case vex_w_dq_mode:
1c480963 15012 case vex_scalar_w_dq_mode:
0bfee649
L
15013 if (!need_vex)
15014 abort ();
15015
15016 if (vex.w)
15017 oappend ("QWORD PTR ");
15018 else
15019 oappend ("DWORD PTR ");
15020 break;
43234a1e
L
15021 case vex_vsib_d_w_dq_mode:
15022 case vex_vsib_q_w_dq_mode:
15023 if (!need_vex)
15024 abort ();
15025
15026 if (!vex.evex)
15027 {
15028 if (vex.w)
15029 oappend ("QWORD PTR ");
15030 else
15031 oappend ("DWORD PTR ");
15032 }
15033 else
15034 {
b28d1bda
IT
15035 switch (vex.length)
15036 {
15037 case 128:
15038 oappend ("XMMWORD PTR ");
15039 break;
15040 case 256:
15041 oappend ("YMMWORD PTR ");
15042 break;
15043 case 512:
15044 oappend ("ZMMWORD PTR ");
15045 break;
15046 default:
15047 abort ();
15048 }
43234a1e
L
15049 }
15050 break;
5fc35d96
IT
15051 case vex_vsib_q_w_d_mode:
15052 case vex_vsib_d_w_d_mode:
b28d1bda 15053 if (!need_vex || !vex.evex)
5fc35d96
IT
15054 abort ();
15055
b28d1bda
IT
15056 switch (vex.length)
15057 {
15058 case 128:
15059 oappend ("QWORD PTR ");
15060 break;
15061 case 256:
15062 oappend ("XMMWORD PTR ");
15063 break;
15064 case 512:
15065 oappend ("YMMWORD PTR ");
15066 break;
15067 default:
15068 abort ();
15069 }
5fc35d96
IT
15070
15071 break;
1ba585e8
IT
15072 case mask_bd_mode:
15073 if (!need_vex || vex.length != 128)
15074 abort ();
15075 if (vex.w)
15076 oappend ("DWORD PTR ");
15077 else
15078 oappend ("BYTE PTR ");
15079 break;
43234a1e
L
15080 case mask_mode:
15081 if (!need_vex)
15082 abort ();
1ba585e8
IT
15083 if (vex.w)
15084 oappend ("QWORD PTR ");
15085 else
15086 oappend ("WORD PTR ");
43234a1e 15087 break;
6c75cc62 15088 case v_bnd_mode:
d276ec69 15089 case v_bndmk_mode:
3f31e633
JB
15090 default:
15091 break;
15092 }
15093}
15094
252b5132 15095static void
c0f3af97 15096OP_E_register (int bytemode, int sizeflag)
252b5132 15097{
c0f3af97
L
15098 int reg = modrm.rm;
15099 const char **names;
252b5132 15100
c0f3af97
L
15101 USED_REX (REX_B);
15102 if ((rex & REX_B))
15103 reg += 8;
252b5132 15104
b6169b20 15105 if ((sizeflag & SUFFIX_ALWAYS)
1ba585e8 15106 && (bytemode == b_swap_mode
9f79e886 15107 || bytemode == bnd_swap_mode
60227d64 15108 || bytemode == v_swap_mode))
b6169b20
L
15109 swap_operand ();
15110
c0f3af97 15111 switch (bytemode)
252b5132 15112 {
c0f3af97 15113 case b_mode:
b6169b20 15114 case b_swap_mode:
c0f3af97
L
15115 USED_REX (0);
15116 if (rex)
15117 names = names8rex;
15118 else
15119 names = names8;
15120 break;
15121 case w_mode:
15122 names = names16;
15123 break;
15124 case d_mode:
1ba585e8
IT
15125 case dw_mode:
15126 case db_mode:
c0f3af97
L
15127 names = names32;
15128 break;
15129 case q_mode:
15130 names = names64;
15131 break;
15132 case m_mode:
6c75cc62 15133 case v_bnd_mode:
c0f3af97
L
15134 names = address_mode == mode_64bit ? names64 : names32;
15135 break;
7e8b059b 15136 case bnd_mode:
9f79e886 15137 case bnd_swap_mode:
0d96e4df
L
15138 if (reg > 0x3)
15139 {
15140 oappend ("(bad)");
15141 return;
15142 }
7e8b059b
L
15143 names = names_bnd;
15144 break;
07f5af7d
L
15145 case indir_v_mode:
15146 if (address_mode == mode_64bit && isa64 == intel64)
15147 {
15148 names = names64;
15149 break;
15150 }
1a0670f3 15151 /* Fall through. */
c0f3af97 15152 case stack_v_mode:
7bb15c6f 15153 if (address_mode == mode_64bit && ((sizeflag & DFLAG) || (rex & REX_W)))
252b5132 15154 {
c0f3af97 15155 names = names64;
252b5132 15156 break;
252b5132 15157 }
c0f3af97 15158 bytemode = v_mode;
1a0670f3 15159 /* Fall through. */
c0f3af97 15160 case v_mode:
b6169b20 15161 case v_swap_mode:
c0f3af97
L
15162 case dq_mode:
15163 case dqb_mode:
15164 case dqd_mode:
15165 case dqw_mode:
15166 USED_REX (REX_W);
15167 if (rex & REX_W)
15168 names = names64;
c0f3af97 15169 else
f16cd0d5 15170 {
7bb15c6f 15171 if ((sizeflag & DFLAG)
f16cd0d5
L
15172 || (bytemode != v_mode
15173 && bytemode != v_swap_mode))
15174 names = names32;
15175 else
15176 names = names16;
15177 used_prefixes |= (prefixes & PREFIX_DATA);
15178 }
c0f3af97 15179 break;
de89d0a3
IT
15180 case va_mode:
15181 names = (address_mode == mode_64bit
15182 ? names64 : names32);
15183 if (!(prefixes & PREFIX_ADDR))
aa178437
IT
15184 names = (address_mode == mode_16bit
15185 ? names16 : names);
de89d0a3
IT
15186 else
15187 {
15188 /* Remove "addr16/addr32". */
15189 all_prefixes[last_addr_prefix] = 0;
15190 names = (address_mode != mode_32bit
15191 ? names32 : names16);
15192 used_prefixes |= PREFIX_ADDR;
15193 }
15194 break;
1ba585e8 15195 case mask_bd_mode:
43234a1e 15196 case mask_mode:
9889cbb1
L
15197 if (reg > 0x7)
15198 {
15199 oappend ("(bad)");
15200 return;
15201 }
43234a1e
L
15202 names = names_mask;
15203 break;
c0f3af97
L
15204 case 0:
15205 return;
15206 default:
15207 oappend (INTERNAL_DISASSEMBLER_ERROR);
252b5132
RH
15208 return;
15209 }
c0f3af97
L
15210 oappend (names[reg]);
15211}
15212
15213static void
c1e679ec 15214OP_E_memory (int bytemode, int sizeflag)
c0f3af97
L
15215{
15216 bfd_vma disp = 0;
15217 int add = (rex & REX_B) ? 8 : 0;
15218 int riprel = 0;
43234a1e
L
15219 int shift;
15220
15221 if (vex.evex)
15222 {
15223 /* In EVEX, if operand doesn't allow broadcast, vex.b should be 0. */
15224 if (vex.b
15225 && bytemode != x_mode
90a915bf 15226 && bytemode != xmmq_mode
43234a1e
L
15227 && bytemode != evex_half_bcst_xmmq_mode)
15228 {
15229 BadOp ();
15230 return;
15231 }
15232 switch (bytemode)
15233 {
1ba585e8
IT
15234 case dqw_mode:
15235 case dw_mode:
1ba585e8
IT
15236 shift = 1;
15237 break;
15238 case dqb_mode:
15239 case db_mode:
15240 shift = 0;
15241 break;
43234a1e 15242 case vex_vsib_d_w_dq_mode:
5fc35d96 15243 case vex_vsib_d_w_d_mode:
eaa9d1ad 15244 case vex_vsib_q_w_dq_mode:
5fc35d96 15245 case vex_vsib_q_w_d_mode:
43234a1e
L
15246 case evex_x_gscat_mode:
15247 case xmm_mdq_mode:
15248 shift = vex.w ? 3 : 2;
15249 break;
43234a1e
L
15250 case x_mode:
15251 case evex_half_bcst_xmmq_mode:
90a915bf 15252 case xmmq_mode:
43234a1e
L
15253 if (vex.b)
15254 {
15255 shift = vex.w ? 3 : 2;
15256 break;
15257 }
1a0670f3 15258 /* Fall through. */
43234a1e
L
15259 case xmmqd_mode:
15260 case xmmdw_mode:
43234a1e
L
15261 case ymmq_mode:
15262 case evex_x_nobcst_mode:
15263 case x_swap_mode:
15264 switch (vex.length)
15265 {
15266 case 128:
15267 shift = 4;
15268 break;
15269 case 256:
15270 shift = 5;
15271 break;
15272 case 512:
15273 shift = 6;
15274 break;
15275 default:
15276 abort ();
15277 }
15278 break;
15279 case ymm_mode:
15280 shift = 5;
15281 break;
15282 case xmm_mode:
15283 shift = 4;
15284 break;
15285 case xmm_mq_mode:
15286 case q_mode:
15287 case q_scalar_mode:
15288 case q_swap_mode:
15289 case q_scalar_swap_mode:
15290 shift = 3;
15291 break;
15292 case dqd_mode:
15293 case xmm_md_mode:
15294 case d_mode:
15295 case d_scalar_mode:
15296 case d_swap_mode:
15297 case d_scalar_swap_mode:
15298 shift = 2;
15299 break;
5074ad8a 15300 case w_scalar_mode:
43234a1e
L
15301 case xmm_mw_mode:
15302 shift = 1;
15303 break;
5074ad8a 15304 case b_scalar_mode:
43234a1e
L
15305 case xmm_mb_mode:
15306 shift = 0;
15307 break;
15308 default:
15309 abort ();
15310 }
15311 /* Make necessary corrections to shift for modes that need it.
15312 For these modes we currently have shift 4, 5 or 6 depending on
15313 vex.length (it corresponds to xmmword, ymmword or zmmword
15314 operand). We might want to make it 3, 4 or 5 (e.g. for
15315 xmmq_mode). In case of broadcast enabled the corrections
15316 aren't needed, as element size is always 32 or 64 bits. */
90a915bf
IT
15317 if (!vex.b
15318 && (bytemode == xmmq_mode
15319 || bytemode == evex_half_bcst_xmmq_mode))
43234a1e
L
15320 shift -= 1;
15321 else if (bytemode == xmmqd_mode)
15322 shift -= 2;
15323 else if (bytemode == xmmdw_mode)
15324 shift -= 3;
b28d1bda
IT
15325 else if (bytemode == ymmq_mode && vex.length == 128)
15326 shift -= 1;
43234a1e
L
15327 }
15328 else
15329 shift = 0;
252b5132 15330
c0f3af97 15331 USED_REX (REX_B);
3f31e633
JB
15332 if (intel_syntax)
15333 intel_operand_size (bytemode, sizeflag);
252b5132
RH
15334 append_seg ();
15335
5d669648 15336 if ((sizeflag & AFLAG) || address_mode == mode_64bit)
252b5132 15337 {
5d669648
L
15338 /* 32/64 bit address mode */
15339 int havedisp;
252b5132
RH
15340 int havesib;
15341 int havebase;
0f7da397 15342 int haveindex;
20afcfb7 15343 int needindex;
1bc60e56 15344 int needaddr32;
82c18208 15345 int base, rbase;
91d6fa6a 15346 int vindex = 0;
252b5132 15347 int scale = 0;
7e8b059b
L
15348 int addr32flag = !((sizeflag & AFLAG)
15349 || bytemode == v_bnd_mode
d276ec69 15350 || bytemode == v_bndmk_mode
9f79e886
JB
15351 || bytemode == bnd_mode
15352 || bytemode == bnd_swap_mode);
6c30d220
L
15353 const char **indexes64 = names64;
15354 const char **indexes32 = names32;
252b5132
RH
15355
15356 havesib = 0;
15357 havebase = 1;
0f7da397 15358 haveindex = 0;
7967e09e 15359 base = modrm.rm;
252b5132
RH
15360
15361 if (base == 4)
15362 {
15363 havesib = 1;
dfc8cf43 15364 vindex = sib.index;
161a04f6
L
15365 USED_REX (REX_X);
15366 if (rex & REX_X)
91d6fa6a 15367 vindex += 8;
6c30d220
L
15368 switch (bytemode)
15369 {
15370 case vex_vsib_d_w_dq_mode:
5fc35d96 15371 case vex_vsib_d_w_d_mode:
6c30d220 15372 case vex_vsib_q_w_dq_mode:
5fc35d96 15373 case vex_vsib_q_w_d_mode:
6c30d220
L
15374 if (!need_vex)
15375 abort ();
43234a1e
L
15376 if (vex.evex)
15377 {
15378 if (!vex.v)
15379 vindex += 16;
15380 }
6c30d220
L
15381
15382 haveindex = 1;
15383 switch (vex.length)
15384 {
15385 case 128:
7bb15c6f 15386 indexes64 = indexes32 = names_xmm;
6c30d220
L
15387 break;
15388 case 256:
5fc35d96
IT
15389 if (!vex.w
15390 || bytemode == vex_vsib_q_w_dq_mode
15391 || bytemode == vex_vsib_q_w_d_mode)
7bb15c6f 15392 indexes64 = indexes32 = names_ymm;
6c30d220 15393 else
7bb15c6f 15394 indexes64 = indexes32 = names_xmm;
6c30d220 15395 break;
43234a1e 15396 case 512:
5fc35d96
IT
15397 if (!vex.w
15398 || bytemode == vex_vsib_q_w_dq_mode
15399 || bytemode == vex_vsib_q_w_d_mode)
43234a1e
L
15400 indexes64 = indexes32 = names_zmm;
15401 else
15402 indexes64 = indexes32 = names_ymm;
15403 break;
6c30d220
L
15404 default:
15405 abort ();
15406 }
15407 break;
15408 default:
15409 haveindex = vindex != 4;
15410 break;
15411 }
15412 scale = sib.scale;
15413 base = sib.base;
252b5132
RH
15414 codep++;
15415 }
82c18208 15416 rbase = base + add;
252b5132 15417
7967e09e 15418 switch (modrm.mod)
252b5132
RH
15419 {
15420 case 0:
82c18208 15421 if (base == 5)
252b5132
RH
15422 {
15423 havebase = 0;
cb712a9e 15424 if (address_mode == mode_64bit && !havesib)
52b15da3
JH
15425 riprel = 1;
15426 disp = get32s ();
d276ec69
JB
15427 if (riprel && bytemode == v_bndmk_mode)
15428 {
15429 oappend ("(bad)");
15430 return;
15431 }
252b5132
RH
15432 }
15433 break;
15434 case 1:
15435 FETCH_DATA (the_info, codep + 1);
15436 disp = *codep++;
15437 if ((disp & 0x80) != 0)
15438 disp -= 0x100;
43234a1e
L
15439 if (vex.evex && shift > 0)
15440 disp <<= shift;
252b5132
RH
15441 break;
15442 case 2:
52b15da3 15443 disp = get32s ();
252b5132
RH
15444 break;
15445 }
15446
1bc60e56
L
15447 needindex = 0;
15448 needaddr32 = 0;
15449 if (havesib
15450 && !havebase
15451 && !haveindex
15452 && address_mode != mode_16bit)
15453 {
15454 if (address_mode == mode_64bit)
15455 {
15456 /* Display eiz instead of addr32. */
15457 needindex = addr32flag;
15458 needaddr32 = 1;
15459 }
15460 else
15461 {
15462 /* In 32-bit mode, we need index register to tell [offset]
15463 from [eiz*1 + offset]. */
15464 needindex = 1;
15465 }
15466 }
15467
20afcfb7
L
15468 havedisp = (havebase
15469 || needindex
15470 || (havesib && (haveindex || scale != 0)));
5d669648 15471
252b5132 15472 if (!intel_syntax)
82c18208 15473 if (modrm.mod != 0 || base == 5)
db6eb5be 15474 {
5d669648
L
15475 if (havedisp || riprel)
15476 print_displacement (scratchbuf, disp);
15477 else
15478 print_operand_value (scratchbuf, 1, disp);
db6eb5be 15479 oappend (scratchbuf);
52b15da3
JH
15480 if (riprel)
15481 {
15482 set_op (disp, 1);
28596323 15483 oappend (!addr32flag ? "(%rip)" : "(%eip)");
52b15da3 15484 }
db6eb5be 15485 }
2da11e11 15486
1bc60e56 15487 if ((havebase || haveindex || needaddr32 || riprel)
7e8b059b 15488 && (bytemode != v_bnd_mode)
d276ec69 15489 && (bytemode != v_bndmk_mode)
9f79e886
JB
15490 && (bytemode != bnd_mode)
15491 && (bytemode != bnd_swap_mode))
87767711
JB
15492 used_prefixes |= PREFIX_ADDR;
15493
5d669648 15494 if (havedisp || (intel_syntax && riprel))
252b5132 15495 {
252b5132 15496 *obufp++ = open_char;
52b15da3 15497 if (intel_syntax && riprel)
185b1163
L
15498 {
15499 set_op (disp, 1);
28596323 15500 oappend (!addr32flag ? "rip" : "eip");
185b1163 15501 }
db6eb5be 15502 *obufp = '\0';
252b5132 15503 if (havebase)
7e8b059b 15504 oappend (address_mode == mode_64bit && !addr32flag
82c18208 15505 ? names64[rbase] : names32[rbase]);
252b5132
RH
15506 if (havesib)
15507 {
db51cc60
L
15508 /* ESP/RSP won't allow index. If base isn't ESP/RSP,
15509 print index to tell base + index from base. */
15510 if (scale != 0
20afcfb7 15511 || needindex
db51cc60
L
15512 || haveindex
15513 || (havebase && base != ESP_REG_NUM))
252b5132 15514 {
9306ca4a 15515 if (!intel_syntax || havebase)
db6eb5be 15516 {
9306ca4a
JB
15517 *obufp++ = separator_char;
15518 *obufp = '\0';
db6eb5be 15519 }
db51cc60 15520 if (haveindex)
7e8b059b 15521 oappend (address_mode == mode_64bit && !addr32flag
6c30d220 15522 ? indexes64[vindex] : indexes32[vindex]);
db51cc60 15523 else
7e8b059b 15524 oappend (address_mode == mode_64bit && !addr32flag
db51cc60
L
15525 ? index64 : index32);
15526
db6eb5be
AM
15527 *obufp++ = scale_char;
15528 *obufp = '\0';
15529 sprintf (scratchbuf, "%d", 1 << scale);
15530 oappend (scratchbuf);
15531 }
252b5132 15532 }
185b1163 15533 if (intel_syntax
82c18208 15534 && (disp || modrm.mod != 0 || base == 5))
3d456fa1 15535 {
db51cc60 15536 if (!havedisp || (bfd_signed_vma) disp >= 0)
3d456fa1
JB
15537 {
15538 *obufp++ = '+';
15539 *obufp = '\0';
15540 }
05203043 15541 else if (modrm.mod != 1 && disp != -disp)
3d456fa1
JB
15542 {
15543 *obufp++ = '-';
15544 *obufp = '\0';
15545 disp = - (bfd_signed_vma) disp;
15546 }
15547
db51cc60
L
15548 if (havedisp)
15549 print_displacement (scratchbuf, disp);
15550 else
15551 print_operand_value (scratchbuf, 1, disp);
3d456fa1
JB
15552 oappend (scratchbuf);
15553 }
252b5132
RH
15554
15555 *obufp++ = close_char;
db6eb5be 15556 *obufp = '\0';
252b5132
RH
15557 }
15558 else if (intel_syntax)
db6eb5be 15559 {
82c18208 15560 if (modrm.mod != 0 || base == 5)
db6eb5be 15561 {
285ca992 15562 if (!active_seg_prefix)
252b5132 15563 {
d708bcba 15564 oappend (names_seg[ds_reg - es_reg]);
252b5132
RH
15565 oappend (":");
15566 }
52b15da3 15567 print_operand_value (scratchbuf, 1, disp);
db6eb5be
AM
15568 oappend (scratchbuf);
15569 }
15570 }
252b5132
RH
15571 }
15572 else
f16cd0d5
L
15573 {
15574 /* 16 bit address mode */
15575 used_prefixes |= prefixes & PREFIX_ADDR;
7967e09e 15576 switch (modrm.mod)
252b5132
RH
15577 {
15578 case 0:
7967e09e 15579 if (modrm.rm == 6)
252b5132
RH
15580 {
15581 disp = get16 ();
15582 if ((disp & 0x8000) != 0)
15583 disp -= 0x10000;
15584 }
15585 break;
15586 case 1:
15587 FETCH_DATA (the_info, codep + 1);
15588 disp = *codep++;
15589 if ((disp & 0x80) != 0)
15590 disp -= 0x100;
65f3ed04
JB
15591 if (vex.evex && shift > 0)
15592 disp <<= shift;
252b5132
RH
15593 break;
15594 case 2:
15595 disp = get16 ();
15596 if ((disp & 0x8000) != 0)
15597 disp -= 0x10000;
15598 break;
15599 }
15600
15601 if (!intel_syntax)
7967e09e 15602 if (modrm.mod != 0 || modrm.rm == 6)
db6eb5be 15603 {
5d669648 15604 print_displacement (scratchbuf, disp);
db6eb5be
AM
15605 oappend (scratchbuf);
15606 }
252b5132 15607
7967e09e 15608 if (modrm.mod != 0 || modrm.rm != 6)
252b5132
RH
15609 {
15610 *obufp++ = open_char;
db6eb5be 15611 *obufp = '\0';
7967e09e 15612 oappend (index16[modrm.rm]);
5d669648
L
15613 if (intel_syntax
15614 && (disp || modrm.mod != 0 || modrm.rm == 6))
3d456fa1 15615 {
5d669648 15616 if ((bfd_signed_vma) disp >= 0)
3d456fa1
JB
15617 {
15618 *obufp++ = '+';
15619 *obufp = '\0';
15620 }
7967e09e 15621 else if (modrm.mod != 1)
3d456fa1
JB
15622 {
15623 *obufp++ = '-';
15624 *obufp = '\0';
15625 disp = - (bfd_signed_vma) disp;
15626 }
15627
5d669648 15628 print_displacement (scratchbuf, disp);
3d456fa1
JB
15629 oappend (scratchbuf);
15630 }
15631
db6eb5be
AM
15632 *obufp++ = close_char;
15633 *obufp = '\0';
252b5132 15634 }
3d456fa1
JB
15635 else if (intel_syntax)
15636 {
285ca992 15637 if (!active_seg_prefix)
3d456fa1
JB
15638 {
15639 oappend (names_seg[ds_reg - es_reg]);
15640 oappend (":");
15641 }
15642 print_operand_value (scratchbuf, 1, disp & 0xffff);
15643 oappend (scratchbuf);
15644 }
252b5132 15645 }
43234a1e
L
15646 if (vex.evex && vex.b
15647 && (bytemode == x_mode
90a915bf 15648 || bytemode == xmmq_mode
43234a1e
L
15649 || bytemode == evex_half_bcst_xmmq_mode))
15650 {
90a915bf
IT
15651 if (vex.w
15652 || bytemode == xmmq_mode
15653 || bytemode == evex_half_bcst_xmmq_mode)
b28d1bda
IT
15654 {
15655 switch (vex.length)
15656 {
15657 case 128:
15658 oappend ("{1to2}");
15659 break;
15660 case 256:
15661 oappend ("{1to4}");
15662 break;
15663 case 512:
15664 oappend ("{1to8}");
15665 break;
15666 default:
15667 abort ();
15668 }
15669 }
43234a1e 15670 else
b28d1bda
IT
15671 {
15672 switch (vex.length)
15673 {
15674 case 128:
15675 oappend ("{1to4}");
15676 break;
15677 case 256:
15678 oappend ("{1to8}");
15679 break;
15680 case 512:
15681 oappend ("{1to16}");
15682 break;
15683 default:
15684 abort ();
15685 }
15686 }
43234a1e 15687 }
252b5132
RH
15688}
15689
c0f3af97 15690static void
8b3f93e7 15691OP_E (int bytemode, int sizeflag)
c0f3af97
L
15692{
15693 /* Skip mod/rm byte. */
15694 MODRM_CHECK;
15695 codep++;
15696
15697 if (modrm.mod == 3)
15698 OP_E_register (bytemode, sizeflag);
15699 else
c1e679ec 15700 OP_E_memory (bytemode, sizeflag);
c0f3af97
L
15701}
15702
252b5132 15703static void
26ca5450 15704OP_G (int bytemode, int sizeflag)
252b5132 15705{
52b15da3 15706 int add = 0;
c0a30a9f 15707 const char **names;
161a04f6
L
15708 USED_REX (REX_R);
15709 if (rex & REX_R)
52b15da3 15710 add += 8;
252b5132
RH
15711 switch (bytemode)
15712 {
15713 case b_mode:
52b15da3
JH
15714 USED_REX (0);
15715 if (rex)
7967e09e 15716 oappend (names8rex[modrm.reg + add]);
52b15da3 15717 else
7967e09e 15718 oappend (names8[modrm.reg + add]);
252b5132
RH
15719 break;
15720 case w_mode:
7967e09e 15721 oappend (names16[modrm.reg + add]);
252b5132
RH
15722 break;
15723 case d_mode:
1ba585e8
IT
15724 case db_mode:
15725 case dw_mode:
7967e09e 15726 oappend (names32[modrm.reg + add]);
52b15da3
JH
15727 break;
15728 case q_mode:
7967e09e 15729 oappend (names64[modrm.reg + add]);
252b5132 15730 break;
7e8b059b 15731 case bnd_mode:
0d96e4df
L
15732 if (modrm.reg > 0x3)
15733 {
15734 oappend ("(bad)");
15735 return;
15736 }
7e8b059b
L
15737 oappend (names_bnd[modrm.reg]);
15738 break;
252b5132 15739 case v_mode:
9306ca4a 15740 case dq_mode:
42903f7f
L
15741 case dqb_mode:
15742 case dqd_mode:
9306ca4a 15743 case dqw_mode:
161a04f6
L
15744 USED_REX (REX_W);
15745 if (rex & REX_W)
7967e09e 15746 oappend (names64[modrm.reg + add]);
252b5132 15747 else
f16cd0d5
L
15748 {
15749 if ((sizeflag & DFLAG) || bytemode != v_mode)
15750 oappend (names32[modrm.reg + add]);
15751 else
15752 oappend (names16[modrm.reg + add]);
15753 used_prefixes |= (prefixes & PREFIX_DATA);
15754 }
252b5132 15755 break;
c0a30a9f
L
15756 case va_mode:
15757 names = (address_mode == mode_64bit
15758 ? names64 : names32);
15759 if (!(prefixes & PREFIX_ADDR))
15760 {
15761 if (address_mode == mode_16bit)
15762 names = names16;
15763 }
15764 else
15765 {
15766 /* Remove "addr16/addr32". */
15767 all_prefixes[last_addr_prefix] = 0;
15768 names = (address_mode != mode_32bit
15769 ? names32 : names16);
15770 used_prefixes |= PREFIX_ADDR;
15771 }
15772 oappend (names[modrm.reg + add]);
15773 break;
90700ea2 15774 case m_mode:
cb712a9e 15775 if (address_mode == mode_64bit)
7967e09e 15776 oappend (names64[modrm.reg + add]);
90700ea2 15777 else
7967e09e 15778 oappend (names32[modrm.reg + add]);
90700ea2 15779 break;
1ba585e8 15780 case mask_bd_mode:
43234a1e 15781 case mask_mode:
9889cbb1
L
15782 if ((modrm.reg + add) > 0x7)
15783 {
15784 oappend ("(bad)");
15785 return;
15786 }
43234a1e
L
15787 oappend (names_mask[modrm.reg + add]);
15788 break;
252b5132
RH
15789 default:
15790 oappend (INTERNAL_DISASSEMBLER_ERROR);
15791 break;
15792 }
15793}
15794
52b15da3 15795static bfd_vma
26ca5450 15796get64 (void)
52b15da3 15797{
5dd0794d 15798 bfd_vma x;
52b15da3 15799#ifdef BFD64
5dd0794d
AM
15800 unsigned int a;
15801 unsigned int b;
15802
52b15da3
JH
15803 FETCH_DATA (the_info, codep + 8);
15804 a = *codep++ & 0xff;
15805 a |= (*codep++ & 0xff) << 8;
15806 a |= (*codep++ & 0xff) << 16;
070fe95d 15807 a |= (*codep++ & 0xffu) << 24;
5dd0794d 15808 b = *codep++ & 0xff;
52b15da3
JH
15809 b |= (*codep++ & 0xff) << 8;
15810 b |= (*codep++ & 0xff) << 16;
070fe95d 15811 b |= (*codep++ & 0xffu) << 24;
52b15da3
JH
15812 x = a + ((bfd_vma) b << 32);
15813#else
6608db57 15814 abort ();
5dd0794d 15815 x = 0;
52b15da3
JH
15816#endif
15817 return x;
15818}
15819
15820static bfd_signed_vma
26ca5450 15821get32 (void)
252b5132 15822{
52b15da3 15823 bfd_signed_vma x = 0;
252b5132
RH
15824
15825 FETCH_DATA (the_info, codep + 4);
52b15da3
JH
15826 x = *codep++ & (bfd_signed_vma) 0xff;
15827 x |= (*codep++ & (bfd_signed_vma) 0xff) << 8;
15828 x |= (*codep++ & (bfd_signed_vma) 0xff) << 16;
15829 x |= (*codep++ & (bfd_signed_vma) 0xff) << 24;
15830 return x;
15831}
15832
15833static bfd_signed_vma
26ca5450 15834get32s (void)
52b15da3
JH
15835{
15836 bfd_signed_vma x = 0;
15837
15838 FETCH_DATA (the_info, codep + 4);
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
15844 x = (x ^ ((bfd_signed_vma) 1 << 31)) - ((bfd_signed_vma) 1 << 31);
15845
252b5132
RH
15846 return x;
15847}
15848
15849static int
26ca5450 15850get16 (void)
252b5132
RH
15851{
15852 int x = 0;
15853
15854 FETCH_DATA (the_info, codep + 2);
15855 x = *codep++ & 0xff;
15856 x |= (*codep++ & 0xff) << 8;
15857 return x;
15858}
15859
15860static void
26ca5450 15861set_op (bfd_vma op, int riprel)
252b5132
RH
15862{
15863 op_index[op_ad] = op_ad;
cb712a9e 15864 if (address_mode == mode_64bit)
7081ff04
AJ
15865 {
15866 op_address[op_ad] = op;
15867 op_riprel[op_ad] = riprel;
15868 }
15869 else
15870 {
15871 /* Mask to get a 32-bit address. */
15872 op_address[op_ad] = op & 0xffffffff;
15873 op_riprel[op_ad] = riprel & 0xffffffff;
15874 }
252b5132
RH
15875}
15876
15877static void
26ca5450 15878OP_REG (int code, int sizeflag)
252b5132 15879{
2da11e11 15880 const char *s;
9b60702d 15881 int add;
de882298
RM
15882
15883 switch (code)
15884 {
15885 case es_reg: case ss_reg: case cs_reg:
15886 case ds_reg: case fs_reg: case gs_reg:
15887 oappend (names_seg[code - es_reg]);
15888 return;
15889 }
15890
161a04f6
L
15891 USED_REX (REX_B);
15892 if (rex & REX_B)
52b15da3 15893 add = 8;
9b60702d
L
15894 else
15895 add = 0;
52b15da3
JH
15896
15897 switch (code)
15898 {
52b15da3
JH
15899 case ax_reg: case cx_reg: case dx_reg: case bx_reg:
15900 case sp_reg: case bp_reg: case si_reg: case di_reg:
15901 s = names16[code - ax_reg + add];
15902 break;
52b15da3
JH
15903 case al_reg: case ah_reg: case cl_reg: case ch_reg:
15904 case dl_reg: case dh_reg: case bl_reg: case bh_reg:
15905 USED_REX (0);
15906 if (rex)
15907 s = names8rex[code - al_reg + add];
15908 else
15909 s = names8[code - al_reg];
15910 break;
6439fc28
AM
15911 case rAX_reg: case rCX_reg: case rDX_reg: case rBX_reg:
15912 case rSP_reg: case rBP_reg: case rSI_reg: case rDI_reg:
7bb15c6f 15913 if (address_mode == mode_64bit
6c067bbb 15914 && ((sizeflag & DFLAG) || (rex & REX_W)))
6439fc28
AM
15915 {
15916 s = names64[code - rAX_reg + add];
15917 break;
15918 }
15919 code += eAX_reg - rAX_reg;
6608db57 15920 /* Fall through. */
52b15da3
JH
15921 case eAX_reg: case eCX_reg: case eDX_reg: case eBX_reg:
15922 case eSP_reg: case eBP_reg: case eSI_reg: case eDI_reg:
161a04f6
L
15923 USED_REX (REX_W);
15924 if (rex & REX_W)
52b15da3 15925 s = names64[code - eAX_reg + add];
52b15da3 15926 else
f16cd0d5
L
15927 {
15928 if (sizeflag & DFLAG)
15929 s = names32[code - eAX_reg + add];
15930 else
15931 s = names16[code - eAX_reg + add];
15932 used_prefixes |= (prefixes & PREFIX_DATA);
15933 }
52b15da3 15934 break;
52b15da3
JH
15935 default:
15936 s = INTERNAL_DISASSEMBLER_ERROR;
15937 break;
15938 }
15939 oappend (s);
15940}
15941
15942static void
26ca5450 15943OP_IMREG (int code, int sizeflag)
52b15da3
JH
15944{
15945 const char *s;
252b5132
RH
15946
15947 switch (code)
15948 {
15949 case indir_dx_reg:
d708bcba 15950 if (intel_syntax)
52fd6d94 15951 s = "dx";
d708bcba 15952 else
db6eb5be 15953 s = "(%dx)";
252b5132
RH
15954 break;
15955 case ax_reg: case cx_reg: case dx_reg: case bx_reg:
15956 case sp_reg: case bp_reg: case si_reg: case di_reg:
15957 s = names16[code - ax_reg];
15958 break;
15959 case es_reg: case ss_reg: case cs_reg:
15960 case ds_reg: case fs_reg: case gs_reg:
15961 s = names_seg[code - es_reg];
15962 break;
15963 case al_reg: case ah_reg: case cl_reg: case ch_reg:
15964 case dl_reg: case dh_reg: case bl_reg: case bh_reg:
52b15da3
JH
15965 USED_REX (0);
15966 if (rex)
15967 s = names8rex[code - al_reg];
15968 else
15969 s = names8[code - al_reg];
252b5132
RH
15970 break;
15971 case eAX_reg: case eCX_reg: case eDX_reg: case eBX_reg:
15972 case eSP_reg: case eBP_reg: case eSI_reg: case eDI_reg:
161a04f6
L
15973 USED_REX (REX_W);
15974 if (rex & REX_W)
52b15da3 15975 s = names64[code - eAX_reg];
252b5132 15976 else
f16cd0d5
L
15977 {
15978 if (sizeflag & DFLAG)
15979 s = names32[code - eAX_reg];
15980 else
15981 s = names16[code - eAX_reg];
15982 used_prefixes |= (prefixes & PREFIX_DATA);
15983 }
252b5132 15984 break;
52fd6d94 15985 case z_mode_ax_reg:
161a04f6 15986 if ((rex & REX_W) || (sizeflag & DFLAG))
52fd6d94
JB
15987 s = *names32;
15988 else
15989 s = *names16;
161a04f6 15990 if (!(rex & REX_W))
52fd6d94
JB
15991 used_prefixes |= (prefixes & PREFIX_DATA);
15992 break;
252b5132
RH
15993 default:
15994 s = INTERNAL_DISASSEMBLER_ERROR;
15995 break;
15996 }
15997 oappend (s);
15998}
15999
16000static void
26ca5450 16001OP_I (int bytemode, int sizeflag)
252b5132 16002{
52b15da3
JH
16003 bfd_signed_vma op;
16004 bfd_signed_vma mask = -1;
252b5132
RH
16005
16006 switch (bytemode)
16007 {
16008 case b_mode:
16009 FETCH_DATA (the_info, codep + 1);
52b15da3
JH
16010 op = *codep++;
16011 mask = 0xff;
16012 break;
16013 case q_mode:
cb712a9e 16014 if (address_mode == mode_64bit)
6439fc28
AM
16015 {
16016 op = get32s ();
16017 break;
16018 }
6608db57 16019 /* Fall through. */
252b5132 16020 case v_mode:
161a04f6
L
16021 USED_REX (REX_W);
16022 if (rex & REX_W)
52b15da3 16023 op = get32s ();
252b5132 16024 else
52b15da3 16025 {
f16cd0d5
L
16026 if (sizeflag & DFLAG)
16027 {
16028 op = get32 ();
16029 mask = 0xffffffff;
16030 }
16031 else
16032 {
16033 op = get16 ();
16034 mask = 0xfffff;
16035 }
16036 used_prefixes |= (prefixes & PREFIX_DATA);
52b15da3 16037 }
252b5132
RH
16038 break;
16039 case w_mode:
52b15da3 16040 mask = 0xfffff;
252b5132
RH
16041 op = get16 ();
16042 break;
9306ca4a
JB
16043 case const_1_mode:
16044 if (intel_syntax)
6c067bbb 16045 oappend ("1");
9306ca4a 16046 return;
252b5132
RH
16047 default:
16048 oappend (INTERNAL_DISASSEMBLER_ERROR);
16049 return;
16050 }
16051
52b15da3
JH
16052 op &= mask;
16053 scratchbuf[0] = '$';
d708bcba 16054 print_operand_value (scratchbuf + 1, 1, op);
9ce09ba2 16055 oappend_maybe_intel (scratchbuf);
52b15da3
JH
16056 scratchbuf[0] = '\0';
16057}
16058
16059static void
26ca5450 16060OP_I64 (int bytemode, int sizeflag)
52b15da3
JH
16061{
16062 bfd_signed_vma op;
16063 bfd_signed_vma mask = -1;
16064
cb712a9e 16065 if (address_mode != mode_64bit)
6439fc28
AM
16066 {
16067 OP_I (bytemode, sizeflag);
16068 return;
16069 }
16070
52b15da3
JH
16071 switch (bytemode)
16072 {
16073 case b_mode:
16074 FETCH_DATA (the_info, codep + 1);
16075 op = *codep++;
16076 mask = 0xff;
16077 break;
16078 case v_mode:
161a04f6
L
16079 USED_REX (REX_W);
16080 if (rex & REX_W)
52b15da3 16081 op = get64 ();
52b15da3
JH
16082 else
16083 {
f16cd0d5
L
16084 if (sizeflag & DFLAG)
16085 {
16086 op = get32 ();
16087 mask = 0xffffffff;
16088 }
16089 else
16090 {
16091 op = get16 ();
16092 mask = 0xfffff;
16093 }
16094 used_prefixes |= (prefixes & PREFIX_DATA);
52b15da3 16095 }
52b15da3
JH
16096 break;
16097 case w_mode:
16098 mask = 0xfffff;
16099 op = get16 ();
16100 break;
16101 default:
16102 oappend (INTERNAL_DISASSEMBLER_ERROR);
16103 return;
16104 }
16105
16106 op &= mask;
16107 scratchbuf[0] = '$';
d708bcba 16108 print_operand_value (scratchbuf + 1, 1, op);
9ce09ba2 16109 oappend_maybe_intel (scratchbuf);
252b5132
RH
16110 scratchbuf[0] = '\0';
16111}
16112
16113static void
26ca5450 16114OP_sI (int bytemode, int sizeflag)
252b5132 16115{
52b15da3 16116 bfd_signed_vma op;
252b5132
RH
16117
16118 switch (bytemode)
16119 {
16120 case b_mode:
e3949f17 16121 case b_T_mode:
252b5132
RH
16122 FETCH_DATA (the_info, codep + 1);
16123 op = *codep++;
16124 if ((op & 0x80) != 0)
16125 op -= 0x100;
e3949f17
L
16126 if (bytemode == b_T_mode)
16127 {
16128 if (address_mode != mode_64bit
7bb15c6f 16129 || !((sizeflag & DFLAG) || (rex & REX_W)))
e3949f17 16130 {
6c067bbb
RM
16131 /* The operand-size prefix is overridden by a REX prefix. */
16132 if ((sizeflag & DFLAG) || (rex & REX_W))
e3949f17
L
16133 op &= 0xffffffff;
16134 else
16135 op &= 0xffff;
16136 }
16137 }
16138 else
16139 {
16140 if (!(rex & REX_W))
16141 {
16142 if (sizeflag & DFLAG)
16143 op &= 0xffffffff;
16144 else
16145 op &= 0xffff;
16146 }
16147 }
252b5132
RH
16148 break;
16149 case v_mode:
7bb15c6f
RM
16150 /* The operand-size prefix is overridden by a REX prefix. */
16151 if ((sizeflag & DFLAG) || (rex & REX_W))
52b15da3 16152 op = get32s ();
252b5132 16153 else
d9e3625e 16154 op = get16 ();
252b5132
RH
16155 break;
16156 default:
16157 oappend (INTERNAL_DISASSEMBLER_ERROR);
16158 return;
16159 }
52b15da3
JH
16160
16161 scratchbuf[0] = '$';
16162 print_operand_value (scratchbuf + 1, 1, op);
9ce09ba2 16163 oappend_maybe_intel (scratchbuf);
252b5132
RH
16164}
16165
16166static void
26ca5450 16167OP_J (int bytemode, int sizeflag)
252b5132 16168{
52b15da3 16169 bfd_vma disp;
7081ff04 16170 bfd_vma mask = -1;
65ca155d 16171 bfd_vma segment = 0;
252b5132
RH
16172
16173 switch (bytemode)
16174 {
16175 case b_mode:
16176 FETCH_DATA (the_info, codep + 1);
16177 disp = *codep++;
16178 if ((disp & 0x80) != 0)
16179 disp -= 0x100;
16180 break;
16181 case v_mode:
5db04b09
L
16182 if (isa64 == amd64)
16183 USED_REX (REX_W);
16184 if ((sizeflag & DFLAG)
16185 || (address_mode == mode_64bit
16186 && (isa64 != amd64 || (rex & REX_W))))
52b15da3 16187 disp = get32s ();
252b5132
RH
16188 else
16189 {
16190 disp = get16 ();
206717e8
L
16191 if ((disp & 0x8000) != 0)
16192 disp -= 0x10000;
65ca155d
L
16193 /* In 16bit mode, address is wrapped around at 64k within
16194 the same segment. Otherwise, a data16 prefix on a jump
16195 instruction means that the pc is masked to 16 bits after
16196 the displacement is added! */
16197 mask = 0xffff;
16198 if ((prefixes & PREFIX_DATA) == 0)
4fd7268a 16199 segment = ((start_pc + (codep - start_codep))
65ca155d 16200 & ~((bfd_vma) 0xffff));
252b5132 16201 }
5db04b09
L
16202 if (address_mode != mode_64bit
16203 || (isa64 == amd64 && !(rex & REX_W)))
f16cd0d5 16204 used_prefixes |= (prefixes & PREFIX_DATA);
252b5132
RH
16205 break;
16206 default:
16207 oappend (INTERNAL_DISASSEMBLER_ERROR);
16208 return;
16209 }
42d5f9c6 16210 disp = ((start_pc + (codep - start_codep) + disp) & mask) | segment;
52b15da3
JH
16211 set_op (disp, 0);
16212 print_operand_value (scratchbuf, 1, disp);
252b5132
RH
16213 oappend (scratchbuf);
16214}
16215
252b5132 16216static void
ed7841b3 16217OP_SEG (int bytemode, int sizeflag)
252b5132 16218{
ed7841b3 16219 if (bytemode == w_mode)
7967e09e 16220 oappend (names_seg[modrm.reg]);
ed7841b3 16221 else
7967e09e 16222 OP_E (modrm.mod == 3 ? bytemode : w_mode, sizeflag);
252b5132
RH
16223}
16224
16225static void
26ca5450 16226OP_DIR (int dummy ATTRIBUTE_UNUSED, int sizeflag)
252b5132
RH
16227{
16228 int seg, offset;
16229
c608c12e 16230 if (sizeflag & DFLAG)
252b5132 16231 {
c608c12e
AM
16232 offset = get32 ();
16233 seg = get16 ();
252b5132 16234 }
c608c12e
AM
16235 else
16236 {
16237 offset = get16 ();
16238 seg = get16 ();
16239 }
7d421014 16240 used_prefixes |= (prefixes & PREFIX_DATA);
d708bcba 16241 if (intel_syntax)
3f31e633 16242 sprintf (scratchbuf, "0x%x:0x%x", seg, offset);
d708bcba
AM
16243 else
16244 sprintf (scratchbuf, "$0x%x,$0x%x", seg, offset);
c608c12e 16245 oappend (scratchbuf);
252b5132
RH
16246}
16247
252b5132 16248static void
3f31e633 16249OP_OFF (int bytemode, int sizeflag)
252b5132 16250{
52b15da3 16251 bfd_vma off;
252b5132 16252
3f31e633
JB
16253 if (intel_syntax && (sizeflag & SUFFIX_ALWAYS))
16254 intel_operand_size (bytemode, sizeflag);
252b5132
RH
16255 append_seg ();
16256
cb712a9e 16257 if ((sizeflag & AFLAG) || address_mode == mode_64bit)
252b5132
RH
16258 off = get32 ();
16259 else
16260 off = get16 ();
16261
16262 if (intel_syntax)
16263 {
285ca992 16264 if (!active_seg_prefix)
252b5132 16265 {
d708bcba 16266 oappend (names_seg[ds_reg - es_reg]);
252b5132
RH
16267 oappend (":");
16268 }
16269 }
52b15da3
JH
16270 print_operand_value (scratchbuf, 1, off);
16271 oappend (scratchbuf);
16272}
6439fc28 16273
52b15da3 16274static void
3f31e633 16275OP_OFF64 (int bytemode, int sizeflag)
52b15da3
JH
16276{
16277 bfd_vma off;
16278
539e75ad
L
16279 if (address_mode != mode_64bit
16280 || (prefixes & PREFIX_ADDR))
6439fc28
AM
16281 {
16282 OP_OFF (bytemode, sizeflag);
16283 return;
16284 }
16285
3f31e633
JB
16286 if (intel_syntax && (sizeflag & SUFFIX_ALWAYS))
16287 intel_operand_size (bytemode, sizeflag);
52b15da3
JH
16288 append_seg ();
16289
6608db57 16290 off = get64 ();
52b15da3
JH
16291
16292 if (intel_syntax)
16293 {
285ca992 16294 if (!active_seg_prefix)
52b15da3 16295 {
d708bcba 16296 oappend (names_seg[ds_reg - es_reg]);
52b15da3
JH
16297 oappend (":");
16298 }
16299 }
16300 print_operand_value (scratchbuf, 1, off);
252b5132
RH
16301 oappend (scratchbuf);
16302}
16303
16304static void
26ca5450 16305ptr_reg (int code, int sizeflag)
252b5132 16306{
2da11e11 16307 const char *s;
d708bcba 16308
1d9f512f 16309 *obufp++ = open_char;
20f0a1fc 16310 used_prefixes |= (prefixes & PREFIX_ADDR);
cb712a9e 16311 if (address_mode == mode_64bit)
c1a64871
JH
16312 {
16313 if (!(sizeflag & AFLAG))
db6eb5be 16314 s = names32[code - eAX_reg];
c1a64871 16315 else
db6eb5be 16316 s = names64[code - eAX_reg];
c1a64871 16317 }
52b15da3 16318 else if (sizeflag & AFLAG)
252b5132
RH
16319 s = names32[code - eAX_reg];
16320 else
16321 s = names16[code - eAX_reg];
16322 oappend (s);
1d9f512f
AM
16323 *obufp++ = close_char;
16324 *obufp = 0;
252b5132
RH
16325}
16326
16327static void
26ca5450 16328OP_ESreg (int code, int sizeflag)
252b5132 16329{
9306ca4a 16330 if (intel_syntax)
52fd6d94
JB
16331 {
16332 switch (codep[-1])
16333 {
16334 case 0x6d: /* insw/insl */
16335 intel_operand_size (z_mode, sizeflag);
16336 break;
16337 case 0xa5: /* movsw/movsl/movsq */
16338 case 0xa7: /* cmpsw/cmpsl/cmpsq */
16339 case 0xab: /* stosw/stosl */
16340 case 0xaf: /* scasw/scasl */
16341 intel_operand_size (v_mode, sizeflag);
16342 break;
16343 default:
16344 intel_operand_size (b_mode, sizeflag);
16345 }
16346 }
9ce09ba2 16347 oappend_maybe_intel ("%es:");
252b5132
RH
16348 ptr_reg (code, sizeflag);
16349}
16350
16351static void
26ca5450 16352OP_DSreg (int code, int sizeflag)
252b5132 16353{
9306ca4a 16354 if (intel_syntax)
52fd6d94
JB
16355 {
16356 switch (codep[-1])
16357 {
16358 case 0x6f: /* outsw/outsl */
16359 intel_operand_size (z_mode, sizeflag);
16360 break;
16361 case 0xa5: /* movsw/movsl/movsq */
16362 case 0xa7: /* cmpsw/cmpsl/cmpsq */
16363 case 0xad: /* lodsw/lodsl/lodsq */
16364 intel_operand_size (v_mode, sizeflag);
16365 break;
16366 default:
16367 intel_operand_size (b_mode, sizeflag);
16368 }
16369 }
285ca992
L
16370 /* Set active_seg_prefix to PREFIX_DS if it is unset so that the
16371 default segment register DS is printed. */
16372 if (!active_seg_prefix)
16373 active_seg_prefix = PREFIX_DS;
6608db57 16374 append_seg ();
252b5132
RH
16375 ptr_reg (code, sizeflag);
16376}
16377
252b5132 16378static void
26ca5450 16379OP_C (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 16380{
9b60702d 16381 int add;
161a04f6 16382 if (rex & REX_R)
c4a530c5 16383 {
161a04f6 16384 USED_REX (REX_R);
c4a530c5
JB
16385 add = 8;
16386 }
cb712a9e 16387 else if (address_mode != mode_64bit && (prefixes & PREFIX_LOCK))
c4a530c5 16388 {
f16cd0d5 16389 all_prefixes[last_lock_prefix] = 0;
c4a530c5
JB
16390 used_prefixes |= PREFIX_LOCK;
16391 add = 8;
16392 }
9b60702d
L
16393 else
16394 add = 0;
7967e09e 16395 sprintf (scratchbuf, "%%cr%d", modrm.reg + add);
9ce09ba2 16396 oappend_maybe_intel (scratchbuf);
252b5132
RH
16397}
16398
252b5132 16399static void
26ca5450 16400OP_D (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 16401{
9b60702d 16402 int add;
161a04f6
L
16403 USED_REX (REX_R);
16404 if (rex & REX_R)
52b15da3 16405 add = 8;
9b60702d
L
16406 else
16407 add = 0;
d708bcba 16408 if (intel_syntax)
7967e09e 16409 sprintf (scratchbuf, "db%d", modrm.reg + add);
d708bcba 16410 else
7967e09e 16411 sprintf (scratchbuf, "%%db%d", modrm.reg + add);
252b5132
RH
16412 oappend (scratchbuf);
16413}
16414
252b5132 16415static void
26ca5450 16416OP_T (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 16417{
7967e09e 16418 sprintf (scratchbuf, "%%tr%d", modrm.reg);
9ce09ba2 16419 oappend_maybe_intel (scratchbuf);
252b5132
RH
16420}
16421
16422static void
6f74c397 16423OP_R (int bytemode, int sizeflag)
252b5132 16424{
68f34464
L
16425 /* Skip mod/rm byte. */
16426 MODRM_CHECK;
16427 codep++;
16428 OP_E_register (bytemode, sizeflag);
252b5132
RH
16429}
16430
16431static void
26ca5450 16432OP_MMX (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 16433{
b9733481
L
16434 int reg = modrm.reg;
16435 const char **names;
16436
041bd2e0
JH
16437 used_prefixes |= (prefixes & PREFIX_DATA);
16438 if (prefixes & PREFIX_DATA)
20f0a1fc 16439 {
b9733481 16440 names = names_xmm;
161a04f6
L
16441 USED_REX (REX_R);
16442 if (rex & REX_R)
b9733481 16443 reg += 8;
20f0a1fc 16444 }
041bd2e0 16445 else
b9733481
L
16446 names = names_mm;
16447 oappend (names[reg]);
252b5132
RH
16448}
16449
c608c12e 16450static void
c0f3af97 16451OP_XMM (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
c608c12e 16452{
b9733481
L
16453 int reg = modrm.reg;
16454 const char **names;
16455
161a04f6
L
16456 USED_REX (REX_R);
16457 if (rex & REX_R)
b9733481 16458 reg += 8;
43234a1e
L
16459 if (vex.evex)
16460 {
16461 if (!vex.r)
16462 reg += 16;
16463 }
16464
539f890d
L
16465 if (need_vex
16466 && bytemode != xmm_mode
43234a1e
L
16467 && bytemode != xmmq_mode
16468 && bytemode != evex_half_bcst_xmmq_mode
16469 && bytemode != ymm_mode
539f890d 16470 && bytemode != scalar_mode)
c0f3af97
L
16471 {
16472 switch (vex.length)
16473 {
16474 case 128:
b9733481 16475 names = names_xmm;
c0f3af97
L
16476 break;
16477 case 256:
5fc35d96
IT
16478 if (vex.w
16479 || (bytemode != vex_vsib_q_w_dq_mode
16480 && bytemode != vex_vsib_q_w_d_mode))
6c30d220
L
16481 names = names_ymm;
16482 else
16483 names = names_xmm;
c0f3af97 16484 break;
43234a1e
L
16485 case 512:
16486 names = names_zmm;
16487 break;
c0f3af97
L
16488 default:
16489 abort ();
16490 }
16491 }
43234a1e
L
16492 else if (bytemode == xmmq_mode
16493 || bytemode == evex_half_bcst_xmmq_mode)
16494 {
16495 switch (vex.length)
16496 {
16497 case 128:
16498 case 256:
16499 names = names_xmm;
16500 break;
16501 case 512:
16502 names = names_ymm;
16503 break;
16504 default:
16505 abort ();
16506 }
16507 }
16508 else if (bytemode == ymm_mode)
16509 names = names_ymm;
c0f3af97 16510 else
b9733481
L
16511 names = names_xmm;
16512 oappend (names[reg]);
c608c12e
AM
16513}
16514
252b5132 16515static void
26ca5450 16516OP_EM (int bytemode, int sizeflag)
252b5132 16517{
b9733481
L
16518 int reg;
16519 const char **names;
16520
7967e09e 16521 if (modrm.mod != 3)
252b5132 16522 {
b6169b20
L
16523 if (intel_syntax
16524 && (bytemode == v_mode || bytemode == v_swap_mode))
9306ca4a
JB
16525 {
16526 bytemode = (prefixes & PREFIX_DATA) ? x_mode : q_mode;
16527 used_prefixes |= (prefixes & PREFIX_DATA);
6c067bbb 16528 }
252b5132
RH
16529 OP_E (bytemode, sizeflag);
16530 return;
16531 }
16532
b6169b20
L
16533 if ((sizeflag & SUFFIX_ALWAYS) && bytemode == v_swap_mode)
16534 swap_operand ();
16535
6608db57 16536 /* Skip mod/rm byte. */
4bba6815 16537 MODRM_CHECK;
252b5132 16538 codep++;
041bd2e0 16539 used_prefixes |= (prefixes & PREFIX_DATA);
b9733481 16540 reg = modrm.rm;
041bd2e0 16541 if (prefixes & PREFIX_DATA)
20f0a1fc 16542 {
b9733481 16543 names = names_xmm;
161a04f6
L
16544 USED_REX (REX_B);
16545 if (rex & REX_B)
b9733481 16546 reg += 8;
20f0a1fc 16547 }
041bd2e0 16548 else
b9733481
L
16549 names = names_mm;
16550 oappend (names[reg]);
252b5132
RH
16551}
16552
246c51aa
L
16553/* cvt* are the only instructions in sse2 which have
16554 both SSE and MMX operands and also have 0x66 prefix
16555 in their opcode. 0x66 was originally used to differentiate
16556 between SSE and MMX instruction(operands). So we have to handle the
4d9567e0
MM
16557 cvt* separately using OP_EMC and OP_MXC */
16558static void
16559OP_EMC (int bytemode, int sizeflag)
16560{
7967e09e 16561 if (modrm.mod != 3)
4d9567e0
MM
16562 {
16563 if (intel_syntax && bytemode == v_mode)
16564 {
16565 bytemode = (prefixes & PREFIX_DATA) ? x_mode : q_mode;
16566 used_prefixes |= (prefixes & PREFIX_DATA);
6c067bbb 16567 }
4d9567e0
MM
16568 OP_E (bytemode, sizeflag);
16569 return;
16570 }
246c51aa 16571
4d9567e0
MM
16572 /* Skip mod/rm byte. */
16573 MODRM_CHECK;
16574 codep++;
16575 used_prefixes |= (prefixes & PREFIX_DATA);
b9733481 16576 oappend (names_mm[modrm.rm]);
4d9567e0
MM
16577}
16578
16579static void
16580OP_MXC (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
16581{
16582 used_prefixes |= (prefixes & PREFIX_DATA);
b9733481 16583 oappend (names_mm[modrm.reg]);
4d9567e0
MM
16584}
16585
c608c12e 16586static void
26ca5450 16587OP_EX (int bytemode, int sizeflag)
c608c12e 16588{
b9733481
L
16589 int reg;
16590 const char **names;
d6f574e0
L
16591
16592 /* Skip mod/rm byte. */
16593 MODRM_CHECK;
16594 codep++;
16595
7967e09e 16596 if (modrm.mod != 3)
c608c12e 16597 {
c1e679ec 16598 OP_E_memory (bytemode, sizeflag);
c608c12e
AM
16599 return;
16600 }
d6f574e0 16601
b9733481 16602 reg = modrm.rm;
161a04f6
L
16603 USED_REX (REX_B);
16604 if (rex & REX_B)
b9733481 16605 reg += 8;
43234a1e
L
16606 if (vex.evex)
16607 {
16608 USED_REX (REX_X);
16609 if ((rex & REX_X))
16610 reg += 16;
16611 }
c608c12e 16612
b6169b20 16613 if ((sizeflag & SUFFIX_ALWAYS)
fa99fab2
L
16614 && (bytemode == x_swap_mode
16615 || bytemode == d_swap_mode
7bb15c6f 16616 || bytemode == d_scalar_swap_mode
539f890d
L
16617 || bytemode == q_swap_mode
16618 || bytemode == q_scalar_swap_mode))
b6169b20
L
16619 swap_operand ();
16620
c0f3af97
L
16621 if (need_vex
16622 && bytemode != xmm_mode
6c30d220
L
16623 && bytemode != xmmdw_mode
16624 && bytemode != xmmqd_mode
16625 && bytemode != xmm_mb_mode
16626 && bytemode != xmm_mw_mode
16627 && bytemode != xmm_md_mode
16628 && bytemode != xmm_mq_mode
43234a1e 16629 && bytemode != xmm_mdq_mode
539f890d 16630 && bytemode != xmmq_mode
43234a1e
L
16631 && bytemode != evex_half_bcst_xmmq_mode
16632 && bytemode != ymm_mode
539f890d 16633 && bytemode != d_scalar_mode
7bb15c6f 16634 && bytemode != d_scalar_swap_mode
539f890d 16635 && bytemode != q_scalar_mode
1c480963
L
16636 && bytemode != q_scalar_swap_mode
16637 && bytemode != vex_scalar_w_dq_mode)
c0f3af97
L
16638 {
16639 switch (vex.length)
16640 {
16641 case 128:
b9733481 16642 names = names_xmm;
c0f3af97
L
16643 break;
16644 case 256:
b9733481 16645 names = names_ymm;
c0f3af97 16646 break;
43234a1e
L
16647 case 512:
16648 names = names_zmm;
16649 break;
c0f3af97
L
16650 default:
16651 abort ();
16652 }
16653 }
43234a1e
L
16654 else if (bytemode == xmmq_mode
16655 || bytemode == evex_half_bcst_xmmq_mode)
16656 {
16657 switch (vex.length)
16658 {
16659 case 128:
16660 case 256:
16661 names = names_xmm;
16662 break;
16663 case 512:
16664 names = names_ymm;
16665 break;
16666 default:
16667 abort ();
16668 }
16669 }
16670 else if (bytemode == ymm_mode)
16671 names = names_ymm;
c0f3af97 16672 else
b9733481
L
16673 names = names_xmm;
16674 oappend (names[reg]);
c608c12e
AM
16675}
16676
252b5132 16677static void
26ca5450 16678OP_MS (int bytemode, int sizeflag)
252b5132 16679{
7967e09e 16680 if (modrm.mod == 3)
2da11e11
AM
16681 OP_EM (bytemode, sizeflag);
16682 else
6608db57 16683 BadOp ();
252b5132
RH
16684}
16685
992aaec9 16686static void
26ca5450 16687OP_XS (int bytemode, int sizeflag)
992aaec9 16688{
7967e09e 16689 if (modrm.mod == 3)
992aaec9
AM
16690 OP_EX (bytemode, sizeflag);
16691 else
6608db57 16692 BadOp ();
992aaec9
AM
16693}
16694
cc0ec051
AM
16695static void
16696OP_M (int bytemode, int sizeflag)
16697{
7967e09e 16698 if (modrm.mod == 3)
75413a22
L
16699 /* bad bound,lea,lds,les,lfs,lgs,lss,cmpxchg8b,vmptrst modrm */
16700 BadOp ();
cc0ec051
AM
16701 else
16702 OP_E (bytemode, sizeflag);
16703}
16704
16705static void
16706OP_0f07 (int bytemode, int sizeflag)
16707{
7967e09e 16708 if (modrm.mod != 3 || modrm.rm != 0)
cc0ec051
AM
16709 BadOp ();
16710 else
16711 OP_E (bytemode, sizeflag);
16712}
16713
46e883c5 16714/* NOP is an alias of "xchg %ax,%ax" in 16bit mode, "xchg %eax,%eax" in
246c51aa 16715 32bit mode and "xchg %rax,%rax" in 64bit mode. */
46e883c5 16716
cc0ec051 16717static void
46e883c5 16718NOP_Fixup1 (int bytemode, int sizeflag)
cc0ec051 16719{
8b38ad71
L
16720 if ((prefixes & PREFIX_DATA) != 0
16721 || (rex != 0
16722 && rex != 0x48
16723 && address_mode == mode_64bit))
46e883c5
L
16724 OP_REG (bytemode, sizeflag);
16725 else
16726 strcpy (obuf, "nop");
16727}
16728
16729static void
16730NOP_Fixup2 (int bytemode, int sizeflag)
16731{
8b38ad71
L
16732 if ((prefixes & PREFIX_DATA) != 0
16733 || (rex != 0
16734 && rex != 0x48
16735 && address_mode == mode_64bit))
46e883c5 16736 OP_IMREG (bytemode, sizeflag);
cc0ec051
AM
16737}
16738
84037f8c 16739static const char *const Suffix3DNow[] = {
252b5132
RH
16740/* 00 */ NULL, NULL, NULL, NULL,
16741/* 04 */ NULL, NULL, NULL, NULL,
16742/* 08 */ NULL, NULL, NULL, NULL,
9e525108 16743/* 0C */ "pi2fw", "pi2fd", NULL, NULL,
252b5132
RH
16744/* 10 */ NULL, NULL, NULL, NULL,
16745/* 14 */ NULL, NULL, NULL, NULL,
16746/* 18 */ NULL, NULL, NULL, NULL,
9e525108 16747/* 1C */ "pf2iw", "pf2id", NULL, NULL,
252b5132
RH
16748/* 20 */ NULL, NULL, NULL, NULL,
16749/* 24 */ NULL, NULL, NULL, NULL,
16750/* 28 */ NULL, NULL, NULL, NULL,
16751/* 2C */ NULL, NULL, NULL, NULL,
16752/* 30 */ NULL, NULL, NULL, NULL,
16753/* 34 */ NULL, NULL, NULL, NULL,
16754/* 38 */ NULL, NULL, NULL, NULL,
16755/* 3C */ NULL, NULL, NULL, NULL,
16756/* 40 */ NULL, NULL, NULL, NULL,
16757/* 44 */ NULL, NULL, NULL, NULL,
16758/* 48 */ NULL, NULL, NULL, NULL,
16759/* 4C */ NULL, NULL, NULL, NULL,
16760/* 50 */ NULL, NULL, NULL, NULL,
16761/* 54 */ NULL, NULL, NULL, NULL,
16762/* 58 */ NULL, NULL, NULL, NULL,
16763/* 5C */ NULL, NULL, NULL, NULL,
16764/* 60 */ NULL, NULL, NULL, NULL,
16765/* 64 */ NULL, NULL, NULL, NULL,
16766/* 68 */ NULL, NULL, NULL, NULL,
16767/* 6C */ NULL, NULL, NULL, NULL,
16768/* 70 */ NULL, NULL, NULL, NULL,
16769/* 74 */ NULL, NULL, NULL, NULL,
16770/* 78 */ NULL, NULL, NULL, NULL,
16771/* 7C */ NULL, NULL, NULL, NULL,
16772/* 80 */ NULL, NULL, NULL, NULL,
16773/* 84 */ NULL, NULL, NULL, NULL,
9e525108
AM
16774/* 88 */ NULL, NULL, "pfnacc", NULL,
16775/* 8C */ NULL, NULL, "pfpnacc", NULL,
252b5132
RH
16776/* 90 */ "pfcmpge", NULL, NULL, NULL,
16777/* 94 */ "pfmin", NULL, "pfrcp", "pfrsqrt",
16778/* 98 */ NULL, NULL, "pfsub", NULL,
16779/* 9C */ NULL, NULL, "pfadd", NULL,
16780/* A0 */ "pfcmpgt", NULL, NULL, NULL,
16781/* A4 */ "pfmax", NULL, "pfrcpit1", "pfrsqit1",
16782/* A8 */ NULL, NULL, "pfsubr", NULL,
16783/* AC */ NULL, NULL, "pfacc", NULL,
16784/* B0 */ "pfcmpeq", NULL, NULL, NULL,
9beff690 16785/* B4 */ "pfmul", NULL, "pfrcpit2", "pmulhrw",
9e525108 16786/* B8 */ NULL, NULL, NULL, "pswapd",
252b5132
RH
16787/* BC */ NULL, NULL, NULL, "pavgusb",
16788/* C0 */ NULL, NULL, NULL, NULL,
16789/* C4 */ NULL, NULL, NULL, NULL,
16790/* C8 */ NULL, NULL, NULL, NULL,
16791/* CC */ NULL, NULL, NULL, NULL,
16792/* D0 */ NULL, NULL, NULL, NULL,
16793/* D4 */ NULL, NULL, NULL, NULL,
16794/* D8 */ NULL, NULL, NULL, NULL,
16795/* DC */ NULL, NULL, NULL, NULL,
16796/* E0 */ NULL, NULL, NULL, NULL,
16797/* E4 */ NULL, NULL, NULL, NULL,
16798/* E8 */ NULL, NULL, NULL, NULL,
16799/* EC */ NULL, NULL, NULL, NULL,
16800/* F0 */ NULL, NULL, NULL, NULL,
16801/* F4 */ NULL, NULL, NULL, NULL,
16802/* F8 */ NULL, NULL, NULL, NULL,
16803/* FC */ NULL, NULL, NULL, NULL,
16804};
16805
16806static void
26ca5450 16807OP_3DNowSuffix (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132
RH
16808{
16809 const char *mnemonic;
16810
16811 FETCH_DATA (the_info, codep + 1);
16812 /* AMD 3DNow! instructions are specified by an opcode suffix in the
16813 place where an 8-bit immediate would normally go. ie. the last
16814 byte of the instruction. */
ea397f5b 16815 obufp = mnemonicendp;
c608c12e 16816 mnemonic = Suffix3DNow[*codep++ & 0xff];
252b5132 16817 if (mnemonic)
2da11e11 16818 oappend (mnemonic);
252b5132
RH
16819 else
16820 {
16821 /* Since a variable sized modrm/sib chunk is between the start
16822 of the opcode (0x0f0f) and the opcode suffix, we need to do
16823 all the modrm processing first, and don't know until now that
16824 we have a bad opcode. This necessitates some cleaning up. */
ce518a5f
L
16825 op_out[0][0] = '\0';
16826 op_out[1][0] = '\0';
6608db57 16827 BadOp ();
252b5132 16828 }
ea397f5b 16829 mnemonicendp = obufp;
252b5132 16830}
c608c12e 16831
ea397f5b
L
16832static struct op simd_cmp_op[] =
16833{
16834 { STRING_COMMA_LEN ("eq") },
16835 { STRING_COMMA_LEN ("lt") },
16836 { STRING_COMMA_LEN ("le") },
16837 { STRING_COMMA_LEN ("unord") },
16838 { STRING_COMMA_LEN ("neq") },
16839 { STRING_COMMA_LEN ("nlt") },
16840 { STRING_COMMA_LEN ("nle") },
16841 { STRING_COMMA_LEN ("ord") }
c608c12e
AM
16842};
16843
16844static void
ad19981d 16845CMP_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
c608c12e
AM
16846{
16847 unsigned int cmp_type;
16848
16849 FETCH_DATA (the_info, codep + 1);
16850 cmp_type = *codep++ & 0xff;
c0f3af97 16851 if (cmp_type < ARRAY_SIZE (simd_cmp_op))
c608c12e 16852 {
ad19981d 16853 char suffix [3];
ea397f5b 16854 char *p = mnemonicendp - 2;
ad19981d
L
16855 suffix[0] = p[0];
16856 suffix[1] = p[1];
16857 suffix[2] = '\0';
ea397f5b
L
16858 sprintf (p, "%s%s", simd_cmp_op[cmp_type].name, suffix);
16859 mnemonicendp += simd_cmp_op[cmp_type].len;
c608c12e
AM
16860 }
16861 else
16862 {
ad19981d
L
16863 /* We have a reserved extension byte. Output it directly. */
16864 scratchbuf[0] = '$';
16865 print_operand_value (scratchbuf + 1, 1, cmp_type);
9ce09ba2 16866 oappend_maybe_intel (scratchbuf);
ad19981d 16867 scratchbuf[0] = '\0';
c608c12e
AM
16868 }
16869}
16870
9916071f
AP
16871static void
16872OP_Mwaitx (int bytemode ATTRIBUTE_UNUSED,
16873 int sizeflag ATTRIBUTE_UNUSED)
16874{
16875 /* mwaitx %eax,%ecx,%ebx */
16876 if (!intel_syntax)
16877 {
16878 const char **names = (address_mode == mode_64bit
16879 ? names64 : names32);
16880 strcpy (op_out[0], names[0]);
16881 strcpy (op_out[1], names[1]);
16882 strcpy (op_out[2], names[3]);
16883 two_source_ops = 1;
16884 }
16885 /* Skip mod/rm byte. */
16886 MODRM_CHECK;
16887 codep++;
16888}
16889
ca164297 16890static void
b844680a
L
16891OP_Mwait (int bytemode ATTRIBUTE_UNUSED,
16892 int sizeflag ATTRIBUTE_UNUSED)
16893{
16894 /* mwait %eax,%ecx */
16895 if (!intel_syntax)
16896 {
16897 const char **names = (address_mode == mode_64bit
16898 ? names64 : names32);
16899 strcpy (op_out[0], names[0]);
16900 strcpy (op_out[1], names[1]);
16901 two_source_ops = 1;
16902 }
16903 /* Skip mod/rm byte. */
16904 MODRM_CHECK;
16905 codep++;
16906}
16907
16908static void
16909OP_Monitor (int bytemode ATTRIBUTE_UNUSED,
16910 int sizeflag ATTRIBUTE_UNUSED)
ca164297 16911{
b844680a
L
16912 /* monitor %eax,%ecx,%edx" */
16913 if (!intel_syntax)
ca164297 16914 {
b844680a 16915 const char **op1_names;
cb712a9e
L
16916 const char **names = (address_mode == mode_64bit
16917 ? names64 : names32);
1d9f512f 16918
b844680a
L
16919 if (!(prefixes & PREFIX_ADDR))
16920 op1_names = (address_mode == mode_16bit
16921 ? names16 : names);
ca164297
L
16922 else
16923 {
b844680a 16924 /* Remove "addr16/addr32". */
f16cd0d5 16925 all_prefixes[last_addr_prefix] = 0;
b844680a
L
16926 op1_names = (address_mode != mode_32bit
16927 ? names32 : names16);
16928 used_prefixes |= PREFIX_ADDR;
ca164297 16929 }
b844680a
L
16930 strcpy (op_out[0], op1_names[0]);
16931 strcpy (op_out[1], names[1]);
16932 strcpy (op_out[2], names[2]);
16933 two_source_ops = 1;
ca164297 16934 }
b844680a
L
16935 /* Skip mod/rm byte. */
16936 MODRM_CHECK;
16937 codep++;
30123838
JB
16938}
16939
6608db57
KH
16940static void
16941BadOp (void)
2da11e11 16942{
6608db57
KH
16943 /* Throw away prefixes and 1st. opcode byte. */
16944 codep = insn_codep + 1;
2da11e11
AM
16945 oappend ("(bad)");
16946}
4cc91dba 16947
35c52694
L
16948static void
16949REP_Fixup (int bytemode, int sizeflag)
16950{
16951 /* The 0xf3 prefix should be displayed as "rep" for ins, outs, movs,
16952 lods and stos. */
35c52694 16953 if (prefixes & PREFIX_REPZ)
f16cd0d5 16954 all_prefixes[last_repz_prefix] = REP_PREFIX;
35c52694
L
16955
16956 switch (bytemode)
16957 {
16958 case al_reg:
16959 case eAX_reg:
16960 case indir_dx_reg:
16961 OP_IMREG (bytemode, sizeflag);
16962 break;
16963 case eDI_reg:
16964 OP_ESreg (bytemode, sizeflag);
16965 break;
16966 case eSI_reg:
16967 OP_DSreg (bytemode, sizeflag);
16968 break;
16969 default:
16970 abort ();
16971 break;
16972 }
16973}
f5804c90 16974
7e8b059b
L
16975/* For BND-prefixed instructions 0xF2 prefix should be displayed as
16976 "bnd". */
16977
16978static void
16979BND_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
16980{
16981 if (prefixes & PREFIX_REPNZ)
16982 all_prefixes[last_repnz_prefix] = BND_PREFIX;
16983}
16984
04ef582a
L
16985/* For NOTRACK-prefixed instructions, 0x3E prefix should be displayed as
16986 "notrack". */
16987
16988static void
16989NOTRACK_Fixup (int bytemode ATTRIBUTE_UNUSED,
16990 int sizeflag ATTRIBUTE_UNUSED)
16991{
9fef80d6 16992 if (active_seg_prefix == PREFIX_DS
04ef582a
L
16993 && (address_mode != mode_64bit || last_data_prefix < 0))
16994 {
4e9ac44a 16995 /* NOTRACK prefix is only valid on indirect branch instructions.
9fef80d6 16996 NB: DATA prefix is unsupported for Intel64. */
04ef582a
L
16997 active_seg_prefix = 0;
16998 all_prefixes[last_seg_prefix] = NOTRACK_PREFIX;
16999 }
17000}
17001
42164a71
L
17002/* Similar to OP_E. But the 0xf2/0xf3 prefixes should be displayed as
17003 "xacquire"/"xrelease" for memory operand if there is a LOCK prefix.
17004 */
17005
17006static void
17007HLE_Fixup1 (int bytemode, int sizeflag)
17008{
17009 if (modrm.mod != 3
17010 && (prefixes & PREFIX_LOCK) != 0)
17011 {
17012 if (prefixes & PREFIX_REPZ)
17013 all_prefixes[last_repz_prefix] = XRELEASE_PREFIX;
17014 if (prefixes & PREFIX_REPNZ)
17015 all_prefixes[last_repnz_prefix] = XACQUIRE_PREFIX;
17016 }
17017
17018 OP_E (bytemode, sizeflag);
17019}
17020
17021/* Similar to OP_E. But the 0xf2/0xf3 prefixes should be displayed as
17022 "xacquire"/"xrelease" for memory operand. No check for LOCK prefix.
17023 */
17024
17025static void
17026HLE_Fixup2 (int bytemode, int sizeflag)
17027{
17028 if (modrm.mod != 3)
17029 {
17030 if (prefixes & PREFIX_REPZ)
17031 all_prefixes[last_repz_prefix] = XRELEASE_PREFIX;
17032 if (prefixes & PREFIX_REPNZ)
17033 all_prefixes[last_repnz_prefix] = XACQUIRE_PREFIX;
17034 }
17035
17036 OP_E (bytemode, sizeflag);
17037}
17038
17039/* Similar to OP_E. But the 0xf3 prefixes should be displayed as
17040 "xrelease" for memory operand. No check for LOCK prefix. */
17041
17042static void
17043HLE_Fixup3 (int bytemode, int sizeflag)
17044{
17045 if (modrm.mod != 3
17046 && last_repz_prefix > last_repnz_prefix
17047 && (prefixes & PREFIX_REPZ) != 0)
17048 all_prefixes[last_repz_prefix] = XRELEASE_PREFIX;
17049
17050 OP_E (bytemode, sizeflag);
17051}
17052
f5804c90
L
17053static void
17054CMPXCHG8B_Fixup (int bytemode, int sizeflag)
17055{
161a04f6
L
17056 USED_REX (REX_W);
17057 if (rex & REX_W)
f5804c90
L
17058 {
17059 /* Change cmpxchg8b to cmpxchg16b. */
ea397f5b
L
17060 char *p = mnemonicendp - 2;
17061 mnemonicendp = stpcpy (p, "16b");
fb9c77c7 17062 bytemode = o_mode;
f5804c90 17063 }
42164a71
L
17064 else if ((prefixes & PREFIX_LOCK) != 0)
17065 {
17066 if (prefixes & PREFIX_REPZ)
17067 all_prefixes[last_repz_prefix] = XRELEASE_PREFIX;
17068 if (prefixes & PREFIX_REPNZ)
17069 all_prefixes[last_repnz_prefix] = XACQUIRE_PREFIX;
17070 }
17071
f5804c90
L
17072 OP_M (bytemode, sizeflag);
17073}
42903f7f
L
17074
17075static void
17076XMM_Fixup (int reg, int sizeflag ATTRIBUTE_UNUSED)
17077{
b9733481
L
17078 const char **names;
17079
c0f3af97
L
17080 if (need_vex)
17081 {
17082 switch (vex.length)
17083 {
17084 case 128:
b9733481 17085 names = names_xmm;
c0f3af97
L
17086 break;
17087 case 256:
b9733481 17088 names = names_ymm;
c0f3af97
L
17089 break;
17090 default:
17091 abort ();
17092 }
17093 }
17094 else
b9733481
L
17095 names = names_xmm;
17096 oappend (names[reg]);
42903f7f 17097}
381d071f
L
17098
17099static void
17100CRC32_Fixup (int bytemode, int sizeflag)
17101{
17102 /* Add proper suffix to "crc32". */
ea397f5b 17103 char *p = mnemonicendp;
381d071f
L
17104
17105 switch (bytemode)
17106 {
17107 case b_mode:
20592a94 17108 if (intel_syntax)
ea397f5b 17109 goto skip;
20592a94 17110
381d071f
L
17111 *p++ = 'b';
17112 break;
17113 case v_mode:
20592a94 17114 if (intel_syntax)
ea397f5b 17115 goto skip;
20592a94 17116
381d071f
L
17117 USED_REX (REX_W);
17118 if (rex & REX_W)
17119 *p++ = 'q';
7bb15c6f 17120 else
f16cd0d5
L
17121 {
17122 if (sizeflag & DFLAG)
17123 *p++ = 'l';
17124 else
17125 *p++ = 'w';
17126 used_prefixes |= (prefixes & PREFIX_DATA);
17127 }
381d071f
L
17128 break;
17129 default:
17130 oappend (INTERNAL_DISASSEMBLER_ERROR);
17131 break;
17132 }
ea397f5b 17133 mnemonicendp = p;
381d071f
L
17134 *p = '\0';
17135
ea397f5b 17136skip:
381d071f
L
17137 if (modrm.mod == 3)
17138 {
17139 int add;
17140
17141 /* Skip mod/rm byte. */
17142 MODRM_CHECK;
17143 codep++;
17144
17145 USED_REX (REX_B);
17146 add = (rex & REX_B) ? 8 : 0;
17147 if (bytemode == b_mode)
17148 {
17149 USED_REX (0);
17150 if (rex)
17151 oappend (names8rex[modrm.rm + add]);
17152 else
17153 oappend (names8[modrm.rm + add]);
17154 }
17155 else
17156 {
17157 USED_REX (REX_W);
17158 if (rex & REX_W)
17159 oappend (names64[modrm.rm + add]);
17160 else if ((prefixes & PREFIX_DATA))
17161 oappend (names16[modrm.rm + add]);
17162 else
17163 oappend (names32[modrm.rm + add]);
17164 }
17165 }
17166 else
9344ff29 17167 OP_E (bytemode, sizeflag);
381d071f 17168}
85f10a01 17169
eacc9c89
L
17170static void
17171FXSAVE_Fixup (int bytemode, int sizeflag)
17172{
17173 /* Add proper suffix to "fxsave" and "fxrstor". */
17174 USED_REX (REX_W);
17175 if (rex & REX_W)
17176 {
17177 char *p = mnemonicendp;
17178 *p++ = '6';
17179 *p++ = '4';
17180 *p = '\0';
17181 mnemonicendp = p;
17182 }
17183 OP_M (bytemode, sizeflag);
17184}
17185
15c7c1d8
JB
17186static void
17187PCMPESTR_Fixup (int bytemode, int sizeflag)
17188{
17189 /* Add proper suffix to "{,v}pcmpestr{i,m}". */
17190 if (!intel_syntax)
17191 {
17192 char *p = mnemonicendp;
17193
17194 USED_REX (REX_W);
17195 if (rex & REX_W)
17196 *p++ = 'q';
17197 else if (sizeflag & SUFFIX_ALWAYS)
17198 *p++ = 'l';
17199
17200 *p = '\0';
17201 mnemonicendp = p;
17202 }
17203
17204 OP_EX (bytemode, sizeflag);
17205}
17206
c0f3af97
L
17207/* Display the destination register operand for instructions with
17208 VEX. */
17209
17210static void
17211OP_VEX (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
17212{
539f890d 17213 int reg;
b9733481
L
17214 const char **names;
17215
c0f3af97
L
17216 if (!need_vex)
17217 abort ();
17218
17219 if (!need_vex_reg)
17220 return;
17221
539f890d 17222 reg = vex.register_specifier;
5f847646
JB
17223 if (address_mode != mode_64bit)
17224 reg &= 7;
17225 else if (vex.evex && !vex.v)
17226 reg += 16;
43234a1e 17227
539f890d
L
17228 if (bytemode == vex_scalar_mode)
17229 {
17230 oappend (names_xmm[reg]);
17231 return;
17232 }
17233
c0f3af97
L
17234 switch (vex.length)
17235 {
17236 case 128:
17237 switch (bytemode)
17238 {
17239 case vex_mode:
17240 case vex128_mode:
6c30d220 17241 case vex_vsib_q_w_dq_mode:
5fc35d96 17242 case vex_vsib_q_w_d_mode:
cb21baef
L
17243 names = names_xmm;
17244 break;
17245 case dq_mode:
390a6789 17246 if (rex & REX_W)
cb21baef
L
17247 names = names64;
17248 else
17249 names = names32;
c0f3af97 17250 break;
1ba585e8 17251 case mask_bd_mode:
43234a1e 17252 case mask_mode:
9889cbb1
L
17253 if (reg > 0x7)
17254 {
17255 oappend ("(bad)");
17256 return;
17257 }
43234a1e
L
17258 names = names_mask;
17259 break;
c0f3af97
L
17260 default:
17261 abort ();
17262 return;
17263 }
c0f3af97
L
17264 break;
17265 case 256:
17266 switch (bytemode)
17267 {
17268 case vex_mode:
17269 case vex256_mode:
6c30d220
L
17270 names = names_ymm;
17271 break;
17272 case vex_vsib_q_w_dq_mode:
5fc35d96 17273 case vex_vsib_q_w_d_mode:
6c30d220 17274 names = vex.w ? names_ymm : names_xmm;
c0f3af97 17275 break;
1ba585e8 17276 case mask_bd_mode:
43234a1e 17277 case mask_mode:
9889cbb1
L
17278 if (reg > 0x7)
17279 {
17280 oappend ("(bad)");
17281 return;
17282 }
43234a1e
L
17283 names = names_mask;
17284 break;
c0f3af97 17285 default:
a37a2806
NC
17286 /* See PR binutils/20893 for a reproducer. */
17287 oappend ("(bad)");
c0f3af97
L
17288 return;
17289 }
c0f3af97 17290 break;
43234a1e
L
17291 case 512:
17292 names = names_zmm;
17293 break;
c0f3af97
L
17294 default:
17295 abort ();
17296 break;
17297 }
539f890d 17298 oappend (names[reg]);
c0f3af97
L
17299}
17300
922d8de8
DR
17301/* Get the VEX immediate byte without moving codep. */
17302
17303static unsigned char
ccc5981b 17304get_vex_imm8 (int sizeflag, int opnum)
922d8de8
DR
17305{
17306 int bytes_before_imm = 0;
17307
922d8de8
DR
17308 if (modrm.mod != 3)
17309 {
17310 /* There are SIB/displacement bytes. */
17311 if ((sizeflag & AFLAG) || address_mode == mode_64bit)
6c067bbb 17312 {
922d8de8 17313 /* 32/64 bit address mode */
6c067bbb 17314 int base = modrm.rm;
922d8de8
DR
17315
17316 /* Check SIB byte. */
6c067bbb
RM
17317 if (base == 4)
17318 {
17319 FETCH_DATA (the_info, codep + 1);
17320 base = *codep & 7;
17321 /* When decoding the third source, don't increase
17322 bytes_before_imm as this has already been incremented
17323 by one in OP_E_memory while decoding the second
17324 source operand. */
17325 if (opnum == 0)
17326 bytes_before_imm++;
17327 }
17328
17329 /* Don't increase bytes_before_imm when decoding the third source,
17330 it has already been incremented by OP_E_memory while decoding
17331 the second source operand. */
17332 if (opnum == 0)
17333 {
17334 switch (modrm.mod)
17335 {
17336 case 0:
17337 /* When modrm.rm == 5 or modrm.rm == 4 and base in
17338 SIB == 5, there is a 4 byte displacement. */
17339 if (base != 5)
17340 /* No displacement. */
17341 break;
1a0670f3 17342 /* Fall through. */
6c067bbb
RM
17343 case 2:
17344 /* 4 byte displacement. */
17345 bytes_before_imm += 4;
17346 break;
17347 case 1:
17348 /* 1 byte displacement. */
17349 bytes_before_imm++;
17350 break;
17351 }
17352 }
17353 }
922d8de8 17354 else
02e647f9
SP
17355 {
17356 /* 16 bit address mode */
6c067bbb
RM
17357 /* Don't increase bytes_before_imm when decoding the third source,
17358 it has already been incremented by OP_E_memory while decoding
17359 the second source operand. */
17360 if (opnum == 0)
17361 {
02e647f9
SP
17362 switch (modrm.mod)
17363 {
17364 case 0:
17365 /* When modrm.rm == 6, there is a 2 byte displacement. */
17366 if (modrm.rm != 6)
17367 /* No displacement. */
17368 break;
1a0670f3 17369 /* Fall through. */
02e647f9
SP
17370 case 2:
17371 /* 2 byte displacement. */
17372 bytes_before_imm += 2;
17373 break;
17374 case 1:
17375 /* 1 byte displacement: when decoding the third source,
17376 don't increase bytes_before_imm as this has already
17377 been incremented by one in OP_E_memory while decoding
17378 the second source operand. */
17379 if (opnum == 0)
17380 bytes_before_imm++;
ccc5981b 17381
02e647f9
SP
17382 break;
17383 }
922d8de8
DR
17384 }
17385 }
17386 }
17387
17388 FETCH_DATA (the_info, codep + bytes_before_imm + 1);
17389 return codep [bytes_before_imm];
17390}
17391
17392static void
17393OP_EX_VexReg (int bytemode, int sizeflag, int reg)
17394{
b9733481
L
17395 const char **names;
17396
922d8de8
DR
17397 if (reg == -1 && modrm.mod != 3)
17398 {
17399 OP_E_memory (bytemode, sizeflag);
17400 return;
17401 }
17402 else
17403 {
17404 if (reg == -1)
17405 {
17406 reg = modrm.rm;
17407 USED_REX (REX_B);
17408 if (rex & REX_B)
17409 reg += 8;
17410 }
5f847646
JB
17411 if (address_mode != mode_64bit)
17412 reg &= 7;
922d8de8
DR
17413 }
17414
17415 switch (vex.length)
17416 {
17417 case 128:
b9733481 17418 names = names_xmm;
922d8de8
DR
17419 break;
17420 case 256:
b9733481 17421 names = names_ymm;
922d8de8
DR
17422 break;
17423 default:
17424 abort ();
17425 }
b9733481 17426 oappend (names[reg]);
922d8de8
DR
17427}
17428
a683cc34
SP
17429static void
17430OP_EX_VexImmW (int bytemode, int sizeflag)
17431{
17432 int reg = -1;
17433 static unsigned char vex_imm8;
17434
17435 if (vex_w_done == 0)
17436 {
17437 vex_w_done = 1;
17438
17439 /* Skip mod/rm byte. */
17440 MODRM_CHECK;
17441 codep++;
17442
17443 vex_imm8 = get_vex_imm8 (sizeflag, 0);
17444
17445 if (vex.w)
17446 reg = vex_imm8 >> 4;
17447
17448 OP_EX_VexReg (bytemode, sizeflag, reg);
17449 }
17450 else if (vex_w_done == 1)
17451 {
17452 vex_w_done = 2;
17453
17454 if (!vex.w)
17455 reg = vex_imm8 >> 4;
17456
17457 OP_EX_VexReg (bytemode, sizeflag, reg);
17458 }
17459 else
17460 {
17461 /* Output the imm8 directly. */
17462 scratchbuf[0] = '$';
17463 print_operand_value (scratchbuf + 1, 1, vex_imm8 & 0xf);
9ce09ba2 17464 oappend_maybe_intel (scratchbuf);
a683cc34
SP
17465 scratchbuf[0] = '\0';
17466 codep++;
17467 }
17468}
17469
5dd85c99
SP
17470static void
17471OP_Vex_2src (int bytemode, int sizeflag)
17472{
17473 if (modrm.mod == 3)
17474 {
b9733481 17475 int reg = modrm.rm;
5dd85c99 17476 USED_REX (REX_B);
b9733481
L
17477 if (rex & REX_B)
17478 reg += 8;
17479 oappend (names_xmm[reg]);
5dd85c99
SP
17480 }
17481 else
17482 {
17483 if (intel_syntax
17484 && (bytemode == v_mode || bytemode == v_swap_mode))
17485 {
17486 bytemode = (prefixes & PREFIX_DATA) ? x_mode : q_mode;
17487 used_prefixes |= (prefixes & PREFIX_DATA);
17488 }
17489 OP_E (bytemode, sizeflag);
17490 }
17491}
17492
17493static void
17494OP_Vex_2src_1 (int bytemode, int sizeflag)
17495{
17496 if (modrm.mod == 3)
17497 {
17498 /* Skip mod/rm byte. */
17499 MODRM_CHECK;
17500 codep++;
17501 }
17502
17503 if (vex.w)
5f847646
JB
17504 {
17505 unsigned int reg = vex.register_specifier;
17506
17507 if (address_mode != mode_64bit)
17508 reg &= 7;
17509 oappend (names_xmm[reg]);
17510 }
5dd85c99
SP
17511 else
17512 OP_Vex_2src (bytemode, sizeflag);
17513}
17514
17515static void
17516OP_Vex_2src_2 (int bytemode, int sizeflag)
17517{
17518 if (vex.w)
17519 OP_Vex_2src (bytemode, sizeflag);
17520 else
5f847646
JB
17521 {
17522 unsigned int reg = vex.register_specifier;
17523
17524 if (address_mode != mode_64bit)
17525 reg &= 7;
17526 oappend (names_xmm[reg]);
17527 }
5dd85c99
SP
17528}
17529
922d8de8
DR
17530static void
17531OP_EX_VexW (int bytemode, int sizeflag)
17532{
17533 int reg = -1;
17534
17535 if (!vex_w_done)
17536 {
41effecb
SP
17537 /* Skip mod/rm byte. */
17538 MODRM_CHECK;
17539 codep++;
17540
922d8de8 17541 if (vex.w)
ccc5981b 17542 reg = get_vex_imm8 (sizeflag, 0) >> 4;
922d8de8
DR
17543 }
17544 else
17545 {
17546 if (!vex.w)
ccc5981b 17547 reg = get_vex_imm8 (sizeflag, 1) >> 4;
922d8de8
DR
17548 }
17549
17550 OP_EX_VexReg (bytemode, sizeflag, reg);
922d8de8 17551
3a2430e0
JB
17552 if (vex_w_done)
17553 codep++;
17554 vex_w_done = 1;
922d8de8
DR
17555}
17556
c0f3af97
L
17557static void
17558OP_REG_VexI4 (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
17559{
17560 int reg;
b9733481
L
17561 const char **names;
17562
c0f3af97
L
17563 FETCH_DATA (the_info, codep + 1);
17564 reg = *codep++;
17565
17566 if (bytemode != x_mode)
17567 abort ();
17568
c0f3af97 17569 reg >>= 4;
5f847646
JB
17570 if (address_mode != mode_64bit)
17571 reg &= 7;
dae39acc 17572
c0f3af97
L
17573 switch (vex.length)
17574 {
17575 case 128:
b9733481 17576 names = names_xmm;
c0f3af97
L
17577 break;
17578 case 256:
b9733481 17579 names = names_ymm;
c0f3af97
L
17580 break;
17581 default:
17582 abort ();
17583 }
b9733481 17584 oappend (names[reg]);
c0f3af97
L
17585}
17586
922d8de8
DR
17587static void
17588OP_XMM_VexW (int bytemode, int sizeflag)
17589{
17590 /* Turn off the REX.W bit since it is used for swapping operands
17591 now. */
17592 rex &= ~REX_W;
17593 OP_XMM (bytemode, sizeflag);
17594}
17595
c0f3af97
L
17596static void
17597OP_EX_Vex (int bytemode, int sizeflag)
17598{
17599 if (modrm.mod != 3)
17600 {
17601 if (vex.register_specifier != 0)
17602 BadOp ();
17603 need_vex_reg = 0;
17604 }
17605 OP_EX (bytemode, sizeflag);
17606}
17607
17608static void
17609OP_XMM_Vex (int bytemode, int sizeflag)
17610{
17611 if (modrm.mod != 3)
17612 {
17613 if (vex.register_specifier != 0)
17614 BadOp ();
17615 need_vex_reg = 0;
17616 }
17617 OP_XMM (bytemode, sizeflag);
17618}
17619
17620static void
17621VZERO_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
17622{
17623 switch (vex.length)
17624 {
17625 case 128:
ea397f5b 17626 mnemonicendp = stpcpy (obuf, "vzeroupper");
c0f3af97
L
17627 break;
17628 case 256:
ea397f5b 17629 mnemonicendp = stpcpy (obuf, "vzeroall");
c0f3af97
L
17630 break;
17631 default:
17632 abort ();
17633 }
17634}
17635
ea397f5b
L
17636static struct op vex_cmp_op[] =
17637{
17638 { STRING_COMMA_LEN ("eq") },
17639 { STRING_COMMA_LEN ("lt") },
17640 { STRING_COMMA_LEN ("le") },
17641 { STRING_COMMA_LEN ("unord") },
17642 { STRING_COMMA_LEN ("neq") },
17643 { STRING_COMMA_LEN ("nlt") },
17644 { STRING_COMMA_LEN ("nle") },
17645 { STRING_COMMA_LEN ("ord") },
17646 { STRING_COMMA_LEN ("eq_uq") },
17647 { STRING_COMMA_LEN ("nge") },
17648 { STRING_COMMA_LEN ("ngt") },
17649 { STRING_COMMA_LEN ("false") },
17650 { STRING_COMMA_LEN ("neq_oq") },
17651 { STRING_COMMA_LEN ("ge") },
17652 { STRING_COMMA_LEN ("gt") },
17653 { STRING_COMMA_LEN ("true") },
17654 { STRING_COMMA_LEN ("eq_os") },
17655 { STRING_COMMA_LEN ("lt_oq") },
17656 { STRING_COMMA_LEN ("le_oq") },
17657 { STRING_COMMA_LEN ("unord_s") },
17658 { STRING_COMMA_LEN ("neq_us") },
17659 { STRING_COMMA_LEN ("nlt_uq") },
17660 { STRING_COMMA_LEN ("nle_uq") },
17661 { STRING_COMMA_LEN ("ord_s") },
17662 { STRING_COMMA_LEN ("eq_us") },
17663 { STRING_COMMA_LEN ("nge_uq") },
17664 { STRING_COMMA_LEN ("ngt_uq") },
17665 { STRING_COMMA_LEN ("false_os") },
17666 { STRING_COMMA_LEN ("neq_os") },
17667 { STRING_COMMA_LEN ("ge_oq") },
17668 { STRING_COMMA_LEN ("gt_oq") },
17669 { STRING_COMMA_LEN ("true_us") },
c0f3af97
L
17670};
17671
17672static void
17673VCMP_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
17674{
17675 unsigned int cmp_type;
17676
17677 FETCH_DATA (the_info, codep + 1);
17678 cmp_type = *codep++ & 0xff;
17679 if (cmp_type < ARRAY_SIZE (vex_cmp_op))
17680 {
17681 char suffix [3];
ea397f5b 17682 char *p = mnemonicendp - 2;
c0f3af97
L
17683 suffix[0] = p[0];
17684 suffix[1] = p[1];
17685 suffix[2] = '\0';
ea397f5b
L
17686 sprintf (p, "%s%s", vex_cmp_op[cmp_type].name, suffix);
17687 mnemonicendp += vex_cmp_op[cmp_type].len;
c0f3af97
L
17688 }
17689 else
17690 {
17691 /* We have a reserved extension byte. Output it directly. */
17692 scratchbuf[0] = '$';
17693 print_operand_value (scratchbuf + 1, 1, cmp_type);
9ce09ba2 17694 oappend_maybe_intel (scratchbuf);
c0f3af97
L
17695 scratchbuf[0] = '\0';
17696 }
17697}
17698
43234a1e
L
17699static void
17700VPCMP_Fixup (int bytemode ATTRIBUTE_UNUSED,
17701 int sizeflag ATTRIBUTE_UNUSED)
17702{
17703 unsigned int cmp_type;
17704
17705 if (!vex.evex)
17706 abort ();
17707
17708 FETCH_DATA (the_info, codep + 1);
17709 cmp_type = *codep++ & 0xff;
17710 /* There are aliases for immediates 0, 1, 2, 4, 5, 6.
17711 If it's the case, print suffix, otherwise - print the immediate. */
17712 if (cmp_type < ARRAY_SIZE (simd_cmp_op)
17713 && cmp_type != 3
17714 && cmp_type != 7)
17715 {
17716 char suffix [3];
17717 char *p = mnemonicendp - 2;
17718
17719 /* vpcmp* can have both one- and two-lettered suffix. */
17720 if (p[0] == 'p')
17721 {
17722 p++;
17723 suffix[0] = p[0];
17724 suffix[1] = '\0';
17725 }
17726 else
17727 {
17728 suffix[0] = p[0];
17729 suffix[1] = p[1];
17730 suffix[2] = '\0';
17731 }
17732
17733 sprintf (p, "%s%s", simd_cmp_op[cmp_type].name, suffix);
17734 mnemonicendp += simd_cmp_op[cmp_type].len;
17735 }
be92cb14
JB
17736 else
17737 {
17738 /* We have a reserved extension byte. Output it directly. */
17739 scratchbuf[0] = '$';
17740 print_operand_value (scratchbuf + 1, 1, cmp_type);
17741 oappend_maybe_intel (scratchbuf);
17742 scratchbuf[0] = '\0';
17743 }
17744}
17745
17746static const struct op xop_cmp_op[] =
17747{
17748 { STRING_COMMA_LEN ("lt") },
17749 { STRING_COMMA_LEN ("le") },
17750 { STRING_COMMA_LEN ("gt") },
17751 { STRING_COMMA_LEN ("ge") },
17752 { STRING_COMMA_LEN ("eq") },
17753 { STRING_COMMA_LEN ("neq") },
17754 { STRING_COMMA_LEN ("false") },
17755 { STRING_COMMA_LEN ("true") }
17756};
17757
17758static void
17759VPCOM_Fixup (int bytemode ATTRIBUTE_UNUSED,
17760 int sizeflag ATTRIBUTE_UNUSED)
17761{
17762 unsigned int cmp_type;
17763
17764 FETCH_DATA (the_info, codep + 1);
17765 cmp_type = *codep++ & 0xff;
17766 if (cmp_type < ARRAY_SIZE (xop_cmp_op))
17767 {
17768 char suffix[3];
17769 char *p = mnemonicendp - 2;
17770
17771 /* vpcom* can have both one- and two-lettered suffix. */
17772 if (p[0] == 'm')
17773 {
17774 p++;
17775 suffix[0] = p[0];
17776 suffix[1] = '\0';
17777 }
17778 else
17779 {
17780 suffix[0] = p[0];
17781 suffix[1] = p[1];
17782 suffix[2] = '\0';
17783 }
17784
17785 sprintf (p, "%s%s", xop_cmp_op[cmp_type].name, suffix);
17786 mnemonicendp += xop_cmp_op[cmp_type].len;
17787 }
43234a1e
L
17788 else
17789 {
17790 /* We have a reserved extension byte. Output it directly. */
17791 scratchbuf[0] = '$';
17792 print_operand_value (scratchbuf + 1, 1, cmp_type);
9ce09ba2 17793 oappend_maybe_intel (scratchbuf);
43234a1e
L
17794 scratchbuf[0] = '\0';
17795 }
17796}
17797
ea397f5b
L
17798static const struct op pclmul_op[] =
17799{
17800 { STRING_COMMA_LEN ("lql") },
17801 { STRING_COMMA_LEN ("hql") },
17802 { STRING_COMMA_LEN ("lqh") },
17803 { STRING_COMMA_LEN ("hqh") }
c0f3af97
L
17804};
17805
17806static void
17807PCLMUL_Fixup (int bytemode ATTRIBUTE_UNUSED,
17808 int sizeflag ATTRIBUTE_UNUSED)
17809{
17810 unsigned int pclmul_type;
17811
17812 FETCH_DATA (the_info, codep + 1);
17813 pclmul_type = *codep++ & 0xff;
17814 switch (pclmul_type)
17815 {
17816 case 0x10:
17817 pclmul_type = 2;
17818 break;
17819 case 0x11:
17820 pclmul_type = 3;
17821 break;
17822 default:
17823 break;
7bb15c6f 17824 }
c0f3af97
L
17825 if (pclmul_type < ARRAY_SIZE (pclmul_op))
17826 {
17827 char suffix [4];
ea397f5b 17828 char *p = mnemonicendp - 3;
c0f3af97
L
17829 suffix[0] = p[0];
17830 suffix[1] = p[1];
17831 suffix[2] = p[2];
17832 suffix[3] = '\0';
ea397f5b
L
17833 sprintf (p, "%s%s", pclmul_op[pclmul_type].name, suffix);
17834 mnemonicendp += pclmul_op[pclmul_type].len;
c0f3af97
L
17835 }
17836 else
17837 {
17838 /* We have a reserved extension byte. Output it directly. */
17839 scratchbuf[0] = '$';
17840 print_operand_value (scratchbuf + 1, 1, pclmul_type);
9ce09ba2 17841 oappend_maybe_intel (scratchbuf);
c0f3af97
L
17842 scratchbuf[0] = '\0';
17843 }
17844}
17845
f1f8f695
L
17846static void
17847MOVBE_Fixup (int bytemode, int sizeflag)
17848{
17849 /* Add proper suffix to "movbe". */
ea397f5b 17850 char *p = mnemonicendp;
f1f8f695
L
17851
17852 switch (bytemode)
17853 {
17854 case v_mode:
17855 if (intel_syntax)
ea397f5b 17856 goto skip;
f1f8f695
L
17857
17858 USED_REX (REX_W);
17859 if (sizeflag & SUFFIX_ALWAYS)
17860 {
17861 if (rex & REX_W)
17862 *p++ = 'q';
f1f8f695 17863 else
f16cd0d5
L
17864 {
17865 if (sizeflag & DFLAG)
17866 *p++ = 'l';
17867 else
17868 *p++ = 'w';
17869 used_prefixes |= (prefixes & PREFIX_DATA);
17870 }
f1f8f695 17871 }
f1f8f695
L
17872 break;
17873 default:
17874 oappend (INTERNAL_DISASSEMBLER_ERROR);
17875 break;
17876 }
ea397f5b 17877 mnemonicendp = p;
f1f8f695
L
17878 *p = '\0';
17879
ea397f5b 17880skip:
f1f8f695
L
17881 OP_M (bytemode, sizeflag);
17882}
f88c9eb0
SP
17883
17884static void
17885OP_LWPCB_E (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
17886{
17887 int reg;
17888 const char **names;
17889
17890 /* Skip mod/rm byte. */
17891 MODRM_CHECK;
17892 codep++;
17893
390a6789 17894 if (rex & REX_W)
f88c9eb0 17895 names = names64;
f88c9eb0 17896 else
ce7d077e 17897 names = names32;
f88c9eb0
SP
17898
17899 reg = modrm.rm;
17900 USED_REX (REX_B);
17901 if (rex & REX_B)
17902 reg += 8;
17903
17904 oappend (names[reg]);
17905}
17906
17907static void
17908OP_LWP_E (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
17909{
17910 const char **names;
5f847646 17911 unsigned int reg = vex.register_specifier;
f88c9eb0 17912
390a6789 17913 if (rex & REX_W)
f88c9eb0 17914 names = names64;
f88c9eb0 17915 else
ce7d077e 17916 names = names32;
f88c9eb0 17917
5f847646
JB
17918 if (address_mode != mode_64bit)
17919 reg &= 7;
17920 oappend (names[reg]);
f88c9eb0 17921}
43234a1e
L
17922
17923static void
17924OP_Mask (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
17925{
17926 if (!vex.evex
1ba585e8 17927 || (bytemode != mask_mode && bytemode != mask_bd_mode))
43234a1e
L
17928 abort ();
17929
17930 USED_REX (REX_R);
17931 if ((rex & REX_R) != 0 || !vex.r)
17932 {
17933 BadOp ();
17934 return;
17935 }
17936
17937 oappend (names_mask [modrm.reg]);
17938}
17939
17940static void
17941OP_Rounding (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
17942{
17943 if (!vex.evex
17944 || (bytemode != evex_rounding_mode
17945 && bytemode != evex_sae_mode))
17946 abort ();
17947 if (modrm.mod == 3 && vex.b)
17948 switch (bytemode)
17949 {
17950 case evex_rounding_mode:
17951 oappend (names_rounding[vex.ll]);
17952 break;
17953 case evex_sae_mode:
17954 oappend ("{sae}");
17955 break;
17956 default:
17957 break;
17958 }
17959}
This page took 2.571068 seconds and 4 git commands to generate.