Introduce complete_nested_command_line
[deliverable/binutils-gdb.git] / opcodes / i386-dis.c
CommitLineData
252b5132 1/* Print i386 instructions for GDB, the GNU debugger.
82704155 2 Copyright (C) 1988-2019 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 98static void VCMP_Fixup (int, int);
43234a1e 99static void VPCMP_Fixup (int, int);
be92cb14 100static void VPCOM_Fixup (int, int);
cc0ec051 101static void OP_0f07 (int, int);
b844680a
L
102static void OP_Monitor (int, int);
103static void OP_Mwait (int, int);
9916071f 104static void OP_Mwaitx (int, int);
46e883c5
L
105static void NOP_Fixup1 (int, int);
106static void NOP_Fixup2 (int, int);
26ca5450 107static void OP_3DNowSuffix (int, int);
ad19981d 108static void CMP_Fixup (int, int);
26ca5450 109static void BadOp (void);
35c52694 110static void REP_Fixup (int, int);
7e8b059b 111static void BND_Fixup (int, int);
04ef582a 112static void NOTRACK_Fixup (int, int);
42164a71
L
113static void HLE_Fixup1 (int, int);
114static void HLE_Fixup2 (int, int);
115static void HLE_Fixup3 (int, int);
f5804c90 116static void CMPXCHG8B_Fixup (int, int);
42903f7f 117static void XMM_Fixup (int, int);
381d071f 118static void CRC32_Fixup (int, int);
eacc9c89 119static void FXSAVE_Fixup (int, int);
15c7c1d8 120static void PCMPESTR_Fixup (int, int);
f88c9eb0
SP
121static void OP_LWPCB_E (int, int);
122static void OP_LWP_E (int, int);
5dd85c99
SP
123static void OP_Vex_2src_1 (int, int);
124static void OP_Vex_2src_2 (int, int);
c1e679ec 125
f1f8f695 126static void MOVBE_Fixup (int, int);
252b5132 127
43234a1e
L
128static void OP_Mask (int, int);
129
6608db57 130struct dis_private {
252b5132
RH
131 /* Points to first byte not fetched. */
132 bfd_byte *max_fetched;
0b1cf022 133 bfd_byte the_buffer[MAX_MNEM_SIZE];
252b5132 134 bfd_vma insn_start;
e396998b 135 int orig_sizeflag;
8df14d78 136 OPCODES_SIGJMP_BUF bailout;
252b5132
RH
137};
138
cb712a9e
L
139enum address_mode
140{
141 mode_16bit,
142 mode_32bit,
143 mode_64bit
144};
145
146enum address_mode address_mode;
52b15da3 147
5076851f
ILT
148/* Flags for the prefixes for the current instruction. See below. */
149static int prefixes;
150
52b15da3
JH
151/* REX prefix the current instruction. See below. */
152static int rex;
153/* Bits of REX we've already used. */
154static int rex_used;
d869730d 155/* REX bits in original REX prefix ignored. */
c0f3af97 156static int rex_ignored;
52b15da3
JH
157/* Mark parts used in the REX prefix. When we are testing for
158 empty prefix (for 8bit register REX extension), just mask it
159 out. Otherwise test for REX bit is excuse for existence of REX
160 only in case value is nonzero. */
161#define USED_REX(value) \
162 { \
163 if (value) \
161a04f6
L
164 { \
165 if ((rex & value)) \
166 rex_used |= (value) | REX_OPCODE; \
167 } \
52b15da3 168 else \
161a04f6 169 rex_used |= REX_OPCODE; \
52b15da3
JH
170 }
171
7d421014
ILT
172/* Flags for prefixes which we somehow handled when printing the
173 current instruction. */
174static int used_prefixes;
175
5076851f
ILT
176/* Flags stored in PREFIXES. */
177#define PREFIX_REPZ 1
178#define PREFIX_REPNZ 2
179#define PREFIX_LOCK 4
180#define PREFIX_CS 8
181#define PREFIX_SS 0x10
182#define PREFIX_DS 0x20
183#define PREFIX_ES 0x40
184#define PREFIX_FS 0x80
185#define PREFIX_GS 0x100
186#define PREFIX_DATA 0x200
187#define PREFIX_ADDR 0x400
188#define PREFIX_FWAIT 0x800
189
252b5132
RH
190/* Make sure that bytes from INFO->PRIVATE_DATA->BUFFER (inclusive)
191 to ADDR (exclusive) are valid. Returns 1 for success, longjmps
192 on error. */
193#define FETCH_DATA(info, addr) \
6608db57 194 ((addr) <= ((struct dis_private *) (info->private_data))->max_fetched \
252b5132
RH
195 ? 1 : fetch_data ((info), (addr)))
196
197static int
26ca5450 198fetch_data (struct disassemble_info *info, bfd_byte *addr)
252b5132
RH
199{
200 int status;
6608db57 201 struct dis_private *priv = (struct dis_private *) info->private_data;
252b5132
RH
202 bfd_vma start = priv->insn_start + (priv->max_fetched - priv->the_buffer);
203
0b1cf022 204 if (addr <= priv->the_buffer + MAX_MNEM_SIZE)
272c9217
JB
205 status = (*info->read_memory_func) (start,
206 priv->max_fetched,
207 addr - priv->max_fetched,
208 info);
209 else
210 status = -1;
252b5132
RH
211 if (status != 0)
212 {
7d421014 213 /* If we did manage to read at least one byte, then
db6eb5be
AM
214 print_insn_i386 will do something sensible. Otherwise, print
215 an error. We do that here because this is where we know
216 STATUS. */
7d421014 217 if (priv->max_fetched == priv->the_buffer)
5076851f 218 (*info->memory_error_func) (status, start, info);
8df14d78 219 OPCODES_SIGLONGJMP (priv->bailout, 1);
252b5132
RH
220 }
221 else
222 priv->max_fetched = addr;
223 return 1;
224}
225
bf890a93 226/* Possible values for prefix requirement. */
507bd325
L
227#define PREFIX_IGNORED_SHIFT 16
228#define PREFIX_IGNORED_REPZ (PREFIX_REPZ << PREFIX_IGNORED_SHIFT)
229#define PREFIX_IGNORED_REPNZ (PREFIX_REPNZ << PREFIX_IGNORED_SHIFT)
230#define PREFIX_IGNORED_DATA (PREFIX_DATA << PREFIX_IGNORED_SHIFT)
231#define PREFIX_IGNORED_ADDR (PREFIX_ADDR << PREFIX_IGNORED_SHIFT)
232#define PREFIX_IGNORED_LOCK (PREFIX_LOCK << PREFIX_IGNORED_SHIFT)
233
234/* Opcode prefixes. */
235#define PREFIX_OPCODE (PREFIX_REPZ \
236 | PREFIX_REPNZ \
237 | PREFIX_DATA)
238
239/* Prefixes ignored. */
240#define PREFIX_IGNORED (PREFIX_IGNORED_REPZ \
241 | PREFIX_IGNORED_REPNZ \
242 | PREFIX_IGNORED_DATA)
bf890a93 243
ce518a5f 244#define XX { NULL, 0 }
507bd325 245#define Bad_Opcode NULL, { { NULL, 0 } }, 0
ce518a5f
L
246
247#define Eb { OP_E, b_mode }
7e8b059b 248#define Ebnd { OP_E, bnd_mode }
b6169b20 249#define EbS { OP_E, b_swap_mode }
9f79e886 250#define EbndS { OP_E, bnd_swap_mode }
ce518a5f 251#define Ev { OP_E, v_mode }
de89d0a3 252#define Eva { OP_E, va_mode }
7e8b059b 253#define Ev_bnd { OP_E, v_bnd_mode }
b6169b20 254#define EvS { OP_E, v_swap_mode }
ce518a5f
L
255#define Ed { OP_E, d_mode }
256#define Edq { OP_E, dq_mode }
257#define Edqw { OP_E, dqw_mode }
42903f7f 258#define Edqb { OP_E, dqb_mode }
1ba585e8
IT
259#define Edb { OP_E, db_mode }
260#define Edw { OP_E, dw_mode }
42903f7f 261#define Edqd { OP_E, dqd_mode }
d20dee9e 262#define Edqa { OP_E, dqa_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 }
c0f3af97 444#define VCMP { VCMP_Fixup, 0 }
43234a1e 445#define VPCMP { VPCMP_Fixup, 0 }
be92cb14 446#define VPCOM { VPCOM_Fixup, 0 }
43234a1e
L
447
448#define EXxEVexR { OP_Rounding, evex_rounding_mode }
70df6fc9 449#define EXxEVexR64 { OP_Rounding, evex_rounding_64_mode }
43234a1e
L
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,
d20dee9e
L
594 /* operand size depends on the W bit as well as address mode. */
595 dqa_mode,
51e7da1b 596 /* normal vex mode */
3873ba12 597 vex_mode,
51e7da1b 598 /* 128bit vex mode */
3873ba12 599 vex128_mode,
51e7da1b 600 /* 256bit vex mode */
3873ba12 601 vex256_mode,
51e7da1b 602 /* operand size depends on the VEX.W bit. */
3873ba12 603 vex_w_dq_mode,
d55ee72f 604
6c30d220
L
605 /* Similar to vex_w_dq_mode, with VSIB dword indices. */
606 vex_vsib_d_w_dq_mode,
5fc35d96
IT
607 /* Similar to vex_vsib_d_w_dq_mode, with smaller memory. */
608 vex_vsib_d_w_d_mode,
6c30d220
L
609 /* Similar to vex_w_dq_mode, with VSIB qword indices. */
610 vex_vsib_q_w_dq_mode,
5fc35d96
IT
611 /* Similar to vex_vsib_q_w_dq_mode, with smaller memory. */
612 vex_vsib_q_w_d_mode,
6c30d220 613
539f890d
L
614 /* scalar, ignore vector length. */
615 scalar_mode,
53467f57
IT
616 /* like b_mode, ignore vector length. */
617 b_scalar_mode,
618 /* like w_mode, ignore vector length. */
619 w_scalar_mode,
539f890d
L
620 /* like d_mode, ignore vector length. */
621 d_scalar_mode,
622 /* like d_swap_mode, ignore vector length. */
623 d_scalar_swap_mode,
624 /* like q_mode, ignore vector length. */
625 q_scalar_mode,
626 /* like q_swap_mode, ignore vector length. */
627 q_scalar_swap_mode,
628 /* like vex_mode, ignore vector length. */
629 vex_scalar_mode,
1c480963
L
630 /* like vex_w_dq_mode, ignore vector length. */
631 vex_scalar_w_dq_mode,
539f890d 632
43234a1e
L
633 /* Static rounding. */
634 evex_rounding_mode,
70df6fc9
L
635 /* Static rounding, 64-bit mode only. */
636 evex_rounding_64_mode,
43234a1e
L
637 /* Supress all exceptions. */
638 evex_sae_mode,
639
640 /* Mask register operand. */
641 mask_mode,
1ba585e8
IT
642 /* Mask register operand. */
643 mask_bd_mode,
43234a1e 644
3873ba12
L
645 es_reg,
646 cs_reg,
647 ss_reg,
648 ds_reg,
649 fs_reg,
650 gs_reg,
d55ee72f 651
3873ba12
L
652 eAX_reg,
653 eCX_reg,
654 eDX_reg,
655 eBX_reg,
656 eSP_reg,
657 eBP_reg,
658 eSI_reg,
659 eDI_reg,
d55ee72f 660
3873ba12
L
661 al_reg,
662 cl_reg,
663 dl_reg,
664 bl_reg,
665 ah_reg,
666 ch_reg,
667 dh_reg,
668 bh_reg,
d55ee72f 669
3873ba12
L
670 ax_reg,
671 cx_reg,
672 dx_reg,
673 bx_reg,
674 sp_reg,
675 bp_reg,
676 si_reg,
677 di_reg,
d55ee72f 678
3873ba12
L
679 rAX_reg,
680 rCX_reg,
681 rDX_reg,
682 rBX_reg,
683 rSP_reg,
684 rBP_reg,
685 rSI_reg,
686 rDI_reg,
d55ee72f 687
3873ba12
L
688 z_mode_ax_reg,
689 indir_dx_reg
51e7da1b 690};
252b5132 691
51e7da1b
L
692enum
693{
694 FLOATCODE = 1,
3873ba12
L
695 USE_REG_TABLE,
696 USE_MOD_TABLE,
697 USE_RM_TABLE,
698 USE_PREFIX_TABLE,
699 USE_X86_64_TABLE,
700 USE_3BYTE_TABLE,
f88c9eb0 701 USE_XOP_8F_TABLE,
3873ba12
L
702 USE_VEX_C4_TABLE,
703 USE_VEX_C5_TABLE,
9e30b8e0 704 USE_VEX_LEN_TABLE,
43234a1e 705 USE_VEX_W_TABLE,
04e2a182
L
706 USE_EVEX_TABLE,
707 USE_EVEX_LEN_TABLE
51e7da1b 708};
6439fc28 709
bf890a93 710#define FLOAT NULL, { { NULL, FLOATCODE } }, 0
4efba78c 711
bf890a93
IT
712#define DIS386(T, I) NULL, { { NULL, (T)}, { NULL, (I) } }, 0
713#define DIS386_PREFIX(T, I, P) NULL, { { NULL, (T)}, { NULL, (I) } }, P
1ceb70f8
L
714#define REG_TABLE(I) DIS386 (USE_REG_TABLE, (I))
715#define MOD_TABLE(I) DIS386 (USE_MOD_TABLE, (I))
716#define RM_TABLE(I) DIS386 (USE_RM_TABLE, (I))
717#define PREFIX_TABLE(I) DIS386 (USE_PREFIX_TABLE, (I))
4e7d34a6
L
718#define X86_64_TABLE(I) DIS386 (USE_X86_64_TABLE, (I))
719#define THREE_BYTE_TABLE(I) DIS386 (USE_3BYTE_TABLE, (I))
bf890a93 720#define THREE_BYTE_TABLE_PREFIX(I, P) DIS386_PREFIX (USE_3BYTE_TABLE, (I), P)
f88c9eb0 721#define XOP_8F_TABLE(I) DIS386 (USE_XOP_8F_TABLE, (I))
c0f3af97
L
722#define VEX_C4_TABLE(I) DIS386 (USE_VEX_C4_TABLE, (I))
723#define VEX_C5_TABLE(I) DIS386 (USE_VEX_C5_TABLE, (I))
724#define VEX_LEN_TABLE(I) DIS386 (USE_VEX_LEN_TABLE, (I))
9e30b8e0 725#define VEX_W_TABLE(I) DIS386 (USE_VEX_W_TABLE, (I))
43234a1e 726#define EVEX_TABLE(I) DIS386 (USE_EVEX_TABLE, (I))
04e2a182 727#define EVEX_LEN_TABLE(I) DIS386 (USE_EVEX_LEN_TABLE, (I))
1ceb70f8 728
51e7da1b
L
729enum
730{
731 REG_80 = 0,
3873ba12 732 REG_81,
7148c369 733 REG_83,
3873ba12
L
734 REG_8F,
735 REG_C0,
736 REG_C1,
737 REG_C6,
738 REG_C7,
739 REG_D0,
740 REG_D1,
741 REG_D2,
742 REG_D3,
743 REG_F6,
744 REG_F7,
745 REG_FE,
746 REG_FF,
747 REG_0F00,
748 REG_0F01,
749 REG_0F0D,
750 REG_0F18,
c48935d7 751 REG_0F1C_MOD_0,
603555e5 752 REG_0F1E_MOD_3,
3873ba12
L
753 REG_0F71,
754 REG_0F72,
755 REG_0F73,
756 REG_0FA6,
757 REG_0FA7,
758 REG_0FAE,
759 REG_0FBA,
760 REG_0FC7,
592a252b
L
761 REG_VEX_0F71,
762 REG_VEX_0F72,
763 REG_VEX_0F73,
764 REG_VEX_0FAE,
f12dc422 765 REG_VEX_0F38F3,
f88c9eb0 766 REG_XOP_LWPCB,
2a2a0f38
QN
767 REG_XOP_LWP,
768 REG_XOP_TBM_01,
43234a1e
L
769 REG_XOP_TBM_02,
770
1ba585e8 771 REG_EVEX_0F71,
43234a1e
L
772 REG_EVEX_0F72,
773 REG_EVEX_0F73,
774 REG_EVEX_0F38C6,
775 REG_EVEX_0F38C7
51e7da1b 776};
1ceb70f8 777
51e7da1b
L
778enum
779{
780 MOD_8D = 0,
42164a71
L
781 MOD_C6_REG_7,
782 MOD_C7_REG_7,
4a357820
MZ
783 MOD_FF_REG_3,
784 MOD_FF_REG_5,
3873ba12
L
785 MOD_0F01_REG_0,
786 MOD_0F01_REG_1,
787 MOD_0F01_REG_2,
788 MOD_0F01_REG_3,
8eab4136 789 MOD_0F01_REG_5,
3873ba12
L
790 MOD_0F01_REG_7,
791 MOD_0F12_PREFIX_0,
792 MOD_0F13,
793 MOD_0F16_PREFIX_0,
794 MOD_0F17,
795 MOD_0F18_REG_0,
796 MOD_0F18_REG_1,
797 MOD_0F18_REG_2,
798 MOD_0F18_REG_3,
d7189fa5
RM
799 MOD_0F18_REG_4,
800 MOD_0F18_REG_5,
801 MOD_0F18_REG_6,
802 MOD_0F18_REG_7,
7e8b059b
L
803 MOD_0F1A_PREFIX_0,
804 MOD_0F1B_PREFIX_0,
805 MOD_0F1B_PREFIX_1,
c48935d7 806 MOD_0F1C_PREFIX_0,
603555e5 807 MOD_0F1E_PREFIX_1,
3873ba12
L
808 MOD_0F24,
809 MOD_0F26,
810 MOD_0F2B_PREFIX_0,
811 MOD_0F2B_PREFIX_1,
812 MOD_0F2B_PREFIX_2,
813 MOD_0F2B_PREFIX_3,
814 MOD_0F51,
815 MOD_0F71_REG_2,
816 MOD_0F71_REG_4,
817 MOD_0F71_REG_6,
818 MOD_0F72_REG_2,
819 MOD_0F72_REG_4,
820 MOD_0F72_REG_6,
821 MOD_0F73_REG_2,
822 MOD_0F73_REG_3,
823 MOD_0F73_REG_6,
824 MOD_0F73_REG_7,
825 MOD_0FAE_REG_0,
826 MOD_0FAE_REG_1,
827 MOD_0FAE_REG_2,
828 MOD_0FAE_REG_3,
829 MOD_0FAE_REG_4,
830 MOD_0FAE_REG_5,
831 MOD_0FAE_REG_6,
832 MOD_0FAE_REG_7,
833 MOD_0FB2,
834 MOD_0FB4,
835 MOD_0FB5,
a8484f96 836 MOD_0FC3,
963f3586
IT
837 MOD_0FC7_REG_3,
838 MOD_0FC7_REG_4,
839 MOD_0FC7_REG_5,
3873ba12
L
840 MOD_0FC7_REG_6,
841 MOD_0FC7_REG_7,
842 MOD_0FD7,
843 MOD_0FE7_PREFIX_2,
844 MOD_0FF0_PREFIX_3,
845 MOD_0F382A_PREFIX_2,
603555e5
L
846 MOD_0F38F5_PREFIX_2,
847 MOD_0F38F6_PREFIX_0,
5d79adc4 848 MOD_0F38F8_PREFIX_1,
c0a30a9f 849 MOD_0F38F8_PREFIX_2,
5d79adc4 850 MOD_0F38F8_PREFIX_3,
c0a30a9f 851 MOD_0F38F9_PREFIX_0,
3873ba12
L
852 MOD_62_32BIT,
853 MOD_C4_32BIT,
854 MOD_C5_32BIT,
592a252b
L
855 MOD_VEX_0F12_PREFIX_0,
856 MOD_VEX_0F13,
857 MOD_VEX_0F16_PREFIX_0,
858 MOD_VEX_0F17,
859 MOD_VEX_0F2B,
ab4e4ed5
AF
860 MOD_VEX_W_0_0F41_P_0_LEN_1,
861 MOD_VEX_W_1_0F41_P_0_LEN_1,
862 MOD_VEX_W_0_0F41_P_2_LEN_1,
863 MOD_VEX_W_1_0F41_P_2_LEN_1,
864 MOD_VEX_W_0_0F42_P_0_LEN_1,
865 MOD_VEX_W_1_0F42_P_0_LEN_1,
866 MOD_VEX_W_0_0F42_P_2_LEN_1,
867 MOD_VEX_W_1_0F42_P_2_LEN_1,
868 MOD_VEX_W_0_0F44_P_0_LEN_1,
869 MOD_VEX_W_1_0F44_P_0_LEN_1,
870 MOD_VEX_W_0_0F44_P_2_LEN_1,
871 MOD_VEX_W_1_0F44_P_2_LEN_1,
872 MOD_VEX_W_0_0F45_P_0_LEN_1,
873 MOD_VEX_W_1_0F45_P_0_LEN_1,
874 MOD_VEX_W_0_0F45_P_2_LEN_1,
875 MOD_VEX_W_1_0F45_P_2_LEN_1,
876 MOD_VEX_W_0_0F46_P_0_LEN_1,
877 MOD_VEX_W_1_0F46_P_0_LEN_1,
878 MOD_VEX_W_0_0F46_P_2_LEN_1,
879 MOD_VEX_W_1_0F46_P_2_LEN_1,
880 MOD_VEX_W_0_0F47_P_0_LEN_1,
881 MOD_VEX_W_1_0F47_P_0_LEN_1,
882 MOD_VEX_W_0_0F47_P_2_LEN_1,
883 MOD_VEX_W_1_0F47_P_2_LEN_1,
884 MOD_VEX_W_0_0F4A_P_0_LEN_1,
885 MOD_VEX_W_1_0F4A_P_0_LEN_1,
886 MOD_VEX_W_0_0F4A_P_2_LEN_1,
887 MOD_VEX_W_1_0F4A_P_2_LEN_1,
888 MOD_VEX_W_0_0F4B_P_0_LEN_1,
889 MOD_VEX_W_1_0F4B_P_0_LEN_1,
890 MOD_VEX_W_0_0F4B_P_2_LEN_1,
592a252b
L
891 MOD_VEX_0F50,
892 MOD_VEX_0F71_REG_2,
893 MOD_VEX_0F71_REG_4,
894 MOD_VEX_0F71_REG_6,
895 MOD_VEX_0F72_REG_2,
896 MOD_VEX_0F72_REG_4,
897 MOD_VEX_0F72_REG_6,
898 MOD_VEX_0F73_REG_2,
899 MOD_VEX_0F73_REG_3,
900 MOD_VEX_0F73_REG_6,
901 MOD_VEX_0F73_REG_7,
ab4e4ed5
AF
902 MOD_VEX_W_0_0F91_P_0_LEN_0,
903 MOD_VEX_W_1_0F91_P_0_LEN_0,
904 MOD_VEX_W_0_0F91_P_2_LEN_0,
905 MOD_VEX_W_1_0F91_P_2_LEN_0,
906 MOD_VEX_W_0_0F92_P_0_LEN_0,
907 MOD_VEX_W_0_0F92_P_2_LEN_0,
58a211d2 908 MOD_VEX_0F92_P_3_LEN_0,
ab4e4ed5
AF
909 MOD_VEX_W_0_0F93_P_0_LEN_0,
910 MOD_VEX_W_0_0F93_P_2_LEN_0,
58a211d2 911 MOD_VEX_0F93_P_3_LEN_0,
ab4e4ed5
AF
912 MOD_VEX_W_0_0F98_P_0_LEN_0,
913 MOD_VEX_W_1_0F98_P_0_LEN_0,
914 MOD_VEX_W_0_0F98_P_2_LEN_0,
915 MOD_VEX_W_1_0F98_P_2_LEN_0,
916 MOD_VEX_W_0_0F99_P_0_LEN_0,
917 MOD_VEX_W_1_0F99_P_0_LEN_0,
918 MOD_VEX_W_0_0F99_P_2_LEN_0,
919 MOD_VEX_W_1_0F99_P_2_LEN_0,
592a252b
L
920 MOD_VEX_0FAE_REG_2,
921 MOD_VEX_0FAE_REG_3,
922 MOD_VEX_0FD7_PREFIX_2,
923 MOD_VEX_0FE7_PREFIX_2,
924 MOD_VEX_0FF0_PREFIX_3,
592a252b
L
925 MOD_VEX_0F381A_PREFIX_2,
926 MOD_VEX_0F382A_PREFIX_2,
927 MOD_VEX_0F382C_PREFIX_2,
928 MOD_VEX_0F382D_PREFIX_2,
929 MOD_VEX_0F382E_PREFIX_2,
6c30d220
L
930 MOD_VEX_0F382F_PREFIX_2,
931 MOD_VEX_0F385A_PREFIX_2,
932 MOD_VEX_0F388C_PREFIX_2,
933 MOD_VEX_0F388E_PREFIX_2,
ab4e4ed5
AF
934 MOD_VEX_W_0_0F3A30_P_2_LEN_0,
935 MOD_VEX_W_1_0F3A30_P_2_LEN_0,
936 MOD_VEX_W_0_0F3A31_P_2_LEN_0,
937 MOD_VEX_W_1_0F3A31_P_2_LEN_0,
938 MOD_VEX_W_0_0F3A32_P_2_LEN_0,
939 MOD_VEX_W_1_0F3A32_P_2_LEN_0,
940 MOD_VEX_W_0_0F3A33_P_2_LEN_0,
941 MOD_VEX_W_1_0F3A33_P_2_LEN_0,
43234a1e
L
942
943 MOD_EVEX_0F10_PREFIX_1,
944 MOD_EVEX_0F10_PREFIX_3,
945 MOD_EVEX_0F11_PREFIX_1,
946 MOD_EVEX_0F11_PREFIX_3,
947 MOD_EVEX_0F12_PREFIX_0,
948 MOD_EVEX_0F16_PREFIX_0,
949 MOD_EVEX_0F38C6_REG_1,
950 MOD_EVEX_0F38C6_REG_2,
951 MOD_EVEX_0F38C6_REG_5,
952 MOD_EVEX_0F38C6_REG_6,
953 MOD_EVEX_0F38C7_REG_1,
954 MOD_EVEX_0F38C7_REG_2,
955 MOD_EVEX_0F38C7_REG_5,
956 MOD_EVEX_0F38C7_REG_6
51e7da1b 957};
1ceb70f8 958
51e7da1b
L
959enum
960{
42164a71
L
961 RM_C6_REG_7 = 0,
962 RM_C7_REG_7,
963 RM_0F01_REG_0,
3873ba12
L
964 RM_0F01_REG_1,
965 RM_0F01_REG_2,
966 RM_0F01_REG_3,
8eab4136 967 RM_0F01_REG_5,
3873ba12 968 RM_0F01_REG_7,
603555e5 969 RM_0F1E_MOD_3_REG_7,
3873ba12
L
970 RM_0FAE_REG_6,
971 RM_0FAE_REG_7
51e7da1b 972};
1ceb70f8 973
51e7da1b
L
974enum
975{
976 PREFIX_90 = 0,
603555e5 977 PREFIX_MOD_0_0F01_REG_5,
2234eee6 978 PREFIX_MOD_3_0F01_REG_5_RM_0,
603555e5 979 PREFIX_MOD_3_0F01_REG_5_RM_2,
3233d7d0 980 PREFIX_0F09,
3873ba12
L
981 PREFIX_0F10,
982 PREFIX_0F11,
983 PREFIX_0F12,
984 PREFIX_0F16,
7e8b059b
L
985 PREFIX_0F1A,
986 PREFIX_0F1B,
c48935d7 987 PREFIX_0F1C,
603555e5 988 PREFIX_0F1E,
3873ba12
L
989 PREFIX_0F2A,
990 PREFIX_0F2B,
991 PREFIX_0F2C,
992 PREFIX_0F2D,
993 PREFIX_0F2E,
994 PREFIX_0F2F,
995 PREFIX_0F51,
996 PREFIX_0F52,
997 PREFIX_0F53,
998 PREFIX_0F58,
999 PREFIX_0F59,
1000 PREFIX_0F5A,
1001 PREFIX_0F5B,
1002 PREFIX_0F5C,
1003 PREFIX_0F5D,
1004 PREFIX_0F5E,
1005 PREFIX_0F5F,
1006 PREFIX_0F60,
1007 PREFIX_0F61,
1008 PREFIX_0F62,
1009 PREFIX_0F6C,
1010 PREFIX_0F6D,
1011 PREFIX_0F6F,
1012 PREFIX_0F70,
1013 PREFIX_0F73_REG_3,
1014 PREFIX_0F73_REG_7,
1015 PREFIX_0F78,
1016 PREFIX_0F79,
1017 PREFIX_0F7C,
1018 PREFIX_0F7D,
1019 PREFIX_0F7E,
1020 PREFIX_0F7F,
c7b8aa3a
L
1021 PREFIX_0FAE_REG_0,
1022 PREFIX_0FAE_REG_1,
1023 PREFIX_0FAE_REG_2,
1024 PREFIX_0FAE_REG_3,
6b40c462
L
1025 PREFIX_MOD_0_0FAE_REG_4,
1026 PREFIX_MOD_3_0FAE_REG_4,
603555e5 1027 PREFIX_MOD_0_0FAE_REG_5,
2234eee6 1028 PREFIX_MOD_3_0FAE_REG_5,
de89d0a3
IT
1029 PREFIX_MOD_0_0FAE_REG_6,
1030 PREFIX_MOD_1_0FAE_REG_6,
963f3586 1031 PREFIX_0FAE_REG_7,
3873ba12 1032 PREFIX_0FB8,
f12dc422 1033 PREFIX_0FBC,
3873ba12
L
1034 PREFIX_0FBD,
1035 PREFIX_0FC2,
a8484f96 1036 PREFIX_MOD_0_0FC3,
f24bcbaa
L
1037 PREFIX_MOD_0_0FC7_REG_6,
1038 PREFIX_MOD_3_0FC7_REG_6,
1039 PREFIX_MOD_3_0FC7_REG_7,
3873ba12
L
1040 PREFIX_0FD0,
1041 PREFIX_0FD6,
1042 PREFIX_0FE6,
1043 PREFIX_0FE7,
1044 PREFIX_0FF0,
1045 PREFIX_0FF7,
1046 PREFIX_0F3810,
1047 PREFIX_0F3814,
1048 PREFIX_0F3815,
1049 PREFIX_0F3817,
1050 PREFIX_0F3820,
1051 PREFIX_0F3821,
1052 PREFIX_0F3822,
1053 PREFIX_0F3823,
1054 PREFIX_0F3824,
1055 PREFIX_0F3825,
1056 PREFIX_0F3828,
1057 PREFIX_0F3829,
1058 PREFIX_0F382A,
1059 PREFIX_0F382B,
1060 PREFIX_0F3830,
1061 PREFIX_0F3831,
1062 PREFIX_0F3832,
1063 PREFIX_0F3833,
1064 PREFIX_0F3834,
1065 PREFIX_0F3835,
1066 PREFIX_0F3837,
1067 PREFIX_0F3838,
1068 PREFIX_0F3839,
1069 PREFIX_0F383A,
1070 PREFIX_0F383B,
1071 PREFIX_0F383C,
1072 PREFIX_0F383D,
1073 PREFIX_0F383E,
1074 PREFIX_0F383F,
1075 PREFIX_0F3840,
1076 PREFIX_0F3841,
1077 PREFIX_0F3880,
1078 PREFIX_0F3881,
6c30d220 1079 PREFIX_0F3882,
a0046408
L
1080 PREFIX_0F38C8,
1081 PREFIX_0F38C9,
1082 PREFIX_0F38CA,
1083 PREFIX_0F38CB,
1084 PREFIX_0F38CC,
1085 PREFIX_0F38CD,
48521003 1086 PREFIX_0F38CF,
3873ba12
L
1087 PREFIX_0F38DB,
1088 PREFIX_0F38DC,
1089 PREFIX_0F38DD,
1090 PREFIX_0F38DE,
1091 PREFIX_0F38DF,
1092 PREFIX_0F38F0,
1093 PREFIX_0F38F1,
603555e5 1094 PREFIX_0F38F5,
e2e1fcde 1095 PREFIX_0F38F6,
c0a30a9f
L
1096 PREFIX_0F38F8,
1097 PREFIX_0F38F9,
3873ba12
L
1098 PREFIX_0F3A08,
1099 PREFIX_0F3A09,
1100 PREFIX_0F3A0A,
1101 PREFIX_0F3A0B,
1102 PREFIX_0F3A0C,
1103 PREFIX_0F3A0D,
1104 PREFIX_0F3A0E,
1105 PREFIX_0F3A14,
1106 PREFIX_0F3A15,
1107 PREFIX_0F3A16,
1108 PREFIX_0F3A17,
1109 PREFIX_0F3A20,
1110 PREFIX_0F3A21,
1111 PREFIX_0F3A22,
1112 PREFIX_0F3A40,
1113 PREFIX_0F3A41,
1114 PREFIX_0F3A42,
1115 PREFIX_0F3A44,
1116 PREFIX_0F3A60,
1117 PREFIX_0F3A61,
1118 PREFIX_0F3A62,
1119 PREFIX_0F3A63,
a0046408 1120 PREFIX_0F3ACC,
48521003
IT
1121 PREFIX_0F3ACE,
1122 PREFIX_0F3ACF,
3873ba12 1123 PREFIX_0F3ADF,
592a252b
L
1124 PREFIX_VEX_0F10,
1125 PREFIX_VEX_0F11,
1126 PREFIX_VEX_0F12,
1127 PREFIX_VEX_0F16,
1128 PREFIX_VEX_0F2A,
1129 PREFIX_VEX_0F2C,
1130 PREFIX_VEX_0F2D,
1131 PREFIX_VEX_0F2E,
1132 PREFIX_VEX_0F2F,
43234a1e
L
1133 PREFIX_VEX_0F41,
1134 PREFIX_VEX_0F42,
1135 PREFIX_VEX_0F44,
1136 PREFIX_VEX_0F45,
1137 PREFIX_VEX_0F46,
1138 PREFIX_VEX_0F47,
1ba585e8 1139 PREFIX_VEX_0F4A,
43234a1e 1140 PREFIX_VEX_0F4B,
592a252b
L
1141 PREFIX_VEX_0F51,
1142 PREFIX_VEX_0F52,
1143 PREFIX_VEX_0F53,
1144 PREFIX_VEX_0F58,
1145 PREFIX_VEX_0F59,
1146 PREFIX_VEX_0F5A,
1147 PREFIX_VEX_0F5B,
1148 PREFIX_VEX_0F5C,
1149 PREFIX_VEX_0F5D,
1150 PREFIX_VEX_0F5E,
1151 PREFIX_VEX_0F5F,
1152 PREFIX_VEX_0F60,
1153 PREFIX_VEX_0F61,
1154 PREFIX_VEX_0F62,
1155 PREFIX_VEX_0F63,
1156 PREFIX_VEX_0F64,
1157 PREFIX_VEX_0F65,
1158 PREFIX_VEX_0F66,
1159 PREFIX_VEX_0F67,
1160 PREFIX_VEX_0F68,
1161 PREFIX_VEX_0F69,
1162 PREFIX_VEX_0F6A,
1163 PREFIX_VEX_0F6B,
1164 PREFIX_VEX_0F6C,
1165 PREFIX_VEX_0F6D,
1166 PREFIX_VEX_0F6E,
1167 PREFIX_VEX_0F6F,
1168 PREFIX_VEX_0F70,
1169 PREFIX_VEX_0F71_REG_2,
1170 PREFIX_VEX_0F71_REG_4,
1171 PREFIX_VEX_0F71_REG_6,
1172 PREFIX_VEX_0F72_REG_2,
1173 PREFIX_VEX_0F72_REG_4,
1174 PREFIX_VEX_0F72_REG_6,
1175 PREFIX_VEX_0F73_REG_2,
1176 PREFIX_VEX_0F73_REG_3,
1177 PREFIX_VEX_0F73_REG_6,
1178 PREFIX_VEX_0F73_REG_7,
1179 PREFIX_VEX_0F74,
1180 PREFIX_VEX_0F75,
1181 PREFIX_VEX_0F76,
1182 PREFIX_VEX_0F77,
1183 PREFIX_VEX_0F7C,
1184 PREFIX_VEX_0F7D,
1185 PREFIX_VEX_0F7E,
1186 PREFIX_VEX_0F7F,
43234a1e
L
1187 PREFIX_VEX_0F90,
1188 PREFIX_VEX_0F91,
1189 PREFIX_VEX_0F92,
1190 PREFIX_VEX_0F93,
1191 PREFIX_VEX_0F98,
1ba585e8 1192 PREFIX_VEX_0F99,
592a252b
L
1193 PREFIX_VEX_0FC2,
1194 PREFIX_VEX_0FC4,
1195 PREFIX_VEX_0FC5,
1196 PREFIX_VEX_0FD0,
1197 PREFIX_VEX_0FD1,
1198 PREFIX_VEX_0FD2,
1199 PREFIX_VEX_0FD3,
1200 PREFIX_VEX_0FD4,
1201 PREFIX_VEX_0FD5,
1202 PREFIX_VEX_0FD6,
1203 PREFIX_VEX_0FD7,
1204 PREFIX_VEX_0FD8,
1205 PREFIX_VEX_0FD9,
1206 PREFIX_VEX_0FDA,
1207 PREFIX_VEX_0FDB,
1208 PREFIX_VEX_0FDC,
1209 PREFIX_VEX_0FDD,
1210 PREFIX_VEX_0FDE,
1211 PREFIX_VEX_0FDF,
1212 PREFIX_VEX_0FE0,
1213 PREFIX_VEX_0FE1,
1214 PREFIX_VEX_0FE2,
1215 PREFIX_VEX_0FE3,
1216 PREFIX_VEX_0FE4,
1217 PREFIX_VEX_0FE5,
1218 PREFIX_VEX_0FE6,
1219 PREFIX_VEX_0FE7,
1220 PREFIX_VEX_0FE8,
1221 PREFIX_VEX_0FE9,
1222 PREFIX_VEX_0FEA,
1223 PREFIX_VEX_0FEB,
1224 PREFIX_VEX_0FEC,
1225 PREFIX_VEX_0FED,
1226 PREFIX_VEX_0FEE,
1227 PREFIX_VEX_0FEF,
1228 PREFIX_VEX_0FF0,
1229 PREFIX_VEX_0FF1,
1230 PREFIX_VEX_0FF2,
1231 PREFIX_VEX_0FF3,
1232 PREFIX_VEX_0FF4,
1233 PREFIX_VEX_0FF5,
1234 PREFIX_VEX_0FF6,
1235 PREFIX_VEX_0FF7,
1236 PREFIX_VEX_0FF8,
1237 PREFIX_VEX_0FF9,
1238 PREFIX_VEX_0FFA,
1239 PREFIX_VEX_0FFB,
1240 PREFIX_VEX_0FFC,
1241 PREFIX_VEX_0FFD,
1242 PREFIX_VEX_0FFE,
1243 PREFIX_VEX_0F3800,
1244 PREFIX_VEX_0F3801,
1245 PREFIX_VEX_0F3802,
1246 PREFIX_VEX_0F3803,
1247 PREFIX_VEX_0F3804,
1248 PREFIX_VEX_0F3805,
1249 PREFIX_VEX_0F3806,
1250 PREFIX_VEX_0F3807,
1251 PREFIX_VEX_0F3808,
1252 PREFIX_VEX_0F3809,
1253 PREFIX_VEX_0F380A,
1254 PREFIX_VEX_0F380B,
1255 PREFIX_VEX_0F380C,
1256 PREFIX_VEX_0F380D,
1257 PREFIX_VEX_0F380E,
1258 PREFIX_VEX_0F380F,
1259 PREFIX_VEX_0F3813,
6c30d220 1260 PREFIX_VEX_0F3816,
592a252b
L
1261 PREFIX_VEX_0F3817,
1262 PREFIX_VEX_0F3818,
1263 PREFIX_VEX_0F3819,
1264 PREFIX_VEX_0F381A,
1265 PREFIX_VEX_0F381C,
1266 PREFIX_VEX_0F381D,
1267 PREFIX_VEX_0F381E,
1268 PREFIX_VEX_0F3820,
1269 PREFIX_VEX_0F3821,
1270 PREFIX_VEX_0F3822,
1271 PREFIX_VEX_0F3823,
1272 PREFIX_VEX_0F3824,
1273 PREFIX_VEX_0F3825,
1274 PREFIX_VEX_0F3828,
1275 PREFIX_VEX_0F3829,
1276 PREFIX_VEX_0F382A,
1277 PREFIX_VEX_0F382B,
1278 PREFIX_VEX_0F382C,
1279 PREFIX_VEX_0F382D,
1280 PREFIX_VEX_0F382E,
1281 PREFIX_VEX_0F382F,
1282 PREFIX_VEX_0F3830,
1283 PREFIX_VEX_0F3831,
1284 PREFIX_VEX_0F3832,
1285 PREFIX_VEX_0F3833,
1286 PREFIX_VEX_0F3834,
1287 PREFIX_VEX_0F3835,
6c30d220 1288 PREFIX_VEX_0F3836,
592a252b
L
1289 PREFIX_VEX_0F3837,
1290 PREFIX_VEX_0F3838,
1291 PREFIX_VEX_0F3839,
1292 PREFIX_VEX_0F383A,
1293 PREFIX_VEX_0F383B,
1294 PREFIX_VEX_0F383C,
1295 PREFIX_VEX_0F383D,
1296 PREFIX_VEX_0F383E,
1297 PREFIX_VEX_0F383F,
1298 PREFIX_VEX_0F3840,
1299 PREFIX_VEX_0F3841,
6c30d220
L
1300 PREFIX_VEX_0F3845,
1301 PREFIX_VEX_0F3846,
1302 PREFIX_VEX_0F3847,
1303 PREFIX_VEX_0F3858,
1304 PREFIX_VEX_0F3859,
1305 PREFIX_VEX_0F385A,
1306 PREFIX_VEX_0F3878,
1307 PREFIX_VEX_0F3879,
1308 PREFIX_VEX_0F388C,
1309 PREFIX_VEX_0F388E,
1310 PREFIX_VEX_0F3890,
1311 PREFIX_VEX_0F3891,
1312 PREFIX_VEX_0F3892,
1313 PREFIX_VEX_0F3893,
592a252b
L
1314 PREFIX_VEX_0F3896,
1315 PREFIX_VEX_0F3897,
1316 PREFIX_VEX_0F3898,
1317 PREFIX_VEX_0F3899,
1318 PREFIX_VEX_0F389A,
1319 PREFIX_VEX_0F389B,
1320 PREFIX_VEX_0F389C,
1321 PREFIX_VEX_0F389D,
1322 PREFIX_VEX_0F389E,
1323 PREFIX_VEX_0F389F,
1324 PREFIX_VEX_0F38A6,
1325 PREFIX_VEX_0F38A7,
1326 PREFIX_VEX_0F38A8,
1327 PREFIX_VEX_0F38A9,
1328 PREFIX_VEX_0F38AA,
1329 PREFIX_VEX_0F38AB,
1330 PREFIX_VEX_0F38AC,
1331 PREFIX_VEX_0F38AD,
1332 PREFIX_VEX_0F38AE,
1333 PREFIX_VEX_0F38AF,
1334 PREFIX_VEX_0F38B6,
1335 PREFIX_VEX_0F38B7,
1336 PREFIX_VEX_0F38B8,
1337 PREFIX_VEX_0F38B9,
1338 PREFIX_VEX_0F38BA,
1339 PREFIX_VEX_0F38BB,
1340 PREFIX_VEX_0F38BC,
1341 PREFIX_VEX_0F38BD,
1342 PREFIX_VEX_0F38BE,
1343 PREFIX_VEX_0F38BF,
48521003 1344 PREFIX_VEX_0F38CF,
592a252b
L
1345 PREFIX_VEX_0F38DB,
1346 PREFIX_VEX_0F38DC,
1347 PREFIX_VEX_0F38DD,
1348 PREFIX_VEX_0F38DE,
1349 PREFIX_VEX_0F38DF,
f12dc422
L
1350 PREFIX_VEX_0F38F2,
1351 PREFIX_VEX_0F38F3_REG_1,
1352 PREFIX_VEX_0F38F3_REG_2,
1353 PREFIX_VEX_0F38F3_REG_3,
6c30d220
L
1354 PREFIX_VEX_0F38F5,
1355 PREFIX_VEX_0F38F6,
f12dc422 1356 PREFIX_VEX_0F38F7,
6c30d220
L
1357 PREFIX_VEX_0F3A00,
1358 PREFIX_VEX_0F3A01,
1359 PREFIX_VEX_0F3A02,
592a252b
L
1360 PREFIX_VEX_0F3A04,
1361 PREFIX_VEX_0F3A05,
1362 PREFIX_VEX_0F3A06,
1363 PREFIX_VEX_0F3A08,
1364 PREFIX_VEX_0F3A09,
1365 PREFIX_VEX_0F3A0A,
1366 PREFIX_VEX_0F3A0B,
1367 PREFIX_VEX_0F3A0C,
1368 PREFIX_VEX_0F3A0D,
1369 PREFIX_VEX_0F3A0E,
1370 PREFIX_VEX_0F3A0F,
1371 PREFIX_VEX_0F3A14,
1372 PREFIX_VEX_0F3A15,
1373 PREFIX_VEX_0F3A16,
1374 PREFIX_VEX_0F3A17,
1375 PREFIX_VEX_0F3A18,
1376 PREFIX_VEX_0F3A19,
1377 PREFIX_VEX_0F3A1D,
1378 PREFIX_VEX_0F3A20,
1379 PREFIX_VEX_0F3A21,
1380 PREFIX_VEX_0F3A22,
43234a1e 1381 PREFIX_VEX_0F3A30,
1ba585e8 1382 PREFIX_VEX_0F3A31,
43234a1e 1383 PREFIX_VEX_0F3A32,
1ba585e8 1384 PREFIX_VEX_0F3A33,
6c30d220
L
1385 PREFIX_VEX_0F3A38,
1386 PREFIX_VEX_0F3A39,
592a252b
L
1387 PREFIX_VEX_0F3A40,
1388 PREFIX_VEX_0F3A41,
1389 PREFIX_VEX_0F3A42,
1390 PREFIX_VEX_0F3A44,
6c30d220 1391 PREFIX_VEX_0F3A46,
592a252b
L
1392 PREFIX_VEX_0F3A48,
1393 PREFIX_VEX_0F3A49,
1394 PREFIX_VEX_0F3A4A,
1395 PREFIX_VEX_0F3A4B,
1396 PREFIX_VEX_0F3A4C,
1397 PREFIX_VEX_0F3A5C,
1398 PREFIX_VEX_0F3A5D,
1399 PREFIX_VEX_0F3A5E,
1400 PREFIX_VEX_0F3A5F,
1401 PREFIX_VEX_0F3A60,
1402 PREFIX_VEX_0F3A61,
1403 PREFIX_VEX_0F3A62,
1404 PREFIX_VEX_0F3A63,
1405 PREFIX_VEX_0F3A68,
1406 PREFIX_VEX_0F3A69,
1407 PREFIX_VEX_0F3A6A,
1408 PREFIX_VEX_0F3A6B,
1409 PREFIX_VEX_0F3A6C,
1410 PREFIX_VEX_0F3A6D,
1411 PREFIX_VEX_0F3A6E,
1412 PREFIX_VEX_0F3A6F,
1413 PREFIX_VEX_0F3A78,
1414 PREFIX_VEX_0F3A79,
1415 PREFIX_VEX_0F3A7A,
1416 PREFIX_VEX_0F3A7B,
1417 PREFIX_VEX_0F3A7C,
1418 PREFIX_VEX_0F3A7D,
1419 PREFIX_VEX_0F3A7E,
1420 PREFIX_VEX_0F3A7F,
48521003
IT
1421 PREFIX_VEX_0F3ACE,
1422 PREFIX_VEX_0F3ACF,
6c30d220 1423 PREFIX_VEX_0F3ADF,
43234a1e
L
1424 PREFIX_VEX_0F3AF0,
1425
1426 PREFIX_EVEX_0F10,
1427 PREFIX_EVEX_0F11,
1428 PREFIX_EVEX_0F12,
1429 PREFIX_EVEX_0F13,
1430 PREFIX_EVEX_0F14,
1431 PREFIX_EVEX_0F15,
1432 PREFIX_EVEX_0F16,
1433 PREFIX_EVEX_0F17,
1434 PREFIX_EVEX_0F28,
1435 PREFIX_EVEX_0F29,
1436 PREFIX_EVEX_0F2A,
1437 PREFIX_EVEX_0F2B,
1438 PREFIX_EVEX_0F2C,
1439 PREFIX_EVEX_0F2D,
1440 PREFIX_EVEX_0F2E,
1441 PREFIX_EVEX_0F2F,
1442 PREFIX_EVEX_0F51,
90a915bf
IT
1443 PREFIX_EVEX_0F54,
1444 PREFIX_EVEX_0F55,
1445 PREFIX_EVEX_0F56,
1446 PREFIX_EVEX_0F57,
43234a1e
L
1447 PREFIX_EVEX_0F58,
1448 PREFIX_EVEX_0F59,
1449 PREFIX_EVEX_0F5A,
1450 PREFIX_EVEX_0F5B,
1451 PREFIX_EVEX_0F5C,
1452 PREFIX_EVEX_0F5D,
1453 PREFIX_EVEX_0F5E,
1454 PREFIX_EVEX_0F5F,
1ba585e8
IT
1455 PREFIX_EVEX_0F60,
1456 PREFIX_EVEX_0F61,
43234a1e 1457 PREFIX_EVEX_0F62,
1ba585e8
IT
1458 PREFIX_EVEX_0F63,
1459 PREFIX_EVEX_0F64,
1460 PREFIX_EVEX_0F65,
43234a1e 1461 PREFIX_EVEX_0F66,
1ba585e8
IT
1462 PREFIX_EVEX_0F67,
1463 PREFIX_EVEX_0F68,
1464 PREFIX_EVEX_0F69,
43234a1e 1465 PREFIX_EVEX_0F6A,
1ba585e8 1466 PREFIX_EVEX_0F6B,
43234a1e
L
1467 PREFIX_EVEX_0F6C,
1468 PREFIX_EVEX_0F6D,
1469 PREFIX_EVEX_0F6E,
1470 PREFIX_EVEX_0F6F,
1471 PREFIX_EVEX_0F70,
1ba585e8
IT
1472 PREFIX_EVEX_0F71_REG_2,
1473 PREFIX_EVEX_0F71_REG_4,
1474 PREFIX_EVEX_0F71_REG_6,
43234a1e
L
1475 PREFIX_EVEX_0F72_REG_0,
1476 PREFIX_EVEX_0F72_REG_1,
1477 PREFIX_EVEX_0F72_REG_2,
1478 PREFIX_EVEX_0F72_REG_4,
1479 PREFIX_EVEX_0F72_REG_6,
1480 PREFIX_EVEX_0F73_REG_2,
1ba585e8 1481 PREFIX_EVEX_0F73_REG_3,
43234a1e 1482 PREFIX_EVEX_0F73_REG_6,
1ba585e8
IT
1483 PREFIX_EVEX_0F73_REG_7,
1484 PREFIX_EVEX_0F74,
1485 PREFIX_EVEX_0F75,
43234a1e
L
1486 PREFIX_EVEX_0F76,
1487 PREFIX_EVEX_0F78,
1488 PREFIX_EVEX_0F79,
1489 PREFIX_EVEX_0F7A,
1490 PREFIX_EVEX_0F7B,
1491 PREFIX_EVEX_0F7E,
1492 PREFIX_EVEX_0F7F,
1493 PREFIX_EVEX_0FC2,
1ba585e8
IT
1494 PREFIX_EVEX_0FC4,
1495 PREFIX_EVEX_0FC5,
43234a1e 1496 PREFIX_EVEX_0FC6,
1ba585e8 1497 PREFIX_EVEX_0FD1,
43234a1e
L
1498 PREFIX_EVEX_0FD2,
1499 PREFIX_EVEX_0FD3,
1500 PREFIX_EVEX_0FD4,
1ba585e8 1501 PREFIX_EVEX_0FD5,
43234a1e 1502 PREFIX_EVEX_0FD6,
1ba585e8
IT
1503 PREFIX_EVEX_0FD8,
1504 PREFIX_EVEX_0FD9,
1505 PREFIX_EVEX_0FDA,
43234a1e 1506 PREFIX_EVEX_0FDB,
1ba585e8
IT
1507 PREFIX_EVEX_0FDC,
1508 PREFIX_EVEX_0FDD,
1509 PREFIX_EVEX_0FDE,
43234a1e 1510 PREFIX_EVEX_0FDF,
1ba585e8
IT
1511 PREFIX_EVEX_0FE0,
1512 PREFIX_EVEX_0FE1,
43234a1e 1513 PREFIX_EVEX_0FE2,
1ba585e8
IT
1514 PREFIX_EVEX_0FE3,
1515 PREFIX_EVEX_0FE4,
1516 PREFIX_EVEX_0FE5,
43234a1e
L
1517 PREFIX_EVEX_0FE6,
1518 PREFIX_EVEX_0FE7,
1ba585e8
IT
1519 PREFIX_EVEX_0FE8,
1520 PREFIX_EVEX_0FE9,
1521 PREFIX_EVEX_0FEA,
43234a1e 1522 PREFIX_EVEX_0FEB,
1ba585e8
IT
1523 PREFIX_EVEX_0FEC,
1524 PREFIX_EVEX_0FED,
1525 PREFIX_EVEX_0FEE,
43234a1e 1526 PREFIX_EVEX_0FEF,
1ba585e8 1527 PREFIX_EVEX_0FF1,
43234a1e
L
1528 PREFIX_EVEX_0FF2,
1529 PREFIX_EVEX_0FF3,
1530 PREFIX_EVEX_0FF4,
1ba585e8
IT
1531 PREFIX_EVEX_0FF5,
1532 PREFIX_EVEX_0FF6,
1533 PREFIX_EVEX_0FF8,
1534 PREFIX_EVEX_0FF9,
43234a1e
L
1535 PREFIX_EVEX_0FFA,
1536 PREFIX_EVEX_0FFB,
1ba585e8
IT
1537 PREFIX_EVEX_0FFC,
1538 PREFIX_EVEX_0FFD,
43234a1e 1539 PREFIX_EVEX_0FFE,
1ba585e8
IT
1540 PREFIX_EVEX_0F3800,
1541 PREFIX_EVEX_0F3804,
1542 PREFIX_EVEX_0F380B,
43234a1e
L
1543 PREFIX_EVEX_0F380C,
1544 PREFIX_EVEX_0F380D,
1ba585e8 1545 PREFIX_EVEX_0F3810,
43234a1e
L
1546 PREFIX_EVEX_0F3811,
1547 PREFIX_EVEX_0F3812,
1548 PREFIX_EVEX_0F3813,
1549 PREFIX_EVEX_0F3814,
1550 PREFIX_EVEX_0F3815,
1551 PREFIX_EVEX_0F3816,
1552 PREFIX_EVEX_0F3818,
1553 PREFIX_EVEX_0F3819,
1554 PREFIX_EVEX_0F381A,
1555 PREFIX_EVEX_0F381B,
1ba585e8
IT
1556 PREFIX_EVEX_0F381C,
1557 PREFIX_EVEX_0F381D,
43234a1e
L
1558 PREFIX_EVEX_0F381E,
1559 PREFIX_EVEX_0F381F,
1ba585e8 1560 PREFIX_EVEX_0F3820,
43234a1e
L
1561 PREFIX_EVEX_0F3821,
1562 PREFIX_EVEX_0F3822,
1563 PREFIX_EVEX_0F3823,
1564 PREFIX_EVEX_0F3824,
1565 PREFIX_EVEX_0F3825,
1ba585e8 1566 PREFIX_EVEX_0F3826,
43234a1e
L
1567 PREFIX_EVEX_0F3827,
1568 PREFIX_EVEX_0F3828,
1569 PREFIX_EVEX_0F3829,
1570 PREFIX_EVEX_0F382A,
1ba585e8 1571 PREFIX_EVEX_0F382B,
43234a1e
L
1572 PREFIX_EVEX_0F382C,
1573 PREFIX_EVEX_0F382D,
1ba585e8 1574 PREFIX_EVEX_0F3830,
43234a1e
L
1575 PREFIX_EVEX_0F3831,
1576 PREFIX_EVEX_0F3832,
1577 PREFIX_EVEX_0F3833,
1578 PREFIX_EVEX_0F3834,
1579 PREFIX_EVEX_0F3835,
1580 PREFIX_EVEX_0F3836,
1581 PREFIX_EVEX_0F3837,
1ba585e8 1582 PREFIX_EVEX_0F3838,
43234a1e
L
1583 PREFIX_EVEX_0F3839,
1584 PREFIX_EVEX_0F383A,
1585 PREFIX_EVEX_0F383B,
1ba585e8 1586 PREFIX_EVEX_0F383C,
43234a1e 1587 PREFIX_EVEX_0F383D,
1ba585e8 1588 PREFIX_EVEX_0F383E,
43234a1e
L
1589 PREFIX_EVEX_0F383F,
1590 PREFIX_EVEX_0F3840,
1591 PREFIX_EVEX_0F3842,
1592 PREFIX_EVEX_0F3843,
1593 PREFIX_EVEX_0F3844,
1594 PREFIX_EVEX_0F3845,
1595 PREFIX_EVEX_0F3846,
1596 PREFIX_EVEX_0F3847,
1597 PREFIX_EVEX_0F384C,
1598 PREFIX_EVEX_0F384D,
1599 PREFIX_EVEX_0F384E,
1600 PREFIX_EVEX_0F384F,
8cfcb765
IT
1601 PREFIX_EVEX_0F3850,
1602 PREFIX_EVEX_0F3851,
47acf0bd
IT
1603 PREFIX_EVEX_0F3852,
1604 PREFIX_EVEX_0F3853,
ee6872be 1605 PREFIX_EVEX_0F3854,
620214f7 1606 PREFIX_EVEX_0F3855,
43234a1e
L
1607 PREFIX_EVEX_0F3858,
1608 PREFIX_EVEX_0F3859,
1609 PREFIX_EVEX_0F385A,
1610 PREFIX_EVEX_0F385B,
53467f57
IT
1611 PREFIX_EVEX_0F3862,
1612 PREFIX_EVEX_0F3863,
43234a1e
L
1613 PREFIX_EVEX_0F3864,
1614 PREFIX_EVEX_0F3865,
1ba585e8 1615 PREFIX_EVEX_0F3866,
9186c494 1616 PREFIX_EVEX_0F3868,
53467f57
IT
1617 PREFIX_EVEX_0F3870,
1618 PREFIX_EVEX_0F3871,
1619 PREFIX_EVEX_0F3872,
1620 PREFIX_EVEX_0F3873,
1ba585e8 1621 PREFIX_EVEX_0F3875,
43234a1e
L
1622 PREFIX_EVEX_0F3876,
1623 PREFIX_EVEX_0F3877,
1ba585e8
IT
1624 PREFIX_EVEX_0F3878,
1625 PREFIX_EVEX_0F3879,
1626 PREFIX_EVEX_0F387A,
1627 PREFIX_EVEX_0F387B,
43234a1e 1628 PREFIX_EVEX_0F387C,
1ba585e8 1629 PREFIX_EVEX_0F387D,
43234a1e
L
1630 PREFIX_EVEX_0F387E,
1631 PREFIX_EVEX_0F387F,
14f195c9 1632 PREFIX_EVEX_0F3883,
43234a1e
L
1633 PREFIX_EVEX_0F3888,
1634 PREFIX_EVEX_0F3889,
1635 PREFIX_EVEX_0F388A,
1636 PREFIX_EVEX_0F388B,
1ba585e8 1637 PREFIX_EVEX_0F388D,
ee6872be 1638 PREFIX_EVEX_0F388F,
43234a1e
L
1639 PREFIX_EVEX_0F3890,
1640 PREFIX_EVEX_0F3891,
1641 PREFIX_EVEX_0F3892,
1642 PREFIX_EVEX_0F3893,
1643 PREFIX_EVEX_0F3896,
1644 PREFIX_EVEX_0F3897,
1645 PREFIX_EVEX_0F3898,
1646 PREFIX_EVEX_0F3899,
1647 PREFIX_EVEX_0F389A,
1648 PREFIX_EVEX_0F389B,
1649 PREFIX_EVEX_0F389C,
1650 PREFIX_EVEX_0F389D,
1651 PREFIX_EVEX_0F389E,
1652 PREFIX_EVEX_0F389F,
1653 PREFIX_EVEX_0F38A0,
1654 PREFIX_EVEX_0F38A1,
1655 PREFIX_EVEX_0F38A2,
1656 PREFIX_EVEX_0F38A3,
1657 PREFIX_EVEX_0F38A6,
1658 PREFIX_EVEX_0F38A7,
1659 PREFIX_EVEX_0F38A8,
1660 PREFIX_EVEX_0F38A9,
1661 PREFIX_EVEX_0F38AA,
1662 PREFIX_EVEX_0F38AB,
1663 PREFIX_EVEX_0F38AC,
1664 PREFIX_EVEX_0F38AD,
1665 PREFIX_EVEX_0F38AE,
1666 PREFIX_EVEX_0F38AF,
2cc1b5aa
IT
1667 PREFIX_EVEX_0F38B4,
1668 PREFIX_EVEX_0F38B5,
43234a1e
L
1669 PREFIX_EVEX_0F38B6,
1670 PREFIX_EVEX_0F38B7,
1671 PREFIX_EVEX_0F38B8,
1672 PREFIX_EVEX_0F38B9,
1673 PREFIX_EVEX_0F38BA,
1674 PREFIX_EVEX_0F38BB,
1675 PREFIX_EVEX_0F38BC,
1676 PREFIX_EVEX_0F38BD,
1677 PREFIX_EVEX_0F38BE,
1678 PREFIX_EVEX_0F38BF,
1679 PREFIX_EVEX_0F38C4,
1680 PREFIX_EVEX_0F38C6_REG_1,
1681 PREFIX_EVEX_0F38C6_REG_2,
1682 PREFIX_EVEX_0F38C6_REG_5,
1683 PREFIX_EVEX_0F38C6_REG_6,
1684 PREFIX_EVEX_0F38C7_REG_1,
1685 PREFIX_EVEX_0F38C7_REG_2,
1686 PREFIX_EVEX_0F38C7_REG_5,
1687 PREFIX_EVEX_0F38C7_REG_6,
1688 PREFIX_EVEX_0F38C8,
1689 PREFIX_EVEX_0F38CA,
1690 PREFIX_EVEX_0F38CB,
1691 PREFIX_EVEX_0F38CC,
1692 PREFIX_EVEX_0F38CD,
48521003 1693 PREFIX_EVEX_0F38CF,
8dcf1fad
IT
1694 PREFIX_EVEX_0F38DC,
1695 PREFIX_EVEX_0F38DD,
1696 PREFIX_EVEX_0F38DE,
1697 PREFIX_EVEX_0F38DF,
43234a1e
L
1698
1699 PREFIX_EVEX_0F3A00,
1700 PREFIX_EVEX_0F3A01,
1701 PREFIX_EVEX_0F3A03,
1702 PREFIX_EVEX_0F3A04,
1703 PREFIX_EVEX_0F3A05,
1704 PREFIX_EVEX_0F3A08,
1705 PREFIX_EVEX_0F3A09,
1706 PREFIX_EVEX_0F3A0A,
1707 PREFIX_EVEX_0F3A0B,
1ba585e8
IT
1708 PREFIX_EVEX_0F3A0F,
1709 PREFIX_EVEX_0F3A14,
1710 PREFIX_EVEX_0F3A15,
90a915bf 1711 PREFIX_EVEX_0F3A16,
43234a1e
L
1712 PREFIX_EVEX_0F3A17,
1713 PREFIX_EVEX_0F3A18,
1714 PREFIX_EVEX_0F3A19,
1715 PREFIX_EVEX_0F3A1A,
1716 PREFIX_EVEX_0F3A1B,
1717 PREFIX_EVEX_0F3A1D,
1718 PREFIX_EVEX_0F3A1E,
1719 PREFIX_EVEX_0F3A1F,
1ba585e8 1720 PREFIX_EVEX_0F3A20,
43234a1e 1721 PREFIX_EVEX_0F3A21,
90a915bf 1722 PREFIX_EVEX_0F3A22,
43234a1e
L
1723 PREFIX_EVEX_0F3A23,
1724 PREFIX_EVEX_0F3A25,
1725 PREFIX_EVEX_0F3A26,
1726 PREFIX_EVEX_0F3A27,
1727 PREFIX_EVEX_0F3A38,
1728 PREFIX_EVEX_0F3A39,
1729 PREFIX_EVEX_0F3A3A,
1730 PREFIX_EVEX_0F3A3B,
1ba585e8
IT
1731 PREFIX_EVEX_0F3A3E,
1732 PREFIX_EVEX_0F3A3F,
1733 PREFIX_EVEX_0F3A42,
43234a1e 1734 PREFIX_EVEX_0F3A43,
ff1982d5 1735 PREFIX_EVEX_0F3A44,
90a915bf
IT
1736 PREFIX_EVEX_0F3A50,
1737 PREFIX_EVEX_0F3A51,
43234a1e 1738 PREFIX_EVEX_0F3A54,
90a915bf
IT
1739 PREFIX_EVEX_0F3A55,
1740 PREFIX_EVEX_0F3A56,
1741 PREFIX_EVEX_0F3A57,
1742 PREFIX_EVEX_0F3A66,
53467f57
IT
1743 PREFIX_EVEX_0F3A67,
1744 PREFIX_EVEX_0F3A70,
1745 PREFIX_EVEX_0F3A71,
1746 PREFIX_EVEX_0F3A72,
48521003
IT
1747 PREFIX_EVEX_0F3A73,
1748 PREFIX_EVEX_0F3ACE,
1749 PREFIX_EVEX_0F3ACF
51e7da1b 1750};
4e7d34a6 1751
51e7da1b
L
1752enum
1753{
1754 X86_64_06 = 0,
3873ba12
L
1755 X86_64_07,
1756 X86_64_0D,
1757 X86_64_16,
1758 X86_64_17,
1759 X86_64_1E,
1760 X86_64_1F,
1761 X86_64_27,
1762 X86_64_2F,
1763 X86_64_37,
1764 X86_64_3F,
1765 X86_64_60,
1766 X86_64_61,
1767 X86_64_62,
1768 X86_64_63,
1769 X86_64_6D,
1770 X86_64_6F,
d039fef3 1771 X86_64_82,
3873ba12
L
1772 X86_64_9A,
1773 X86_64_C4,
1774 X86_64_C5,
1775 X86_64_CE,
1776 X86_64_D4,
1777 X86_64_D5,
a72d2af2
L
1778 X86_64_E8,
1779 X86_64_E9,
3873ba12
L
1780 X86_64_EA,
1781 X86_64_0F01_REG_0,
1782 X86_64_0F01_REG_1,
1783 X86_64_0F01_REG_2,
1784 X86_64_0F01_REG_3
51e7da1b 1785};
4e7d34a6 1786
51e7da1b
L
1787enum
1788{
1789 THREE_BYTE_0F38 = 0,
1f334aeb 1790 THREE_BYTE_0F3A
51e7da1b 1791};
4e7d34a6 1792
f88c9eb0
SP
1793enum
1794{
5dd85c99
SP
1795 XOP_08 = 0,
1796 XOP_09,
f88c9eb0
SP
1797 XOP_0A
1798};
1799
51e7da1b
L
1800enum
1801{
1802 VEX_0F = 0,
3873ba12
L
1803 VEX_0F38,
1804 VEX_0F3A
51e7da1b 1805};
c0f3af97 1806
43234a1e
L
1807enum
1808{
1809 EVEX_0F = 0,
1810 EVEX_0F38,
1811 EVEX_0F3A
1812};
1813
51e7da1b
L
1814enum
1815{
ec6f095a 1816 VEX_LEN_0F12_P_0_M_0 = 0,
592a252b
L
1817 VEX_LEN_0F12_P_0_M_1,
1818 VEX_LEN_0F12_P_2,
1819 VEX_LEN_0F13_M_0,
1820 VEX_LEN_0F16_P_0_M_0,
1821 VEX_LEN_0F16_P_0_M_1,
1822 VEX_LEN_0F16_P_2,
1823 VEX_LEN_0F17_M_0,
1824 VEX_LEN_0F2A_P_1,
1825 VEX_LEN_0F2A_P_3,
1826 VEX_LEN_0F2C_P_1,
1827 VEX_LEN_0F2C_P_3,
1828 VEX_LEN_0F2D_P_1,
1829 VEX_LEN_0F2D_P_3,
43234a1e 1830 VEX_LEN_0F41_P_0,
1ba585e8 1831 VEX_LEN_0F41_P_2,
43234a1e 1832 VEX_LEN_0F42_P_0,
1ba585e8 1833 VEX_LEN_0F42_P_2,
43234a1e 1834 VEX_LEN_0F44_P_0,
1ba585e8 1835 VEX_LEN_0F44_P_2,
43234a1e 1836 VEX_LEN_0F45_P_0,
1ba585e8 1837 VEX_LEN_0F45_P_2,
43234a1e 1838 VEX_LEN_0F46_P_0,
1ba585e8 1839 VEX_LEN_0F46_P_2,
43234a1e 1840 VEX_LEN_0F47_P_0,
1ba585e8
IT
1841 VEX_LEN_0F47_P_2,
1842 VEX_LEN_0F4A_P_0,
1843 VEX_LEN_0F4A_P_2,
1844 VEX_LEN_0F4B_P_0,
43234a1e 1845 VEX_LEN_0F4B_P_2,
592a252b 1846 VEX_LEN_0F6E_P_2,
ec6f095a 1847 VEX_LEN_0F77_P_0,
592a252b
L
1848 VEX_LEN_0F7E_P_1,
1849 VEX_LEN_0F7E_P_2,
43234a1e 1850 VEX_LEN_0F90_P_0,
1ba585e8 1851 VEX_LEN_0F90_P_2,
43234a1e 1852 VEX_LEN_0F91_P_0,
1ba585e8 1853 VEX_LEN_0F91_P_2,
43234a1e 1854 VEX_LEN_0F92_P_0,
90a915bf 1855 VEX_LEN_0F92_P_2,
1ba585e8 1856 VEX_LEN_0F92_P_3,
43234a1e 1857 VEX_LEN_0F93_P_0,
90a915bf 1858 VEX_LEN_0F93_P_2,
1ba585e8 1859 VEX_LEN_0F93_P_3,
43234a1e 1860 VEX_LEN_0F98_P_0,
1ba585e8
IT
1861 VEX_LEN_0F98_P_2,
1862 VEX_LEN_0F99_P_0,
1863 VEX_LEN_0F99_P_2,
592a252b
L
1864 VEX_LEN_0FAE_R_2_M_0,
1865 VEX_LEN_0FAE_R_3_M_0,
592a252b
L
1866 VEX_LEN_0FC4_P_2,
1867 VEX_LEN_0FC5_P_2,
592a252b 1868 VEX_LEN_0FD6_P_2,
592a252b 1869 VEX_LEN_0FF7_P_2,
6c30d220
L
1870 VEX_LEN_0F3816_P_2,
1871 VEX_LEN_0F3819_P_2,
592a252b 1872 VEX_LEN_0F381A_P_2_M_0,
6c30d220 1873 VEX_LEN_0F3836_P_2,
592a252b 1874 VEX_LEN_0F3841_P_2,
6c30d220 1875 VEX_LEN_0F385A_P_2_M_0,
592a252b 1876 VEX_LEN_0F38DB_P_2,
f12dc422
L
1877 VEX_LEN_0F38F2_P_0,
1878 VEX_LEN_0F38F3_R_1_P_0,
1879 VEX_LEN_0F38F3_R_2_P_0,
1880 VEX_LEN_0F38F3_R_3_P_0,
6c30d220
L
1881 VEX_LEN_0F38F5_P_0,
1882 VEX_LEN_0F38F5_P_1,
1883 VEX_LEN_0F38F5_P_3,
1884 VEX_LEN_0F38F6_P_3,
f12dc422 1885 VEX_LEN_0F38F7_P_0,
6c30d220
L
1886 VEX_LEN_0F38F7_P_1,
1887 VEX_LEN_0F38F7_P_2,
1888 VEX_LEN_0F38F7_P_3,
1889 VEX_LEN_0F3A00_P_2,
1890 VEX_LEN_0F3A01_P_2,
592a252b 1891 VEX_LEN_0F3A06_P_2,
592a252b
L
1892 VEX_LEN_0F3A14_P_2,
1893 VEX_LEN_0F3A15_P_2,
1894 VEX_LEN_0F3A16_P_2,
1895 VEX_LEN_0F3A17_P_2,
1896 VEX_LEN_0F3A18_P_2,
1897 VEX_LEN_0F3A19_P_2,
1898 VEX_LEN_0F3A20_P_2,
1899 VEX_LEN_0F3A21_P_2,
1900 VEX_LEN_0F3A22_P_2,
43234a1e 1901 VEX_LEN_0F3A30_P_2,
1ba585e8 1902 VEX_LEN_0F3A31_P_2,
43234a1e 1903 VEX_LEN_0F3A32_P_2,
1ba585e8 1904 VEX_LEN_0F3A33_P_2,
6c30d220
L
1905 VEX_LEN_0F3A38_P_2,
1906 VEX_LEN_0F3A39_P_2,
592a252b 1907 VEX_LEN_0F3A41_P_2,
6c30d220 1908 VEX_LEN_0F3A46_P_2,
592a252b
L
1909 VEX_LEN_0F3A60_P_2,
1910 VEX_LEN_0F3A61_P_2,
1911 VEX_LEN_0F3A62_P_2,
1912 VEX_LEN_0F3A63_P_2,
1913 VEX_LEN_0F3A6A_P_2,
1914 VEX_LEN_0F3A6B_P_2,
1915 VEX_LEN_0F3A6E_P_2,
1916 VEX_LEN_0F3A6F_P_2,
1917 VEX_LEN_0F3A7A_P_2,
1918 VEX_LEN_0F3A7B_P_2,
1919 VEX_LEN_0F3A7E_P_2,
1920 VEX_LEN_0F3A7F_P_2,
1921 VEX_LEN_0F3ADF_P_2,
6c30d220 1922 VEX_LEN_0F3AF0_P_3,
ff688e1f
L
1923 VEX_LEN_0FXOP_08_CC,
1924 VEX_LEN_0FXOP_08_CD,
1925 VEX_LEN_0FXOP_08_CE,
1926 VEX_LEN_0FXOP_08_CF,
1927 VEX_LEN_0FXOP_08_EC,
1928 VEX_LEN_0FXOP_08_ED,
1929 VEX_LEN_0FXOP_08_EE,
1930 VEX_LEN_0FXOP_08_EF,
592a252b
L
1931 VEX_LEN_0FXOP_09_80,
1932 VEX_LEN_0FXOP_09_81
51e7da1b 1933};
c0f3af97 1934
04e2a182
L
1935enum
1936{
1937 EVEX_LEN_0F6E_P_2 = 0,
1938 EVEX_LEN_0F7E_P_1,
1939 EVEX_LEN_0F7E_P_2,
12efd68d
L
1940 EVEX_LEN_0FD6_P_2,
1941 EVEX_LEN_0F3A18_P_2_W_0,
1942 EVEX_LEN_0F3A18_P_2_W_1,
1943 EVEX_LEN_0F3A19_P_2_W_0,
1944 EVEX_LEN_0F3A19_P_2_W_1,
1945 EVEX_LEN_0F3A1A_P_2_W_0,
1946 EVEX_LEN_0F3A1A_P_2_W_1,
1947 EVEX_LEN_0F3A1B_P_2_W_0,
1948 EVEX_LEN_0F3A1B_P_2_W_1
04e2a182
L
1949};
1950
9e30b8e0
L
1951enum
1952{
ec6f095a 1953 VEX_W_0F41_P_0_LEN_1 = 0,
1ba585e8 1954 VEX_W_0F41_P_2_LEN_1,
43234a1e 1955 VEX_W_0F42_P_0_LEN_1,
1ba585e8 1956 VEX_W_0F42_P_2_LEN_1,
43234a1e 1957 VEX_W_0F44_P_0_LEN_0,
1ba585e8 1958 VEX_W_0F44_P_2_LEN_0,
43234a1e 1959 VEX_W_0F45_P_0_LEN_1,
1ba585e8 1960 VEX_W_0F45_P_2_LEN_1,
43234a1e 1961 VEX_W_0F46_P_0_LEN_1,
1ba585e8 1962 VEX_W_0F46_P_2_LEN_1,
43234a1e 1963 VEX_W_0F47_P_0_LEN_1,
1ba585e8
IT
1964 VEX_W_0F47_P_2_LEN_1,
1965 VEX_W_0F4A_P_0_LEN_1,
1966 VEX_W_0F4A_P_2_LEN_1,
1967 VEX_W_0F4B_P_0_LEN_1,
43234a1e 1968 VEX_W_0F4B_P_2_LEN_1,
43234a1e 1969 VEX_W_0F90_P_0_LEN_0,
1ba585e8 1970 VEX_W_0F90_P_2_LEN_0,
43234a1e 1971 VEX_W_0F91_P_0_LEN_0,
1ba585e8 1972 VEX_W_0F91_P_2_LEN_0,
43234a1e 1973 VEX_W_0F92_P_0_LEN_0,
90a915bf 1974 VEX_W_0F92_P_2_LEN_0,
43234a1e 1975 VEX_W_0F93_P_0_LEN_0,
90a915bf 1976 VEX_W_0F93_P_2_LEN_0,
43234a1e 1977 VEX_W_0F98_P_0_LEN_0,
1ba585e8
IT
1978 VEX_W_0F98_P_2_LEN_0,
1979 VEX_W_0F99_P_0_LEN_0,
1980 VEX_W_0F99_P_2_LEN_0,
592a252b
L
1981 VEX_W_0F380C_P_2,
1982 VEX_W_0F380D_P_2,
1983 VEX_W_0F380E_P_2,
1984 VEX_W_0F380F_P_2,
6c30d220 1985 VEX_W_0F3816_P_2,
6c30d220
L
1986 VEX_W_0F3818_P_2,
1987 VEX_W_0F3819_P_2,
592a252b 1988 VEX_W_0F381A_P_2_M_0,
592a252b
L
1989 VEX_W_0F382C_P_2_M_0,
1990 VEX_W_0F382D_P_2_M_0,
1991 VEX_W_0F382E_P_2_M_0,
1992 VEX_W_0F382F_P_2_M_0,
6c30d220 1993 VEX_W_0F3836_P_2,
6c30d220
L
1994 VEX_W_0F3846_P_2,
1995 VEX_W_0F3858_P_2,
1996 VEX_W_0F3859_P_2,
1997 VEX_W_0F385A_P_2_M_0,
1998 VEX_W_0F3878_P_2,
1999 VEX_W_0F3879_P_2,
48521003 2000 VEX_W_0F38CF_P_2,
6c30d220
L
2001 VEX_W_0F3A00_P_2,
2002 VEX_W_0F3A01_P_2,
2003 VEX_W_0F3A02_P_2,
592a252b
L
2004 VEX_W_0F3A04_P_2,
2005 VEX_W_0F3A05_P_2,
2006 VEX_W_0F3A06_P_2,
592a252b
L
2007 VEX_W_0F3A18_P_2,
2008 VEX_W_0F3A19_P_2,
43234a1e 2009 VEX_W_0F3A30_P_2_LEN_0,
1ba585e8 2010 VEX_W_0F3A31_P_2_LEN_0,
43234a1e 2011 VEX_W_0F3A32_P_2_LEN_0,
1ba585e8 2012 VEX_W_0F3A33_P_2_LEN_0,
6c30d220
L
2013 VEX_W_0F3A38_P_2,
2014 VEX_W_0F3A39_P_2,
6c30d220 2015 VEX_W_0F3A46_P_2,
592a252b
L
2016 VEX_W_0F3A48_P_2,
2017 VEX_W_0F3A49_P_2,
2018 VEX_W_0F3A4A_P_2,
2019 VEX_W_0F3A4B_P_2,
2020 VEX_W_0F3A4C_P_2,
48521003
IT
2021 VEX_W_0F3ACE_P_2,
2022 VEX_W_0F3ACF_P_2,
43234a1e
L
2023
2024 EVEX_W_0F10_P_0,
2025 EVEX_W_0F10_P_1_M_0,
2026 EVEX_W_0F10_P_1_M_1,
2027 EVEX_W_0F10_P_2,
2028 EVEX_W_0F10_P_3_M_0,
2029 EVEX_W_0F10_P_3_M_1,
2030 EVEX_W_0F11_P_0,
2031 EVEX_W_0F11_P_1_M_0,
2032 EVEX_W_0F11_P_1_M_1,
2033 EVEX_W_0F11_P_2,
2034 EVEX_W_0F11_P_3_M_0,
2035 EVEX_W_0F11_P_3_M_1,
2036 EVEX_W_0F12_P_0_M_0,
2037 EVEX_W_0F12_P_0_M_1,
2038 EVEX_W_0F12_P_1,
2039 EVEX_W_0F12_P_2,
2040 EVEX_W_0F12_P_3,
2041 EVEX_W_0F13_P_0,
2042 EVEX_W_0F13_P_2,
2043 EVEX_W_0F14_P_0,
2044 EVEX_W_0F14_P_2,
2045 EVEX_W_0F15_P_0,
2046 EVEX_W_0F15_P_2,
2047 EVEX_W_0F16_P_0_M_0,
2048 EVEX_W_0F16_P_0_M_1,
2049 EVEX_W_0F16_P_1,
2050 EVEX_W_0F16_P_2,
2051 EVEX_W_0F17_P_0,
2052 EVEX_W_0F17_P_2,
2053 EVEX_W_0F28_P_0,
2054 EVEX_W_0F28_P_2,
2055 EVEX_W_0F29_P_0,
2056 EVEX_W_0F29_P_2,
2057 EVEX_W_0F2A_P_1,
2058 EVEX_W_0F2A_P_3,
2059 EVEX_W_0F2B_P_0,
2060 EVEX_W_0F2B_P_2,
2061 EVEX_W_0F2E_P_0,
2062 EVEX_W_0F2E_P_2,
2063 EVEX_W_0F2F_P_0,
2064 EVEX_W_0F2F_P_2,
2065 EVEX_W_0F51_P_0,
2066 EVEX_W_0F51_P_1,
2067 EVEX_W_0F51_P_2,
2068 EVEX_W_0F51_P_3,
90a915bf
IT
2069 EVEX_W_0F54_P_0,
2070 EVEX_W_0F54_P_2,
2071 EVEX_W_0F55_P_0,
2072 EVEX_W_0F55_P_2,
2073 EVEX_W_0F56_P_0,
2074 EVEX_W_0F56_P_2,
2075 EVEX_W_0F57_P_0,
2076 EVEX_W_0F57_P_2,
43234a1e
L
2077 EVEX_W_0F58_P_0,
2078 EVEX_W_0F58_P_1,
2079 EVEX_W_0F58_P_2,
2080 EVEX_W_0F58_P_3,
2081 EVEX_W_0F59_P_0,
2082 EVEX_W_0F59_P_1,
2083 EVEX_W_0F59_P_2,
2084 EVEX_W_0F59_P_3,
2085 EVEX_W_0F5A_P_0,
2086 EVEX_W_0F5A_P_1,
2087 EVEX_W_0F5A_P_2,
2088 EVEX_W_0F5A_P_3,
2089 EVEX_W_0F5B_P_0,
2090 EVEX_W_0F5B_P_1,
2091 EVEX_W_0F5B_P_2,
2092 EVEX_W_0F5C_P_0,
2093 EVEX_W_0F5C_P_1,
2094 EVEX_W_0F5C_P_2,
2095 EVEX_W_0F5C_P_3,
2096 EVEX_W_0F5D_P_0,
2097 EVEX_W_0F5D_P_1,
2098 EVEX_W_0F5D_P_2,
2099 EVEX_W_0F5D_P_3,
2100 EVEX_W_0F5E_P_0,
2101 EVEX_W_0F5E_P_1,
2102 EVEX_W_0F5E_P_2,
2103 EVEX_W_0F5E_P_3,
2104 EVEX_W_0F5F_P_0,
2105 EVEX_W_0F5F_P_1,
2106 EVEX_W_0F5F_P_2,
2107 EVEX_W_0F5F_P_3,
2108 EVEX_W_0F62_P_2,
2109 EVEX_W_0F66_P_2,
2110 EVEX_W_0F6A_P_2,
1ba585e8 2111 EVEX_W_0F6B_P_2,
43234a1e
L
2112 EVEX_W_0F6C_P_2,
2113 EVEX_W_0F6D_P_2,
43234a1e
L
2114 EVEX_W_0F6F_P_1,
2115 EVEX_W_0F6F_P_2,
1ba585e8 2116 EVEX_W_0F6F_P_3,
43234a1e
L
2117 EVEX_W_0F70_P_2,
2118 EVEX_W_0F72_R_2_P_2,
2119 EVEX_W_0F72_R_6_P_2,
2120 EVEX_W_0F73_R_2_P_2,
2121 EVEX_W_0F73_R_6_P_2,
2122 EVEX_W_0F76_P_2,
2123 EVEX_W_0F78_P_0,
90a915bf 2124 EVEX_W_0F78_P_2,
43234a1e 2125 EVEX_W_0F79_P_0,
90a915bf 2126 EVEX_W_0F79_P_2,
43234a1e 2127 EVEX_W_0F7A_P_1,
90a915bf 2128 EVEX_W_0F7A_P_2,
43234a1e
L
2129 EVEX_W_0F7A_P_3,
2130 EVEX_W_0F7B_P_1,
90a915bf 2131 EVEX_W_0F7B_P_2,
43234a1e
L
2132 EVEX_W_0F7B_P_3,
2133 EVEX_W_0F7E_P_1,
43234a1e
L
2134 EVEX_W_0F7F_P_1,
2135 EVEX_W_0F7F_P_2,
1ba585e8 2136 EVEX_W_0F7F_P_3,
43234a1e
L
2137 EVEX_W_0FC2_P_0,
2138 EVEX_W_0FC2_P_1,
2139 EVEX_W_0FC2_P_2,
2140 EVEX_W_0FC2_P_3,
2141 EVEX_W_0FC6_P_0,
2142 EVEX_W_0FC6_P_2,
2143 EVEX_W_0FD2_P_2,
2144 EVEX_W_0FD3_P_2,
2145 EVEX_W_0FD4_P_2,
2146 EVEX_W_0FD6_P_2,
2147 EVEX_W_0FE6_P_1,
2148 EVEX_W_0FE6_P_2,
2149 EVEX_W_0FE6_P_3,
2150 EVEX_W_0FE7_P_2,
2151 EVEX_W_0FF2_P_2,
2152 EVEX_W_0FF3_P_2,
2153 EVEX_W_0FF4_P_2,
2154 EVEX_W_0FFA_P_2,
2155 EVEX_W_0FFB_P_2,
2156 EVEX_W_0FFE_P_2,
2157 EVEX_W_0F380C_P_2,
2158 EVEX_W_0F380D_P_2,
1ba585e8
IT
2159 EVEX_W_0F3810_P_1,
2160 EVEX_W_0F3810_P_2,
43234a1e 2161 EVEX_W_0F3811_P_1,
1ba585e8 2162 EVEX_W_0F3811_P_2,
43234a1e 2163 EVEX_W_0F3812_P_1,
1ba585e8 2164 EVEX_W_0F3812_P_2,
43234a1e
L
2165 EVEX_W_0F3813_P_1,
2166 EVEX_W_0F3813_P_2,
2167 EVEX_W_0F3814_P_1,
2168 EVEX_W_0F3815_P_1,
2169 EVEX_W_0F3818_P_2,
2170 EVEX_W_0F3819_P_2,
2171 EVEX_W_0F381A_P_2,
2172 EVEX_W_0F381B_P_2,
2173 EVEX_W_0F381E_P_2,
2174 EVEX_W_0F381F_P_2,
1ba585e8 2175 EVEX_W_0F3820_P_1,
43234a1e
L
2176 EVEX_W_0F3821_P_1,
2177 EVEX_W_0F3822_P_1,
2178 EVEX_W_0F3823_P_1,
2179 EVEX_W_0F3824_P_1,
2180 EVEX_W_0F3825_P_1,
2181 EVEX_W_0F3825_P_2,
1ba585e8
IT
2182 EVEX_W_0F3826_P_1,
2183 EVEX_W_0F3826_P_2,
2184 EVEX_W_0F3828_P_1,
43234a1e 2185 EVEX_W_0F3828_P_2,
1ba585e8 2186 EVEX_W_0F3829_P_1,
43234a1e
L
2187 EVEX_W_0F3829_P_2,
2188 EVEX_W_0F382A_P_1,
2189 EVEX_W_0F382A_P_2,
1ba585e8
IT
2190 EVEX_W_0F382B_P_2,
2191 EVEX_W_0F3830_P_1,
43234a1e
L
2192 EVEX_W_0F3831_P_1,
2193 EVEX_W_0F3832_P_1,
2194 EVEX_W_0F3833_P_1,
2195 EVEX_W_0F3834_P_1,
2196 EVEX_W_0F3835_P_1,
2197 EVEX_W_0F3835_P_2,
2198 EVEX_W_0F3837_P_2,
90a915bf
IT
2199 EVEX_W_0F3838_P_1,
2200 EVEX_W_0F3839_P_1,
43234a1e
L
2201 EVEX_W_0F383A_P_1,
2202 EVEX_W_0F3840_P_2,
d6aab7a1 2203 EVEX_W_0F3852_P_1,
ee6872be 2204 EVEX_W_0F3854_P_2,
620214f7 2205 EVEX_W_0F3855_P_2,
43234a1e
L
2206 EVEX_W_0F3858_P_2,
2207 EVEX_W_0F3859_P_2,
2208 EVEX_W_0F385A_P_2,
2209 EVEX_W_0F385B_P_2,
53467f57
IT
2210 EVEX_W_0F3862_P_2,
2211 EVEX_W_0F3863_P_2,
1ba585e8 2212 EVEX_W_0F3866_P_2,
9186c494 2213 EVEX_W_0F3868_P_3,
53467f57
IT
2214 EVEX_W_0F3870_P_2,
2215 EVEX_W_0F3871_P_2,
d6aab7a1 2216 EVEX_W_0F3872_P_1,
53467f57 2217 EVEX_W_0F3872_P_2,
d6aab7a1 2218 EVEX_W_0F3872_P_3,
53467f57 2219 EVEX_W_0F3873_P_2,
1ba585e8
IT
2220 EVEX_W_0F3875_P_2,
2221 EVEX_W_0F3878_P_2,
2222 EVEX_W_0F3879_P_2,
2223 EVEX_W_0F387A_P_2,
2224 EVEX_W_0F387B_P_2,
2225 EVEX_W_0F387D_P_2,
14f195c9 2226 EVEX_W_0F3883_P_2,
1ba585e8 2227 EVEX_W_0F388D_P_2,
43234a1e
L
2228 EVEX_W_0F3891_P_2,
2229 EVEX_W_0F3893_P_2,
2230 EVEX_W_0F38A1_P_2,
2231 EVEX_W_0F38A3_P_2,
2232 EVEX_W_0F38C7_R_1_P_2,
2233 EVEX_W_0F38C7_R_2_P_2,
2234 EVEX_W_0F38C7_R_5_P_2,
2235 EVEX_W_0F38C7_R_6_P_2,
2236
2237 EVEX_W_0F3A00_P_2,
2238 EVEX_W_0F3A01_P_2,
2239 EVEX_W_0F3A04_P_2,
2240 EVEX_W_0F3A05_P_2,
2241 EVEX_W_0F3A08_P_2,
2242 EVEX_W_0F3A09_P_2,
2243 EVEX_W_0F3A0A_P_2,
2244 EVEX_W_0F3A0B_P_2,
2245 EVEX_W_0F3A18_P_2,
2246 EVEX_W_0F3A19_P_2,
2247 EVEX_W_0F3A1A_P_2,
2248 EVEX_W_0F3A1B_P_2,
2249 EVEX_W_0F3A1D_P_2,
2250 EVEX_W_0F3A21_P_2,
2251 EVEX_W_0F3A23_P_2,
2252 EVEX_W_0F3A38_P_2,
2253 EVEX_W_0F3A39_P_2,
2254 EVEX_W_0F3A3A_P_2,
2255 EVEX_W_0F3A3B_P_2,
1ba585e8
IT
2256 EVEX_W_0F3A3E_P_2,
2257 EVEX_W_0F3A3F_P_2,
2258 EVEX_W_0F3A42_P_2,
90a915bf
IT
2259 EVEX_W_0F3A43_P_2,
2260 EVEX_W_0F3A50_P_2,
2261 EVEX_W_0F3A51_P_2,
2262 EVEX_W_0F3A56_P_2,
2263 EVEX_W_0F3A57_P_2,
2264 EVEX_W_0F3A66_P_2,
53467f57
IT
2265 EVEX_W_0F3A67_P_2,
2266 EVEX_W_0F3A70_P_2,
2267 EVEX_W_0F3A71_P_2,
2268 EVEX_W_0F3A72_P_2,
48521003
IT
2269 EVEX_W_0F3A73_P_2,
2270 EVEX_W_0F3ACE_P_2,
2271 EVEX_W_0F3ACF_P_2
9e30b8e0
L
2272};
2273
26ca5450 2274typedef void (*op_rtn) (int bytemode, int sizeflag);
252b5132
RH
2275
2276struct dis386 {
2da11e11 2277 const char *name;
ce518a5f
L
2278 struct
2279 {
2280 op_rtn rtn;
2281 int bytemode;
2282 } op[MAX_OPERANDS];
bf890a93 2283 unsigned int prefix_requirement;
252b5132
RH
2284};
2285
2286/* Upper case letters in the instruction names here are macros.
2287 'A' => print 'b' if no register operands or suffix_always is true
2288 'B' => print 'b' if suffix_always is true
9306ca4a 2289 'C' => print 's' or 'l' ('w' or 'd' in Intel mode) depending on operand
98b528ac 2290 size prefix
ed7841b3 2291 'D' => print 'w' if no register operands or 'w', 'l' or 'q', if
98b528ac 2292 suffix_always is true
252b5132 2293 'E' => print 'e' if 32-bit form of jcxz
3ffd33cf 2294 'F' => print 'w' or 'l' depending on address size prefix (loop insns)
52fd6d94 2295 'G' => print 'w' or 'l' depending on operand size prefix (i/o insns)
5dd0794d 2296 'H' => print ",pt" or ",pn" branch hint
9306ca4a 2297 'I' => honor following macro letter even in Intel mode (implemented only
98b528ac 2298 for some of the macro letters)
9306ca4a 2299 'J' => print 'l'
42903f7f 2300 'K' => print 'd' or 'q' if rex prefix is present.
252b5132 2301 'L' => print 'l' if suffix_always is true
9d141669 2302 'M' => print 'r' if intel_mnemonic is false.
252b5132 2303 'N' => print 'n' if instruction has no wait "prefix"
a35ca55a 2304 'O' => print 'd' or 'o' (or 'q' in Intel mode)
52b15da3 2305 'P' => print 'w', 'l' or 'q' if instruction has an operand size prefix,
98b528ac
L
2306 or suffix_always is true. print 'q' if rex prefix is present.
2307 'Q' => print 'w', 'l' or 'q' for memory operand or suffix_always
2308 is true
a35ca55a 2309 'R' => print 'w', 'l' or 'q' ('d' for 'l' and 'e' in Intel mode)
52b15da3 2310 'S' => print 'w', 'l' or 'q' if suffix_always is true
a72d2af2
L
2311 'T' => print 'q' in 64bit mode if instruction has no operand size
2312 prefix and behave as 'P' otherwise
2313 'U' => print 'q' in 64bit mode if instruction has no operand size
2314 prefix and behave as 'Q' otherwise
2315 'V' => print 'q' in 64bit mode if instruction has no operand size
2316 prefix and behave as 'S' otherwise
a35ca55a 2317 'W' => print 'b', 'w' or 'l' ('d' in Intel mode)
9306ca4a 2318 'X' => print 's', 'd' depending on data16 prefix (for XMM)
9646c87b 2319 'Y' unused.
6dd5059a 2320 'Z' => print 'q' in 64bit mode and behave as 'L' otherwise
9d141669 2321 '!' => change condition from true to false or from false to true.
98b528ac 2322 '%' => add 1 upper case letter to the macro.
a72d2af2
L
2323 '^' => print 'w' or 'l' depending on operand size prefix or
2324 suffix_always is true (lcall/ljmp).
5db04b09
L
2325 '@' => print 'q' for Intel64 ISA, 'w' or 'q' for AMD64 ISA depending
2326 on operand size prefix.
07f5af7d
L
2327 '&' => print 'q' in 64bit mode for Intel64 ISA or if instruction
2328 has no operand size prefix for AMD64 ISA, behave as 'P'
2329 otherwise
98b528ac
L
2330
2331 2 upper case letter macros:
04d824a4
JB
2332 "XY" => print 'x' or 'y' if suffix_always is true or no register
2333 operands and no broadcast.
2334 "XZ" => print 'x', 'y', or 'z' if suffix_always is true or no
2335 register operands and no broadcast.
4b06377f
L
2336 "XW" => print 's', 'd' depending on the VEX.W bit (for FMA)
2337 "LQ" => print 'l' ('d' in Intel mode) or 'q' for memory operand
98b528ac 2338 or suffix_always is true
4b06377f
L
2339 "LB" => print "abs" in 64bit mode and behave as 'B' otherwise
2340 "LS" => print "abs" in 64bit mode and behave as 'S' otherwise
2341 "LV" => print "abs" for 64bit operand and behave as 'S' otherwise
6c30d220 2342 "LW" => print 'd', 'q' depending on the VEX.W bit
4b4c407a
L
2343 "LP" => print 'w' or 'l' ('d' in Intel mode) if instruction has
2344 an operand size prefix, or suffix_always is true. print
2345 'q' if rex prefix is present.
52b15da3 2346
6439fc28
AM
2347 Many of the above letters print nothing in Intel mode. See "putop"
2348 for the details.
52b15da3 2349
6439fc28 2350 Braces '{' and '}', and vertical bars '|', indicate alternative
7c52e0e8 2351 mnemonic strings for AT&T and Intel. */
252b5132 2352
6439fc28 2353static const struct dis386 dis386[] = {
252b5132 2354 /* 00 */
bf890a93
IT
2355 { "addB", { Ebh1, Gb }, 0 },
2356 { "addS", { Evh1, Gv }, 0 },
2357 { "addB", { Gb, EbS }, 0 },
2358 { "addS", { Gv, EvS }, 0 },
2359 { "addB", { AL, Ib }, 0 },
2360 { "addS", { eAX, Iv }, 0 },
4e7d34a6
L
2361 { X86_64_TABLE (X86_64_06) },
2362 { X86_64_TABLE (X86_64_07) },
252b5132 2363 /* 08 */
bf890a93
IT
2364 { "orB", { Ebh1, Gb }, 0 },
2365 { "orS", { Evh1, Gv }, 0 },
2366 { "orB", { Gb, EbS }, 0 },
2367 { "orS", { Gv, EvS }, 0 },
2368 { "orB", { AL, Ib }, 0 },
2369 { "orS", { eAX, Iv }, 0 },
4e7d34a6 2370 { X86_64_TABLE (X86_64_0D) },
592d1631 2371 { Bad_Opcode }, /* 0x0f extended opcode escape */
252b5132 2372 /* 10 */
bf890a93
IT
2373 { "adcB", { Ebh1, Gb }, 0 },
2374 { "adcS", { Evh1, Gv }, 0 },
2375 { "adcB", { Gb, EbS }, 0 },
2376 { "adcS", { Gv, EvS }, 0 },
2377 { "adcB", { AL, Ib }, 0 },
2378 { "adcS", { eAX, Iv }, 0 },
4e7d34a6
L
2379 { X86_64_TABLE (X86_64_16) },
2380 { X86_64_TABLE (X86_64_17) },
252b5132 2381 /* 18 */
bf890a93
IT
2382 { "sbbB", { Ebh1, Gb }, 0 },
2383 { "sbbS", { Evh1, Gv }, 0 },
2384 { "sbbB", { Gb, EbS }, 0 },
2385 { "sbbS", { Gv, EvS }, 0 },
2386 { "sbbB", { AL, Ib }, 0 },
2387 { "sbbS", { eAX, Iv }, 0 },
4e7d34a6
L
2388 { X86_64_TABLE (X86_64_1E) },
2389 { X86_64_TABLE (X86_64_1F) },
252b5132 2390 /* 20 */
bf890a93
IT
2391 { "andB", { Ebh1, Gb }, 0 },
2392 { "andS", { Evh1, Gv }, 0 },
2393 { "andB", { Gb, EbS }, 0 },
2394 { "andS", { Gv, EvS }, 0 },
2395 { "andB", { AL, Ib }, 0 },
2396 { "andS", { eAX, Iv }, 0 },
592d1631 2397 { Bad_Opcode }, /* SEG ES prefix */
4e7d34a6 2398 { X86_64_TABLE (X86_64_27) },
252b5132 2399 /* 28 */
bf890a93
IT
2400 { "subB", { Ebh1, Gb }, 0 },
2401 { "subS", { Evh1, Gv }, 0 },
2402 { "subB", { Gb, EbS }, 0 },
2403 { "subS", { Gv, EvS }, 0 },
2404 { "subB", { AL, Ib }, 0 },
2405 { "subS", { eAX, Iv }, 0 },
592d1631 2406 { Bad_Opcode }, /* SEG CS prefix */
4e7d34a6 2407 { X86_64_TABLE (X86_64_2F) },
252b5132 2408 /* 30 */
bf890a93
IT
2409 { "xorB", { Ebh1, Gb }, 0 },
2410 { "xorS", { Evh1, Gv }, 0 },
2411 { "xorB", { Gb, EbS }, 0 },
2412 { "xorS", { Gv, EvS }, 0 },
2413 { "xorB", { AL, Ib }, 0 },
2414 { "xorS", { eAX, Iv }, 0 },
592d1631 2415 { Bad_Opcode }, /* SEG SS prefix */
4e7d34a6 2416 { X86_64_TABLE (X86_64_37) },
252b5132 2417 /* 38 */
bf890a93
IT
2418 { "cmpB", { Eb, Gb }, 0 },
2419 { "cmpS", { Ev, Gv }, 0 },
2420 { "cmpB", { Gb, EbS }, 0 },
2421 { "cmpS", { Gv, EvS }, 0 },
2422 { "cmpB", { AL, Ib }, 0 },
2423 { "cmpS", { eAX, Iv }, 0 },
592d1631 2424 { Bad_Opcode }, /* SEG DS prefix */
4e7d34a6 2425 { X86_64_TABLE (X86_64_3F) },
252b5132 2426 /* 40 */
bf890a93
IT
2427 { "inc{S|}", { RMeAX }, 0 },
2428 { "inc{S|}", { RMeCX }, 0 },
2429 { "inc{S|}", { RMeDX }, 0 },
2430 { "inc{S|}", { RMeBX }, 0 },
2431 { "inc{S|}", { RMeSP }, 0 },
2432 { "inc{S|}", { RMeBP }, 0 },
2433 { "inc{S|}", { RMeSI }, 0 },
2434 { "inc{S|}", { RMeDI }, 0 },
252b5132 2435 /* 48 */
bf890a93
IT
2436 { "dec{S|}", { RMeAX }, 0 },
2437 { "dec{S|}", { RMeCX }, 0 },
2438 { "dec{S|}", { RMeDX }, 0 },
2439 { "dec{S|}", { RMeBX }, 0 },
2440 { "dec{S|}", { RMeSP }, 0 },
2441 { "dec{S|}", { RMeBP }, 0 },
2442 { "dec{S|}", { RMeSI }, 0 },
2443 { "dec{S|}", { RMeDI }, 0 },
252b5132 2444 /* 50 */
bf890a93
IT
2445 { "pushV", { RMrAX }, 0 },
2446 { "pushV", { RMrCX }, 0 },
2447 { "pushV", { RMrDX }, 0 },
2448 { "pushV", { RMrBX }, 0 },
2449 { "pushV", { RMrSP }, 0 },
2450 { "pushV", { RMrBP }, 0 },
2451 { "pushV", { RMrSI }, 0 },
2452 { "pushV", { RMrDI }, 0 },
252b5132 2453 /* 58 */
bf890a93
IT
2454 { "popV", { RMrAX }, 0 },
2455 { "popV", { RMrCX }, 0 },
2456 { "popV", { RMrDX }, 0 },
2457 { "popV", { RMrBX }, 0 },
2458 { "popV", { RMrSP }, 0 },
2459 { "popV", { RMrBP }, 0 },
2460 { "popV", { RMrSI }, 0 },
2461 { "popV", { RMrDI }, 0 },
252b5132 2462 /* 60 */
4e7d34a6
L
2463 { X86_64_TABLE (X86_64_60) },
2464 { X86_64_TABLE (X86_64_61) },
2465 { X86_64_TABLE (X86_64_62) },
2466 { X86_64_TABLE (X86_64_63) },
592d1631
L
2467 { Bad_Opcode }, /* seg fs */
2468 { Bad_Opcode }, /* seg gs */
2469 { Bad_Opcode }, /* op size prefix */
2470 { Bad_Opcode }, /* adr size prefix */
252b5132 2471 /* 68 */
bf890a93
IT
2472 { "pushT", { sIv }, 0 },
2473 { "imulS", { Gv, Ev, Iv }, 0 },
2474 { "pushT", { sIbT }, 0 },
2475 { "imulS", { Gv, Ev, sIb }, 0 },
2476 { "ins{b|}", { Ybr, indirDX }, 0 },
4e7d34a6 2477 { X86_64_TABLE (X86_64_6D) },
bf890a93 2478 { "outs{b|}", { indirDXr, Xb }, 0 },
4e7d34a6 2479 { X86_64_TABLE (X86_64_6F) },
252b5132 2480 /* 70 */
bf890a93
IT
2481 { "joH", { Jb, BND, cond_jump_flag }, 0 },
2482 { "jnoH", { Jb, BND, cond_jump_flag }, 0 },
2483 { "jbH", { Jb, BND, cond_jump_flag }, 0 },
2484 { "jaeH", { Jb, BND, cond_jump_flag }, 0 },
2485 { "jeH", { Jb, BND, cond_jump_flag }, 0 },
2486 { "jneH", { Jb, BND, cond_jump_flag }, 0 },
2487 { "jbeH", { Jb, BND, cond_jump_flag }, 0 },
2488 { "jaH", { Jb, BND, cond_jump_flag }, 0 },
252b5132 2489 /* 78 */
bf890a93
IT
2490 { "jsH", { Jb, BND, cond_jump_flag }, 0 },
2491 { "jnsH", { Jb, BND, cond_jump_flag }, 0 },
2492 { "jpH", { Jb, BND, cond_jump_flag }, 0 },
2493 { "jnpH", { Jb, BND, cond_jump_flag }, 0 },
2494 { "jlH", { Jb, BND, cond_jump_flag }, 0 },
2495 { "jgeH", { Jb, BND, cond_jump_flag }, 0 },
2496 { "jleH", { Jb, BND, cond_jump_flag }, 0 },
2497 { "jgH", { Jb, BND, cond_jump_flag }, 0 },
252b5132 2498 /* 80 */
1ceb70f8
L
2499 { REG_TABLE (REG_80) },
2500 { REG_TABLE (REG_81) },
d039fef3 2501 { X86_64_TABLE (X86_64_82) },
7148c369 2502 { REG_TABLE (REG_83) },
bf890a93
IT
2503 { "testB", { Eb, Gb }, 0 },
2504 { "testS", { Ev, Gv }, 0 },
2505 { "xchgB", { Ebh2, Gb }, 0 },
2506 { "xchgS", { Evh2, Gv }, 0 },
252b5132 2507 /* 88 */
bf890a93
IT
2508 { "movB", { Ebh3, Gb }, 0 },
2509 { "movS", { Evh3, Gv }, 0 },
2510 { "movB", { Gb, EbS }, 0 },
2511 { "movS", { Gv, EvS }, 0 },
2512 { "movD", { Sv, Sw }, 0 },
1ceb70f8 2513 { MOD_TABLE (MOD_8D) },
bf890a93 2514 { "movD", { Sw, Sv }, 0 },
1ceb70f8 2515 { REG_TABLE (REG_8F) },
252b5132 2516 /* 90 */
1ceb70f8 2517 { PREFIX_TABLE (PREFIX_90) },
bf890a93
IT
2518 { "xchgS", { RMeCX, eAX }, 0 },
2519 { "xchgS", { RMeDX, eAX }, 0 },
2520 { "xchgS", { RMeBX, eAX }, 0 },
2521 { "xchgS", { RMeSP, eAX }, 0 },
2522 { "xchgS", { RMeBP, eAX }, 0 },
2523 { "xchgS", { RMeSI, eAX }, 0 },
2524 { "xchgS", { RMeDI, eAX }, 0 },
252b5132 2525 /* 98 */
bf890a93
IT
2526 { "cW{t|}R", { XX }, 0 },
2527 { "cR{t|}O", { XX }, 0 },
4e7d34a6 2528 { X86_64_TABLE (X86_64_9A) },
592d1631 2529 { Bad_Opcode }, /* fwait */
bf890a93
IT
2530 { "pushfT", { XX }, 0 },
2531 { "popfT", { XX }, 0 },
2532 { "sahf", { XX }, 0 },
2533 { "lahf", { XX }, 0 },
252b5132 2534 /* a0 */
bf890a93
IT
2535 { "mov%LB", { AL, Ob }, 0 },
2536 { "mov%LS", { eAX, Ov }, 0 },
2537 { "mov%LB", { Ob, AL }, 0 },
2538 { "mov%LS", { Ov, eAX }, 0 },
2539 { "movs{b|}", { Ybr, Xb }, 0 },
2540 { "movs{R|}", { Yvr, Xv }, 0 },
2541 { "cmps{b|}", { Xb, Yb }, 0 },
2542 { "cmps{R|}", { Xv, Yv }, 0 },
252b5132 2543 /* a8 */
bf890a93
IT
2544 { "testB", { AL, Ib }, 0 },
2545 { "testS", { eAX, Iv }, 0 },
2546 { "stosB", { Ybr, AL }, 0 },
2547 { "stosS", { Yvr, eAX }, 0 },
2548 { "lodsB", { ALr, Xb }, 0 },
2549 { "lodsS", { eAXr, Xv }, 0 },
2550 { "scasB", { AL, Yb }, 0 },
2551 { "scasS", { eAX, Yv }, 0 },
252b5132 2552 /* b0 */
bf890a93
IT
2553 { "movB", { RMAL, Ib }, 0 },
2554 { "movB", { RMCL, Ib }, 0 },
2555 { "movB", { RMDL, Ib }, 0 },
2556 { "movB", { RMBL, Ib }, 0 },
2557 { "movB", { RMAH, Ib }, 0 },
2558 { "movB", { RMCH, Ib }, 0 },
2559 { "movB", { RMDH, Ib }, 0 },
2560 { "movB", { RMBH, Ib }, 0 },
252b5132 2561 /* b8 */
bf890a93
IT
2562 { "mov%LV", { RMeAX, Iv64 }, 0 },
2563 { "mov%LV", { RMeCX, Iv64 }, 0 },
2564 { "mov%LV", { RMeDX, Iv64 }, 0 },
2565 { "mov%LV", { RMeBX, Iv64 }, 0 },
2566 { "mov%LV", { RMeSP, Iv64 }, 0 },
2567 { "mov%LV", { RMeBP, Iv64 }, 0 },
2568 { "mov%LV", { RMeSI, Iv64 }, 0 },
2569 { "mov%LV", { RMeDI, Iv64 }, 0 },
252b5132 2570 /* c0 */
1ceb70f8
L
2571 { REG_TABLE (REG_C0) },
2572 { REG_TABLE (REG_C1) },
bf890a93
IT
2573 { "retT", { Iw, BND }, 0 },
2574 { "retT", { BND }, 0 },
4e7d34a6
L
2575 { X86_64_TABLE (X86_64_C4) },
2576 { X86_64_TABLE (X86_64_C5) },
1ceb70f8
L
2577 { REG_TABLE (REG_C6) },
2578 { REG_TABLE (REG_C7) },
252b5132 2579 /* c8 */
bf890a93
IT
2580 { "enterT", { Iw, Ib }, 0 },
2581 { "leaveT", { XX }, 0 },
2582 { "Jret{|f}P", { Iw }, 0 },
2583 { "Jret{|f}P", { XX }, 0 },
2584 { "int3", { XX }, 0 },
2585 { "int", { Ib }, 0 },
4e7d34a6 2586 { X86_64_TABLE (X86_64_CE) },
bf890a93 2587 { "iret%LP", { XX }, 0 },
252b5132 2588 /* d0 */
1ceb70f8
L
2589 { REG_TABLE (REG_D0) },
2590 { REG_TABLE (REG_D1) },
2591 { REG_TABLE (REG_D2) },
2592 { REG_TABLE (REG_D3) },
4e7d34a6
L
2593 { X86_64_TABLE (X86_64_D4) },
2594 { X86_64_TABLE (X86_64_D5) },
592d1631 2595 { Bad_Opcode },
bf890a93 2596 { "xlat", { DSBX }, 0 },
252b5132
RH
2597 /* d8 */
2598 { FLOAT },
2599 { FLOAT },
2600 { FLOAT },
2601 { FLOAT },
2602 { FLOAT },
2603 { FLOAT },
2604 { FLOAT },
2605 { FLOAT },
2606 /* e0 */
bf890a93
IT
2607 { "loopneFH", { Jb, XX, loop_jcxz_flag }, 0 },
2608 { "loopeFH", { Jb, XX, loop_jcxz_flag }, 0 },
2609 { "loopFH", { Jb, XX, loop_jcxz_flag }, 0 },
2610 { "jEcxzH", { Jb, XX, loop_jcxz_flag }, 0 },
2611 { "inB", { AL, Ib }, 0 },
2612 { "inG", { zAX, Ib }, 0 },
2613 { "outB", { Ib, AL }, 0 },
2614 { "outG", { Ib, zAX }, 0 },
252b5132 2615 /* e8 */
a72d2af2
L
2616 { X86_64_TABLE (X86_64_E8) },
2617 { X86_64_TABLE (X86_64_E9) },
4e7d34a6 2618 { X86_64_TABLE (X86_64_EA) },
bf890a93
IT
2619 { "jmp", { Jb, BND }, 0 },
2620 { "inB", { AL, indirDX }, 0 },
2621 { "inG", { zAX, indirDX }, 0 },
2622 { "outB", { indirDX, AL }, 0 },
2623 { "outG", { indirDX, zAX }, 0 },
252b5132 2624 /* f0 */
592d1631 2625 { Bad_Opcode }, /* lock prefix */
bf890a93 2626 { "icebp", { XX }, 0 },
592d1631
L
2627 { Bad_Opcode }, /* repne */
2628 { Bad_Opcode }, /* repz */
bf890a93
IT
2629 { "hlt", { XX }, 0 },
2630 { "cmc", { XX }, 0 },
1ceb70f8
L
2631 { REG_TABLE (REG_F6) },
2632 { REG_TABLE (REG_F7) },
252b5132 2633 /* f8 */
bf890a93
IT
2634 { "clc", { XX }, 0 },
2635 { "stc", { XX }, 0 },
2636 { "cli", { XX }, 0 },
2637 { "sti", { XX }, 0 },
2638 { "cld", { XX }, 0 },
2639 { "std", { XX }, 0 },
1ceb70f8
L
2640 { REG_TABLE (REG_FE) },
2641 { REG_TABLE (REG_FF) },
252b5132
RH
2642};
2643
6439fc28 2644static const struct dis386 dis386_twobyte[] = {
252b5132 2645 /* 00 */
1ceb70f8
L
2646 { REG_TABLE (REG_0F00 ) },
2647 { REG_TABLE (REG_0F01 ) },
bf890a93
IT
2648 { "larS", { Gv, Ew }, 0 },
2649 { "lslS", { Gv, Ew }, 0 },
592d1631 2650 { Bad_Opcode },
bf890a93
IT
2651 { "syscall", { XX }, 0 },
2652 { "clts", { XX }, 0 },
2653 { "sysret%LP", { XX }, 0 },
252b5132 2654 /* 08 */
bf890a93 2655 { "invd", { XX }, 0 },
3233d7d0 2656 { PREFIX_TABLE (PREFIX_0F09) },
592d1631 2657 { Bad_Opcode },
bf890a93 2658 { "ud2", { XX }, 0 },
592d1631 2659 { Bad_Opcode },
b5b1fc4f 2660 { REG_TABLE (REG_0F0D) },
bf890a93
IT
2661 { "femms", { XX }, 0 },
2662 { "", { MX, EM, OPSUF }, 0 }, /* See OP_3DNowSuffix. */
252b5132 2663 /* 10 */
1ceb70f8
L
2664 { PREFIX_TABLE (PREFIX_0F10) },
2665 { PREFIX_TABLE (PREFIX_0F11) },
2666 { PREFIX_TABLE (PREFIX_0F12) },
2667 { MOD_TABLE (MOD_0F13) },
507bd325
L
2668 { "unpcklpX", { XM, EXx }, PREFIX_OPCODE },
2669 { "unpckhpX", { XM, EXx }, PREFIX_OPCODE },
1ceb70f8
L
2670 { PREFIX_TABLE (PREFIX_0F16) },
2671 { MOD_TABLE (MOD_0F17) },
252b5132 2672 /* 18 */
1ceb70f8 2673 { REG_TABLE (REG_0F18) },
bf890a93 2674 { "nopQ", { Ev }, 0 },
7e8b059b
L
2675 { PREFIX_TABLE (PREFIX_0F1A) },
2676 { PREFIX_TABLE (PREFIX_0F1B) },
c48935d7 2677 { PREFIX_TABLE (PREFIX_0F1C) },
bf890a93 2678 { "nopQ", { Ev }, 0 },
603555e5 2679 { PREFIX_TABLE (PREFIX_0F1E) },
bf890a93 2680 { "nopQ", { Ev }, 0 },
252b5132 2681 /* 20 */
bf890a93
IT
2682 { "movZ", { Rm, Cm }, 0 },
2683 { "movZ", { Rm, Dm }, 0 },
2684 { "movZ", { Cm, Rm }, 0 },
2685 { "movZ", { Dm, Rm }, 0 },
1ceb70f8 2686 { MOD_TABLE (MOD_0F24) },
592d1631 2687 { Bad_Opcode },
1ceb70f8 2688 { MOD_TABLE (MOD_0F26) },
592d1631 2689 { Bad_Opcode },
252b5132 2690 /* 28 */
507bd325
L
2691 { "movapX", { XM, EXx }, PREFIX_OPCODE },
2692 { "movapX", { EXxS, XM }, PREFIX_OPCODE },
1ceb70f8
L
2693 { PREFIX_TABLE (PREFIX_0F2A) },
2694 { PREFIX_TABLE (PREFIX_0F2B) },
2695 { PREFIX_TABLE (PREFIX_0F2C) },
2696 { PREFIX_TABLE (PREFIX_0F2D) },
2697 { PREFIX_TABLE (PREFIX_0F2E) },
2698 { PREFIX_TABLE (PREFIX_0F2F) },
252b5132 2699 /* 30 */
bf890a93
IT
2700 { "wrmsr", { XX }, 0 },
2701 { "rdtsc", { XX }, 0 },
2702 { "rdmsr", { XX }, 0 },
2703 { "rdpmc", { XX }, 0 },
2704 { "sysenter", { XX }, 0 },
2705 { "sysexit", { XX }, 0 },
592d1631 2706 { Bad_Opcode },
bf890a93 2707 { "getsec", { XX }, 0 },
252b5132 2708 /* 38 */
507bd325 2709 { THREE_BYTE_TABLE_PREFIX (THREE_BYTE_0F38, PREFIX_OPCODE) },
592d1631 2710 { Bad_Opcode },
507bd325 2711 { THREE_BYTE_TABLE_PREFIX (THREE_BYTE_0F3A, PREFIX_OPCODE) },
592d1631
L
2712 { Bad_Opcode },
2713 { Bad_Opcode },
2714 { Bad_Opcode },
2715 { Bad_Opcode },
2716 { Bad_Opcode },
252b5132 2717 /* 40 */
bf890a93
IT
2718 { "cmovoS", { Gv, Ev }, 0 },
2719 { "cmovnoS", { Gv, Ev }, 0 },
2720 { "cmovbS", { Gv, Ev }, 0 },
2721 { "cmovaeS", { Gv, Ev }, 0 },
2722 { "cmoveS", { Gv, Ev }, 0 },
2723 { "cmovneS", { Gv, Ev }, 0 },
2724 { "cmovbeS", { Gv, Ev }, 0 },
2725 { "cmovaS", { Gv, Ev }, 0 },
252b5132 2726 /* 48 */
bf890a93
IT
2727 { "cmovsS", { Gv, Ev }, 0 },
2728 { "cmovnsS", { Gv, Ev }, 0 },
2729 { "cmovpS", { Gv, Ev }, 0 },
2730 { "cmovnpS", { Gv, Ev }, 0 },
2731 { "cmovlS", { Gv, Ev }, 0 },
2732 { "cmovgeS", { Gv, Ev }, 0 },
2733 { "cmovleS", { Gv, Ev }, 0 },
2734 { "cmovgS", { Gv, Ev }, 0 },
252b5132 2735 /* 50 */
75c135a8 2736 { MOD_TABLE (MOD_0F51) },
1ceb70f8
L
2737 { PREFIX_TABLE (PREFIX_0F51) },
2738 { PREFIX_TABLE (PREFIX_0F52) },
2739 { PREFIX_TABLE (PREFIX_0F53) },
507bd325
L
2740 { "andpX", { XM, EXx }, PREFIX_OPCODE },
2741 { "andnpX", { XM, EXx }, PREFIX_OPCODE },
2742 { "orpX", { XM, EXx }, PREFIX_OPCODE },
2743 { "xorpX", { XM, EXx }, PREFIX_OPCODE },
252b5132 2744 /* 58 */
1ceb70f8
L
2745 { PREFIX_TABLE (PREFIX_0F58) },
2746 { PREFIX_TABLE (PREFIX_0F59) },
2747 { PREFIX_TABLE (PREFIX_0F5A) },
2748 { PREFIX_TABLE (PREFIX_0F5B) },
2749 { PREFIX_TABLE (PREFIX_0F5C) },
2750 { PREFIX_TABLE (PREFIX_0F5D) },
2751 { PREFIX_TABLE (PREFIX_0F5E) },
2752 { PREFIX_TABLE (PREFIX_0F5F) },
252b5132 2753 /* 60 */
1ceb70f8
L
2754 { PREFIX_TABLE (PREFIX_0F60) },
2755 { PREFIX_TABLE (PREFIX_0F61) },
2756 { PREFIX_TABLE (PREFIX_0F62) },
507bd325
L
2757 { "packsswb", { MX, EM }, PREFIX_OPCODE },
2758 { "pcmpgtb", { MX, EM }, PREFIX_OPCODE },
2759 { "pcmpgtw", { MX, EM }, PREFIX_OPCODE },
2760 { "pcmpgtd", { MX, EM }, PREFIX_OPCODE },
2761 { "packuswb", { MX, EM }, PREFIX_OPCODE },
252b5132 2762 /* 68 */
507bd325
L
2763 { "punpckhbw", { MX, EM }, PREFIX_OPCODE },
2764 { "punpckhwd", { MX, EM }, PREFIX_OPCODE },
2765 { "punpckhdq", { MX, EM }, PREFIX_OPCODE },
2766 { "packssdw", { MX, EM }, PREFIX_OPCODE },
1ceb70f8
L
2767 { PREFIX_TABLE (PREFIX_0F6C) },
2768 { PREFIX_TABLE (PREFIX_0F6D) },
507bd325 2769 { "movK", { MX, Edq }, PREFIX_OPCODE },
1ceb70f8 2770 { PREFIX_TABLE (PREFIX_0F6F) },
252b5132 2771 /* 70 */
1ceb70f8
L
2772 { PREFIX_TABLE (PREFIX_0F70) },
2773 { REG_TABLE (REG_0F71) },
2774 { REG_TABLE (REG_0F72) },
2775 { REG_TABLE (REG_0F73) },
507bd325
L
2776 { "pcmpeqb", { MX, EM }, PREFIX_OPCODE },
2777 { "pcmpeqw", { MX, EM }, PREFIX_OPCODE },
2778 { "pcmpeqd", { MX, EM }, PREFIX_OPCODE },
2779 { "emms", { XX }, PREFIX_OPCODE },
252b5132 2780 /* 78 */
1ceb70f8
L
2781 { PREFIX_TABLE (PREFIX_0F78) },
2782 { PREFIX_TABLE (PREFIX_0F79) },
1f334aeb 2783 { Bad_Opcode },
592d1631 2784 { Bad_Opcode },
1ceb70f8
L
2785 { PREFIX_TABLE (PREFIX_0F7C) },
2786 { PREFIX_TABLE (PREFIX_0F7D) },
2787 { PREFIX_TABLE (PREFIX_0F7E) },
2788 { PREFIX_TABLE (PREFIX_0F7F) },
252b5132 2789 /* 80 */
bf890a93
IT
2790 { "joH", { Jv, BND, cond_jump_flag }, 0 },
2791 { "jnoH", { Jv, BND, cond_jump_flag }, 0 },
2792 { "jbH", { Jv, BND, cond_jump_flag }, 0 },
2793 { "jaeH", { Jv, BND, cond_jump_flag }, 0 },
2794 { "jeH", { Jv, BND, cond_jump_flag }, 0 },
2795 { "jneH", { Jv, BND, cond_jump_flag }, 0 },
2796 { "jbeH", { Jv, BND, cond_jump_flag }, 0 },
2797 { "jaH", { Jv, BND, cond_jump_flag }, 0 },
252b5132 2798 /* 88 */
bf890a93
IT
2799 { "jsH", { Jv, BND, cond_jump_flag }, 0 },
2800 { "jnsH", { Jv, BND, cond_jump_flag }, 0 },
2801 { "jpH", { Jv, BND, cond_jump_flag }, 0 },
2802 { "jnpH", { Jv, BND, cond_jump_flag }, 0 },
2803 { "jlH", { Jv, BND, cond_jump_flag }, 0 },
2804 { "jgeH", { Jv, BND, cond_jump_flag }, 0 },
2805 { "jleH", { Jv, BND, cond_jump_flag }, 0 },
2806 { "jgH", { Jv, BND, cond_jump_flag }, 0 },
252b5132 2807 /* 90 */
bf890a93
IT
2808 { "seto", { Eb }, 0 },
2809 { "setno", { Eb }, 0 },
2810 { "setb", { Eb }, 0 },
2811 { "setae", { Eb }, 0 },
2812 { "sete", { Eb }, 0 },
2813 { "setne", { Eb }, 0 },
2814 { "setbe", { Eb }, 0 },
2815 { "seta", { Eb }, 0 },
252b5132 2816 /* 98 */
bf890a93
IT
2817 { "sets", { Eb }, 0 },
2818 { "setns", { Eb }, 0 },
2819 { "setp", { Eb }, 0 },
2820 { "setnp", { Eb }, 0 },
2821 { "setl", { Eb }, 0 },
2822 { "setge", { Eb }, 0 },
2823 { "setle", { Eb }, 0 },
2824 { "setg", { Eb }, 0 },
252b5132 2825 /* a0 */
bf890a93
IT
2826 { "pushT", { fs }, 0 },
2827 { "popT", { fs }, 0 },
2828 { "cpuid", { XX }, 0 },
2829 { "btS", { Ev, Gv }, 0 },
2830 { "shldS", { Ev, Gv, Ib }, 0 },
2831 { "shldS", { Ev, Gv, CL }, 0 },
1ceb70f8
L
2832 { REG_TABLE (REG_0FA6) },
2833 { REG_TABLE (REG_0FA7) },
252b5132 2834 /* a8 */
bf890a93
IT
2835 { "pushT", { gs }, 0 },
2836 { "popT", { gs }, 0 },
2837 { "rsm", { XX }, 0 },
2838 { "btsS", { Evh1, Gv }, 0 },
2839 { "shrdS", { Ev, Gv, Ib }, 0 },
2840 { "shrdS", { Ev, Gv, CL }, 0 },
1ceb70f8 2841 { REG_TABLE (REG_0FAE) },
bf890a93 2842 { "imulS", { Gv, Ev }, 0 },
252b5132 2843 /* b0 */
bf890a93
IT
2844 { "cmpxchgB", { Ebh1, Gb }, 0 },
2845 { "cmpxchgS", { Evh1, Gv }, 0 },
1ceb70f8 2846 { MOD_TABLE (MOD_0FB2) },
bf890a93 2847 { "btrS", { Evh1, Gv }, 0 },
1ceb70f8
L
2848 { MOD_TABLE (MOD_0FB4) },
2849 { MOD_TABLE (MOD_0FB5) },
bf890a93
IT
2850 { "movz{bR|x}", { Gv, Eb }, 0 },
2851 { "movz{wR|x}", { Gv, Ew }, 0 }, /* yes, there really is movzww ! */
252b5132 2852 /* b8 */
1ceb70f8 2853 { PREFIX_TABLE (PREFIX_0FB8) },
66f1eba0 2854 { "ud1S", { Gv, Ev }, 0 },
1ceb70f8 2855 { REG_TABLE (REG_0FBA) },
bf890a93 2856 { "btcS", { Evh1, Gv }, 0 },
f12dc422 2857 { PREFIX_TABLE (PREFIX_0FBC) },
1ceb70f8 2858 { PREFIX_TABLE (PREFIX_0FBD) },
bf890a93
IT
2859 { "movs{bR|x}", { Gv, Eb }, 0 },
2860 { "movs{wR|x}", { Gv, Ew }, 0 }, /* yes, there really is movsww ! */
252b5132 2861 /* c0 */
bf890a93
IT
2862 { "xaddB", { Ebh1, Gb }, 0 },
2863 { "xaddS", { Evh1, Gv }, 0 },
1ceb70f8 2864 { PREFIX_TABLE (PREFIX_0FC2) },
a8484f96 2865 { MOD_TABLE (MOD_0FC3) },
507bd325
L
2866 { "pinsrw", { MX, Edqw, Ib }, PREFIX_OPCODE },
2867 { "pextrw", { Gdq, MS, Ib }, PREFIX_OPCODE },
2868 { "shufpX", { XM, EXx, Ib }, PREFIX_OPCODE },
1ceb70f8 2869 { REG_TABLE (REG_0FC7) },
252b5132 2870 /* c8 */
bf890a93
IT
2871 { "bswap", { RMeAX }, 0 },
2872 { "bswap", { RMeCX }, 0 },
2873 { "bswap", { RMeDX }, 0 },
2874 { "bswap", { RMeBX }, 0 },
2875 { "bswap", { RMeSP }, 0 },
2876 { "bswap", { RMeBP }, 0 },
2877 { "bswap", { RMeSI }, 0 },
2878 { "bswap", { RMeDI }, 0 },
252b5132 2879 /* d0 */
1ceb70f8 2880 { PREFIX_TABLE (PREFIX_0FD0) },
507bd325
L
2881 { "psrlw", { MX, EM }, PREFIX_OPCODE },
2882 { "psrld", { MX, EM }, PREFIX_OPCODE },
2883 { "psrlq", { MX, EM }, PREFIX_OPCODE },
2884 { "paddq", { MX, EM }, PREFIX_OPCODE },
2885 { "pmullw", { MX, EM }, PREFIX_OPCODE },
1ceb70f8 2886 { PREFIX_TABLE (PREFIX_0FD6) },
75c135a8 2887 { MOD_TABLE (MOD_0FD7) },
252b5132 2888 /* d8 */
507bd325
L
2889 { "psubusb", { MX, EM }, PREFIX_OPCODE },
2890 { "psubusw", { MX, EM }, PREFIX_OPCODE },
2891 { "pminub", { MX, EM }, PREFIX_OPCODE },
2892 { "pand", { MX, EM }, PREFIX_OPCODE },
2893 { "paddusb", { MX, EM }, PREFIX_OPCODE },
2894 { "paddusw", { MX, EM }, PREFIX_OPCODE },
2895 { "pmaxub", { MX, EM }, PREFIX_OPCODE },
2896 { "pandn", { MX, EM }, PREFIX_OPCODE },
252b5132 2897 /* e0 */
507bd325
L
2898 { "pavgb", { MX, EM }, PREFIX_OPCODE },
2899 { "psraw", { MX, EM }, PREFIX_OPCODE },
2900 { "psrad", { MX, EM }, PREFIX_OPCODE },
2901 { "pavgw", { MX, EM }, PREFIX_OPCODE },
2902 { "pmulhuw", { MX, EM }, PREFIX_OPCODE },
2903 { "pmulhw", { MX, EM }, PREFIX_OPCODE },
1ceb70f8
L
2904 { PREFIX_TABLE (PREFIX_0FE6) },
2905 { PREFIX_TABLE (PREFIX_0FE7) },
252b5132 2906 /* e8 */
507bd325
L
2907 { "psubsb", { MX, EM }, PREFIX_OPCODE },
2908 { "psubsw", { MX, EM }, PREFIX_OPCODE },
2909 { "pminsw", { MX, EM }, PREFIX_OPCODE },
2910 { "por", { MX, EM }, PREFIX_OPCODE },
2911 { "paddsb", { MX, EM }, PREFIX_OPCODE },
2912 { "paddsw", { MX, EM }, PREFIX_OPCODE },
2913 { "pmaxsw", { MX, EM }, PREFIX_OPCODE },
2914 { "pxor", { MX, EM }, PREFIX_OPCODE },
252b5132 2915 /* f0 */
1ceb70f8 2916 { PREFIX_TABLE (PREFIX_0FF0) },
507bd325
L
2917 { "psllw", { MX, EM }, PREFIX_OPCODE },
2918 { "pslld", { MX, EM }, PREFIX_OPCODE },
2919 { "psllq", { MX, EM }, PREFIX_OPCODE },
2920 { "pmuludq", { MX, EM }, PREFIX_OPCODE },
2921 { "pmaddwd", { MX, EM }, PREFIX_OPCODE },
2922 { "psadbw", { MX, EM }, PREFIX_OPCODE },
1ceb70f8 2923 { PREFIX_TABLE (PREFIX_0FF7) },
252b5132 2924 /* f8 */
507bd325
L
2925 { "psubb", { MX, EM }, PREFIX_OPCODE },
2926 { "psubw", { MX, EM }, PREFIX_OPCODE },
2927 { "psubd", { MX, EM }, PREFIX_OPCODE },
2928 { "psubq", { MX, EM }, PREFIX_OPCODE },
2929 { "paddb", { MX, EM }, PREFIX_OPCODE },
2930 { "paddw", { MX, EM }, PREFIX_OPCODE },
2931 { "paddd", { MX, EM }, PREFIX_OPCODE },
66f1eba0 2932 { "ud0S", { Gv, Ev }, 0 },
252b5132
RH
2933};
2934
2935static const unsigned char onebyte_has_modrm[256] = {
c608c12e
AM
2936 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
2937 /* ------------------------------- */
2938 /* 00 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 00 */
2939 /* 10 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 10 */
2940 /* 20 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 20 */
2941 /* 30 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 30 */
2942 /* 40 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 40 */
2943 /* 50 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 50 */
2944 /* 60 */ 0,0,1,1,0,0,0,0,0,1,0,1,0,0,0,0, /* 60 */
2945 /* 70 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 70 */
2946 /* 80 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 80 */
2947 /* 90 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 90 */
2948 /* a0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* a0 */
2949 /* b0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* b0 */
2950 /* c0 */ 1,1,0,0,1,1,1,1,0,0,0,0,0,0,0,0, /* c0 */
2951 /* d0 */ 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1, /* d0 */
2952 /* e0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* e0 */
2953 /* f0 */ 0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1 /* f0 */
2954 /* ------------------------------- */
2955 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
252b5132
RH
2956};
2957
2958static const unsigned char twobyte_has_modrm[256] = {
c608c12e
AM
2959 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
2960 /* ------------------------------- */
252b5132 2961 /* 00 */ 1,1,1,1,0,0,0,0,0,0,0,0,0,1,0,1, /* 0f */
b5b1fc4f 2962 /* 10 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 1f */
85f10a01 2963 /* 20 */ 1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1, /* 2f */
331d2d0d 2964 /* 30 */ 0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0, /* 3f */
252b5132 2965 /* 40 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 4f */
4bba6815
AM
2966 /* 50 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 5f */
2967 /* 60 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 6f */
85f10a01 2968 /* 70 */ 1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1, /* 7f */
252b5132
RH
2969 /* 80 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 8f */
2970 /* 90 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 9f */
30d1c836 2971 /* a0 */ 0,0,0,1,1,1,1,1,0,0,0,1,1,1,1,1, /* af */
66f1eba0 2972 /* b0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* bf */
252b5132 2973 /* c0 */ 1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0, /* cf */
ca164297 2974 /* d0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* df */
4bba6815 2975 /* e0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* ef */
66f1eba0 2976 /* f0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 /* ff */
c608c12e
AM
2977 /* ------------------------------- */
2978 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
2979};
2980
252b5132
RH
2981static char obuf[100];
2982static char *obufp;
ea397f5b 2983static char *mnemonicendp;
252b5132
RH
2984static char scratchbuf[100];
2985static unsigned char *start_codep;
2986static unsigned char *insn_codep;
2987static unsigned char *codep;
285ca992 2988static unsigned char *end_codep;
f16cd0d5
L
2989static int last_lock_prefix;
2990static int last_repz_prefix;
2991static int last_repnz_prefix;
2992static int last_data_prefix;
2993static int last_addr_prefix;
2994static int last_rex_prefix;
2995static int last_seg_prefix;
d9949a36 2996static int fwait_prefix;
285ca992
L
2997/* The active segment register prefix. */
2998static int active_seg_prefix;
f16cd0d5
L
2999#define MAX_CODE_LENGTH 15
3000/* We can up to 14 prefixes since the maximum instruction length is
3001 15bytes. */
3002static int all_prefixes[MAX_CODE_LENGTH - 1];
252b5132 3003static disassemble_info *the_info;
7967e09e
L
3004static struct
3005 {
3006 int mod;
7967e09e 3007 int reg;
484c222e 3008 int rm;
7967e09e
L
3009 }
3010modrm;
4bba6815 3011static unsigned char need_modrm;
dfc8cf43
L
3012static struct
3013 {
3014 int scale;
3015 int index;
3016 int base;
3017 }
3018sib;
c0f3af97
L
3019static struct
3020 {
3021 int register_specifier;
3022 int length;
3023 int prefix;
3024 int w;
43234a1e
L
3025 int evex;
3026 int r;
3027 int v;
3028 int mask_register_specifier;
3029 int zeroing;
3030 int ll;
3031 int b;
c0f3af97
L
3032 }
3033vex;
3034static unsigned char need_vex;
3035static unsigned char need_vex_reg;
dae39acc 3036static unsigned char vex_w_done;
252b5132 3037
ea397f5b
L
3038struct op
3039 {
3040 const char *name;
3041 unsigned int len;
3042 };
3043
4bba6815
AM
3044/* If we are accessing mod/rm/reg without need_modrm set, then the
3045 values are stale. Hitting this abort likely indicates that you
3046 need to update onebyte_has_modrm or twobyte_has_modrm. */
3047#define MODRM_CHECK if (!need_modrm) abort ()
3048
d708bcba
AM
3049static const char **names64;
3050static const char **names32;
3051static const char **names16;
3052static const char **names8;
3053static const char **names8rex;
3054static const char **names_seg;
db51cc60
L
3055static const char *index64;
3056static const char *index32;
d708bcba 3057static const char **index16;
7e8b059b 3058static const char **names_bnd;
d708bcba
AM
3059
3060static const char *intel_names64[] = {
3061 "rax", "rcx", "rdx", "rbx", "rsp", "rbp", "rsi", "rdi",
3062 "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15"
3063};
3064static const char *intel_names32[] = {
3065 "eax", "ecx", "edx", "ebx", "esp", "ebp", "esi", "edi",
3066 "r8d", "r9d", "r10d", "r11d", "r12d", "r13d", "r14d", "r15d"
3067};
3068static const char *intel_names16[] = {
3069 "ax", "cx", "dx", "bx", "sp", "bp", "si", "di",
3070 "r8w", "r9w", "r10w", "r11w", "r12w", "r13w", "r14w", "r15w"
3071};
3072static const char *intel_names8[] = {
3073 "al", "cl", "dl", "bl", "ah", "ch", "dh", "bh",
3074};
3075static const char *intel_names8rex[] = {
3076 "al", "cl", "dl", "bl", "spl", "bpl", "sil", "dil",
3077 "r8b", "r9b", "r10b", "r11b", "r12b", "r13b", "r14b", "r15b"
3078};
3079static const char *intel_names_seg[] = {
3080 "es", "cs", "ss", "ds", "fs", "gs", "?", "?",
3081};
db51cc60
L
3082static const char *intel_index64 = "riz";
3083static const char *intel_index32 = "eiz";
d708bcba
AM
3084static const char *intel_index16[] = {
3085 "bx+si", "bx+di", "bp+si", "bp+di", "si", "di", "bp", "bx"
3086};
3087
3088static const char *att_names64[] = {
3089 "%rax", "%rcx", "%rdx", "%rbx", "%rsp", "%rbp", "%rsi", "%rdi",
52b15da3
JH
3090 "%r8", "%r9", "%r10", "%r11", "%r12", "%r13", "%r14", "%r15"
3091};
d708bcba
AM
3092static const char *att_names32[] = {
3093 "%eax", "%ecx", "%edx", "%ebx", "%esp", "%ebp", "%esi", "%edi",
52b15da3 3094 "%r8d", "%r9d", "%r10d", "%r11d", "%r12d", "%r13d", "%r14d", "%r15d"
252b5132 3095};
d708bcba
AM
3096static const char *att_names16[] = {
3097 "%ax", "%cx", "%dx", "%bx", "%sp", "%bp", "%si", "%di",
52b15da3 3098 "%r8w", "%r9w", "%r10w", "%r11w", "%r12w", "%r13w", "%r14w", "%r15w"
252b5132 3099};
d708bcba
AM
3100static const char *att_names8[] = {
3101 "%al", "%cl", "%dl", "%bl", "%ah", "%ch", "%dh", "%bh",
252b5132 3102};
d708bcba
AM
3103static const char *att_names8rex[] = {
3104 "%al", "%cl", "%dl", "%bl", "%spl", "%bpl", "%sil", "%dil",
52b15da3
JH
3105 "%r8b", "%r9b", "%r10b", "%r11b", "%r12b", "%r13b", "%r14b", "%r15b"
3106};
d708bcba
AM
3107static const char *att_names_seg[] = {
3108 "%es", "%cs", "%ss", "%ds", "%fs", "%gs", "%?", "%?",
252b5132 3109};
db51cc60
L
3110static const char *att_index64 = "%riz";
3111static const char *att_index32 = "%eiz";
d708bcba
AM
3112static const char *att_index16[] = {
3113 "%bx,%si", "%bx,%di", "%bp,%si", "%bp,%di", "%si", "%di", "%bp", "%bx"
252b5132
RH
3114};
3115
b9733481
L
3116static const char **names_mm;
3117static const char *intel_names_mm[] = {
3118 "mm0", "mm1", "mm2", "mm3",
3119 "mm4", "mm5", "mm6", "mm7"
3120};
3121static const char *att_names_mm[] = {
3122 "%mm0", "%mm1", "%mm2", "%mm3",
3123 "%mm4", "%mm5", "%mm6", "%mm7"
3124};
3125
7e8b059b
L
3126static const char *intel_names_bnd[] = {
3127 "bnd0", "bnd1", "bnd2", "bnd3"
3128};
3129
3130static const char *att_names_bnd[] = {
3131 "%bnd0", "%bnd1", "%bnd2", "%bnd3"
3132};
3133
b9733481
L
3134static const char **names_xmm;
3135static const char *intel_names_xmm[] = {
3136 "xmm0", "xmm1", "xmm2", "xmm3",
3137 "xmm4", "xmm5", "xmm6", "xmm7",
3138 "xmm8", "xmm9", "xmm10", "xmm11",
43234a1e
L
3139 "xmm12", "xmm13", "xmm14", "xmm15",
3140 "xmm16", "xmm17", "xmm18", "xmm19",
3141 "xmm20", "xmm21", "xmm22", "xmm23",
3142 "xmm24", "xmm25", "xmm26", "xmm27",
3143 "xmm28", "xmm29", "xmm30", "xmm31"
b9733481
L
3144};
3145static const char *att_names_xmm[] = {
3146 "%xmm0", "%xmm1", "%xmm2", "%xmm3",
3147 "%xmm4", "%xmm5", "%xmm6", "%xmm7",
3148 "%xmm8", "%xmm9", "%xmm10", "%xmm11",
43234a1e
L
3149 "%xmm12", "%xmm13", "%xmm14", "%xmm15",
3150 "%xmm16", "%xmm17", "%xmm18", "%xmm19",
3151 "%xmm20", "%xmm21", "%xmm22", "%xmm23",
3152 "%xmm24", "%xmm25", "%xmm26", "%xmm27",
3153 "%xmm28", "%xmm29", "%xmm30", "%xmm31"
b9733481
L
3154};
3155
3156static const char **names_ymm;
3157static const char *intel_names_ymm[] = {
3158 "ymm0", "ymm1", "ymm2", "ymm3",
3159 "ymm4", "ymm5", "ymm6", "ymm7",
3160 "ymm8", "ymm9", "ymm10", "ymm11",
43234a1e
L
3161 "ymm12", "ymm13", "ymm14", "ymm15",
3162 "ymm16", "ymm17", "ymm18", "ymm19",
3163 "ymm20", "ymm21", "ymm22", "ymm23",
3164 "ymm24", "ymm25", "ymm26", "ymm27",
3165 "ymm28", "ymm29", "ymm30", "ymm31"
b9733481
L
3166};
3167static const char *att_names_ymm[] = {
3168 "%ymm0", "%ymm1", "%ymm2", "%ymm3",
3169 "%ymm4", "%ymm5", "%ymm6", "%ymm7",
3170 "%ymm8", "%ymm9", "%ymm10", "%ymm11",
43234a1e
L
3171 "%ymm12", "%ymm13", "%ymm14", "%ymm15",
3172 "%ymm16", "%ymm17", "%ymm18", "%ymm19",
3173 "%ymm20", "%ymm21", "%ymm22", "%ymm23",
3174 "%ymm24", "%ymm25", "%ymm26", "%ymm27",
3175 "%ymm28", "%ymm29", "%ymm30", "%ymm31"
3176};
3177
3178static const char **names_zmm;
3179static const char *intel_names_zmm[] = {
3180 "zmm0", "zmm1", "zmm2", "zmm3",
3181 "zmm4", "zmm5", "zmm6", "zmm7",
3182 "zmm8", "zmm9", "zmm10", "zmm11",
3183 "zmm12", "zmm13", "zmm14", "zmm15",
3184 "zmm16", "zmm17", "zmm18", "zmm19",
3185 "zmm20", "zmm21", "zmm22", "zmm23",
3186 "zmm24", "zmm25", "zmm26", "zmm27",
3187 "zmm28", "zmm29", "zmm30", "zmm31"
3188};
3189static const char *att_names_zmm[] = {
3190 "%zmm0", "%zmm1", "%zmm2", "%zmm3",
3191 "%zmm4", "%zmm5", "%zmm6", "%zmm7",
3192 "%zmm8", "%zmm9", "%zmm10", "%zmm11",
3193 "%zmm12", "%zmm13", "%zmm14", "%zmm15",
3194 "%zmm16", "%zmm17", "%zmm18", "%zmm19",
3195 "%zmm20", "%zmm21", "%zmm22", "%zmm23",
3196 "%zmm24", "%zmm25", "%zmm26", "%zmm27",
3197 "%zmm28", "%zmm29", "%zmm30", "%zmm31"
3198};
3199
3200static const char **names_mask;
3201static const char *intel_names_mask[] = {
3202 "k0", "k1", "k2", "k3", "k4", "k5", "k6", "k7"
3203};
3204static const char *att_names_mask[] = {
3205 "%k0", "%k1", "%k2", "%k3", "%k4", "%k5", "%k6", "%k7"
3206};
3207
3208static const char *names_rounding[] =
3209{
3210 "{rn-sae}",
3211 "{rd-sae}",
3212 "{ru-sae}",
3213 "{rz-sae}"
b9733481
L
3214};
3215
1ceb70f8
L
3216static const struct dis386 reg_table[][8] = {
3217 /* REG_80 */
252b5132 3218 {
bf890a93
IT
3219 { "addA", { Ebh1, Ib }, 0 },
3220 { "orA", { Ebh1, Ib }, 0 },
3221 { "adcA", { Ebh1, Ib }, 0 },
3222 { "sbbA", { Ebh1, Ib }, 0 },
3223 { "andA", { Ebh1, Ib }, 0 },
3224 { "subA", { Ebh1, Ib }, 0 },
3225 { "xorA", { Ebh1, Ib }, 0 },
3226 { "cmpA", { Eb, Ib }, 0 },
252b5132 3227 },
1ceb70f8 3228 /* REG_81 */
252b5132 3229 {
bf890a93
IT
3230 { "addQ", { Evh1, Iv }, 0 },
3231 { "orQ", { Evh1, Iv }, 0 },
3232 { "adcQ", { Evh1, Iv }, 0 },
3233 { "sbbQ", { Evh1, Iv }, 0 },
3234 { "andQ", { Evh1, Iv }, 0 },
3235 { "subQ", { Evh1, Iv }, 0 },
3236 { "xorQ", { Evh1, Iv }, 0 },
3237 { "cmpQ", { Ev, Iv }, 0 },
252b5132 3238 },
7148c369 3239 /* REG_83 */
252b5132 3240 {
bf890a93
IT
3241 { "addQ", { Evh1, sIb }, 0 },
3242 { "orQ", { Evh1, sIb }, 0 },
3243 { "adcQ", { Evh1, sIb }, 0 },
3244 { "sbbQ", { Evh1, sIb }, 0 },
3245 { "andQ", { Evh1, sIb }, 0 },
3246 { "subQ", { Evh1, sIb }, 0 },
3247 { "xorQ", { Evh1, sIb }, 0 },
3248 { "cmpQ", { Ev, sIb }, 0 },
252b5132 3249 },
1ceb70f8 3250 /* REG_8F */
4e7d34a6 3251 {
bf890a93 3252 { "popU", { stackEv }, 0 },
c48244a5 3253 { XOP_8F_TABLE (XOP_09) },
592d1631
L
3254 { Bad_Opcode },
3255 { Bad_Opcode },
3256 { Bad_Opcode },
f88c9eb0 3257 { XOP_8F_TABLE (XOP_09) },
4e7d34a6 3258 },
1ceb70f8 3259 /* REG_C0 */
252b5132 3260 {
bf890a93
IT
3261 { "rolA", { Eb, Ib }, 0 },
3262 { "rorA", { Eb, Ib }, 0 },
3263 { "rclA", { Eb, Ib }, 0 },
3264 { "rcrA", { Eb, Ib }, 0 },
3265 { "shlA", { Eb, Ib }, 0 },
3266 { "shrA", { Eb, Ib }, 0 },
e4bdd679 3267 { "shlA", { Eb, Ib }, 0 },
bf890a93 3268 { "sarA", { Eb, Ib }, 0 },
252b5132 3269 },
1ceb70f8 3270 /* REG_C1 */
252b5132 3271 {
bf890a93
IT
3272 { "rolQ", { Ev, Ib }, 0 },
3273 { "rorQ", { Ev, Ib }, 0 },
3274 { "rclQ", { Ev, Ib }, 0 },
3275 { "rcrQ", { Ev, Ib }, 0 },
3276 { "shlQ", { Ev, Ib }, 0 },
3277 { "shrQ", { Ev, Ib }, 0 },
e4bdd679 3278 { "shlQ", { Ev, Ib }, 0 },
bf890a93 3279 { "sarQ", { Ev, Ib }, 0 },
252b5132 3280 },
1ceb70f8 3281 /* REG_C6 */
4e7d34a6 3282 {
bf890a93 3283 { "movA", { Ebh3, Ib }, 0 },
42164a71
L
3284 { Bad_Opcode },
3285 { Bad_Opcode },
3286 { Bad_Opcode },
3287 { Bad_Opcode },
3288 { Bad_Opcode },
3289 { Bad_Opcode },
3290 { MOD_TABLE (MOD_C6_REG_7) },
4e7d34a6 3291 },
1ceb70f8 3292 /* REG_C7 */
4e7d34a6 3293 {
bf890a93 3294 { "movQ", { Evh3, Iv }, 0 },
42164a71
L
3295 { Bad_Opcode },
3296 { Bad_Opcode },
3297 { Bad_Opcode },
3298 { Bad_Opcode },
3299 { Bad_Opcode },
3300 { Bad_Opcode },
3301 { MOD_TABLE (MOD_C7_REG_7) },
4e7d34a6 3302 },
1ceb70f8 3303 /* REG_D0 */
252b5132 3304 {
bf890a93
IT
3305 { "rolA", { Eb, I1 }, 0 },
3306 { "rorA", { Eb, I1 }, 0 },
3307 { "rclA", { Eb, I1 }, 0 },
3308 { "rcrA", { Eb, I1 }, 0 },
3309 { "shlA", { Eb, I1 }, 0 },
3310 { "shrA", { Eb, I1 }, 0 },
e4bdd679 3311 { "shlA", { Eb, I1 }, 0 },
bf890a93 3312 { "sarA", { Eb, I1 }, 0 },
252b5132 3313 },
1ceb70f8 3314 /* REG_D1 */
252b5132 3315 {
bf890a93
IT
3316 { "rolQ", { Ev, I1 }, 0 },
3317 { "rorQ", { Ev, I1 }, 0 },
3318 { "rclQ", { Ev, I1 }, 0 },
3319 { "rcrQ", { Ev, I1 }, 0 },
3320 { "shlQ", { Ev, I1 }, 0 },
3321 { "shrQ", { Ev, I1 }, 0 },
e4bdd679 3322 { "shlQ", { Ev, I1 }, 0 },
bf890a93 3323 { "sarQ", { Ev, I1 }, 0 },
252b5132 3324 },
1ceb70f8 3325 /* REG_D2 */
252b5132 3326 {
bf890a93
IT
3327 { "rolA", { Eb, CL }, 0 },
3328 { "rorA", { Eb, CL }, 0 },
3329 { "rclA", { Eb, CL }, 0 },
3330 { "rcrA", { Eb, CL }, 0 },
3331 { "shlA", { Eb, CL }, 0 },
3332 { "shrA", { Eb, CL }, 0 },
e4bdd679 3333 { "shlA", { Eb, CL }, 0 },
bf890a93 3334 { "sarA", { Eb, CL }, 0 },
252b5132 3335 },
1ceb70f8 3336 /* REG_D3 */
252b5132 3337 {
bf890a93
IT
3338 { "rolQ", { Ev, CL }, 0 },
3339 { "rorQ", { Ev, CL }, 0 },
3340 { "rclQ", { Ev, CL }, 0 },
3341 { "rcrQ", { Ev, CL }, 0 },
3342 { "shlQ", { Ev, CL }, 0 },
3343 { "shrQ", { Ev, CL }, 0 },
e4bdd679 3344 { "shlQ", { Ev, CL }, 0 },
bf890a93 3345 { "sarQ", { Ev, CL }, 0 },
252b5132 3346 },
1ceb70f8 3347 /* REG_F6 */
252b5132 3348 {
bf890a93 3349 { "testA", { Eb, Ib }, 0 },
7db2c588 3350 { "testA", { Eb, Ib }, 0 },
bf890a93
IT
3351 { "notA", { Ebh1 }, 0 },
3352 { "negA", { Ebh1 }, 0 },
3353 { "mulA", { Eb }, 0 }, /* Don't print the implicit %al register, */
3354 { "imulA", { Eb }, 0 }, /* to distinguish these opcodes from other */
3355 { "divA", { Eb }, 0 }, /* mul/imul opcodes. Do the same for div */
3356 { "idivA", { Eb }, 0 }, /* and idiv for consistency. */
252b5132 3357 },
1ceb70f8 3358 /* REG_F7 */
252b5132 3359 {
bf890a93 3360 { "testQ", { Ev, Iv }, 0 },
7db2c588 3361 { "testQ", { Ev, Iv }, 0 },
bf890a93
IT
3362 { "notQ", { Evh1 }, 0 },
3363 { "negQ", { Evh1 }, 0 },
3364 { "mulQ", { Ev }, 0 }, /* Don't print the implicit register. */
3365 { "imulQ", { Ev }, 0 },
3366 { "divQ", { Ev }, 0 },
3367 { "idivQ", { Ev }, 0 },
252b5132 3368 },
1ceb70f8 3369 /* REG_FE */
252b5132 3370 {
bf890a93
IT
3371 { "incA", { Ebh1 }, 0 },
3372 { "decA", { Ebh1 }, 0 },
252b5132 3373 },
1ceb70f8 3374 /* REG_FF */
252b5132 3375 {
bf890a93
IT
3376 { "incQ", { Evh1 }, 0 },
3377 { "decQ", { Evh1 }, 0 },
9fef80d6 3378 { "call{&|}", { NOTRACK, indirEv, BND }, 0 },
4a357820 3379 { MOD_TABLE (MOD_FF_REG_3) },
9fef80d6 3380 { "jmp{&|}", { NOTRACK, indirEv, BND }, 0 },
4a357820 3381 { MOD_TABLE (MOD_FF_REG_5) },
bf890a93 3382 { "pushU", { stackEv }, 0 },
592d1631 3383 { Bad_Opcode },
252b5132 3384 },
1ceb70f8 3385 /* REG_0F00 */
252b5132 3386 {
bf890a93
IT
3387 { "sldtD", { Sv }, 0 },
3388 { "strD", { Sv }, 0 },
3389 { "lldt", { Ew }, 0 },
3390 { "ltr", { Ew }, 0 },
3391 { "verr", { Ew }, 0 },
3392 { "verw", { Ew }, 0 },
592d1631
L
3393 { Bad_Opcode },
3394 { Bad_Opcode },
252b5132 3395 },
1ceb70f8 3396 /* REG_0F01 */
252b5132 3397 {
1ceb70f8
L
3398 { MOD_TABLE (MOD_0F01_REG_0) },
3399 { MOD_TABLE (MOD_0F01_REG_1) },
3400 { MOD_TABLE (MOD_0F01_REG_2) },
3401 { MOD_TABLE (MOD_0F01_REG_3) },
bf890a93 3402 { "smswD", { Sv }, 0 },
8eab4136 3403 { MOD_TABLE (MOD_0F01_REG_5) },
bf890a93 3404 { "lmsw", { Ew }, 0 },
1ceb70f8 3405 { MOD_TABLE (MOD_0F01_REG_7) },
252b5132 3406 },
b5b1fc4f 3407 /* REG_0F0D */
252b5132 3408 {
bf890a93
IT
3409 { "prefetch", { Mb }, 0 },
3410 { "prefetchw", { Mb }, 0 },
3411 { "prefetchwt1", { Mb }, 0 },
3412 { "prefetch", { Mb }, 0 },
3413 { "prefetch", { Mb }, 0 },
3414 { "prefetch", { Mb }, 0 },
3415 { "prefetch", { Mb }, 0 },
3416 { "prefetch", { Mb }, 0 },
252b5132 3417 },
1ceb70f8 3418 /* REG_0F18 */
252b5132 3419 {
1ceb70f8
L
3420 { MOD_TABLE (MOD_0F18_REG_0) },
3421 { MOD_TABLE (MOD_0F18_REG_1) },
3422 { MOD_TABLE (MOD_0F18_REG_2) },
3423 { MOD_TABLE (MOD_0F18_REG_3) },
d7189fa5
RM
3424 { MOD_TABLE (MOD_0F18_REG_4) },
3425 { MOD_TABLE (MOD_0F18_REG_5) },
3426 { MOD_TABLE (MOD_0F18_REG_6) },
3427 { MOD_TABLE (MOD_0F18_REG_7) },
252b5132 3428 },
c48935d7
IT
3429 /* REG_0F1C_MOD_0 */
3430 {
3431 { "cldemote", { Mb }, 0 },
3432 { "nopQ", { Ev }, 0 },
3433 { "nopQ", { Ev }, 0 },
3434 { "nopQ", { Ev }, 0 },
3435 { "nopQ", { Ev }, 0 },
3436 { "nopQ", { Ev }, 0 },
3437 { "nopQ", { Ev }, 0 },
3438 { "nopQ", { Ev }, 0 },
3439 },
603555e5
L
3440 /* REG_0F1E_MOD_3 */
3441 {
3442 { "nopQ", { Ev }, 0 },
3443 { "rdsspK", { Rdq }, PREFIX_OPCODE },
3444 { "nopQ", { Ev }, 0 },
3445 { "nopQ", { Ev }, 0 },
3446 { "nopQ", { Ev }, 0 },
3447 { "nopQ", { Ev }, 0 },
3448 { "nopQ", { Ev }, 0 },
3449 { RM_TABLE (RM_0F1E_MOD_3_REG_7) },
3450 },
1ceb70f8 3451 /* REG_0F71 */
a6bd098c 3452 {
592d1631
L
3453 { Bad_Opcode },
3454 { Bad_Opcode },
1ceb70f8 3455 { MOD_TABLE (MOD_0F71_REG_2) },
592d1631 3456 { Bad_Opcode },
1ceb70f8 3457 { MOD_TABLE (MOD_0F71_REG_4) },
592d1631 3458 { Bad_Opcode },
1ceb70f8 3459 { MOD_TABLE (MOD_0F71_REG_6) },
a6bd098c 3460 },
1ceb70f8 3461 /* REG_0F72 */
a6bd098c 3462 {
592d1631
L
3463 { Bad_Opcode },
3464 { Bad_Opcode },
1ceb70f8 3465 { MOD_TABLE (MOD_0F72_REG_2) },
592d1631 3466 { Bad_Opcode },
1ceb70f8 3467 { MOD_TABLE (MOD_0F72_REG_4) },
592d1631 3468 { Bad_Opcode },
1ceb70f8 3469 { MOD_TABLE (MOD_0F72_REG_6) },
a6bd098c 3470 },
1ceb70f8 3471 /* REG_0F73 */
252b5132 3472 {
592d1631
L
3473 { Bad_Opcode },
3474 { Bad_Opcode },
1ceb70f8
L
3475 { MOD_TABLE (MOD_0F73_REG_2) },
3476 { MOD_TABLE (MOD_0F73_REG_3) },
592d1631
L
3477 { Bad_Opcode },
3478 { Bad_Opcode },
1ceb70f8
L
3479 { MOD_TABLE (MOD_0F73_REG_6) },
3480 { MOD_TABLE (MOD_0F73_REG_7) },
252b5132 3481 },
1ceb70f8 3482 /* REG_0FA6 */
252b5132 3483 {
bf890a93
IT
3484 { "montmul", { { OP_0f07, 0 } }, 0 },
3485 { "xsha1", { { OP_0f07, 0 } }, 0 },
3486 { "xsha256", { { OP_0f07, 0 } }, 0 },
4e7d34a6 3487 },
1ceb70f8 3488 /* REG_0FA7 */
4e7d34a6 3489 {
bf890a93
IT
3490 { "xstore-rng", { { OP_0f07, 0 } }, 0 },
3491 { "xcrypt-ecb", { { OP_0f07, 0 } }, 0 },
3492 { "xcrypt-cbc", { { OP_0f07, 0 } }, 0 },
3493 { "xcrypt-ctr", { { OP_0f07, 0 } }, 0 },
3494 { "xcrypt-cfb", { { OP_0f07, 0 } }, 0 },
3495 { "xcrypt-ofb", { { OP_0f07, 0 } }, 0 },
4e7d34a6 3496 },
1ceb70f8 3497 /* REG_0FAE */
4e7d34a6 3498 {
1ceb70f8
L
3499 { MOD_TABLE (MOD_0FAE_REG_0) },
3500 { MOD_TABLE (MOD_0FAE_REG_1) },
3501 { MOD_TABLE (MOD_0FAE_REG_2) },
3502 { MOD_TABLE (MOD_0FAE_REG_3) },
475a2301 3503 { MOD_TABLE (MOD_0FAE_REG_4) },
1ceb70f8
L
3504 { MOD_TABLE (MOD_0FAE_REG_5) },
3505 { MOD_TABLE (MOD_0FAE_REG_6) },
3506 { MOD_TABLE (MOD_0FAE_REG_7) },
252b5132 3507 },
1ceb70f8 3508 /* REG_0FBA */
252b5132 3509 {
592d1631
L
3510 { Bad_Opcode },
3511 { Bad_Opcode },
3512 { Bad_Opcode },
3513 { Bad_Opcode },
bf890a93
IT
3514 { "btQ", { Ev, Ib }, 0 },
3515 { "btsQ", { Evh1, Ib }, 0 },
3516 { "btrQ", { Evh1, Ib }, 0 },
3517 { "btcQ", { Evh1, Ib }, 0 },
c608c12e 3518 },
1ceb70f8 3519 /* REG_0FC7 */
c608c12e 3520 {
592d1631 3521 { Bad_Opcode },
bf890a93 3522 { "cmpxchg8b", { { CMPXCHG8B_Fixup, q_mode } }, 0 },
592d1631 3523 { Bad_Opcode },
963f3586
IT
3524 { MOD_TABLE (MOD_0FC7_REG_3) },
3525 { MOD_TABLE (MOD_0FC7_REG_4) },
3526 { MOD_TABLE (MOD_0FC7_REG_5) },
1ceb70f8
L
3527 { MOD_TABLE (MOD_0FC7_REG_6) },
3528 { MOD_TABLE (MOD_0FC7_REG_7) },
252b5132 3529 },
592a252b 3530 /* REG_VEX_0F71 */
c0f3af97 3531 {
592d1631
L
3532 { Bad_Opcode },
3533 { Bad_Opcode },
592a252b 3534 { MOD_TABLE (MOD_VEX_0F71_REG_2) },
592d1631 3535 { Bad_Opcode },
592a252b 3536 { MOD_TABLE (MOD_VEX_0F71_REG_4) },
592d1631 3537 { Bad_Opcode },
592a252b 3538 { MOD_TABLE (MOD_VEX_0F71_REG_6) },
c0f3af97 3539 },
592a252b 3540 /* REG_VEX_0F72 */
c0f3af97 3541 {
592d1631
L
3542 { Bad_Opcode },
3543 { Bad_Opcode },
592a252b 3544 { MOD_TABLE (MOD_VEX_0F72_REG_2) },
592d1631 3545 { Bad_Opcode },
592a252b 3546 { MOD_TABLE (MOD_VEX_0F72_REG_4) },
592d1631 3547 { Bad_Opcode },
592a252b 3548 { MOD_TABLE (MOD_VEX_0F72_REG_6) },
c0f3af97 3549 },
592a252b 3550 /* REG_VEX_0F73 */
c0f3af97 3551 {
592d1631
L
3552 { Bad_Opcode },
3553 { Bad_Opcode },
592a252b
L
3554 { MOD_TABLE (MOD_VEX_0F73_REG_2) },
3555 { MOD_TABLE (MOD_VEX_0F73_REG_3) },
592d1631
L
3556 { Bad_Opcode },
3557 { Bad_Opcode },
592a252b
L
3558 { MOD_TABLE (MOD_VEX_0F73_REG_6) },
3559 { MOD_TABLE (MOD_VEX_0F73_REG_7) },
c0f3af97 3560 },
592a252b 3561 /* REG_VEX_0FAE */
c0f3af97 3562 {
592d1631
L
3563 { Bad_Opcode },
3564 { Bad_Opcode },
592a252b
L
3565 { MOD_TABLE (MOD_VEX_0FAE_REG_2) },
3566 { MOD_TABLE (MOD_VEX_0FAE_REG_3) },
c0f3af97 3567 },
f12dc422
L
3568 /* REG_VEX_0F38F3 */
3569 {
3570 { Bad_Opcode },
3571 { PREFIX_TABLE (PREFIX_VEX_0F38F3_REG_1) },
3572 { PREFIX_TABLE (PREFIX_VEX_0F38F3_REG_2) },
3573 { PREFIX_TABLE (PREFIX_VEX_0F38F3_REG_3) },
3574 },
f88c9eb0
SP
3575 /* REG_XOP_LWPCB */
3576 {
bf890a93
IT
3577 { "llwpcb", { { OP_LWPCB_E, 0 } }, 0 },
3578 { "slwpcb", { { OP_LWPCB_E, 0 } }, 0 },
f88c9eb0
SP
3579 },
3580 /* REG_XOP_LWP */
3581 {
bf890a93
IT
3582 { "lwpins", { { OP_LWP_E, 0 }, Ed, Iq }, 0 },
3583 { "lwpval", { { OP_LWP_E, 0 }, Ed, Iq }, 0 },
f88c9eb0 3584 },
2a2a0f38
QN
3585 /* REG_XOP_TBM_01 */
3586 {
3587 { Bad_Opcode },
bf890a93
IT
3588 { "blcfill", { { OP_LWP_E, 0 }, Ev }, 0 },
3589 { "blsfill", { { OP_LWP_E, 0 }, Ev }, 0 },
3590 { "blcs", { { OP_LWP_E, 0 }, Ev }, 0 },
3591 { "tzmsk", { { OP_LWP_E, 0 }, Ev }, 0 },
3592 { "blcic", { { OP_LWP_E, 0 }, Ev }, 0 },
3593 { "blsic", { { OP_LWP_E, 0 }, Ev }, 0 },
3594 { "t1mskc", { { OP_LWP_E, 0 }, Ev }, 0 },
2a2a0f38
QN
3595 },
3596 /* REG_XOP_TBM_02 */
3597 {
3598 { Bad_Opcode },
bf890a93 3599 { "blcmsk", { { OP_LWP_E, 0 }, Ev }, 0 },
2a2a0f38
QN
3600 { Bad_Opcode },
3601 { Bad_Opcode },
3602 { Bad_Opcode },
3603 { Bad_Opcode },
bf890a93 3604 { "blci", { { OP_LWP_E, 0 }, Ev }, 0 },
2a2a0f38 3605 },
43234a1e
L
3606#define NEED_REG_TABLE
3607#include "i386-dis-evex.h"
3608#undef NEED_REG_TABLE
4e7d34a6
L
3609};
3610
1ceb70f8
L
3611static const struct dis386 prefix_table[][4] = {
3612 /* PREFIX_90 */
252b5132 3613 {
bf890a93
IT
3614 { "xchgS", { { NOP_Fixup1, eAX_reg }, { NOP_Fixup2, eAX_reg } }, 0 },
3615 { "pause", { XX }, 0 },
3616 { "xchgS", { { NOP_Fixup1, eAX_reg }, { NOP_Fixup2, eAX_reg } }, 0 },
507bd325 3617 { NULL, { { NULL, 0 } }, PREFIX_IGNORED }
0f10071e 3618 },
4e7d34a6 3619
603555e5
L
3620 /* PREFIX_MOD_0_0F01_REG_5 */
3621 {
3622 { Bad_Opcode },
3623 { "rstorssp", { Mq }, PREFIX_OPCODE },
3624 },
3625
2234eee6 3626 /* PREFIX_MOD_3_0F01_REG_5_RM_0 */
603555e5
L
3627 {
3628 { Bad_Opcode },
2234eee6 3629 { "setssbsy", { Skip_MODRM }, PREFIX_OPCODE },
603555e5
L
3630 },
3631
3632 /* PREFIX_MOD_3_0F01_REG_5_RM_2 */
3633 {
3634 { Bad_Opcode },
c2f76402 3635 { "saveprevssp", { Skip_MODRM }, PREFIX_OPCODE },
603555e5
L
3636 },
3637
3233d7d0
IT
3638 /* PREFIX_0F09 */
3639 {
3640 { "wbinvd", { XX }, 0 },
3641 { "wbnoinvd", { XX }, 0 },
3642 },
3643
1ceb70f8 3644 /* PREFIX_0F10 */
cc0ec051 3645 {
507bd325
L
3646 { "movups", { XM, EXx }, PREFIX_OPCODE },
3647 { "movss", { XM, EXd }, PREFIX_OPCODE },
3648 { "movupd", { XM, EXx }, PREFIX_OPCODE },
3649 { "movsd", { XM, EXq }, PREFIX_OPCODE },
30d1c836 3650 },
4e7d34a6 3651
1ceb70f8 3652 /* PREFIX_0F11 */
30d1c836 3653 {
507bd325
L
3654 { "movups", { EXxS, XM }, PREFIX_OPCODE },
3655 { "movss", { EXdS, XM }, PREFIX_OPCODE },
3656 { "movupd", { EXxS, XM }, PREFIX_OPCODE },
3657 { "movsd", { EXqS, XM }, PREFIX_OPCODE },
4e7d34a6 3658 },
252b5132 3659
1ceb70f8 3660 /* PREFIX_0F12 */
c608c12e 3661 {
1ceb70f8 3662 { MOD_TABLE (MOD_0F12_PREFIX_0) },
507bd325
L
3663 { "movsldup", { XM, EXx }, PREFIX_OPCODE },
3664 { "movlpd", { XM, EXq }, PREFIX_OPCODE },
3665 { "movddup", { XM, EXq }, PREFIX_OPCODE },
c608c12e 3666 },
4e7d34a6 3667
1ceb70f8 3668 /* PREFIX_0F16 */
c608c12e 3669 {
1ceb70f8 3670 { MOD_TABLE (MOD_0F16_PREFIX_0) },
507bd325
L
3671 { "movshdup", { XM, EXx }, PREFIX_OPCODE },
3672 { "movhpd", { XM, EXq }, PREFIX_OPCODE },
c608c12e 3673 },
4e7d34a6 3674
7e8b059b
L
3675 /* PREFIX_0F1A */
3676 {
3677 { MOD_TABLE (MOD_0F1A_PREFIX_0) },
bf890a93
IT
3678 { "bndcl", { Gbnd, Ev_bnd }, 0 },
3679 { "bndmov", { Gbnd, Ebnd }, 0 },
3680 { "bndcu", { Gbnd, Ev_bnd }, 0 },
7e8b059b
L
3681 },
3682
3683 /* PREFIX_0F1B */
3684 {
3685 { MOD_TABLE (MOD_0F1B_PREFIX_0) },
3686 { MOD_TABLE (MOD_0F1B_PREFIX_1) },
9f79e886 3687 { "bndmov", { EbndS, Gbnd }, 0 },
bf890a93 3688 { "bndcn", { Gbnd, Ev_bnd }, 0 },
7e8b059b
L
3689 },
3690
c48935d7
IT
3691 /* PREFIX_0F1C */
3692 {
3693 { MOD_TABLE (MOD_0F1C_PREFIX_0) },
3694 { "nopQ", { Ev }, PREFIX_OPCODE },
3695 { "nopQ", { Ev }, PREFIX_OPCODE },
3696 { "nopQ", { Ev }, PREFIX_OPCODE },
3697 },
3698
603555e5
L
3699 /* PREFIX_0F1E */
3700 {
3701 { "nopQ", { Ev }, PREFIX_OPCODE },
3702 { MOD_TABLE (MOD_0F1E_PREFIX_1) },
3703 { "nopQ", { Ev }, PREFIX_OPCODE },
3704 { "nopQ", { Ev }, PREFIX_OPCODE },
3705 },
3706
1ceb70f8 3707 /* PREFIX_0F2A */
c608c12e 3708 {
507bd325
L
3709 { "cvtpi2ps", { XM, EMCq }, PREFIX_OPCODE },
3710 { "cvtsi2ss%LQ", { XM, Ev }, PREFIX_OPCODE },
3711 { "cvtpi2pd", { XM, EMCq }, PREFIX_OPCODE },
bf890a93 3712 { "cvtsi2sd%LQ", { XM, Ev }, 0 },
c608c12e 3713 },
4e7d34a6 3714
1ceb70f8 3715 /* PREFIX_0F2B */
c608c12e 3716 {
75c135a8
L
3717 { MOD_TABLE (MOD_0F2B_PREFIX_0) },
3718 { MOD_TABLE (MOD_0F2B_PREFIX_1) },
3719 { MOD_TABLE (MOD_0F2B_PREFIX_2) },
3720 { MOD_TABLE (MOD_0F2B_PREFIX_3) },
c608c12e 3721 },
4e7d34a6 3722
1ceb70f8 3723 /* PREFIX_0F2C */
c608c12e 3724 {
507bd325 3725 { "cvttps2pi", { MXC, EXq }, PREFIX_OPCODE },
9646c87b 3726 { "cvttss2si", { Gv, EXd }, PREFIX_OPCODE },
507bd325 3727 { "cvttpd2pi", { MXC, EXx }, PREFIX_OPCODE },
9646c87b 3728 { "cvttsd2si", { Gv, EXq }, PREFIX_OPCODE },
c608c12e 3729 },
4e7d34a6 3730
1ceb70f8 3731 /* PREFIX_0F2D */
c608c12e 3732 {
507bd325 3733 { "cvtps2pi", { MXC, EXq }, PREFIX_OPCODE },
9646c87b 3734 { "cvtss2si", { Gv, EXd }, PREFIX_OPCODE },
507bd325 3735 { "cvtpd2pi", { MXC, EXx }, PREFIX_OPCODE },
9646c87b 3736 { "cvtsd2si", { Gv, EXq }, PREFIX_OPCODE },
c608c12e 3737 },
4e7d34a6 3738
1ceb70f8 3739 /* PREFIX_0F2E */
c608c12e 3740 {
bf890a93 3741 { "ucomiss",{ XM, EXd }, 0 },
592d1631 3742 { Bad_Opcode },
bf890a93 3743 { "ucomisd",{ XM, EXq }, 0 },
c608c12e 3744 },
4e7d34a6 3745
1ceb70f8 3746 /* PREFIX_0F2F */
c608c12e 3747 {
bf890a93 3748 { "comiss", { XM, EXd }, 0 },
592d1631 3749 { Bad_Opcode },
bf890a93 3750 { "comisd", { XM, EXq }, 0 },
c608c12e 3751 },
4e7d34a6 3752
1ceb70f8 3753 /* PREFIX_0F51 */
c608c12e 3754 {
507bd325
L
3755 { "sqrtps", { XM, EXx }, PREFIX_OPCODE },
3756 { "sqrtss", { XM, EXd }, PREFIX_OPCODE },
3757 { "sqrtpd", { XM, EXx }, PREFIX_OPCODE },
3758 { "sqrtsd", { XM, EXq }, PREFIX_OPCODE },
c608c12e 3759 },
4e7d34a6 3760
1ceb70f8 3761 /* PREFIX_0F52 */
c608c12e 3762 {
507bd325
L
3763 { "rsqrtps",{ XM, EXx }, PREFIX_OPCODE },
3764 { "rsqrtss",{ XM, EXd }, PREFIX_OPCODE },
c608c12e 3765 },
4e7d34a6 3766
1ceb70f8 3767 /* PREFIX_0F53 */
c608c12e 3768 {
507bd325
L
3769 { "rcpps", { XM, EXx }, PREFIX_OPCODE },
3770 { "rcpss", { XM, EXd }, PREFIX_OPCODE },
c608c12e 3771 },
4e7d34a6 3772
1ceb70f8 3773 /* PREFIX_0F58 */
c608c12e 3774 {
507bd325
L
3775 { "addps", { XM, EXx }, PREFIX_OPCODE },
3776 { "addss", { XM, EXd }, PREFIX_OPCODE },
3777 { "addpd", { XM, EXx }, PREFIX_OPCODE },
3778 { "addsd", { XM, EXq }, PREFIX_OPCODE },
c608c12e 3779 },
4e7d34a6 3780
1ceb70f8 3781 /* PREFIX_0F59 */
c608c12e 3782 {
507bd325
L
3783 { "mulps", { XM, EXx }, PREFIX_OPCODE },
3784 { "mulss", { XM, EXd }, PREFIX_OPCODE },
3785 { "mulpd", { XM, EXx }, PREFIX_OPCODE },
3786 { "mulsd", { XM, EXq }, PREFIX_OPCODE },
041bd2e0 3787 },
4e7d34a6 3788
1ceb70f8 3789 /* PREFIX_0F5A */
041bd2e0 3790 {
507bd325
L
3791 { "cvtps2pd", { XM, EXq }, PREFIX_OPCODE },
3792 { "cvtss2sd", { XM, EXd }, PREFIX_OPCODE },
3793 { "cvtpd2ps", { XM, EXx }, PREFIX_OPCODE },
3794 { "cvtsd2ss", { XM, EXq }, PREFIX_OPCODE },
041bd2e0 3795 },
4e7d34a6 3796
1ceb70f8 3797 /* PREFIX_0F5B */
041bd2e0 3798 {
507bd325
L
3799 { "cvtdq2ps", { XM, EXx }, PREFIX_OPCODE },
3800 { "cvttps2dq", { XM, EXx }, PREFIX_OPCODE },
3801 { "cvtps2dq", { XM, EXx }, PREFIX_OPCODE },
041bd2e0 3802 },
4e7d34a6 3803
1ceb70f8 3804 /* PREFIX_0F5C */
041bd2e0 3805 {
507bd325
L
3806 { "subps", { XM, EXx }, PREFIX_OPCODE },
3807 { "subss", { XM, EXd }, PREFIX_OPCODE },
3808 { "subpd", { XM, EXx }, PREFIX_OPCODE },
3809 { "subsd", { XM, EXq }, PREFIX_OPCODE },
041bd2e0 3810 },
4e7d34a6 3811
1ceb70f8 3812 /* PREFIX_0F5D */
041bd2e0 3813 {
507bd325
L
3814 { "minps", { XM, EXx }, PREFIX_OPCODE },
3815 { "minss", { XM, EXd }, PREFIX_OPCODE },
3816 { "minpd", { XM, EXx }, PREFIX_OPCODE },
3817 { "minsd", { XM, EXq }, PREFIX_OPCODE },
041bd2e0 3818 },
4e7d34a6 3819
1ceb70f8 3820 /* PREFIX_0F5E */
041bd2e0 3821 {
507bd325
L
3822 { "divps", { XM, EXx }, PREFIX_OPCODE },
3823 { "divss", { XM, EXd }, PREFIX_OPCODE },
3824 { "divpd", { XM, EXx }, PREFIX_OPCODE },
3825 { "divsd", { XM, EXq }, PREFIX_OPCODE },
041bd2e0 3826 },
4e7d34a6 3827
1ceb70f8 3828 /* PREFIX_0F5F */
041bd2e0 3829 {
507bd325
L
3830 { "maxps", { XM, EXx }, PREFIX_OPCODE },
3831 { "maxss", { XM, EXd }, PREFIX_OPCODE },
3832 { "maxpd", { XM, EXx }, PREFIX_OPCODE },
3833 { "maxsd", { XM, EXq }, PREFIX_OPCODE },
041bd2e0 3834 },
4e7d34a6 3835
1ceb70f8 3836 /* PREFIX_0F60 */
041bd2e0 3837 {
507bd325 3838 { "punpcklbw",{ MX, EMd }, PREFIX_OPCODE },
592d1631 3839 { Bad_Opcode },
507bd325 3840 { "punpcklbw",{ MX, EMx }, PREFIX_OPCODE },
041bd2e0 3841 },
4e7d34a6 3842
1ceb70f8 3843 /* PREFIX_0F61 */
041bd2e0 3844 {
507bd325 3845 { "punpcklwd",{ MX, EMd }, PREFIX_OPCODE },
592d1631 3846 { Bad_Opcode },
507bd325 3847 { "punpcklwd",{ MX, EMx }, PREFIX_OPCODE },
041bd2e0 3848 },
4e7d34a6 3849
1ceb70f8 3850 /* PREFIX_0F62 */
041bd2e0 3851 {
507bd325 3852 { "punpckldq",{ MX, EMd }, PREFIX_OPCODE },
592d1631 3853 { Bad_Opcode },
507bd325 3854 { "punpckldq",{ MX, EMx }, PREFIX_OPCODE },
041bd2e0 3855 },
4e7d34a6 3856
1ceb70f8 3857 /* PREFIX_0F6C */
041bd2e0 3858 {
592d1631
L
3859 { Bad_Opcode },
3860 { Bad_Opcode },
507bd325 3861 { "punpcklqdq", { XM, EXx }, PREFIX_OPCODE },
0f17484f 3862 },
4e7d34a6 3863
1ceb70f8 3864 /* PREFIX_0F6D */
0f17484f 3865 {
592d1631
L
3866 { Bad_Opcode },
3867 { Bad_Opcode },
507bd325 3868 { "punpckhqdq", { XM, EXx }, PREFIX_OPCODE },
041bd2e0 3869 },
4e7d34a6 3870
1ceb70f8 3871 /* PREFIX_0F6F */
ca164297 3872 {
507bd325
L
3873 { "movq", { MX, EM }, PREFIX_OPCODE },
3874 { "movdqu", { XM, EXx }, PREFIX_OPCODE },
3875 { "movdqa", { XM, EXx }, PREFIX_OPCODE },
ca164297 3876 },
4e7d34a6 3877
1ceb70f8 3878 /* PREFIX_0F70 */
4e7d34a6 3879 {
507bd325
L
3880 { "pshufw", { MX, EM, Ib }, PREFIX_OPCODE },
3881 { "pshufhw",{ XM, EXx, Ib }, PREFIX_OPCODE },
3882 { "pshufd", { XM, EXx, Ib }, PREFIX_OPCODE },
3883 { "pshuflw",{ XM, EXx, Ib }, PREFIX_OPCODE },
4e7d34a6
L
3884 },
3885
92fddf8e
L
3886 /* PREFIX_0F73_REG_3 */
3887 {
592d1631
L
3888 { Bad_Opcode },
3889 { Bad_Opcode },
bf890a93 3890 { "psrldq", { XS, Ib }, 0 },
92fddf8e
L
3891 },
3892
3893 /* PREFIX_0F73_REG_7 */
3894 {
592d1631
L
3895 { Bad_Opcode },
3896 { Bad_Opcode },
bf890a93 3897 { "pslldq", { XS, Ib }, 0 },
92fddf8e
L
3898 },
3899
1ceb70f8 3900 /* PREFIX_0F78 */
4e7d34a6 3901 {
bf890a93 3902 {"vmread", { Em, Gm }, 0 },
592d1631 3903 { Bad_Opcode },
bf890a93
IT
3904 {"extrq", { XS, Ib, Ib }, 0 },
3905 {"insertq", { XM, XS, Ib, Ib }, 0 },
4e7d34a6
L
3906 },
3907
1ceb70f8 3908 /* PREFIX_0F79 */
4e7d34a6 3909 {
bf890a93 3910 {"vmwrite", { Gm, Em }, 0 },
592d1631 3911 { Bad_Opcode },
bf890a93
IT
3912 {"extrq", { XM, XS }, 0 },
3913 {"insertq", { XM, XS }, 0 },
4e7d34a6
L
3914 },
3915
1ceb70f8 3916 /* PREFIX_0F7C */
ca164297 3917 {
592d1631
L
3918 { Bad_Opcode },
3919 { Bad_Opcode },
507bd325
L
3920 { "haddpd", { XM, EXx }, PREFIX_OPCODE },
3921 { "haddps", { XM, EXx }, PREFIX_OPCODE },
ca164297 3922 },
4e7d34a6 3923
1ceb70f8 3924 /* PREFIX_0F7D */
ca164297 3925 {
592d1631
L
3926 { Bad_Opcode },
3927 { Bad_Opcode },
507bd325
L
3928 { "hsubpd", { XM, EXx }, PREFIX_OPCODE },
3929 { "hsubps", { XM, EXx }, PREFIX_OPCODE },
ca164297 3930 },
4e7d34a6 3931
1ceb70f8 3932 /* PREFIX_0F7E */
ca164297 3933 {
507bd325
L
3934 { "movK", { Edq, MX }, PREFIX_OPCODE },
3935 { "movq", { XM, EXq }, PREFIX_OPCODE },
3936 { "movK", { Edq, XM }, PREFIX_OPCODE },
ca164297 3937 },
4e7d34a6 3938
1ceb70f8 3939 /* PREFIX_0F7F */
ca164297 3940 {
507bd325
L
3941 { "movq", { EMS, MX }, PREFIX_OPCODE },
3942 { "movdqu", { EXxS, XM }, PREFIX_OPCODE },
3943 { "movdqa", { EXxS, XM }, PREFIX_OPCODE },
ca164297 3944 },
4e7d34a6 3945
c7b8aa3a
L
3946 /* PREFIX_0FAE_REG_0 */
3947 {
3948 { Bad_Opcode },
bf890a93 3949 { "rdfsbase", { Ev }, 0 },
c7b8aa3a
L
3950 },
3951
3952 /* PREFIX_0FAE_REG_1 */
3953 {
3954 { Bad_Opcode },
bf890a93 3955 { "rdgsbase", { Ev }, 0 },
c7b8aa3a
L
3956 },
3957
3958 /* PREFIX_0FAE_REG_2 */
3959 {
3960 { Bad_Opcode },
bf890a93 3961 { "wrfsbase", { Ev }, 0 },
c7b8aa3a
L
3962 },
3963
3964 /* PREFIX_0FAE_REG_3 */
3965 {
3966 { Bad_Opcode },
bf890a93 3967 { "wrgsbase", { Ev }, 0 },
c7b8aa3a
L
3968 },
3969
6b40c462
L
3970 /* PREFIX_MOD_0_0FAE_REG_4 */
3971 {
3972 { "xsave", { FXSAVE }, 0 },
3973 { "ptwrite%LQ", { Edq }, 0 },
3974 },
3975
3976 /* PREFIX_MOD_3_0FAE_REG_4 */
3977 {
3978 { Bad_Opcode },
3979 { "ptwrite%LQ", { Edq }, 0 },
3980 },
3981
603555e5
L
3982 /* PREFIX_MOD_0_0FAE_REG_5 */
3983 {
3984 { "xrstor", { FXSAVE }, PREFIX_OPCODE },
2234eee6
L
3985 },
3986
3987 /* PREFIX_MOD_3_0FAE_REG_5 */
3988 {
3989 { "lfence", { Skip_MODRM }, 0 },
3990 { "incsspK", { Rdq }, PREFIX_OPCODE },
603555e5
L
3991 },
3992
de89d0a3 3993 /* PREFIX_MOD_0_0FAE_REG_6 */
c5e7287a 3994 {
603555e5
L
3995 { "xsaveopt", { FXSAVE }, PREFIX_OPCODE },
3996 { "clrssbsy", { Mq }, PREFIX_OPCODE },
3997 { "clwb", { Mb }, PREFIX_OPCODE },
c5e7287a
IT
3998 },
3999
de89d0a3
IT
4000 /* PREFIX_MOD_1_0FAE_REG_6 */
4001 {
4002 { RM_TABLE (RM_0FAE_REG_6) },
4003 { "umonitor", { Eva }, PREFIX_OPCODE },
ae1d3843
L
4004 { "tpause", { Edq }, PREFIX_OPCODE },
4005 { "umwait", { Edq }, PREFIX_OPCODE },
de89d0a3
IT
4006 },
4007
963f3586
IT
4008 /* PREFIX_0FAE_REG_7 */
4009 {
bf890a93 4010 { "clflush", { Mb }, 0 },
963f3586 4011 { Bad_Opcode },
bf890a93 4012 { "clflushopt", { Mb }, 0 },
963f3586
IT
4013 },
4014
1ceb70f8 4015 /* PREFIX_0FB8 */
ca164297 4016 {
592d1631 4017 { Bad_Opcode },
bf890a93 4018 { "popcntS", { Gv, Ev }, 0 },
ca164297 4019 },
4e7d34a6 4020
f12dc422
L
4021 /* PREFIX_0FBC */
4022 {
bf890a93
IT
4023 { "bsfS", { Gv, Ev }, 0 },
4024 { "tzcntS", { Gv, Ev }, 0 },
4025 { "bsfS", { Gv, Ev }, 0 },
f12dc422
L
4026 },
4027
1ceb70f8 4028 /* PREFIX_0FBD */
050dfa73 4029 {
bf890a93
IT
4030 { "bsrS", { Gv, Ev }, 0 },
4031 { "lzcntS", { Gv, Ev }, 0 },
4032 { "bsrS", { Gv, Ev }, 0 },
050dfa73
MM
4033 },
4034
1ceb70f8 4035 /* PREFIX_0FC2 */
050dfa73 4036 {
507bd325
L
4037 { "cmpps", { XM, EXx, CMP }, PREFIX_OPCODE },
4038 { "cmpss", { XM, EXd, CMP }, PREFIX_OPCODE },
4039 { "cmppd", { XM, EXx, CMP }, PREFIX_OPCODE },
4040 { "cmpsd", { XM, EXq, CMP }, PREFIX_OPCODE },
050dfa73 4041 },
246c51aa 4042
a8484f96 4043 /* PREFIX_MOD_0_0FC3 */
4ee52178 4044 {
a8484f96 4045 { "movntiS", { Ev, Gv }, PREFIX_OPCODE },
4ee52178
L
4046 },
4047
f24bcbaa 4048 /* PREFIX_MOD_0_0FC7_REG_6 */
92fddf8e 4049 {
bf890a93
IT
4050 { "vmptrld",{ Mq }, 0 },
4051 { "vmxon", { Mq }, 0 },
4052 { "vmclear",{ Mq }, 0 },
92fddf8e
L
4053 },
4054
f24bcbaa
L
4055 /* PREFIX_MOD_3_0FC7_REG_6 */
4056 {
4057 { "rdrand", { Ev }, 0 },
4058 { Bad_Opcode },
4059 { "rdrand", { Ev }, 0 }
4060 },
4061
4062 /* PREFIX_MOD_3_0FC7_REG_7 */
4063 {
4064 { "rdseed", { Ev }, 0 },
8bc52696 4065 { "rdpid", { Em }, 0 },
f24bcbaa
L
4066 { "rdseed", { Ev }, 0 },
4067 },
4068
1ceb70f8 4069 /* PREFIX_0FD0 */
050dfa73 4070 {
592d1631
L
4071 { Bad_Opcode },
4072 { Bad_Opcode },
bf890a93
IT
4073 { "addsubpd", { XM, EXx }, 0 },
4074 { "addsubps", { XM, EXx }, 0 },
246c51aa 4075 },
050dfa73 4076
1ceb70f8 4077 /* PREFIX_0FD6 */
050dfa73 4078 {
592d1631 4079 { Bad_Opcode },
bf890a93
IT
4080 { "movq2dq",{ XM, MS }, 0 },
4081 { "movq", { EXqS, XM }, 0 },
4082 { "movdq2q",{ MX, XS }, 0 },
050dfa73
MM
4083 },
4084
1ceb70f8 4085 /* PREFIX_0FE6 */
7918206c 4086 {
592d1631 4087 { Bad_Opcode },
507bd325
L
4088 { "cvtdq2pd", { XM, EXq }, PREFIX_OPCODE },
4089 { "cvttpd2dq", { XM, EXx }, PREFIX_OPCODE },
4090 { "cvtpd2dq", { XM, EXx }, PREFIX_OPCODE },
7918206c 4091 },
8b38ad71 4092
1ceb70f8 4093 /* PREFIX_0FE7 */
8b38ad71 4094 {
507bd325 4095 { "movntq", { Mq, MX }, PREFIX_OPCODE },
592d1631 4096 { Bad_Opcode },
75c135a8 4097 { MOD_TABLE (MOD_0FE7_PREFIX_2) },
4e7d34a6
L
4098 },
4099
1ceb70f8 4100 /* PREFIX_0FF0 */
4e7d34a6 4101 {
592d1631
L
4102 { Bad_Opcode },
4103 { Bad_Opcode },
4104 { Bad_Opcode },
1ceb70f8 4105 { MOD_TABLE (MOD_0FF0_PREFIX_3) },
4e7d34a6
L
4106 },
4107
1ceb70f8 4108 /* PREFIX_0FF7 */
4e7d34a6 4109 {
507bd325 4110 { "maskmovq", { MX, MS }, PREFIX_OPCODE },
592d1631 4111 { Bad_Opcode },
507bd325 4112 { "maskmovdqu", { XM, XS }, PREFIX_OPCODE },
8b38ad71 4113 },
42903f7f 4114
1ceb70f8 4115 /* PREFIX_0F3810 */
42903f7f 4116 {
592d1631
L
4117 { Bad_Opcode },
4118 { Bad_Opcode },
507bd325 4119 { "pblendvb", { XM, EXx, XMM0 }, PREFIX_OPCODE },
42903f7f
L
4120 },
4121
1ceb70f8 4122 /* PREFIX_0F3814 */
42903f7f 4123 {
592d1631
L
4124 { Bad_Opcode },
4125 { Bad_Opcode },
507bd325 4126 { "blendvps", { XM, EXx, XMM0 }, PREFIX_OPCODE },
42903f7f
L
4127 },
4128
1ceb70f8 4129 /* PREFIX_0F3815 */
42903f7f 4130 {
592d1631
L
4131 { Bad_Opcode },
4132 { Bad_Opcode },
507bd325 4133 { "blendvpd", { XM, EXx, XMM0 }, PREFIX_OPCODE },
42903f7f
L
4134 },
4135
1ceb70f8 4136 /* PREFIX_0F3817 */
42903f7f 4137 {
592d1631
L
4138 { Bad_Opcode },
4139 { Bad_Opcode },
507bd325 4140 { "ptest", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4141 },
4142
1ceb70f8 4143 /* PREFIX_0F3820 */
42903f7f 4144 {
592d1631
L
4145 { Bad_Opcode },
4146 { Bad_Opcode },
507bd325 4147 { "pmovsxbw", { XM, EXq }, PREFIX_OPCODE },
42903f7f
L
4148 },
4149
1ceb70f8 4150 /* PREFIX_0F3821 */
42903f7f 4151 {
592d1631
L
4152 { Bad_Opcode },
4153 { Bad_Opcode },
507bd325 4154 { "pmovsxbd", { XM, EXd }, PREFIX_OPCODE },
42903f7f
L
4155 },
4156
1ceb70f8 4157 /* PREFIX_0F3822 */
42903f7f 4158 {
592d1631
L
4159 { Bad_Opcode },
4160 { Bad_Opcode },
507bd325 4161 { "pmovsxbq", { XM, EXw }, PREFIX_OPCODE },
42903f7f
L
4162 },
4163
1ceb70f8 4164 /* PREFIX_0F3823 */
42903f7f 4165 {
592d1631
L
4166 { Bad_Opcode },
4167 { Bad_Opcode },
507bd325 4168 { "pmovsxwd", { XM, EXq }, PREFIX_OPCODE },
42903f7f
L
4169 },
4170
1ceb70f8 4171 /* PREFIX_0F3824 */
42903f7f 4172 {
592d1631
L
4173 { Bad_Opcode },
4174 { Bad_Opcode },
507bd325 4175 { "pmovsxwq", { XM, EXd }, PREFIX_OPCODE },
42903f7f
L
4176 },
4177
1ceb70f8 4178 /* PREFIX_0F3825 */
42903f7f 4179 {
592d1631
L
4180 { Bad_Opcode },
4181 { Bad_Opcode },
507bd325 4182 { "pmovsxdq", { XM, EXq }, PREFIX_OPCODE },
42903f7f
L
4183 },
4184
1ceb70f8 4185 /* PREFIX_0F3828 */
42903f7f 4186 {
592d1631
L
4187 { Bad_Opcode },
4188 { Bad_Opcode },
507bd325 4189 { "pmuldq", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4190 },
4191
1ceb70f8 4192 /* PREFIX_0F3829 */
42903f7f 4193 {
592d1631
L
4194 { Bad_Opcode },
4195 { Bad_Opcode },
507bd325 4196 { "pcmpeqq", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4197 },
4198
1ceb70f8 4199 /* PREFIX_0F382A */
42903f7f 4200 {
592d1631
L
4201 { Bad_Opcode },
4202 { Bad_Opcode },
75c135a8 4203 { MOD_TABLE (MOD_0F382A_PREFIX_2) },
42903f7f
L
4204 },
4205
1ceb70f8 4206 /* PREFIX_0F382B */
42903f7f 4207 {
592d1631
L
4208 { Bad_Opcode },
4209 { Bad_Opcode },
507bd325 4210 { "packusdw", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4211 },
4212
1ceb70f8 4213 /* PREFIX_0F3830 */
42903f7f 4214 {
592d1631
L
4215 { Bad_Opcode },
4216 { Bad_Opcode },
507bd325 4217 { "pmovzxbw", { XM, EXq }, PREFIX_OPCODE },
42903f7f
L
4218 },
4219
1ceb70f8 4220 /* PREFIX_0F3831 */
42903f7f 4221 {
592d1631
L
4222 { Bad_Opcode },
4223 { Bad_Opcode },
507bd325 4224 { "pmovzxbd", { XM, EXd }, PREFIX_OPCODE },
42903f7f
L
4225 },
4226
1ceb70f8 4227 /* PREFIX_0F3832 */
42903f7f 4228 {
592d1631
L
4229 { Bad_Opcode },
4230 { Bad_Opcode },
507bd325 4231 { "pmovzxbq", { XM, EXw }, PREFIX_OPCODE },
42903f7f
L
4232 },
4233
1ceb70f8 4234 /* PREFIX_0F3833 */
42903f7f 4235 {
592d1631
L
4236 { Bad_Opcode },
4237 { Bad_Opcode },
507bd325 4238 { "pmovzxwd", { XM, EXq }, PREFIX_OPCODE },
42903f7f
L
4239 },
4240
1ceb70f8 4241 /* PREFIX_0F3834 */
42903f7f 4242 {
592d1631
L
4243 { Bad_Opcode },
4244 { Bad_Opcode },
507bd325 4245 { "pmovzxwq", { XM, EXd }, PREFIX_OPCODE },
42903f7f
L
4246 },
4247
1ceb70f8 4248 /* PREFIX_0F3835 */
42903f7f 4249 {
592d1631
L
4250 { Bad_Opcode },
4251 { Bad_Opcode },
507bd325 4252 { "pmovzxdq", { XM, EXq }, PREFIX_OPCODE },
42903f7f
L
4253 },
4254
1ceb70f8 4255 /* PREFIX_0F3837 */
4e7d34a6 4256 {
592d1631
L
4257 { Bad_Opcode },
4258 { Bad_Opcode },
507bd325 4259 { "pcmpgtq", { XM, EXx }, PREFIX_OPCODE },
4e7d34a6
L
4260 },
4261
1ceb70f8 4262 /* PREFIX_0F3838 */
42903f7f 4263 {
592d1631
L
4264 { Bad_Opcode },
4265 { Bad_Opcode },
507bd325 4266 { "pminsb", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4267 },
4268
1ceb70f8 4269 /* PREFIX_0F3839 */
42903f7f 4270 {
592d1631
L
4271 { Bad_Opcode },
4272 { Bad_Opcode },
507bd325 4273 { "pminsd", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4274 },
4275
1ceb70f8 4276 /* PREFIX_0F383A */
42903f7f 4277 {
592d1631
L
4278 { Bad_Opcode },
4279 { Bad_Opcode },
507bd325 4280 { "pminuw", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4281 },
4282
1ceb70f8 4283 /* PREFIX_0F383B */
42903f7f 4284 {
592d1631
L
4285 { Bad_Opcode },
4286 { Bad_Opcode },
507bd325 4287 { "pminud", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4288 },
4289
1ceb70f8 4290 /* PREFIX_0F383C */
42903f7f 4291 {
592d1631
L
4292 { Bad_Opcode },
4293 { Bad_Opcode },
507bd325 4294 { "pmaxsb", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4295 },
4296
1ceb70f8 4297 /* PREFIX_0F383D */
42903f7f 4298 {
592d1631
L
4299 { Bad_Opcode },
4300 { Bad_Opcode },
507bd325 4301 { "pmaxsd", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4302 },
4303
1ceb70f8 4304 /* PREFIX_0F383E */
42903f7f 4305 {
592d1631
L
4306 { Bad_Opcode },
4307 { Bad_Opcode },
507bd325 4308 { "pmaxuw", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4309 },
4310
1ceb70f8 4311 /* PREFIX_0F383F */
42903f7f 4312 {
592d1631
L
4313 { Bad_Opcode },
4314 { Bad_Opcode },
507bd325 4315 { "pmaxud", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4316 },
4317
1ceb70f8 4318 /* PREFIX_0F3840 */
42903f7f 4319 {
592d1631
L
4320 { Bad_Opcode },
4321 { Bad_Opcode },
507bd325 4322 { "pmulld", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4323 },
4324
1ceb70f8 4325 /* PREFIX_0F3841 */
42903f7f 4326 {
592d1631
L
4327 { Bad_Opcode },
4328 { Bad_Opcode },
507bd325 4329 { "phminposuw", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4330 },
4331
f1f8f695
L
4332 /* PREFIX_0F3880 */
4333 {
592d1631
L
4334 { Bad_Opcode },
4335 { Bad_Opcode },
507bd325 4336 { "invept", { Gm, Mo }, PREFIX_OPCODE },
f1f8f695
L
4337 },
4338
4339 /* PREFIX_0F3881 */
4340 {
592d1631
L
4341 { Bad_Opcode },
4342 { Bad_Opcode },
507bd325 4343 { "invvpid", { Gm, Mo }, PREFIX_OPCODE },
f1f8f695
L
4344 },
4345
6c30d220
L
4346 /* PREFIX_0F3882 */
4347 {
4348 { Bad_Opcode },
4349 { Bad_Opcode },
507bd325 4350 { "invpcid", { Gm, M }, PREFIX_OPCODE },
6c30d220
L
4351 },
4352
a0046408
L
4353 /* PREFIX_0F38C8 */
4354 {
507bd325 4355 { "sha1nexte", { XM, EXxmm }, PREFIX_OPCODE },
a0046408
L
4356 },
4357
4358 /* PREFIX_0F38C9 */
4359 {
507bd325 4360 { "sha1msg1", { XM, EXxmm }, PREFIX_OPCODE },
a0046408
L
4361 },
4362
4363 /* PREFIX_0F38CA */
4364 {
507bd325 4365 { "sha1msg2", { XM, EXxmm }, PREFIX_OPCODE },
a0046408
L
4366 },
4367
4368 /* PREFIX_0F38CB */
4369 {
507bd325 4370 { "sha256rnds2", { XM, EXxmm, XMM0 }, PREFIX_OPCODE },
a0046408
L
4371 },
4372
4373 /* PREFIX_0F38CC */
4374 {
507bd325 4375 { "sha256msg1", { XM, EXxmm }, PREFIX_OPCODE },
a0046408
L
4376 },
4377
4378 /* PREFIX_0F38CD */
4379 {
507bd325 4380 { "sha256msg2", { XM, EXxmm }, PREFIX_OPCODE },
a0046408
L
4381 },
4382
48521003
IT
4383 /* PREFIX_0F38CF */
4384 {
4385 { Bad_Opcode },
4386 { Bad_Opcode },
4387 { "gf2p8mulb", { XM, EXxmm }, PREFIX_OPCODE },
4388 },
4389
c0f3af97
L
4390 /* PREFIX_0F38DB */
4391 {
592d1631
L
4392 { Bad_Opcode },
4393 { Bad_Opcode },
507bd325 4394 { "aesimc", { XM, EXx }, PREFIX_OPCODE },
c0f3af97
L
4395 },
4396
4397 /* PREFIX_0F38DC */
4398 {
592d1631
L
4399 { Bad_Opcode },
4400 { Bad_Opcode },
507bd325 4401 { "aesenc", { XM, EXx }, PREFIX_OPCODE },
c0f3af97
L
4402 },
4403
4404 /* PREFIX_0F38DD */
4405 {
592d1631
L
4406 { Bad_Opcode },
4407 { Bad_Opcode },
507bd325 4408 { "aesenclast", { XM, EXx }, PREFIX_OPCODE },
c0f3af97
L
4409 },
4410
4411 /* PREFIX_0F38DE */
4412 {
592d1631
L
4413 { Bad_Opcode },
4414 { Bad_Opcode },
507bd325 4415 { "aesdec", { XM, EXx }, PREFIX_OPCODE },
c0f3af97
L
4416 },
4417
4418 /* PREFIX_0F38DF */
4419 {
592d1631
L
4420 { Bad_Opcode },
4421 { Bad_Opcode },
507bd325 4422 { "aesdeclast", { XM, EXx }, PREFIX_OPCODE },
c0f3af97
L
4423 },
4424
1ceb70f8 4425 /* PREFIX_0F38F0 */
4e7d34a6 4426 {
507bd325 4427 { "movbeS", { Gv, { MOVBE_Fixup, v_mode } }, PREFIX_OPCODE },
592d1631 4428 { Bad_Opcode },
507bd325
L
4429 { "movbeS", { Gv, { MOVBE_Fixup, v_mode } }, PREFIX_OPCODE },
4430 { "crc32", { Gdq, { CRC32_Fixup, b_mode } }, PREFIX_OPCODE },
4e7d34a6
L
4431 },
4432
1ceb70f8 4433 /* PREFIX_0F38F1 */
4e7d34a6 4434 {
507bd325 4435 { "movbeS", { { MOVBE_Fixup, v_mode }, Gv }, PREFIX_OPCODE },
592d1631 4436 { Bad_Opcode },
507bd325
L
4437 { "movbeS", { { MOVBE_Fixup, v_mode }, Gv }, PREFIX_OPCODE },
4438 { "crc32", { Gdq, { CRC32_Fixup, v_mode } }, PREFIX_OPCODE },
4e7d34a6
L
4439 },
4440
603555e5 4441 /* PREFIX_0F38F5 */
e2e1fcde
L
4442 {
4443 { Bad_Opcode },
603555e5
L
4444 { Bad_Opcode },
4445 { MOD_TABLE (MOD_0F38F5_PREFIX_2) },
4446 },
4447
4448 /* PREFIX_0F38F6 */
4449 {
4450 { MOD_TABLE (MOD_0F38F6_PREFIX_0) },
507bd325
L
4451 { "adoxS", { Gdq, Edq}, PREFIX_OPCODE },
4452 { "adcxS", { Gdq, Edq}, PREFIX_OPCODE },
e2e1fcde
L
4453 { Bad_Opcode },
4454 },
4455
c0a30a9f
L
4456 /* PREFIX_0F38F8 */
4457 {
4458 { Bad_Opcode },
5d79adc4 4459 { MOD_TABLE (MOD_0F38F8_PREFIX_1) },
c0a30a9f 4460 { MOD_TABLE (MOD_0F38F8_PREFIX_2) },
5d79adc4 4461 { MOD_TABLE (MOD_0F38F8_PREFIX_3) },
c0a30a9f
L
4462 },
4463
4464 /* PREFIX_0F38F9 */
4465 {
4466 { MOD_TABLE (MOD_0F38F9_PREFIX_0) },
4467 },
4468
1ceb70f8 4469 /* PREFIX_0F3A08 */
42903f7f 4470 {
592d1631
L
4471 { Bad_Opcode },
4472 { Bad_Opcode },
507bd325 4473 { "roundps", { XM, EXx, Ib }, PREFIX_OPCODE },
42903f7f
L
4474 },
4475
1ceb70f8 4476 /* PREFIX_0F3A09 */
42903f7f 4477 {
592d1631
L
4478 { Bad_Opcode },
4479 { Bad_Opcode },
507bd325 4480 { "roundpd", { XM, EXx, Ib }, PREFIX_OPCODE },
42903f7f
L
4481 },
4482
1ceb70f8 4483 /* PREFIX_0F3A0A */
42903f7f 4484 {
592d1631
L
4485 { Bad_Opcode },
4486 { Bad_Opcode },
507bd325 4487 { "roundss", { XM, EXd, Ib }, PREFIX_OPCODE },
42903f7f
L
4488 },
4489
1ceb70f8 4490 /* PREFIX_0F3A0B */
42903f7f 4491 {
592d1631
L
4492 { Bad_Opcode },
4493 { Bad_Opcode },
507bd325 4494 { "roundsd", { XM, EXq, Ib }, PREFIX_OPCODE },
42903f7f
L
4495 },
4496
1ceb70f8 4497 /* PREFIX_0F3A0C */
42903f7f 4498 {
592d1631
L
4499 { Bad_Opcode },
4500 { Bad_Opcode },
507bd325 4501 { "blendps", { XM, EXx, Ib }, PREFIX_OPCODE },
42903f7f
L
4502 },
4503
1ceb70f8 4504 /* PREFIX_0F3A0D */
42903f7f 4505 {
592d1631
L
4506 { Bad_Opcode },
4507 { Bad_Opcode },
507bd325 4508 { "blendpd", { XM, EXx, Ib }, PREFIX_OPCODE },
42903f7f
L
4509 },
4510
1ceb70f8 4511 /* PREFIX_0F3A0E */
42903f7f 4512 {
592d1631
L
4513 { Bad_Opcode },
4514 { Bad_Opcode },
507bd325 4515 { "pblendw", { XM, EXx, Ib }, PREFIX_OPCODE },
42903f7f
L
4516 },
4517
1ceb70f8 4518 /* PREFIX_0F3A14 */
42903f7f 4519 {
592d1631
L
4520 { Bad_Opcode },
4521 { Bad_Opcode },
507bd325 4522 { "pextrb", { Edqb, XM, Ib }, PREFIX_OPCODE },
42903f7f
L
4523 },
4524
1ceb70f8 4525 /* PREFIX_0F3A15 */
42903f7f 4526 {
592d1631
L
4527 { Bad_Opcode },
4528 { Bad_Opcode },
507bd325 4529 { "pextrw", { Edqw, XM, Ib }, PREFIX_OPCODE },
42903f7f
L
4530 },
4531
1ceb70f8 4532 /* PREFIX_0F3A16 */
42903f7f 4533 {
592d1631
L
4534 { Bad_Opcode },
4535 { Bad_Opcode },
507bd325 4536 { "pextrK", { Edq, XM, Ib }, PREFIX_OPCODE },
42903f7f
L
4537 },
4538
1ceb70f8 4539 /* PREFIX_0F3A17 */
42903f7f 4540 {
592d1631
L
4541 { Bad_Opcode },
4542 { Bad_Opcode },
507bd325 4543 { "extractps", { Edqd, XM, Ib }, PREFIX_OPCODE },
42903f7f
L
4544 },
4545
1ceb70f8 4546 /* PREFIX_0F3A20 */
42903f7f 4547 {
592d1631
L
4548 { Bad_Opcode },
4549 { Bad_Opcode },
507bd325 4550 { "pinsrb", { XM, Edqb, Ib }, PREFIX_OPCODE },
42903f7f
L
4551 },
4552
1ceb70f8 4553 /* PREFIX_0F3A21 */
42903f7f 4554 {
592d1631
L
4555 { Bad_Opcode },
4556 { Bad_Opcode },
507bd325 4557 { "insertps", { XM, EXd, Ib }, PREFIX_OPCODE },
42903f7f
L
4558 },
4559
1ceb70f8 4560 /* PREFIX_0F3A22 */
42903f7f 4561 {
592d1631
L
4562 { Bad_Opcode },
4563 { Bad_Opcode },
507bd325 4564 { "pinsrK", { XM, Edq, Ib }, PREFIX_OPCODE },
42903f7f
L
4565 },
4566
1ceb70f8 4567 /* PREFIX_0F3A40 */
42903f7f 4568 {
592d1631
L
4569 { Bad_Opcode },
4570 { Bad_Opcode },
507bd325 4571 { "dpps", { XM, EXx, Ib }, PREFIX_OPCODE },
42903f7f
L
4572 },
4573
1ceb70f8 4574 /* PREFIX_0F3A41 */
42903f7f 4575 {
592d1631
L
4576 { Bad_Opcode },
4577 { Bad_Opcode },
507bd325 4578 { "dppd", { XM, EXx, Ib }, PREFIX_OPCODE },
42903f7f
L
4579 },
4580
1ceb70f8 4581 /* PREFIX_0F3A42 */
42903f7f 4582 {
592d1631
L
4583 { Bad_Opcode },
4584 { Bad_Opcode },
507bd325 4585 { "mpsadbw", { XM, EXx, Ib }, PREFIX_OPCODE },
42903f7f 4586 },
381d071f 4587
c0f3af97
L
4588 /* PREFIX_0F3A44 */
4589 {
592d1631
L
4590 { Bad_Opcode },
4591 { Bad_Opcode },
507bd325 4592 { "pclmulqdq", { XM, EXx, PCLMUL }, PREFIX_OPCODE },
c0f3af97
L
4593 },
4594
1ceb70f8 4595 /* PREFIX_0F3A60 */
381d071f 4596 {
592d1631
L
4597 { Bad_Opcode },
4598 { Bad_Opcode },
15c7c1d8 4599 { "pcmpestrm", { XM, { PCMPESTR_Fixup, x_mode }, Ib }, PREFIX_OPCODE },
381d071f
L
4600 },
4601
1ceb70f8 4602 /* PREFIX_0F3A61 */
381d071f 4603 {
592d1631
L
4604 { Bad_Opcode },
4605 { Bad_Opcode },
15c7c1d8 4606 { "pcmpestri", { XM, { PCMPESTR_Fixup, x_mode }, Ib }, PREFIX_OPCODE },
381d071f
L
4607 },
4608
1ceb70f8 4609 /* PREFIX_0F3A62 */
381d071f 4610 {
592d1631
L
4611 { Bad_Opcode },
4612 { Bad_Opcode },
507bd325 4613 { "pcmpistrm", { XM, EXx, Ib }, PREFIX_OPCODE },
381d071f
L
4614 },
4615
1ceb70f8 4616 /* PREFIX_0F3A63 */
381d071f 4617 {
592d1631
L
4618 { Bad_Opcode },
4619 { Bad_Opcode },
507bd325 4620 { "pcmpistri", { XM, EXx, Ib }, PREFIX_OPCODE },
381d071f 4621 },
09a2c6cf 4622
a0046408
L
4623 /* PREFIX_0F3ACC */
4624 {
507bd325 4625 { "sha1rnds4", { XM, EXxmm, Ib }, PREFIX_OPCODE },
a0046408
L
4626 },
4627
48521003
IT
4628 /* PREFIX_0F3ACE */
4629 {
4630 { Bad_Opcode },
4631 { Bad_Opcode },
4632 { "gf2p8affineqb", { XM, EXxmm, Ib }, PREFIX_OPCODE },
4633 },
4634
4635 /* PREFIX_0F3ACF */
4636 {
4637 { Bad_Opcode },
4638 { Bad_Opcode },
4639 { "gf2p8affineinvqb", { XM, EXxmm, Ib }, PREFIX_OPCODE },
4640 },
4641
c0f3af97 4642 /* PREFIX_0F3ADF */
09a2c6cf 4643 {
592d1631
L
4644 { Bad_Opcode },
4645 { Bad_Opcode },
507bd325 4646 { "aeskeygenassist", { XM, EXx, Ib }, PREFIX_OPCODE },
09a2c6cf
L
4647 },
4648
592a252b 4649 /* PREFIX_VEX_0F10 */
09a2c6cf 4650 {
ec6f095a
L
4651 { "vmovups", { XM, EXx }, 0 },
4652 { "vmovss", { XMVexScalar, VexScalar, EXdScalar }, 0 },
4653 { "vmovupd", { XM, EXx }, 0 },
4654 { "vmovsd", { XMVexScalar, VexScalar, EXqScalar }, 0 },
09a2c6cf
L
4655 },
4656
592a252b 4657 /* PREFIX_VEX_0F11 */
09a2c6cf 4658 {
ec6f095a
L
4659 { "vmovups", { EXxS, XM }, 0 },
4660 { "vmovss", { EXdVexScalarS, VexScalar, XMScalar }, 0 },
4661 { "vmovupd", { EXxS, XM }, 0 },
4662 { "vmovsd", { EXqVexScalarS, VexScalar, XMScalar }, 0 },
09a2c6cf
L
4663 },
4664
592a252b 4665 /* PREFIX_VEX_0F12 */
09a2c6cf 4666 {
592a252b 4667 { MOD_TABLE (MOD_VEX_0F12_PREFIX_0) },
ec6f095a 4668 { "vmovsldup", { XM, EXx }, 0 },
592a252b 4669 { VEX_LEN_TABLE (VEX_LEN_0F12_P_2) },
ec6f095a 4670 { "vmovddup", { XM, EXymmq }, 0 },
09a2c6cf
L
4671 },
4672
592a252b 4673 /* PREFIX_VEX_0F16 */
09a2c6cf 4674 {
592a252b 4675 { MOD_TABLE (MOD_VEX_0F16_PREFIX_0) },
ec6f095a 4676 { "vmovshdup", { XM, EXx }, 0 },
592a252b 4677 { VEX_LEN_TABLE (VEX_LEN_0F16_P_2) },
5f754f58 4678 },
7c52e0e8 4679
592a252b 4680 /* PREFIX_VEX_0F2A */
5f754f58 4681 {
592d1631 4682 { Bad_Opcode },
592a252b 4683 { VEX_LEN_TABLE (VEX_LEN_0F2A_P_1) },
592d1631 4684 { Bad_Opcode },
592a252b 4685 { VEX_LEN_TABLE (VEX_LEN_0F2A_P_3) },
5f754f58 4686 },
7c52e0e8 4687
592a252b 4688 /* PREFIX_VEX_0F2C */
5f754f58 4689 {
592d1631 4690 { Bad_Opcode },
592a252b 4691 { VEX_LEN_TABLE (VEX_LEN_0F2C_P_1) },
592d1631 4692 { Bad_Opcode },
592a252b 4693 { VEX_LEN_TABLE (VEX_LEN_0F2C_P_3) },
5f754f58 4694 },
7c52e0e8 4695
592a252b 4696 /* PREFIX_VEX_0F2D */
7c52e0e8 4697 {
592d1631 4698 { Bad_Opcode },
592a252b 4699 { VEX_LEN_TABLE (VEX_LEN_0F2D_P_1) },
592d1631 4700 { Bad_Opcode },
592a252b 4701 { VEX_LEN_TABLE (VEX_LEN_0F2D_P_3) },
7c52e0e8
L
4702 },
4703
592a252b 4704 /* PREFIX_VEX_0F2E */
7c52e0e8 4705 {
ec6f095a 4706 { "vucomiss", { XMScalar, EXdScalar }, 0 },
592d1631 4707 { Bad_Opcode },
ec6f095a 4708 { "vucomisd", { XMScalar, EXqScalar }, 0 },
7c52e0e8
L
4709 },
4710
592a252b 4711 /* PREFIX_VEX_0F2F */
7c52e0e8 4712 {
ec6f095a 4713 { "vcomiss", { XMScalar, EXdScalar }, 0 },
592d1631 4714 { Bad_Opcode },
ec6f095a 4715 { "vcomisd", { XMScalar, EXqScalar }, 0 },
7c52e0e8
L
4716 },
4717
43234a1e
L
4718 /* PREFIX_VEX_0F41 */
4719 {
4720 { VEX_LEN_TABLE (VEX_LEN_0F41_P_0) },
1ba585e8
IT
4721 { Bad_Opcode },
4722 { VEX_LEN_TABLE (VEX_LEN_0F41_P_2) },
43234a1e
L
4723 },
4724
4725 /* PREFIX_VEX_0F42 */
4726 {
4727 { VEX_LEN_TABLE (VEX_LEN_0F42_P_0) },
1ba585e8
IT
4728 { Bad_Opcode },
4729 { VEX_LEN_TABLE (VEX_LEN_0F42_P_2) },
43234a1e
L
4730 },
4731
4732 /* PREFIX_VEX_0F44 */
4733 {
4734 { VEX_LEN_TABLE (VEX_LEN_0F44_P_0) },
1ba585e8
IT
4735 { Bad_Opcode },
4736 { VEX_LEN_TABLE (VEX_LEN_0F44_P_2) },
43234a1e
L
4737 },
4738
4739 /* PREFIX_VEX_0F45 */
4740 {
4741 { VEX_LEN_TABLE (VEX_LEN_0F45_P_0) },
1ba585e8
IT
4742 { Bad_Opcode },
4743 { VEX_LEN_TABLE (VEX_LEN_0F45_P_2) },
43234a1e
L
4744 },
4745
4746 /* PREFIX_VEX_0F46 */
4747 {
4748 { VEX_LEN_TABLE (VEX_LEN_0F46_P_0) },
1ba585e8
IT
4749 { Bad_Opcode },
4750 { VEX_LEN_TABLE (VEX_LEN_0F46_P_2) },
43234a1e
L
4751 },
4752
4753 /* PREFIX_VEX_0F47 */
4754 {
4755 { VEX_LEN_TABLE (VEX_LEN_0F47_P_0) },
1ba585e8
IT
4756 { Bad_Opcode },
4757 { VEX_LEN_TABLE (VEX_LEN_0F47_P_2) },
43234a1e
L
4758 },
4759
1ba585e8 4760 /* PREFIX_VEX_0F4A */
43234a1e 4761 {
1ba585e8 4762 { VEX_LEN_TABLE (VEX_LEN_0F4A_P_0) },
43234a1e 4763 { Bad_Opcode },
1ba585e8
IT
4764 { VEX_LEN_TABLE (VEX_LEN_0F4A_P_2) },
4765 },
4766
4767 /* PREFIX_VEX_0F4B */
4768 {
4769 { VEX_LEN_TABLE (VEX_LEN_0F4B_P_0) },
43234a1e
L
4770 { Bad_Opcode },
4771 { VEX_LEN_TABLE (VEX_LEN_0F4B_P_2) },
4772 },
4773
592a252b 4774 /* PREFIX_VEX_0F51 */
7c52e0e8 4775 {
ec6f095a
L
4776 { "vsqrtps", { XM, EXx }, 0 },
4777 { "vsqrtss", { XMScalar, VexScalar, EXdScalar }, 0 },
4778 { "vsqrtpd", { XM, EXx }, 0 },
4779 { "vsqrtsd", { XMScalar, VexScalar, EXqScalar }, 0 },
7c52e0e8
L
4780 },
4781
592a252b 4782 /* PREFIX_VEX_0F52 */
7c52e0e8 4783 {
ec6f095a
L
4784 { "vrsqrtps", { XM, EXx }, 0 },
4785 { "vrsqrtss", { XMScalar, VexScalar, EXdScalar }, 0 },
7c52e0e8
L
4786 },
4787
592a252b 4788 /* PREFIX_VEX_0F53 */
7c52e0e8 4789 {
ec6f095a
L
4790 { "vrcpps", { XM, EXx }, 0 },
4791 { "vrcpss", { XMScalar, VexScalar, EXdScalar }, 0 },
7c52e0e8
L
4792 },
4793
592a252b 4794 /* PREFIX_VEX_0F58 */
7c52e0e8 4795 {
ec6f095a
L
4796 { "vaddps", { XM, Vex, EXx }, 0 },
4797 { "vaddss", { XMScalar, VexScalar, EXdScalar }, 0 },
4798 { "vaddpd", { XM, Vex, EXx }, 0 },
4799 { "vaddsd", { XMScalar, VexScalar, EXqScalar }, 0 },
7c52e0e8
L
4800 },
4801
592a252b 4802 /* PREFIX_VEX_0F59 */
7c52e0e8 4803 {
ec6f095a
L
4804 { "vmulps", { XM, Vex, EXx }, 0 },
4805 { "vmulss", { XMScalar, VexScalar, EXdScalar }, 0 },
4806 { "vmulpd", { XM, Vex, EXx }, 0 },
4807 { "vmulsd", { XMScalar, VexScalar, EXqScalar }, 0 },
7c52e0e8
L
4808 },
4809
592a252b 4810 /* PREFIX_VEX_0F5A */
7c52e0e8 4811 {
ec6f095a
L
4812 { "vcvtps2pd", { XM, EXxmmq }, 0 },
4813 { "vcvtss2sd", { XMScalar, VexScalar, EXdScalar }, 0 },
4814 { "vcvtpd2ps%XY",{ XMM, EXx }, 0 },
4815 { "vcvtsd2ss", { XMScalar, VexScalar, EXqScalar }, 0 },
7c52e0e8
L
4816 },
4817
592a252b 4818 /* PREFIX_VEX_0F5B */
7c52e0e8 4819 {
ec6f095a
L
4820 { "vcvtdq2ps", { XM, EXx }, 0 },
4821 { "vcvttps2dq", { XM, EXx }, 0 },
4822 { "vcvtps2dq", { XM, EXx }, 0 },
7c52e0e8
L
4823 },
4824
592a252b 4825 /* PREFIX_VEX_0F5C */
7c52e0e8 4826 {
ec6f095a
L
4827 { "vsubps", { XM, Vex, EXx }, 0 },
4828 { "vsubss", { XMScalar, VexScalar, EXdScalar }, 0 },
4829 { "vsubpd", { XM, Vex, EXx }, 0 },
4830 { "vsubsd", { XMScalar, VexScalar, EXqScalar }, 0 },
7c52e0e8
L
4831 },
4832
592a252b 4833 /* PREFIX_VEX_0F5D */
7c52e0e8 4834 {
ec6f095a
L
4835 { "vminps", { XM, Vex, EXx }, 0 },
4836 { "vminss", { XMScalar, VexScalar, EXdScalar }, 0 },
4837 { "vminpd", { XM, Vex, EXx }, 0 },
4838 { "vminsd", { XMScalar, VexScalar, EXqScalar }, 0 },
7c52e0e8
L
4839 },
4840
592a252b 4841 /* PREFIX_VEX_0F5E */
7c52e0e8 4842 {
ec6f095a
L
4843 { "vdivps", { XM, Vex, EXx }, 0 },
4844 { "vdivss", { XMScalar, VexScalar, EXdScalar }, 0 },
4845 { "vdivpd", { XM, Vex, EXx }, 0 },
4846 { "vdivsd", { XMScalar, VexScalar, EXqScalar }, 0 },
7c52e0e8
L
4847 },
4848
592a252b 4849 /* PREFIX_VEX_0F5F */
7c52e0e8 4850 {
ec6f095a
L
4851 { "vmaxps", { XM, Vex, EXx }, 0 },
4852 { "vmaxss", { XMScalar, VexScalar, EXdScalar }, 0 },
4853 { "vmaxpd", { XM, Vex, EXx }, 0 },
4854 { "vmaxsd", { XMScalar, VexScalar, EXqScalar }, 0 },
7c52e0e8
L
4855 },
4856
592a252b 4857 /* PREFIX_VEX_0F60 */
7c52e0e8 4858 {
592d1631
L
4859 { Bad_Opcode },
4860 { Bad_Opcode },
ec6f095a 4861 { "vpunpcklbw", { XM, Vex, EXx }, 0 },
7c52e0e8
L
4862 },
4863
592a252b 4864 /* PREFIX_VEX_0F61 */
7c52e0e8 4865 {
592d1631
L
4866 { Bad_Opcode },
4867 { Bad_Opcode },
ec6f095a 4868 { "vpunpcklwd", { XM, Vex, EXx }, 0 },
7c52e0e8
L
4869 },
4870
592a252b 4871 /* PREFIX_VEX_0F62 */
7c52e0e8 4872 {
592d1631
L
4873 { Bad_Opcode },
4874 { Bad_Opcode },
ec6f095a 4875 { "vpunpckldq", { XM, Vex, EXx }, 0 },
7c52e0e8
L
4876 },
4877
592a252b 4878 /* PREFIX_VEX_0F63 */
7c52e0e8 4879 {
592d1631
L
4880 { Bad_Opcode },
4881 { Bad_Opcode },
ec6f095a 4882 { "vpacksswb", { XM, Vex, EXx }, 0 },
7c52e0e8
L
4883 },
4884
592a252b 4885 /* PREFIX_VEX_0F64 */
7c52e0e8 4886 {
592d1631
L
4887 { Bad_Opcode },
4888 { Bad_Opcode },
ec6f095a 4889 { "vpcmpgtb", { XM, Vex, EXx }, 0 },
7c52e0e8
L
4890 },
4891
592a252b 4892 /* PREFIX_VEX_0F65 */
7c52e0e8 4893 {
592d1631
L
4894 { Bad_Opcode },
4895 { Bad_Opcode },
ec6f095a 4896 { "vpcmpgtw", { XM, Vex, EXx }, 0 },
7c52e0e8
L
4897 },
4898
592a252b 4899 /* PREFIX_VEX_0F66 */
7c52e0e8 4900 {
592d1631
L
4901 { Bad_Opcode },
4902 { Bad_Opcode },
ec6f095a 4903 { "vpcmpgtd", { XM, Vex, EXx }, 0 },
7c52e0e8 4904 },
6439fc28 4905
592a252b 4906 /* PREFIX_VEX_0F67 */
331d2d0d 4907 {
592d1631
L
4908 { Bad_Opcode },
4909 { Bad_Opcode },
ec6f095a 4910 { "vpackuswb", { XM, Vex, EXx }, 0 },
c0f3af97
L
4911 },
4912
592a252b 4913 /* PREFIX_VEX_0F68 */
c0f3af97 4914 {
592d1631
L
4915 { Bad_Opcode },
4916 { Bad_Opcode },
ec6f095a 4917 { "vpunpckhbw", { XM, Vex, EXx }, 0 },
c0f3af97
L
4918 },
4919
592a252b 4920 /* PREFIX_VEX_0F69 */
c0f3af97 4921 {
592d1631
L
4922 { Bad_Opcode },
4923 { Bad_Opcode },
ec6f095a 4924 { "vpunpckhwd", { XM, Vex, EXx }, 0 },
c0f3af97
L
4925 },
4926
592a252b 4927 /* PREFIX_VEX_0F6A */
c0f3af97 4928 {
592d1631
L
4929 { Bad_Opcode },
4930 { Bad_Opcode },
ec6f095a 4931 { "vpunpckhdq", { XM, Vex, EXx }, 0 },
c0f3af97
L
4932 },
4933
592a252b 4934 /* PREFIX_VEX_0F6B */
c0f3af97 4935 {
592d1631
L
4936 { Bad_Opcode },
4937 { Bad_Opcode },
ec6f095a 4938 { "vpackssdw", { XM, Vex, EXx }, 0 },
c0f3af97
L
4939 },
4940
592a252b 4941 /* PREFIX_VEX_0F6C */
c0f3af97 4942 {
592d1631
L
4943 { Bad_Opcode },
4944 { Bad_Opcode },
ec6f095a 4945 { "vpunpcklqdq", { XM, Vex, EXx }, 0 },
c0f3af97
L
4946 },
4947
592a252b 4948 /* PREFIX_VEX_0F6D */
c0f3af97 4949 {
592d1631
L
4950 { Bad_Opcode },
4951 { Bad_Opcode },
ec6f095a 4952 { "vpunpckhqdq", { XM, Vex, EXx }, 0 },
c0f3af97
L
4953 },
4954
592a252b 4955 /* PREFIX_VEX_0F6E */
c0f3af97 4956 {
592d1631
L
4957 { Bad_Opcode },
4958 { Bad_Opcode },
592a252b 4959 { VEX_LEN_TABLE (VEX_LEN_0F6E_P_2) },
c0f3af97
L
4960 },
4961
592a252b 4962 /* PREFIX_VEX_0F6F */
c0f3af97 4963 {
592d1631 4964 { Bad_Opcode },
ec6f095a
L
4965 { "vmovdqu", { XM, EXx }, 0 },
4966 { "vmovdqa", { XM, EXx }, 0 },
c0f3af97
L
4967 },
4968
592a252b 4969 /* PREFIX_VEX_0F70 */
c0f3af97 4970 {
592d1631 4971 { Bad_Opcode },
ec6f095a
L
4972 { "vpshufhw", { XM, EXx, Ib }, 0 },
4973 { "vpshufd", { XM, EXx, Ib }, 0 },
4974 { "vpshuflw", { XM, EXx, Ib }, 0 },
c0f3af97
L
4975 },
4976
592a252b 4977 /* PREFIX_VEX_0F71_REG_2 */
c0f3af97 4978 {
592d1631
L
4979 { Bad_Opcode },
4980 { Bad_Opcode },
ec6f095a 4981 { "vpsrlw", { Vex, XS, Ib }, 0 },
c0f3af97
L
4982 },
4983
592a252b 4984 /* PREFIX_VEX_0F71_REG_4 */
c0f3af97 4985 {
592d1631
L
4986 { Bad_Opcode },
4987 { Bad_Opcode },
ec6f095a 4988 { "vpsraw", { Vex, XS, Ib }, 0 },
c0f3af97
L
4989 },
4990
592a252b 4991 /* PREFIX_VEX_0F71_REG_6 */
c0f3af97 4992 {
592d1631
L
4993 { Bad_Opcode },
4994 { Bad_Opcode },
ec6f095a 4995 { "vpsllw", { Vex, XS, Ib }, 0 },
c0f3af97
L
4996 },
4997
592a252b 4998 /* PREFIX_VEX_0F72_REG_2 */
c0f3af97 4999 {
592d1631
L
5000 { Bad_Opcode },
5001 { Bad_Opcode },
ec6f095a 5002 { "vpsrld", { Vex, XS, Ib }, 0 },
c0f3af97
L
5003 },
5004
592a252b 5005 /* PREFIX_VEX_0F72_REG_4 */
c0f3af97 5006 {
592d1631
L
5007 { Bad_Opcode },
5008 { Bad_Opcode },
ec6f095a 5009 { "vpsrad", { Vex, XS, Ib }, 0 },
c0f3af97
L
5010 },
5011
592a252b 5012 /* PREFIX_VEX_0F72_REG_6 */
c0f3af97 5013 {
592d1631
L
5014 { Bad_Opcode },
5015 { Bad_Opcode },
ec6f095a 5016 { "vpslld", { Vex, XS, Ib }, 0 },
c0f3af97
L
5017 },
5018
592a252b 5019 /* PREFIX_VEX_0F73_REG_2 */
c0f3af97 5020 {
592d1631
L
5021 { Bad_Opcode },
5022 { Bad_Opcode },
ec6f095a 5023 { "vpsrlq", { Vex, XS, Ib }, 0 },
c0f3af97
L
5024 },
5025
592a252b 5026 /* PREFIX_VEX_0F73_REG_3 */
c0f3af97 5027 {
592d1631
L
5028 { Bad_Opcode },
5029 { Bad_Opcode },
ec6f095a 5030 { "vpsrldq", { Vex, XS, Ib }, 0 },
c0f3af97
L
5031 },
5032
592a252b 5033 /* PREFIX_VEX_0F73_REG_6 */
c0f3af97 5034 {
592d1631
L
5035 { Bad_Opcode },
5036 { Bad_Opcode },
ec6f095a 5037 { "vpsllq", { Vex, XS, Ib }, 0 },
c0f3af97
L
5038 },
5039
592a252b 5040 /* PREFIX_VEX_0F73_REG_7 */
c0f3af97 5041 {
592d1631
L
5042 { Bad_Opcode },
5043 { Bad_Opcode },
ec6f095a 5044 { "vpslldq", { Vex, XS, Ib }, 0 },
c0f3af97
L
5045 },
5046
592a252b 5047 /* PREFIX_VEX_0F74 */
c0f3af97 5048 {
592d1631
L
5049 { Bad_Opcode },
5050 { Bad_Opcode },
ec6f095a 5051 { "vpcmpeqb", { XM, Vex, EXx }, 0 },
c0f3af97
L
5052 },
5053
592a252b 5054 /* PREFIX_VEX_0F75 */
c0f3af97 5055 {
592d1631
L
5056 { Bad_Opcode },
5057 { Bad_Opcode },
ec6f095a 5058 { "vpcmpeqw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5059 },
5060
592a252b 5061 /* PREFIX_VEX_0F76 */
c0f3af97 5062 {
592d1631
L
5063 { Bad_Opcode },
5064 { Bad_Opcode },
ec6f095a 5065 { "vpcmpeqd", { XM, Vex, EXx }, 0 },
c0f3af97
L
5066 },
5067
592a252b 5068 /* PREFIX_VEX_0F77 */
c0f3af97 5069 {
ec6f095a 5070 { VEX_LEN_TABLE (VEX_LEN_0F77_P_0) },
c0f3af97
L
5071 },
5072
592a252b 5073 /* PREFIX_VEX_0F7C */
c0f3af97 5074 {
592d1631
L
5075 { Bad_Opcode },
5076 { Bad_Opcode },
ec6f095a
L
5077 { "vhaddpd", { XM, Vex, EXx }, 0 },
5078 { "vhaddps", { XM, Vex, EXx }, 0 },
c0f3af97
L
5079 },
5080
592a252b 5081 /* PREFIX_VEX_0F7D */
c0f3af97 5082 {
592d1631
L
5083 { Bad_Opcode },
5084 { Bad_Opcode },
ec6f095a
L
5085 { "vhsubpd", { XM, Vex, EXx }, 0 },
5086 { "vhsubps", { XM, Vex, EXx }, 0 },
c0f3af97
L
5087 },
5088
592a252b 5089 /* PREFIX_VEX_0F7E */
c0f3af97 5090 {
592d1631 5091 { Bad_Opcode },
592a252b
L
5092 { VEX_LEN_TABLE (VEX_LEN_0F7E_P_1) },
5093 { VEX_LEN_TABLE (VEX_LEN_0F7E_P_2) },
c0f3af97
L
5094 },
5095
592a252b 5096 /* PREFIX_VEX_0F7F */
c0f3af97 5097 {
592d1631 5098 { Bad_Opcode },
ec6f095a
L
5099 { "vmovdqu", { EXxS, XM }, 0 },
5100 { "vmovdqa", { EXxS, XM }, 0 },
c0f3af97
L
5101 },
5102
43234a1e
L
5103 /* PREFIX_VEX_0F90 */
5104 {
5105 { VEX_LEN_TABLE (VEX_LEN_0F90_P_0) },
1ba585e8
IT
5106 { Bad_Opcode },
5107 { VEX_LEN_TABLE (VEX_LEN_0F90_P_2) },
43234a1e
L
5108 },
5109
5110 /* PREFIX_VEX_0F91 */
5111 {
5112 { VEX_LEN_TABLE (VEX_LEN_0F91_P_0) },
1ba585e8
IT
5113 { Bad_Opcode },
5114 { VEX_LEN_TABLE (VEX_LEN_0F91_P_2) },
43234a1e
L
5115 },
5116
5117 /* PREFIX_VEX_0F92 */
5118 {
5119 { VEX_LEN_TABLE (VEX_LEN_0F92_P_0) },
1ba585e8 5120 { Bad_Opcode },
90a915bf 5121 { VEX_LEN_TABLE (VEX_LEN_0F92_P_2) },
1ba585e8 5122 { VEX_LEN_TABLE (VEX_LEN_0F92_P_3) },
43234a1e
L
5123 },
5124
5125 /* PREFIX_VEX_0F93 */
5126 {
5127 { VEX_LEN_TABLE (VEX_LEN_0F93_P_0) },
1ba585e8 5128 { Bad_Opcode },
90a915bf 5129 { VEX_LEN_TABLE (VEX_LEN_0F93_P_2) },
1ba585e8 5130 { VEX_LEN_TABLE (VEX_LEN_0F93_P_3) },
43234a1e
L
5131 },
5132
5133 /* PREFIX_VEX_0F98 */
5134 {
5135 { VEX_LEN_TABLE (VEX_LEN_0F98_P_0) },
1ba585e8
IT
5136 { Bad_Opcode },
5137 { VEX_LEN_TABLE (VEX_LEN_0F98_P_2) },
5138 },
5139
5140 /* PREFIX_VEX_0F99 */
5141 {
5142 { VEX_LEN_TABLE (VEX_LEN_0F99_P_0) },
5143 { Bad_Opcode },
5144 { VEX_LEN_TABLE (VEX_LEN_0F99_P_2) },
43234a1e
L
5145 },
5146
592a252b 5147 /* PREFIX_VEX_0FC2 */
c0f3af97 5148 {
ec6f095a
L
5149 { "vcmpps", { XM, Vex, EXx, VCMP }, 0 },
5150 { "vcmpss", { XMScalar, VexScalar, EXdScalar, VCMP }, 0 },
5151 { "vcmppd", { XM, Vex, EXx, VCMP }, 0 },
5152 { "vcmpsd", { XMScalar, VexScalar, EXqScalar, VCMP }, 0 },
c0f3af97
L
5153 },
5154
592a252b 5155 /* PREFIX_VEX_0FC4 */
c0f3af97 5156 {
592d1631
L
5157 { Bad_Opcode },
5158 { Bad_Opcode },
592a252b 5159 { VEX_LEN_TABLE (VEX_LEN_0FC4_P_2) },
c0f3af97
L
5160 },
5161
592a252b 5162 /* PREFIX_VEX_0FC5 */
c0f3af97 5163 {
592d1631
L
5164 { Bad_Opcode },
5165 { Bad_Opcode },
592a252b 5166 { VEX_LEN_TABLE (VEX_LEN_0FC5_P_2) },
c0f3af97
L
5167 },
5168
592a252b 5169 /* PREFIX_VEX_0FD0 */
c0f3af97 5170 {
592d1631
L
5171 { Bad_Opcode },
5172 { Bad_Opcode },
ec6f095a
L
5173 { "vaddsubpd", { XM, Vex, EXx }, 0 },
5174 { "vaddsubps", { XM, Vex, EXx }, 0 },
c0f3af97
L
5175 },
5176
592a252b 5177 /* PREFIX_VEX_0FD1 */
c0f3af97 5178 {
592d1631
L
5179 { Bad_Opcode },
5180 { Bad_Opcode },
ec6f095a 5181 { "vpsrlw", { XM, Vex, EXxmm }, 0 },
c0f3af97
L
5182 },
5183
592a252b 5184 /* PREFIX_VEX_0FD2 */
c0f3af97 5185 {
592d1631
L
5186 { Bad_Opcode },
5187 { Bad_Opcode },
ec6f095a 5188 { "vpsrld", { XM, Vex, EXxmm }, 0 },
c0f3af97
L
5189 },
5190
592a252b 5191 /* PREFIX_VEX_0FD3 */
c0f3af97 5192 {
592d1631
L
5193 { Bad_Opcode },
5194 { Bad_Opcode },
ec6f095a 5195 { "vpsrlq", { XM, Vex, EXxmm }, 0 },
c0f3af97
L
5196 },
5197
592a252b 5198 /* PREFIX_VEX_0FD4 */
c0f3af97 5199 {
592d1631
L
5200 { Bad_Opcode },
5201 { Bad_Opcode },
ec6f095a 5202 { "vpaddq", { XM, Vex, EXx }, 0 },
c0f3af97
L
5203 },
5204
592a252b 5205 /* PREFIX_VEX_0FD5 */
c0f3af97 5206 {
592d1631
L
5207 { Bad_Opcode },
5208 { Bad_Opcode },
ec6f095a 5209 { "vpmullw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5210 },
5211
592a252b 5212 /* PREFIX_VEX_0FD6 */
c0f3af97 5213 {
592d1631
L
5214 { Bad_Opcode },
5215 { Bad_Opcode },
592a252b 5216 { VEX_LEN_TABLE (VEX_LEN_0FD6_P_2) },
c0f3af97
L
5217 },
5218
592a252b 5219 /* PREFIX_VEX_0FD7 */
c0f3af97 5220 {
592d1631
L
5221 { Bad_Opcode },
5222 { Bad_Opcode },
592a252b 5223 { MOD_TABLE (MOD_VEX_0FD7_PREFIX_2) },
c0f3af97
L
5224 },
5225
592a252b 5226 /* PREFIX_VEX_0FD8 */
c0f3af97 5227 {
592d1631
L
5228 { Bad_Opcode },
5229 { Bad_Opcode },
ec6f095a 5230 { "vpsubusb", { XM, Vex, EXx }, 0 },
c0f3af97
L
5231 },
5232
592a252b 5233 /* PREFIX_VEX_0FD9 */
c0f3af97 5234 {
592d1631
L
5235 { Bad_Opcode },
5236 { Bad_Opcode },
ec6f095a 5237 { "vpsubusw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5238 },
5239
592a252b 5240 /* PREFIX_VEX_0FDA */
c0f3af97 5241 {
592d1631
L
5242 { Bad_Opcode },
5243 { Bad_Opcode },
ec6f095a 5244 { "vpminub", { XM, Vex, EXx }, 0 },
c0f3af97
L
5245 },
5246
592a252b 5247 /* PREFIX_VEX_0FDB */
c0f3af97 5248 {
592d1631
L
5249 { Bad_Opcode },
5250 { Bad_Opcode },
ec6f095a 5251 { "vpand", { XM, Vex, EXx }, 0 },
c0f3af97
L
5252 },
5253
592a252b 5254 /* PREFIX_VEX_0FDC */
c0f3af97 5255 {
592d1631
L
5256 { Bad_Opcode },
5257 { Bad_Opcode },
ec6f095a 5258 { "vpaddusb", { XM, Vex, EXx }, 0 },
c0f3af97
L
5259 },
5260
592a252b 5261 /* PREFIX_VEX_0FDD */
c0f3af97 5262 {
592d1631
L
5263 { Bad_Opcode },
5264 { Bad_Opcode },
ec6f095a 5265 { "vpaddusw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5266 },
5267
592a252b 5268 /* PREFIX_VEX_0FDE */
c0f3af97 5269 {
592d1631
L
5270 { Bad_Opcode },
5271 { Bad_Opcode },
ec6f095a 5272 { "vpmaxub", { XM, Vex, EXx }, 0 },
c0f3af97
L
5273 },
5274
592a252b 5275 /* PREFIX_VEX_0FDF */
c0f3af97 5276 {
592d1631
L
5277 { Bad_Opcode },
5278 { Bad_Opcode },
ec6f095a 5279 { "vpandn", { XM, Vex, EXx }, 0 },
c0f3af97
L
5280 },
5281
592a252b 5282 /* PREFIX_VEX_0FE0 */
c0f3af97 5283 {
592d1631
L
5284 { Bad_Opcode },
5285 { Bad_Opcode },
ec6f095a 5286 { "vpavgb", { XM, Vex, EXx }, 0 },
c0f3af97
L
5287 },
5288
592a252b 5289 /* PREFIX_VEX_0FE1 */
c0f3af97 5290 {
592d1631
L
5291 { Bad_Opcode },
5292 { Bad_Opcode },
ec6f095a 5293 { "vpsraw", { XM, Vex, EXxmm }, 0 },
c0f3af97
L
5294 },
5295
592a252b 5296 /* PREFIX_VEX_0FE2 */
c0f3af97 5297 {
592d1631
L
5298 { Bad_Opcode },
5299 { Bad_Opcode },
ec6f095a 5300 { "vpsrad", { XM, Vex, EXxmm }, 0 },
c0f3af97
L
5301 },
5302
592a252b 5303 /* PREFIX_VEX_0FE3 */
c0f3af97 5304 {
592d1631
L
5305 { Bad_Opcode },
5306 { Bad_Opcode },
ec6f095a 5307 { "vpavgw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5308 },
5309
592a252b 5310 /* PREFIX_VEX_0FE4 */
c0f3af97 5311 {
592d1631
L
5312 { Bad_Opcode },
5313 { Bad_Opcode },
ec6f095a 5314 { "vpmulhuw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5315 },
5316
592a252b 5317 /* PREFIX_VEX_0FE5 */
c0f3af97 5318 {
592d1631
L
5319 { Bad_Opcode },
5320 { Bad_Opcode },
ec6f095a 5321 { "vpmulhw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5322 },
5323
592a252b 5324 /* PREFIX_VEX_0FE6 */
c0f3af97 5325 {
592d1631 5326 { Bad_Opcode },
ec6f095a
L
5327 { "vcvtdq2pd", { XM, EXxmmq }, 0 },
5328 { "vcvttpd2dq%XY", { XMM, EXx }, 0 },
5329 { "vcvtpd2dq%XY", { XMM, EXx }, 0 },
c0f3af97
L
5330 },
5331
592a252b 5332 /* PREFIX_VEX_0FE7 */
c0f3af97 5333 {
592d1631
L
5334 { Bad_Opcode },
5335 { Bad_Opcode },
592a252b 5336 { MOD_TABLE (MOD_VEX_0FE7_PREFIX_2) },
c0f3af97
L
5337 },
5338
592a252b 5339 /* PREFIX_VEX_0FE8 */
c0f3af97 5340 {
592d1631
L
5341 { Bad_Opcode },
5342 { Bad_Opcode },
ec6f095a 5343 { "vpsubsb", { XM, Vex, EXx }, 0 },
c0f3af97
L
5344 },
5345
592a252b 5346 /* PREFIX_VEX_0FE9 */
c0f3af97 5347 {
592d1631
L
5348 { Bad_Opcode },
5349 { Bad_Opcode },
ec6f095a 5350 { "vpsubsw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5351 },
5352
592a252b 5353 /* PREFIX_VEX_0FEA */
c0f3af97 5354 {
592d1631
L
5355 { Bad_Opcode },
5356 { Bad_Opcode },
ec6f095a 5357 { "vpminsw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5358 },
5359
592a252b 5360 /* PREFIX_VEX_0FEB */
c0f3af97 5361 {
592d1631
L
5362 { Bad_Opcode },
5363 { Bad_Opcode },
ec6f095a 5364 { "vpor", { XM, Vex, EXx }, 0 },
c0f3af97
L
5365 },
5366
592a252b 5367 /* PREFIX_VEX_0FEC */
c0f3af97 5368 {
592d1631
L
5369 { Bad_Opcode },
5370 { Bad_Opcode },
ec6f095a 5371 { "vpaddsb", { XM, Vex, EXx }, 0 },
c0f3af97
L
5372 },
5373
592a252b 5374 /* PREFIX_VEX_0FED */
c0f3af97 5375 {
592d1631
L
5376 { Bad_Opcode },
5377 { Bad_Opcode },
ec6f095a 5378 { "vpaddsw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5379 },
5380
592a252b 5381 /* PREFIX_VEX_0FEE */
c0f3af97 5382 {
592d1631
L
5383 { Bad_Opcode },
5384 { Bad_Opcode },
ec6f095a 5385 { "vpmaxsw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5386 },
5387
592a252b 5388 /* PREFIX_VEX_0FEF */
c0f3af97 5389 {
592d1631
L
5390 { Bad_Opcode },
5391 { Bad_Opcode },
ec6f095a 5392 { "vpxor", { XM, Vex, EXx }, 0 },
c0f3af97
L
5393 },
5394
592a252b 5395 /* PREFIX_VEX_0FF0 */
c0f3af97 5396 {
592d1631
L
5397 { Bad_Opcode },
5398 { Bad_Opcode },
5399 { Bad_Opcode },
592a252b 5400 { MOD_TABLE (MOD_VEX_0FF0_PREFIX_3) },
c0f3af97
L
5401 },
5402
592a252b 5403 /* PREFIX_VEX_0FF1 */
c0f3af97 5404 {
592d1631
L
5405 { Bad_Opcode },
5406 { Bad_Opcode },
ec6f095a 5407 { "vpsllw", { XM, Vex, EXxmm }, 0 },
c0f3af97
L
5408 },
5409
592a252b 5410 /* PREFIX_VEX_0FF2 */
c0f3af97 5411 {
592d1631
L
5412 { Bad_Opcode },
5413 { Bad_Opcode },
ec6f095a 5414 { "vpslld", { XM, Vex, EXxmm }, 0 },
c0f3af97
L
5415 },
5416
592a252b 5417 /* PREFIX_VEX_0FF3 */
c0f3af97 5418 {
592d1631
L
5419 { Bad_Opcode },
5420 { Bad_Opcode },
ec6f095a 5421 { "vpsllq", { XM, Vex, EXxmm }, 0 },
c0f3af97
L
5422 },
5423
592a252b 5424 /* PREFIX_VEX_0FF4 */
c0f3af97 5425 {
592d1631
L
5426 { Bad_Opcode },
5427 { Bad_Opcode },
ec6f095a 5428 { "vpmuludq", { XM, Vex, EXx }, 0 },
c0f3af97
L
5429 },
5430
592a252b 5431 /* PREFIX_VEX_0FF5 */
c0f3af97 5432 {
592d1631
L
5433 { Bad_Opcode },
5434 { Bad_Opcode },
ec6f095a 5435 { "vpmaddwd", { XM, Vex, EXx }, 0 },
c0f3af97
L
5436 },
5437
592a252b 5438 /* PREFIX_VEX_0FF6 */
c0f3af97 5439 {
592d1631
L
5440 { Bad_Opcode },
5441 { Bad_Opcode },
ec6f095a 5442 { "vpsadbw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5443 },
5444
592a252b 5445 /* PREFIX_VEX_0FF7 */
c0f3af97 5446 {
592d1631
L
5447 { Bad_Opcode },
5448 { Bad_Opcode },
592a252b 5449 { VEX_LEN_TABLE (VEX_LEN_0FF7_P_2) },
c0f3af97
L
5450 },
5451
592a252b 5452 /* PREFIX_VEX_0FF8 */
c0f3af97 5453 {
592d1631
L
5454 { Bad_Opcode },
5455 { Bad_Opcode },
ec6f095a 5456 { "vpsubb", { XM, Vex, EXx }, 0 },
c0f3af97
L
5457 },
5458
592a252b 5459 /* PREFIX_VEX_0FF9 */
c0f3af97 5460 {
592d1631
L
5461 { Bad_Opcode },
5462 { Bad_Opcode },
ec6f095a 5463 { "vpsubw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5464 },
5465
592a252b 5466 /* PREFIX_VEX_0FFA */
c0f3af97 5467 {
592d1631
L
5468 { Bad_Opcode },
5469 { Bad_Opcode },
ec6f095a 5470 { "vpsubd", { XM, Vex, EXx }, 0 },
c0f3af97
L
5471 },
5472
592a252b 5473 /* PREFIX_VEX_0FFB */
c0f3af97 5474 {
592d1631
L
5475 { Bad_Opcode },
5476 { Bad_Opcode },
ec6f095a 5477 { "vpsubq", { XM, Vex, EXx }, 0 },
c0f3af97
L
5478 },
5479
592a252b 5480 /* PREFIX_VEX_0FFC */
c0f3af97 5481 {
592d1631
L
5482 { Bad_Opcode },
5483 { Bad_Opcode },
ec6f095a 5484 { "vpaddb", { XM, Vex, EXx }, 0 },
c0f3af97
L
5485 },
5486
592a252b 5487 /* PREFIX_VEX_0FFD */
c0f3af97 5488 {
592d1631
L
5489 { Bad_Opcode },
5490 { Bad_Opcode },
ec6f095a 5491 { "vpaddw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5492 },
5493
592a252b 5494 /* PREFIX_VEX_0FFE */
c0f3af97 5495 {
592d1631
L
5496 { Bad_Opcode },
5497 { Bad_Opcode },
ec6f095a 5498 { "vpaddd", { XM, Vex, EXx }, 0 },
c0f3af97
L
5499 },
5500
592a252b 5501 /* PREFIX_VEX_0F3800 */
c0f3af97 5502 {
592d1631
L
5503 { Bad_Opcode },
5504 { Bad_Opcode },
ec6f095a 5505 { "vpshufb", { XM, Vex, EXx }, 0 },
c0f3af97
L
5506 },
5507
592a252b 5508 /* PREFIX_VEX_0F3801 */
c0f3af97 5509 {
592d1631
L
5510 { Bad_Opcode },
5511 { Bad_Opcode },
ec6f095a 5512 { "vphaddw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5513 },
5514
592a252b 5515 /* PREFIX_VEX_0F3802 */
c0f3af97 5516 {
592d1631
L
5517 { Bad_Opcode },
5518 { Bad_Opcode },
ec6f095a 5519 { "vphaddd", { XM, Vex, EXx }, 0 },
c0f3af97
L
5520 },
5521
592a252b 5522 /* PREFIX_VEX_0F3803 */
c0f3af97 5523 {
592d1631
L
5524 { Bad_Opcode },
5525 { Bad_Opcode },
ec6f095a 5526 { "vphaddsw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5527 },
5528
592a252b 5529 /* PREFIX_VEX_0F3804 */
c0f3af97 5530 {
592d1631
L
5531 { Bad_Opcode },
5532 { Bad_Opcode },
ec6f095a 5533 { "vpmaddubsw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5534 },
5535
592a252b 5536 /* PREFIX_VEX_0F3805 */
c0f3af97 5537 {
592d1631
L
5538 { Bad_Opcode },
5539 { Bad_Opcode },
ec6f095a 5540 { "vphsubw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5541 },
5542
592a252b 5543 /* PREFIX_VEX_0F3806 */
c0f3af97 5544 {
592d1631
L
5545 { Bad_Opcode },
5546 { Bad_Opcode },
ec6f095a 5547 { "vphsubd", { XM, Vex, EXx }, 0 },
c0f3af97
L
5548 },
5549
592a252b 5550 /* PREFIX_VEX_0F3807 */
c0f3af97 5551 {
592d1631
L
5552 { Bad_Opcode },
5553 { Bad_Opcode },
ec6f095a 5554 { "vphsubsw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5555 },
5556
592a252b 5557 /* PREFIX_VEX_0F3808 */
c0f3af97 5558 {
592d1631
L
5559 { Bad_Opcode },
5560 { Bad_Opcode },
ec6f095a 5561 { "vpsignb", { XM, Vex, EXx }, 0 },
c0f3af97
L
5562 },
5563
592a252b 5564 /* PREFIX_VEX_0F3809 */
c0f3af97 5565 {
592d1631
L
5566 { Bad_Opcode },
5567 { Bad_Opcode },
ec6f095a 5568 { "vpsignw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5569 },
5570
592a252b 5571 /* PREFIX_VEX_0F380A */
c0f3af97 5572 {
592d1631
L
5573 { Bad_Opcode },
5574 { Bad_Opcode },
ec6f095a 5575 { "vpsignd", { XM, Vex, EXx }, 0 },
c0f3af97
L
5576 },
5577
592a252b 5578 /* PREFIX_VEX_0F380B */
c0f3af97 5579 {
592d1631
L
5580 { Bad_Opcode },
5581 { Bad_Opcode },
ec6f095a 5582 { "vpmulhrsw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5583 },
5584
592a252b 5585 /* PREFIX_VEX_0F380C */
c0f3af97 5586 {
592d1631
L
5587 { Bad_Opcode },
5588 { Bad_Opcode },
592a252b 5589 { VEX_W_TABLE (VEX_W_0F380C_P_2) },
c0f3af97
L
5590 },
5591
592a252b 5592 /* PREFIX_VEX_0F380D */
c0f3af97 5593 {
592d1631
L
5594 { Bad_Opcode },
5595 { Bad_Opcode },
592a252b 5596 { VEX_W_TABLE (VEX_W_0F380D_P_2) },
c0f3af97
L
5597 },
5598
592a252b 5599 /* PREFIX_VEX_0F380E */
c0f3af97 5600 {
592d1631
L
5601 { Bad_Opcode },
5602 { Bad_Opcode },
592a252b 5603 { VEX_W_TABLE (VEX_W_0F380E_P_2) },
c0f3af97
L
5604 },
5605
592a252b 5606 /* PREFIX_VEX_0F380F */
c0f3af97 5607 {
592d1631
L
5608 { Bad_Opcode },
5609 { Bad_Opcode },
592a252b 5610 { VEX_W_TABLE (VEX_W_0F380F_P_2) },
c0f3af97
L
5611 },
5612
592a252b 5613 /* PREFIX_VEX_0F3813 */
c7b8aa3a
L
5614 {
5615 { Bad_Opcode },
5616 { Bad_Opcode },
bf890a93 5617 { "vcvtph2ps", { XM, EXxmmq }, 0 },
c7b8aa3a
L
5618 },
5619
6c30d220
L
5620 /* PREFIX_VEX_0F3816 */
5621 {
5622 { Bad_Opcode },
5623 { Bad_Opcode },
5624 { VEX_LEN_TABLE (VEX_LEN_0F3816_P_2) },
5625 },
5626
592a252b 5627 /* PREFIX_VEX_0F3817 */
c0f3af97 5628 {
592d1631
L
5629 { Bad_Opcode },
5630 { Bad_Opcode },
ec6f095a 5631 { "vptest", { XM, EXx }, 0 },
c0f3af97
L
5632 },
5633
592a252b 5634 /* PREFIX_VEX_0F3818 */
c0f3af97 5635 {
592d1631
L
5636 { Bad_Opcode },
5637 { Bad_Opcode },
6c30d220 5638 { VEX_W_TABLE (VEX_W_0F3818_P_2) },
c0f3af97
L
5639 },
5640
592a252b 5641 /* PREFIX_VEX_0F3819 */
c0f3af97 5642 {
592d1631
L
5643 { Bad_Opcode },
5644 { Bad_Opcode },
6c30d220 5645 { VEX_LEN_TABLE (VEX_LEN_0F3819_P_2) },
c0f3af97
L
5646 },
5647
592a252b 5648 /* PREFIX_VEX_0F381A */
c0f3af97 5649 {
592d1631
L
5650 { Bad_Opcode },
5651 { Bad_Opcode },
592a252b 5652 { MOD_TABLE (MOD_VEX_0F381A_PREFIX_2) },
c0f3af97
L
5653 },
5654
592a252b 5655 /* PREFIX_VEX_0F381C */
c0f3af97 5656 {
592d1631
L
5657 { Bad_Opcode },
5658 { Bad_Opcode },
ec6f095a 5659 { "vpabsb", { XM, EXx }, 0 },
c0f3af97
L
5660 },
5661
592a252b 5662 /* PREFIX_VEX_0F381D */
c0f3af97 5663 {
592d1631
L
5664 { Bad_Opcode },
5665 { Bad_Opcode },
ec6f095a 5666 { "vpabsw", { XM, EXx }, 0 },
c0f3af97
L
5667 },
5668
592a252b 5669 /* PREFIX_VEX_0F381E */
c0f3af97 5670 {
592d1631
L
5671 { Bad_Opcode },
5672 { Bad_Opcode },
ec6f095a 5673 { "vpabsd", { XM, EXx }, 0 },
c0f3af97
L
5674 },
5675
592a252b 5676 /* PREFIX_VEX_0F3820 */
c0f3af97 5677 {
592d1631
L
5678 { Bad_Opcode },
5679 { Bad_Opcode },
ec6f095a 5680 { "vpmovsxbw", { XM, EXxmmq }, 0 },
c0f3af97
L
5681 },
5682
592a252b 5683 /* PREFIX_VEX_0F3821 */
c0f3af97 5684 {
592d1631
L
5685 { Bad_Opcode },
5686 { Bad_Opcode },
ec6f095a 5687 { "vpmovsxbd", { XM, EXxmmqd }, 0 },
c0f3af97
L
5688 },
5689
592a252b 5690 /* PREFIX_VEX_0F3822 */
c0f3af97 5691 {
592d1631
L
5692 { Bad_Opcode },
5693 { Bad_Opcode },
ec6f095a 5694 { "vpmovsxbq", { XM, EXxmmdw }, 0 },
c0f3af97
L
5695 },
5696
592a252b 5697 /* PREFIX_VEX_0F3823 */
c0f3af97 5698 {
592d1631
L
5699 { Bad_Opcode },
5700 { Bad_Opcode },
ec6f095a 5701 { "vpmovsxwd", { XM, EXxmmq }, 0 },
c0f3af97
L
5702 },
5703
592a252b 5704 /* PREFIX_VEX_0F3824 */
c0f3af97 5705 {
592d1631
L
5706 { Bad_Opcode },
5707 { Bad_Opcode },
ec6f095a 5708 { "vpmovsxwq", { XM, EXxmmqd }, 0 },
c0f3af97
L
5709 },
5710
592a252b 5711 /* PREFIX_VEX_0F3825 */
c0f3af97 5712 {
592d1631
L
5713 { Bad_Opcode },
5714 { Bad_Opcode },
ec6f095a 5715 { "vpmovsxdq", { XM, EXxmmq }, 0 },
c0f3af97
L
5716 },
5717
592a252b 5718 /* PREFIX_VEX_0F3828 */
c0f3af97 5719 {
592d1631
L
5720 { Bad_Opcode },
5721 { Bad_Opcode },
ec6f095a 5722 { "vpmuldq", { XM, Vex, EXx }, 0 },
c0f3af97
L
5723 },
5724
592a252b 5725 /* PREFIX_VEX_0F3829 */
c0f3af97 5726 {
592d1631
L
5727 { Bad_Opcode },
5728 { Bad_Opcode },
ec6f095a 5729 { "vpcmpeqq", { XM, Vex, EXx }, 0 },
c0f3af97
L
5730 },
5731
592a252b 5732 /* PREFIX_VEX_0F382A */
c0f3af97 5733 {
592d1631
L
5734 { Bad_Opcode },
5735 { Bad_Opcode },
592a252b 5736 { MOD_TABLE (MOD_VEX_0F382A_PREFIX_2) },
c0f3af97
L
5737 },
5738
592a252b 5739 /* PREFIX_VEX_0F382B */
c0f3af97 5740 {
592d1631
L
5741 { Bad_Opcode },
5742 { Bad_Opcode },
ec6f095a 5743 { "vpackusdw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5744 },
5745
592a252b 5746 /* PREFIX_VEX_0F382C */
c0f3af97 5747 {
592d1631
L
5748 { Bad_Opcode },
5749 { Bad_Opcode },
592a252b 5750 { MOD_TABLE (MOD_VEX_0F382C_PREFIX_2) },
c0f3af97
L
5751 },
5752
592a252b 5753 /* PREFIX_VEX_0F382D */
c0f3af97 5754 {
592d1631
L
5755 { Bad_Opcode },
5756 { Bad_Opcode },
592a252b 5757 { MOD_TABLE (MOD_VEX_0F382D_PREFIX_2) },
c0f3af97
L
5758 },
5759
592a252b 5760 /* PREFIX_VEX_0F382E */
c0f3af97 5761 {
592d1631
L
5762 { Bad_Opcode },
5763 { Bad_Opcode },
592a252b 5764 { MOD_TABLE (MOD_VEX_0F382E_PREFIX_2) },
c0f3af97
L
5765 },
5766
592a252b 5767 /* PREFIX_VEX_0F382F */
c0f3af97 5768 {
592d1631
L
5769 { Bad_Opcode },
5770 { Bad_Opcode },
592a252b 5771 { MOD_TABLE (MOD_VEX_0F382F_PREFIX_2) },
c0f3af97
L
5772 },
5773
592a252b 5774 /* PREFIX_VEX_0F3830 */
c0f3af97 5775 {
592d1631
L
5776 { Bad_Opcode },
5777 { Bad_Opcode },
ec6f095a 5778 { "vpmovzxbw", { XM, EXxmmq }, 0 },
c0f3af97
L
5779 },
5780
592a252b 5781 /* PREFIX_VEX_0F3831 */
c0f3af97 5782 {
592d1631
L
5783 { Bad_Opcode },
5784 { Bad_Opcode },
ec6f095a 5785 { "vpmovzxbd", { XM, EXxmmqd }, 0 },
c0f3af97
L
5786 },
5787
592a252b 5788 /* PREFIX_VEX_0F3832 */
c0f3af97 5789 {
592d1631
L
5790 { Bad_Opcode },
5791 { Bad_Opcode },
ec6f095a 5792 { "vpmovzxbq", { XM, EXxmmdw }, 0 },
c0f3af97
L
5793 },
5794
592a252b 5795 /* PREFIX_VEX_0F3833 */
c0f3af97 5796 {
592d1631
L
5797 { Bad_Opcode },
5798 { Bad_Opcode },
ec6f095a 5799 { "vpmovzxwd", { XM, EXxmmq }, 0 },
c0f3af97
L
5800 },
5801
592a252b 5802 /* PREFIX_VEX_0F3834 */
c0f3af97 5803 {
592d1631
L
5804 { Bad_Opcode },
5805 { Bad_Opcode },
ec6f095a 5806 { "vpmovzxwq", { XM, EXxmmqd }, 0 },
c0f3af97
L
5807 },
5808
592a252b 5809 /* PREFIX_VEX_0F3835 */
c0f3af97 5810 {
592d1631
L
5811 { Bad_Opcode },
5812 { Bad_Opcode },
ec6f095a 5813 { "vpmovzxdq", { XM, EXxmmq }, 0 },
6c30d220
L
5814 },
5815
5816 /* PREFIX_VEX_0F3836 */
5817 {
5818 { Bad_Opcode },
5819 { Bad_Opcode },
5820 { VEX_LEN_TABLE (VEX_LEN_0F3836_P_2) },
c0f3af97
L
5821 },
5822
592a252b 5823 /* PREFIX_VEX_0F3837 */
c0f3af97 5824 {
592d1631
L
5825 { Bad_Opcode },
5826 { Bad_Opcode },
ec6f095a 5827 { "vpcmpgtq", { XM, Vex, EXx }, 0 },
c0f3af97
L
5828 },
5829
592a252b 5830 /* PREFIX_VEX_0F3838 */
c0f3af97 5831 {
592d1631
L
5832 { Bad_Opcode },
5833 { Bad_Opcode },
ec6f095a 5834 { "vpminsb", { XM, Vex, EXx }, 0 },
c0f3af97
L
5835 },
5836
592a252b 5837 /* PREFIX_VEX_0F3839 */
c0f3af97 5838 {
592d1631
L
5839 { Bad_Opcode },
5840 { Bad_Opcode },
ec6f095a 5841 { "vpminsd", { XM, Vex, EXx }, 0 },
c0f3af97
L
5842 },
5843
592a252b 5844 /* PREFIX_VEX_0F383A */
c0f3af97 5845 {
592d1631
L
5846 { Bad_Opcode },
5847 { Bad_Opcode },
ec6f095a 5848 { "vpminuw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5849 },
5850
592a252b 5851 /* PREFIX_VEX_0F383B */
c0f3af97 5852 {
592d1631
L
5853 { Bad_Opcode },
5854 { Bad_Opcode },
ec6f095a 5855 { "vpminud", { XM, Vex, EXx }, 0 },
c0f3af97
L
5856 },
5857
592a252b 5858 /* PREFIX_VEX_0F383C */
c0f3af97 5859 {
592d1631
L
5860 { Bad_Opcode },
5861 { Bad_Opcode },
ec6f095a 5862 { "vpmaxsb", { XM, Vex, EXx }, 0 },
c0f3af97
L
5863 },
5864
592a252b 5865 /* PREFIX_VEX_0F383D */
c0f3af97 5866 {
592d1631
L
5867 { Bad_Opcode },
5868 { Bad_Opcode },
ec6f095a 5869 { "vpmaxsd", { XM, Vex, EXx }, 0 },
c0f3af97
L
5870 },
5871
592a252b 5872 /* PREFIX_VEX_0F383E */
c0f3af97 5873 {
592d1631
L
5874 { Bad_Opcode },
5875 { Bad_Opcode },
ec6f095a 5876 { "vpmaxuw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5877 },
5878
592a252b 5879 /* PREFIX_VEX_0F383F */
c0f3af97 5880 {
592d1631
L
5881 { Bad_Opcode },
5882 { Bad_Opcode },
ec6f095a 5883 { "vpmaxud", { XM, Vex, EXx }, 0 },
c0f3af97
L
5884 },
5885
592a252b 5886 /* PREFIX_VEX_0F3840 */
c0f3af97 5887 {
592d1631
L
5888 { Bad_Opcode },
5889 { Bad_Opcode },
ec6f095a 5890 { "vpmulld", { XM, Vex, EXx }, 0 },
c0f3af97
L
5891 },
5892
592a252b 5893 /* PREFIX_VEX_0F3841 */
c0f3af97 5894 {
592d1631
L
5895 { Bad_Opcode },
5896 { Bad_Opcode },
592a252b 5897 { VEX_LEN_TABLE (VEX_LEN_0F3841_P_2) },
c0f3af97
L
5898 },
5899
6c30d220
L
5900 /* PREFIX_VEX_0F3845 */
5901 {
5902 { Bad_Opcode },
5903 { Bad_Opcode },
bf890a93 5904 { "vpsrlv%LW", { XM, Vex, EXx }, 0 },
6c30d220
L
5905 },
5906
5907 /* PREFIX_VEX_0F3846 */
5908 {
5909 { Bad_Opcode },
5910 { Bad_Opcode },
5911 { VEX_W_TABLE (VEX_W_0F3846_P_2) },
5912 },
5913
5914 /* PREFIX_VEX_0F3847 */
5915 {
5916 { Bad_Opcode },
5917 { Bad_Opcode },
bf890a93 5918 { "vpsllv%LW", { XM, Vex, EXx }, 0 },
6c30d220
L
5919 },
5920
5921 /* PREFIX_VEX_0F3858 */
5922 {
5923 { Bad_Opcode },
5924 { Bad_Opcode },
5925 { VEX_W_TABLE (VEX_W_0F3858_P_2) },
5926 },
5927
5928 /* PREFIX_VEX_0F3859 */
5929 {
5930 { Bad_Opcode },
5931 { Bad_Opcode },
5932 { VEX_W_TABLE (VEX_W_0F3859_P_2) },
5933 },
5934
5935 /* PREFIX_VEX_0F385A */
5936 {
5937 { Bad_Opcode },
5938 { Bad_Opcode },
5939 { MOD_TABLE (MOD_VEX_0F385A_PREFIX_2) },
5940 },
5941
5942 /* PREFIX_VEX_0F3878 */
5943 {
5944 { Bad_Opcode },
5945 { Bad_Opcode },
5946 { VEX_W_TABLE (VEX_W_0F3878_P_2) },
5947 },
5948
5949 /* PREFIX_VEX_0F3879 */
5950 {
5951 { Bad_Opcode },
5952 { Bad_Opcode },
5953 { VEX_W_TABLE (VEX_W_0F3879_P_2) },
5954 },
5955
5956 /* PREFIX_VEX_0F388C */
5957 {
5958 { Bad_Opcode },
5959 { Bad_Opcode },
f7002f42 5960 { MOD_TABLE (MOD_VEX_0F388C_PREFIX_2) },
6c30d220
L
5961 },
5962
5963 /* PREFIX_VEX_0F388E */
5964 {
5965 { Bad_Opcode },
5966 { Bad_Opcode },
f7002f42 5967 { MOD_TABLE (MOD_VEX_0F388E_PREFIX_2) },
6c30d220
L
5968 },
5969
5970 /* PREFIX_VEX_0F3890 */
5971 {
5972 { Bad_Opcode },
5973 { Bad_Opcode },
bf890a93 5974 { "vpgatherd%LW", { XM, MVexVSIBDWpX, Vex }, 0 },
6c30d220
L
5975 },
5976
5977 /* PREFIX_VEX_0F3891 */
5978 {
5979 { Bad_Opcode },
5980 { Bad_Opcode },
bf890a93 5981 { "vpgatherq%LW", { XMGatherQ, MVexVSIBQWpX, VexGatherQ }, 0 },
6c30d220
L
5982 },
5983
5984 /* PREFIX_VEX_0F3892 */
5985 {
5986 { Bad_Opcode },
5987 { Bad_Opcode },
bf890a93 5988 { "vgatherdp%XW", { XM, MVexVSIBDWpX, Vex }, 0 },
6c30d220
L
5989 },
5990
5991 /* PREFIX_VEX_0F3893 */
5992 {
5993 { Bad_Opcode },
5994 { Bad_Opcode },
bf890a93 5995 { "vgatherqp%XW", { XMGatherQ, MVexVSIBQWpX, VexGatherQ }, 0 },
6c30d220
L
5996 },
5997
592a252b 5998 /* PREFIX_VEX_0F3896 */
a5ff0eb2 5999 {
592d1631
L
6000 { Bad_Opcode },
6001 { Bad_Opcode },
bf890a93 6002 { "vfmaddsub132p%XW", { XM, Vex, EXx }, 0 },
a5ff0eb2
L
6003 },
6004
592a252b 6005 /* PREFIX_VEX_0F3897 */
a5ff0eb2 6006 {
592d1631
L
6007 { Bad_Opcode },
6008 { Bad_Opcode },
bf890a93 6009 { "vfmsubadd132p%XW", { XM, Vex, EXx }, 0 },
a5ff0eb2
L
6010 },
6011
592a252b 6012 /* PREFIX_VEX_0F3898 */
a5ff0eb2 6013 {
592d1631
L
6014 { Bad_Opcode },
6015 { Bad_Opcode },
bf890a93 6016 { "vfmadd132p%XW", { XM, Vex, EXx }, 0 },
a5ff0eb2
L
6017 },
6018
592a252b 6019 /* PREFIX_VEX_0F3899 */
a5ff0eb2 6020 {
592d1631
L
6021 { Bad_Opcode },
6022 { Bad_Opcode },
bf890a93 6023 { "vfmadd132s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
a5ff0eb2
L
6024 },
6025
592a252b 6026 /* PREFIX_VEX_0F389A */
a5ff0eb2 6027 {
592d1631
L
6028 { Bad_Opcode },
6029 { Bad_Opcode },
bf890a93 6030 { "vfmsub132p%XW", { XM, Vex, EXx }, 0 },
a5ff0eb2
L
6031 },
6032
592a252b 6033 /* PREFIX_VEX_0F389B */
c0f3af97 6034 {
592d1631
L
6035 { Bad_Opcode },
6036 { Bad_Opcode },
bf890a93 6037 { "vfmsub132s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6038 },
6039
592a252b 6040 /* PREFIX_VEX_0F389C */
c0f3af97 6041 {
592d1631
L
6042 { Bad_Opcode },
6043 { Bad_Opcode },
bf890a93 6044 { "vfnmadd132p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6045 },
6046
592a252b 6047 /* PREFIX_VEX_0F389D */
c0f3af97 6048 {
592d1631
L
6049 { Bad_Opcode },
6050 { Bad_Opcode },
bf890a93 6051 { "vfnmadd132s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6052 },
6053
592a252b 6054 /* PREFIX_VEX_0F389E */
c0f3af97 6055 {
592d1631
L
6056 { Bad_Opcode },
6057 { Bad_Opcode },
bf890a93 6058 { "vfnmsub132p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6059 },
6060
592a252b 6061 /* PREFIX_VEX_0F389F */
c0f3af97 6062 {
592d1631
L
6063 { Bad_Opcode },
6064 { Bad_Opcode },
bf890a93 6065 { "vfnmsub132s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6066 },
6067
592a252b 6068 /* PREFIX_VEX_0F38A6 */
c0f3af97 6069 {
592d1631
L
6070 { Bad_Opcode },
6071 { Bad_Opcode },
bf890a93 6072 { "vfmaddsub213p%XW", { XM, Vex, EXx }, 0 },
592d1631 6073 { Bad_Opcode },
c0f3af97
L
6074 },
6075
592a252b 6076 /* PREFIX_VEX_0F38A7 */
c0f3af97 6077 {
592d1631
L
6078 { Bad_Opcode },
6079 { Bad_Opcode },
bf890a93 6080 { "vfmsubadd213p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6081 },
6082
592a252b 6083 /* PREFIX_VEX_0F38A8 */
c0f3af97 6084 {
592d1631
L
6085 { Bad_Opcode },
6086 { Bad_Opcode },
bf890a93 6087 { "vfmadd213p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6088 },
6089
592a252b 6090 /* PREFIX_VEX_0F38A9 */
c0f3af97 6091 {
592d1631
L
6092 { Bad_Opcode },
6093 { Bad_Opcode },
bf890a93 6094 { "vfmadd213s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6095 },
6096
592a252b 6097 /* PREFIX_VEX_0F38AA */
c0f3af97 6098 {
592d1631
L
6099 { Bad_Opcode },
6100 { Bad_Opcode },
bf890a93 6101 { "vfmsub213p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6102 },
6103
592a252b 6104 /* PREFIX_VEX_0F38AB */
c0f3af97 6105 {
592d1631
L
6106 { Bad_Opcode },
6107 { Bad_Opcode },
bf890a93 6108 { "vfmsub213s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6109 },
6110
592a252b 6111 /* PREFIX_VEX_0F38AC */
c0f3af97 6112 {
592d1631
L
6113 { Bad_Opcode },
6114 { Bad_Opcode },
bf890a93 6115 { "vfnmadd213p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6116 },
6117
592a252b 6118 /* PREFIX_VEX_0F38AD */
c0f3af97 6119 {
592d1631
L
6120 { Bad_Opcode },
6121 { Bad_Opcode },
bf890a93 6122 { "vfnmadd213s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6123 },
6124
592a252b 6125 /* PREFIX_VEX_0F38AE */
c0f3af97 6126 {
592d1631
L
6127 { Bad_Opcode },
6128 { Bad_Opcode },
bf890a93 6129 { "vfnmsub213p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6130 },
6131
592a252b 6132 /* PREFIX_VEX_0F38AF */
c0f3af97 6133 {
592d1631
L
6134 { Bad_Opcode },
6135 { Bad_Opcode },
bf890a93 6136 { "vfnmsub213s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6137 },
6138
592a252b 6139 /* PREFIX_VEX_0F38B6 */
c0f3af97 6140 {
592d1631
L
6141 { Bad_Opcode },
6142 { Bad_Opcode },
bf890a93 6143 { "vfmaddsub231p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6144 },
6145
592a252b 6146 /* PREFIX_VEX_0F38B7 */
c0f3af97 6147 {
592d1631
L
6148 { Bad_Opcode },
6149 { Bad_Opcode },
bf890a93 6150 { "vfmsubadd231p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6151 },
6152
592a252b 6153 /* PREFIX_VEX_0F38B8 */
c0f3af97 6154 {
592d1631
L
6155 { Bad_Opcode },
6156 { Bad_Opcode },
bf890a93 6157 { "vfmadd231p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6158 },
6159
592a252b 6160 /* PREFIX_VEX_0F38B9 */
c0f3af97 6161 {
592d1631
L
6162 { Bad_Opcode },
6163 { Bad_Opcode },
bf890a93 6164 { "vfmadd231s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6165 },
6166
592a252b 6167 /* PREFIX_VEX_0F38BA */
c0f3af97 6168 {
592d1631
L
6169 { Bad_Opcode },
6170 { Bad_Opcode },
bf890a93 6171 { "vfmsub231p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6172 },
6173
592a252b 6174 /* PREFIX_VEX_0F38BB */
c0f3af97 6175 {
592d1631
L
6176 { Bad_Opcode },
6177 { Bad_Opcode },
bf890a93 6178 { "vfmsub231s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6179 },
6180
592a252b 6181 /* PREFIX_VEX_0F38BC */
c0f3af97 6182 {
592d1631
L
6183 { Bad_Opcode },
6184 { Bad_Opcode },
bf890a93 6185 { "vfnmadd231p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6186 },
6187
592a252b 6188 /* PREFIX_VEX_0F38BD */
c0f3af97 6189 {
592d1631
L
6190 { Bad_Opcode },
6191 { Bad_Opcode },
bf890a93 6192 { "vfnmadd231s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6193 },
6194
592a252b 6195 /* PREFIX_VEX_0F38BE */
c0f3af97 6196 {
592d1631
L
6197 { Bad_Opcode },
6198 { Bad_Opcode },
bf890a93 6199 { "vfnmsub231p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6200 },
6201
592a252b 6202 /* PREFIX_VEX_0F38BF */
c0f3af97 6203 {
592d1631
L
6204 { Bad_Opcode },
6205 { Bad_Opcode },
bf890a93 6206 { "vfnmsub231s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6207 },
6208
48521003
IT
6209 /* PREFIX_VEX_0F38CF */
6210 {
6211 { Bad_Opcode },
6212 { Bad_Opcode },
6213 { VEX_W_TABLE (VEX_W_0F38CF_P_2) },
6214 },
6215
592a252b 6216 /* PREFIX_VEX_0F38DB */
c0f3af97 6217 {
592d1631
L
6218 { Bad_Opcode },
6219 { Bad_Opcode },
592a252b 6220 { VEX_LEN_TABLE (VEX_LEN_0F38DB_P_2) },
c0f3af97
L
6221 },
6222
592a252b 6223 /* PREFIX_VEX_0F38DC */
c0f3af97 6224 {
592d1631
L
6225 { Bad_Opcode },
6226 { Bad_Opcode },
8dcf1fad 6227 { "vaesenc", { XM, Vex, EXx }, 0 },
c0f3af97
L
6228 },
6229
592a252b 6230 /* PREFIX_VEX_0F38DD */
c0f3af97 6231 {
592d1631
L
6232 { Bad_Opcode },
6233 { Bad_Opcode },
8dcf1fad 6234 { "vaesenclast", { XM, Vex, EXx }, 0 },
c0f3af97
L
6235 },
6236
592a252b 6237 /* PREFIX_VEX_0F38DE */
c0f3af97 6238 {
592d1631
L
6239 { Bad_Opcode },
6240 { Bad_Opcode },
8dcf1fad 6241 { "vaesdec", { XM, Vex, EXx }, 0 },
c0f3af97
L
6242 },
6243
592a252b 6244 /* PREFIX_VEX_0F38DF */
c0f3af97 6245 {
592d1631
L
6246 { Bad_Opcode },
6247 { Bad_Opcode },
8dcf1fad 6248 { "vaesdeclast", { XM, Vex, EXx }, 0 },
c0f3af97
L
6249 },
6250
f12dc422
L
6251 /* PREFIX_VEX_0F38F2 */
6252 {
6253 { VEX_LEN_TABLE (VEX_LEN_0F38F2_P_0) },
6254 },
6255
6256 /* PREFIX_VEX_0F38F3_REG_1 */
6257 {
6258 { VEX_LEN_TABLE (VEX_LEN_0F38F3_R_1_P_0) },
6259 },
6260
6261 /* PREFIX_VEX_0F38F3_REG_2 */
6262 {
6263 { VEX_LEN_TABLE (VEX_LEN_0F38F3_R_2_P_0) },
6264 },
6265
6266 /* PREFIX_VEX_0F38F3_REG_3 */
6267 {
6268 { VEX_LEN_TABLE (VEX_LEN_0F38F3_R_3_P_0) },
6269 },
6270
6c30d220
L
6271 /* PREFIX_VEX_0F38F5 */
6272 {
6273 { VEX_LEN_TABLE (VEX_LEN_0F38F5_P_0) },
6274 { VEX_LEN_TABLE (VEX_LEN_0F38F5_P_1) },
6275 { Bad_Opcode },
6276 { VEX_LEN_TABLE (VEX_LEN_0F38F5_P_3) },
6277 },
6278
6279 /* PREFIX_VEX_0F38F6 */
6280 {
6281 { Bad_Opcode },
6282 { Bad_Opcode },
6283 { Bad_Opcode },
6284 { VEX_LEN_TABLE (VEX_LEN_0F38F6_P_3) },
6285 },
6286
f12dc422
L
6287 /* PREFIX_VEX_0F38F7 */
6288 {
6289 { VEX_LEN_TABLE (VEX_LEN_0F38F7_P_0) },
6c30d220
L
6290 { VEX_LEN_TABLE (VEX_LEN_0F38F7_P_1) },
6291 { VEX_LEN_TABLE (VEX_LEN_0F38F7_P_2) },
6292 { VEX_LEN_TABLE (VEX_LEN_0F38F7_P_3) },
6293 },
6294
6295 /* PREFIX_VEX_0F3A00 */
6296 {
6297 { Bad_Opcode },
6298 { Bad_Opcode },
6299 { VEX_LEN_TABLE (VEX_LEN_0F3A00_P_2) },
6300 },
6301
6302 /* PREFIX_VEX_0F3A01 */
6303 {
6304 { Bad_Opcode },
6305 { Bad_Opcode },
6306 { VEX_LEN_TABLE (VEX_LEN_0F3A01_P_2) },
6307 },
6308
6309 /* PREFIX_VEX_0F3A02 */
6310 {
6311 { Bad_Opcode },
6312 { Bad_Opcode },
6313 { VEX_W_TABLE (VEX_W_0F3A02_P_2) },
f12dc422
L
6314 },
6315
592a252b 6316 /* PREFIX_VEX_0F3A04 */
c0f3af97 6317 {
592d1631
L
6318 { Bad_Opcode },
6319 { Bad_Opcode },
592a252b 6320 { VEX_W_TABLE (VEX_W_0F3A04_P_2) },
c0f3af97
L
6321 },
6322
592a252b 6323 /* PREFIX_VEX_0F3A05 */
c0f3af97 6324 {
592d1631
L
6325 { Bad_Opcode },
6326 { Bad_Opcode },
592a252b 6327 { VEX_W_TABLE (VEX_W_0F3A05_P_2) },
c0f3af97
L
6328 },
6329
592a252b 6330 /* PREFIX_VEX_0F3A06 */
c0f3af97 6331 {
592d1631
L
6332 { Bad_Opcode },
6333 { Bad_Opcode },
592a252b 6334 { VEX_LEN_TABLE (VEX_LEN_0F3A06_P_2) },
c0f3af97
L
6335 },
6336
592a252b 6337 /* PREFIX_VEX_0F3A08 */
c0f3af97 6338 {
592d1631
L
6339 { Bad_Opcode },
6340 { Bad_Opcode },
ec6f095a 6341 { "vroundps", { XM, EXx, Ib }, 0 },
c0f3af97
L
6342 },
6343
592a252b 6344 /* PREFIX_VEX_0F3A09 */
c0f3af97 6345 {
592d1631
L
6346 { Bad_Opcode },
6347 { Bad_Opcode },
ec6f095a 6348 { "vroundpd", { XM, EXx, Ib }, 0 },
c0f3af97
L
6349 },
6350
592a252b 6351 /* PREFIX_VEX_0F3A0A */
c0f3af97 6352 {
592d1631
L
6353 { Bad_Opcode },
6354 { Bad_Opcode },
ec6f095a 6355 { "vroundss", { XMScalar, VexScalar, EXdScalar, Ib }, 0 },
0bfee649
L
6356 },
6357
592a252b 6358 /* PREFIX_VEX_0F3A0B */
0bfee649 6359 {
592d1631
L
6360 { Bad_Opcode },
6361 { Bad_Opcode },
ec6f095a 6362 { "vroundsd", { XMScalar, VexScalar, EXqScalar, Ib }, 0 },
0bfee649
L
6363 },
6364
592a252b 6365 /* PREFIX_VEX_0F3A0C */
0bfee649 6366 {
592d1631
L
6367 { Bad_Opcode },
6368 { Bad_Opcode },
ec6f095a 6369 { "vblendps", { XM, Vex, EXx, Ib }, 0 },
0bfee649
L
6370 },
6371
592a252b 6372 /* PREFIX_VEX_0F3A0D */
0bfee649 6373 {
592d1631
L
6374 { Bad_Opcode },
6375 { Bad_Opcode },
ec6f095a 6376 { "vblendpd", { XM, Vex, EXx, Ib }, 0 },
c0f3af97
L
6377 },
6378
592a252b 6379 /* PREFIX_VEX_0F3A0E */
0bfee649 6380 {
592d1631
L
6381 { Bad_Opcode },
6382 { Bad_Opcode },
ec6f095a 6383 { "vpblendw", { XM, Vex, EXx, Ib }, 0 },
0bfee649
L
6384 },
6385
592a252b 6386 /* PREFIX_VEX_0F3A0F */
0bfee649 6387 {
592d1631
L
6388 { Bad_Opcode },
6389 { Bad_Opcode },
ec6f095a 6390 { "vpalignr", { XM, Vex, EXx, Ib }, 0 },
0bfee649
L
6391 },
6392
592a252b 6393 /* PREFIX_VEX_0F3A14 */
0bfee649 6394 {
592d1631
L
6395 { Bad_Opcode },
6396 { Bad_Opcode },
592a252b 6397 { VEX_LEN_TABLE (VEX_LEN_0F3A14_P_2) },
0bfee649
L
6398 },
6399
592a252b 6400 /* PREFIX_VEX_0F3A15 */
0bfee649 6401 {
592d1631
L
6402 { Bad_Opcode },
6403 { Bad_Opcode },
592a252b 6404 { VEX_LEN_TABLE (VEX_LEN_0F3A15_P_2) },
0bfee649
L
6405 },
6406
592a252b 6407 /* PREFIX_VEX_0F3A16 */
c0f3af97 6408 {
592d1631
L
6409 { Bad_Opcode },
6410 { Bad_Opcode },
592a252b 6411 { VEX_LEN_TABLE (VEX_LEN_0F3A16_P_2) },
c0f3af97
L
6412 },
6413
592a252b 6414 /* PREFIX_VEX_0F3A17 */
c0f3af97 6415 {
592d1631
L
6416 { Bad_Opcode },
6417 { Bad_Opcode },
592a252b 6418 { VEX_LEN_TABLE (VEX_LEN_0F3A17_P_2) },
c0f3af97
L
6419 },
6420
592a252b 6421 /* PREFIX_VEX_0F3A18 */
c0f3af97 6422 {
592d1631
L
6423 { Bad_Opcode },
6424 { Bad_Opcode },
592a252b 6425 { VEX_LEN_TABLE (VEX_LEN_0F3A18_P_2) },
c0f3af97
L
6426 },
6427
592a252b 6428 /* PREFIX_VEX_0F3A19 */
c0f3af97 6429 {
592d1631
L
6430 { Bad_Opcode },
6431 { Bad_Opcode },
592a252b 6432 { VEX_LEN_TABLE (VEX_LEN_0F3A19_P_2) },
c0f3af97
L
6433 },
6434
592a252b 6435 /* PREFIX_VEX_0F3A1D */
c7b8aa3a
L
6436 {
6437 { Bad_Opcode },
6438 { Bad_Opcode },
bf890a93 6439 { "vcvtps2ph", { EXxmmq, XM, Ib }, 0 },
c7b8aa3a
L
6440 },
6441
592a252b 6442 /* PREFIX_VEX_0F3A20 */
c0f3af97 6443 {
592d1631
L
6444 { Bad_Opcode },
6445 { Bad_Opcode },
592a252b 6446 { VEX_LEN_TABLE (VEX_LEN_0F3A20_P_2) },
c0f3af97
L
6447 },
6448
592a252b 6449 /* PREFIX_VEX_0F3A21 */
c0f3af97 6450 {
592d1631
L
6451 { Bad_Opcode },
6452 { Bad_Opcode },
592a252b 6453 { VEX_LEN_TABLE (VEX_LEN_0F3A21_P_2) },
c0f3af97
L
6454 },
6455
592a252b 6456 /* PREFIX_VEX_0F3A22 */
0bfee649 6457 {
592d1631
L
6458 { Bad_Opcode },
6459 { Bad_Opcode },
592a252b 6460 { VEX_LEN_TABLE (VEX_LEN_0F3A22_P_2) },
0bfee649
L
6461 },
6462
43234a1e
L
6463 /* PREFIX_VEX_0F3A30 */
6464 {
6465 { Bad_Opcode },
6466 { Bad_Opcode },
6467 { VEX_LEN_TABLE (VEX_LEN_0F3A30_P_2) },
6468 },
6469
1ba585e8
IT
6470 /* PREFIX_VEX_0F3A31 */
6471 {
6472 { Bad_Opcode },
6473 { Bad_Opcode },
6474 { VEX_LEN_TABLE (VEX_LEN_0F3A31_P_2) },
6475 },
6476
43234a1e
L
6477 /* PREFIX_VEX_0F3A32 */
6478 {
6479 { Bad_Opcode },
6480 { Bad_Opcode },
6481 { VEX_LEN_TABLE (VEX_LEN_0F3A32_P_2) },
6482 },
6483
1ba585e8
IT
6484 /* PREFIX_VEX_0F3A33 */
6485 {
6486 { Bad_Opcode },
6487 { Bad_Opcode },
6488 { VEX_LEN_TABLE (VEX_LEN_0F3A33_P_2) },
6489 },
6490
6c30d220
L
6491 /* PREFIX_VEX_0F3A38 */
6492 {
6493 { Bad_Opcode },
6494 { Bad_Opcode },
6495 { VEX_LEN_TABLE (VEX_LEN_0F3A38_P_2) },
6496 },
6497
6498 /* PREFIX_VEX_0F3A39 */
6499 {
6500 { Bad_Opcode },
6501 { Bad_Opcode },
6502 { VEX_LEN_TABLE (VEX_LEN_0F3A39_P_2) },
6503 },
6504
592a252b 6505 /* PREFIX_VEX_0F3A40 */
c0f3af97 6506 {
592d1631
L
6507 { Bad_Opcode },
6508 { Bad_Opcode },
ec6f095a 6509 { "vdpps", { XM, Vex, EXx, Ib }, 0 },
c0f3af97
L
6510 },
6511
592a252b 6512 /* PREFIX_VEX_0F3A41 */
c0f3af97 6513 {
592d1631
L
6514 { Bad_Opcode },
6515 { Bad_Opcode },
592a252b 6516 { VEX_LEN_TABLE (VEX_LEN_0F3A41_P_2) },
c0f3af97
L
6517 },
6518
592a252b 6519 /* PREFIX_VEX_0F3A42 */
c0f3af97 6520 {
592d1631
L
6521 { Bad_Opcode },
6522 { Bad_Opcode },
ec6f095a 6523 { "vmpsadbw", { XM, Vex, EXx, Ib }, 0 },
c0f3af97
L
6524 },
6525
592a252b 6526 /* PREFIX_VEX_0F3A44 */
ce2f5b3c 6527 {
592d1631
L
6528 { Bad_Opcode },
6529 { Bad_Opcode },
ff1982d5 6530 { "vpclmulqdq", { XM, Vex, EXx, PCLMUL }, 0 },
ce2f5b3c
L
6531 },
6532
6c30d220
L
6533 /* PREFIX_VEX_0F3A46 */
6534 {
6535 { Bad_Opcode },
6536 { Bad_Opcode },
6537 { VEX_LEN_TABLE (VEX_LEN_0F3A46_P_2) },
6538 },
6539
592a252b 6540 /* PREFIX_VEX_0F3A48 */
a683cc34
SP
6541 {
6542 { Bad_Opcode },
6543 { Bad_Opcode },
592a252b 6544 { VEX_W_TABLE (VEX_W_0F3A48_P_2) },
a683cc34
SP
6545 },
6546
592a252b 6547 /* PREFIX_VEX_0F3A49 */
a683cc34
SP
6548 {
6549 { Bad_Opcode },
6550 { Bad_Opcode },
592a252b 6551 { VEX_W_TABLE (VEX_W_0F3A49_P_2) },
a683cc34
SP
6552 },
6553
592a252b 6554 /* PREFIX_VEX_0F3A4A */
c0f3af97 6555 {
592d1631
L
6556 { Bad_Opcode },
6557 { Bad_Opcode },
592a252b 6558 { VEX_W_TABLE (VEX_W_0F3A4A_P_2) },
c0f3af97
L
6559 },
6560
592a252b 6561 /* PREFIX_VEX_0F3A4B */
c0f3af97 6562 {
592d1631
L
6563 { Bad_Opcode },
6564 { Bad_Opcode },
592a252b 6565 { VEX_W_TABLE (VEX_W_0F3A4B_P_2) },
c0f3af97
L
6566 },
6567
592a252b 6568 /* PREFIX_VEX_0F3A4C */
c0f3af97 6569 {
592d1631
L
6570 { Bad_Opcode },
6571 { Bad_Opcode },
6c30d220 6572 { VEX_W_TABLE (VEX_W_0F3A4C_P_2) },
c0f3af97
L
6573 },
6574
592a252b 6575 /* PREFIX_VEX_0F3A5C */
922d8de8 6576 {
592d1631
L
6577 { Bad_Opcode },
6578 { Bad_Opcode },
3a2430e0 6579 { "vfmaddsubps", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
922d8de8
DR
6580 },
6581
592a252b 6582 /* PREFIX_VEX_0F3A5D */
922d8de8 6583 {
592d1631
L
6584 { Bad_Opcode },
6585 { Bad_Opcode },
3a2430e0 6586 { "vfmaddsubpd", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
922d8de8
DR
6587 },
6588
592a252b 6589 /* PREFIX_VEX_0F3A5E */
922d8de8 6590 {
592d1631
L
6591 { Bad_Opcode },
6592 { Bad_Opcode },
3a2430e0 6593 { "vfmsubaddps", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
922d8de8
DR
6594 },
6595
592a252b 6596 /* PREFIX_VEX_0F3A5F */
922d8de8 6597 {
592d1631
L
6598 { Bad_Opcode },
6599 { Bad_Opcode },
3a2430e0 6600 { "vfmsubaddpd", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
922d8de8
DR
6601 },
6602
592a252b 6603 /* PREFIX_VEX_0F3A60 */
c0f3af97 6604 {
592d1631
L
6605 { Bad_Opcode },
6606 { Bad_Opcode },
592a252b 6607 { VEX_LEN_TABLE (VEX_LEN_0F3A60_P_2) },
592d1631 6608 { Bad_Opcode },
c0f3af97
L
6609 },
6610
592a252b 6611 /* PREFIX_VEX_0F3A61 */
c0f3af97 6612 {
592d1631
L
6613 { Bad_Opcode },
6614 { Bad_Opcode },
592a252b 6615 { VEX_LEN_TABLE (VEX_LEN_0F3A61_P_2) },
c0f3af97
L
6616 },
6617
592a252b 6618 /* PREFIX_VEX_0F3A62 */
c0f3af97 6619 {
592d1631
L
6620 { Bad_Opcode },
6621 { Bad_Opcode },
592a252b 6622 { VEX_LEN_TABLE (VEX_LEN_0F3A62_P_2) },
c0f3af97
L
6623 },
6624
592a252b 6625 /* PREFIX_VEX_0F3A63 */
c0f3af97 6626 {
592d1631
L
6627 { Bad_Opcode },
6628 { Bad_Opcode },
592a252b 6629 { VEX_LEN_TABLE (VEX_LEN_0F3A63_P_2) },
c0f3af97 6630 },
a5ff0eb2 6631
592a252b 6632 /* PREFIX_VEX_0F3A68 */
922d8de8 6633 {
592d1631
L
6634 { Bad_Opcode },
6635 { Bad_Opcode },
3a2430e0 6636 { "vfmaddps", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
922d8de8
DR
6637 },
6638
592a252b 6639 /* PREFIX_VEX_0F3A69 */
922d8de8 6640 {
592d1631
L
6641 { Bad_Opcode },
6642 { Bad_Opcode },
3a2430e0 6643 { "vfmaddpd", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
922d8de8
DR
6644 },
6645
592a252b 6646 /* PREFIX_VEX_0F3A6A */
922d8de8 6647 {
592d1631
L
6648 { Bad_Opcode },
6649 { Bad_Opcode },
592a252b 6650 { VEX_LEN_TABLE (VEX_LEN_0F3A6A_P_2) },
922d8de8
DR
6651 },
6652
592a252b 6653 /* PREFIX_VEX_0F3A6B */
922d8de8 6654 {
592d1631
L
6655 { Bad_Opcode },
6656 { Bad_Opcode },
592a252b 6657 { VEX_LEN_TABLE (VEX_LEN_0F3A6B_P_2) },
922d8de8
DR
6658 },
6659
592a252b 6660 /* PREFIX_VEX_0F3A6C */
922d8de8 6661 {
592d1631
L
6662 { Bad_Opcode },
6663 { Bad_Opcode },
3a2430e0 6664 { "vfmsubps", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
922d8de8
DR
6665 },
6666
592a252b 6667 /* PREFIX_VEX_0F3A6D */
922d8de8 6668 {
592d1631
L
6669 { Bad_Opcode },
6670 { Bad_Opcode },
3a2430e0 6671 { "vfmsubpd", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
922d8de8
DR
6672 },
6673
592a252b 6674 /* PREFIX_VEX_0F3A6E */
922d8de8 6675 {
592d1631
L
6676 { Bad_Opcode },
6677 { Bad_Opcode },
592a252b 6678 { VEX_LEN_TABLE (VEX_LEN_0F3A6E_P_2) },
922d8de8
DR
6679 },
6680
592a252b 6681 /* PREFIX_VEX_0F3A6F */
922d8de8 6682 {
592d1631
L
6683 { Bad_Opcode },
6684 { Bad_Opcode },
592a252b 6685 { VEX_LEN_TABLE (VEX_LEN_0F3A6F_P_2) },
922d8de8
DR
6686 },
6687
592a252b 6688 /* PREFIX_VEX_0F3A78 */
922d8de8 6689 {
592d1631
L
6690 { Bad_Opcode },
6691 { Bad_Opcode },
3a2430e0 6692 { "vfnmaddps", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
922d8de8
DR
6693 },
6694
592a252b 6695 /* PREFIX_VEX_0F3A79 */
922d8de8 6696 {
592d1631
L
6697 { Bad_Opcode },
6698 { Bad_Opcode },
3a2430e0 6699 { "vfnmaddpd", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
922d8de8
DR
6700 },
6701
592a252b 6702 /* PREFIX_VEX_0F3A7A */
922d8de8 6703 {
592d1631
L
6704 { Bad_Opcode },
6705 { Bad_Opcode },
592a252b 6706 { VEX_LEN_TABLE (VEX_LEN_0F3A7A_P_2) },
922d8de8
DR
6707 },
6708
592a252b 6709 /* PREFIX_VEX_0F3A7B */
922d8de8 6710 {
592d1631
L
6711 { Bad_Opcode },
6712 { Bad_Opcode },
592a252b 6713 { VEX_LEN_TABLE (VEX_LEN_0F3A7B_P_2) },
922d8de8
DR
6714 },
6715
592a252b 6716 /* PREFIX_VEX_0F3A7C */
922d8de8 6717 {
592d1631
L
6718 { Bad_Opcode },
6719 { Bad_Opcode },
3a2430e0 6720 { "vfnmsubps", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
592d1631 6721 { Bad_Opcode },
922d8de8
DR
6722 },
6723
592a252b 6724 /* PREFIX_VEX_0F3A7D */
922d8de8 6725 {
592d1631
L
6726 { Bad_Opcode },
6727 { Bad_Opcode },
3a2430e0 6728 { "vfnmsubpd", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
922d8de8
DR
6729 },
6730
592a252b 6731 /* PREFIX_VEX_0F3A7E */
922d8de8 6732 {
592d1631
L
6733 { Bad_Opcode },
6734 { Bad_Opcode },
592a252b 6735 { VEX_LEN_TABLE (VEX_LEN_0F3A7E_P_2) },
922d8de8
DR
6736 },
6737
592a252b 6738 /* PREFIX_VEX_0F3A7F */
922d8de8 6739 {
592d1631
L
6740 { Bad_Opcode },
6741 { Bad_Opcode },
592a252b 6742 { VEX_LEN_TABLE (VEX_LEN_0F3A7F_P_2) },
922d8de8
DR
6743 },
6744
48521003
IT
6745 /* PREFIX_VEX_0F3ACE */
6746 {
6747 { Bad_Opcode },
6748 { Bad_Opcode },
6749 { VEX_W_TABLE (VEX_W_0F3ACE_P_2) },
6750 },
6751
6752 /* PREFIX_VEX_0F3ACF */
6753 {
6754 { Bad_Opcode },
6755 { Bad_Opcode },
6756 { VEX_W_TABLE (VEX_W_0F3ACF_P_2) },
6757 },
6758
592a252b 6759 /* PREFIX_VEX_0F3ADF */
a5ff0eb2 6760 {
592d1631
L
6761 { Bad_Opcode },
6762 { Bad_Opcode },
592a252b 6763 { VEX_LEN_TABLE (VEX_LEN_0F3ADF_P_2) },
a5ff0eb2 6764 },
6c30d220
L
6765
6766 /* PREFIX_VEX_0F3AF0 */
6767 {
6768 { Bad_Opcode },
6769 { Bad_Opcode },
6770 { Bad_Opcode },
6771 { VEX_LEN_TABLE (VEX_LEN_0F3AF0_P_3) },
6772 },
43234a1e
L
6773
6774#define NEED_PREFIX_TABLE
6775#include "i386-dis-evex.h"
6776#undef NEED_PREFIX_TABLE
c0f3af97
L
6777};
6778
6779static const struct dis386 x86_64_table[][2] = {
6780 /* X86_64_06 */
6781 {
bf890a93 6782 { "pushP", { es }, 0 },
c0f3af97
L
6783 },
6784
6785 /* X86_64_07 */
6786 {
bf890a93 6787 { "popP", { es }, 0 },
c0f3af97
L
6788 },
6789
6790 /* X86_64_0D */
6791 {
bf890a93 6792 { "pushP", { cs }, 0 },
c0f3af97
L
6793 },
6794
6795 /* X86_64_16 */
6796 {
bf890a93 6797 { "pushP", { ss }, 0 },
c0f3af97
L
6798 },
6799
6800 /* X86_64_17 */
6801 {
bf890a93 6802 { "popP", { ss }, 0 },
c0f3af97
L
6803 },
6804
6805 /* X86_64_1E */
6806 {
bf890a93 6807 { "pushP", { ds }, 0 },
c0f3af97
L
6808 },
6809
6810 /* X86_64_1F */
6811 {
bf890a93 6812 { "popP", { ds }, 0 },
c0f3af97
L
6813 },
6814
6815 /* X86_64_27 */
6816 {
bf890a93 6817 { "daa", { XX }, 0 },
c0f3af97
L
6818 },
6819
6820 /* X86_64_2F */
6821 {
bf890a93 6822 { "das", { XX }, 0 },
c0f3af97
L
6823 },
6824
6825 /* X86_64_37 */
6826 {
bf890a93 6827 { "aaa", { XX }, 0 },
c0f3af97
L
6828 },
6829
6830 /* X86_64_3F */
6831 {
bf890a93 6832 { "aas", { XX }, 0 },
c0f3af97
L
6833 },
6834
6835 /* X86_64_60 */
6836 {
bf890a93 6837 { "pushaP", { XX }, 0 },
c0f3af97
L
6838 },
6839
6840 /* X86_64_61 */
6841 {
bf890a93 6842 { "popaP", { XX }, 0 },
c0f3af97
L
6843 },
6844
6845 /* X86_64_62 */
6846 {
6847 { MOD_TABLE (MOD_62_32BIT) },
43234a1e 6848 { EVEX_TABLE (EVEX_0F) },
c0f3af97
L
6849 },
6850
6851 /* X86_64_63 */
6852 {
bf890a93
IT
6853 { "arpl", { Ew, Gw }, 0 },
6854 { "movs{lq|xd}", { Gv, Ed }, 0 },
c0f3af97
L
6855 },
6856
6857 /* X86_64_6D */
6858 {
bf890a93
IT
6859 { "ins{R|}", { Yzr, indirDX }, 0 },
6860 { "ins{G|}", { Yzr, indirDX }, 0 },
c0f3af97
L
6861 },
6862
6863 /* X86_64_6F */
6864 {
bf890a93
IT
6865 { "outs{R|}", { indirDXr, Xz }, 0 },
6866 { "outs{G|}", { indirDXr, Xz }, 0 },
c0f3af97
L
6867 },
6868
d039fef3 6869 /* X86_64_82 */
8b89fe14 6870 {
de194d85 6871 /* Opcode 0x82 is an alias of opcode 0x80 in 32-bit mode. */
d039fef3 6872 { REG_TABLE (REG_80) },
8b89fe14
L
6873 },
6874
c0f3af97
L
6875 /* X86_64_9A */
6876 {
bf890a93 6877 { "Jcall{T|}", { Ap }, 0 },
c0f3af97
L
6878 },
6879
6880 /* X86_64_C4 */
6881 {
6882 { MOD_TABLE (MOD_C4_32BIT) },
6883 { VEX_C4_TABLE (VEX_0F) },
6884 },
6885
6886 /* X86_64_C5 */
6887 {
6888 { MOD_TABLE (MOD_C5_32BIT) },
6889 { VEX_C5_TABLE (VEX_0F) },
6890 },
6891
6892 /* X86_64_CE */
6893 {
bf890a93 6894 { "into", { XX }, 0 },
c0f3af97
L
6895 },
6896
6897 /* X86_64_D4 */
6898 {
bf890a93 6899 { "aam", { Ib }, 0 },
c0f3af97
L
6900 },
6901
6902 /* X86_64_D5 */
6903 {
bf890a93 6904 { "aad", { Ib }, 0 },
c0f3af97
L
6905 },
6906
a72d2af2
L
6907 /* X86_64_E8 */
6908 {
6909 { "callP", { Jv, BND }, 0 },
5db04b09 6910 { "call@", { Jv, BND }, 0 }
a72d2af2
L
6911 },
6912
6913 /* X86_64_E9 */
6914 {
6915 { "jmpP", { Jv, BND }, 0 },
5db04b09 6916 { "jmp@", { Jv, BND }, 0 }
a72d2af2
L
6917 },
6918
c0f3af97
L
6919 /* X86_64_EA */
6920 {
bf890a93 6921 { "Jjmp{T|}", { Ap }, 0 },
c0f3af97
L
6922 },
6923
6924 /* X86_64_0F01_REG_0 */
6925 {
bf890a93
IT
6926 { "sgdt{Q|IQ}", { M }, 0 },
6927 { "sgdt", { M }, 0 },
c0f3af97
L
6928 },
6929
6930 /* X86_64_0F01_REG_1 */
6931 {
bf890a93
IT
6932 { "sidt{Q|IQ}", { M }, 0 },
6933 { "sidt", { M }, 0 },
c0f3af97
L
6934 },
6935
6936 /* X86_64_0F01_REG_2 */
6937 {
bf890a93
IT
6938 { "lgdt{Q|Q}", { M }, 0 },
6939 { "lgdt", { M }, 0 },
c0f3af97
L
6940 },
6941
6942 /* X86_64_0F01_REG_3 */
6943 {
bf890a93
IT
6944 { "lidt{Q|Q}", { M }, 0 },
6945 { "lidt", { M }, 0 },
c0f3af97
L
6946 },
6947};
6948
6949static const struct dis386 three_byte_table[][256] = {
c1e679ec
DR
6950
6951 /* THREE_BYTE_0F38 */
c0f3af97
L
6952 {
6953 /* 00 */
507bd325
L
6954 { "pshufb", { MX, EM }, PREFIX_OPCODE },
6955 { "phaddw", { MX, EM }, PREFIX_OPCODE },
6956 { "phaddd", { MX, EM }, PREFIX_OPCODE },
6957 { "phaddsw", { MX, EM }, PREFIX_OPCODE },
6958 { "pmaddubsw", { MX, EM }, PREFIX_OPCODE },
6959 { "phsubw", { MX, EM }, PREFIX_OPCODE },
6960 { "phsubd", { MX, EM }, PREFIX_OPCODE },
6961 { "phsubsw", { MX, EM }, PREFIX_OPCODE },
c0f3af97 6962 /* 08 */
507bd325
L
6963 { "psignb", { MX, EM }, PREFIX_OPCODE },
6964 { "psignw", { MX, EM }, PREFIX_OPCODE },
6965 { "psignd", { MX, EM }, PREFIX_OPCODE },
6966 { "pmulhrsw", { MX, EM }, PREFIX_OPCODE },
592d1631
L
6967 { Bad_Opcode },
6968 { Bad_Opcode },
6969 { Bad_Opcode },
6970 { Bad_Opcode },
f88c9eb0
SP
6971 /* 10 */
6972 { PREFIX_TABLE (PREFIX_0F3810) },
592d1631
L
6973 { Bad_Opcode },
6974 { Bad_Opcode },
6975 { Bad_Opcode },
f88c9eb0
SP
6976 { PREFIX_TABLE (PREFIX_0F3814) },
6977 { PREFIX_TABLE (PREFIX_0F3815) },
592d1631 6978 { Bad_Opcode },
f88c9eb0
SP
6979 { PREFIX_TABLE (PREFIX_0F3817) },
6980 /* 18 */
592d1631
L
6981 { Bad_Opcode },
6982 { Bad_Opcode },
6983 { Bad_Opcode },
6984 { Bad_Opcode },
507bd325
L
6985 { "pabsb", { MX, EM }, PREFIX_OPCODE },
6986 { "pabsw", { MX, EM }, PREFIX_OPCODE },
6987 { "pabsd", { MX, EM }, PREFIX_OPCODE },
592d1631 6988 { Bad_Opcode },
f88c9eb0
SP
6989 /* 20 */
6990 { PREFIX_TABLE (PREFIX_0F3820) },
6991 { PREFIX_TABLE (PREFIX_0F3821) },
6992 { PREFIX_TABLE (PREFIX_0F3822) },
6993 { PREFIX_TABLE (PREFIX_0F3823) },
6994 { PREFIX_TABLE (PREFIX_0F3824) },
6995 { PREFIX_TABLE (PREFIX_0F3825) },
592d1631
L
6996 { Bad_Opcode },
6997 { Bad_Opcode },
f88c9eb0
SP
6998 /* 28 */
6999 { PREFIX_TABLE (PREFIX_0F3828) },
7000 { PREFIX_TABLE (PREFIX_0F3829) },
7001 { PREFIX_TABLE (PREFIX_0F382A) },
7002 { PREFIX_TABLE (PREFIX_0F382B) },
592d1631
L
7003 { Bad_Opcode },
7004 { Bad_Opcode },
7005 { Bad_Opcode },
7006 { Bad_Opcode },
f88c9eb0
SP
7007 /* 30 */
7008 { PREFIX_TABLE (PREFIX_0F3830) },
7009 { PREFIX_TABLE (PREFIX_0F3831) },
7010 { PREFIX_TABLE (PREFIX_0F3832) },
7011 { PREFIX_TABLE (PREFIX_0F3833) },
7012 { PREFIX_TABLE (PREFIX_0F3834) },
7013 { PREFIX_TABLE (PREFIX_0F3835) },
592d1631 7014 { Bad_Opcode },
f88c9eb0
SP
7015 { PREFIX_TABLE (PREFIX_0F3837) },
7016 /* 38 */
7017 { PREFIX_TABLE (PREFIX_0F3838) },
7018 { PREFIX_TABLE (PREFIX_0F3839) },
7019 { PREFIX_TABLE (PREFIX_0F383A) },
7020 { PREFIX_TABLE (PREFIX_0F383B) },
7021 { PREFIX_TABLE (PREFIX_0F383C) },
7022 { PREFIX_TABLE (PREFIX_0F383D) },
7023 { PREFIX_TABLE (PREFIX_0F383E) },
7024 { PREFIX_TABLE (PREFIX_0F383F) },
7025 /* 40 */
7026 { PREFIX_TABLE (PREFIX_0F3840) },
7027 { PREFIX_TABLE (PREFIX_0F3841) },
592d1631
L
7028 { Bad_Opcode },
7029 { Bad_Opcode },
7030 { Bad_Opcode },
7031 { Bad_Opcode },
7032 { Bad_Opcode },
7033 { Bad_Opcode },
f88c9eb0 7034 /* 48 */
592d1631
L
7035 { Bad_Opcode },
7036 { Bad_Opcode },
7037 { Bad_Opcode },
7038 { Bad_Opcode },
7039 { Bad_Opcode },
7040 { Bad_Opcode },
7041 { Bad_Opcode },
7042 { Bad_Opcode },
f88c9eb0 7043 /* 50 */
592d1631
L
7044 { Bad_Opcode },
7045 { Bad_Opcode },
7046 { Bad_Opcode },
7047 { Bad_Opcode },
7048 { Bad_Opcode },
7049 { Bad_Opcode },
7050 { Bad_Opcode },
7051 { Bad_Opcode },
f88c9eb0 7052 /* 58 */
592d1631
L
7053 { Bad_Opcode },
7054 { Bad_Opcode },
7055 { Bad_Opcode },
7056 { Bad_Opcode },
7057 { Bad_Opcode },
7058 { Bad_Opcode },
7059 { Bad_Opcode },
7060 { Bad_Opcode },
f88c9eb0 7061 /* 60 */
592d1631
L
7062 { Bad_Opcode },
7063 { Bad_Opcode },
7064 { Bad_Opcode },
7065 { Bad_Opcode },
7066 { Bad_Opcode },
7067 { Bad_Opcode },
7068 { Bad_Opcode },
7069 { Bad_Opcode },
f88c9eb0 7070 /* 68 */
592d1631
L
7071 { Bad_Opcode },
7072 { Bad_Opcode },
7073 { Bad_Opcode },
7074 { Bad_Opcode },
7075 { Bad_Opcode },
7076 { Bad_Opcode },
7077 { Bad_Opcode },
7078 { Bad_Opcode },
f88c9eb0 7079 /* 70 */
592d1631
L
7080 { Bad_Opcode },
7081 { Bad_Opcode },
7082 { Bad_Opcode },
7083 { Bad_Opcode },
7084 { Bad_Opcode },
7085 { Bad_Opcode },
7086 { Bad_Opcode },
7087 { Bad_Opcode },
f88c9eb0 7088 /* 78 */
592d1631
L
7089 { Bad_Opcode },
7090 { Bad_Opcode },
7091 { Bad_Opcode },
7092 { Bad_Opcode },
7093 { Bad_Opcode },
7094 { Bad_Opcode },
7095 { Bad_Opcode },
7096 { Bad_Opcode },
f88c9eb0
SP
7097 /* 80 */
7098 { PREFIX_TABLE (PREFIX_0F3880) },
7099 { PREFIX_TABLE (PREFIX_0F3881) },
6c30d220 7100 { PREFIX_TABLE (PREFIX_0F3882) },
592d1631
L
7101 { Bad_Opcode },
7102 { Bad_Opcode },
7103 { Bad_Opcode },
7104 { Bad_Opcode },
7105 { Bad_Opcode },
f88c9eb0 7106 /* 88 */
592d1631
L
7107 { Bad_Opcode },
7108 { Bad_Opcode },
7109 { Bad_Opcode },
7110 { Bad_Opcode },
7111 { Bad_Opcode },
7112 { Bad_Opcode },
7113 { Bad_Opcode },
7114 { Bad_Opcode },
f88c9eb0 7115 /* 90 */
592d1631
L
7116 { Bad_Opcode },
7117 { Bad_Opcode },
7118 { Bad_Opcode },
7119 { Bad_Opcode },
7120 { Bad_Opcode },
7121 { Bad_Opcode },
7122 { Bad_Opcode },
7123 { Bad_Opcode },
f88c9eb0 7124 /* 98 */
592d1631
L
7125 { Bad_Opcode },
7126 { Bad_Opcode },
7127 { Bad_Opcode },
7128 { Bad_Opcode },
7129 { Bad_Opcode },
7130 { Bad_Opcode },
7131 { Bad_Opcode },
7132 { Bad_Opcode },
f88c9eb0 7133 /* a0 */
592d1631
L
7134 { Bad_Opcode },
7135 { Bad_Opcode },
7136 { Bad_Opcode },
7137 { Bad_Opcode },
7138 { Bad_Opcode },
7139 { Bad_Opcode },
7140 { Bad_Opcode },
7141 { Bad_Opcode },
f88c9eb0 7142 /* a8 */
592d1631
L
7143 { Bad_Opcode },
7144 { Bad_Opcode },
7145 { Bad_Opcode },
7146 { Bad_Opcode },
7147 { Bad_Opcode },
7148 { Bad_Opcode },
7149 { Bad_Opcode },
7150 { Bad_Opcode },
f88c9eb0 7151 /* b0 */
592d1631
L
7152 { Bad_Opcode },
7153 { Bad_Opcode },
7154 { Bad_Opcode },
7155 { Bad_Opcode },
7156 { Bad_Opcode },
7157 { Bad_Opcode },
7158 { Bad_Opcode },
7159 { Bad_Opcode },
f88c9eb0 7160 /* b8 */
592d1631
L
7161 { Bad_Opcode },
7162 { Bad_Opcode },
7163 { Bad_Opcode },
7164 { Bad_Opcode },
7165 { Bad_Opcode },
7166 { Bad_Opcode },
7167 { Bad_Opcode },
7168 { Bad_Opcode },
f88c9eb0 7169 /* c0 */
592d1631
L
7170 { Bad_Opcode },
7171 { Bad_Opcode },
7172 { Bad_Opcode },
7173 { Bad_Opcode },
7174 { Bad_Opcode },
7175 { Bad_Opcode },
7176 { Bad_Opcode },
7177 { Bad_Opcode },
f88c9eb0 7178 /* c8 */
a0046408
L
7179 { PREFIX_TABLE (PREFIX_0F38C8) },
7180 { PREFIX_TABLE (PREFIX_0F38C9) },
7181 { PREFIX_TABLE (PREFIX_0F38CA) },
7182 { PREFIX_TABLE (PREFIX_0F38CB) },
7183 { PREFIX_TABLE (PREFIX_0F38CC) },
7184 { PREFIX_TABLE (PREFIX_0F38CD) },
592d1631 7185 { Bad_Opcode },
48521003 7186 { PREFIX_TABLE (PREFIX_0F38CF) },
f88c9eb0 7187 /* d0 */
592d1631
L
7188 { Bad_Opcode },
7189 { Bad_Opcode },
7190 { Bad_Opcode },
7191 { Bad_Opcode },
7192 { Bad_Opcode },
7193 { Bad_Opcode },
7194 { Bad_Opcode },
7195 { Bad_Opcode },
f88c9eb0 7196 /* d8 */
592d1631
L
7197 { Bad_Opcode },
7198 { Bad_Opcode },
7199 { Bad_Opcode },
f88c9eb0
SP
7200 { PREFIX_TABLE (PREFIX_0F38DB) },
7201 { PREFIX_TABLE (PREFIX_0F38DC) },
7202 { PREFIX_TABLE (PREFIX_0F38DD) },
7203 { PREFIX_TABLE (PREFIX_0F38DE) },
7204 { PREFIX_TABLE (PREFIX_0F38DF) },
7205 /* e0 */
592d1631
L
7206 { Bad_Opcode },
7207 { Bad_Opcode },
7208 { Bad_Opcode },
7209 { Bad_Opcode },
7210 { Bad_Opcode },
7211 { Bad_Opcode },
7212 { Bad_Opcode },
7213 { Bad_Opcode },
f88c9eb0 7214 /* e8 */
592d1631
L
7215 { Bad_Opcode },
7216 { Bad_Opcode },
7217 { Bad_Opcode },
7218 { Bad_Opcode },
7219 { Bad_Opcode },
7220 { Bad_Opcode },
7221 { Bad_Opcode },
7222 { Bad_Opcode },
f88c9eb0
SP
7223 /* f0 */
7224 { PREFIX_TABLE (PREFIX_0F38F0) },
7225 { PREFIX_TABLE (PREFIX_0F38F1) },
592d1631
L
7226 { Bad_Opcode },
7227 { Bad_Opcode },
7228 { Bad_Opcode },
603555e5 7229 { PREFIX_TABLE (PREFIX_0F38F5) },
e2e1fcde 7230 { PREFIX_TABLE (PREFIX_0F38F6) },
592d1631 7231 { Bad_Opcode },
f88c9eb0 7232 /* f8 */
c0a30a9f
L
7233 { PREFIX_TABLE (PREFIX_0F38F8) },
7234 { PREFIX_TABLE (PREFIX_0F38F9) },
592d1631
L
7235 { Bad_Opcode },
7236 { Bad_Opcode },
7237 { Bad_Opcode },
7238 { Bad_Opcode },
7239 { Bad_Opcode },
7240 { Bad_Opcode },
f88c9eb0
SP
7241 },
7242 /* THREE_BYTE_0F3A */
7243 {
7244 /* 00 */
592d1631
L
7245 { Bad_Opcode },
7246 { Bad_Opcode },
7247 { Bad_Opcode },
7248 { Bad_Opcode },
7249 { Bad_Opcode },
7250 { Bad_Opcode },
7251 { Bad_Opcode },
7252 { Bad_Opcode },
f88c9eb0
SP
7253 /* 08 */
7254 { PREFIX_TABLE (PREFIX_0F3A08) },
7255 { PREFIX_TABLE (PREFIX_0F3A09) },
7256 { PREFIX_TABLE (PREFIX_0F3A0A) },
7257 { PREFIX_TABLE (PREFIX_0F3A0B) },
7258 { PREFIX_TABLE (PREFIX_0F3A0C) },
7259 { PREFIX_TABLE (PREFIX_0F3A0D) },
7260 { PREFIX_TABLE (PREFIX_0F3A0E) },
507bd325 7261 { "palignr", { MX, EM, Ib }, PREFIX_OPCODE },
f88c9eb0 7262 /* 10 */
592d1631
L
7263 { Bad_Opcode },
7264 { Bad_Opcode },
7265 { Bad_Opcode },
7266 { Bad_Opcode },
f88c9eb0
SP
7267 { PREFIX_TABLE (PREFIX_0F3A14) },
7268 { PREFIX_TABLE (PREFIX_0F3A15) },
7269 { PREFIX_TABLE (PREFIX_0F3A16) },
7270 { PREFIX_TABLE (PREFIX_0F3A17) },
7271 /* 18 */
592d1631
L
7272 { Bad_Opcode },
7273 { Bad_Opcode },
7274 { Bad_Opcode },
7275 { Bad_Opcode },
7276 { Bad_Opcode },
7277 { Bad_Opcode },
7278 { Bad_Opcode },
7279 { Bad_Opcode },
f88c9eb0
SP
7280 /* 20 */
7281 { PREFIX_TABLE (PREFIX_0F3A20) },
7282 { PREFIX_TABLE (PREFIX_0F3A21) },
7283 { PREFIX_TABLE (PREFIX_0F3A22) },
592d1631
L
7284 { Bad_Opcode },
7285 { Bad_Opcode },
7286 { Bad_Opcode },
7287 { Bad_Opcode },
7288 { Bad_Opcode },
f88c9eb0 7289 /* 28 */
592d1631
L
7290 { Bad_Opcode },
7291 { Bad_Opcode },
7292 { Bad_Opcode },
7293 { Bad_Opcode },
7294 { Bad_Opcode },
7295 { Bad_Opcode },
7296 { Bad_Opcode },
7297 { Bad_Opcode },
f88c9eb0 7298 /* 30 */
592d1631
L
7299 { Bad_Opcode },
7300 { Bad_Opcode },
7301 { Bad_Opcode },
7302 { Bad_Opcode },
7303 { Bad_Opcode },
7304 { Bad_Opcode },
7305 { Bad_Opcode },
7306 { Bad_Opcode },
f88c9eb0 7307 /* 38 */
592d1631
L
7308 { Bad_Opcode },
7309 { Bad_Opcode },
7310 { Bad_Opcode },
7311 { Bad_Opcode },
7312 { Bad_Opcode },
7313 { Bad_Opcode },
7314 { Bad_Opcode },
7315 { Bad_Opcode },
f88c9eb0
SP
7316 /* 40 */
7317 { PREFIX_TABLE (PREFIX_0F3A40) },
7318 { PREFIX_TABLE (PREFIX_0F3A41) },
7319 { PREFIX_TABLE (PREFIX_0F3A42) },
592d1631 7320 { Bad_Opcode },
f88c9eb0 7321 { PREFIX_TABLE (PREFIX_0F3A44) },
592d1631
L
7322 { Bad_Opcode },
7323 { Bad_Opcode },
7324 { Bad_Opcode },
f88c9eb0 7325 /* 48 */
592d1631
L
7326 { Bad_Opcode },
7327 { Bad_Opcode },
7328 { Bad_Opcode },
7329 { Bad_Opcode },
7330 { Bad_Opcode },
7331 { Bad_Opcode },
7332 { Bad_Opcode },
7333 { Bad_Opcode },
f88c9eb0 7334 /* 50 */
592d1631
L
7335 { Bad_Opcode },
7336 { Bad_Opcode },
7337 { Bad_Opcode },
7338 { Bad_Opcode },
7339 { Bad_Opcode },
7340 { Bad_Opcode },
7341 { Bad_Opcode },
7342 { Bad_Opcode },
f88c9eb0 7343 /* 58 */
592d1631
L
7344 { Bad_Opcode },
7345 { Bad_Opcode },
7346 { Bad_Opcode },
7347 { Bad_Opcode },
7348 { Bad_Opcode },
7349 { Bad_Opcode },
7350 { Bad_Opcode },
7351 { Bad_Opcode },
f88c9eb0
SP
7352 /* 60 */
7353 { PREFIX_TABLE (PREFIX_0F3A60) },
7354 { PREFIX_TABLE (PREFIX_0F3A61) },
7355 { PREFIX_TABLE (PREFIX_0F3A62) },
7356 { PREFIX_TABLE (PREFIX_0F3A63) },
592d1631
L
7357 { Bad_Opcode },
7358 { Bad_Opcode },
7359 { Bad_Opcode },
7360 { Bad_Opcode },
f88c9eb0 7361 /* 68 */
592d1631
L
7362 { Bad_Opcode },
7363 { Bad_Opcode },
7364 { Bad_Opcode },
7365 { Bad_Opcode },
7366 { Bad_Opcode },
7367 { Bad_Opcode },
7368 { Bad_Opcode },
7369 { Bad_Opcode },
f88c9eb0 7370 /* 70 */
592d1631
L
7371 { Bad_Opcode },
7372 { Bad_Opcode },
7373 { Bad_Opcode },
7374 { Bad_Opcode },
7375 { Bad_Opcode },
7376 { Bad_Opcode },
7377 { Bad_Opcode },
7378 { Bad_Opcode },
f88c9eb0 7379 /* 78 */
592d1631
L
7380 { Bad_Opcode },
7381 { Bad_Opcode },
7382 { Bad_Opcode },
7383 { Bad_Opcode },
7384 { Bad_Opcode },
7385 { Bad_Opcode },
7386 { Bad_Opcode },
7387 { Bad_Opcode },
f88c9eb0 7388 /* 80 */
592d1631
L
7389 { Bad_Opcode },
7390 { Bad_Opcode },
7391 { Bad_Opcode },
7392 { Bad_Opcode },
7393 { Bad_Opcode },
7394 { Bad_Opcode },
7395 { Bad_Opcode },
7396 { Bad_Opcode },
f88c9eb0 7397 /* 88 */
592d1631
L
7398 { Bad_Opcode },
7399 { Bad_Opcode },
7400 { Bad_Opcode },
7401 { Bad_Opcode },
7402 { Bad_Opcode },
7403 { Bad_Opcode },
7404 { Bad_Opcode },
7405 { Bad_Opcode },
f88c9eb0 7406 /* 90 */
592d1631
L
7407 { Bad_Opcode },
7408 { Bad_Opcode },
7409 { Bad_Opcode },
7410 { Bad_Opcode },
7411 { Bad_Opcode },
7412 { Bad_Opcode },
7413 { Bad_Opcode },
7414 { Bad_Opcode },
f88c9eb0 7415 /* 98 */
592d1631
L
7416 { Bad_Opcode },
7417 { Bad_Opcode },
7418 { Bad_Opcode },
7419 { Bad_Opcode },
7420 { Bad_Opcode },
7421 { Bad_Opcode },
7422 { Bad_Opcode },
7423 { Bad_Opcode },
f88c9eb0 7424 /* a0 */
592d1631
L
7425 { Bad_Opcode },
7426 { Bad_Opcode },
7427 { Bad_Opcode },
7428 { Bad_Opcode },
7429 { Bad_Opcode },
7430 { Bad_Opcode },
7431 { Bad_Opcode },
7432 { Bad_Opcode },
f88c9eb0 7433 /* a8 */
592d1631
L
7434 { Bad_Opcode },
7435 { Bad_Opcode },
7436 { Bad_Opcode },
7437 { Bad_Opcode },
7438 { Bad_Opcode },
7439 { Bad_Opcode },
7440 { Bad_Opcode },
7441 { Bad_Opcode },
f88c9eb0 7442 /* b0 */
592d1631
L
7443 { Bad_Opcode },
7444 { Bad_Opcode },
7445 { Bad_Opcode },
7446 { Bad_Opcode },
7447 { Bad_Opcode },
7448 { Bad_Opcode },
7449 { Bad_Opcode },
7450 { Bad_Opcode },
f88c9eb0 7451 /* b8 */
592d1631
L
7452 { Bad_Opcode },
7453 { Bad_Opcode },
7454 { Bad_Opcode },
7455 { Bad_Opcode },
7456 { Bad_Opcode },
7457 { Bad_Opcode },
7458 { Bad_Opcode },
7459 { Bad_Opcode },
f88c9eb0 7460 /* c0 */
592d1631
L
7461 { Bad_Opcode },
7462 { Bad_Opcode },
7463 { Bad_Opcode },
7464 { Bad_Opcode },
7465 { Bad_Opcode },
7466 { Bad_Opcode },
7467 { Bad_Opcode },
7468 { Bad_Opcode },
f88c9eb0 7469 /* c8 */
592d1631
L
7470 { Bad_Opcode },
7471 { Bad_Opcode },
7472 { Bad_Opcode },
7473 { Bad_Opcode },
a0046408 7474 { PREFIX_TABLE (PREFIX_0F3ACC) },
592d1631 7475 { Bad_Opcode },
48521003
IT
7476 { PREFIX_TABLE (PREFIX_0F3ACE) },
7477 { PREFIX_TABLE (PREFIX_0F3ACF) },
f88c9eb0 7478 /* d0 */
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 7487 /* d8 */
592d1631
L
7488 { Bad_Opcode },
7489 { Bad_Opcode },
7490 { Bad_Opcode },
7491 { Bad_Opcode },
7492 { Bad_Opcode },
7493 { Bad_Opcode },
7494 { Bad_Opcode },
f88c9eb0
SP
7495 { PREFIX_TABLE (PREFIX_0F3ADF) },
7496 /* e0 */
592d1631
L
7497 { Bad_Opcode },
7498 { Bad_Opcode },
7499 { Bad_Opcode },
7500 { Bad_Opcode },
7501 { Bad_Opcode },
592d1631
L
7502 { Bad_Opcode },
7503 { Bad_Opcode },
7504 { Bad_Opcode },
85f10a01 7505 /* e8 */
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 },
85f10a01 7514 /* f0 */
592d1631
L
7515 { Bad_Opcode },
7516 { Bad_Opcode },
7517 { Bad_Opcode },
7518 { Bad_Opcode },
7519 { Bad_Opcode },
7520 { Bad_Opcode },
7521 { Bad_Opcode },
7522 { Bad_Opcode },
85f10a01 7523 /* f8 */
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 },
85f10a01 7532 },
f88c9eb0
SP
7533};
7534
7535static const struct dis386 xop_table[][256] = {
5dd85c99 7536 /* XOP_08 */
85f10a01
MM
7537 {
7538 /* 00 */
592d1631
L
7539 { Bad_Opcode },
7540 { Bad_Opcode },
7541 { Bad_Opcode },
7542 { Bad_Opcode },
7543 { Bad_Opcode },
7544 { Bad_Opcode },
7545 { Bad_Opcode },
7546 { Bad_Opcode },
85f10a01 7547 /* 08 */
592d1631
L
7548 { Bad_Opcode },
7549 { Bad_Opcode },
7550 { Bad_Opcode },
7551 { Bad_Opcode },
7552 { Bad_Opcode },
7553 { Bad_Opcode },
7554 { Bad_Opcode },
7555 { Bad_Opcode },
85f10a01 7556 /* 10 */
3929df09 7557 { Bad_Opcode },
592d1631
L
7558 { Bad_Opcode },
7559 { Bad_Opcode },
7560 { Bad_Opcode },
7561 { Bad_Opcode },
7562 { Bad_Opcode },
7563 { Bad_Opcode },
7564 { Bad_Opcode },
85f10a01 7565 /* 18 */
592d1631
L
7566 { Bad_Opcode },
7567 { Bad_Opcode },
7568 { Bad_Opcode },
7569 { Bad_Opcode },
7570 { Bad_Opcode },
7571 { Bad_Opcode },
7572 { Bad_Opcode },
7573 { Bad_Opcode },
85f10a01 7574 /* 20 */
592d1631
L
7575 { Bad_Opcode },
7576 { Bad_Opcode },
7577 { Bad_Opcode },
7578 { Bad_Opcode },
7579 { Bad_Opcode },
7580 { Bad_Opcode },
7581 { Bad_Opcode },
7582 { Bad_Opcode },
85f10a01 7583 /* 28 */
592d1631
L
7584 { Bad_Opcode },
7585 { Bad_Opcode },
7586 { Bad_Opcode },
7587 { Bad_Opcode },
7588 { Bad_Opcode },
7589 { Bad_Opcode },
7590 { Bad_Opcode },
7591 { Bad_Opcode },
c0f3af97 7592 /* 30 */
592d1631
L
7593 { Bad_Opcode },
7594 { Bad_Opcode },
7595 { Bad_Opcode },
7596 { Bad_Opcode },
7597 { Bad_Opcode },
7598 { Bad_Opcode },
7599 { Bad_Opcode },
7600 { Bad_Opcode },
c0f3af97 7601 /* 38 */
592d1631
L
7602 { Bad_Opcode },
7603 { Bad_Opcode },
7604 { Bad_Opcode },
7605 { Bad_Opcode },
7606 { Bad_Opcode },
7607 { Bad_Opcode },
7608 { Bad_Opcode },
7609 { Bad_Opcode },
c0f3af97 7610 /* 40 */
592d1631
L
7611 { Bad_Opcode },
7612 { Bad_Opcode },
7613 { Bad_Opcode },
7614 { Bad_Opcode },
7615 { Bad_Opcode },
7616 { Bad_Opcode },
7617 { Bad_Opcode },
7618 { Bad_Opcode },
85f10a01 7619 /* 48 */
592d1631
L
7620 { Bad_Opcode },
7621 { Bad_Opcode },
7622 { Bad_Opcode },
7623 { Bad_Opcode },
7624 { Bad_Opcode },
7625 { Bad_Opcode },
7626 { Bad_Opcode },
7627 { Bad_Opcode },
c0f3af97 7628 /* 50 */
592d1631
L
7629 { Bad_Opcode },
7630 { Bad_Opcode },
7631 { Bad_Opcode },
7632 { Bad_Opcode },
7633 { Bad_Opcode },
7634 { Bad_Opcode },
7635 { Bad_Opcode },
7636 { Bad_Opcode },
85f10a01 7637 /* 58 */
592d1631
L
7638 { Bad_Opcode },
7639 { Bad_Opcode },
7640 { Bad_Opcode },
7641 { Bad_Opcode },
7642 { Bad_Opcode },
7643 { Bad_Opcode },
7644 { Bad_Opcode },
7645 { Bad_Opcode },
c1e679ec 7646 /* 60 */
592d1631
L
7647 { Bad_Opcode },
7648 { Bad_Opcode },
7649 { Bad_Opcode },
7650 { Bad_Opcode },
7651 { Bad_Opcode },
7652 { Bad_Opcode },
7653 { Bad_Opcode },
7654 { Bad_Opcode },
c0f3af97 7655 /* 68 */
592d1631
L
7656 { Bad_Opcode },
7657 { Bad_Opcode },
7658 { Bad_Opcode },
7659 { Bad_Opcode },
7660 { Bad_Opcode },
7661 { Bad_Opcode },
7662 { Bad_Opcode },
7663 { Bad_Opcode },
85f10a01 7664 /* 70 */
592d1631
L
7665 { Bad_Opcode },
7666 { Bad_Opcode },
7667 { Bad_Opcode },
7668 { Bad_Opcode },
7669 { Bad_Opcode },
7670 { Bad_Opcode },
7671 { Bad_Opcode },
7672 { Bad_Opcode },
85f10a01 7673 /* 78 */
592d1631
L
7674 { Bad_Opcode },
7675 { Bad_Opcode },
7676 { Bad_Opcode },
7677 { Bad_Opcode },
7678 { Bad_Opcode },
7679 { Bad_Opcode },
7680 { Bad_Opcode },
7681 { Bad_Opcode },
85f10a01 7682 /* 80 */
592d1631
L
7683 { Bad_Opcode },
7684 { Bad_Opcode },
7685 { Bad_Opcode },
7686 { Bad_Opcode },
7687 { Bad_Opcode },
3a2430e0
JB
7688 { "vpmacssww", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
7689 { "vpmacsswd", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
7690 { "vpmacssdql", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
5dd85c99 7691 /* 88 */
592d1631
L
7692 { Bad_Opcode },
7693 { Bad_Opcode },
7694 { Bad_Opcode },
7695 { Bad_Opcode },
7696 { Bad_Opcode },
7697 { Bad_Opcode },
3a2430e0
JB
7698 { "vpmacssdd", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
7699 { "vpmacssdqh", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
5dd85c99 7700 /* 90 */
592d1631
L
7701 { Bad_Opcode },
7702 { Bad_Opcode },
7703 { Bad_Opcode },
7704 { Bad_Opcode },
7705 { Bad_Opcode },
3a2430e0
JB
7706 { "vpmacsww", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
7707 { "vpmacswd", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
7708 { "vpmacsdql", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
5dd85c99 7709 /* 98 */
592d1631
L
7710 { Bad_Opcode },
7711 { Bad_Opcode },
7712 { Bad_Opcode },
7713 { Bad_Opcode },
7714 { Bad_Opcode },
7715 { Bad_Opcode },
3a2430e0
JB
7716 { "vpmacsdd", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
7717 { "vpmacsdqh", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
5dd85c99 7718 /* a0 */
592d1631
L
7719 { Bad_Opcode },
7720 { Bad_Opcode },
3a2430e0
JB
7721 { "vpcmov", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
7722 { "vpperm", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
592d1631
L
7723 { Bad_Opcode },
7724 { Bad_Opcode },
3a2430e0 7725 { "vpmadcsswd", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
592d1631 7726 { Bad_Opcode },
5dd85c99 7727 /* a8 */
592d1631
L
7728 { Bad_Opcode },
7729 { Bad_Opcode },
7730 { Bad_Opcode },
7731 { Bad_Opcode },
7732 { Bad_Opcode },
7733 { Bad_Opcode },
7734 { Bad_Opcode },
7735 { Bad_Opcode },
5dd85c99 7736 /* b0 */
592d1631
L
7737 { Bad_Opcode },
7738 { Bad_Opcode },
7739 { Bad_Opcode },
7740 { Bad_Opcode },
7741 { Bad_Opcode },
7742 { Bad_Opcode },
3a2430e0 7743 { "vpmadcswd", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
592d1631 7744 { Bad_Opcode },
5dd85c99 7745 /* b8 */
592d1631
L
7746 { Bad_Opcode },
7747 { Bad_Opcode },
7748 { Bad_Opcode },
7749 { Bad_Opcode },
7750 { Bad_Opcode },
7751 { Bad_Opcode },
7752 { Bad_Opcode },
7753 { Bad_Opcode },
5dd85c99 7754 /* c0 */
bf890a93
IT
7755 { "vprotb", { XM, Vex_2src_1, Ib }, 0 },
7756 { "vprotw", { XM, Vex_2src_1, Ib }, 0 },
7757 { "vprotd", { XM, Vex_2src_1, Ib }, 0 },
7758 { "vprotq", { XM, Vex_2src_1, Ib }, 0 },
592d1631
L
7759 { Bad_Opcode },
7760 { Bad_Opcode },
7761 { Bad_Opcode },
7762 { Bad_Opcode },
5dd85c99 7763 /* c8 */
592d1631
L
7764 { Bad_Opcode },
7765 { Bad_Opcode },
7766 { Bad_Opcode },
7767 { Bad_Opcode },
ff688e1f
L
7768 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_CC) },
7769 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_CD) },
7770 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_CE) },
7771 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_CF) },
5dd85c99 7772 /* d0 */
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 },
5dd85c99 7781 /* d8 */
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 },
5dd85c99 7790 /* e0 */
592d1631
L
7791 { Bad_Opcode },
7792 { Bad_Opcode },
7793 { Bad_Opcode },
7794 { Bad_Opcode },
7795 { Bad_Opcode },
7796 { Bad_Opcode },
7797 { Bad_Opcode },
7798 { Bad_Opcode },
5dd85c99 7799 /* e8 */
592d1631
L
7800 { Bad_Opcode },
7801 { Bad_Opcode },
7802 { Bad_Opcode },
7803 { Bad_Opcode },
ff688e1f
L
7804 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_EC) },
7805 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_ED) },
7806 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_EE) },
7807 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_EF) },
5dd85c99 7808 /* f0 */
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 },
5dd85c99 7817 /* f8 */
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 },
5dd85c99
SP
7826 },
7827 /* XOP_09 */
7828 {
7829 /* 00 */
592d1631 7830 { Bad_Opcode },
2a2a0f38
QN
7831 { REG_TABLE (REG_XOP_TBM_01) },
7832 { REG_TABLE (REG_XOP_TBM_02) },
592d1631
L
7833 { Bad_Opcode },
7834 { Bad_Opcode },
7835 { Bad_Opcode },
7836 { Bad_Opcode },
7837 { Bad_Opcode },
5dd85c99 7838 /* 08 */
592d1631
L
7839 { Bad_Opcode },
7840 { Bad_Opcode },
7841 { Bad_Opcode },
7842 { Bad_Opcode },
7843 { Bad_Opcode },
7844 { Bad_Opcode },
7845 { Bad_Opcode },
7846 { Bad_Opcode },
5dd85c99 7847 /* 10 */
592d1631
L
7848 { Bad_Opcode },
7849 { Bad_Opcode },
5dd85c99 7850 { REG_TABLE (REG_XOP_LWPCB) },
592d1631
L
7851 { Bad_Opcode },
7852 { Bad_Opcode },
7853 { Bad_Opcode },
7854 { Bad_Opcode },
7855 { Bad_Opcode },
5dd85c99 7856 /* 18 */
592d1631
L
7857 { Bad_Opcode },
7858 { Bad_Opcode },
7859 { Bad_Opcode },
7860 { Bad_Opcode },
7861 { Bad_Opcode },
7862 { Bad_Opcode },
7863 { Bad_Opcode },
7864 { Bad_Opcode },
5dd85c99 7865 /* 20 */
592d1631
L
7866 { Bad_Opcode },
7867 { Bad_Opcode },
7868 { Bad_Opcode },
7869 { Bad_Opcode },
7870 { Bad_Opcode },
7871 { Bad_Opcode },
7872 { Bad_Opcode },
7873 { Bad_Opcode },
5dd85c99 7874 /* 28 */
592d1631
L
7875 { Bad_Opcode },
7876 { Bad_Opcode },
7877 { Bad_Opcode },
7878 { Bad_Opcode },
7879 { Bad_Opcode },
7880 { Bad_Opcode },
7881 { Bad_Opcode },
7882 { Bad_Opcode },
5dd85c99 7883 /* 30 */
592d1631
L
7884 { Bad_Opcode },
7885 { Bad_Opcode },
7886 { Bad_Opcode },
7887 { Bad_Opcode },
7888 { Bad_Opcode },
7889 { Bad_Opcode },
7890 { Bad_Opcode },
7891 { Bad_Opcode },
5dd85c99 7892 /* 38 */
592d1631
L
7893 { Bad_Opcode },
7894 { Bad_Opcode },
7895 { Bad_Opcode },
7896 { Bad_Opcode },
7897 { Bad_Opcode },
7898 { Bad_Opcode },
7899 { Bad_Opcode },
7900 { Bad_Opcode },
5dd85c99 7901 /* 40 */
592d1631
L
7902 { Bad_Opcode },
7903 { Bad_Opcode },
7904 { Bad_Opcode },
7905 { Bad_Opcode },
7906 { Bad_Opcode },
7907 { Bad_Opcode },
7908 { Bad_Opcode },
7909 { Bad_Opcode },
5dd85c99 7910 /* 48 */
592d1631
L
7911 { Bad_Opcode },
7912 { Bad_Opcode },
7913 { Bad_Opcode },
7914 { Bad_Opcode },
7915 { Bad_Opcode },
7916 { Bad_Opcode },
7917 { Bad_Opcode },
7918 { Bad_Opcode },
5dd85c99 7919 /* 50 */
592d1631
L
7920 { Bad_Opcode },
7921 { Bad_Opcode },
7922 { Bad_Opcode },
7923 { Bad_Opcode },
7924 { Bad_Opcode },
7925 { Bad_Opcode },
7926 { Bad_Opcode },
7927 { Bad_Opcode },
5dd85c99 7928 /* 58 */
592d1631
L
7929 { Bad_Opcode },
7930 { Bad_Opcode },
7931 { Bad_Opcode },
7932 { Bad_Opcode },
7933 { Bad_Opcode },
7934 { Bad_Opcode },
7935 { Bad_Opcode },
7936 { Bad_Opcode },
5dd85c99 7937 /* 60 */
592d1631
L
7938 { Bad_Opcode },
7939 { Bad_Opcode },
7940 { Bad_Opcode },
7941 { Bad_Opcode },
7942 { Bad_Opcode },
7943 { Bad_Opcode },
7944 { Bad_Opcode },
7945 { Bad_Opcode },
5dd85c99 7946 /* 68 */
592d1631
L
7947 { Bad_Opcode },
7948 { Bad_Opcode },
7949 { Bad_Opcode },
7950 { Bad_Opcode },
7951 { Bad_Opcode },
7952 { Bad_Opcode },
7953 { Bad_Opcode },
7954 { Bad_Opcode },
5dd85c99 7955 /* 70 */
592d1631
L
7956 { Bad_Opcode },
7957 { Bad_Opcode },
7958 { Bad_Opcode },
7959 { Bad_Opcode },
7960 { Bad_Opcode },
7961 { Bad_Opcode },
7962 { Bad_Opcode },
7963 { Bad_Opcode },
5dd85c99 7964 /* 78 */
592d1631
L
7965 { Bad_Opcode },
7966 { Bad_Opcode },
7967 { Bad_Opcode },
7968 { Bad_Opcode },
7969 { Bad_Opcode },
7970 { Bad_Opcode },
7971 { Bad_Opcode },
7972 { Bad_Opcode },
5dd85c99 7973 /* 80 */
592a252b
L
7974 { VEX_LEN_TABLE (VEX_LEN_0FXOP_09_80) },
7975 { VEX_LEN_TABLE (VEX_LEN_0FXOP_09_81) },
bf890a93
IT
7976 { "vfrczss", { XM, EXd }, 0 },
7977 { "vfrczsd", { XM, EXq }, 0 },
592d1631
L
7978 { Bad_Opcode },
7979 { Bad_Opcode },
7980 { Bad_Opcode },
7981 { Bad_Opcode },
5dd85c99 7982 /* 88 */
592d1631
L
7983 { Bad_Opcode },
7984 { Bad_Opcode },
7985 { Bad_Opcode },
7986 { Bad_Opcode },
7987 { Bad_Opcode },
7988 { Bad_Opcode },
7989 { Bad_Opcode },
7990 { Bad_Opcode },
5dd85c99 7991 /* 90 */
bf890a93
IT
7992 { "vprotb", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
7993 { "vprotw", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
7994 { "vprotd", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
7995 { "vprotq", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
7996 { "vpshlb", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
7997 { "vpshlw", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
7998 { "vpshld", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
7999 { "vpshlq", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
5dd85c99 8000 /* 98 */
bf890a93
IT
8001 { "vpshab", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8002 { "vpshaw", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8003 { "vpshad", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8004 { "vpshaq", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
592d1631
L
8005 { Bad_Opcode },
8006 { Bad_Opcode },
8007 { Bad_Opcode },
8008 { Bad_Opcode },
5dd85c99 8009 /* a0 */
592d1631
L
8010 { Bad_Opcode },
8011 { Bad_Opcode },
8012 { Bad_Opcode },
8013 { Bad_Opcode },
8014 { Bad_Opcode },
8015 { Bad_Opcode },
8016 { Bad_Opcode },
8017 { Bad_Opcode },
5dd85c99 8018 /* a8 */
592d1631
L
8019 { Bad_Opcode },
8020 { Bad_Opcode },
8021 { Bad_Opcode },
8022 { Bad_Opcode },
8023 { Bad_Opcode },
8024 { Bad_Opcode },
8025 { Bad_Opcode },
8026 { Bad_Opcode },
5dd85c99 8027 /* b0 */
592d1631
L
8028 { Bad_Opcode },
8029 { Bad_Opcode },
8030 { Bad_Opcode },
8031 { Bad_Opcode },
8032 { Bad_Opcode },
8033 { Bad_Opcode },
8034 { Bad_Opcode },
8035 { Bad_Opcode },
5dd85c99 8036 /* b8 */
592d1631
L
8037 { Bad_Opcode },
8038 { Bad_Opcode },
8039 { Bad_Opcode },
8040 { Bad_Opcode },
8041 { Bad_Opcode },
8042 { Bad_Opcode },
8043 { Bad_Opcode },
8044 { Bad_Opcode },
5dd85c99 8045 /* c0 */
592d1631 8046 { Bad_Opcode },
bf890a93
IT
8047 { "vphaddbw", { XM, EXxmm }, 0 },
8048 { "vphaddbd", { XM, EXxmm }, 0 },
8049 { "vphaddbq", { XM, EXxmm }, 0 },
592d1631
L
8050 { Bad_Opcode },
8051 { Bad_Opcode },
bf890a93
IT
8052 { "vphaddwd", { XM, EXxmm }, 0 },
8053 { "vphaddwq", { XM, EXxmm }, 0 },
5dd85c99 8054 /* c8 */
592d1631
L
8055 { Bad_Opcode },
8056 { Bad_Opcode },
8057 { Bad_Opcode },
bf890a93 8058 { "vphadddq", { XM, EXxmm }, 0 },
592d1631
L
8059 { Bad_Opcode },
8060 { Bad_Opcode },
8061 { Bad_Opcode },
8062 { Bad_Opcode },
5dd85c99 8063 /* d0 */
592d1631 8064 { Bad_Opcode },
bf890a93
IT
8065 { "vphaddubw", { XM, EXxmm }, 0 },
8066 { "vphaddubd", { XM, EXxmm }, 0 },
8067 { "vphaddubq", { XM, EXxmm }, 0 },
592d1631
L
8068 { Bad_Opcode },
8069 { Bad_Opcode },
bf890a93
IT
8070 { "vphadduwd", { XM, EXxmm }, 0 },
8071 { "vphadduwq", { XM, EXxmm }, 0 },
5dd85c99 8072 /* d8 */
592d1631
L
8073 { Bad_Opcode },
8074 { Bad_Opcode },
8075 { Bad_Opcode },
bf890a93 8076 { "vphaddudq", { XM, EXxmm }, 0 },
592d1631
L
8077 { Bad_Opcode },
8078 { Bad_Opcode },
8079 { Bad_Opcode },
8080 { Bad_Opcode },
5dd85c99 8081 /* e0 */
592d1631 8082 { Bad_Opcode },
bf890a93
IT
8083 { "vphsubbw", { XM, EXxmm }, 0 },
8084 { "vphsubwd", { XM, EXxmm }, 0 },
8085 { "vphsubdq", { XM, EXxmm }, 0 },
592d1631
L
8086 { Bad_Opcode },
8087 { Bad_Opcode },
8088 { Bad_Opcode },
8089 { Bad_Opcode },
4e7d34a6 8090 /* e8 */
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 },
4e7d34a6 8099 /* f0 */
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 },
4e7d34a6 8108 /* f8 */
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 },
4e7d34a6 8117 },
f88c9eb0 8118 /* XOP_0A */
4e7d34a6
L
8119 {
8120 /* 00 */
592d1631
L
8121 { Bad_Opcode },
8122 { Bad_Opcode },
8123 { Bad_Opcode },
8124 { Bad_Opcode },
8125 { Bad_Opcode },
8126 { Bad_Opcode },
8127 { Bad_Opcode },
8128 { Bad_Opcode },
4e7d34a6 8129 /* 08 */
592d1631
L
8130 { Bad_Opcode },
8131 { Bad_Opcode },
8132 { Bad_Opcode },
8133 { Bad_Opcode },
8134 { Bad_Opcode },
8135 { Bad_Opcode },
8136 { Bad_Opcode },
8137 { Bad_Opcode },
4e7d34a6 8138 /* 10 */
bf890a93 8139 { "bextr", { Gv, Ev, Iq }, 0 },
592d1631 8140 { Bad_Opcode },
f88c9eb0 8141 { REG_TABLE (REG_XOP_LWP) },
592d1631
L
8142 { Bad_Opcode },
8143 { Bad_Opcode },
8144 { Bad_Opcode },
8145 { Bad_Opcode },
8146 { Bad_Opcode },
4e7d34a6 8147 /* 18 */
592d1631
L
8148 { Bad_Opcode },
8149 { Bad_Opcode },
8150 { Bad_Opcode },
8151 { Bad_Opcode },
8152 { Bad_Opcode },
8153 { Bad_Opcode },
8154 { Bad_Opcode },
8155 { Bad_Opcode },
4e7d34a6 8156 /* 20 */
592d1631
L
8157 { Bad_Opcode },
8158 { Bad_Opcode },
8159 { Bad_Opcode },
8160 { Bad_Opcode },
8161 { Bad_Opcode },
8162 { Bad_Opcode },
8163 { Bad_Opcode },
8164 { Bad_Opcode },
4e7d34a6 8165 /* 28 */
592d1631
L
8166 { Bad_Opcode },
8167 { Bad_Opcode },
8168 { Bad_Opcode },
8169 { Bad_Opcode },
8170 { Bad_Opcode },
8171 { Bad_Opcode },
8172 { Bad_Opcode },
8173 { Bad_Opcode },
4e7d34a6 8174 /* 30 */
592d1631
L
8175 { Bad_Opcode },
8176 { Bad_Opcode },
8177 { Bad_Opcode },
8178 { Bad_Opcode },
8179 { Bad_Opcode },
8180 { Bad_Opcode },
8181 { Bad_Opcode },
8182 { Bad_Opcode },
c0f3af97 8183 /* 38 */
592d1631
L
8184 { Bad_Opcode },
8185 { Bad_Opcode },
8186 { Bad_Opcode },
8187 { Bad_Opcode },
8188 { Bad_Opcode },
8189 { Bad_Opcode },
8190 { Bad_Opcode },
8191 { Bad_Opcode },
c0f3af97 8192 /* 40 */
592d1631
L
8193 { Bad_Opcode },
8194 { Bad_Opcode },
8195 { Bad_Opcode },
8196 { Bad_Opcode },
8197 { Bad_Opcode },
8198 { Bad_Opcode },
8199 { Bad_Opcode },
8200 { Bad_Opcode },
c1e679ec 8201 /* 48 */
592d1631
L
8202 { Bad_Opcode },
8203 { Bad_Opcode },
8204 { Bad_Opcode },
8205 { Bad_Opcode },
8206 { Bad_Opcode },
8207 { Bad_Opcode },
8208 { Bad_Opcode },
8209 { Bad_Opcode },
c1e679ec 8210 /* 50 */
592d1631
L
8211 { Bad_Opcode },
8212 { Bad_Opcode },
8213 { Bad_Opcode },
8214 { Bad_Opcode },
8215 { Bad_Opcode },
8216 { Bad_Opcode },
8217 { Bad_Opcode },
8218 { Bad_Opcode },
4e7d34a6 8219 /* 58 */
592d1631
L
8220 { Bad_Opcode },
8221 { Bad_Opcode },
8222 { Bad_Opcode },
8223 { Bad_Opcode },
8224 { Bad_Opcode },
8225 { Bad_Opcode },
8226 { Bad_Opcode },
8227 { Bad_Opcode },
4e7d34a6 8228 /* 60 */
592d1631
L
8229 { Bad_Opcode },
8230 { Bad_Opcode },
8231 { Bad_Opcode },
8232 { Bad_Opcode },
8233 { Bad_Opcode },
8234 { Bad_Opcode },
8235 { Bad_Opcode },
8236 { Bad_Opcode },
4e7d34a6 8237 /* 68 */
592d1631
L
8238 { Bad_Opcode },
8239 { Bad_Opcode },
8240 { Bad_Opcode },
8241 { Bad_Opcode },
8242 { Bad_Opcode },
8243 { Bad_Opcode },
8244 { Bad_Opcode },
8245 { Bad_Opcode },
4e7d34a6 8246 /* 70 */
592d1631
L
8247 { Bad_Opcode },
8248 { Bad_Opcode },
8249 { Bad_Opcode },
8250 { Bad_Opcode },
8251 { Bad_Opcode },
8252 { Bad_Opcode },
8253 { Bad_Opcode },
8254 { Bad_Opcode },
4e7d34a6 8255 /* 78 */
592d1631
L
8256 { Bad_Opcode },
8257 { Bad_Opcode },
8258 { Bad_Opcode },
8259 { Bad_Opcode },
8260 { Bad_Opcode },
8261 { Bad_Opcode },
8262 { Bad_Opcode },
8263 { Bad_Opcode },
4e7d34a6 8264 /* 80 */
592d1631
L
8265 { Bad_Opcode },
8266 { Bad_Opcode },
8267 { Bad_Opcode },
8268 { Bad_Opcode },
8269 { Bad_Opcode },
8270 { Bad_Opcode },
8271 { Bad_Opcode },
8272 { Bad_Opcode },
4e7d34a6 8273 /* 88 */
592d1631
L
8274 { Bad_Opcode },
8275 { Bad_Opcode },
8276 { Bad_Opcode },
8277 { Bad_Opcode },
8278 { Bad_Opcode },
8279 { Bad_Opcode },
8280 { Bad_Opcode },
8281 { Bad_Opcode },
4e7d34a6 8282 /* 90 */
592d1631
L
8283 { Bad_Opcode },
8284 { Bad_Opcode },
8285 { Bad_Opcode },
8286 { Bad_Opcode },
8287 { Bad_Opcode },
8288 { Bad_Opcode },
8289 { Bad_Opcode },
8290 { Bad_Opcode },
4e7d34a6 8291 /* 98 */
592d1631
L
8292 { Bad_Opcode },
8293 { Bad_Opcode },
8294 { Bad_Opcode },
8295 { Bad_Opcode },
8296 { Bad_Opcode },
8297 { Bad_Opcode },
8298 { Bad_Opcode },
8299 { Bad_Opcode },
4e7d34a6 8300 /* a0 */
592d1631
L
8301 { Bad_Opcode },
8302 { Bad_Opcode },
8303 { Bad_Opcode },
8304 { Bad_Opcode },
8305 { Bad_Opcode },
8306 { Bad_Opcode },
8307 { Bad_Opcode },
8308 { Bad_Opcode },
4e7d34a6 8309 /* a8 */
592d1631
L
8310 { Bad_Opcode },
8311 { Bad_Opcode },
8312 { Bad_Opcode },
8313 { Bad_Opcode },
8314 { Bad_Opcode },
8315 { Bad_Opcode },
8316 { Bad_Opcode },
8317 { Bad_Opcode },
d5d7db8e 8318 /* b0 */
592d1631
L
8319 { Bad_Opcode },
8320 { Bad_Opcode },
8321 { Bad_Opcode },
8322 { Bad_Opcode },
8323 { Bad_Opcode },
8324 { Bad_Opcode },
8325 { Bad_Opcode },
8326 { Bad_Opcode },
85f10a01 8327 /* b8 */
592d1631
L
8328 { Bad_Opcode },
8329 { Bad_Opcode },
8330 { Bad_Opcode },
8331 { Bad_Opcode },
8332 { Bad_Opcode },
8333 { Bad_Opcode },
8334 { Bad_Opcode },
8335 { Bad_Opcode },
85f10a01 8336 /* c0 */
592d1631
L
8337 { Bad_Opcode },
8338 { Bad_Opcode },
8339 { Bad_Opcode },
8340 { Bad_Opcode },
8341 { Bad_Opcode },
8342 { Bad_Opcode },
8343 { Bad_Opcode },
8344 { Bad_Opcode },
85f10a01 8345 /* c8 */
592d1631
L
8346 { Bad_Opcode },
8347 { Bad_Opcode },
8348 { Bad_Opcode },
8349 { Bad_Opcode },
8350 { Bad_Opcode },
8351 { Bad_Opcode },
8352 { Bad_Opcode },
8353 { Bad_Opcode },
85f10a01 8354 /* d0 */
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 },
85f10a01 8363 /* d8 */
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 },
85f10a01 8372 /* e0 */
592d1631
L
8373 { Bad_Opcode },
8374 { Bad_Opcode },
8375 { Bad_Opcode },
8376 { Bad_Opcode },
8377 { Bad_Opcode },
8378 { Bad_Opcode },
8379 { Bad_Opcode },
8380 { Bad_Opcode },
85f10a01 8381 /* e8 */
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 },
85f10a01 8390 /* f0 */
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 },
85f10a01 8399 /* f8 */
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 },
85f10a01 8408 },
c0f3af97
L
8409};
8410
8411static const struct dis386 vex_table[][256] = {
8412 /* VEX_0F */
85f10a01
MM
8413 {
8414 /* 00 */
592d1631
L
8415 { Bad_Opcode },
8416 { Bad_Opcode },
8417 { Bad_Opcode },
8418 { Bad_Opcode },
8419 { Bad_Opcode },
8420 { Bad_Opcode },
8421 { Bad_Opcode },
8422 { Bad_Opcode },
85f10a01 8423 /* 08 */
592d1631
L
8424 { Bad_Opcode },
8425 { Bad_Opcode },
8426 { Bad_Opcode },
8427 { Bad_Opcode },
8428 { Bad_Opcode },
8429 { Bad_Opcode },
8430 { Bad_Opcode },
8431 { Bad_Opcode },
c0f3af97 8432 /* 10 */
592a252b
L
8433 { PREFIX_TABLE (PREFIX_VEX_0F10) },
8434 { PREFIX_TABLE (PREFIX_VEX_0F11) },
8435 { PREFIX_TABLE (PREFIX_VEX_0F12) },
8436 { MOD_TABLE (MOD_VEX_0F13) },
ec6f095a
L
8437 { "vunpcklpX", { XM, Vex, EXx }, 0 },
8438 { "vunpckhpX", { XM, Vex, EXx }, 0 },
592a252b
L
8439 { PREFIX_TABLE (PREFIX_VEX_0F16) },
8440 { MOD_TABLE (MOD_VEX_0F17) },
c0f3af97 8441 /* 18 */
592d1631
L
8442 { Bad_Opcode },
8443 { Bad_Opcode },
8444 { Bad_Opcode },
8445 { Bad_Opcode },
8446 { Bad_Opcode },
8447 { Bad_Opcode },
8448 { Bad_Opcode },
8449 { Bad_Opcode },
c0f3af97 8450 /* 20 */
592d1631
L
8451 { Bad_Opcode },
8452 { Bad_Opcode },
8453 { Bad_Opcode },
8454 { Bad_Opcode },
8455 { Bad_Opcode },
8456 { Bad_Opcode },
8457 { Bad_Opcode },
8458 { Bad_Opcode },
c0f3af97 8459 /* 28 */
ec6f095a
L
8460 { "vmovapX", { XM, EXx }, 0 },
8461 { "vmovapX", { EXxS, XM }, 0 },
592a252b
L
8462 { PREFIX_TABLE (PREFIX_VEX_0F2A) },
8463 { MOD_TABLE (MOD_VEX_0F2B) },
8464 { PREFIX_TABLE (PREFIX_VEX_0F2C) },
8465 { PREFIX_TABLE (PREFIX_VEX_0F2D) },
8466 { PREFIX_TABLE (PREFIX_VEX_0F2E) },
8467 { PREFIX_TABLE (PREFIX_VEX_0F2F) },
85f10a01 8468 /* 30 */
592d1631
L
8469 { Bad_Opcode },
8470 { Bad_Opcode },
8471 { Bad_Opcode },
8472 { Bad_Opcode },
8473 { Bad_Opcode },
8474 { Bad_Opcode },
8475 { Bad_Opcode },
8476 { Bad_Opcode },
4e7d34a6 8477 /* 38 */
592d1631
L
8478 { Bad_Opcode },
8479 { Bad_Opcode },
8480 { Bad_Opcode },
8481 { Bad_Opcode },
8482 { Bad_Opcode },
8483 { Bad_Opcode },
8484 { Bad_Opcode },
8485 { Bad_Opcode },
d5d7db8e 8486 /* 40 */
592d1631 8487 { Bad_Opcode },
43234a1e
L
8488 { PREFIX_TABLE (PREFIX_VEX_0F41) },
8489 { PREFIX_TABLE (PREFIX_VEX_0F42) },
592d1631 8490 { Bad_Opcode },
43234a1e
L
8491 { PREFIX_TABLE (PREFIX_VEX_0F44) },
8492 { PREFIX_TABLE (PREFIX_VEX_0F45) },
8493 { PREFIX_TABLE (PREFIX_VEX_0F46) },
8494 { PREFIX_TABLE (PREFIX_VEX_0F47) },
85f10a01 8495 /* 48 */
592d1631
L
8496 { Bad_Opcode },
8497 { Bad_Opcode },
1ba585e8 8498 { PREFIX_TABLE (PREFIX_VEX_0F4A) },
43234a1e 8499 { PREFIX_TABLE (PREFIX_VEX_0F4B) },
592d1631
L
8500 { Bad_Opcode },
8501 { Bad_Opcode },
8502 { Bad_Opcode },
8503 { Bad_Opcode },
d5d7db8e 8504 /* 50 */
592a252b
L
8505 { MOD_TABLE (MOD_VEX_0F50) },
8506 { PREFIX_TABLE (PREFIX_VEX_0F51) },
8507 { PREFIX_TABLE (PREFIX_VEX_0F52) },
8508 { PREFIX_TABLE (PREFIX_VEX_0F53) },
bf890a93
IT
8509 { "vandpX", { XM, Vex, EXx }, 0 },
8510 { "vandnpX", { XM, Vex, EXx }, 0 },
8511 { "vorpX", { XM, Vex, EXx }, 0 },
8512 { "vxorpX", { XM, Vex, EXx }, 0 },
c0f3af97 8513 /* 58 */
592a252b
L
8514 { PREFIX_TABLE (PREFIX_VEX_0F58) },
8515 { PREFIX_TABLE (PREFIX_VEX_0F59) },
8516 { PREFIX_TABLE (PREFIX_VEX_0F5A) },
8517 { PREFIX_TABLE (PREFIX_VEX_0F5B) },
8518 { PREFIX_TABLE (PREFIX_VEX_0F5C) },
8519 { PREFIX_TABLE (PREFIX_VEX_0F5D) },
8520 { PREFIX_TABLE (PREFIX_VEX_0F5E) },
8521 { PREFIX_TABLE (PREFIX_VEX_0F5F) },
c0f3af97 8522 /* 60 */
592a252b
L
8523 { PREFIX_TABLE (PREFIX_VEX_0F60) },
8524 { PREFIX_TABLE (PREFIX_VEX_0F61) },
8525 { PREFIX_TABLE (PREFIX_VEX_0F62) },
8526 { PREFIX_TABLE (PREFIX_VEX_0F63) },
8527 { PREFIX_TABLE (PREFIX_VEX_0F64) },
8528 { PREFIX_TABLE (PREFIX_VEX_0F65) },
8529 { PREFIX_TABLE (PREFIX_VEX_0F66) },
8530 { PREFIX_TABLE (PREFIX_VEX_0F67) },
c0f3af97 8531 /* 68 */
592a252b
L
8532 { PREFIX_TABLE (PREFIX_VEX_0F68) },
8533 { PREFIX_TABLE (PREFIX_VEX_0F69) },
8534 { PREFIX_TABLE (PREFIX_VEX_0F6A) },
8535 { PREFIX_TABLE (PREFIX_VEX_0F6B) },
8536 { PREFIX_TABLE (PREFIX_VEX_0F6C) },
8537 { PREFIX_TABLE (PREFIX_VEX_0F6D) },
8538 { PREFIX_TABLE (PREFIX_VEX_0F6E) },
8539 { PREFIX_TABLE (PREFIX_VEX_0F6F) },
c0f3af97 8540 /* 70 */
592a252b
L
8541 { PREFIX_TABLE (PREFIX_VEX_0F70) },
8542 { REG_TABLE (REG_VEX_0F71) },
8543 { REG_TABLE (REG_VEX_0F72) },
8544 { REG_TABLE (REG_VEX_0F73) },
8545 { PREFIX_TABLE (PREFIX_VEX_0F74) },
8546 { PREFIX_TABLE (PREFIX_VEX_0F75) },
8547 { PREFIX_TABLE (PREFIX_VEX_0F76) },
8548 { PREFIX_TABLE (PREFIX_VEX_0F77) },
c0f3af97 8549 /* 78 */
592d1631
L
8550 { Bad_Opcode },
8551 { Bad_Opcode },
8552 { Bad_Opcode },
8553 { Bad_Opcode },
592a252b
L
8554 { PREFIX_TABLE (PREFIX_VEX_0F7C) },
8555 { PREFIX_TABLE (PREFIX_VEX_0F7D) },
8556 { PREFIX_TABLE (PREFIX_VEX_0F7E) },
8557 { PREFIX_TABLE (PREFIX_VEX_0F7F) },
c0f3af97 8558 /* 80 */
592d1631
L
8559 { Bad_Opcode },
8560 { Bad_Opcode },
8561 { Bad_Opcode },
8562 { Bad_Opcode },
8563 { Bad_Opcode },
8564 { Bad_Opcode },
8565 { Bad_Opcode },
8566 { Bad_Opcode },
c0f3af97 8567 /* 88 */
592d1631
L
8568 { Bad_Opcode },
8569 { Bad_Opcode },
8570 { Bad_Opcode },
8571 { Bad_Opcode },
8572 { Bad_Opcode },
8573 { Bad_Opcode },
8574 { Bad_Opcode },
8575 { Bad_Opcode },
c0f3af97 8576 /* 90 */
43234a1e
L
8577 { PREFIX_TABLE (PREFIX_VEX_0F90) },
8578 { PREFIX_TABLE (PREFIX_VEX_0F91) },
8579 { PREFIX_TABLE (PREFIX_VEX_0F92) },
8580 { PREFIX_TABLE (PREFIX_VEX_0F93) },
592d1631
L
8581 { Bad_Opcode },
8582 { Bad_Opcode },
8583 { Bad_Opcode },
8584 { Bad_Opcode },
c0f3af97 8585 /* 98 */
43234a1e 8586 { PREFIX_TABLE (PREFIX_VEX_0F98) },
1ba585e8 8587 { PREFIX_TABLE (PREFIX_VEX_0F99) },
592d1631
L
8588 { Bad_Opcode },
8589 { Bad_Opcode },
8590 { Bad_Opcode },
8591 { Bad_Opcode },
8592 { Bad_Opcode },
8593 { Bad_Opcode },
c0f3af97 8594 /* a0 */
592d1631
L
8595 { Bad_Opcode },
8596 { Bad_Opcode },
8597 { Bad_Opcode },
8598 { Bad_Opcode },
8599 { Bad_Opcode },
8600 { Bad_Opcode },
8601 { Bad_Opcode },
8602 { Bad_Opcode },
c0f3af97 8603 /* a8 */
592d1631
L
8604 { Bad_Opcode },
8605 { Bad_Opcode },
8606 { Bad_Opcode },
8607 { Bad_Opcode },
8608 { Bad_Opcode },
8609 { Bad_Opcode },
592a252b 8610 { REG_TABLE (REG_VEX_0FAE) },
592d1631 8611 { Bad_Opcode },
c0f3af97 8612 /* b0 */
592d1631
L
8613 { Bad_Opcode },
8614 { Bad_Opcode },
8615 { Bad_Opcode },
8616 { Bad_Opcode },
8617 { Bad_Opcode },
8618 { Bad_Opcode },
8619 { Bad_Opcode },
8620 { Bad_Opcode },
c0f3af97 8621 /* b8 */
592d1631
L
8622 { Bad_Opcode },
8623 { Bad_Opcode },
8624 { Bad_Opcode },
8625 { Bad_Opcode },
8626 { Bad_Opcode },
8627 { Bad_Opcode },
8628 { Bad_Opcode },
8629 { Bad_Opcode },
c0f3af97 8630 /* c0 */
592d1631
L
8631 { Bad_Opcode },
8632 { Bad_Opcode },
592a252b 8633 { PREFIX_TABLE (PREFIX_VEX_0FC2) },
592d1631 8634 { Bad_Opcode },
592a252b
L
8635 { PREFIX_TABLE (PREFIX_VEX_0FC4) },
8636 { PREFIX_TABLE (PREFIX_VEX_0FC5) },
bf890a93 8637 { "vshufpX", { XM, Vex, EXx, Ib }, 0 },
592d1631 8638 { Bad_Opcode },
c0f3af97 8639 /* c8 */
592d1631
L
8640 { Bad_Opcode },
8641 { Bad_Opcode },
8642 { Bad_Opcode },
8643 { Bad_Opcode },
8644 { Bad_Opcode },
8645 { Bad_Opcode },
8646 { Bad_Opcode },
8647 { Bad_Opcode },
c0f3af97 8648 /* d0 */
592a252b
L
8649 { PREFIX_TABLE (PREFIX_VEX_0FD0) },
8650 { PREFIX_TABLE (PREFIX_VEX_0FD1) },
8651 { PREFIX_TABLE (PREFIX_VEX_0FD2) },
8652 { PREFIX_TABLE (PREFIX_VEX_0FD3) },
8653 { PREFIX_TABLE (PREFIX_VEX_0FD4) },
8654 { PREFIX_TABLE (PREFIX_VEX_0FD5) },
8655 { PREFIX_TABLE (PREFIX_VEX_0FD6) },
8656 { PREFIX_TABLE (PREFIX_VEX_0FD7) },
c0f3af97 8657 /* d8 */
592a252b
L
8658 { PREFIX_TABLE (PREFIX_VEX_0FD8) },
8659 { PREFIX_TABLE (PREFIX_VEX_0FD9) },
8660 { PREFIX_TABLE (PREFIX_VEX_0FDA) },
8661 { PREFIX_TABLE (PREFIX_VEX_0FDB) },
8662 { PREFIX_TABLE (PREFIX_VEX_0FDC) },
8663 { PREFIX_TABLE (PREFIX_VEX_0FDD) },
8664 { PREFIX_TABLE (PREFIX_VEX_0FDE) },
8665 { PREFIX_TABLE (PREFIX_VEX_0FDF) },
c0f3af97 8666 /* e0 */
592a252b
L
8667 { PREFIX_TABLE (PREFIX_VEX_0FE0) },
8668 { PREFIX_TABLE (PREFIX_VEX_0FE1) },
8669 { PREFIX_TABLE (PREFIX_VEX_0FE2) },
8670 { PREFIX_TABLE (PREFIX_VEX_0FE3) },
8671 { PREFIX_TABLE (PREFIX_VEX_0FE4) },
8672 { PREFIX_TABLE (PREFIX_VEX_0FE5) },
8673 { PREFIX_TABLE (PREFIX_VEX_0FE6) },
8674 { PREFIX_TABLE (PREFIX_VEX_0FE7) },
c0f3af97 8675 /* e8 */
592a252b
L
8676 { PREFIX_TABLE (PREFIX_VEX_0FE8) },
8677 { PREFIX_TABLE (PREFIX_VEX_0FE9) },
8678 { PREFIX_TABLE (PREFIX_VEX_0FEA) },
8679 { PREFIX_TABLE (PREFIX_VEX_0FEB) },
8680 { PREFIX_TABLE (PREFIX_VEX_0FEC) },
8681 { PREFIX_TABLE (PREFIX_VEX_0FED) },
8682 { PREFIX_TABLE (PREFIX_VEX_0FEE) },
8683 { PREFIX_TABLE (PREFIX_VEX_0FEF) },
c0f3af97 8684 /* f0 */
592a252b
L
8685 { PREFIX_TABLE (PREFIX_VEX_0FF0) },
8686 { PREFIX_TABLE (PREFIX_VEX_0FF1) },
8687 { PREFIX_TABLE (PREFIX_VEX_0FF2) },
8688 { PREFIX_TABLE (PREFIX_VEX_0FF3) },
8689 { PREFIX_TABLE (PREFIX_VEX_0FF4) },
8690 { PREFIX_TABLE (PREFIX_VEX_0FF5) },
8691 { PREFIX_TABLE (PREFIX_VEX_0FF6) },
8692 { PREFIX_TABLE (PREFIX_VEX_0FF7) },
c0f3af97 8693 /* f8 */
592a252b
L
8694 { PREFIX_TABLE (PREFIX_VEX_0FF8) },
8695 { PREFIX_TABLE (PREFIX_VEX_0FF9) },
8696 { PREFIX_TABLE (PREFIX_VEX_0FFA) },
8697 { PREFIX_TABLE (PREFIX_VEX_0FFB) },
8698 { PREFIX_TABLE (PREFIX_VEX_0FFC) },
8699 { PREFIX_TABLE (PREFIX_VEX_0FFD) },
8700 { PREFIX_TABLE (PREFIX_VEX_0FFE) },
592d1631 8701 { Bad_Opcode },
c0f3af97
L
8702 },
8703 /* VEX_0F38 */
8704 {
8705 /* 00 */
592a252b
L
8706 { PREFIX_TABLE (PREFIX_VEX_0F3800) },
8707 { PREFIX_TABLE (PREFIX_VEX_0F3801) },
8708 { PREFIX_TABLE (PREFIX_VEX_0F3802) },
8709 { PREFIX_TABLE (PREFIX_VEX_0F3803) },
8710 { PREFIX_TABLE (PREFIX_VEX_0F3804) },
8711 { PREFIX_TABLE (PREFIX_VEX_0F3805) },
8712 { PREFIX_TABLE (PREFIX_VEX_0F3806) },
8713 { PREFIX_TABLE (PREFIX_VEX_0F3807) },
c0f3af97 8714 /* 08 */
592a252b
L
8715 { PREFIX_TABLE (PREFIX_VEX_0F3808) },
8716 { PREFIX_TABLE (PREFIX_VEX_0F3809) },
8717 { PREFIX_TABLE (PREFIX_VEX_0F380A) },
8718 { PREFIX_TABLE (PREFIX_VEX_0F380B) },
8719 { PREFIX_TABLE (PREFIX_VEX_0F380C) },
8720 { PREFIX_TABLE (PREFIX_VEX_0F380D) },
8721 { PREFIX_TABLE (PREFIX_VEX_0F380E) },
8722 { PREFIX_TABLE (PREFIX_VEX_0F380F) },
c0f3af97 8723 /* 10 */
592d1631
L
8724 { Bad_Opcode },
8725 { Bad_Opcode },
8726 { Bad_Opcode },
592a252b 8727 { PREFIX_TABLE (PREFIX_VEX_0F3813) },
592d1631
L
8728 { Bad_Opcode },
8729 { Bad_Opcode },
6c30d220 8730 { PREFIX_TABLE (PREFIX_VEX_0F3816) },
592a252b 8731 { PREFIX_TABLE (PREFIX_VEX_0F3817) },
c0f3af97 8732 /* 18 */
592a252b
L
8733 { PREFIX_TABLE (PREFIX_VEX_0F3818) },
8734 { PREFIX_TABLE (PREFIX_VEX_0F3819) },
8735 { PREFIX_TABLE (PREFIX_VEX_0F381A) },
592d1631 8736 { Bad_Opcode },
592a252b
L
8737 { PREFIX_TABLE (PREFIX_VEX_0F381C) },
8738 { PREFIX_TABLE (PREFIX_VEX_0F381D) },
8739 { PREFIX_TABLE (PREFIX_VEX_0F381E) },
592d1631 8740 { Bad_Opcode },
c0f3af97 8741 /* 20 */
592a252b
L
8742 { PREFIX_TABLE (PREFIX_VEX_0F3820) },
8743 { PREFIX_TABLE (PREFIX_VEX_0F3821) },
8744 { PREFIX_TABLE (PREFIX_VEX_0F3822) },
8745 { PREFIX_TABLE (PREFIX_VEX_0F3823) },
8746 { PREFIX_TABLE (PREFIX_VEX_0F3824) },
8747 { PREFIX_TABLE (PREFIX_VEX_0F3825) },
592d1631
L
8748 { Bad_Opcode },
8749 { Bad_Opcode },
c0f3af97 8750 /* 28 */
592a252b
L
8751 { PREFIX_TABLE (PREFIX_VEX_0F3828) },
8752 { PREFIX_TABLE (PREFIX_VEX_0F3829) },
8753 { PREFIX_TABLE (PREFIX_VEX_0F382A) },
8754 { PREFIX_TABLE (PREFIX_VEX_0F382B) },
8755 { PREFIX_TABLE (PREFIX_VEX_0F382C) },
8756 { PREFIX_TABLE (PREFIX_VEX_0F382D) },
8757 { PREFIX_TABLE (PREFIX_VEX_0F382E) },
8758 { PREFIX_TABLE (PREFIX_VEX_0F382F) },
c0f3af97 8759 /* 30 */
592a252b
L
8760 { PREFIX_TABLE (PREFIX_VEX_0F3830) },
8761 { PREFIX_TABLE (PREFIX_VEX_0F3831) },
8762 { PREFIX_TABLE (PREFIX_VEX_0F3832) },
8763 { PREFIX_TABLE (PREFIX_VEX_0F3833) },
8764 { PREFIX_TABLE (PREFIX_VEX_0F3834) },
8765 { PREFIX_TABLE (PREFIX_VEX_0F3835) },
6c30d220 8766 { PREFIX_TABLE (PREFIX_VEX_0F3836) },
592a252b 8767 { PREFIX_TABLE (PREFIX_VEX_0F3837) },
c0f3af97 8768 /* 38 */
592a252b
L
8769 { PREFIX_TABLE (PREFIX_VEX_0F3838) },
8770 { PREFIX_TABLE (PREFIX_VEX_0F3839) },
8771 { PREFIX_TABLE (PREFIX_VEX_0F383A) },
8772 { PREFIX_TABLE (PREFIX_VEX_0F383B) },
8773 { PREFIX_TABLE (PREFIX_VEX_0F383C) },
8774 { PREFIX_TABLE (PREFIX_VEX_0F383D) },
8775 { PREFIX_TABLE (PREFIX_VEX_0F383E) },
8776 { PREFIX_TABLE (PREFIX_VEX_0F383F) },
c0f3af97 8777 /* 40 */
592a252b
L
8778 { PREFIX_TABLE (PREFIX_VEX_0F3840) },
8779 { PREFIX_TABLE (PREFIX_VEX_0F3841) },
592d1631
L
8780 { Bad_Opcode },
8781 { Bad_Opcode },
8782 { Bad_Opcode },
6c30d220
L
8783 { PREFIX_TABLE (PREFIX_VEX_0F3845) },
8784 { PREFIX_TABLE (PREFIX_VEX_0F3846) },
8785 { PREFIX_TABLE (PREFIX_VEX_0F3847) },
c0f3af97 8786 /* 48 */
592d1631
L
8787 { Bad_Opcode },
8788 { Bad_Opcode },
8789 { Bad_Opcode },
8790 { Bad_Opcode },
8791 { Bad_Opcode },
8792 { Bad_Opcode },
8793 { Bad_Opcode },
8794 { Bad_Opcode },
c0f3af97 8795 /* 50 */
592d1631
L
8796 { Bad_Opcode },
8797 { Bad_Opcode },
8798 { Bad_Opcode },
8799 { Bad_Opcode },
8800 { Bad_Opcode },
8801 { Bad_Opcode },
8802 { Bad_Opcode },
8803 { Bad_Opcode },
c0f3af97 8804 /* 58 */
6c30d220
L
8805 { PREFIX_TABLE (PREFIX_VEX_0F3858) },
8806 { PREFIX_TABLE (PREFIX_VEX_0F3859) },
8807 { PREFIX_TABLE (PREFIX_VEX_0F385A) },
592d1631
L
8808 { Bad_Opcode },
8809 { Bad_Opcode },
8810 { Bad_Opcode },
8811 { Bad_Opcode },
8812 { Bad_Opcode },
c0f3af97 8813 /* 60 */
592d1631
L
8814 { Bad_Opcode },
8815 { Bad_Opcode },
8816 { Bad_Opcode },
8817 { Bad_Opcode },
8818 { Bad_Opcode },
8819 { Bad_Opcode },
8820 { Bad_Opcode },
8821 { Bad_Opcode },
c0f3af97 8822 /* 68 */
592d1631
L
8823 { Bad_Opcode },
8824 { Bad_Opcode },
8825 { Bad_Opcode },
8826 { Bad_Opcode },
8827 { Bad_Opcode },
8828 { Bad_Opcode },
8829 { Bad_Opcode },
8830 { Bad_Opcode },
c0f3af97 8831 /* 70 */
592d1631
L
8832 { Bad_Opcode },
8833 { Bad_Opcode },
8834 { Bad_Opcode },
8835 { Bad_Opcode },
8836 { Bad_Opcode },
8837 { Bad_Opcode },
8838 { Bad_Opcode },
8839 { Bad_Opcode },
c0f3af97 8840 /* 78 */
6c30d220
L
8841 { PREFIX_TABLE (PREFIX_VEX_0F3878) },
8842 { PREFIX_TABLE (PREFIX_VEX_0F3879) },
592d1631
L
8843 { Bad_Opcode },
8844 { Bad_Opcode },
8845 { Bad_Opcode },
8846 { Bad_Opcode },
8847 { Bad_Opcode },
8848 { Bad_Opcode },
c0f3af97 8849 /* 80 */
592d1631
L
8850 { Bad_Opcode },
8851 { Bad_Opcode },
8852 { Bad_Opcode },
8853 { Bad_Opcode },
8854 { Bad_Opcode },
8855 { Bad_Opcode },
8856 { Bad_Opcode },
8857 { Bad_Opcode },
c0f3af97 8858 /* 88 */
592d1631
L
8859 { Bad_Opcode },
8860 { Bad_Opcode },
8861 { Bad_Opcode },
8862 { Bad_Opcode },
6c30d220 8863 { PREFIX_TABLE (PREFIX_VEX_0F388C) },
592d1631 8864 { Bad_Opcode },
6c30d220 8865 { PREFIX_TABLE (PREFIX_VEX_0F388E) },
592d1631 8866 { Bad_Opcode },
c0f3af97 8867 /* 90 */
6c30d220
L
8868 { PREFIX_TABLE (PREFIX_VEX_0F3890) },
8869 { PREFIX_TABLE (PREFIX_VEX_0F3891) },
8870 { PREFIX_TABLE (PREFIX_VEX_0F3892) },
8871 { PREFIX_TABLE (PREFIX_VEX_0F3893) },
592d1631
L
8872 { Bad_Opcode },
8873 { Bad_Opcode },
592a252b
L
8874 { PREFIX_TABLE (PREFIX_VEX_0F3896) },
8875 { PREFIX_TABLE (PREFIX_VEX_0F3897) },
c0f3af97 8876 /* 98 */
592a252b
L
8877 { PREFIX_TABLE (PREFIX_VEX_0F3898) },
8878 { PREFIX_TABLE (PREFIX_VEX_0F3899) },
8879 { PREFIX_TABLE (PREFIX_VEX_0F389A) },
8880 { PREFIX_TABLE (PREFIX_VEX_0F389B) },
8881 { PREFIX_TABLE (PREFIX_VEX_0F389C) },
8882 { PREFIX_TABLE (PREFIX_VEX_0F389D) },
8883 { PREFIX_TABLE (PREFIX_VEX_0F389E) },
8884 { PREFIX_TABLE (PREFIX_VEX_0F389F) },
c0f3af97 8885 /* a0 */
592d1631
L
8886 { Bad_Opcode },
8887 { Bad_Opcode },
8888 { Bad_Opcode },
8889 { Bad_Opcode },
8890 { Bad_Opcode },
8891 { Bad_Opcode },
592a252b
L
8892 { PREFIX_TABLE (PREFIX_VEX_0F38A6) },
8893 { PREFIX_TABLE (PREFIX_VEX_0F38A7) },
c0f3af97 8894 /* a8 */
592a252b
L
8895 { PREFIX_TABLE (PREFIX_VEX_0F38A8) },
8896 { PREFIX_TABLE (PREFIX_VEX_0F38A9) },
8897 { PREFIX_TABLE (PREFIX_VEX_0F38AA) },
8898 { PREFIX_TABLE (PREFIX_VEX_0F38AB) },
8899 { PREFIX_TABLE (PREFIX_VEX_0F38AC) },
8900 { PREFIX_TABLE (PREFIX_VEX_0F38AD) },
8901 { PREFIX_TABLE (PREFIX_VEX_0F38AE) },
8902 { PREFIX_TABLE (PREFIX_VEX_0F38AF) },
c0f3af97 8903 /* b0 */
592d1631
L
8904 { Bad_Opcode },
8905 { Bad_Opcode },
8906 { Bad_Opcode },
8907 { Bad_Opcode },
8908 { Bad_Opcode },
8909 { Bad_Opcode },
592a252b
L
8910 { PREFIX_TABLE (PREFIX_VEX_0F38B6) },
8911 { PREFIX_TABLE (PREFIX_VEX_0F38B7) },
c0f3af97 8912 /* b8 */
592a252b
L
8913 { PREFIX_TABLE (PREFIX_VEX_0F38B8) },
8914 { PREFIX_TABLE (PREFIX_VEX_0F38B9) },
8915 { PREFIX_TABLE (PREFIX_VEX_0F38BA) },
8916 { PREFIX_TABLE (PREFIX_VEX_0F38BB) },
8917 { PREFIX_TABLE (PREFIX_VEX_0F38BC) },
8918 { PREFIX_TABLE (PREFIX_VEX_0F38BD) },
8919 { PREFIX_TABLE (PREFIX_VEX_0F38BE) },
8920 { PREFIX_TABLE (PREFIX_VEX_0F38BF) },
c0f3af97 8921 /* c0 */
592d1631
L
8922 { Bad_Opcode },
8923 { Bad_Opcode },
8924 { Bad_Opcode },
8925 { Bad_Opcode },
8926 { Bad_Opcode },
8927 { Bad_Opcode },
8928 { Bad_Opcode },
8929 { Bad_Opcode },
c0f3af97 8930 /* c8 */
592d1631
L
8931 { Bad_Opcode },
8932 { Bad_Opcode },
8933 { Bad_Opcode },
8934 { Bad_Opcode },
8935 { Bad_Opcode },
8936 { Bad_Opcode },
8937 { Bad_Opcode },
48521003 8938 { PREFIX_TABLE (PREFIX_VEX_0F38CF) },
c0f3af97 8939 /* d0 */
592d1631
L
8940 { Bad_Opcode },
8941 { Bad_Opcode },
8942 { Bad_Opcode },
8943 { Bad_Opcode },
8944 { Bad_Opcode },
8945 { Bad_Opcode },
8946 { Bad_Opcode },
8947 { Bad_Opcode },
c0f3af97 8948 /* d8 */
592d1631
L
8949 { Bad_Opcode },
8950 { Bad_Opcode },
8951 { Bad_Opcode },
592a252b
L
8952 { PREFIX_TABLE (PREFIX_VEX_0F38DB) },
8953 { PREFIX_TABLE (PREFIX_VEX_0F38DC) },
8954 { PREFIX_TABLE (PREFIX_VEX_0F38DD) },
8955 { PREFIX_TABLE (PREFIX_VEX_0F38DE) },
8956 { PREFIX_TABLE (PREFIX_VEX_0F38DF) },
c0f3af97 8957 /* e0 */
592d1631
L
8958 { Bad_Opcode },
8959 { Bad_Opcode },
8960 { Bad_Opcode },
8961 { Bad_Opcode },
8962 { Bad_Opcode },
8963 { Bad_Opcode },
8964 { Bad_Opcode },
8965 { Bad_Opcode },
c0f3af97 8966 /* e8 */
592d1631
L
8967 { Bad_Opcode },
8968 { Bad_Opcode },
8969 { Bad_Opcode },
8970 { Bad_Opcode },
8971 { Bad_Opcode },
8972 { Bad_Opcode },
8973 { Bad_Opcode },
8974 { Bad_Opcode },
c0f3af97 8975 /* f0 */
592d1631
L
8976 { Bad_Opcode },
8977 { Bad_Opcode },
f12dc422
L
8978 { PREFIX_TABLE (PREFIX_VEX_0F38F2) },
8979 { REG_TABLE (REG_VEX_0F38F3) },
592d1631 8980 { Bad_Opcode },
6c30d220
L
8981 { PREFIX_TABLE (PREFIX_VEX_0F38F5) },
8982 { PREFIX_TABLE (PREFIX_VEX_0F38F6) },
f12dc422 8983 { PREFIX_TABLE (PREFIX_VEX_0F38F7) },
c0f3af97 8984 /* f8 */
592d1631
L
8985 { Bad_Opcode },
8986 { Bad_Opcode },
8987 { Bad_Opcode },
8988 { Bad_Opcode },
8989 { Bad_Opcode },
8990 { Bad_Opcode },
8991 { Bad_Opcode },
8992 { Bad_Opcode },
c0f3af97
L
8993 },
8994 /* VEX_0F3A */
8995 {
8996 /* 00 */
6c30d220
L
8997 { PREFIX_TABLE (PREFIX_VEX_0F3A00) },
8998 { PREFIX_TABLE (PREFIX_VEX_0F3A01) },
8999 { PREFIX_TABLE (PREFIX_VEX_0F3A02) },
592d1631 9000 { Bad_Opcode },
592a252b
L
9001 { PREFIX_TABLE (PREFIX_VEX_0F3A04) },
9002 { PREFIX_TABLE (PREFIX_VEX_0F3A05) },
9003 { PREFIX_TABLE (PREFIX_VEX_0F3A06) },
592d1631 9004 { Bad_Opcode },
c0f3af97 9005 /* 08 */
592a252b
L
9006 { PREFIX_TABLE (PREFIX_VEX_0F3A08) },
9007 { PREFIX_TABLE (PREFIX_VEX_0F3A09) },
9008 { PREFIX_TABLE (PREFIX_VEX_0F3A0A) },
9009 { PREFIX_TABLE (PREFIX_VEX_0F3A0B) },
9010 { PREFIX_TABLE (PREFIX_VEX_0F3A0C) },
9011 { PREFIX_TABLE (PREFIX_VEX_0F3A0D) },
9012 { PREFIX_TABLE (PREFIX_VEX_0F3A0E) },
9013 { PREFIX_TABLE (PREFIX_VEX_0F3A0F) },
c0f3af97 9014 /* 10 */
592d1631
L
9015 { Bad_Opcode },
9016 { Bad_Opcode },
9017 { Bad_Opcode },
9018 { Bad_Opcode },
592a252b
L
9019 { PREFIX_TABLE (PREFIX_VEX_0F3A14) },
9020 { PREFIX_TABLE (PREFIX_VEX_0F3A15) },
9021 { PREFIX_TABLE (PREFIX_VEX_0F3A16) },
9022 { PREFIX_TABLE (PREFIX_VEX_0F3A17) },
c0f3af97 9023 /* 18 */
592a252b
L
9024 { PREFIX_TABLE (PREFIX_VEX_0F3A18) },
9025 { PREFIX_TABLE (PREFIX_VEX_0F3A19) },
592d1631
L
9026 { Bad_Opcode },
9027 { Bad_Opcode },
9028 { Bad_Opcode },
592a252b 9029 { PREFIX_TABLE (PREFIX_VEX_0F3A1D) },
592d1631
L
9030 { Bad_Opcode },
9031 { Bad_Opcode },
c0f3af97 9032 /* 20 */
592a252b
L
9033 { PREFIX_TABLE (PREFIX_VEX_0F3A20) },
9034 { PREFIX_TABLE (PREFIX_VEX_0F3A21) },
9035 { PREFIX_TABLE (PREFIX_VEX_0F3A22) },
592d1631
L
9036 { Bad_Opcode },
9037 { Bad_Opcode },
9038 { Bad_Opcode },
9039 { Bad_Opcode },
9040 { Bad_Opcode },
c0f3af97 9041 /* 28 */
592d1631
L
9042 { Bad_Opcode },
9043 { Bad_Opcode },
9044 { Bad_Opcode },
9045 { Bad_Opcode },
9046 { Bad_Opcode },
9047 { Bad_Opcode },
9048 { Bad_Opcode },
9049 { Bad_Opcode },
c0f3af97 9050 /* 30 */
43234a1e 9051 { PREFIX_TABLE (PREFIX_VEX_0F3A30) },
1ba585e8 9052 { PREFIX_TABLE (PREFIX_VEX_0F3A31) },
43234a1e 9053 { PREFIX_TABLE (PREFIX_VEX_0F3A32) },
1ba585e8 9054 { PREFIX_TABLE (PREFIX_VEX_0F3A33) },
592d1631
L
9055 { Bad_Opcode },
9056 { Bad_Opcode },
9057 { Bad_Opcode },
9058 { Bad_Opcode },
c0f3af97 9059 /* 38 */
6c30d220
L
9060 { PREFIX_TABLE (PREFIX_VEX_0F3A38) },
9061 { PREFIX_TABLE (PREFIX_VEX_0F3A39) },
592d1631
L
9062 { Bad_Opcode },
9063 { Bad_Opcode },
9064 { Bad_Opcode },
9065 { Bad_Opcode },
9066 { Bad_Opcode },
9067 { Bad_Opcode },
c0f3af97 9068 /* 40 */
592a252b
L
9069 { PREFIX_TABLE (PREFIX_VEX_0F3A40) },
9070 { PREFIX_TABLE (PREFIX_VEX_0F3A41) },
9071 { PREFIX_TABLE (PREFIX_VEX_0F3A42) },
592d1631 9072 { Bad_Opcode },
592a252b 9073 { PREFIX_TABLE (PREFIX_VEX_0F3A44) },
592d1631 9074 { Bad_Opcode },
6c30d220 9075 { PREFIX_TABLE (PREFIX_VEX_0F3A46) },
592d1631 9076 { Bad_Opcode },
c0f3af97 9077 /* 48 */
592a252b
L
9078 { PREFIX_TABLE (PREFIX_VEX_0F3A48) },
9079 { PREFIX_TABLE (PREFIX_VEX_0F3A49) },
9080 { PREFIX_TABLE (PREFIX_VEX_0F3A4A) },
9081 { PREFIX_TABLE (PREFIX_VEX_0F3A4B) },
9082 { PREFIX_TABLE (PREFIX_VEX_0F3A4C) },
592d1631
L
9083 { Bad_Opcode },
9084 { Bad_Opcode },
9085 { Bad_Opcode },
c0f3af97 9086 /* 50 */
592d1631
L
9087 { Bad_Opcode },
9088 { Bad_Opcode },
9089 { Bad_Opcode },
9090 { Bad_Opcode },
9091 { Bad_Opcode },
9092 { Bad_Opcode },
9093 { Bad_Opcode },
9094 { Bad_Opcode },
c0f3af97 9095 /* 58 */
592d1631
L
9096 { Bad_Opcode },
9097 { Bad_Opcode },
9098 { Bad_Opcode },
9099 { Bad_Opcode },
592a252b
L
9100 { PREFIX_TABLE (PREFIX_VEX_0F3A5C) },
9101 { PREFIX_TABLE (PREFIX_VEX_0F3A5D) },
9102 { PREFIX_TABLE (PREFIX_VEX_0F3A5E) },
9103 { PREFIX_TABLE (PREFIX_VEX_0F3A5F) },
c0f3af97 9104 /* 60 */
592a252b
L
9105 { PREFIX_TABLE (PREFIX_VEX_0F3A60) },
9106 { PREFIX_TABLE (PREFIX_VEX_0F3A61) },
9107 { PREFIX_TABLE (PREFIX_VEX_0F3A62) },
9108 { PREFIX_TABLE (PREFIX_VEX_0F3A63) },
592d1631
L
9109 { Bad_Opcode },
9110 { Bad_Opcode },
9111 { Bad_Opcode },
9112 { Bad_Opcode },
c0f3af97 9113 /* 68 */
592a252b
L
9114 { PREFIX_TABLE (PREFIX_VEX_0F3A68) },
9115 { PREFIX_TABLE (PREFIX_VEX_0F3A69) },
9116 { PREFIX_TABLE (PREFIX_VEX_0F3A6A) },
9117 { PREFIX_TABLE (PREFIX_VEX_0F3A6B) },
9118 { PREFIX_TABLE (PREFIX_VEX_0F3A6C) },
9119 { PREFIX_TABLE (PREFIX_VEX_0F3A6D) },
9120 { PREFIX_TABLE (PREFIX_VEX_0F3A6E) },
9121 { PREFIX_TABLE (PREFIX_VEX_0F3A6F) },
c0f3af97 9122 /* 70 */
592d1631
L
9123 { Bad_Opcode },
9124 { Bad_Opcode },
9125 { Bad_Opcode },
9126 { Bad_Opcode },
9127 { Bad_Opcode },
9128 { Bad_Opcode },
9129 { Bad_Opcode },
9130 { Bad_Opcode },
c0f3af97 9131 /* 78 */
592a252b
L
9132 { PREFIX_TABLE (PREFIX_VEX_0F3A78) },
9133 { PREFIX_TABLE (PREFIX_VEX_0F3A79) },
9134 { PREFIX_TABLE (PREFIX_VEX_0F3A7A) },
9135 { PREFIX_TABLE (PREFIX_VEX_0F3A7B) },
9136 { PREFIX_TABLE (PREFIX_VEX_0F3A7C) },
9137 { PREFIX_TABLE (PREFIX_VEX_0F3A7D) },
9138 { PREFIX_TABLE (PREFIX_VEX_0F3A7E) },
9139 { PREFIX_TABLE (PREFIX_VEX_0F3A7F) },
c0f3af97 9140 /* 80 */
592d1631
L
9141 { Bad_Opcode },
9142 { Bad_Opcode },
9143 { Bad_Opcode },
9144 { Bad_Opcode },
9145 { Bad_Opcode },
9146 { Bad_Opcode },
9147 { Bad_Opcode },
9148 { Bad_Opcode },
c0f3af97 9149 /* 88 */
592d1631
L
9150 { Bad_Opcode },
9151 { Bad_Opcode },
9152 { Bad_Opcode },
9153 { Bad_Opcode },
9154 { Bad_Opcode },
9155 { Bad_Opcode },
9156 { Bad_Opcode },
9157 { Bad_Opcode },
c0f3af97 9158 /* 90 */
592d1631
L
9159 { Bad_Opcode },
9160 { Bad_Opcode },
9161 { Bad_Opcode },
9162 { Bad_Opcode },
9163 { Bad_Opcode },
9164 { Bad_Opcode },
9165 { Bad_Opcode },
9166 { Bad_Opcode },
c0f3af97 9167 /* 98 */
592d1631
L
9168 { Bad_Opcode },
9169 { Bad_Opcode },
9170 { Bad_Opcode },
9171 { Bad_Opcode },
9172 { Bad_Opcode },
9173 { Bad_Opcode },
9174 { Bad_Opcode },
9175 { Bad_Opcode },
c0f3af97 9176 /* a0 */
592d1631
L
9177 { Bad_Opcode },
9178 { Bad_Opcode },
9179 { Bad_Opcode },
9180 { Bad_Opcode },
9181 { Bad_Opcode },
9182 { Bad_Opcode },
9183 { Bad_Opcode },
9184 { Bad_Opcode },
c0f3af97 9185 /* a8 */
592d1631
L
9186 { Bad_Opcode },
9187 { Bad_Opcode },
9188 { Bad_Opcode },
9189 { Bad_Opcode },
9190 { Bad_Opcode },
9191 { Bad_Opcode },
9192 { Bad_Opcode },
9193 { Bad_Opcode },
c0f3af97 9194 /* b0 */
592d1631
L
9195 { Bad_Opcode },
9196 { Bad_Opcode },
9197 { Bad_Opcode },
9198 { Bad_Opcode },
9199 { Bad_Opcode },
9200 { Bad_Opcode },
9201 { Bad_Opcode },
9202 { Bad_Opcode },
c0f3af97 9203 /* b8 */
592d1631
L
9204 { Bad_Opcode },
9205 { Bad_Opcode },
9206 { Bad_Opcode },
9207 { Bad_Opcode },
9208 { Bad_Opcode },
9209 { Bad_Opcode },
9210 { Bad_Opcode },
9211 { Bad_Opcode },
c0f3af97 9212 /* c0 */
592d1631
L
9213 { Bad_Opcode },
9214 { Bad_Opcode },
9215 { Bad_Opcode },
9216 { Bad_Opcode },
9217 { Bad_Opcode },
9218 { Bad_Opcode },
9219 { Bad_Opcode },
9220 { Bad_Opcode },
c0f3af97 9221 /* c8 */
592d1631
L
9222 { Bad_Opcode },
9223 { Bad_Opcode },
9224 { Bad_Opcode },
9225 { Bad_Opcode },
9226 { Bad_Opcode },
9227 { Bad_Opcode },
48521003
IT
9228 { PREFIX_TABLE(PREFIX_VEX_0F3ACE) },
9229 { PREFIX_TABLE(PREFIX_VEX_0F3ACF) },
c0f3af97 9230 /* d0 */
592d1631
L
9231 { Bad_Opcode },
9232 { Bad_Opcode },
9233 { Bad_Opcode },
9234 { Bad_Opcode },
9235 { Bad_Opcode },
9236 { Bad_Opcode },
9237 { Bad_Opcode },
9238 { Bad_Opcode },
c0f3af97 9239 /* d8 */
592d1631
L
9240 { Bad_Opcode },
9241 { Bad_Opcode },
9242 { Bad_Opcode },
9243 { Bad_Opcode },
9244 { Bad_Opcode },
9245 { Bad_Opcode },
9246 { Bad_Opcode },
592a252b 9247 { PREFIX_TABLE (PREFIX_VEX_0F3ADF) },
c0f3af97 9248 /* e0 */
592d1631
L
9249 { Bad_Opcode },
9250 { Bad_Opcode },
9251 { Bad_Opcode },
9252 { Bad_Opcode },
9253 { Bad_Opcode },
9254 { Bad_Opcode },
9255 { Bad_Opcode },
9256 { Bad_Opcode },
c0f3af97 9257 /* e8 */
592d1631
L
9258 { Bad_Opcode },
9259 { Bad_Opcode },
9260 { Bad_Opcode },
9261 { Bad_Opcode },
9262 { Bad_Opcode },
9263 { Bad_Opcode },
9264 { Bad_Opcode },
9265 { Bad_Opcode },
c0f3af97 9266 /* f0 */
6c30d220 9267 { PREFIX_TABLE (PREFIX_VEX_0F3AF0) },
592d1631
L
9268 { Bad_Opcode },
9269 { Bad_Opcode },
9270 { Bad_Opcode },
9271 { Bad_Opcode },
9272 { Bad_Opcode },
9273 { Bad_Opcode },
9274 { Bad_Opcode },
c0f3af97 9275 /* f8 */
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
L
9284 },
9285};
9286
43234a1e
L
9287#define NEED_OPCODE_TABLE
9288#include "i386-dis-evex.h"
9289#undef NEED_OPCODE_TABLE
c0f3af97 9290static const struct dis386 vex_len_table[][2] = {
592a252b 9291 /* VEX_LEN_0F12_P_0_M_0 */
c0f3af97 9292 {
ec6f095a 9293 { "vmovlps", { XM, Vex128, EXq }, 0 },
c0f3af97
L
9294 },
9295
592a252b 9296 /* VEX_LEN_0F12_P_0_M_1 */
c0f3af97 9297 {
ec6f095a 9298 { "vmovhlps", { XM, Vex128, EXq }, 0 },
c0f3af97
L
9299 },
9300
592a252b 9301 /* VEX_LEN_0F12_P_2 */
c0f3af97 9302 {
ec6f095a 9303 { "vmovlpd", { XM, Vex128, EXq }, 0 },
c0f3af97
L
9304 },
9305
592a252b 9306 /* VEX_LEN_0F13_M_0 */
c0f3af97 9307 {
ec6f095a 9308 { "vmovlpX", { EXq, XM }, 0 },
c0f3af97
L
9309 },
9310
592a252b 9311 /* VEX_LEN_0F16_P_0_M_0 */
c0f3af97 9312 {
ec6f095a 9313 { "vmovhps", { XM, Vex128, EXq }, 0 },
c0f3af97
L
9314 },
9315
592a252b 9316 /* VEX_LEN_0F16_P_0_M_1 */
c0f3af97 9317 {
ec6f095a 9318 { "vmovlhps", { XM, Vex128, EXq }, 0 },
c0f3af97
L
9319 },
9320
592a252b 9321 /* VEX_LEN_0F16_P_2 */
c0f3af97 9322 {
ec6f095a 9323 { "vmovhpd", { XM, Vex128, EXq }, 0 },
c0f3af97
L
9324 },
9325
592a252b 9326 /* VEX_LEN_0F17_M_0 */
c0f3af97 9327 {
ec6f095a 9328 { "vmovhpX", { EXq, XM }, 0 },
c0f3af97
L
9329 },
9330
592a252b 9331 /* VEX_LEN_0F2A_P_1 */
c0f3af97 9332 {
bf890a93
IT
9333 { "vcvtsi2ss%LQ", { XMScalar, VexScalar, Ev }, 0 },
9334 { "vcvtsi2ss%LQ", { XMScalar, VexScalar, Ev }, 0 },
c0f3af97
L
9335 },
9336
592a252b 9337 /* VEX_LEN_0F2A_P_3 */
c0f3af97 9338 {
bf890a93
IT
9339 { "vcvtsi2sd%LQ", { XMScalar, VexScalar, Ev }, 0 },
9340 { "vcvtsi2sd%LQ", { XMScalar, VexScalar, Ev }, 0 },
c0f3af97
L
9341 },
9342
592a252b 9343 /* VEX_LEN_0F2C_P_1 */
c0f3af97 9344 {
9646c87b
JB
9345 { "vcvttss2si", { Gv, EXdScalar }, 0 },
9346 { "vcvttss2si", { Gv, EXdScalar }, 0 },
c0f3af97
L
9347 },
9348
592a252b 9349 /* VEX_LEN_0F2C_P_3 */
c0f3af97 9350 {
9646c87b
JB
9351 { "vcvttsd2si", { Gv, EXqScalar }, 0 },
9352 { "vcvttsd2si", { Gv, EXqScalar }, 0 },
c0f3af97
L
9353 },
9354
592a252b 9355 /* VEX_LEN_0F2D_P_1 */
c0f3af97 9356 {
9646c87b
JB
9357 { "vcvtss2si", { Gv, EXdScalar }, 0 },
9358 { "vcvtss2si", { Gv, EXdScalar }, 0 },
c0f3af97
L
9359 },
9360
592a252b 9361 /* VEX_LEN_0F2D_P_3 */
c0f3af97 9362 {
9646c87b
JB
9363 { "vcvtsd2si", { Gv, EXqScalar }, 0 },
9364 { "vcvtsd2si", { Gv, EXqScalar }, 0 },
c0f3af97
L
9365 },
9366
43234a1e
L
9367 /* VEX_LEN_0F41_P_0 */
9368 {
9369 { Bad_Opcode },
9370 { VEX_W_TABLE (VEX_W_0F41_P_0_LEN_1) },
9371 },
1ba585e8
IT
9372 /* VEX_LEN_0F41_P_2 */
9373 {
9374 { Bad_Opcode },
9375 { VEX_W_TABLE (VEX_W_0F41_P_2_LEN_1) },
9376 },
43234a1e
L
9377 /* VEX_LEN_0F42_P_0 */
9378 {
9379 { Bad_Opcode },
9380 { VEX_W_TABLE (VEX_W_0F42_P_0_LEN_1) },
9381 },
1ba585e8
IT
9382 /* VEX_LEN_0F42_P_2 */
9383 {
9384 { Bad_Opcode },
9385 { VEX_W_TABLE (VEX_W_0F42_P_2_LEN_1) },
9386 },
43234a1e
L
9387 /* VEX_LEN_0F44_P_0 */
9388 {
9389 { VEX_W_TABLE (VEX_W_0F44_P_0_LEN_0) },
9390 },
1ba585e8
IT
9391 /* VEX_LEN_0F44_P_2 */
9392 {
9393 { VEX_W_TABLE (VEX_W_0F44_P_2_LEN_0) },
9394 },
43234a1e
L
9395 /* VEX_LEN_0F45_P_0 */
9396 {
9397 { Bad_Opcode },
9398 { VEX_W_TABLE (VEX_W_0F45_P_0_LEN_1) },
9399 },
1ba585e8
IT
9400 /* VEX_LEN_0F45_P_2 */
9401 {
9402 { Bad_Opcode },
9403 { VEX_W_TABLE (VEX_W_0F45_P_2_LEN_1) },
9404 },
43234a1e
L
9405 /* VEX_LEN_0F46_P_0 */
9406 {
9407 { Bad_Opcode },
9408 { VEX_W_TABLE (VEX_W_0F46_P_0_LEN_1) },
9409 },
1ba585e8
IT
9410 /* VEX_LEN_0F46_P_2 */
9411 {
9412 { Bad_Opcode },
9413 { VEX_W_TABLE (VEX_W_0F46_P_2_LEN_1) },
9414 },
43234a1e
L
9415 /* VEX_LEN_0F47_P_0 */
9416 {
9417 { Bad_Opcode },
9418 { VEX_W_TABLE (VEX_W_0F47_P_0_LEN_1) },
9419 },
1ba585e8
IT
9420 /* VEX_LEN_0F47_P_2 */
9421 {
9422 { Bad_Opcode },
9423 { VEX_W_TABLE (VEX_W_0F47_P_2_LEN_1) },
9424 },
9425 /* VEX_LEN_0F4A_P_0 */
9426 {
9427 { Bad_Opcode },
9428 { VEX_W_TABLE (VEX_W_0F4A_P_0_LEN_1) },
9429 },
9430 /* VEX_LEN_0F4A_P_2 */
9431 {
9432 { Bad_Opcode },
9433 { VEX_W_TABLE (VEX_W_0F4A_P_2_LEN_1) },
9434 },
9435 /* VEX_LEN_0F4B_P_0 */
9436 {
9437 { Bad_Opcode },
9438 { VEX_W_TABLE (VEX_W_0F4B_P_0_LEN_1) },
9439 },
43234a1e
L
9440 /* VEX_LEN_0F4B_P_2 */
9441 {
9442 { Bad_Opcode },
9443 { VEX_W_TABLE (VEX_W_0F4B_P_2_LEN_1) },
9444 },
9445
ec6f095a 9446 /* VEX_LEN_0F6E_P_2 */
c0f3af97 9447 {
ec6f095a 9448 { "vmovK", { XMScalar, Edq }, 0 },
c0f3af97
L
9449 },
9450
ec6f095a 9451 /* VEX_LEN_0F77_P_1 */
c0f3af97 9452 {
ec6f095a
L
9453 { "vzeroupper", { XX }, 0 },
9454 { "vzeroall", { XX }, 0 },
c0f3af97
L
9455 },
9456
ec6f095a 9457 /* VEX_LEN_0F7E_P_1 */
c0f3af97 9458 {
ec6f095a 9459 { "vmovq", { XMScalar, EXqScalar }, 0 },
c0f3af97
L
9460 },
9461
ec6f095a 9462 /* VEX_LEN_0F7E_P_2 */
c0f3af97 9463 {
ec6f095a 9464 { "vmovK", { Edq, XMScalar }, 0 },
c0f3af97
L
9465 },
9466
ec6f095a 9467 /* VEX_LEN_0F90_P_0 */
c0f3af97 9468 {
ec6f095a 9469 { VEX_W_TABLE (VEX_W_0F90_P_0_LEN_0) },
c0f3af97
L
9470 },
9471
ec6f095a 9472 /* VEX_LEN_0F90_P_2 */
c0f3af97 9473 {
ec6f095a 9474 { VEX_W_TABLE (VEX_W_0F90_P_2_LEN_0) },
c0f3af97
L
9475 },
9476
ec6f095a 9477 /* VEX_LEN_0F91_P_0 */
c0f3af97 9478 {
ec6f095a 9479 { VEX_W_TABLE (VEX_W_0F91_P_0_LEN_0) },
c0f3af97
L
9480 },
9481
ec6f095a 9482 /* VEX_LEN_0F91_P_2 */
c0f3af97 9483 {
ec6f095a 9484 { VEX_W_TABLE (VEX_W_0F91_P_2_LEN_0) },
c0f3af97
L
9485 },
9486
ec6f095a 9487 /* VEX_LEN_0F92_P_0 */
c0f3af97 9488 {
ec6f095a 9489 { VEX_W_TABLE (VEX_W_0F92_P_0_LEN_0) },
c0f3af97
L
9490 },
9491
ec6f095a 9492 /* VEX_LEN_0F92_P_2 */
c0f3af97 9493 {
ec6f095a 9494 { VEX_W_TABLE (VEX_W_0F92_P_2_LEN_0) },
c0f3af97
L
9495 },
9496
ec6f095a 9497 /* VEX_LEN_0F92_P_3 */
c0f3af97 9498 {
58a211d2 9499 { MOD_TABLE (MOD_VEX_0F92_P_3_LEN_0) },
c0f3af97
L
9500 },
9501
ec6f095a 9502 /* VEX_LEN_0F93_P_0 */
c0f3af97 9503 {
ec6f095a 9504 { VEX_W_TABLE (VEX_W_0F93_P_0_LEN_0) },
c0f3af97
L
9505 },
9506
ec6f095a 9507 /* VEX_LEN_0F93_P_2 */
c0f3af97 9508 {
ec6f095a 9509 { VEX_W_TABLE (VEX_W_0F93_P_2_LEN_0) },
c0f3af97
L
9510 },
9511
ec6f095a 9512 /* VEX_LEN_0F93_P_3 */
c0f3af97 9513 {
58a211d2 9514 { MOD_TABLE (MOD_VEX_0F93_P_3_LEN_0) },
c0f3af97
L
9515 },
9516
ec6f095a 9517 /* VEX_LEN_0F98_P_0 */
43234a1e
L
9518 {
9519 { VEX_W_TABLE (VEX_W_0F98_P_0_LEN_0) },
9520 },
9521
1ba585e8
IT
9522 /* VEX_LEN_0F98_P_2 */
9523 {
9524 { VEX_W_TABLE (VEX_W_0F98_P_2_LEN_0) },
9525 },
9526
9527 /* VEX_LEN_0F99_P_0 */
9528 {
9529 { VEX_W_TABLE (VEX_W_0F99_P_0_LEN_0) },
9530 },
9531
9532 /* VEX_LEN_0F99_P_2 */
9533 {
9534 { VEX_W_TABLE (VEX_W_0F99_P_2_LEN_0) },
9535 },
9536
6c30d220 9537 /* VEX_LEN_0FAE_R_2_M_0 */
c0f3af97 9538 {
ec6f095a 9539 { "vldmxcsr", { Md }, 0 },
c0f3af97
L
9540 },
9541
6c30d220 9542 /* VEX_LEN_0FAE_R_3_M_0 */
c0f3af97 9543 {
ec6f095a 9544 { "vstmxcsr", { Md }, 0 },
c0f3af97
L
9545 },
9546
6c30d220 9547 /* VEX_LEN_0FC4_P_2 */
c0f3af97 9548 {
b50c9f31 9549 { "vpinsrw", { XM, Vex128, Edqw, Ib }, 0 },
c0f3af97
L
9550 },
9551
6c30d220 9552 /* VEX_LEN_0FC5_P_2 */
c0f3af97 9553 {
b50c9f31 9554 { "vpextrw", { Gdq, XS, Ib }, 0 },
c0f3af97
L
9555 },
9556
6c30d220 9557 /* VEX_LEN_0FD6_P_2 */
c0f3af97 9558 {
ec6f095a 9559 { "vmovq", { EXqScalarS, XMScalar }, 0 },
c0f3af97
L
9560 },
9561
6c30d220 9562 /* VEX_LEN_0FF7_P_2 */
c0f3af97 9563 {
ec6f095a 9564 { "vmaskmovdqu", { XM, XS }, 0 },
c0f3af97
L
9565 },
9566
6c30d220 9567 /* VEX_LEN_0F3816_P_2 */
c0f3af97 9568 {
6c30d220
L
9569 { Bad_Opcode },
9570 { VEX_W_TABLE (VEX_W_0F3816_P_2) },
c0f3af97
L
9571 },
9572
6c30d220 9573 /* VEX_LEN_0F3819_P_2 */
c0f3af97 9574 {
6c30d220
L
9575 { Bad_Opcode },
9576 { VEX_W_TABLE (VEX_W_0F3819_P_2) },
c0f3af97
L
9577 },
9578
6c30d220 9579 /* VEX_LEN_0F381A_P_2_M_0 */
c0f3af97 9580 {
6c30d220
L
9581 { Bad_Opcode },
9582 { VEX_W_TABLE (VEX_W_0F381A_P_2_M_0) },
c0f3af97
L
9583 },
9584
6c30d220 9585 /* VEX_LEN_0F3836_P_2 */
c0f3af97 9586 {
6c30d220
L
9587 { Bad_Opcode },
9588 { VEX_W_TABLE (VEX_W_0F3836_P_2) },
c0f3af97
L
9589 },
9590
592a252b 9591 /* VEX_LEN_0F3841_P_2 */
c0f3af97 9592 {
ec6f095a 9593 { "vphminposuw", { XM, EXx }, 0 },
c0f3af97
L
9594 },
9595
6c30d220
L
9596 /* VEX_LEN_0F385A_P_2_M_0 */
9597 {
9598 { Bad_Opcode },
9599 { VEX_W_TABLE (VEX_W_0F385A_P_2_M_0) },
9600 },
9601
592a252b 9602 /* VEX_LEN_0F38DB_P_2 */
a5ff0eb2 9603 {
ec6f095a 9604 { "vaesimc", { XM, EXx }, 0 },
a5ff0eb2
L
9605 },
9606
f12dc422
L
9607 /* VEX_LEN_0F38F2_P_0 */
9608 {
bf890a93 9609 { "andnS", { Gdq, VexGdq, Edq }, 0 },
f12dc422
L
9610 },
9611
9612 /* VEX_LEN_0F38F3_R_1_P_0 */
9613 {
bf890a93 9614 { "blsrS", { VexGdq, Edq }, 0 },
f12dc422
L
9615 },
9616
9617 /* VEX_LEN_0F38F3_R_2_P_0 */
9618 {
bf890a93 9619 { "blsmskS", { VexGdq, Edq }, 0 },
f12dc422
L
9620 },
9621
9622 /* VEX_LEN_0F38F3_R_3_P_0 */
9623 {
bf890a93 9624 { "blsiS", { VexGdq, Edq }, 0 },
f12dc422
L
9625 },
9626
6c30d220
L
9627 /* VEX_LEN_0F38F5_P_0 */
9628 {
bf890a93 9629 { "bzhiS", { Gdq, Edq, VexGdq }, 0 },
6c30d220
L
9630 },
9631
9632 /* VEX_LEN_0F38F5_P_1 */
9633 {
bf890a93 9634 { "pextS", { Gdq, VexGdq, Edq }, 0 },
6c30d220
L
9635 },
9636
9637 /* VEX_LEN_0F38F5_P_3 */
9638 {
bf890a93 9639 { "pdepS", { Gdq, VexGdq, Edq }, 0 },
6c30d220
L
9640 },
9641
9642 /* VEX_LEN_0F38F6_P_3 */
9643 {
bf890a93 9644 { "mulxS", { Gdq, VexGdq, Edq }, 0 },
6c30d220
L
9645 },
9646
f12dc422
L
9647 /* VEX_LEN_0F38F7_P_0 */
9648 {
bf890a93 9649 { "bextrS", { Gdq, Edq, VexGdq }, 0 },
f12dc422
L
9650 },
9651
6c30d220
L
9652 /* VEX_LEN_0F38F7_P_1 */
9653 {
bf890a93 9654 { "sarxS", { Gdq, Edq, VexGdq }, 0 },
6c30d220
L
9655 },
9656
9657 /* VEX_LEN_0F38F7_P_2 */
9658 {
bf890a93 9659 { "shlxS", { Gdq, Edq, VexGdq }, 0 },
6c30d220
L
9660 },
9661
9662 /* VEX_LEN_0F38F7_P_3 */
9663 {
bf890a93 9664 { "shrxS", { Gdq, Edq, VexGdq }, 0 },
6c30d220
L
9665 },
9666
9667 /* VEX_LEN_0F3A00_P_2 */
9668 {
9669 { Bad_Opcode },
9670 { VEX_W_TABLE (VEX_W_0F3A00_P_2) },
9671 },
9672
9673 /* VEX_LEN_0F3A01_P_2 */
9674 {
9675 { Bad_Opcode },
9676 { VEX_W_TABLE (VEX_W_0F3A01_P_2) },
9677 },
9678
592a252b 9679 /* VEX_LEN_0F3A06_P_2 */
c0f3af97 9680 {
592d1631 9681 { Bad_Opcode },
592a252b 9682 { VEX_W_TABLE (VEX_W_0F3A06_P_2) },
c0f3af97
L
9683 },
9684
592a252b 9685 /* VEX_LEN_0F3A14_P_2 */
c0f3af97 9686 {
b50c9f31 9687 { "vpextrb", { Edqb, XM, Ib }, 0 },
c0f3af97
L
9688 },
9689
592a252b 9690 /* VEX_LEN_0F3A15_P_2 */
c0f3af97 9691 {
b50c9f31 9692 { "vpextrw", { Edqw, XM, Ib }, 0 },
c0f3af97
L
9693 },
9694
592a252b 9695 /* VEX_LEN_0F3A16_P_2 */
c0f3af97 9696 {
bf890a93 9697 { "vpextrK", { Edq, XM, Ib }, 0 },
c0f3af97
L
9698 },
9699
592a252b 9700 /* VEX_LEN_0F3A17_P_2 */
c0f3af97 9701 {
bf890a93 9702 { "vextractps", { Edqd, XM, Ib }, 0 },
c0f3af97
L
9703 },
9704
592a252b 9705 /* VEX_LEN_0F3A18_P_2 */
c0f3af97 9706 {
592d1631 9707 { Bad_Opcode },
592a252b 9708 { VEX_W_TABLE (VEX_W_0F3A18_P_2) },
c0f3af97
L
9709 },
9710
592a252b 9711 /* VEX_LEN_0F3A19_P_2 */
c0f3af97 9712 {
592d1631 9713 { Bad_Opcode },
592a252b 9714 { VEX_W_TABLE (VEX_W_0F3A19_P_2) },
c0f3af97
L
9715 },
9716
592a252b 9717 /* VEX_LEN_0F3A20_P_2 */
c0f3af97 9718 {
b50c9f31 9719 { "vpinsrb", { XM, Vex128, Edqb, Ib }, 0 },
c0f3af97
L
9720 },
9721
592a252b 9722 /* VEX_LEN_0F3A21_P_2 */
c0f3af97 9723 {
ec6f095a 9724 { "vinsertps", { XM, Vex128, EXd, Ib }, 0 },
c0f3af97
L
9725 },
9726
592a252b 9727 /* VEX_LEN_0F3A22_P_2 */
c0f3af97 9728 {
bf890a93 9729 { "vpinsrK", { XM, Vex128, Edq, Ib }, 0 },
c0f3af97
L
9730 },
9731
43234a1e
L
9732 /* VEX_LEN_0F3A30_P_2 */
9733 {
9734 { VEX_W_TABLE (VEX_W_0F3A30_P_2_LEN_0) },
9735 },
9736
1ba585e8
IT
9737 /* VEX_LEN_0F3A31_P_2 */
9738 {
9739 { VEX_W_TABLE (VEX_W_0F3A31_P_2_LEN_0) },
9740 },
9741
43234a1e
L
9742 /* VEX_LEN_0F3A32_P_2 */
9743 {
9744 { VEX_W_TABLE (VEX_W_0F3A32_P_2_LEN_0) },
9745 },
9746
1ba585e8
IT
9747 /* VEX_LEN_0F3A33_P_2 */
9748 {
9749 { VEX_W_TABLE (VEX_W_0F3A33_P_2_LEN_0) },
9750 },
9751
6c30d220 9752 /* VEX_LEN_0F3A38_P_2 */
c0f3af97 9753 {
6c30d220
L
9754 { Bad_Opcode },
9755 { VEX_W_TABLE (VEX_W_0F3A38_P_2) },
c0f3af97
L
9756 },
9757
6c30d220 9758 /* VEX_LEN_0F3A39_P_2 */
c0f3af97 9759 {
6c30d220
L
9760 { Bad_Opcode },
9761 { VEX_W_TABLE (VEX_W_0F3A39_P_2) },
9762 },
9763
9764 /* VEX_LEN_0F3A41_P_2 */
9765 {
ec6f095a 9766 { "vdppd", { XM, Vex128, EXx, Ib }, 0 },
c0f3af97
L
9767 },
9768
6c30d220 9769 /* VEX_LEN_0F3A46_P_2 */
c0f3af97 9770 {
6c30d220
L
9771 { Bad_Opcode },
9772 { VEX_W_TABLE (VEX_W_0F3A46_P_2) },
c0f3af97
L
9773 },
9774
592a252b 9775 /* VEX_LEN_0F3A60_P_2 */
c0f3af97 9776 {
15c7c1d8 9777 { "vpcmpestrm", { XM, { PCMPESTR_Fixup, x_mode }, Ib }, 0 },
c0f3af97
L
9778 },
9779
592a252b 9780 /* VEX_LEN_0F3A61_P_2 */
c0f3af97 9781 {
15c7c1d8 9782 { "vpcmpestri", { XM, { PCMPESTR_Fixup, x_mode }, Ib }, 0 },
c0f3af97
L
9783 },
9784
592a252b 9785 /* VEX_LEN_0F3A62_P_2 */
c0f3af97 9786 {
ec6f095a 9787 { "vpcmpistrm", { XM, EXx, Ib }, 0 },
c0f3af97
L
9788 },
9789
592a252b 9790 /* VEX_LEN_0F3A63_P_2 */
c0f3af97 9791 {
ec6f095a 9792 { "vpcmpistri", { XM, EXx, Ib }, 0 },
c0f3af97
L
9793 },
9794
592a252b 9795 /* VEX_LEN_0F3A6A_P_2 */
922d8de8 9796 {
3a2430e0 9797 { "vfmaddss", { XMVexW, Vex128, EXdVexW, EXdVexW }, 0 },
922d8de8
DR
9798 },
9799
592a252b 9800 /* VEX_LEN_0F3A6B_P_2 */
922d8de8 9801 {
3a2430e0 9802 { "vfmaddsd", { XMVexW, Vex128, EXqVexW, EXqVexW }, 0 },
922d8de8
DR
9803 },
9804
592a252b 9805 /* VEX_LEN_0F3A6E_P_2 */
922d8de8 9806 {
3a2430e0 9807 { "vfmsubss", { XMVexW, Vex128, EXdVexW, EXdVexW }, 0 },
922d8de8
DR
9808 },
9809
592a252b 9810 /* VEX_LEN_0F3A6F_P_2 */
922d8de8 9811 {
3a2430e0 9812 { "vfmsubsd", { XMVexW, Vex128, EXqVexW, EXqVexW }, 0 },
922d8de8
DR
9813 },
9814
592a252b 9815 /* VEX_LEN_0F3A7A_P_2 */
922d8de8 9816 {
3a2430e0 9817 { "vfnmaddss", { XMVexW, Vex128, EXdVexW, EXdVexW }, 0 },
922d8de8
DR
9818 },
9819
592a252b 9820 /* VEX_LEN_0F3A7B_P_2 */
922d8de8 9821 {
3a2430e0 9822 { "vfnmaddsd", { XMVexW, Vex128, EXqVexW, EXqVexW }, 0 },
922d8de8
DR
9823 },
9824
592a252b 9825 /* VEX_LEN_0F3A7E_P_2 */
922d8de8 9826 {
3a2430e0 9827 { "vfnmsubss", { XMVexW, Vex128, EXdVexW, EXdVexW }, 0 },
922d8de8
DR
9828 },
9829
592a252b 9830 /* VEX_LEN_0F3A7F_P_2 */
922d8de8 9831 {
3a2430e0 9832 { "vfnmsubsd", { XMVexW, Vex128, EXqVexW, EXqVexW }, 0 },
922d8de8
DR
9833 },
9834
592a252b 9835 /* VEX_LEN_0F3ADF_P_2 */
a5ff0eb2 9836 {
ec6f095a 9837 { "vaeskeygenassist", { XM, EXx, Ib }, 0 },
a5ff0eb2 9838 },
4c807e72 9839
6c30d220
L
9840 /* VEX_LEN_0F3AF0_P_3 */
9841 {
bf890a93 9842 { "rorxS", { Gdq, Edq, Ib }, 0 },
6c30d220
L
9843 },
9844
ff688e1f
L
9845 /* VEX_LEN_0FXOP_08_CC */
9846 {
be92cb14 9847 { "vpcomb", { XM, Vex128, EXx, VPCOM }, 0 },
ff688e1f
L
9848 },
9849
9850 /* VEX_LEN_0FXOP_08_CD */
9851 {
be92cb14 9852 { "vpcomw", { XM, Vex128, EXx, VPCOM }, 0 },
ff688e1f
L
9853 },
9854
9855 /* VEX_LEN_0FXOP_08_CE */
9856 {
be92cb14 9857 { "vpcomd", { XM, Vex128, EXx, VPCOM }, 0 },
ff688e1f
L
9858 },
9859
9860 /* VEX_LEN_0FXOP_08_CF */
9861 {
be92cb14 9862 { "vpcomq", { XM, Vex128, EXx, VPCOM }, 0 },
ff688e1f
L
9863 },
9864
9865 /* VEX_LEN_0FXOP_08_EC */
9866 {
be92cb14 9867 { "vpcomub", { XM, Vex128, EXx, VPCOM }, 0 },
ff688e1f
L
9868 },
9869
9870 /* VEX_LEN_0FXOP_08_ED */
9871 {
be92cb14 9872 { "vpcomuw", { XM, Vex128, EXx, VPCOM }, 0 },
ff688e1f
L
9873 },
9874
9875 /* VEX_LEN_0FXOP_08_EE */
9876 {
be92cb14 9877 { "vpcomud", { XM, Vex128, EXx, VPCOM }, 0 },
ff688e1f
L
9878 },
9879
9880 /* VEX_LEN_0FXOP_08_EF */
9881 {
be92cb14 9882 { "vpcomuq", { XM, Vex128, EXx, VPCOM }, 0 },
ff688e1f
L
9883 },
9884
592a252b 9885 /* VEX_LEN_0FXOP_09_80 */
5dd85c99 9886 {
bf890a93
IT
9887 { "vfrczps", { XM, EXxmm }, 0 },
9888 { "vfrczps", { XM, EXymmq }, 0 },
5dd85c99 9889 },
4c807e72 9890
592a252b 9891 /* VEX_LEN_0FXOP_09_81 */
5dd85c99 9892 {
bf890a93
IT
9893 { "vfrczpd", { XM, EXxmm }, 0 },
9894 { "vfrczpd", { XM, EXymmq }, 0 },
5dd85c99 9895 },
331d2d0d
L
9896};
9897
04e2a182
L
9898static const struct dis386 evex_len_table[][3] = {
9899#define NEED_EVEX_LEN_TABLE
9900#include "i386-dis-evex.h"
9901#undef NEED_EVEX_LEN_TABLE
9902};
9903
9e30b8e0 9904static const struct dis386 vex_w_table[][2] = {
43234a1e
L
9905 {
9906 /* VEX_W_0F41_P_0_LEN_1 */
ab4e4ed5
AF
9907 { MOD_TABLE (MOD_VEX_W_0_0F41_P_0_LEN_1) },
9908 { MOD_TABLE (MOD_VEX_W_1_0F41_P_0_LEN_1) },
1ba585e8
IT
9909 },
9910 {
9911 /* VEX_W_0F41_P_2_LEN_1 */
ab4e4ed5
AF
9912 { MOD_TABLE (MOD_VEX_W_0_0F41_P_2_LEN_1) },
9913 { MOD_TABLE (MOD_VEX_W_1_0F41_P_2_LEN_1) }
43234a1e
L
9914 },
9915 {
9916 /* VEX_W_0F42_P_0_LEN_1 */
ab4e4ed5
AF
9917 { MOD_TABLE (MOD_VEX_W_0_0F42_P_0_LEN_1) },
9918 { MOD_TABLE (MOD_VEX_W_1_0F42_P_0_LEN_1) },
1ba585e8
IT
9919 },
9920 {
9921 /* VEX_W_0F42_P_2_LEN_1 */
ab4e4ed5
AF
9922 { MOD_TABLE (MOD_VEX_W_0_0F42_P_2_LEN_1) },
9923 { MOD_TABLE (MOD_VEX_W_1_0F42_P_2_LEN_1) },
43234a1e
L
9924 },
9925 {
9926 /* VEX_W_0F44_P_0_LEN_0 */
ab4e4ed5
AF
9927 { MOD_TABLE (MOD_VEX_W_0_0F44_P_0_LEN_1) },
9928 { MOD_TABLE (MOD_VEX_W_1_0F44_P_0_LEN_1) },
1ba585e8
IT
9929 },
9930 {
9931 /* VEX_W_0F44_P_2_LEN_0 */
ab4e4ed5
AF
9932 { MOD_TABLE (MOD_VEX_W_0_0F44_P_2_LEN_1) },
9933 { MOD_TABLE (MOD_VEX_W_1_0F44_P_2_LEN_1) },
43234a1e
L
9934 },
9935 {
ec6f095a
L
9936 /* VEX_W_0F45_P_0_LEN_1 */
9937 { MOD_TABLE (MOD_VEX_W_0_0F45_P_0_LEN_1) },
9938 { MOD_TABLE (MOD_VEX_W_1_0F45_P_0_LEN_1) },
9e30b8e0
L
9939 },
9940 {
ec6f095a
L
9941 /* VEX_W_0F45_P_2_LEN_1 */
9942 { MOD_TABLE (MOD_VEX_W_0_0F45_P_2_LEN_1) },
9943 { MOD_TABLE (MOD_VEX_W_1_0F45_P_2_LEN_1) },
9e30b8e0
L
9944 },
9945 {
ec6f095a
L
9946 /* VEX_W_0F46_P_0_LEN_1 */
9947 { MOD_TABLE (MOD_VEX_W_0_0F46_P_0_LEN_1) },
9948 { MOD_TABLE (MOD_VEX_W_1_0F46_P_0_LEN_1) },
9e30b8e0
L
9949 },
9950 {
ec6f095a
L
9951 /* VEX_W_0F46_P_2_LEN_1 */
9952 { MOD_TABLE (MOD_VEX_W_0_0F46_P_2_LEN_1) },
9953 { MOD_TABLE (MOD_VEX_W_1_0F46_P_2_LEN_1) },
9e30b8e0
L
9954 },
9955 {
ec6f095a
L
9956 /* VEX_W_0F47_P_0_LEN_1 */
9957 { MOD_TABLE (MOD_VEX_W_0_0F47_P_0_LEN_1) },
9958 { MOD_TABLE (MOD_VEX_W_1_0F47_P_0_LEN_1) },
9e30b8e0
L
9959 },
9960 {
ec6f095a
L
9961 /* VEX_W_0F47_P_2_LEN_1 */
9962 { MOD_TABLE (MOD_VEX_W_0_0F47_P_2_LEN_1) },
9963 { MOD_TABLE (MOD_VEX_W_1_0F47_P_2_LEN_1) },
9e30b8e0
L
9964 },
9965 {
ec6f095a
L
9966 /* VEX_W_0F4A_P_0_LEN_1 */
9967 { MOD_TABLE (MOD_VEX_W_0_0F4A_P_0_LEN_1) },
9968 { MOD_TABLE (MOD_VEX_W_1_0F4A_P_0_LEN_1) },
9e30b8e0
L
9969 },
9970 {
ec6f095a
L
9971 /* VEX_W_0F4A_P_2_LEN_1 */
9972 { MOD_TABLE (MOD_VEX_W_0_0F4A_P_2_LEN_1) },
9973 { MOD_TABLE (MOD_VEX_W_1_0F4A_P_2_LEN_1) },
9e30b8e0
L
9974 },
9975 {
ec6f095a
L
9976 /* VEX_W_0F4B_P_0_LEN_1 */
9977 { MOD_TABLE (MOD_VEX_W_0_0F4B_P_0_LEN_1) },
9978 { MOD_TABLE (MOD_VEX_W_1_0F4B_P_0_LEN_1) },
9e30b8e0
L
9979 },
9980 {
ec6f095a
L
9981 /* VEX_W_0F4B_P_2_LEN_1 */
9982 { MOD_TABLE (MOD_VEX_W_0_0F4B_P_2_LEN_1) },
9e30b8e0
L
9983 },
9984 {
ec6f095a
L
9985 /* VEX_W_0F90_P_0_LEN_0 */
9986 { "kmovw", { MaskG, MaskE }, 0 },
9987 { "kmovq", { MaskG, MaskE }, 0 },
9e30b8e0
L
9988 },
9989 {
ec6f095a
L
9990 /* VEX_W_0F90_P_2_LEN_0 */
9991 { "kmovb", { MaskG, MaskBDE }, 0 },
9992 { "kmovd", { MaskG, MaskBDE }, 0 },
9e30b8e0
L
9993 },
9994 {
ec6f095a
L
9995 /* VEX_W_0F91_P_0_LEN_0 */
9996 { MOD_TABLE (MOD_VEX_W_0_0F91_P_0_LEN_0) },
9997 { MOD_TABLE (MOD_VEX_W_1_0F91_P_0_LEN_0) },
9e30b8e0
L
9998 },
9999 {
ec6f095a
L
10000 /* VEX_W_0F91_P_2_LEN_0 */
10001 { MOD_TABLE (MOD_VEX_W_0_0F91_P_2_LEN_0) },
10002 { MOD_TABLE (MOD_VEX_W_1_0F91_P_2_LEN_0) },
9e30b8e0
L
10003 },
10004 {
ec6f095a
L
10005 /* VEX_W_0F92_P_0_LEN_0 */
10006 { MOD_TABLE (MOD_VEX_W_0_0F92_P_0_LEN_0) },
9e30b8e0
L
10007 },
10008 {
ec6f095a
L
10009 /* VEX_W_0F92_P_2_LEN_0 */
10010 { MOD_TABLE (MOD_VEX_W_0_0F92_P_2_LEN_0) },
9e30b8e0 10011 },
9e30b8e0 10012 {
ec6f095a
L
10013 /* VEX_W_0F93_P_0_LEN_0 */
10014 { MOD_TABLE (MOD_VEX_W_0_0F93_P_0_LEN_0) },
9e30b8e0
L
10015 },
10016 {
ec6f095a
L
10017 /* VEX_W_0F93_P_2_LEN_0 */
10018 { MOD_TABLE (MOD_VEX_W_0_0F93_P_2_LEN_0) },
9e30b8e0 10019 },
9e30b8e0 10020 {
ec6f095a
L
10021 /* VEX_W_0F98_P_0_LEN_0 */
10022 { MOD_TABLE (MOD_VEX_W_0_0F98_P_0_LEN_0) },
10023 { MOD_TABLE (MOD_VEX_W_1_0F98_P_0_LEN_0) },
9e30b8e0
L
10024 },
10025 {
ec6f095a
L
10026 /* VEX_W_0F98_P_2_LEN_0 */
10027 { MOD_TABLE (MOD_VEX_W_0_0F98_P_2_LEN_0) },
10028 { MOD_TABLE (MOD_VEX_W_1_0F98_P_2_LEN_0) },
9e30b8e0
L
10029 },
10030 {
ec6f095a
L
10031 /* VEX_W_0F99_P_0_LEN_0 */
10032 { MOD_TABLE (MOD_VEX_W_0_0F99_P_0_LEN_0) },
10033 { MOD_TABLE (MOD_VEX_W_1_0F99_P_0_LEN_0) },
9e30b8e0
L
10034 },
10035 {
ec6f095a
L
10036 /* VEX_W_0F99_P_2_LEN_0 */
10037 { MOD_TABLE (MOD_VEX_W_0_0F99_P_2_LEN_0) },
10038 { MOD_TABLE (MOD_VEX_W_1_0F99_P_2_LEN_0) },
9e30b8e0 10039 },
9e30b8e0 10040 {
592a252b 10041 /* VEX_W_0F380C_P_2 */
bf890a93 10042 { "vpermilps", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10043 },
10044 {
592a252b 10045 /* VEX_W_0F380D_P_2 */
bf890a93 10046 { "vpermilpd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10047 },
10048 {
592a252b 10049 /* VEX_W_0F380E_P_2 */
bf890a93 10050 { "vtestps", { XM, EXx }, 0 },
9e30b8e0
L
10051 },
10052 {
592a252b 10053 /* VEX_W_0F380F_P_2 */
bf890a93 10054 { "vtestpd", { XM, EXx }, 0 },
9e30b8e0 10055 },
6c30d220
L
10056 {
10057 /* VEX_W_0F3816_P_2 */
bf890a93 10058 { "vpermps", { XM, Vex, EXx }, 0 },
6c30d220 10059 },
bcf2684f 10060 {
6c30d220 10061 /* VEX_W_0F3818_P_2 */
bf890a93 10062 { "vbroadcastss", { XM, EXxmm_md }, 0 },
bcf2684f 10063 },
9e30b8e0 10064 {
6c30d220 10065 /* VEX_W_0F3819_P_2 */
bf890a93 10066 { "vbroadcastsd", { XM, EXxmm_mq }, 0 },
9e30b8e0
L
10067 },
10068 {
592a252b 10069 /* VEX_W_0F381A_P_2_M_0 */
bf890a93 10070 { "vbroadcastf128", { XM, Mxmm }, 0 },
9e30b8e0 10071 },
53aa04a0 10072 {
592a252b 10073 /* VEX_W_0F382C_P_2_M_0 */
bf890a93 10074 { "vmaskmovps", { XM, Vex, Mx }, 0 },
53aa04a0
L
10075 },
10076 {
592a252b 10077 /* VEX_W_0F382D_P_2_M_0 */
bf890a93 10078 { "vmaskmovpd", { XM, Vex, Mx }, 0 },
53aa04a0
L
10079 },
10080 {
592a252b 10081 /* VEX_W_0F382E_P_2_M_0 */
bf890a93 10082 { "vmaskmovps", { Mx, Vex, XM }, 0 },
53aa04a0
L
10083 },
10084 {
592a252b 10085 /* VEX_W_0F382F_P_2_M_0 */
bf890a93 10086 { "vmaskmovpd", { Mx, Vex, XM }, 0 },
53aa04a0 10087 },
6c30d220
L
10088 {
10089 /* VEX_W_0F3836_P_2 */
bf890a93 10090 { "vpermd", { XM, Vex, EXx }, 0 },
9e30b8e0 10091 },
6c30d220
L
10092 {
10093 /* VEX_W_0F3846_P_2 */
bf890a93 10094 { "vpsravd", { XM, Vex, EXx }, 0 },
6c30d220
L
10095 },
10096 {
10097 /* VEX_W_0F3858_P_2 */
bf890a93 10098 { "vpbroadcastd", { XM, EXxmm_md }, 0 },
6c30d220
L
10099 },
10100 {
10101 /* VEX_W_0F3859_P_2 */
bf890a93 10102 { "vpbroadcastq", { XM, EXxmm_mq }, 0 },
6c30d220
L
10103 },
10104 {
10105 /* VEX_W_0F385A_P_2_M_0 */
bf890a93 10106 { "vbroadcasti128", { XM, Mxmm }, 0 },
6c30d220
L
10107 },
10108 {
10109 /* VEX_W_0F3878_P_2 */
bf890a93 10110 { "vpbroadcastb", { XM, EXxmm_mb }, 0 },
6c30d220
L
10111 },
10112 {
10113 /* VEX_W_0F3879_P_2 */
bf890a93 10114 { "vpbroadcastw", { XM, EXxmm_mw }, 0 },
6c30d220 10115 },
48521003
IT
10116 {
10117 /* VEX_W_0F38CF_P_2 */
10118 { "vgf2p8mulb", { XM, Vex, EXx }, 0 },
10119 },
6c30d220
L
10120 {
10121 /* VEX_W_0F3A00_P_2 */
10122 { Bad_Opcode },
bf890a93 10123 { "vpermq", { XM, EXx, Ib }, 0 },
6c30d220
L
10124 },
10125 {
10126 /* VEX_W_0F3A01_P_2 */
10127 { Bad_Opcode },
bf890a93 10128 { "vpermpd", { XM, EXx, Ib }, 0 },
6c30d220
L
10129 },
10130 {
10131 /* VEX_W_0F3A02_P_2 */
bf890a93 10132 { "vpblendd", { XM, Vex, EXx, Ib }, 0 },
6c30d220 10133 },
9e30b8e0 10134 {
592a252b 10135 /* VEX_W_0F3A04_P_2 */
bf890a93 10136 { "vpermilps", { XM, EXx, Ib }, 0 },
9e30b8e0
L
10137 },
10138 {
592a252b 10139 /* VEX_W_0F3A05_P_2 */
bf890a93 10140 { "vpermilpd", { XM, EXx, Ib }, 0 },
9e30b8e0
L
10141 },
10142 {
592a252b 10143 /* VEX_W_0F3A06_P_2 */
bf890a93 10144 { "vperm2f128", { XM, Vex256, EXx, Ib }, 0 },
9e30b8e0 10145 },
9e30b8e0 10146 {
592a252b 10147 /* VEX_W_0F3A18_P_2 */
bf890a93 10148 { "vinsertf128", { XM, Vex256, EXxmm, Ib }, 0 },
9e30b8e0
L
10149 },
10150 {
592a252b 10151 /* VEX_W_0F3A19_P_2 */
bf890a93 10152 { "vextractf128", { EXxmm, XM, Ib }, 0 },
9e30b8e0 10153 },
43234a1e 10154 {
1ba585e8 10155 /* VEX_W_0F3A30_P_2_LEN_0 */
ab4e4ed5
AF
10156 { MOD_TABLE (MOD_VEX_W_0_0F3A30_P_2_LEN_0) },
10157 { MOD_TABLE (MOD_VEX_W_1_0F3A30_P_2_LEN_0) },
43234a1e
L
10158 },
10159 {
1ba585e8 10160 /* VEX_W_0F3A31_P_2_LEN_0 */
ab4e4ed5
AF
10161 { MOD_TABLE (MOD_VEX_W_0_0F3A31_P_2_LEN_0) },
10162 { MOD_TABLE (MOD_VEX_W_1_0F3A31_P_2_LEN_0) },
1ba585e8
IT
10163 },
10164 {
10165 /* VEX_W_0F3A32_P_2_LEN_0 */
ab4e4ed5
AF
10166 { MOD_TABLE (MOD_VEX_W_0_0F3A32_P_2_LEN_0) },
10167 { MOD_TABLE (MOD_VEX_W_1_0F3A32_P_2_LEN_0) },
43234a1e 10168 },
1ba585e8
IT
10169 {
10170 /* VEX_W_0F3A33_P_2_LEN_0 */
ab4e4ed5
AF
10171 { MOD_TABLE (MOD_VEX_W_0_0F3A33_P_2_LEN_0) },
10172 { MOD_TABLE (MOD_VEX_W_1_0F3A33_P_2_LEN_0) },
1ba585e8 10173 },
6c30d220
L
10174 {
10175 /* VEX_W_0F3A38_P_2 */
bf890a93 10176 { "vinserti128", { XM, Vex256, EXxmm, Ib }, 0 },
6c30d220
L
10177 },
10178 {
10179 /* VEX_W_0F3A39_P_2 */
bf890a93 10180 { "vextracti128", { EXxmm, XM, Ib }, 0 },
6c30d220 10181 },
6c30d220
L
10182 {
10183 /* VEX_W_0F3A46_P_2 */
bf890a93 10184 { "vperm2i128", { XM, Vex256, EXx, Ib }, 0 },
6c30d220 10185 },
a683cc34 10186 {
592a252b 10187 /* VEX_W_0F3A48_P_2 */
bf890a93
IT
10188 { "vpermil2ps", { XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW }, 0 },
10189 { "vpermil2ps", { XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW }, 0 },
a683cc34
SP
10190 },
10191 {
592a252b 10192 /* VEX_W_0F3A49_P_2 */
bf890a93
IT
10193 { "vpermil2pd", { XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW }, 0 },
10194 { "vpermil2pd", { XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW }, 0 },
a683cc34 10195 },
9e30b8e0 10196 {
592a252b 10197 /* VEX_W_0F3A4A_P_2 */
bf890a93 10198 { "vblendvps", { XM, Vex, EXx, XMVexI4 }, 0 },
9e30b8e0
L
10199 },
10200 {
592a252b 10201 /* VEX_W_0F3A4B_P_2 */
bf890a93 10202 { "vblendvpd", { XM, Vex, EXx, XMVexI4 }, 0 },
9e30b8e0
L
10203 },
10204 {
592a252b 10205 /* VEX_W_0F3A4C_P_2 */
bf890a93 10206 { "vpblendvb", { XM, Vex, EXx, XMVexI4 }, 0 },
9e30b8e0 10207 },
48521003
IT
10208 {
10209 /* VEX_W_0F3ACE_P_2 */
10210 { Bad_Opcode },
10211 { "vgf2p8affineqb", { XM, Vex, EXx, Ib }, 0 },
10212 },
10213 {
10214 /* VEX_W_0F3ACF_P_2 */
10215 { Bad_Opcode },
10216 { "vgf2p8affineinvqb", { XM, Vex, EXx, Ib }, 0 },
10217 },
43234a1e
L
10218#define NEED_VEX_W_TABLE
10219#include "i386-dis-evex.h"
10220#undef NEED_VEX_W_TABLE
9e30b8e0
L
10221};
10222
10223static const struct dis386 mod_table[][2] = {
10224 {
10225 /* MOD_8D */
bf890a93 10226 { "leaS", { Gv, M }, 0 },
9e30b8e0 10227 },
42164a71
L
10228 {
10229 /* MOD_C6_REG_7 */
10230 { Bad_Opcode },
10231 { RM_TABLE (RM_C6_REG_7) },
10232 },
10233 {
10234 /* MOD_C7_REG_7 */
10235 { Bad_Opcode },
10236 { RM_TABLE (RM_C7_REG_7) },
10237 },
4a357820
MZ
10238 {
10239 /* MOD_FF_REG_3 */
a72d2af2 10240 { "Jcall^", { indirEp }, 0 },
4a357820
MZ
10241 },
10242 {
10243 /* MOD_FF_REG_5 */
a72d2af2 10244 { "Jjmp^", { indirEp }, 0 },
4a357820 10245 },
9e30b8e0
L
10246 {
10247 /* MOD_0F01_REG_0 */
10248 { X86_64_TABLE (X86_64_0F01_REG_0) },
10249 { RM_TABLE (RM_0F01_REG_0) },
10250 },
10251 {
10252 /* MOD_0F01_REG_1 */
10253 { X86_64_TABLE (X86_64_0F01_REG_1) },
10254 { RM_TABLE (RM_0F01_REG_1) },
10255 },
10256 {
10257 /* MOD_0F01_REG_2 */
10258 { X86_64_TABLE (X86_64_0F01_REG_2) },
10259 { RM_TABLE (RM_0F01_REG_2) },
10260 },
10261 {
10262 /* MOD_0F01_REG_3 */
10263 { X86_64_TABLE (X86_64_0F01_REG_3) },
10264 { RM_TABLE (RM_0F01_REG_3) },
10265 },
8eab4136
L
10266 {
10267 /* MOD_0F01_REG_5 */
603555e5 10268 { PREFIX_TABLE (PREFIX_MOD_0_0F01_REG_5) },
8eab4136
L
10269 { RM_TABLE (RM_0F01_REG_5) },
10270 },
9e30b8e0
L
10271 {
10272 /* MOD_0F01_REG_7 */
bf890a93 10273 { "invlpg", { Mb }, 0 },
9e30b8e0
L
10274 { RM_TABLE (RM_0F01_REG_7) },
10275 },
10276 {
10277 /* MOD_0F12_PREFIX_0 */
507bd325
L
10278 { "movlps", { XM, EXq }, PREFIX_OPCODE },
10279 { "movhlps", { XM, EXq }, PREFIX_OPCODE },
9e30b8e0
L
10280 },
10281 {
10282 /* MOD_0F13 */
507bd325 10283 { "movlpX", { EXq, XM }, PREFIX_OPCODE },
9e30b8e0
L
10284 },
10285 {
10286 /* MOD_0F16_PREFIX_0 */
bf890a93
IT
10287 { "movhps", { XM, EXq }, 0 },
10288 { "movlhps", { XM, EXq }, 0 },
9e30b8e0
L
10289 },
10290 {
10291 /* MOD_0F17 */
507bd325 10292 { "movhpX", { EXq, XM }, PREFIX_OPCODE },
9e30b8e0
L
10293 },
10294 {
10295 /* MOD_0F18_REG_0 */
bf890a93 10296 { "prefetchnta", { Mb }, 0 },
9e30b8e0
L
10297 },
10298 {
10299 /* MOD_0F18_REG_1 */
bf890a93 10300 { "prefetcht0", { Mb }, 0 },
9e30b8e0
L
10301 },
10302 {
10303 /* MOD_0F18_REG_2 */
bf890a93 10304 { "prefetcht1", { Mb }, 0 },
9e30b8e0
L
10305 },
10306 {
10307 /* MOD_0F18_REG_3 */
bf890a93 10308 { "prefetcht2", { Mb }, 0 },
9e30b8e0 10309 },
d7189fa5
RM
10310 {
10311 /* MOD_0F18_REG_4 */
bf890a93 10312 { "nop/reserved", { Mb }, 0 },
d7189fa5
RM
10313 },
10314 {
10315 /* MOD_0F18_REG_5 */
bf890a93 10316 { "nop/reserved", { Mb }, 0 },
d7189fa5
RM
10317 },
10318 {
10319 /* MOD_0F18_REG_6 */
bf890a93 10320 { "nop/reserved", { Mb }, 0 },
d7189fa5
RM
10321 },
10322 {
10323 /* MOD_0F18_REG_7 */
bf890a93 10324 { "nop/reserved", { Mb }, 0 },
d7189fa5 10325 },
7e8b059b
L
10326 {
10327 /* MOD_0F1A_PREFIX_0 */
d276ec69 10328 { "bndldx", { Gbnd, Mv_bnd }, 0 },
bf890a93 10329 { "nopQ", { Ev }, 0 },
7e8b059b
L
10330 },
10331 {
10332 /* MOD_0F1B_PREFIX_0 */
d276ec69 10333 { "bndstx", { Mv_bnd, Gbnd }, 0 },
bf890a93 10334 { "nopQ", { Ev }, 0 },
7e8b059b
L
10335 },
10336 {
10337 /* MOD_0F1B_PREFIX_1 */
d276ec69 10338 { "bndmk", { Gbnd, Mv_bnd }, 0 },
bf890a93 10339 { "nopQ", { Ev }, 0 },
7e8b059b 10340 },
c48935d7
IT
10341 {
10342 /* MOD_0F1C_PREFIX_0 */
10343 { REG_TABLE (REG_0F1C_MOD_0) },
10344 { "nopQ", { Ev }, 0 },
10345 },
603555e5
L
10346 {
10347 /* MOD_0F1E_PREFIX_1 */
10348 { "nopQ", { Ev }, 0 },
10349 { REG_TABLE (REG_0F1E_MOD_3) },
10350 },
b844680a 10351 {
92fddf8e 10352 /* MOD_0F24 */
7bb15c6f 10353 { Bad_Opcode },
bf890a93 10354 { "movL", { Rd, Td }, 0 },
b844680a
L
10355 },
10356 {
92fddf8e 10357 /* MOD_0F26 */
592d1631 10358 { Bad_Opcode },
bf890a93 10359 { "movL", { Td, Rd }, 0 },
b844680a 10360 },
75c135a8
L
10361 {
10362 /* MOD_0F2B_PREFIX_0 */
507bd325 10363 {"movntps", { Mx, XM }, PREFIX_OPCODE },
75c135a8
L
10364 },
10365 {
10366 /* MOD_0F2B_PREFIX_1 */
507bd325 10367 {"movntss", { Md, XM }, PREFIX_OPCODE },
75c135a8
L
10368 },
10369 {
10370 /* MOD_0F2B_PREFIX_2 */
507bd325 10371 {"movntpd", { Mx, XM }, PREFIX_OPCODE },
75c135a8
L
10372 },
10373 {
10374 /* MOD_0F2B_PREFIX_3 */
507bd325 10375 {"movntsd", { Mq, XM }, PREFIX_OPCODE },
75c135a8
L
10376 },
10377 {
10378 /* MOD_0F51 */
592d1631 10379 { Bad_Opcode },
507bd325 10380 { "movmskpX", { Gdq, XS }, PREFIX_OPCODE },
75c135a8 10381 },
b844680a 10382 {
1ceb70f8 10383 /* MOD_0F71_REG_2 */
592d1631 10384 { Bad_Opcode },
bf890a93 10385 { "psrlw", { MS, Ib }, 0 },
b844680a
L
10386 },
10387 {
1ceb70f8 10388 /* MOD_0F71_REG_4 */
592d1631 10389 { Bad_Opcode },
bf890a93 10390 { "psraw", { MS, Ib }, 0 },
b844680a
L
10391 },
10392 {
1ceb70f8 10393 /* MOD_0F71_REG_6 */
592d1631 10394 { Bad_Opcode },
bf890a93 10395 { "psllw", { MS, Ib }, 0 },
b844680a
L
10396 },
10397 {
1ceb70f8 10398 /* MOD_0F72_REG_2 */
592d1631 10399 { Bad_Opcode },
bf890a93 10400 { "psrld", { MS, Ib }, 0 },
b844680a
L
10401 },
10402 {
1ceb70f8 10403 /* MOD_0F72_REG_4 */
592d1631 10404 { Bad_Opcode },
bf890a93 10405 { "psrad", { MS, Ib }, 0 },
b844680a
L
10406 },
10407 {
1ceb70f8 10408 /* MOD_0F72_REG_6 */
592d1631 10409 { Bad_Opcode },
bf890a93 10410 { "pslld", { MS, Ib }, 0 },
b844680a
L
10411 },
10412 {
1ceb70f8 10413 /* MOD_0F73_REG_2 */
592d1631 10414 { Bad_Opcode },
bf890a93 10415 { "psrlq", { MS, Ib }, 0 },
b844680a
L
10416 },
10417 {
1ceb70f8 10418 /* MOD_0F73_REG_3 */
592d1631 10419 { Bad_Opcode },
c0f3af97
L
10420 { PREFIX_TABLE (PREFIX_0F73_REG_3) },
10421 },
10422 {
10423 /* MOD_0F73_REG_6 */
592d1631 10424 { Bad_Opcode },
bf890a93 10425 { "psllq", { MS, Ib }, 0 },
c0f3af97
L
10426 },
10427 {
10428 /* MOD_0F73_REG_7 */
592d1631 10429 { Bad_Opcode },
c0f3af97
L
10430 { PREFIX_TABLE (PREFIX_0F73_REG_7) },
10431 },
10432 {
10433 /* MOD_0FAE_REG_0 */
bf890a93 10434 { "fxsave", { FXSAVE }, 0 },
c7b8aa3a 10435 { PREFIX_TABLE (PREFIX_0FAE_REG_0) },
c0f3af97
L
10436 },
10437 {
10438 /* MOD_0FAE_REG_1 */
bf890a93 10439 { "fxrstor", { FXSAVE }, 0 },
c7b8aa3a 10440 { PREFIX_TABLE (PREFIX_0FAE_REG_1) },
c0f3af97
L
10441 },
10442 {
10443 /* MOD_0FAE_REG_2 */
bf890a93 10444 { "ldmxcsr", { Md }, 0 },
c7b8aa3a 10445 { PREFIX_TABLE (PREFIX_0FAE_REG_2) },
c0f3af97
L
10446 },
10447 {
10448 /* MOD_0FAE_REG_3 */
bf890a93 10449 { "stmxcsr", { Md }, 0 },
c7b8aa3a 10450 { PREFIX_TABLE (PREFIX_0FAE_REG_3) },
c0f3af97
L
10451 },
10452 {
10453 /* MOD_0FAE_REG_4 */
6b40c462
L
10454 { PREFIX_TABLE (PREFIX_MOD_0_0FAE_REG_4) },
10455 { PREFIX_TABLE (PREFIX_MOD_3_0FAE_REG_4) },
c0f3af97
L
10456 },
10457 {
10458 /* MOD_0FAE_REG_5 */
603555e5 10459 { PREFIX_TABLE (PREFIX_MOD_0_0FAE_REG_5) },
2234eee6 10460 { PREFIX_TABLE (PREFIX_MOD_3_0FAE_REG_5) },
c0f3af97
L
10461 },
10462 {
10463 /* MOD_0FAE_REG_6 */
de89d0a3
IT
10464 { PREFIX_TABLE (PREFIX_MOD_0_0FAE_REG_6) },
10465 { PREFIX_TABLE (PREFIX_MOD_1_0FAE_REG_6) },
c0f3af97
L
10466 },
10467 {
10468 /* MOD_0FAE_REG_7 */
963f3586 10469 { PREFIX_TABLE (PREFIX_0FAE_REG_7) },
c0f3af97
L
10470 { RM_TABLE (RM_0FAE_REG_7) },
10471 },
10472 {
10473 /* MOD_0FB2 */
bf890a93 10474 { "lssS", { Gv, Mp }, 0 },
c0f3af97
L
10475 },
10476 {
10477 /* MOD_0FB4 */
bf890a93 10478 { "lfsS", { Gv, Mp }, 0 },
c0f3af97
L
10479 },
10480 {
10481 /* MOD_0FB5 */
bf890a93 10482 { "lgsS", { Gv, Mp }, 0 },
c0f3af97 10483 },
a8484f96
L
10484 {
10485 /* MOD_0FC3 */
10486 { PREFIX_TABLE (PREFIX_MOD_0_0FC3) },
10487 },
963f3586
IT
10488 {
10489 /* MOD_0FC7_REG_3 */
a8484f96 10490 { "xrstors", { FXSAVE }, 0 },
963f3586
IT
10491 },
10492 {
10493 /* MOD_0FC7_REG_4 */
bf890a93 10494 { "xsavec", { FXSAVE }, 0 },
963f3586
IT
10495 },
10496 {
10497 /* MOD_0FC7_REG_5 */
bf890a93 10498 { "xsaves", { FXSAVE }, 0 },
963f3586 10499 },
c0f3af97
L
10500 {
10501 /* MOD_0FC7_REG_6 */
f24bcbaa
L
10502 { PREFIX_TABLE (PREFIX_MOD_0_0FC7_REG_6) },
10503 { PREFIX_TABLE (PREFIX_MOD_3_0FC7_REG_6) }
c0f3af97
L
10504 },
10505 {
10506 /* MOD_0FC7_REG_7 */
bf890a93 10507 { "vmptrst", { Mq }, 0 },
f24bcbaa 10508 { PREFIX_TABLE (PREFIX_MOD_3_0FC7_REG_7) }
c0f3af97
L
10509 },
10510 {
10511 /* MOD_0FD7 */
592d1631 10512 { Bad_Opcode },
bf890a93 10513 { "pmovmskb", { Gdq, MS }, 0 },
c0f3af97
L
10514 },
10515 {
10516 /* MOD_0FE7_PREFIX_2 */
bf890a93 10517 { "movntdq", { Mx, XM }, 0 },
c0f3af97
L
10518 },
10519 {
10520 /* MOD_0FF0_PREFIX_3 */
bf890a93 10521 { "lddqu", { XM, M }, 0 },
c0f3af97
L
10522 },
10523 {
10524 /* MOD_0F382A_PREFIX_2 */
bf890a93 10525 { "movntdqa", { XM, Mx }, 0 },
c0f3af97 10526 },
603555e5
L
10527 {
10528 /* MOD_0F38F5_PREFIX_2 */
10529 { "wrussK", { M, Gdq }, PREFIX_OPCODE },
10530 },
10531 {
10532 /* MOD_0F38F6_PREFIX_0 */
10533 { "wrssK", { M, Gdq }, PREFIX_OPCODE },
10534 },
5d79adc4
L
10535 {
10536 /* MOD_0F38F8_PREFIX_1 */
10537 { "enqcmds", { Gva, M }, PREFIX_OPCODE },
10538 },
c0a30a9f
L
10539 {
10540 /* MOD_0F38F8_PREFIX_2 */
10541 { "movdir64b", { Gva, M }, PREFIX_OPCODE },
10542 },
5d79adc4
L
10543 {
10544 /* MOD_0F38F8_PREFIX_3 */
10545 { "enqcmd", { Gva, M }, PREFIX_OPCODE },
10546 },
c0a30a9f
L
10547 {
10548 /* MOD_0F38F9_PREFIX_0 */
10549 { "movdiri", { Em, Gv }, PREFIX_OPCODE },
10550 },
c0f3af97
L
10551 {
10552 /* MOD_62_32BIT */
bf890a93 10553 { "bound{S|}", { Gv, Ma }, 0 },
43234a1e 10554 { EVEX_TABLE (EVEX_0F) },
c0f3af97
L
10555 },
10556 {
10557 /* MOD_C4_32BIT */
bf890a93 10558 { "lesS", { Gv, Mp }, 0 },
c0f3af97
L
10559 { VEX_C4_TABLE (VEX_0F) },
10560 },
10561 {
10562 /* MOD_C5_32BIT */
bf890a93 10563 { "ldsS", { Gv, Mp }, 0 },
c0f3af97
L
10564 { VEX_C5_TABLE (VEX_0F) },
10565 },
10566 {
592a252b
L
10567 /* MOD_VEX_0F12_PREFIX_0 */
10568 { VEX_LEN_TABLE (VEX_LEN_0F12_P_0_M_0) },
10569 { VEX_LEN_TABLE (VEX_LEN_0F12_P_0_M_1) },
c0f3af97
L
10570 },
10571 {
592a252b
L
10572 /* MOD_VEX_0F13 */
10573 { VEX_LEN_TABLE (VEX_LEN_0F13_M_0) },
c0f3af97
L
10574 },
10575 {
592a252b
L
10576 /* MOD_VEX_0F16_PREFIX_0 */
10577 { VEX_LEN_TABLE (VEX_LEN_0F16_P_0_M_0) },
10578 { VEX_LEN_TABLE (VEX_LEN_0F16_P_0_M_1) },
c0f3af97
L
10579 },
10580 {
592a252b
L
10581 /* MOD_VEX_0F17 */
10582 { VEX_LEN_TABLE (VEX_LEN_0F17_M_0) },
c0f3af97
L
10583 },
10584 {
592a252b 10585 /* MOD_VEX_0F2B */
ec6f095a 10586 { "vmovntpX", { Mx, XM }, 0 },
c0f3af97 10587 },
ab4e4ed5
AF
10588 {
10589 /* MOD_VEX_W_0_0F41_P_0_LEN_1 */
10590 { Bad_Opcode },
10591 { "kandw", { MaskG, MaskVex, MaskR }, 0 },
10592 },
10593 {
10594 /* MOD_VEX_W_1_0F41_P_0_LEN_1 */
10595 { Bad_Opcode },
10596 { "kandq", { MaskG, MaskVex, MaskR }, 0 },
10597 },
10598 {
10599 /* MOD_VEX_W_0_0F41_P_2_LEN_1 */
10600 { Bad_Opcode },
10601 { "kandb", { MaskG, MaskVex, MaskR }, 0 },
10602 },
10603 {
10604 /* MOD_VEX_W_1_0F41_P_2_LEN_1 */
10605 { Bad_Opcode },
10606 { "kandd", { MaskG, MaskVex, MaskR }, 0 },
10607 },
10608 {
10609 /* MOD_VEX_W_0_0F42_P_0_LEN_1 */
10610 { Bad_Opcode },
10611 { "kandnw", { MaskG, MaskVex, MaskR }, 0 },
10612 },
10613 {
10614 /* MOD_VEX_W_1_0F42_P_0_LEN_1 */
10615 { Bad_Opcode },
10616 { "kandnq", { MaskG, MaskVex, MaskR }, 0 },
10617 },
10618 {
10619 /* MOD_VEX_W_0_0F42_P_2_LEN_1 */
10620 { Bad_Opcode },
10621 { "kandnb", { MaskG, MaskVex, MaskR }, 0 },
10622 },
10623 {
10624 /* MOD_VEX_W_1_0F42_P_2_LEN_1 */
10625 { Bad_Opcode },
10626 { "kandnd", { MaskG, MaskVex, MaskR }, 0 },
10627 },
10628 {
10629 /* MOD_VEX_W_0_0F44_P_0_LEN_0 */
10630 { Bad_Opcode },
10631 { "knotw", { MaskG, MaskR }, 0 },
10632 },
10633 {
10634 /* MOD_VEX_W_1_0F44_P_0_LEN_0 */
10635 { Bad_Opcode },
10636 { "knotq", { MaskG, MaskR }, 0 },
10637 },
10638 {
10639 /* MOD_VEX_W_0_0F44_P_2_LEN_0 */
10640 { Bad_Opcode },
10641 { "knotb", { MaskG, MaskR }, 0 },
10642 },
10643 {
10644 /* MOD_VEX_W_1_0F44_P_2_LEN_0 */
10645 { Bad_Opcode },
10646 { "knotd", { MaskG, MaskR }, 0 },
10647 },
10648 {
10649 /* MOD_VEX_W_0_0F45_P_0_LEN_1 */
10650 { Bad_Opcode },
10651 { "korw", { MaskG, MaskVex, MaskR }, 0 },
10652 },
10653 {
10654 /* MOD_VEX_W_1_0F45_P_0_LEN_1 */
10655 { Bad_Opcode },
10656 { "korq", { MaskG, MaskVex, MaskR }, 0 },
10657 },
10658 {
10659 /* MOD_VEX_W_0_0F45_P_2_LEN_1 */
10660 { Bad_Opcode },
10661 { "korb", { MaskG, MaskVex, MaskR }, 0 },
10662 },
10663 {
10664 /* MOD_VEX_W_1_0F45_P_2_LEN_1 */
10665 { Bad_Opcode },
10666 { "kord", { MaskG, MaskVex, MaskR }, 0 },
10667 },
10668 {
10669 /* MOD_VEX_W_0_0F46_P_0_LEN_1 */
10670 { Bad_Opcode },
10671 { "kxnorw", { MaskG, MaskVex, MaskR }, 0 },
10672 },
10673 {
10674 /* MOD_VEX_W_1_0F46_P_0_LEN_1 */
10675 { Bad_Opcode },
10676 { "kxnorq", { MaskG, MaskVex, MaskR }, 0 },
10677 },
10678 {
10679 /* MOD_VEX_W_0_0F46_P_2_LEN_1 */
10680 { Bad_Opcode },
10681 { "kxnorb", { MaskG, MaskVex, MaskR }, 0 },
10682 },
10683 {
10684 /* MOD_VEX_W_1_0F46_P_2_LEN_1 */
10685 { Bad_Opcode },
10686 { "kxnord", { MaskG, MaskVex, MaskR }, 0 },
10687 },
10688 {
10689 /* MOD_VEX_W_0_0F47_P_0_LEN_1 */
10690 { Bad_Opcode },
10691 { "kxorw", { MaskG, MaskVex, MaskR }, 0 },
10692 },
10693 {
10694 /* MOD_VEX_W_1_0F47_P_0_LEN_1 */
10695 { Bad_Opcode },
10696 { "kxorq", { MaskG, MaskVex, MaskR }, 0 },
10697 },
10698 {
10699 /* MOD_VEX_W_0_0F47_P_2_LEN_1 */
10700 { Bad_Opcode },
10701 { "kxorb", { MaskG, MaskVex, MaskR }, 0 },
10702 },
10703 {
10704 /* MOD_VEX_W_1_0F47_P_2_LEN_1 */
10705 { Bad_Opcode },
10706 { "kxord", { MaskG, MaskVex, MaskR }, 0 },
10707 },
10708 {
10709 /* MOD_VEX_W_0_0F4A_P_0_LEN_1 */
10710 { Bad_Opcode },
10711 { "kaddw", { MaskG, MaskVex, MaskR }, 0 },
10712 },
10713 {
10714 /* MOD_VEX_W_1_0F4A_P_0_LEN_1 */
10715 { Bad_Opcode },
10716 { "kaddq", { MaskG, MaskVex, MaskR }, 0 },
10717 },
10718 {
10719 /* MOD_VEX_W_0_0F4A_P_2_LEN_1 */
10720 { Bad_Opcode },
10721 { "kaddb", { MaskG, MaskVex, MaskR }, 0 },
10722 },
10723 {
10724 /* MOD_VEX_W_1_0F4A_P_2_LEN_1 */
10725 { Bad_Opcode },
10726 { "kaddd", { MaskG, MaskVex, MaskR }, 0 },
10727 },
10728 {
10729 /* MOD_VEX_W_0_0F4B_P_0_LEN_1 */
10730 { Bad_Opcode },
10731 { "kunpckwd", { MaskG, MaskVex, MaskR }, 0 },
10732 },
10733 {
10734 /* MOD_VEX_W_1_0F4B_P_0_LEN_1 */
10735 { Bad_Opcode },
10736 { "kunpckdq", { MaskG, MaskVex, MaskR }, 0 },
10737 },
10738 {
10739 /* MOD_VEX_W_0_0F4B_P_2_LEN_1 */
10740 { Bad_Opcode },
10741 { "kunpckbw", { MaskG, MaskVex, MaskR }, 0 },
10742 },
c0f3af97 10743 {
592a252b 10744 /* MOD_VEX_0F50 */
592d1631 10745 { Bad_Opcode },
ec6f095a 10746 { "vmovmskpX", { Gdq, XS }, 0 },
c0f3af97
L
10747 },
10748 {
592a252b 10749 /* MOD_VEX_0F71_REG_2 */
592d1631 10750 { Bad_Opcode },
592a252b 10751 { PREFIX_TABLE (PREFIX_VEX_0F71_REG_2) },
b844680a
L
10752 },
10753 {
592a252b 10754 /* MOD_VEX_0F71_REG_4 */
592d1631 10755 { Bad_Opcode },
592a252b 10756 { PREFIX_TABLE (PREFIX_VEX_0F71_REG_4) },
b844680a
L
10757 },
10758 {
592a252b 10759 /* MOD_VEX_0F71_REG_6 */
592d1631 10760 { Bad_Opcode },
592a252b 10761 { PREFIX_TABLE (PREFIX_VEX_0F71_REG_6) },
b844680a
L
10762 },
10763 {
592a252b 10764 /* MOD_VEX_0F72_REG_2 */
592d1631 10765 { Bad_Opcode },
592a252b 10766 { PREFIX_TABLE (PREFIX_VEX_0F72_REG_2) },
b844680a 10767 },
d8faab4e 10768 {
592a252b 10769 /* MOD_VEX_0F72_REG_4 */
592d1631 10770 { Bad_Opcode },
592a252b 10771 { PREFIX_TABLE (PREFIX_VEX_0F72_REG_4) },
d8faab4e
L
10772 },
10773 {
592a252b 10774 /* MOD_VEX_0F72_REG_6 */
592d1631 10775 { Bad_Opcode },
592a252b 10776 { PREFIX_TABLE (PREFIX_VEX_0F72_REG_6) },
d8faab4e 10777 },
876d4bfa 10778 {
592a252b 10779 /* MOD_VEX_0F73_REG_2 */
592d1631 10780 { Bad_Opcode },
592a252b 10781 { PREFIX_TABLE (PREFIX_VEX_0F73_REG_2) },
876d4bfa
L
10782 },
10783 {
592a252b 10784 /* MOD_VEX_0F73_REG_3 */
592d1631 10785 { Bad_Opcode },
592a252b 10786 { PREFIX_TABLE (PREFIX_VEX_0F73_REG_3) },
475a2301
L
10787 },
10788 {
592a252b 10789 /* MOD_VEX_0F73_REG_6 */
592d1631 10790 { Bad_Opcode },
592a252b 10791 { PREFIX_TABLE (PREFIX_VEX_0F73_REG_6) },
876d4bfa
L
10792 },
10793 {
592a252b 10794 /* MOD_VEX_0F73_REG_7 */
592d1631 10795 { Bad_Opcode },
592a252b 10796 { PREFIX_TABLE (PREFIX_VEX_0F73_REG_7) },
876d4bfa 10797 },
ab4e4ed5
AF
10798 {
10799 /* MOD_VEX_W_0_0F91_P_0_LEN_0 */
10800 { "kmovw", { Ew, MaskG }, 0 },
10801 { Bad_Opcode },
10802 },
10803 {
10804 /* MOD_VEX_W_0_0F91_P_0_LEN_0 */
10805 { "kmovq", { Eq, MaskG }, 0 },
10806 { Bad_Opcode },
10807 },
10808 {
10809 /* MOD_VEX_W_0_0F91_P_2_LEN_0 */
10810 { "kmovb", { Eb, MaskG }, 0 },
10811 { Bad_Opcode },
10812 },
10813 {
10814 /* MOD_VEX_W_0_0F91_P_2_LEN_0 */
10815 { "kmovd", { Ed, MaskG }, 0 },
10816 { Bad_Opcode },
10817 },
10818 {
10819 /* MOD_VEX_W_0_0F92_P_0_LEN_0 */
10820 { Bad_Opcode },
10821 { "kmovw", { MaskG, Rdq }, 0 },
10822 },
10823 {
10824 /* MOD_VEX_W_0_0F92_P_2_LEN_0 */
10825 { Bad_Opcode },
10826 { "kmovb", { MaskG, Rdq }, 0 },
10827 },
10828 {
58a211d2 10829 /* MOD_VEX_0F92_P_3_LEN_0 */
ab4e4ed5 10830 { Bad_Opcode },
58a211d2 10831 { "kmovK", { MaskG, Rdq }, 0 },
ab4e4ed5
AF
10832 },
10833 {
10834 /* MOD_VEX_W_0_0F93_P_0_LEN_0 */
10835 { Bad_Opcode },
10836 { "kmovw", { Gdq, MaskR }, 0 },
10837 },
10838 {
10839 /* MOD_VEX_W_0_0F93_P_2_LEN_0 */
10840 { Bad_Opcode },
10841 { "kmovb", { Gdq, MaskR }, 0 },
10842 },
10843 {
58a211d2 10844 /* MOD_VEX_0F93_P_3_LEN_0 */
ab4e4ed5 10845 { Bad_Opcode },
58a211d2 10846 { "kmovK", { Gdq, MaskR }, 0 },
ab4e4ed5
AF
10847 },
10848 {
10849 /* MOD_VEX_W_0_0F98_P_0_LEN_0 */
10850 { Bad_Opcode },
10851 { "kortestw", { MaskG, MaskR }, 0 },
10852 },
10853 {
10854 /* MOD_VEX_W_1_0F98_P_0_LEN_0 */
10855 { Bad_Opcode },
10856 { "kortestq", { MaskG, MaskR }, 0 },
10857 },
10858 {
10859 /* MOD_VEX_W_0_0F98_P_2_LEN_0 */
10860 { Bad_Opcode },
10861 { "kortestb", { MaskG, MaskR }, 0 },
10862 },
10863 {
10864 /* MOD_VEX_W_1_0F98_P_2_LEN_0 */
10865 { Bad_Opcode },
10866 { "kortestd", { MaskG, MaskR }, 0 },
10867 },
10868 {
10869 /* MOD_VEX_W_0_0F99_P_0_LEN_0 */
10870 { Bad_Opcode },
10871 { "ktestw", { MaskG, MaskR }, 0 },
10872 },
10873 {
10874 /* MOD_VEX_W_1_0F99_P_0_LEN_0 */
10875 { Bad_Opcode },
10876 { "ktestq", { MaskG, MaskR }, 0 },
10877 },
10878 {
10879 /* MOD_VEX_W_0_0F99_P_2_LEN_0 */
10880 { Bad_Opcode },
10881 { "ktestb", { MaskG, MaskR }, 0 },
10882 },
10883 {
10884 /* MOD_VEX_W_1_0F99_P_2_LEN_0 */
10885 { Bad_Opcode },
10886 { "ktestd", { MaskG, MaskR }, 0 },
10887 },
876d4bfa 10888 {
592a252b
L
10889 /* MOD_VEX_0FAE_REG_2 */
10890 { VEX_LEN_TABLE (VEX_LEN_0FAE_R_2_M_0) },
876d4bfa 10891 },
bbedc832 10892 {
592a252b
L
10893 /* MOD_VEX_0FAE_REG_3 */
10894 { VEX_LEN_TABLE (VEX_LEN_0FAE_R_3_M_0) },
bbedc832 10895 },
144c41d9 10896 {
592a252b 10897 /* MOD_VEX_0FD7_PREFIX_2 */
592d1631 10898 { Bad_Opcode },
ec6f095a 10899 { "vpmovmskb", { Gdq, XS }, 0 },
144c41d9 10900 },
1afd85e3 10901 {
592a252b 10902 /* MOD_VEX_0FE7_PREFIX_2 */
ec6f095a 10903 { "vmovntdq", { Mx, XM }, 0 },
1afd85e3
L
10904 },
10905 {
592a252b 10906 /* MOD_VEX_0FF0_PREFIX_3 */
ec6f095a 10907 { "vlddqu", { XM, M }, 0 },
92fddf8e 10908 },
75c135a8 10909 {
592a252b
L
10910 /* MOD_VEX_0F381A_PREFIX_2 */
10911 { VEX_LEN_TABLE (VEX_LEN_0F381A_P_2_M_0) },
75c135a8 10912 },
1afd85e3 10913 {
592a252b 10914 /* MOD_VEX_0F382A_PREFIX_2 */
ec6f095a 10915 { "vmovntdqa", { XM, Mx }, 0 },
1afd85e3 10916 },
75c135a8 10917 {
592a252b
L
10918 /* MOD_VEX_0F382C_PREFIX_2 */
10919 { VEX_W_TABLE (VEX_W_0F382C_P_2_M_0) },
75c135a8 10920 },
1afd85e3 10921 {
592a252b
L
10922 /* MOD_VEX_0F382D_PREFIX_2 */
10923 { VEX_W_TABLE (VEX_W_0F382D_P_2_M_0) },
1afd85e3
L
10924 },
10925 {
592a252b
L
10926 /* MOD_VEX_0F382E_PREFIX_2 */
10927 { VEX_W_TABLE (VEX_W_0F382E_P_2_M_0) },
1afd85e3
L
10928 },
10929 {
592a252b
L
10930 /* MOD_VEX_0F382F_PREFIX_2 */
10931 { VEX_W_TABLE (VEX_W_0F382F_P_2_M_0) },
1afd85e3 10932 },
6c30d220
L
10933 {
10934 /* MOD_VEX_0F385A_PREFIX_2 */
10935 { VEX_LEN_TABLE (VEX_LEN_0F385A_P_2_M_0) },
10936 },
10937 {
10938 /* MOD_VEX_0F388C_PREFIX_2 */
bf890a93 10939 { "vpmaskmov%LW", { XM, Vex, Mx }, 0 },
6c30d220
L
10940 },
10941 {
10942 /* MOD_VEX_0F388E_PREFIX_2 */
bf890a93 10943 { "vpmaskmov%LW", { Mx, Vex, XM }, 0 },
6c30d220 10944 },
ab4e4ed5
AF
10945 {
10946 /* MOD_VEX_W_0_0F3A30_P_2_LEN_0 */
10947 { Bad_Opcode },
10948 { "kshiftrb", { MaskG, MaskR, Ib }, 0 },
10949 },
10950 {
10951 /* MOD_VEX_W_1_0F3A30_P_2_LEN_0 */
10952 { Bad_Opcode },
10953 { "kshiftrw", { MaskG, MaskR, Ib }, 0 },
10954 },
10955 {
10956 /* MOD_VEX_W_0_0F3A31_P_2_LEN_0 */
10957 { Bad_Opcode },
10958 { "kshiftrd", { MaskG, MaskR, Ib }, 0 },
10959 },
10960 {
10961 /* MOD_VEX_W_1_0F3A31_P_2_LEN_0 */
10962 { Bad_Opcode },
10963 { "kshiftrq", { MaskG, MaskR, Ib }, 0 },
10964 },
10965 {
10966 /* MOD_VEX_W_0_0F3A32_P_2_LEN_0 */
10967 { Bad_Opcode },
10968 { "kshiftlb", { MaskG, MaskR, Ib }, 0 },
10969 },
10970 {
10971 /* MOD_VEX_W_1_0F3A32_P_2_LEN_0 */
10972 { Bad_Opcode },
10973 { "kshiftlw", { MaskG, MaskR, Ib }, 0 },
10974 },
10975 {
10976 /* MOD_VEX_W_0_0F3A33_P_2_LEN_0 */
10977 { Bad_Opcode },
10978 { "kshiftld", { MaskG, MaskR, Ib }, 0 },
10979 },
10980 {
10981 /* MOD_VEX_W_1_0F3A33_P_2_LEN_0 */
10982 { Bad_Opcode },
10983 { "kshiftlq", { MaskG, MaskR, Ib }, 0 },
10984 },
43234a1e
L
10985#define NEED_MOD_TABLE
10986#include "i386-dis-evex.h"
10987#undef NEED_MOD_TABLE
b844680a
L
10988};
10989
1ceb70f8 10990static const struct dis386 rm_table[][8] = {
42164a71
L
10991 {
10992 /* RM_C6_REG_7 */
bf890a93 10993 { "xabort", { Skip_MODRM, Ib }, 0 },
42164a71
L
10994 },
10995 {
10996 /* RM_C7_REG_7 */
bf890a93 10997 { "xbeginT", { Skip_MODRM, Jv }, 0 },
42164a71 10998 },
b844680a 10999 {
1ceb70f8 11000 /* RM_0F01_REG_0 */
a4e78aa5 11001 { "enclv", { Skip_MODRM }, 0 },
bf890a93
IT
11002 { "vmcall", { Skip_MODRM }, 0 },
11003 { "vmlaunch", { Skip_MODRM }, 0 },
11004 { "vmresume", { Skip_MODRM }, 0 },
11005 { "vmxoff", { Skip_MODRM }, 0 },
be3a8dca 11006 { "pconfig", { Skip_MODRM }, 0 },
b844680a
L
11007 },
11008 {
1ceb70f8 11009 /* RM_0F01_REG_1 */
bf890a93
IT
11010 { "monitor", { { OP_Monitor, 0 } }, 0 },
11011 { "mwait", { { OP_Mwait, 0 } }, 0 },
11012 { "clac", { Skip_MODRM }, 0 },
11013 { "stac", { Skip_MODRM }, 0 },
2cf200a4
IT
11014 { Bad_Opcode },
11015 { Bad_Opcode },
11016 { Bad_Opcode },
bf890a93 11017 { "encls", { Skip_MODRM }, 0 },
b844680a 11018 },
475a2301
L
11019 {
11020 /* RM_0F01_REG_2 */
bf890a93
IT
11021 { "xgetbv", { Skip_MODRM }, 0 },
11022 { "xsetbv", { Skip_MODRM }, 0 },
8729a6f6
L
11023 { Bad_Opcode },
11024 { Bad_Opcode },
bf890a93
IT
11025 { "vmfunc", { Skip_MODRM }, 0 },
11026 { "xend", { Skip_MODRM }, 0 },
11027 { "xtest", { Skip_MODRM }, 0 },
11028 { "enclu", { Skip_MODRM }, 0 },
475a2301 11029 },
b844680a 11030 {
1ceb70f8 11031 /* RM_0F01_REG_3 */
bf890a93
IT
11032 { "vmrun", { Skip_MODRM }, 0 },
11033 { "vmmcall", { Skip_MODRM }, 0 },
11034 { "vmload", { Skip_MODRM }, 0 },
11035 { "vmsave", { Skip_MODRM }, 0 },
11036 { "stgi", { Skip_MODRM }, 0 },
11037 { "clgi", { Skip_MODRM }, 0 },
11038 { "skinit", { Skip_MODRM }, 0 },
11039 { "invlpga", { Skip_MODRM }, 0 },
4e7d34a6 11040 },
8eab4136
L
11041 {
11042 /* RM_0F01_REG_5 */
2234eee6 11043 { PREFIX_TABLE (PREFIX_MOD_3_0F01_REG_5_RM_0) },
8eab4136 11044 { Bad_Opcode },
603555e5 11045 { PREFIX_TABLE (PREFIX_MOD_3_0F01_REG_5_RM_2) },
8eab4136
L
11046 { Bad_Opcode },
11047 { Bad_Opcode },
11048 { Bad_Opcode },
11049 { "rdpkru", { Skip_MODRM }, 0 },
11050 { "wrpkru", { Skip_MODRM }, 0 },
11051 },
4e7d34a6 11052 {
1ceb70f8 11053 /* RM_0F01_REG_7 */
bf890a93
IT
11054 { "swapgs", { Skip_MODRM }, 0 },
11055 { "rdtscp", { Skip_MODRM }, 0 },
9916071f
AP
11056 { "monitorx", { { OP_Monitor, 0 } }, 0 },
11057 { "mwaitx", { { OP_Mwaitx, 0 } }, 0 },
bf890a93 11058 { "clzero", { Skip_MODRM }, 0 },
b844680a 11059 },
603555e5
L
11060 {
11061 /* RM_0F1E_MOD_3_REG_7 */
11062 { "nopQ", { Ev }, 0 },
11063 { "nopQ", { Ev }, 0 },
11064 { "endbr64", { Skip_MODRM }, PREFIX_OPCODE },
11065 { "endbr32", { Skip_MODRM }, PREFIX_OPCODE },
11066 { "nopQ", { Ev }, 0 },
11067 { "nopQ", { Ev }, 0 },
11068 { "nopQ", { Ev }, 0 },
11069 { "nopQ", { Ev }, 0 },
11070 },
b844680a 11071 {
1ceb70f8 11072 /* RM_0FAE_REG_6 */
bf890a93 11073 { "mfence", { Skip_MODRM }, 0 },
b844680a 11074 },
bbedc832 11075 {
1ceb70f8 11076 /* RM_0FAE_REG_7 */
b5cefcca
L
11077 { "sfence", { Skip_MODRM }, 0 },
11078
144c41d9 11079 },
b844680a
L
11080};
11081
c608c12e
AM
11082#define INTERNAL_DISASSEMBLER_ERROR _("<internal disassembler error>")
11083
f16cd0d5
L
11084/* We use the high bit to indicate different name for the same
11085 prefix. */
f16cd0d5 11086#define REP_PREFIX (0xf3 | 0x100)
42164a71
L
11087#define XACQUIRE_PREFIX (0xf2 | 0x200)
11088#define XRELEASE_PREFIX (0xf3 | 0x400)
7e8b059b 11089#define BND_PREFIX (0xf2 | 0x400)
04ef582a 11090#define NOTRACK_PREFIX (0x3e | 0x100)
f16cd0d5
L
11091
11092static int
26ca5450 11093ckprefix (void)
252b5132 11094{
f16cd0d5 11095 int newrex, i, length;
52b15da3 11096 rex = 0;
c0f3af97 11097 rex_ignored = 0;
252b5132 11098 prefixes = 0;
7d421014 11099 used_prefixes = 0;
52b15da3 11100 rex_used = 0;
f16cd0d5
L
11101 last_lock_prefix = -1;
11102 last_repz_prefix = -1;
11103 last_repnz_prefix = -1;
11104 last_data_prefix = -1;
11105 last_addr_prefix = -1;
11106 last_rex_prefix = -1;
11107 last_seg_prefix = -1;
d9949a36 11108 fwait_prefix = -1;
285ca992 11109 active_seg_prefix = 0;
f310f33d
L
11110 for (i = 0; i < (int) ARRAY_SIZE (all_prefixes); i++)
11111 all_prefixes[i] = 0;
11112 i = 0;
f16cd0d5
L
11113 length = 0;
11114 /* The maximum instruction length is 15bytes. */
11115 while (length < MAX_CODE_LENGTH - 1)
252b5132
RH
11116 {
11117 FETCH_DATA (the_info, codep + 1);
52b15da3 11118 newrex = 0;
252b5132
RH
11119 switch (*codep)
11120 {
52b15da3
JH
11121 /* REX prefixes family. */
11122 case 0x40:
11123 case 0x41:
11124 case 0x42:
11125 case 0x43:
11126 case 0x44:
11127 case 0x45:
11128 case 0x46:
11129 case 0x47:
11130 case 0x48:
11131 case 0x49:
11132 case 0x4a:
11133 case 0x4b:
11134 case 0x4c:
11135 case 0x4d:
11136 case 0x4e:
11137 case 0x4f:
f16cd0d5
L
11138 if (address_mode == mode_64bit)
11139 newrex = *codep;
11140 else
11141 return 1;
11142 last_rex_prefix = i;
52b15da3 11143 break;
252b5132
RH
11144 case 0xf3:
11145 prefixes |= PREFIX_REPZ;
f16cd0d5 11146 last_repz_prefix = i;
252b5132
RH
11147 break;
11148 case 0xf2:
11149 prefixes |= PREFIX_REPNZ;
f16cd0d5 11150 last_repnz_prefix = i;
252b5132
RH
11151 break;
11152 case 0xf0:
11153 prefixes |= PREFIX_LOCK;
f16cd0d5 11154 last_lock_prefix = i;
252b5132
RH
11155 break;
11156 case 0x2e:
11157 prefixes |= PREFIX_CS;
f16cd0d5 11158 last_seg_prefix = i;
285ca992 11159 active_seg_prefix = PREFIX_CS;
252b5132
RH
11160 break;
11161 case 0x36:
11162 prefixes |= PREFIX_SS;
f16cd0d5 11163 last_seg_prefix = i;
285ca992 11164 active_seg_prefix = PREFIX_SS;
252b5132
RH
11165 break;
11166 case 0x3e:
11167 prefixes |= PREFIX_DS;
f16cd0d5 11168 last_seg_prefix = i;
285ca992 11169 active_seg_prefix = PREFIX_DS;
252b5132
RH
11170 break;
11171 case 0x26:
11172 prefixes |= PREFIX_ES;
f16cd0d5 11173 last_seg_prefix = i;
285ca992 11174 active_seg_prefix = PREFIX_ES;
252b5132
RH
11175 break;
11176 case 0x64:
11177 prefixes |= PREFIX_FS;
f16cd0d5 11178 last_seg_prefix = i;
285ca992 11179 active_seg_prefix = PREFIX_FS;
252b5132
RH
11180 break;
11181 case 0x65:
11182 prefixes |= PREFIX_GS;
f16cd0d5 11183 last_seg_prefix = i;
285ca992 11184 active_seg_prefix = PREFIX_GS;
252b5132
RH
11185 break;
11186 case 0x66:
11187 prefixes |= PREFIX_DATA;
f16cd0d5 11188 last_data_prefix = i;
252b5132
RH
11189 break;
11190 case 0x67:
11191 prefixes |= PREFIX_ADDR;
f16cd0d5 11192 last_addr_prefix = i;
252b5132 11193 break;
5076851f 11194 case FWAIT_OPCODE:
252b5132
RH
11195 /* fwait is really an instruction. If there are prefixes
11196 before the fwait, they belong to the fwait, *not* to the
11197 following instruction. */
d9949a36 11198 fwait_prefix = i;
3e7d61b2 11199 if (prefixes || rex)
252b5132
RH
11200 {
11201 prefixes |= PREFIX_FWAIT;
11202 codep++;
6c067bbb
RM
11203 /* This ensures that the previous REX prefixes are noticed
11204 as unused prefixes, as in the return case below. */
11205 rex_used = rex;
f16cd0d5 11206 return 1;
252b5132
RH
11207 }
11208 prefixes = PREFIX_FWAIT;
11209 break;
11210 default:
f16cd0d5 11211 return 1;
252b5132 11212 }
52b15da3
JH
11213 /* Rex is ignored when followed by another prefix. */
11214 if (rex)
11215 {
3e7d61b2 11216 rex_used = rex;
f16cd0d5 11217 return 1;
52b15da3 11218 }
f16cd0d5 11219 if (*codep != FWAIT_OPCODE)
4e9ac44a 11220 all_prefixes[i++] = *codep;
52b15da3 11221 rex = newrex;
252b5132 11222 codep++;
f16cd0d5
L
11223 length++;
11224 }
11225 return 0;
11226}
11227
7d421014
ILT
11228/* Return the name of the prefix byte PREF, or NULL if PREF is not a
11229 prefix byte. */
11230
11231static const char *
26ca5450 11232prefix_name (int pref, int sizeflag)
7d421014 11233{
0003779b
L
11234 static const char *rexes [16] =
11235 {
11236 "rex", /* 0x40 */
11237 "rex.B", /* 0x41 */
11238 "rex.X", /* 0x42 */
11239 "rex.XB", /* 0x43 */
11240 "rex.R", /* 0x44 */
11241 "rex.RB", /* 0x45 */
11242 "rex.RX", /* 0x46 */
11243 "rex.RXB", /* 0x47 */
11244 "rex.W", /* 0x48 */
11245 "rex.WB", /* 0x49 */
11246 "rex.WX", /* 0x4a */
11247 "rex.WXB", /* 0x4b */
11248 "rex.WR", /* 0x4c */
11249 "rex.WRB", /* 0x4d */
11250 "rex.WRX", /* 0x4e */
11251 "rex.WRXB", /* 0x4f */
11252 };
11253
7d421014
ILT
11254 switch (pref)
11255 {
52b15da3
JH
11256 /* REX prefixes family. */
11257 case 0x40:
52b15da3 11258 case 0x41:
52b15da3 11259 case 0x42:
52b15da3 11260 case 0x43:
52b15da3 11261 case 0x44:
52b15da3 11262 case 0x45:
52b15da3 11263 case 0x46:
52b15da3 11264 case 0x47:
52b15da3 11265 case 0x48:
52b15da3 11266 case 0x49:
52b15da3 11267 case 0x4a:
52b15da3 11268 case 0x4b:
52b15da3 11269 case 0x4c:
52b15da3 11270 case 0x4d:
52b15da3 11271 case 0x4e:
52b15da3 11272 case 0x4f:
0003779b 11273 return rexes [pref - 0x40];
7d421014
ILT
11274 case 0xf3:
11275 return "repz";
11276 case 0xf2:
11277 return "repnz";
11278 case 0xf0:
11279 return "lock";
11280 case 0x2e:
11281 return "cs";
11282 case 0x36:
11283 return "ss";
11284 case 0x3e:
11285 return "ds";
11286 case 0x26:
11287 return "es";
11288 case 0x64:
11289 return "fs";
11290 case 0x65:
11291 return "gs";
11292 case 0x66:
11293 return (sizeflag & DFLAG) ? "data16" : "data32";
11294 case 0x67:
cb712a9e 11295 if (address_mode == mode_64bit)
db6eb5be 11296 return (sizeflag & AFLAG) ? "addr32" : "addr64";
c1a64871 11297 else
2888cb7a 11298 return (sizeflag & AFLAG) ? "addr16" : "addr32";
7d421014
ILT
11299 case FWAIT_OPCODE:
11300 return "fwait";
f16cd0d5
L
11301 case REP_PREFIX:
11302 return "rep";
42164a71
L
11303 case XACQUIRE_PREFIX:
11304 return "xacquire";
11305 case XRELEASE_PREFIX:
11306 return "xrelease";
7e8b059b
L
11307 case BND_PREFIX:
11308 return "bnd";
04ef582a
L
11309 case NOTRACK_PREFIX:
11310 return "notrack";
7d421014
ILT
11311 default:
11312 return NULL;
11313 }
11314}
11315
ce518a5f
L
11316static char op_out[MAX_OPERANDS][100];
11317static int op_ad, op_index[MAX_OPERANDS];
1d9f512f 11318static int two_source_ops;
ce518a5f
L
11319static bfd_vma op_address[MAX_OPERANDS];
11320static bfd_vma op_riprel[MAX_OPERANDS];
52b15da3 11321static bfd_vma start_pc;
ce518a5f 11322
252b5132
RH
11323/*
11324 * On the 386's of 1988, the maximum length of an instruction is 15 bytes.
11325 * (see topic "Redundant prefixes" in the "Differences from 8086"
11326 * section of the "Virtual 8086 Mode" chapter.)
11327 * 'pc' should be the address of this instruction, it will
11328 * be used to print the target address if this is a relative jump or call
11329 * The function returns the length of this instruction in bytes.
11330 */
11331
252b5132 11332static char intel_syntax;
9d141669 11333static char intel_mnemonic = !SYSV386_COMPAT;
252b5132
RH
11334static char open_char;
11335static char close_char;
11336static char separator_char;
11337static char scale_char;
11338
5db04b09
L
11339enum x86_64_isa
11340{
11341 amd64 = 0,
11342 intel64
11343};
11344
11345static enum x86_64_isa isa64;
11346
e396998b
AM
11347/* Here for backwards compatibility. When gdb stops using
11348 print_insn_i386_att and print_insn_i386_intel these functions can
11349 disappear, and print_insn_i386 be merged into print_insn. */
252b5132 11350int
26ca5450 11351print_insn_i386_att (bfd_vma pc, disassemble_info *info)
252b5132
RH
11352{
11353 intel_syntax = 0;
e396998b
AM
11354
11355 return print_insn (pc, info);
252b5132
RH
11356}
11357
11358int
26ca5450 11359print_insn_i386_intel (bfd_vma pc, disassemble_info *info)
252b5132
RH
11360{
11361 intel_syntax = 1;
e396998b
AM
11362
11363 return print_insn (pc, info);
252b5132
RH
11364}
11365
e396998b 11366int
26ca5450 11367print_insn_i386 (bfd_vma pc, disassemble_info *info)
e396998b
AM
11368{
11369 intel_syntax = -1;
11370
11371 return print_insn (pc, info);
11372}
11373
f59a29b9
L
11374void
11375print_i386_disassembler_options (FILE *stream)
11376{
11377 fprintf (stream, _("\n\
11378The following i386/x86-64 specific disassembler options are supported for use\n\
11379with the -M switch (multiple options should be separated by commas):\n"));
11380
11381 fprintf (stream, _(" x86-64 Disassemble in 64bit mode\n"));
11382 fprintf (stream, _(" i386 Disassemble in 32bit mode\n"));
11383 fprintf (stream, _(" i8086 Disassemble in 16bit mode\n"));
11384 fprintf (stream, _(" att Display instruction in AT&T syntax\n"));
11385 fprintf (stream, _(" intel Display instruction in Intel syntax\n"));
9d141669
L
11386 fprintf (stream, _(" att-mnemonic\n"
11387 " Display instruction in AT&T mnemonic\n"));
11388 fprintf (stream, _(" intel-mnemonic\n"
11389 " Display instruction in Intel mnemonic\n"));
f59a29b9
L
11390 fprintf (stream, _(" addr64 Assume 64bit address size\n"));
11391 fprintf (stream, _(" addr32 Assume 32bit address size\n"));
11392 fprintf (stream, _(" addr16 Assume 16bit address size\n"));
11393 fprintf (stream, _(" data32 Assume 32bit data size\n"));
11394 fprintf (stream, _(" data16 Assume 16bit data size\n"));
11395 fprintf (stream, _(" suffix Always display instruction suffix in AT&T syntax\n"));
5db04b09
L
11396 fprintf (stream, _(" amd64 Display instruction in AMD64 ISA\n"));
11397 fprintf (stream, _(" intel64 Display instruction in Intel64 ISA\n"));
f59a29b9
L
11398}
11399
592d1631 11400/* Bad opcode. */
bf890a93 11401static const struct dis386 bad_opcode = { "(bad)", { XX }, 0 };
592d1631 11402
b844680a
L
11403/* Get a pointer to struct dis386 with a valid name. */
11404
11405static const struct dis386 *
8bb15339 11406get_valid_dis386 (const struct dis386 *dp, disassemble_info *info)
b844680a 11407{
91d6fa6a 11408 int vindex, vex_table_index;
b844680a
L
11409
11410 if (dp->name != NULL)
11411 return dp;
11412
11413 switch (dp->op[0].bytemode)
11414 {
1ceb70f8
L
11415 case USE_REG_TABLE:
11416 dp = &reg_table[dp->op[1].bytemode][modrm.reg];
11417 break;
11418
11419 case USE_MOD_TABLE:
91d6fa6a
NC
11420 vindex = modrm.mod == 0x3 ? 1 : 0;
11421 dp = &mod_table[dp->op[1].bytemode][vindex];
1ceb70f8
L
11422 break;
11423
11424 case USE_RM_TABLE:
11425 dp = &rm_table[dp->op[1].bytemode][modrm.rm];
b844680a
L
11426 break;
11427
4e7d34a6 11428 case USE_PREFIX_TABLE:
c0f3af97 11429 if (need_vex)
b844680a 11430 {
c0f3af97
L
11431 /* The prefix in VEX is implicit. */
11432 switch (vex.prefix)
11433 {
11434 case 0:
91d6fa6a 11435 vindex = 0;
c0f3af97
L
11436 break;
11437 case REPE_PREFIX_OPCODE:
91d6fa6a 11438 vindex = 1;
c0f3af97
L
11439 break;
11440 case DATA_PREFIX_OPCODE:
91d6fa6a 11441 vindex = 2;
c0f3af97
L
11442 break;
11443 case REPNE_PREFIX_OPCODE:
91d6fa6a 11444 vindex = 3;
c0f3af97
L
11445 break;
11446 default:
11447 abort ();
11448 break;
11449 }
b844680a 11450 }
7bb15c6f 11451 else
b844680a 11452 {
285ca992
L
11453 int last_prefix = -1;
11454 int prefix = 0;
91d6fa6a 11455 vindex = 0;
285ca992
L
11456 /* We check PREFIX_REPNZ and PREFIX_REPZ before PREFIX_DATA.
11457 When there are multiple PREFIX_REPNZ and PREFIX_REPZ, the
11458 last one wins. */
11459 if ((prefixes & (PREFIX_REPZ | PREFIX_REPNZ)) != 0)
b844680a 11460 {
285ca992 11461 if (last_repz_prefix > last_repnz_prefix)
c0f3af97 11462 {
285ca992
L
11463 vindex = 1;
11464 prefix = PREFIX_REPZ;
11465 last_prefix = last_repz_prefix;
c0f3af97
L
11466 }
11467 else
b844680a 11468 {
285ca992
L
11469 vindex = 3;
11470 prefix = PREFIX_REPNZ;
11471 last_prefix = last_repnz_prefix;
b844680a 11472 }
285ca992 11473
507bd325
L
11474 /* Check if prefix should be ignored. */
11475 if ((((prefix_table[dp->op[1].bytemode][vindex].prefix_requirement
11476 & PREFIX_IGNORED) >> PREFIX_IGNORED_SHIFT)
11477 & prefix) != 0)
285ca992
L
11478 vindex = 0;
11479 }
11480
11481 if (vindex == 0 && (prefixes & PREFIX_DATA) != 0)
11482 {
11483 vindex = 2;
11484 prefix = PREFIX_DATA;
11485 last_prefix = last_data_prefix;
11486 }
11487
11488 if (vindex != 0)
11489 {
11490 used_prefixes |= prefix;
11491 all_prefixes[last_prefix] = 0;
b844680a
L
11492 }
11493 }
91d6fa6a 11494 dp = &prefix_table[dp->op[1].bytemode][vindex];
b844680a
L
11495 break;
11496
4e7d34a6 11497 case USE_X86_64_TABLE:
91d6fa6a
NC
11498 vindex = address_mode == mode_64bit ? 1 : 0;
11499 dp = &x86_64_table[dp->op[1].bytemode][vindex];
b844680a
L
11500 break;
11501
4e7d34a6 11502 case USE_3BYTE_TABLE:
8bb15339 11503 FETCH_DATA (info, codep + 2);
91d6fa6a
NC
11504 vindex = *codep++;
11505 dp = &three_byte_table[dp->op[1].bytemode][vindex];
285ca992 11506 end_codep = codep;
8bb15339
L
11507 modrm.mod = (*codep >> 6) & 3;
11508 modrm.reg = (*codep >> 3) & 7;
11509 modrm.rm = *codep & 7;
11510 break;
11511
c0f3af97
L
11512 case USE_VEX_LEN_TABLE:
11513 if (!need_vex)
11514 abort ();
11515
11516 switch (vex.length)
11517 {
11518 case 128:
91d6fa6a 11519 vindex = 0;
c0f3af97
L
11520 break;
11521 case 256:
91d6fa6a 11522 vindex = 1;
c0f3af97
L
11523 break;
11524 default:
11525 abort ();
11526 break;
11527 }
11528
91d6fa6a 11529 dp = &vex_len_table[dp->op[1].bytemode][vindex];
c0f3af97
L
11530 break;
11531
04e2a182
L
11532 case USE_EVEX_LEN_TABLE:
11533 if (!vex.evex)
11534 abort ();
11535
11536 switch (vex.length)
11537 {
11538 case 128:
11539 vindex = 0;
11540 break;
11541 case 256:
11542 vindex = 1;
11543 break;
11544 case 512:
11545 vindex = 2;
11546 break;
11547 default:
11548 abort ();
11549 break;
11550 }
11551
11552 dp = &evex_len_table[dp->op[1].bytemode][vindex];
11553 break;
11554
f88c9eb0
SP
11555 case USE_XOP_8F_TABLE:
11556 FETCH_DATA (info, codep + 3);
11557 /* All bits in the REX prefix are ignored. */
11558 rex_ignored = rex;
11559 rex = ~(*codep >> 5) & 0x7;
11560
11561 /* VEX_TABLE_INDEX is the mmmmm part of the XOP byte 1 "RCB.mmmmm". */
11562 switch ((*codep & 0x1f))
11563 {
11564 default:
f07af43e
L
11565 dp = &bad_opcode;
11566 return dp;
5dd85c99
SP
11567 case 0x8:
11568 vex_table_index = XOP_08;
11569 break;
f88c9eb0
SP
11570 case 0x9:
11571 vex_table_index = XOP_09;
11572 break;
11573 case 0xa:
11574 vex_table_index = XOP_0A;
11575 break;
11576 }
11577 codep++;
11578 vex.w = *codep & 0x80;
11579 if (vex.w && address_mode == mode_64bit)
11580 rex |= REX_W;
11581
11582 vex.register_specifier = (~(*codep >> 3)) & 0xf;
abfcb414 11583 if (address_mode != mode_64bit)
f07af43e 11584 {
abfcb414
AP
11585 /* In 16/32-bit mode REX_B is silently ignored. */
11586 rex &= ~REX_B;
f07af43e 11587 }
f88c9eb0
SP
11588
11589 vex.length = (*codep & 0x4) ? 256 : 128;
11590 switch ((*codep & 0x3))
11591 {
11592 case 0:
f88c9eb0
SP
11593 break;
11594 case 1:
11595 vex.prefix = DATA_PREFIX_OPCODE;
11596 break;
11597 case 2:
11598 vex.prefix = REPE_PREFIX_OPCODE;
11599 break;
11600 case 3:
11601 vex.prefix = REPNE_PREFIX_OPCODE;
11602 break;
11603 }
11604 need_vex = 1;
11605 need_vex_reg = 1;
11606 codep++;
91d6fa6a
NC
11607 vindex = *codep++;
11608 dp = &xop_table[vex_table_index][vindex];
c48244a5 11609
285ca992 11610 end_codep = codep;
c48244a5
SP
11611 FETCH_DATA (info, codep + 1);
11612 modrm.mod = (*codep >> 6) & 3;
11613 modrm.reg = (*codep >> 3) & 7;
11614 modrm.rm = *codep & 7;
f88c9eb0
SP
11615 break;
11616
c0f3af97 11617 case USE_VEX_C4_TABLE:
43234a1e 11618 /* VEX prefix. */
c0f3af97
L
11619 FETCH_DATA (info, codep + 3);
11620 /* All bits in the REX prefix are ignored. */
11621 rex_ignored = rex;
11622 rex = ~(*codep >> 5) & 0x7;
11623 switch ((*codep & 0x1f))
11624 {
11625 default:
f07af43e
L
11626 dp = &bad_opcode;
11627 return dp;
c0f3af97 11628 case 0x1:
f88c9eb0 11629 vex_table_index = VEX_0F;
c0f3af97
L
11630 break;
11631 case 0x2:
f88c9eb0 11632 vex_table_index = VEX_0F38;
c0f3af97
L
11633 break;
11634 case 0x3:
f88c9eb0 11635 vex_table_index = VEX_0F3A;
c0f3af97
L
11636 break;
11637 }
11638 codep++;
11639 vex.w = *codep & 0x80;
9889cbb1 11640 if (address_mode == mode_64bit)
f07af43e 11641 {
9889cbb1
L
11642 if (vex.w)
11643 rex |= REX_W;
9889cbb1
L
11644 }
11645 else
11646 {
11647 /* For the 3-byte VEX prefix in 32-bit mode, the REX_B bit
11648 is ignored, other REX bits are 0 and the highest bit in
5f847646 11649 VEX.vvvv is also ignored (but we mustn't clear it here). */
9889cbb1 11650 rex = 0;
f07af43e 11651 }
5f847646 11652 vex.register_specifier = (~(*codep >> 3)) & 0xf;
c0f3af97
L
11653 vex.length = (*codep & 0x4) ? 256 : 128;
11654 switch ((*codep & 0x3))
11655 {
11656 case 0:
c0f3af97
L
11657 break;
11658 case 1:
11659 vex.prefix = DATA_PREFIX_OPCODE;
11660 break;
11661 case 2:
11662 vex.prefix = REPE_PREFIX_OPCODE;
11663 break;
11664 case 3:
11665 vex.prefix = REPNE_PREFIX_OPCODE;
11666 break;
11667 }
11668 need_vex = 1;
11669 need_vex_reg = 1;
11670 codep++;
91d6fa6a
NC
11671 vindex = *codep++;
11672 dp = &vex_table[vex_table_index][vindex];
285ca992 11673 end_codep = codep;
53c4d625
JB
11674 /* There is no MODRM byte for VEX0F 77. */
11675 if (vex_table_index != VEX_0F || vindex != 0x77)
c0f3af97
L
11676 {
11677 FETCH_DATA (info, codep + 1);
11678 modrm.mod = (*codep >> 6) & 3;
11679 modrm.reg = (*codep >> 3) & 7;
11680 modrm.rm = *codep & 7;
11681 }
11682 break;
11683
11684 case USE_VEX_C5_TABLE:
43234a1e 11685 /* VEX prefix. */
c0f3af97
L
11686 FETCH_DATA (info, codep + 2);
11687 /* All bits in the REX prefix are ignored. */
11688 rex_ignored = rex;
11689 rex = (*codep & 0x80) ? 0 : REX_R;
11690
9889cbb1
L
11691 /* For the 2-byte VEX prefix in 32-bit mode, the highest bit in
11692 VEX.vvvv is 1. */
c0f3af97 11693 vex.register_specifier = (~(*codep >> 3)) & 0xf;
c0f3af97
L
11694 vex.length = (*codep & 0x4) ? 256 : 128;
11695 switch ((*codep & 0x3))
11696 {
11697 case 0:
c0f3af97
L
11698 break;
11699 case 1:
11700 vex.prefix = DATA_PREFIX_OPCODE;
11701 break;
11702 case 2:
11703 vex.prefix = REPE_PREFIX_OPCODE;
11704 break;
11705 case 3:
11706 vex.prefix = REPNE_PREFIX_OPCODE;
11707 break;
11708 }
11709 need_vex = 1;
11710 need_vex_reg = 1;
11711 codep++;
91d6fa6a
NC
11712 vindex = *codep++;
11713 dp = &vex_table[dp->op[1].bytemode][vindex];
285ca992 11714 end_codep = codep;
53c4d625
JB
11715 /* There is no MODRM byte for VEX 77. */
11716 if (vindex != 0x77)
c0f3af97
L
11717 {
11718 FETCH_DATA (info, codep + 1);
11719 modrm.mod = (*codep >> 6) & 3;
11720 modrm.reg = (*codep >> 3) & 7;
11721 modrm.rm = *codep & 7;
11722 }
11723 break;
11724
9e30b8e0
L
11725 case USE_VEX_W_TABLE:
11726 if (!need_vex)
11727 abort ();
11728
11729 dp = &vex_w_table[dp->op[1].bytemode][vex.w ? 1 : 0];
11730 break;
11731
43234a1e
L
11732 case USE_EVEX_TABLE:
11733 two_source_ops = 0;
11734 /* EVEX prefix. */
11735 vex.evex = 1;
11736 FETCH_DATA (info, codep + 4);
11737 /* All bits in the REX prefix are ignored. */
11738 rex_ignored = rex;
11739 /* The first byte after 0x62. */
11740 rex = ~(*codep >> 5) & 0x7;
11741 vex.r = *codep & 0x10;
11742 switch ((*codep & 0xf))
11743 {
11744 default:
11745 return &bad_opcode;
11746 case 0x1:
11747 vex_table_index = EVEX_0F;
11748 break;
11749 case 0x2:
11750 vex_table_index = EVEX_0F38;
11751 break;
11752 case 0x3:
11753 vex_table_index = EVEX_0F3A;
11754 break;
11755 }
11756
11757 /* The second byte after 0x62. */
11758 codep++;
11759 vex.w = *codep & 0x80;
11760 if (vex.w && address_mode == mode_64bit)
11761 rex |= REX_W;
11762
11763 vex.register_specifier = (~(*codep >> 3)) & 0xf;
43234a1e
L
11764
11765 /* The U bit. */
11766 if (!(*codep & 0x4))
11767 return &bad_opcode;
11768
11769 switch ((*codep & 0x3))
11770 {
11771 case 0:
43234a1e
L
11772 break;
11773 case 1:
11774 vex.prefix = DATA_PREFIX_OPCODE;
11775 break;
11776 case 2:
11777 vex.prefix = REPE_PREFIX_OPCODE;
11778 break;
11779 case 3:
11780 vex.prefix = REPNE_PREFIX_OPCODE;
11781 break;
11782 }
11783
11784 /* The third byte after 0x62. */
11785 codep++;
11786
11787 /* Remember the static rounding bits. */
11788 vex.ll = (*codep >> 5) & 3;
11789 vex.b = (*codep & 0x10) != 0;
11790
11791 vex.v = *codep & 0x8;
11792 vex.mask_register_specifier = *codep & 0x7;
11793 vex.zeroing = *codep & 0x80;
11794
5f847646
JB
11795 if (address_mode != mode_64bit)
11796 {
11797 /* In 16/32-bit mode silently ignore following bits. */
11798 rex &= ~REX_B;
11799 vex.r = 1;
11800 vex.v = 1;
11801 }
11802
43234a1e
L
11803 need_vex = 1;
11804 need_vex_reg = 1;
11805 codep++;
11806 vindex = *codep++;
11807 dp = &evex_table[vex_table_index][vindex];
285ca992 11808 end_codep = codep;
43234a1e
L
11809 FETCH_DATA (info, codep + 1);
11810 modrm.mod = (*codep >> 6) & 3;
11811 modrm.reg = (*codep >> 3) & 7;
11812 modrm.rm = *codep & 7;
11813
11814 /* Set vector length. */
11815 if (modrm.mod == 3 && vex.b)
11816 vex.length = 512;
11817 else
11818 {
11819 switch (vex.ll)
11820 {
11821 case 0x0:
11822 vex.length = 128;
11823 break;
11824 case 0x1:
11825 vex.length = 256;
11826 break;
11827 case 0x2:
11828 vex.length = 512;
11829 break;
11830 default:
11831 return &bad_opcode;
11832 }
11833 }
11834 break;
11835
592d1631
L
11836 case 0:
11837 dp = &bad_opcode;
11838 break;
11839
b844680a 11840 default:
d34b5006 11841 abort ();
b844680a
L
11842 }
11843
11844 if (dp->name != NULL)
11845 return dp;
11846 else
8bb15339 11847 return get_valid_dis386 (dp, info);
b844680a
L
11848}
11849
dfc8cf43 11850static void
55cf16e1 11851get_sib (disassemble_info *info, int sizeflag)
dfc8cf43
L
11852{
11853 /* If modrm.mod == 3, operand must be register. */
11854 if (need_modrm
55cf16e1 11855 && ((sizeflag & AFLAG) || address_mode == mode_64bit)
dfc8cf43
L
11856 && modrm.mod != 3
11857 && modrm.rm == 4)
11858 {
11859 FETCH_DATA (info, codep + 2);
11860 sib.index = (codep [1] >> 3) & 7;
11861 sib.scale = (codep [1] >> 6) & 3;
11862 sib.base = codep [1] & 7;
11863 }
11864}
11865
e396998b 11866static int
26ca5450 11867print_insn (bfd_vma pc, disassemble_info *info)
252b5132 11868{
2da11e11 11869 const struct dis386 *dp;
252b5132 11870 int i;
ce518a5f 11871 char *op_txt[MAX_OPERANDS];
252b5132 11872 int needcomma;
df18fdba 11873 int sizeflag, orig_sizeflag;
e396998b 11874 const char *p;
252b5132 11875 struct dis_private priv;
f16cd0d5 11876 int prefix_length;
252b5132 11877
d7921315
L
11878 priv.orig_sizeflag = AFLAG | DFLAG;
11879 if ((info->mach & bfd_mach_i386_i386) != 0)
cb712a9e 11880 address_mode = mode_32bit;
2da11e11 11881 else if (info->mach == bfd_mach_i386_i8086)
d7921315
L
11882 {
11883 address_mode = mode_16bit;
11884 priv.orig_sizeflag = 0;
11885 }
2da11e11 11886 else
d7921315
L
11887 address_mode = mode_64bit;
11888
11889 if (intel_syntax == (char) -1)
11890 intel_syntax = (info->mach & bfd_mach_i386_intel_syntax) != 0;
e396998b
AM
11891
11892 for (p = info->disassembler_options; p != NULL; )
11893 {
5db04b09
L
11894 if (CONST_STRNEQ (p, "amd64"))
11895 isa64 = amd64;
11896 else if (CONST_STRNEQ (p, "intel64"))
11897 isa64 = intel64;
11898 else if (CONST_STRNEQ (p, "x86-64"))
e396998b 11899 {
cb712a9e 11900 address_mode = mode_64bit;
e396998b
AM
11901 priv.orig_sizeflag = AFLAG | DFLAG;
11902 }
0112cd26 11903 else if (CONST_STRNEQ (p, "i386"))
e396998b 11904 {
cb712a9e 11905 address_mode = mode_32bit;
e396998b
AM
11906 priv.orig_sizeflag = AFLAG | DFLAG;
11907 }
0112cd26 11908 else if (CONST_STRNEQ (p, "i8086"))
e396998b 11909 {
cb712a9e 11910 address_mode = mode_16bit;
e396998b
AM
11911 priv.orig_sizeflag = 0;
11912 }
0112cd26 11913 else if (CONST_STRNEQ (p, "intel"))
e396998b
AM
11914 {
11915 intel_syntax = 1;
9d141669
L
11916 if (CONST_STRNEQ (p + 5, "-mnemonic"))
11917 intel_mnemonic = 1;
e396998b 11918 }
0112cd26 11919 else if (CONST_STRNEQ (p, "att"))
e396998b
AM
11920 {
11921 intel_syntax = 0;
9d141669
L
11922 if (CONST_STRNEQ (p + 3, "-mnemonic"))
11923 intel_mnemonic = 0;
e396998b 11924 }
0112cd26 11925 else if (CONST_STRNEQ (p, "addr"))
e396998b 11926 {
f59a29b9
L
11927 if (address_mode == mode_64bit)
11928 {
11929 if (p[4] == '3' && p[5] == '2')
11930 priv.orig_sizeflag &= ~AFLAG;
11931 else if (p[4] == '6' && p[5] == '4')
11932 priv.orig_sizeflag |= AFLAG;
11933 }
11934 else
11935 {
11936 if (p[4] == '1' && p[5] == '6')
11937 priv.orig_sizeflag &= ~AFLAG;
11938 else if (p[4] == '3' && p[5] == '2')
11939 priv.orig_sizeflag |= AFLAG;
11940 }
e396998b 11941 }
0112cd26 11942 else if (CONST_STRNEQ (p, "data"))
e396998b
AM
11943 {
11944 if (p[4] == '1' && p[5] == '6')
11945 priv.orig_sizeflag &= ~DFLAG;
11946 else if (p[4] == '3' && p[5] == '2')
11947 priv.orig_sizeflag |= DFLAG;
11948 }
0112cd26 11949 else if (CONST_STRNEQ (p, "suffix"))
e396998b
AM
11950 priv.orig_sizeflag |= SUFFIX_ALWAYS;
11951
11952 p = strchr (p, ',');
11953 if (p != NULL)
11954 p++;
11955 }
11956
c0f92bf9
L
11957 if (address_mode == mode_64bit && sizeof (bfd_vma) < 8)
11958 {
11959 (*info->fprintf_func) (info->stream,
11960 _("64-bit address is disabled"));
11961 return -1;
11962 }
11963
e396998b
AM
11964 if (intel_syntax)
11965 {
11966 names64 = intel_names64;
11967 names32 = intel_names32;
11968 names16 = intel_names16;
11969 names8 = intel_names8;
11970 names8rex = intel_names8rex;
11971 names_seg = intel_names_seg;
b9733481 11972 names_mm = intel_names_mm;
7e8b059b 11973 names_bnd = intel_names_bnd;
b9733481
L
11974 names_xmm = intel_names_xmm;
11975 names_ymm = intel_names_ymm;
43234a1e 11976 names_zmm = intel_names_zmm;
db51cc60
L
11977 index64 = intel_index64;
11978 index32 = intel_index32;
43234a1e 11979 names_mask = intel_names_mask;
e396998b
AM
11980 index16 = intel_index16;
11981 open_char = '[';
11982 close_char = ']';
11983 separator_char = '+';
11984 scale_char = '*';
11985 }
11986 else
11987 {
11988 names64 = att_names64;
11989 names32 = att_names32;
11990 names16 = att_names16;
11991 names8 = att_names8;
11992 names8rex = att_names8rex;
11993 names_seg = att_names_seg;
b9733481 11994 names_mm = att_names_mm;
7e8b059b 11995 names_bnd = att_names_bnd;
b9733481
L
11996 names_xmm = att_names_xmm;
11997 names_ymm = att_names_ymm;
43234a1e 11998 names_zmm = att_names_zmm;
db51cc60
L
11999 index64 = att_index64;
12000 index32 = att_index32;
43234a1e 12001 names_mask = att_names_mask;
e396998b
AM
12002 index16 = att_index16;
12003 open_char = '(';
12004 close_char = ')';
12005 separator_char = ',';
12006 scale_char = ',';
12007 }
2da11e11 12008
4fe53c98 12009 /* The output looks better if we put 7 bytes on a line, since that
8a9036a4
L
12010 puts most long word instructions on a single line. Use 8 bytes
12011 for Intel L1OM. */
d7921315 12012 if ((info->mach & bfd_mach_l1om) != 0)
8a9036a4
L
12013 info->bytes_per_line = 8;
12014 else
12015 info->bytes_per_line = 7;
252b5132 12016
26ca5450 12017 info->private_data = &priv;
252b5132
RH
12018 priv.max_fetched = priv.the_buffer;
12019 priv.insn_start = pc;
252b5132
RH
12020
12021 obuf[0] = 0;
ce518a5f
L
12022 for (i = 0; i < MAX_OPERANDS; ++i)
12023 {
12024 op_out[i][0] = 0;
12025 op_index[i] = -1;
12026 }
252b5132
RH
12027
12028 the_info = info;
12029 start_pc = pc;
e396998b
AM
12030 start_codep = priv.the_buffer;
12031 codep = priv.the_buffer;
252b5132 12032
8df14d78 12033 if (OPCODES_SIGSETJMP (priv.bailout) != 0)
5076851f 12034 {
7d421014
ILT
12035 const char *name;
12036
5076851f 12037 /* Getting here means we tried for data but didn't get it. That
e396998b
AM
12038 means we have an incomplete instruction of some sort. Just
12039 print the first byte as a prefix or a .byte pseudo-op. */
12040 if (codep > priv.the_buffer)
5076851f 12041 {
e396998b 12042 name = prefix_name (priv.the_buffer[0], priv.orig_sizeflag);
7d421014
ILT
12043 if (name != NULL)
12044 (*info->fprintf_func) (info->stream, "%s", name);
12045 else
5076851f 12046 {
7d421014
ILT
12047 /* Just print the first byte as a .byte instruction. */
12048 (*info->fprintf_func) (info->stream, ".byte 0x%x",
e396998b 12049 (unsigned int) priv.the_buffer[0]);
5076851f 12050 }
5076851f 12051
7d421014 12052 return 1;
5076851f
ILT
12053 }
12054
12055 return -1;
12056 }
12057
52b15da3 12058 obufp = obuf;
f16cd0d5
L
12059 sizeflag = priv.orig_sizeflag;
12060
12061 if (!ckprefix () || rex_used)
12062 {
12063 /* Too many prefixes or unused REX prefixes. */
12064 for (i = 0;
f6dd4781 12065 i < (int) ARRAY_SIZE (all_prefixes) && all_prefixes[i];
f16cd0d5 12066 i++)
de882298 12067 (*info->fprintf_func) (info->stream, "%s%s",
6c067bbb 12068 i == 0 ? "" : " ",
f16cd0d5 12069 prefix_name (all_prefixes[i], sizeflag));
de882298 12070 return i;
f16cd0d5 12071 }
252b5132
RH
12072
12073 insn_codep = codep;
12074
12075 FETCH_DATA (info, codep + 1);
12076 two_source_ops = (*codep == 0x62) || (*codep == 0xc8);
12077
3e7d61b2 12078 if (((prefixes & PREFIX_FWAIT)
f16cd0d5 12079 && ((*codep < 0xd8) || (*codep > 0xdf))))
252b5132 12080 {
86a80a50 12081 /* Handle prefixes before fwait. */
d9949a36 12082 for (i = 0; i < fwait_prefix && all_prefixes[i];
86a80a50
L
12083 i++)
12084 (*info->fprintf_func) (info->stream, "%s ",
12085 prefix_name (all_prefixes[i], sizeflag));
f16cd0d5 12086 (*info->fprintf_func) (info->stream, "fwait");
86a80a50 12087 return i + 1;
252b5132
RH
12088 }
12089
252b5132
RH
12090 if (*codep == 0x0f)
12091 {
eec0f4ca 12092 unsigned char threebyte;
5f40e14d
JS
12093
12094 codep++;
12095 FETCH_DATA (info, codep + 1);
12096 threebyte = *codep;
eec0f4ca 12097 dp = &dis386_twobyte[threebyte];
252b5132 12098 need_modrm = twobyte_has_modrm[*codep];
eec0f4ca 12099 codep++;
252b5132
RH
12100 }
12101 else
12102 {
6439fc28 12103 dp = &dis386[*codep];
252b5132 12104 need_modrm = onebyte_has_modrm[*codep];
eec0f4ca 12105 codep++;
252b5132 12106 }
246c51aa 12107
df18fdba
L
12108 /* Save sizeflag for printing the extra prefixes later before updating
12109 it for mnemonic and operand processing. The prefix names depend
12110 only on the address mode. */
12111 orig_sizeflag = sizeflag;
c608c12e 12112 if (prefixes & PREFIX_ADDR)
df18fdba 12113 sizeflag ^= AFLAG;
b844680a 12114 if ((prefixes & PREFIX_DATA))
df18fdba 12115 sizeflag ^= DFLAG;
3ffd33cf 12116
285ca992 12117 end_codep = codep;
8bb15339 12118 if (need_modrm)
252b5132
RH
12119 {
12120 FETCH_DATA (info, codep + 1);
7967e09e
L
12121 modrm.mod = (*codep >> 6) & 3;
12122 modrm.reg = (*codep >> 3) & 7;
12123 modrm.rm = *codep & 7;
252b5132
RH
12124 }
12125
42d5f9c6
MS
12126 need_vex = 0;
12127 need_vex_reg = 0;
12128 vex_w_done = 0;
caf0678c 12129 memset (&vex, 0, sizeof (vex));
55b126d4 12130
ce518a5f 12131 if (dp->name == NULL && dp->op[0].bytemode == FLOATCODE)
252b5132 12132 {
55cf16e1 12133 get_sib (info, sizeflag);
252b5132
RH
12134 dofloat (sizeflag);
12135 }
12136 else
12137 {
8bb15339 12138 dp = get_valid_dis386 (dp, info);
b844680a 12139 if (dp != NULL && putop (dp->name, sizeflag) == 0)
6c067bbb 12140 {
55cf16e1 12141 get_sib (info, sizeflag);
ce518a5f
L
12142 for (i = 0; i < MAX_OPERANDS; ++i)
12143 {
246c51aa 12144 obufp = op_out[i];
ce518a5f
L
12145 op_ad = MAX_OPERANDS - 1 - i;
12146 if (dp->op[i].rtn)
12147 (*dp->op[i].rtn) (dp->op[i].bytemode, sizeflag);
43234a1e
L
12148 /* For EVEX instruction after the last operand masking
12149 should be printed. */
12150 if (i == 0 && vex.evex)
12151 {
12152 /* Don't print {%k0}. */
12153 if (vex.mask_register_specifier)
12154 {
12155 oappend ("{");
12156 oappend (names_mask[vex.mask_register_specifier]);
12157 oappend ("}");
12158 }
12159 if (vex.zeroing)
12160 oappend ("{z}");
12161 }
ce518a5f 12162 }
6439fc28 12163 }
252b5132
RH
12164 }
12165
63c6fc6c
L
12166 /* If VEX.vvvv and EVEX.vvvv are unused, they must be all 1s, which
12167 are all 0s in inverted form. */
12168 if (need_vex && vex.register_specifier != 0)
12169 {
12170 (*info->fprintf_func) (info->stream, "(bad)");
12171 return end_codep - priv.the_buffer;
12172 }
12173
d869730d 12174 /* Check if the REX prefix is used. */
e2e6193d 12175 if (rex_ignored == 0 && (rex ^ rex_used) == 0 && last_rex_prefix >= 0)
f16cd0d5
L
12176 all_prefixes[last_rex_prefix] = 0;
12177
5e6718e4 12178 /* Check if the SEG prefix is used. */
f16cd0d5
L
12179 if ((prefixes & (PREFIX_CS | PREFIX_SS | PREFIX_DS | PREFIX_ES
12180 | PREFIX_FS | PREFIX_GS)) != 0
285ca992 12181 && (used_prefixes & active_seg_prefix) != 0)
f16cd0d5
L
12182 all_prefixes[last_seg_prefix] = 0;
12183
5e6718e4 12184 /* Check if the ADDR prefix is used. */
f16cd0d5
L
12185 if ((prefixes & PREFIX_ADDR) != 0
12186 && (used_prefixes & PREFIX_ADDR) != 0)
12187 all_prefixes[last_addr_prefix] = 0;
12188
df18fdba
L
12189 /* Check if the DATA prefix is used. */
12190 if ((prefixes & PREFIX_DATA) != 0
12191 && (used_prefixes & PREFIX_DATA) != 0)
12192 all_prefixes[last_data_prefix] = 0;
f16cd0d5 12193
df18fdba 12194 /* Print the extra prefixes. */
f16cd0d5 12195 prefix_length = 0;
f310f33d 12196 for (i = 0; i < (int) ARRAY_SIZE (all_prefixes); i++)
f16cd0d5
L
12197 if (all_prefixes[i])
12198 {
12199 const char *name;
df18fdba 12200 name = prefix_name (all_prefixes[i], orig_sizeflag);
f16cd0d5
L
12201 if (name == NULL)
12202 abort ();
12203 prefix_length += strlen (name) + 1;
12204 (*info->fprintf_func) (info->stream, "%s ", name);
12205 }
b844680a 12206
285ca992
L
12207 /* If the mandatory PREFIX_REPZ/PREFIX_REPNZ/PREFIX_DATA prefix is
12208 unused, opcode is invalid. Since the PREFIX_DATA prefix may be
12209 used by putop and MMX/SSE operand and may be overriden by the
12210 PREFIX_REPZ/PREFIX_REPNZ fix, we check the PREFIX_DATA prefix
12211 separately. */
3888916d 12212 if (dp->prefix_requirement == PREFIX_OPCODE
285ca992
L
12213 && dp != &bad_opcode
12214 && (((prefixes
12215 & (PREFIX_REPZ | PREFIX_REPNZ)) != 0
12216 && (used_prefixes
12217 & (PREFIX_REPZ | PREFIX_REPNZ)) == 0)
12218 || ((((prefixes
12219 & (PREFIX_REPZ | PREFIX_REPNZ | PREFIX_DATA))
12220 == PREFIX_DATA)
12221 && (used_prefixes & PREFIX_DATA) == 0))))
12222 {
12223 (*info->fprintf_func) (info->stream, "(bad)");
12224 return end_codep - priv.the_buffer;
12225 }
12226
f16cd0d5
L
12227 /* Check maximum code length. */
12228 if ((codep - start_codep) > MAX_CODE_LENGTH)
12229 {
12230 (*info->fprintf_func) (info->stream, "(bad)");
12231 return MAX_CODE_LENGTH;
12232 }
b844680a 12233
ea397f5b 12234 obufp = mnemonicendp;
f16cd0d5 12235 for (i = strlen (obuf) + prefix_length; i < 6; i++)
252b5132
RH
12236 oappend (" ");
12237 oappend (" ");
12238 (*info->fprintf_func) (info->stream, "%s", obuf);
12239
12240 /* The enter and bound instructions are printed with operands in the same
12241 order as the intel book; everything else is printed in reverse order. */
2da11e11 12242 if (intel_syntax || two_source_ops)
252b5132 12243 {
185b1163
L
12244 bfd_vma riprel;
12245
ce518a5f 12246 for (i = 0; i < MAX_OPERANDS; ++i)
6c067bbb 12247 op_txt[i] = op_out[i];
246c51aa 12248
3a8547d2
JB
12249 if (intel_syntax && dp && dp->op[2].rtn == OP_Rounding
12250 && dp->op[3].rtn == OP_E && dp->op[4].rtn == NULL)
12251 {
12252 op_txt[2] = op_out[3];
12253 op_txt[3] = op_out[2];
12254 }
12255
ce518a5f
L
12256 for (i = 0; i < (MAX_OPERANDS >> 1); ++i)
12257 {
6c067bbb
RM
12258 op_ad = op_index[i];
12259 op_index[i] = op_index[MAX_OPERANDS - 1 - i];
12260 op_index[MAX_OPERANDS - 1 - i] = op_ad;
185b1163
L
12261 riprel = op_riprel[i];
12262 op_riprel[i] = op_riprel [MAX_OPERANDS - 1 - i];
12263 op_riprel[MAX_OPERANDS - 1 - i] = riprel;
ce518a5f 12264 }
252b5132
RH
12265 }
12266 else
12267 {
ce518a5f 12268 for (i = 0; i < MAX_OPERANDS; ++i)
6c067bbb 12269 op_txt[MAX_OPERANDS - 1 - i] = op_out[i];
050dfa73
MM
12270 }
12271
ce518a5f
L
12272 needcomma = 0;
12273 for (i = 0; i < MAX_OPERANDS; ++i)
12274 if (*op_txt[i])
12275 {
12276 if (needcomma)
12277 (*info->fprintf_func) (info->stream, ",");
12278 if (op_index[i] != -1 && !op_riprel[i])
12279 (*info->print_address_func) ((bfd_vma) op_address[op_index[i]], info);
12280 else
12281 (*info->fprintf_func) (info->stream, "%s", op_txt[i]);
12282 needcomma = 1;
12283 }
050dfa73 12284
ce518a5f 12285 for (i = 0; i < MAX_OPERANDS; i++)
52b15da3
JH
12286 if (op_index[i] != -1 && op_riprel[i])
12287 {
12288 (*info->fprintf_func) (info->stream, " # ");
4fd7268a 12289 (*info->print_address_func) ((bfd_vma) (start_pc + (codep - start_codep)
52b15da3 12290 + op_address[op_index[i]]), info);
185b1163 12291 break;
52b15da3 12292 }
e396998b 12293 return codep - priv.the_buffer;
252b5132
RH
12294}
12295
6439fc28 12296static const char *float_mem[] = {
252b5132 12297 /* d8 */
7c52e0e8
L
12298 "fadd{s|}",
12299 "fmul{s|}",
12300 "fcom{s|}",
12301 "fcomp{s|}",
12302 "fsub{s|}",
12303 "fsubr{s|}",
12304 "fdiv{s|}",
12305 "fdivr{s|}",
db6eb5be 12306 /* d9 */
7c52e0e8 12307 "fld{s|}",
252b5132 12308 "(bad)",
7c52e0e8
L
12309 "fst{s|}",
12310 "fstp{s|}",
9306ca4a 12311 "fldenvIC",
252b5132 12312 "fldcw",
9306ca4a 12313 "fNstenvIC",
252b5132
RH
12314 "fNstcw",
12315 /* da */
7c52e0e8
L
12316 "fiadd{l|}",
12317 "fimul{l|}",
12318 "ficom{l|}",
12319 "ficomp{l|}",
12320 "fisub{l|}",
12321 "fisubr{l|}",
12322 "fidiv{l|}",
12323 "fidivr{l|}",
252b5132 12324 /* db */
7c52e0e8
L
12325 "fild{l|}",
12326 "fisttp{l|}",
12327 "fist{l|}",
12328 "fistp{l|}",
252b5132 12329 "(bad)",
6439fc28 12330 "fld{t||t|}",
252b5132 12331 "(bad)",
6439fc28 12332 "fstp{t||t|}",
252b5132 12333 /* dc */
7c52e0e8
L
12334 "fadd{l|}",
12335 "fmul{l|}",
12336 "fcom{l|}",
12337 "fcomp{l|}",
12338 "fsub{l|}",
12339 "fsubr{l|}",
12340 "fdiv{l|}",
12341 "fdivr{l|}",
252b5132 12342 /* dd */
7c52e0e8
L
12343 "fld{l|}",
12344 "fisttp{ll|}",
12345 "fst{l||}",
12346 "fstp{l|}",
9306ca4a 12347 "frstorIC",
252b5132 12348 "(bad)",
9306ca4a 12349 "fNsaveIC",
252b5132
RH
12350 "fNstsw",
12351 /* de */
ac465521
JB
12352 "fiadd{s|}",
12353 "fimul{s|}",
12354 "ficom{s|}",
12355 "ficomp{s|}",
12356 "fisub{s|}",
12357 "fisubr{s|}",
12358 "fidiv{s|}",
12359 "fidivr{s|}",
252b5132 12360 /* df */
ac465521
JB
12361 "fild{s|}",
12362 "fisttp{s|}",
12363 "fist{s|}",
12364 "fistp{s|}",
252b5132 12365 "fbld",
7c52e0e8 12366 "fild{ll|}",
252b5132 12367 "fbstp",
7c52e0e8 12368 "fistp{ll|}",
1d9f512f
AM
12369};
12370
12371static const unsigned char float_mem_mode[] = {
12372 /* d8 */
12373 d_mode,
12374 d_mode,
12375 d_mode,
12376 d_mode,
12377 d_mode,
12378 d_mode,
12379 d_mode,
12380 d_mode,
12381 /* d9 */
12382 d_mode,
12383 0,
12384 d_mode,
12385 d_mode,
12386 0,
12387 w_mode,
12388 0,
12389 w_mode,
12390 /* da */
12391 d_mode,
12392 d_mode,
12393 d_mode,
12394 d_mode,
12395 d_mode,
12396 d_mode,
12397 d_mode,
12398 d_mode,
12399 /* db */
12400 d_mode,
12401 d_mode,
12402 d_mode,
12403 d_mode,
12404 0,
9306ca4a 12405 t_mode,
1d9f512f 12406 0,
9306ca4a 12407 t_mode,
1d9f512f
AM
12408 /* dc */
12409 q_mode,
12410 q_mode,
12411 q_mode,
12412 q_mode,
12413 q_mode,
12414 q_mode,
12415 q_mode,
12416 q_mode,
12417 /* dd */
12418 q_mode,
12419 q_mode,
12420 q_mode,
12421 q_mode,
12422 0,
12423 0,
12424 0,
12425 w_mode,
12426 /* de */
12427 w_mode,
12428 w_mode,
12429 w_mode,
12430 w_mode,
12431 w_mode,
12432 w_mode,
12433 w_mode,
12434 w_mode,
12435 /* df */
12436 w_mode,
12437 w_mode,
12438 w_mode,
12439 w_mode,
9306ca4a 12440 t_mode,
1d9f512f 12441 q_mode,
9306ca4a 12442 t_mode,
1d9f512f 12443 q_mode
252b5132
RH
12444};
12445
ce518a5f
L
12446#define ST { OP_ST, 0 }
12447#define STi { OP_STi, 0 }
252b5132 12448
48c97fa1
L
12449#define FGRPd9_2 NULL, { { NULL, 1 } }, 0
12450#define FGRPd9_4 NULL, { { NULL, 2 } }, 0
12451#define FGRPd9_5 NULL, { { NULL, 3 } }, 0
12452#define FGRPd9_6 NULL, { { NULL, 4 } }, 0
12453#define FGRPd9_7 NULL, { { NULL, 5 } }, 0
12454#define FGRPda_5 NULL, { { NULL, 6 } }, 0
12455#define FGRPdb_4 NULL, { { NULL, 7 } }, 0
12456#define FGRPde_3 NULL, { { NULL, 8 } }, 0
12457#define FGRPdf_4 NULL, { { NULL, 9 } }, 0
252b5132 12458
2da11e11 12459static const struct dis386 float_reg[][8] = {
252b5132
RH
12460 /* d8 */
12461 {
bf890a93
IT
12462 { "fadd", { ST, STi }, 0 },
12463 { "fmul", { ST, STi }, 0 },
12464 { "fcom", { STi }, 0 },
12465 { "fcomp", { STi }, 0 },
12466 { "fsub", { ST, STi }, 0 },
12467 { "fsubr", { ST, STi }, 0 },
12468 { "fdiv", { ST, STi }, 0 },
12469 { "fdivr", { ST, STi }, 0 },
252b5132
RH
12470 },
12471 /* d9 */
12472 {
bf890a93
IT
12473 { "fld", { STi }, 0 },
12474 { "fxch", { STi }, 0 },
252b5132 12475 { FGRPd9_2 },
592d1631 12476 { Bad_Opcode },
252b5132
RH
12477 { FGRPd9_4 },
12478 { FGRPd9_5 },
12479 { FGRPd9_6 },
12480 { FGRPd9_7 },
12481 },
12482 /* da */
12483 {
bf890a93
IT
12484 { "fcmovb", { ST, STi }, 0 },
12485 { "fcmove", { ST, STi }, 0 },
12486 { "fcmovbe",{ ST, STi }, 0 },
12487 { "fcmovu", { ST, STi }, 0 },
592d1631 12488 { Bad_Opcode },
252b5132 12489 { FGRPda_5 },
592d1631
L
12490 { Bad_Opcode },
12491 { Bad_Opcode },
252b5132
RH
12492 },
12493 /* db */
12494 {
bf890a93
IT
12495 { "fcmovnb",{ ST, STi }, 0 },
12496 { "fcmovne",{ ST, STi }, 0 },
12497 { "fcmovnbe",{ ST, STi }, 0 },
12498 { "fcmovnu",{ ST, STi }, 0 },
252b5132 12499 { FGRPdb_4 },
bf890a93
IT
12500 { "fucomi", { ST, STi }, 0 },
12501 { "fcomi", { ST, STi }, 0 },
592d1631 12502 { Bad_Opcode },
252b5132
RH
12503 },
12504 /* dc */
12505 {
bf890a93
IT
12506 { "fadd", { STi, ST }, 0 },
12507 { "fmul", { STi, ST }, 0 },
592d1631
L
12508 { Bad_Opcode },
12509 { Bad_Opcode },
d53e6b98
JB
12510 { "fsub{!M|r}", { STi, ST }, 0 },
12511 { "fsub{M|}", { STi, ST }, 0 },
12512 { "fdiv{!M|r}", { STi, ST }, 0 },
12513 { "fdiv{M|}", { STi, ST }, 0 },
252b5132
RH
12514 },
12515 /* dd */
12516 {
bf890a93 12517 { "ffree", { STi }, 0 },
592d1631 12518 { Bad_Opcode },
bf890a93
IT
12519 { "fst", { STi }, 0 },
12520 { "fstp", { STi }, 0 },
12521 { "fucom", { STi }, 0 },
12522 { "fucomp", { STi }, 0 },
592d1631
L
12523 { Bad_Opcode },
12524 { Bad_Opcode },
252b5132
RH
12525 },
12526 /* de */
12527 {
bf890a93
IT
12528 { "faddp", { STi, ST }, 0 },
12529 { "fmulp", { STi, ST }, 0 },
592d1631 12530 { Bad_Opcode },
252b5132 12531 { FGRPde_3 },
d53e6b98
JB
12532 { "fsub{!M|r}p", { STi, ST }, 0 },
12533 { "fsub{M|}p", { STi, ST }, 0 },
12534 { "fdiv{!M|r}p", { STi, ST }, 0 },
12535 { "fdiv{M|}p", { STi, ST }, 0 },
252b5132
RH
12536 },
12537 /* df */
12538 {
bf890a93 12539 { "ffreep", { STi }, 0 },
592d1631
L
12540 { Bad_Opcode },
12541 { Bad_Opcode },
12542 { Bad_Opcode },
252b5132 12543 { FGRPdf_4 },
bf890a93
IT
12544 { "fucomip", { ST, STi }, 0 },
12545 { "fcomip", { ST, STi }, 0 },
592d1631 12546 { Bad_Opcode },
252b5132
RH
12547 },
12548};
12549
252b5132 12550static char *fgrps[][8] = {
48c97fa1
L
12551 /* Bad opcode 0 */
12552 {
12553 "(bad)","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
12554 },
12555
12556 /* d9_2 1 */
252b5132
RH
12557 {
12558 "fnop","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
12559 },
12560
48c97fa1 12561 /* d9_4 2 */
252b5132
RH
12562 {
12563 "fchs","fabs","(bad)","(bad)","ftst","fxam","(bad)","(bad)",
12564 },
12565
48c97fa1 12566 /* d9_5 3 */
252b5132
RH
12567 {
12568 "fld1","fldl2t","fldl2e","fldpi","fldlg2","fldln2","fldz","(bad)",
12569 },
12570
48c97fa1 12571 /* d9_6 4 */
252b5132
RH
12572 {
12573 "f2xm1","fyl2x","fptan","fpatan","fxtract","fprem1","fdecstp","fincstp",
12574 },
12575
48c97fa1 12576 /* d9_7 5 */
252b5132
RH
12577 {
12578 "fprem","fyl2xp1","fsqrt","fsincos","frndint","fscale","fsin","fcos",
12579 },
12580
48c97fa1 12581 /* da_5 6 */
252b5132
RH
12582 {
12583 "(bad)","fucompp","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
12584 },
12585
48c97fa1 12586 /* db_4 7 */
252b5132 12587 {
309d3373
JB
12588 "fNeni(8087 only)","fNdisi(8087 only)","fNclex","fNinit",
12589 "fNsetpm(287 only)","frstpm(287 only)","(bad)","(bad)",
252b5132
RH
12590 },
12591
48c97fa1 12592 /* de_3 8 */
252b5132
RH
12593 {
12594 "(bad)","fcompp","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
12595 },
12596
48c97fa1 12597 /* df_4 9 */
252b5132
RH
12598 {
12599 "fNstsw","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
12600 },
12601};
12602
b6169b20
L
12603static void
12604swap_operand (void)
12605{
12606 mnemonicendp[0] = '.';
12607 mnemonicendp[1] = 's';
12608 mnemonicendp += 2;
12609}
12610
b844680a
L
12611static void
12612OP_Skip_MODRM (int bytemode ATTRIBUTE_UNUSED,
12613 int sizeflag ATTRIBUTE_UNUSED)
12614{
12615 /* Skip mod/rm byte. */
12616 MODRM_CHECK;
12617 codep++;
12618}
12619
252b5132 12620static void
26ca5450 12621dofloat (int sizeflag)
252b5132 12622{
2da11e11 12623 const struct dis386 *dp;
252b5132
RH
12624 unsigned char floatop;
12625
12626 floatop = codep[-1];
12627
7967e09e 12628 if (modrm.mod != 3)
252b5132 12629 {
7967e09e 12630 int fp_indx = (floatop - 0xd8) * 8 + modrm.reg;
1d9f512f
AM
12631
12632 putop (float_mem[fp_indx], sizeflag);
ce518a5f 12633 obufp = op_out[0];
6e50d963 12634 op_ad = 2;
1d9f512f 12635 OP_E (float_mem_mode[fp_indx], sizeflag);
252b5132
RH
12636 return;
12637 }
6608db57 12638 /* Skip mod/rm byte. */
4bba6815 12639 MODRM_CHECK;
252b5132
RH
12640 codep++;
12641
7967e09e 12642 dp = &float_reg[floatop - 0xd8][modrm.reg];
252b5132
RH
12643 if (dp->name == NULL)
12644 {
7967e09e 12645 putop (fgrps[dp->op[0].bytemode][modrm.rm], sizeflag);
252b5132 12646
6608db57 12647 /* Instruction fnstsw is only one with strange arg. */
252b5132 12648 if (floatop == 0xdf && codep[-1] == 0xe0)
ce518a5f 12649 strcpy (op_out[0], names16[0]);
252b5132
RH
12650 }
12651 else
12652 {
12653 putop (dp->name, sizeflag);
12654
ce518a5f 12655 obufp = op_out[0];
6e50d963 12656 op_ad = 2;
ce518a5f
L
12657 if (dp->op[0].rtn)
12658 (*dp->op[0].rtn) (dp->op[0].bytemode, sizeflag);
6e50d963 12659
ce518a5f 12660 obufp = op_out[1];
6e50d963 12661 op_ad = 1;
ce518a5f
L
12662 if (dp->op[1].rtn)
12663 (*dp->op[1].rtn) (dp->op[1].bytemode, sizeflag);
252b5132
RH
12664 }
12665}
12666
9ce09ba2
RM
12667/* Like oappend (below), but S is a string starting with '%'.
12668 In Intel syntax, the '%' is elided. */
12669static void
12670oappend_maybe_intel (const char *s)
12671{
12672 oappend (s + intel_syntax);
12673}
12674
252b5132 12675static void
26ca5450 12676OP_ST (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 12677{
9ce09ba2 12678 oappend_maybe_intel ("%st");
252b5132
RH
12679}
12680
252b5132 12681static void
26ca5450 12682OP_STi (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 12683{
7967e09e 12684 sprintf (scratchbuf, "%%st(%d)", modrm.rm);
9ce09ba2 12685 oappend_maybe_intel (scratchbuf);
252b5132
RH
12686}
12687
6608db57 12688/* Capital letters in template are macros. */
6439fc28 12689static int
d3ce72d0 12690putop (const char *in_template, int sizeflag)
252b5132 12691{
2da11e11 12692 const char *p;
9306ca4a 12693 int alt = 0;
9d141669 12694 int cond = 1;
98b528ac
L
12695 unsigned int l = 0, len = 1;
12696 char last[4];
12697
12698#define SAVE_LAST(c) \
12699 if (l < len && l < sizeof (last)) \
12700 last[l++] = c; \
12701 else \
12702 abort ();
252b5132 12703
d3ce72d0 12704 for (p = in_template; *p; p++)
252b5132
RH
12705 {
12706 switch (*p)
12707 {
12708 default:
12709 *obufp++ = *p;
12710 break;
98b528ac
L
12711 case '%':
12712 len++;
12713 break;
9d141669
L
12714 case '!':
12715 cond = 0;
12716 break;
6439fc28 12717 case '{':
6439fc28 12718 if (intel_syntax)
6439fc28
AM
12719 {
12720 while (*++p != '|')
7c52e0e8
L
12721 if (*p == '}' || *p == '\0')
12722 abort ();
6439fc28 12723 }
9306ca4a
JB
12724 /* Fall through. */
12725 case 'I':
12726 alt = 1;
12727 continue;
6439fc28
AM
12728 case '|':
12729 while (*++p != '}')
12730 {
12731 if (*p == '\0')
12732 abort ();
12733 }
12734 break;
12735 case '}':
12736 break;
252b5132 12737 case 'A':
db6eb5be
AM
12738 if (intel_syntax)
12739 break;
7967e09e 12740 if (modrm.mod != 3 || (sizeflag & SUFFIX_ALWAYS))
252b5132
RH
12741 *obufp++ = 'b';
12742 break;
12743 case 'B':
4b06377f
L
12744 if (l == 0 && len == 1)
12745 {
12746case_B:
12747 if (intel_syntax)
12748 break;
12749 if (sizeflag & SUFFIX_ALWAYS)
12750 *obufp++ = 'b';
12751 }
12752 else
12753 {
12754 if (l != 1
12755 || len != 2
12756 || last[0] != 'L')
12757 {
12758 SAVE_LAST (*p);
12759 break;
12760 }
12761
12762 if (address_mode == mode_64bit
12763 && !(prefixes & PREFIX_ADDR))
12764 {
12765 *obufp++ = 'a';
12766 *obufp++ = 'b';
12767 *obufp++ = 's';
12768 }
12769
12770 goto case_B;
12771 }
252b5132 12772 break;
9306ca4a
JB
12773 case 'C':
12774 if (intel_syntax && !alt)
12775 break;
12776 if ((prefixes & PREFIX_DATA) || (sizeflag & SUFFIX_ALWAYS))
12777 {
12778 if (sizeflag & DFLAG)
12779 *obufp++ = intel_syntax ? 'd' : 'l';
12780 else
12781 *obufp++ = intel_syntax ? 'w' : 's';
12782 used_prefixes |= (prefixes & PREFIX_DATA);
12783 }
12784 break;
ed7841b3
JB
12785 case 'D':
12786 if (intel_syntax || !(sizeflag & SUFFIX_ALWAYS))
12787 break;
161a04f6 12788 USED_REX (REX_W);
7967e09e 12789 if (modrm.mod == 3)
ed7841b3 12790 {
161a04f6 12791 if (rex & REX_W)
ed7841b3 12792 *obufp++ = 'q';
ed7841b3 12793 else
f16cd0d5
L
12794 {
12795 if (sizeflag & DFLAG)
12796 *obufp++ = intel_syntax ? 'd' : 'l';
12797 else
12798 *obufp++ = 'w';
12799 used_prefixes |= (prefixes & PREFIX_DATA);
12800 }
ed7841b3
JB
12801 }
12802 else
12803 *obufp++ = 'w';
12804 break;
252b5132 12805 case 'E': /* For jcxz/jecxz */
cb712a9e 12806 if (address_mode == mode_64bit)
c1a64871
JH
12807 {
12808 if (sizeflag & AFLAG)
12809 *obufp++ = 'r';
12810 else
12811 *obufp++ = 'e';
12812 }
12813 else
12814 if (sizeflag & AFLAG)
12815 *obufp++ = 'e';
3ffd33cf
AM
12816 used_prefixes |= (prefixes & PREFIX_ADDR);
12817 break;
12818 case 'F':
db6eb5be
AM
12819 if (intel_syntax)
12820 break;
e396998b 12821 if ((prefixes & PREFIX_ADDR) || (sizeflag & SUFFIX_ALWAYS))
3ffd33cf
AM
12822 {
12823 if (sizeflag & AFLAG)
cb712a9e 12824 *obufp++ = address_mode == mode_64bit ? 'q' : 'l';
3ffd33cf 12825 else
cb712a9e 12826 *obufp++ = address_mode == mode_64bit ? 'l' : 'w';
3ffd33cf
AM
12827 used_prefixes |= (prefixes & PREFIX_ADDR);
12828 }
252b5132 12829 break;
52fd6d94
JB
12830 case 'G':
12831 if (intel_syntax || (obufp[-1] != 's' && !(sizeflag & SUFFIX_ALWAYS)))
12832 break;
161a04f6 12833 if ((rex & REX_W) || (sizeflag & DFLAG))
52fd6d94
JB
12834 *obufp++ = 'l';
12835 else
12836 *obufp++ = 'w';
161a04f6 12837 if (!(rex & REX_W))
52fd6d94
JB
12838 used_prefixes |= (prefixes & PREFIX_DATA);
12839 break;
5dd0794d 12840 case 'H':
db6eb5be
AM
12841 if (intel_syntax)
12842 break;
5dd0794d
AM
12843 if ((prefixes & (PREFIX_CS | PREFIX_DS)) == PREFIX_CS
12844 || (prefixes & (PREFIX_CS | PREFIX_DS)) == PREFIX_DS)
12845 {
12846 used_prefixes |= prefixes & (PREFIX_CS | PREFIX_DS);
12847 *obufp++ = ',';
12848 *obufp++ = 'p';
12849 if (prefixes & PREFIX_DS)
12850 *obufp++ = 't';
12851 else
12852 *obufp++ = 'n';
12853 }
12854 break;
9306ca4a
JB
12855 case 'J':
12856 if (intel_syntax)
12857 break;
12858 *obufp++ = 'l';
12859 break;
42903f7f
L
12860 case 'K':
12861 USED_REX (REX_W);
12862 if (rex & REX_W)
12863 *obufp++ = 'q';
12864 else
12865 *obufp++ = 'd';
12866 break;
6dd5059a 12867 case 'Z':
04d824a4
JB
12868 if (l != 0 || len != 1)
12869 {
12870 if (l != 1 || len != 2 || last[0] != 'X')
12871 {
12872 SAVE_LAST (*p);
12873 break;
12874 }
12875 if (!need_vex || !vex.evex)
12876 abort ();
12877 if (intel_syntax
12878 || ((modrm.mod == 3 || vex.b) && !(sizeflag & SUFFIX_ALWAYS)))
12879 break;
12880 switch (vex.length)
12881 {
12882 case 128:
12883 *obufp++ = 'x';
12884 break;
12885 case 256:
12886 *obufp++ = 'y';
12887 break;
12888 case 512:
12889 *obufp++ = 'z';
12890 break;
12891 default:
12892 abort ();
12893 }
12894 break;
12895 }
6dd5059a
L
12896 if (intel_syntax)
12897 break;
12898 if (address_mode == mode_64bit && (sizeflag & SUFFIX_ALWAYS))
12899 {
12900 *obufp++ = 'q';
12901 break;
12902 }
12903 /* Fall through. */
98b528ac 12904 goto case_L;
252b5132 12905 case 'L':
98b528ac
L
12906 if (l != 0 || len != 1)
12907 {
12908 SAVE_LAST (*p);
12909 break;
12910 }
12911case_L:
db6eb5be
AM
12912 if (intel_syntax)
12913 break;
252b5132
RH
12914 if (sizeflag & SUFFIX_ALWAYS)
12915 *obufp++ = 'l';
252b5132 12916 break;
9d141669
L
12917 case 'M':
12918 if (intel_mnemonic != cond)
12919 *obufp++ = 'r';
12920 break;
252b5132
RH
12921 case 'N':
12922 if ((prefixes & PREFIX_FWAIT) == 0)
12923 *obufp++ = 'n';
7d421014
ILT
12924 else
12925 used_prefixes |= PREFIX_FWAIT;
252b5132 12926 break;
52b15da3 12927 case 'O':
161a04f6
L
12928 USED_REX (REX_W);
12929 if (rex & REX_W)
6439fc28 12930 *obufp++ = 'o';
a35ca55a
JB
12931 else if (intel_syntax && (sizeflag & DFLAG))
12932 *obufp++ = 'q';
52b15da3
JH
12933 else
12934 *obufp++ = 'd';
161a04f6 12935 if (!(rex & REX_W))
a35ca55a 12936 used_prefixes |= (prefixes & PREFIX_DATA);
52b15da3 12937 break;
07f5af7d
L
12938 case '&':
12939 if (!intel_syntax
12940 && address_mode == mode_64bit
12941 && isa64 == intel64)
12942 {
12943 *obufp++ = 'q';
12944 break;
12945 }
12946 /* Fall through. */
6439fc28 12947 case 'T':
d9e3625e
L
12948 if (!intel_syntax
12949 && address_mode == mode_64bit
7bb15c6f 12950 && ((sizeflag & DFLAG) || (rex & REX_W)))
6439fc28
AM
12951 {
12952 *obufp++ = 'q';
12953 break;
12954 }
6608db57 12955 /* Fall through. */
4b4c407a 12956 goto case_P;
252b5132 12957 case 'P':
4b4c407a 12958 if (l == 0 && len == 1)
d9e3625e 12959 {
4b4c407a
L
12960case_P:
12961 if (intel_syntax)
d9e3625e 12962 {
4b4c407a
L
12963 if ((rex & REX_W) == 0
12964 && (prefixes & PREFIX_DATA))
12965 {
12966 if ((sizeflag & DFLAG) == 0)
12967 *obufp++ = 'w';
12968 used_prefixes |= (prefixes & PREFIX_DATA);
12969 }
12970 break;
12971 }
12972 if ((prefixes & PREFIX_DATA)
12973 || (rex & REX_W)
12974 || (sizeflag & SUFFIX_ALWAYS))
12975 {
12976 USED_REX (REX_W);
12977 if (rex & REX_W)
12978 *obufp++ = 'q';
12979 else
12980 {
12981 if (sizeflag & DFLAG)
12982 *obufp++ = 'l';
12983 else
12984 *obufp++ = 'w';
12985 used_prefixes |= (prefixes & PREFIX_DATA);
12986 }
d9e3625e 12987 }
d9e3625e 12988 }
4b4c407a 12989 else
252b5132 12990 {
4b4c407a
L
12991 if (l != 1 || len != 2 || last[0] != 'L')
12992 {
12993 SAVE_LAST (*p);
12994 break;
12995 }
12996
12997 if ((prefixes & PREFIX_DATA)
12998 || (rex & REX_W)
12999 || (sizeflag & SUFFIX_ALWAYS))
52b15da3 13000 {
4b4c407a
L
13001 USED_REX (REX_W);
13002 if (rex & REX_W)
13003 *obufp++ = 'q';
13004 else
13005 {
13006 if (sizeflag & DFLAG)
13007 *obufp++ = intel_syntax ? 'd' : 'l';
13008 else
13009 *obufp++ = 'w';
13010 used_prefixes |= (prefixes & PREFIX_DATA);
13011 }
52b15da3 13012 }
252b5132
RH
13013 }
13014 break;
6439fc28 13015 case 'U':
db6eb5be
AM
13016 if (intel_syntax)
13017 break;
7bb15c6f 13018 if (address_mode == mode_64bit
6c067bbb 13019 && ((sizeflag & DFLAG) || (rex & REX_W)))
6439fc28 13020 {
7967e09e 13021 if (modrm.mod != 3 || (sizeflag & SUFFIX_ALWAYS))
1a114b12 13022 *obufp++ = 'q';
6439fc28
AM
13023 break;
13024 }
6608db57 13025 /* Fall through. */
98b528ac 13026 goto case_Q;
252b5132 13027 case 'Q':
98b528ac 13028 if (l == 0 && len == 1)
252b5132 13029 {
98b528ac
L
13030case_Q:
13031 if (intel_syntax && !alt)
13032 break;
13033 USED_REX (REX_W);
13034 if (modrm.mod != 3 || (sizeflag & SUFFIX_ALWAYS))
52b15da3 13035 {
98b528ac
L
13036 if (rex & REX_W)
13037 *obufp++ = 'q';
52b15da3 13038 else
98b528ac
L
13039 {
13040 if (sizeflag & DFLAG)
13041 *obufp++ = intel_syntax ? 'd' : 'l';
13042 else
13043 *obufp++ = 'w';
f16cd0d5 13044 used_prefixes |= (prefixes & PREFIX_DATA);
98b528ac 13045 }
52b15da3 13046 }
98b528ac
L
13047 }
13048 else
13049 {
13050 if (l != 1 || len != 2 || last[0] != 'L')
13051 {
13052 SAVE_LAST (*p);
13053 break;
13054 }
13055 if (intel_syntax
13056 || (modrm.mod == 3 && !(sizeflag & SUFFIX_ALWAYS)))
13057 break;
13058 if ((rex & REX_W))
13059 {
13060 USED_REX (REX_W);
13061 *obufp++ = 'q';
13062 }
13063 else
13064 *obufp++ = 'l';
252b5132
RH
13065 }
13066 break;
13067 case 'R':
161a04f6
L
13068 USED_REX (REX_W);
13069 if (rex & REX_W)
a35ca55a
JB
13070 *obufp++ = 'q';
13071 else if (sizeflag & DFLAG)
c608c12e 13072 {
a35ca55a 13073 if (intel_syntax)
c608c12e 13074 *obufp++ = 'd';
c608c12e 13075 else
a35ca55a 13076 *obufp++ = 'l';
c608c12e 13077 }
252b5132 13078 else
a35ca55a
JB
13079 *obufp++ = 'w';
13080 if (intel_syntax && !p[1]
161a04f6 13081 && ((rex & REX_W) || (sizeflag & DFLAG)))
a35ca55a 13082 *obufp++ = 'e';
161a04f6 13083 if (!(rex & REX_W))
52b15da3 13084 used_prefixes |= (prefixes & PREFIX_DATA);
252b5132 13085 break;
1a114b12 13086 case 'V':
4b06377f 13087 if (l == 0 && len == 1)
1a114b12 13088 {
4b06377f
L
13089 if (intel_syntax)
13090 break;
7bb15c6f 13091 if (address_mode == mode_64bit
6c067bbb 13092 && ((sizeflag & DFLAG) || (rex & REX_W)))
4b06377f
L
13093 {
13094 if (sizeflag & SUFFIX_ALWAYS)
13095 *obufp++ = 'q';
13096 break;
13097 }
13098 }
13099 else
13100 {
13101 if (l != 1
13102 || len != 2
13103 || last[0] != 'L')
13104 {
13105 SAVE_LAST (*p);
13106 break;
13107 }
13108
13109 if (rex & REX_W)
13110 {
13111 *obufp++ = 'a';
13112 *obufp++ = 'b';
13113 *obufp++ = 's';
13114 }
1a114b12
JB
13115 }
13116 /* Fall through. */
4b06377f 13117 goto case_S;
252b5132 13118 case 'S':
4b06377f 13119 if (l == 0 && len == 1)
252b5132 13120 {
4b06377f
L
13121case_S:
13122 if (intel_syntax)
13123 break;
13124 if (sizeflag & SUFFIX_ALWAYS)
52b15da3 13125 {
4b06377f
L
13126 if (rex & REX_W)
13127 *obufp++ = 'q';
52b15da3 13128 else
4b06377f
L
13129 {
13130 if (sizeflag & DFLAG)
13131 *obufp++ = 'l';
13132 else
13133 *obufp++ = 'w';
13134 used_prefixes |= (prefixes & PREFIX_DATA);
13135 }
13136 }
13137 }
13138 else
13139 {
13140 if (l != 1
13141 || len != 2
13142 || last[0] != 'L')
13143 {
13144 SAVE_LAST (*p);
13145 break;
52b15da3 13146 }
4b06377f
L
13147
13148 if (address_mode == mode_64bit
13149 && !(prefixes & PREFIX_ADDR))
13150 {
13151 *obufp++ = 'a';
13152 *obufp++ = 'b';
13153 *obufp++ = 's';
13154 }
13155
13156 goto case_S;
252b5132 13157 }
252b5132 13158 break;
041bd2e0 13159 case 'X':
c0f3af97
L
13160 if (l != 0 || len != 1)
13161 {
13162 SAVE_LAST (*p);
13163 break;
13164 }
13165 if (need_vex && vex.prefix)
13166 {
13167 if (vex.prefix == DATA_PREFIX_OPCODE)
13168 *obufp++ = 'd';
13169 else
13170 *obufp++ = 's';
13171 }
041bd2e0 13172 else
f16cd0d5
L
13173 {
13174 if (prefixes & PREFIX_DATA)
13175 *obufp++ = 'd';
13176 else
13177 *obufp++ = 's';
13178 used_prefixes |= (prefixes & PREFIX_DATA);
13179 }
041bd2e0 13180 break;
76f227a5 13181 case 'Y':
c0f3af97 13182 if (l == 0 && len == 1)
9646c87b 13183 abort ();
c0f3af97
L
13184 else
13185 {
13186 if (l != 1 || len != 2 || last[0] != 'X')
13187 {
13188 SAVE_LAST (*p);
13189 break;
13190 }
13191 if (!need_vex)
13192 abort ();
13193 if (intel_syntax
04d824a4 13194 || ((modrm.mod == 3 || vex.b) && !(sizeflag & SUFFIX_ALWAYS)))
c0f3af97
L
13195 break;
13196 switch (vex.length)
13197 {
13198 case 128:
13199 *obufp++ = 'x';
13200 break;
13201 case 256:
13202 *obufp++ = 'y';
13203 break;
04d824a4
JB
13204 case 512:
13205 if (!vex.evex)
c0f3af97 13206 default:
04d824a4 13207 abort ();
c0f3af97 13208 }
76f227a5
JH
13209 }
13210 break;
252b5132 13211 case 'W':
0bfee649 13212 if (l == 0 && len == 1)
a35ca55a 13213 {
0bfee649
L
13214 /* operand size flag for cwtl, cbtw */
13215 USED_REX (REX_W);
13216 if (rex & REX_W)
13217 {
13218 if (intel_syntax)
13219 *obufp++ = 'd';
13220 else
13221 *obufp++ = 'l';
13222 }
13223 else if (sizeflag & DFLAG)
13224 *obufp++ = 'w';
a35ca55a 13225 else
0bfee649
L
13226 *obufp++ = 'b';
13227 if (!(rex & REX_W))
13228 used_prefixes |= (prefixes & PREFIX_DATA);
a35ca55a 13229 }
252b5132 13230 else
0bfee649 13231 {
6c30d220
L
13232 if (l != 1
13233 || len != 2
13234 || (last[0] != 'X'
13235 && last[0] != 'L'))
0bfee649
L
13236 {
13237 SAVE_LAST (*p);
13238 break;
13239 }
13240 if (!need_vex)
13241 abort ();
6c30d220
L
13242 if (last[0] == 'X')
13243 *obufp++ = vex.w ? 'd': 's';
13244 else
13245 *obufp++ = vex.w ? 'q': 'd';
0bfee649 13246 }
252b5132 13247 break;
a72d2af2
L
13248 case '^':
13249 if (intel_syntax)
13250 break;
13251 if ((prefixes & PREFIX_DATA) || (sizeflag & SUFFIX_ALWAYS))
13252 {
13253 if (sizeflag & DFLAG)
13254 *obufp++ = 'l';
13255 else
13256 *obufp++ = 'w';
13257 used_prefixes |= (prefixes & PREFIX_DATA);
13258 }
13259 break;
5db04b09
L
13260 case '@':
13261 if (intel_syntax)
13262 break;
13263 if (address_mode == mode_64bit
13264 && (isa64 == intel64
13265 || ((sizeflag & DFLAG) || (rex & REX_W))))
13266 *obufp++ = 'q';
13267 else if ((prefixes & PREFIX_DATA))
13268 {
13269 if (!(sizeflag & DFLAG))
13270 *obufp++ = 'w';
13271 used_prefixes |= (prefixes & PREFIX_DATA);
13272 }
13273 break;
252b5132 13274 }
9306ca4a 13275 alt = 0;
252b5132
RH
13276 }
13277 *obufp = 0;
ea397f5b 13278 mnemonicendp = obufp;
6439fc28 13279 return 0;
252b5132
RH
13280}
13281
13282static void
26ca5450 13283oappend (const char *s)
252b5132 13284{
ea397f5b 13285 obufp = stpcpy (obufp, s);
252b5132
RH
13286}
13287
13288static void
26ca5450 13289append_seg (void)
252b5132 13290{
285ca992
L
13291 /* Only print the active segment register. */
13292 if (!active_seg_prefix)
13293 return;
13294
13295 used_prefixes |= active_seg_prefix;
13296 switch (active_seg_prefix)
7d421014 13297 {
285ca992 13298 case PREFIX_CS:
9ce09ba2 13299 oappend_maybe_intel ("%cs:");
285ca992
L
13300 break;
13301 case PREFIX_DS:
9ce09ba2 13302 oappend_maybe_intel ("%ds:");
285ca992
L
13303 break;
13304 case PREFIX_SS:
9ce09ba2 13305 oappend_maybe_intel ("%ss:");
285ca992
L
13306 break;
13307 case PREFIX_ES:
9ce09ba2 13308 oappend_maybe_intel ("%es:");
285ca992
L
13309 break;
13310 case PREFIX_FS:
9ce09ba2 13311 oappend_maybe_intel ("%fs:");
285ca992
L
13312 break;
13313 case PREFIX_GS:
9ce09ba2 13314 oappend_maybe_intel ("%gs:");
285ca992
L
13315 break;
13316 default:
13317 break;
7d421014 13318 }
252b5132
RH
13319}
13320
13321static void
26ca5450 13322OP_indirE (int bytemode, int sizeflag)
252b5132
RH
13323{
13324 if (!intel_syntax)
13325 oappend ("*");
13326 OP_E (bytemode, sizeflag);
13327}
13328
52b15da3 13329static void
26ca5450 13330print_operand_value (char *buf, int hex, bfd_vma disp)
52b15da3 13331{
cb712a9e 13332 if (address_mode == mode_64bit)
52b15da3
JH
13333 {
13334 if (hex)
13335 {
13336 char tmp[30];
13337 int i;
13338 buf[0] = '0';
13339 buf[1] = 'x';
13340 sprintf_vma (tmp, disp);
6608db57 13341 for (i = 0; tmp[i] == '0' && tmp[i + 1]; i++);
52b15da3
JH
13342 strcpy (buf + 2, tmp + i);
13343 }
13344 else
13345 {
13346 bfd_signed_vma v = disp;
13347 char tmp[30];
13348 int i;
13349 if (v < 0)
13350 {
13351 *(buf++) = '-';
13352 v = -disp;
6608db57 13353 /* Check for possible overflow on 0x8000000000000000. */
52b15da3
JH
13354 if (v < 0)
13355 {
13356 strcpy (buf, "9223372036854775808");
13357 return;
13358 }
13359 }
13360 if (!v)
13361 {
13362 strcpy (buf, "0");
13363 return;
13364 }
13365
13366 i = 0;
13367 tmp[29] = 0;
13368 while (v)
13369 {
6608db57 13370 tmp[28 - i] = (v % 10) + '0';
52b15da3
JH
13371 v /= 10;
13372 i++;
13373 }
13374 strcpy (buf, tmp + 29 - i);
13375 }
13376 }
13377 else
13378 {
13379 if (hex)
13380 sprintf (buf, "0x%x", (unsigned int) disp);
13381 else
13382 sprintf (buf, "%d", (int) disp);
13383 }
13384}
13385
5d669648
L
13386/* Put DISP in BUF as signed hex number. */
13387
13388static void
13389print_displacement (char *buf, bfd_vma disp)
13390{
13391 bfd_signed_vma val = disp;
13392 char tmp[30];
13393 int i, j = 0;
13394
13395 if (val < 0)
13396 {
13397 buf[j++] = '-';
13398 val = -disp;
13399
13400 /* Check for possible overflow. */
13401 if (val < 0)
13402 {
13403 switch (address_mode)
13404 {
13405 case mode_64bit:
13406 strcpy (buf + j, "0x8000000000000000");
13407 break;
13408 case mode_32bit:
13409 strcpy (buf + j, "0x80000000");
13410 break;
13411 case mode_16bit:
13412 strcpy (buf + j, "0x8000");
13413 break;
13414 }
13415 return;
13416 }
13417 }
13418
13419 buf[j++] = '0';
13420 buf[j++] = 'x';
13421
0af1713e 13422 sprintf_vma (tmp, (bfd_vma) val);
5d669648
L
13423 for (i = 0; tmp[i] == '0'; i++)
13424 continue;
13425 if (tmp[i] == '\0')
13426 i--;
13427 strcpy (buf + j, tmp + i);
13428}
13429
3f31e633
JB
13430static void
13431intel_operand_size (int bytemode, int sizeflag)
13432{
43234a1e
L
13433 if (vex.evex
13434 && vex.b
13435 && (bytemode == x_mode
13436 || bytemode == evex_half_bcst_xmmq_mode))
13437 {
13438 if (vex.w)
13439 oappend ("QWORD PTR ");
13440 else
13441 oappend ("DWORD PTR ");
13442 return;
13443 }
3f31e633
JB
13444 switch (bytemode)
13445 {
13446 case b_mode:
b6169b20 13447 case b_swap_mode:
42903f7f 13448 case dqb_mode:
1ba585e8 13449 case db_mode:
3f31e633
JB
13450 oappend ("BYTE PTR ");
13451 break;
13452 case w_mode:
1ba585e8 13453 case dw_mode:
3f31e633
JB
13454 case dqw_mode:
13455 oappend ("WORD PTR ");
13456 break;
07f5af7d
L
13457 case indir_v_mode:
13458 if (address_mode == mode_64bit && isa64 == intel64)
13459 {
13460 oappend ("QWORD PTR ");
13461 break;
13462 }
1a0670f3 13463 /* Fall through. */
1a114b12 13464 case stack_v_mode:
7bb15c6f 13465 if (address_mode == mode_64bit && ((sizeflag & DFLAG) || (rex & REX_W)))
3f31e633
JB
13466 {
13467 oappend ("QWORD PTR ");
3f31e633
JB
13468 break;
13469 }
1a0670f3 13470 /* Fall through. */
3f31e633 13471 case v_mode:
b6169b20 13472 case v_swap_mode:
3f31e633 13473 case dq_mode:
161a04f6
L
13474 USED_REX (REX_W);
13475 if (rex & REX_W)
3f31e633 13476 oappend ("QWORD PTR ");
3f31e633 13477 else
f16cd0d5
L
13478 {
13479 if ((sizeflag & DFLAG) || bytemode == dq_mode)
13480 oappend ("DWORD PTR ");
13481 else
13482 oappend ("WORD PTR ");
13483 used_prefixes |= (prefixes & PREFIX_DATA);
13484 }
3f31e633 13485 break;
52fd6d94 13486 case z_mode:
161a04f6 13487 if ((rex & REX_W) || (sizeflag & DFLAG))
52fd6d94
JB
13488 *obufp++ = 'D';
13489 oappend ("WORD PTR ");
161a04f6 13490 if (!(rex & REX_W))
52fd6d94
JB
13491 used_prefixes |= (prefixes & PREFIX_DATA);
13492 break;
34b772a6
JB
13493 case a_mode:
13494 if (sizeflag & DFLAG)
13495 oappend ("QWORD PTR ");
13496 else
13497 oappend ("DWORD PTR ");
13498 used_prefixes |= (prefixes & PREFIX_DATA);
13499 break;
3f31e633 13500 case d_mode:
539f890d
L
13501 case d_scalar_mode:
13502 case d_scalar_swap_mode:
fa99fab2 13503 case d_swap_mode:
42903f7f 13504 case dqd_mode:
3f31e633
JB
13505 oappend ("DWORD PTR ");
13506 break;
13507 case q_mode:
539f890d
L
13508 case q_scalar_mode:
13509 case q_scalar_swap_mode:
b6169b20 13510 case q_swap_mode:
3f31e633
JB
13511 oappend ("QWORD PTR ");
13512 break;
d20dee9e 13513 case dqa_mode:
3f31e633 13514 case m_mode:
cb712a9e 13515 if (address_mode == mode_64bit)
3f31e633
JB
13516 oappend ("QWORD PTR ");
13517 else
13518 oappend ("DWORD PTR ");
13519 break;
13520 case f_mode:
13521 if (sizeflag & DFLAG)
13522 oappend ("FWORD PTR ");
13523 else
13524 oappend ("DWORD PTR ");
13525 used_prefixes |= (prefixes & PREFIX_DATA);
13526 break;
13527 case t_mode:
13528 oappend ("TBYTE PTR ");
13529 break;
13530 case x_mode:
b6169b20 13531 case x_swap_mode:
43234a1e
L
13532 case evex_x_gscat_mode:
13533 case evex_x_nobcst_mode:
53467f57
IT
13534 case b_scalar_mode:
13535 case w_scalar_mode:
c0f3af97
L
13536 if (need_vex)
13537 {
13538 switch (vex.length)
13539 {
13540 case 128:
13541 oappend ("XMMWORD PTR ");
13542 break;
13543 case 256:
13544 oappend ("YMMWORD PTR ");
13545 break;
43234a1e
L
13546 case 512:
13547 oappend ("ZMMWORD PTR ");
13548 break;
c0f3af97
L
13549 default:
13550 abort ();
13551 }
13552 }
13553 else
13554 oappend ("XMMWORD PTR ");
13555 break;
13556 case xmm_mode:
3f31e633
JB
13557 oappend ("XMMWORD PTR ");
13558 break;
43234a1e
L
13559 case ymm_mode:
13560 oappend ("YMMWORD PTR ");
13561 break;
c0f3af97 13562 case xmmq_mode:
43234a1e 13563 case evex_half_bcst_xmmq_mode:
c0f3af97
L
13564 if (!need_vex)
13565 abort ();
13566
13567 switch (vex.length)
13568 {
13569 case 128:
13570 oappend ("QWORD PTR ");
13571 break;
13572 case 256:
13573 oappend ("XMMWORD PTR ");
13574 break;
43234a1e
L
13575 case 512:
13576 oappend ("YMMWORD PTR ");
13577 break;
c0f3af97
L
13578 default:
13579 abort ();
13580 }
13581 break;
6c30d220
L
13582 case xmm_mb_mode:
13583 if (!need_vex)
13584 abort ();
13585
13586 switch (vex.length)
13587 {
13588 case 128:
13589 case 256:
43234a1e 13590 case 512:
6c30d220
L
13591 oappend ("BYTE PTR ");
13592 break;
13593 default:
13594 abort ();
13595 }
13596 break;
13597 case xmm_mw_mode:
13598 if (!need_vex)
13599 abort ();
13600
13601 switch (vex.length)
13602 {
13603 case 128:
13604 case 256:
43234a1e 13605 case 512:
6c30d220
L
13606 oappend ("WORD PTR ");
13607 break;
13608 default:
13609 abort ();
13610 }
13611 break;
13612 case xmm_md_mode:
13613 if (!need_vex)
13614 abort ();
13615
13616 switch (vex.length)
13617 {
13618 case 128:
13619 case 256:
43234a1e 13620 case 512:
6c30d220
L
13621 oappend ("DWORD PTR ");
13622 break;
13623 default:
13624 abort ();
13625 }
13626 break;
13627 case xmm_mq_mode:
13628 if (!need_vex)
13629 abort ();
13630
13631 switch (vex.length)
13632 {
13633 case 128:
13634 case 256:
43234a1e 13635 case 512:
6c30d220
L
13636 oappend ("QWORD PTR ");
13637 break;
13638 default:
13639 abort ();
13640 }
13641 break;
13642 case xmmdw_mode:
13643 if (!need_vex)
13644 abort ();
13645
13646 switch (vex.length)
13647 {
13648 case 128:
13649 oappend ("WORD PTR ");
13650 break;
13651 case 256:
13652 oappend ("DWORD PTR ");
13653 break;
43234a1e
L
13654 case 512:
13655 oappend ("QWORD PTR ");
13656 break;
6c30d220
L
13657 default:
13658 abort ();
13659 }
13660 break;
13661 case xmmqd_mode:
13662 if (!need_vex)
13663 abort ();
13664
13665 switch (vex.length)
13666 {
13667 case 128:
13668 oappend ("DWORD PTR ");
13669 break;
13670 case 256:
13671 oappend ("QWORD PTR ");
13672 break;
43234a1e
L
13673 case 512:
13674 oappend ("XMMWORD PTR ");
13675 break;
6c30d220
L
13676 default:
13677 abort ();
13678 }
13679 break;
c0f3af97
L
13680 case ymmq_mode:
13681 if (!need_vex)
13682 abort ();
13683
13684 switch (vex.length)
13685 {
13686 case 128:
13687 oappend ("QWORD PTR ");
13688 break;
13689 case 256:
13690 oappend ("YMMWORD PTR ");
13691 break;
43234a1e
L
13692 case 512:
13693 oappend ("ZMMWORD PTR ");
13694 break;
c0f3af97
L
13695 default:
13696 abort ();
13697 }
13698 break;
6c30d220
L
13699 case ymmxmm_mode:
13700 if (!need_vex)
13701 abort ();
13702
13703 switch (vex.length)
13704 {
13705 case 128:
13706 case 256:
13707 oappend ("XMMWORD PTR ");
13708 break;
13709 default:
13710 abort ();
13711 }
13712 break;
fb9c77c7
L
13713 case o_mode:
13714 oappend ("OWORD PTR ");
13715 break;
43234a1e 13716 case xmm_mdq_mode:
0bfee649 13717 case vex_w_dq_mode:
1c480963 13718 case vex_scalar_w_dq_mode:
0bfee649
L
13719 if (!need_vex)
13720 abort ();
13721
13722 if (vex.w)
13723 oappend ("QWORD PTR ");
13724 else
13725 oappend ("DWORD PTR ");
13726 break;
43234a1e
L
13727 case vex_vsib_d_w_dq_mode:
13728 case vex_vsib_q_w_dq_mode:
13729 if (!need_vex)
13730 abort ();
13731
13732 if (!vex.evex)
13733 {
13734 if (vex.w)
13735 oappend ("QWORD PTR ");
13736 else
13737 oappend ("DWORD PTR ");
13738 }
13739 else
13740 {
b28d1bda
IT
13741 switch (vex.length)
13742 {
13743 case 128:
13744 oappend ("XMMWORD PTR ");
13745 break;
13746 case 256:
13747 oappend ("YMMWORD PTR ");
13748 break;
13749 case 512:
13750 oappend ("ZMMWORD PTR ");
13751 break;
13752 default:
13753 abort ();
13754 }
43234a1e
L
13755 }
13756 break;
5fc35d96
IT
13757 case vex_vsib_q_w_d_mode:
13758 case vex_vsib_d_w_d_mode:
b28d1bda 13759 if (!need_vex || !vex.evex)
5fc35d96
IT
13760 abort ();
13761
b28d1bda
IT
13762 switch (vex.length)
13763 {
13764 case 128:
13765 oappend ("QWORD PTR ");
13766 break;
13767 case 256:
13768 oappend ("XMMWORD PTR ");
13769 break;
13770 case 512:
13771 oappend ("YMMWORD PTR ");
13772 break;
13773 default:
13774 abort ();
13775 }
5fc35d96
IT
13776
13777 break;
1ba585e8
IT
13778 case mask_bd_mode:
13779 if (!need_vex || vex.length != 128)
13780 abort ();
13781 if (vex.w)
13782 oappend ("DWORD PTR ");
13783 else
13784 oappend ("BYTE PTR ");
13785 break;
43234a1e
L
13786 case mask_mode:
13787 if (!need_vex)
13788 abort ();
1ba585e8
IT
13789 if (vex.w)
13790 oappend ("QWORD PTR ");
13791 else
13792 oappend ("WORD PTR ");
43234a1e 13793 break;
6c75cc62 13794 case v_bnd_mode:
d276ec69 13795 case v_bndmk_mode:
3f31e633
JB
13796 default:
13797 break;
13798 }
13799}
13800
252b5132 13801static void
c0f3af97 13802OP_E_register (int bytemode, int sizeflag)
252b5132 13803{
c0f3af97
L
13804 int reg = modrm.rm;
13805 const char **names;
252b5132 13806
c0f3af97
L
13807 USED_REX (REX_B);
13808 if ((rex & REX_B))
13809 reg += 8;
252b5132 13810
b6169b20 13811 if ((sizeflag & SUFFIX_ALWAYS)
1ba585e8 13812 && (bytemode == b_swap_mode
9f79e886 13813 || bytemode == bnd_swap_mode
60227d64 13814 || bytemode == v_swap_mode))
b6169b20
L
13815 swap_operand ();
13816
c0f3af97 13817 switch (bytemode)
252b5132 13818 {
c0f3af97 13819 case b_mode:
b6169b20 13820 case b_swap_mode:
c0f3af97
L
13821 USED_REX (0);
13822 if (rex)
13823 names = names8rex;
13824 else
13825 names = names8;
13826 break;
13827 case w_mode:
13828 names = names16;
13829 break;
13830 case d_mode:
1ba585e8
IT
13831 case dw_mode:
13832 case db_mode:
c0f3af97
L
13833 names = names32;
13834 break;
13835 case q_mode:
13836 names = names64;
13837 break;
13838 case m_mode:
6c75cc62 13839 case v_bnd_mode:
c0f3af97
L
13840 names = address_mode == mode_64bit ? names64 : names32;
13841 break;
7e8b059b 13842 case bnd_mode:
9f79e886 13843 case bnd_swap_mode:
0d96e4df
L
13844 if (reg > 0x3)
13845 {
13846 oappend ("(bad)");
13847 return;
13848 }
7e8b059b
L
13849 names = names_bnd;
13850 break;
07f5af7d
L
13851 case indir_v_mode:
13852 if (address_mode == mode_64bit && isa64 == intel64)
13853 {
13854 names = names64;
13855 break;
13856 }
1a0670f3 13857 /* Fall through. */
c0f3af97 13858 case stack_v_mode:
7bb15c6f 13859 if (address_mode == mode_64bit && ((sizeflag & DFLAG) || (rex & REX_W)))
252b5132 13860 {
c0f3af97 13861 names = names64;
252b5132 13862 break;
252b5132 13863 }
c0f3af97 13864 bytemode = v_mode;
1a0670f3 13865 /* Fall through. */
c0f3af97 13866 case v_mode:
b6169b20 13867 case v_swap_mode:
c0f3af97
L
13868 case dq_mode:
13869 case dqb_mode:
13870 case dqd_mode:
13871 case dqw_mode:
d20dee9e 13872 case dqa_mode:
c0f3af97
L
13873 USED_REX (REX_W);
13874 if (rex & REX_W)
13875 names = names64;
c0f3af97 13876 else
f16cd0d5 13877 {
7bb15c6f 13878 if ((sizeflag & DFLAG)
f16cd0d5
L
13879 || (bytemode != v_mode
13880 && bytemode != v_swap_mode))
13881 names = names32;
13882 else
13883 names = names16;
13884 used_prefixes |= (prefixes & PREFIX_DATA);
13885 }
c0f3af97 13886 break;
de89d0a3
IT
13887 case va_mode:
13888 names = (address_mode == mode_64bit
13889 ? names64 : names32);
13890 if (!(prefixes & PREFIX_ADDR))
aa178437
IT
13891 names = (address_mode == mode_16bit
13892 ? names16 : names);
de89d0a3
IT
13893 else
13894 {
13895 /* Remove "addr16/addr32". */
13896 all_prefixes[last_addr_prefix] = 0;
13897 names = (address_mode != mode_32bit
13898 ? names32 : names16);
13899 used_prefixes |= PREFIX_ADDR;
13900 }
13901 break;
1ba585e8 13902 case mask_bd_mode:
43234a1e 13903 case mask_mode:
9889cbb1
L
13904 if (reg > 0x7)
13905 {
13906 oappend ("(bad)");
13907 return;
13908 }
43234a1e
L
13909 names = names_mask;
13910 break;
c0f3af97
L
13911 case 0:
13912 return;
13913 default:
13914 oappend (INTERNAL_DISASSEMBLER_ERROR);
252b5132
RH
13915 return;
13916 }
c0f3af97
L
13917 oappend (names[reg]);
13918}
13919
13920static void
c1e679ec 13921OP_E_memory (int bytemode, int sizeflag)
c0f3af97
L
13922{
13923 bfd_vma disp = 0;
13924 int add = (rex & REX_B) ? 8 : 0;
13925 int riprel = 0;
43234a1e
L
13926 int shift;
13927
13928 if (vex.evex)
13929 {
13930 /* In EVEX, if operand doesn't allow broadcast, vex.b should be 0. */
13931 if (vex.b
13932 && bytemode != x_mode
90a915bf 13933 && bytemode != xmmq_mode
43234a1e
L
13934 && bytemode != evex_half_bcst_xmmq_mode)
13935 {
13936 BadOp ();
13937 return;
13938 }
13939 switch (bytemode)
13940 {
1ba585e8
IT
13941 case dqw_mode:
13942 case dw_mode:
1ba585e8
IT
13943 shift = 1;
13944 break;
13945 case dqb_mode:
13946 case db_mode:
13947 shift = 0;
13948 break;
b50c9f31
JB
13949 case dq_mode:
13950 if (address_mode != mode_64bit)
13951 {
13952 shift = 2;
13953 break;
13954 }
13955 /* fall through */
43234a1e 13956 case vex_vsib_d_w_dq_mode:
5fc35d96 13957 case vex_vsib_d_w_d_mode:
eaa9d1ad 13958 case vex_vsib_q_w_dq_mode:
5fc35d96 13959 case vex_vsib_q_w_d_mode:
43234a1e
L
13960 case evex_x_gscat_mode:
13961 case xmm_mdq_mode:
13962 shift = vex.w ? 3 : 2;
13963 break;
43234a1e
L
13964 case x_mode:
13965 case evex_half_bcst_xmmq_mode:
90a915bf 13966 case xmmq_mode:
43234a1e
L
13967 if (vex.b)
13968 {
13969 shift = vex.w ? 3 : 2;
13970 break;
13971 }
1a0670f3 13972 /* Fall through. */
43234a1e
L
13973 case xmmqd_mode:
13974 case xmmdw_mode:
43234a1e
L
13975 case ymmq_mode:
13976 case evex_x_nobcst_mode:
13977 case x_swap_mode:
13978 switch (vex.length)
13979 {
13980 case 128:
13981 shift = 4;
13982 break;
13983 case 256:
13984 shift = 5;
13985 break;
13986 case 512:
13987 shift = 6;
13988 break;
13989 default:
13990 abort ();
13991 }
13992 break;
13993 case ymm_mode:
13994 shift = 5;
13995 break;
13996 case xmm_mode:
13997 shift = 4;
13998 break;
13999 case xmm_mq_mode:
14000 case q_mode:
14001 case q_scalar_mode:
14002 case q_swap_mode:
14003 case q_scalar_swap_mode:
14004 shift = 3;
14005 break;
14006 case dqd_mode:
14007 case xmm_md_mode:
14008 case d_mode:
14009 case d_scalar_mode:
14010 case d_swap_mode:
14011 case d_scalar_swap_mode:
14012 shift = 2;
14013 break;
5074ad8a 14014 case w_scalar_mode:
43234a1e
L
14015 case xmm_mw_mode:
14016 shift = 1;
14017 break;
5074ad8a 14018 case b_scalar_mode:
43234a1e
L
14019 case xmm_mb_mode:
14020 shift = 0;
14021 break;
d20dee9e
L
14022 case dqa_mode:
14023 shift = address_mode == mode_64bit ? 3 : 2;
14024 break;
43234a1e
L
14025 default:
14026 abort ();
14027 }
14028 /* Make necessary corrections to shift for modes that need it.
14029 For these modes we currently have shift 4, 5 or 6 depending on
14030 vex.length (it corresponds to xmmword, ymmword or zmmword
14031 operand). We might want to make it 3, 4 or 5 (e.g. for
14032 xmmq_mode). In case of broadcast enabled the corrections
14033 aren't needed, as element size is always 32 or 64 bits. */
90a915bf
IT
14034 if (!vex.b
14035 && (bytemode == xmmq_mode
14036 || bytemode == evex_half_bcst_xmmq_mode))
43234a1e
L
14037 shift -= 1;
14038 else if (bytemode == xmmqd_mode)
14039 shift -= 2;
14040 else if (bytemode == xmmdw_mode)
14041 shift -= 3;
b28d1bda
IT
14042 else if (bytemode == ymmq_mode && vex.length == 128)
14043 shift -= 1;
43234a1e
L
14044 }
14045 else
14046 shift = 0;
252b5132 14047
c0f3af97 14048 USED_REX (REX_B);
3f31e633
JB
14049 if (intel_syntax)
14050 intel_operand_size (bytemode, sizeflag);
252b5132
RH
14051 append_seg ();
14052
5d669648 14053 if ((sizeflag & AFLAG) || address_mode == mode_64bit)
252b5132 14054 {
5d669648
L
14055 /* 32/64 bit address mode */
14056 int havedisp;
252b5132
RH
14057 int havesib;
14058 int havebase;
0f7da397 14059 int haveindex;
20afcfb7 14060 int needindex;
1bc60e56 14061 int needaddr32;
82c18208 14062 int base, rbase;
91d6fa6a 14063 int vindex = 0;
252b5132 14064 int scale = 0;
7e8b059b
L
14065 int addr32flag = !((sizeflag & AFLAG)
14066 || bytemode == v_bnd_mode
d276ec69 14067 || bytemode == v_bndmk_mode
9f79e886
JB
14068 || bytemode == bnd_mode
14069 || bytemode == bnd_swap_mode);
6c30d220
L
14070 const char **indexes64 = names64;
14071 const char **indexes32 = names32;
252b5132
RH
14072
14073 havesib = 0;
14074 havebase = 1;
0f7da397 14075 haveindex = 0;
7967e09e 14076 base = modrm.rm;
252b5132
RH
14077
14078 if (base == 4)
14079 {
14080 havesib = 1;
dfc8cf43 14081 vindex = sib.index;
161a04f6
L
14082 USED_REX (REX_X);
14083 if (rex & REX_X)
91d6fa6a 14084 vindex += 8;
6c30d220
L
14085 switch (bytemode)
14086 {
14087 case vex_vsib_d_w_dq_mode:
5fc35d96 14088 case vex_vsib_d_w_d_mode:
6c30d220 14089 case vex_vsib_q_w_dq_mode:
5fc35d96 14090 case vex_vsib_q_w_d_mode:
6c30d220
L
14091 if (!need_vex)
14092 abort ();
43234a1e
L
14093 if (vex.evex)
14094 {
14095 if (!vex.v)
14096 vindex += 16;
14097 }
6c30d220
L
14098
14099 haveindex = 1;
14100 switch (vex.length)
14101 {
14102 case 128:
7bb15c6f 14103 indexes64 = indexes32 = names_xmm;
6c30d220
L
14104 break;
14105 case 256:
5fc35d96
IT
14106 if (!vex.w
14107 || bytemode == vex_vsib_q_w_dq_mode
14108 || bytemode == vex_vsib_q_w_d_mode)
7bb15c6f 14109 indexes64 = indexes32 = names_ymm;
6c30d220 14110 else
7bb15c6f 14111 indexes64 = indexes32 = names_xmm;
6c30d220 14112 break;
43234a1e 14113 case 512:
5fc35d96
IT
14114 if (!vex.w
14115 || bytemode == vex_vsib_q_w_dq_mode
14116 || bytemode == vex_vsib_q_w_d_mode)
43234a1e
L
14117 indexes64 = indexes32 = names_zmm;
14118 else
14119 indexes64 = indexes32 = names_ymm;
14120 break;
6c30d220
L
14121 default:
14122 abort ();
14123 }
14124 break;
14125 default:
14126 haveindex = vindex != 4;
14127 break;
14128 }
14129 scale = sib.scale;
14130 base = sib.base;
252b5132
RH
14131 codep++;
14132 }
82c18208 14133 rbase = base + add;
252b5132 14134
7967e09e 14135 switch (modrm.mod)
252b5132
RH
14136 {
14137 case 0:
82c18208 14138 if (base == 5)
252b5132
RH
14139 {
14140 havebase = 0;
cb712a9e 14141 if (address_mode == mode_64bit && !havesib)
52b15da3
JH
14142 riprel = 1;
14143 disp = get32s ();
d276ec69
JB
14144 if (riprel && bytemode == v_bndmk_mode)
14145 {
14146 oappend ("(bad)");
14147 return;
14148 }
252b5132
RH
14149 }
14150 break;
14151 case 1:
14152 FETCH_DATA (the_info, codep + 1);
14153 disp = *codep++;
14154 if ((disp & 0x80) != 0)
14155 disp -= 0x100;
43234a1e
L
14156 if (vex.evex && shift > 0)
14157 disp <<= shift;
252b5132
RH
14158 break;
14159 case 2:
52b15da3 14160 disp = get32s ();
252b5132
RH
14161 break;
14162 }
14163
1bc60e56
L
14164 needindex = 0;
14165 needaddr32 = 0;
14166 if (havesib
14167 && !havebase
14168 && !haveindex
14169 && address_mode != mode_16bit)
14170 {
14171 if (address_mode == mode_64bit)
14172 {
14173 /* Display eiz instead of addr32. */
14174 needindex = addr32flag;
14175 needaddr32 = 1;
14176 }
14177 else
14178 {
14179 /* In 32-bit mode, we need index register to tell [offset]
14180 from [eiz*1 + offset]. */
14181 needindex = 1;
14182 }
14183 }
14184
20afcfb7
L
14185 havedisp = (havebase
14186 || needindex
14187 || (havesib && (haveindex || scale != 0)));
5d669648 14188
252b5132 14189 if (!intel_syntax)
82c18208 14190 if (modrm.mod != 0 || base == 5)
db6eb5be 14191 {
5d669648
L
14192 if (havedisp || riprel)
14193 print_displacement (scratchbuf, disp);
14194 else
14195 print_operand_value (scratchbuf, 1, disp);
db6eb5be 14196 oappend (scratchbuf);
52b15da3
JH
14197 if (riprel)
14198 {
14199 set_op (disp, 1);
28596323 14200 oappend (!addr32flag ? "(%rip)" : "(%eip)");
52b15da3 14201 }
db6eb5be 14202 }
2da11e11 14203
1bc60e56 14204 if ((havebase || haveindex || needaddr32 || riprel)
7e8b059b 14205 && (bytemode != v_bnd_mode)
d276ec69 14206 && (bytemode != v_bndmk_mode)
9f79e886
JB
14207 && (bytemode != bnd_mode)
14208 && (bytemode != bnd_swap_mode))
87767711
JB
14209 used_prefixes |= PREFIX_ADDR;
14210
5d669648 14211 if (havedisp || (intel_syntax && riprel))
252b5132 14212 {
252b5132 14213 *obufp++ = open_char;
52b15da3 14214 if (intel_syntax && riprel)
185b1163
L
14215 {
14216 set_op (disp, 1);
28596323 14217 oappend (!addr32flag ? "rip" : "eip");
185b1163 14218 }
db6eb5be 14219 *obufp = '\0';
252b5132 14220 if (havebase)
7e8b059b 14221 oappend (address_mode == mode_64bit && !addr32flag
82c18208 14222 ? names64[rbase] : names32[rbase]);
252b5132
RH
14223 if (havesib)
14224 {
db51cc60
L
14225 /* ESP/RSP won't allow index. If base isn't ESP/RSP,
14226 print index to tell base + index from base. */
14227 if (scale != 0
20afcfb7 14228 || needindex
db51cc60
L
14229 || haveindex
14230 || (havebase && base != ESP_REG_NUM))
252b5132 14231 {
9306ca4a 14232 if (!intel_syntax || havebase)
db6eb5be 14233 {
9306ca4a
JB
14234 *obufp++ = separator_char;
14235 *obufp = '\0';
db6eb5be 14236 }
db51cc60 14237 if (haveindex)
7e8b059b 14238 oappend (address_mode == mode_64bit && !addr32flag
6c30d220 14239 ? indexes64[vindex] : indexes32[vindex]);
db51cc60 14240 else
7e8b059b 14241 oappend (address_mode == mode_64bit && !addr32flag
db51cc60
L
14242 ? index64 : index32);
14243
db6eb5be
AM
14244 *obufp++ = scale_char;
14245 *obufp = '\0';
14246 sprintf (scratchbuf, "%d", 1 << scale);
14247 oappend (scratchbuf);
14248 }
252b5132 14249 }
185b1163 14250 if (intel_syntax
82c18208 14251 && (disp || modrm.mod != 0 || base == 5))
3d456fa1 14252 {
db51cc60 14253 if (!havedisp || (bfd_signed_vma) disp >= 0)
3d456fa1
JB
14254 {
14255 *obufp++ = '+';
14256 *obufp = '\0';
14257 }
05203043 14258 else if (modrm.mod != 1 && disp != -disp)
3d456fa1
JB
14259 {
14260 *obufp++ = '-';
14261 *obufp = '\0';
14262 disp = - (bfd_signed_vma) disp;
14263 }
14264
db51cc60
L
14265 if (havedisp)
14266 print_displacement (scratchbuf, disp);
14267 else
14268 print_operand_value (scratchbuf, 1, disp);
3d456fa1
JB
14269 oappend (scratchbuf);
14270 }
252b5132
RH
14271
14272 *obufp++ = close_char;
db6eb5be 14273 *obufp = '\0';
252b5132
RH
14274 }
14275 else if (intel_syntax)
db6eb5be 14276 {
82c18208 14277 if (modrm.mod != 0 || base == 5)
db6eb5be 14278 {
285ca992 14279 if (!active_seg_prefix)
252b5132 14280 {
d708bcba 14281 oappend (names_seg[ds_reg - es_reg]);
252b5132
RH
14282 oappend (":");
14283 }
52b15da3 14284 print_operand_value (scratchbuf, 1, disp);
db6eb5be
AM
14285 oappend (scratchbuf);
14286 }
14287 }
252b5132
RH
14288 }
14289 else
f16cd0d5
L
14290 {
14291 /* 16 bit address mode */
14292 used_prefixes |= prefixes & PREFIX_ADDR;
7967e09e 14293 switch (modrm.mod)
252b5132
RH
14294 {
14295 case 0:
7967e09e 14296 if (modrm.rm == 6)
252b5132
RH
14297 {
14298 disp = get16 ();
14299 if ((disp & 0x8000) != 0)
14300 disp -= 0x10000;
14301 }
14302 break;
14303 case 1:
14304 FETCH_DATA (the_info, codep + 1);
14305 disp = *codep++;
14306 if ((disp & 0x80) != 0)
14307 disp -= 0x100;
65f3ed04
JB
14308 if (vex.evex && shift > 0)
14309 disp <<= shift;
252b5132
RH
14310 break;
14311 case 2:
14312 disp = get16 ();
14313 if ((disp & 0x8000) != 0)
14314 disp -= 0x10000;
14315 break;
14316 }
14317
14318 if (!intel_syntax)
7967e09e 14319 if (modrm.mod != 0 || modrm.rm == 6)
db6eb5be 14320 {
5d669648 14321 print_displacement (scratchbuf, disp);
db6eb5be
AM
14322 oappend (scratchbuf);
14323 }
252b5132 14324
7967e09e 14325 if (modrm.mod != 0 || modrm.rm != 6)
252b5132
RH
14326 {
14327 *obufp++ = open_char;
db6eb5be 14328 *obufp = '\0';
7967e09e 14329 oappend (index16[modrm.rm]);
5d669648
L
14330 if (intel_syntax
14331 && (disp || modrm.mod != 0 || modrm.rm == 6))
3d456fa1 14332 {
5d669648 14333 if ((bfd_signed_vma) disp >= 0)
3d456fa1
JB
14334 {
14335 *obufp++ = '+';
14336 *obufp = '\0';
14337 }
7967e09e 14338 else if (modrm.mod != 1)
3d456fa1
JB
14339 {
14340 *obufp++ = '-';
14341 *obufp = '\0';
14342 disp = - (bfd_signed_vma) disp;
14343 }
14344
5d669648 14345 print_displacement (scratchbuf, disp);
3d456fa1
JB
14346 oappend (scratchbuf);
14347 }
14348
db6eb5be
AM
14349 *obufp++ = close_char;
14350 *obufp = '\0';
252b5132 14351 }
3d456fa1
JB
14352 else if (intel_syntax)
14353 {
285ca992 14354 if (!active_seg_prefix)
3d456fa1
JB
14355 {
14356 oappend (names_seg[ds_reg - es_reg]);
14357 oappend (":");
14358 }
14359 print_operand_value (scratchbuf, 1, disp & 0xffff);
14360 oappend (scratchbuf);
14361 }
252b5132 14362 }
43234a1e
L
14363 if (vex.evex && vex.b
14364 && (bytemode == x_mode
90a915bf 14365 || bytemode == xmmq_mode
43234a1e
L
14366 || bytemode == evex_half_bcst_xmmq_mode))
14367 {
90a915bf
IT
14368 if (vex.w
14369 || bytemode == xmmq_mode
14370 || bytemode == evex_half_bcst_xmmq_mode)
b28d1bda
IT
14371 {
14372 switch (vex.length)
14373 {
14374 case 128:
14375 oappend ("{1to2}");
14376 break;
14377 case 256:
14378 oappend ("{1to4}");
14379 break;
14380 case 512:
14381 oappend ("{1to8}");
14382 break;
14383 default:
14384 abort ();
14385 }
14386 }
43234a1e 14387 else
b28d1bda
IT
14388 {
14389 switch (vex.length)
14390 {
14391 case 128:
14392 oappend ("{1to4}");
14393 break;
14394 case 256:
14395 oappend ("{1to8}");
14396 break;
14397 case 512:
14398 oappend ("{1to16}");
14399 break;
14400 default:
14401 abort ();
14402 }
14403 }
43234a1e 14404 }
252b5132
RH
14405}
14406
c0f3af97 14407static void
8b3f93e7 14408OP_E (int bytemode, int sizeflag)
c0f3af97
L
14409{
14410 /* Skip mod/rm byte. */
14411 MODRM_CHECK;
14412 codep++;
14413
14414 if (modrm.mod == 3)
14415 OP_E_register (bytemode, sizeflag);
14416 else
c1e679ec 14417 OP_E_memory (bytemode, sizeflag);
c0f3af97
L
14418}
14419
252b5132 14420static void
26ca5450 14421OP_G (int bytemode, int sizeflag)
252b5132 14422{
52b15da3 14423 int add = 0;
c0a30a9f 14424 const char **names;
161a04f6
L
14425 USED_REX (REX_R);
14426 if (rex & REX_R)
52b15da3 14427 add += 8;
252b5132
RH
14428 switch (bytemode)
14429 {
14430 case b_mode:
52b15da3
JH
14431 USED_REX (0);
14432 if (rex)
7967e09e 14433 oappend (names8rex[modrm.reg + add]);
52b15da3 14434 else
7967e09e 14435 oappend (names8[modrm.reg + add]);
252b5132
RH
14436 break;
14437 case w_mode:
7967e09e 14438 oappend (names16[modrm.reg + add]);
252b5132
RH
14439 break;
14440 case d_mode:
1ba585e8
IT
14441 case db_mode:
14442 case dw_mode:
7967e09e 14443 oappend (names32[modrm.reg + add]);
52b15da3
JH
14444 break;
14445 case q_mode:
7967e09e 14446 oappend (names64[modrm.reg + add]);
252b5132 14447 break;
7e8b059b 14448 case bnd_mode:
0d96e4df
L
14449 if (modrm.reg > 0x3)
14450 {
14451 oappend ("(bad)");
14452 return;
14453 }
7e8b059b
L
14454 oappend (names_bnd[modrm.reg]);
14455 break;
252b5132 14456 case v_mode:
9306ca4a 14457 case dq_mode:
42903f7f
L
14458 case dqb_mode:
14459 case dqd_mode:
9306ca4a 14460 case dqw_mode:
161a04f6
L
14461 USED_REX (REX_W);
14462 if (rex & REX_W)
7967e09e 14463 oappend (names64[modrm.reg + add]);
252b5132 14464 else
f16cd0d5
L
14465 {
14466 if ((sizeflag & DFLAG) || bytemode != v_mode)
14467 oappend (names32[modrm.reg + add]);
14468 else
14469 oappend (names16[modrm.reg + add]);
14470 used_prefixes |= (prefixes & PREFIX_DATA);
14471 }
252b5132 14472 break;
c0a30a9f
L
14473 case va_mode:
14474 names = (address_mode == mode_64bit
14475 ? names64 : names32);
14476 if (!(prefixes & PREFIX_ADDR))
14477 {
14478 if (address_mode == mode_16bit)
14479 names = names16;
14480 }
14481 else
14482 {
14483 /* Remove "addr16/addr32". */
14484 all_prefixes[last_addr_prefix] = 0;
14485 names = (address_mode != mode_32bit
14486 ? names32 : names16);
14487 used_prefixes |= PREFIX_ADDR;
14488 }
14489 oappend (names[modrm.reg + add]);
14490 break;
90700ea2 14491 case m_mode:
cb712a9e 14492 if (address_mode == mode_64bit)
7967e09e 14493 oappend (names64[modrm.reg + add]);
90700ea2 14494 else
7967e09e 14495 oappend (names32[modrm.reg + add]);
90700ea2 14496 break;
1ba585e8 14497 case mask_bd_mode:
43234a1e 14498 case mask_mode:
9889cbb1
L
14499 if ((modrm.reg + add) > 0x7)
14500 {
14501 oappend ("(bad)");
14502 return;
14503 }
43234a1e
L
14504 oappend (names_mask[modrm.reg + add]);
14505 break;
252b5132
RH
14506 default:
14507 oappend (INTERNAL_DISASSEMBLER_ERROR);
14508 break;
14509 }
14510}
14511
52b15da3 14512static bfd_vma
26ca5450 14513get64 (void)
52b15da3 14514{
5dd0794d 14515 bfd_vma x;
52b15da3 14516#ifdef BFD64
5dd0794d
AM
14517 unsigned int a;
14518 unsigned int b;
14519
52b15da3
JH
14520 FETCH_DATA (the_info, codep + 8);
14521 a = *codep++ & 0xff;
14522 a |= (*codep++ & 0xff) << 8;
14523 a |= (*codep++ & 0xff) << 16;
070fe95d 14524 a |= (*codep++ & 0xffu) << 24;
5dd0794d 14525 b = *codep++ & 0xff;
52b15da3
JH
14526 b |= (*codep++ & 0xff) << 8;
14527 b |= (*codep++ & 0xff) << 16;
070fe95d 14528 b |= (*codep++ & 0xffu) << 24;
52b15da3
JH
14529 x = a + ((bfd_vma) b << 32);
14530#else
6608db57 14531 abort ();
5dd0794d 14532 x = 0;
52b15da3
JH
14533#endif
14534 return x;
14535}
14536
14537static bfd_signed_vma
26ca5450 14538get32 (void)
252b5132 14539{
52b15da3 14540 bfd_signed_vma x = 0;
252b5132
RH
14541
14542 FETCH_DATA (the_info, codep + 4);
52b15da3
JH
14543 x = *codep++ & (bfd_signed_vma) 0xff;
14544 x |= (*codep++ & (bfd_signed_vma) 0xff) << 8;
14545 x |= (*codep++ & (bfd_signed_vma) 0xff) << 16;
14546 x |= (*codep++ & (bfd_signed_vma) 0xff) << 24;
14547 return x;
14548}
14549
14550static bfd_signed_vma
26ca5450 14551get32s (void)
52b15da3
JH
14552{
14553 bfd_signed_vma x = 0;
14554
14555 FETCH_DATA (the_info, codep + 4);
14556 x = *codep++ & (bfd_signed_vma) 0xff;
14557 x |= (*codep++ & (bfd_signed_vma) 0xff) << 8;
14558 x |= (*codep++ & (bfd_signed_vma) 0xff) << 16;
14559 x |= (*codep++ & (bfd_signed_vma) 0xff) << 24;
14560
14561 x = (x ^ ((bfd_signed_vma) 1 << 31)) - ((bfd_signed_vma) 1 << 31);
14562
252b5132
RH
14563 return x;
14564}
14565
14566static int
26ca5450 14567get16 (void)
252b5132
RH
14568{
14569 int x = 0;
14570
14571 FETCH_DATA (the_info, codep + 2);
14572 x = *codep++ & 0xff;
14573 x |= (*codep++ & 0xff) << 8;
14574 return x;
14575}
14576
14577static void
26ca5450 14578set_op (bfd_vma op, int riprel)
252b5132
RH
14579{
14580 op_index[op_ad] = op_ad;
cb712a9e 14581 if (address_mode == mode_64bit)
7081ff04
AJ
14582 {
14583 op_address[op_ad] = op;
14584 op_riprel[op_ad] = riprel;
14585 }
14586 else
14587 {
14588 /* Mask to get a 32-bit address. */
14589 op_address[op_ad] = op & 0xffffffff;
14590 op_riprel[op_ad] = riprel & 0xffffffff;
14591 }
252b5132
RH
14592}
14593
14594static void
26ca5450 14595OP_REG (int code, int sizeflag)
252b5132 14596{
2da11e11 14597 const char *s;
9b60702d 14598 int add;
de882298
RM
14599
14600 switch (code)
14601 {
14602 case es_reg: case ss_reg: case cs_reg:
14603 case ds_reg: case fs_reg: case gs_reg:
14604 oappend (names_seg[code - es_reg]);
14605 return;
14606 }
14607
161a04f6
L
14608 USED_REX (REX_B);
14609 if (rex & REX_B)
52b15da3 14610 add = 8;
9b60702d
L
14611 else
14612 add = 0;
52b15da3
JH
14613
14614 switch (code)
14615 {
52b15da3
JH
14616 case ax_reg: case cx_reg: case dx_reg: case bx_reg:
14617 case sp_reg: case bp_reg: case si_reg: case di_reg:
14618 s = names16[code - ax_reg + add];
14619 break;
52b15da3
JH
14620 case al_reg: case ah_reg: case cl_reg: case ch_reg:
14621 case dl_reg: case dh_reg: case bl_reg: case bh_reg:
14622 USED_REX (0);
14623 if (rex)
14624 s = names8rex[code - al_reg + add];
14625 else
14626 s = names8[code - al_reg];
14627 break;
6439fc28
AM
14628 case rAX_reg: case rCX_reg: case rDX_reg: case rBX_reg:
14629 case rSP_reg: case rBP_reg: case rSI_reg: case rDI_reg:
7bb15c6f 14630 if (address_mode == mode_64bit
6c067bbb 14631 && ((sizeflag & DFLAG) || (rex & REX_W)))
6439fc28
AM
14632 {
14633 s = names64[code - rAX_reg + add];
14634 break;
14635 }
14636 code += eAX_reg - rAX_reg;
6608db57 14637 /* Fall through. */
52b15da3
JH
14638 case eAX_reg: case eCX_reg: case eDX_reg: case eBX_reg:
14639 case eSP_reg: case eBP_reg: case eSI_reg: case eDI_reg:
161a04f6
L
14640 USED_REX (REX_W);
14641 if (rex & REX_W)
52b15da3 14642 s = names64[code - eAX_reg + add];
52b15da3 14643 else
f16cd0d5
L
14644 {
14645 if (sizeflag & DFLAG)
14646 s = names32[code - eAX_reg + add];
14647 else
14648 s = names16[code - eAX_reg + add];
14649 used_prefixes |= (prefixes & PREFIX_DATA);
14650 }
52b15da3 14651 break;
52b15da3
JH
14652 default:
14653 s = INTERNAL_DISASSEMBLER_ERROR;
14654 break;
14655 }
14656 oappend (s);
14657}
14658
14659static void
26ca5450 14660OP_IMREG (int code, int sizeflag)
52b15da3
JH
14661{
14662 const char *s;
252b5132
RH
14663
14664 switch (code)
14665 {
14666 case indir_dx_reg:
d708bcba 14667 if (intel_syntax)
52fd6d94 14668 s = "dx";
d708bcba 14669 else
db6eb5be 14670 s = "(%dx)";
252b5132
RH
14671 break;
14672 case ax_reg: case cx_reg: case dx_reg: case bx_reg:
14673 case sp_reg: case bp_reg: case si_reg: case di_reg:
14674 s = names16[code - ax_reg];
14675 break;
14676 case es_reg: case ss_reg: case cs_reg:
14677 case ds_reg: case fs_reg: case gs_reg:
14678 s = names_seg[code - es_reg];
14679 break;
14680 case al_reg: case ah_reg: case cl_reg: case ch_reg:
14681 case dl_reg: case dh_reg: case bl_reg: case bh_reg:
52b15da3
JH
14682 USED_REX (0);
14683 if (rex)
14684 s = names8rex[code - al_reg];
14685 else
14686 s = names8[code - al_reg];
252b5132
RH
14687 break;
14688 case eAX_reg: case eCX_reg: case eDX_reg: case eBX_reg:
14689 case eSP_reg: case eBP_reg: case eSI_reg: case eDI_reg:
161a04f6
L
14690 USED_REX (REX_W);
14691 if (rex & REX_W)
52b15da3 14692 s = names64[code - eAX_reg];
252b5132 14693 else
f16cd0d5
L
14694 {
14695 if (sizeflag & DFLAG)
14696 s = names32[code - eAX_reg];
14697 else
14698 s = names16[code - eAX_reg];
14699 used_prefixes |= (prefixes & PREFIX_DATA);
14700 }
252b5132 14701 break;
52fd6d94 14702 case z_mode_ax_reg:
161a04f6 14703 if ((rex & REX_W) || (sizeflag & DFLAG))
52fd6d94
JB
14704 s = *names32;
14705 else
14706 s = *names16;
161a04f6 14707 if (!(rex & REX_W))
52fd6d94
JB
14708 used_prefixes |= (prefixes & PREFIX_DATA);
14709 break;
252b5132
RH
14710 default:
14711 s = INTERNAL_DISASSEMBLER_ERROR;
14712 break;
14713 }
14714 oappend (s);
14715}
14716
14717static void
26ca5450 14718OP_I (int bytemode, int sizeflag)
252b5132 14719{
52b15da3
JH
14720 bfd_signed_vma op;
14721 bfd_signed_vma mask = -1;
252b5132
RH
14722
14723 switch (bytemode)
14724 {
14725 case b_mode:
14726 FETCH_DATA (the_info, codep + 1);
52b15da3
JH
14727 op = *codep++;
14728 mask = 0xff;
14729 break;
14730 case q_mode:
cb712a9e 14731 if (address_mode == mode_64bit)
6439fc28
AM
14732 {
14733 op = get32s ();
14734 break;
14735 }
6608db57 14736 /* Fall through. */
252b5132 14737 case v_mode:
161a04f6
L
14738 USED_REX (REX_W);
14739 if (rex & REX_W)
52b15da3 14740 op = get32s ();
252b5132 14741 else
52b15da3 14742 {
f16cd0d5
L
14743 if (sizeflag & DFLAG)
14744 {
14745 op = get32 ();
14746 mask = 0xffffffff;
14747 }
14748 else
14749 {
14750 op = get16 ();
14751 mask = 0xfffff;
14752 }
14753 used_prefixes |= (prefixes & PREFIX_DATA);
52b15da3 14754 }
252b5132
RH
14755 break;
14756 case w_mode:
52b15da3 14757 mask = 0xfffff;
252b5132
RH
14758 op = get16 ();
14759 break;
9306ca4a
JB
14760 case const_1_mode:
14761 if (intel_syntax)
6c067bbb 14762 oappend ("1");
9306ca4a 14763 return;
252b5132
RH
14764 default:
14765 oappend (INTERNAL_DISASSEMBLER_ERROR);
14766 return;
14767 }
14768
52b15da3
JH
14769 op &= mask;
14770 scratchbuf[0] = '$';
d708bcba 14771 print_operand_value (scratchbuf + 1, 1, op);
9ce09ba2 14772 oappend_maybe_intel (scratchbuf);
52b15da3
JH
14773 scratchbuf[0] = '\0';
14774}
14775
14776static void
26ca5450 14777OP_I64 (int bytemode, int sizeflag)
52b15da3
JH
14778{
14779 bfd_signed_vma op;
14780 bfd_signed_vma mask = -1;
14781
cb712a9e 14782 if (address_mode != mode_64bit)
6439fc28
AM
14783 {
14784 OP_I (bytemode, sizeflag);
14785 return;
14786 }
14787
52b15da3
JH
14788 switch (bytemode)
14789 {
14790 case b_mode:
14791 FETCH_DATA (the_info, codep + 1);
14792 op = *codep++;
14793 mask = 0xff;
14794 break;
14795 case v_mode:
161a04f6
L
14796 USED_REX (REX_W);
14797 if (rex & REX_W)
52b15da3 14798 op = get64 ();
52b15da3
JH
14799 else
14800 {
f16cd0d5
L
14801 if (sizeflag & DFLAG)
14802 {
14803 op = get32 ();
14804 mask = 0xffffffff;
14805 }
14806 else
14807 {
14808 op = get16 ();
14809 mask = 0xfffff;
14810 }
14811 used_prefixes |= (prefixes & PREFIX_DATA);
52b15da3 14812 }
52b15da3
JH
14813 break;
14814 case w_mode:
14815 mask = 0xfffff;
14816 op = get16 ();
14817 break;
14818 default:
14819 oappend (INTERNAL_DISASSEMBLER_ERROR);
14820 return;
14821 }
14822
14823 op &= mask;
14824 scratchbuf[0] = '$';
d708bcba 14825 print_operand_value (scratchbuf + 1, 1, op);
9ce09ba2 14826 oappend_maybe_intel (scratchbuf);
252b5132
RH
14827 scratchbuf[0] = '\0';
14828}
14829
14830static void
26ca5450 14831OP_sI (int bytemode, int sizeflag)
252b5132 14832{
52b15da3 14833 bfd_signed_vma op;
252b5132
RH
14834
14835 switch (bytemode)
14836 {
14837 case b_mode:
e3949f17 14838 case b_T_mode:
252b5132
RH
14839 FETCH_DATA (the_info, codep + 1);
14840 op = *codep++;
14841 if ((op & 0x80) != 0)
14842 op -= 0x100;
e3949f17
L
14843 if (bytemode == b_T_mode)
14844 {
14845 if (address_mode != mode_64bit
7bb15c6f 14846 || !((sizeflag & DFLAG) || (rex & REX_W)))
e3949f17 14847 {
6c067bbb
RM
14848 /* The operand-size prefix is overridden by a REX prefix. */
14849 if ((sizeflag & DFLAG) || (rex & REX_W))
e3949f17
L
14850 op &= 0xffffffff;
14851 else
14852 op &= 0xffff;
14853 }
14854 }
14855 else
14856 {
14857 if (!(rex & REX_W))
14858 {
14859 if (sizeflag & DFLAG)
14860 op &= 0xffffffff;
14861 else
14862 op &= 0xffff;
14863 }
14864 }
252b5132
RH
14865 break;
14866 case v_mode:
7bb15c6f
RM
14867 /* The operand-size prefix is overridden by a REX prefix. */
14868 if ((sizeflag & DFLAG) || (rex & REX_W))
52b15da3 14869 op = get32s ();
252b5132 14870 else
d9e3625e 14871 op = get16 ();
252b5132
RH
14872 break;
14873 default:
14874 oappend (INTERNAL_DISASSEMBLER_ERROR);
14875 return;
14876 }
52b15da3
JH
14877
14878 scratchbuf[0] = '$';
14879 print_operand_value (scratchbuf + 1, 1, op);
9ce09ba2 14880 oappend_maybe_intel (scratchbuf);
252b5132
RH
14881}
14882
14883static void
26ca5450 14884OP_J (int bytemode, int sizeflag)
252b5132 14885{
52b15da3 14886 bfd_vma disp;
7081ff04 14887 bfd_vma mask = -1;
65ca155d 14888 bfd_vma segment = 0;
252b5132
RH
14889
14890 switch (bytemode)
14891 {
14892 case b_mode:
14893 FETCH_DATA (the_info, codep + 1);
14894 disp = *codep++;
14895 if ((disp & 0x80) != 0)
14896 disp -= 0x100;
14897 break;
14898 case v_mode:
5db04b09
L
14899 if (isa64 == amd64)
14900 USED_REX (REX_W);
14901 if ((sizeflag & DFLAG)
14902 || (address_mode == mode_64bit
14903 && (isa64 != amd64 || (rex & REX_W))))
52b15da3 14904 disp = get32s ();
252b5132
RH
14905 else
14906 {
14907 disp = get16 ();
206717e8
L
14908 if ((disp & 0x8000) != 0)
14909 disp -= 0x10000;
65ca155d
L
14910 /* In 16bit mode, address is wrapped around at 64k within
14911 the same segment. Otherwise, a data16 prefix on a jump
14912 instruction means that the pc is masked to 16 bits after
14913 the displacement is added! */
14914 mask = 0xffff;
14915 if ((prefixes & PREFIX_DATA) == 0)
4fd7268a 14916 segment = ((start_pc + (codep - start_codep))
65ca155d 14917 & ~((bfd_vma) 0xffff));
252b5132 14918 }
5db04b09
L
14919 if (address_mode != mode_64bit
14920 || (isa64 == amd64 && !(rex & REX_W)))
f16cd0d5 14921 used_prefixes |= (prefixes & PREFIX_DATA);
252b5132
RH
14922 break;
14923 default:
14924 oappend (INTERNAL_DISASSEMBLER_ERROR);
14925 return;
14926 }
42d5f9c6 14927 disp = ((start_pc + (codep - start_codep) + disp) & mask) | segment;
52b15da3
JH
14928 set_op (disp, 0);
14929 print_operand_value (scratchbuf, 1, disp);
252b5132
RH
14930 oappend (scratchbuf);
14931}
14932
252b5132 14933static void
ed7841b3 14934OP_SEG (int bytemode, int sizeflag)
252b5132 14935{
ed7841b3 14936 if (bytemode == w_mode)
7967e09e 14937 oappend (names_seg[modrm.reg]);
ed7841b3 14938 else
7967e09e 14939 OP_E (modrm.mod == 3 ? bytemode : w_mode, sizeflag);
252b5132
RH
14940}
14941
14942static void
26ca5450 14943OP_DIR (int dummy ATTRIBUTE_UNUSED, int sizeflag)
252b5132
RH
14944{
14945 int seg, offset;
14946
c608c12e 14947 if (sizeflag & DFLAG)
252b5132 14948 {
c608c12e
AM
14949 offset = get32 ();
14950 seg = get16 ();
252b5132 14951 }
c608c12e
AM
14952 else
14953 {
14954 offset = get16 ();
14955 seg = get16 ();
14956 }
7d421014 14957 used_prefixes |= (prefixes & PREFIX_DATA);
d708bcba 14958 if (intel_syntax)
3f31e633 14959 sprintf (scratchbuf, "0x%x:0x%x", seg, offset);
d708bcba
AM
14960 else
14961 sprintf (scratchbuf, "$0x%x,$0x%x", seg, offset);
c608c12e 14962 oappend (scratchbuf);
252b5132
RH
14963}
14964
252b5132 14965static void
3f31e633 14966OP_OFF (int bytemode, int sizeflag)
252b5132 14967{
52b15da3 14968 bfd_vma off;
252b5132 14969
3f31e633
JB
14970 if (intel_syntax && (sizeflag & SUFFIX_ALWAYS))
14971 intel_operand_size (bytemode, sizeflag);
252b5132
RH
14972 append_seg ();
14973
cb712a9e 14974 if ((sizeflag & AFLAG) || address_mode == mode_64bit)
252b5132
RH
14975 off = get32 ();
14976 else
14977 off = get16 ();
14978
14979 if (intel_syntax)
14980 {
285ca992 14981 if (!active_seg_prefix)
252b5132 14982 {
d708bcba 14983 oappend (names_seg[ds_reg - es_reg]);
252b5132
RH
14984 oappend (":");
14985 }
14986 }
52b15da3
JH
14987 print_operand_value (scratchbuf, 1, off);
14988 oappend (scratchbuf);
14989}
6439fc28 14990
52b15da3 14991static void
3f31e633 14992OP_OFF64 (int bytemode, int sizeflag)
52b15da3
JH
14993{
14994 bfd_vma off;
14995
539e75ad
L
14996 if (address_mode != mode_64bit
14997 || (prefixes & PREFIX_ADDR))
6439fc28
AM
14998 {
14999 OP_OFF (bytemode, sizeflag);
15000 return;
15001 }
15002
3f31e633
JB
15003 if (intel_syntax && (sizeflag & SUFFIX_ALWAYS))
15004 intel_operand_size (bytemode, sizeflag);
52b15da3
JH
15005 append_seg ();
15006
6608db57 15007 off = get64 ();
52b15da3
JH
15008
15009 if (intel_syntax)
15010 {
285ca992 15011 if (!active_seg_prefix)
52b15da3 15012 {
d708bcba 15013 oappend (names_seg[ds_reg - es_reg]);
52b15da3
JH
15014 oappend (":");
15015 }
15016 }
15017 print_operand_value (scratchbuf, 1, off);
252b5132
RH
15018 oappend (scratchbuf);
15019}
15020
15021static void
26ca5450 15022ptr_reg (int code, int sizeflag)
252b5132 15023{
2da11e11 15024 const char *s;
d708bcba 15025
1d9f512f 15026 *obufp++ = open_char;
20f0a1fc 15027 used_prefixes |= (prefixes & PREFIX_ADDR);
cb712a9e 15028 if (address_mode == mode_64bit)
c1a64871
JH
15029 {
15030 if (!(sizeflag & AFLAG))
db6eb5be 15031 s = names32[code - eAX_reg];
c1a64871 15032 else
db6eb5be 15033 s = names64[code - eAX_reg];
c1a64871 15034 }
52b15da3 15035 else if (sizeflag & AFLAG)
252b5132
RH
15036 s = names32[code - eAX_reg];
15037 else
15038 s = names16[code - eAX_reg];
15039 oappend (s);
1d9f512f
AM
15040 *obufp++ = close_char;
15041 *obufp = 0;
252b5132
RH
15042}
15043
15044static void
26ca5450 15045OP_ESreg (int code, int sizeflag)
252b5132 15046{
9306ca4a 15047 if (intel_syntax)
52fd6d94
JB
15048 {
15049 switch (codep[-1])
15050 {
15051 case 0x6d: /* insw/insl */
15052 intel_operand_size (z_mode, sizeflag);
15053 break;
15054 case 0xa5: /* movsw/movsl/movsq */
15055 case 0xa7: /* cmpsw/cmpsl/cmpsq */
15056 case 0xab: /* stosw/stosl */
15057 case 0xaf: /* scasw/scasl */
15058 intel_operand_size (v_mode, sizeflag);
15059 break;
15060 default:
15061 intel_operand_size (b_mode, sizeflag);
15062 }
15063 }
9ce09ba2 15064 oappend_maybe_intel ("%es:");
252b5132
RH
15065 ptr_reg (code, sizeflag);
15066}
15067
15068static void
26ca5450 15069OP_DSreg (int code, int sizeflag)
252b5132 15070{
9306ca4a 15071 if (intel_syntax)
52fd6d94
JB
15072 {
15073 switch (codep[-1])
15074 {
15075 case 0x6f: /* outsw/outsl */
15076 intel_operand_size (z_mode, sizeflag);
15077 break;
15078 case 0xa5: /* movsw/movsl/movsq */
15079 case 0xa7: /* cmpsw/cmpsl/cmpsq */
15080 case 0xad: /* lodsw/lodsl/lodsq */
15081 intel_operand_size (v_mode, sizeflag);
15082 break;
15083 default:
15084 intel_operand_size (b_mode, sizeflag);
15085 }
15086 }
285ca992
L
15087 /* Set active_seg_prefix to PREFIX_DS if it is unset so that the
15088 default segment register DS is printed. */
15089 if (!active_seg_prefix)
15090 active_seg_prefix = PREFIX_DS;
6608db57 15091 append_seg ();
252b5132
RH
15092 ptr_reg (code, sizeflag);
15093}
15094
252b5132 15095static void
26ca5450 15096OP_C (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 15097{
9b60702d 15098 int add;
161a04f6 15099 if (rex & REX_R)
c4a530c5 15100 {
161a04f6 15101 USED_REX (REX_R);
c4a530c5
JB
15102 add = 8;
15103 }
cb712a9e 15104 else if (address_mode != mode_64bit && (prefixes & PREFIX_LOCK))
c4a530c5 15105 {
f16cd0d5 15106 all_prefixes[last_lock_prefix] = 0;
c4a530c5
JB
15107 used_prefixes |= PREFIX_LOCK;
15108 add = 8;
15109 }
9b60702d
L
15110 else
15111 add = 0;
7967e09e 15112 sprintf (scratchbuf, "%%cr%d", modrm.reg + add);
9ce09ba2 15113 oappend_maybe_intel (scratchbuf);
252b5132
RH
15114}
15115
252b5132 15116static void
26ca5450 15117OP_D (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 15118{
9b60702d 15119 int add;
161a04f6
L
15120 USED_REX (REX_R);
15121 if (rex & REX_R)
52b15da3 15122 add = 8;
9b60702d
L
15123 else
15124 add = 0;
d708bcba 15125 if (intel_syntax)
7967e09e 15126 sprintf (scratchbuf, "db%d", modrm.reg + add);
d708bcba 15127 else
7967e09e 15128 sprintf (scratchbuf, "%%db%d", modrm.reg + add);
252b5132
RH
15129 oappend (scratchbuf);
15130}
15131
252b5132 15132static void
26ca5450 15133OP_T (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 15134{
7967e09e 15135 sprintf (scratchbuf, "%%tr%d", modrm.reg);
9ce09ba2 15136 oappend_maybe_intel (scratchbuf);
252b5132
RH
15137}
15138
15139static void
6f74c397 15140OP_R (int bytemode, int sizeflag)
252b5132 15141{
68f34464
L
15142 /* Skip mod/rm byte. */
15143 MODRM_CHECK;
15144 codep++;
15145 OP_E_register (bytemode, sizeflag);
252b5132
RH
15146}
15147
15148static void
26ca5450 15149OP_MMX (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 15150{
b9733481
L
15151 int reg = modrm.reg;
15152 const char **names;
15153
041bd2e0
JH
15154 used_prefixes |= (prefixes & PREFIX_DATA);
15155 if (prefixes & PREFIX_DATA)
20f0a1fc 15156 {
b9733481 15157 names = names_xmm;
161a04f6
L
15158 USED_REX (REX_R);
15159 if (rex & REX_R)
b9733481 15160 reg += 8;
20f0a1fc 15161 }
041bd2e0 15162 else
b9733481
L
15163 names = names_mm;
15164 oappend (names[reg]);
252b5132
RH
15165}
15166
c608c12e 15167static void
c0f3af97 15168OP_XMM (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
c608c12e 15169{
b9733481
L
15170 int reg = modrm.reg;
15171 const char **names;
15172
161a04f6
L
15173 USED_REX (REX_R);
15174 if (rex & REX_R)
b9733481 15175 reg += 8;
43234a1e
L
15176 if (vex.evex)
15177 {
15178 if (!vex.r)
15179 reg += 16;
15180 }
15181
539f890d
L
15182 if (need_vex
15183 && bytemode != xmm_mode
43234a1e
L
15184 && bytemode != xmmq_mode
15185 && bytemode != evex_half_bcst_xmmq_mode
15186 && bytemode != ymm_mode
539f890d 15187 && bytemode != scalar_mode)
c0f3af97
L
15188 {
15189 switch (vex.length)
15190 {
15191 case 128:
b9733481 15192 names = names_xmm;
c0f3af97
L
15193 break;
15194 case 256:
5fc35d96
IT
15195 if (vex.w
15196 || (bytemode != vex_vsib_q_w_dq_mode
15197 && bytemode != vex_vsib_q_w_d_mode))
6c30d220
L
15198 names = names_ymm;
15199 else
15200 names = names_xmm;
c0f3af97 15201 break;
43234a1e
L
15202 case 512:
15203 names = names_zmm;
15204 break;
c0f3af97
L
15205 default:
15206 abort ();
15207 }
15208 }
43234a1e
L
15209 else if (bytemode == xmmq_mode
15210 || bytemode == evex_half_bcst_xmmq_mode)
15211 {
15212 switch (vex.length)
15213 {
15214 case 128:
15215 case 256:
15216 names = names_xmm;
15217 break;
15218 case 512:
15219 names = names_ymm;
15220 break;
15221 default:
15222 abort ();
15223 }
15224 }
15225 else if (bytemode == ymm_mode)
15226 names = names_ymm;
c0f3af97 15227 else
b9733481
L
15228 names = names_xmm;
15229 oappend (names[reg]);
c608c12e
AM
15230}
15231
252b5132 15232static void
26ca5450 15233OP_EM (int bytemode, int sizeflag)
252b5132 15234{
b9733481
L
15235 int reg;
15236 const char **names;
15237
7967e09e 15238 if (modrm.mod != 3)
252b5132 15239 {
b6169b20
L
15240 if (intel_syntax
15241 && (bytemode == v_mode || bytemode == v_swap_mode))
9306ca4a
JB
15242 {
15243 bytemode = (prefixes & PREFIX_DATA) ? x_mode : q_mode;
15244 used_prefixes |= (prefixes & PREFIX_DATA);
6c067bbb 15245 }
252b5132
RH
15246 OP_E (bytemode, sizeflag);
15247 return;
15248 }
15249
b6169b20
L
15250 if ((sizeflag & SUFFIX_ALWAYS) && bytemode == v_swap_mode)
15251 swap_operand ();
15252
6608db57 15253 /* Skip mod/rm byte. */
4bba6815 15254 MODRM_CHECK;
252b5132 15255 codep++;
041bd2e0 15256 used_prefixes |= (prefixes & PREFIX_DATA);
b9733481 15257 reg = modrm.rm;
041bd2e0 15258 if (prefixes & PREFIX_DATA)
20f0a1fc 15259 {
b9733481 15260 names = names_xmm;
161a04f6
L
15261 USED_REX (REX_B);
15262 if (rex & REX_B)
b9733481 15263 reg += 8;
20f0a1fc 15264 }
041bd2e0 15265 else
b9733481
L
15266 names = names_mm;
15267 oappend (names[reg]);
252b5132
RH
15268}
15269
246c51aa
L
15270/* cvt* are the only instructions in sse2 which have
15271 both SSE and MMX operands and also have 0x66 prefix
15272 in their opcode. 0x66 was originally used to differentiate
15273 between SSE and MMX instruction(operands). So we have to handle the
4d9567e0
MM
15274 cvt* separately using OP_EMC and OP_MXC */
15275static void
15276OP_EMC (int bytemode, int sizeflag)
15277{
7967e09e 15278 if (modrm.mod != 3)
4d9567e0
MM
15279 {
15280 if (intel_syntax && bytemode == v_mode)
15281 {
15282 bytemode = (prefixes & PREFIX_DATA) ? x_mode : q_mode;
15283 used_prefixes |= (prefixes & PREFIX_DATA);
6c067bbb 15284 }
4d9567e0
MM
15285 OP_E (bytemode, sizeflag);
15286 return;
15287 }
246c51aa 15288
4d9567e0
MM
15289 /* Skip mod/rm byte. */
15290 MODRM_CHECK;
15291 codep++;
15292 used_prefixes |= (prefixes & PREFIX_DATA);
b9733481 15293 oappend (names_mm[modrm.rm]);
4d9567e0
MM
15294}
15295
15296static void
15297OP_MXC (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
15298{
15299 used_prefixes |= (prefixes & PREFIX_DATA);
b9733481 15300 oappend (names_mm[modrm.reg]);
4d9567e0
MM
15301}
15302
c608c12e 15303static void
26ca5450 15304OP_EX (int bytemode, int sizeflag)
c608c12e 15305{
b9733481
L
15306 int reg;
15307 const char **names;
d6f574e0
L
15308
15309 /* Skip mod/rm byte. */
15310 MODRM_CHECK;
15311 codep++;
15312
7967e09e 15313 if (modrm.mod != 3)
c608c12e 15314 {
c1e679ec 15315 OP_E_memory (bytemode, sizeflag);
c608c12e
AM
15316 return;
15317 }
d6f574e0 15318
b9733481 15319 reg = modrm.rm;
161a04f6
L
15320 USED_REX (REX_B);
15321 if (rex & REX_B)
b9733481 15322 reg += 8;
43234a1e
L
15323 if (vex.evex)
15324 {
15325 USED_REX (REX_X);
15326 if ((rex & REX_X))
15327 reg += 16;
15328 }
c608c12e 15329
b6169b20 15330 if ((sizeflag & SUFFIX_ALWAYS)
fa99fab2
L
15331 && (bytemode == x_swap_mode
15332 || bytemode == d_swap_mode
7bb15c6f 15333 || bytemode == d_scalar_swap_mode
539f890d
L
15334 || bytemode == q_swap_mode
15335 || bytemode == q_scalar_swap_mode))
b6169b20
L
15336 swap_operand ();
15337
c0f3af97
L
15338 if (need_vex
15339 && bytemode != xmm_mode
6c30d220
L
15340 && bytemode != xmmdw_mode
15341 && bytemode != xmmqd_mode
15342 && bytemode != xmm_mb_mode
15343 && bytemode != xmm_mw_mode
15344 && bytemode != xmm_md_mode
15345 && bytemode != xmm_mq_mode
43234a1e 15346 && bytemode != xmm_mdq_mode
539f890d 15347 && bytemode != xmmq_mode
43234a1e
L
15348 && bytemode != evex_half_bcst_xmmq_mode
15349 && bytemode != ymm_mode
539f890d 15350 && bytemode != d_scalar_mode
7bb15c6f 15351 && bytemode != d_scalar_swap_mode
539f890d 15352 && bytemode != q_scalar_mode
1c480963
L
15353 && bytemode != q_scalar_swap_mode
15354 && bytemode != vex_scalar_w_dq_mode)
c0f3af97
L
15355 {
15356 switch (vex.length)
15357 {
15358 case 128:
b9733481 15359 names = names_xmm;
c0f3af97
L
15360 break;
15361 case 256:
b9733481 15362 names = names_ymm;
c0f3af97 15363 break;
43234a1e
L
15364 case 512:
15365 names = names_zmm;
15366 break;
c0f3af97
L
15367 default:
15368 abort ();
15369 }
15370 }
43234a1e
L
15371 else if (bytemode == xmmq_mode
15372 || bytemode == evex_half_bcst_xmmq_mode)
15373 {
15374 switch (vex.length)
15375 {
15376 case 128:
15377 case 256:
15378 names = names_xmm;
15379 break;
15380 case 512:
15381 names = names_ymm;
15382 break;
15383 default:
15384 abort ();
15385 }
15386 }
15387 else if (bytemode == ymm_mode)
15388 names = names_ymm;
c0f3af97 15389 else
b9733481
L
15390 names = names_xmm;
15391 oappend (names[reg]);
c608c12e
AM
15392}
15393
252b5132 15394static void
26ca5450 15395OP_MS (int bytemode, int sizeflag)
252b5132 15396{
7967e09e 15397 if (modrm.mod == 3)
2da11e11
AM
15398 OP_EM (bytemode, sizeflag);
15399 else
6608db57 15400 BadOp ();
252b5132
RH
15401}
15402
992aaec9 15403static void
26ca5450 15404OP_XS (int bytemode, int sizeflag)
992aaec9 15405{
7967e09e 15406 if (modrm.mod == 3)
992aaec9
AM
15407 OP_EX (bytemode, sizeflag);
15408 else
6608db57 15409 BadOp ();
992aaec9
AM
15410}
15411
cc0ec051
AM
15412static void
15413OP_M (int bytemode, int sizeflag)
15414{
7967e09e 15415 if (modrm.mod == 3)
75413a22
L
15416 /* bad bound,lea,lds,les,lfs,lgs,lss,cmpxchg8b,vmptrst modrm */
15417 BadOp ();
cc0ec051
AM
15418 else
15419 OP_E (bytemode, sizeflag);
15420}
15421
15422static void
15423OP_0f07 (int bytemode, int sizeflag)
15424{
7967e09e 15425 if (modrm.mod != 3 || modrm.rm != 0)
cc0ec051
AM
15426 BadOp ();
15427 else
15428 OP_E (bytemode, sizeflag);
15429}
15430
46e883c5 15431/* NOP is an alias of "xchg %ax,%ax" in 16bit mode, "xchg %eax,%eax" in
246c51aa 15432 32bit mode and "xchg %rax,%rax" in 64bit mode. */
46e883c5 15433
cc0ec051 15434static void
46e883c5 15435NOP_Fixup1 (int bytemode, int sizeflag)
cc0ec051 15436{
8b38ad71
L
15437 if ((prefixes & PREFIX_DATA) != 0
15438 || (rex != 0
15439 && rex != 0x48
15440 && address_mode == mode_64bit))
46e883c5
L
15441 OP_REG (bytemode, sizeflag);
15442 else
15443 strcpy (obuf, "nop");
15444}
15445
15446static void
15447NOP_Fixup2 (int bytemode, int sizeflag)
15448{
8b38ad71
L
15449 if ((prefixes & PREFIX_DATA) != 0
15450 || (rex != 0
15451 && rex != 0x48
15452 && address_mode == mode_64bit))
46e883c5 15453 OP_IMREG (bytemode, sizeflag);
cc0ec051
AM
15454}
15455
84037f8c 15456static const char *const Suffix3DNow[] = {
252b5132
RH
15457/* 00 */ NULL, NULL, NULL, NULL,
15458/* 04 */ NULL, NULL, NULL, NULL,
15459/* 08 */ NULL, NULL, NULL, NULL,
9e525108 15460/* 0C */ "pi2fw", "pi2fd", NULL, NULL,
252b5132
RH
15461/* 10 */ NULL, NULL, NULL, NULL,
15462/* 14 */ NULL, NULL, NULL, NULL,
15463/* 18 */ NULL, NULL, NULL, NULL,
9e525108 15464/* 1C */ "pf2iw", "pf2id", NULL, NULL,
252b5132
RH
15465/* 20 */ NULL, NULL, NULL, NULL,
15466/* 24 */ NULL, NULL, NULL, NULL,
15467/* 28 */ NULL, NULL, NULL, NULL,
15468/* 2C */ NULL, NULL, NULL, NULL,
15469/* 30 */ NULL, NULL, NULL, NULL,
15470/* 34 */ NULL, NULL, NULL, NULL,
15471/* 38 */ NULL, NULL, NULL, NULL,
15472/* 3C */ NULL, NULL, NULL, NULL,
15473/* 40 */ NULL, NULL, NULL, NULL,
15474/* 44 */ NULL, NULL, NULL, NULL,
15475/* 48 */ NULL, NULL, NULL, NULL,
15476/* 4C */ NULL, NULL, NULL, NULL,
15477/* 50 */ NULL, NULL, NULL, NULL,
15478/* 54 */ NULL, NULL, NULL, NULL,
15479/* 58 */ NULL, NULL, NULL, NULL,
15480/* 5C */ NULL, NULL, NULL, NULL,
15481/* 60 */ NULL, NULL, NULL, NULL,
15482/* 64 */ NULL, NULL, NULL, NULL,
15483/* 68 */ NULL, NULL, NULL, NULL,
15484/* 6C */ NULL, NULL, NULL, NULL,
15485/* 70 */ NULL, NULL, NULL, NULL,
15486/* 74 */ NULL, NULL, NULL, NULL,
15487/* 78 */ NULL, NULL, NULL, NULL,
15488/* 7C */ NULL, NULL, NULL, NULL,
15489/* 80 */ NULL, NULL, NULL, NULL,
15490/* 84 */ NULL, NULL, NULL, NULL,
9e525108
AM
15491/* 88 */ NULL, NULL, "pfnacc", NULL,
15492/* 8C */ NULL, NULL, "pfpnacc", NULL,
252b5132
RH
15493/* 90 */ "pfcmpge", NULL, NULL, NULL,
15494/* 94 */ "pfmin", NULL, "pfrcp", "pfrsqrt",
15495/* 98 */ NULL, NULL, "pfsub", NULL,
15496/* 9C */ NULL, NULL, "pfadd", NULL,
15497/* A0 */ "pfcmpgt", NULL, NULL, NULL,
15498/* A4 */ "pfmax", NULL, "pfrcpit1", "pfrsqit1",
15499/* A8 */ NULL, NULL, "pfsubr", NULL,
15500/* AC */ NULL, NULL, "pfacc", NULL,
15501/* B0 */ "pfcmpeq", NULL, NULL, NULL,
9beff690 15502/* B4 */ "pfmul", NULL, "pfrcpit2", "pmulhrw",
9e525108 15503/* B8 */ NULL, NULL, NULL, "pswapd",
252b5132
RH
15504/* BC */ NULL, NULL, NULL, "pavgusb",
15505/* C0 */ NULL, NULL, NULL, NULL,
15506/* C4 */ NULL, NULL, NULL, NULL,
15507/* C8 */ NULL, NULL, NULL, NULL,
15508/* CC */ NULL, NULL, NULL, NULL,
15509/* D0 */ NULL, NULL, NULL, NULL,
15510/* D4 */ NULL, NULL, NULL, NULL,
15511/* D8 */ NULL, NULL, NULL, NULL,
15512/* DC */ NULL, NULL, NULL, NULL,
15513/* E0 */ NULL, NULL, NULL, NULL,
15514/* E4 */ NULL, NULL, NULL, NULL,
15515/* E8 */ NULL, NULL, NULL, NULL,
15516/* EC */ NULL, NULL, NULL, NULL,
15517/* F0 */ NULL, NULL, NULL, NULL,
15518/* F4 */ NULL, NULL, NULL, NULL,
15519/* F8 */ NULL, NULL, NULL, NULL,
15520/* FC */ NULL, NULL, NULL, NULL,
15521};
15522
15523static void
26ca5450 15524OP_3DNowSuffix (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132
RH
15525{
15526 const char *mnemonic;
15527
15528 FETCH_DATA (the_info, codep + 1);
15529 /* AMD 3DNow! instructions are specified by an opcode suffix in the
15530 place where an 8-bit immediate would normally go. ie. the last
15531 byte of the instruction. */
ea397f5b 15532 obufp = mnemonicendp;
c608c12e 15533 mnemonic = Suffix3DNow[*codep++ & 0xff];
252b5132 15534 if (mnemonic)
2da11e11 15535 oappend (mnemonic);
252b5132
RH
15536 else
15537 {
15538 /* Since a variable sized modrm/sib chunk is between the start
15539 of the opcode (0x0f0f) and the opcode suffix, we need to do
15540 all the modrm processing first, and don't know until now that
15541 we have a bad opcode. This necessitates some cleaning up. */
ce518a5f
L
15542 op_out[0][0] = '\0';
15543 op_out[1][0] = '\0';
6608db57 15544 BadOp ();
252b5132 15545 }
ea397f5b 15546 mnemonicendp = obufp;
252b5132 15547}
c608c12e 15548
ea397f5b
L
15549static struct op simd_cmp_op[] =
15550{
15551 { STRING_COMMA_LEN ("eq") },
15552 { STRING_COMMA_LEN ("lt") },
15553 { STRING_COMMA_LEN ("le") },
15554 { STRING_COMMA_LEN ("unord") },
15555 { STRING_COMMA_LEN ("neq") },
15556 { STRING_COMMA_LEN ("nlt") },
15557 { STRING_COMMA_LEN ("nle") },
15558 { STRING_COMMA_LEN ("ord") }
c608c12e
AM
15559};
15560
15561static void
ad19981d 15562CMP_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
c608c12e
AM
15563{
15564 unsigned int cmp_type;
15565
15566 FETCH_DATA (the_info, codep + 1);
15567 cmp_type = *codep++ & 0xff;
c0f3af97 15568 if (cmp_type < ARRAY_SIZE (simd_cmp_op))
c608c12e 15569 {
ad19981d 15570 char suffix [3];
ea397f5b 15571 char *p = mnemonicendp - 2;
ad19981d
L
15572 suffix[0] = p[0];
15573 suffix[1] = p[1];
15574 suffix[2] = '\0';
ea397f5b
L
15575 sprintf (p, "%s%s", simd_cmp_op[cmp_type].name, suffix);
15576 mnemonicendp += simd_cmp_op[cmp_type].len;
c608c12e
AM
15577 }
15578 else
15579 {
ad19981d
L
15580 /* We have a reserved extension byte. Output it directly. */
15581 scratchbuf[0] = '$';
15582 print_operand_value (scratchbuf + 1, 1, cmp_type);
9ce09ba2 15583 oappend_maybe_intel (scratchbuf);
ad19981d 15584 scratchbuf[0] = '\0';
c608c12e
AM
15585 }
15586}
15587
9916071f
AP
15588static void
15589OP_Mwaitx (int bytemode ATTRIBUTE_UNUSED,
15590 int sizeflag ATTRIBUTE_UNUSED)
15591{
15592 /* mwaitx %eax,%ecx,%ebx */
15593 if (!intel_syntax)
15594 {
15595 const char **names = (address_mode == mode_64bit
15596 ? names64 : names32);
15597 strcpy (op_out[0], names[0]);
15598 strcpy (op_out[1], names[1]);
15599 strcpy (op_out[2], names[3]);
15600 two_source_ops = 1;
15601 }
15602 /* Skip mod/rm byte. */
15603 MODRM_CHECK;
15604 codep++;
15605}
15606
ca164297 15607static void
b844680a
L
15608OP_Mwait (int bytemode ATTRIBUTE_UNUSED,
15609 int sizeflag ATTRIBUTE_UNUSED)
15610{
15611 /* mwait %eax,%ecx */
15612 if (!intel_syntax)
15613 {
15614 const char **names = (address_mode == mode_64bit
15615 ? names64 : names32);
15616 strcpy (op_out[0], names[0]);
15617 strcpy (op_out[1], names[1]);
15618 two_source_ops = 1;
15619 }
15620 /* Skip mod/rm byte. */
15621 MODRM_CHECK;
15622 codep++;
15623}
15624
15625static void
15626OP_Monitor (int bytemode ATTRIBUTE_UNUSED,
15627 int sizeflag ATTRIBUTE_UNUSED)
ca164297 15628{
b844680a
L
15629 /* monitor %eax,%ecx,%edx" */
15630 if (!intel_syntax)
ca164297 15631 {
b844680a 15632 const char **op1_names;
cb712a9e
L
15633 const char **names = (address_mode == mode_64bit
15634 ? names64 : names32);
1d9f512f 15635
b844680a
L
15636 if (!(prefixes & PREFIX_ADDR))
15637 op1_names = (address_mode == mode_16bit
15638 ? names16 : names);
ca164297
L
15639 else
15640 {
b844680a 15641 /* Remove "addr16/addr32". */
f16cd0d5 15642 all_prefixes[last_addr_prefix] = 0;
b844680a
L
15643 op1_names = (address_mode != mode_32bit
15644 ? names32 : names16);
15645 used_prefixes |= PREFIX_ADDR;
ca164297 15646 }
b844680a
L
15647 strcpy (op_out[0], op1_names[0]);
15648 strcpy (op_out[1], names[1]);
15649 strcpy (op_out[2], names[2]);
15650 two_source_ops = 1;
ca164297 15651 }
b844680a
L
15652 /* Skip mod/rm byte. */
15653 MODRM_CHECK;
15654 codep++;
30123838
JB
15655}
15656
6608db57
KH
15657static void
15658BadOp (void)
2da11e11 15659{
6608db57
KH
15660 /* Throw away prefixes and 1st. opcode byte. */
15661 codep = insn_codep + 1;
2da11e11
AM
15662 oappend ("(bad)");
15663}
4cc91dba 15664
35c52694
L
15665static void
15666REP_Fixup (int bytemode, int sizeflag)
15667{
15668 /* The 0xf3 prefix should be displayed as "rep" for ins, outs, movs,
15669 lods and stos. */
35c52694 15670 if (prefixes & PREFIX_REPZ)
f16cd0d5 15671 all_prefixes[last_repz_prefix] = REP_PREFIX;
35c52694
L
15672
15673 switch (bytemode)
15674 {
15675 case al_reg:
15676 case eAX_reg:
15677 case indir_dx_reg:
15678 OP_IMREG (bytemode, sizeflag);
15679 break;
15680 case eDI_reg:
15681 OP_ESreg (bytemode, sizeflag);
15682 break;
15683 case eSI_reg:
15684 OP_DSreg (bytemode, sizeflag);
15685 break;
15686 default:
15687 abort ();
15688 break;
15689 }
15690}
f5804c90 15691
7e8b059b
L
15692/* For BND-prefixed instructions 0xF2 prefix should be displayed as
15693 "bnd". */
15694
15695static void
15696BND_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
15697{
15698 if (prefixes & PREFIX_REPNZ)
15699 all_prefixes[last_repnz_prefix] = BND_PREFIX;
15700}
15701
04ef582a
L
15702/* For NOTRACK-prefixed instructions, 0x3E prefix should be displayed as
15703 "notrack". */
15704
15705static void
15706NOTRACK_Fixup (int bytemode ATTRIBUTE_UNUSED,
15707 int sizeflag ATTRIBUTE_UNUSED)
15708{
9fef80d6 15709 if (active_seg_prefix == PREFIX_DS
04ef582a
L
15710 && (address_mode != mode_64bit || last_data_prefix < 0))
15711 {
4e9ac44a 15712 /* NOTRACK prefix is only valid on indirect branch instructions.
9fef80d6 15713 NB: DATA prefix is unsupported for Intel64. */
04ef582a
L
15714 active_seg_prefix = 0;
15715 all_prefixes[last_seg_prefix] = NOTRACK_PREFIX;
15716 }
15717}
15718
42164a71
L
15719/* Similar to OP_E. But the 0xf2/0xf3 prefixes should be displayed as
15720 "xacquire"/"xrelease" for memory operand if there is a LOCK prefix.
15721 */
15722
15723static void
15724HLE_Fixup1 (int bytemode, int sizeflag)
15725{
15726 if (modrm.mod != 3
15727 && (prefixes & PREFIX_LOCK) != 0)
15728 {
15729 if (prefixes & PREFIX_REPZ)
15730 all_prefixes[last_repz_prefix] = XRELEASE_PREFIX;
15731 if (prefixes & PREFIX_REPNZ)
15732 all_prefixes[last_repnz_prefix] = XACQUIRE_PREFIX;
15733 }
15734
15735 OP_E (bytemode, sizeflag);
15736}
15737
15738/* Similar to OP_E. But the 0xf2/0xf3 prefixes should be displayed as
15739 "xacquire"/"xrelease" for memory operand. No check for LOCK prefix.
15740 */
15741
15742static void
15743HLE_Fixup2 (int bytemode, int sizeflag)
15744{
15745 if (modrm.mod != 3)
15746 {
15747 if (prefixes & PREFIX_REPZ)
15748 all_prefixes[last_repz_prefix] = XRELEASE_PREFIX;
15749 if (prefixes & PREFIX_REPNZ)
15750 all_prefixes[last_repnz_prefix] = XACQUIRE_PREFIX;
15751 }
15752
15753 OP_E (bytemode, sizeflag);
15754}
15755
15756/* Similar to OP_E. But the 0xf3 prefixes should be displayed as
15757 "xrelease" for memory operand. No check for LOCK prefix. */
15758
15759static void
15760HLE_Fixup3 (int bytemode, int sizeflag)
15761{
15762 if (modrm.mod != 3
15763 && last_repz_prefix > last_repnz_prefix
15764 && (prefixes & PREFIX_REPZ) != 0)
15765 all_prefixes[last_repz_prefix] = XRELEASE_PREFIX;
15766
15767 OP_E (bytemode, sizeflag);
15768}
15769
f5804c90
L
15770static void
15771CMPXCHG8B_Fixup (int bytemode, int sizeflag)
15772{
161a04f6
L
15773 USED_REX (REX_W);
15774 if (rex & REX_W)
f5804c90
L
15775 {
15776 /* Change cmpxchg8b to cmpxchg16b. */
ea397f5b
L
15777 char *p = mnemonicendp - 2;
15778 mnemonicendp = stpcpy (p, "16b");
fb9c77c7 15779 bytemode = o_mode;
f5804c90 15780 }
42164a71
L
15781 else if ((prefixes & PREFIX_LOCK) != 0)
15782 {
15783 if (prefixes & PREFIX_REPZ)
15784 all_prefixes[last_repz_prefix] = XRELEASE_PREFIX;
15785 if (prefixes & PREFIX_REPNZ)
15786 all_prefixes[last_repnz_prefix] = XACQUIRE_PREFIX;
15787 }
15788
f5804c90
L
15789 OP_M (bytemode, sizeflag);
15790}
42903f7f
L
15791
15792static void
15793XMM_Fixup (int reg, int sizeflag ATTRIBUTE_UNUSED)
15794{
b9733481
L
15795 const char **names;
15796
c0f3af97
L
15797 if (need_vex)
15798 {
15799 switch (vex.length)
15800 {
15801 case 128:
b9733481 15802 names = names_xmm;
c0f3af97
L
15803 break;
15804 case 256:
b9733481 15805 names = names_ymm;
c0f3af97
L
15806 break;
15807 default:
15808 abort ();
15809 }
15810 }
15811 else
b9733481
L
15812 names = names_xmm;
15813 oappend (names[reg]);
42903f7f 15814}
381d071f
L
15815
15816static void
15817CRC32_Fixup (int bytemode, int sizeflag)
15818{
15819 /* Add proper suffix to "crc32". */
ea397f5b 15820 char *p = mnemonicendp;
381d071f
L
15821
15822 switch (bytemode)
15823 {
15824 case b_mode:
20592a94 15825 if (intel_syntax)
ea397f5b 15826 goto skip;
20592a94 15827
381d071f
L
15828 *p++ = 'b';
15829 break;
15830 case v_mode:
20592a94 15831 if (intel_syntax)
ea397f5b 15832 goto skip;
20592a94 15833
381d071f
L
15834 USED_REX (REX_W);
15835 if (rex & REX_W)
15836 *p++ = 'q';
7bb15c6f 15837 else
f16cd0d5
L
15838 {
15839 if (sizeflag & DFLAG)
15840 *p++ = 'l';
15841 else
15842 *p++ = 'w';
15843 used_prefixes |= (prefixes & PREFIX_DATA);
15844 }
381d071f
L
15845 break;
15846 default:
15847 oappend (INTERNAL_DISASSEMBLER_ERROR);
15848 break;
15849 }
ea397f5b 15850 mnemonicendp = p;
381d071f
L
15851 *p = '\0';
15852
ea397f5b 15853skip:
381d071f
L
15854 if (modrm.mod == 3)
15855 {
15856 int add;
15857
15858 /* Skip mod/rm byte. */
15859 MODRM_CHECK;
15860 codep++;
15861
15862 USED_REX (REX_B);
15863 add = (rex & REX_B) ? 8 : 0;
15864 if (bytemode == b_mode)
15865 {
15866 USED_REX (0);
15867 if (rex)
15868 oappend (names8rex[modrm.rm + add]);
15869 else
15870 oappend (names8[modrm.rm + add]);
15871 }
15872 else
15873 {
15874 USED_REX (REX_W);
15875 if (rex & REX_W)
15876 oappend (names64[modrm.rm + add]);
15877 else if ((prefixes & PREFIX_DATA))
15878 oappend (names16[modrm.rm + add]);
15879 else
15880 oappend (names32[modrm.rm + add]);
15881 }
15882 }
15883 else
9344ff29 15884 OP_E (bytemode, sizeflag);
381d071f 15885}
85f10a01 15886
eacc9c89
L
15887static void
15888FXSAVE_Fixup (int bytemode, int sizeflag)
15889{
15890 /* Add proper suffix to "fxsave" and "fxrstor". */
15891 USED_REX (REX_W);
15892 if (rex & REX_W)
15893 {
15894 char *p = mnemonicendp;
15895 *p++ = '6';
15896 *p++ = '4';
15897 *p = '\0';
15898 mnemonicendp = p;
15899 }
15900 OP_M (bytemode, sizeflag);
15901}
15902
15c7c1d8
JB
15903static void
15904PCMPESTR_Fixup (int bytemode, int sizeflag)
15905{
15906 /* Add proper suffix to "{,v}pcmpestr{i,m}". */
15907 if (!intel_syntax)
15908 {
15909 char *p = mnemonicendp;
15910
15911 USED_REX (REX_W);
15912 if (rex & REX_W)
15913 *p++ = 'q';
15914 else if (sizeflag & SUFFIX_ALWAYS)
15915 *p++ = 'l';
15916
15917 *p = '\0';
15918 mnemonicendp = p;
15919 }
15920
15921 OP_EX (bytemode, sizeflag);
15922}
15923
c0f3af97
L
15924/* Display the destination register operand for instructions with
15925 VEX. */
15926
15927static void
15928OP_VEX (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
15929{
539f890d 15930 int reg;
b9733481
L
15931 const char **names;
15932
c0f3af97
L
15933 if (!need_vex)
15934 abort ();
15935
15936 if (!need_vex_reg)
15937 return;
15938
539f890d 15939 reg = vex.register_specifier;
63c6fc6c 15940 vex.register_specifier = 0;
5f847646
JB
15941 if (address_mode != mode_64bit)
15942 reg &= 7;
15943 else if (vex.evex && !vex.v)
15944 reg += 16;
43234a1e 15945
539f890d
L
15946 if (bytemode == vex_scalar_mode)
15947 {
15948 oappend (names_xmm[reg]);
15949 return;
15950 }
15951
c0f3af97
L
15952 switch (vex.length)
15953 {
15954 case 128:
15955 switch (bytemode)
15956 {
15957 case vex_mode:
15958 case vex128_mode:
6c30d220 15959 case vex_vsib_q_w_dq_mode:
5fc35d96 15960 case vex_vsib_q_w_d_mode:
cb21baef
L
15961 names = names_xmm;
15962 break;
15963 case dq_mode:
390a6789 15964 if (rex & REX_W)
cb21baef
L
15965 names = names64;
15966 else
15967 names = names32;
c0f3af97 15968 break;
1ba585e8 15969 case mask_bd_mode:
43234a1e 15970 case mask_mode:
9889cbb1
L
15971 if (reg > 0x7)
15972 {
15973 oappend ("(bad)");
15974 return;
15975 }
43234a1e
L
15976 names = names_mask;
15977 break;
c0f3af97
L
15978 default:
15979 abort ();
15980 return;
15981 }
c0f3af97
L
15982 break;
15983 case 256:
15984 switch (bytemode)
15985 {
15986 case vex_mode:
15987 case vex256_mode:
6c30d220
L
15988 names = names_ymm;
15989 break;
15990 case vex_vsib_q_w_dq_mode:
5fc35d96 15991 case vex_vsib_q_w_d_mode:
6c30d220 15992 names = vex.w ? names_ymm : names_xmm;
c0f3af97 15993 break;
1ba585e8 15994 case mask_bd_mode:
43234a1e 15995 case mask_mode:
9889cbb1
L
15996 if (reg > 0x7)
15997 {
15998 oappend ("(bad)");
15999 return;
16000 }
43234a1e
L
16001 names = names_mask;
16002 break;
c0f3af97 16003 default:
a37a2806
NC
16004 /* See PR binutils/20893 for a reproducer. */
16005 oappend ("(bad)");
c0f3af97
L
16006 return;
16007 }
c0f3af97 16008 break;
43234a1e
L
16009 case 512:
16010 names = names_zmm;
16011 break;
c0f3af97
L
16012 default:
16013 abort ();
16014 break;
16015 }
539f890d 16016 oappend (names[reg]);
c0f3af97
L
16017}
16018
922d8de8
DR
16019/* Get the VEX immediate byte without moving codep. */
16020
16021static unsigned char
ccc5981b 16022get_vex_imm8 (int sizeflag, int opnum)
922d8de8
DR
16023{
16024 int bytes_before_imm = 0;
16025
922d8de8
DR
16026 if (modrm.mod != 3)
16027 {
16028 /* There are SIB/displacement bytes. */
16029 if ((sizeflag & AFLAG) || address_mode == mode_64bit)
6c067bbb 16030 {
922d8de8 16031 /* 32/64 bit address mode */
6c067bbb 16032 int base = modrm.rm;
922d8de8
DR
16033
16034 /* Check SIB byte. */
6c067bbb
RM
16035 if (base == 4)
16036 {
16037 FETCH_DATA (the_info, codep + 1);
16038 base = *codep & 7;
16039 /* When decoding the third source, don't increase
16040 bytes_before_imm as this has already been incremented
16041 by one in OP_E_memory while decoding the second
16042 source operand. */
16043 if (opnum == 0)
16044 bytes_before_imm++;
16045 }
16046
16047 /* Don't increase bytes_before_imm when decoding the third source,
16048 it has already been incremented by OP_E_memory while decoding
16049 the second source operand. */
16050 if (opnum == 0)
16051 {
16052 switch (modrm.mod)
16053 {
16054 case 0:
16055 /* When modrm.rm == 5 or modrm.rm == 4 and base in
16056 SIB == 5, there is a 4 byte displacement. */
16057 if (base != 5)
16058 /* No displacement. */
16059 break;
1a0670f3 16060 /* Fall through. */
6c067bbb
RM
16061 case 2:
16062 /* 4 byte displacement. */
16063 bytes_before_imm += 4;
16064 break;
16065 case 1:
16066 /* 1 byte displacement. */
16067 bytes_before_imm++;
16068 break;
16069 }
16070 }
16071 }
922d8de8 16072 else
02e647f9
SP
16073 {
16074 /* 16 bit address mode */
6c067bbb
RM
16075 /* Don't increase bytes_before_imm when decoding the third source,
16076 it has already been incremented by OP_E_memory while decoding
16077 the second source operand. */
16078 if (opnum == 0)
16079 {
02e647f9
SP
16080 switch (modrm.mod)
16081 {
16082 case 0:
16083 /* When modrm.rm == 6, there is a 2 byte displacement. */
16084 if (modrm.rm != 6)
16085 /* No displacement. */
16086 break;
1a0670f3 16087 /* Fall through. */
02e647f9
SP
16088 case 2:
16089 /* 2 byte displacement. */
16090 bytes_before_imm += 2;
16091 break;
16092 case 1:
16093 /* 1 byte displacement: when decoding the third source,
16094 don't increase bytes_before_imm as this has already
16095 been incremented by one in OP_E_memory while decoding
16096 the second source operand. */
16097 if (opnum == 0)
16098 bytes_before_imm++;
ccc5981b 16099
02e647f9
SP
16100 break;
16101 }
922d8de8
DR
16102 }
16103 }
16104 }
16105
16106 FETCH_DATA (the_info, codep + bytes_before_imm + 1);
16107 return codep [bytes_before_imm];
16108}
16109
16110static void
16111OP_EX_VexReg (int bytemode, int sizeflag, int reg)
16112{
b9733481
L
16113 const char **names;
16114
922d8de8
DR
16115 if (reg == -1 && modrm.mod != 3)
16116 {
16117 OP_E_memory (bytemode, sizeflag);
16118 return;
16119 }
16120 else
16121 {
16122 if (reg == -1)
16123 {
16124 reg = modrm.rm;
16125 USED_REX (REX_B);
16126 if (rex & REX_B)
16127 reg += 8;
16128 }
5f847646
JB
16129 if (address_mode != mode_64bit)
16130 reg &= 7;
922d8de8
DR
16131 }
16132
16133 switch (vex.length)
16134 {
16135 case 128:
b9733481 16136 names = names_xmm;
922d8de8
DR
16137 break;
16138 case 256:
b9733481 16139 names = names_ymm;
922d8de8
DR
16140 break;
16141 default:
16142 abort ();
16143 }
b9733481 16144 oappend (names[reg]);
922d8de8
DR
16145}
16146
a683cc34
SP
16147static void
16148OP_EX_VexImmW (int bytemode, int sizeflag)
16149{
16150 int reg = -1;
16151 static unsigned char vex_imm8;
16152
16153 if (vex_w_done == 0)
16154 {
16155 vex_w_done = 1;
16156
16157 /* Skip mod/rm byte. */
16158 MODRM_CHECK;
16159 codep++;
16160
16161 vex_imm8 = get_vex_imm8 (sizeflag, 0);
16162
16163 if (vex.w)
16164 reg = vex_imm8 >> 4;
16165
16166 OP_EX_VexReg (bytemode, sizeflag, reg);
16167 }
16168 else if (vex_w_done == 1)
16169 {
16170 vex_w_done = 2;
16171
16172 if (!vex.w)
16173 reg = vex_imm8 >> 4;
16174
16175 OP_EX_VexReg (bytemode, sizeflag, reg);
16176 }
16177 else
16178 {
16179 /* Output the imm8 directly. */
16180 scratchbuf[0] = '$';
16181 print_operand_value (scratchbuf + 1, 1, vex_imm8 & 0xf);
9ce09ba2 16182 oappend_maybe_intel (scratchbuf);
a683cc34
SP
16183 scratchbuf[0] = '\0';
16184 codep++;
16185 }
16186}
16187
5dd85c99
SP
16188static void
16189OP_Vex_2src (int bytemode, int sizeflag)
16190{
16191 if (modrm.mod == 3)
16192 {
b9733481 16193 int reg = modrm.rm;
5dd85c99 16194 USED_REX (REX_B);
b9733481
L
16195 if (rex & REX_B)
16196 reg += 8;
16197 oappend (names_xmm[reg]);
5dd85c99
SP
16198 }
16199 else
16200 {
16201 if (intel_syntax
16202 && (bytemode == v_mode || bytemode == v_swap_mode))
16203 {
16204 bytemode = (prefixes & PREFIX_DATA) ? x_mode : q_mode;
16205 used_prefixes |= (prefixes & PREFIX_DATA);
16206 }
16207 OP_E (bytemode, sizeflag);
16208 }
16209}
16210
16211static void
16212OP_Vex_2src_1 (int bytemode, int sizeflag)
16213{
16214 if (modrm.mod == 3)
16215 {
16216 /* Skip mod/rm byte. */
16217 MODRM_CHECK;
16218 codep++;
16219 }
16220
16221 if (vex.w)
5f847646
JB
16222 {
16223 unsigned int reg = vex.register_specifier;
63c6fc6c 16224 vex.register_specifier = 0;
5f847646
JB
16225
16226 if (address_mode != mode_64bit)
16227 reg &= 7;
16228 oappend (names_xmm[reg]);
16229 }
5dd85c99
SP
16230 else
16231 OP_Vex_2src (bytemode, sizeflag);
16232}
16233
16234static void
16235OP_Vex_2src_2 (int bytemode, int sizeflag)
16236{
16237 if (vex.w)
16238 OP_Vex_2src (bytemode, sizeflag);
16239 else
5f847646
JB
16240 {
16241 unsigned int reg = vex.register_specifier;
63c6fc6c 16242 vex.register_specifier = 0;
5f847646
JB
16243
16244 if (address_mode != mode_64bit)
16245 reg &= 7;
16246 oappend (names_xmm[reg]);
16247 }
5dd85c99
SP
16248}
16249
922d8de8
DR
16250static void
16251OP_EX_VexW (int bytemode, int sizeflag)
16252{
16253 int reg = -1;
16254
16255 if (!vex_w_done)
16256 {
41effecb
SP
16257 /* Skip mod/rm byte. */
16258 MODRM_CHECK;
16259 codep++;
16260
922d8de8 16261 if (vex.w)
ccc5981b 16262 reg = get_vex_imm8 (sizeflag, 0) >> 4;
922d8de8
DR
16263 }
16264 else
16265 {
16266 if (!vex.w)
ccc5981b 16267 reg = get_vex_imm8 (sizeflag, 1) >> 4;
922d8de8
DR
16268 }
16269
16270 OP_EX_VexReg (bytemode, sizeflag, reg);
922d8de8 16271
3a2430e0
JB
16272 if (vex_w_done)
16273 codep++;
16274 vex_w_done = 1;
922d8de8
DR
16275}
16276
c0f3af97
L
16277static void
16278OP_REG_VexI4 (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
16279{
16280 int reg;
b9733481
L
16281 const char **names;
16282
c0f3af97
L
16283 FETCH_DATA (the_info, codep + 1);
16284 reg = *codep++;
16285
16286 if (bytemode != x_mode)
16287 abort ();
16288
c0f3af97 16289 reg >>= 4;
5f847646
JB
16290 if (address_mode != mode_64bit)
16291 reg &= 7;
dae39acc 16292
c0f3af97
L
16293 switch (vex.length)
16294 {
16295 case 128:
b9733481 16296 names = names_xmm;
c0f3af97
L
16297 break;
16298 case 256:
b9733481 16299 names = names_ymm;
c0f3af97
L
16300 break;
16301 default:
16302 abort ();
16303 }
b9733481 16304 oappend (names[reg]);
c0f3af97
L
16305}
16306
922d8de8
DR
16307static void
16308OP_XMM_VexW (int bytemode, int sizeflag)
16309{
16310 /* Turn off the REX.W bit since it is used for swapping operands
16311 now. */
16312 rex &= ~REX_W;
16313 OP_XMM (bytemode, sizeflag);
16314}
16315
c0f3af97
L
16316static void
16317OP_EX_Vex (int bytemode, int sizeflag)
16318{
16319 if (modrm.mod != 3)
63c6fc6c 16320 need_vex_reg = 0;
c0f3af97
L
16321 OP_EX (bytemode, sizeflag);
16322}
16323
16324static void
16325OP_XMM_Vex (int bytemode, int sizeflag)
16326{
16327 if (modrm.mod != 3)
63c6fc6c 16328 need_vex_reg = 0;
c0f3af97
L
16329 OP_XMM (bytemode, sizeflag);
16330}
16331
ea397f5b
L
16332static struct op vex_cmp_op[] =
16333{
16334 { STRING_COMMA_LEN ("eq") },
16335 { STRING_COMMA_LEN ("lt") },
16336 { STRING_COMMA_LEN ("le") },
16337 { STRING_COMMA_LEN ("unord") },
16338 { STRING_COMMA_LEN ("neq") },
16339 { STRING_COMMA_LEN ("nlt") },
16340 { STRING_COMMA_LEN ("nle") },
16341 { STRING_COMMA_LEN ("ord") },
16342 { STRING_COMMA_LEN ("eq_uq") },
16343 { STRING_COMMA_LEN ("nge") },
16344 { STRING_COMMA_LEN ("ngt") },
16345 { STRING_COMMA_LEN ("false") },
16346 { STRING_COMMA_LEN ("neq_oq") },
16347 { STRING_COMMA_LEN ("ge") },
16348 { STRING_COMMA_LEN ("gt") },
16349 { STRING_COMMA_LEN ("true") },
16350 { STRING_COMMA_LEN ("eq_os") },
16351 { STRING_COMMA_LEN ("lt_oq") },
16352 { STRING_COMMA_LEN ("le_oq") },
16353 { STRING_COMMA_LEN ("unord_s") },
16354 { STRING_COMMA_LEN ("neq_us") },
16355 { STRING_COMMA_LEN ("nlt_uq") },
16356 { STRING_COMMA_LEN ("nle_uq") },
16357 { STRING_COMMA_LEN ("ord_s") },
16358 { STRING_COMMA_LEN ("eq_us") },
16359 { STRING_COMMA_LEN ("nge_uq") },
16360 { STRING_COMMA_LEN ("ngt_uq") },
16361 { STRING_COMMA_LEN ("false_os") },
16362 { STRING_COMMA_LEN ("neq_os") },
16363 { STRING_COMMA_LEN ("ge_oq") },
16364 { STRING_COMMA_LEN ("gt_oq") },
16365 { STRING_COMMA_LEN ("true_us") },
c0f3af97
L
16366};
16367
16368static void
16369VCMP_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
16370{
16371 unsigned int cmp_type;
16372
16373 FETCH_DATA (the_info, codep + 1);
16374 cmp_type = *codep++ & 0xff;
16375 if (cmp_type < ARRAY_SIZE (vex_cmp_op))
16376 {
16377 char suffix [3];
ea397f5b 16378 char *p = mnemonicendp - 2;
c0f3af97
L
16379 suffix[0] = p[0];
16380 suffix[1] = p[1];
16381 suffix[2] = '\0';
ea397f5b
L
16382 sprintf (p, "%s%s", vex_cmp_op[cmp_type].name, suffix);
16383 mnemonicendp += vex_cmp_op[cmp_type].len;
c0f3af97
L
16384 }
16385 else
16386 {
16387 /* We have a reserved extension byte. Output it directly. */
16388 scratchbuf[0] = '$';
16389 print_operand_value (scratchbuf + 1, 1, cmp_type);
9ce09ba2 16390 oappend_maybe_intel (scratchbuf);
c0f3af97
L
16391 scratchbuf[0] = '\0';
16392 }
16393}
16394
43234a1e
L
16395static void
16396VPCMP_Fixup (int bytemode ATTRIBUTE_UNUSED,
16397 int sizeflag ATTRIBUTE_UNUSED)
16398{
16399 unsigned int cmp_type;
16400
16401 if (!vex.evex)
16402 abort ();
16403
16404 FETCH_DATA (the_info, codep + 1);
16405 cmp_type = *codep++ & 0xff;
16406 /* There are aliases for immediates 0, 1, 2, 4, 5, 6.
16407 If it's the case, print suffix, otherwise - print the immediate. */
16408 if (cmp_type < ARRAY_SIZE (simd_cmp_op)
16409 && cmp_type != 3
16410 && cmp_type != 7)
16411 {
16412 char suffix [3];
16413 char *p = mnemonicendp - 2;
16414
16415 /* vpcmp* can have both one- and two-lettered suffix. */
16416 if (p[0] == 'p')
16417 {
16418 p++;
16419 suffix[0] = p[0];
16420 suffix[1] = '\0';
16421 }
16422 else
16423 {
16424 suffix[0] = p[0];
16425 suffix[1] = p[1];
16426 suffix[2] = '\0';
16427 }
16428
16429 sprintf (p, "%s%s", simd_cmp_op[cmp_type].name, suffix);
16430 mnemonicendp += simd_cmp_op[cmp_type].len;
16431 }
be92cb14
JB
16432 else
16433 {
16434 /* We have a reserved extension byte. Output it directly. */
16435 scratchbuf[0] = '$';
16436 print_operand_value (scratchbuf + 1, 1, cmp_type);
16437 oappend_maybe_intel (scratchbuf);
16438 scratchbuf[0] = '\0';
16439 }
16440}
16441
16442static const struct op xop_cmp_op[] =
16443{
16444 { STRING_COMMA_LEN ("lt") },
16445 { STRING_COMMA_LEN ("le") },
16446 { STRING_COMMA_LEN ("gt") },
16447 { STRING_COMMA_LEN ("ge") },
16448 { STRING_COMMA_LEN ("eq") },
16449 { STRING_COMMA_LEN ("neq") },
16450 { STRING_COMMA_LEN ("false") },
16451 { STRING_COMMA_LEN ("true") }
16452};
16453
16454static void
16455VPCOM_Fixup (int bytemode ATTRIBUTE_UNUSED,
16456 int sizeflag ATTRIBUTE_UNUSED)
16457{
16458 unsigned int cmp_type;
16459
16460 FETCH_DATA (the_info, codep + 1);
16461 cmp_type = *codep++ & 0xff;
16462 if (cmp_type < ARRAY_SIZE (xop_cmp_op))
16463 {
16464 char suffix[3];
16465 char *p = mnemonicendp - 2;
16466
16467 /* vpcom* can have both one- and two-lettered suffix. */
16468 if (p[0] == 'm')
16469 {
16470 p++;
16471 suffix[0] = p[0];
16472 suffix[1] = '\0';
16473 }
16474 else
16475 {
16476 suffix[0] = p[0];
16477 suffix[1] = p[1];
16478 suffix[2] = '\0';
16479 }
16480
16481 sprintf (p, "%s%s", xop_cmp_op[cmp_type].name, suffix);
16482 mnemonicendp += xop_cmp_op[cmp_type].len;
16483 }
43234a1e
L
16484 else
16485 {
16486 /* We have a reserved extension byte. Output it directly. */
16487 scratchbuf[0] = '$';
16488 print_operand_value (scratchbuf + 1, 1, cmp_type);
9ce09ba2 16489 oappend_maybe_intel (scratchbuf);
43234a1e
L
16490 scratchbuf[0] = '\0';
16491 }
16492}
16493
ea397f5b
L
16494static const struct op pclmul_op[] =
16495{
16496 { STRING_COMMA_LEN ("lql") },
16497 { STRING_COMMA_LEN ("hql") },
16498 { STRING_COMMA_LEN ("lqh") },
16499 { STRING_COMMA_LEN ("hqh") }
c0f3af97
L
16500};
16501
16502static void
16503PCLMUL_Fixup (int bytemode ATTRIBUTE_UNUSED,
16504 int sizeflag ATTRIBUTE_UNUSED)
16505{
16506 unsigned int pclmul_type;
16507
16508 FETCH_DATA (the_info, codep + 1);
16509 pclmul_type = *codep++ & 0xff;
16510 switch (pclmul_type)
16511 {
16512 case 0x10:
16513 pclmul_type = 2;
16514 break;
16515 case 0x11:
16516 pclmul_type = 3;
16517 break;
16518 default:
16519 break;
7bb15c6f 16520 }
c0f3af97
L
16521 if (pclmul_type < ARRAY_SIZE (pclmul_op))
16522 {
16523 char suffix [4];
ea397f5b 16524 char *p = mnemonicendp - 3;
c0f3af97
L
16525 suffix[0] = p[0];
16526 suffix[1] = p[1];
16527 suffix[2] = p[2];
16528 suffix[3] = '\0';
ea397f5b
L
16529 sprintf (p, "%s%s", pclmul_op[pclmul_type].name, suffix);
16530 mnemonicendp += pclmul_op[pclmul_type].len;
c0f3af97
L
16531 }
16532 else
16533 {
16534 /* We have a reserved extension byte. Output it directly. */
16535 scratchbuf[0] = '$';
16536 print_operand_value (scratchbuf + 1, 1, pclmul_type);
9ce09ba2 16537 oappend_maybe_intel (scratchbuf);
c0f3af97
L
16538 scratchbuf[0] = '\0';
16539 }
16540}
16541
f1f8f695
L
16542static void
16543MOVBE_Fixup (int bytemode, int sizeflag)
16544{
16545 /* Add proper suffix to "movbe". */
ea397f5b 16546 char *p = mnemonicendp;
f1f8f695
L
16547
16548 switch (bytemode)
16549 {
16550 case v_mode:
16551 if (intel_syntax)
ea397f5b 16552 goto skip;
f1f8f695
L
16553
16554 USED_REX (REX_W);
16555 if (sizeflag & SUFFIX_ALWAYS)
16556 {
16557 if (rex & REX_W)
16558 *p++ = 'q';
f1f8f695 16559 else
f16cd0d5
L
16560 {
16561 if (sizeflag & DFLAG)
16562 *p++ = 'l';
16563 else
16564 *p++ = 'w';
16565 used_prefixes |= (prefixes & PREFIX_DATA);
16566 }
f1f8f695 16567 }
f1f8f695
L
16568 break;
16569 default:
16570 oappend (INTERNAL_DISASSEMBLER_ERROR);
16571 break;
16572 }
ea397f5b 16573 mnemonicendp = p;
f1f8f695
L
16574 *p = '\0';
16575
ea397f5b 16576skip:
f1f8f695
L
16577 OP_M (bytemode, sizeflag);
16578}
f88c9eb0
SP
16579
16580static void
16581OP_LWPCB_E (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
16582{
16583 int reg;
16584 const char **names;
16585
16586 /* Skip mod/rm byte. */
16587 MODRM_CHECK;
16588 codep++;
16589
390a6789 16590 if (rex & REX_W)
f88c9eb0 16591 names = names64;
f88c9eb0 16592 else
ce7d077e 16593 names = names32;
f88c9eb0
SP
16594
16595 reg = modrm.rm;
16596 USED_REX (REX_B);
16597 if (rex & REX_B)
16598 reg += 8;
16599
16600 oappend (names[reg]);
16601}
16602
16603static void
16604OP_LWP_E (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
16605{
16606 const char **names;
5f847646 16607 unsigned int reg = vex.register_specifier;
63c6fc6c 16608 vex.register_specifier = 0;
f88c9eb0 16609
390a6789 16610 if (rex & REX_W)
f88c9eb0 16611 names = names64;
f88c9eb0 16612 else
ce7d077e 16613 names = names32;
f88c9eb0 16614
5f847646
JB
16615 if (address_mode != mode_64bit)
16616 reg &= 7;
16617 oappend (names[reg]);
f88c9eb0 16618}
43234a1e
L
16619
16620static void
16621OP_Mask (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
16622{
16623 if (!vex.evex
1ba585e8 16624 || (bytemode != mask_mode && bytemode != mask_bd_mode))
43234a1e
L
16625 abort ();
16626
16627 USED_REX (REX_R);
16628 if ((rex & REX_R) != 0 || !vex.r)
16629 {
16630 BadOp ();
16631 return;
16632 }
16633
16634 oappend (names_mask [modrm.reg]);
16635}
16636
16637static void
16638OP_Rounding (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
16639{
16640 if (!vex.evex
16641 || (bytemode != evex_rounding_mode
70df6fc9 16642 && bytemode != evex_rounding_64_mode
43234a1e
L
16643 && bytemode != evex_sae_mode))
16644 abort ();
16645 if (modrm.mod == 3 && vex.b)
16646 switch (bytemode)
16647 {
70df6fc9
L
16648 case evex_rounding_64_mode:
16649 if (address_mode != mode_64bit)
16650 {
16651 oappend ("(bad)");
16652 break;
16653 }
16654 /* Fall through. */
43234a1e
L
16655 case evex_rounding_mode:
16656 oappend (names_rounding[vex.ll]);
16657 break;
16658 case evex_sae_mode:
16659 oappend ("{sae}");
16660 break;
16661 default:
16662 break;
16663 }
16664}
This page took 3.274369 seconds and 4 git commands to generate.