Enable Intel AVX512_VNNI instructions.
[deliverable/binutils-gdb.git] / opcodes / i386-dis.c
CommitLineData
252b5132 1/* Print i386 instructions for GDB, the GNU debugger.
2571583a 2 Copyright (C) 1988-2017 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);
922d8de8 98static void VEXI4_Fixup (int, int);
c0f3af97
L
99static void VZERO_Fixup (int, int);
100static void VCMP_Fixup (int, int);
43234a1e 101static void VPCMP_Fixup (int, int);
cc0ec051 102static void OP_0f07 (int, int);
b844680a
L
103static void OP_Monitor (int, int);
104static void OP_Mwait (int, int);
9916071f 105static void OP_Mwaitx (int, int);
46e883c5
L
106static void NOP_Fixup1 (int, int);
107static void NOP_Fixup2 (int, int);
26ca5450 108static void OP_3DNowSuffix (int, int);
ad19981d 109static void CMP_Fixup (int, int);
26ca5450 110static void BadOp (void);
35c52694 111static void REP_Fixup (int, int);
7e8b059b 112static void BND_Fixup (int, int);
04ef582a 113static void NOTRACK_Fixup (int, int);
42164a71
L
114static void HLE_Fixup1 (int, int);
115static void HLE_Fixup2 (int, int);
116static void HLE_Fixup3 (int, int);
f5804c90 117static void CMPXCHG8B_Fixup (int, int);
42903f7f 118static void XMM_Fixup (int, int);
381d071f 119static void CRC32_Fixup (int, int);
eacc9c89 120static void FXSAVE_Fixup (int, int);
15c7c1d8 121static void PCMPESTR_Fixup (int, int);
f88c9eb0
SP
122static void OP_LWPCB_E (int, int);
123static void OP_LWP_E (int, int);
5dd85c99
SP
124static void OP_Vex_2src_1 (int, int);
125static void OP_Vex_2src_2 (int, int);
c1e679ec 126
f1f8f695 127static void MOVBE_Fixup (int, int);
252b5132 128
43234a1e
L
129static void OP_Mask (int, int);
130
6608db57 131struct dis_private {
252b5132
RH
132 /* Points to first byte not fetched. */
133 bfd_byte *max_fetched;
0b1cf022 134 bfd_byte the_buffer[MAX_MNEM_SIZE];
252b5132 135 bfd_vma insn_start;
e396998b 136 int orig_sizeflag;
8df14d78 137 OPCODES_SIGJMP_BUF bailout;
252b5132
RH
138};
139
cb712a9e
L
140enum address_mode
141{
142 mode_16bit,
143 mode_32bit,
144 mode_64bit
145};
146
147enum address_mode address_mode;
52b15da3 148
5076851f
ILT
149/* Flags for the prefixes for the current instruction. See below. */
150static int prefixes;
151
52b15da3
JH
152/* REX prefix the current instruction. See below. */
153static int rex;
154/* Bits of REX we've already used. */
155static int rex_used;
d869730d 156/* REX bits in original REX prefix ignored. */
c0f3af97 157static int rex_ignored;
52b15da3
JH
158/* Mark parts used in the REX prefix. When we are testing for
159 empty prefix (for 8bit register REX extension), just mask it
160 out. Otherwise test for REX bit is excuse for existence of REX
161 only in case value is nonzero. */
162#define USED_REX(value) \
163 { \
164 if (value) \
161a04f6
L
165 { \
166 if ((rex & value)) \
167 rex_used |= (value) | REX_OPCODE; \
168 } \
52b15da3 169 else \
161a04f6 170 rex_used |= REX_OPCODE; \
52b15da3
JH
171 }
172
7d421014
ILT
173/* Flags for prefixes which we somehow handled when printing the
174 current instruction. */
175static int used_prefixes;
176
5076851f
ILT
177/* Flags stored in PREFIXES. */
178#define PREFIX_REPZ 1
179#define PREFIX_REPNZ 2
180#define PREFIX_LOCK 4
181#define PREFIX_CS 8
182#define PREFIX_SS 0x10
183#define PREFIX_DS 0x20
184#define PREFIX_ES 0x40
185#define PREFIX_FS 0x80
186#define PREFIX_GS 0x100
187#define PREFIX_DATA 0x200
188#define PREFIX_ADDR 0x400
189#define PREFIX_FWAIT 0x800
190
252b5132
RH
191/* Make sure that bytes from INFO->PRIVATE_DATA->BUFFER (inclusive)
192 to ADDR (exclusive) are valid. Returns 1 for success, longjmps
193 on error. */
194#define FETCH_DATA(info, addr) \
6608db57 195 ((addr) <= ((struct dis_private *) (info->private_data))->max_fetched \
252b5132
RH
196 ? 1 : fetch_data ((info), (addr)))
197
198static int
26ca5450 199fetch_data (struct disassemble_info *info, bfd_byte *addr)
252b5132
RH
200{
201 int status;
6608db57 202 struct dis_private *priv = (struct dis_private *) info->private_data;
252b5132
RH
203 bfd_vma start = priv->insn_start + (priv->max_fetched - priv->the_buffer);
204
0b1cf022 205 if (addr <= priv->the_buffer + MAX_MNEM_SIZE)
272c9217
JB
206 status = (*info->read_memory_func) (start,
207 priv->max_fetched,
208 addr - priv->max_fetched,
209 info);
210 else
211 status = -1;
252b5132
RH
212 if (status != 0)
213 {
7d421014 214 /* If we did manage to read at least one byte, then
db6eb5be
AM
215 print_insn_i386 will do something sensible. Otherwise, print
216 an error. We do that here because this is where we know
217 STATUS. */
7d421014 218 if (priv->max_fetched == priv->the_buffer)
5076851f 219 (*info->memory_error_func) (status, start, info);
8df14d78 220 OPCODES_SIGLONGJMP (priv->bailout, 1);
252b5132
RH
221 }
222 else
223 priv->max_fetched = addr;
224 return 1;
225}
226
bf890a93 227/* Possible values for prefix requirement. */
507bd325
L
228#define PREFIX_IGNORED_SHIFT 16
229#define PREFIX_IGNORED_REPZ (PREFIX_REPZ << PREFIX_IGNORED_SHIFT)
230#define PREFIX_IGNORED_REPNZ (PREFIX_REPNZ << PREFIX_IGNORED_SHIFT)
231#define PREFIX_IGNORED_DATA (PREFIX_DATA << PREFIX_IGNORED_SHIFT)
232#define PREFIX_IGNORED_ADDR (PREFIX_ADDR << PREFIX_IGNORED_SHIFT)
233#define PREFIX_IGNORED_LOCK (PREFIX_LOCK << PREFIX_IGNORED_SHIFT)
234
235/* Opcode prefixes. */
236#define PREFIX_OPCODE (PREFIX_REPZ \
237 | PREFIX_REPNZ \
238 | PREFIX_DATA)
239
240/* Prefixes ignored. */
241#define PREFIX_IGNORED (PREFIX_IGNORED_REPZ \
242 | PREFIX_IGNORED_REPNZ \
243 | PREFIX_IGNORED_DATA)
bf890a93 244
ce518a5f 245#define XX { NULL, 0 }
507bd325 246#define Bad_Opcode NULL, { { NULL, 0 } }, 0
ce518a5f
L
247
248#define Eb { OP_E, b_mode }
7e8b059b 249#define Ebnd { OP_E, bnd_mode }
b6169b20 250#define EbS { OP_E, b_swap_mode }
ce518a5f 251#define Ev { OP_E, v_mode }
7e8b059b 252#define Ev_bnd { OP_E, v_bnd_mode }
b6169b20 253#define EvS { OP_E, v_swap_mode }
ce518a5f
L
254#define Ed { OP_E, d_mode }
255#define Edq { OP_E, dq_mode }
256#define Edqw { OP_E, dqw_mode }
42903f7f 257#define Edqb { OP_E, dqb_mode }
1ba585e8
IT
258#define Edb { OP_E, db_mode }
259#define Edw { OP_E, dw_mode }
42903f7f 260#define Edqd { OP_E, dqd_mode }
09335d05 261#define Eq { OP_E, q_mode }
07f5af7d 262#define indirEv { OP_indirE, indir_v_mode }
ce518a5f
L
263#define indirEp { OP_indirE, f_mode }
264#define stackEv { OP_E, stack_v_mode }
265#define Em { OP_E, m_mode }
266#define Ew { OP_E, w_mode }
267#define M { OP_M, 0 } /* lea, lgdt, etc. */
34b772a6 268#define Ma { OP_M, a_mode }
b844680a 269#define Mb { OP_M, b_mode }
d9a5e5e5 270#define Md { OP_M, d_mode }
f1f8f695 271#define Mo { OP_M, o_mode }
ce518a5f
L
272#define Mp { OP_M, f_mode } /* 32 or 48 bit memory operand for LDS, LES etc */
273#define Mq { OP_M, q_mode }
4ee52178 274#define Mx { OP_M, x_mode }
c0f3af97 275#define Mxmm { OP_M, xmm_mode }
ce518a5f 276#define Gb { OP_G, b_mode }
7e8b059b 277#define Gbnd { OP_G, bnd_mode }
ce518a5f
L
278#define Gv { OP_G, v_mode }
279#define Gd { OP_G, d_mode }
280#define Gdq { OP_G, dq_mode }
281#define Gm { OP_G, m_mode }
282#define Gw { OP_G, w_mode }
6f74c397 283#define Rd { OP_R, d_mode }
43234a1e 284#define Rdq { OP_R, dq_mode }
6f74c397 285#define Rm { OP_R, m_mode }
ce518a5f
L
286#define Ib { OP_I, b_mode }
287#define sIb { OP_sI, b_mode } /* sign extened byte */
e3949f17 288#define sIbT { OP_sI, b_T_mode } /* sign extened byte like 'T' */
ce518a5f 289#define Iv { OP_I, v_mode }
7bb15c6f 290#define sIv { OP_sI, v_mode }
ce518a5f
L
291#define Iq { OP_I, q_mode }
292#define Iv64 { OP_I64, v_mode }
293#define Iw { OP_I, w_mode }
294#define I1 { OP_I, const_1_mode }
295#define Jb { OP_J, b_mode }
296#define Jv { OP_J, v_mode }
297#define Cm { OP_C, m_mode }
298#define Dm { OP_D, m_mode }
299#define Td { OP_T, d_mode }
b844680a 300#define Skip_MODRM { OP_Skip_MODRM, 0 }
ce518a5f
L
301
302#define RMeAX { OP_REG, eAX_reg }
303#define RMeBX { OP_REG, eBX_reg }
304#define RMeCX { OP_REG, eCX_reg }
305#define RMeDX { OP_REG, eDX_reg }
306#define RMeSP { OP_REG, eSP_reg }
307#define RMeBP { OP_REG, eBP_reg }
308#define RMeSI { OP_REG, eSI_reg }
309#define RMeDI { OP_REG, eDI_reg }
310#define RMrAX { OP_REG, rAX_reg }
311#define RMrBX { OP_REG, rBX_reg }
312#define RMrCX { OP_REG, rCX_reg }
313#define RMrDX { OP_REG, rDX_reg }
314#define RMrSP { OP_REG, rSP_reg }
315#define RMrBP { OP_REG, rBP_reg }
316#define RMrSI { OP_REG, rSI_reg }
317#define RMrDI { OP_REG, rDI_reg }
318#define RMAL { OP_REG, al_reg }
ce518a5f
L
319#define RMCL { OP_REG, cl_reg }
320#define RMDL { OP_REG, dl_reg }
321#define RMBL { OP_REG, bl_reg }
322#define RMAH { OP_REG, ah_reg }
323#define RMCH { OP_REG, ch_reg }
324#define RMDH { OP_REG, dh_reg }
325#define RMBH { OP_REG, bh_reg }
326#define RMAX { OP_REG, ax_reg }
327#define RMDX { OP_REG, dx_reg }
328
329#define eAX { OP_IMREG, eAX_reg }
330#define eBX { OP_IMREG, eBX_reg }
331#define eCX { OP_IMREG, eCX_reg }
332#define eDX { OP_IMREG, eDX_reg }
333#define eSP { OP_IMREG, eSP_reg }
334#define eBP { OP_IMREG, eBP_reg }
335#define eSI { OP_IMREG, eSI_reg }
336#define eDI { OP_IMREG, eDI_reg }
337#define AL { OP_IMREG, al_reg }
338#define CL { OP_IMREG, cl_reg }
339#define DL { OP_IMREG, dl_reg }
340#define BL { OP_IMREG, bl_reg }
341#define AH { OP_IMREG, ah_reg }
342#define CH { OP_IMREG, ch_reg }
343#define DH { OP_IMREG, dh_reg }
344#define BH { OP_IMREG, bh_reg }
345#define AX { OP_IMREG, ax_reg }
346#define DX { OP_IMREG, dx_reg }
347#define zAX { OP_IMREG, z_mode_ax_reg }
348#define indirDX { OP_IMREG, indir_dx_reg }
349
350#define Sw { OP_SEG, w_mode }
351#define Sv { OP_SEG, v_mode }
352#define Ap { OP_DIR, 0 }
353#define Ob { OP_OFF64, b_mode }
354#define Ov { OP_OFF64, v_mode }
355#define Xb { OP_DSreg, eSI_reg }
356#define Xv { OP_DSreg, eSI_reg }
357#define Xz { OP_DSreg, eSI_reg }
358#define Yb { OP_ESreg, eDI_reg }
359#define Yv { OP_ESreg, eDI_reg }
360#define DSBX { OP_DSreg, eBX_reg }
361
362#define es { OP_REG, es_reg }
363#define ss { OP_REG, ss_reg }
364#define cs { OP_REG, cs_reg }
365#define ds { OP_REG, ds_reg }
366#define fs { OP_REG, fs_reg }
367#define gs { OP_REG, gs_reg }
368
369#define MX { OP_MMX, 0 }
370#define XM { OP_XMM, 0 }
539f890d 371#define XMScalar { OP_XMM, scalar_mode }
6c30d220 372#define XMGatherQ { OP_XMM, vex_vsib_q_w_dq_mode }
c0f3af97 373#define XMM { OP_XMM, xmm_mode }
43234a1e 374#define XMxmmq { OP_XMM, xmmq_mode }
ce518a5f 375#define EM { OP_EM, v_mode }
b6169b20 376#define EMS { OP_EM, v_swap_mode }
09a2c6cf 377#define EMd { OP_EM, d_mode }
14051056 378#define EMx { OP_EM, x_mode }
53467f57 379#define EXbScalar { OP_EX, b_scalar_mode }
8976381e 380#define EXw { OP_EX, w_mode }
53467f57 381#define EXwScalar { OP_EX, w_scalar_mode }
09a2c6cf 382#define EXd { OP_EX, d_mode }
539f890d 383#define EXdScalar { OP_EX, d_scalar_mode }
fa99fab2 384#define EXdS { OP_EX, d_swap_mode }
43234a1e 385#define EXdScalarS { OP_EX, d_scalar_swap_mode }
09a2c6cf 386#define EXq { OP_EX, q_mode }
539f890d
L
387#define EXqScalar { OP_EX, q_scalar_mode }
388#define EXqScalarS { OP_EX, q_scalar_swap_mode }
b6169b20 389#define EXqS { OP_EX, q_swap_mode }
09a2c6cf 390#define EXx { OP_EX, x_mode }
b6169b20 391#define EXxS { OP_EX, x_swap_mode }
c0f3af97 392#define EXxmm { OP_EX, xmm_mode }
43234a1e 393#define EXymm { OP_EX, ymm_mode }
c0f3af97 394#define EXxmmq { OP_EX, xmmq_mode }
43234a1e 395#define EXEvexHalfBcstXmmq { OP_EX, evex_half_bcst_xmmq_mode }
6c30d220
L
396#define EXxmm_mb { OP_EX, xmm_mb_mode }
397#define EXxmm_mw { OP_EX, xmm_mw_mode }
398#define EXxmm_md { OP_EX, xmm_md_mode }
399#define EXxmm_mq { OP_EX, xmm_mq_mode }
43234a1e 400#define EXxmm_mdq { OP_EX, xmm_mdq_mode }
6c30d220
L
401#define EXxmmdw { OP_EX, xmmdw_mode }
402#define EXxmmqd { OP_EX, xmmqd_mode }
c0f3af97 403#define EXymmq { OP_EX, ymmq_mode }
0bfee649 404#define EXVexWdq { OP_EX, vex_w_dq_mode }
1c480963 405#define EXVexWdqScalar { OP_EX, vex_scalar_w_dq_mode }
43234a1e
L
406#define EXEvexXGscat { OP_EX, evex_x_gscat_mode }
407#define EXEvexXNoBcst { OP_EX, evex_x_nobcst_mode }
ce518a5f
L
408#define MS { OP_MS, v_mode }
409#define XS { OP_XS, v_mode }
09335d05 410#define EMCq { OP_EMC, q_mode }
ce518a5f 411#define MXC { OP_MXC, 0 }
ce518a5f 412#define OPSUF { OP_3DNowSuffix, 0 }
ad19981d 413#define CMP { CMP_Fixup, 0 }
42903f7f 414#define XMM0 { XMM_Fixup, 0 }
eacc9c89 415#define FXSAVE { FXSAVE_Fixup, 0 }
5dd85c99
SP
416#define Vex_2src_1 { OP_Vex_2src_1, 0 }
417#define Vex_2src_2 { OP_Vex_2src_2, 0 }
252b5132 418
c0f3af97 419#define Vex { OP_VEX, vex_mode }
539f890d 420#define VexScalar { OP_VEX, vex_scalar_mode }
6c30d220 421#define VexGatherQ { OP_VEX, vex_vsib_q_w_dq_mode }
c0f3af97
L
422#define Vex128 { OP_VEX, vex128_mode }
423#define Vex256 { OP_VEX, vex256_mode }
cb21baef 424#define VexGdq { OP_VEX, dq_mode }
922d8de8 425#define VexI4 { VEXI4_Fixup, 0}
c0f3af97 426#define EXdVex { OP_EX_Vex, d_mode }
fa99fab2 427#define EXdVexS { OP_EX_Vex, d_swap_mode }
539f890d 428#define EXdVexScalarS { OP_EX_Vex, d_scalar_swap_mode }
c0f3af97 429#define EXqVex { OP_EX_Vex, q_mode }
fa99fab2 430#define EXqVexS { OP_EX_Vex, q_swap_mode }
539f890d 431#define EXqVexScalarS { OP_EX_Vex, q_scalar_swap_mode }
922d8de8
DR
432#define EXVexW { OP_EX_VexW, x_mode }
433#define EXdVexW { OP_EX_VexW, d_mode }
434#define EXqVexW { OP_EX_VexW, q_mode }
a683cc34 435#define EXVexImmW { OP_EX_VexImmW, x_mode }
c0f3af97 436#define XMVex { OP_XMM_Vex, 0 }
539f890d 437#define XMVexScalar { OP_XMM_Vex, scalar_mode }
922d8de8 438#define XMVexW { OP_XMM_VexW, 0 }
c0f3af97
L
439#define XMVexI4 { OP_REG_VexI4, x_mode }
440#define PCLMUL { PCLMUL_Fixup, 0 }
441#define VZERO { VZERO_Fixup, 0 }
442#define VCMP { VCMP_Fixup, 0 }
43234a1e
L
443#define VPCMP { VPCMP_Fixup, 0 }
444
445#define EXxEVexR { OP_Rounding, evex_rounding_mode }
446#define EXxEVexS { OP_Rounding, evex_sae_mode }
447
448#define XMask { OP_Mask, mask_mode }
449#define MaskG { OP_G, mask_mode }
450#define MaskE { OP_E, mask_mode }
1ba585e8 451#define MaskBDE { OP_E, mask_bd_mode }
43234a1e
L
452#define MaskR { OP_R, mask_mode }
453#define MaskVex { OP_VEX, mask_mode }
c0f3af97 454
6c30d220 455#define MVexVSIBDWpX { OP_M, vex_vsib_d_w_dq_mode }
5fc35d96 456#define MVexVSIBDQWpX { OP_M, vex_vsib_d_w_d_mode }
6c30d220 457#define MVexVSIBQWpX { OP_M, vex_vsib_q_w_dq_mode }
5fc35d96 458#define MVexVSIBQDWpX { OP_M, vex_vsib_q_w_d_mode }
6c30d220 459
35c52694 460/* Used handle "rep" prefix for string instructions. */
ce518a5f
L
461#define Xbr { REP_Fixup, eSI_reg }
462#define Xvr { REP_Fixup, eSI_reg }
463#define Ybr { REP_Fixup, eDI_reg }
464#define Yvr { REP_Fixup, eDI_reg }
465#define Yzr { REP_Fixup, eDI_reg }
466#define indirDXr { REP_Fixup, indir_dx_reg }
467#define ALr { REP_Fixup, al_reg }
468#define eAXr { REP_Fixup, eAX_reg }
469
42164a71
L
470/* Used handle HLE prefix for lockable instructions. */
471#define Ebh1 { HLE_Fixup1, b_mode }
472#define Evh1 { HLE_Fixup1, v_mode }
473#define Ebh2 { HLE_Fixup2, b_mode }
474#define Evh2 { HLE_Fixup2, v_mode }
475#define Ebh3 { HLE_Fixup3, b_mode }
476#define Evh3 { HLE_Fixup3, v_mode }
477
7e8b059b 478#define BND { BND_Fixup, 0 }
04ef582a 479#define NOTRACK { NOTRACK_Fixup, 0 }
7e8b059b 480
ce518a5f
L
481#define cond_jump_flag { NULL, cond_jump_mode }
482#define loop_jcxz_flag { NULL, loop_jcxz_mode }
3ffd33cf 483
252b5132 484/* bits in sizeflag */
252b5132 485#define SUFFIX_ALWAYS 4
252b5132
RH
486#define AFLAG 2
487#define DFLAG 1
488
51e7da1b
L
489enum
490{
491 /* byte operand */
492 b_mode = 1,
493 /* byte operand with operand swapped */
3873ba12 494 b_swap_mode,
e3949f17
L
495 /* byte operand, sign extend like 'T' suffix */
496 b_T_mode,
51e7da1b 497 /* operand size depends on prefixes */
3873ba12 498 v_mode,
51e7da1b 499 /* operand size depends on prefixes with operand swapped */
3873ba12 500 v_swap_mode,
51e7da1b 501 /* word operand */
3873ba12 502 w_mode,
51e7da1b 503 /* double word operand */
3873ba12 504 d_mode,
51e7da1b 505 /* double word operand with operand swapped */
3873ba12 506 d_swap_mode,
51e7da1b 507 /* quad word operand */
3873ba12 508 q_mode,
51e7da1b 509 /* quad word operand with operand swapped */
3873ba12 510 q_swap_mode,
51e7da1b 511 /* ten-byte operand */
3873ba12 512 t_mode,
43234a1e
L
513 /* 16-byte XMM, 32-byte YMM or 64-byte ZMM operand. In EVEX with
514 broadcast enabled. */
3873ba12 515 x_mode,
43234a1e
L
516 /* Similar to x_mode, but with different EVEX mem shifts. */
517 evex_x_gscat_mode,
518 /* Similar to x_mode, but with disabled broadcast. */
519 evex_x_nobcst_mode,
520 /* Similar to x_mode, but with operands swapped and disabled broadcast
521 in EVEX. */
3873ba12 522 x_swap_mode,
51e7da1b 523 /* 16-byte XMM operand */
3873ba12 524 xmm_mode,
43234a1e
L
525 /* XMM, XMM or YMM register operand, or quad word, xmmword or ymmword
526 memory operand (depending on vector length). Broadcast isn't
527 allowed. */
3873ba12 528 xmmq_mode,
43234a1e
L
529 /* Same as xmmq_mode, but broadcast is allowed. */
530 evex_half_bcst_xmmq_mode,
6c30d220
L
531 /* XMM register or byte memory operand */
532 xmm_mb_mode,
533 /* XMM register or word memory operand */
534 xmm_mw_mode,
535 /* XMM register or double word memory operand */
536 xmm_md_mode,
537 /* XMM register or quad word memory operand */
538 xmm_mq_mode,
43234a1e
L
539 /* XMM register or double/quad word memory operand, depending on
540 VEX.W. */
541 xmm_mdq_mode,
542 /* 16-byte XMM, word, double word or quad word operand. */
6c30d220 543 xmmdw_mode,
43234a1e 544 /* 16-byte XMM, double word, quad word operand or xmm word operand. */
6c30d220 545 xmmqd_mode,
43234a1e
L
546 /* 32-byte YMM operand */
547 ymm_mode,
548 /* quad word, ymmword or zmmword memory operand. */
3873ba12 549 ymmq_mode,
6c30d220
L
550 /* 32-byte YMM or 16-byte word operand */
551 ymmxmm_mode,
51e7da1b 552 /* d_mode in 32bit, q_mode in 64bit mode. */
3873ba12 553 m_mode,
51e7da1b 554 /* pair of v_mode operands */
3873ba12
L
555 a_mode,
556 cond_jump_mode,
557 loop_jcxz_mode,
7e8b059b 558 v_bnd_mode,
51e7da1b 559 /* operand size depends on REX prefixes. */
3873ba12 560 dq_mode,
51e7da1b 561 /* registers like dq_mode, memory like w_mode. */
3873ba12 562 dqw_mode,
7e8b059b 563 bnd_mode,
51e7da1b 564 /* 4- or 6-byte pointer operand */
3873ba12
L
565 f_mode,
566 const_1_mode,
07f5af7d
L
567 /* v_mode for indirect branch opcodes. */
568 indir_v_mode,
51e7da1b 569 /* v_mode for stack-related opcodes. */
3873ba12 570 stack_v_mode,
51e7da1b 571 /* non-quad operand size depends on prefixes */
3873ba12 572 z_mode,
51e7da1b 573 /* 16-byte operand */
3873ba12 574 o_mode,
51e7da1b 575 /* registers like dq_mode, memory like b_mode. */
3873ba12 576 dqb_mode,
1ba585e8
IT
577 /* registers like d_mode, memory like b_mode. */
578 db_mode,
579 /* registers like d_mode, memory like w_mode. */
580 dw_mode,
51e7da1b 581 /* registers like dq_mode, memory like d_mode. */
3873ba12 582 dqd_mode,
51e7da1b 583 /* normal vex mode */
3873ba12 584 vex_mode,
51e7da1b 585 /* 128bit vex mode */
3873ba12 586 vex128_mode,
51e7da1b 587 /* 256bit vex mode */
3873ba12 588 vex256_mode,
51e7da1b 589 /* operand size depends on the VEX.W bit. */
3873ba12 590 vex_w_dq_mode,
d55ee72f 591
6c30d220
L
592 /* Similar to vex_w_dq_mode, with VSIB dword indices. */
593 vex_vsib_d_w_dq_mode,
5fc35d96
IT
594 /* Similar to vex_vsib_d_w_dq_mode, with smaller memory. */
595 vex_vsib_d_w_d_mode,
6c30d220
L
596 /* Similar to vex_w_dq_mode, with VSIB qword indices. */
597 vex_vsib_q_w_dq_mode,
5fc35d96
IT
598 /* Similar to vex_vsib_q_w_dq_mode, with smaller memory. */
599 vex_vsib_q_w_d_mode,
6c30d220 600
539f890d
L
601 /* scalar, ignore vector length. */
602 scalar_mode,
53467f57
IT
603 /* like b_mode, ignore vector length. */
604 b_scalar_mode,
605 /* like w_mode, ignore vector length. */
606 w_scalar_mode,
539f890d
L
607 /* like d_mode, ignore vector length. */
608 d_scalar_mode,
609 /* like d_swap_mode, ignore vector length. */
610 d_scalar_swap_mode,
611 /* like q_mode, ignore vector length. */
612 q_scalar_mode,
613 /* like q_swap_mode, ignore vector length. */
614 q_scalar_swap_mode,
615 /* like vex_mode, ignore vector length. */
616 vex_scalar_mode,
1c480963
L
617 /* like vex_w_dq_mode, ignore vector length. */
618 vex_scalar_w_dq_mode,
539f890d 619
43234a1e
L
620 /* Static rounding. */
621 evex_rounding_mode,
622 /* Supress all exceptions. */
623 evex_sae_mode,
624
625 /* Mask register operand. */
626 mask_mode,
1ba585e8
IT
627 /* Mask register operand. */
628 mask_bd_mode,
43234a1e 629
3873ba12
L
630 es_reg,
631 cs_reg,
632 ss_reg,
633 ds_reg,
634 fs_reg,
635 gs_reg,
d55ee72f 636
3873ba12
L
637 eAX_reg,
638 eCX_reg,
639 eDX_reg,
640 eBX_reg,
641 eSP_reg,
642 eBP_reg,
643 eSI_reg,
644 eDI_reg,
d55ee72f 645
3873ba12
L
646 al_reg,
647 cl_reg,
648 dl_reg,
649 bl_reg,
650 ah_reg,
651 ch_reg,
652 dh_reg,
653 bh_reg,
d55ee72f 654
3873ba12
L
655 ax_reg,
656 cx_reg,
657 dx_reg,
658 bx_reg,
659 sp_reg,
660 bp_reg,
661 si_reg,
662 di_reg,
d55ee72f 663
3873ba12
L
664 rAX_reg,
665 rCX_reg,
666 rDX_reg,
667 rBX_reg,
668 rSP_reg,
669 rBP_reg,
670 rSI_reg,
671 rDI_reg,
d55ee72f 672
3873ba12
L
673 z_mode_ax_reg,
674 indir_dx_reg
51e7da1b 675};
252b5132 676
51e7da1b
L
677enum
678{
679 FLOATCODE = 1,
3873ba12
L
680 USE_REG_TABLE,
681 USE_MOD_TABLE,
682 USE_RM_TABLE,
683 USE_PREFIX_TABLE,
684 USE_X86_64_TABLE,
685 USE_3BYTE_TABLE,
f88c9eb0 686 USE_XOP_8F_TABLE,
3873ba12
L
687 USE_VEX_C4_TABLE,
688 USE_VEX_C5_TABLE,
9e30b8e0 689 USE_VEX_LEN_TABLE,
43234a1e
L
690 USE_VEX_W_TABLE,
691 USE_EVEX_TABLE
51e7da1b 692};
6439fc28 693
bf890a93 694#define FLOAT NULL, { { NULL, FLOATCODE } }, 0
4efba78c 695
bf890a93
IT
696#define DIS386(T, I) NULL, { { NULL, (T)}, { NULL, (I) } }, 0
697#define DIS386_PREFIX(T, I, P) NULL, { { NULL, (T)}, { NULL, (I) } }, P
1ceb70f8
L
698#define REG_TABLE(I) DIS386 (USE_REG_TABLE, (I))
699#define MOD_TABLE(I) DIS386 (USE_MOD_TABLE, (I))
700#define RM_TABLE(I) DIS386 (USE_RM_TABLE, (I))
701#define PREFIX_TABLE(I) DIS386 (USE_PREFIX_TABLE, (I))
4e7d34a6
L
702#define X86_64_TABLE(I) DIS386 (USE_X86_64_TABLE, (I))
703#define THREE_BYTE_TABLE(I) DIS386 (USE_3BYTE_TABLE, (I))
bf890a93 704#define THREE_BYTE_TABLE_PREFIX(I, P) DIS386_PREFIX (USE_3BYTE_TABLE, (I), P)
f88c9eb0 705#define XOP_8F_TABLE(I) DIS386 (USE_XOP_8F_TABLE, (I))
c0f3af97
L
706#define VEX_C4_TABLE(I) DIS386 (USE_VEX_C4_TABLE, (I))
707#define VEX_C5_TABLE(I) DIS386 (USE_VEX_C5_TABLE, (I))
708#define VEX_LEN_TABLE(I) DIS386 (USE_VEX_LEN_TABLE, (I))
9e30b8e0 709#define VEX_W_TABLE(I) DIS386 (USE_VEX_W_TABLE, (I))
43234a1e 710#define EVEX_TABLE(I) DIS386 (USE_EVEX_TABLE, (I))
1ceb70f8 711
51e7da1b
L
712enum
713{
714 REG_80 = 0,
3873ba12 715 REG_81,
7148c369 716 REG_83,
3873ba12
L
717 REG_8F,
718 REG_C0,
719 REG_C1,
720 REG_C6,
721 REG_C7,
722 REG_D0,
723 REG_D1,
724 REG_D2,
725 REG_D3,
726 REG_F6,
727 REG_F7,
728 REG_FE,
729 REG_FF,
730 REG_0F00,
731 REG_0F01,
732 REG_0F0D,
733 REG_0F18,
603555e5 734 REG_0F1E_MOD_3,
3873ba12
L
735 REG_0F71,
736 REG_0F72,
737 REG_0F73,
738 REG_0FA6,
739 REG_0FA7,
740 REG_0FAE,
741 REG_0FBA,
742 REG_0FC7,
592a252b
L
743 REG_VEX_0F71,
744 REG_VEX_0F72,
745 REG_VEX_0F73,
746 REG_VEX_0FAE,
f12dc422 747 REG_VEX_0F38F3,
f88c9eb0 748 REG_XOP_LWPCB,
2a2a0f38
QN
749 REG_XOP_LWP,
750 REG_XOP_TBM_01,
43234a1e
L
751 REG_XOP_TBM_02,
752
1ba585e8 753 REG_EVEX_0F71,
43234a1e
L
754 REG_EVEX_0F72,
755 REG_EVEX_0F73,
756 REG_EVEX_0F38C6,
757 REG_EVEX_0F38C7
51e7da1b 758};
1ceb70f8 759
51e7da1b
L
760enum
761{
762 MOD_8D = 0,
42164a71
L
763 MOD_C6_REG_7,
764 MOD_C7_REG_7,
4a357820
MZ
765 MOD_FF_REG_3,
766 MOD_FF_REG_5,
3873ba12
L
767 MOD_0F01_REG_0,
768 MOD_0F01_REG_1,
769 MOD_0F01_REG_2,
770 MOD_0F01_REG_3,
8eab4136 771 MOD_0F01_REG_5,
3873ba12
L
772 MOD_0F01_REG_7,
773 MOD_0F12_PREFIX_0,
774 MOD_0F13,
775 MOD_0F16_PREFIX_0,
776 MOD_0F17,
777 MOD_0F18_REG_0,
778 MOD_0F18_REG_1,
779 MOD_0F18_REG_2,
780 MOD_0F18_REG_3,
d7189fa5
RM
781 MOD_0F18_REG_4,
782 MOD_0F18_REG_5,
783 MOD_0F18_REG_6,
784 MOD_0F18_REG_7,
7e8b059b
L
785 MOD_0F1A_PREFIX_0,
786 MOD_0F1B_PREFIX_0,
787 MOD_0F1B_PREFIX_1,
603555e5 788 MOD_0F1E_PREFIX_1,
3873ba12
L
789 MOD_0F24,
790 MOD_0F26,
791 MOD_0F2B_PREFIX_0,
792 MOD_0F2B_PREFIX_1,
793 MOD_0F2B_PREFIX_2,
794 MOD_0F2B_PREFIX_3,
795 MOD_0F51,
796 MOD_0F71_REG_2,
797 MOD_0F71_REG_4,
798 MOD_0F71_REG_6,
799 MOD_0F72_REG_2,
800 MOD_0F72_REG_4,
801 MOD_0F72_REG_6,
802 MOD_0F73_REG_2,
803 MOD_0F73_REG_3,
804 MOD_0F73_REG_6,
805 MOD_0F73_REG_7,
806 MOD_0FAE_REG_0,
807 MOD_0FAE_REG_1,
808 MOD_0FAE_REG_2,
809 MOD_0FAE_REG_3,
810 MOD_0FAE_REG_4,
811 MOD_0FAE_REG_5,
812 MOD_0FAE_REG_6,
813 MOD_0FAE_REG_7,
814 MOD_0FB2,
815 MOD_0FB4,
816 MOD_0FB5,
a8484f96 817 MOD_0FC3,
963f3586
IT
818 MOD_0FC7_REG_3,
819 MOD_0FC7_REG_4,
820 MOD_0FC7_REG_5,
3873ba12
L
821 MOD_0FC7_REG_6,
822 MOD_0FC7_REG_7,
823 MOD_0FD7,
824 MOD_0FE7_PREFIX_2,
825 MOD_0FF0_PREFIX_3,
826 MOD_0F382A_PREFIX_2,
603555e5
L
827 MOD_0F38F5_PREFIX_2,
828 MOD_0F38F6_PREFIX_0,
3873ba12
L
829 MOD_62_32BIT,
830 MOD_C4_32BIT,
831 MOD_C5_32BIT,
592a252b
L
832 MOD_VEX_0F12_PREFIX_0,
833 MOD_VEX_0F13,
834 MOD_VEX_0F16_PREFIX_0,
835 MOD_VEX_0F17,
836 MOD_VEX_0F2B,
ab4e4ed5
AF
837 MOD_VEX_W_0_0F41_P_0_LEN_1,
838 MOD_VEX_W_1_0F41_P_0_LEN_1,
839 MOD_VEX_W_0_0F41_P_2_LEN_1,
840 MOD_VEX_W_1_0F41_P_2_LEN_1,
841 MOD_VEX_W_0_0F42_P_0_LEN_1,
842 MOD_VEX_W_1_0F42_P_0_LEN_1,
843 MOD_VEX_W_0_0F42_P_2_LEN_1,
844 MOD_VEX_W_1_0F42_P_2_LEN_1,
845 MOD_VEX_W_0_0F44_P_0_LEN_1,
846 MOD_VEX_W_1_0F44_P_0_LEN_1,
847 MOD_VEX_W_0_0F44_P_2_LEN_1,
848 MOD_VEX_W_1_0F44_P_2_LEN_1,
849 MOD_VEX_W_0_0F45_P_0_LEN_1,
850 MOD_VEX_W_1_0F45_P_0_LEN_1,
851 MOD_VEX_W_0_0F45_P_2_LEN_1,
852 MOD_VEX_W_1_0F45_P_2_LEN_1,
853 MOD_VEX_W_0_0F46_P_0_LEN_1,
854 MOD_VEX_W_1_0F46_P_0_LEN_1,
855 MOD_VEX_W_0_0F46_P_2_LEN_1,
856 MOD_VEX_W_1_0F46_P_2_LEN_1,
857 MOD_VEX_W_0_0F47_P_0_LEN_1,
858 MOD_VEX_W_1_0F47_P_0_LEN_1,
859 MOD_VEX_W_0_0F47_P_2_LEN_1,
860 MOD_VEX_W_1_0F47_P_2_LEN_1,
861 MOD_VEX_W_0_0F4A_P_0_LEN_1,
862 MOD_VEX_W_1_0F4A_P_0_LEN_1,
863 MOD_VEX_W_0_0F4A_P_2_LEN_1,
864 MOD_VEX_W_1_0F4A_P_2_LEN_1,
865 MOD_VEX_W_0_0F4B_P_0_LEN_1,
866 MOD_VEX_W_1_0F4B_P_0_LEN_1,
867 MOD_VEX_W_0_0F4B_P_2_LEN_1,
592a252b
L
868 MOD_VEX_0F50,
869 MOD_VEX_0F71_REG_2,
870 MOD_VEX_0F71_REG_4,
871 MOD_VEX_0F71_REG_6,
872 MOD_VEX_0F72_REG_2,
873 MOD_VEX_0F72_REG_4,
874 MOD_VEX_0F72_REG_6,
875 MOD_VEX_0F73_REG_2,
876 MOD_VEX_0F73_REG_3,
877 MOD_VEX_0F73_REG_6,
878 MOD_VEX_0F73_REG_7,
ab4e4ed5
AF
879 MOD_VEX_W_0_0F91_P_0_LEN_0,
880 MOD_VEX_W_1_0F91_P_0_LEN_0,
881 MOD_VEX_W_0_0F91_P_2_LEN_0,
882 MOD_VEX_W_1_0F91_P_2_LEN_0,
883 MOD_VEX_W_0_0F92_P_0_LEN_0,
884 MOD_VEX_W_0_0F92_P_2_LEN_0,
885 MOD_VEX_W_0_0F92_P_3_LEN_0,
886 MOD_VEX_W_1_0F92_P_3_LEN_0,
887 MOD_VEX_W_0_0F93_P_0_LEN_0,
888 MOD_VEX_W_0_0F93_P_2_LEN_0,
889 MOD_VEX_W_0_0F93_P_3_LEN_0,
890 MOD_VEX_W_1_0F93_P_3_LEN_0,
891 MOD_VEX_W_0_0F98_P_0_LEN_0,
892 MOD_VEX_W_1_0F98_P_0_LEN_0,
893 MOD_VEX_W_0_0F98_P_2_LEN_0,
894 MOD_VEX_W_1_0F98_P_2_LEN_0,
895 MOD_VEX_W_0_0F99_P_0_LEN_0,
896 MOD_VEX_W_1_0F99_P_0_LEN_0,
897 MOD_VEX_W_0_0F99_P_2_LEN_0,
898 MOD_VEX_W_1_0F99_P_2_LEN_0,
592a252b
L
899 MOD_VEX_0FAE_REG_2,
900 MOD_VEX_0FAE_REG_3,
901 MOD_VEX_0FD7_PREFIX_2,
902 MOD_VEX_0FE7_PREFIX_2,
903 MOD_VEX_0FF0_PREFIX_3,
592a252b
L
904 MOD_VEX_0F381A_PREFIX_2,
905 MOD_VEX_0F382A_PREFIX_2,
906 MOD_VEX_0F382C_PREFIX_2,
907 MOD_VEX_0F382D_PREFIX_2,
908 MOD_VEX_0F382E_PREFIX_2,
6c30d220
L
909 MOD_VEX_0F382F_PREFIX_2,
910 MOD_VEX_0F385A_PREFIX_2,
911 MOD_VEX_0F388C_PREFIX_2,
912 MOD_VEX_0F388E_PREFIX_2,
ab4e4ed5
AF
913 MOD_VEX_W_0_0F3A30_P_2_LEN_0,
914 MOD_VEX_W_1_0F3A30_P_2_LEN_0,
915 MOD_VEX_W_0_0F3A31_P_2_LEN_0,
916 MOD_VEX_W_1_0F3A31_P_2_LEN_0,
917 MOD_VEX_W_0_0F3A32_P_2_LEN_0,
918 MOD_VEX_W_1_0F3A32_P_2_LEN_0,
919 MOD_VEX_W_0_0F3A33_P_2_LEN_0,
920 MOD_VEX_W_1_0F3A33_P_2_LEN_0,
43234a1e
L
921
922 MOD_EVEX_0F10_PREFIX_1,
923 MOD_EVEX_0F10_PREFIX_3,
924 MOD_EVEX_0F11_PREFIX_1,
925 MOD_EVEX_0F11_PREFIX_3,
926 MOD_EVEX_0F12_PREFIX_0,
927 MOD_EVEX_0F16_PREFIX_0,
928 MOD_EVEX_0F38C6_REG_1,
929 MOD_EVEX_0F38C6_REG_2,
930 MOD_EVEX_0F38C6_REG_5,
931 MOD_EVEX_0F38C6_REG_6,
932 MOD_EVEX_0F38C7_REG_1,
933 MOD_EVEX_0F38C7_REG_2,
934 MOD_EVEX_0F38C7_REG_5,
935 MOD_EVEX_0F38C7_REG_6
51e7da1b 936};
1ceb70f8 937
51e7da1b
L
938enum
939{
42164a71
L
940 RM_C6_REG_7 = 0,
941 RM_C7_REG_7,
942 RM_0F01_REG_0,
3873ba12
L
943 RM_0F01_REG_1,
944 RM_0F01_REG_2,
945 RM_0F01_REG_3,
8eab4136 946 RM_0F01_REG_5,
3873ba12 947 RM_0F01_REG_7,
603555e5 948 RM_0F1E_MOD_3_REG_7,
3873ba12
L
949 RM_0FAE_REG_6,
950 RM_0FAE_REG_7
51e7da1b 951};
1ceb70f8 952
51e7da1b
L
953enum
954{
955 PREFIX_90 = 0,
603555e5 956 PREFIX_MOD_0_0F01_REG_5,
2234eee6 957 PREFIX_MOD_3_0F01_REG_5_RM_0,
603555e5 958 PREFIX_MOD_3_0F01_REG_5_RM_2,
3873ba12
L
959 PREFIX_0F10,
960 PREFIX_0F11,
961 PREFIX_0F12,
962 PREFIX_0F16,
7e8b059b
L
963 PREFIX_0F1A,
964 PREFIX_0F1B,
603555e5 965 PREFIX_0F1E,
3873ba12
L
966 PREFIX_0F2A,
967 PREFIX_0F2B,
968 PREFIX_0F2C,
969 PREFIX_0F2D,
970 PREFIX_0F2E,
971 PREFIX_0F2F,
972 PREFIX_0F51,
973 PREFIX_0F52,
974 PREFIX_0F53,
975 PREFIX_0F58,
976 PREFIX_0F59,
977 PREFIX_0F5A,
978 PREFIX_0F5B,
979 PREFIX_0F5C,
980 PREFIX_0F5D,
981 PREFIX_0F5E,
982 PREFIX_0F5F,
983 PREFIX_0F60,
984 PREFIX_0F61,
985 PREFIX_0F62,
986 PREFIX_0F6C,
987 PREFIX_0F6D,
988 PREFIX_0F6F,
989 PREFIX_0F70,
990 PREFIX_0F73_REG_3,
991 PREFIX_0F73_REG_7,
992 PREFIX_0F78,
993 PREFIX_0F79,
994 PREFIX_0F7C,
995 PREFIX_0F7D,
996 PREFIX_0F7E,
997 PREFIX_0F7F,
c7b8aa3a
L
998 PREFIX_0FAE_REG_0,
999 PREFIX_0FAE_REG_1,
1000 PREFIX_0FAE_REG_2,
1001 PREFIX_0FAE_REG_3,
6b40c462
L
1002 PREFIX_MOD_0_0FAE_REG_4,
1003 PREFIX_MOD_3_0FAE_REG_4,
603555e5 1004 PREFIX_MOD_0_0FAE_REG_5,
2234eee6 1005 PREFIX_MOD_3_0FAE_REG_5,
c5e7287a 1006 PREFIX_0FAE_REG_6,
963f3586 1007 PREFIX_0FAE_REG_7,
3873ba12 1008 PREFIX_0FB8,
f12dc422 1009 PREFIX_0FBC,
3873ba12
L
1010 PREFIX_0FBD,
1011 PREFIX_0FC2,
a8484f96 1012 PREFIX_MOD_0_0FC3,
f24bcbaa
L
1013 PREFIX_MOD_0_0FC7_REG_6,
1014 PREFIX_MOD_3_0FC7_REG_6,
1015 PREFIX_MOD_3_0FC7_REG_7,
3873ba12
L
1016 PREFIX_0FD0,
1017 PREFIX_0FD6,
1018 PREFIX_0FE6,
1019 PREFIX_0FE7,
1020 PREFIX_0FF0,
1021 PREFIX_0FF7,
1022 PREFIX_0F3810,
1023 PREFIX_0F3814,
1024 PREFIX_0F3815,
1025 PREFIX_0F3817,
1026 PREFIX_0F3820,
1027 PREFIX_0F3821,
1028 PREFIX_0F3822,
1029 PREFIX_0F3823,
1030 PREFIX_0F3824,
1031 PREFIX_0F3825,
1032 PREFIX_0F3828,
1033 PREFIX_0F3829,
1034 PREFIX_0F382A,
1035 PREFIX_0F382B,
1036 PREFIX_0F3830,
1037 PREFIX_0F3831,
1038 PREFIX_0F3832,
1039 PREFIX_0F3833,
1040 PREFIX_0F3834,
1041 PREFIX_0F3835,
1042 PREFIX_0F3837,
1043 PREFIX_0F3838,
1044 PREFIX_0F3839,
1045 PREFIX_0F383A,
1046 PREFIX_0F383B,
1047 PREFIX_0F383C,
1048 PREFIX_0F383D,
1049 PREFIX_0F383E,
1050 PREFIX_0F383F,
1051 PREFIX_0F3840,
1052 PREFIX_0F3841,
1053 PREFIX_0F3880,
1054 PREFIX_0F3881,
6c30d220 1055 PREFIX_0F3882,
a0046408
L
1056 PREFIX_0F38C8,
1057 PREFIX_0F38C9,
1058 PREFIX_0F38CA,
1059 PREFIX_0F38CB,
1060 PREFIX_0F38CC,
1061 PREFIX_0F38CD,
48521003 1062 PREFIX_0F38CF,
3873ba12
L
1063 PREFIX_0F38DB,
1064 PREFIX_0F38DC,
1065 PREFIX_0F38DD,
1066 PREFIX_0F38DE,
1067 PREFIX_0F38DF,
1068 PREFIX_0F38F0,
1069 PREFIX_0F38F1,
603555e5 1070 PREFIX_0F38F5,
e2e1fcde 1071 PREFIX_0F38F6,
3873ba12
L
1072 PREFIX_0F3A08,
1073 PREFIX_0F3A09,
1074 PREFIX_0F3A0A,
1075 PREFIX_0F3A0B,
1076 PREFIX_0F3A0C,
1077 PREFIX_0F3A0D,
1078 PREFIX_0F3A0E,
1079 PREFIX_0F3A14,
1080 PREFIX_0F3A15,
1081 PREFIX_0F3A16,
1082 PREFIX_0F3A17,
1083 PREFIX_0F3A20,
1084 PREFIX_0F3A21,
1085 PREFIX_0F3A22,
1086 PREFIX_0F3A40,
1087 PREFIX_0F3A41,
1088 PREFIX_0F3A42,
1089 PREFIX_0F3A44,
1090 PREFIX_0F3A60,
1091 PREFIX_0F3A61,
1092 PREFIX_0F3A62,
1093 PREFIX_0F3A63,
a0046408 1094 PREFIX_0F3ACC,
48521003
IT
1095 PREFIX_0F3ACE,
1096 PREFIX_0F3ACF,
3873ba12 1097 PREFIX_0F3ADF,
592a252b
L
1098 PREFIX_VEX_0F10,
1099 PREFIX_VEX_0F11,
1100 PREFIX_VEX_0F12,
1101 PREFIX_VEX_0F16,
1102 PREFIX_VEX_0F2A,
1103 PREFIX_VEX_0F2C,
1104 PREFIX_VEX_0F2D,
1105 PREFIX_VEX_0F2E,
1106 PREFIX_VEX_0F2F,
43234a1e
L
1107 PREFIX_VEX_0F41,
1108 PREFIX_VEX_0F42,
1109 PREFIX_VEX_0F44,
1110 PREFIX_VEX_0F45,
1111 PREFIX_VEX_0F46,
1112 PREFIX_VEX_0F47,
1ba585e8 1113 PREFIX_VEX_0F4A,
43234a1e 1114 PREFIX_VEX_0F4B,
592a252b
L
1115 PREFIX_VEX_0F51,
1116 PREFIX_VEX_0F52,
1117 PREFIX_VEX_0F53,
1118 PREFIX_VEX_0F58,
1119 PREFIX_VEX_0F59,
1120 PREFIX_VEX_0F5A,
1121 PREFIX_VEX_0F5B,
1122 PREFIX_VEX_0F5C,
1123 PREFIX_VEX_0F5D,
1124 PREFIX_VEX_0F5E,
1125 PREFIX_VEX_0F5F,
1126 PREFIX_VEX_0F60,
1127 PREFIX_VEX_0F61,
1128 PREFIX_VEX_0F62,
1129 PREFIX_VEX_0F63,
1130 PREFIX_VEX_0F64,
1131 PREFIX_VEX_0F65,
1132 PREFIX_VEX_0F66,
1133 PREFIX_VEX_0F67,
1134 PREFIX_VEX_0F68,
1135 PREFIX_VEX_0F69,
1136 PREFIX_VEX_0F6A,
1137 PREFIX_VEX_0F6B,
1138 PREFIX_VEX_0F6C,
1139 PREFIX_VEX_0F6D,
1140 PREFIX_VEX_0F6E,
1141 PREFIX_VEX_0F6F,
1142 PREFIX_VEX_0F70,
1143 PREFIX_VEX_0F71_REG_2,
1144 PREFIX_VEX_0F71_REG_4,
1145 PREFIX_VEX_0F71_REG_6,
1146 PREFIX_VEX_0F72_REG_2,
1147 PREFIX_VEX_0F72_REG_4,
1148 PREFIX_VEX_0F72_REG_6,
1149 PREFIX_VEX_0F73_REG_2,
1150 PREFIX_VEX_0F73_REG_3,
1151 PREFIX_VEX_0F73_REG_6,
1152 PREFIX_VEX_0F73_REG_7,
1153 PREFIX_VEX_0F74,
1154 PREFIX_VEX_0F75,
1155 PREFIX_VEX_0F76,
1156 PREFIX_VEX_0F77,
1157 PREFIX_VEX_0F7C,
1158 PREFIX_VEX_0F7D,
1159 PREFIX_VEX_0F7E,
1160 PREFIX_VEX_0F7F,
43234a1e
L
1161 PREFIX_VEX_0F90,
1162 PREFIX_VEX_0F91,
1163 PREFIX_VEX_0F92,
1164 PREFIX_VEX_0F93,
1165 PREFIX_VEX_0F98,
1ba585e8 1166 PREFIX_VEX_0F99,
592a252b
L
1167 PREFIX_VEX_0FC2,
1168 PREFIX_VEX_0FC4,
1169 PREFIX_VEX_0FC5,
1170 PREFIX_VEX_0FD0,
1171 PREFIX_VEX_0FD1,
1172 PREFIX_VEX_0FD2,
1173 PREFIX_VEX_0FD3,
1174 PREFIX_VEX_0FD4,
1175 PREFIX_VEX_0FD5,
1176 PREFIX_VEX_0FD6,
1177 PREFIX_VEX_0FD7,
1178 PREFIX_VEX_0FD8,
1179 PREFIX_VEX_0FD9,
1180 PREFIX_VEX_0FDA,
1181 PREFIX_VEX_0FDB,
1182 PREFIX_VEX_0FDC,
1183 PREFIX_VEX_0FDD,
1184 PREFIX_VEX_0FDE,
1185 PREFIX_VEX_0FDF,
1186 PREFIX_VEX_0FE0,
1187 PREFIX_VEX_0FE1,
1188 PREFIX_VEX_0FE2,
1189 PREFIX_VEX_0FE3,
1190 PREFIX_VEX_0FE4,
1191 PREFIX_VEX_0FE5,
1192 PREFIX_VEX_0FE6,
1193 PREFIX_VEX_0FE7,
1194 PREFIX_VEX_0FE8,
1195 PREFIX_VEX_0FE9,
1196 PREFIX_VEX_0FEA,
1197 PREFIX_VEX_0FEB,
1198 PREFIX_VEX_0FEC,
1199 PREFIX_VEX_0FED,
1200 PREFIX_VEX_0FEE,
1201 PREFIX_VEX_0FEF,
1202 PREFIX_VEX_0FF0,
1203 PREFIX_VEX_0FF1,
1204 PREFIX_VEX_0FF2,
1205 PREFIX_VEX_0FF3,
1206 PREFIX_VEX_0FF4,
1207 PREFIX_VEX_0FF5,
1208 PREFIX_VEX_0FF6,
1209 PREFIX_VEX_0FF7,
1210 PREFIX_VEX_0FF8,
1211 PREFIX_VEX_0FF9,
1212 PREFIX_VEX_0FFA,
1213 PREFIX_VEX_0FFB,
1214 PREFIX_VEX_0FFC,
1215 PREFIX_VEX_0FFD,
1216 PREFIX_VEX_0FFE,
1217 PREFIX_VEX_0F3800,
1218 PREFIX_VEX_0F3801,
1219 PREFIX_VEX_0F3802,
1220 PREFIX_VEX_0F3803,
1221 PREFIX_VEX_0F3804,
1222 PREFIX_VEX_0F3805,
1223 PREFIX_VEX_0F3806,
1224 PREFIX_VEX_0F3807,
1225 PREFIX_VEX_0F3808,
1226 PREFIX_VEX_0F3809,
1227 PREFIX_VEX_0F380A,
1228 PREFIX_VEX_0F380B,
1229 PREFIX_VEX_0F380C,
1230 PREFIX_VEX_0F380D,
1231 PREFIX_VEX_0F380E,
1232 PREFIX_VEX_0F380F,
1233 PREFIX_VEX_0F3813,
6c30d220 1234 PREFIX_VEX_0F3816,
592a252b
L
1235 PREFIX_VEX_0F3817,
1236 PREFIX_VEX_0F3818,
1237 PREFIX_VEX_0F3819,
1238 PREFIX_VEX_0F381A,
1239 PREFIX_VEX_0F381C,
1240 PREFIX_VEX_0F381D,
1241 PREFIX_VEX_0F381E,
1242 PREFIX_VEX_0F3820,
1243 PREFIX_VEX_0F3821,
1244 PREFIX_VEX_0F3822,
1245 PREFIX_VEX_0F3823,
1246 PREFIX_VEX_0F3824,
1247 PREFIX_VEX_0F3825,
1248 PREFIX_VEX_0F3828,
1249 PREFIX_VEX_0F3829,
1250 PREFIX_VEX_0F382A,
1251 PREFIX_VEX_0F382B,
1252 PREFIX_VEX_0F382C,
1253 PREFIX_VEX_0F382D,
1254 PREFIX_VEX_0F382E,
1255 PREFIX_VEX_0F382F,
1256 PREFIX_VEX_0F3830,
1257 PREFIX_VEX_0F3831,
1258 PREFIX_VEX_0F3832,
1259 PREFIX_VEX_0F3833,
1260 PREFIX_VEX_0F3834,
1261 PREFIX_VEX_0F3835,
6c30d220 1262 PREFIX_VEX_0F3836,
592a252b
L
1263 PREFIX_VEX_0F3837,
1264 PREFIX_VEX_0F3838,
1265 PREFIX_VEX_0F3839,
1266 PREFIX_VEX_0F383A,
1267 PREFIX_VEX_0F383B,
1268 PREFIX_VEX_0F383C,
1269 PREFIX_VEX_0F383D,
1270 PREFIX_VEX_0F383E,
1271 PREFIX_VEX_0F383F,
1272 PREFIX_VEX_0F3840,
1273 PREFIX_VEX_0F3841,
6c30d220
L
1274 PREFIX_VEX_0F3845,
1275 PREFIX_VEX_0F3846,
1276 PREFIX_VEX_0F3847,
1277 PREFIX_VEX_0F3858,
1278 PREFIX_VEX_0F3859,
1279 PREFIX_VEX_0F385A,
1280 PREFIX_VEX_0F3878,
1281 PREFIX_VEX_0F3879,
1282 PREFIX_VEX_0F388C,
1283 PREFIX_VEX_0F388E,
1284 PREFIX_VEX_0F3890,
1285 PREFIX_VEX_0F3891,
1286 PREFIX_VEX_0F3892,
1287 PREFIX_VEX_0F3893,
592a252b
L
1288 PREFIX_VEX_0F3896,
1289 PREFIX_VEX_0F3897,
1290 PREFIX_VEX_0F3898,
1291 PREFIX_VEX_0F3899,
1292 PREFIX_VEX_0F389A,
1293 PREFIX_VEX_0F389B,
1294 PREFIX_VEX_0F389C,
1295 PREFIX_VEX_0F389D,
1296 PREFIX_VEX_0F389E,
1297 PREFIX_VEX_0F389F,
1298 PREFIX_VEX_0F38A6,
1299 PREFIX_VEX_0F38A7,
1300 PREFIX_VEX_0F38A8,
1301 PREFIX_VEX_0F38A9,
1302 PREFIX_VEX_0F38AA,
1303 PREFIX_VEX_0F38AB,
1304 PREFIX_VEX_0F38AC,
1305 PREFIX_VEX_0F38AD,
1306 PREFIX_VEX_0F38AE,
1307 PREFIX_VEX_0F38AF,
1308 PREFIX_VEX_0F38B6,
1309 PREFIX_VEX_0F38B7,
1310 PREFIX_VEX_0F38B8,
1311 PREFIX_VEX_0F38B9,
1312 PREFIX_VEX_0F38BA,
1313 PREFIX_VEX_0F38BB,
1314 PREFIX_VEX_0F38BC,
1315 PREFIX_VEX_0F38BD,
1316 PREFIX_VEX_0F38BE,
1317 PREFIX_VEX_0F38BF,
48521003 1318 PREFIX_VEX_0F38CF,
592a252b
L
1319 PREFIX_VEX_0F38DB,
1320 PREFIX_VEX_0F38DC,
1321 PREFIX_VEX_0F38DD,
1322 PREFIX_VEX_0F38DE,
1323 PREFIX_VEX_0F38DF,
f12dc422
L
1324 PREFIX_VEX_0F38F2,
1325 PREFIX_VEX_0F38F3_REG_1,
1326 PREFIX_VEX_0F38F3_REG_2,
1327 PREFIX_VEX_0F38F3_REG_3,
6c30d220
L
1328 PREFIX_VEX_0F38F5,
1329 PREFIX_VEX_0F38F6,
f12dc422 1330 PREFIX_VEX_0F38F7,
6c30d220
L
1331 PREFIX_VEX_0F3A00,
1332 PREFIX_VEX_0F3A01,
1333 PREFIX_VEX_0F3A02,
592a252b
L
1334 PREFIX_VEX_0F3A04,
1335 PREFIX_VEX_0F3A05,
1336 PREFIX_VEX_0F3A06,
1337 PREFIX_VEX_0F3A08,
1338 PREFIX_VEX_0F3A09,
1339 PREFIX_VEX_0F3A0A,
1340 PREFIX_VEX_0F3A0B,
1341 PREFIX_VEX_0F3A0C,
1342 PREFIX_VEX_0F3A0D,
1343 PREFIX_VEX_0F3A0E,
1344 PREFIX_VEX_0F3A0F,
1345 PREFIX_VEX_0F3A14,
1346 PREFIX_VEX_0F3A15,
1347 PREFIX_VEX_0F3A16,
1348 PREFIX_VEX_0F3A17,
1349 PREFIX_VEX_0F3A18,
1350 PREFIX_VEX_0F3A19,
1351 PREFIX_VEX_0F3A1D,
1352 PREFIX_VEX_0F3A20,
1353 PREFIX_VEX_0F3A21,
1354 PREFIX_VEX_0F3A22,
43234a1e 1355 PREFIX_VEX_0F3A30,
1ba585e8 1356 PREFIX_VEX_0F3A31,
43234a1e 1357 PREFIX_VEX_0F3A32,
1ba585e8 1358 PREFIX_VEX_0F3A33,
6c30d220
L
1359 PREFIX_VEX_0F3A38,
1360 PREFIX_VEX_0F3A39,
592a252b
L
1361 PREFIX_VEX_0F3A40,
1362 PREFIX_VEX_0F3A41,
1363 PREFIX_VEX_0F3A42,
1364 PREFIX_VEX_0F3A44,
6c30d220 1365 PREFIX_VEX_0F3A46,
592a252b
L
1366 PREFIX_VEX_0F3A48,
1367 PREFIX_VEX_0F3A49,
1368 PREFIX_VEX_0F3A4A,
1369 PREFIX_VEX_0F3A4B,
1370 PREFIX_VEX_0F3A4C,
1371 PREFIX_VEX_0F3A5C,
1372 PREFIX_VEX_0F3A5D,
1373 PREFIX_VEX_0F3A5E,
1374 PREFIX_VEX_0F3A5F,
1375 PREFIX_VEX_0F3A60,
1376 PREFIX_VEX_0F3A61,
1377 PREFIX_VEX_0F3A62,
1378 PREFIX_VEX_0F3A63,
1379 PREFIX_VEX_0F3A68,
1380 PREFIX_VEX_0F3A69,
1381 PREFIX_VEX_0F3A6A,
1382 PREFIX_VEX_0F3A6B,
1383 PREFIX_VEX_0F3A6C,
1384 PREFIX_VEX_0F3A6D,
1385 PREFIX_VEX_0F3A6E,
1386 PREFIX_VEX_0F3A6F,
1387 PREFIX_VEX_0F3A78,
1388 PREFIX_VEX_0F3A79,
1389 PREFIX_VEX_0F3A7A,
1390 PREFIX_VEX_0F3A7B,
1391 PREFIX_VEX_0F3A7C,
1392 PREFIX_VEX_0F3A7D,
1393 PREFIX_VEX_0F3A7E,
1394 PREFIX_VEX_0F3A7F,
48521003
IT
1395 PREFIX_VEX_0F3ACE,
1396 PREFIX_VEX_0F3ACF,
6c30d220 1397 PREFIX_VEX_0F3ADF,
43234a1e
L
1398 PREFIX_VEX_0F3AF0,
1399
1400 PREFIX_EVEX_0F10,
1401 PREFIX_EVEX_0F11,
1402 PREFIX_EVEX_0F12,
1403 PREFIX_EVEX_0F13,
1404 PREFIX_EVEX_0F14,
1405 PREFIX_EVEX_0F15,
1406 PREFIX_EVEX_0F16,
1407 PREFIX_EVEX_0F17,
1408 PREFIX_EVEX_0F28,
1409 PREFIX_EVEX_0F29,
1410 PREFIX_EVEX_0F2A,
1411 PREFIX_EVEX_0F2B,
1412 PREFIX_EVEX_0F2C,
1413 PREFIX_EVEX_0F2D,
1414 PREFIX_EVEX_0F2E,
1415 PREFIX_EVEX_0F2F,
1416 PREFIX_EVEX_0F51,
90a915bf
IT
1417 PREFIX_EVEX_0F54,
1418 PREFIX_EVEX_0F55,
1419 PREFIX_EVEX_0F56,
1420 PREFIX_EVEX_0F57,
43234a1e
L
1421 PREFIX_EVEX_0F58,
1422 PREFIX_EVEX_0F59,
1423 PREFIX_EVEX_0F5A,
1424 PREFIX_EVEX_0F5B,
1425 PREFIX_EVEX_0F5C,
1426 PREFIX_EVEX_0F5D,
1427 PREFIX_EVEX_0F5E,
1428 PREFIX_EVEX_0F5F,
1ba585e8
IT
1429 PREFIX_EVEX_0F60,
1430 PREFIX_EVEX_0F61,
43234a1e 1431 PREFIX_EVEX_0F62,
1ba585e8
IT
1432 PREFIX_EVEX_0F63,
1433 PREFIX_EVEX_0F64,
1434 PREFIX_EVEX_0F65,
43234a1e 1435 PREFIX_EVEX_0F66,
1ba585e8
IT
1436 PREFIX_EVEX_0F67,
1437 PREFIX_EVEX_0F68,
1438 PREFIX_EVEX_0F69,
43234a1e 1439 PREFIX_EVEX_0F6A,
1ba585e8 1440 PREFIX_EVEX_0F6B,
43234a1e
L
1441 PREFIX_EVEX_0F6C,
1442 PREFIX_EVEX_0F6D,
1443 PREFIX_EVEX_0F6E,
1444 PREFIX_EVEX_0F6F,
1445 PREFIX_EVEX_0F70,
1ba585e8
IT
1446 PREFIX_EVEX_0F71_REG_2,
1447 PREFIX_EVEX_0F71_REG_4,
1448 PREFIX_EVEX_0F71_REG_6,
43234a1e
L
1449 PREFIX_EVEX_0F72_REG_0,
1450 PREFIX_EVEX_0F72_REG_1,
1451 PREFIX_EVEX_0F72_REG_2,
1452 PREFIX_EVEX_0F72_REG_4,
1453 PREFIX_EVEX_0F72_REG_6,
1454 PREFIX_EVEX_0F73_REG_2,
1ba585e8 1455 PREFIX_EVEX_0F73_REG_3,
43234a1e 1456 PREFIX_EVEX_0F73_REG_6,
1ba585e8
IT
1457 PREFIX_EVEX_0F73_REG_7,
1458 PREFIX_EVEX_0F74,
1459 PREFIX_EVEX_0F75,
43234a1e
L
1460 PREFIX_EVEX_0F76,
1461 PREFIX_EVEX_0F78,
1462 PREFIX_EVEX_0F79,
1463 PREFIX_EVEX_0F7A,
1464 PREFIX_EVEX_0F7B,
1465 PREFIX_EVEX_0F7E,
1466 PREFIX_EVEX_0F7F,
1467 PREFIX_EVEX_0FC2,
1ba585e8
IT
1468 PREFIX_EVEX_0FC4,
1469 PREFIX_EVEX_0FC5,
43234a1e 1470 PREFIX_EVEX_0FC6,
1ba585e8 1471 PREFIX_EVEX_0FD1,
43234a1e
L
1472 PREFIX_EVEX_0FD2,
1473 PREFIX_EVEX_0FD3,
1474 PREFIX_EVEX_0FD4,
1ba585e8 1475 PREFIX_EVEX_0FD5,
43234a1e 1476 PREFIX_EVEX_0FD6,
1ba585e8
IT
1477 PREFIX_EVEX_0FD8,
1478 PREFIX_EVEX_0FD9,
1479 PREFIX_EVEX_0FDA,
43234a1e 1480 PREFIX_EVEX_0FDB,
1ba585e8
IT
1481 PREFIX_EVEX_0FDC,
1482 PREFIX_EVEX_0FDD,
1483 PREFIX_EVEX_0FDE,
43234a1e 1484 PREFIX_EVEX_0FDF,
1ba585e8
IT
1485 PREFIX_EVEX_0FE0,
1486 PREFIX_EVEX_0FE1,
43234a1e 1487 PREFIX_EVEX_0FE2,
1ba585e8
IT
1488 PREFIX_EVEX_0FE3,
1489 PREFIX_EVEX_0FE4,
1490 PREFIX_EVEX_0FE5,
43234a1e
L
1491 PREFIX_EVEX_0FE6,
1492 PREFIX_EVEX_0FE7,
1ba585e8
IT
1493 PREFIX_EVEX_0FE8,
1494 PREFIX_EVEX_0FE9,
1495 PREFIX_EVEX_0FEA,
43234a1e 1496 PREFIX_EVEX_0FEB,
1ba585e8
IT
1497 PREFIX_EVEX_0FEC,
1498 PREFIX_EVEX_0FED,
1499 PREFIX_EVEX_0FEE,
43234a1e 1500 PREFIX_EVEX_0FEF,
1ba585e8 1501 PREFIX_EVEX_0FF1,
43234a1e
L
1502 PREFIX_EVEX_0FF2,
1503 PREFIX_EVEX_0FF3,
1504 PREFIX_EVEX_0FF4,
1ba585e8
IT
1505 PREFIX_EVEX_0FF5,
1506 PREFIX_EVEX_0FF6,
1507 PREFIX_EVEX_0FF8,
1508 PREFIX_EVEX_0FF9,
43234a1e
L
1509 PREFIX_EVEX_0FFA,
1510 PREFIX_EVEX_0FFB,
1ba585e8
IT
1511 PREFIX_EVEX_0FFC,
1512 PREFIX_EVEX_0FFD,
43234a1e 1513 PREFIX_EVEX_0FFE,
1ba585e8
IT
1514 PREFIX_EVEX_0F3800,
1515 PREFIX_EVEX_0F3804,
1516 PREFIX_EVEX_0F380B,
43234a1e
L
1517 PREFIX_EVEX_0F380C,
1518 PREFIX_EVEX_0F380D,
1ba585e8 1519 PREFIX_EVEX_0F3810,
43234a1e
L
1520 PREFIX_EVEX_0F3811,
1521 PREFIX_EVEX_0F3812,
1522 PREFIX_EVEX_0F3813,
1523 PREFIX_EVEX_0F3814,
1524 PREFIX_EVEX_0F3815,
1525 PREFIX_EVEX_0F3816,
1526 PREFIX_EVEX_0F3818,
1527 PREFIX_EVEX_0F3819,
1528 PREFIX_EVEX_0F381A,
1529 PREFIX_EVEX_0F381B,
1ba585e8
IT
1530 PREFIX_EVEX_0F381C,
1531 PREFIX_EVEX_0F381D,
43234a1e
L
1532 PREFIX_EVEX_0F381E,
1533 PREFIX_EVEX_0F381F,
1ba585e8 1534 PREFIX_EVEX_0F3820,
43234a1e
L
1535 PREFIX_EVEX_0F3821,
1536 PREFIX_EVEX_0F3822,
1537 PREFIX_EVEX_0F3823,
1538 PREFIX_EVEX_0F3824,
1539 PREFIX_EVEX_0F3825,
1ba585e8 1540 PREFIX_EVEX_0F3826,
43234a1e
L
1541 PREFIX_EVEX_0F3827,
1542 PREFIX_EVEX_0F3828,
1543 PREFIX_EVEX_0F3829,
1544 PREFIX_EVEX_0F382A,
1ba585e8 1545 PREFIX_EVEX_0F382B,
43234a1e
L
1546 PREFIX_EVEX_0F382C,
1547 PREFIX_EVEX_0F382D,
1ba585e8 1548 PREFIX_EVEX_0F3830,
43234a1e
L
1549 PREFIX_EVEX_0F3831,
1550 PREFIX_EVEX_0F3832,
1551 PREFIX_EVEX_0F3833,
1552 PREFIX_EVEX_0F3834,
1553 PREFIX_EVEX_0F3835,
1554 PREFIX_EVEX_0F3836,
1555 PREFIX_EVEX_0F3837,
1ba585e8 1556 PREFIX_EVEX_0F3838,
43234a1e
L
1557 PREFIX_EVEX_0F3839,
1558 PREFIX_EVEX_0F383A,
1559 PREFIX_EVEX_0F383B,
1ba585e8 1560 PREFIX_EVEX_0F383C,
43234a1e 1561 PREFIX_EVEX_0F383D,
1ba585e8 1562 PREFIX_EVEX_0F383E,
43234a1e
L
1563 PREFIX_EVEX_0F383F,
1564 PREFIX_EVEX_0F3840,
1565 PREFIX_EVEX_0F3842,
1566 PREFIX_EVEX_0F3843,
1567 PREFIX_EVEX_0F3844,
1568 PREFIX_EVEX_0F3845,
1569 PREFIX_EVEX_0F3846,
1570 PREFIX_EVEX_0F3847,
1571 PREFIX_EVEX_0F384C,
1572 PREFIX_EVEX_0F384D,
1573 PREFIX_EVEX_0F384E,
1574 PREFIX_EVEX_0F384F,
8cfcb765
IT
1575 PREFIX_EVEX_0F3850,
1576 PREFIX_EVEX_0F3851,
47acf0bd
IT
1577 PREFIX_EVEX_0F3852,
1578 PREFIX_EVEX_0F3853,
620214f7 1579 PREFIX_EVEX_0F3855,
43234a1e
L
1580 PREFIX_EVEX_0F3858,
1581 PREFIX_EVEX_0F3859,
1582 PREFIX_EVEX_0F385A,
1583 PREFIX_EVEX_0F385B,
53467f57
IT
1584 PREFIX_EVEX_0F3862,
1585 PREFIX_EVEX_0F3863,
43234a1e
L
1586 PREFIX_EVEX_0F3864,
1587 PREFIX_EVEX_0F3865,
1ba585e8 1588 PREFIX_EVEX_0F3866,
53467f57
IT
1589 PREFIX_EVEX_0F3870,
1590 PREFIX_EVEX_0F3871,
1591 PREFIX_EVEX_0F3872,
1592 PREFIX_EVEX_0F3873,
1ba585e8 1593 PREFIX_EVEX_0F3875,
43234a1e
L
1594 PREFIX_EVEX_0F3876,
1595 PREFIX_EVEX_0F3877,
1ba585e8
IT
1596 PREFIX_EVEX_0F3878,
1597 PREFIX_EVEX_0F3879,
1598 PREFIX_EVEX_0F387A,
1599 PREFIX_EVEX_0F387B,
43234a1e 1600 PREFIX_EVEX_0F387C,
1ba585e8 1601 PREFIX_EVEX_0F387D,
43234a1e
L
1602 PREFIX_EVEX_0F387E,
1603 PREFIX_EVEX_0F387F,
14f195c9 1604 PREFIX_EVEX_0F3883,
43234a1e
L
1605 PREFIX_EVEX_0F3888,
1606 PREFIX_EVEX_0F3889,
1607 PREFIX_EVEX_0F388A,
1608 PREFIX_EVEX_0F388B,
1ba585e8 1609 PREFIX_EVEX_0F388D,
43234a1e
L
1610 PREFIX_EVEX_0F3890,
1611 PREFIX_EVEX_0F3891,
1612 PREFIX_EVEX_0F3892,
1613 PREFIX_EVEX_0F3893,
1614 PREFIX_EVEX_0F3896,
1615 PREFIX_EVEX_0F3897,
1616 PREFIX_EVEX_0F3898,
1617 PREFIX_EVEX_0F3899,
1618 PREFIX_EVEX_0F389A,
1619 PREFIX_EVEX_0F389B,
1620 PREFIX_EVEX_0F389C,
1621 PREFIX_EVEX_0F389D,
1622 PREFIX_EVEX_0F389E,
1623 PREFIX_EVEX_0F389F,
1624 PREFIX_EVEX_0F38A0,
1625 PREFIX_EVEX_0F38A1,
1626 PREFIX_EVEX_0F38A2,
1627 PREFIX_EVEX_0F38A3,
1628 PREFIX_EVEX_0F38A6,
1629 PREFIX_EVEX_0F38A7,
1630 PREFIX_EVEX_0F38A8,
1631 PREFIX_EVEX_0F38A9,
1632 PREFIX_EVEX_0F38AA,
1633 PREFIX_EVEX_0F38AB,
1634 PREFIX_EVEX_0F38AC,
1635 PREFIX_EVEX_0F38AD,
1636 PREFIX_EVEX_0F38AE,
1637 PREFIX_EVEX_0F38AF,
2cc1b5aa
IT
1638 PREFIX_EVEX_0F38B4,
1639 PREFIX_EVEX_0F38B5,
43234a1e
L
1640 PREFIX_EVEX_0F38B6,
1641 PREFIX_EVEX_0F38B7,
1642 PREFIX_EVEX_0F38B8,
1643 PREFIX_EVEX_0F38B9,
1644 PREFIX_EVEX_0F38BA,
1645 PREFIX_EVEX_0F38BB,
1646 PREFIX_EVEX_0F38BC,
1647 PREFIX_EVEX_0F38BD,
1648 PREFIX_EVEX_0F38BE,
1649 PREFIX_EVEX_0F38BF,
1650 PREFIX_EVEX_0F38C4,
1651 PREFIX_EVEX_0F38C6_REG_1,
1652 PREFIX_EVEX_0F38C6_REG_2,
1653 PREFIX_EVEX_0F38C6_REG_5,
1654 PREFIX_EVEX_0F38C6_REG_6,
1655 PREFIX_EVEX_0F38C7_REG_1,
1656 PREFIX_EVEX_0F38C7_REG_2,
1657 PREFIX_EVEX_0F38C7_REG_5,
1658 PREFIX_EVEX_0F38C7_REG_6,
1659 PREFIX_EVEX_0F38C8,
1660 PREFIX_EVEX_0F38CA,
1661 PREFIX_EVEX_0F38CB,
1662 PREFIX_EVEX_0F38CC,
1663 PREFIX_EVEX_0F38CD,
48521003 1664 PREFIX_EVEX_0F38CF,
8dcf1fad
IT
1665 PREFIX_EVEX_0F38DC,
1666 PREFIX_EVEX_0F38DD,
1667 PREFIX_EVEX_0F38DE,
1668 PREFIX_EVEX_0F38DF,
43234a1e
L
1669
1670 PREFIX_EVEX_0F3A00,
1671 PREFIX_EVEX_0F3A01,
1672 PREFIX_EVEX_0F3A03,
1673 PREFIX_EVEX_0F3A04,
1674 PREFIX_EVEX_0F3A05,
1675 PREFIX_EVEX_0F3A08,
1676 PREFIX_EVEX_0F3A09,
1677 PREFIX_EVEX_0F3A0A,
1678 PREFIX_EVEX_0F3A0B,
1ba585e8
IT
1679 PREFIX_EVEX_0F3A0F,
1680 PREFIX_EVEX_0F3A14,
1681 PREFIX_EVEX_0F3A15,
90a915bf 1682 PREFIX_EVEX_0F3A16,
43234a1e
L
1683 PREFIX_EVEX_0F3A17,
1684 PREFIX_EVEX_0F3A18,
1685 PREFIX_EVEX_0F3A19,
1686 PREFIX_EVEX_0F3A1A,
1687 PREFIX_EVEX_0F3A1B,
1688 PREFIX_EVEX_0F3A1D,
1689 PREFIX_EVEX_0F3A1E,
1690 PREFIX_EVEX_0F3A1F,
1ba585e8 1691 PREFIX_EVEX_0F3A20,
43234a1e 1692 PREFIX_EVEX_0F3A21,
90a915bf 1693 PREFIX_EVEX_0F3A22,
43234a1e
L
1694 PREFIX_EVEX_0F3A23,
1695 PREFIX_EVEX_0F3A25,
1696 PREFIX_EVEX_0F3A26,
1697 PREFIX_EVEX_0F3A27,
1698 PREFIX_EVEX_0F3A38,
1699 PREFIX_EVEX_0F3A39,
1700 PREFIX_EVEX_0F3A3A,
1701 PREFIX_EVEX_0F3A3B,
1ba585e8
IT
1702 PREFIX_EVEX_0F3A3E,
1703 PREFIX_EVEX_0F3A3F,
1704 PREFIX_EVEX_0F3A42,
43234a1e 1705 PREFIX_EVEX_0F3A43,
ff1982d5 1706 PREFIX_EVEX_0F3A44,
90a915bf
IT
1707 PREFIX_EVEX_0F3A50,
1708 PREFIX_EVEX_0F3A51,
43234a1e 1709 PREFIX_EVEX_0F3A54,
90a915bf
IT
1710 PREFIX_EVEX_0F3A55,
1711 PREFIX_EVEX_0F3A56,
1712 PREFIX_EVEX_0F3A57,
1713 PREFIX_EVEX_0F3A66,
53467f57
IT
1714 PREFIX_EVEX_0F3A67,
1715 PREFIX_EVEX_0F3A70,
1716 PREFIX_EVEX_0F3A71,
1717 PREFIX_EVEX_0F3A72,
48521003
IT
1718 PREFIX_EVEX_0F3A73,
1719 PREFIX_EVEX_0F3ACE,
1720 PREFIX_EVEX_0F3ACF
51e7da1b 1721};
4e7d34a6 1722
51e7da1b
L
1723enum
1724{
1725 X86_64_06 = 0,
3873ba12
L
1726 X86_64_07,
1727 X86_64_0D,
1728 X86_64_16,
1729 X86_64_17,
1730 X86_64_1E,
1731 X86_64_1F,
1732 X86_64_27,
1733 X86_64_2F,
1734 X86_64_37,
1735 X86_64_3F,
1736 X86_64_60,
1737 X86_64_61,
1738 X86_64_62,
1739 X86_64_63,
1740 X86_64_6D,
1741 X86_64_6F,
d039fef3 1742 X86_64_82,
3873ba12
L
1743 X86_64_9A,
1744 X86_64_C4,
1745 X86_64_C5,
1746 X86_64_CE,
1747 X86_64_D4,
1748 X86_64_D5,
a72d2af2
L
1749 X86_64_E8,
1750 X86_64_E9,
3873ba12
L
1751 X86_64_EA,
1752 X86_64_0F01_REG_0,
1753 X86_64_0F01_REG_1,
1754 X86_64_0F01_REG_2,
1755 X86_64_0F01_REG_3
51e7da1b 1756};
4e7d34a6 1757
51e7da1b
L
1758enum
1759{
1760 THREE_BYTE_0F38 = 0,
1f334aeb 1761 THREE_BYTE_0F3A
51e7da1b 1762};
4e7d34a6 1763
f88c9eb0
SP
1764enum
1765{
5dd85c99
SP
1766 XOP_08 = 0,
1767 XOP_09,
f88c9eb0
SP
1768 XOP_0A
1769};
1770
51e7da1b
L
1771enum
1772{
1773 VEX_0F = 0,
3873ba12
L
1774 VEX_0F38,
1775 VEX_0F3A
51e7da1b 1776};
c0f3af97 1777
43234a1e
L
1778enum
1779{
1780 EVEX_0F = 0,
1781 EVEX_0F38,
1782 EVEX_0F3A
1783};
1784
51e7da1b
L
1785enum
1786{
592a252b
L
1787 VEX_LEN_0F10_P_1 = 0,
1788 VEX_LEN_0F10_P_3,
1789 VEX_LEN_0F11_P_1,
1790 VEX_LEN_0F11_P_3,
1791 VEX_LEN_0F12_P_0_M_0,
1792 VEX_LEN_0F12_P_0_M_1,
1793 VEX_LEN_0F12_P_2,
1794 VEX_LEN_0F13_M_0,
1795 VEX_LEN_0F16_P_0_M_0,
1796 VEX_LEN_0F16_P_0_M_1,
1797 VEX_LEN_0F16_P_2,
1798 VEX_LEN_0F17_M_0,
1799 VEX_LEN_0F2A_P_1,
1800 VEX_LEN_0F2A_P_3,
1801 VEX_LEN_0F2C_P_1,
1802 VEX_LEN_0F2C_P_3,
1803 VEX_LEN_0F2D_P_1,
1804 VEX_LEN_0F2D_P_3,
1805 VEX_LEN_0F2E_P_0,
1806 VEX_LEN_0F2E_P_2,
1807 VEX_LEN_0F2F_P_0,
1808 VEX_LEN_0F2F_P_2,
43234a1e 1809 VEX_LEN_0F41_P_0,
1ba585e8 1810 VEX_LEN_0F41_P_2,
43234a1e 1811 VEX_LEN_0F42_P_0,
1ba585e8 1812 VEX_LEN_0F42_P_2,
43234a1e 1813 VEX_LEN_0F44_P_0,
1ba585e8 1814 VEX_LEN_0F44_P_2,
43234a1e 1815 VEX_LEN_0F45_P_0,
1ba585e8 1816 VEX_LEN_0F45_P_2,
43234a1e 1817 VEX_LEN_0F46_P_0,
1ba585e8 1818 VEX_LEN_0F46_P_2,
43234a1e 1819 VEX_LEN_0F47_P_0,
1ba585e8
IT
1820 VEX_LEN_0F47_P_2,
1821 VEX_LEN_0F4A_P_0,
1822 VEX_LEN_0F4A_P_2,
1823 VEX_LEN_0F4B_P_0,
43234a1e 1824 VEX_LEN_0F4B_P_2,
592a252b
L
1825 VEX_LEN_0F51_P_1,
1826 VEX_LEN_0F51_P_3,
1827 VEX_LEN_0F52_P_1,
1828 VEX_LEN_0F53_P_1,
1829 VEX_LEN_0F58_P_1,
1830 VEX_LEN_0F58_P_3,
1831 VEX_LEN_0F59_P_1,
1832 VEX_LEN_0F59_P_3,
1833 VEX_LEN_0F5A_P_1,
1834 VEX_LEN_0F5A_P_3,
1835 VEX_LEN_0F5C_P_1,
1836 VEX_LEN_0F5C_P_3,
1837 VEX_LEN_0F5D_P_1,
1838 VEX_LEN_0F5D_P_3,
1839 VEX_LEN_0F5E_P_1,
1840 VEX_LEN_0F5E_P_3,
1841 VEX_LEN_0F5F_P_1,
1842 VEX_LEN_0F5F_P_3,
592a252b 1843 VEX_LEN_0F6E_P_2,
592a252b
L
1844 VEX_LEN_0F7E_P_1,
1845 VEX_LEN_0F7E_P_2,
43234a1e 1846 VEX_LEN_0F90_P_0,
1ba585e8 1847 VEX_LEN_0F90_P_2,
43234a1e 1848 VEX_LEN_0F91_P_0,
1ba585e8 1849 VEX_LEN_0F91_P_2,
43234a1e 1850 VEX_LEN_0F92_P_0,
90a915bf 1851 VEX_LEN_0F92_P_2,
1ba585e8 1852 VEX_LEN_0F92_P_3,
43234a1e 1853 VEX_LEN_0F93_P_0,
90a915bf 1854 VEX_LEN_0F93_P_2,
1ba585e8 1855 VEX_LEN_0F93_P_3,
43234a1e 1856 VEX_LEN_0F98_P_0,
1ba585e8
IT
1857 VEX_LEN_0F98_P_2,
1858 VEX_LEN_0F99_P_0,
1859 VEX_LEN_0F99_P_2,
592a252b
L
1860 VEX_LEN_0FAE_R_2_M_0,
1861 VEX_LEN_0FAE_R_3_M_0,
1862 VEX_LEN_0FC2_P_1,
1863 VEX_LEN_0FC2_P_3,
1864 VEX_LEN_0FC4_P_2,
1865 VEX_LEN_0FC5_P_2,
592a252b 1866 VEX_LEN_0FD6_P_2,
592a252b 1867 VEX_LEN_0FF7_P_2,
6c30d220
L
1868 VEX_LEN_0F3816_P_2,
1869 VEX_LEN_0F3819_P_2,
592a252b 1870 VEX_LEN_0F381A_P_2_M_0,
6c30d220 1871 VEX_LEN_0F3836_P_2,
592a252b 1872 VEX_LEN_0F3841_P_2,
6c30d220 1873 VEX_LEN_0F385A_P_2_M_0,
592a252b 1874 VEX_LEN_0F38DB_P_2,
f12dc422
L
1875 VEX_LEN_0F38F2_P_0,
1876 VEX_LEN_0F38F3_R_1_P_0,
1877 VEX_LEN_0F38F3_R_2_P_0,
1878 VEX_LEN_0F38F3_R_3_P_0,
6c30d220
L
1879 VEX_LEN_0F38F5_P_0,
1880 VEX_LEN_0F38F5_P_1,
1881 VEX_LEN_0F38F5_P_3,
1882 VEX_LEN_0F38F6_P_3,
f12dc422 1883 VEX_LEN_0F38F7_P_0,
6c30d220
L
1884 VEX_LEN_0F38F7_P_1,
1885 VEX_LEN_0F38F7_P_2,
1886 VEX_LEN_0F38F7_P_3,
1887 VEX_LEN_0F3A00_P_2,
1888 VEX_LEN_0F3A01_P_2,
592a252b
L
1889 VEX_LEN_0F3A06_P_2,
1890 VEX_LEN_0F3A0A_P_2,
1891 VEX_LEN_0F3A0B_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
9e30b8e0
L
1935enum
1936{
592a252b
L
1937 VEX_W_0F10_P_0 = 0,
1938 VEX_W_0F10_P_1,
1939 VEX_W_0F10_P_2,
1940 VEX_W_0F10_P_3,
1941 VEX_W_0F11_P_0,
1942 VEX_W_0F11_P_1,
1943 VEX_W_0F11_P_2,
1944 VEX_W_0F11_P_3,
1945 VEX_W_0F12_P_0_M_0,
1946 VEX_W_0F12_P_0_M_1,
1947 VEX_W_0F12_P_1,
1948 VEX_W_0F12_P_2,
1949 VEX_W_0F12_P_3,
1950 VEX_W_0F13_M_0,
1951 VEX_W_0F14,
1952 VEX_W_0F15,
1953 VEX_W_0F16_P_0_M_0,
1954 VEX_W_0F16_P_0_M_1,
1955 VEX_W_0F16_P_1,
1956 VEX_W_0F16_P_2,
1957 VEX_W_0F17_M_0,
1958 VEX_W_0F28,
1959 VEX_W_0F29,
1960 VEX_W_0F2B_M_0,
1961 VEX_W_0F2E_P_0,
1962 VEX_W_0F2E_P_2,
1963 VEX_W_0F2F_P_0,
1964 VEX_W_0F2F_P_2,
43234a1e 1965 VEX_W_0F41_P_0_LEN_1,
1ba585e8 1966 VEX_W_0F41_P_2_LEN_1,
43234a1e 1967 VEX_W_0F42_P_0_LEN_1,
1ba585e8 1968 VEX_W_0F42_P_2_LEN_1,
43234a1e 1969 VEX_W_0F44_P_0_LEN_0,
1ba585e8 1970 VEX_W_0F44_P_2_LEN_0,
43234a1e 1971 VEX_W_0F45_P_0_LEN_1,
1ba585e8 1972 VEX_W_0F45_P_2_LEN_1,
43234a1e 1973 VEX_W_0F46_P_0_LEN_1,
1ba585e8 1974 VEX_W_0F46_P_2_LEN_1,
43234a1e 1975 VEX_W_0F47_P_0_LEN_1,
1ba585e8
IT
1976 VEX_W_0F47_P_2_LEN_1,
1977 VEX_W_0F4A_P_0_LEN_1,
1978 VEX_W_0F4A_P_2_LEN_1,
1979 VEX_W_0F4B_P_0_LEN_1,
43234a1e 1980 VEX_W_0F4B_P_2_LEN_1,
592a252b
L
1981 VEX_W_0F50_M_0,
1982 VEX_W_0F51_P_0,
1983 VEX_W_0F51_P_1,
1984 VEX_W_0F51_P_2,
1985 VEX_W_0F51_P_3,
1986 VEX_W_0F52_P_0,
1987 VEX_W_0F52_P_1,
1988 VEX_W_0F53_P_0,
1989 VEX_W_0F53_P_1,
1990 VEX_W_0F58_P_0,
1991 VEX_W_0F58_P_1,
1992 VEX_W_0F58_P_2,
1993 VEX_W_0F58_P_3,
1994 VEX_W_0F59_P_0,
1995 VEX_W_0F59_P_1,
1996 VEX_W_0F59_P_2,
1997 VEX_W_0F59_P_3,
1998 VEX_W_0F5A_P_0,
1999 VEX_W_0F5A_P_1,
2000 VEX_W_0F5A_P_3,
2001 VEX_W_0F5B_P_0,
2002 VEX_W_0F5B_P_1,
2003 VEX_W_0F5B_P_2,
2004 VEX_W_0F5C_P_0,
2005 VEX_W_0F5C_P_1,
2006 VEX_W_0F5C_P_2,
2007 VEX_W_0F5C_P_3,
2008 VEX_W_0F5D_P_0,
2009 VEX_W_0F5D_P_1,
2010 VEX_W_0F5D_P_2,
2011 VEX_W_0F5D_P_3,
2012 VEX_W_0F5E_P_0,
2013 VEX_W_0F5E_P_1,
2014 VEX_W_0F5E_P_2,
2015 VEX_W_0F5E_P_3,
2016 VEX_W_0F5F_P_0,
2017 VEX_W_0F5F_P_1,
2018 VEX_W_0F5F_P_2,
2019 VEX_W_0F5F_P_3,
2020 VEX_W_0F60_P_2,
2021 VEX_W_0F61_P_2,
2022 VEX_W_0F62_P_2,
2023 VEX_W_0F63_P_2,
2024 VEX_W_0F64_P_2,
2025 VEX_W_0F65_P_2,
2026 VEX_W_0F66_P_2,
2027 VEX_W_0F67_P_2,
2028 VEX_W_0F68_P_2,
2029 VEX_W_0F69_P_2,
2030 VEX_W_0F6A_P_2,
2031 VEX_W_0F6B_P_2,
2032 VEX_W_0F6C_P_2,
2033 VEX_W_0F6D_P_2,
2034 VEX_W_0F6F_P_1,
2035 VEX_W_0F6F_P_2,
2036 VEX_W_0F70_P_1,
2037 VEX_W_0F70_P_2,
2038 VEX_W_0F70_P_3,
2039 VEX_W_0F71_R_2_P_2,
2040 VEX_W_0F71_R_4_P_2,
2041 VEX_W_0F71_R_6_P_2,
2042 VEX_W_0F72_R_2_P_2,
2043 VEX_W_0F72_R_4_P_2,
2044 VEX_W_0F72_R_6_P_2,
2045 VEX_W_0F73_R_2_P_2,
2046 VEX_W_0F73_R_3_P_2,
2047 VEX_W_0F73_R_6_P_2,
2048 VEX_W_0F73_R_7_P_2,
2049 VEX_W_0F74_P_2,
2050 VEX_W_0F75_P_2,
2051 VEX_W_0F76_P_2,
2052 VEX_W_0F77_P_0,
2053 VEX_W_0F7C_P_2,
2054 VEX_W_0F7C_P_3,
2055 VEX_W_0F7D_P_2,
2056 VEX_W_0F7D_P_3,
2057 VEX_W_0F7E_P_1,
2058 VEX_W_0F7F_P_1,
2059 VEX_W_0F7F_P_2,
43234a1e 2060 VEX_W_0F90_P_0_LEN_0,
1ba585e8 2061 VEX_W_0F90_P_2_LEN_0,
43234a1e 2062 VEX_W_0F91_P_0_LEN_0,
1ba585e8 2063 VEX_W_0F91_P_2_LEN_0,
43234a1e 2064 VEX_W_0F92_P_0_LEN_0,
90a915bf 2065 VEX_W_0F92_P_2_LEN_0,
1ba585e8 2066 VEX_W_0F92_P_3_LEN_0,
43234a1e 2067 VEX_W_0F93_P_0_LEN_0,
90a915bf 2068 VEX_W_0F93_P_2_LEN_0,
1ba585e8 2069 VEX_W_0F93_P_3_LEN_0,
43234a1e 2070 VEX_W_0F98_P_0_LEN_0,
1ba585e8
IT
2071 VEX_W_0F98_P_2_LEN_0,
2072 VEX_W_0F99_P_0_LEN_0,
2073 VEX_W_0F99_P_2_LEN_0,
592a252b
L
2074 VEX_W_0FAE_R_2_M_0,
2075 VEX_W_0FAE_R_3_M_0,
2076 VEX_W_0FC2_P_0,
2077 VEX_W_0FC2_P_1,
2078 VEX_W_0FC2_P_2,
2079 VEX_W_0FC2_P_3,
2080 VEX_W_0FC4_P_2,
2081 VEX_W_0FC5_P_2,
2082 VEX_W_0FD0_P_2,
2083 VEX_W_0FD0_P_3,
2084 VEX_W_0FD1_P_2,
2085 VEX_W_0FD2_P_2,
2086 VEX_W_0FD3_P_2,
2087 VEX_W_0FD4_P_2,
2088 VEX_W_0FD5_P_2,
2089 VEX_W_0FD6_P_2,
2090 VEX_W_0FD7_P_2_M_1,
2091 VEX_W_0FD8_P_2,
2092 VEX_W_0FD9_P_2,
2093 VEX_W_0FDA_P_2,
2094 VEX_W_0FDB_P_2,
2095 VEX_W_0FDC_P_2,
2096 VEX_W_0FDD_P_2,
2097 VEX_W_0FDE_P_2,
2098 VEX_W_0FDF_P_2,
2099 VEX_W_0FE0_P_2,
2100 VEX_W_0FE1_P_2,
2101 VEX_W_0FE2_P_2,
2102 VEX_W_0FE3_P_2,
2103 VEX_W_0FE4_P_2,
2104 VEX_W_0FE5_P_2,
2105 VEX_W_0FE6_P_1,
2106 VEX_W_0FE6_P_2,
2107 VEX_W_0FE6_P_3,
2108 VEX_W_0FE7_P_2_M_0,
2109 VEX_W_0FE8_P_2,
2110 VEX_W_0FE9_P_2,
2111 VEX_W_0FEA_P_2,
2112 VEX_W_0FEB_P_2,
2113 VEX_W_0FEC_P_2,
2114 VEX_W_0FED_P_2,
2115 VEX_W_0FEE_P_2,
2116 VEX_W_0FEF_P_2,
2117 VEX_W_0FF0_P_3_M_0,
2118 VEX_W_0FF1_P_2,
2119 VEX_W_0FF2_P_2,
2120 VEX_W_0FF3_P_2,
2121 VEX_W_0FF4_P_2,
2122 VEX_W_0FF5_P_2,
2123 VEX_W_0FF6_P_2,
2124 VEX_W_0FF7_P_2,
2125 VEX_W_0FF8_P_2,
2126 VEX_W_0FF9_P_2,
2127 VEX_W_0FFA_P_2,
2128 VEX_W_0FFB_P_2,
2129 VEX_W_0FFC_P_2,
2130 VEX_W_0FFD_P_2,
2131 VEX_W_0FFE_P_2,
2132 VEX_W_0F3800_P_2,
2133 VEX_W_0F3801_P_2,
2134 VEX_W_0F3802_P_2,
2135 VEX_W_0F3803_P_2,
2136 VEX_W_0F3804_P_2,
2137 VEX_W_0F3805_P_2,
2138 VEX_W_0F3806_P_2,
2139 VEX_W_0F3807_P_2,
2140 VEX_W_0F3808_P_2,
2141 VEX_W_0F3809_P_2,
2142 VEX_W_0F380A_P_2,
2143 VEX_W_0F380B_P_2,
2144 VEX_W_0F380C_P_2,
2145 VEX_W_0F380D_P_2,
2146 VEX_W_0F380E_P_2,
2147 VEX_W_0F380F_P_2,
6c30d220 2148 VEX_W_0F3816_P_2,
592a252b 2149 VEX_W_0F3817_P_2,
6c30d220
L
2150 VEX_W_0F3818_P_2,
2151 VEX_W_0F3819_P_2,
592a252b
L
2152 VEX_W_0F381A_P_2_M_0,
2153 VEX_W_0F381C_P_2,
2154 VEX_W_0F381D_P_2,
2155 VEX_W_0F381E_P_2,
2156 VEX_W_0F3820_P_2,
2157 VEX_W_0F3821_P_2,
2158 VEX_W_0F3822_P_2,
2159 VEX_W_0F3823_P_2,
2160 VEX_W_0F3824_P_2,
2161 VEX_W_0F3825_P_2,
2162 VEX_W_0F3828_P_2,
2163 VEX_W_0F3829_P_2,
2164 VEX_W_0F382A_P_2_M_0,
2165 VEX_W_0F382B_P_2,
2166 VEX_W_0F382C_P_2_M_0,
2167 VEX_W_0F382D_P_2_M_0,
2168 VEX_W_0F382E_P_2_M_0,
2169 VEX_W_0F382F_P_2_M_0,
2170 VEX_W_0F3830_P_2,
2171 VEX_W_0F3831_P_2,
2172 VEX_W_0F3832_P_2,
2173 VEX_W_0F3833_P_2,
2174 VEX_W_0F3834_P_2,
2175 VEX_W_0F3835_P_2,
6c30d220 2176 VEX_W_0F3836_P_2,
592a252b
L
2177 VEX_W_0F3837_P_2,
2178 VEX_W_0F3838_P_2,
2179 VEX_W_0F3839_P_2,
2180 VEX_W_0F383A_P_2,
2181 VEX_W_0F383B_P_2,
2182 VEX_W_0F383C_P_2,
2183 VEX_W_0F383D_P_2,
2184 VEX_W_0F383E_P_2,
2185 VEX_W_0F383F_P_2,
2186 VEX_W_0F3840_P_2,
2187 VEX_W_0F3841_P_2,
6c30d220
L
2188 VEX_W_0F3846_P_2,
2189 VEX_W_0F3858_P_2,
2190 VEX_W_0F3859_P_2,
2191 VEX_W_0F385A_P_2_M_0,
2192 VEX_W_0F3878_P_2,
2193 VEX_W_0F3879_P_2,
48521003 2194 VEX_W_0F38CF_P_2,
592a252b 2195 VEX_W_0F38DB_P_2,
6c30d220
L
2196 VEX_W_0F3A00_P_2,
2197 VEX_W_0F3A01_P_2,
2198 VEX_W_0F3A02_P_2,
592a252b
L
2199 VEX_W_0F3A04_P_2,
2200 VEX_W_0F3A05_P_2,
2201 VEX_W_0F3A06_P_2,
2202 VEX_W_0F3A08_P_2,
2203 VEX_W_0F3A09_P_2,
2204 VEX_W_0F3A0A_P_2,
2205 VEX_W_0F3A0B_P_2,
2206 VEX_W_0F3A0C_P_2,
2207 VEX_W_0F3A0D_P_2,
2208 VEX_W_0F3A0E_P_2,
2209 VEX_W_0F3A0F_P_2,
2210 VEX_W_0F3A14_P_2,
2211 VEX_W_0F3A15_P_2,
2212 VEX_W_0F3A18_P_2,
2213 VEX_W_0F3A19_P_2,
2214 VEX_W_0F3A20_P_2,
2215 VEX_W_0F3A21_P_2,
43234a1e 2216 VEX_W_0F3A30_P_2_LEN_0,
1ba585e8 2217 VEX_W_0F3A31_P_2_LEN_0,
43234a1e 2218 VEX_W_0F3A32_P_2_LEN_0,
1ba585e8 2219 VEX_W_0F3A33_P_2_LEN_0,
6c30d220
L
2220 VEX_W_0F3A38_P_2,
2221 VEX_W_0F3A39_P_2,
592a252b
L
2222 VEX_W_0F3A40_P_2,
2223 VEX_W_0F3A41_P_2,
2224 VEX_W_0F3A42_P_2,
6c30d220 2225 VEX_W_0F3A46_P_2,
592a252b
L
2226 VEX_W_0F3A48_P_2,
2227 VEX_W_0F3A49_P_2,
2228 VEX_W_0F3A4A_P_2,
2229 VEX_W_0F3A4B_P_2,
2230 VEX_W_0F3A4C_P_2,
592a252b
L
2231 VEX_W_0F3A62_P_2,
2232 VEX_W_0F3A63_P_2,
48521003
IT
2233 VEX_W_0F3ACE_P_2,
2234 VEX_W_0F3ACF_P_2,
43234a1e
L
2235 VEX_W_0F3ADF_P_2,
2236
2237 EVEX_W_0F10_P_0,
2238 EVEX_W_0F10_P_1_M_0,
2239 EVEX_W_0F10_P_1_M_1,
2240 EVEX_W_0F10_P_2,
2241 EVEX_W_0F10_P_3_M_0,
2242 EVEX_W_0F10_P_3_M_1,
2243 EVEX_W_0F11_P_0,
2244 EVEX_W_0F11_P_1_M_0,
2245 EVEX_W_0F11_P_1_M_1,
2246 EVEX_W_0F11_P_2,
2247 EVEX_W_0F11_P_3_M_0,
2248 EVEX_W_0F11_P_3_M_1,
2249 EVEX_W_0F12_P_0_M_0,
2250 EVEX_W_0F12_P_0_M_1,
2251 EVEX_W_0F12_P_1,
2252 EVEX_W_0F12_P_2,
2253 EVEX_W_0F12_P_3,
2254 EVEX_W_0F13_P_0,
2255 EVEX_W_0F13_P_2,
2256 EVEX_W_0F14_P_0,
2257 EVEX_W_0F14_P_2,
2258 EVEX_W_0F15_P_0,
2259 EVEX_W_0F15_P_2,
2260 EVEX_W_0F16_P_0_M_0,
2261 EVEX_W_0F16_P_0_M_1,
2262 EVEX_W_0F16_P_1,
2263 EVEX_W_0F16_P_2,
2264 EVEX_W_0F17_P_0,
2265 EVEX_W_0F17_P_2,
2266 EVEX_W_0F28_P_0,
2267 EVEX_W_0F28_P_2,
2268 EVEX_W_0F29_P_0,
2269 EVEX_W_0F29_P_2,
2270 EVEX_W_0F2A_P_1,
2271 EVEX_W_0F2A_P_3,
2272 EVEX_W_0F2B_P_0,
2273 EVEX_W_0F2B_P_2,
2274 EVEX_W_0F2E_P_0,
2275 EVEX_W_0F2E_P_2,
2276 EVEX_W_0F2F_P_0,
2277 EVEX_W_0F2F_P_2,
2278 EVEX_W_0F51_P_0,
2279 EVEX_W_0F51_P_1,
2280 EVEX_W_0F51_P_2,
2281 EVEX_W_0F51_P_3,
90a915bf
IT
2282 EVEX_W_0F54_P_0,
2283 EVEX_W_0F54_P_2,
2284 EVEX_W_0F55_P_0,
2285 EVEX_W_0F55_P_2,
2286 EVEX_W_0F56_P_0,
2287 EVEX_W_0F56_P_2,
2288 EVEX_W_0F57_P_0,
2289 EVEX_W_0F57_P_2,
43234a1e
L
2290 EVEX_W_0F58_P_0,
2291 EVEX_W_0F58_P_1,
2292 EVEX_W_0F58_P_2,
2293 EVEX_W_0F58_P_3,
2294 EVEX_W_0F59_P_0,
2295 EVEX_W_0F59_P_1,
2296 EVEX_W_0F59_P_2,
2297 EVEX_W_0F59_P_3,
2298 EVEX_W_0F5A_P_0,
2299 EVEX_W_0F5A_P_1,
2300 EVEX_W_0F5A_P_2,
2301 EVEX_W_0F5A_P_3,
2302 EVEX_W_0F5B_P_0,
2303 EVEX_W_0F5B_P_1,
2304 EVEX_W_0F5B_P_2,
2305 EVEX_W_0F5C_P_0,
2306 EVEX_W_0F5C_P_1,
2307 EVEX_W_0F5C_P_2,
2308 EVEX_W_0F5C_P_3,
2309 EVEX_W_0F5D_P_0,
2310 EVEX_W_0F5D_P_1,
2311 EVEX_W_0F5D_P_2,
2312 EVEX_W_0F5D_P_3,
2313 EVEX_W_0F5E_P_0,
2314 EVEX_W_0F5E_P_1,
2315 EVEX_W_0F5E_P_2,
2316 EVEX_W_0F5E_P_3,
2317 EVEX_W_0F5F_P_0,
2318 EVEX_W_0F5F_P_1,
2319 EVEX_W_0F5F_P_2,
2320 EVEX_W_0F5F_P_3,
2321 EVEX_W_0F62_P_2,
2322 EVEX_W_0F66_P_2,
2323 EVEX_W_0F6A_P_2,
1ba585e8 2324 EVEX_W_0F6B_P_2,
43234a1e
L
2325 EVEX_W_0F6C_P_2,
2326 EVEX_W_0F6D_P_2,
2327 EVEX_W_0F6E_P_2,
2328 EVEX_W_0F6F_P_1,
2329 EVEX_W_0F6F_P_2,
1ba585e8 2330 EVEX_W_0F6F_P_3,
43234a1e
L
2331 EVEX_W_0F70_P_2,
2332 EVEX_W_0F72_R_2_P_2,
2333 EVEX_W_0F72_R_6_P_2,
2334 EVEX_W_0F73_R_2_P_2,
2335 EVEX_W_0F73_R_6_P_2,
2336 EVEX_W_0F76_P_2,
2337 EVEX_W_0F78_P_0,
90a915bf 2338 EVEX_W_0F78_P_2,
43234a1e 2339 EVEX_W_0F79_P_0,
90a915bf 2340 EVEX_W_0F79_P_2,
43234a1e 2341 EVEX_W_0F7A_P_1,
90a915bf 2342 EVEX_W_0F7A_P_2,
43234a1e
L
2343 EVEX_W_0F7A_P_3,
2344 EVEX_W_0F7B_P_1,
90a915bf 2345 EVEX_W_0F7B_P_2,
43234a1e
L
2346 EVEX_W_0F7B_P_3,
2347 EVEX_W_0F7E_P_1,
2348 EVEX_W_0F7E_P_2,
2349 EVEX_W_0F7F_P_1,
2350 EVEX_W_0F7F_P_2,
1ba585e8 2351 EVEX_W_0F7F_P_3,
43234a1e
L
2352 EVEX_W_0FC2_P_0,
2353 EVEX_W_0FC2_P_1,
2354 EVEX_W_0FC2_P_2,
2355 EVEX_W_0FC2_P_3,
2356 EVEX_W_0FC6_P_0,
2357 EVEX_W_0FC6_P_2,
2358 EVEX_W_0FD2_P_2,
2359 EVEX_W_0FD3_P_2,
2360 EVEX_W_0FD4_P_2,
2361 EVEX_W_0FD6_P_2,
2362 EVEX_W_0FE6_P_1,
2363 EVEX_W_0FE6_P_2,
2364 EVEX_W_0FE6_P_3,
2365 EVEX_W_0FE7_P_2,
2366 EVEX_W_0FF2_P_2,
2367 EVEX_W_0FF3_P_2,
2368 EVEX_W_0FF4_P_2,
2369 EVEX_W_0FFA_P_2,
2370 EVEX_W_0FFB_P_2,
2371 EVEX_W_0FFE_P_2,
2372 EVEX_W_0F380C_P_2,
2373 EVEX_W_0F380D_P_2,
1ba585e8
IT
2374 EVEX_W_0F3810_P_1,
2375 EVEX_W_0F3810_P_2,
43234a1e 2376 EVEX_W_0F3811_P_1,
1ba585e8 2377 EVEX_W_0F3811_P_2,
43234a1e 2378 EVEX_W_0F3812_P_1,
1ba585e8 2379 EVEX_W_0F3812_P_2,
43234a1e
L
2380 EVEX_W_0F3813_P_1,
2381 EVEX_W_0F3813_P_2,
2382 EVEX_W_0F3814_P_1,
2383 EVEX_W_0F3815_P_1,
2384 EVEX_W_0F3818_P_2,
2385 EVEX_W_0F3819_P_2,
2386 EVEX_W_0F381A_P_2,
2387 EVEX_W_0F381B_P_2,
2388 EVEX_W_0F381E_P_2,
2389 EVEX_W_0F381F_P_2,
1ba585e8 2390 EVEX_W_0F3820_P_1,
43234a1e
L
2391 EVEX_W_0F3821_P_1,
2392 EVEX_W_0F3822_P_1,
2393 EVEX_W_0F3823_P_1,
2394 EVEX_W_0F3824_P_1,
2395 EVEX_W_0F3825_P_1,
2396 EVEX_W_0F3825_P_2,
1ba585e8
IT
2397 EVEX_W_0F3826_P_1,
2398 EVEX_W_0F3826_P_2,
2399 EVEX_W_0F3828_P_1,
43234a1e 2400 EVEX_W_0F3828_P_2,
1ba585e8 2401 EVEX_W_0F3829_P_1,
43234a1e
L
2402 EVEX_W_0F3829_P_2,
2403 EVEX_W_0F382A_P_1,
2404 EVEX_W_0F382A_P_2,
1ba585e8
IT
2405 EVEX_W_0F382B_P_2,
2406 EVEX_W_0F3830_P_1,
43234a1e
L
2407 EVEX_W_0F3831_P_1,
2408 EVEX_W_0F3832_P_1,
2409 EVEX_W_0F3833_P_1,
2410 EVEX_W_0F3834_P_1,
2411 EVEX_W_0F3835_P_1,
2412 EVEX_W_0F3835_P_2,
2413 EVEX_W_0F3837_P_2,
90a915bf
IT
2414 EVEX_W_0F3838_P_1,
2415 EVEX_W_0F3839_P_1,
43234a1e
L
2416 EVEX_W_0F383A_P_1,
2417 EVEX_W_0F3840_P_2,
620214f7 2418 EVEX_W_0F3855_P_2,
43234a1e
L
2419 EVEX_W_0F3858_P_2,
2420 EVEX_W_0F3859_P_2,
2421 EVEX_W_0F385A_P_2,
2422 EVEX_W_0F385B_P_2,
53467f57
IT
2423 EVEX_W_0F3862_P_2,
2424 EVEX_W_0F3863_P_2,
1ba585e8 2425 EVEX_W_0F3866_P_2,
53467f57
IT
2426 EVEX_W_0F3870_P_2,
2427 EVEX_W_0F3871_P_2,
2428 EVEX_W_0F3872_P_2,
2429 EVEX_W_0F3873_P_2,
1ba585e8
IT
2430 EVEX_W_0F3875_P_2,
2431 EVEX_W_0F3878_P_2,
2432 EVEX_W_0F3879_P_2,
2433 EVEX_W_0F387A_P_2,
2434 EVEX_W_0F387B_P_2,
2435 EVEX_W_0F387D_P_2,
14f195c9 2436 EVEX_W_0F3883_P_2,
1ba585e8 2437 EVEX_W_0F388D_P_2,
43234a1e
L
2438 EVEX_W_0F3891_P_2,
2439 EVEX_W_0F3893_P_2,
2440 EVEX_W_0F38A1_P_2,
2441 EVEX_W_0F38A3_P_2,
2442 EVEX_W_0F38C7_R_1_P_2,
2443 EVEX_W_0F38C7_R_2_P_2,
2444 EVEX_W_0F38C7_R_5_P_2,
2445 EVEX_W_0F38C7_R_6_P_2,
2446
2447 EVEX_W_0F3A00_P_2,
2448 EVEX_W_0F3A01_P_2,
2449 EVEX_W_0F3A04_P_2,
2450 EVEX_W_0F3A05_P_2,
2451 EVEX_W_0F3A08_P_2,
2452 EVEX_W_0F3A09_P_2,
2453 EVEX_W_0F3A0A_P_2,
2454 EVEX_W_0F3A0B_P_2,
90a915bf 2455 EVEX_W_0F3A16_P_2,
43234a1e
L
2456 EVEX_W_0F3A18_P_2,
2457 EVEX_W_0F3A19_P_2,
2458 EVEX_W_0F3A1A_P_2,
2459 EVEX_W_0F3A1B_P_2,
2460 EVEX_W_0F3A1D_P_2,
2461 EVEX_W_0F3A21_P_2,
90a915bf 2462 EVEX_W_0F3A22_P_2,
43234a1e
L
2463 EVEX_W_0F3A23_P_2,
2464 EVEX_W_0F3A38_P_2,
2465 EVEX_W_0F3A39_P_2,
2466 EVEX_W_0F3A3A_P_2,
2467 EVEX_W_0F3A3B_P_2,
1ba585e8
IT
2468 EVEX_W_0F3A3E_P_2,
2469 EVEX_W_0F3A3F_P_2,
2470 EVEX_W_0F3A42_P_2,
90a915bf
IT
2471 EVEX_W_0F3A43_P_2,
2472 EVEX_W_0F3A50_P_2,
2473 EVEX_W_0F3A51_P_2,
2474 EVEX_W_0F3A56_P_2,
2475 EVEX_W_0F3A57_P_2,
2476 EVEX_W_0F3A66_P_2,
53467f57
IT
2477 EVEX_W_0F3A67_P_2,
2478 EVEX_W_0F3A70_P_2,
2479 EVEX_W_0F3A71_P_2,
2480 EVEX_W_0F3A72_P_2,
48521003
IT
2481 EVEX_W_0F3A73_P_2,
2482 EVEX_W_0F3ACE_P_2,
2483 EVEX_W_0F3ACF_P_2
9e30b8e0
L
2484};
2485
26ca5450 2486typedef void (*op_rtn) (int bytemode, int sizeflag);
252b5132
RH
2487
2488struct dis386 {
2da11e11 2489 const char *name;
ce518a5f
L
2490 struct
2491 {
2492 op_rtn rtn;
2493 int bytemode;
2494 } op[MAX_OPERANDS];
bf890a93 2495 unsigned int prefix_requirement;
252b5132
RH
2496};
2497
2498/* Upper case letters in the instruction names here are macros.
2499 'A' => print 'b' if no register operands or suffix_always is true
2500 'B' => print 'b' if suffix_always is true
9306ca4a 2501 'C' => print 's' or 'l' ('w' or 'd' in Intel mode) depending on operand
98b528ac 2502 size prefix
ed7841b3 2503 'D' => print 'w' if no register operands or 'w', 'l' or 'q', if
98b528ac 2504 suffix_always is true
252b5132 2505 'E' => print 'e' if 32-bit form of jcxz
3ffd33cf 2506 'F' => print 'w' or 'l' depending on address size prefix (loop insns)
52fd6d94 2507 'G' => print 'w' or 'l' depending on operand size prefix (i/o insns)
5dd0794d 2508 'H' => print ",pt" or ",pn" branch hint
9306ca4a 2509 'I' => honor following macro letter even in Intel mode (implemented only
98b528ac 2510 for some of the macro letters)
9306ca4a 2511 'J' => print 'l'
42903f7f 2512 'K' => print 'd' or 'q' if rex prefix is present.
252b5132 2513 'L' => print 'l' if suffix_always is true
9d141669 2514 'M' => print 'r' if intel_mnemonic is false.
252b5132 2515 'N' => print 'n' if instruction has no wait "prefix"
a35ca55a 2516 'O' => print 'd' or 'o' (or 'q' in Intel mode)
52b15da3 2517 'P' => print 'w', 'l' or 'q' if instruction has an operand size prefix,
98b528ac
L
2518 or suffix_always is true. print 'q' if rex prefix is present.
2519 'Q' => print 'w', 'l' or 'q' for memory operand or suffix_always
2520 is true
a35ca55a 2521 'R' => print 'w', 'l' or 'q' ('d' for 'l' and 'e' in Intel mode)
52b15da3 2522 'S' => print 'w', 'l' or 'q' if suffix_always is true
a72d2af2
L
2523 'T' => print 'q' in 64bit mode if instruction has no operand size
2524 prefix and behave as 'P' otherwise
2525 'U' => print 'q' in 64bit mode if instruction has no operand size
2526 prefix and behave as 'Q' otherwise
2527 'V' => print 'q' in 64bit mode if instruction has no operand size
2528 prefix and behave as 'S' otherwise
a35ca55a 2529 'W' => print 'b', 'w' or 'l' ('d' in Intel mode)
9306ca4a 2530 'X' => print 's', 'd' depending on data16 prefix (for XMM)
8a72226a
L
2531 'Y' => 'q' if instruction has an REX 64bit overwrite prefix and
2532 suffix_always is true.
6dd5059a 2533 'Z' => print 'q' in 64bit mode and behave as 'L' otherwise
9d141669 2534 '!' => change condition from true to false or from false to true.
98b528ac 2535 '%' => add 1 upper case letter to the macro.
a72d2af2
L
2536 '^' => print 'w' or 'l' depending on operand size prefix or
2537 suffix_always is true (lcall/ljmp).
5db04b09
L
2538 '@' => print 'q' for Intel64 ISA, 'w' or 'q' for AMD64 ISA depending
2539 on operand size prefix.
07f5af7d
L
2540 '&' => print 'q' in 64bit mode for Intel64 ISA or if instruction
2541 has no operand size prefix for AMD64 ISA, behave as 'P'
2542 otherwise
98b528ac
L
2543
2544 2 upper case letter macros:
04d824a4
JB
2545 "XY" => print 'x' or 'y' if suffix_always is true or no register
2546 operands and no broadcast.
2547 "XZ" => print 'x', 'y', or 'z' if suffix_always is true or no
2548 register operands and no broadcast.
4b06377f
L
2549 "XW" => print 's', 'd' depending on the VEX.W bit (for FMA)
2550 "LQ" => print 'l' ('d' in Intel mode) or 'q' for memory operand
98b528ac 2551 or suffix_always is true
4b06377f
L
2552 "LB" => print "abs" in 64bit mode and behave as 'B' otherwise
2553 "LS" => print "abs" in 64bit mode and behave as 'S' otherwise
2554 "LV" => print "abs" for 64bit operand and behave as 'S' otherwise
6c30d220 2555 "LW" => print 'd', 'q' depending on the VEX.W bit
4b4c407a
L
2556 "LP" => print 'w' or 'l' ('d' in Intel mode) if instruction has
2557 an operand size prefix, or suffix_always is true. print
2558 'q' if rex prefix is present.
52b15da3 2559
6439fc28
AM
2560 Many of the above letters print nothing in Intel mode. See "putop"
2561 for the details.
52b15da3 2562
6439fc28 2563 Braces '{' and '}', and vertical bars '|', indicate alternative
7c52e0e8 2564 mnemonic strings for AT&T and Intel. */
252b5132 2565
6439fc28 2566static const struct dis386 dis386[] = {
252b5132 2567 /* 00 */
bf890a93
IT
2568 { "addB", { Ebh1, Gb }, 0 },
2569 { "addS", { Evh1, Gv }, 0 },
2570 { "addB", { Gb, EbS }, 0 },
2571 { "addS", { Gv, EvS }, 0 },
2572 { "addB", { AL, Ib }, 0 },
2573 { "addS", { eAX, Iv }, 0 },
4e7d34a6
L
2574 { X86_64_TABLE (X86_64_06) },
2575 { X86_64_TABLE (X86_64_07) },
252b5132 2576 /* 08 */
bf890a93
IT
2577 { "orB", { Ebh1, Gb }, 0 },
2578 { "orS", { Evh1, Gv }, 0 },
2579 { "orB", { Gb, EbS }, 0 },
2580 { "orS", { Gv, EvS }, 0 },
2581 { "orB", { AL, Ib }, 0 },
2582 { "orS", { eAX, Iv }, 0 },
4e7d34a6 2583 { X86_64_TABLE (X86_64_0D) },
592d1631 2584 { Bad_Opcode }, /* 0x0f extended opcode escape */
252b5132 2585 /* 10 */
bf890a93
IT
2586 { "adcB", { Ebh1, Gb }, 0 },
2587 { "adcS", { Evh1, Gv }, 0 },
2588 { "adcB", { Gb, EbS }, 0 },
2589 { "adcS", { Gv, EvS }, 0 },
2590 { "adcB", { AL, Ib }, 0 },
2591 { "adcS", { eAX, Iv }, 0 },
4e7d34a6
L
2592 { X86_64_TABLE (X86_64_16) },
2593 { X86_64_TABLE (X86_64_17) },
252b5132 2594 /* 18 */
bf890a93
IT
2595 { "sbbB", { Ebh1, Gb }, 0 },
2596 { "sbbS", { Evh1, Gv }, 0 },
2597 { "sbbB", { Gb, EbS }, 0 },
2598 { "sbbS", { Gv, EvS }, 0 },
2599 { "sbbB", { AL, Ib }, 0 },
2600 { "sbbS", { eAX, Iv }, 0 },
4e7d34a6
L
2601 { X86_64_TABLE (X86_64_1E) },
2602 { X86_64_TABLE (X86_64_1F) },
252b5132 2603 /* 20 */
bf890a93
IT
2604 { "andB", { Ebh1, Gb }, 0 },
2605 { "andS", { Evh1, Gv }, 0 },
2606 { "andB", { Gb, EbS }, 0 },
2607 { "andS", { Gv, EvS }, 0 },
2608 { "andB", { AL, Ib }, 0 },
2609 { "andS", { eAX, Iv }, 0 },
592d1631 2610 { Bad_Opcode }, /* SEG ES prefix */
4e7d34a6 2611 { X86_64_TABLE (X86_64_27) },
252b5132 2612 /* 28 */
bf890a93
IT
2613 { "subB", { Ebh1, Gb }, 0 },
2614 { "subS", { Evh1, Gv }, 0 },
2615 { "subB", { Gb, EbS }, 0 },
2616 { "subS", { Gv, EvS }, 0 },
2617 { "subB", { AL, Ib }, 0 },
2618 { "subS", { eAX, Iv }, 0 },
592d1631 2619 { Bad_Opcode }, /* SEG CS prefix */
4e7d34a6 2620 { X86_64_TABLE (X86_64_2F) },
252b5132 2621 /* 30 */
bf890a93
IT
2622 { "xorB", { Ebh1, Gb }, 0 },
2623 { "xorS", { Evh1, Gv }, 0 },
2624 { "xorB", { Gb, EbS }, 0 },
2625 { "xorS", { Gv, EvS }, 0 },
2626 { "xorB", { AL, Ib }, 0 },
2627 { "xorS", { eAX, Iv }, 0 },
592d1631 2628 { Bad_Opcode }, /* SEG SS prefix */
4e7d34a6 2629 { X86_64_TABLE (X86_64_37) },
252b5132 2630 /* 38 */
bf890a93
IT
2631 { "cmpB", { Eb, Gb }, 0 },
2632 { "cmpS", { Ev, Gv }, 0 },
2633 { "cmpB", { Gb, EbS }, 0 },
2634 { "cmpS", { Gv, EvS }, 0 },
2635 { "cmpB", { AL, Ib }, 0 },
2636 { "cmpS", { eAX, Iv }, 0 },
592d1631 2637 { Bad_Opcode }, /* SEG DS prefix */
4e7d34a6 2638 { X86_64_TABLE (X86_64_3F) },
252b5132 2639 /* 40 */
bf890a93
IT
2640 { "inc{S|}", { RMeAX }, 0 },
2641 { "inc{S|}", { RMeCX }, 0 },
2642 { "inc{S|}", { RMeDX }, 0 },
2643 { "inc{S|}", { RMeBX }, 0 },
2644 { "inc{S|}", { RMeSP }, 0 },
2645 { "inc{S|}", { RMeBP }, 0 },
2646 { "inc{S|}", { RMeSI }, 0 },
2647 { "inc{S|}", { RMeDI }, 0 },
252b5132 2648 /* 48 */
bf890a93
IT
2649 { "dec{S|}", { RMeAX }, 0 },
2650 { "dec{S|}", { RMeCX }, 0 },
2651 { "dec{S|}", { RMeDX }, 0 },
2652 { "dec{S|}", { RMeBX }, 0 },
2653 { "dec{S|}", { RMeSP }, 0 },
2654 { "dec{S|}", { RMeBP }, 0 },
2655 { "dec{S|}", { RMeSI }, 0 },
2656 { "dec{S|}", { RMeDI }, 0 },
252b5132 2657 /* 50 */
bf890a93
IT
2658 { "pushV", { RMrAX }, 0 },
2659 { "pushV", { RMrCX }, 0 },
2660 { "pushV", { RMrDX }, 0 },
2661 { "pushV", { RMrBX }, 0 },
2662 { "pushV", { RMrSP }, 0 },
2663 { "pushV", { RMrBP }, 0 },
2664 { "pushV", { RMrSI }, 0 },
2665 { "pushV", { RMrDI }, 0 },
252b5132 2666 /* 58 */
bf890a93
IT
2667 { "popV", { RMrAX }, 0 },
2668 { "popV", { RMrCX }, 0 },
2669 { "popV", { RMrDX }, 0 },
2670 { "popV", { RMrBX }, 0 },
2671 { "popV", { RMrSP }, 0 },
2672 { "popV", { RMrBP }, 0 },
2673 { "popV", { RMrSI }, 0 },
2674 { "popV", { RMrDI }, 0 },
252b5132 2675 /* 60 */
4e7d34a6
L
2676 { X86_64_TABLE (X86_64_60) },
2677 { X86_64_TABLE (X86_64_61) },
2678 { X86_64_TABLE (X86_64_62) },
2679 { X86_64_TABLE (X86_64_63) },
592d1631
L
2680 { Bad_Opcode }, /* seg fs */
2681 { Bad_Opcode }, /* seg gs */
2682 { Bad_Opcode }, /* op size prefix */
2683 { Bad_Opcode }, /* adr size prefix */
252b5132 2684 /* 68 */
bf890a93
IT
2685 { "pushT", { sIv }, 0 },
2686 { "imulS", { Gv, Ev, Iv }, 0 },
2687 { "pushT", { sIbT }, 0 },
2688 { "imulS", { Gv, Ev, sIb }, 0 },
2689 { "ins{b|}", { Ybr, indirDX }, 0 },
4e7d34a6 2690 { X86_64_TABLE (X86_64_6D) },
bf890a93 2691 { "outs{b|}", { indirDXr, Xb }, 0 },
4e7d34a6 2692 { X86_64_TABLE (X86_64_6F) },
252b5132 2693 /* 70 */
bf890a93
IT
2694 { "joH", { Jb, BND, cond_jump_flag }, 0 },
2695 { "jnoH", { Jb, BND, cond_jump_flag }, 0 },
2696 { "jbH", { Jb, BND, cond_jump_flag }, 0 },
2697 { "jaeH", { Jb, BND, cond_jump_flag }, 0 },
2698 { "jeH", { Jb, BND, cond_jump_flag }, 0 },
2699 { "jneH", { Jb, BND, cond_jump_flag }, 0 },
2700 { "jbeH", { Jb, BND, cond_jump_flag }, 0 },
2701 { "jaH", { Jb, BND, cond_jump_flag }, 0 },
252b5132 2702 /* 78 */
bf890a93
IT
2703 { "jsH", { Jb, BND, cond_jump_flag }, 0 },
2704 { "jnsH", { Jb, BND, cond_jump_flag }, 0 },
2705 { "jpH", { Jb, BND, cond_jump_flag }, 0 },
2706 { "jnpH", { Jb, BND, cond_jump_flag }, 0 },
2707 { "jlH", { Jb, BND, cond_jump_flag }, 0 },
2708 { "jgeH", { Jb, BND, cond_jump_flag }, 0 },
2709 { "jleH", { Jb, BND, cond_jump_flag }, 0 },
2710 { "jgH", { Jb, BND, cond_jump_flag }, 0 },
252b5132 2711 /* 80 */
1ceb70f8
L
2712 { REG_TABLE (REG_80) },
2713 { REG_TABLE (REG_81) },
d039fef3 2714 { X86_64_TABLE (X86_64_82) },
7148c369 2715 { REG_TABLE (REG_83) },
bf890a93
IT
2716 { "testB", { Eb, Gb }, 0 },
2717 { "testS", { Ev, Gv }, 0 },
2718 { "xchgB", { Ebh2, Gb }, 0 },
2719 { "xchgS", { Evh2, Gv }, 0 },
252b5132 2720 /* 88 */
bf890a93
IT
2721 { "movB", { Ebh3, Gb }, 0 },
2722 { "movS", { Evh3, Gv }, 0 },
2723 { "movB", { Gb, EbS }, 0 },
2724 { "movS", { Gv, EvS }, 0 },
2725 { "movD", { Sv, Sw }, 0 },
1ceb70f8 2726 { MOD_TABLE (MOD_8D) },
bf890a93 2727 { "movD", { Sw, Sv }, 0 },
1ceb70f8 2728 { REG_TABLE (REG_8F) },
252b5132 2729 /* 90 */
1ceb70f8 2730 { PREFIX_TABLE (PREFIX_90) },
bf890a93
IT
2731 { "xchgS", { RMeCX, eAX }, 0 },
2732 { "xchgS", { RMeDX, eAX }, 0 },
2733 { "xchgS", { RMeBX, eAX }, 0 },
2734 { "xchgS", { RMeSP, eAX }, 0 },
2735 { "xchgS", { RMeBP, eAX }, 0 },
2736 { "xchgS", { RMeSI, eAX }, 0 },
2737 { "xchgS", { RMeDI, eAX }, 0 },
252b5132 2738 /* 98 */
bf890a93
IT
2739 { "cW{t|}R", { XX }, 0 },
2740 { "cR{t|}O", { XX }, 0 },
4e7d34a6 2741 { X86_64_TABLE (X86_64_9A) },
592d1631 2742 { Bad_Opcode }, /* fwait */
bf890a93
IT
2743 { "pushfT", { XX }, 0 },
2744 { "popfT", { XX }, 0 },
2745 { "sahf", { XX }, 0 },
2746 { "lahf", { XX }, 0 },
252b5132 2747 /* a0 */
bf890a93
IT
2748 { "mov%LB", { AL, Ob }, 0 },
2749 { "mov%LS", { eAX, Ov }, 0 },
2750 { "mov%LB", { Ob, AL }, 0 },
2751 { "mov%LS", { Ov, eAX }, 0 },
2752 { "movs{b|}", { Ybr, Xb }, 0 },
2753 { "movs{R|}", { Yvr, Xv }, 0 },
2754 { "cmps{b|}", { Xb, Yb }, 0 },
2755 { "cmps{R|}", { Xv, Yv }, 0 },
252b5132 2756 /* a8 */
bf890a93
IT
2757 { "testB", { AL, Ib }, 0 },
2758 { "testS", { eAX, Iv }, 0 },
2759 { "stosB", { Ybr, AL }, 0 },
2760 { "stosS", { Yvr, eAX }, 0 },
2761 { "lodsB", { ALr, Xb }, 0 },
2762 { "lodsS", { eAXr, Xv }, 0 },
2763 { "scasB", { AL, Yb }, 0 },
2764 { "scasS", { eAX, Yv }, 0 },
252b5132 2765 /* b0 */
bf890a93
IT
2766 { "movB", { RMAL, Ib }, 0 },
2767 { "movB", { RMCL, Ib }, 0 },
2768 { "movB", { RMDL, Ib }, 0 },
2769 { "movB", { RMBL, Ib }, 0 },
2770 { "movB", { RMAH, Ib }, 0 },
2771 { "movB", { RMCH, Ib }, 0 },
2772 { "movB", { RMDH, Ib }, 0 },
2773 { "movB", { RMBH, Ib }, 0 },
252b5132 2774 /* b8 */
bf890a93
IT
2775 { "mov%LV", { RMeAX, Iv64 }, 0 },
2776 { "mov%LV", { RMeCX, Iv64 }, 0 },
2777 { "mov%LV", { RMeDX, Iv64 }, 0 },
2778 { "mov%LV", { RMeBX, Iv64 }, 0 },
2779 { "mov%LV", { RMeSP, Iv64 }, 0 },
2780 { "mov%LV", { RMeBP, Iv64 }, 0 },
2781 { "mov%LV", { RMeSI, Iv64 }, 0 },
2782 { "mov%LV", { RMeDI, Iv64 }, 0 },
252b5132 2783 /* c0 */
1ceb70f8
L
2784 { REG_TABLE (REG_C0) },
2785 { REG_TABLE (REG_C1) },
bf890a93
IT
2786 { "retT", { Iw, BND }, 0 },
2787 { "retT", { BND }, 0 },
4e7d34a6
L
2788 { X86_64_TABLE (X86_64_C4) },
2789 { X86_64_TABLE (X86_64_C5) },
1ceb70f8
L
2790 { REG_TABLE (REG_C6) },
2791 { REG_TABLE (REG_C7) },
252b5132 2792 /* c8 */
bf890a93
IT
2793 { "enterT", { Iw, Ib }, 0 },
2794 { "leaveT", { XX }, 0 },
2795 { "Jret{|f}P", { Iw }, 0 },
2796 { "Jret{|f}P", { XX }, 0 },
2797 { "int3", { XX }, 0 },
2798 { "int", { Ib }, 0 },
4e7d34a6 2799 { X86_64_TABLE (X86_64_CE) },
bf890a93 2800 { "iret%LP", { XX }, 0 },
252b5132 2801 /* d0 */
1ceb70f8
L
2802 { REG_TABLE (REG_D0) },
2803 { REG_TABLE (REG_D1) },
2804 { REG_TABLE (REG_D2) },
2805 { REG_TABLE (REG_D3) },
4e7d34a6
L
2806 { X86_64_TABLE (X86_64_D4) },
2807 { X86_64_TABLE (X86_64_D5) },
592d1631 2808 { Bad_Opcode },
bf890a93 2809 { "xlat", { DSBX }, 0 },
252b5132
RH
2810 /* d8 */
2811 { FLOAT },
2812 { FLOAT },
2813 { FLOAT },
2814 { FLOAT },
2815 { FLOAT },
2816 { FLOAT },
2817 { FLOAT },
2818 { FLOAT },
2819 /* e0 */
bf890a93
IT
2820 { "loopneFH", { Jb, XX, loop_jcxz_flag }, 0 },
2821 { "loopeFH", { Jb, XX, loop_jcxz_flag }, 0 },
2822 { "loopFH", { Jb, XX, loop_jcxz_flag }, 0 },
2823 { "jEcxzH", { Jb, XX, loop_jcxz_flag }, 0 },
2824 { "inB", { AL, Ib }, 0 },
2825 { "inG", { zAX, Ib }, 0 },
2826 { "outB", { Ib, AL }, 0 },
2827 { "outG", { Ib, zAX }, 0 },
252b5132 2828 /* e8 */
a72d2af2
L
2829 { X86_64_TABLE (X86_64_E8) },
2830 { X86_64_TABLE (X86_64_E9) },
4e7d34a6 2831 { X86_64_TABLE (X86_64_EA) },
bf890a93
IT
2832 { "jmp", { Jb, BND }, 0 },
2833 { "inB", { AL, indirDX }, 0 },
2834 { "inG", { zAX, indirDX }, 0 },
2835 { "outB", { indirDX, AL }, 0 },
2836 { "outG", { indirDX, zAX }, 0 },
252b5132 2837 /* f0 */
592d1631 2838 { Bad_Opcode }, /* lock prefix */
bf890a93 2839 { "icebp", { XX }, 0 },
592d1631
L
2840 { Bad_Opcode }, /* repne */
2841 { Bad_Opcode }, /* repz */
bf890a93
IT
2842 { "hlt", { XX }, 0 },
2843 { "cmc", { XX }, 0 },
1ceb70f8
L
2844 { REG_TABLE (REG_F6) },
2845 { REG_TABLE (REG_F7) },
252b5132 2846 /* f8 */
bf890a93
IT
2847 { "clc", { XX }, 0 },
2848 { "stc", { XX }, 0 },
2849 { "cli", { XX }, 0 },
2850 { "sti", { XX }, 0 },
2851 { "cld", { XX }, 0 },
2852 { "std", { XX }, 0 },
1ceb70f8
L
2853 { REG_TABLE (REG_FE) },
2854 { REG_TABLE (REG_FF) },
252b5132
RH
2855};
2856
6439fc28 2857static const struct dis386 dis386_twobyte[] = {
252b5132 2858 /* 00 */
1ceb70f8
L
2859 { REG_TABLE (REG_0F00 ) },
2860 { REG_TABLE (REG_0F01 ) },
bf890a93
IT
2861 { "larS", { Gv, Ew }, 0 },
2862 { "lslS", { Gv, Ew }, 0 },
592d1631 2863 { Bad_Opcode },
bf890a93
IT
2864 { "syscall", { XX }, 0 },
2865 { "clts", { XX }, 0 },
2866 { "sysret%LP", { XX }, 0 },
252b5132 2867 /* 08 */
bf890a93
IT
2868 { "invd", { XX }, 0 },
2869 { "wbinvd", { XX }, 0 },
592d1631 2870 { Bad_Opcode },
bf890a93 2871 { "ud2", { XX }, 0 },
592d1631 2872 { Bad_Opcode },
b5b1fc4f 2873 { REG_TABLE (REG_0F0D) },
bf890a93
IT
2874 { "femms", { XX }, 0 },
2875 { "", { MX, EM, OPSUF }, 0 }, /* See OP_3DNowSuffix. */
252b5132 2876 /* 10 */
1ceb70f8
L
2877 { PREFIX_TABLE (PREFIX_0F10) },
2878 { PREFIX_TABLE (PREFIX_0F11) },
2879 { PREFIX_TABLE (PREFIX_0F12) },
2880 { MOD_TABLE (MOD_0F13) },
507bd325
L
2881 { "unpcklpX", { XM, EXx }, PREFIX_OPCODE },
2882 { "unpckhpX", { XM, EXx }, PREFIX_OPCODE },
1ceb70f8
L
2883 { PREFIX_TABLE (PREFIX_0F16) },
2884 { MOD_TABLE (MOD_0F17) },
252b5132 2885 /* 18 */
1ceb70f8 2886 { REG_TABLE (REG_0F18) },
bf890a93 2887 { "nopQ", { Ev }, 0 },
7e8b059b
L
2888 { PREFIX_TABLE (PREFIX_0F1A) },
2889 { PREFIX_TABLE (PREFIX_0F1B) },
bf890a93
IT
2890 { "nopQ", { Ev }, 0 },
2891 { "nopQ", { Ev }, 0 },
603555e5 2892 { PREFIX_TABLE (PREFIX_0F1E) },
bf890a93 2893 { "nopQ", { Ev }, 0 },
252b5132 2894 /* 20 */
bf890a93
IT
2895 { "movZ", { Rm, Cm }, 0 },
2896 { "movZ", { Rm, Dm }, 0 },
2897 { "movZ", { Cm, Rm }, 0 },
2898 { "movZ", { Dm, Rm }, 0 },
1ceb70f8 2899 { MOD_TABLE (MOD_0F24) },
592d1631 2900 { Bad_Opcode },
1ceb70f8 2901 { MOD_TABLE (MOD_0F26) },
592d1631 2902 { Bad_Opcode },
252b5132 2903 /* 28 */
507bd325
L
2904 { "movapX", { XM, EXx }, PREFIX_OPCODE },
2905 { "movapX", { EXxS, XM }, PREFIX_OPCODE },
1ceb70f8
L
2906 { PREFIX_TABLE (PREFIX_0F2A) },
2907 { PREFIX_TABLE (PREFIX_0F2B) },
2908 { PREFIX_TABLE (PREFIX_0F2C) },
2909 { PREFIX_TABLE (PREFIX_0F2D) },
2910 { PREFIX_TABLE (PREFIX_0F2E) },
2911 { PREFIX_TABLE (PREFIX_0F2F) },
252b5132 2912 /* 30 */
bf890a93
IT
2913 { "wrmsr", { XX }, 0 },
2914 { "rdtsc", { XX }, 0 },
2915 { "rdmsr", { XX }, 0 },
2916 { "rdpmc", { XX }, 0 },
2917 { "sysenter", { XX }, 0 },
2918 { "sysexit", { XX }, 0 },
592d1631 2919 { Bad_Opcode },
bf890a93 2920 { "getsec", { XX }, 0 },
252b5132 2921 /* 38 */
507bd325 2922 { THREE_BYTE_TABLE_PREFIX (THREE_BYTE_0F38, PREFIX_OPCODE) },
592d1631 2923 { Bad_Opcode },
507bd325 2924 { THREE_BYTE_TABLE_PREFIX (THREE_BYTE_0F3A, PREFIX_OPCODE) },
592d1631
L
2925 { Bad_Opcode },
2926 { Bad_Opcode },
2927 { Bad_Opcode },
2928 { Bad_Opcode },
2929 { Bad_Opcode },
252b5132 2930 /* 40 */
bf890a93
IT
2931 { "cmovoS", { Gv, Ev }, 0 },
2932 { "cmovnoS", { Gv, Ev }, 0 },
2933 { "cmovbS", { Gv, Ev }, 0 },
2934 { "cmovaeS", { Gv, Ev }, 0 },
2935 { "cmoveS", { Gv, Ev }, 0 },
2936 { "cmovneS", { Gv, Ev }, 0 },
2937 { "cmovbeS", { Gv, Ev }, 0 },
2938 { "cmovaS", { Gv, Ev }, 0 },
252b5132 2939 /* 48 */
bf890a93
IT
2940 { "cmovsS", { Gv, Ev }, 0 },
2941 { "cmovnsS", { Gv, Ev }, 0 },
2942 { "cmovpS", { Gv, Ev }, 0 },
2943 { "cmovnpS", { Gv, Ev }, 0 },
2944 { "cmovlS", { Gv, Ev }, 0 },
2945 { "cmovgeS", { Gv, Ev }, 0 },
2946 { "cmovleS", { Gv, Ev }, 0 },
2947 { "cmovgS", { Gv, Ev }, 0 },
252b5132 2948 /* 50 */
75c135a8 2949 { MOD_TABLE (MOD_0F51) },
1ceb70f8
L
2950 { PREFIX_TABLE (PREFIX_0F51) },
2951 { PREFIX_TABLE (PREFIX_0F52) },
2952 { PREFIX_TABLE (PREFIX_0F53) },
507bd325
L
2953 { "andpX", { XM, EXx }, PREFIX_OPCODE },
2954 { "andnpX", { XM, EXx }, PREFIX_OPCODE },
2955 { "orpX", { XM, EXx }, PREFIX_OPCODE },
2956 { "xorpX", { XM, EXx }, PREFIX_OPCODE },
252b5132 2957 /* 58 */
1ceb70f8
L
2958 { PREFIX_TABLE (PREFIX_0F58) },
2959 { PREFIX_TABLE (PREFIX_0F59) },
2960 { PREFIX_TABLE (PREFIX_0F5A) },
2961 { PREFIX_TABLE (PREFIX_0F5B) },
2962 { PREFIX_TABLE (PREFIX_0F5C) },
2963 { PREFIX_TABLE (PREFIX_0F5D) },
2964 { PREFIX_TABLE (PREFIX_0F5E) },
2965 { PREFIX_TABLE (PREFIX_0F5F) },
252b5132 2966 /* 60 */
1ceb70f8
L
2967 { PREFIX_TABLE (PREFIX_0F60) },
2968 { PREFIX_TABLE (PREFIX_0F61) },
2969 { PREFIX_TABLE (PREFIX_0F62) },
507bd325
L
2970 { "packsswb", { MX, EM }, PREFIX_OPCODE },
2971 { "pcmpgtb", { MX, EM }, PREFIX_OPCODE },
2972 { "pcmpgtw", { MX, EM }, PREFIX_OPCODE },
2973 { "pcmpgtd", { MX, EM }, PREFIX_OPCODE },
2974 { "packuswb", { MX, EM }, PREFIX_OPCODE },
252b5132 2975 /* 68 */
507bd325
L
2976 { "punpckhbw", { MX, EM }, PREFIX_OPCODE },
2977 { "punpckhwd", { MX, EM }, PREFIX_OPCODE },
2978 { "punpckhdq", { MX, EM }, PREFIX_OPCODE },
2979 { "packssdw", { MX, EM }, PREFIX_OPCODE },
1ceb70f8
L
2980 { PREFIX_TABLE (PREFIX_0F6C) },
2981 { PREFIX_TABLE (PREFIX_0F6D) },
507bd325 2982 { "movK", { MX, Edq }, PREFIX_OPCODE },
1ceb70f8 2983 { PREFIX_TABLE (PREFIX_0F6F) },
252b5132 2984 /* 70 */
1ceb70f8
L
2985 { PREFIX_TABLE (PREFIX_0F70) },
2986 { REG_TABLE (REG_0F71) },
2987 { REG_TABLE (REG_0F72) },
2988 { REG_TABLE (REG_0F73) },
507bd325
L
2989 { "pcmpeqb", { MX, EM }, PREFIX_OPCODE },
2990 { "pcmpeqw", { MX, EM }, PREFIX_OPCODE },
2991 { "pcmpeqd", { MX, EM }, PREFIX_OPCODE },
2992 { "emms", { XX }, PREFIX_OPCODE },
252b5132 2993 /* 78 */
1ceb70f8
L
2994 { PREFIX_TABLE (PREFIX_0F78) },
2995 { PREFIX_TABLE (PREFIX_0F79) },
1f334aeb 2996 { Bad_Opcode },
592d1631 2997 { Bad_Opcode },
1ceb70f8
L
2998 { PREFIX_TABLE (PREFIX_0F7C) },
2999 { PREFIX_TABLE (PREFIX_0F7D) },
3000 { PREFIX_TABLE (PREFIX_0F7E) },
3001 { PREFIX_TABLE (PREFIX_0F7F) },
252b5132 3002 /* 80 */
bf890a93
IT
3003 { "joH", { Jv, BND, cond_jump_flag }, 0 },
3004 { "jnoH", { Jv, BND, cond_jump_flag }, 0 },
3005 { "jbH", { Jv, BND, cond_jump_flag }, 0 },
3006 { "jaeH", { Jv, BND, cond_jump_flag }, 0 },
3007 { "jeH", { Jv, BND, cond_jump_flag }, 0 },
3008 { "jneH", { Jv, BND, cond_jump_flag }, 0 },
3009 { "jbeH", { Jv, BND, cond_jump_flag }, 0 },
3010 { "jaH", { Jv, BND, cond_jump_flag }, 0 },
252b5132 3011 /* 88 */
bf890a93
IT
3012 { "jsH", { Jv, BND, cond_jump_flag }, 0 },
3013 { "jnsH", { Jv, BND, cond_jump_flag }, 0 },
3014 { "jpH", { Jv, BND, cond_jump_flag }, 0 },
3015 { "jnpH", { Jv, BND, cond_jump_flag }, 0 },
3016 { "jlH", { Jv, BND, cond_jump_flag }, 0 },
3017 { "jgeH", { Jv, BND, cond_jump_flag }, 0 },
3018 { "jleH", { Jv, BND, cond_jump_flag }, 0 },
3019 { "jgH", { Jv, BND, cond_jump_flag }, 0 },
252b5132 3020 /* 90 */
bf890a93
IT
3021 { "seto", { Eb }, 0 },
3022 { "setno", { Eb }, 0 },
3023 { "setb", { Eb }, 0 },
3024 { "setae", { Eb }, 0 },
3025 { "sete", { Eb }, 0 },
3026 { "setne", { Eb }, 0 },
3027 { "setbe", { Eb }, 0 },
3028 { "seta", { Eb }, 0 },
252b5132 3029 /* 98 */
bf890a93
IT
3030 { "sets", { Eb }, 0 },
3031 { "setns", { Eb }, 0 },
3032 { "setp", { Eb }, 0 },
3033 { "setnp", { Eb }, 0 },
3034 { "setl", { Eb }, 0 },
3035 { "setge", { Eb }, 0 },
3036 { "setle", { Eb }, 0 },
3037 { "setg", { Eb }, 0 },
252b5132 3038 /* a0 */
bf890a93
IT
3039 { "pushT", { fs }, 0 },
3040 { "popT", { fs }, 0 },
3041 { "cpuid", { XX }, 0 },
3042 { "btS", { Ev, Gv }, 0 },
3043 { "shldS", { Ev, Gv, Ib }, 0 },
3044 { "shldS", { Ev, Gv, CL }, 0 },
1ceb70f8
L
3045 { REG_TABLE (REG_0FA6) },
3046 { REG_TABLE (REG_0FA7) },
252b5132 3047 /* a8 */
bf890a93
IT
3048 { "pushT", { gs }, 0 },
3049 { "popT", { gs }, 0 },
3050 { "rsm", { XX }, 0 },
3051 { "btsS", { Evh1, Gv }, 0 },
3052 { "shrdS", { Ev, Gv, Ib }, 0 },
3053 { "shrdS", { Ev, Gv, CL }, 0 },
1ceb70f8 3054 { REG_TABLE (REG_0FAE) },
bf890a93 3055 { "imulS", { Gv, Ev }, 0 },
252b5132 3056 /* b0 */
bf890a93
IT
3057 { "cmpxchgB", { Ebh1, Gb }, 0 },
3058 { "cmpxchgS", { Evh1, Gv }, 0 },
1ceb70f8 3059 { MOD_TABLE (MOD_0FB2) },
bf890a93 3060 { "btrS", { Evh1, Gv }, 0 },
1ceb70f8
L
3061 { MOD_TABLE (MOD_0FB4) },
3062 { MOD_TABLE (MOD_0FB5) },
bf890a93
IT
3063 { "movz{bR|x}", { Gv, Eb }, 0 },
3064 { "movz{wR|x}", { Gv, Ew }, 0 }, /* yes, there really is movzww ! */
252b5132 3065 /* b8 */
1ceb70f8 3066 { PREFIX_TABLE (PREFIX_0FB8) },
bf890a93 3067 { "ud1", { XX }, 0 },
1ceb70f8 3068 { REG_TABLE (REG_0FBA) },
bf890a93 3069 { "btcS", { Evh1, Gv }, 0 },
f12dc422 3070 { PREFIX_TABLE (PREFIX_0FBC) },
1ceb70f8 3071 { PREFIX_TABLE (PREFIX_0FBD) },
bf890a93
IT
3072 { "movs{bR|x}", { Gv, Eb }, 0 },
3073 { "movs{wR|x}", { Gv, Ew }, 0 }, /* yes, there really is movsww ! */
252b5132 3074 /* c0 */
bf890a93
IT
3075 { "xaddB", { Ebh1, Gb }, 0 },
3076 { "xaddS", { Evh1, Gv }, 0 },
1ceb70f8 3077 { PREFIX_TABLE (PREFIX_0FC2) },
a8484f96 3078 { MOD_TABLE (MOD_0FC3) },
507bd325
L
3079 { "pinsrw", { MX, Edqw, Ib }, PREFIX_OPCODE },
3080 { "pextrw", { Gdq, MS, Ib }, PREFIX_OPCODE },
3081 { "shufpX", { XM, EXx, Ib }, PREFIX_OPCODE },
1ceb70f8 3082 { REG_TABLE (REG_0FC7) },
252b5132 3083 /* c8 */
bf890a93
IT
3084 { "bswap", { RMeAX }, 0 },
3085 { "bswap", { RMeCX }, 0 },
3086 { "bswap", { RMeDX }, 0 },
3087 { "bswap", { RMeBX }, 0 },
3088 { "bswap", { RMeSP }, 0 },
3089 { "bswap", { RMeBP }, 0 },
3090 { "bswap", { RMeSI }, 0 },
3091 { "bswap", { RMeDI }, 0 },
252b5132 3092 /* d0 */
1ceb70f8 3093 { PREFIX_TABLE (PREFIX_0FD0) },
507bd325
L
3094 { "psrlw", { MX, EM }, PREFIX_OPCODE },
3095 { "psrld", { MX, EM }, PREFIX_OPCODE },
3096 { "psrlq", { MX, EM }, PREFIX_OPCODE },
3097 { "paddq", { MX, EM }, PREFIX_OPCODE },
3098 { "pmullw", { MX, EM }, PREFIX_OPCODE },
1ceb70f8 3099 { PREFIX_TABLE (PREFIX_0FD6) },
75c135a8 3100 { MOD_TABLE (MOD_0FD7) },
252b5132 3101 /* d8 */
507bd325
L
3102 { "psubusb", { MX, EM }, PREFIX_OPCODE },
3103 { "psubusw", { MX, EM }, PREFIX_OPCODE },
3104 { "pminub", { MX, EM }, PREFIX_OPCODE },
3105 { "pand", { MX, EM }, PREFIX_OPCODE },
3106 { "paddusb", { MX, EM }, PREFIX_OPCODE },
3107 { "paddusw", { MX, EM }, PREFIX_OPCODE },
3108 { "pmaxub", { MX, EM }, PREFIX_OPCODE },
3109 { "pandn", { MX, EM }, PREFIX_OPCODE },
252b5132 3110 /* e0 */
507bd325
L
3111 { "pavgb", { MX, EM }, PREFIX_OPCODE },
3112 { "psraw", { MX, EM }, PREFIX_OPCODE },
3113 { "psrad", { MX, EM }, PREFIX_OPCODE },
3114 { "pavgw", { MX, EM }, PREFIX_OPCODE },
3115 { "pmulhuw", { MX, EM }, PREFIX_OPCODE },
3116 { "pmulhw", { MX, EM }, PREFIX_OPCODE },
1ceb70f8
L
3117 { PREFIX_TABLE (PREFIX_0FE6) },
3118 { PREFIX_TABLE (PREFIX_0FE7) },
252b5132 3119 /* e8 */
507bd325
L
3120 { "psubsb", { MX, EM }, PREFIX_OPCODE },
3121 { "psubsw", { MX, EM }, PREFIX_OPCODE },
3122 { "pminsw", { MX, EM }, PREFIX_OPCODE },
3123 { "por", { MX, EM }, PREFIX_OPCODE },
3124 { "paddsb", { MX, EM }, PREFIX_OPCODE },
3125 { "paddsw", { MX, EM }, PREFIX_OPCODE },
3126 { "pmaxsw", { MX, EM }, PREFIX_OPCODE },
3127 { "pxor", { MX, EM }, PREFIX_OPCODE },
252b5132 3128 /* f0 */
1ceb70f8 3129 { PREFIX_TABLE (PREFIX_0FF0) },
507bd325
L
3130 { "psllw", { MX, EM }, PREFIX_OPCODE },
3131 { "pslld", { MX, EM }, PREFIX_OPCODE },
3132 { "psllq", { MX, EM }, PREFIX_OPCODE },
3133 { "pmuludq", { MX, EM }, PREFIX_OPCODE },
3134 { "pmaddwd", { MX, EM }, PREFIX_OPCODE },
3135 { "psadbw", { MX, EM }, PREFIX_OPCODE },
1ceb70f8 3136 { PREFIX_TABLE (PREFIX_0FF7) },
252b5132 3137 /* f8 */
507bd325
L
3138 { "psubb", { MX, EM }, PREFIX_OPCODE },
3139 { "psubw", { MX, EM }, PREFIX_OPCODE },
3140 { "psubd", { MX, EM }, PREFIX_OPCODE },
3141 { "psubq", { MX, EM }, PREFIX_OPCODE },
3142 { "paddb", { MX, EM }, PREFIX_OPCODE },
3143 { "paddw", { MX, EM }, PREFIX_OPCODE },
3144 { "paddd", { MX, EM }, PREFIX_OPCODE },
592d1631 3145 { Bad_Opcode },
252b5132
RH
3146};
3147
3148static const unsigned char onebyte_has_modrm[256] = {
c608c12e
AM
3149 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
3150 /* ------------------------------- */
3151 /* 00 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 00 */
3152 /* 10 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 10 */
3153 /* 20 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 20 */
3154 /* 30 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 30 */
3155 /* 40 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 40 */
3156 /* 50 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 50 */
3157 /* 60 */ 0,0,1,1,0,0,0,0,0,1,0,1,0,0,0,0, /* 60 */
3158 /* 70 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 70 */
3159 /* 80 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 80 */
3160 /* 90 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 90 */
3161 /* a0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* a0 */
3162 /* b0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* b0 */
3163 /* c0 */ 1,1,0,0,1,1,1,1,0,0,0,0,0,0,0,0, /* c0 */
3164 /* d0 */ 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1, /* d0 */
3165 /* e0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* e0 */
3166 /* f0 */ 0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1 /* f0 */
3167 /* ------------------------------- */
3168 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
252b5132
RH
3169};
3170
3171static const unsigned char twobyte_has_modrm[256] = {
c608c12e
AM
3172 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
3173 /* ------------------------------- */
252b5132 3174 /* 00 */ 1,1,1,1,0,0,0,0,0,0,0,0,0,1,0,1, /* 0f */
b5b1fc4f 3175 /* 10 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 1f */
85f10a01 3176 /* 20 */ 1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1, /* 2f */
331d2d0d 3177 /* 30 */ 0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0, /* 3f */
252b5132 3178 /* 40 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 4f */
4bba6815
AM
3179 /* 50 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 5f */
3180 /* 60 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 6f */
85f10a01 3181 /* 70 */ 1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1, /* 7f */
252b5132
RH
3182 /* 80 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 8f */
3183 /* 90 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 9f */
30d1c836 3184 /* a0 */ 0,0,0,1,1,1,1,1,0,0,0,1,1,1,1,1, /* af */
050dfa73 3185 /* b0 */ 1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1, /* bf */
252b5132 3186 /* c0 */ 1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0, /* cf */
ca164297 3187 /* d0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* df */
4bba6815 3188 /* e0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* ef */
ca164297 3189 /* f0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0 /* ff */
c608c12e
AM
3190 /* ------------------------------- */
3191 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
3192};
3193
252b5132
RH
3194static char obuf[100];
3195static char *obufp;
ea397f5b 3196static char *mnemonicendp;
252b5132
RH
3197static char scratchbuf[100];
3198static unsigned char *start_codep;
3199static unsigned char *insn_codep;
3200static unsigned char *codep;
285ca992 3201static unsigned char *end_codep;
f16cd0d5
L
3202static int last_lock_prefix;
3203static int last_repz_prefix;
3204static int last_repnz_prefix;
3205static int last_data_prefix;
3206static int last_addr_prefix;
3207static int last_rex_prefix;
3208static int last_seg_prefix;
d9949a36 3209static int fwait_prefix;
285ca992
L
3210/* The active segment register prefix. */
3211static int active_seg_prefix;
f16cd0d5
L
3212#define MAX_CODE_LENGTH 15
3213/* We can up to 14 prefixes since the maximum instruction length is
3214 15bytes. */
3215static int all_prefixes[MAX_CODE_LENGTH - 1];
252b5132 3216static disassemble_info *the_info;
7967e09e
L
3217static struct
3218 {
3219 int mod;
7967e09e 3220 int reg;
484c222e 3221 int rm;
7967e09e
L
3222 }
3223modrm;
4bba6815 3224static unsigned char need_modrm;
dfc8cf43
L
3225static struct
3226 {
3227 int scale;
3228 int index;
3229 int base;
3230 }
3231sib;
c0f3af97
L
3232static struct
3233 {
3234 int register_specifier;
3235 int length;
3236 int prefix;
3237 int w;
43234a1e
L
3238 int evex;
3239 int r;
3240 int v;
3241 int mask_register_specifier;
3242 int zeroing;
3243 int ll;
3244 int b;
c0f3af97
L
3245 }
3246vex;
3247static unsigned char need_vex;
3248static unsigned char need_vex_reg;
dae39acc 3249static unsigned char vex_w_done;
252b5132 3250
ea397f5b
L
3251struct op
3252 {
3253 const char *name;
3254 unsigned int len;
3255 };
3256
4bba6815
AM
3257/* If we are accessing mod/rm/reg without need_modrm set, then the
3258 values are stale. Hitting this abort likely indicates that you
3259 need to update onebyte_has_modrm or twobyte_has_modrm. */
3260#define MODRM_CHECK if (!need_modrm) abort ()
3261
d708bcba
AM
3262static const char **names64;
3263static const char **names32;
3264static const char **names16;
3265static const char **names8;
3266static const char **names8rex;
3267static const char **names_seg;
db51cc60
L
3268static const char *index64;
3269static const char *index32;
d708bcba 3270static const char **index16;
7e8b059b 3271static const char **names_bnd;
d708bcba
AM
3272
3273static const char *intel_names64[] = {
3274 "rax", "rcx", "rdx", "rbx", "rsp", "rbp", "rsi", "rdi",
3275 "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15"
3276};
3277static const char *intel_names32[] = {
3278 "eax", "ecx", "edx", "ebx", "esp", "ebp", "esi", "edi",
3279 "r8d", "r9d", "r10d", "r11d", "r12d", "r13d", "r14d", "r15d"
3280};
3281static const char *intel_names16[] = {
3282 "ax", "cx", "dx", "bx", "sp", "bp", "si", "di",
3283 "r8w", "r9w", "r10w", "r11w", "r12w", "r13w", "r14w", "r15w"
3284};
3285static const char *intel_names8[] = {
3286 "al", "cl", "dl", "bl", "ah", "ch", "dh", "bh",
3287};
3288static const char *intel_names8rex[] = {
3289 "al", "cl", "dl", "bl", "spl", "bpl", "sil", "dil",
3290 "r8b", "r9b", "r10b", "r11b", "r12b", "r13b", "r14b", "r15b"
3291};
3292static const char *intel_names_seg[] = {
3293 "es", "cs", "ss", "ds", "fs", "gs", "?", "?",
3294};
db51cc60
L
3295static const char *intel_index64 = "riz";
3296static const char *intel_index32 = "eiz";
d708bcba
AM
3297static const char *intel_index16[] = {
3298 "bx+si", "bx+di", "bp+si", "bp+di", "si", "di", "bp", "bx"
3299};
3300
3301static const char *att_names64[] = {
3302 "%rax", "%rcx", "%rdx", "%rbx", "%rsp", "%rbp", "%rsi", "%rdi",
52b15da3
JH
3303 "%r8", "%r9", "%r10", "%r11", "%r12", "%r13", "%r14", "%r15"
3304};
d708bcba
AM
3305static const char *att_names32[] = {
3306 "%eax", "%ecx", "%edx", "%ebx", "%esp", "%ebp", "%esi", "%edi",
52b15da3 3307 "%r8d", "%r9d", "%r10d", "%r11d", "%r12d", "%r13d", "%r14d", "%r15d"
252b5132 3308};
d708bcba
AM
3309static const char *att_names16[] = {
3310 "%ax", "%cx", "%dx", "%bx", "%sp", "%bp", "%si", "%di",
52b15da3 3311 "%r8w", "%r9w", "%r10w", "%r11w", "%r12w", "%r13w", "%r14w", "%r15w"
252b5132 3312};
d708bcba
AM
3313static const char *att_names8[] = {
3314 "%al", "%cl", "%dl", "%bl", "%ah", "%ch", "%dh", "%bh",
252b5132 3315};
d708bcba
AM
3316static const char *att_names8rex[] = {
3317 "%al", "%cl", "%dl", "%bl", "%spl", "%bpl", "%sil", "%dil",
52b15da3
JH
3318 "%r8b", "%r9b", "%r10b", "%r11b", "%r12b", "%r13b", "%r14b", "%r15b"
3319};
d708bcba
AM
3320static const char *att_names_seg[] = {
3321 "%es", "%cs", "%ss", "%ds", "%fs", "%gs", "%?", "%?",
252b5132 3322};
db51cc60
L
3323static const char *att_index64 = "%riz";
3324static const char *att_index32 = "%eiz";
d708bcba
AM
3325static const char *att_index16[] = {
3326 "%bx,%si", "%bx,%di", "%bp,%si", "%bp,%di", "%si", "%di", "%bp", "%bx"
252b5132
RH
3327};
3328
b9733481
L
3329static const char **names_mm;
3330static const char *intel_names_mm[] = {
3331 "mm0", "mm1", "mm2", "mm3",
3332 "mm4", "mm5", "mm6", "mm7"
3333};
3334static const char *att_names_mm[] = {
3335 "%mm0", "%mm1", "%mm2", "%mm3",
3336 "%mm4", "%mm5", "%mm6", "%mm7"
3337};
3338
7e8b059b
L
3339static const char *intel_names_bnd[] = {
3340 "bnd0", "bnd1", "bnd2", "bnd3"
3341};
3342
3343static const char *att_names_bnd[] = {
3344 "%bnd0", "%bnd1", "%bnd2", "%bnd3"
3345};
3346
b9733481
L
3347static const char **names_xmm;
3348static const char *intel_names_xmm[] = {
3349 "xmm0", "xmm1", "xmm2", "xmm3",
3350 "xmm4", "xmm5", "xmm6", "xmm7",
3351 "xmm8", "xmm9", "xmm10", "xmm11",
43234a1e
L
3352 "xmm12", "xmm13", "xmm14", "xmm15",
3353 "xmm16", "xmm17", "xmm18", "xmm19",
3354 "xmm20", "xmm21", "xmm22", "xmm23",
3355 "xmm24", "xmm25", "xmm26", "xmm27",
3356 "xmm28", "xmm29", "xmm30", "xmm31"
b9733481
L
3357};
3358static const char *att_names_xmm[] = {
3359 "%xmm0", "%xmm1", "%xmm2", "%xmm3",
3360 "%xmm4", "%xmm5", "%xmm6", "%xmm7",
3361 "%xmm8", "%xmm9", "%xmm10", "%xmm11",
43234a1e
L
3362 "%xmm12", "%xmm13", "%xmm14", "%xmm15",
3363 "%xmm16", "%xmm17", "%xmm18", "%xmm19",
3364 "%xmm20", "%xmm21", "%xmm22", "%xmm23",
3365 "%xmm24", "%xmm25", "%xmm26", "%xmm27",
3366 "%xmm28", "%xmm29", "%xmm30", "%xmm31"
b9733481
L
3367};
3368
3369static const char **names_ymm;
3370static const char *intel_names_ymm[] = {
3371 "ymm0", "ymm1", "ymm2", "ymm3",
3372 "ymm4", "ymm5", "ymm6", "ymm7",
3373 "ymm8", "ymm9", "ymm10", "ymm11",
43234a1e
L
3374 "ymm12", "ymm13", "ymm14", "ymm15",
3375 "ymm16", "ymm17", "ymm18", "ymm19",
3376 "ymm20", "ymm21", "ymm22", "ymm23",
3377 "ymm24", "ymm25", "ymm26", "ymm27",
3378 "ymm28", "ymm29", "ymm30", "ymm31"
b9733481
L
3379};
3380static const char *att_names_ymm[] = {
3381 "%ymm0", "%ymm1", "%ymm2", "%ymm3",
3382 "%ymm4", "%ymm5", "%ymm6", "%ymm7",
3383 "%ymm8", "%ymm9", "%ymm10", "%ymm11",
43234a1e
L
3384 "%ymm12", "%ymm13", "%ymm14", "%ymm15",
3385 "%ymm16", "%ymm17", "%ymm18", "%ymm19",
3386 "%ymm20", "%ymm21", "%ymm22", "%ymm23",
3387 "%ymm24", "%ymm25", "%ymm26", "%ymm27",
3388 "%ymm28", "%ymm29", "%ymm30", "%ymm31"
3389};
3390
3391static const char **names_zmm;
3392static const char *intel_names_zmm[] = {
3393 "zmm0", "zmm1", "zmm2", "zmm3",
3394 "zmm4", "zmm5", "zmm6", "zmm7",
3395 "zmm8", "zmm9", "zmm10", "zmm11",
3396 "zmm12", "zmm13", "zmm14", "zmm15",
3397 "zmm16", "zmm17", "zmm18", "zmm19",
3398 "zmm20", "zmm21", "zmm22", "zmm23",
3399 "zmm24", "zmm25", "zmm26", "zmm27",
3400 "zmm28", "zmm29", "zmm30", "zmm31"
3401};
3402static const char *att_names_zmm[] = {
3403 "%zmm0", "%zmm1", "%zmm2", "%zmm3",
3404 "%zmm4", "%zmm5", "%zmm6", "%zmm7",
3405 "%zmm8", "%zmm9", "%zmm10", "%zmm11",
3406 "%zmm12", "%zmm13", "%zmm14", "%zmm15",
3407 "%zmm16", "%zmm17", "%zmm18", "%zmm19",
3408 "%zmm20", "%zmm21", "%zmm22", "%zmm23",
3409 "%zmm24", "%zmm25", "%zmm26", "%zmm27",
3410 "%zmm28", "%zmm29", "%zmm30", "%zmm31"
3411};
3412
3413static const char **names_mask;
3414static const char *intel_names_mask[] = {
3415 "k0", "k1", "k2", "k3", "k4", "k5", "k6", "k7"
3416};
3417static const char *att_names_mask[] = {
3418 "%k0", "%k1", "%k2", "%k3", "%k4", "%k5", "%k6", "%k7"
3419};
3420
3421static const char *names_rounding[] =
3422{
3423 "{rn-sae}",
3424 "{rd-sae}",
3425 "{ru-sae}",
3426 "{rz-sae}"
b9733481
L
3427};
3428
1ceb70f8
L
3429static const struct dis386 reg_table[][8] = {
3430 /* REG_80 */
252b5132 3431 {
bf890a93
IT
3432 { "addA", { Ebh1, Ib }, 0 },
3433 { "orA", { Ebh1, Ib }, 0 },
3434 { "adcA", { Ebh1, Ib }, 0 },
3435 { "sbbA", { Ebh1, Ib }, 0 },
3436 { "andA", { Ebh1, Ib }, 0 },
3437 { "subA", { Ebh1, Ib }, 0 },
3438 { "xorA", { Ebh1, Ib }, 0 },
3439 { "cmpA", { Eb, Ib }, 0 },
252b5132 3440 },
1ceb70f8 3441 /* REG_81 */
252b5132 3442 {
bf890a93
IT
3443 { "addQ", { Evh1, Iv }, 0 },
3444 { "orQ", { Evh1, Iv }, 0 },
3445 { "adcQ", { Evh1, Iv }, 0 },
3446 { "sbbQ", { Evh1, Iv }, 0 },
3447 { "andQ", { Evh1, Iv }, 0 },
3448 { "subQ", { Evh1, Iv }, 0 },
3449 { "xorQ", { Evh1, Iv }, 0 },
3450 { "cmpQ", { Ev, Iv }, 0 },
252b5132 3451 },
7148c369 3452 /* REG_83 */
252b5132 3453 {
bf890a93
IT
3454 { "addQ", { Evh1, sIb }, 0 },
3455 { "orQ", { Evh1, sIb }, 0 },
3456 { "adcQ", { Evh1, sIb }, 0 },
3457 { "sbbQ", { Evh1, sIb }, 0 },
3458 { "andQ", { Evh1, sIb }, 0 },
3459 { "subQ", { Evh1, sIb }, 0 },
3460 { "xorQ", { Evh1, sIb }, 0 },
3461 { "cmpQ", { Ev, sIb }, 0 },
252b5132 3462 },
1ceb70f8 3463 /* REG_8F */
4e7d34a6 3464 {
bf890a93 3465 { "popU", { stackEv }, 0 },
c48244a5 3466 { XOP_8F_TABLE (XOP_09) },
592d1631
L
3467 { Bad_Opcode },
3468 { Bad_Opcode },
3469 { Bad_Opcode },
f88c9eb0 3470 { XOP_8F_TABLE (XOP_09) },
4e7d34a6 3471 },
1ceb70f8 3472 /* REG_C0 */
252b5132 3473 {
bf890a93
IT
3474 { "rolA", { Eb, Ib }, 0 },
3475 { "rorA", { Eb, Ib }, 0 },
3476 { "rclA", { Eb, Ib }, 0 },
3477 { "rcrA", { Eb, Ib }, 0 },
3478 { "shlA", { Eb, Ib }, 0 },
3479 { "shrA", { Eb, Ib }, 0 },
e4bdd679 3480 { "shlA", { Eb, Ib }, 0 },
bf890a93 3481 { "sarA", { Eb, Ib }, 0 },
252b5132 3482 },
1ceb70f8 3483 /* REG_C1 */
252b5132 3484 {
bf890a93
IT
3485 { "rolQ", { Ev, Ib }, 0 },
3486 { "rorQ", { Ev, Ib }, 0 },
3487 { "rclQ", { Ev, Ib }, 0 },
3488 { "rcrQ", { Ev, Ib }, 0 },
3489 { "shlQ", { Ev, Ib }, 0 },
3490 { "shrQ", { Ev, Ib }, 0 },
e4bdd679 3491 { "shlQ", { Ev, Ib }, 0 },
bf890a93 3492 { "sarQ", { Ev, Ib }, 0 },
252b5132 3493 },
1ceb70f8 3494 /* REG_C6 */
4e7d34a6 3495 {
bf890a93 3496 { "movA", { Ebh3, Ib }, 0 },
42164a71
L
3497 { Bad_Opcode },
3498 { Bad_Opcode },
3499 { Bad_Opcode },
3500 { Bad_Opcode },
3501 { Bad_Opcode },
3502 { Bad_Opcode },
3503 { MOD_TABLE (MOD_C6_REG_7) },
4e7d34a6 3504 },
1ceb70f8 3505 /* REG_C7 */
4e7d34a6 3506 {
bf890a93 3507 { "movQ", { Evh3, Iv }, 0 },
42164a71
L
3508 { Bad_Opcode },
3509 { Bad_Opcode },
3510 { Bad_Opcode },
3511 { Bad_Opcode },
3512 { Bad_Opcode },
3513 { Bad_Opcode },
3514 { MOD_TABLE (MOD_C7_REG_7) },
4e7d34a6 3515 },
1ceb70f8 3516 /* REG_D0 */
252b5132 3517 {
bf890a93
IT
3518 { "rolA", { Eb, I1 }, 0 },
3519 { "rorA", { Eb, I1 }, 0 },
3520 { "rclA", { Eb, I1 }, 0 },
3521 { "rcrA", { Eb, I1 }, 0 },
3522 { "shlA", { Eb, I1 }, 0 },
3523 { "shrA", { Eb, I1 }, 0 },
e4bdd679 3524 { "shlA", { Eb, I1 }, 0 },
bf890a93 3525 { "sarA", { Eb, I1 }, 0 },
252b5132 3526 },
1ceb70f8 3527 /* REG_D1 */
252b5132 3528 {
bf890a93
IT
3529 { "rolQ", { Ev, I1 }, 0 },
3530 { "rorQ", { Ev, I1 }, 0 },
3531 { "rclQ", { Ev, I1 }, 0 },
3532 { "rcrQ", { Ev, I1 }, 0 },
3533 { "shlQ", { Ev, I1 }, 0 },
3534 { "shrQ", { Ev, I1 }, 0 },
e4bdd679 3535 { "shlQ", { Ev, I1 }, 0 },
bf890a93 3536 { "sarQ", { Ev, I1 }, 0 },
252b5132 3537 },
1ceb70f8 3538 /* REG_D2 */
252b5132 3539 {
bf890a93
IT
3540 { "rolA", { Eb, CL }, 0 },
3541 { "rorA", { Eb, CL }, 0 },
3542 { "rclA", { Eb, CL }, 0 },
3543 { "rcrA", { Eb, CL }, 0 },
3544 { "shlA", { Eb, CL }, 0 },
3545 { "shrA", { Eb, CL }, 0 },
e4bdd679 3546 { "shlA", { Eb, CL }, 0 },
bf890a93 3547 { "sarA", { Eb, CL }, 0 },
252b5132 3548 },
1ceb70f8 3549 /* REG_D3 */
252b5132 3550 {
bf890a93
IT
3551 { "rolQ", { Ev, CL }, 0 },
3552 { "rorQ", { Ev, CL }, 0 },
3553 { "rclQ", { Ev, CL }, 0 },
3554 { "rcrQ", { Ev, CL }, 0 },
3555 { "shlQ", { Ev, CL }, 0 },
3556 { "shrQ", { Ev, CL }, 0 },
e4bdd679 3557 { "shlQ", { Ev, CL }, 0 },
bf890a93 3558 { "sarQ", { Ev, CL }, 0 },
252b5132 3559 },
1ceb70f8 3560 /* REG_F6 */
252b5132 3561 {
bf890a93 3562 { "testA", { Eb, Ib }, 0 },
7db2c588 3563 { "testA", { Eb, Ib }, 0 },
bf890a93
IT
3564 { "notA", { Ebh1 }, 0 },
3565 { "negA", { Ebh1 }, 0 },
3566 { "mulA", { Eb }, 0 }, /* Don't print the implicit %al register, */
3567 { "imulA", { Eb }, 0 }, /* to distinguish these opcodes from other */
3568 { "divA", { Eb }, 0 }, /* mul/imul opcodes. Do the same for div */
3569 { "idivA", { Eb }, 0 }, /* and idiv for consistency. */
252b5132 3570 },
1ceb70f8 3571 /* REG_F7 */
252b5132 3572 {
bf890a93 3573 { "testQ", { Ev, Iv }, 0 },
7db2c588 3574 { "testQ", { Ev, Iv }, 0 },
bf890a93
IT
3575 { "notQ", { Evh1 }, 0 },
3576 { "negQ", { Evh1 }, 0 },
3577 { "mulQ", { Ev }, 0 }, /* Don't print the implicit register. */
3578 { "imulQ", { Ev }, 0 },
3579 { "divQ", { Ev }, 0 },
3580 { "idivQ", { Ev }, 0 },
252b5132 3581 },
1ceb70f8 3582 /* REG_FE */
252b5132 3583 {
bf890a93
IT
3584 { "incA", { Ebh1 }, 0 },
3585 { "decA", { Ebh1 }, 0 },
252b5132 3586 },
1ceb70f8 3587 /* REG_FF */
252b5132 3588 {
bf890a93
IT
3589 { "incQ", { Evh1 }, 0 },
3590 { "decQ", { Evh1 }, 0 },
9fef80d6 3591 { "call{&|}", { NOTRACK, indirEv, BND }, 0 },
4a357820 3592 { MOD_TABLE (MOD_FF_REG_3) },
9fef80d6 3593 { "jmp{&|}", { NOTRACK, indirEv, BND }, 0 },
4a357820 3594 { MOD_TABLE (MOD_FF_REG_5) },
bf890a93 3595 { "pushU", { stackEv }, 0 },
592d1631 3596 { Bad_Opcode },
252b5132 3597 },
1ceb70f8 3598 /* REG_0F00 */
252b5132 3599 {
bf890a93
IT
3600 { "sldtD", { Sv }, 0 },
3601 { "strD", { Sv }, 0 },
3602 { "lldt", { Ew }, 0 },
3603 { "ltr", { Ew }, 0 },
3604 { "verr", { Ew }, 0 },
3605 { "verw", { Ew }, 0 },
592d1631
L
3606 { Bad_Opcode },
3607 { Bad_Opcode },
252b5132 3608 },
1ceb70f8 3609 /* REG_0F01 */
252b5132 3610 {
1ceb70f8
L
3611 { MOD_TABLE (MOD_0F01_REG_0) },
3612 { MOD_TABLE (MOD_0F01_REG_1) },
3613 { MOD_TABLE (MOD_0F01_REG_2) },
3614 { MOD_TABLE (MOD_0F01_REG_3) },
bf890a93 3615 { "smswD", { Sv }, 0 },
8eab4136 3616 { MOD_TABLE (MOD_0F01_REG_5) },
bf890a93 3617 { "lmsw", { Ew }, 0 },
1ceb70f8 3618 { MOD_TABLE (MOD_0F01_REG_7) },
252b5132 3619 },
b5b1fc4f 3620 /* REG_0F0D */
252b5132 3621 {
bf890a93
IT
3622 { "prefetch", { Mb }, 0 },
3623 { "prefetchw", { Mb }, 0 },
3624 { "prefetchwt1", { Mb }, 0 },
3625 { "prefetch", { Mb }, 0 },
3626 { "prefetch", { Mb }, 0 },
3627 { "prefetch", { Mb }, 0 },
3628 { "prefetch", { Mb }, 0 },
3629 { "prefetch", { Mb }, 0 },
252b5132 3630 },
1ceb70f8 3631 /* REG_0F18 */
252b5132 3632 {
1ceb70f8
L
3633 { MOD_TABLE (MOD_0F18_REG_0) },
3634 { MOD_TABLE (MOD_0F18_REG_1) },
3635 { MOD_TABLE (MOD_0F18_REG_2) },
3636 { MOD_TABLE (MOD_0F18_REG_3) },
d7189fa5
RM
3637 { MOD_TABLE (MOD_0F18_REG_4) },
3638 { MOD_TABLE (MOD_0F18_REG_5) },
3639 { MOD_TABLE (MOD_0F18_REG_6) },
3640 { MOD_TABLE (MOD_0F18_REG_7) },
252b5132 3641 },
603555e5
L
3642 /* REG_0F1E_MOD_3 */
3643 {
3644 { "nopQ", { Ev }, 0 },
3645 { "rdsspK", { Rdq }, PREFIX_OPCODE },
3646 { "nopQ", { Ev }, 0 },
3647 { "nopQ", { Ev }, 0 },
3648 { "nopQ", { Ev }, 0 },
3649 { "nopQ", { Ev }, 0 },
3650 { "nopQ", { Ev }, 0 },
3651 { RM_TABLE (RM_0F1E_MOD_3_REG_7) },
3652 },
1ceb70f8 3653 /* REG_0F71 */
a6bd098c 3654 {
592d1631
L
3655 { Bad_Opcode },
3656 { Bad_Opcode },
1ceb70f8 3657 { MOD_TABLE (MOD_0F71_REG_2) },
592d1631 3658 { Bad_Opcode },
1ceb70f8 3659 { MOD_TABLE (MOD_0F71_REG_4) },
592d1631 3660 { Bad_Opcode },
1ceb70f8 3661 { MOD_TABLE (MOD_0F71_REG_6) },
a6bd098c 3662 },
1ceb70f8 3663 /* REG_0F72 */
a6bd098c 3664 {
592d1631
L
3665 { Bad_Opcode },
3666 { Bad_Opcode },
1ceb70f8 3667 { MOD_TABLE (MOD_0F72_REG_2) },
592d1631 3668 { Bad_Opcode },
1ceb70f8 3669 { MOD_TABLE (MOD_0F72_REG_4) },
592d1631 3670 { Bad_Opcode },
1ceb70f8 3671 { MOD_TABLE (MOD_0F72_REG_6) },
a6bd098c 3672 },
1ceb70f8 3673 /* REG_0F73 */
252b5132 3674 {
592d1631
L
3675 { Bad_Opcode },
3676 { Bad_Opcode },
1ceb70f8
L
3677 { MOD_TABLE (MOD_0F73_REG_2) },
3678 { MOD_TABLE (MOD_0F73_REG_3) },
592d1631
L
3679 { Bad_Opcode },
3680 { Bad_Opcode },
1ceb70f8
L
3681 { MOD_TABLE (MOD_0F73_REG_6) },
3682 { MOD_TABLE (MOD_0F73_REG_7) },
252b5132 3683 },
1ceb70f8 3684 /* REG_0FA6 */
252b5132 3685 {
bf890a93
IT
3686 { "montmul", { { OP_0f07, 0 } }, 0 },
3687 { "xsha1", { { OP_0f07, 0 } }, 0 },
3688 { "xsha256", { { OP_0f07, 0 } }, 0 },
4e7d34a6 3689 },
1ceb70f8 3690 /* REG_0FA7 */
4e7d34a6 3691 {
bf890a93
IT
3692 { "xstore-rng", { { OP_0f07, 0 } }, 0 },
3693 { "xcrypt-ecb", { { OP_0f07, 0 } }, 0 },
3694 { "xcrypt-cbc", { { OP_0f07, 0 } }, 0 },
3695 { "xcrypt-ctr", { { OP_0f07, 0 } }, 0 },
3696 { "xcrypt-cfb", { { OP_0f07, 0 } }, 0 },
3697 { "xcrypt-ofb", { { OP_0f07, 0 } }, 0 },
4e7d34a6 3698 },
1ceb70f8 3699 /* REG_0FAE */
4e7d34a6 3700 {
1ceb70f8
L
3701 { MOD_TABLE (MOD_0FAE_REG_0) },
3702 { MOD_TABLE (MOD_0FAE_REG_1) },
3703 { MOD_TABLE (MOD_0FAE_REG_2) },
3704 { MOD_TABLE (MOD_0FAE_REG_3) },
475a2301 3705 { MOD_TABLE (MOD_0FAE_REG_4) },
1ceb70f8
L
3706 { MOD_TABLE (MOD_0FAE_REG_5) },
3707 { MOD_TABLE (MOD_0FAE_REG_6) },
3708 { MOD_TABLE (MOD_0FAE_REG_7) },
252b5132 3709 },
1ceb70f8 3710 /* REG_0FBA */
252b5132 3711 {
592d1631
L
3712 { Bad_Opcode },
3713 { Bad_Opcode },
3714 { Bad_Opcode },
3715 { Bad_Opcode },
bf890a93
IT
3716 { "btQ", { Ev, Ib }, 0 },
3717 { "btsQ", { Evh1, Ib }, 0 },
3718 { "btrQ", { Evh1, Ib }, 0 },
3719 { "btcQ", { Evh1, Ib }, 0 },
c608c12e 3720 },
1ceb70f8 3721 /* REG_0FC7 */
c608c12e 3722 {
592d1631 3723 { Bad_Opcode },
bf890a93 3724 { "cmpxchg8b", { { CMPXCHG8B_Fixup, q_mode } }, 0 },
592d1631 3725 { Bad_Opcode },
963f3586
IT
3726 { MOD_TABLE (MOD_0FC7_REG_3) },
3727 { MOD_TABLE (MOD_0FC7_REG_4) },
3728 { MOD_TABLE (MOD_0FC7_REG_5) },
1ceb70f8
L
3729 { MOD_TABLE (MOD_0FC7_REG_6) },
3730 { MOD_TABLE (MOD_0FC7_REG_7) },
252b5132 3731 },
592a252b 3732 /* REG_VEX_0F71 */
c0f3af97 3733 {
592d1631
L
3734 { Bad_Opcode },
3735 { Bad_Opcode },
592a252b 3736 { MOD_TABLE (MOD_VEX_0F71_REG_2) },
592d1631 3737 { Bad_Opcode },
592a252b 3738 { MOD_TABLE (MOD_VEX_0F71_REG_4) },
592d1631 3739 { Bad_Opcode },
592a252b 3740 { MOD_TABLE (MOD_VEX_0F71_REG_6) },
c0f3af97 3741 },
592a252b 3742 /* REG_VEX_0F72 */
c0f3af97 3743 {
592d1631
L
3744 { Bad_Opcode },
3745 { Bad_Opcode },
592a252b 3746 { MOD_TABLE (MOD_VEX_0F72_REG_2) },
592d1631 3747 { Bad_Opcode },
592a252b 3748 { MOD_TABLE (MOD_VEX_0F72_REG_4) },
592d1631 3749 { Bad_Opcode },
592a252b 3750 { MOD_TABLE (MOD_VEX_0F72_REG_6) },
c0f3af97 3751 },
592a252b 3752 /* REG_VEX_0F73 */
c0f3af97 3753 {
592d1631
L
3754 { Bad_Opcode },
3755 { Bad_Opcode },
592a252b
L
3756 { MOD_TABLE (MOD_VEX_0F73_REG_2) },
3757 { MOD_TABLE (MOD_VEX_0F73_REG_3) },
592d1631
L
3758 { Bad_Opcode },
3759 { Bad_Opcode },
592a252b
L
3760 { MOD_TABLE (MOD_VEX_0F73_REG_6) },
3761 { MOD_TABLE (MOD_VEX_0F73_REG_7) },
c0f3af97 3762 },
592a252b 3763 /* REG_VEX_0FAE */
c0f3af97 3764 {
592d1631
L
3765 { Bad_Opcode },
3766 { Bad_Opcode },
592a252b
L
3767 { MOD_TABLE (MOD_VEX_0FAE_REG_2) },
3768 { MOD_TABLE (MOD_VEX_0FAE_REG_3) },
c0f3af97 3769 },
f12dc422
L
3770 /* REG_VEX_0F38F3 */
3771 {
3772 { Bad_Opcode },
3773 { PREFIX_TABLE (PREFIX_VEX_0F38F3_REG_1) },
3774 { PREFIX_TABLE (PREFIX_VEX_0F38F3_REG_2) },
3775 { PREFIX_TABLE (PREFIX_VEX_0F38F3_REG_3) },
3776 },
f88c9eb0
SP
3777 /* REG_XOP_LWPCB */
3778 {
bf890a93
IT
3779 { "llwpcb", { { OP_LWPCB_E, 0 } }, 0 },
3780 { "slwpcb", { { OP_LWPCB_E, 0 } }, 0 },
f88c9eb0
SP
3781 },
3782 /* REG_XOP_LWP */
3783 {
bf890a93
IT
3784 { "lwpins", { { OP_LWP_E, 0 }, Ed, Iq }, 0 },
3785 { "lwpval", { { OP_LWP_E, 0 }, Ed, Iq }, 0 },
f88c9eb0 3786 },
2a2a0f38
QN
3787 /* REG_XOP_TBM_01 */
3788 {
3789 { Bad_Opcode },
bf890a93
IT
3790 { "blcfill", { { OP_LWP_E, 0 }, Ev }, 0 },
3791 { "blsfill", { { OP_LWP_E, 0 }, Ev }, 0 },
3792 { "blcs", { { OP_LWP_E, 0 }, Ev }, 0 },
3793 { "tzmsk", { { OP_LWP_E, 0 }, Ev }, 0 },
3794 { "blcic", { { OP_LWP_E, 0 }, Ev }, 0 },
3795 { "blsic", { { OP_LWP_E, 0 }, Ev }, 0 },
3796 { "t1mskc", { { OP_LWP_E, 0 }, Ev }, 0 },
2a2a0f38
QN
3797 },
3798 /* REG_XOP_TBM_02 */
3799 {
3800 { Bad_Opcode },
bf890a93 3801 { "blcmsk", { { OP_LWP_E, 0 }, Ev }, 0 },
2a2a0f38
QN
3802 { Bad_Opcode },
3803 { Bad_Opcode },
3804 { Bad_Opcode },
3805 { Bad_Opcode },
bf890a93 3806 { "blci", { { OP_LWP_E, 0 }, Ev }, 0 },
2a2a0f38 3807 },
43234a1e
L
3808#define NEED_REG_TABLE
3809#include "i386-dis-evex.h"
3810#undef NEED_REG_TABLE
4e7d34a6
L
3811};
3812
1ceb70f8
L
3813static const struct dis386 prefix_table[][4] = {
3814 /* PREFIX_90 */
252b5132 3815 {
bf890a93
IT
3816 { "xchgS", { { NOP_Fixup1, eAX_reg }, { NOP_Fixup2, eAX_reg } }, 0 },
3817 { "pause", { XX }, 0 },
3818 { "xchgS", { { NOP_Fixup1, eAX_reg }, { NOP_Fixup2, eAX_reg } }, 0 },
507bd325 3819 { NULL, { { NULL, 0 } }, PREFIX_IGNORED }
0f10071e 3820 },
4e7d34a6 3821
603555e5
L
3822 /* PREFIX_MOD_0_0F01_REG_5 */
3823 {
3824 { Bad_Opcode },
3825 { "rstorssp", { Mq }, PREFIX_OPCODE },
3826 },
3827
2234eee6 3828 /* PREFIX_MOD_3_0F01_REG_5_RM_0 */
603555e5
L
3829 {
3830 { Bad_Opcode },
2234eee6 3831 { "setssbsy", { Skip_MODRM }, PREFIX_OPCODE },
603555e5
L
3832 },
3833
3834 /* PREFIX_MOD_3_0F01_REG_5_RM_2 */
3835 {
3836 { Bad_Opcode },
c2f76402 3837 { "saveprevssp", { Skip_MODRM }, PREFIX_OPCODE },
603555e5
L
3838 },
3839
1ceb70f8 3840 /* PREFIX_0F10 */
cc0ec051 3841 {
507bd325
L
3842 { "movups", { XM, EXx }, PREFIX_OPCODE },
3843 { "movss", { XM, EXd }, PREFIX_OPCODE },
3844 { "movupd", { XM, EXx }, PREFIX_OPCODE },
3845 { "movsd", { XM, EXq }, PREFIX_OPCODE },
30d1c836 3846 },
4e7d34a6 3847
1ceb70f8 3848 /* PREFIX_0F11 */
30d1c836 3849 {
507bd325
L
3850 { "movups", { EXxS, XM }, PREFIX_OPCODE },
3851 { "movss", { EXdS, XM }, PREFIX_OPCODE },
3852 { "movupd", { EXxS, XM }, PREFIX_OPCODE },
3853 { "movsd", { EXqS, XM }, PREFIX_OPCODE },
4e7d34a6 3854 },
252b5132 3855
1ceb70f8 3856 /* PREFIX_0F12 */
c608c12e 3857 {
1ceb70f8 3858 { MOD_TABLE (MOD_0F12_PREFIX_0) },
507bd325
L
3859 { "movsldup", { XM, EXx }, PREFIX_OPCODE },
3860 { "movlpd", { XM, EXq }, PREFIX_OPCODE },
3861 { "movddup", { XM, EXq }, PREFIX_OPCODE },
c608c12e 3862 },
4e7d34a6 3863
1ceb70f8 3864 /* PREFIX_0F16 */
c608c12e 3865 {
1ceb70f8 3866 { MOD_TABLE (MOD_0F16_PREFIX_0) },
507bd325
L
3867 { "movshdup", { XM, EXx }, PREFIX_OPCODE },
3868 { "movhpd", { XM, EXq }, PREFIX_OPCODE },
c608c12e 3869 },
4e7d34a6 3870
7e8b059b
L
3871 /* PREFIX_0F1A */
3872 {
3873 { MOD_TABLE (MOD_0F1A_PREFIX_0) },
bf890a93
IT
3874 { "bndcl", { Gbnd, Ev_bnd }, 0 },
3875 { "bndmov", { Gbnd, Ebnd }, 0 },
3876 { "bndcu", { Gbnd, Ev_bnd }, 0 },
7e8b059b
L
3877 },
3878
3879 /* PREFIX_0F1B */
3880 {
3881 { MOD_TABLE (MOD_0F1B_PREFIX_0) },
3882 { MOD_TABLE (MOD_0F1B_PREFIX_1) },
bf890a93
IT
3883 { "bndmov", { Ebnd, Gbnd }, 0 },
3884 { "bndcn", { Gbnd, Ev_bnd }, 0 },
7e8b059b
L
3885 },
3886
603555e5
L
3887 /* PREFIX_0F1E */
3888 {
3889 { "nopQ", { Ev }, PREFIX_OPCODE },
3890 { MOD_TABLE (MOD_0F1E_PREFIX_1) },
3891 { "nopQ", { Ev }, PREFIX_OPCODE },
3892 { "nopQ", { Ev }, PREFIX_OPCODE },
3893 },
3894
1ceb70f8 3895 /* PREFIX_0F2A */
c608c12e 3896 {
507bd325
L
3897 { "cvtpi2ps", { XM, EMCq }, PREFIX_OPCODE },
3898 { "cvtsi2ss%LQ", { XM, Ev }, PREFIX_OPCODE },
3899 { "cvtpi2pd", { XM, EMCq }, PREFIX_OPCODE },
bf890a93 3900 { "cvtsi2sd%LQ", { XM, Ev }, 0 },
c608c12e 3901 },
4e7d34a6 3902
1ceb70f8 3903 /* PREFIX_0F2B */
c608c12e 3904 {
75c135a8
L
3905 { MOD_TABLE (MOD_0F2B_PREFIX_0) },
3906 { MOD_TABLE (MOD_0F2B_PREFIX_1) },
3907 { MOD_TABLE (MOD_0F2B_PREFIX_2) },
3908 { MOD_TABLE (MOD_0F2B_PREFIX_3) },
c608c12e 3909 },
4e7d34a6 3910
1ceb70f8 3911 /* PREFIX_0F2C */
c608c12e 3912 {
507bd325
L
3913 { "cvttps2pi", { MXC, EXq }, PREFIX_OPCODE },
3914 { "cvttss2siY", { Gv, EXd }, PREFIX_OPCODE },
3915 { "cvttpd2pi", { MXC, EXx }, PREFIX_OPCODE },
3916 { "cvttsd2siY", { Gv, EXq }, PREFIX_OPCODE },
c608c12e 3917 },
4e7d34a6 3918
1ceb70f8 3919 /* PREFIX_0F2D */
c608c12e 3920 {
507bd325
L
3921 { "cvtps2pi", { MXC, EXq }, PREFIX_OPCODE },
3922 { "cvtss2siY", { Gv, EXd }, PREFIX_OPCODE },
3923 { "cvtpd2pi", { MXC, EXx }, PREFIX_OPCODE },
3924 { "cvtsd2siY", { Gv, EXq }, PREFIX_OPCODE },
c608c12e 3925 },
4e7d34a6 3926
1ceb70f8 3927 /* PREFIX_0F2E */
c608c12e 3928 {
bf890a93 3929 { "ucomiss",{ XM, EXd }, 0 },
592d1631 3930 { Bad_Opcode },
bf890a93 3931 { "ucomisd",{ XM, EXq }, 0 },
c608c12e 3932 },
4e7d34a6 3933
1ceb70f8 3934 /* PREFIX_0F2F */
c608c12e 3935 {
bf890a93 3936 { "comiss", { XM, EXd }, 0 },
592d1631 3937 { Bad_Opcode },
bf890a93 3938 { "comisd", { XM, EXq }, 0 },
c608c12e 3939 },
4e7d34a6 3940
1ceb70f8 3941 /* PREFIX_0F51 */
c608c12e 3942 {
507bd325
L
3943 { "sqrtps", { XM, EXx }, PREFIX_OPCODE },
3944 { "sqrtss", { XM, EXd }, PREFIX_OPCODE },
3945 { "sqrtpd", { XM, EXx }, PREFIX_OPCODE },
3946 { "sqrtsd", { XM, EXq }, PREFIX_OPCODE },
c608c12e 3947 },
4e7d34a6 3948
1ceb70f8 3949 /* PREFIX_0F52 */
c608c12e 3950 {
507bd325
L
3951 { "rsqrtps",{ XM, EXx }, PREFIX_OPCODE },
3952 { "rsqrtss",{ XM, EXd }, PREFIX_OPCODE },
c608c12e 3953 },
4e7d34a6 3954
1ceb70f8 3955 /* PREFIX_0F53 */
c608c12e 3956 {
507bd325
L
3957 { "rcpps", { XM, EXx }, PREFIX_OPCODE },
3958 { "rcpss", { XM, EXd }, PREFIX_OPCODE },
c608c12e 3959 },
4e7d34a6 3960
1ceb70f8 3961 /* PREFIX_0F58 */
c608c12e 3962 {
507bd325
L
3963 { "addps", { XM, EXx }, PREFIX_OPCODE },
3964 { "addss", { XM, EXd }, PREFIX_OPCODE },
3965 { "addpd", { XM, EXx }, PREFIX_OPCODE },
3966 { "addsd", { XM, EXq }, PREFIX_OPCODE },
c608c12e 3967 },
4e7d34a6 3968
1ceb70f8 3969 /* PREFIX_0F59 */
c608c12e 3970 {
507bd325
L
3971 { "mulps", { XM, EXx }, PREFIX_OPCODE },
3972 { "mulss", { XM, EXd }, PREFIX_OPCODE },
3973 { "mulpd", { XM, EXx }, PREFIX_OPCODE },
3974 { "mulsd", { XM, EXq }, PREFIX_OPCODE },
041bd2e0 3975 },
4e7d34a6 3976
1ceb70f8 3977 /* PREFIX_0F5A */
041bd2e0 3978 {
507bd325
L
3979 { "cvtps2pd", { XM, EXq }, PREFIX_OPCODE },
3980 { "cvtss2sd", { XM, EXd }, PREFIX_OPCODE },
3981 { "cvtpd2ps", { XM, EXx }, PREFIX_OPCODE },
3982 { "cvtsd2ss", { XM, EXq }, PREFIX_OPCODE },
041bd2e0 3983 },
4e7d34a6 3984
1ceb70f8 3985 /* PREFIX_0F5B */
041bd2e0 3986 {
507bd325
L
3987 { "cvtdq2ps", { XM, EXx }, PREFIX_OPCODE },
3988 { "cvttps2dq", { XM, EXx }, PREFIX_OPCODE },
3989 { "cvtps2dq", { XM, EXx }, PREFIX_OPCODE },
041bd2e0 3990 },
4e7d34a6 3991
1ceb70f8 3992 /* PREFIX_0F5C */
041bd2e0 3993 {
507bd325
L
3994 { "subps", { XM, EXx }, PREFIX_OPCODE },
3995 { "subss", { XM, EXd }, PREFIX_OPCODE },
3996 { "subpd", { XM, EXx }, PREFIX_OPCODE },
3997 { "subsd", { XM, EXq }, PREFIX_OPCODE },
041bd2e0 3998 },
4e7d34a6 3999
1ceb70f8 4000 /* PREFIX_0F5D */
041bd2e0 4001 {
507bd325
L
4002 { "minps", { XM, EXx }, PREFIX_OPCODE },
4003 { "minss", { XM, EXd }, PREFIX_OPCODE },
4004 { "minpd", { XM, EXx }, PREFIX_OPCODE },
4005 { "minsd", { XM, EXq }, PREFIX_OPCODE },
041bd2e0 4006 },
4e7d34a6 4007
1ceb70f8 4008 /* PREFIX_0F5E */
041bd2e0 4009 {
507bd325
L
4010 { "divps", { XM, EXx }, PREFIX_OPCODE },
4011 { "divss", { XM, EXd }, PREFIX_OPCODE },
4012 { "divpd", { XM, EXx }, PREFIX_OPCODE },
4013 { "divsd", { XM, EXq }, PREFIX_OPCODE },
041bd2e0 4014 },
4e7d34a6 4015
1ceb70f8 4016 /* PREFIX_0F5F */
041bd2e0 4017 {
507bd325
L
4018 { "maxps", { XM, EXx }, PREFIX_OPCODE },
4019 { "maxss", { XM, EXd }, PREFIX_OPCODE },
4020 { "maxpd", { XM, EXx }, PREFIX_OPCODE },
4021 { "maxsd", { XM, EXq }, PREFIX_OPCODE },
041bd2e0 4022 },
4e7d34a6 4023
1ceb70f8 4024 /* PREFIX_0F60 */
041bd2e0 4025 {
507bd325 4026 { "punpcklbw",{ MX, EMd }, PREFIX_OPCODE },
592d1631 4027 { Bad_Opcode },
507bd325 4028 { "punpcklbw",{ MX, EMx }, PREFIX_OPCODE },
041bd2e0 4029 },
4e7d34a6 4030
1ceb70f8 4031 /* PREFIX_0F61 */
041bd2e0 4032 {
507bd325 4033 { "punpcklwd",{ MX, EMd }, PREFIX_OPCODE },
592d1631 4034 { Bad_Opcode },
507bd325 4035 { "punpcklwd",{ MX, EMx }, PREFIX_OPCODE },
041bd2e0 4036 },
4e7d34a6 4037
1ceb70f8 4038 /* PREFIX_0F62 */
041bd2e0 4039 {
507bd325 4040 { "punpckldq",{ MX, EMd }, PREFIX_OPCODE },
592d1631 4041 { Bad_Opcode },
507bd325 4042 { "punpckldq",{ MX, EMx }, PREFIX_OPCODE },
041bd2e0 4043 },
4e7d34a6 4044
1ceb70f8 4045 /* PREFIX_0F6C */
041bd2e0 4046 {
592d1631
L
4047 { Bad_Opcode },
4048 { Bad_Opcode },
507bd325 4049 { "punpcklqdq", { XM, EXx }, PREFIX_OPCODE },
0f17484f 4050 },
4e7d34a6 4051
1ceb70f8 4052 /* PREFIX_0F6D */
0f17484f 4053 {
592d1631
L
4054 { Bad_Opcode },
4055 { Bad_Opcode },
507bd325 4056 { "punpckhqdq", { XM, EXx }, PREFIX_OPCODE },
041bd2e0 4057 },
4e7d34a6 4058
1ceb70f8 4059 /* PREFIX_0F6F */
ca164297 4060 {
507bd325
L
4061 { "movq", { MX, EM }, PREFIX_OPCODE },
4062 { "movdqu", { XM, EXx }, PREFIX_OPCODE },
4063 { "movdqa", { XM, EXx }, PREFIX_OPCODE },
ca164297 4064 },
4e7d34a6 4065
1ceb70f8 4066 /* PREFIX_0F70 */
4e7d34a6 4067 {
507bd325
L
4068 { "pshufw", { MX, EM, Ib }, PREFIX_OPCODE },
4069 { "pshufhw",{ XM, EXx, Ib }, PREFIX_OPCODE },
4070 { "pshufd", { XM, EXx, Ib }, PREFIX_OPCODE },
4071 { "pshuflw",{ XM, EXx, Ib }, PREFIX_OPCODE },
4e7d34a6
L
4072 },
4073
92fddf8e
L
4074 /* PREFIX_0F73_REG_3 */
4075 {
592d1631
L
4076 { Bad_Opcode },
4077 { Bad_Opcode },
bf890a93 4078 { "psrldq", { XS, Ib }, 0 },
92fddf8e
L
4079 },
4080
4081 /* PREFIX_0F73_REG_7 */
4082 {
592d1631
L
4083 { Bad_Opcode },
4084 { Bad_Opcode },
bf890a93 4085 { "pslldq", { XS, Ib }, 0 },
92fddf8e
L
4086 },
4087
1ceb70f8 4088 /* PREFIX_0F78 */
4e7d34a6 4089 {
bf890a93 4090 {"vmread", { Em, Gm }, 0 },
592d1631 4091 { Bad_Opcode },
bf890a93
IT
4092 {"extrq", { XS, Ib, Ib }, 0 },
4093 {"insertq", { XM, XS, Ib, Ib }, 0 },
4e7d34a6
L
4094 },
4095
1ceb70f8 4096 /* PREFIX_0F79 */
4e7d34a6 4097 {
bf890a93 4098 {"vmwrite", { Gm, Em }, 0 },
592d1631 4099 { Bad_Opcode },
bf890a93
IT
4100 {"extrq", { XM, XS }, 0 },
4101 {"insertq", { XM, XS }, 0 },
4e7d34a6
L
4102 },
4103
1ceb70f8 4104 /* PREFIX_0F7C */
ca164297 4105 {
592d1631
L
4106 { Bad_Opcode },
4107 { Bad_Opcode },
507bd325
L
4108 { "haddpd", { XM, EXx }, PREFIX_OPCODE },
4109 { "haddps", { XM, EXx }, PREFIX_OPCODE },
ca164297 4110 },
4e7d34a6 4111
1ceb70f8 4112 /* PREFIX_0F7D */
ca164297 4113 {
592d1631
L
4114 { Bad_Opcode },
4115 { Bad_Opcode },
507bd325
L
4116 { "hsubpd", { XM, EXx }, PREFIX_OPCODE },
4117 { "hsubps", { XM, EXx }, PREFIX_OPCODE },
ca164297 4118 },
4e7d34a6 4119
1ceb70f8 4120 /* PREFIX_0F7E */
ca164297 4121 {
507bd325
L
4122 { "movK", { Edq, MX }, PREFIX_OPCODE },
4123 { "movq", { XM, EXq }, PREFIX_OPCODE },
4124 { "movK", { Edq, XM }, PREFIX_OPCODE },
ca164297 4125 },
4e7d34a6 4126
1ceb70f8 4127 /* PREFIX_0F7F */
ca164297 4128 {
507bd325
L
4129 { "movq", { EMS, MX }, PREFIX_OPCODE },
4130 { "movdqu", { EXxS, XM }, PREFIX_OPCODE },
4131 { "movdqa", { EXxS, XM }, PREFIX_OPCODE },
ca164297 4132 },
4e7d34a6 4133
c7b8aa3a
L
4134 /* PREFIX_0FAE_REG_0 */
4135 {
4136 { Bad_Opcode },
bf890a93 4137 { "rdfsbase", { Ev }, 0 },
c7b8aa3a
L
4138 },
4139
4140 /* PREFIX_0FAE_REG_1 */
4141 {
4142 { Bad_Opcode },
bf890a93 4143 { "rdgsbase", { Ev }, 0 },
c7b8aa3a
L
4144 },
4145
4146 /* PREFIX_0FAE_REG_2 */
4147 {
4148 { Bad_Opcode },
bf890a93 4149 { "wrfsbase", { Ev }, 0 },
c7b8aa3a
L
4150 },
4151
4152 /* PREFIX_0FAE_REG_3 */
4153 {
4154 { Bad_Opcode },
bf890a93 4155 { "wrgsbase", { Ev }, 0 },
c7b8aa3a
L
4156 },
4157
6b40c462
L
4158 /* PREFIX_MOD_0_0FAE_REG_4 */
4159 {
4160 { "xsave", { FXSAVE }, 0 },
4161 { "ptwrite%LQ", { Edq }, 0 },
4162 },
4163
4164 /* PREFIX_MOD_3_0FAE_REG_4 */
4165 {
4166 { Bad_Opcode },
4167 { "ptwrite%LQ", { Edq }, 0 },
4168 },
4169
603555e5
L
4170 /* PREFIX_MOD_0_0FAE_REG_5 */
4171 {
4172 { "xrstor", { FXSAVE }, PREFIX_OPCODE },
2234eee6
L
4173 },
4174
4175 /* PREFIX_MOD_3_0FAE_REG_5 */
4176 {
4177 { "lfence", { Skip_MODRM }, 0 },
4178 { "incsspK", { Rdq }, PREFIX_OPCODE },
603555e5
L
4179 },
4180
c5e7287a
IT
4181 /* PREFIX_0FAE_REG_6 */
4182 {
603555e5
L
4183 { "xsaveopt", { FXSAVE }, PREFIX_OPCODE },
4184 { "clrssbsy", { Mq }, PREFIX_OPCODE },
4185 { "clwb", { Mb }, PREFIX_OPCODE },
c5e7287a
IT
4186 },
4187
963f3586
IT
4188 /* PREFIX_0FAE_REG_7 */
4189 {
bf890a93 4190 { "clflush", { Mb }, 0 },
963f3586 4191 { Bad_Opcode },
bf890a93 4192 { "clflushopt", { Mb }, 0 },
963f3586
IT
4193 },
4194
1ceb70f8 4195 /* PREFIX_0FB8 */
ca164297 4196 {
592d1631 4197 { Bad_Opcode },
bf890a93 4198 { "popcntS", { Gv, Ev }, 0 },
ca164297 4199 },
4e7d34a6 4200
f12dc422
L
4201 /* PREFIX_0FBC */
4202 {
bf890a93
IT
4203 { "bsfS", { Gv, Ev }, 0 },
4204 { "tzcntS", { Gv, Ev }, 0 },
4205 { "bsfS", { Gv, Ev }, 0 },
f12dc422
L
4206 },
4207
1ceb70f8 4208 /* PREFIX_0FBD */
050dfa73 4209 {
bf890a93
IT
4210 { "bsrS", { Gv, Ev }, 0 },
4211 { "lzcntS", { Gv, Ev }, 0 },
4212 { "bsrS", { Gv, Ev }, 0 },
050dfa73
MM
4213 },
4214
1ceb70f8 4215 /* PREFIX_0FC2 */
050dfa73 4216 {
507bd325
L
4217 { "cmpps", { XM, EXx, CMP }, PREFIX_OPCODE },
4218 { "cmpss", { XM, EXd, CMP }, PREFIX_OPCODE },
4219 { "cmppd", { XM, EXx, CMP }, PREFIX_OPCODE },
4220 { "cmpsd", { XM, EXq, CMP }, PREFIX_OPCODE },
050dfa73 4221 },
246c51aa 4222
a8484f96 4223 /* PREFIX_MOD_0_0FC3 */
4ee52178 4224 {
a8484f96 4225 { "movntiS", { Ev, Gv }, PREFIX_OPCODE },
4ee52178
L
4226 },
4227
f24bcbaa 4228 /* PREFIX_MOD_0_0FC7_REG_6 */
92fddf8e 4229 {
bf890a93
IT
4230 { "vmptrld",{ Mq }, 0 },
4231 { "vmxon", { Mq }, 0 },
4232 { "vmclear",{ Mq }, 0 },
92fddf8e
L
4233 },
4234
f24bcbaa
L
4235 /* PREFIX_MOD_3_0FC7_REG_6 */
4236 {
4237 { "rdrand", { Ev }, 0 },
4238 { Bad_Opcode },
4239 { "rdrand", { Ev }, 0 }
4240 },
4241
4242 /* PREFIX_MOD_3_0FC7_REG_7 */
4243 {
4244 { "rdseed", { Ev }, 0 },
8bc52696 4245 { "rdpid", { Em }, 0 },
f24bcbaa
L
4246 { "rdseed", { Ev }, 0 },
4247 },
4248
1ceb70f8 4249 /* PREFIX_0FD0 */
050dfa73 4250 {
592d1631
L
4251 { Bad_Opcode },
4252 { Bad_Opcode },
bf890a93
IT
4253 { "addsubpd", { XM, EXx }, 0 },
4254 { "addsubps", { XM, EXx }, 0 },
246c51aa 4255 },
050dfa73 4256
1ceb70f8 4257 /* PREFIX_0FD6 */
050dfa73 4258 {
592d1631 4259 { Bad_Opcode },
bf890a93
IT
4260 { "movq2dq",{ XM, MS }, 0 },
4261 { "movq", { EXqS, XM }, 0 },
4262 { "movdq2q",{ MX, XS }, 0 },
050dfa73
MM
4263 },
4264
1ceb70f8 4265 /* PREFIX_0FE6 */
7918206c 4266 {
592d1631 4267 { Bad_Opcode },
507bd325
L
4268 { "cvtdq2pd", { XM, EXq }, PREFIX_OPCODE },
4269 { "cvttpd2dq", { XM, EXx }, PREFIX_OPCODE },
4270 { "cvtpd2dq", { XM, EXx }, PREFIX_OPCODE },
7918206c 4271 },
8b38ad71 4272
1ceb70f8 4273 /* PREFIX_0FE7 */
8b38ad71 4274 {
507bd325 4275 { "movntq", { Mq, MX }, PREFIX_OPCODE },
592d1631 4276 { Bad_Opcode },
75c135a8 4277 { MOD_TABLE (MOD_0FE7_PREFIX_2) },
4e7d34a6
L
4278 },
4279
1ceb70f8 4280 /* PREFIX_0FF0 */
4e7d34a6 4281 {
592d1631
L
4282 { Bad_Opcode },
4283 { Bad_Opcode },
4284 { Bad_Opcode },
1ceb70f8 4285 { MOD_TABLE (MOD_0FF0_PREFIX_3) },
4e7d34a6
L
4286 },
4287
1ceb70f8 4288 /* PREFIX_0FF7 */
4e7d34a6 4289 {
507bd325 4290 { "maskmovq", { MX, MS }, PREFIX_OPCODE },
592d1631 4291 { Bad_Opcode },
507bd325 4292 { "maskmovdqu", { XM, XS }, PREFIX_OPCODE },
8b38ad71 4293 },
42903f7f 4294
1ceb70f8 4295 /* PREFIX_0F3810 */
42903f7f 4296 {
592d1631
L
4297 { Bad_Opcode },
4298 { Bad_Opcode },
507bd325 4299 { "pblendvb", { XM, EXx, XMM0 }, PREFIX_OPCODE },
42903f7f
L
4300 },
4301
1ceb70f8 4302 /* PREFIX_0F3814 */
42903f7f 4303 {
592d1631
L
4304 { Bad_Opcode },
4305 { Bad_Opcode },
507bd325 4306 { "blendvps", { XM, EXx, XMM0 }, PREFIX_OPCODE },
42903f7f
L
4307 },
4308
1ceb70f8 4309 /* PREFIX_0F3815 */
42903f7f 4310 {
592d1631
L
4311 { Bad_Opcode },
4312 { Bad_Opcode },
507bd325 4313 { "blendvpd", { XM, EXx, XMM0 }, PREFIX_OPCODE },
42903f7f
L
4314 },
4315
1ceb70f8 4316 /* PREFIX_0F3817 */
42903f7f 4317 {
592d1631
L
4318 { Bad_Opcode },
4319 { Bad_Opcode },
507bd325 4320 { "ptest", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4321 },
4322
1ceb70f8 4323 /* PREFIX_0F3820 */
42903f7f 4324 {
592d1631
L
4325 { Bad_Opcode },
4326 { Bad_Opcode },
507bd325 4327 { "pmovsxbw", { XM, EXq }, PREFIX_OPCODE },
42903f7f
L
4328 },
4329
1ceb70f8 4330 /* PREFIX_0F3821 */
42903f7f 4331 {
592d1631
L
4332 { Bad_Opcode },
4333 { Bad_Opcode },
507bd325 4334 { "pmovsxbd", { XM, EXd }, PREFIX_OPCODE },
42903f7f
L
4335 },
4336
1ceb70f8 4337 /* PREFIX_0F3822 */
42903f7f 4338 {
592d1631
L
4339 { Bad_Opcode },
4340 { Bad_Opcode },
507bd325 4341 { "pmovsxbq", { XM, EXw }, PREFIX_OPCODE },
42903f7f
L
4342 },
4343
1ceb70f8 4344 /* PREFIX_0F3823 */
42903f7f 4345 {
592d1631
L
4346 { Bad_Opcode },
4347 { Bad_Opcode },
507bd325 4348 { "pmovsxwd", { XM, EXq }, PREFIX_OPCODE },
42903f7f
L
4349 },
4350
1ceb70f8 4351 /* PREFIX_0F3824 */
42903f7f 4352 {
592d1631
L
4353 { Bad_Opcode },
4354 { Bad_Opcode },
507bd325 4355 { "pmovsxwq", { XM, EXd }, PREFIX_OPCODE },
42903f7f
L
4356 },
4357
1ceb70f8 4358 /* PREFIX_0F3825 */
42903f7f 4359 {
592d1631
L
4360 { Bad_Opcode },
4361 { Bad_Opcode },
507bd325 4362 { "pmovsxdq", { XM, EXq }, PREFIX_OPCODE },
42903f7f
L
4363 },
4364
1ceb70f8 4365 /* PREFIX_0F3828 */
42903f7f 4366 {
592d1631
L
4367 { Bad_Opcode },
4368 { Bad_Opcode },
507bd325 4369 { "pmuldq", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4370 },
4371
1ceb70f8 4372 /* PREFIX_0F3829 */
42903f7f 4373 {
592d1631
L
4374 { Bad_Opcode },
4375 { Bad_Opcode },
507bd325 4376 { "pcmpeqq", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4377 },
4378
1ceb70f8 4379 /* PREFIX_0F382A */
42903f7f 4380 {
592d1631
L
4381 { Bad_Opcode },
4382 { Bad_Opcode },
75c135a8 4383 { MOD_TABLE (MOD_0F382A_PREFIX_2) },
42903f7f
L
4384 },
4385
1ceb70f8 4386 /* PREFIX_0F382B */
42903f7f 4387 {
592d1631
L
4388 { Bad_Opcode },
4389 { Bad_Opcode },
507bd325 4390 { "packusdw", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4391 },
4392
1ceb70f8 4393 /* PREFIX_0F3830 */
42903f7f 4394 {
592d1631
L
4395 { Bad_Opcode },
4396 { Bad_Opcode },
507bd325 4397 { "pmovzxbw", { XM, EXq }, PREFIX_OPCODE },
42903f7f
L
4398 },
4399
1ceb70f8 4400 /* PREFIX_0F3831 */
42903f7f 4401 {
592d1631
L
4402 { Bad_Opcode },
4403 { Bad_Opcode },
507bd325 4404 { "pmovzxbd", { XM, EXd }, PREFIX_OPCODE },
42903f7f
L
4405 },
4406
1ceb70f8 4407 /* PREFIX_0F3832 */
42903f7f 4408 {
592d1631
L
4409 { Bad_Opcode },
4410 { Bad_Opcode },
507bd325 4411 { "pmovzxbq", { XM, EXw }, PREFIX_OPCODE },
42903f7f
L
4412 },
4413
1ceb70f8 4414 /* PREFIX_0F3833 */
42903f7f 4415 {
592d1631
L
4416 { Bad_Opcode },
4417 { Bad_Opcode },
507bd325 4418 { "pmovzxwd", { XM, EXq }, PREFIX_OPCODE },
42903f7f
L
4419 },
4420
1ceb70f8 4421 /* PREFIX_0F3834 */
42903f7f 4422 {
592d1631
L
4423 { Bad_Opcode },
4424 { Bad_Opcode },
507bd325 4425 { "pmovzxwq", { XM, EXd }, PREFIX_OPCODE },
42903f7f
L
4426 },
4427
1ceb70f8 4428 /* PREFIX_0F3835 */
42903f7f 4429 {
592d1631
L
4430 { Bad_Opcode },
4431 { Bad_Opcode },
507bd325 4432 { "pmovzxdq", { XM, EXq }, PREFIX_OPCODE },
42903f7f
L
4433 },
4434
1ceb70f8 4435 /* PREFIX_0F3837 */
4e7d34a6 4436 {
592d1631
L
4437 { Bad_Opcode },
4438 { Bad_Opcode },
507bd325 4439 { "pcmpgtq", { XM, EXx }, PREFIX_OPCODE },
4e7d34a6
L
4440 },
4441
1ceb70f8 4442 /* PREFIX_0F3838 */
42903f7f 4443 {
592d1631
L
4444 { Bad_Opcode },
4445 { Bad_Opcode },
507bd325 4446 { "pminsb", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4447 },
4448
1ceb70f8 4449 /* PREFIX_0F3839 */
42903f7f 4450 {
592d1631
L
4451 { Bad_Opcode },
4452 { Bad_Opcode },
507bd325 4453 { "pminsd", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4454 },
4455
1ceb70f8 4456 /* PREFIX_0F383A */
42903f7f 4457 {
592d1631
L
4458 { Bad_Opcode },
4459 { Bad_Opcode },
507bd325 4460 { "pminuw", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4461 },
4462
1ceb70f8 4463 /* PREFIX_0F383B */
42903f7f 4464 {
592d1631
L
4465 { Bad_Opcode },
4466 { Bad_Opcode },
507bd325 4467 { "pminud", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4468 },
4469
1ceb70f8 4470 /* PREFIX_0F383C */
42903f7f 4471 {
592d1631
L
4472 { Bad_Opcode },
4473 { Bad_Opcode },
507bd325 4474 { "pmaxsb", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4475 },
4476
1ceb70f8 4477 /* PREFIX_0F383D */
42903f7f 4478 {
592d1631
L
4479 { Bad_Opcode },
4480 { Bad_Opcode },
507bd325 4481 { "pmaxsd", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4482 },
4483
1ceb70f8 4484 /* PREFIX_0F383E */
42903f7f 4485 {
592d1631
L
4486 { Bad_Opcode },
4487 { Bad_Opcode },
507bd325 4488 { "pmaxuw", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4489 },
4490
1ceb70f8 4491 /* PREFIX_0F383F */
42903f7f 4492 {
592d1631
L
4493 { Bad_Opcode },
4494 { Bad_Opcode },
507bd325 4495 { "pmaxud", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4496 },
4497
1ceb70f8 4498 /* PREFIX_0F3840 */
42903f7f 4499 {
592d1631
L
4500 { Bad_Opcode },
4501 { Bad_Opcode },
507bd325 4502 { "pmulld", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4503 },
4504
1ceb70f8 4505 /* PREFIX_0F3841 */
42903f7f 4506 {
592d1631
L
4507 { Bad_Opcode },
4508 { Bad_Opcode },
507bd325 4509 { "phminposuw", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4510 },
4511
f1f8f695
L
4512 /* PREFIX_0F3880 */
4513 {
592d1631
L
4514 { Bad_Opcode },
4515 { Bad_Opcode },
507bd325 4516 { "invept", { Gm, Mo }, PREFIX_OPCODE },
f1f8f695
L
4517 },
4518
4519 /* PREFIX_0F3881 */
4520 {
592d1631
L
4521 { Bad_Opcode },
4522 { Bad_Opcode },
507bd325 4523 { "invvpid", { Gm, Mo }, PREFIX_OPCODE },
f1f8f695
L
4524 },
4525
6c30d220
L
4526 /* PREFIX_0F3882 */
4527 {
4528 { Bad_Opcode },
4529 { Bad_Opcode },
507bd325 4530 { "invpcid", { Gm, M }, PREFIX_OPCODE },
6c30d220
L
4531 },
4532
a0046408
L
4533 /* PREFIX_0F38C8 */
4534 {
507bd325 4535 { "sha1nexte", { XM, EXxmm }, PREFIX_OPCODE },
a0046408
L
4536 },
4537
4538 /* PREFIX_0F38C9 */
4539 {
507bd325 4540 { "sha1msg1", { XM, EXxmm }, PREFIX_OPCODE },
a0046408
L
4541 },
4542
4543 /* PREFIX_0F38CA */
4544 {
507bd325 4545 { "sha1msg2", { XM, EXxmm }, PREFIX_OPCODE },
a0046408
L
4546 },
4547
4548 /* PREFIX_0F38CB */
4549 {
507bd325 4550 { "sha256rnds2", { XM, EXxmm, XMM0 }, PREFIX_OPCODE },
a0046408
L
4551 },
4552
4553 /* PREFIX_0F38CC */
4554 {
507bd325 4555 { "sha256msg1", { XM, EXxmm }, PREFIX_OPCODE },
a0046408
L
4556 },
4557
4558 /* PREFIX_0F38CD */
4559 {
507bd325 4560 { "sha256msg2", { XM, EXxmm }, PREFIX_OPCODE },
a0046408
L
4561 },
4562
48521003
IT
4563 /* PREFIX_0F38CF */
4564 {
4565 { Bad_Opcode },
4566 { Bad_Opcode },
4567 { "gf2p8mulb", { XM, EXxmm }, PREFIX_OPCODE },
4568 },
4569
c0f3af97
L
4570 /* PREFIX_0F38DB */
4571 {
592d1631
L
4572 { Bad_Opcode },
4573 { Bad_Opcode },
507bd325 4574 { "aesimc", { XM, EXx }, PREFIX_OPCODE },
c0f3af97
L
4575 },
4576
4577 /* PREFIX_0F38DC */
4578 {
592d1631
L
4579 { Bad_Opcode },
4580 { Bad_Opcode },
507bd325 4581 { "aesenc", { XM, EXx }, PREFIX_OPCODE },
c0f3af97
L
4582 },
4583
4584 /* PREFIX_0F38DD */
4585 {
592d1631
L
4586 { Bad_Opcode },
4587 { Bad_Opcode },
507bd325 4588 { "aesenclast", { XM, EXx }, PREFIX_OPCODE },
c0f3af97
L
4589 },
4590
4591 /* PREFIX_0F38DE */
4592 {
592d1631
L
4593 { Bad_Opcode },
4594 { Bad_Opcode },
507bd325 4595 { "aesdec", { XM, EXx }, PREFIX_OPCODE },
c0f3af97
L
4596 },
4597
4598 /* PREFIX_0F38DF */
4599 {
592d1631
L
4600 { Bad_Opcode },
4601 { Bad_Opcode },
507bd325 4602 { "aesdeclast", { XM, EXx }, PREFIX_OPCODE },
c0f3af97
L
4603 },
4604
1ceb70f8 4605 /* PREFIX_0F38F0 */
4e7d34a6 4606 {
507bd325 4607 { "movbeS", { Gv, { MOVBE_Fixup, v_mode } }, PREFIX_OPCODE },
592d1631 4608 { Bad_Opcode },
507bd325
L
4609 { "movbeS", { Gv, { MOVBE_Fixup, v_mode } }, PREFIX_OPCODE },
4610 { "crc32", { Gdq, { CRC32_Fixup, b_mode } }, PREFIX_OPCODE },
4e7d34a6
L
4611 },
4612
1ceb70f8 4613 /* PREFIX_0F38F1 */
4e7d34a6 4614 {
507bd325 4615 { "movbeS", { { MOVBE_Fixup, v_mode }, Gv }, PREFIX_OPCODE },
592d1631 4616 { Bad_Opcode },
507bd325
L
4617 { "movbeS", { { MOVBE_Fixup, v_mode }, Gv }, PREFIX_OPCODE },
4618 { "crc32", { Gdq, { CRC32_Fixup, v_mode } }, PREFIX_OPCODE },
4e7d34a6
L
4619 },
4620
603555e5 4621 /* PREFIX_0F38F5 */
e2e1fcde
L
4622 {
4623 { Bad_Opcode },
603555e5
L
4624 { Bad_Opcode },
4625 { MOD_TABLE (MOD_0F38F5_PREFIX_2) },
4626 },
4627
4628 /* PREFIX_0F38F6 */
4629 {
4630 { MOD_TABLE (MOD_0F38F6_PREFIX_0) },
507bd325
L
4631 { "adoxS", { Gdq, Edq}, PREFIX_OPCODE },
4632 { "adcxS", { Gdq, Edq}, PREFIX_OPCODE },
e2e1fcde
L
4633 { Bad_Opcode },
4634 },
4635
1ceb70f8 4636 /* PREFIX_0F3A08 */
42903f7f 4637 {
592d1631
L
4638 { Bad_Opcode },
4639 { Bad_Opcode },
507bd325 4640 { "roundps", { XM, EXx, Ib }, PREFIX_OPCODE },
42903f7f
L
4641 },
4642
1ceb70f8 4643 /* PREFIX_0F3A09 */
42903f7f 4644 {
592d1631
L
4645 { Bad_Opcode },
4646 { Bad_Opcode },
507bd325 4647 { "roundpd", { XM, EXx, Ib }, PREFIX_OPCODE },
42903f7f
L
4648 },
4649
1ceb70f8 4650 /* PREFIX_0F3A0A */
42903f7f 4651 {
592d1631
L
4652 { Bad_Opcode },
4653 { Bad_Opcode },
507bd325 4654 { "roundss", { XM, EXd, Ib }, PREFIX_OPCODE },
42903f7f
L
4655 },
4656
1ceb70f8 4657 /* PREFIX_0F3A0B */
42903f7f 4658 {
592d1631
L
4659 { Bad_Opcode },
4660 { Bad_Opcode },
507bd325 4661 { "roundsd", { XM, EXq, Ib }, PREFIX_OPCODE },
42903f7f
L
4662 },
4663
1ceb70f8 4664 /* PREFIX_0F3A0C */
42903f7f 4665 {
592d1631
L
4666 { Bad_Opcode },
4667 { Bad_Opcode },
507bd325 4668 { "blendps", { XM, EXx, Ib }, PREFIX_OPCODE },
42903f7f
L
4669 },
4670
1ceb70f8 4671 /* PREFIX_0F3A0D */
42903f7f 4672 {
592d1631
L
4673 { Bad_Opcode },
4674 { Bad_Opcode },
507bd325 4675 { "blendpd", { XM, EXx, Ib }, PREFIX_OPCODE },
42903f7f
L
4676 },
4677
1ceb70f8 4678 /* PREFIX_0F3A0E */
42903f7f 4679 {
592d1631
L
4680 { Bad_Opcode },
4681 { Bad_Opcode },
507bd325 4682 { "pblendw", { XM, EXx, Ib }, PREFIX_OPCODE },
42903f7f
L
4683 },
4684
1ceb70f8 4685 /* PREFIX_0F3A14 */
42903f7f 4686 {
592d1631
L
4687 { Bad_Opcode },
4688 { Bad_Opcode },
507bd325 4689 { "pextrb", { Edqb, XM, Ib }, PREFIX_OPCODE },
42903f7f
L
4690 },
4691
1ceb70f8 4692 /* PREFIX_0F3A15 */
42903f7f 4693 {
592d1631
L
4694 { Bad_Opcode },
4695 { Bad_Opcode },
507bd325 4696 { "pextrw", { Edqw, XM, Ib }, PREFIX_OPCODE },
42903f7f
L
4697 },
4698
1ceb70f8 4699 /* PREFIX_0F3A16 */
42903f7f 4700 {
592d1631
L
4701 { Bad_Opcode },
4702 { Bad_Opcode },
507bd325 4703 { "pextrK", { Edq, XM, Ib }, PREFIX_OPCODE },
42903f7f
L
4704 },
4705
1ceb70f8 4706 /* PREFIX_0F3A17 */
42903f7f 4707 {
592d1631
L
4708 { Bad_Opcode },
4709 { Bad_Opcode },
507bd325 4710 { "extractps", { Edqd, XM, Ib }, PREFIX_OPCODE },
42903f7f
L
4711 },
4712
1ceb70f8 4713 /* PREFIX_0F3A20 */
42903f7f 4714 {
592d1631
L
4715 { Bad_Opcode },
4716 { Bad_Opcode },
507bd325 4717 { "pinsrb", { XM, Edqb, Ib }, PREFIX_OPCODE },
42903f7f
L
4718 },
4719
1ceb70f8 4720 /* PREFIX_0F3A21 */
42903f7f 4721 {
592d1631
L
4722 { Bad_Opcode },
4723 { Bad_Opcode },
507bd325 4724 { "insertps", { XM, EXd, Ib }, PREFIX_OPCODE },
42903f7f
L
4725 },
4726
1ceb70f8 4727 /* PREFIX_0F3A22 */
42903f7f 4728 {
592d1631
L
4729 { Bad_Opcode },
4730 { Bad_Opcode },
507bd325 4731 { "pinsrK", { XM, Edq, Ib }, PREFIX_OPCODE },
42903f7f
L
4732 },
4733
1ceb70f8 4734 /* PREFIX_0F3A40 */
42903f7f 4735 {
592d1631
L
4736 { Bad_Opcode },
4737 { Bad_Opcode },
507bd325 4738 { "dpps", { XM, EXx, Ib }, PREFIX_OPCODE },
42903f7f
L
4739 },
4740
1ceb70f8 4741 /* PREFIX_0F3A41 */
42903f7f 4742 {
592d1631
L
4743 { Bad_Opcode },
4744 { Bad_Opcode },
507bd325 4745 { "dppd", { XM, EXx, Ib }, PREFIX_OPCODE },
42903f7f
L
4746 },
4747
1ceb70f8 4748 /* PREFIX_0F3A42 */
42903f7f 4749 {
592d1631
L
4750 { Bad_Opcode },
4751 { Bad_Opcode },
507bd325 4752 { "mpsadbw", { XM, EXx, Ib }, PREFIX_OPCODE },
42903f7f 4753 },
381d071f 4754
c0f3af97
L
4755 /* PREFIX_0F3A44 */
4756 {
592d1631
L
4757 { Bad_Opcode },
4758 { Bad_Opcode },
507bd325 4759 { "pclmulqdq", { XM, EXx, PCLMUL }, PREFIX_OPCODE },
c0f3af97
L
4760 },
4761
1ceb70f8 4762 /* PREFIX_0F3A60 */
381d071f 4763 {
592d1631
L
4764 { Bad_Opcode },
4765 { Bad_Opcode },
15c7c1d8 4766 { "pcmpestrm", { XM, { PCMPESTR_Fixup, x_mode }, Ib }, PREFIX_OPCODE },
381d071f
L
4767 },
4768
1ceb70f8 4769 /* PREFIX_0F3A61 */
381d071f 4770 {
592d1631
L
4771 { Bad_Opcode },
4772 { Bad_Opcode },
15c7c1d8 4773 { "pcmpestri", { XM, { PCMPESTR_Fixup, x_mode }, Ib }, PREFIX_OPCODE },
381d071f
L
4774 },
4775
1ceb70f8 4776 /* PREFIX_0F3A62 */
381d071f 4777 {
592d1631
L
4778 { Bad_Opcode },
4779 { Bad_Opcode },
507bd325 4780 { "pcmpistrm", { XM, EXx, Ib }, PREFIX_OPCODE },
381d071f
L
4781 },
4782
1ceb70f8 4783 /* PREFIX_0F3A63 */
381d071f 4784 {
592d1631
L
4785 { Bad_Opcode },
4786 { Bad_Opcode },
507bd325 4787 { "pcmpistri", { XM, EXx, Ib }, PREFIX_OPCODE },
381d071f 4788 },
09a2c6cf 4789
a0046408
L
4790 /* PREFIX_0F3ACC */
4791 {
507bd325 4792 { "sha1rnds4", { XM, EXxmm, Ib }, PREFIX_OPCODE },
a0046408
L
4793 },
4794
48521003
IT
4795 /* PREFIX_0F3ACE */
4796 {
4797 { Bad_Opcode },
4798 { Bad_Opcode },
4799 { "gf2p8affineqb", { XM, EXxmm, Ib }, PREFIX_OPCODE },
4800 },
4801
4802 /* PREFIX_0F3ACF */
4803 {
4804 { Bad_Opcode },
4805 { Bad_Opcode },
4806 { "gf2p8affineinvqb", { XM, EXxmm, Ib }, PREFIX_OPCODE },
4807 },
4808
c0f3af97 4809 /* PREFIX_0F3ADF */
09a2c6cf 4810 {
592d1631
L
4811 { Bad_Opcode },
4812 { Bad_Opcode },
507bd325 4813 { "aeskeygenassist", { XM, EXx, Ib }, PREFIX_OPCODE },
09a2c6cf
L
4814 },
4815
592a252b 4816 /* PREFIX_VEX_0F10 */
09a2c6cf 4817 {
592a252b
L
4818 { VEX_W_TABLE (VEX_W_0F10_P_0) },
4819 { VEX_LEN_TABLE (VEX_LEN_0F10_P_1) },
4820 { VEX_W_TABLE (VEX_W_0F10_P_2) },
4821 { VEX_LEN_TABLE (VEX_LEN_0F10_P_3) },
09a2c6cf
L
4822 },
4823
592a252b 4824 /* PREFIX_VEX_0F11 */
09a2c6cf 4825 {
592a252b
L
4826 { VEX_W_TABLE (VEX_W_0F11_P_0) },
4827 { VEX_LEN_TABLE (VEX_LEN_0F11_P_1) },
4828 { VEX_W_TABLE (VEX_W_0F11_P_2) },
4829 { VEX_LEN_TABLE (VEX_LEN_0F11_P_3) },
09a2c6cf
L
4830 },
4831
592a252b 4832 /* PREFIX_VEX_0F12 */
09a2c6cf 4833 {
592a252b
L
4834 { MOD_TABLE (MOD_VEX_0F12_PREFIX_0) },
4835 { VEX_W_TABLE (VEX_W_0F12_P_1) },
4836 { VEX_LEN_TABLE (VEX_LEN_0F12_P_2) },
4837 { VEX_W_TABLE (VEX_W_0F12_P_3) },
09a2c6cf
L
4838 },
4839
592a252b 4840 /* PREFIX_VEX_0F16 */
09a2c6cf 4841 {
592a252b
L
4842 { MOD_TABLE (MOD_VEX_0F16_PREFIX_0) },
4843 { VEX_W_TABLE (VEX_W_0F16_P_1) },
4844 { VEX_LEN_TABLE (VEX_LEN_0F16_P_2) },
5f754f58 4845 },
7c52e0e8 4846
592a252b 4847 /* PREFIX_VEX_0F2A */
5f754f58 4848 {
592d1631 4849 { Bad_Opcode },
592a252b 4850 { VEX_LEN_TABLE (VEX_LEN_0F2A_P_1) },
592d1631 4851 { Bad_Opcode },
592a252b 4852 { VEX_LEN_TABLE (VEX_LEN_0F2A_P_3) },
5f754f58 4853 },
7c52e0e8 4854
592a252b 4855 /* PREFIX_VEX_0F2C */
5f754f58 4856 {
592d1631 4857 { Bad_Opcode },
592a252b 4858 { VEX_LEN_TABLE (VEX_LEN_0F2C_P_1) },
592d1631 4859 { Bad_Opcode },
592a252b 4860 { VEX_LEN_TABLE (VEX_LEN_0F2C_P_3) },
5f754f58 4861 },
7c52e0e8 4862
592a252b 4863 /* PREFIX_VEX_0F2D */
7c52e0e8 4864 {
592d1631 4865 { Bad_Opcode },
592a252b 4866 { VEX_LEN_TABLE (VEX_LEN_0F2D_P_1) },
592d1631 4867 { Bad_Opcode },
592a252b 4868 { VEX_LEN_TABLE (VEX_LEN_0F2D_P_3) },
7c52e0e8
L
4869 },
4870
592a252b 4871 /* PREFIX_VEX_0F2E */
7c52e0e8 4872 {
592a252b 4873 { VEX_LEN_TABLE (VEX_LEN_0F2E_P_0) },
592d1631 4874 { Bad_Opcode },
592a252b 4875 { VEX_LEN_TABLE (VEX_LEN_0F2E_P_2) },
7c52e0e8
L
4876 },
4877
592a252b 4878 /* PREFIX_VEX_0F2F */
7c52e0e8 4879 {
592a252b 4880 { VEX_LEN_TABLE (VEX_LEN_0F2F_P_0) },
592d1631 4881 { Bad_Opcode },
592a252b 4882 { VEX_LEN_TABLE (VEX_LEN_0F2F_P_2) },
7c52e0e8
L
4883 },
4884
43234a1e
L
4885 /* PREFIX_VEX_0F41 */
4886 {
4887 { VEX_LEN_TABLE (VEX_LEN_0F41_P_0) },
1ba585e8
IT
4888 { Bad_Opcode },
4889 { VEX_LEN_TABLE (VEX_LEN_0F41_P_2) },
43234a1e
L
4890 },
4891
4892 /* PREFIX_VEX_0F42 */
4893 {
4894 { VEX_LEN_TABLE (VEX_LEN_0F42_P_0) },
1ba585e8
IT
4895 { Bad_Opcode },
4896 { VEX_LEN_TABLE (VEX_LEN_0F42_P_2) },
43234a1e
L
4897 },
4898
4899 /* PREFIX_VEX_0F44 */
4900 {
4901 { VEX_LEN_TABLE (VEX_LEN_0F44_P_0) },
1ba585e8
IT
4902 { Bad_Opcode },
4903 { VEX_LEN_TABLE (VEX_LEN_0F44_P_2) },
43234a1e
L
4904 },
4905
4906 /* PREFIX_VEX_0F45 */
4907 {
4908 { VEX_LEN_TABLE (VEX_LEN_0F45_P_0) },
1ba585e8
IT
4909 { Bad_Opcode },
4910 { VEX_LEN_TABLE (VEX_LEN_0F45_P_2) },
43234a1e
L
4911 },
4912
4913 /* PREFIX_VEX_0F46 */
4914 {
4915 { VEX_LEN_TABLE (VEX_LEN_0F46_P_0) },
1ba585e8
IT
4916 { Bad_Opcode },
4917 { VEX_LEN_TABLE (VEX_LEN_0F46_P_2) },
43234a1e
L
4918 },
4919
4920 /* PREFIX_VEX_0F47 */
4921 {
4922 { VEX_LEN_TABLE (VEX_LEN_0F47_P_0) },
1ba585e8
IT
4923 { Bad_Opcode },
4924 { VEX_LEN_TABLE (VEX_LEN_0F47_P_2) },
43234a1e
L
4925 },
4926
1ba585e8 4927 /* PREFIX_VEX_0F4A */
43234a1e 4928 {
1ba585e8 4929 { VEX_LEN_TABLE (VEX_LEN_0F4A_P_0) },
43234a1e 4930 { Bad_Opcode },
1ba585e8
IT
4931 { VEX_LEN_TABLE (VEX_LEN_0F4A_P_2) },
4932 },
4933
4934 /* PREFIX_VEX_0F4B */
4935 {
4936 { VEX_LEN_TABLE (VEX_LEN_0F4B_P_0) },
43234a1e
L
4937 { Bad_Opcode },
4938 { VEX_LEN_TABLE (VEX_LEN_0F4B_P_2) },
4939 },
4940
592a252b 4941 /* PREFIX_VEX_0F51 */
7c52e0e8 4942 {
592a252b
L
4943 { VEX_W_TABLE (VEX_W_0F51_P_0) },
4944 { VEX_LEN_TABLE (VEX_LEN_0F51_P_1) },
4945 { VEX_W_TABLE (VEX_W_0F51_P_2) },
4946 { VEX_LEN_TABLE (VEX_LEN_0F51_P_3) },
7c52e0e8
L
4947 },
4948
592a252b 4949 /* PREFIX_VEX_0F52 */
7c52e0e8 4950 {
592a252b
L
4951 { VEX_W_TABLE (VEX_W_0F52_P_0) },
4952 { VEX_LEN_TABLE (VEX_LEN_0F52_P_1) },
7c52e0e8
L
4953 },
4954
592a252b 4955 /* PREFIX_VEX_0F53 */
7c52e0e8 4956 {
592a252b
L
4957 { VEX_W_TABLE (VEX_W_0F53_P_0) },
4958 { VEX_LEN_TABLE (VEX_LEN_0F53_P_1) },
7c52e0e8
L
4959 },
4960
592a252b 4961 /* PREFIX_VEX_0F58 */
7c52e0e8 4962 {
592a252b
L
4963 { VEX_W_TABLE (VEX_W_0F58_P_0) },
4964 { VEX_LEN_TABLE (VEX_LEN_0F58_P_1) },
4965 { VEX_W_TABLE (VEX_W_0F58_P_2) },
4966 { VEX_LEN_TABLE (VEX_LEN_0F58_P_3) },
7c52e0e8
L
4967 },
4968
592a252b 4969 /* PREFIX_VEX_0F59 */
7c52e0e8 4970 {
592a252b
L
4971 { VEX_W_TABLE (VEX_W_0F59_P_0) },
4972 { VEX_LEN_TABLE (VEX_LEN_0F59_P_1) },
4973 { VEX_W_TABLE (VEX_W_0F59_P_2) },
4974 { VEX_LEN_TABLE (VEX_LEN_0F59_P_3) },
7c52e0e8
L
4975 },
4976
592a252b 4977 /* PREFIX_VEX_0F5A */
7c52e0e8 4978 {
592a252b
L
4979 { VEX_W_TABLE (VEX_W_0F5A_P_0) },
4980 { VEX_LEN_TABLE (VEX_LEN_0F5A_P_1) },
bf890a93 4981 { "vcvtpd2ps%XY", { XMM, EXx }, 0 },
592a252b 4982 { VEX_LEN_TABLE (VEX_LEN_0F5A_P_3) },
7c52e0e8
L
4983 },
4984
592a252b 4985 /* PREFIX_VEX_0F5B */
7c52e0e8 4986 {
592a252b
L
4987 { VEX_W_TABLE (VEX_W_0F5B_P_0) },
4988 { VEX_W_TABLE (VEX_W_0F5B_P_1) },
4989 { VEX_W_TABLE (VEX_W_0F5B_P_2) },
7c52e0e8
L
4990 },
4991
592a252b 4992 /* PREFIX_VEX_0F5C */
7c52e0e8 4993 {
592a252b
L
4994 { VEX_W_TABLE (VEX_W_0F5C_P_0) },
4995 { VEX_LEN_TABLE (VEX_LEN_0F5C_P_1) },
4996 { VEX_W_TABLE (VEX_W_0F5C_P_2) },
4997 { VEX_LEN_TABLE (VEX_LEN_0F5C_P_3) },
7c52e0e8
L
4998 },
4999
592a252b 5000 /* PREFIX_VEX_0F5D */
7c52e0e8 5001 {
592a252b
L
5002 { VEX_W_TABLE (VEX_W_0F5D_P_0) },
5003 { VEX_LEN_TABLE (VEX_LEN_0F5D_P_1) },
5004 { VEX_W_TABLE (VEX_W_0F5D_P_2) },
5005 { VEX_LEN_TABLE (VEX_LEN_0F5D_P_3) },
7c52e0e8
L
5006 },
5007
592a252b 5008 /* PREFIX_VEX_0F5E */
7c52e0e8 5009 {
592a252b
L
5010 { VEX_W_TABLE (VEX_W_0F5E_P_0) },
5011 { VEX_LEN_TABLE (VEX_LEN_0F5E_P_1) },
5012 { VEX_W_TABLE (VEX_W_0F5E_P_2) },
5013 { VEX_LEN_TABLE (VEX_LEN_0F5E_P_3) },
7c52e0e8
L
5014 },
5015
592a252b 5016 /* PREFIX_VEX_0F5F */
7c52e0e8 5017 {
592a252b
L
5018 { VEX_W_TABLE (VEX_W_0F5F_P_0) },
5019 { VEX_LEN_TABLE (VEX_LEN_0F5F_P_1) },
5020 { VEX_W_TABLE (VEX_W_0F5F_P_2) },
5021 { VEX_LEN_TABLE (VEX_LEN_0F5F_P_3) },
7c52e0e8
L
5022 },
5023
592a252b 5024 /* PREFIX_VEX_0F60 */
7c52e0e8 5025 {
592d1631
L
5026 { Bad_Opcode },
5027 { Bad_Opcode },
6c30d220 5028 { VEX_W_TABLE (VEX_W_0F60_P_2) },
7c52e0e8
L
5029 },
5030
592a252b 5031 /* PREFIX_VEX_0F61 */
7c52e0e8 5032 {
592d1631
L
5033 { Bad_Opcode },
5034 { Bad_Opcode },
6c30d220 5035 { VEX_W_TABLE (VEX_W_0F61_P_2) },
7c52e0e8
L
5036 },
5037
592a252b 5038 /* PREFIX_VEX_0F62 */
7c52e0e8 5039 {
592d1631
L
5040 { Bad_Opcode },
5041 { Bad_Opcode },
6c30d220 5042 { VEX_W_TABLE (VEX_W_0F62_P_2) },
7c52e0e8
L
5043 },
5044
592a252b 5045 /* PREFIX_VEX_0F63 */
7c52e0e8 5046 {
592d1631
L
5047 { Bad_Opcode },
5048 { Bad_Opcode },
6c30d220 5049 { VEX_W_TABLE (VEX_W_0F63_P_2) },
7c52e0e8
L
5050 },
5051
592a252b 5052 /* PREFIX_VEX_0F64 */
7c52e0e8 5053 {
592d1631
L
5054 { Bad_Opcode },
5055 { Bad_Opcode },
6c30d220 5056 { VEX_W_TABLE (VEX_W_0F64_P_2) },
7c52e0e8
L
5057 },
5058
592a252b 5059 /* PREFIX_VEX_0F65 */
7c52e0e8 5060 {
592d1631
L
5061 { Bad_Opcode },
5062 { Bad_Opcode },
6c30d220 5063 { VEX_W_TABLE (VEX_W_0F65_P_2) },
7c52e0e8
L
5064 },
5065
592a252b 5066 /* PREFIX_VEX_0F66 */
7c52e0e8 5067 {
592d1631
L
5068 { Bad_Opcode },
5069 { Bad_Opcode },
6c30d220 5070 { VEX_W_TABLE (VEX_W_0F66_P_2) },
7c52e0e8 5071 },
6439fc28 5072
592a252b 5073 /* PREFIX_VEX_0F67 */
331d2d0d 5074 {
592d1631
L
5075 { Bad_Opcode },
5076 { Bad_Opcode },
6c30d220 5077 { VEX_W_TABLE (VEX_W_0F67_P_2) },
c0f3af97
L
5078 },
5079
592a252b 5080 /* PREFIX_VEX_0F68 */
c0f3af97 5081 {
592d1631
L
5082 { Bad_Opcode },
5083 { Bad_Opcode },
6c30d220 5084 { VEX_W_TABLE (VEX_W_0F68_P_2) },
c0f3af97
L
5085 },
5086
592a252b 5087 /* PREFIX_VEX_0F69 */
c0f3af97 5088 {
592d1631
L
5089 { Bad_Opcode },
5090 { Bad_Opcode },
6c30d220 5091 { VEX_W_TABLE (VEX_W_0F69_P_2) },
c0f3af97
L
5092 },
5093
592a252b 5094 /* PREFIX_VEX_0F6A */
c0f3af97 5095 {
592d1631
L
5096 { Bad_Opcode },
5097 { Bad_Opcode },
6c30d220 5098 { VEX_W_TABLE (VEX_W_0F6A_P_2) },
c0f3af97
L
5099 },
5100
592a252b 5101 /* PREFIX_VEX_0F6B */
c0f3af97 5102 {
592d1631
L
5103 { Bad_Opcode },
5104 { Bad_Opcode },
6c30d220 5105 { VEX_W_TABLE (VEX_W_0F6B_P_2) },
c0f3af97
L
5106 },
5107
592a252b 5108 /* PREFIX_VEX_0F6C */
c0f3af97 5109 {
592d1631
L
5110 { Bad_Opcode },
5111 { Bad_Opcode },
6c30d220 5112 { VEX_W_TABLE (VEX_W_0F6C_P_2) },
c0f3af97
L
5113 },
5114
592a252b 5115 /* PREFIX_VEX_0F6D */
c0f3af97 5116 {
592d1631
L
5117 { Bad_Opcode },
5118 { Bad_Opcode },
6c30d220 5119 { VEX_W_TABLE (VEX_W_0F6D_P_2) },
c0f3af97
L
5120 },
5121
592a252b 5122 /* PREFIX_VEX_0F6E */
c0f3af97 5123 {
592d1631
L
5124 { Bad_Opcode },
5125 { Bad_Opcode },
592a252b 5126 { VEX_LEN_TABLE (VEX_LEN_0F6E_P_2) },
c0f3af97
L
5127 },
5128
592a252b 5129 /* PREFIX_VEX_0F6F */
c0f3af97 5130 {
592d1631 5131 { Bad_Opcode },
592a252b
L
5132 { VEX_W_TABLE (VEX_W_0F6F_P_1) },
5133 { VEX_W_TABLE (VEX_W_0F6F_P_2) },
c0f3af97
L
5134 },
5135
592a252b 5136 /* PREFIX_VEX_0F70 */
c0f3af97 5137 {
592d1631 5138 { Bad_Opcode },
6c30d220
L
5139 { VEX_W_TABLE (VEX_W_0F70_P_1) },
5140 { VEX_W_TABLE (VEX_W_0F70_P_2) },
5141 { VEX_W_TABLE (VEX_W_0F70_P_3) },
c0f3af97
L
5142 },
5143
592a252b 5144 /* PREFIX_VEX_0F71_REG_2 */
c0f3af97 5145 {
592d1631
L
5146 { Bad_Opcode },
5147 { Bad_Opcode },
6c30d220 5148 { VEX_W_TABLE (VEX_W_0F71_R_2_P_2) },
c0f3af97
L
5149 },
5150
592a252b 5151 /* PREFIX_VEX_0F71_REG_4 */
c0f3af97 5152 {
592d1631
L
5153 { Bad_Opcode },
5154 { Bad_Opcode },
6c30d220 5155 { VEX_W_TABLE (VEX_W_0F71_R_4_P_2) },
c0f3af97
L
5156 },
5157
592a252b 5158 /* PREFIX_VEX_0F71_REG_6 */
c0f3af97 5159 {
592d1631
L
5160 { Bad_Opcode },
5161 { Bad_Opcode },
6c30d220 5162 { VEX_W_TABLE (VEX_W_0F71_R_6_P_2) },
c0f3af97
L
5163 },
5164
592a252b 5165 /* PREFIX_VEX_0F72_REG_2 */
c0f3af97 5166 {
592d1631
L
5167 { Bad_Opcode },
5168 { Bad_Opcode },
6c30d220 5169 { VEX_W_TABLE (VEX_W_0F72_R_2_P_2) },
c0f3af97
L
5170 },
5171
592a252b 5172 /* PREFIX_VEX_0F72_REG_4 */
c0f3af97 5173 {
592d1631
L
5174 { Bad_Opcode },
5175 { Bad_Opcode },
6c30d220 5176 { VEX_W_TABLE (VEX_W_0F72_R_4_P_2) },
c0f3af97
L
5177 },
5178
592a252b 5179 /* PREFIX_VEX_0F72_REG_6 */
c0f3af97 5180 {
592d1631
L
5181 { Bad_Opcode },
5182 { Bad_Opcode },
6c30d220 5183 { VEX_W_TABLE (VEX_W_0F72_R_6_P_2) },
c0f3af97
L
5184 },
5185
592a252b 5186 /* PREFIX_VEX_0F73_REG_2 */
c0f3af97 5187 {
592d1631
L
5188 { Bad_Opcode },
5189 { Bad_Opcode },
6c30d220 5190 { VEX_W_TABLE (VEX_W_0F73_R_2_P_2) },
c0f3af97
L
5191 },
5192
592a252b 5193 /* PREFIX_VEX_0F73_REG_3 */
c0f3af97 5194 {
592d1631
L
5195 { Bad_Opcode },
5196 { Bad_Opcode },
6c30d220 5197 { VEX_W_TABLE (VEX_W_0F73_R_3_P_2) },
c0f3af97
L
5198 },
5199
592a252b 5200 /* PREFIX_VEX_0F73_REG_6 */
c0f3af97 5201 {
592d1631
L
5202 { Bad_Opcode },
5203 { Bad_Opcode },
6c30d220 5204 { VEX_W_TABLE (VEX_W_0F73_R_6_P_2) },
c0f3af97
L
5205 },
5206
592a252b 5207 /* PREFIX_VEX_0F73_REG_7 */
c0f3af97 5208 {
592d1631
L
5209 { Bad_Opcode },
5210 { Bad_Opcode },
6c30d220 5211 { VEX_W_TABLE (VEX_W_0F73_R_7_P_2) },
c0f3af97
L
5212 },
5213
592a252b 5214 /* PREFIX_VEX_0F74 */
c0f3af97 5215 {
592d1631
L
5216 { Bad_Opcode },
5217 { Bad_Opcode },
6c30d220 5218 { VEX_W_TABLE (VEX_W_0F74_P_2) },
c0f3af97
L
5219 },
5220
592a252b 5221 /* PREFIX_VEX_0F75 */
c0f3af97 5222 {
592d1631
L
5223 { Bad_Opcode },
5224 { Bad_Opcode },
6c30d220 5225 { VEX_W_TABLE (VEX_W_0F75_P_2) },
c0f3af97
L
5226 },
5227
592a252b 5228 /* PREFIX_VEX_0F76 */
c0f3af97 5229 {
592d1631
L
5230 { Bad_Opcode },
5231 { Bad_Opcode },
6c30d220 5232 { VEX_W_TABLE (VEX_W_0F76_P_2) },
c0f3af97
L
5233 },
5234
592a252b 5235 /* PREFIX_VEX_0F77 */
c0f3af97 5236 {
592a252b 5237 { VEX_W_TABLE (VEX_W_0F77_P_0) },
c0f3af97
L
5238 },
5239
592a252b 5240 /* PREFIX_VEX_0F7C */
c0f3af97 5241 {
592d1631
L
5242 { Bad_Opcode },
5243 { Bad_Opcode },
592a252b
L
5244 { VEX_W_TABLE (VEX_W_0F7C_P_2) },
5245 { VEX_W_TABLE (VEX_W_0F7C_P_3) },
c0f3af97
L
5246 },
5247
592a252b 5248 /* PREFIX_VEX_0F7D */
c0f3af97 5249 {
592d1631
L
5250 { Bad_Opcode },
5251 { Bad_Opcode },
592a252b
L
5252 { VEX_W_TABLE (VEX_W_0F7D_P_2) },
5253 { VEX_W_TABLE (VEX_W_0F7D_P_3) },
c0f3af97
L
5254 },
5255
592a252b 5256 /* PREFIX_VEX_0F7E */
c0f3af97 5257 {
592d1631 5258 { Bad_Opcode },
592a252b
L
5259 { VEX_LEN_TABLE (VEX_LEN_0F7E_P_1) },
5260 { VEX_LEN_TABLE (VEX_LEN_0F7E_P_2) },
c0f3af97
L
5261 },
5262
592a252b 5263 /* PREFIX_VEX_0F7F */
c0f3af97 5264 {
592d1631 5265 { Bad_Opcode },
592a252b
L
5266 { VEX_W_TABLE (VEX_W_0F7F_P_1) },
5267 { VEX_W_TABLE (VEX_W_0F7F_P_2) },
c0f3af97
L
5268 },
5269
43234a1e
L
5270 /* PREFIX_VEX_0F90 */
5271 {
5272 { VEX_LEN_TABLE (VEX_LEN_0F90_P_0) },
1ba585e8
IT
5273 { Bad_Opcode },
5274 { VEX_LEN_TABLE (VEX_LEN_0F90_P_2) },
43234a1e
L
5275 },
5276
5277 /* PREFIX_VEX_0F91 */
5278 {
5279 { VEX_LEN_TABLE (VEX_LEN_0F91_P_0) },
1ba585e8
IT
5280 { Bad_Opcode },
5281 { VEX_LEN_TABLE (VEX_LEN_0F91_P_2) },
43234a1e
L
5282 },
5283
5284 /* PREFIX_VEX_0F92 */
5285 {
5286 { VEX_LEN_TABLE (VEX_LEN_0F92_P_0) },
1ba585e8 5287 { Bad_Opcode },
90a915bf 5288 { VEX_LEN_TABLE (VEX_LEN_0F92_P_2) },
1ba585e8 5289 { VEX_LEN_TABLE (VEX_LEN_0F92_P_3) },
43234a1e
L
5290 },
5291
5292 /* PREFIX_VEX_0F93 */
5293 {
5294 { VEX_LEN_TABLE (VEX_LEN_0F93_P_0) },
1ba585e8 5295 { Bad_Opcode },
90a915bf 5296 { VEX_LEN_TABLE (VEX_LEN_0F93_P_2) },
1ba585e8 5297 { VEX_LEN_TABLE (VEX_LEN_0F93_P_3) },
43234a1e
L
5298 },
5299
5300 /* PREFIX_VEX_0F98 */
5301 {
5302 { VEX_LEN_TABLE (VEX_LEN_0F98_P_0) },
1ba585e8
IT
5303 { Bad_Opcode },
5304 { VEX_LEN_TABLE (VEX_LEN_0F98_P_2) },
5305 },
5306
5307 /* PREFIX_VEX_0F99 */
5308 {
5309 { VEX_LEN_TABLE (VEX_LEN_0F99_P_0) },
5310 { Bad_Opcode },
5311 { VEX_LEN_TABLE (VEX_LEN_0F99_P_2) },
43234a1e
L
5312 },
5313
592a252b 5314 /* PREFIX_VEX_0FC2 */
c0f3af97 5315 {
592a252b
L
5316 { VEX_W_TABLE (VEX_W_0FC2_P_0) },
5317 { VEX_LEN_TABLE (VEX_LEN_0FC2_P_1) },
5318 { VEX_W_TABLE (VEX_W_0FC2_P_2) },
5319 { VEX_LEN_TABLE (VEX_LEN_0FC2_P_3) },
c0f3af97
L
5320 },
5321
592a252b 5322 /* PREFIX_VEX_0FC4 */
c0f3af97 5323 {
592d1631
L
5324 { Bad_Opcode },
5325 { Bad_Opcode },
592a252b 5326 { VEX_LEN_TABLE (VEX_LEN_0FC4_P_2) },
c0f3af97
L
5327 },
5328
592a252b 5329 /* PREFIX_VEX_0FC5 */
c0f3af97 5330 {
592d1631
L
5331 { Bad_Opcode },
5332 { Bad_Opcode },
592a252b 5333 { VEX_LEN_TABLE (VEX_LEN_0FC5_P_2) },
c0f3af97
L
5334 },
5335
592a252b 5336 /* PREFIX_VEX_0FD0 */
c0f3af97 5337 {
592d1631
L
5338 { Bad_Opcode },
5339 { Bad_Opcode },
592a252b
L
5340 { VEX_W_TABLE (VEX_W_0FD0_P_2) },
5341 { VEX_W_TABLE (VEX_W_0FD0_P_3) },
c0f3af97
L
5342 },
5343
592a252b 5344 /* PREFIX_VEX_0FD1 */
c0f3af97 5345 {
592d1631
L
5346 { Bad_Opcode },
5347 { Bad_Opcode },
6c30d220 5348 { VEX_W_TABLE (VEX_W_0FD1_P_2) },
c0f3af97
L
5349 },
5350
592a252b 5351 /* PREFIX_VEX_0FD2 */
c0f3af97 5352 {
592d1631
L
5353 { Bad_Opcode },
5354 { Bad_Opcode },
6c30d220 5355 { VEX_W_TABLE (VEX_W_0FD2_P_2) },
c0f3af97
L
5356 },
5357
592a252b 5358 /* PREFIX_VEX_0FD3 */
c0f3af97 5359 {
592d1631
L
5360 { Bad_Opcode },
5361 { Bad_Opcode },
6c30d220 5362 { VEX_W_TABLE (VEX_W_0FD3_P_2) },
c0f3af97
L
5363 },
5364
592a252b 5365 /* PREFIX_VEX_0FD4 */
c0f3af97 5366 {
592d1631
L
5367 { Bad_Opcode },
5368 { Bad_Opcode },
6c30d220 5369 { VEX_W_TABLE (VEX_W_0FD4_P_2) },
c0f3af97
L
5370 },
5371
592a252b 5372 /* PREFIX_VEX_0FD5 */
c0f3af97 5373 {
592d1631
L
5374 { Bad_Opcode },
5375 { Bad_Opcode },
6c30d220 5376 { VEX_W_TABLE (VEX_W_0FD5_P_2) },
c0f3af97
L
5377 },
5378
592a252b 5379 /* PREFIX_VEX_0FD6 */
c0f3af97 5380 {
592d1631
L
5381 { Bad_Opcode },
5382 { Bad_Opcode },
592a252b 5383 { VEX_LEN_TABLE (VEX_LEN_0FD6_P_2) },
c0f3af97
L
5384 },
5385
592a252b 5386 /* PREFIX_VEX_0FD7 */
c0f3af97 5387 {
592d1631
L
5388 { Bad_Opcode },
5389 { Bad_Opcode },
592a252b 5390 { MOD_TABLE (MOD_VEX_0FD7_PREFIX_2) },
c0f3af97
L
5391 },
5392
592a252b 5393 /* PREFIX_VEX_0FD8 */
c0f3af97 5394 {
592d1631
L
5395 { Bad_Opcode },
5396 { Bad_Opcode },
6c30d220 5397 { VEX_W_TABLE (VEX_W_0FD8_P_2) },
c0f3af97
L
5398 },
5399
592a252b 5400 /* PREFIX_VEX_0FD9 */
c0f3af97 5401 {
592d1631
L
5402 { Bad_Opcode },
5403 { Bad_Opcode },
6c30d220 5404 { VEX_W_TABLE (VEX_W_0FD9_P_2) },
c0f3af97
L
5405 },
5406
592a252b 5407 /* PREFIX_VEX_0FDA */
c0f3af97 5408 {
592d1631
L
5409 { Bad_Opcode },
5410 { Bad_Opcode },
6c30d220 5411 { VEX_W_TABLE (VEX_W_0FDA_P_2) },
c0f3af97
L
5412 },
5413
592a252b 5414 /* PREFIX_VEX_0FDB */
c0f3af97 5415 {
592d1631
L
5416 { Bad_Opcode },
5417 { Bad_Opcode },
6c30d220 5418 { VEX_W_TABLE (VEX_W_0FDB_P_2) },
c0f3af97
L
5419 },
5420
592a252b 5421 /* PREFIX_VEX_0FDC */
c0f3af97 5422 {
592d1631
L
5423 { Bad_Opcode },
5424 { Bad_Opcode },
6c30d220 5425 { VEX_W_TABLE (VEX_W_0FDC_P_2) },
c0f3af97
L
5426 },
5427
592a252b 5428 /* PREFIX_VEX_0FDD */
c0f3af97 5429 {
592d1631
L
5430 { Bad_Opcode },
5431 { Bad_Opcode },
6c30d220 5432 { VEX_W_TABLE (VEX_W_0FDD_P_2) },
c0f3af97
L
5433 },
5434
592a252b 5435 /* PREFIX_VEX_0FDE */
c0f3af97 5436 {
592d1631
L
5437 { Bad_Opcode },
5438 { Bad_Opcode },
6c30d220 5439 { VEX_W_TABLE (VEX_W_0FDE_P_2) },
c0f3af97
L
5440 },
5441
592a252b 5442 /* PREFIX_VEX_0FDF */
c0f3af97 5443 {
592d1631
L
5444 { Bad_Opcode },
5445 { Bad_Opcode },
6c30d220 5446 { VEX_W_TABLE (VEX_W_0FDF_P_2) },
c0f3af97
L
5447 },
5448
592a252b 5449 /* PREFIX_VEX_0FE0 */
c0f3af97 5450 {
592d1631
L
5451 { Bad_Opcode },
5452 { Bad_Opcode },
6c30d220 5453 { VEX_W_TABLE (VEX_W_0FE0_P_2) },
c0f3af97
L
5454 },
5455
592a252b 5456 /* PREFIX_VEX_0FE1 */
c0f3af97 5457 {
592d1631
L
5458 { Bad_Opcode },
5459 { Bad_Opcode },
6c30d220 5460 { VEX_W_TABLE (VEX_W_0FE1_P_2) },
c0f3af97
L
5461 },
5462
592a252b 5463 /* PREFIX_VEX_0FE2 */
c0f3af97 5464 {
592d1631
L
5465 { Bad_Opcode },
5466 { Bad_Opcode },
6c30d220 5467 { VEX_W_TABLE (VEX_W_0FE2_P_2) },
c0f3af97
L
5468 },
5469
592a252b 5470 /* PREFIX_VEX_0FE3 */
c0f3af97 5471 {
592d1631
L
5472 { Bad_Opcode },
5473 { Bad_Opcode },
6c30d220 5474 { VEX_W_TABLE (VEX_W_0FE3_P_2) },
c0f3af97
L
5475 },
5476
592a252b 5477 /* PREFIX_VEX_0FE4 */
c0f3af97 5478 {
592d1631
L
5479 { Bad_Opcode },
5480 { Bad_Opcode },
6c30d220 5481 { VEX_W_TABLE (VEX_W_0FE4_P_2) },
c0f3af97
L
5482 },
5483
592a252b 5484 /* PREFIX_VEX_0FE5 */
c0f3af97 5485 {
592d1631
L
5486 { Bad_Opcode },
5487 { Bad_Opcode },
6c30d220 5488 { VEX_W_TABLE (VEX_W_0FE5_P_2) },
c0f3af97
L
5489 },
5490
592a252b 5491 /* PREFIX_VEX_0FE6 */
c0f3af97 5492 {
592d1631 5493 { Bad_Opcode },
592a252b
L
5494 { VEX_W_TABLE (VEX_W_0FE6_P_1) },
5495 { VEX_W_TABLE (VEX_W_0FE6_P_2) },
5496 { VEX_W_TABLE (VEX_W_0FE6_P_3) },
c0f3af97
L
5497 },
5498
592a252b 5499 /* PREFIX_VEX_0FE7 */
c0f3af97 5500 {
592d1631
L
5501 { Bad_Opcode },
5502 { Bad_Opcode },
592a252b 5503 { MOD_TABLE (MOD_VEX_0FE7_PREFIX_2) },
c0f3af97
L
5504 },
5505
592a252b 5506 /* PREFIX_VEX_0FE8 */
c0f3af97 5507 {
592d1631
L
5508 { Bad_Opcode },
5509 { Bad_Opcode },
6c30d220 5510 { VEX_W_TABLE (VEX_W_0FE8_P_2) },
c0f3af97
L
5511 },
5512
592a252b 5513 /* PREFIX_VEX_0FE9 */
c0f3af97 5514 {
592d1631
L
5515 { Bad_Opcode },
5516 { Bad_Opcode },
6c30d220 5517 { VEX_W_TABLE (VEX_W_0FE9_P_2) },
c0f3af97
L
5518 },
5519
592a252b 5520 /* PREFIX_VEX_0FEA */
c0f3af97 5521 {
592d1631
L
5522 { Bad_Opcode },
5523 { Bad_Opcode },
6c30d220 5524 { VEX_W_TABLE (VEX_W_0FEA_P_2) },
c0f3af97
L
5525 },
5526
592a252b 5527 /* PREFIX_VEX_0FEB */
c0f3af97 5528 {
592d1631
L
5529 { Bad_Opcode },
5530 { Bad_Opcode },
6c30d220 5531 { VEX_W_TABLE (VEX_W_0FEB_P_2) },
c0f3af97
L
5532 },
5533
592a252b 5534 /* PREFIX_VEX_0FEC */
c0f3af97 5535 {
592d1631
L
5536 { Bad_Opcode },
5537 { Bad_Opcode },
6c30d220 5538 { VEX_W_TABLE (VEX_W_0FEC_P_2) },
c0f3af97
L
5539 },
5540
592a252b 5541 /* PREFIX_VEX_0FED */
c0f3af97 5542 {
592d1631
L
5543 { Bad_Opcode },
5544 { Bad_Opcode },
6c30d220 5545 { VEX_W_TABLE (VEX_W_0FED_P_2) },
c0f3af97
L
5546 },
5547
592a252b 5548 /* PREFIX_VEX_0FEE */
c0f3af97 5549 {
592d1631
L
5550 { Bad_Opcode },
5551 { Bad_Opcode },
6c30d220 5552 { VEX_W_TABLE (VEX_W_0FEE_P_2) },
c0f3af97
L
5553 },
5554
592a252b 5555 /* PREFIX_VEX_0FEF */
c0f3af97 5556 {
592d1631
L
5557 { Bad_Opcode },
5558 { Bad_Opcode },
6c30d220 5559 { VEX_W_TABLE (VEX_W_0FEF_P_2) },
c0f3af97
L
5560 },
5561
592a252b 5562 /* PREFIX_VEX_0FF0 */
c0f3af97 5563 {
592d1631
L
5564 { Bad_Opcode },
5565 { Bad_Opcode },
5566 { Bad_Opcode },
592a252b 5567 { MOD_TABLE (MOD_VEX_0FF0_PREFIX_3) },
c0f3af97
L
5568 },
5569
592a252b 5570 /* PREFIX_VEX_0FF1 */
c0f3af97 5571 {
592d1631
L
5572 { Bad_Opcode },
5573 { Bad_Opcode },
6c30d220 5574 { VEX_W_TABLE (VEX_W_0FF1_P_2) },
c0f3af97
L
5575 },
5576
592a252b 5577 /* PREFIX_VEX_0FF2 */
c0f3af97 5578 {
592d1631
L
5579 { Bad_Opcode },
5580 { Bad_Opcode },
6c30d220 5581 { VEX_W_TABLE (VEX_W_0FF2_P_2) },
c0f3af97
L
5582 },
5583
592a252b 5584 /* PREFIX_VEX_0FF3 */
c0f3af97 5585 {
592d1631
L
5586 { Bad_Opcode },
5587 { Bad_Opcode },
6c30d220 5588 { VEX_W_TABLE (VEX_W_0FF3_P_2) },
c0f3af97
L
5589 },
5590
592a252b 5591 /* PREFIX_VEX_0FF4 */
c0f3af97 5592 {
592d1631
L
5593 { Bad_Opcode },
5594 { Bad_Opcode },
6c30d220 5595 { VEX_W_TABLE (VEX_W_0FF4_P_2) },
c0f3af97
L
5596 },
5597
592a252b 5598 /* PREFIX_VEX_0FF5 */
c0f3af97 5599 {
592d1631
L
5600 { Bad_Opcode },
5601 { Bad_Opcode },
6c30d220 5602 { VEX_W_TABLE (VEX_W_0FF5_P_2) },
c0f3af97
L
5603 },
5604
592a252b 5605 /* PREFIX_VEX_0FF6 */
c0f3af97 5606 {
592d1631
L
5607 { Bad_Opcode },
5608 { Bad_Opcode },
6c30d220 5609 { VEX_W_TABLE (VEX_W_0FF6_P_2) },
c0f3af97
L
5610 },
5611
592a252b 5612 /* PREFIX_VEX_0FF7 */
c0f3af97 5613 {
592d1631
L
5614 { Bad_Opcode },
5615 { Bad_Opcode },
592a252b 5616 { VEX_LEN_TABLE (VEX_LEN_0FF7_P_2) },
c0f3af97
L
5617 },
5618
592a252b 5619 /* PREFIX_VEX_0FF8 */
c0f3af97 5620 {
592d1631
L
5621 { Bad_Opcode },
5622 { Bad_Opcode },
6c30d220 5623 { VEX_W_TABLE (VEX_W_0FF8_P_2) },
c0f3af97
L
5624 },
5625
592a252b 5626 /* PREFIX_VEX_0FF9 */
c0f3af97 5627 {
592d1631
L
5628 { Bad_Opcode },
5629 { Bad_Opcode },
6c30d220 5630 { VEX_W_TABLE (VEX_W_0FF9_P_2) },
c0f3af97
L
5631 },
5632
592a252b 5633 /* PREFIX_VEX_0FFA */
c0f3af97 5634 {
592d1631
L
5635 { Bad_Opcode },
5636 { Bad_Opcode },
6c30d220 5637 { VEX_W_TABLE (VEX_W_0FFA_P_2) },
c0f3af97
L
5638 },
5639
592a252b 5640 /* PREFIX_VEX_0FFB */
c0f3af97 5641 {
592d1631
L
5642 { Bad_Opcode },
5643 { Bad_Opcode },
6c30d220 5644 { VEX_W_TABLE (VEX_W_0FFB_P_2) },
c0f3af97
L
5645 },
5646
592a252b 5647 /* PREFIX_VEX_0FFC */
c0f3af97 5648 {
592d1631
L
5649 { Bad_Opcode },
5650 { Bad_Opcode },
6c30d220 5651 { VEX_W_TABLE (VEX_W_0FFC_P_2) },
c0f3af97
L
5652 },
5653
592a252b 5654 /* PREFIX_VEX_0FFD */
c0f3af97 5655 {
592d1631
L
5656 { Bad_Opcode },
5657 { Bad_Opcode },
6c30d220 5658 { VEX_W_TABLE (VEX_W_0FFD_P_2) },
c0f3af97
L
5659 },
5660
592a252b 5661 /* PREFIX_VEX_0FFE */
c0f3af97 5662 {
592d1631
L
5663 { Bad_Opcode },
5664 { Bad_Opcode },
6c30d220 5665 { VEX_W_TABLE (VEX_W_0FFE_P_2) },
c0f3af97
L
5666 },
5667
592a252b 5668 /* PREFIX_VEX_0F3800 */
c0f3af97 5669 {
592d1631
L
5670 { Bad_Opcode },
5671 { Bad_Opcode },
6c30d220 5672 { VEX_W_TABLE (VEX_W_0F3800_P_2) },
c0f3af97
L
5673 },
5674
592a252b 5675 /* PREFIX_VEX_0F3801 */
c0f3af97 5676 {
592d1631
L
5677 { Bad_Opcode },
5678 { Bad_Opcode },
6c30d220 5679 { VEX_W_TABLE (VEX_W_0F3801_P_2) },
c0f3af97
L
5680 },
5681
592a252b 5682 /* PREFIX_VEX_0F3802 */
c0f3af97 5683 {
592d1631
L
5684 { Bad_Opcode },
5685 { Bad_Opcode },
6c30d220 5686 { VEX_W_TABLE (VEX_W_0F3802_P_2) },
c0f3af97
L
5687 },
5688
592a252b 5689 /* PREFIX_VEX_0F3803 */
c0f3af97 5690 {
592d1631
L
5691 { Bad_Opcode },
5692 { Bad_Opcode },
6c30d220 5693 { VEX_W_TABLE (VEX_W_0F3803_P_2) },
c0f3af97
L
5694 },
5695
592a252b 5696 /* PREFIX_VEX_0F3804 */
c0f3af97 5697 {
592d1631
L
5698 { Bad_Opcode },
5699 { Bad_Opcode },
6c30d220 5700 { VEX_W_TABLE (VEX_W_0F3804_P_2) },
c0f3af97
L
5701 },
5702
592a252b 5703 /* PREFIX_VEX_0F3805 */
c0f3af97 5704 {
592d1631
L
5705 { Bad_Opcode },
5706 { Bad_Opcode },
6c30d220 5707 { VEX_W_TABLE (VEX_W_0F3805_P_2) },
c0f3af97
L
5708 },
5709
592a252b 5710 /* PREFIX_VEX_0F3806 */
c0f3af97 5711 {
592d1631
L
5712 { Bad_Opcode },
5713 { Bad_Opcode },
6c30d220 5714 { VEX_W_TABLE (VEX_W_0F3806_P_2) },
c0f3af97
L
5715 },
5716
592a252b 5717 /* PREFIX_VEX_0F3807 */
c0f3af97 5718 {
592d1631
L
5719 { Bad_Opcode },
5720 { Bad_Opcode },
6c30d220 5721 { VEX_W_TABLE (VEX_W_0F3807_P_2) },
c0f3af97
L
5722 },
5723
592a252b 5724 /* PREFIX_VEX_0F3808 */
c0f3af97 5725 {
592d1631
L
5726 { Bad_Opcode },
5727 { Bad_Opcode },
6c30d220 5728 { VEX_W_TABLE (VEX_W_0F3808_P_2) },
c0f3af97
L
5729 },
5730
592a252b 5731 /* PREFIX_VEX_0F3809 */
c0f3af97 5732 {
592d1631
L
5733 { Bad_Opcode },
5734 { Bad_Opcode },
6c30d220 5735 { VEX_W_TABLE (VEX_W_0F3809_P_2) },
c0f3af97
L
5736 },
5737
592a252b 5738 /* PREFIX_VEX_0F380A */
c0f3af97 5739 {
592d1631
L
5740 { Bad_Opcode },
5741 { Bad_Opcode },
6c30d220 5742 { VEX_W_TABLE (VEX_W_0F380A_P_2) },
c0f3af97
L
5743 },
5744
592a252b 5745 /* PREFIX_VEX_0F380B */
c0f3af97 5746 {
592d1631
L
5747 { Bad_Opcode },
5748 { Bad_Opcode },
6c30d220 5749 { VEX_W_TABLE (VEX_W_0F380B_P_2) },
c0f3af97
L
5750 },
5751
592a252b 5752 /* PREFIX_VEX_0F380C */
c0f3af97 5753 {
592d1631
L
5754 { Bad_Opcode },
5755 { Bad_Opcode },
592a252b 5756 { VEX_W_TABLE (VEX_W_0F380C_P_2) },
c0f3af97
L
5757 },
5758
592a252b 5759 /* PREFIX_VEX_0F380D */
c0f3af97 5760 {
592d1631
L
5761 { Bad_Opcode },
5762 { Bad_Opcode },
592a252b 5763 { VEX_W_TABLE (VEX_W_0F380D_P_2) },
c0f3af97
L
5764 },
5765
592a252b 5766 /* PREFIX_VEX_0F380E */
c0f3af97 5767 {
592d1631
L
5768 { Bad_Opcode },
5769 { Bad_Opcode },
592a252b 5770 { VEX_W_TABLE (VEX_W_0F380E_P_2) },
c0f3af97
L
5771 },
5772
592a252b 5773 /* PREFIX_VEX_0F380F */
c0f3af97 5774 {
592d1631
L
5775 { Bad_Opcode },
5776 { Bad_Opcode },
592a252b 5777 { VEX_W_TABLE (VEX_W_0F380F_P_2) },
c0f3af97
L
5778 },
5779
592a252b 5780 /* PREFIX_VEX_0F3813 */
c7b8aa3a
L
5781 {
5782 { Bad_Opcode },
5783 { Bad_Opcode },
bf890a93 5784 { "vcvtph2ps", { XM, EXxmmq }, 0 },
c7b8aa3a
L
5785 },
5786
6c30d220
L
5787 /* PREFIX_VEX_0F3816 */
5788 {
5789 { Bad_Opcode },
5790 { Bad_Opcode },
5791 { VEX_LEN_TABLE (VEX_LEN_0F3816_P_2) },
5792 },
5793
592a252b 5794 /* PREFIX_VEX_0F3817 */
c0f3af97 5795 {
592d1631
L
5796 { Bad_Opcode },
5797 { Bad_Opcode },
592a252b 5798 { VEX_W_TABLE (VEX_W_0F3817_P_2) },
c0f3af97
L
5799 },
5800
592a252b 5801 /* PREFIX_VEX_0F3818 */
c0f3af97 5802 {
592d1631
L
5803 { Bad_Opcode },
5804 { Bad_Opcode },
6c30d220 5805 { VEX_W_TABLE (VEX_W_0F3818_P_2) },
c0f3af97
L
5806 },
5807
592a252b 5808 /* PREFIX_VEX_0F3819 */
c0f3af97 5809 {
592d1631
L
5810 { Bad_Opcode },
5811 { Bad_Opcode },
6c30d220 5812 { VEX_LEN_TABLE (VEX_LEN_0F3819_P_2) },
c0f3af97
L
5813 },
5814
592a252b 5815 /* PREFIX_VEX_0F381A */
c0f3af97 5816 {
592d1631
L
5817 { Bad_Opcode },
5818 { Bad_Opcode },
592a252b 5819 { MOD_TABLE (MOD_VEX_0F381A_PREFIX_2) },
c0f3af97
L
5820 },
5821
592a252b 5822 /* PREFIX_VEX_0F381C */
c0f3af97 5823 {
592d1631
L
5824 { Bad_Opcode },
5825 { Bad_Opcode },
6c30d220 5826 { VEX_W_TABLE (VEX_W_0F381C_P_2) },
c0f3af97
L
5827 },
5828
592a252b 5829 /* PREFIX_VEX_0F381D */
c0f3af97 5830 {
592d1631
L
5831 { Bad_Opcode },
5832 { Bad_Opcode },
6c30d220 5833 { VEX_W_TABLE (VEX_W_0F381D_P_2) },
c0f3af97
L
5834 },
5835
592a252b 5836 /* PREFIX_VEX_0F381E */
c0f3af97 5837 {
592d1631
L
5838 { Bad_Opcode },
5839 { Bad_Opcode },
6c30d220 5840 { VEX_W_TABLE (VEX_W_0F381E_P_2) },
c0f3af97
L
5841 },
5842
592a252b 5843 /* PREFIX_VEX_0F3820 */
c0f3af97 5844 {
592d1631
L
5845 { Bad_Opcode },
5846 { Bad_Opcode },
6c30d220 5847 { VEX_W_TABLE (VEX_W_0F3820_P_2) },
c0f3af97
L
5848 },
5849
592a252b 5850 /* PREFIX_VEX_0F3821 */
c0f3af97 5851 {
592d1631
L
5852 { Bad_Opcode },
5853 { Bad_Opcode },
6c30d220 5854 { VEX_W_TABLE (VEX_W_0F3821_P_2) },
c0f3af97
L
5855 },
5856
592a252b 5857 /* PREFIX_VEX_0F3822 */
c0f3af97 5858 {
592d1631
L
5859 { Bad_Opcode },
5860 { Bad_Opcode },
6c30d220 5861 { VEX_W_TABLE (VEX_W_0F3822_P_2) },
c0f3af97
L
5862 },
5863
592a252b 5864 /* PREFIX_VEX_0F3823 */
c0f3af97 5865 {
592d1631
L
5866 { Bad_Opcode },
5867 { Bad_Opcode },
6c30d220 5868 { VEX_W_TABLE (VEX_W_0F3823_P_2) },
c0f3af97
L
5869 },
5870
592a252b 5871 /* PREFIX_VEX_0F3824 */
c0f3af97 5872 {
592d1631
L
5873 { Bad_Opcode },
5874 { Bad_Opcode },
6c30d220 5875 { VEX_W_TABLE (VEX_W_0F3824_P_2) },
c0f3af97
L
5876 },
5877
592a252b 5878 /* PREFIX_VEX_0F3825 */
c0f3af97 5879 {
592d1631
L
5880 { Bad_Opcode },
5881 { Bad_Opcode },
6c30d220 5882 { VEX_W_TABLE (VEX_W_0F3825_P_2) },
c0f3af97
L
5883 },
5884
592a252b 5885 /* PREFIX_VEX_0F3828 */
c0f3af97 5886 {
592d1631
L
5887 { Bad_Opcode },
5888 { Bad_Opcode },
6c30d220 5889 { VEX_W_TABLE (VEX_W_0F3828_P_2) },
c0f3af97
L
5890 },
5891
592a252b 5892 /* PREFIX_VEX_0F3829 */
c0f3af97 5893 {
592d1631
L
5894 { Bad_Opcode },
5895 { Bad_Opcode },
6c30d220 5896 { VEX_W_TABLE (VEX_W_0F3829_P_2) },
c0f3af97
L
5897 },
5898
592a252b 5899 /* PREFIX_VEX_0F382A */
c0f3af97 5900 {
592d1631
L
5901 { Bad_Opcode },
5902 { Bad_Opcode },
592a252b 5903 { MOD_TABLE (MOD_VEX_0F382A_PREFIX_2) },
c0f3af97
L
5904 },
5905
592a252b 5906 /* PREFIX_VEX_0F382B */
c0f3af97 5907 {
592d1631
L
5908 { Bad_Opcode },
5909 { Bad_Opcode },
6c30d220 5910 { VEX_W_TABLE (VEX_W_0F382B_P_2) },
c0f3af97
L
5911 },
5912
592a252b 5913 /* PREFIX_VEX_0F382C */
c0f3af97 5914 {
592d1631
L
5915 { Bad_Opcode },
5916 { Bad_Opcode },
592a252b 5917 { MOD_TABLE (MOD_VEX_0F382C_PREFIX_2) },
c0f3af97
L
5918 },
5919
592a252b 5920 /* PREFIX_VEX_0F382D */
c0f3af97 5921 {
592d1631
L
5922 { Bad_Opcode },
5923 { Bad_Opcode },
592a252b 5924 { MOD_TABLE (MOD_VEX_0F382D_PREFIX_2) },
c0f3af97
L
5925 },
5926
592a252b 5927 /* PREFIX_VEX_0F382E */
c0f3af97 5928 {
592d1631
L
5929 { Bad_Opcode },
5930 { Bad_Opcode },
592a252b 5931 { MOD_TABLE (MOD_VEX_0F382E_PREFIX_2) },
c0f3af97
L
5932 },
5933
592a252b 5934 /* PREFIX_VEX_0F382F */
c0f3af97 5935 {
592d1631
L
5936 { Bad_Opcode },
5937 { Bad_Opcode },
592a252b 5938 { MOD_TABLE (MOD_VEX_0F382F_PREFIX_2) },
c0f3af97
L
5939 },
5940
592a252b 5941 /* PREFIX_VEX_0F3830 */
c0f3af97 5942 {
592d1631
L
5943 { Bad_Opcode },
5944 { Bad_Opcode },
6c30d220 5945 { VEX_W_TABLE (VEX_W_0F3830_P_2) },
c0f3af97
L
5946 },
5947
592a252b 5948 /* PREFIX_VEX_0F3831 */
c0f3af97 5949 {
592d1631
L
5950 { Bad_Opcode },
5951 { Bad_Opcode },
6c30d220 5952 { VEX_W_TABLE (VEX_W_0F3831_P_2) },
c0f3af97
L
5953 },
5954
592a252b 5955 /* PREFIX_VEX_0F3832 */
c0f3af97 5956 {
592d1631
L
5957 { Bad_Opcode },
5958 { Bad_Opcode },
6c30d220 5959 { VEX_W_TABLE (VEX_W_0F3832_P_2) },
c0f3af97
L
5960 },
5961
592a252b 5962 /* PREFIX_VEX_0F3833 */
c0f3af97 5963 {
592d1631
L
5964 { Bad_Opcode },
5965 { Bad_Opcode },
6c30d220 5966 { VEX_W_TABLE (VEX_W_0F3833_P_2) },
c0f3af97
L
5967 },
5968
592a252b 5969 /* PREFIX_VEX_0F3834 */
c0f3af97 5970 {
592d1631
L
5971 { Bad_Opcode },
5972 { Bad_Opcode },
6c30d220 5973 { VEX_W_TABLE (VEX_W_0F3834_P_2) },
c0f3af97
L
5974 },
5975
592a252b 5976 /* PREFIX_VEX_0F3835 */
c0f3af97 5977 {
592d1631
L
5978 { Bad_Opcode },
5979 { Bad_Opcode },
6c30d220
L
5980 { VEX_W_TABLE (VEX_W_0F3835_P_2) },
5981 },
5982
5983 /* PREFIX_VEX_0F3836 */
5984 {
5985 { Bad_Opcode },
5986 { Bad_Opcode },
5987 { VEX_LEN_TABLE (VEX_LEN_0F3836_P_2) },
c0f3af97
L
5988 },
5989
592a252b 5990 /* PREFIX_VEX_0F3837 */
c0f3af97 5991 {
592d1631
L
5992 { Bad_Opcode },
5993 { Bad_Opcode },
6c30d220 5994 { VEX_W_TABLE (VEX_W_0F3837_P_2) },
c0f3af97
L
5995 },
5996
592a252b 5997 /* PREFIX_VEX_0F3838 */
c0f3af97 5998 {
592d1631
L
5999 { Bad_Opcode },
6000 { Bad_Opcode },
6c30d220 6001 { VEX_W_TABLE (VEX_W_0F3838_P_2) },
c0f3af97
L
6002 },
6003
592a252b 6004 /* PREFIX_VEX_0F3839 */
c0f3af97 6005 {
592d1631
L
6006 { Bad_Opcode },
6007 { Bad_Opcode },
6c30d220 6008 { VEX_W_TABLE (VEX_W_0F3839_P_2) },
c0f3af97
L
6009 },
6010
592a252b 6011 /* PREFIX_VEX_0F383A */
c0f3af97 6012 {
592d1631
L
6013 { Bad_Opcode },
6014 { Bad_Opcode },
6c30d220 6015 { VEX_W_TABLE (VEX_W_0F383A_P_2) },
c0f3af97
L
6016 },
6017
592a252b 6018 /* PREFIX_VEX_0F383B */
c0f3af97 6019 {
592d1631
L
6020 { Bad_Opcode },
6021 { Bad_Opcode },
6c30d220 6022 { VEX_W_TABLE (VEX_W_0F383B_P_2) },
c0f3af97
L
6023 },
6024
592a252b 6025 /* PREFIX_VEX_0F383C */
c0f3af97 6026 {
592d1631
L
6027 { Bad_Opcode },
6028 { Bad_Opcode },
6c30d220 6029 { VEX_W_TABLE (VEX_W_0F383C_P_2) },
c0f3af97
L
6030 },
6031
592a252b 6032 /* PREFIX_VEX_0F383D */
c0f3af97 6033 {
592d1631
L
6034 { Bad_Opcode },
6035 { Bad_Opcode },
6c30d220 6036 { VEX_W_TABLE (VEX_W_0F383D_P_2) },
c0f3af97
L
6037 },
6038
592a252b 6039 /* PREFIX_VEX_0F383E */
c0f3af97 6040 {
592d1631
L
6041 { Bad_Opcode },
6042 { Bad_Opcode },
6c30d220 6043 { VEX_W_TABLE (VEX_W_0F383E_P_2) },
c0f3af97
L
6044 },
6045
592a252b 6046 /* PREFIX_VEX_0F383F */
c0f3af97 6047 {
592d1631
L
6048 { Bad_Opcode },
6049 { Bad_Opcode },
6c30d220 6050 { VEX_W_TABLE (VEX_W_0F383F_P_2) },
c0f3af97
L
6051 },
6052
592a252b 6053 /* PREFIX_VEX_0F3840 */
c0f3af97 6054 {
592d1631
L
6055 { Bad_Opcode },
6056 { Bad_Opcode },
6c30d220 6057 { VEX_W_TABLE (VEX_W_0F3840_P_2) },
c0f3af97
L
6058 },
6059
592a252b 6060 /* PREFIX_VEX_0F3841 */
c0f3af97 6061 {
592d1631
L
6062 { Bad_Opcode },
6063 { Bad_Opcode },
592a252b 6064 { VEX_LEN_TABLE (VEX_LEN_0F3841_P_2) },
c0f3af97
L
6065 },
6066
6c30d220
L
6067 /* PREFIX_VEX_0F3845 */
6068 {
6069 { Bad_Opcode },
6070 { Bad_Opcode },
bf890a93 6071 { "vpsrlv%LW", { XM, Vex, EXx }, 0 },
6c30d220
L
6072 },
6073
6074 /* PREFIX_VEX_0F3846 */
6075 {
6076 { Bad_Opcode },
6077 { Bad_Opcode },
6078 { VEX_W_TABLE (VEX_W_0F3846_P_2) },
6079 },
6080
6081 /* PREFIX_VEX_0F3847 */
6082 {
6083 { Bad_Opcode },
6084 { Bad_Opcode },
bf890a93 6085 { "vpsllv%LW", { XM, Vex, EXx }, 0 },
6c30d220
L
6086 },
6087
6088 /* PREFIX_VEX_0F3858 */
6089 {
6090 { Bad_Opcode },
6091 { Bad_Opcode },
6092 { VEX_W_TABLE (VEX_W_0F3858_P_2) },
6093 },
6094
6095 /* PREFIX_VEX_0F3859 */
6096 {
6097 { Bad_Opcode },
6098 { Bad_Opcode },
6099 { VEX_W_TABLE (VEX_W_0F3859_P_2) },
6100 },
6101
6102 /* PREFIX_VEX_0F385A */
6103 {
6104 { Bad_Opcode },
6105 { Bad_Opcode },
6106 { MOD_TABLE (MOD_VEX_0F385A_PREFIX_2) },
6107 },
6108
6109 /* PREFIX_VEX_0F3878 */
6110 {
6111 { Bad_Opcode },
6112 { Bad_Opcode },
6113 { VEX_W_TABLE (VEX_W_0F3878_P_2) },
6114 },
6115
6116 /* PREFIX_VEX_0F3879 */
6117 {
6118 { Bad_Opcode },
6119 { Bad_Opcode },
6120 { VEX_W_TABLE (VEX_W_0F3879_P_2) },
6121 },
6122
6123 /* PREFIX_VEX_0F388C */
6124 {
6125 { Bad_Opcode },
6126 { Bad_Opcode },
f7002f42 6127 { MOD_TABLE (MOD_VEX_0F388C_PREFIX_2) },
6c30d220
L
6128 },
6129
6130 /* PREFIX_VEX_0F388E */
6131 {
6132 { Bad_Opcode },
6133 { Bad_Opcode },
f7002f42 6134 { MOD_TABLE (MOD_VEX_0F388E_PREFIX_2) },
6c30d220
L
6135 },
6136
6137 /* PREFIX_VEX_0F3890 */
6138 {
6139 { Bad_Opcode },
6140 { Bad_Opcode },
bf890a93 6141 { "vpgatherd%LW", { XM, MVexVSIBDWpX, Vex }, 0 },
6c30d220
L
6142 },
6143
6144 /* PREFIX_VEX_0F3891 */
6145 {
6146 { Bad_Opcode },
6147 { Bad_Opcode },
bf890a93 6148 { "vpgatherq%LW", { XMGatherQ, MVexVSIBQWpX, VexGatherQ }, 0 },
6c30d220
L
6149 },
6150
6151 /* PREFIX_VEX_0F3892 */
6152 {
6153 { Bad_Opcode },
6154 { Bad_Opcode },
bf890a93 6155 { "vgatherdp%XW", { XM, MVexVSIBDWpX, Vex }, 0 },
6c30d220
L
6156 },
6157
6158 /* PREFIX_VEX_0F3893 */
6159 {
6160 { Bad_Opcode },
6161 { Bad_Opcode },
bf890a93 6162 { "vgatherqp%XW", { XMGatherQ, MVexVSIBQWpX, VexGatherQ }, 0 },
6c30d220
L
6163 },
6164
592a252b 6165 /* PREFIX_VEX_0F3896 */
a5ff0eb2 6166 {
592d1631
L
6167 { Bad_Opcode },
6168 { Bad_Opcode },
bf890a93 6169 { "vfmaddsub132p%XW", { XM, Vex, EXx }, 0 },
a5ff0eb2
L
6170 },
6171
592a252b 6172 /* PREFIX_VEX_0F3897 */
a5ff0eb2 6173 {
592d1631
L
6174 { Bad_Opcode },
6175 { Bad_Opcode },
bf890a93 6176 { "vfmsubadd132p%XW", { XM, Vex, EXx }, 0 },
a5ff0eb2
L
6177 },
6178
592a252b 6179 /* PREFIX_VEX_0F3898 */
a5ff0eb2 6180 {
592d1631
L
6181 { Bad_Opcode },
6182 { Bad_Opcode },
bf890a93 6183 { "vfmadd132p%XW", { XM, Vex, EXx }, 0 },
a5ff0eb2
L
6184 },
6185
592a252b 6186 /* PREFIX_VEX_0F3899 */
a5ff0eb2 6187 {
592d1631
L
6188 { Bad_Opcode },
6189 { Bad_Opcode },
bf890a93 6190 { "vfmadd132s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
a5ff0eb2
L
6191 },
6192
592a252b 6193 /* PREFIX_VEX_0F389A */
a5ff0eb2 6194 {
592d1631
L
6195 { Bad_Opcode },
6196 { Bad_Opcode },
bf890a93 6197 { "vfmsub132p%XW", { XM, Vex, EXx }, 0 },
a5ff0eb2
L
6198 },
6199
592a252b 6200 /* PREFIX_VEX_0F389B */
c0f3af97 6201 {
592d1631
L
6202 { Bad_Opcode },
6203 { Bad_Opcode },
bf890a93 6204 { "vfmsub132s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6205 },
6206
592a252b 6207 /* PREFIX_VEX_0F389C */
c0f3af97 6208 {
592d1631
L
6209 { Bad_Opcode },
6210 { Bad_Opcode },
bf890a93 6211 { "vfnmadd132p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6212 },
6213
592a252b 6214 /* PREFIX_VEX_0F389D */
c0f3af97 6215 {
592d1631
L
6216 { Bad_Opcode },
6217 { Bad_Opcode },
bf890a93 6218 { "vfnmadd132s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6219 },
6220
592a252b 6221 /* PREFIX_VEX_0F389E */
c0f3af97 6222 {
592d1631
L
6223 { Bad_Opcode },
6224 { Bad_Opcode },
bf890a93 6225 { "vfnmsub132p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6226 },
6227
592a252b 6228 /* PREFIX_VEX_0F389F */
c0f3af97 6229 {
592d1631
L
6230 { Bad_Opcode },
6231 { Bad_Opcode },
bf890a93 6232 { "vfnmsub132s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6233 },
6234
592a252b 6235 /* PREFIX_VEX_0F38A6 */
c0f3af97 6236 {
592d1631
L
6237 { Bad_Opcode },
6238 { Bad_Opcode },
bf890a93 6239 { "vfmaddsub213p%XW", { XM, Vex, EXx }, 0 },
592d1631 6240 { Bad_Opcode },
c0f3af97
L
6241 },
6242
592a252b 6243 /* PREFIX_VEX_0F38A7 */
c0f3af97 6244 {
592d1631
L
6245 { Bad_Opcode },
6246 { Bad_Opcode },
bf890a93 6247 { "vfmsubadd213p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6248 },
6249
592a252b 6250 /* PREFIX_VEX_0F38A8 */
c0f3af97 6251 {
592d1631
L
6252 { Bad_Opcode },
6253 { Bad_Opcode },
bf890a93 6254 { "vfmadd213p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6255 },
6256
592a252b 6257 /* PREFIX_VEX_0F38A9 */
c0f3af97 6258 {
592d1631
L
6259 { Bad_Opcode },
6260 { Bad_Opcode },
bf890a93 6261 { "vfmadd213s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6262 },
6263
592a252b 6264 /* PREFIX_VEX_0F38AA */
c0f3af97 6265 {
592d1631
L
6266 { Bad_Opcode },
6267 { Bad_Opcode },
bf890a93 6268 { "vfmsub213p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6269 },
6270
592a252b 6271 /* PREFIX_VEX_0F38AB */
c0f3af97 6272 {
592d1631
L
6273 { Bad_Opcode },
6274 { Bad_Opcode },
bf890a93 6275 { "vfmsub213s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6276 },
6277
592a252b 6278 /* PREFIX_VEX_0F38AC */
c0f3af97 6279 {
592d1631
L
6280 { Bad_Opcode },
6281 { Bad_Opcode },
bf890a93 6282 { "vfnmadd213p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6283 },
6284
592a252b 6285 /* PREFIX_VEX_0F38AD */
c0f3af97 6286 {
592d1631
L
6287 { Bad_Opcode },
6288 { Bad_Opcode },
bf890a93 6289 { "vfnmadd213s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6290 },
6291
592a252b 6292 /* PREFIX_VEX_0F38AE */
c0f3af97 6293 {
592d1631
L
6294 { Bad_Opcode },
6295 { Bad_Opcode },
bf890a93 6296 { "vfnmsub213p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6297 },
6298
592a252b 6299 /* PREFIX_VEX_0F38AF */
c0f3af97 6300 {
592d1631
L
6301 { Bad_Opcode },
6302 { Bad_Opcode },
bf890a93 6303 { "vfnmsub213s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6304 },
6305
592a252b 6306 /* PREFIX_VEX_0F38B6 */
c0f3af97 6307 {
592d1631
L
6308 { Bad_Opcode },
6309 { Bad_Opcode },
bf890a93 6310 { "vfmaddsub231p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6311 },
6312
592a252b 6313 /* PREFIX_VEX_0F38B7 */
c0f3af97 6314 {
592d1631
L
6315 { Bad_Opcode },
6316 { Bad_Opcode },
bf890a93 6317 { "vfmsubadd231p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6318 },
6319
592a252b 6320 /* PREFIX_VEX_0F38B8 */
c0f3af97 6321 {
592d1631
L
6322 { Bad_Opcode },
6323 { Bad_Opcode },
bf890a93 6324 { "vfmadd231p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6325 },
6326
592a252b 6327 /* PREFIX_VEX_0F38B9 */
c0f3af97 6328 {
592d1631
L
6329 { Bad_Opcode },
6330 { Bad_Opcode },
bf890a93 6331 { "vfmadd231s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6332 },
6333
592a252b 6334 /* PREFIX_VEX_0F38BA */
c0f3af97 6335 {
592d1631
L
6336 { Bad_Opcode },
6337 { Bad_Opcode },
bf890a93 6338 { "vfmsub231p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6339 },
6340
592a252b 6341 /* PREFIX_VEX_0F38BB */
c0f3af97 6342 {
592d1631
L
6343 { Bad_Opcode },
6344 { Bad_Opcode },
bf890a93 6345 { "vfmsub231s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6346 },
6347
592a252b 6348 /* PREFIX_VEX_0F38BC */
c0f3af97 6349 {
592d1631
L
6350 { Bad_Opcode },
6351 { Bad_Opcode },
bf890a93 6352 { "vfnmadd231p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6353 },
6354
592a252b 6355 /* PREFIX_VEX_0F38BD */
c0f3af97 6356 {
592d1631
L
6357 { Bad_Opcode },
6358 { Bad_Opcode },
bf890a93 6359 { "vfnmadd231s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6360 },
6361
592a252b 6362 /* PREFIX_VEX_0F38BE */
c0f3af97 6363 {
592d1631
L
6364 { Bad_Opcode },
6365 { Bad_Opcode },
bf890a93 6366 { "vfnmsub231p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6367 },
6368
592a252b 6369 /* PREFIX_VEX_0F38BF */
c0f3af97 6370 {
592d1631
L
6371 { Bad_Opcode },
6372 { Bad_Opcode },
bf890a93 6373 { "vfnmsub231s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6374 },
6375
48521003
IT
6376 /* PREFIX_VEX_0F38CF */
6377 {
6378 { Bad_Opcode },
6379 { Bad_Opcode },
6380 { VEX_W_TABLE (VEX_W_0F38CF_P_2) },
6381 },
6382
592a252b 6383 /* PREFIX_VEX_0F38DB */
c0f3af97 6384 {
592d1631
L
6385 { Bad_Opcode },
6386 { Bad_Opcode },
592a252b 6387 { VEX_LEN_TABLE (VEX_LEN_0F38DB_P_2) },
c0f3af97
L
6388 },
6389
592a252b 6390 /* PREFIX_VEX_0F38DC */
c0f3af97 6391 {
592d1631
L
6392 { Bad_Opcode },
6393 { Bad_Opcode },
8dcf1fad 6394 { "vaesenc", { XM, Vex, EXx }, 0 },
c0f3af97
L
6395 },
6396
592a252b 6397 /* PREFIX_VEX_0F38DD */
c0f3af97 6398 {
592d1631
L
6399 { Bad_Opcode },
6400 { Bad_Opcode },
8dcf1fad 6401 { "vaesenclast", { XM, Vex, EXx }, 0 },
c0f3af97
L
6402 },
6403
592a252b 6404 /* PREFIX_VEX_0F38DE */
c0f3af97 6405 {
592d1631
L
6406 { Bad_Opcode },
6407 { Bad_Opcode },
8dcf1fad 6408 { "vaesdec", { XM, Vex, EXx }, 0 },
c0f3af97
L
6409 },
6410
592a252b 6411 /* PREFIX_VEX_0F38DF */
c0f3af97 6412 {
592d1631
L
6413 { Bad_Opcode },
6414 { Bad_Opcode },
8dcf1fad 6415 { "vaesdeclast", { XM, Vex, EXx }, 0 },
c0f3af97
L
6416 },
6417
f12dc422
L
6418 /* PREFIX_VEX_0F38F2 */
6419 {
6420 { VEX_LEN_TABLE (VEX_LEN_0F38F2_P_0) },
6421 },
6422
6423 /* PREFIX_VEX_0F38F3_REG_1 */
6424 {
6425 { VEX_LEN_TABLE (VEX_LEN_0F38F3_R_1_P_0) },
6426 },
6427
6428 /* PREFIX_VEX_0F38F3_REG_2 */
6429 {
6430 { VEX_LEN_TABLE (VEX_LEN_0F38F3_R_2_P_0) },
6431 },
6432
6433 /* PREFIX_VEX_0F38F3_REG_3 */
6434 {
6435 { VEX_LEN_TABLE (VEX_LEN_0F38F3_R_3_P_0) },
6436 },
6437
6c30d220
L
6438 /* PREFIX_VEX_0F38F5 */
6439 {
6440 { VEX_LEN_TABLE (VEX_LEN_0F38F5_P_0) },
6441 { VEX_LEN_TABLE (VEX_LEN_0F38F5_P_1) },
6442 { Bad_Opcode },
6443 { VEX_LEN_TABLE (VEX_LEN_0F38F5_P_3) },
6444 },
6445
6446 /* PREFIX_VEX_0F38F6 */
6447 {
6448 { Bad_Opcode },
6449 { Bad_Opcode },
6450 { Bad_Opcode },
6451 { VEX_LEN_TABLE (VEX_LEN_0F38F6_P_3) },
6452 },
6453
f12dc422
L
6454 /* PREFIX_VEX_0F38F7 */
6455 {
6456 { VEX_LEN_TABLE (VEX_LEN_0F38F7_P_0) },
6c30d220
L
6457 { VEX_LEN_TABLE (VEX_LEN_0F38F7_P_1) },
6458 { VEX_LEN_TABLE (VEX_LEN_0F38F7_P_2) },
6459 { VEX_LEN_TABLE (VEX_LEN_0F38F7_P_3) },
6460 },
6461
6462 /* PREFIX_VEX_0F3A00 */
6463 {
6464 { Bad_Opcode },
6465 { Bad_Opcode },
6466 { VEX_LEN_TABLE (VEX_LEN_0F3A00_P_2) },
6467 },
6468
6469 /* PREFIX_VEX_0F3A01 */
6470 {
6471 { Bad_Opcode },
6472 { Bad_Opcode },
6473 { VEX_LEN_TABLE (VEX_LEN_0F3A01_P_2) },
6474 },
6475
6476 /* PREFIX_VEX_0F3A02 */
6477 {
6478 { Bad_Opcode },
6479 { Bad_Opcode },
6480 { VEX_W_TABLE (VEX_W_0F3A02_P_2) },
f12dc422
L
6481 },
6482
592a252b 6483 /* PREFIX_VEX_0F3A04 */
c0f3af97 6484 {
592d1631
L
6485 { Bad_Opcode },
6486 { Bad_Opcode },
592a252b 6487 { VEX_W_TABLE (VEX_W_0F3A04_P_2) },
c0f3af97
L
6488 },
6489
592a252b 6490 /* PREFIX_VEX_0F3A05 */
c0f3af97 6491 {
592d1631
L
6492 { Bad_Opcode },
6493 { Bad_Opcode },
592a252b 6494 { VEX_W_TABLE (VEX_W_0F3A05_P_2) },
c0f3af97
L
6495 },
6496
592a252b 6497 /* PREFIX_VEX_0F3A06 */
c0f3af97 6498 {
592d1631
L
6499 { Bad_Opcode },
6500 { Bad_Opcode },
592a252b 6501 { VEX_LEN_TABLE (VEX_LEN_0F3A06_P_2) },
c0f3af97
L
6502 },
6503
592a252b 6504 /* PREFIX_VEX_0F3A08 */
c0f3af97 6505 {
592d1631
L
6506 { Bad_Opcode },
6507 { Bad_Opcode },
592a252b 6508 { VEX_W_TABLE (VEX_W_0F3A08_P_2) },
c0f3af97
L
6509 },
6510
592a252b 6511 /* PREFIX_VEX_0F3A09 */
c0f3af97 6512 {
592d1631
L
6513 { Bad_Opcode },
6514 { Bad_Opcode },
592a252b 6515 { VEX_W_TABLE (VEX_W_0F3A09_P_2) },
c0f3af97
L
6516 },
6517
592a252b 6518 /* PREFIX_VEX_0F3A0A */
c0f3af97 6519 {
592d1631
L
6520 { Bad_Opcode },
6521 { Bad_Opcode },
592a252b 6522 { VEX_LEN_TABLE (VEX_LEN_0F3A0A_P_2) },
0bfee649
L
6523 },
6524
592a252b 6525 /* PREFIX_VEX_0F3A0B */
0bfee649 6526 {
592d1631
L
6527 { Bad_Opcode },
6528 { Bad_Opcode },
592a252b 6529 { VEX_LEN_TABLE (VEX_LEN_0F3A0B_P_2) },
0bfee649
L
6530 },
6531
592a252b 6532 /* PREFIX_VEX_0F3A0C */
0bfee649 6533 {
592d1631
L
6534 { Bad_Opcode },
6535 { Bad_Opcode },
592a252b 6536 { VEX_W_TABLE (VEX_W_0F3A0C_P_2) },
0bfee649
L
6537 },
6538
592a252b 6539 /* PREFIX_VEX_0F3A0D */
0bfee649 6540 {
592d1631
L
6541 { Bad_Opcode },
6542 { Bad_Opcode },
592a252b 6543 { VEX_W_TABLE (VEX_W_0F3A0D_P_2) },
c0f3af97
L
6544 },
6545
592a252b 6546 /* PREFIX_VEX_0F3A0E */
0bfee649 6547 {
592d1631
L
6548 { Bad_Opcode },
6549 { Bad_Opcode },
6c30d220 6550 { VEX_W_TABLE (VEX_W_0F3A0E_P_2) },
0bfee649
L
6551 },
6552
592a252b 6553 /* PREFIX_VEX_0F3A0F */
0bfee649 6554 {
592d1631
L
6555 { Bad_Opcode },
6556 { Bad_Opcode },
6c30d220 6557 { VEX_W_TABLE (VEX_W_0F3A0F_P_2) },
0bfee649
L
6558 },
6559
592a252b 6560 /* PREFIX_VEX_0F3A14 */
0bfee649 6561 {
592d1631
L
6562 { Bad_Opcode },
6563 { Bad_Opcode },
592a252b 6564 { VEX_LEN_TABLE (VEX_LEN_0F3A14_P_2) },
0bfee649
L
6565 },
6566
592a252b 6567 /* PREFIX_VEX_0F3A15 */
0bfee649 6568 {
592d1631
L
6569 { Bad_Opcode },
6570 { Bad_Opcode },
592a252b 6571 { VEX_LEN_TABLE (VEX_LEN_0F3A15_P_2) },
0bfee649
L
6572 },
6573
592a252b 6574 /* PREFIX_VEX_0F3A16 */
c0f3af97 6575 {
592d1631
L
6576 { Bad_Opcode },
6577 { Bad_Opcode },
592a252b 6578 { VEX_LEN_TABLE (VEX_LEN_0F3A16_P_2) },
c0f3af97
L
6579 },
6580
592a252b 6581 /* PREFIX_VEX_0F3A17 */
c0f3af97 6582 {
592d1631
L
6583 { Bad_Opcode },
6584 { Bad_Opcode },
592a252b 6585 { VEX_LEN_TABLE (VEX_LEN_0F3A17_P_2) },
c0f3af97
L
6586 },
6587
592a252b 6588 /* PREFIX_VEX_0F3A18 */
c0f3af97 6589 {
592d1631
L
6590 { Bad_Opcode },
6591 { Bad_Opcode },
592a252b 6592 { VEX_LEN_TABLE (VEX_LEN_0F3A18_P_2) },
c0f3af97
L
6593 },
6594
592a252b 6595 /* PREFIX_VEX_0F3A19 */
c0f3af97 6596 {
592d1631
L
6597 { Bad_Opcode },
6598 { Bad_Opcode },
592a252b 6599 { VEX_LEN_TABLE (VEX_LEN_0F3A19_P_2) },
c0f3af97
L
6600 },
6601
592a252b 6602 /* PREFIX_VEX_0F3A1D */
c7b8aa3a
L
6603 {
6604 { Bad_Opcode },
6605 { Bad_Opcode },
bf890a93 6606 { "vcvtps2ph", { EXxmmq, XM, Ib }, 0 },
c7b8aa3a
L
6607 },
6608
592a252b 6609 /* PREFIX_VEX_0F3A20 */
c0f3af97 6610 {
592d1631
L
6611 { Bad_Opcode },
6612 { Bad_Opcode },
592a252b 6613 { VEX_LEN_TABLE (VEX_LEN_0F3A20_P_2) },
c0f3af97
L
6614 },
6615
592a252b 6616 /* PREFIX_VEX_0F3A21 */
c0f3af97 6617 {
592d1631
L
6618 { Bad_Opcode },
6619 { Bad_Opcode },
592a252b 6620 { VEX_LEN_TABLE (VEX_LEN_0F3A21_P_2) },
c0f3af97
L
6621 },
6622
592a252b 6623 /* PREFIX_VEX_0F3A22 */
0bfee649 6624 {
592d1631
L
6625 { Bad_Opcode },
6626 { Bad_Opcode },
592a252b 6627 { VEX_LEN_TABLE (VEX_LEN_0F3A22_P_2) },
0bfee649
L
6628 },
6629
43234a1e
L
6630 /* PREFIX_VEX_0F3A30 */
6631 {
6632 { Bad_Opcode },
6633 { Bad_Opcode },
6634 { VEX_LEN_TABLE (VEX_LEN_0F3A30_P_2) },
6635 },
6636
1ba585e8
IT
6637 /* PREFIX_VEX_0F3A31 */
6638 {
6639 { Bad_Opcode },
6640 { Bad_Opcode },
6641 { VEX_LEN_TABLE (VEX_LEN_0F3A31_P_2) },
6642 },
6643
43234a1e
L
6644 /* PREFIX_VEX_0F3A32 */
6645 {
6646 { Bad_Opcode },
6647 { Bad_Opcode },
6648 { VEX_LEN_TABLE (VEX_LEN_0F3A32_P_2) },
6649 },
6650
1ba585e8
IT
6651 /* PREFIX_VEX_0F3A33 */
6652 {
6653 { Bad_Opcode },
6654 { Bad_Opcode },
6655 { VEX_LEN_TABLE (VEX_LEN_0F3A33_P_2) },
6656 },
6657
6c30d220
L
6658 /* PREFIX_VEX_0F3A38 */
6659 {
6660 { Bad_Opcode },
6661 { Bad_Opcode },
6662 { VEX_LEN_TABLE (VEX_LEN_0F3A38_P_2) },
6663 },
6664
6665 /* PREFIX_VEX_0F3A39 */
6666 {
6667 { Bad_Opcode },
6668 { Bad_Opcode },
6669 { VEX_LEN_TABLE (VEX_LEN_0F3A39_P_2) },
6670 },
6671
592a252b 6672 /* PREFIX_VEX_0F3A40 */
c0f3af97 6673 {
592d1631
L
6674 { Bad_Opcode },
6675 { Bad_Opcode },
592a252b 6676 { VEX_W_TABLE (VEX_W_0F3A40_P_2) },
c0f3af97
L
6677 },
6678
592a252b 6679 /* PREFIX_VEX_0F3A41 */
c0f3af97 6680 {
592d1631
L
6681 { Bad_Opcode },
6682 { Bad_Opcode },
592a252b 6683 { VEX_LEN_TABLE (VEX_LEN_0F3A41_P_2) },
c0f3af97
L
6684 },
6685
592a252b 6686 /* PREFIX_VEX_0F3A42 */
c0f3af97 6687 {
592d1631
L
6688 { Bad_Opcode },
6689 { Bad_Opcode },
6c30d220 6690 { VEX_W_TABLE (VEX_W_0F3A42_P_2) },
c0f3af97
L
6691 },
6692
592a252b 6693 /* PREFIX_VEX_0F3A44 */
ce2f5b3c 6694 {
592d1631
L
6695 { Bad_Opcode },
6696 { Bad_Opcode },
ff1982d5 6697 { "vpclmulqdq", { XM, Vex, EXx, PCLMUL }, 0 },
ce2f5b3c
L
6698 },
6699
6c30d220
L
6700 /* PREFIX_VEX_0F3A46 */
6701 {
6702 { Bad_Opcode },
6703 { Bad_Opcode },
6704 { VEX_LEN_TABLE (VEX_LEN_0F3A46_P_2) },
6705 },
6706
592a252b 6707 /* PREFIX_VEX_0F3A48 */
a683cc34
SP
6708 {
6709 { Bad_Opcode },
6710 { Bad_Opcode },
592a252b 6711 { VEX_W_TABLE (VEX_W_0F3A48_P_2) },
a683cc34
SP
6712 },
6713
592a252b 6714 /* PREFIX_VEX_0F3A49 */
a683cc34
SP
6715 {
6716 { Bad_Opcode },
6717 { Bad_Opcode },
592a252b 6718 { VEX_W_TABLE (VEX_W_0F3A49_P_2) },
a683cc34
SP
6719 },
6720
592a252b 6721 /* PREFIX_VEX_0F3A4A */
c0f3af97 6722 {
592d1631
L
6723 { Bad_Opcode },
6724 { Bad_Opcode },
592a252b 6725 { VEX_W_TABLE (VEX_W_0F3A4A_P_2) },
c0f3af97
L
6726 },
6727
592a252b 6728 /* PREFIX_VEX_0F3A4B */
c0f3af97 6729 {
592d1631
L
6730 { Bad_Opcode },
6731 { Bad_Opcode },
592a252b 6732 { VEX_W_TABLE (VEX_W_0F3A4B_P_2) },
c0f3af97
L
6733 },
6734
592a252b 6735 /* PREFIX_VEX_0F3A4C */
c0f3af97 6736 {
592d1631
L
6737 { Bad_Opcode },
6738 { Bad_Opcode },
6c30d220 6739 { VEX_W_TABLE (VEX_W_0F3A4C_P_2) },
c0f3af97
L
6740 },
6741
592a252b 6742 /* PREFIX_VEX_0F3A5C */
922d8de8 6743 {
592d1631
L
6744 { Bad_Opcode },
6745 { Bad_Opcode },
bf890a93 6746 { "vfmaddsubps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
922d8de8
DR
6747 },
6748
592a252b 6749 /* PREFIX_VEX_0F3A5D */
922d8de8 6750 {
592d1631
L
6751 { Bad_Opcode },
6752 { Bad_Opcode },
bf890a93 6753 { "vfmaddsubpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
922d8de8
DR
6754 },
6755
592a252b 6756 /* PREFIX_VEX_0F3A5E */
922d8de8 6757 {
592d1631
L
6758 { Bad_Opcode },
6759 { Bad_Opcode },
bf890a93 6760 { "vfmsubaddps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
922d8de8
DR
6761 },
6762
592a252b 6763 /* PREFIX_VEX_0F3A5F */
922d8de8 6764 {
592d1631
L
6765 { Bad_Opcode },
6766 { Bad_Opcode },
bf890a93 6767 { "vfmsubaddpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
922d8de8
DR
6768 },
6769
592a252b 6770 /* PREFIX_VEX_0F3A60 */
c0f3af97 6771 {
592d1631
L
6772 { Bad_Opcode },
6773 { Bad_Opcode },
592a252b 6774 { VEX_LEN_TABLE (VEX_LEN_0F3A60_P_2) },
592d1631 6775 { Bad_Opcode },
c0f3af97
L
6776 },
6777
592a252b 6778 /* PREFIX_VEX_0F3A61 */
c0f3af97 6779 {
592d1631
L
6780 { Bad_Opcode },
6781 { Bad_Opcode },
592a252b 6782 { VEX_LEN_TABLE (VEX_LEN_0F3A61_P_2) },
c0f3af97
L
6783 },
6784
592a252b 6785 /* PREFIX_VEX_0F3A62 */
c0f3af97 6786 {
592d1631
L
6787 { Bad_Opcode },
6788 { Bad_Opcode },
592a252b 6789 { VEX_LEN_TABLE (VEX_LEN_0F3A62_P_2) },
c0f3af97
L
6790 },
6791
592a252b 6792 /* PREFIX_VEX_0F3A63 */
c0f3af97 6793 {
592d1631
L
6794 { Bad_Opcode },
6795 { Bad_Opcode },
592a252b 6796 { VEX_LEN_TABLE (VEX_LEN_0F3A63_P_2) },
c0f3af97 6797 },
a5ff0eb2 6798
592a252b 6799 /* PREFIX_VEX_0F3A68 */
922d8de8 6800 {
592d1631
L
6801 { Bad_Opcode },
6802 { Bad_Opcode },
bf890a93 6803 { "vfmaddps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
922d8de8
DR
6804 },
6805
592a252b 6806 /* PREFIX_VEX_0F3A69 */
922d8de8 6807 {
592d1631
L
6808 { Bad_Opcode },
6809 { Bad_Opcode },
bf890a93 6810 { "vfmaddpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
922d8de8
DR
6811 },
6812
592a252b 6813 /* PREFIX_VEX_0F3A6A */
922d8de8 6814 {
592d1631
L
6815 { Bad_Opcode },
6816 { Bad_Opcode },
592a252b 6817 { VEX_LEN_TABLE (VEX_LEN_0F3A6A_P_2) },
922d8de8
DR
6818 },
6819
592a252b 6820 /* PREFIX_VEX_0F3A6B */
922d8de8 6821 {
592d1631
L
6822 { Bad_Opcode },
6823 { Bad_Opcode },
592a252b 6824 { VEX_LEN_TABLE (VEX_LEN_0F3A6B_P_2) },
922d8de8
DR
6825 },
6826
592a252b 6827 /* PREFIX_VEX_0F3A6C */
922d8de8 6828 {
592d1631
L
6829 { Bad_Opcode },
6830 { Bad_Opcode },
bf890a93 6831 { "vfmsubps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
922d8de8
DR
6832 },
6833
592a252b 6834 /* PREFIX_VEX_0F3A6D */
922d8de8 6835 {
592d1631
L
6836 { Bad_Opcode },
6837 { Bad_Opcode },
bf890a93 6838 { "vfmsubpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
922d8de8
DR
6839 },
6840
592a252b 6841 /* PREFIX_VEX_0F3A6E */
922d8de8 6842 {
592d1631
L
6843 { Bad_Opcode },
6844 { Bad_Opcode },
592a252b 6845 { VEX_LEN_TABLE (VEX_LEN_0F3A6E_P_2) },
922d8de8
DR
6846 },
6847
592a252b 6848 /* PREFIX_VEX_0F3A6F */
922d8de8 6849 {
592d1631
L
6850 { Bad_Opcode },
6851 { Bad_Opcode },
592a252b 6852 { VEX_LEN_TABLE (VEX_LEN_0F3A6F_P_2) },
922d8de8
DR
6853 },
6854
592a252b 6855 /* PREFIX_VEX_0F3A78 */
922d8de8 6856 {
592d1631
L
6857 { Bad_Opcode },
6858 { Bad_Opcode },
bf890a93 6859 { "vfnmaddps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
922d8de8
DR
6860 },
6861
592a252b 6862 /* PREFIX_VEX_0F3A79 */
922d8de8 6863 {
592d1631
L
6864 { Bad_Opcode },
6865 { Bad_Opcode },
bf890a93 6866 { "vfnmaddpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
922d8de8
DR
6867 },
6868
592a252b 6869 /* PREFIX_VEX_0F3A7A */
922d8de8 6870 {
592d1631
L
6871 { Bad_Opcode },
6872 { Bad_Opcode },
592a252b 6873 { VEX_LEN_TABLE (VEX_LEN_0F3A7A_P_2) },
922d8de8
DR
6874 },
6875
592a252b 6876 /* PREFIX_VEX_0F3A7B */
922d8de8 6877 {
592d1631
L
6878 { Bad_Opcode },
6879 { Bad_Opcode },
592a252b 6880 { VEX_LEN_TABLE (VEX_LEN_0F3A7B_P_2) },
922d8de8
DR
6881 },
6882
592a252b 6883 /* PREFIX_VEX_0F3A7C */
922d8de8 6884 {
592d1631
L
6885 { Bad_Opcode },
6886 { Bad_Opcode },
bf890a93 6887 { "vfnmsubps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
592d1631 6888 { Bad_Opcode },
922d8de8
DR
6889 },
6890
592a252b 6891 /* PREFIX_VEX_0F3A7D */
922d8de8 6892 {
592d1631
L
6893 { Bad_Opcode },
6894 { Bad_Opcode },
bf890a93 6895 { "vfnmsubpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
922d8de8
DR
6896 },
6897
592a252b 6898 /* PREFIX_VEX_0F3A7E */
922d8de8 6899 {
592d1631
L
6900 { Bad_Opcode },
6901 { Bad_Opcode },
592a252b 6902 { VEX_LEN_TABLE (VEX_LEN_0F3A7E_P_2) },
922d8de8
DR
6903 },
6904
592a252b 6905 /* PREFIX_VEX_0F3A7F */
922d8de8 6906 {
592d1631
L
6907 { Bad_Opcode },
6908 { Bad_Opcode },
592a252b 6909 { VEX_LEN_TABLE (VEX_LEN_0F3A7F_P_2) },
922d8de8
DR
6910 },
6911
48521003
IT
6912 /* PREFIX_VEX_0F3ACE */
6913 {
6914 { Bad_Opcode },
6915 { Bad_Opcode },
6916 { VEX_W_TABLE (VEX_W_0F3ACE_P_2) },
6917 },
6918
6919 /* PREFIX_VEX_0F3ACF */
6920 {
6921 { Bad_Opcode },
6922 { Bad_Opcode },
6923 { VEX_W_TABLE (VEX_W_0F3ACF_P_2) },
6924 },
6925
592a252b 6926 /* PREFIX_VEX_0F3ADF */
a5ff0eb2 6927 {
592d1631
L
6928 { Bad_Opcode },
6929 { Bad_Opcode },
592a252b 6930 { VEX_LEN_TABLE (VEX_LEN_0F3ADF_P_2) },
a5ff0eb2 6931 },
6c30d220
L
6932
6933 /* PREFIX_VEX_0F3AF0 */
6934 {
6935 { Bad_Opcode },
6936 { Bad_Opcode },
6937 { Bad_Opcode },
6938 { VEX_LEN_TABLE (VEX_LEN_0F3AF0_P_3) },
6939 },
43234a1e
L
6940
6941#define NEED_PREFIX_TABLE
6942#include "i386-dis-evex.h"
6943#undef NEED_PREFIX_TABLE
c0f3af97
L
6944};
6945
6946static const struct dis386 x86_64_table[][2] = {
6947 /* X86_64_06 */
6948 {
bf890a93 6949 { "pushP", { es }, 0 },
c0f3af97
L
6950 },
6951
6952 /* X86_64_07 */
6953 {
bf890a93 6954 { "popP", { es }, 0 },
c0f3af97
L
6955 },
6956
6957 /* X86_64_0D */
6958 {
bf890a93 6959 { "pushP", { cs }, 0 },
c0f3af97
L
6960 },
6961
6962 /* X86_64_16 */
6963 {
bf890a93 6964 { "pushP", { ss }, 0 },
c0f3af97
L
6965 },
6966
6967 /* X86_64_17 */
6968 {
bf890a93 6969 { "popP", { ss }, 0 },
c0f3af97
L
6970 },
6971
6972 /* X86_64_1E */
6973 {
bf890a93 6974 { "pushP", { ds }, 0 },
c0f3af97
L
6975 },
6976
6977 /* X86_64_1F */
6978 {
bf890a93 6979 { "popP", { ds }, 0 },
c0f3af97
L
6980 },
6981
6982 /* X86_64_27 */
6983 {
bf890a93 6984 { "daa", { XX }, 0 },
c0f3af97
L
6985 },
6986
6987 /* X86_64_2F */
6988 {
bf890a93 6989 { "das", { XX }, 0 },
c0f3af97
L
6990 },
6991
6992 /* X86_64_37 */
6993 {
bf890a93 6994 { "aaa", { XX }, 0 },
c0f3af97
L
6995 },
6996
6997 /* X86_64_3F */
6998 {
bf890a93 6999 { "aas", { XX }, 0 },
c0f3af97
L
7000 },
7001
7002 /* X86_64_60 */
7003 {
bf890a93 7004 { "pushaP", { XX }, 0 },
c0f3af97
L
7005 },
7006
7007 /* X86_64_61 */
7008 {
bf890a93 7009 { "popaP", { XX }, 0 },
c0f3af97
L
7010 },
7011
7012 /* X86_64_62 */
7013 {
7014 { MOD_TABLE (MOD_62_32BIT) },
43234a1e 7015 { EVEX_TABLE (EVEX_0F) },
c0f3af97
L
7016 },
7017
7018 /* X86_64_63 */
7019 {
bf890a93
IT
7020 { "arpl", { Ew, Gw }, 0 },
7021 { "movs{lq|xd}", { Gv, Ed }, 0 },
c0f3af97
L
7022 },
7023
7024 /* X86_64_6D */
7025 {
bf890a93
IT
7026 { "ins{R|}", { Yzr, indirDX }, 0 },
7027 { "ins{G|}", { Yzr, indirDX }, 0 },
c0f3af97
L
7028 },
7029
7030 /* X86_64_6F */
7031 {
bf890a93
IT
7032 { "outs{R|}", { indirDXr, Xz }, 0 },
7033 { "outs{G|}", { indirDXr, Xz }, 0 },
c0f3af97
L
7034 },
7035
d039fef3 7036 /* X86_64_82 */
8b89fe14 7037 {
de194d85 7038 /* Opcode 0x82 is an alias of opcode 0x80 in 32-bit mode. */
d039fef3 7039 { REG_TABLE (REG_80) },
8b89fe14
L
7040 },
7041
c0f3af97
L
7042 /* X86_64_9A */
7043 {
bf890a93 7044 { "Jcall{T|}", { Ap }, 0 },
c0f3af97
L
7045 },
7046
7047 /* X86_64_C4 */
7048 {
7049 { MOD_TABLE (MOD_C4_32BIT) },
7050 { VEX_C4_TABLE (VEX_0F) },
7051 },
7052
7053 /* X86_64_C5 */
7054 {
7055 { MOD_TABLE (MOD_C5_32BIT) },
7056 { VEX_C5_TABLE (VEX_0F) },
7057 },
7058
7059 /* X86_64_CE */
7060 {
bf890a93 7061 { "into", { XX }, 0 },
c0f3af97
L
7062 },
7063
7064 /* X86_64_D4 */
7065 {
bf890a93 7066 { "aam", { Ib }, 0 },
c0f3af97
L
7067 },
7068
7069 /* X86_64_D5 */
7070 {
bf890a93 7071 { "aad", { Ib }, 0 },
c0f3af97
L
7072 },
7073
a72d2af2
L
7074 /* X86_64_E8 */
7075 {
7076 { "callP", { Jv, BND }, 0 },
5db04b09 7077 { "call@", { Jv, BND }, 0 }
a72d2af2
L
7078 },
7079
7080 /* X86_64_E9 */
7081 {
7082 { "jmpP", { Jv, BND }, 0 },
5db04b09 7083 { "jmp@", { Jv, BND }, 0 }
a72d2af2
L
7084 },
7085
c0f3af97
L
7086 /* X86_64_EA */
7087 {
bf890a93 7088 { "Jjmp{T|}", { Ap }, 0 },
c0f3af97
L
7089 },
7090
7091 /* X86_64_0F01_REG_0 */
7092 {
bf890a93
IT
7093 { "sgdt{Q|IQ}", { M }, 0 },
7094 { "sgdt", { M }, 0 },
c0f3af97
L
7095 },
7096
7097 /* X86_64_0F01_REG_1 */
7098 {
bf890a93
IT
7099 { "sidt{Q|IQ}", { M }, 0 },
7100 { "sidt", { M }, 0 },
c0f3af97
L
7101 },
7102
7103 /* X86_64_0F01_REG_2 */
7104 {
bf890a93
IT
7105 { "lgdt{Q|Q}", { M }, 0 },
7106 { "lgdt", { M }, 0 },
c0f3af97
L
7107 },
7108
7109 /* X86_64_0F01_REG_3 */
7110 {
bf890a93
IT
7111 { "lidt{Q|Q}", { M }, 0 },
7112 { "lidt", { M }, 0 },
c0f3af97
L
7113 },
7114};
7115
7116static const struct dis386 three_byte_table[][256] = {
c1e679ec
DR
7117
7118 /* THREE_BYTE_0F38 */
c0f3af97
L
7119 {
7120 /* 00 */
507bd325
L
7121 { "pshufb", { MX, EM }, PREFIX_OPCODE },
7122 { "phaddw", { MX, EM }, PREFIX_OPCODE },
7123 { "phaddd", { MX, EM }, PREFIX_OPCODE },
7124 { "phaddsw", { MX, EM }, PREFIX_OPCODE },
7125 { "pmaddubsw", { MX, EM }, PREFIX_OPCODE },
7126 { "phsubw", { MX, EM }, PREFIX_OPCODE },
7127 { "phsubd", { MX, EM }, PREFIX_OPCODE },
7128 { "phsubsw", { MX, EM }, PREFIX_OPCODE },
c0f3af97 7129 /* 08 */
507bd325
L
7130 { "psignb", { MX, EM }, PREFIX_OPCODE },
7131 { "psignw", { MX, EM }, PREFIX_OPCODE },
7132 { "psignd", { MX, EM }, PREFIX_OPCODE },
7133 { "pmulhrsw", { MX, EM }, PREFIX_OPCODE },
592d1631
L
7134 { Bad_Opcode },
7135 { Bad_Opcode },
7136 { Bad_Opcode },
7137 { Bad_Opcode },
f88c9eb0
SP
7138 /* 10 */
7139 { PREFIX_TABLE (PREFIX_0F3810) },
592d1631
L
7140 { Bad_Opcode },
7141 { Bad_Opcode },
7142 { Bad_Opcode },
f88c9eb0
SP
7143 { PREFIX_TABLE (PREFIX_0F3814) },
7144 { PREFIX_TABLE (PREFIX_0F3815) },
592d1631 7145 { Bad_Opcode },
f88c9eb0
SP
7146 { PREFIX_TABLE (PREFIX_0F3817) },
7147 /* 18 */
592d1631
L
7148 { Bad_Opcode },
7149 { Bad_Opcode },
7150 { Bad_Opcode },
7151 { Bad_Opcode },
507bd325
L
7152 { "pabsb", { MX, EM }, PREFIX_OPCODE },
7153 { "pabsw", { MX, EM }, PREFIX_OPCODE },
7154 { "pabsd", { MX, EM }, PREFIX_OPCODE },
592d1631 7155 { Bad_Opcode },
f88c9eb0
SP
7156 /* 20 */
7157 { PREFIX_TABLE (PREFIX_0F3820) },
7158 { PREFIX_TABLE (PREFIX_0F3821) },
7159 { PREFIX_TABLE (PREFIX_0F3822) },
7160 { PREFIX_TABLE (PREFIX_0F3823) },
7161 { PREFIX_TABLE (PREFIX_0F3824) },
7162 { PREFIX_TABLE (PREFIX_0F3825) },
592d1631
L
7163 { Bad_Opcode },
7164 { Bad_Opcode },
f88c9eb0
SP
7165 /* 28 */
7166 { PREFIX_TABLE (PREFIX_0F3828) },
7167 { PREFIX_TABLE (PREFIX_0F3829) },
7168 { PREFIX_TABLE (PREFIX_0F382A) },
7169 { PREFIX_TABLE (PREFIX_0F382B) },
592d1631
L
7170 { Bad_Opcode },
7171 { Bad_Opcode },
7172 { Bad_Opcode },
7173 { Bad_Opcode },
f88c9eb0
SP
7174 /* 30 */
7175 { PREFIX_TABLE (PREFIX_0F3830) },
7176 { PREFIX_TABLE (PREFIX_0F3831) },
7177 { PREFIX_TABLE (PREFIX_0F3832) },
7178 { PREFIX_TABLE (PREFIX_0F3833) },
7179 { PREFIX_TABLE (PREFIX_0F3834) },
7180 { PREFIX_TABLE (PREFIX_0F3835) },
592d1631 7181 { Bad_Opcode },
f88c9eb0
SP
7182 { PREFIX_TABLE (PREFIX_0F3837) },
7183 /* 38 */
7184 { PREFIX_TABLE (PREFIX_0F3838) },
7185 { PREFIX_TABLE (PREFIX_0F3839) },
7186 { PREFIX_TABLE (PREFIX_0F383A) },
7187 { PREFIX_TABLE (PREFIX_0F383B) },
7188 { PREFIX_TABLE (PREFIX_0F383C) },
7189 { PREFIX_TABLE (PREFIX_0F383D) },
7190 { PREFIX_TABLE (PREFIX_0F383E) },
7191 { PREFIX_TABLE (PREFIX_0F383F) },
7192 /* 40 */
7193 { PREFIX_TABLE (PREFIX_0F3840) },
7194 { PREFIX_TABLE (PREFIX_0F3841) },
592d1631
L
7195 { Bad_Opcode },
7196 { Bad_Opcode },
7197 { Bad_Opcode },
7198 { Bad_Opcode },
7199 { Bad_Opcode },
7200 { Bad_Opcode },
f88c9eb0 7201 /* 48 */
592d1631
L
7202 { Bad_Opcode },
7203 { Bad_Opcode },
7204 { Bad_Opcode },
7205 { Bad_Opcode },
7206 { Bad_Opcode },
7207 { Bad_Opcode },
7208 { Bad_Opcode },
7209 { Bad_Opcode },
f88c9eb0 7210 /* 50 */
592d1631
L
7211 { Bad_Opcode },
7212 { Bad_Opcode },
7213 { Bad_Opcode },
7214 { Bad_Opcode },
7215 { Bad_Opcode },
7216 { Bad_Opcode },
7217 { Bad_Opcode },
7218 { Bad_Opcode },
f88c9eb0 7219 /* 58 */
592d1631
L
7220 { Bad_Opcode },
7221 { Bad_Opcode },
7222 { Bad_Opcode },
7223 { Bad_Opcode },
7224 { Bad_Opcode },
7225 { Bad_Opcode },
7226 { Bad_Opcode },
7227 { Bad_Opcode },
f88c9eb0 7228 /* 60 */
592d1631
L
7229 { Bad_Opcode },
7230 { Bad_Opcode },
7231 { Bad_Opcode },
7232 { Bad_Opcode },
7233 { Bad_Opcode },
7234 { Bad_Opcode },
7235 { Bad_Opcode },
7236 { Bad_Opcode },
f88c9eb0 7237 /* 68 */
592d1631
L
7238 { Bad_Opcode },
7239 { Bad_Opcode },
7240 { Bad_Opcode },
7241 { Bad_Opcode },
7242 { Bad_Opcode },
7243 { Bad_Opcode },
7244 { Bad_Opcode },
7245 { Bad_Opcode },
f88c9eb0 7246 /* 70 */
592d1631
L
7247 { Bad_Opcode },
7248 { Bad_Opcode },
7249 { Bad_Opcode },
7250 { Bad_Opcode },
7251 { Bad_Opcode },
7252 { Bad_Opcode },
7253 { Bad_Opcode },
7254 { Bad_Opcode },
f88c9eb0 7255 /* 78 */
592d1631
L
7256 { Bad_Opcode },
7257 { Bad_Opcode },
7258 { Bad_Opcode },
7259 { Bad_Opcode },
7260 { Bad_Opcode },
7261 { Bad_Opcode },
7262 { Bad_Opcode },
7263 { Bad_Opcode },
f88c9eb0
SP
7264 /* 80 */
7265 { PREFIX_TABLE (PREFIX_0F3880) },
7266 { PREFIX_TABLE (PREFIX_0F3881) },
6c30d220 7267 { PREFIX_TABLE (PREFIX_0F3882) },
592d1631
L
7268 { Bad_Opcode },
7269 { Bad_Opcode },
7270 { Bad_Opcode },
7271 { Bad_Opcode },
7272 { Bad_Opcode },
f88c9eb0 7273 /* 88 */
592d1631
L
7274 { Bad_Opcode },
7275 { Bad_Opcode },
7276 { Bad_Opcode },
7277 { Bad_Opcode },
7278 { Bad_Opcode },
7279 { Bad_Opcode },
7280 { Bad_Opcode },
7281 { Bad_Opcode },
f88c9eb0 7282 /* 90 */
592d1631
L
7283 { Bad_Opcode },
7284 { Bad_Opcode },
7285 { Bad_Opcode },
7286 { Bad_Opcode },
7287 { Bad_Opcode },
7288 { Bad_Opcode },
7289 { Bad_Opcode },
7290 { Bad_Opcode },
f88c9eb0 7291 /* 98 */
592d1631
L
7292 { Bad_Opcode },
7293 { Bad_Opcode },
7294 { Bad_Opcode },
7295 { Bad_Opcode },
7296 { Bad_Opcode },
7297 { Bad_Opcode },
7298 { Bad_Opcode },
7299 { Bad_Opcode },
f88c9eb0 7300 /* a0 */
592d1631
L
7301 { Bad_Opcode },
7302 { Bad_Opcode },
7303 { Bad_Opcode },
7304 { Bad_Opcode },
7305 { Bad_Opcode },
7306 { Bad_Opcode },
7307 { Bad_Opcode },
7308 { Bad_Opcode },
f88c9eb0 7309 /* a8 */
592d1631
L
7310 { Bad_Opcode },
7311 { Bad_Opcode },
7312 { Bad_Opcode },
7313 { Bad_Opcode },
7314 { Bad_Opcode },
7315 { Bad_Opcode },
7316 { Bad_Opcode },
7317 { Bad_Opcode },
f88c9eb0 7318 /* b0 */
592d1631
L
7319 { Bad_Opcode },
7320 { Bad_Opcode },
7321 { Bad_Opcode },
7322 { Bad_Opcode },
7323 { Bad_Opcode },
7324 { Bad_Opcode },
7325 { Bad_Opcode },
7326 { Bad_Opcode },
f88c9eb0 7327 /* b8 */
592d1631
L
7328 { Bad_Opcode },
7329 { Bad_Opcode },
7330 { Bad_Opcode },
7331 { Bad_Opcode },
7332 { Bad_Opcode },
7333 { Bad_Opcode },
7334 { Bad_Opcode },
7335 { Bad_Opcode },
f88c9eb0 7336 /* c0 */
592d1631
L
7337 { Bad_Opcode },
7338 { Bad_Opcode },
7339 { Bad_Opcode },
7340 { Bad_Opcode },
7341 { Bad_Opcode },
7342 { Bad_Opcode },
7343 { Bad_Opcode },
7344 { Bad_Opcode },
f88c9eb0 7345 /* c8 */
a0046408
L
7346 { PREFIX_TABLE (PREFIX_0F38C8) },
7347 { PREFIX_TABLE (PREFIX_0F38C9) },
7348 { PREFIX_TABLE (PREFIX_0F38CA) },
7349 { PREFIX_TABLE (PREFIX_0F38CB) },
7350 { PREFIX_TABLE (PREFIX_0F38CC) },
7351 { PREFIX_TABLE (PREFIX_0F38CD) },
592d1631 7352 { Bad_Opcode },
48521003 7353 { PREFIX_TABLE (PREFIX_0F38CF) },
f88c9eb0 7354 /* d0 */
592d1631
L
7355 { Bad_Opcode },
7356 { Bad_Opcode },
7357 { Bad_Opcode },
7358 { Bad_Opcode },
7359 { Bad_Opcode },
7360 { Bad_Opcode },
7361 { Bad_Opcode },
7362 { Bad_Opcode },
f88c9eb0 7363 /* d8 */
592d1631
L
7364 { Bad_Opcode },
7365 { Bad_Opcode },
7366 { Bad_Opcode },
f88c9eb0
SP
7367 { PREFIX_TABLE (PREFIX_0F38DB) },
7368 { PREFIX_TABLE (PREFIX_0F38DC) },
7369 { PREFIX_TABLE (PREFIX_0F38DD) },
7370 { PREFIX_TABLE (PREFIX_0F38DE) },
7371 { PREFIX_TABLE (PREFIX_0F38DF) },
7372 /* e0 */
592d1631
L
7373 { Bad_Opcode },
7374 { Bad_Opcode },
7375 { Bad_Opcode },
7376 { Bad_Opcode },
7377 { Bad_Opcode },
7378 { Bad_Opcode },
7379 { Bad_Opcode },
7380 { Bad_Opcode },
f88c9eb0 7381 /* e8 */
592d1631
L
7382 { Bad_Opcode },
7383 { Bad_Opcode },
7384 { Bad_Opcode },
7385 { Bad_Opcode },
7386 { Bad_Opcode },
7387 { Bad_Opcode },
7388 { Bad_Opcode },
7389 { Bad_Opcode },
f88c9eb0
SP
7390 /* f0 */
7391 { PREFIX_TABLE (PREFIX_0F38F0) },
7392 { PREFIX_TABLE (PREFIX_0F38F1) },
592d1631
L
7393 { Bad_Opcode },
7394 { Bad_Opcode },
7395 { Bad_Opcode },
603555e5 7396 { PREFIX_TABLE (PREFIX_0F38F5) },
e2e1fcde 7397 { PREFIX_TABLE (PREFIX_0F38F6) },
592d1631 7398 { Bad_Opcode },
f88c9eb0 7399 /* f8 */
592d1631
L
7400 { Bad_Opcode },
7401 { Bad_Opcode },
7402 { Bad_Opcode },
7403 { Bad_Opcode },
7404 { Bad_Opcode },
7405 { Bad_Opcode },
7406 { Bad_Opcode },
7407 { Bad_Opcode },
f88c9eb0
SP
7408 },
7409 /* THREE_BYTE_0F3A */
7410 {
7411 /* 00 */
592d1631
L
7412 { Bad_Opcode },
7413 { Bad_Opcode },
7414 { Bad_Opcode },
7415 { Bad_Opcode },
7416 { Bad_Opcode },
7417 { Bad_Opcode },
7418 { Bad_Opcode },
7419 { Bad_Opcode },
f88c9eb0
SP
7420 /* 08 */
7421 { PREFIX_TABLE (PREFIX_0F3A08) },
7422 { PREFIX_TABLE (PREFIX_0F3A09) },
7423 { PREFIX_TABLE (PREFIX_0F3A0A) },
7424 { PREFIX_TABLE (PREFIX_0F3A0B) },
7425 { PREFIX_TABLE (PREFIX_0F3A0C) },
7426 { PREFIX_TABLE (PREFIX_0F3A0D) },
7427 { PREFIX_TABLE (PREFIX_0F3A0E) },
507bd325 7428 { "palignr", { MX, EM, Ib }, PREFIX_OPCODE },
f88c9eb0 7429 /* 10 */
592d1631
L
7430 { Bad_Opcode },
7431 { Bad_Opcode },
7432 { Bad_Opcode },
7433 { Bad_Opcode },
f88c9eb0
SP
7434 { PREFIX_TABLE (PREFIX_0F3A14) },
7435 { PREFIX_TABLE (PREFIX_0F3A15) },
7436 { PREFIX_TABLE (PREFIX_0F3A16) },
7437 { PREFIX_TABLE (PREFIX_0F3A17) },
7438 /* 18 */
592d1631
L
7439 { Bad_Opcode },
7440 { Bad_Opcode },
7441 { Bad_Opcode },
7442 { Bad_Opcode },
7443 { Bad_Opcode },
7444 { Bad_Opcode },
7445 { Bad_Opcode },
7446 { Bad_Opcode },
f88c9eb0
SP
7447 /* 20 */
7448 { PREFIX_TABLE (PREFIX_0F3A20) },
7449 { PREFIX_TABLE (PREFIX_0F3A21) },
7450 { PREFIX_TABLE (PREFIX_0F3A22) },
592d1631
L
7451 { Bad_Opcode },
7452 { Bad_Opcode },
7453 { Bad_Opcode },
7454 { Bad_Opcode },
7455 { Bad_Opcode },
f88c9eb0 7456 /* 28 */
592d1631
L
7457 { Bad_Opcode },
7458 { Bad_Opcode },
7459 { Bad_Opcode },
7460 { Bad_Opcode },
7461 { Bad_Opcode },
7462 { Bad_Opcode },
7463 { Bad_Opcode },
7464 { Bad_Opcode },
f88c9eb0 7465 /* 30 */
592d1631
L
7466 { Bad_Opcode },
7467 { Bad_Opcode },
7468 { Bad_Opcode },
7469 { Bad_Opcode },
7470 { Bad_Opcode },
7471 { Bad_Opcode },
7472 { Bad_Opcode },
7473 { Bad_Opcode },
f88c9eb0 7474 /* 38 */
592d1631
L
7475 { Bad_Opcode },
7476 { Bad_Opcode },
7477 { Bad_Opcode },
7478 { Bad_Opcode },
7479 { Bad_Opcode },
7480 { Bad_Opcode },
7481 { Bad_Opcode },
7482 { Bad_Opcode },
f88c9eb0
SP
7483 /* 40 */
7484 { PREFIX_TABLE (PREFIX_0F3A40) },
7485 { PREFIX_TABLE (PREFIX_0F3A41) },
7486 { PREFIX_TABLE (PREFIX_0F3A42) },
592d1631 7487 { Bad_Opcode },
f88c9eb0 7488 { PREFIX_TABLE (PREFIX_0F3A44) },
592d1631
L
7489 { Bad_Opcode },
7490 { Bad_Opcode },
7491 { Bad_Opcode },
f88c9eb0 7492 /* 48 */
592d1631
L
7493 { Bad_Opcode },
7494 { Bad_Opcode },
7495 { Bad_Opcode },
7496 { Bad_Opcode },
7497 { Bad_Opcode },
7498 { Bad_Opcode },
7499 { Bad_Opcode },
7500 { Bad_Opcode },
f88c9eb0 7501 /* 50 */
592d1631
L
7502 { Bad_Opcode },
7503 { Bad_Opcode },
7504 { Bad_Opcode },
7505 { Bad_Opcode },
7506 { Bad_Opcode },
7507 { Bad_Opcode },
7508 { Bad_Opcode },
7509 { Bad_Opcode },
f88c9eb0 7510 /* 58 */
592d1631
L
7511 { Bad_Opcode },
7512 { Bad_Opcode },
7513 { Bad_Opcode },
7514 { Bad_Opcode },
7515 { Bad_Opcode },
7516 { Bad_Opcode },
7517 { Bad_Opcode },
7518 { Bad_Opcode },
f88c9eb0
SP
7519 /* 60 */
7520 { PREFIX_TABLE (PREFIX_0F3A60) },
7521 { PREFIX_TABLE (PREFIX_0F3A61) },
7522 { PREFIX_TABLE (PREFIX_0F3A62) },
7523 { PREFIX_TABLE (PREFIX_0F3A63) },
592d1631
L
7524 { Bad_Opcode },
7525 { Bad_Opcode },
7526 { Bad_Opcode },
7527 { Bad_Opcode },
f88c9eb0 7528 /* 68 */
592d1631
L
7529 { Bad_Opcode },
7530 { Bad_Opcode },
7531 { Bad_Opcode },
7532 { Bad_Opcode },
7533 { Bad_Opcode },
7534 { Bad_Opcode },
7535 { Bad_Opcode },
7536 { Bad_Opcode },
f88c9eb0 7537 /* 70 */
592d1631
L
7538 { Bad_Opcode },
7539 { Bad_Opcode },
7540 { Bad_Opcode },
7541 { Bad_Opcode },
7542 { Bad_Opcode },
7543 { Bad_Opcode },
7544 { Bad_Opcode },
7545 { Bad_Opcode },
f88c9eb0 7546 /* 78 */
592d1631
L
7547 { Bad_Opcode },
7548 { Bad_Opcode },
7549 { Bad_Opcode },
7550 { Bad_Opcode },
7551 { Bad_Opcode },
7552 { Bad_Opcode },
7553 { Bad_Opcode },
7554 { Bad_Opcode },
f88c9eb0 7555 /* 80 */
592d1631
L
7556 { Bad_Opcode },
7557 { Bad_Opcode },
7558 { Bad_Opcode },
7559 { Bad_Opcode },
7560 { Bad_Opcode },
7561 { Bad_Opcode },
7562 { Bad_Opcode },
7563 { Bad_Opcode },
f88c9eb0 7564 /* 88 */
592d1631
L
7565 { Bad_Opcode },
7566 { Bad_Opcode },
7567 { Bad_Opcode },
7568 { Bad_Opcode },
7569 { Bad_Opcode },
7570 { Bad_Opcode },
7571 { Bad_Opcode },
7572 { Bad_Opcode },
f88c9eb0 7573 /* 90 */
592d1631
L
7574 { Bad_Opcode },
7575 { Bad_Opcode },
7576 { Bad_Opcode },
7577 { Bad_Opcode },
7578 { Bad_Opcode },
7579 { Bad_Opcode },
7580 { Bad_Opcode },
7581 { Bad_Opcode },
f88c9eb0 7582 /* 98 */
592d1631
L
7583 { Bad_Opcode },
7584 { Bad_Opcode },
7585 { Bad_Opcode },
7586 { Bad_Opcode },
7587 { Bad_Opcode },
7588 { Bad_Opcode },
7589 { Bad_Opcode },
7590 { Bad_Opcode },
f88c9eb0 7591 /* a0 */
592d1631
L
7592 { Bad_Opcode },
7593 { Bad_Opcode },
7594 { Bad_Opcode },
7595 { Bad_Opcode },
7596 { Bad_Opcode },
7597 { Bad_Opcode },
7598 { Bad_Opcode },
7599 { Bad_Opcode },
f88c9eb0 7600 /* a8 */
592d1631
L
7601 { Bad_Opcode },
7602 { Bad_Opcode },
7603 { Bad_Opcode },
7604 { Bad_Opcode },
7605 { Bad_Opcode },
7606 { Bad_Opcode },
7607 { Bad_Opcode },
7608 { Bad_Opcode },
f88c9eb0 7609 /* b0 */
592d1631
L
7610 { Bad_Opcode },
7611 { Bad_Opcode },
7612 { Bad_Opcode },
7613 { Bad_Opcode },
7614 { Bad_Opcode },
7615 { Bad_Opcode },
7616 { Bad_Opcode },
7617 { Bad_Opcode },
f88c9eb0 7618 /* b8 */
592d1631
L
7619 { Bad_Opcode },
7620 { Bad_Opcode },
7621 { Bad_Opcode },
7622 { Bad_Opcode },
7623 { Bad_Opcode },
7624 { Bad_Opcode },
7625 { Bad_Opcode },
7626 { Bad_Opcode },
f88c9eb0 7627 /* c0 */
592d1631
L
7628 { Bad_Opcode },
7629 { Bad_Opcode },
7630 { Bad_Opcode },
7631 { Bad_Opcode },
7632 { Bad_Opcode },
7633 { Bad_Opcode },
7634 { Bad_Opcode },
7635 { Bad_Opcode },
f88c9eb0 7636 /* c8 */
592d1631
L
7637 { Bad_Opcode },
7638 { Bad_Opcode },
7639 { Bad_Opcode },
7640 { Bad_Opcode },
a0046408 7641 { PREFIX_TABLE (PREFIX_0F3ACC) },
592d1631 7642 { Bad_Opcode },
48521003
IT
7643 { PREFIX_TABLE (PREFIX_0F3ACE) },
7644 { PREFIX_TABLE (PREFIX_0F3ACF) },
f88c9eb0 7645 /* d0 */
592d1631
L
7646 { Bad_Opcode },
7647 { Bad_Opcode },
7648 { Bad_Opcode },
7649 { Bad_Opcode },
7650 { Bad_Opcode },
7651 { Bad_Opcode },
7652 { Bad_Opcode },
7653 { Bad_Opcode },
f88c9eb0 7654 /* d8 */
592d1631
L
7655 { Bad_Opcode },
7656 { Bad_Opcode },
7657 { Bad_Opcode },
7658 { Bad_Opcode },
7659 { Bad_Opcode },
7660 { Bad_Opcode },
7661 { Bad_Opcode },
f88c9eb0
SP
7662 { PREFIX_TABLE (PREFIX_0F3ADF) },
7663 /* e0 */
592d1631
L
7664 { Bad_Opcode },
7665 { Bad_Opcode },
7666 { Bad_Opcode },
7667 { Bad_Opcode },
7668 { Bad_Opcode },
592d1631
L
7669 { Bad_Opcode },
7670 { Bad_Opcode },
7671 { Bad_Opcode },
85f10a01 7672 /* e8 */
592d1631
L
7673 { Bad_Opcode },
7674 { Bad_Opcode },
7675 { Bad_Opcode },
7676 { Bad_Opcode },
7677 { Bad_Opcode },
7678 { Bad_Opcode },
7679 { Bad_Opcode },
7680 { Bad_Opcode },
85f10a01 7681 /* f0 */
592d1631
L
7682 { Bad_Opcode },
7683 { Bad_Opcode },
7684 { Bad_Opcode },
7685 { Bad_Opcode },
7686 { Bad_Opcode },
7687 { Bad_Opcode },
7688 { Bad_Opcode },
7689 { Bad_Opcode },
85f10a01 7690 /* f8 */
592d1631
L
7691 { Bad_Opcode },
7692 { Bad_Opcode },
7693 { Bad_Opcode },
7694 { Bad_Opcode },
7695 { Bad_Opcode },
7696 { Bad_Opcode },
7697 { Bad_Opcode },
7698 { Bad_Opcode },
85f10a01 7699 },
f88c9eb0
SP
7700};
7701
7702static const struct dis386 xop_table[][256] = {
5dd85c99 7703 /* XOP_08 */
85f10a01
MM
7704 {
7705 /* 00 */
592d1631
L
7706 { Bad_Opcode },
7707 { Bad_Opcode },
7708 { Bad_Opcode },
7709 { Bad_Opcode },
7710 { Bad_Opcode },
7711 { Bad_Opcode },
7712 { Bad_Opcode },
7713 { Bad_Opcode },
85f10a01 7714 /* 08 */
592d1631
L
7715 { Bad_Opcode },
7716 { Bad_Opcode },
7717 { Bad_Opcode },
7718 { Bad_Opcode },
7719 { Bad_Opcode },
7720 { Bad_Opcode },
7721 { Bad_Opcode },
7722 { Bad_Opcode },
85f10a01 7723 /* 10 */
3929df09 7724 { Bad_Opcode },
592d1631
L
7725 { Bad_Opcode },
7726 { Bad_Opcode },
7727 { Bad_Opcode },
7728 { Bad_Opcode },
7729 { Bad_Opcode },
7730 { Bad_Opcode },
7731 { Bad_Opcode },
85f10a01 7732 /* 18 */
592d1631
L
7733 { Bad_Opcode },
7734 { Bad_Opcode },
7735 { Bad_Opcode },
7736 { Bad_Opcode },
7737 { Bad_Opcode },
7738 { Bad_Opcode },
7739 { Bad_Opcode },
7740 { Bad_Opcode },
85f10a01 7741 /* 20 */
592d1631
L
7742 { Bad_Opcode },
7743 { Bad_Opcode },
7744 { Bad_Opcode },
7745 { Bad_Opcode },
7746 { Bad_Opcode },
7747 { Bad_Opcode },
7748 { Bad_Opcode },
7749 { Bad_Opcode },
85f10a01 7750 /* 28 */
592d1631
L
7751 { Bad_Opcode },
7752 { Bad_Opcode },
7753 { Bad_Opcode },
7754 { Bad_Opcode },
7755 { Bad_Opcode },
7756 { Bad_Opcode },
7757 { Bad_Opcode },
7758 { Bad_Opcode },
c0f3af97 7759 /* 30 */
592d1631
L
7760 { Bad_Opcode },
7761 { Bad_Opcode },
7762 { Bad_Opcode },
7763 { Bad_Opcode },
7764 { Bad_Opcode },
7765 { Bad_Opcode },
7766 { Bad_Opcode },
7767 { Bad_Opcode },
c0f3af97 7768 /* 38 */
592d1631
L
7769 { Bad_Opcode },
7770 { Bad_Opcode },
7771 { Bad_Opcode },
7772 { Bad_Opcode },
7773 { Bad_Opcode },
7774 { Bad_Opcode },
7775 { Bad_Opcode },
7776 { Bad_Opcode },
c0f3af97 7777 /* 40 */
592d1631
L
7778 { Bad_Opcode },
7779 { Bad_Opcode },
7780 { Bad_Opcode },
7781 { Bad_Opcode },
7782 { Bad_Opcode },
7783 { Bad_Opcode },
7784 { Bad_Opcode },
7785 { Bad_Opcode },
85f10a01 7786 /* 48 */
592d1631
L
7787 { Bad_Opcode },
7788 { Bad_Opcode },
7789 { Bad_Opcode },
7790 { Bad_Opcode },
7791 { Bad_Opcode },
7792 { Bad_Opcode },
7793 { Bad_Opcode },
7794 { Bad_Opcode },
c0f3af97 7795 /* 50 */
592d1631
L
7796 { Bad_Opcode },
7797 { Bad_Opcode },
7798 { Bad_Opcode },
7799 { Bad_Opcode },
7800 { Bad_Opcode },
7801 { Bad_Opcode },
7802 { Bad_Opcode },
7803 { Bad_Opcode },
85f10a01 7804 /* 58 */
592d1631
L
7805 { Bad_Opcode },
7806 { Bad_Opcode },
7807 { Bad_Opcode },
7808 { Bad_Opcode },
7809 { Bad_Opcode },
7810 { Bad_Opcode },
7811 { Bad_Opcode },
7812 { Bad_Opcode },
c1e679ec 7813 /* 60 */
592d1631
L
7814 { Bad_Opcode },
7815 { Bad_Opcode },
7816 { Bad_Opcode },
7817 { Bad_Opcode },
7818 { Bad_Opcode },
7819 { Bad_Opcode },
7820 { Bad_Opcode },
7821 { Bad_Opcode },
c0f3af97 7822 /* 68 */
592d1631
L
7823 { Bad_Opcode },
7824 { Bad_Opcode },
7825 { Bad_Opcode },
7826 { Bad_Opcode },
7827 { Bad_Opcode },
7828 { Bad_Opcode },
7829 { Bad_Opcode },
7830 { Bad_Opcode },
85f10a01 7831 /* 70 */
592d1631
L
7832 { Bad_Opcode },
7833 { Bad_Opcode },
7834 { Bad_Opcode },
7835 { Bad_Opcode },
7836 { Bad_Opcode },
7837 { Bad_Opcode },
7838 { Bad_Opcode },
7839 { Bad_Opcode },
85f10a01 7840 /* 78 */
592d1631
L
7841 { Bad_Opcode },
7842 { Bad_Opcode },
7843 { Bad_Opcode },
7844 { Bad_Opcode },
7845 { Bad_Opcode },
7846 { Bad_Opcode },
7847 { Bad_Opcode },
7848 { Bad_Opcode },
85f10a01 7849 /* 80 */
592d1631
L
7850 { Bad_Opcode },
7851 { Bad_Opcode },
7852 { Bad_Opcode },
7853 { Bad_Opcode },
7854 { Bad_Opcode },
bf890a93
IT
7855 { "vpmacssww", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
7856 { "vpmacsswd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
7857 { "vpmacssdql", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
5dd85c99 7858 /* 88 */
592d1631
L
7859 { Bad_Opcode },
7860 { Bad_Opcode },
7861 { Bad_Opcode },
7862 { Bad_Opcode },
7863 { Bad_Opcode },
7864 { Bad_Opcode },
bf890a93
IT
7865 { "vpmacssdd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
7866 { "vpmacssdqh", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
5dd85c99 7867 /* 90 */
592d1631
L
7868 { Bad_Opcode },
7869 { Bad_Opcode },
7870 { Bad_Opcode },
7871 { Bad_Opcode },
7872 { Bad_Opcode },
bf890a93
IT
7873 { "vpmacsww", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
7874 { "vpmacswd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
7875 { "vpmacsdql", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
5dd85c99 7876 /* 98 */
592d1631
L
7877 { Bad_Opcode },
7878 { Bad_Opcode },
7879 { Bad_Opcode },
7880 { Bad_Opcode },
7881 { Bad_Opcode },
7882 { Bad_Opcode },
bf890a93
IT
7883 { "vpmacsdd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
7884 { "vpmacsdqh", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
5dd85c99 7885 /* a0 */
592d1631
L
7886 { Bad_Opcode },
7887 { Bad_Opcode },
bf890a93
IT
7888 { "vpcmov", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
7889 { "vpperm", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
592d1631
L
7890 { Bad_Opcode },
7891 { Bad_Opcode },
bf890a93 7892 { "vpmadcsswd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
592d1631 7893 { Bad_Opcode },
5dd85c99 7894 /* a8 */
592d1631
L
7895 { Bad_Opcode },
7896 { Bad_Opcode },
7897 { Bad_Opcode },
7898 { Bad_Opcode },
7899 { Bad_Opcode },
7900 { Bad_Opcode },
7901 { Bad_Opcode },
7902 { Bad_Opcode },
5dd85c99 7903 /* b0 */
592d1631
L
7904 { Bad_Opcode },
7905 { Bad_Opcode },
7906 { Bad_Opcode },
7907 { Bad_Opcode },
7908 { Bad_Opcode },
7909 { Bad_Opcode },
bf890a93 7910 { "vpmadcswd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
592d1631 7911 { Bad_Opcode },
5dd85c99 7912 /* b8 */
592d1631
L
7913 { Bad_Opcode },
7914 { Bad_Opcode },
7915 { Bad_Opcode },
7916 { Bad_Opcode },
7917 { Bad_Opcode },
7918 { Bad_Opcode },
7919 { Bad_Opcode },
7920 { Bad_Opcode },
5dd85c99 7921 /* c0 */
bf890a93
IT
7922 { "vprotb", { XM, Vex_2src_1, Ib }, 0 },
7923 { "vprotw", { XM, Vex_2src_1, Ib }, 0 },
7924 { "vprotd", { XM, Vex_2src_1, Ib }, 0 },
7925 { "vprotq", { XM, Vex_2src_1, Ib }, 0 },
592d1631
L
7926 { Bad_Opcode },
7927 { Bad_Opcode },
7928 { Bad_Opcode },
7929 { Bad_Opcode },
5dd85c99 7930 /* c8 */
592d1631
L
7931 { Bad_Opcode },
7932 { Bad_Opcode },
7933 { Bad_Opcode },
7934 { Bad_Opcode },
ff688e1f
L
7935 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_CC) },
7936 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_CD) },
7937 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_CE) },
7938 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_CF) },
5dd85c99 7939 /* d0 */
592d1631
L
7940 { Bad_Opcode },
7941 { Bad_Opcode },
7942 { Bad_Opcode },
7943 { Bad_Opcode },
7944 { Bad_Opcode },
7945 { Bad_Opcode },
7946 { Bad_Opcode },
7947 { Bad_Opcode },
5dd85c99 7948 /* d8 */
592d1631
L
7949 { Bad_Opcode },
7950 { Bad_Opcode },
7951 { Bad_Opcode },
7952 { Bad_Opcode },
7953 { Bad_Opcode },
7954 { Bad_Opcode },
7955 { Bad_Opcode },
7956 { Bad_Opcode },
5dd85c99 7957 /* e0 */
592d1631
L
7958 { Bad_Opcode },
7959 { Bad_Opcode },
7960 { Bad_Opcode },
7961 { Bad_Opcode },
7962 { Bad_Opcode },
7963 { Bad_Opcode },
7964 { Bad_Opcode },
7965 { Bad_Opcode },
5dd85c99 7966 /* e8 */
592d1631
L
7967 { Bad_Opcode },
7968 { Bad_Opcode },
7969 { Bad_Opcode },
7970 { Bad_Opcode },
ff688e1f
L
7971 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_EC) },
7972 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_ED) },
7973 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_EE) },
7974 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_EF) },
5dd85c99 7975 /* f0 */
592d1631
L
7976 { Bad_Opcode },
7977 { Bad_Opcode },
7978 { Bad_Opcode },
7979 { Bad_Opcode },
7980 { Bad_Opcode },
7981 { Bad_Opcode },
7982 { Bad_Opcode },
7983 { Bad_Opcode },
5dd85c99 7984 /* f8 */
592d1631
L
7985 { Bad_Opcode },
7986 { Bad_Opcode },
7987 { Bad_Opcode },
7988 { Bad_Opcode },
7989 { Bad_Opcode },
7990 { Bad_Opcode },
7991 { Bad_Opcode },
7992 { Bad_Opcode },
5dd85c99
SP
7993 },
7994 /* XOP_09 */
7995 {
7996 /* 00 */
592d1631 7997 { Bad_Opcode },
2a2a0f38
QN
7998 { REG_TABLE (REG_XOP_TBM_01) },
7999 { REG_TABLE (REG_XOP_TBM_02) },
592d1631
L
8000 { Bad_Opcode },
8001 { Bad_Opcode },
8002 { Bad_Opcode },
8003 { Bad_Opcode },
8004 { Bad_Opcode },
5dd85c99 8005 /* 08 */
592d1631
L
8006 { Bad_Opcode },
8007 { Bad_Opcode },
8008 { Bad_Opcode },
8009 { Bad_Opcode },
8010 { Bad_Opcode },
8011 { Bad_Opcode },
8012 { Bad_Opcode },
8013 { Bad_Opcode },
5dd85c99 8014 /* 10 */
592d1631
L
8015 { Bad_Opcode },
8016 { Bad_Opcode },
5dd85c99 8017 { REG_TABLE (REG_XOP_LWPCB) },
592d1631
L
8018 { Bad_Opcode },
8019 { Bad_Opcode },
8020 { Bad_Opcode },
8021 { Bad_Opcode },
8022 { Bad_Opcode },
5dd85c99 8023 /* 18 */
592d1631
L
8024 { Bad_Opcode },
8025 { Bad_Opcode },
8026 { Bad_Opcode },
8027 { Bad_Opcode },
8028 { Bad_Opcode },
8029 { Bad_Opcode },
8030 { Bad_Opcode },
8031 { Bad_Opcode },
5dd85c99 8032 /* 20 */
592d1631
L
8033 { Bad_Opcode },
8034 { Bad_Opcode },
8035 { Bad_Opcode },
8036 { Bad_Opcode },
8037 { Bad_Opcode },
8038 { Bad_Opcode },
8039 { Bad_Opcode },
8040 { Bad_Opcode },
5dd85c99 8041 /* 28 */
592d1631
L
8042 { Bad_Opcode },
8043 { Bad_Opcode },
8044 { Bad_Opcode },
8045 { Bad_Opcode },
8046 { Bad_Opcode },
8047 { Bad_Opcode },
8048 { Bad_Opcode },
8049 { Bad_Opcode },
5dd85c99 8050 /* 30 */
592d1631
L
8051 { Bad_Opcode },
8052 { Bad_Opcode },
8053 { Bad_Opcode },
8054 { Bad_Opcode },
8055 { Bad_Opcode },
8056 { Bad_Opcode },
8057 { Bad_Opcode },
8058 { Bad_Opcode },
5dd85c99 8059 /* 38 */
592d1631
L
8060 { Bad_Opcode },
8061 { Bad_Opcode },
8062 { Bad_Opcode },
8063 { Bad_Opcode },
8064 { Bad_Opcode },
8065 { Bad_Opcode },
8066 { Bad_Opcode },
8067 { Bad_Opcode },
5dd85c99 8068 /* 40 */
592d1631
L
8069 { Bad_Opcode },
8070 { Bad_Opcode },
8071 { Bad_Opcode },
8072 { Bad_Opcode },
8073 { Bad_Opcode },
8074 { Bad_Opcode },
8075 { Bad_Opcode },
8076 { Bad_Opcode },
5dd85c99 8077 /* 48 */
592d1631
L
8078 { Bad_Opcode },
8079 { Bad_Opcode },
8080 { Bad_Opcode },
8081 { Bad_Opcode },
8082 { Bad_Opcode },
8083 { Bad_Opcode },
8084 { Bad_Opcode },
8085 { Bad_Opcode },
5dd85c99 8086 /* 50 */
592d1631
L
8087 { Bad_Opcode },
8088 { Bad_Opcode },
8089 { Bad_Opcode },
8090 { Bad_Opcode },
8091 { Bad_Opcode },
8092 { Bad_Opcode },
8093 { Bad_Opcode },
8094 { Bad_Opcode },
5dd85c99 8095 /* 58 */
592d1631
L
8096 { Bad_Opcode },
8097 { Bad_Opcode },
8098 { Bad_Opcode },
8099 { Bad_Opcode },
8100 { Bad_Opcode },
8101 { Bad_Opcode },
8102 { Bad_Opcode },
8103 { Bad_Opcode },
5dd85c99 8104 /* 60 */
592d1631
L
8105 { Bad_Opcode },
8106 { Bad_Opcode },
8107 { Bad_Opcode },
8108 { Bad_Opcode },
8109 { Bad_Opcode },
8110 { Bad_Opcode },
8111 { Bad_Opcode },
8112 { Bad_Opcode },
5dd85c99 8113 /* 68 */
592d1631
L
8114 { Bad_Opcode },
8115 { Bad_Opcode },
8116 { Bad_Opcode },
8117 { Bad_Opcode },
8118 { Bad_Opcode },
8119 { Bad_Opcode },
8120 { Bad_Opcode },
8121 { Bad_Opcode },
5dd85c99 8122 /* 70 */
592d1631
L
8123 { Bad_Opcode },
8124 { Bad_Opcode },
8125 { Bad_Opcode },
8126 { Bad_Opcode },
8127 { Bad_Opcode },
8128 { Bad_Opcode },
8129 { Bad_Opcode },
8130 { Bad_Opcode },
5dd85c99 8131 /* 78 */
592d1631
L
8132 { Bad_Opcode },
8133 { Bad_Opcode },
8134 { Bad_Opcode },
8135 { Bad_Opcode },
8136 { Bad_Opcode },
8137 { Bad_Opcode },
8138 { Bad_Opcode },
8139 { Bad_Opcode },
5dd85c99 8140 /* 80 */
592a252b
L
8141 { VEX_LEN_TABLE (VEX_LEN_0FXOP_09_80) },
8142 { VEX_LEN_TABLE (VEX_LEN_0FXOP_09_81) },
bf890a93
IT
8143 { "vfrczss", { XM, EXd }, 0 },
8144 { "vfrczsd", { XM, EXq }, 0 },
592d1631
L
8145 { Bad_Opcode },
8146 { Bad_Opcode },
8147 { Bad_Opcode },
8148 { Bad_Opcode },
5dd85c99 8149 /* 88 */
592d1631
L
8150 { Bad_Opcode },
8151 { Bad_Opcode },
8152 { Bad_Opcode },
8153 { Bad_Opcode },
8154 { Bad_Opcode },
8155 { Bad_Opcode },
8156 { Bad_Opcode },
8157 { Bad_Opcode },
5dd85c99 8158 /* 90 */
bf890a93
IT
8159 { "vprotb", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8160 { "vprotw", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8161 { "vprotd", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8162 { "vprotq", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8163 { "vpshlb", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8164 { "vpshlw", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8165 { "vpshld", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8166 { "vpshlq", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
5dd85c99 8167 /* 98 */
bf890a93
IT
8168 { "vpshab", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8169 { "vpshaw", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8170 { "vpshad", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8171 { "vpshaq", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
592d1631
L
8172 { Bad_Opcode },
8173 { Bad_Opcode },
8174 { Bad_Opcode },
8175 { Bad_Opcode },
5dd85c99 8176 /* a0 */
592d1631
L
8177 { Bad_Opcode },
8178 { Bad_Opcode },
8179 { Bad_Opcode },
8180 { Bad_Opcode },
8181 { Bad_Opcode },
8182 { Bad_Opcode },
8183 { Bad_Opcode },
8184 { Bad_Opcode },
5dd85c99 8185 /* a8 */
592d1631
L
8186 { Bad_Opcode },
8187 { Bad_Opcode },
8188 { Bad_Opcode },
8189 { Bad_Opcode },
8190 { Bad_Opcode },
8191 { Bad_Opcode },
8192 { Bad_Opcode },
8193 { Bad_Opcode },
5dd85c99 8194 /* b0 */
592d1631
L
8195 { Bad_Opcode },
8196 { Bad_Opcode },
8197 { Bad_Opcode },
8198 { Bad_Opcode },
8199 { Bad_Opcode },
8200 { Bad_Opcode },
8201 { Bad_Opcode },
8202 { Bad_Opcode },
5dd85c99 8203 /* b8 */
592d1631
L
8204 { Bad_Opcode },
8205 { Bad_Opcode },
8206 { Bad_Opcode },
8207 { Bad_Opcode },
8208 { Bad_Opcode },
8209 { Bad_Opcode },
8210 { Bad_Opcode },
8211 { Bad_Opcode },
5dd85c99 8212 /* c0 */
592d1631 8213 { Bad_Opcode },
bf890a93
IT
8214 { "vphaddbw", { XM, EXxmm }, 0 },
8215 { "vphaddbd", { XM, EXxmm }, 0 },
8216 { "vphaddbq", { XM, EXxmm }, 0 },
592d1631
L
8217 { Bad_Opcode },
8218 { Bad_Opcode },
bf890a93
IT
8219 { "vphaddwd", { XM, EXxmm }, 0 },
8220 { "vphaddwq", { XM, EXxmm }, 0 },
5dd85c99 8221 /* c8 */
592d1631
L
8222 { Bad_Opcode },
8223 { Bad_Opcode },
8224 { Bad_Opcode },
bf890a93 8225 { "vphadddq", { XM, EXxmm }, 0 },
592d1631
L
8226 { Bad_Opcode },
8227 { Bad_Opcode },
8228 { Bad_Opcode },
8229 { Bad_Opcode },
5dd85c99 8230 /* d0 */
592d1631 8231 { Bad_Opcode },
bf890a93
IT
8232 { "vphaddubw", { XM, EXxmm }, 0 },
8233 { "vphaddubd", { XM, EXxmm }, 0 },
8234 { "vphaddubq", { XM, EXxmm }, 0 },
592d1631
L
8235 { Bad_Opcode },
8236 { Bad_Opcode },
bf890a93
IT
8237 { "vphadduwd", { XM, EXxmm }, 0 },
8238 { "vphadduwq", { XM, EXxmm }, 0 },
5dd85c99 8239 /* d8 */
592d1631
L
8240 { Bad_Opcode },
8241 { Bad_Opcode },
8242 { Bad_Opcode },
bf890a93 8243 { "vphaddudq", { XM, EXxmm }, 0 },
592d1631
L
8244 { Bad_Opcode },
8245 { Bad_Opcode },
8246 { Bad_Opcode },
8247 { Bad_Opcode },
5dd85c99 8248 /* e0 */
592d1631 8249 { Bad_Opcode },
bf890a93
IT
8250 { "vphsubbw", { XM, EXxmm }, 0 },
8251 { "vphsubwd", { XM, EXxmm }, 0 },
8252 { "vphsubdq", { XM, EXxmm }, 0 },
592d1631
L
8253 { Bad_Opcode },
8254 { Bad_Opcode },
8255 { Bad_Opcode },
8256 { Bad_Opcode },
4e7d34a6 8257 /* e8 */
592d1631
L
8258 { Bad_Opcode },
8259 { Bad_Opcode },
8260 { Bad_Opcode },
8261 { Bad_Opcode },
8262 { Bad_Opcode },
8263 { Bad_Opcode },
8264 { Bad_Opcode },
8265 { Bad_Opcode },
4e7d34a6 8266 /* f0 */
592d1631
L
8267 { Bad_Opcode },
8268 { Bad_Opcode },
8269 { Bad_Opcode },
8270 { Bad_Opcode },
8271 { Bad_Opcode },
8272 { Bad_Opcode },
8273 { Bad_Opcode },
8274 { Bad_Opcode },
4e7d34a6 8275 /* f8 */
592d1631
L
8276 { Bad_Opcode },
8277 { Bad_Opcode },
8278 { Bad_Opcode },
8279 { Bad_Opcode },
8280 { Bad_Opcode },
8281 { Bad_Opcode },
8282 { Bad_Opcode },
8283 { Bad_Opcode },
4e7d34a6 8284 },
f88c9eb0 8285 /* XOP_0A */
4e7d34a6
L
8286 {
8287 /* 00 */
592d1631
L
8288 { Bad_Opcode },
8289 { Bad_Opcode },
8290 { Bad_Opcode },
8291 { Bad_Opcode },
8292 { Bad_Opcode },
8293 { Bad_Opcode },
8294 { Bad_Opcode },
8295 { Bad_Opcode },
4e7d34a6 8296 /* 08 */
592d1631
L
8297 { Bad_Opcode },
8298 { Bad_Opcode },
8299 { Bad_Opcode },
8300 { Bad_Opcode },
8301 { Bad_Opcode },
8302 { Bad_Opcode },
8303 { Bad_Opcode },
8304 { Bad_Opcode },
4e7d34a6 8305 /* 10 */
bf890a93 8306 { "bextr", { Gv, Ev, Iq }, 0 },
592d1631 8307 { Bad_Opcode },
f88c9eb0 8308 { REG_TABLE (REG_XOP_LWP) },
592d1631
L
8309 { Bad_Opcode },
8310 { Bad_Opcode },
8311 { Bad_Opcode },
8312 { Bad_Opcode },
8313 { Bad_Opcode },
4e7d34a6 8314 /* 18 */
592d1631
L
8315 { Bad_Opcode },
8316 { Bad_Opcode },
8317 { Bad_Opcode },
8318 { Bad_Opcode },
8319 { Bad_Opcode },
8320 { Bad_Opcode },
8321 { Bad_Opcode },
8322 { Bad_Opcode },
4e7d34a6 8323 /* 20 */
592d1631
L
8324 { Bad_Opcode },
8325 { Bad_Opcode },
8326 { Bad_Opcode },
8327 { Bad_Opcode },
8328 { Bad_Opcode },
8329 { Bad_Opcode },
8330 { Bad_Opcode },
8331 { Bad_Opcode },
4e7d34a6 8332 /* 28 */
592d1631
L
8333 { Bad_Opcode },
8334 { Bad_Opcode },
8335 { Bad_Opcode },
8336 { Bad_Opcode },
8337 { Bad_Opcode },
8338 { Bad_Opcode },
8339 { Bad_Opcode },
8340 { Bad_Opcode },
4e7d34a6 8341 /* 30 */
592d1631
L
8342 { Bad_Opcode },
8343 { Bad_Opcode },
8344 { Bad_Opcode },
8345 { Bad_Opcode },
8346 { Bad_Opcode },
8347 { Bad_Opcode },
8348 { Bad_Opcode },
8349 { Bad_Opcode },
c0f3af97 8350 /* 38 */
592d1631
L
8351 { Bad_Opcode },
8352 { Bad_Opcode },
8353 { Bad_Opcode },
8354 { Bad_Opcode },
8355 { Bad_Opcode },
8356 { Bad_Opcode },
8357 { Bad_Opcode },
8358 { Bad_Opcode },
c0f3af97 8359 /* 40 */
592d1631
L
8360 { Bad_Opcode },
8361 { Bad_Opcode },
8362 { Bad_Opcode },
8363 { Bad_Opcode },
8364 { Bad_Opcode },
8365 { Bad_Opcode },
8366 { Bad_Opcode },
8367 { Bad_Opcode },
c1e679ec 8368 /* 48 */
592d1631
L
8369 { Bad_Opcode },
8370 { Bad_Opcode },
8371 { Bad_Opcode },
8372 { Bad_Opcode },
8373 { Bad_Opcode },
8374 { Bad_Opcode },
8375 { Bad_Opcode },
8376 { Bad_Opcode },
c1e679ec 8377 /* 50 */
592d1631
L
8378 { Bad_Opcode },
8379 { Bad_Opcode },
8380 { Bad_Opcode },
8381 { Bad_Opcode },
8382 { Bad_Opcode },
8383 { Bad_Opcode },
8384 { Bad_Opcode },
8385 { Bad_Opcode },
4e7d34a6 8386 /* 58 */
592d1631
L
8387 { Bad_Opcode },
8388 { Bad_Opcode },
8389 { Bad_Opcode },
8390 { Bad_Opcode },
8391 { Bad_Opcode },
8392 { Bad_Opcode },
8393 { Bad_Opcode },
8394 { Bad_Opcode },
4e7d34a6 8395 /* 60 */
592d1631
L
8396 { Bad_Opcode },
8397 { Bad_Opcode },
8398 { Bad_Opcode },
8399 { Bad_Opcode },
8400 { Bad_Opcode },
8401 { Bad_Opcode },
8402 { Bad_Opcode },
8403 { Bad_Opcode },
4e7d34a6 8404 /* 68 */
592d1631
L
8405 { Bad_Opcode },
8406 { Bad_Opcode },
8407 { Bad_Opcode },
8408 { Bad_Opcode },
8409 { Bad_Opcode },
8410 { Bad_Opcode },
8411 { Bad_Opcode },
8412 { Bad_Opcode },
4e7d34a6 8413 /* 70 */
592d1631
L
8414 { Bad_Opcode },
8415 { Bad_Opcode },
8416 { Bad_Opcode },
8417 { Bad_Opcode },
8418 { Bad_Opcode },
8419 { Bad_Opcode },
8420 { Bad_Opcode },
8421 { Bad_Opcode },
4e7d34a6 8422 /* 78 */
592d1631
L
8423 { Bad_Opcode },
8424 { Bad_Opcode },
8425 { Bad_Opcode },
8426 { Bad_Opcode },
8427 { Bad_Opcode },
8428 { Bad_Opcode },
8429 { Bad_Opcode },
8430 { Bad_Opcode },
4e7d34a6 8431 /* 80 */
592d1631
L
8432 { Bad_Opcode },
8433 { Bad_Opcode },
8434 { Bad_Opcode },
8435 { Bad_Opcode },
8436 { Bad_Opcode },
8437 { Bad_Opcode },
8438 { Bad_Opcode },
8439 { Bad_Opcode },
4e7d34a6 8440 /* 88 */
592d1631
L
8441 { Bad_Opcode },
8442 { Bad_Opcode },
8443 { Bad_Opcode },
8444 { Bad_Opcode },
8445 { Bad_Opcode },
8446 { Bad_Opcode },
8447 { Bad_Opcode },
8448 { Bad_Opcode },
4e7d34a6 8449 /* 90 */
592d1631
L
8450 { Bad_Opcode },
8451 { Bad_Opcode },
8452 { Bad_Opcode },
8453 { Bad_Opcode },
8454 { Bad_Opcode },
8455 { Bad_Opcode },
8456 { Bad_Opcode },
8457 { Bad_Opcode },
4e7d34a6 8458 /* 98 */
592d1631
L
8459 { Bad_Opcode },
8460 { Bad_Opcode },
8461 { Bad_Opcode },
8462 { Bad_Opcode },
8463 { Bad_Opcode },
8464 { Bad_Opcode },
8465 { Bad_Opcode },
8466 { Bad_Opcode },
4e7d34a6 8467 /* a0 */
592d1631
L
8468 { Bad_Opcode },
8469 { Bad_Opcode },
8470 { Bad_Opcode },
8471 { Bad_Opcode },
8472 { Bad_Opcode },
8473 { Bad_Opcode },
8474 { Bad_Opcode },
8475 { Bad_Opcode },
4e7d34a6 8476 /* a8 */
592d1631
L
8477 { Bad_Opcode },
8478 { Bad_Opcode },
8479 { Bad_Opcode },
8480 { Bad_Opcode },
8481 { Bad_Opcode },
8482 { Bad_Opcode },
8483 { Bad_Opcode },
8484 { Bad_Opcode },
d5d7db8e 8485 /* b0 */
592d1631
L
8486 { Bad_Opcode },
8487 { Bad_Opcode },
8488 { Bad_Opcode },
8489 { Bad_Opcode },
8490 { Bad_Opcode },
8491 { Bad_Opcode },
8492 { Bad_Opcode },
8493 { Bad_Opcode },
85f10a01 8494 /* b8 */
592d1631
L
8495 { Bad_Opcode },
8496 { Bad_Opcode },
8497 { Bad_Opcode },
8498 { Bad_Opcode },
8499 { Bad_Opcode },
8500 { Bad_Opcode },
8501 { Bad_Opcode },
8502 { Bad_Opcode },
85f10a01 8503 /* c0 */
592d1631
L
8504 { Bad_Opcode },
8505 { Bad_Opcode },
8506 { Bad_Opcode },
8507 { Bad_Opcode },
8508 { Bad_Opcode },
8509 { Bad_Opcode },
8510 { Bad_Opcode },
8511 { Bad_Opcode },
85f10a01 8512 /* c8 */
592d1631
L
8513 { Bad_Opcode },
8514 { Bad_Opcode },
8515 { Bad_Opcode },
8516 { Bad_Opcode },
8517 { Bad_Opcode },
8518 { Bad_Opcode },
8519 { Bad_Opcode },
8520 { Bad_Opcode },
85f10a01 8521 /* d0 */
592d1631
L
8522 { Bad_Opcode },
8523 { Bad_Opcode },
8524 { Bad_Opcode },
8525 { Bad_Opcode },
8526 { Bad_Opcode },
8527 { Bad_Opcode },
8528 { Bad_Opcode },
8529 { Bad_Opcode },
85f10a01 8530 /* d8 */
592d1631
L
8531 { Bad_Opcode },
8532 { Bad_Opcode },
8533 { Bad_Opcode },
8534 { Bad_Opcode },
8535 { Bad_Opcode },
8536 { Bad_Opcode },
8537 { Bad_Opcode },
8538 { Bad_Opcode },
85f10a01 8539 /* e0 */
592d1631
L
8540 { Bad_Opcode },
8541 { Bad_Opcode },
8542 { Bad_Opcode },
8543 { Bad_Opcode },
8544 { Bad_Opcode },
8545 { Bad_Opcode },
8546 { Bad_Opcode },
8547 { Bad_Opcode },
85f10a01 8548 /* e8 */
592d1631
L
8549 { Bad_Opcode },
8550 { Bad_Opcode },
8551 { Bad_Opcode },
8552 { Bad_Opcode },
8553 { Bad_Opcode },
8554 { Bad_Opcode },
8555 { Bad_Opcode },
8556 { Bad_Opcode },
85f10a01 8557 /* f0 */
592d1631
L
8558 { Bad_Opcode },
8559 { Bad_Opcode },
8560 { Bad_Opcode },
8561 { Bad_Opcode },
8562 { Bad_Opcode },
8563 { Bad_Opcode },
8564 { Bad_Opcode },
8565 { Bad_Opcode },
85f10a01 8566 /* f8 */
592d1631
L
8567 { Bad_Opcode },
8568 { Bad_Opcode },
8569 { Bad_Opcode },
8570 { Bad_Opcode },
8571 { Bad_Opcode },
8572 { Bad_Opcode },
8573 { Bad_Opcode },
8574 { Bad_Opcode },
85f10a01 8575 },
c0f3af97
L
8576};
8577
8578static const struct dis386 vex_table[][256] = {
8579 /* VEX_0F */
85f10a01
MM
8580 {
8581 /* 00 */
592d1631
L
8582 { Bad_Opcode },
8583 { Bad_Opcode },
8584 { Bad_Opcode },
8585 { Bad_Opcode },
8586 { Bad_Opcode },
8587 { Bad_Opcode },
8588 { Bad_Opcode },
8589 { Bad_Opcode },
85f10a01 8590 /* 08 */
592d1631
L
8591 { Bad_Opcode },
8592 { Bad_Opcode },
8593 { Bad_Opcode },
8594 { Bad_Opcode },
8595 { Bad_Opcode },
8596 { Bad_Opcode },
8597 { Bad_Opcode },
8598 { Bad_Opcode },
c0f3af97 8599 /* 10 */
592a252b
L
8600 { PREFIX_TABLE (PREFIX_VEX_0F10) },
8601 { PREFIX_TABLE (PREFIX_VEX_0F11) },
8602 { PREFIX_TABLE (PREFIX_VEX_0F12) },
8603 { MOD_TABLE (MOD_VEX_0F13) },
8604 { VEX_W_TABLE (VEX_W_0F14) },
8605 { VEX_W_TABLE (VEX_W_0F15) },
8606 { PREFIX_TABLE (PREFIX_VEX_0F16) },
8607 { MOD_TABLE (MOD_VEX_0F17) },
c0f3af97 8608 /* 18 */
592d1631
L
8609 { Bad_Opcode },
8610 { Bad_Opcode },
8611 { Bad_Opcode },
8612 { Bad_Opcode },
8613 { Bad_Opcode },
8614 { Bad_Opcode },
8615 { Bad_Opcode },
8616 { Bad_Opcode },
c0f3af97 8617 /* 20 */
592d1631
L
8618 { Bad_Opcode },
8619 { Bad_Opcode },
8620 { Bad_Opcode },
8621 { Bad_Opcode },
8622 { Bad_Opcode },
8623 { Bad_Opcode },
8624 { Bad_Opcode },
8625 { Bad_Opcode },
c0f3af97 8626 /* 28 */
592a252b
L
8627 { VEX_W_TABLE (VEX_W_0F28) },
8628 { VEX_W_TABLE (VEX_W_0F29) },
8629 { PREFIX_TABLE (PREFIX_VEX_0F2A) },
8630 { MOD_TABLE (MOD_VEX_0F2B) },
8631 { PREFIX_TABLE (PREFIX_VEX_0F2C) },
8632 { PREFIX_TABLE (PREFIX_VEX_0F2D) },
8633 { PREFIX_TABLE (PREFIX_VEX_0F2E) },
8634 { PREFIX_TABLE (PREFIX_VEX_0F2F) },
85f10a01 8635 /* 30 */
592d1631
L
8636 { Bad_Opcode },
8637 { Bad_Opcode },
8638 { Bad_Opcode },
8639 { Bad_Opcode },
8640 { Bad_Opcode },
8641 { Bad_Opcode },
8642 { Bad_Opcode },
8643 { Bad_Opcode },
4e7d34a6 8644 /* 38 */
592d1631
L
8645 { Bad_Opcode },
8646 { Bad_Opcode },
8647 { Bad_Opcode },
8648 { Bad_Opcode },
8649 { Bad_Opcode },
8650 { Bad_Opcode },
8651 { Bad_Opcode },
8652 { Bad_Opcode },
d5d7db8e 8653 /* 40 */
592d1631 8654 { Bad_Opcode },
43234a1e
L
8655 { PREFIX_TABLE (PREFIX_VEX_0F41) },
8656 { PREFIX_TABLE (PREFIX_VEX_0F42) },
592d1631 8657 { Bad_Opcode },
43234a1e
L
8658 { PREFIX_TABLE (PREFIX_VEX_0F44) },
8659 { PREFIX_TABLE (PREFIX_VEX_0F45) },
8660 { PREFIX_TABLE (PREFIX_VEX_0F46) },
8661 { PREFIX_TABLE (PREFIX_VEX_0F47) },
85f10a01 8662 /* 48 */
592d1631
L
8663 { Bad_Opcode },
8664 { Bad_Opcode },
1ba585e8 8665 { PREFIX_TABLE (PREFIX_VEX_0F4A) },
43234a1e 8666 { PREFIX_TABLE (PREFIX_VEX_0F4B) },
592d1631
L
8667 { Bad_Opcode },
8668 { Bad_Opcode },
8669 { Bad_Opcode },
8670 { Bad_Opcode },
d5d7db8e 8671 /* 50 */
592a252b
L
8672 { MOD_TABLE (MOD_VEX_0F50) },
8673 { PREFIX_TABLE (PREFIX_VEX_0F51) },
8674 { PREFIX_TABLE (PREFIX_VEX_0F52) },
8675 { PREFIX_TABLE (PREFIX_VEX_0F53) },
bf890a93
IT
8676 { "vandpX", { XM, Vex, EXx }, 0 },
8677 { "vandnpX", { XM, Vex, EXx }, 0 },
8678 { "vorpX", { XM, Vex, EXx }, 0 },
8679 { "vxorpX", { XM, Vex, EXx }, 0 },
c0f3af97 8680 /* 58 */
592a252b
L
8681 { PREFIX_TABLE (PREFIX_VEX_0F58) },
8682 { PREFIX_TABLE (PREFIX_VEX_0F59) },
8683 { PREFIX_TABLE (PREFIX_VEX_0F5A) },
8684 { PREFIX_TABLE (PREFIX_VEX_0F5B) },
8685 { PREFIX_TABLE (PREFIX_VEX_0F5C) },
8686 { PREFIX_TABLE (PREFIX_VEX_0F5D) },
8687 { PREFIX_TABLE (PREFIX_VEX_0F5E) },
8688 { PREFIX_TABLE (PREFIX_VEX_0F5F) },
c0f3af97 8689 /* 60 */
592a252b
L
8690 { PREFIX_TABLE (PREFIX_VEX_0F60) },
8691 { PREFIX_TABLE (PREFIX_VEX_0F61) },
8692 { PREFIX_TABLE (PREFIX_VEX_0F62) },
8693 { PREFIX_TABLE (PREFIX_VEX_0F63) },
8694 { PREFIX_TABLE (PREFIX_VEX_0F64) },
8695 { PREFIX_TABLE (PREFIX_VEX_0F65) },
8696 { PREFIX_TABLE (PREFIX_VEX_0F66) },
8697 { PREFIX_TABLE (PREFIX_VEX_0F67) },
c0f3af97 8698 /* 68 */
592a252b
L
8699 { PREFIX_TABLE (PREFIX_VEX_0F68) },
8700 { PREFIX_TABLE (PREFIX_VEX_0F69) },
8701 { PREFIX_TABLE (PREFIX_VEX_0F6A) },
8702 { PREFIX_TABLE (PREFIX_VEX_0F6B) },
8703 { PREFIX_TABLE (PREFIX_VEX_0F6C) },
8704 { PREFIX_TABLE (PREFIX_VEX_0F6D) },
8705 { PREFIX_TABLE (PREFIX_VEX_0F6E) },
8706 { PREFIX_TABLE (PREFIX_VEX_0F6F) },
c0f3af97 8707 /* 70 */
592a252b
L
8708 { PREFIX_TABLE (PREFIX_VEX_0F70) },
8709 { REG_TABLE (REG_VEX_0F71) },
8710 { REG_TABLE (REG_VEX_0F72) },
8711 { REG_TABLE (REG_VEX_0F73) },
8712 { PREFIX_TABLE (PREFIX_VEX_0F74) },
8713 { PREFIX_TABLE (PREFIX_VEX_0F75) },
8714 { PREFIX_TABLE (PREFIX_VEX_0F76) },
8715 { PREFIX_TABLE (PREFIX_VEX_0F77) },
c0f3af97 8716 /* 78 */
592d1631
L
8717 { Bad_Opcode },
8718 { Bad_Opcode },
8719 { Bad_Opcode },
8720 { Bad_Opcode },
592a252b
L
8721 { PREFIX_TABLE (PREFIX_VEX_0F7C) },
8722 { PREFIX_TABLE (PREFIX_VEX_0F7D) },
8723 { PREFIX_TABLE (PREFIX_VEX_0F7E) },
8724 { PREFIX_TABLE (PREFIX_VEX_0F7F) },
c0f3af97 8725 /* 80 */
592d1631
L
8726 { Bad_Opcode },
8727 { Bad_Opcode },
8728 { Bad_Opcode },
8729 { Bad_Opcode },
8730 { Bad_Opcode },
8731 { Bad_Opcode },
8732 { Bad_Opcode },
8733 { Bad_Opcode },
c0f3af97 8734 /* 88 */
592d1631
L
8735 { Bad_Opcode },
8736 { Bad_Opcode },
8737 { Bad_Opcode },
8738 { Bad_Opcode },
8739 { Bad_Opcode },
8740 { Bad_Opcode },
8741 { Bad_Opcode },
8742 { Bad_Opcode },
c0f3af97 8743 /* 90 */
43234a1e
L
8744 { PREFIX_TABLE (PREFIX_VEX_0F90) },
8745 { PREFIX_TABLE (PREFIX_VEX_0F91) },
8746 { PREFIX_TABLE (PREFIX_VEX_0F92) },
8747 { PREFIX_TABLE (PREFIX_VEX_0F93) },
592d1631
L
8748 { Bad_Opcode },
8749 { Bad_Opcode },
8750 { Bad_Opcode },
8751 { Bad_Opcode },
c0f3af97 8752 /* 98 */
43234a1e 8753 { PREFIX_TABLE (PREFIX_VEX_0F98) },
1ba585e8 8754 { PREFIX_TABLE (PREFIX_VEX_0F99) },
592d1631
L
8755 { Bad_Opcode },
8756 { Bad_Opcode },
8757 { Bad_Opcode },
8758 { Bad_Opcode },
8759 { Bad_Opcode },
8760 { Bad_Opcode },
c0f3af97 8761 /* a0 */
592d1631
L
8762 { Bad_Opcode },
8763 { Bad_Opcode },
8764 { Bad_Opcode },
8765 { Bad_Opcode },
8766 { Bad_Opcode },
8767 { Bad_Opcode },
8768 { Bad_Opcode },
8769 { Bad_Opcode },
c0f3af97 8770 /* a8 */
592d1631
L
8771 { Bad_Opcode },
8772 { Bad_Opcode },
8773 { Bad_Opcode },
8774 { Bad_Opcode },
8775 { Bad_Opcode },
8776 { Bad_Opcode },
592a252b 8777 { REG_TABLE (REG_VEX_0FAE) },
592d1631 8778 { Bad_Opcode },
c0f3af97 8779 /* b0 */
592d1631
L
8780 { Bad_Opcode },
8781 { Bad_Opcode },
8782 { Bad_Opcode },
8783 { Bad_Opcode },
8784 { Bad_Opcode },
8785 { Bad_Opcode },
8786 { Bad_Opcode },
8787 { Bad_Opcode },
c0f3af97 8788 /* b8 */
592d1631
L
8789 { Bad_Opcode },
8790 { Bad_Opcode },
8791 { Bad_Opcode },
8792 { Bad_Opcode },
8793 { Bad_Opcode },
8794 { Bad_Opcode },
8795 { Bad_Opcode },
8796 { Bad_Opcode },
c0f3af97 8797 /* c0 */
592d1631
L
8798 { Bad_Opcode },
8799 { Bad_Opcode },
592a252b 8800 { PREFIX_TABLE (PREFIX_VEX_0FC2) },
592d1631 8801 { Bad_Opcode },
592a252b
L
8802 { PREFIX_TABLE (PREFIX_VEX_0FC4) },
8803 { PREFIX_TABLE (PREFIX_VEX_0FC5) },
bf890a93 8804 { "vshufpX", { XM, Vex, EXx, Ib }, 0 },
592d1631 8805 { Bad_Opcode },
c0f3af97 8806 /* c8 */
592d1631
L
8807 { Bad_Opcode },
8808 { Bad_Opcode },
8809 { Bad_Opcode },
8810 { Bad_Opcode },
8811 { Bad_Opcode },
8812 { Bad_Opcode },
8813 { Bad_Opcode },
8814 { Bad_Opcode },
c0f3af97 8815 /* d0 */
592a252b
L
8816 { PREFIX_TABLE (PREFIX_VEX_0FD0) },
8817 { PREFIX_TABLE (PREFIX_VEX_0FD1) },
8818 { PREFIX_TABLE (PREFIX_VEX_0FD2) },
8819 { PREFIX_TABLE (PREFIX_VEX_0FD3) },
8820 { PREFIX_TABLE (PREFIX_VEX_0FD4) },
8821 { PREFIX_TABLE (PREFIX_VEX_0FD5) },
8822 { PREFIX_TABLE (PREFIX_VEX_0FD6) },
8823 { PREFIX_TABLE (PREFIX_VEX_0FD7) },
c0f3af97 8824 /* d8 */
592a252b
L
8825 { PREFIX_TABLE (PREFIX_VEX_0FD8) },
8826 { PREFIX_TABLE (PREFIX_VEX_0FD9) },
8827 { PREFIX_TABLE (PREFIX_VEX_0FDA) },
8828 { PREFIX_TABLE (PREFIX_VEX_0FDB) },
8829 { PREFIX_TABLE (PREFIX_VEX_0FDC) },
8830 { PREFIX_TABLE (PREFIX_VEX_0FDD) },
8831 { PREFIX_TABLE (PREFIX_VEX_0FDE) },
8832 { PREFIX_TABLE (PREFIX_VEX_0FDF) },
c0f3af97 8833 /* e0 */
592a252b
L
8834 { PREFIX_TABLE (PREFIX_VEX_0FE0) },
8835 { PREFIX_TABLE (PREFIX_VEX_0FE1) },
8836 { PREFIX_TABLE (PREFIX_VEX_0FE2) },
8837 { PREFIX_TABLE (PREFIX_VEX_0FE3) },
8838 { PREFIX_TABLE (PREFIX_VEX_0FE4) },
8839 { PREFIX_TABLE (PREFIX_VEX_0FE5) },
8840 { PREFIX_TABLE (PREFIX_VEX_0FE6) },
8841 { PREFIX_TABLE (PREFIX_VEX_0FE7) },
c0f3af97 8842 /* e8 */
592a252b
L
8843 { PREFIX_TABLE (PREFIX_VEX_0FE8) },
8844 { PREFIX_TABLE (PREFIX_VEX_0FE9) },
8845 { PREFIX_TABLE (PREFIX_VEX_0FEA) },
8846 { PREFIX_TABLE (PREFIX_VEX_0FEB) },
8847 { PREFIX_TABLE (PREFIX_VEX_0FEC) },
8848 { PREFIX_TABLE (PREFIX_VEX_0FED) },
8849 { PREFIX_TABLE (PREFIX_VEX_0FEE) },
8850 { PREFIX_TABLE (PREFIX_VEX_0FEF) },
c0f3af97 8851 /* f0 */
592a252b
L
8852 { PREFIX_TABLE (PREFIX_VEX_0FF0) },
8853 { PREFIX_TABLE (PREFIX_VEX_0FF1) },
8854 { PREFIX_TABLE (PREFIX_VEX_0FF2) },
8855 { PREFIX_TABLE (PREFIX_VEX_0FF3) },
8856 { PREFIX_TABLE (PREFIX_VEX_0FF4) },
8857 { PREFIX_TABLE (PREFIX_VEX_0FF5) },
8858 { PREFIX_TABLE (PREFIX_VEX_0FF6) },
8859 { PREFIX_TABLE (PREFIX_VEX_0FF7) },
c0f3af97 8860 /* f8 */
592a252b
L
8861 { PREFIX_TABLE (PREFIX_VEX_0FF8) },
8862 { PREFIX_TABLE (PREFIX_VEX_0FF9) },
8863 { PREFIX_TABLE (PREFIX_VEX_0FFA) },
8864 { PREFIX_TABLE (PREFIX_VEX_0FFB) },
8865 { PREFIX_TABLE (PREFIX_VEX_0FFC) },
8866 { PREFIX_TABLE (PREFIX_VEX_0FFD) },
8867 { PREFIX_TABLE (PREFIX_VEX_0FFE) },
592d1631 8868 { Bad_Opcode },
c0f3af97
L
8869 },
8870 /* VEX_0F38 */
8871 {
8872 /* 00 */
592a252b
L
8873 { PREFIX_TABLE (PREFIX_VEX_0F3800) },
8874 { PREFIX_TABLE (PREFIX_VEX_0F3801) },
8875 { PREFIX_TABLE (PREFIX_VEX_0F3802) },
8876 { PREFIX_TABLE (PREFIX_VEX_0F3803) },
8877 { PREFIX_TABLE (PREFIX_VEX_0F3804) },
8878 { PREFIX_TABLE (PREFIX_VEX_0F3805) },
8879 { PREFIX_TABLE (PREFIX_VEX_0F3806) },
8880 { PREFIX_TABLE (PREFIX_VEX_0F3807) },
c0f3af97 8881 /* 08 */
592a252b
L
8882 { PREFIX_TABLE (PREFIX_VEX_0F3808) },
8883 { PREFIX_TABLE (PREFIX_VEX_0F3809) },
8884 { PREFIX_TABLE (PREFIX_VEX_0F380A) },
8885 { PREFIX_TABLE (PREFIX_VEX_0F380B) },
8886 { PREFIX_TABLE (PREFIX_VEX_0F380C) },
8887 { PREFIX_TABLE (PREFIX_VEX_0F380D) },
8888 { PREFIX_TABLE (PREFIX_VEX_0F380E) },
8889 { PREFIX_TABLE (PREFIX_VEX_0F380F) },
c0f3af97 8890 /* 10 */
592d1631
L
8891 { Bad_Opcode },
8892 { Bad_Opcode },
8893 { Bad_Opcode },
592a252b 8894 { PREFIX_TABLE (PREFIX_VEX_0F3813) },
592d1631
L
8895 { Bad_Opcode },
8896 { Bad_Opcode },
6c30d220 8897 { PREFIX_TABLE (PREFIX_VEX_0F3816) },
592a252b 8898 { PREFIX_TABLE (PREFIX_VEX_0F3817) },
c0f3af97 8899 /* 18 */
592a252b
L
8900 { PREFIX_TABLE (PREFIX_VEX_0F3818) },
8901 { PREFIX_TABLE (PREFIX_VEX_0F3819) },
8902 { PREFIX_TABLE (PREFIX_VEX_0F381A) },
592d1631 8903 { Bad_Opcode },
592a252b
L
8904 { PREFIX_TABLE (PREFIX_VEX_0F381C) },
8905 { PREFIX_TABLE (PREFIX_VEX_0F381D) },
8906 { PREFIX_TABLE (PREFIX_VEX_0F381E) },
592d1631 8907 { Bad_Opcode },
c0f3af97 8908 /* 20 */
592a252b
L
8909 { PREFIX_TABLE (PREFIX_VEX_0F3820) },
8910 { PREFIX_TABLE (PREFIX_VEX_0F3821) },
8911 { PREFIX_TABLE (PREFIX_VEX_0F3822) },
8912 { PREFIX_TABLE (PREFIX_VEX_0F3823) },
8913 { PREFIX_TABLE (PREFIX_VEX_0F3824) },
8914 { PREFIX_TABLE (PREFIX_VEX_0F3825) },
592d1631
L
8915 { Bad_Opcode },
8916 { Bad_Opcode },
c0f3af97 8917 /* 28 */
592a252b
L
8918 { PREFIX_TABLE (PREFIX_VEX_0F3828) },
8919 { PREFIX_TABLE (PREFIX_VEX_0F3829) },
8920 { PREFIX_TABLE (PREFIX_VEX_0F382A) },
8921 { PREFIX_TABLE (PREFIX_VEX_0F382B) },
8922 { PREFIX_TABLE (PREFIX_VEX_0F382C) },
8923 { PREFIX_TABLE (PREFIX_VEX_0F382D) },
8924 { PREFIX_TABLE (PREFIX_VEX_0F382E) },
8925 { PREFIX_TABLE (PREFIX_VEX_0F382F) },
c0f3af97 8926 /* 30 */
592a252b
L
8927 { PREFIX_TABLE (PREFIX_VEX_0F3830) },
8928 { PREFIX_TABLE (PREFIX_VEX_0F3831) },
8929 { PREFIX_TABLE (PREFIX_VEX_0F3832) },
8930 { PREFIX_TABLE (PREFIX_VEX_0F3833) },
8931 { PREFIX_TABLE (PREFIX_VEX_0F3834) },
8932 { PREFIX_TABLE (PREFIX_VEX_0F3835) },
6c30d220 8933 { PREFIX_TABLE (PREFIX_VEX_0F3836) },
592a252b 8934 { PREFIX_TABLE (PREFIX_VEX_0F3837) },
c0f3af97 8935 /* 38 */
592a252b
L
8936 { PREFIX_TABLE (PREFIX_VEX_0F3838) },
8937 { PREFIX_TABLE (PREFIX_VEX_0F3839) },
8938 { PREFIX_TABLE (PREFIX_VEX_0F383A) },
8939 { PREFIX_TABLE (PREFIX_VEX_0F383B) },
8940 { PREFIX_TABLE (PREFIX_VEX_0F383C) },
8941 { PREFIX_TABLE (PREFIX_VEX_0F383D) },
8942 { PREFIX_TABLE (PREFIX_VEX_0F383E) },
8943 { PREFIX_TABLE (PREFIX_VEX_0F383F) },
c0f3af97 8944 /* 40 */
592a252b
L
8945 { PREFIX_TABLE (PREFIX_VEX_0F3840) },
8946 { PREFIX_TABLE (PREFIX_VEX_0F3841) },
592d1631
L
8947 { Bad_Opcode },
8948 { Bad_Opcode },
8949 { Bad_Opcode },
6c30d220
L
8950 { PREFIX_TABLE (PREFIX_VEX_0F3845) },
8951 { PREFIX_TABLE (PREFIX_VEX_0F3846) },
8952 { PREFIX_TABLE (PREFIX_VEX_0F3847) },
c0f3af97 8953 /* 48 */
592d1631
L
8954 { Bad_Opcode },
8955 { Bad_Opcode },
8956 { Bad_Opcode },
8957 { Bad_Opcode },
8958 { Bad_Opcode },
8959 { Bad_Opcode },
8960 { Bad_Opcode },
8961 { Bad_Opcode },
c0f3af97 8962 /* 50 */
592d1631
L
8963 { Bad_Opcode },
8964 { Bad_Opcode },
8965 { Bad_Opcode },
8966 { Bad_Opcode },
8967 { Bad_Opcode },
8968 { Bad_Opcode },
8969 { Bad_Opcode },
8970 { Bad_Opcode },
c0f3af97 8971 /* 58 */
6c30d220
L
8972 { PREFIX_TABLE (PREFIX_VEX_0F3858) },
8973 { PREFIX_TABLE (PREFIX_VEX_0F3859) },
8974 { PREFIX_TABLE (PREFIX_VEX_0F385A) },
592d1631
L
8975 { Bad_Opcode },
8976 { Bad_Opcode },
8977 { Bad_Opcode },
8978 { Bad_Opcode },
8979 { Bad_Opcode },
c0f3af97 8980 /* 60 */
592d1631
L
8981 { Bad_Opcode },
8982 { Bad_Opcode },
8983 { Bad_Opcode },
8984 { Bad_Opcode },
8985 { Bad_Opcode },
8986 { Bad_Opcode },
8987 { Bad_Opcode },
8988 { Bad_Opcode },
c0f3af97 8989 /* 68 */
592d1631
L
8990 { Bad_Opcode },
8991 { Bad_Opcode },
8992 { Bad_Opcode },
8993 { Bad_Opcode },
8994 { Bad_Opcode },
8995 { Bad_Opcode },
8996 { Bad_Opcode },
8997 { Bad_Opcode },
c0f3af97 8998 /* 70 */
592d1631
L
8999 { Bad_Opcode },
9000 { Bad_Opcode },
9001 { Bad_Opcode },
9002 { Bad_Opcode },
9003 { Bad_Opcode },
9004 { Bad_Opcode },
9005 { Bad_Opcode },
9006 { Bad_Opcode },
c0f3af97 9007 /* 78 */
6c30d220
L
9008 { PREFIX_TABLE (PREFIX_VEX_0F3878) },
9009 { PREFIX_TABLE (PREFIX_VEX_0F3879) },
592d1631
L
9010 { Bad_Opcode },
9011 { Bad_Opcode },
9012 { Bad_Opcode },
9013 { Bad_Opcode },
9014 { Bad_Opcode },
9015 { Bad_Opcode },
c0f3af97 9016 /* 80 */
592d1631
L
9017 { Bad_Opcode },
9018 { Bad_Opcode },
9019 { Bad_Opcode },
9020 { Bad_Opcode },
9021 { Bad_Opcode },
9022 { Bad_Opcode },
9023 { Bad_Opcode },
9024 { Bad_Opcode },
c0f3af97 9025 /* 88 */
592d1631
L
9026 { Bad_Opcode },
9027 { Bad_Opcode },
9028 { Bad_Opcode },
9029 { Bad_Opcode },
6c30d220 9030 { PREFIX_TABLE (PREFIX_VEX_0F388C) },
592d1631 9031 { Bad_Opcode },
6c30d220 9032 { PREFIX_TABLE (PREFIX_VEX_0F388E) },
592d1631 9033 { Bad_Opcode },
c0f3af97 9034 /* 90 */
6c30d220
L
9035 { PREFIX_TABLE (PREFIX_VEX_0F3890) },
9036 { PREFIX_TABLE (PREFIX_VEX_0F3891) },
9037 { PREFIX_TABLE (PREFIX_VEX_0F3892) },
9038 { PREFIX_TABLE (PREFIX_VEX_0F3893) },
592d1631
L
9039 { Bad_Opcode },
9040 { Bad_Opcode },
592a252b
L
9041 { PREFIX_TABLE (PREFIX_VEX_0F3896) },
9042 { PREFIX_TABLE (PREFIX_VEX_0F3897) },
c0f3af97 9043 /* 98 */
592a252b
L
9044 { PREFIX_TABLE (PREFIX_VEX_0F3898) },
9045 { PREFIX_TABLE (PREFIX_VEX_0F3899) },
9046 { PREFIX_TABLE (PREFIX_VEX_0F389A) },
9047 { PREFIX_TABLE (PREFIX_VEX_0F389B) },
9048 { PREFIX_TABLE (PREFIX_VEX_0F389C) },
9049 { PREFIX_TABLE (PREFIX_VEX_0F389D) },
9050 { PREFIX_TABLE (PREFIX_VEX_0F389E) },
9051 { PREFIX_TABLE (PREFIX_VEX_0F389F) },
c0f3af97 9052 /* a0 */
592d1631
L
9053 { Bad_Opcode },
9054 { Bad_Opcode },
9055 { Bad_Opcode },
9056 { Bad_Opcode },
9057 { Bad_Opcode },
9058 { Bad_Opcode },
592a252b
L
9059 { PREFIX_TABLE (PREFIX_VEX_0F38A6) },
9060 { PREFIX_TABLE (PREFIX_VEX_0F38A7) },
c0f3af97 9061 /* a8 */
592a252b
L
9062 { PREFIX_TABLE (PREFIX_VEX_0F38A8) },
9063 { PREFIX_TABLE (PREFIX_VEX_0F38A9) },
9064 { PREFIX_TABLE (PREFIX_VEX_0F38AA) },
9065 { PREFIX_TABLE (PREFIX_VEX_0F38AB) },
9066 { PREFIX_TABLE (PREFIX_VEX_0F38AC) },
9067 { PREFIX_TABLE (PREFIX_VEX_0F38AD) },
9068 { PREFIX_TABLE (PREFIX_VEX_0F38AE) },
9069 { PREFIX_TABLE (PREFIX_VEX_0F38AF) },
c0f3af97 9070 /* b0 */
592d1631
L
9071 { Bad_Opcode },
9072 { Bad_Opcode },
9073 { Bad_Opcode },
9074 { Bad_Opcode },
9075 { Bad_Opcode },
9076 { Bad_Opcode },
592a252b
L
9077 { PREFIX_TABLE (PREFIX_VEX_0F38B6) },
9078 { PREFIX_TABLE (PREFIX_VEX_0F38B7) },
c0f3af97 9079 /* b8 */
592a252b
L
9080 { PREFIX_TABLE (PREFIX_VEX_0F38B8) },
9081 { PREFIX_TABLE (PREFIX_VEX_0F38B9) },
9082 { PREFIX_TABLE (PREFIX_VEX_0F38BA) },
9083 { PREFIX_TABLE (PREFIX_VEX_0F38BB) },
9084 { PREFIX_TABLE (PREFIX_VEX_0F38BC) },
9085 { PREFIX_TABLE (PREFIX_VEX_0F38BD) },
9086 { PREFIX_TABLE (PREFIX_VEX_0F38BE) },
9087 { PREFIX_TABLE (PREFIX_VEX_0F38BF) },
c0f3af97 9088 /* c0 */
592d1631
L
9089 { Bad_Opcode },
9090 { Bad_Opcode },
9091 { Bad_Opcode },
9092 { Bad_Opcode },
9093 { Bad_Opcode },
9094 { Bad_Opcode },
9095 { Bad_Opcode },
9096 { Bad_Opcode },
c0f3af97 9097 /* c8 */
592d1631
L
9098 { Bad_Opcode },
9099 { Bad_Opcode },
9100 { Bad_Opcode },
9101 { Bad_Opcode },
9102 { Bad_Opcode },
9103 { Bad_Opcode },
9104 { Bad_Opcode },
48521003 9105 { PREFIX_TABLE (PREFIX_VEX_0F38CF) },
c0f3af97 9106 /* d0 */
592d1631
L
9107 { Bad_Opcode },
9108 { Bad_Opcode },
9109 { Bad_Opcode },
9110 { Bad_Opcode },
9111 { Bad_Opcode },
9112 { Bad_Opcode },
9113 { Bad_Opcode },
9114 { Bad_Opcode },
c0f3af97 9115 /* d8 */
592d1631
L
9116 { Bad_Opcode },
9117 { Bad_Opcode },
9118 { Bad_Opcode },
592a252b
L
9119 { PREFIX_TABLE (PREFIX_VEX_0F38DB) },
9120 { PREFIX_TABLE (PREFIX_VEX_0F38DC) },
9121 { PREFIX_TABLE (PREFIX_VEX_0F38DD) },
9122 { PREFIX_TABLE (PREFIX_VEX_0F38DE) },
9123 { PREFIX_TABLE (PREFIX_VEX_0F38DF) },
c0f3af97 9124 /* e0 */
592d1631
L
9125 { Bad_Opcode },
9126 { Bad_Opcode },
9127 { Bad_Opcode },
9128 { Bad_Opcode },
9129 { Bad_Opcode },
9130 { Bad_Opcode },
9131 { Bad_Opcode },
9132 { Bad_Opcode },
c0f3af97 9133 /* e8 */
592d1631
L
9134 { Bad_Opcode },
9135 { Bad_Opcode },
9136 { Bad_Opcode },
9137 { Bad_Opcode },
9138 { Bad_Opcode },
9139 { Bad_Opcode },
9140 { Bad_Opcode },
9141 { Bad_Opcode },
c0f3af97 9142 /* f0 */
592d1631
L
9143 { Bad_Opcode },
9144 { Bad_Opcode },
f12dc422
L
9145 { PREFIX_TABLE (PREFIX_VEX_0F38F2) },
9146 { REG_TABLE (REG_VEX_0F38F3) },
592d1631 9147 { Bad_Opcode },
6c30d220
L
9148 { PREFIX_TABLE (PREFIX_VEX_0F38F5) },
9149 { PREFIX_TABLE (PREFIX_VEX_0F38F6) },
f12dc422 9150 { PREFIX_TABLE (PREFIX_VEX_0F38F7) },
c0f3af97 9151 /* f8 */
592d1631
L
9152 { Bad_Opcode },
9153 { Bad_Opcode },
9154 { Bad_Opcode },
9155 { Bad_Opcode },
9156 { Bad_Opcode },
9157 { Bad_Opcode },
9158 { Bad_Opcode },
9159 { Bad_Opcode },
c0f3af97
L
9160 },
9161 /* VEX_0F3A */
9162 {
9163 /* 00 */
6c30d220
L
9164 { PREFIX_TABLE (PREFIX_VEX_0F3A00) },
9165 { PREFIX_TABLE (PREFIX_VEX_0F3A01) },
9166 { PREFIX_TABLE (PREFIX_VEX_0F3A02) },
592d1631 9167 { Bad_Opcode },
592a252b
L
9168 { PREFIX_TABLE (PREFIX_VEX_0F3A04) },
9169 { PREFIX_TABLE (PREFIX_VEX_0F3A05) },
9170 { PREFIX_TABLE (PREFIX_VEX_0F3A06) },
592d1631 9171 { Bad_Opcode },
c0f3af97 9172 /* 08 */
592a252b
L
9173 { PREFIX_TABLE (PREFIX_VEX_0F3A08) },
9174 { PREFIX_TABLE (PREFIX_VEX_0F3A09) },
9175 { PREFIX_TABLE (PREFIX_VEX_0F3A0A) },
9176 { PREFIX_TABLE (PREFIX_VEX_0F3A0B) },
9177 { PREFIX_TABLE (PREFIX_VEX_0F3A0C) },
9178 { PREFIX_TABLE (PREFIX_VEX_0F3A0D) },
9179 { PREFIX_TABLE (PREFIX_VEX_0F3A0E) },
9180 { PREFIX_TABLE (PREFIX_VEX_0F3A0F) },
c0f3af97 9181 /* 10 */
592d1631
L
9182 { Bad_Opcode },
9183 { Bad_Opcode },
9184 { Bad_Opcode },
9185 { Bad_Opcode },
592a252b
L
9186 { PREFIX_TABLE (PREFIX_VEX_0F3A14) },
9187 { PREFIX_TABLE (PREFIX_VEX_0F3A15) },
9188 { PREFIX_TABLE (PREFIX_VEX_0F3A16) },
9189 { PREFIX_TABLE (PREFIX_VEX_0F3A17) },
c0f3af97 9190 /* 18 */
592a252b
L
9191 { PREFIX_TABLE (PREFIX_VEX_0F3A18) },
9192 { PREFIX_TABLE (PREFIX_VEX_0F3A19) },
592d1631
L
9193 { Bad_Opcode },
9194 { Bad_Opcode },
9195 { Bad_Opcode },
592a252b 9196 { PREFIX_TABLE (PREFIX_VEX_0F3A1D) },
592d1631
L
9197 { Bad_Opcode },
9198 { Bad_Opcode },
c0f3af97 9199 /* 20 */
592a252b
L
9200 { PREFIX_TABLE (PREFIX_VEX_0F3A20) },
9201 { PREFIX_TABLE (PREFIX_VEX_0F3A21) },
9202 { PREFIX_TABLE (PREFIX_VEX_0F3A22) },
592d1631
L
9203 { Bad_Opcode },
9204 { Bad_Opcode },
9205 { Bad_Opcode },
9206 { Bad_Opcode },
9207 { Bad_Opcode },
c0f3af97 9208 /* 28 */
592d1631
L
9209 { Bad_Opcode },
9210 { Bad_Opcode },
9211 { Bad_Opcode },
9212 { Bad_Opcode },
9213 { Bad_Opcode },
9214 { Bad_Opcode },
9215 { Bad_Opcode },
9216 { Bad_Opcode },
c0f3af97 9217 /* 30 */
43234a1e 9218 { PREFIX_TABLE (PREFIX_VEX_0F3A30) },
1ba585e8 9219 { PREFIX_TABLE (PREFIX_VEX_0F3A31) },
43234a1e 9220 { PREFIX_TABLE (PREFIX_VEX_0F3A32) },
1ba585e8 9221 { PREFIX_TABLE (PREFIX_VEX_0F3A33) },
592d1631
L
9222 { Bad_Opcode },
9223 { Bad_Opcode },
9224 { Bad_Opcode },
9225 { Bad_Opcode },
c0f3af97 9226 /* 38 */
6c30d220
L
9227 { PREFIX_TABLE (PREFIX_VEX_0F3A38) },
9228 { PREFIX_TABLE (PREFIX_VEX_0F3A39) },
592d1631
L
9229 { Bad_Opcode },
9230 { Bad_Opcode },
9231 { Bad_Opcode },
9232 { Bad_Opcode },
9233 { Bad_Opcode },
9234 { Bad_Opcode },
c0f3af97 9235 /* 40 */
592a252b
L
9236 { PREFIX_TABLE (PREFIX_VEX_0F3A40) },
9237 { PREFIX_TABLE (PREFIX_VEX_0F3A41) },
9238 { PREFIX_TABLE (PREFIX_VEX_0F3A42) },
592d1631 9239 { Bad_Opcode },
592a252b 9240 { PREFIX_TABLE (PREFIX_VEX_0F3A44) },
592d1631 9241 { Bad_Opcode },
6c30d220 9242 { PREFIX_TABLE (PREFIX_VEX_0F3A46) },
592d1631 9243 { Bad_Opcode },
c0f3af97 9244 /* 48 */
592a252b
L
9245 { PREFIX_TABLE (PREFIX_VEX_0F3A48) },
9246 { PREFIX_TABLE (PREFIX_VEX_0F3A49) },
9247 { PREFIX_TABLE (PREFIX_VEX_0F3A4A) },
9248 { PREFIX_TABLE (PREFIX_VEX_0F3A4B) },
9249 { PREFIX_TABLE (PREFIX_VEX_0F3A4C) },
592d1631
L
9250 { Bad_Opcode },
9251 { Bad_Opcode },
9252 { Bad_Opcode },
c0f3af97 9253 /* 50 */
592d1631
L
9254 { Bad_Opcode },
9255 { Bad_Opcode },
9256 { Bad_Opcode },
9257 { Bad_Opcode },
9258 { Bad_Opcode },
9259 { Bad_Opcode },
9260 { Bad_Opcode },
9261 { Bad_Opcode },
c0f3af97 9262 /* 58 */
592d1631
L
9263 { Bad_Opcode },
9264 { Bad_Opcode },
9265 { Bad_Opcode },
9266 { Bad_Opcode },
592a252b
L
9267 { PREFIX_TABLE (PREFIX_VEX_0F3A5C) },
9268 { PREFIX_TABLE (PREFIX_VEX_0F3A5D) },
9269 { PREFIX_TABLE (PREFIX_VEX_0F3A5E) },
9270 { PREFIX_TABLE (PREFIX_VEX_0F3A5F) },
c0f3af97 9271 /* 60 */
592a252b
L
9272 { PREFIX_TABLE (PREFIX_VEX_0F3A60) },
9273 { PREFIX_TABLE (PREFIX_VEX_0F3A61) },
9274 { PREFIX_TABLE (PREFIX_VEX_0F3A62) },
9275 { PREFIX_TABLE (PREFIX_VEX_0F3A63) },
592d1631
L
9276 { Bad_Opcode },
9277 { Bad_Opcode },
9278 { Bad_Opcode },
9279 { Bad_Opcode },
c0f3af97 9280 /* 68 */
592a252b
L
9281 { PREFIX_TABLE (PREFIX_VEX_0F3A68) },
9282 { PREFIX_TABLE (PREFIX_VEX_0F3A69) },
9283 { PREFIX_TABLE (PREFIX_VEX_0F3A6A) },
9284 { PREFIX_TABLE (PREFIX_VEX_0F3A6B) },
9285 { PREFIX_TABLE (PREFIX_VEX_0F3A6C) },
9286 { PREFIX_TABLE (PREFIX_VEX_0F3A6D) },
9287 { PREFIX_TABLE (PREFIX_VEX_0F3A6E) },
9288 { PREFIX_TABLE (PREFIX_VEX_0F3A6F) },
c0f3af97 9289 /* 70 */
592d1631
L
9290 { Bad_Opcode },
9291 { Bad_Opcode },
9292 { Bad_Opcode },
9293 { Bad_Opcode },
9294 { Bad_Opcode },
9295 { Bad_Opcode },
9296 { Bad_Opcode },
9297 { Bad_Opcode },
c0f3af97 9298 /* 78 */
592a252b
L
9299 { PREFIX_TABLE (PREFIX_VEX_0F3A78) },
9300 { PREFIX_TABLE (PREFIX_VEX_0F3A79) },
9301 { PREFIX_TABLE (PREFIX_VEX_0F3A7A) },
9302 { PREFIX_TABLE (PREFIX_VEX_0F3A7B) },
9303 { PREFIX_TABLE (PREFIX_VEX_0F3A7C) },
9304 { PREFIX_TABLE (PREFIX_VEX_0F3A7D) },
9305 { PREFIX_TABLE (PREFIX_VEX_0F3A7E) },
9306 { PREFIX_TABLE (PREFIX_VEX_0F3A7F) },
c0f3af97 9307 /* 80 */
592d1631
L
9308 { Bad_Opcode },
9309 { Bad_Opcode },
9310 { Bad_Opcode },
9311 { Bad_Opcode },
9312 { Bad_Opcode },
9313 { Bad_Opcode },
9314 { Bad_Opcode },
9315 { Bad_Opcode },
c0f3af97 9316 /* 88 */
592d1631
L
9317 { Bad_Opcode },
9318 { Bad_Opcode },
9319 { Bad_Opcode },
9320 { Bad_Opcode },
9321 { Bad_Opcode },
9322 { Bad_Opcode },
9323 { Bad_Opcode },
9324 { Bad_Opcode },
c0f3af97 9325 /* 90 */
592d1631
L
9326 { Bad_Opcode },
9327 { Bad_Opcode },
9328 { Bad_Opcode },
9329 { Bad_Opcode },
9330 { Bad_Opcode },
9331 { Bad_Opcode },
9332 { Bad_Opcode },
9333 { Bad_Opcode },
c0f3af97 9334 /* 98 */
592d1631
L
9335 { Bad_Opcode },
9336 { Bad_Opcode },
9337 { Bad_Opcode },
9338 { Bad_Opcode },
9339 { Bad_Opcode },
9340 { Bad_Opcode },
9341 { Bad_Opcode },
9342 { Bad_Opcode },
c0f3af97 9343 /* a0 */
592d1631
L
9344 { Bad_Opcode },
9345 { Bad_Opcode },
9346 { Bad_Opcode },
9347 { Bad_Opcode },
9348 { Bad_Opcode },
9349 { Bad_Opcode },
9350 { Bad_Opcode },
9351 { Bad_Opcode },
c0f3af97 9352 /* a8 */
592d1631
L
9353 { Bad_Opcode },
9354 { Bad_Opcode },
9355 { Bad_Opcode },
9356 { Bad_Opcode },
9357 { Bad_Opcode },
9358 { Bad_Opcode },
9359 { Bad_Opcode },
9360 { Bad_Opcode },
c0f3af97 9361 /* b0 */
592d1631
L
9362 { Bad_Opcode },
9363 { Bad_Opcode },
9364 { Bad_Opcode },
9365 { Bad_Opcode },
9366 { Bad_Opcode },
9367 { Bad_Opcode },
9368 { Bad_Opcode },
9369 { Bad_Opcode },
c0f3af97 9370 /* b8 */
592d1631
L
9371 { Bad_Opcode },
9372 { Bad_Opcode },
9373 { Bad_Opcode },
9374 { Bad_Opcode },
9375 { Bad_Opcode },
9376 { Bad_Opcode },
9377 { Bad_Opcode },
9378 { Bad_Opcode },
c0f3af97 9379 /* c0 */
592d1631
L
9380 { Bad_Opcode },
9381 { Bad_Opcode },
9382 { Bad_Opcode },
9383 { Bad_Opcode },
9384 { Bad_Opcode },
9385 { Bad_Opcode },
9386 { Bad_Opcode },
9387 { Bad_Opcode },
c0f3af97 9388 /* c8 */
592d1631
L
9389 { Bad_Opcode },
9390 { Bad_Opcode },
9391 { Bad_Opcode },
9392 { Bad_Opcode },
9393 { Bad_Opcode },
9394 { Bad_Opcode },
48521003
IT
9395 { PREFIX_TABLE(PREFIX_VEX_0F3ACE) },
9396 { PREFIX_TABLE(PREFIX_VEX_0F3ACF) },
c0f3af97 9397 /* d0 */
592d1631
L
9398 { Bad_Opcode },
9399 { Bad_Opcode },
9400 { Bad_Opcode },
9401 { Bad_Opcode },
9402 { Bad_Opcode },
9403 { Bad_Opcode },
9404 { Bad_Opcode },
9405 { Bad_Opcode },
c0f3af97 9406 /* d8 */
592d1631
L
9407 { Bad_Opcode },
9408 { Bad_Opcode },
9409 { Bad_Opcode },
9410 { Bad_Opcode },
9411 { Bad_Opcode },
9412 { Bad_Opcode },
9413 { Bad_Opcode },
592a252b 9414 { PREFIX_TABLE (PREFIX_VEX_0F3ADF) },
c0f3af97 9415 /* e0 */
592d1631
L
9416 { Bad_Opcode },
9417 { Bad_Opcode },
9418 { Bad_Opcode },
9419 { Bad_Opcode },
9420 { Bad_Opcode },
9421 { Bad_Opcode },
9422 { Bad_Opcode },
9423 { Bad_Opcode },
c0f3af97 9424 /* e8 */
592d1631
L
9425 { Bad_Opcode },
9426 { Bad_Opcode },
9427 { Bad_Opcode },
9428 { Bad_Opcode },
9429 { Bad_Opcode },
9430 { Bad_Opcode },
9431 { Bad_Opcode },
9432 { Bad_Opcode },
c0f3af97 9433 /* f0 */
6c30d220 9434 { PREFIX_TABLE (PREFIX_VEX_0F3AF0) },
592d1631
L
9435 { Bad_Opcode },
9436 { Bad_Opcode },
9437 { Bad_Opcode },
9438 { Bad_Opcode },
9439 { Bad_Opcode },
9440 { Bad_Opcode },
9441 { Bad_Opcode },
c0f3af97 9442 /* f8 */
592d1631
L
9443 { Bad_Opcode },
9444 { Bad_Opcode },
9445 { Bad_Opcode },
9446 { Bad_Opcode },
9447 { Bad_Opcode },
9448 { Bad_Opcode },
9449 { Bad_Opcode },
9450 { Bad_Opcode },
c0f3af97
L
9451 },
9452};
9453
43234a1e
L
9454#define NEED_OPCODE_TABLE
9455#include "i386-dis-evex.h"
9456#undef NEED_OPCODE_TABLE
c0f3af97 9457static const struct dis386 vex_len_table[][2] = {
592a252b 9458 /* VEX_LEN_0F10_P_1 */
c0f3af97 9459 {
592a252b
L
9460 { VEX_W_TABLE (VEX_W_0F10_P_1) },
9461 { VEX_W_TABLE (VEX_W_0F10_P_1) },
c0f3af97
L
9462 },
9463
592a252b 9464 /* VEX_LEN_0F10_P_3 */
c0f3af97 9465 {
592a252b
L
9466 { VEX_W_TABLE (VEX_W_0F10_P_3) },
9467 { VEX_W_TABLE (VEX_W_0F10_P_3) },
c0f3af97
L
9468 },
9469
592a252b 9470 /* VEX_LEN_0F11_P_1 */
c0f3af97 9471 {
592a252b
L
9472 { VEX_W_TABLE (VEX_W_0F11_P_1) },
9473 { VEX_W_TABLE (VEX_W_0F11_P_1) },
c0f3af97
L
9474 },
9475
592a252b 9476 /* VEX_LEN_0F11_P_3 */
c0f3af97 9477 {
592a252b
L
9478 { VEX_W_TABLE (VEX_W_0F11_P_3) },
9479 { VEX_W_TABLE (VEX_W_0F11_P_3) },
c0f3af97
L
9480 },
9481
592a252b 9482 /* VEX_LEN_0F12_P_0_M_0 */
c0f3af97 9483 {
592a252b 9484 { VEX_W_TABLE (VEX_W_0F12_P_0_M_0) },
c0f3af97
L
9485 },
9486
592a252b 9487 /* VEX_LEN_0F12_P_0_M_1 */
c0f3af97 9488 {
592a252b 9489 { VEX_W_TABLE (VEX_W_0F12_P_0_M_1) },
c0f3af97
L
9490 },
9491
592a252b 9492 /* VEX_LEN_0F12_P_2 */
c0f3af97 9493 {
592a252b 9494 { VEX_W_TABLE (VEX_W_0F12_P_2) },
c0f3af97
L
9495 },
9496
592a252b 9497 /* VEX_LEN_0F13_M_0 */
c0f3af97 9498 {
592a252b 9499 { VEX_W_TABLE (VEX_W_0F13_M_0) },
c0f3af97
L
9500 },
9501
592a252b 9502 /* VEX_LEN_0F16_P_0_M_0 */
c0f3af97 9503 {
592a252b 9504 { VEX_W_TABLE (VEX_W_0F16_P_0_M_0) },
c0f3af97
L
9505 },
9506
592a252b 9507 /* VEX_LEN_0F16_P_0_M_1 */
c0f3af97 9508 {
592a252b 9509 { VEX_W_TABLE (VEX_W_0F16_P_0_M_1) },
c0f3af97
L
9510 },
9511
592a252b 9512 /* VEX_LEN_0F16_P_2 */
c0f3af97 9513 {
592a252b 9514 { VEX_W_TABLE (VEX_W_0F16_P_2) },
c0f3af97
L
9515 },
9516
592a252b 9517 /* VEX_LEN_0F17_M_0 */
c0f3af97 9518 {
592a252b 9519 { VEX_W_TABLE (VEX_W_0F17_M_0) },
c0f3af97
L
9520 },
9521
592a252b 9522 /* VEX_LEN_0F2A_P_1 */
c0f3af97 9523 {
bf890a93
IT
9524 { "vcvtsi2ss%LQ", { XMScalar, VexScalar, Ev }, 0 },
9525 { "vcvtsi2ss%LQ", { XMScalar, VexScalar, Ev }, 0 },
c0f3af97
L
9526 },
9527
592a252b 9528 /* VEX_LEN_0F2A_P_3 */
c0f3af97 9529 {
bf890a93
IT
9530 { "vcvtsi2sd%LQ", { XMScalar, VexScalar, Ev }, 0 },
9531 { "vcvtsi2sd%LQ", { XMScalar, VexScalar, Ev }, 0 },
c0f3af97
L
9532 },
9533
592a252b 9534 /* VEX_LEN_0F2C_P_1 */
c0f3af97 9535 {
bf890a93
IT
9536 { "vcvttss2siY", { Gv, EXdScalar }, 0 },
9537 { "vcvttss2siY", { Gv, EXdScalar }, 0 },
c0f3af97
L
9538 },
9539
592a252b 9540 /* VEX_LEN_0F2C_P_3 */
c0f3af97 9541 {
bf890a93
IT
9542 { "vcvttsd2siY", { Gv, EXqScalar }, 0 },
9543 { "vcvttsd2siY", { Gv, EXqScalar }, 0 },
c0f3af97
L
9544 },
9545
592a252b 9546 /* VEX_LEN_0F2D_P_1 */
c0f3af97 9547 {
bf890a93
IT
9548 { "vcvtss2siY", { Gv, EXdScalar }, 0 },
9549 { "vcvtss2siY", { Gv, EXdScalar }, 0 },
c0f3af97
L
9550 },
9551
592a252b 9552 /* VEX_LEN_0F2D_P_3 */
c0f3af97 9553 {
bf890a93
IT
9554 { "vcvtsd2siY", { Gv, EXqScalar }, 0 },
9555 { "vcvtsd2siY", { Gv, EXqScalar }, 0 },
c0f3af97
L
9556 },
9557
592a252b 9558 /* VEX_LEN_0F2E_P_0 */
c0f3af97 9559 {
592a252b
L
9560 { VEX_W_TABLE (VEX_W_0F2E_P_0) },
9561 { VEX_W_TABLE (VEX_W_0F2E_P_0) },
c0f3af97
L
9562 },
9563
592a252b 9564 /* VEX_LEN_0F2E_P_2 */
c0f3af97 9565 {
592a252b
L
9566 { VEX_W_TABLE (VEX_W_0F2E_P_2) },
9567 { VEX_W_TABLE (VEX_W_0F2E_P_2) },
c0f3af97
L
9568 },
9569
592a252b 9570 /* VEX_LEN_0F2F_P_0 */
c0f3af97 9571 {
592a252b
L
9572 { VEX_W_TABLE (VEX_W_0F2F_P_0) },
9573 { VEX_W_TABLE (VEX_W_0F2F_P_0) },
c0f3af97
L
9574 },
9575
592a252b 9576 /* VEX_LEN_0F2F_P_2 */
c0f3af97 9577 {
592a252b
L
9578 { VEX_W_TABLE (VEX_W_0F2F_P_2) },
9579 { VEX_W_TABLE (VEX_W_0F2F_P_2) },
c0f3af97
L
9580 },
9581
43234a1e
L
9582 /* VEX_LEN_0F41_P_0 */
9583 {
9584 { Bad_Opcode },
9585 { VEX_W_TABLE (VEX_W_0F41_P_0_LEN_1) },
9586 },
1ba585e8
IT
9587 /* VEX_LEN_0F41_P_2 */
9588 {
9589 { Bad_Opcode },
9590 { VEX_W_TABLE (VEX_W_0F41_P_2_LEN_1) },
9591 },
43234a1e
L
9592 /* VEX_LEN_0F42_P_0 */
9593 {
9594 { Bad_Opcode },
9595 { VEX_W_TABLE (VEX_W_0F42_P_0_LEN_1) },
9596 },
1ba585e8
IT
9597 /* VEX_LEN_0F42_P_2 */
9598 {
9599 { Bad_Opcode },
9600 { VEX_W_TABLE (VEX_W_0F42_P_2_LEN_1) },
9601 },
43234a1e
L
9602 /* VEX_LEN_0F44_P_0 */
9603 {
9604 { VEX_W_TABLE (VEX_W_0F44_P_0_LEN_0) },
9605 },
1ba585e8
IT
9606 /* VEX_LEN_0F44_P_2 */
9607 {
9608 { VEX_W_TABLE (VEX_W_0F44_P_2_LEN_0) },
9609 },
43234a1e
L
9610 /* VEX_LEN_0F45_P_0 */
9611 {
9612 { Bad_Opcode },
9613 { VEX_W_TABLE (VEX_W_0F45_P_0_LEN_1) },
9614 },
1ba585e8
IT
9615 /* VEX_LEN_0F45_P_2 */
9616 {
9617 { Bad_Opcode },
9618 { VEX_W_TABLE (VEX_W_0F45_P_2_LEN_1) },
9619 },
43234a1e
L
9620 /* VEX_LEN_0F46_P_0 */
9621 {
9622 { Bad_Opcode },
9623 { VEX_W_TABLE (VEX_W_0F46_P_0_LEN_1) },
9624 },
1ba585e8
IT
9625 /* VEX_LEN_0F46_P_2 */
9626 {
9627 { Bad_Opcode },
9628 { VEX_W_TABLE (VEX_W_0F46_P_2_LEN_1) },
9629 },
43234a1e
L
9630 /* VEX_LEN_0F47_P_0 */
9631 {
9632 { Bad_Opcode },
9633 { VEX_W_TABLE (VEX_W_0F47_P_0_LEN_1) },
9634 },
1ba585e8
IT
9635 /* VEX_LEN_0F47_P_2 */
9636 {
9637 { Bad_Opcode },
9638 { VEX_W_TABLE (VEX_W_0F47_P_2_LEN_1) },
9639 },
9640 /* VEX_LEN_0F4A_P_0 */
9641 {
9642 { Bad_Opcode },
9643 { VEX_W_TABLE (VEX_W_0F4A_P_0_LEN_1) },
9644 },
9645 /* VEX_LEN_0F4A_P_2 */
9646 {
9647 { Bad_Opcode },
9648 { VEX_W_TABLE (VEX_W_0F4A_P_2_LEN_1) },
9649 },
9650 /* VEX_LEN_0F4B_P_0 */
9651 {
9652 { Bad_Opcode },
9653 { VEX_W_TABLE (VEX_W_0F4B_P_0_LEN_1) },
9654 },
43234a1e
L
9655 /* VEX_LEN_0F4B_P_2 */
9656 {
9657 { Bad_Opcode },
9658 { VEX_W_TABLE (VEX_W_0F4B_P_2_LEN_1) },
9659 },
9660
592a252b 9661 /* VEX_LEN_0F51_P_1 */
c0f3af97 9662 {
592a252b
L
9663 { VEX_W_TABLE (VEX_W_0F51_P_1) },
9664 { VEX_W_TABLE (VEX_W_0F51_P_1) },
c0f3af97
L
9665 },
9666
592a252b 9667 /* VEX_LEN_0F51_P_3 */
c0f3af97 9668 {
592a252b
L
9669 { VEX_W_TABLE (VEX_W_0F51_P_3) },
9670 { VEX_W_TABLE (VEX_W_0F51_P_3) },
c0f3af97
L
9671 },
9672
592a252b 9673 /* VEX_LEN_0F52_P_1 */
c0f3af97 9674 {
592a252b
L
9675 { VEX_W_TABLE (VEX_W_0F52_P_1) },
9676 { VEX_W_TABLE (VEX_W_0F52_P_1) },
c0f3af97
L
9677 },
9678
592a252b 9679 /* VEX_LEN_0F53_P_1 */
c0f3af97 9680 {
592a252b
L
9681 { VEX_W_TABLE (VEX_W_0F53_P_1) },
9682 { VEX_W_TABLE (VEX_W_0F53_P_1) },
c0f3af97
L
9683 },
9684
592a252b 9685 /* VEX_LEN_0F58_P_1 */
c0f3af97 9686 {
592a252b
L
9687 { VEX_W_TABLE (VEX_W_0F58_P_1) },
9688 { VEX_W_TABLE (VEX_W_0F58_P_1) },
c0f3af97
L
9689 },
9690
592a252b 9691 /* VEX_LEN_0F58_P_3 */
c0f3af97 9692 {
592a252b
L
9693 { VEX_W_TABLE (VEX_W_0F58_P_3) },
9694 { VEX_W_TABLE (VEX_W_0F58_P_3) },
c0f3af97
L
9695 },
9696
592a252b 9697 /* VEX_LEN_0F59_P_1 */
c0f3af97 9698 {
592a252b
L
9699 { VEX_W_TABLE (VEX_W_0F59_P_1) },
9700 { VEX_W_TABLE (VEX_W_0F59_P_1) },
c0f3af97
L
9701 },
9702
592a252b 9703 /* VEX_LEN_0F59_P_3 */
c0f3af97 9704 {
592a252b
L
9705 { VEX_W_TABLE (VEX_W_0F59_P_3) },
9706 { VEX_W_TABLE (VEX_W_0F59_P_3) },
c0f3af97
L
9707 },
9708
592a252b 9709 /* VEX_LEN_0F5A_P_1 */
c0f3af97 9710 {
592a252b
L
9711 { VEX_W_TABLE (VEX_W_0F5A_P_1) },
9712 { VEX_W_TABLE (VEX_W_0F5A_P_1) },
c0f3af97
L
9713 },
9714
592a252b 9715 /* VEX_LEN_0F5A_P_3 */
c0f3af97 9716 {
592a252b
L
9717 { VEX_W_TABLE (VEX_W_0F5A_P_3) },
9718 { VEX_W_TABLE (VEX_W_0F5A_P_3) },
c0f3af97
L
9719 },
9720
592a252b 9721 /* VEX_LEN_0F5C_P_1 */
c0f3af97 9722 {
592a252b
L
9723 { VEX_W_TABLE (VEX_W_0F5C_P_1) },
9724 { VEX_W_TABLE (VEX_W_0F5C_P_1) },
c0f3af97
L
9725 },
9726
592a252b 9727 /* VEX_LEN_0F5C_P_3 */
c0f3af97 9728 {
592a252b
L
9729 { VEX_W_TABLE (VEX_W_0F5C_P_3) },
9730 { VEX_W_TABLE (VEX_W_0F5C_P_3) },
c0f3af97
L
9731 },
9732
592a252b 9733 /* VEX_LEN_0F5D_P_1 */
c0f3af97 9734 {
592a252b
L
9735 { VEX_W_TABLE (VEX_W_0F5D_P_1) },
9736 { VEX_W_TABLE (VEX_W_0F5D_P_1) },
c0f3af97
L
9737 },
9738
592a252b 9739 /* VEX_LEN_0F5D_P_3 */
c0f3af97 9740 {
592a252b
L
9741 { VEX_W_TABLE (VEX_W_0F5D_P_3) },
9742 { VEX_W_TABLE (VEX_W_0F5D_P_3) },
c0f3af97
L
9743 },
9744
592a252b 9745 /* VEX_LEN_0F5E_P_1 */
c0f3af97 9746 {
592a252b
L
9747 { VEX_W_TABLE (VEX_W_0F5E_P_1) },
9748 { VEX_W_TABLE (VEX_W_0F5E_P_1) },
c0f3af97
L
9749 },
9750
592a252b 9751 /* VEX_LEN_0F5E_P_3 */
c0f3af97 9752 {
592a252b
L
9753 { VEX_W_TABLE (VEX_W_0F5E_P_3) },
9754 { VEX_W_TABLE (VEX_W_0F5E_P_3) },
c0f3af97
L
9755 },
9756
592a252b 9757 /* VEX_LEN_0F5F_P_1 */
c0f3af97 9758 {
592a252b
L
9759 { VEX_W_TABLE (VEX_W_0F5F_P_1) },
9760 { VEX_W_TABLE (VEX_W_0F5F_P_1) },
c0f3af97
L
9761 },
9762
592a252b 9763 /* VEX_LEN_0F5F_P_3 */
c0f3af97 9764 {
592a252b
L
9765 { VEX_W_TABLE (VEX_W_0F5F_P_3) },
9766 { VEX_W_TABLE (VEX_W_0F5F_P_3) },
c0f3af97
L
9767 },
9768
592a252b 9769 /* VEX_LEN_0F6E_P_2 */
c0f3af97 9770 {
bf890a93
IT
9771 { "vmovK", { XMScalar, Edq }, 0 },
9772 { "vmovK", { XMScalar, Edq }, 0 },
c0f3af97
L
9773 },
9774
592a252b 9775 /* VEX_LEN_0F7E_P_1 */
c0f3af97 9776 {
592a252b
L
9777 { VEX_W_TABLE (VEX_W_0F7E_P_1) },
9778 { VEX_W_TABLE (VEX_W_0F7E_P_1) },
c0f3af97
L
9779 },
9780
592a252b 9781 /* VEX_LEN_0F7E_P_2 */
c0f3af97 9782 {
bf890a93
IT
9783 { "vmovK", { Edq, XMScalar }, 0 },
9784 { "vmovK", { Edq, XMScalar }, 0 },
c0f3af97
L
9785 },
9786
43234a1e
L
9787 /* VEX_LEN_0F90_P_0 */
9788 {
9789 { VEX_W_TABLE (VEX_W_0F90_P_0_LEN_0) },
9790 },
9791
1ba585e8
IT
9792 /* VEX_LEN_0F90_P_2 */
9793 {
9794 { VEX_W_TABLE (VEX_W_0F90_P_2_LEN_0) },
9795 },
9796
43234a1e
L
9797 /* VEX_LEN_0F91_P_0 */
9798 {
9799 { VEX_W_TABLE (VEX_W_0F91_P_0_LEN_0) },
9800 },
9801
1ba585e8
IT
9802 /* VEX_LEN_0F91_P_2 */
9803 {
9804 { VEX_W_TABLE (VEX_W_0F91_P_2_LEN_0) },
9805 },
9806
43234a1e
L
9807 /* VEX_LEN_0F92_P_0 */
9808 {
9809 { VEX_W_TABLE (VEX_W_0F92_P_0_LEN_0) },
9810 },
9811
90a915bf
IT
9812 /* VEX_LEN_0F92_P_2 */
9813 {
9814 { VEX_W_TABLE (VEX_W_0F92_P_2_LEN_0) },
9815 },
9816
1ba585e8
IT
9817 /* VEX_LEN_0F92_P_3 */
9818 {
9819 { VEX_W_TABLE (VEX_W_0F92_P_3_LEN_0) },
9820 },
9821
43234a1e
L
9822 /* VEX_LEN_0F93_P_0 */
9823 {
9824 { VEX_W_TABLE (VEX_W_0F93_P_0_LEN_0) },
9825 },
9826
90a915bf
IT
9827 /* VEX_LEN_0F93_P_2 */
9828 {
9829 { VEX_W_TABLE (VEX_W_0F93_P_2_LEN_0) },
9830 },
9831
1ba585e8
IT
9832 /* VEX_LEN_0F93_P_3 */
9833 {
9834 { VEX_W_TABLE (VEX_W_0F93_P_3_LEN_0) },
9835 },
9836
43234a1e
L
9837 /* VEX_LEN_0F98_P_0 */
9838 {
9839 { VEX_W_TABLE (VEX_W_0F98_P_0_LEN_0) },
9840 },
9841
1ba585e8
IT
9842 /* VEX_LEN_0F98_P_2 */
9843 {
9844 { VEX_W_TABLE (VEX_W_0F98_P_2_LEN_0) },
9845 },
9846
9847 /* VEX_LEN_0F99_P_0 */
9848 {
9849 { VEX_W_TABLE (VEX_W_0F99_P_0_LEN_0) },
9850 },
9851
9852 /* VEX_LEN_0F99_P_2 */
9853 {
9854 { VEX_W_TABLE (VEX_W_0F99_P_2_LEN_0) },
9855 },
9856
6c30d220 9857 /* VEX_LEN_0FAE_R_2_M_0 */
c0f3af97 9858 {
6c30d220 9859 { VEX_W_TABLE (VEX_W_0FAE_R_2_M_0) },
c0f3af97
L
9860 },
9861
6c30d220 9862 /* VEX_LEN_0FAE_R_3_M_0 */
c0f3af97 9863 {
6c30d220 9864 { VEX_W_TABLE (VEX_W_0FAE_R_3_M_0) },
c0f3af97
L
9865 },
9866
6c30d220 9867 /* VEX_LEN_0FC2_P_1 */
c0f3af97 9868 {
6c30d220
L
9869 { VEX_W_TABLE (VEX_W_0FC2_P_1) },
9870 { VEX_W_TABLE (VEX_W_0FC2_P_1) },
c0f3af97
L
9871 },
9872
6c30d220 9873 /* VEX_LEN_0FC2_P_3 */
c0f3af97 9874 {
6c30d220
L
9875 { VEX_W_TABLE (VEX_W_0FC2_P_3) },
9876 { VEX_W_TABLE (VEX_W_0FC2_P_3) },
c0f3af97
L
9877 },
9878
6c30d220 9879 /* VEX_LEN_0FC4_P_2 */
c0f3af97 9880 {
6c30d220 9881 { VEX_W_TABLE (VEX_W_0FC4_P_2) },
c0f3af97
L
9882 },
9883
6c30d220 9884 /* VEX_LEN_0FC5_P_2 */
c0f3af97 9885 {
6c30d220 9886 { VEX_W_TABLE (VEX_W_0FC5_P_2) },
c0f3af97
L
9887 },
9888
6c30d220 9889 /* VEX_LEN_0FD6_P_2 */
c0f3af97 9890 {
6c30d220
L
9891 { VEX_W_TABLE (VEX_W_0FD6_P_2) },
9892 { VEX_W_TABLE (VEX_W_0FD6_P_2) },
c0f3af97
L
9893 },
9894
6c30d220 9895 /* VEX_LEN_0FF7_P_2 */
c0f3af97 9896 {
6c30d220 9897 { VEX_W_TABLE (VEX_W_0FF7_P_2) },
c0f3af97
L
9898 },
9899
6c30d220 9900 /* VEX_LEN_0F3816_P_2 */
c0f3af97 9901 {
6c30d220
L
9902 { Bad_Opcode },
9903 { VEX_W_TABLE (VEX_W_0F3816_P_2) },
c0f3af97
L
9904 },
9905
6c30d220 9906 /* VEX_LEN_0F3819_P_2 */
c0f3af97 9907 {
6c30d220
L
9908 { Bad_Opcode },
9909 { VEX_W_TABLE (VEX_W_0F3819_P_2) },
c0f3af97
L
9910 },
9911
6c30d220 9912 /* VEX_LEN_0F381A_P_2_M_0 */
c0f3af97 9913 {
6c30d220
L
9914 { Bad_Opcode },
9915 { VEX_W_TABLE (VEX_W_0F381A_P_2_M_0) },
c0f3af97
L
9916 },
9917
6c30d220 9918 /* VEX_LEN_0F3836_P_2 */
c0f3af97 9919 {
6c30d220
L
9920 { Bad_Opcode },
9921 { VEX_W_TABLE (VEX_W_0F3836_P_2) },
c0f3af97
L
9922 },
9923
592a252b 9924 /* VEX_LEN_0F3841_P_2 */
c0f3af97 9925 {
592a252b 9926 { VEX_W_TABLE (VEX_W_0F3841_P_2) },
c0f3af97
L
9927 },
9928
6c30d220
L
9929 /* VEX_LEN_0F385A_P_2_M_0 */
9930 {
9931 { Bad_Opcode },
9932 { VEX_W_TABLE (VEX_W_0F385A_P_2_M_0) },
9933 },
9934
592a252b 9935 /* VEX_LEN_0F38DB_P_2 */
a5ff0eb2 9936 {
592a252b 9937 { VEX_W_TABLE (VEX_W_0F38DB_P_2) },
a5ff0eb2
L
9938 },
9939
f12dc422
L
9940 /* VEX_LEN_0F38F2_P_0 */
9941 {
bf890a93 9942 { "andnS", { Gdq, VexGdq, Edq }, 0 },
f12dc422
L
9943 },
9944
9945 /* VEX_LEN_0F38F3_R_1_P_0 */
9946 {
bf890a93 9947 { "blsrS", { VexGdq, Edq }, 0 },
f12dc422
L
9948 },
9949
9950 /* VEX_LEN_0F38F3_R_2_P_0 */
9951 {
bf890a93 9952 { "blsmskS", { VexGdq, Edq }, 0 },
f12dc422
L
9953 },
9954
9955 /* VEX_LEN_0F38F3_R_3_P_0 */
9956 {
bf890a93 9957 { "blsiS", { VexGdq, Edq }, 0 },
f12dc422
L
9958 },
9959
6c30d220
L
9960 /* VEX_LEN_0F38F5_P_0 */
9961 {
bf890a93 9962 { "bzhiS", { Gdq, Edq, VexGdq }, 0 },
6c30d220
L
9963 },
9964
9965 /* VEX_LEN_0F38F5_P_1 */
9966 {
bf890a93 9967 { "pextS", { Gdq, VexGdq, Edq }, 0 },
6c30d220
L
9968 },
9969
9970 /* VEX_LEN_0F38F5_P_3 */
9971 {
bf890a93 9972 { "pdepS", { Gdq, VexGdq, Edq }, 0 },
6c30d220
L
9973 },
9974
9975 /* VEX_LEN_0F38F6_P_3 */
9976 {
bf890a93 9977 { "mulxS", { Gdq, VexGdq, Edq }, 0 },
6c30d220
L
9978 },
9979
f12dc422
L
9980 /* VEX_LEN_0F38F7_P_0 */
9981 {
bf890a93 9982 { "bextrS", { Gdq, Edq, VexGdq }, 0 },
f12dc422
L
9983 },
9984
6c30d220
L
9985 /* VEX_LEN_0F38F7_P_1 */
9986 {
bf890a93 9987 { "sarxS", { Gdq, Edq, VexGdq }, 0 },
6c30d220
L
9988 },
9989
9990 /* VEX_LEN_0F38F7_P_2 */
9991 {
bf890a93 9992 { "shlxS", { Gdq, Edq, VexGdq }, 0 },
6c30d220
L
9993 },
9994
9995 /* VEX_LEN_0F38F7_P_3 */
9996 {
bf890a93 9997 { "shrxS", { Gdq, Edq, VexGdq }, 0 },
6c30d220
L
9998 },
9999
10000 /* VEX_LEN_0F3A00_P_2 */
10001 {
10002 { Bad_Opcode },
10003 { VEX_W_TABLE (VEX_W_0F3A00_P_2) },
10004 },
10005
10006 /* VEX_LEN_0F3A01_P_2 */
10007 {
10008 { Bad_Opcode },
10009 { VEX_W_TABLE (VEX_W_0F3A01_P_2) },
10010 },
10011
592a252b 10012 /* VEX_LEN_0F3A06_P_2 */
c0f3af97 10013 {
592d1631 10014 { Bad_Opcode },
592a252b 10015 { VEX_W_TABLE (VEX_W_0F3A06_P_2) },
c0f3af97
L
10016 },
10017
592a252b 10018 /* VEX_LEN_0F3A0A_P_2 */
c0f3af97 10019 {
592a252b
L
10020 { VEX_W_TABLE (VEX_W_0F3A0A_P_2) },
10021 { VEX_W_TABLE (VEX_W_0F3A0A_P_2) },
c0f3af97
L
10022 },
10023
592a252b 10024 /* VEX_LEN_0F3A0B_P_2 */
c0f3af97 10025 {
592a252b
L
10026 { VEX_W_TABLE (VEX_W_0F3A0B_P_2) },
10027 { VEX_W_TABLE (VEX_W_0F3A0B_P_2) },
c0f3af97
L
10028 },
10029
592a252b 10030 /* VEX_LEN_0F3A14_P_2 */
c0f3af97 10031 {
592a252b 10032 { VEX_W_TABLE (VEX_W_0F3A14_P_2) },
c0f3af97
L
10033 },
10034
592a252b 10035 /* VEX_LEN_0F3A15_P_2 */
c0f3af97 10036 {
592a252b 10037 { VEX_W_TABLE (VEX_W_0F3A15_P_2) },
c0f3af97
L
10038 },
10039
592a252b 10040 /* VEX_LEN_0F3A16_P_2 */
c0f3af97 10041 {
bf890a93 10042 { "vpextrK", { Edq, XM, Ib }, 0 },
c0f3af97
L
10043 },
10044
592a252b 10045 /* VEX_LEN_0F3A17_P_2 */
c0f3af97 10046 {
bf890a93 10047 { "vextractps", { Edqd, XM, Ib }, 0 },
c0f3af97
L
10048 },
10049
592a252b 10050 /* VEX_LEN_0F3A18_P_2 */
c0f3af97 10051 {
592d1631 10052 { Bad_Opcode },
592a252b 10053 { VEX_W_TABLE (VEX_W_0F3A18_P_2) },
c0f3af97
L
10054 },
10055
592a252b 10056 /* VEX_LEN_0F3A19_P_2 */
c0f3af97 10057 {
592d1631 10058 { Bad_Opcode },
592a252b 10059 { VEX_W_TABLE (VEX_W_0F3A19_P_2) },
c0f3af97
L
10060 },
10061
592a252b 10062 /* VEX_LEN_0F3A20_P_2 */
c0f3af97 10063 {
592a252b 10064 { VEX_W_TABLE (VEX_W_0F3A20_P_2) },
c0f3af97
L
10065 },
10066
592a252b 10067 /* VEX_LEN_0F3A21_P_2 */
c0f3af97 10068 {
592a252b 10069 { VEX_W_TABLE (VEX_W_0F3A21_P_2) },
c0f3af97
L
10070 },
10071
592a252b 10072 /* VEX_LEN_0F3A22_P_2 */
c0f3af97 10073 {
bf890a93 10074 { "vpinsrK", { XM, Vex128, Edq, Ib }, 0 },
c0f3af97
L
10075 },
10076
43234a1e
L
10077 /* VEX_LEN_0F3A30_P_2 */
10078 {
10079 { VEX_W_TABLE (VEX_W_0F3A30_P_2_LEN_0) },
10080 },
10081
1ba585e8
IT
10082 /* VEX_LEN_0F3A31_P_2 */
10083 {
10084 { VEX_W_TABLE (VEX_W_0F3A31_P_2_LEN_0) },
10085 },
10086
43234a1e
L
10087 /* VEX_LEN_0F3A32_P_2 */
10088 {
10089 { VEX_W_TABLE (VEX_W_0F3A32_P_2_LEN_0) },
10090 },
10091
1ba585e8
IT
10092 /* VEX_LEN_0F3A33_P_2 */
10093 {
10094 { VEX_W_TABLE (VEX_W_0F3A33_P_2_LEN_0) },
10095 },
10096
6c30d220 10097 /* VEX_LEN_0F3A38_P_2 */
c0f3af97 10098 {
6c30d220
L
10099 { Bad_Opcode },
10100 { VEX_W_TABLE (VEX_W_0F3A38_P_2) },
c0f3af97
L
10101 },
10102
6c30d220 10103 /* VEX_LEN_0F3A39_P_2 */
c0f3af97 10104 {
6c30d220
L
10105 { Bad_Opcode },
10106 { VEX_W_TABLE (VEX_W_0F3A39_P_2) },
10107 },
10108
10109 /* VEX_LEN_0F3A41_P_2 */
10110 {
10111 { VEX_W_TABLE (VEX_W_0F3A41_P_2) },
c0f3af97
L
10112 },
10113
6c30d220 10114 /* VEX_LEN_0F3A46_P_2 */
c0f3af97 10115 {
6c30d220
L
10116 { Bad_Opcode },
10117 { VEX_W_TABLE (VEX_W_0F3A46_P_2) },
c0f3af97
L
10118 },
10119
592a252b 10120 /* VEX_LEN_0F3A60_P_2 */
c0f3af97 10121 {
15c7c1d8 10122 { "vpcmpestrm", { XM, { PCMPESTR_Fixup, x_mode }, Ib }, 0 },
c0f3af97
L
10123 },
10124
592a252b 10125 /* VEX_LEN_0F3A61_P_2 */
c0f3af97 10126 {
15c7c1d8 10127 { "vpcmpestri", { XM, { PCMPESTR_Fixup, x_mode }, Ib }, 0 },
c0f3af97
L
10128 },
10129
592a252b 10130 /* VEX_LEN_0F3A62_P_2 */
c0f3af97 10131 {
592a252b 10132 { VEX_W_TABLE (VEX_W_0F3A62_P_2) },
c0f3af97
L
10133 },
10134
592a252b 10135 /* VEX_LEN_0F3A63_P_2 */
c0f3af97 10136 {
592a252b 10137 { VEX_W_TABLE (VEX_W_0F3A63_P_2) },
c0f3af97
L
10138 },
10139
592a252b 10140 /* VEX_LEN_0F3A6A_P_2 */
922d8de8 10141 {
bf890a93 10142 { "vfmaddss", { XMVexW, Vex128, EXdVexW, EXdVexW, VexI4 }, 0 },
922d8de8
DR
10143 },
10144
592a252b 10145 /* VEX_LEN_0F3A6B_P_2 */
922d8de8 10146 {
bf890a93 10147 { "vfmaddsd", { XMVexW, Vex128, EXqVexW, EXqVexW, VexI4 }, 0 },
922d8de8
DR
10148 },
10149
592a252b 10150 /* VEX_LEN_0F3A6E_P_2 */
922d8de8 10151 {
bf890a93 10152 { "vfmsubss", { XMVexW, Vex128, EXdVexW, EXdVexW, VexI4 }, 0 },
922d8de8
DR
10153 },
10154
592a252b 10155 /* VEX_LEN_0F3A6F_P_2 */
922d8de8 10156 {
bf890a93 10157 { "vfmsubsd", { XMVexW, Vex128, EXqVexW, EXqVexW, VexI4 }, 0 },
922d8de8
DR
10158 },
10159
592a252b 10160 /* VEX_LEN_0F3A7A_P_2 */
922d8de8 10161 {
bf890a93 10162 { "vfnmaddss", { XMVexW, Vex128, EXdVexW, EXdVexW, VexI4 }, 0 },
922d8de8
DR
10163 },
10164
592a252b 10165 /* VEX_LEN_0F3A7B_P_2 */
922d8de8 10166 {
bf890a93 10167 { "vfnmaddsd", { XMVexW, Vex128, EXqVexW, EXqVexW, VexI4 }, 0 },
922d8de8
DR
10168 },
10169
592a252b 10170 /* VEX_LEN_0F3A7E_P_2 */
922d8de8 10171 {
bf890a93 10172 { "vfnmsubss", { XMVexW, Vex128, EXdVexW, EXdVexW, VexI4 }, 0 },
922d8de8
DR
10173 },
10174
592a252b 10175 /* VEX_LEN_0F3A7F_P_2 */
922d8de8 10176 {
bf890a93 10177 { "vfnmsubsd", { XMVexW, Vex128, EXqVexW, EXqVexW, VexI4 }, 0 },
922d8de8
DR
10178 },
10179
592a252b 10180 /* VEX_LEN_0F3ADF_P_2 */
a5ff0eb2 10181 {
592a252b 10182 { VEX_W_TABLE (VEX_W_0F3ADF_P_2) },
a5ff0eb2 10183 },
4c807e72 10184
6c30d220
L
10185 /* VEX_LEN_0F3AF0_P_3 */
10186 {
bf890a93 10187 { "rorxS", { Gdq, Edq, Ib }, 0 },
6c30d220
L
10188 },
10189
ff688e1f
L
10190 /* VEX_LEN_0FXOP_08_CC */
10191 {
bf890a93 10192 { "vpcomb", { XM, Vex128, EXx, Ib }, 0 },
ff688e1f
L
10193 },
10194
10195 /* VEX_LEN_0FXOP_08_CD */
10196 {
bf890a93 10197 { "vpcomw", { XM, Vex128, EXx, Ib }, 0 },
ff688e1f
L
10198 },
10199
10200 /* VEX_LEN_0FXOP_08_CE */
10201 {
bf890a93 10202 { "vpcomd", { XM, Vex128, EXx, Ib }, 0 },
ff688e1f
L
10203 },
10204
10205 /* VEX_LEN_0FXOP_08_CF */
10206 {
bf890a93 10207 { "vpcomq", { XM, Vex128, EXx, Ib }, 0 },
ff688e1f
L
10208 },
10209
10210 /* VEX_LEN_0FXOP_08_EC */
10211 {
bf890a93 10212 { "vpcomub", { XM, Vex128, EXx, Ib }, 0 },
ff688e1f
L
10213 },
10214
10215 /* VEX_LEN_0FXOP_08_ED */
10216 {
bf890a93 10217 { "vpcomuw", { XM, Vex128, EXx, Ib }, 0 },
ff688e1f
L
10218 },
10219
10220 /* VEX_LEN_0FXOP_08_EE */
10221 {
bf890a93 10222 { "vpcomud", { XM, Vex128, EXx, Ib }, 0 },
ff688e1f
L
10223 },
10224
10225 /* VEX_LEN_0FXOP_08_EF */
10226 {
bf890a93 10227 { "vpcomuq", { XM, Vex128, EXx, Ib }, 0 },
ff688e1f
L
10228 },
10229
592a252b 10230 /* VEX_LEN_0FXOP_09_80 */
5dd85c99 10231 {
bf890a93
IT
10232 { "vfrczps", { XM, EXxmm }, 0 },
10233 { "vfrczps", { XM, EXymmq }, 0 },
5dd85c99 10234 },
4c807e72 10235
592a252b 10236 /* VEX_LEN_0FXOP_09_81 */
5dd85c99 10237 {
bf890a93
IT
10238 { "vfrczpd", { XM, EXxmm }, 0 },
10239 { "vfrczpd", { XM, EXymmq }, 0 },
5dd85c99 10240 },
331d2d0d
L
10241};
10242
9e30b8e0 10243static const struct dis386 vex_w_table[][2] = {
b844680a 10244 {
592a252b 10245 /* VEX_W_0F10_P_0 */
bf890a93 10246 { "vmovups", { XM, EXx }, 0 },
d8faab4e
L
10247 },
10248 {
592a252b 10249 /* VEX_W_0F10_P_1 */
bf890a93 10250 { "vmovss", { XMVexScalar, VexScalar, EXdScalar }, 0 },
d8faab4e
L
10251 },
10252 {
592a252b 10253 /* VEX_W_0F10_P_2 */
bf890a93 10254 { "vmovupd", { XM, EXx }, 0 },
d8faab4e
L
10255 },
10256 {
592a252b 10257 /* VEX_W_0F10_P_3 */
bf890a93 10258 { "vmovsd", { XMVexScalar, VexScalar, EXqScalar }, 0 },
d8faab4e
L
10259 },
10260 {
592a252b 10261 /* VEX_W_0F11_P_0 */
bf890a93 10262 { "vmovups", { EXxS, XM }, 0 },
d8faab4e
L
10263 },
10264 {
592a252b 10265 /* VEX_W_0F11_P_1 */
bf890a93 10266 { "vmovss", { EXdVexScalarS, VexScalar, XMScalar }, 0 },
b844680a
L
10267 },
10268 {
592a252b 10269 /* VEX_W_0F11_P_2 */
bf890a93 10270 { "vmovupd", { EXxS, XM }, 0 },
b844680a
L
10271 },
10272 {
592a252b 10273 /* VEX_W_0F11_P_3 */
bf890a93 10274 { "vmovsd", { EXqVexScalarS, VexScalar, XMScalar }, 0 },
d8faab4e
L
10275 },
10276 {
592a252b 10277 /* VEX_W_0F12_P_0_M_0 */
bf890a93 10278 { "vmovlps", { XM, Vex128, EXq }, 0 },
b844680a
L
10279 },
10280 {
592a252b 10281 /* VEX_W_0F12_P_0_M_1 */
bf890a93 10282 { "vmovhlps", { XM, Vex128, EXq }, 0 },
b844680a
L
10283 },
10284 {
592a252b 10285 /* VEX_W_0F12_P_1 */
bf890a93 10286 { "vmovsldup", { XM, EXx }, 0 },
b844680a
L
10287 },
10288 {
592a252b 10289 /* VEX_W_0F12_P_2 */
bf890a93 10290 { "vmovlpd", { XM, Vex128, EXq }, 0 },
b844680a
L
10291 },
10292 {
592a252b 10293 /* VEX_W_0F12_P_3 */
bf890a93 10294 { "vmovddup", { XM, EXymmq }, 0 },
b844680a
L
10295 },
10296 {
592a252b 10297 /* VEX_W_0F13_M_0 */
bf890a93 10298 { "vmovlpX", { EXq, XM }, 0 },
b844680a
L
10299 },
10300 {
592a252b 10301 /* VEX_W_0F14 */
bf890a93 10302 { "vunpcklpX", { XM, Vex, EXx }, 0 },
b844680a
L
10303 },
10304 {
592a252b 10305 /* VEX_W_0F15 */
bf890a93 10306 { "vunpckhpX", { XM, Vex, EXx }, 0 },
b844680a
L
10307 },
10308 {
592a252b 10309 /* VEX_W_0F16_P_0_M_0 */
bf890a93 10310 { "vmovhps", { XM, Vex128, EXq }, 0 },
9e30b8e0
L
10311 },
10312 {
592a252b 10313 /* VEX_W_0F16_P_0_M_1 */
bf890a93 10314 { "vmovlhps", { XM, Vex128, EXq }, 0 },
9e30b8e0
L
10315 },
10316 {
592a252b 10317 /* VEX_W_0F16_P_1 */
bf890a93 10318 { "vmovshdup", { XM, EXx }, 0 },
9e30b8e0
L
10319 },
10320 {
592a252b 10321 /* VEX_W_0F16_P_2 */
bf890a93 10322 { "vmovhpd", { XM, Vex128, EXq }, 0 },
9e30b8e0
L
10323 },
10324 {
592a252b 10325 /* VEX_W_0F17_M_0 */
bf890a93 10326 { "vmovhpX", { EXq, XM }, 0 },
9e30b8e0
L
10327 },
10328 {
592a252b 10329 /* VEX_W_0F28 */
bf890a93 10330 { "vmovapX", { XM, EXx }, 0 },
9e30b8e0
L
10331 },
10332 {
592a252b 10333 /* VEX_W_0F29 */
bf890a93 10334 { "vmovapX", { EXxS, XM }, 0 },
9e30b8e0
L
10335 },
10336 {
592a252b 10337 /* VEX_W_0F2B_M_0 */
bf890a93 10338 { "vmovntpX", { Mx, XM }, 0 },
9e30b8e0
L
10339 },
10340 {
592a252b 10341 /* VEX_W_0F2E_P_0 */
bf890a93 10342 { "vucomiss", { XMScalar, EXdScalar }, 0 },
9e30b8e0
L
10343 },
10344 {
592a252b 10345 /* VEX_W_0F2E_P_2 */
bf890a93 10346 { "vucomisd", { XMScalar, EXqScalar }, 0 },
9e30b8e0
L
10347 },
10348 {
592a252b 10349 /* VEX_W_0F2F_P_0 */
bf890a93 10350 { "vcomiss", { XMScalar, EXdScalar }, 0 },
9e30b8e0
L
10351 },
10352 {
592a252b 10353 /* VEX_W_0F2F_P_2 */
bf890a93 10354 { "vcomisd", { XMScalar, EXqScalar }, 0 },
9e30b8e0 10355 },
43234a1e
L
10356 {
10357 /* VEX_W_0F41_P_0_LEN_1 */
ab4e4ed5
AF
10358 { MOD_TABLE (MOD_VEX_W_0_0F41_P_0_LEN_1) },
10359 { MOD_TABLE (MOD_VEX_W_1_0F41_P_0_LEN_1) },
1ba585e8
IT
10360 },
10361 {
10362 /* VEX_W_0F41_P_2_LEN_1 */
ab4e4ed5
AF
10363 { MOD_TABLE (MOD_VEX_W_0_0F41_P_2_LEN_1) },
10364 { MOD_TABLE (MOD_VEX_W_1_0F41_P_2_LEN_1) }
43234a1e
L
10365 },
10366 {
10367 /* VEX_W_0F42_P_0_LEN_1 */
ab4e4ed5
AF
10368 { MOD_TABLE (MOD_VEX_W_0_0F42_P_0_LEN_1) },
10369 { MOD_TABLE (MOD_VEX_W_1_0F42_P_0_LEN_1) },
1ba585e8
IT
10370 },
10371 {
10372 /* VEX_W_0F42_P_2_LEN_1 */
ab4e4ed5
AF
10373 { MOD_TABLE (MOD_VEX_W_0_0F42_P_2_LEN_1) },
10374 { MOD_TABLE (MOD_VEX_W_1_0F42_P_2_LEN_1) },
43234a1e
L
10375 },
10376 {
10377 /* VEX_W_0F44_P_0_LEN_0 */
ab4e4ed5
AF
10378 { MOD_TABLE (MOD_VEX_W_0_0F44_P_0_LEN_1) },
10379 { MOD_TABLE (MOD_VEX_W_1_0F44_P_0_LEN_1) },
1ba585e8
IT
10380 },
10381 {
10382 /* VEX_W_0F44_P_2_LEN_0 */
ab4e4ed5
AF
10383 { MOD_TABLE (MOD_VEX_W_0_0F44_P_2_LEN_1) },
10384 { MOD_TABLE (MOD_VEX_W_1_0F44_P_2_LEN_1) },
43234a1e
L
10385 },
10386 {
10387 /* VEX_W_0F45_P_0_LEN_1 */
ab4e4ed5
AF
10388 { MOD_TABLE (MOD_VEX_W_0_0F45_P_0_LEN_1) },
10389 { MOD_TABLE (MOD_VEX_W_1_0F45_P_0_LEN_1) },
1ba585e8
IT
10390 },
10391 {
10392 /* VEX_W_0F45_P_2_LEN_1 */
ab4e4ed5
AF
10393 { MOD_TABLE (MOD_VEX_W_0_0F45_P_2_LEN_1) },
10394 { MOD_TABLE (MOD_VEX_W_1_0F45_P_2_LEN_1) },
43234a1e
L
10395 },
10396 {
10397 /* VEX_W_0F46_P_0_LEN_1 */
ab4e4ed5
AF
10398 { MOD_TABLE (MOD_VEX_W_0_0F46_P_0_LEN_1) },
10399 { MOD_TABLE (MOD_VEX_W_1_0F46_P_0_LEN_1) },
1ba585e8
IT
10400 },
10401 {
10402 /* VEX_W_0F46_P_2_LEN_1 */
ab4e4ed5
AF
10403 { MOD_TABLE (MOD_VEX_W_0_0F46_P_2_LEN_1) },
10404 { MOD_TABLE (MOD_VEX_W_1_0F46_P_2_LEN_1) },
43234a1e
L
10405 },
10406 {
10407 /* VEX_W_0F47_P_0_LEN_1 */
ab4e4ed5
AF
10408 { MOD_TABLE (MOD_VEX_W_0_0F47_P_0_LEN_1) },
10409 { MOD_TABLE (MOD_VEX_W_1_0F47_P_0_LEN_1) },
1ba585e8
IT
10410 },
10411 {
10412 /* VEX_W_0F47_P_2_LEN_1 */
ab4e4ed5
AF
10413 { MOD_TABLE (MOD_VEX_W_0_0F47_P_2_LEN_1) },
10414 { MOD_TABLE (MOD_VEX_W_1_0F47_P_2_LEN_1) },
1ba585e8
IT
10415 },
10416 {
10417 /* VEX_W_0F4A_P_0_LEN_1 */
ab4e4ed5
AF
10418 { MOD_TABLE (MOD_VEX_W_0_0F4A_P_0_LEN_1) },
10419 { MOD_TABLE (MOD_VEX_W_1_0F4A_P_0_LEN_1) },
1ba585e8
IT
10420 },
10421 {
10422 /* VEX_W_0F4A_P_2_LEN_1 */
ab4e4ed5
AF
10423 { MOD_TABLE (MOD_VEX_W_0_0F4A_P_2_LEN_1) },
10424 { MOD_TABLE (MOD_VEX_W_1_0F4A_P_2_LEN_1) },
1ba585e8
IT
10425 },
10426 {
10427 /* VEX_W_0F4B_P_0_LEN_1 */
ab4e4ed5
AF
10428 { MOD_TABLE (MOD_VEX_W_0_0F4B_P_0_LEN_1) },
10429 { MOD_TABLE (MOD_VEX_W_1_0F4B_P_0_LEN_1) },
43234a1e
L
10430 },
10431 {
10432 /* VEX_W_0F4B_P_2_LEN_1 */
ab4e4ed5 10433 { MOD_TABLE (MOD_VEX_W_0_0F4B_P_2_LEN_1) },
43234a1e 10434 },
9e30b8e0 10435 {
592a252b 10436 /* VEX_W_0F50_M_0 */
bf890a93 10437 { "vmovmskpX", { Gdq, XS }, 0 },
9e30b8e0
L
10438 },
10439 {
592a252b 10440 /* VEX_W_0F51_P_0 */
bf890a93 10441 { "vsqrtps", { XM, EXx }, 0 },
9e30b8e0
L
10442 },
10443 {
592a252b 10444 /* VEX_W_0F51_P_1 */
bf890a93 10445 { "vsqrtss", { XMScalar, VexScalar, EXdScalar }, 0 },
9e30b8e0
L
10446 },
10447 {
592a252b 10448 /* VEX_W_0F51_P_2 */
bf890a93 10449 { "vsqrtpd", { XM, EXx }, 0 },
9e30b8e0
L
10450 },
10451 {
592a252b 10452 /* VEX_W_0F51_P_3 */
bf890a93 10453 { "vsqrtsd", { XMScalar, VexScalar, EXqScalar }, 0 },
9e30b8e0
L
10454 },
10455 {
592a252b 10456 /* VEX_W_0F52_P_0 */
bf890a93 10457 { "vrsqrtps", { XM, EXx }, 0 },
9e30b8e0
L
10458 },
10459 {
592a252b 10460 /* VEX_W_0F52_P_1 */
bf890a93 10461 { "vrsqrtss", { XMScalar, VexScalar, EXdScalar }, 0 },
9e30b8e0
L
10462 },
10463 {
592a252b 10464 /* VEX_W_0F53_P_0 */
bf890a93 10465 { "vrcpps", { XM, EXx }, 0 },
9e30b8e0
L
10466 },
10467 {
592a252b 10468 /* VEX_W_0F53_P_1 */
bf890a93 10469 { "vrcpss", { XMScalar, VexScalar, EXdScalar }, 0 },
9e30b8e0
L
10470 },
10471 {
592a252b 10472 /* VEX_W_0F58_P_0 */
bf890a93 10473 { "vaddps", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10474 },
10475 {
592a252b 10476 /* VEX_W_0F58_P_1 */
bf890a93 10477 { "vaddss", { XMScalar, VexScalar, EXdScalar }, 0 },
9e30b8e0
L
10478 },
10479 {
592a252b 10480 /* VEX_W_0F58_P_2 */
bf890a93 10481 { "vaddpd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10482 },
10483 {
592a252b 10484 /* VEX_W_0F58_P_3 */
bf890a93 10485 { "vaddsd", { XMScalar, VexScalar, EXqScalar }, 0 },
9e30b8e0
L
10486 },
10487 {
592a252b 10488 /* VEX_W_0F59_P_0 */
bf890a93 10489 { "vmulps", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10490 },
10491 {
592a252b 10492 /* VEX_W_0F59_P_1 */
bf890a93 10493 { "vmulss", { XMScalar, VexScalar, EXdScalar }, 0 },
9e30b8e0
L
10494 },
10495 {
592a252b 10496 /* VEX_W_0F59_P_2 */
bf890a93 10497 { "vmulpd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10498 },
10499 {
592a252b 10500 /* VEX_W_0F59_P_3 */
bf890a93 10501 { "vmulsd", { XMScalar, VexScalar, EXqScalar }, 0 },
9e30b8e0
L
10502 },
10503 {
592a252b 10504 /* VEX_W_0F5A_P_0 */
bf890a93 10505 { "vcvtps2pd", { XM, EXxmmq }, 0 },
9e30b8e0
L
10506 },
10507 {
592a252b 10508 /* VEX_W_0F5A_P_1 */
bf890a93 10509 { "vcvtss2sd", { XMScalar, VexScalar, EXdScalar }, 0 },
9e30b8e0
L
10510 },
10511 {
592a252b 10512 /* VEX_W_0F5A_P_3 */
bf890a93 10513 { "vcvtsd2ss", { XMScalar, VexScalar, EXqScalar }, 0 },
9e30b8e0
L
10514 },
10515 {
592a252b 10516 /* VEX_W_0F5B_P_0 */
bf890a93 10517 { "vcvtdq2ps", { XM, EXx }, 0 },
9e30b8e0
L
10518 },
10519 {
592a252b 10520 /* VEX_W_0F5B_P_1 */
bf890a93 10521 { "vcvttps2dq", { XM, EXx }, 0 },
9e30b8e0
L
10522 },
10523 {
592a252b 10524 /* VEX_W_0F5B_P_2 */
bf890a93 10525 { "vcvtps2dq", { XM, EXx }, 0 },
9e30b8e0
L
10526 },
10527 {
592a252b 10528 /* VEX_W_0F5C_P_0 */
bf890a93 10529 { "vsubps", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10530 },
10531 {
592a252b 10532 /* VEX_W_0F5C_P_1 */
bf890a93 10533 { "vsubss", { XMScalar, VexScalar, EXdScalar }, 0 },
9e30b8e0
L
10534 },
10535 {
592a252b 10536 /* VEX_W_0F5C_P_2 */
bf890a93 10537 { "vsubpd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10538 },
10539 {
592a252b 10540 /* VEX_W_0F5C_P_3 */
bf890a93 10541 { "vsubsd", { XMScalar, VexScalar, EXqScalar }, 0 },
9e30b8e0
L
10542 },
10543 {
592a252b 10544 /* VEX_W_0F5D_P_0 */
bf890a93 10545 { "vminps", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10546 },
10547 {
592a252b 10548 /* VEX_W_0F5D_P_1 */
bf890a93 10549 { "vminss", { XMScalar, VexScalar, EXdScalar }, 0 },
9e30b8e0
L
10550 },
10551 {
592a252b 10552 /* VEX_W_0F5D_P_2 */
bf890a93 10553 { "vminpd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10554 },
10555 {
592a252b 10556 /* VEX_W_0F5D_P_3 */
bf890a93 10557 { "vminsd", { XMScalar, VexScalar, EXqScalar }, 0 },
9e30b8e0
L
10558 },
10559 {
592a252b 10560 /* VEX_W_0F5E_P_0 */
bf890a93 10561 { "vdivps", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10562 },
10563 {
592a252b 10564 /* VEX_W_0F5E_P_1 */
bf890a93 10565 { "vdivss", { XMScalar, VexScalar, EXdScalar }, 0 },
9e30b8e0
L
10566 },
10567 {
592a252b 10568 /* VEX_W_0F5E_P_2 */
bf890a93 10569 { "vdivpd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10570 },
10571 {
592a252b 10572 /* VEX_W_0F5E_P_3 */
bf890a93 10573 { "vdivsd", { XMScalar, VexScalar, EXqScalar }, 0 },
9e30b8e0
L
10574 },
10575 {
592a252b 10576 /* VEX_W_0F5F_P_0 */
bf890a93 10577 { "vmaxps", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10578 },
10579 {
592a252b 10580 /* VEX_W_0F5F_P_1 */
bf890a93 10581 { "vmaxss", { XMScalar, VexScalar, EXdScalar }, 0 },
9e30b8e0
L
10582 },
10583 {
592a252b 10584 /* VEX_W_0F5F_P_2 */
bf890a93 10585 { "vmaxpd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10586 },
10587 {
592a252b 10588 /* VEX_W_0F5F_P_3 */
bf890a93 10589 { "vmaxsd", { XMScalar, VexScalar, EXqScalar }, 0 },
9e30b8e0
L
10590 },
10591 {
592a252b 10592 /* VEX_W_0F60_P_2 */
bf890a93 10593 { "vpunpcklbw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10594 },
10595 {
592a252b 10596 /* VEX_W_0F61_P_2 */
bf890a93 10597 { "vpunpcklwd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10598 },
10599 {
592a252b 10600 /* VEX_W_0F62_P_2 */
bf890a93 10601 { "vpunpckldq", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10602 },
10603 {
592a252b 10604 /* VEX_W_0F63_P_2 */
bf890a93 10605 { "vpacksswb", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10606 },
10607 {
592a252b 10608 /* VEX_W_0F64_P_2 */
bf890a93 10609 { "vpcmpgtb", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10610 },
10611 {
592a252b 10612 /* VEX_W_0F65_P_2 */
bf890a93 10613 { "vpcmpgtw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10614 },
10615 {
592a252b 10616 /* VEX_W_0F66_P_2 */
bf890a93 10617 { "vpcmpgtd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10618 },
10619 {
592a252b 10620 /* VEX_W_0F67_P_2 */
bf890a93 10621 { "vpackuswb", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10622 },
10623 {
592a252b 10624 /* VEX_W_0F68_P_2 */
bf890a93 10625 { "vpunpckhbw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10626 },
10627 {
592a252b 10628 /* VEX_W_0F69_P_2 */
bf890a93 10629 { "vpunpckhwd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10630 },
10631 {
592a252b 10632 /* VEX_W_0F6A_P_2 */
bf890a93 10633 { "vpunpckhdq", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10634 },
10635 {
592a252b 10636 /* VEX_W_0F6B_P_2 */
bf890a93 10637 { "vpackssdw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10638 },
10639 {
592a252b 10640 /* VEX_W_0F6C_P_2 */
bf890a93 10641 { "vpunpcklqdq", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10642 },
10643 {
592a252b 10644 /* VEX_W_0F6D_P_2 */
bf890a93 10645 { "vpunpckhqdq", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10646 },
10647 {
592a252b 10648 /* VEX_W_0F6F_P_1 */
bf890a93 10649 { "vmovdqu", { XM, EXx }, 0 },
9e30b8e0
L
10650 },
10651 {
592a252b 10652 /* VEX_W_0F6F_P_2 */
bf890a93 10653 { "vmovdqa", { XM, EXx }, 0 },
9e30b8e0
L
10654 },
10655 {
592a252b 10656 /* VEX_W_0F70_P_1 */
bf890a93 10657 { "vpshufhw", { XM, EXx, Ib }, 0 },
9e30b8e0
L
10658 },
10659 {
592a252b 10660 /* VEX_W_0F70_P_2 */
bf890a93 10661 { "vpshufd", { XM, EXx, Ib }, 0 },
9e30b8e0
L
10662 },
10663 {
592a252b 10664 /* VEX_W_0F70_P_3 */
bf890a93 10665 { "vpshuflw", { XM, EXx, Ib }, 0 },
9e30b8e0
L
10666 },
10667 {
592a252b 10668 /* VEX_W_0F71_R_2_P_2 */
bf890a93 10669 { "vpsrlw", { Vex, XS, Ib }, 0 },
9e30b8e0
L
10670 },
10671 {
592a252b 10672 /* VEX_W_0F71_R_4_P_2 */
bf890a93 10673 { "vpsraw", { Vex, XS, Ib }, 0 },
9e30b8e0
L
10674 },
10675 {
592a252b 10676 /* VEX_W_0F71_R_6_P_2 */
bf890a93 10677 { "vpsllw", { Vex, XS, Ib }, 0 },
9e30b8e0
L
10678 },
10679 {
592a252b 10680 /* VEX_W_0F72_R_2_P_2 */
bf890a93 10681 { "vpsrld", { Vex, XS, Ib }, 0 },
9e30b8e0
L
10682 },
10683 {
592a252b 10684 /* VEX_W_0F72_R_4_P_2 */
bf890a93 10685 { "vpsrad", { Vex, XS, Ib }, 0 },
9e30b8e0
L
10686 },
10687 {
592a252b 10688 /* VEX_W_0F72_R_6_P_2 */
bf890a93 10689 { "vpslld", { Vex, XS, Ib }, 0 },
9e30b8e0
L
10690 },
10691 {
592a252b 10692 /* VEX_W_0F73_R_2_P_2 */
bf890a93 10693 { "vpsrlq", { Vex, XS, Ib }, 0 },
9e30b8e0
L
10694 },
10695 {
592a252b 10696 /* VEX_W_0F73_R_3_P_2 */
bf890a93 10697 { "vpsrldq", { Vex, XS, Ib }, 0 },
9e30b8e0
L
10698 },
10699 {
592a252b 10700 /* VEX_W_0F73_R_6_P_2 */
bf890a93 10701 { "vpsllq", { Vex, XS, Ib }, 0 },
9e30b8e0
L
10702 },
10703 {
592a252b 10704 /* VEX_W_0F73_R_7_P_2 */
bf890a93 10705 { "vpslldq", { Vex, XS, Ib }, 0 },
9e30b8e0
L
10706 },
10707 {
592a252b 10708 /* VEX_W_0F74_P_2 */
bf890a93 10709 { "vpcmpeqb", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10710 },
10711 {
592a252b 10712 /* VEX_W_0F75_P_2 */
bf890a93 10713 { "vpcmpeqw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10714 },
10715 {
592a252b 10716 /* VEX_W_0F76_P_2 */
bf890a93 10717 { "vpcmpeqd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10718 },
10719 {
592a252b 10720 /* VEX_W_0F77_P_0 */
bf890a93 10721 { "", { VZERO }, 0 },
9e30b8e0
L
10722 },
10723 {
592a252b 10724 /* VEX_W_0F7C_P_2 */
bf890a93 10725 { "vhaddpd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10726 },
10727 {
592a252b 10728 /* VEX_W_0F7C_P_3 */
bf890a93 10729 { "vhaddps", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10730 },
10731 {
592a252b 10732 /* VEX_W_0F7D_P_2 */
bf890a93 10733 { "vhsubpd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10734 },
10735 {
592a252b 10736 /* VEX_W_0F7D_P_3 */
bf890a93 10737 { "vhsubps", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10738 },
10739 {
592a252b 10740 /* VEX_W_0F7E_P_1 */
bf890a93 10741 { "vmovq", { XMScalar, EXqScalar }, 0 },
9e30b8e0
L
10742 },
10743 {
592a252b 10744 /* VEX_W_0F7F_P_1 */
bf890a93 10745 { "vmovdqu", { EXxS, XM }, 0 },
9e30b8e0
L
10746 },
10747 {
592a252b 10748 /* VEX_W_0F7F_P_2 */
bf890a93 10749 { "vmovdqa", { EXxS, XM }, 0 },
9e30b8e0 10750 },
43234a1e
L
10751 {
10752 /* VEX_W_0F90_P_0_LEN_0 */
bf890a93
IT
10753 { "kmovw", { MaskG, MaskE }, 0 },
10754 { "kmovq", { MaskG, MaskE }, 0 },
1ba585e8
IT
10755 },
10756 {
10757 /* VEX_W_0F90_P_2_LEN_0 */
bf890a93
IT
10758 { "kmovb", { MaskG, MaskBDE }, 0 },
10759 { "kmovd", { MaskG, MaskBDE }, 0 },
43234a1e
L
10760 },
10761 {
10762 /* VEX_W_0F91_P_0_LEN_0 */
ab4e4ed5
AF
10763 { MOD_TABLE (MOD_VEX_W_0_0F91_P_0_LEN_0) },
10764 { MOD_TABLE (MOD_VEX_W_1_0F91_P_0_LEN_0) },
1ba585e8
IT
10765 },
10766 {
10767 /* VEX_W_0F91_P_2_LEN_0 */
ab4e4ed5
AF
10768 { MOD_TABLE (MOD_VEX_W_0_0F91_P_2_LEN_0) },
10769 { MOD_TABLE (MOD_VEX_W_1_0F91_P_2_LEN_0) },
43234a1e
L
10770 },
10771 {
10772 /* VEX_W_0F92_P_0_LEN_0 */
ab4e4ed5 10773 { MOD_TABLE (MOD_VEX_W_0_0F92_P_0_LEN_0) },
43234a1e 10774 },
90a915bf
IT
10775 {
10776 /* VEX_W_0F92_P_2_LEN_0 */
ab4e4ed5 10777 { MOD_TABLE (MOD_VEX_W_0_0F92_P_2_LEN_0) },
90a915bf 10778 },
1ba585e8
IT
10779 {
10780 /* VEX_W_0F92_P_3_LEN_0 */
ab4e4ed5
AF
10781 { MOD_TABLE (MOD_VEX_W_0_0F92_P_3_LEN_0) },
10782 { MOD_TABLE (MOD_VEX_W_1_0F92_P_3_LEN_0) },
1ba585e8 10783 },
43234a1e
L
10784 {
10785 /* VEX_W_0F93_P_0_LEN_0 */
ab4e4ed5 10786 { MOD_TABLE (MOD_VEX_W_0_0F93_P_0_LEN_0) },
43234a1e 10787 },
90a915bf
IT
10788 {
10789 /* VEX_W_0F93_P_2_LEN_0 */
ab4e4ed5 10790 { MOD_TABLE (MOD_VEX_W_0_0F93_P_2_LEN_0) },
90a915bf 10791 },
1ba585e8
IT
10792 {
10793 /* VEX_W_0F93_P_3_LEN_0 */
ab4e4ed5
AF
10794 { MOD_TABLE (MOD_VEX_W_0_0F93_P_3_LEN_0) },
10795 { MOD_TABLE (MOD_VEX_W_1_0F93_P_3_LEN_0) },
1ba585e8 10796 },
43234a1e
L
10797 {
10798 /* VEX_W_0F98_P_0_LEN_0 */
ab4e4ed5
AF
10799 { MOD_TABLE (MOD_VEX_W_0_0F98_P_0_LEN_0) },
10800 { MOD_TABLE (MOD_VEX_W_1_0F98_P_0_LEN_0) },
1ba585e8
IT
10801 },
10802 {
10803 /* VEX_W_0F98_P_2_LEN_0 */
ab4e4ed5
AF
10804 { MOD_TABLE (MOD_VEX_W_0_0F98_P_2_LEN_0) },
10805 { MOD_TABLE (MOD_VEX_W_1_0F98_P_2_LEN_0) },
1ba585e8
IT
10806 },
10807 {
10808 /* VEX_W_0F99_P_0_LEN_0 */
ab4e4ed5
AF
10809 { MOD_TABLE (MOD_VEX_W_0_0F99_P_0_LEN_0) },
10810 { MOD_TABLE (MOD_VEX_W_1_0F99_P_0_LEN_0) },
1ba585e8
IT
10811 },
10812 {
10813 /* VEX_W_0F99_P_2_LEN_0 */
ab4e4ed5
AF
10814 { MOD_TABLE (MOD_VEX_W_0_0F99_P_2_LEN_0) },
10815 { MOD_TABLE (MOD_VEX_W_1_0F99_P_2_LEN_0) },
43234a1e 10816 },
9e30b8e0 10817 {
592a252b 10818 /* VEX_W_0FAE_R_2_M_0 */
bf890a93 10819 { "vldmxcsr", { Md }, 0 },
9e30b8e0
L
10820 },
10821 {
592a252b 10822 /* VEX_W_0FAE_R_3_M_0 */
bf890a93 10823 { "vstmxcsr", { Md }, 0 },
9e30b8e0
L
10824 },
10825 {
592a252b 10826 /* VEX_W_0FC2_P_0 */
bf890a93 10827 { "vcmpps", { XM, Vex, EXx, VCMP }, 0 },
9e30b8e0
L
10828 },
10829 {
592a252b 10830 /* VEX_W_0FC2_P_1 */
bf890a93 10831 { "vcmpss", { XMScalar, VexScalar, EXdScalar, VCMP }, 0 },
9e30b8e0
L
10832 },
10833 {
592a252b 10834 /* VEX_W_0FC2_P_2 */
bf890a93 10835 { "vcmppd", { XM, Vex, EXx, VCMP }, 0 },
9e30b8e0
L
10836 },
10837 {
592a252b 10838 /* VEX_W_0FC2_P_3 */
bf890a93 10839 { "vcmpsd", { XMScalar, VexScalar, EXqScalar, VCMP }, 0 },
9e30b8e0
L
10840 },
10841 {
592a252b 10842 /* VEX_W_0FC4_P_2 */
bf890a93 10843 { "vpinsrw", { XM, Vex128, Edqw, Ib }, 0 },
9e30b8e0
L
10844 },
10845 {
592a252b 10846 /* VEX_W_0FC5_P_2 */
bf890a93 10847 { "vpextrw", { Gdq, XS, Ib }, 0 },
9e30b8e0
L
10848 },
10849 {
592a252b 10850 /* VEX_W_0FD0_P_2 */
bf890a93 10851 { "vaddsubpd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10852 },
10853 {
592a252b 10854 /* VEX_W_0FD0_P_3 */
bf890a93 10855 { "vaddsubps", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10856 },
10857 {
592a252b 10858 /* VEX_W_0FD1_P_2 */
bf890a93 10859 { "vpsrlw", { XM, Vex, EXxmm }, 0 },
9e30b8e0
L
10860 },
10861 {
592a252b 10862 /* VEX_W_0FD2_P_2 */
bf890a93 10863 { "vpsrld", { XM, Vex, EXxmm }, 0 },
9e30b8e0
L
10864 },
10865 {
592a252b 10866 /* VEX_W_0FD3_P_2 */
bf890a93 10867 { "vpsrlq", { XM, Vex, EXxmm }, 0 },
9e30b8e0
L
10868 },
10869 {
592a252b 10870 /* VEX_W_0FD4_P_2 */
bf890a93 10871 { "vpaddq", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10872 },
10873 {
592a252b 10874 /* VEX_W_0FD5_P_2 */
bf890a93 10875 { "vpmullw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10876 },
10877 {
592a252b 10878 /* VEX_W_0FD6_P_2 */
bf890a93 10879 { "vmovq", { EXqScalarS, XMScalar }, 0 },
9e30b8e0
L
10880 },
10881 {
592a252b 10882 /* VEX_W_0FD7_P_2_M_1 */
bf890a93 10883 { "vpmovmskb", { Gdq, XS }, 0 },
9e30b8e0
L
10884 },
10885 {
592a252b 10886 /* VEX_W_0FD8_P_2 */
bf890a93 10887 { "vpsubusb", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10888 },
10889 {
592a252b 10890 /* VEX_W_0FD9_P_2 */
bf890a93 10891 { "vpsubusw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10892 },
10893 {
592a252b 10894 /* VEX_W_0FDA_P_2 */
bf890a93 10895 { "vpminub", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10896 },
10897 {
592a252b 10898 /* VEX_W_0FDB_P_2 */
bf890a93 10899 { "vpand", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10900 },
10901 {
592a252b 10902 /* VEX_W_0FDC_P_2 */
bf890a93 10903 { "vpaddusb", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10904 },
10905 {
592a252b 10906 /* VEX_W_0FDD_P_2 */
bf890a93 10907 { "vpaddusw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10908 },
10909 {
592a252b 10910 /* VEX_W_0FDE_P_2 */
bf890a93 10911 { "vpmaxub", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10912 },
10913 {
592a252b 10914 /* VEX_W_0FDF_P_2 */
bf890a93 10915 { "vpandn", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10916 },
10917 {
592a252b 10918 /* VEX_W_0FE0_P_2 */
bf890a93 10919 { "vpavgb", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10920 },
10921 {
592a252b 10922 /* VEX_W_0FE1_P_2 */
bf890a93 10923 { "vpsraw", { XM, Vex, EXxmm }, 0 },
9e30b8e0
L
10924 },
10925 {
592a252b 10926 /* VEX_W_0FE2_P_2 */
bf890a93 10927 { "vpsrad", { XM, Vex, EXxmm }, 0 },
9e30b8e0
L
10928 },
10929 {
592a252b 10930 /* VEX_W_0FE3_P_2 */
bf890a93 10931 { "vpavgw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10932 },
10933 {
592a252b 10934 /* VEX_W_0FE4_P_2 */
bf890a93 10935 { "vpmulhuw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10936 },
10937 {
592a252b 10938 /* VEX_W_0FE5_P_2 */
bf890a93 10939 { "vpmulhw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10940 },
10941 {
592a252b 10942 /* VEX_W_0FE6_P_1 */
bf890a93 10943 { "vcvtdq2pd", { XM, EXxmmq }, 0 },
9e30b8e0
L
10944 },
10945 {
592a252b 10946 /* VEX_W_0FE6_P_2 */
bf890a93 10947 { "vcvttpd2dq%XY", { XMM, EXx }, 0 },
9e30b8e0
L
10948 },
10949 {
592a252b 10950 /* VEX_W_0FE6_P_3 */
bf890a93 10951 { "vcvtpd2dq%XY", { XMM, EXx }, 0 },
9e30b8e0
L
10952 },
10953 {
592a252b 10954 /* VEX_W_0FE7_P_2_M_0 */
bf890a93 10955 { "vmovntdq", { Mx, XM }, 0 },
9e30b8e0
L
10956 },
10957 {
592a252b 10958 /* VEX_W_0FE8_P_2 */
bf890a93 10959 { "vpsubsb", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10960 },
10961 {
592a252b 10962 /* VEX_W_0FE9_P_2 */
bf890a93 10963 { "vpsubsw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10964 },
10965 {
592a252b 10966 /* VEX_W_0FEA_P_2 */
bf890a93 10967 { "vpminsw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10968 },
10969 {
592a252b 10970 /* VEX_W_0FEB_P_2 */
bf890a93 10971 { "vpor", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10972 },
10973 {
592a252b 10974 /* VEX_W_0FEC_P_2 */
bf890a93 10975 { "vpaddsb", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10976 },
10977 {
592a252b 10978 /* VEX_W_0FED_P_2 */
bf890a93 10979 { "vpaddsw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10980 },
10981 {
592a252b 10982 /* VEX_W_0FEE_P_2 */
bf890a93 10983 { "vpmaxsw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10984 },
10985 {
592a252b 10986 /* VEX_W_0FEF_P_2 */
bf890a93 10987 { "vpxor", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10988 },
10989 {
592a252b 10990 /* VEX_W_0FF0_P_3_M_0 */
bf890a93 10991 { "vlddqu", { XM, M }, 0 },
9e30b8e0
L
10992 },
10993 {
592a252b 10994 /* VEX_W_0FF1_P_2 */
bf890a93 10995 { "vpsllw", { XM, Vex, EXxmm }, 0 },
9e30b8e0
L
10996 },
10997 {
592a252b 10998 /* VEX_W_0FF2_P_2 */
bf890a93 10999 { "vpslld", { XM, Vex, EXxmm }, 0 },
9e30b8e0
L
11000 },
11001 {
592a252b 11002 /* VEX_W_0FF3_P_2 */
bf890a93 11003 { "vpsllq", { XM, Vex, EXxmm }, 0 },
9e30b8e0
L
11004 },
11005 {
592a252b 11006 /* VEX_W_0FF4_P_2 */
bf890a93 11007 { "vpmuludq", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11008 },
11009 {
592a252b 11010 /* VEX_W_0FF5_P_2 */
bf890a93 11011 { "vpmaddwd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11012 },
11013 {
592a252b 11014 /* VEX_W_0FF6_P_2 */
bf890a93 11015 { "vpsadbw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11016 },
11017 {
592a252b 11018 /* VEX_W_0FF7_P_2 */
bf890a93 11019 { "vmaskmovdqu", { XM, XS }, 0 },
9e30b8e0
L
11020 },
11021 {
592a252b 11022 /* VEX_W_0FF8_P_2 */
bf890a93 11023 { "vpsubb", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11024 },
11025 {
592a252b 11026 /* VEX_W_0FF9_P_2 */
bf890a93 11027 { "vpsubw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11028 },
11029 {
592a252b 11030 /* VEX_W_0FFA_P_2 */
bf890a93 11031 { "vpsubd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11032 },
11033 {
592a252b 11034 /* VEX_W_0FFB_P_2 */
bf890a93 11035 { "vpsubq", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11036 },
11037 {
592a252b 11038 /* VEX_W_0FFC_P_2 */
bf890a93 11039 { "vpaddb", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11040 },
11041 {
592a252b 11042 /* VEX_W_0FFD_P_2 */
bf890a93 11043 { "vpaddw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11044 },
11045 {
592a252b 11046 /* VEX_W_0FFE_P_2 */
bf890a93 11047 { "vpaddd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11048 },
11049 {
592a252b 11050 /* VEX_W_0F3800_P_2 */
bf890a93 11051 { "vpshufb", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11052 },
11053 {
592a252b 11054 /* VEX_W_0F3801_P_2 */
bf890a93 11055 { "vphaddw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11056 },
11057 {
592a252b 11058 /* VEX_W_0F3802_P_2 */
bf890a93 11059 { "vphaddd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11060 },
11061 {
592a252b 11062 /* VEX_W_0F3803_P_2 */
bf890a93 11063 { "vphaddsw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11064 },
11065 {
592a252b 11066 /* VEX_W_0F3804_P_2 */
bf890a93 11067 { "vpmaddubsw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11068 },
11069 {
592a252b 11070 /* VEX_W_0F3805_P_2 */
bf890a93 11071 { "vphsubw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11072 },
11073 {
592a252b 11074 /* VEX_W_0F3806_P_2 */
bf890a93 11075 { "vphsubd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11076 },
11077 {
592a252b 11078 /* VEX_W_0F3807_P_2 */
bf890a93 11079 { "vphsubsw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11080 },
11081 {
592a252b 11082 /* VEX_W_0F3808_P_2 */
bf890a93 11083 { "vpsignb", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11084 },
11085 {
592a252b 11086 /* VEX_W_0F3809_P_2 */
bf890a93 11087 { "vpsignw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11088 },
11089 {
592a252b 11090 /* VEX_W_0F380A_P_2 */
bf890a93 11091 { "vpsignd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11092 },
11093 {
592a252b 11094 /* VEX_W_0F380B_P_2 */
bf890a93 11095 { "vpmulhrsw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11096 },
11097 {
592a252b 11098 /* VEX_W_0F380C_P_2 */
bf890a93 11099 { "vpermilps", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11100 },
11101 {
592a252b 11102 /* VEX_W_0F380D_P_2 */
bf890a93 11103 { "vpermilpd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11104 },
11105 {
592a252b 11106 /* VEX_W_0F380E_P_2 */
bf890a93 11107 { "vtestps", { XM, EXx }, 0 },
9e30b8e0
L
11108 },
11109 {
592a252b 11110 /* VEX_W_0F380F_P_2 */
bf890a93 11111 { "vtestpd", { XM, EXx }, 0 },
9e30b8e0 11112 },
6c30d220
L
11113 {
11114 /* VEX_W_0F3816_P_2 */
bf890a93 11115 { "vpermps", { XM, Vex, EXx }, 0 },
6c30d220 11116 },
9e30b8e0 11117 {
592a252b 11118 /* VEX_W_0F3817_P_2 */
bf890a93 11119 { "vptest", { XM, EXx }, 0 },
9e30b8e0 11120 },
bcf2684f 11121 {
6c30d220 11122 /* VEX_W_0F3818_P_2 */
bf890a93 11123 { "vbroadcastss", { XM, EXxmm_md }, 0 },
bcf2684f 11124 },
9e30b8e0 11125 {
6c30d220 11126 /* VEX_W_0F3819_P_2 */
bf890a93 11127 { "vbroadcastsd", { XM, EXxmm_mq }, 0 },
9e30b8e0
L
11128 },
11129 {
592a252b 11130 /* VEX_W_0F381A_P_2_M_0 */
bf890a93 11131 { "vbroadcastf128", { XM, Mxmm }, 0 },
9e30b8e0
L
11132 },
11133 {
592a252b 11134 /* VEX_W_0F381C_P_2 */
bf890a93 11135 { "vpabsb", { XM, EXx }, 0 },
9e30b8e0
L
11136 },
11137 {
592a252b 11138 /* VEX_W_0F381D_P_2 */
bf890a93 11139 { "vpabsw", { XM, EXx }, 0 },
9e30b8e0
L
11140 },
11141 {
592a252b 11142 /* VEX_W_0F381E_P_2 */
bf890a93 11143 { "vpabsd", { XM, EXx }, 0 },
9e30b8e0
L
11144 },
11145 {
592a252b 11146 /* VEX_W_0F3820_P_2 */
bf890a93 11147 { "vpmovsxbw", { XM, EXxmmq }, 0 },
9e30b8e0
L
11148 },
11149 {
592a252b 11150 /* VEX_W_0F3821_P_2 */
bf890a93 11151 { "vpmovsxbd", { XM, EXxmmqd }, 0 },
9e30b8e0
L
11152 },
11153 {
592a252b 11154 /* VEX_W_0F3822_P_2 */
bf890a93 11155 { "vpmovsxbq", { XM, EXxmmdw }, 0 },
9e30b8e0
L
11156 },
11157 {
592a252b 11158 /* VEX_W_0F3823_P_2 */
bf890a93 11159 { "vpmovsxwd", { XM, EXxmmq }, 0 },
9e30b8e0
L
11160 },
11161 {
592a252b 11162 /* VEX_W_0F3824_P_2 */
bf890a93 11163 { "vpmovsxwq", { XM, EXxmmqd }, 0 },
9e30b8e0
L
11164 },
11165 {
592a252b 11166 /* VEX_W_0F3825_P_2 */
bf890a93 11167 { "vpmovsxdq", { XM, EXxmmq }, 0 },
9e30b8e0
L
11168 },
11169 {
592a252b 11170 /* VEX_W_0F3828_P_2 */
bf890a93 11171 { "vpmuldq", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11172 },
11173 {
592a252b 11174 /* VEX_W_0F3829_P_2 */
bf890a93 11175 { "vpcmpeqq", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11176 },
11177 {
592a252b 11178 /* VEX_W_0F382A_P_2_M_0 */
bf890a93 11179 { "vmovntdqa", { XM, Mx }, 0 },
9e30b8e0
L
11180 },
11181 {
592a252b 11182 /* VEX_W_0F382B_P_2 */
bf890a93 11183 { "vpackusdw", { XM, Vex, EXx }, 0 },
9e30b8e0 11184 },
53aa04a0 11185 {
592a252b 11186 /* VEX_W_0F382C_P_2_M_0 */
bf890a93 11187 { "vmaskmovps", { XM, Vex, Mx }, 0 },
53aa04a0
L
11188 },
11189 {
592a252b 11190 /* VEX_W_0F382D_P_2_M_0 */
bf890a93 11191 { "vmaskmovpd", { XM, Vex, Mx }, 0 },
53aa04a0
L
11192 },
11193 {
592a252b 11194 /* VEX_W_0F382E_P_2_M_0 */
bf890a93 11195 { "vmaskmovps", { Mx, Vex, XM }, 0 },
53aa04a0
L
11196 },
11197 {
592a252b 11198 /* VEX_W_0F382F_P_2_M_0 */
bf890a93 11199 { "vmaskmovpd", { Mx, Vex, XM }, 0 },
53aa04a0 11200 },
9e30b8e0 11201 {
592a252b 11202 /* VEX_W_0F3830_P_2 */
bf890a93 11203 { "vpmovzxbw", { XM, EXxmmq }, 0 },
9e30b8e0
L
11204 },
11205 {
592a252b 11206 /* VEX_W_0F3831_P_2 */
bf890a93 11207 { "vpmovzxbd", { XM, EXxmmqd }, 0 },
9e30b8e0
L
11208 },
11209 {
592a252b 11210 /* VEX_W_0F3832_P_2 */
bf890a93 11211 { "vpmovzxbq", { XM, EXxmmdw }, 0 },
9e30b8e0
L
11212 },
11213 {
592a252b 11214 /* VEX_W_0F3833_P_2 */
bf890a93 11215 { "vpmovzxwd", { XM, EXxmmq }, 0 },
9e30b8e0
L
11216 },
11217 {
592a252b 11218 /* VEX_W_0F3834_P_2 */
bf890a93 11219 { "vpmovzxwq", { XM, EXxmmqd }, 0 },
9e30b8e0
L
11220 },
11221 {
592a252b 11222 /* VEX_W_0F3835_P_2 */
bf890a93 11223 { "vpmovzxdq", { XM, EXxmmq }, 0 },
6c30d220
L
11224 },
11225 {
11226 /* VEX_W_0F3836_P_2 */
bf890a93 11227 { "vpermd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11228 },
11229 {
592a252b 11230 /* VEX_W_0F3837_P_2 */
bf890a93 11231 { "vpcmpgtq", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11232 },
11233 {
592a252b 11234 /* VEX_W_0F3838_P_2 */
bf890a93 11235 { "vpminsb", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11236 },
11237 {
592a252b 11238 /* VEX_W_0F3839_P_2 */
bf890a93 11239 { "vpminsd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11240 },
11241 {
592a252b 11242 /* VEX_W_0F383A_P_2 */
bf890a93 11243 { "vpminuw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11244 },
11245 {
592a252b 11246 /* VEX_W_0F383B_P_2 */
bf890a93 11247 { "vpminud", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11248 },
11249 {
592a252b 11250 /* VEX_W_0F383C_P_2 */
bf890a93 11251 { "vpmaxsb", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11252 },
11253 {
592a252b 11254 /* VEX_W_0F383D_P_2 */
bf890a93 11255 { "vpmaxsd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11256 },
11257 {
592a252b 11258 /* VEX_W_0F383E_P_2 */
bf890a93 11259 { "vpmaxuw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11260 },
11261 {
592a252b 11262 /* VEX_W_0F383F_P_2 */
bf890a93 11263 { "vpmaxud", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11264 },
11265 {
592a252b 11266 /* VEX_W_0F3840_P_2 */
bf890a93 11267 { "vpmulld", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11268 },
11269 {
592a252b 11270 /* VEX_W_0F3841_P_2 */
bf890a93 11271 { "vphminposuw", { XM, EXx }, 0 },
9e30b8e0 11272 },
6c30d220
L
11273 {
11274 /* VEX_W_0F3846_P_2 */
bf890a93 11275 { "vpsravd", { XM, Vex, EXx }, 0 },
6c30d220
L
11276 },
11277 {
11278 /* VEX_W_0F3858_P_2 */
bf890a93 11279 { "vpbroadcastd", { XM, EXxmm_md }, 0 },
6c30d220
L
11280 },
11281 {
11282 /* VEX_W_0F3859_P_2 */
bf890a93 11283 { "vpbroadcastq", { XM, EXxmm_mq }, 0 },
6c30d220
L
11284 },
11285 {
11286 /* VEX_W_0F385A_P_2_M_0 */
bf890a93 11287 { "vbroadcasti128", { XM, Mxmm }, 0 },
6c30d220
L
11288 },
11289 {
11290 /* VEX_W_0F3878_P_2 */
bf890a93 11291 { "vpbroadcastb", { XM, EXxmm_mb }, 0 },
6c30d220
L
11292 },
11293 {
11294 /* VEX_W_0F3879_P_2 */
bf890a93 11295 { "vpbroadcastw", { XM, EXxmm_mw }, 0 },
6c30d220 11296 },
48521003
IT
11297 {
11298 /* VEX_W_0F38CF_P_2 */
11299 { "vgf2p8mulb", { XM, Vex, EXx }, 0 },
11300 },
9e30b8e0 11301 {
592a252b 11302 /* VEX_W_0F38DB_P_2 */
bf890a93 11303 { "vaesimc", { XM, EXx }, 0 },
9e30b8e0 11304 },
6c30d220
L
11305 {
11306 /* VEX_W_0F3A00_P_2 */
11307 { Bad_Opcode },
bf890a93 11308 { "vpermq", { XM, EXx, Ib }, 0 },
6c30d220
L
11309 },
11310 {
11311 /* VEX_W_0F3A01_P_2 */
11312 { Bad_Opcode },
bf890a93 11313 { "vpermpd", { XM, EXx, Ib }, 0 },
6c30d220
L
11314 },
11315 {
11316 /* VEX_W_0F3A02_P_2 */
bf890a93 11317 { "vpblendd", { XM, Vex, EXx, Ib }, 0 },
6c30d220 11318 },
9e30b8e0 11319 {
592a252b 11320 /* VEX_W_0F3A04_P_2 */
bf890a93 11321 { "vpermilps", { XM, EXx, Ib }, 0 },
9e30b8e0
L
11322 },
11323 {
592a252b 11324 /* VEX_W_0F3A05_P_2 */
bf890a93 11325 { "vpermilpd", { XM, EXx, Ib }, 0 },
9e30b8e0
L
11326 },
11327 {
592a252b 11328 /* VEX_W_0F3A06_P_2 */
bf890a93 11329 { "vperm2f128", { XM, Vex256, EXx, Ib }, 0 },
9e30b8e0
L
11330 },
11331 {
592a252b 11332 /* VEX_W_0F3A08_P_2 */
bf890a93 11333 { "vroundps", { XM, EXx, Ib }, 0 },
9e30b8e0
L
11334 },
11335 {
592a252b 11336 /* VEX_W_0F3A09_P_2 */
bf890a93 11337 { "vroundpd", { XM, EXx, Ib }, 0 },
9e30b8e0
L
11338 },
11339 {
592a252b 11340 /* VEX_W_0F3A0A_P_2 */
bf890a93 11341 { "vroundss", { XMScalar, VexScalar, EXdScalar, Ib }, 0 },
9e30b8e0
L
11342 },
11343 {
592a252b 11344 /* VEX_W_0F3A0B_P_2 */
bf890a93 11345 { "vroundsd", { XMScalar, VexScalar, EXqScalar, Ib }, 0 },
9e30b8e0
L
11346 },
11347 {
592a252b 11348 /* VEX_W_0F3A0C_P_2 */
bf890a93 11349 { "vblendps", { XM, Vex, EXx, Ib }, 0 },
9e30b8e0
L
11350 },
11351 {
592a252b 11352 /* VEX_W_0F3A0D_P_2 */
bf890a93 11353 { "vblendpd", { XM, Vex, EXx, Ib }, 0 },
9e30b8e0
L
11354 },
11355 {
592a252b 11356 /* VEX_W_0F3A0E_P_2 */
bf890a93 11357 { "vpblendw", { XM, Vex, EXx, Ib }, 0 },
9e30b8e0
L
11358 },
11359 {
592a252b 11360 /* VEX_W_0F3A0F_P_2 */
bf890a93 11361 { "vpalignr", { XM, Vex, EXx, Ib }, 0 },
9e30b8e0
L
11362 },
11363 {
592a252b 11364 /* VEX_W_0F3A14_P_2 */
bf890a93 11365 { "vpextrb", { Edqb, XM, Ib }, 0 },
9e30b8e0
L
11366 },
11367 {
592a252b 11368 /* VEX_W_0F3A15_P_2 */
bf890a93 11369 { "vpextrw", { Edqw, XM, Ib }, 0 },
9e30b8e0
L
11370 },
11371 {
592a252b 11372 /* VEX_W_0F3A18_P_2 */
bf890a93 11373 { "vinsertf128", { XM, Vex256, EXxmm, Ib }, 0 },
9e30b8e0
L
11374 },
11375 {
592a252b 11376 /* VEX_W_0F3A19_P_2 */
bf890a93 11377 { "vextractf128", { EXxmm, XM, Ib }, 0 },
9e30b8e0
L
11378 },
11379 {
592a252b 11380 /* VEX_W_0F3A20_P_2 */
bf890a93 11381 { "vpinsrb", { XM, Vex128, Edqb, Ib }, 0 },
9e30b8e0
L
11382 },
11383 {
592a252b 11384 /* VEX_W_0F3A21_P_2 */
bf890a93 11385 { "vinsertps", { XM, Vex128, EXd, Ib }, 0 },
9e30b8e0 11386 },
43234a1e 11387 {
1ba585e8 11388 /* VEX_W_0F3A30_P_2_LEN_0 */
ab4e4ed5
AF
11389 { MOD_TABLE (MOD_VEX_W_0_0F3A30_P_2_LEN_0) },
11390 { MOD_TABLE (MOD_VEX_W_1_0F3A30_P_2_LEN_0) },
43234a1e
L
11391 },
11392 {
1ba585e8 11393 /* VEX_W_0F3A31_P_2_LEN_0 */
ab4e4ed5
AF
11394 { MOD_TABLE (MOD_VEX_W_0_0F3A31_P_2_LEN_0) },
11395 { MOD_TABLE (MOD_VEX_W_1_0F3A31_P_2_LEN_0) },
1ba585e8
IT
11396 },
11397 {
11398 /* VEX_W_0F3A32_P_2_LEN_0 */
ab4e4ed5
AF
11399 { MOD_TABLE (MOD_VEX_W_0_0F3A32_P_2_LEN_0) },
11400 { MOD_TABLE (MOD_VEX_W_1_0F3A32_P_2_LEN_0) },
43234a1e 11401 },
1ba585e8
IT
11402 {
11403 /* VEX_W_0F3A33_P_2_LEN_0 */
ab4e4ed5
AF
11404 { MOD_TABLE (MOD_VEX_W_0_0F3A33_P_2_LEN_0) },
11405 { MOD_TABLE (MOD_VEX_W_1_0F3A33_P_2_LEN_0) },
1ba585e8 11406 },
6c30d220
L
11407 {
11408 /* VEX_W_0F3A38_P_2 */
bf890a93 11409 { "vinserti128", { XM, Vex256, EXxmm, Ib }, 0 },
6c30d220
L
11410 },
11411 {
11412 /* VEX_W_0F3A39_P_2 */
bf890a93 11413 { "vextracti128", { EXxmm, XM, Ib }, 0 },
6c30d220 11414 },
9e30b8e0 11415 {
592a252b 11416 /* VEX_W_0F3A40_P_2 */
bf890a93 11417 { "vdpps", { XM, Vex, EXx, Ib }, 0 },
9e30b8e0
L
11418 },
11419 {
592a252b 11420 /* VEX_W_0F3A41_P_2 */
bf890a93 11421 { "vdppd", { XM, Vex128, EXx, Ib }, 0 },
9e30b8e0
L
11422 },
11423 {
592a252b 11424 /* VEX_W_0F3A42_P_2 */
bf890a93 11425 { "vmpsadbw", { XM, Vex, EXx, Ib }, 0 },
9e30b8e0 11426 },
6c30d220
L
11427 {
11428 /* VEX_W_0F3A46_P_2 */
bf890a93 11429 { "vperm2i128", { XM, Vex256, EXx, Ib }, 0 },
6c30d220 11430 },
a683cc34 11431 {
592a252b 11432 /* VEX_W_0F3A48_P_2 */
bf890a93
IT
11433 { "vpermil2ps", { XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW }, 0 },
11434 { "vpermil2ps", { XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW }, 0 },
a683cc34
SP
11435 },
11436 {
592a252b 11437 /* VEX_W_0F3A49_P_2 */
bf890a93
IT
11438 { "vpermil2pd", { XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW }, 0 },
11439 { "vpermil2pd", { XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW }, 0 },
a683cc34 11440 },
9e30b8e0 11441 {
592a252b 11442 /* VEX_W_0F3A4A_P_2 */
bf890a93 11443 { "vblendvps", { XM, Vex, EXx, XMVexI4 }, 0 },
9e30b8e0
L
11444 },
11445 {
592a252b 11446 /* VEX_W_0F3A4B_P_2 */
bf890a93 11447 { "vblendvpd", { XM, Vex, EXx, XMVexI4 }, 0 },
9e30b8e0
L
11448 },
11449 {
592a252b 11450 /* VEX_W_0F3A4C_P_2 */
bf890a93 11451 { "vpblendvb", { XM, Vex, EXx, XMVexI4 }, 0 },
9e30b8e0 11452 },
9e30b8e0 11453 {
592a252b 11454 /* VEX_W_0F3A62_P_2 */
bf890a93 11455 { "vpcmpistrm", { XM, EXx, Ib }, 0 },
9e30b8e0
L
11456 },
11457 {
592a252b 11458 /* VEX_W_0F3A63_P_2 */
bf890a93 11459 { "vpcmpistri", { XM, EXx, Ib }, 0 },
9e30b8e0 11460 },
48521003
IT
11461 {
11462 /* VEX_W_0F3ACE_P_2 */
11463 { Bad_Opcode },
11464 { "vgf2p8affineqb", { XM, Vex, EXx, Ib }, 0 },
11465 },
11466 {
11467 /* VEX_W_0F3ACF_P_2 */
11468 { Bad_Opcode },
11469 { "vgf2p8affineinvqb", { XM, Vex, EXx, Ib }, 0 },
11470 },
9e30b8e0 11471 {
592a252b 11472 /* VEX_W_0F3ADF_P_2 */
bf890a93 11473 { "vaeskeygenassist", { XM, EXx, Ib }, 0 },
9e30b8e0 11474 },
43234a1e
L
11475#define NEED_VEX_W_TABLE
11476#include "i386-dis-evex.h"
11477#undef NEED_VEX_W_TABLE
9e30b8e0
L
11478};
11479
11480static const struct dis386 mod_table[][2] = {
11481 {
11482 /* MOD_8D */
bf890a93 11483 { "leaS", { Gv, M }, 0 },
9e30b8e0 11484 },
42164a71
L
11485 {
11486 /* MOD_C6_REG_7 */
11487 { Bad_Opcode },
11488 { RM_TABLE (RM_C6_REG_7) },
11489 },
11490 {
11491 /* MOD_C7_REG_7 */
11492 { Bad_Opcode },
11493 { RM_TABLE (RM_C7_REG_7) },
11494 },
4a357820
MZ
11495 {
11496 /* MOD_FF_REG_3 */
a72d2af2 11497 { "Jcall^", { indirEp }, 0 },
4a357820
MZ
11498 },
11499 {
11500 /* MOD_FF_REG_5 */
a72d2af2 11501 { "Jjmp^", { indirEp }, 0 },
4a357820 11502 },
9e30b8e0
L
11503 {
11504 /* MOD_0F01_REG_0 */
11505 { X86_64_TABLE (X86_64_0F01_REG_0) },
11506 { RM_TABLE (RM_0F01_REG_0) },
11507 },
11508 {
11509 /* MOD_0F01_REG_1 */
11510 { X86_64_TABLE (X86_64_0F01_REG_1) },
11511 { RM_TABLE (RM_0F01_REG_1) },
11512 },
11513 {
11514 /* MOD_0F01_REG_2 */
11515 { X86_64_TABLE (X86_64_0F01_REG_2) },
11516 { RM_TABLE (RM_0F01_REG_2) },
11517 },
11518 {
11519 /* MOD_0F01_REG_3 */
11520 { X86_64_TABLE (X86_64_0F01_REG_3) },
11521 { RM_TABLE (RM_0F01_REG_3) },
11522 },
8eab4136
L
11523 {
11524 /* MOD_0F01_REG_5 */
603555e5 11525 { PREFIX_TABLE (PREFIX_MOD_0_0F01_REG_5) },
8eab4136
L
11526 { RM_TABLE (RM_0F01_REG_5) },
11527 },
9e30b8e0
L
11528 {
11529 /* MOD_0F01_REG_7 */
bf890a93 11530 { "invlpg", { Mb }, 0 },
9e30b8e0
L
11531 { RM_TABLE (RM_0F01_REG_7) },
11532 },
11533 {
11534 /* MOD_0F12_PREFIX_0 */
507bd325
L
11535 { "movlps", { XM, EXq }, PREFIX_OPCODE },
11536 { "movhlps", { XM, EXq }, PREFIX_OPCODE },
9e30b8e0
L
11537 },
11538 {
11539 /* MOD_0F13 */
507bd325 11540 { "movlpX", { EXq, XM }, PREFIX_OPCODE },
9e30b8e0
L
11541 },
11542 {
11543 /* MOD_0F16_PREFIX_0 */
bf890a93
IT
11544 { "movhps", { XM, EXq }, 0 },
11545 { "movlhps", { XM, EXq }, 0 },
9e30b8e0
L
11546 },
11547 {
11548 /* MOD_0F17 */
507bd325 11549 { "movhpX", { EXq, XM }, PREFIX_OPCODE },
9e30b8e0
L
11550 },
11551 {
11552 /* MOD_0F18_REG_0 */
bf890a93 11553 { "prefetchnta", { Mb }, 0 },
9e30b8e0
L
11554 },
11555 {
11556 /* MOD_0F18_REG_1 */
bf890a93 11557 { "prefetcht0", { Mb }, 0 },
9e30b8e0
L
11558 },
11559 {
11560 /* MOD_0F18_REG_2 */
bf890a93 11561 { "prefetcht1", { Mb }, 0 },
9e30b8e0
L
11562 },
11563 {
11564 /* MOD_0F18_REG_3 */
bf890a93 11565 { "prefetcht2", { Mb }, 0 },
9e30b8e0 11566 },
d7189fa5
RM
11567 {
11568 /* MOD_0F18_REG_4 */
bf890a93 11569 { "nop/reserved", { Mb }, 0 },
d7189fa5
RM
11570 },
11571 {
11572 /* MOD_0F18_REG_5 */
bf890a93 11573 { "nop/reserved", { Mb }, 0 },
d7189fa5
RM
11574 },
11575 {
11576 /* MOD_0F18_REG_6 */
bf890a93 11577 { "nop/reserved", { Mb }, 0 },
d7189fa5
RM
11578 },
11579 {
11580 /* MOD_0F18_REG_7 */
bf890a93 11581 { "nop/reserved", { Mb }, 0 },
d7189fa5 11582 },
7e8b059b
L
11583 {
11584 /* MOD_0F1A_PREFIX_0 */
bf890a93
IT
11585 { "bndldx", { Gbnd, Ev_bnd }, 0 },
11586 { "nopQ", { Ev }, 0 },
7e8b059b
L
11587 },
11588 {
11589 /* MOD_0F1B_PREFIX_0 */
bf890a93
IT
11590 { "bndstx", { Ev_bnd, Gbnd }, 0 },
11591 { "nopQ", { Ev }, 0 },
7e8b059b
L
11592 },
11593 {
11594 /* MOD_0F1B_PREFIX_1 */
bf890a93
IT
11595 { "bndmk", { Gbnd, Ev_bnd }, 0 },
11596 { "nopQ", { Ev }, 0 },
7e8b059b 11597 },
603555e5
L
11598 {
11599 /* MOD_0F1E_PREFIX_1 */
11600 { "nopQ", { Ev }, 0 },
11601 { REG_TABLE (REG_0F1E_MOD_3) },
11602 },
b844680a 11603 {
92fddf8e 11604 /* MOD_0F24 */
7bb15c6f 11605 { Bad_Opcode },
bf890a93 11606 { "movL", { Rd, Td }, 0 },
b844680a
L
11607 },
11608 {
92fddf8e 11609 /* MOD_0F26 */
592d1631 11610 { Bad_Opcode },
bf890a93 11611 { "movL", { Td, Rd }, 0 },
b844680a 11612 },
75c135a8
L
11613 {
11614 /* MOD_0F2B_PREFIX_0 */
507bd325 11615 {"movntps", { Mx, XM }, PREFIX_OPCODE },
75c135a8
L
11616 },
11617 {
11618 /* MOD_0F2B_PREFIX_1 */
507bd325 11619 {"movntss", { Md, XM }, PREFIX_OPCODE },
75c135a8
L
11620 },
11621 {
11622 /* MOD_0F2B_PREFIX_2 */
507bd325 11623 {"movntpd", { Mx, XM }, PREFIX_OPCODE },
75c135a8
L
11624 },
11625 {
11626 /* MOD_0F2B_PREFIX_3 */
507bd325 11627 {"movntsd", { Mq, XM }, PREFIX_OPCODE },
75c135a8
L
11628 },
11629 {
11630 /* MOD_0F51 */
592d1631 11631 { Bad_Opcode },
507bd325 11632 { "movmskpX", { Gdq, XS }, PREFIX_OPCODE },
75c135a8 11633 },
b844680a 11634 {
1ceb70f8 11635 /* MOD_0F71_REG_2 */
592d1631 11636 { Bad_Opcode },
bf890a93 11637 { "psrlw", { MS, Ib }, 0 },
b844680a
L
11638 },
11639 {
1ceb70f8 11640 /* MOD_0F71_REG_4 */
592d1631 11641 { Bad_Opcode },
bf890a93 11642 { "psraw", { MS, Ib }, 0 },
b844680a
L
11643 },
11644 {
1ceb70f8 11645 /* MOD_0F71_REG_6 */
592d1631 11646 { Bad_Opcode },
bf890a93 11647 { "psllw", { MS, Ib }, 0 },
b844680a
L
11648 },
11649 {
1ceb70f8 11650 /* MOD_0F72_REG_2 */
592d1631 11651 { Bad_Opcode },
bf890a93 11652 { "psrld", { MS, Ib }, 0 },
b844680a
L
11653 },
11654 {
1ceb70f8 11655 /* MOD_0F72_REG_4 */
592d1631 11656 { Bad_Opcode },
bf890a93 11657 { "psrad", { MS, Ib }, 0 },
b844680a
L
11658 },
11659 {
1ceb70f8 11660 /* MOD_0F72_REG_6 */
592d1631 11661 { Bad_Opcode },
bf890a93 11662 { "pslld", { MS, Ib }, 0 },
b844680a
L
11663 },
11664 {
1ceb70f8 11665 /* MOD_0F73_REG_2 */
592d1631 11666 { Bad_Opcode },
bf890a93 11667 { "psrlq", { MS, Ib }, 0 },
b844680a
L
11668 },
11669 {
1ceb70f8 11670 /* MOD_0F73_REG_3 */
592d1631 11671 { Bad_Opcode },
c0f3af97
L
11672 { PREFIX_TABLE (PREFIX_0F73_REG_3) },
11673 },
11674 {
11675 /* MOD_0F73_REG_6 */
592d1631 11676 { Bad_Opcode },
bf890a93 11677 { "psllq", { MS, Ib }, 0 },
c0f3af97
L
11678 },
11679 {
11680 /* MOD_0F73_REG_7 */
592d1631 11681 { Bad_Opcode },
c0f3af97
L
11682 { PREFIX_TABLE (PREFIX_0F73_REG_7) },
11683 },
11684 {
11685 /* MOD_0FAE_REG_0 */
bf890a93 11686 { "fxsave", { FXSAVE }, 0 },
c7b8aa3a 11687 { PREFIX_TABLE (PREFIX_0FAE_REG_0) },
c0f3af97
L
11688 },
11689 {
11690 /* MOD_0FAE_REG_1 */
bf890a93 11691 { "fxrstor", { FXSAVE }, 0 },
c7b8aa3a 11692 { PREFIX_TABLE (PREFIX_0FAE_REG_1) },
c0f3af97
L
11693 },
11694 {
11695 /* MOD_0FAE_REG_2 */
bf890a93 11696 { "ldmxcsr", { Md }, 0 },
c7b8aa3a 11697 { PREFIX_TABLE (PREFIX_0FAE_REG_2) },
c0f3af97
L
11698 },
11699 {
11700 /* MOD_0FAE_REG_3 */
bf890a93 11701 { "stmxcsr", { Md }, 0 },
c7b8aa3a 11702 { PREFIX_TABLE (PREFIX_0FAE_REG_3) },
c0f3af97
L
11703 },
11704 {
11705 /* MOD_0FAE_REG_4 */
6b40c462
L
11706 { PREFIX_TABLE (PREFIX_MOD_0_0FAE_REG_4) },
11707 { PREFIX_TABLE (PREFIX_MOD_3_0FAE_REG_4) },
c0f3af97
L
11708 },
11709 {
11710 /* MOD_0FAE_REG_5 */
603555e5 11711 { PREFIX_TABLE (PREFIX_MOD_0_0FAE_REG_5) },
2234eee6 11712 { PREFIX_TABLE (PREFIX_MOD_3_0FAE_REG_5) },
c0f3af97
L
11713 },
11714 {
11715 /* MOD_0FAE_REG_6 */
c5e7287a 11716 { PREFIX_TABLE (PREFIX_0FAE_REG_6) },
c0f3af97
L
11717 { RM_TABLE (RM_0FAE_REG_6) },
11718 },
11719 {
11720 /* MOD_0FAE_REG_7 */
963f3586 11721 { PREFIX_TABLE (PREFIX_0FAE_REG_7) },
c0f3af97
L
11722 { RM_TABLE (RM_0FAE_REG_7) },
11723 },
11724 {
11725 /* MOD_0FB2 */
bf890a93 11726 { "lssS", { Gv, Mp }, 0 },
c0f3af97
L
11727 },
11728 {
11729 /* MOD_0FB4 */
bf890a93 11730 { "lfsS", { Gv, Mp }, 0 },
c0f3af97
L
11731 },
11732 {
11733 /* MOD_0FB5 */
bf890a93 11734 { "lgsS", { Gv, Mp }, 0 },
c0f3af97 11735 },
a8484f96
L
11736 {
11737 /* MOD_0FC3 */
11738 { PREFIX_TABLE (PREFIX_MOD_0_0FC3) },
11739 },
963f3586
IT
11740 {
11741 /* MOD_0FC7_REG_3 */
a8484f96 11742 { "xrstors", { FXSAVE }, 0 },
963f3586
IT
11743 },
11744 {
11745 /* MOD_0FC7_REG_4 */
bf890a93 11746 { "xsavec", { FXSAVE }, 0 },
963f3586
IT
11747 },
11748 {
11749 /* MOD_0FC7_REG_5 */
bf890a93 11750 { "xsaves", { FXSAVE }, 0 },
963f3586 11751 },
c0f3af97
L
11752 {
11753 /* MOD_0FC7_REG_6 */
f24bcbaa
L
11754 { PREFIX_TABLE (PREFIX_MOD_0_0FC7_REG_6) },
11755 { PREFIX_TABLE (PREFIX_MOD_3_0FC7_REG_6) }
c0f3af97
L
11756 },
11757 {
11758 /* MOD_0FC7_REG_7 */
bf890a93 11759 { "vmptrst", { Mq }, 0 },
f24bcbaa 11760 { PREFIX_TABLE (PREFIX_MOD_3_0FC7_REG_7) }
c0f3af97
L
11761 },
11762 {
11763 /* MOD_0FD7 */
592d1631 11764 { Bad_Opcode },
bf890a93 11765 { "pmovmskb", { Gdq, MS }, 0 },
c0f3af97
L
11766 },
11767 {
11768 /* MOD_0FE7_PREFIX_2 */
bf890a93 11769 { "movntdq", { Mx, XM }, 0 },
c0f3af97
L
11770 },
11771 {
11772 /* MOD_0FF0_PREFIX_3 */
bf890a93 11773 { "lddqu", { XM, M }, 0 },
c0f3af97
L
11774 },
11775 {
11776 /* MOD_0F382A_PREFIX_2 */
bf890a93 11777 { "movntdqa", { XM, Mx }, 0 },
c0f3af97 11778 },
603555e5
L
11779 {
11780 /* MOD_0F38F5_PREFIX_2 */
11781 { "wrussK", { M, Gdq }, PREFIX_OPCODE },
11782 },
11783 {
11784 /* MOD_0F38F6_PREFIX_0 */
11785 { "wrssK", { M, Gdq }, PREFIX_OPCODE },
11786 },
c0f3af97
L
11787 {
11788 /* MOD_62_32BIT */
bf890a93 11789 { "bound{S|}", { Gv, Ma }, 0 },
43234a1e 11790 { EVEX_TABLE (EVEX_0F) },
c0f3af97
L
11791 },
11792 {
11793 /* MOD_C4_32BIT */
bf890a93 11794 { "lesS", { Gv, Mp }, 0 },
c0f3af97
L
11795 { VEX_C4_TABLE (VEX_0F) },
11796 },
11797 {
11798 /* MOD_C5_32BIT */
bf890a93 11799 { "ldsS", { Gv, Mp }, 0 },
c0f3af97
L
11800 { VEX_C5_TABLE (VEX_0F) },
11801 },
11802 {
592a252b
L
11803 /* MOD_VEX_0F12_PREFIX_0 */
11804 { VEX_LEN_TABLE (VEX_LEN_0F12_P_0_M_0) },
11805 { VEX_LEN_TABLE (VEX_LEN_0F12_P_0_M_1) },
c0f3af97
L
11806 },
11807 {
592a252b
L
11808 /* MOD_VEX_0F13 */
11809 { VEX_LEN_TABLE (VEX_LEN_0F13_M_0) },
c0f3af97
L
11810 },
11811 {
592a252b
L
11812 /* MOD_VEX_0F16_PREFIX_0 */
11813 { VEX_LEN_TABLE (VEX_LEN_0F16_P_0_M_0) },
11814 { VEX_LEN_TABLE (VEX_LEN_0F16_P_0_M_1) },
c0f3af97
L
11815 },
11816 {
592a252b
L
11817 /* MOD_VEX_0F17 */
11818 { VEX_LEN_TABLE (VEX_LEN_0F17_M_0) },
c0f3af97
L
11819 },
11820 {
592a252b
L
11821 /* MOD_VEX_0F2B */
11822 { VEX_W_TABLE (VEX_W_0F2B_M_0) },
c0f3af97 11823 },
ab4e4ed5
AF
11824 {
11825 /* MOD_VEX_W_0_0F41_P_0_LEN_1 */
11826 { Bad_Opcode },
11827 { "kandw", { MaskG, MaskVex, MaskR }, 0 },
11828 },
11829 {
11830 /* MOD_VEX_W_1_0F41_P_0_LEN_1 */
11831 { Bad_Opcode },
11832 { "kandq", { MaskG, MaskVex, MaskR }, 0 },
11833 },
11834 {
11835 /* MOD_VEX_W_0_0F41_P_2_LEN_1 */
11836 { Bad_Opcode },
11837 { "kandb", { MaskG, MaskVex, MaskR }, 0 },
11838 },
11839 {
11840 /* MOD_VEX_W_1_0F41_P_2_LEN_1 */
11841 { Bad_Opcode },
11842 { "kandd", { MaskG, MaskVex, MaskR }, 0 },
11843 },
11844 {
11845 /* MOD_VEX_W_0_0F42_P_0_LEN_1 */
11846 { Bad_Opcode },
11847 { "kandnw", { MaskG, MaskVex, MaskR }, 0 },
11848 },
11849 {
11850 /* MOD_VEX_W_1_0F42_P_0_LEN_1 */
11851 { Bad_Opcode },
11852 { "kandnq", { MaskG, MaskVex, MaskR }, 0 },
11853 },
11854 {
11855 /* MOD_VEX_W_0_0F42_P_2_LEN_1 */
11856 { Bad_Opcode },
11857 { "kandnb", { MaskG, MaskVex, MaskR }, 0 },
11858 },
11859 {
11860 /* MOD_VEX_W_1_0F42_P_2_LEN_1 */
11861 { Bad_Opcode },
11862 { "kandnd", { MaskG, MaskVex, MaskR }, 0 },
11863 },
11864 {
11865 /* MOD_VEX_W_0_0F44_P_0_LEN_0 */
11866 { Bad_Opcode },
11867 { "knotw", { MaskG, MaskR }, 0 },
11868 },
11869 {
11870 /* MOD_VEX_W_1_0F44_P_0_LEN_0 */
11871 { Bad_Opcode },
11872 { "knotq", { MaskG, MaskR }, 0 },
11873 },
11874 {
11875 /* MOD_VEX_W_0_0F44_P_2_LEN_0 */
11876 { Bad_Opcode },
11877 { "knotb", { MaskG, MaskR }, 0 },
11878 },
11879 {
11880 /* MOD_VEX_W_1_0F44_P_2_LEN_0 */
11881 { Bad_Opcode },
11882 { "knotd", { MaskG, MaskR }, 0 },
11883 },
11884 {
11885 /* MOD_VEX_W_0_0F45_P_0_LEN_1 */
11886 { Bad_Opcode },
11887 { "korw", { MaskG, MaskVex, MaskR }, 0 },
11888 },
11889 {
11890 /* MOD_VEX_W_1_0F45_P_0_LEN_1 */
11891 { Bad_Opcode },
11892 { "korq", { MaskG, MaskVex, MaskR }, 0 },
11893 },
11894 {
11895 /* MOD_VEX_W_0_0F45_P_2_LEN_1 */
11896 { Bad_Opcode },
11897 { "korb", { MaskG, MaskVex, MaskR }, 0 },
11898 },
11899 {
11900 /* MOD_VEX_W_1_0F45_P_2_LEN_1 */
11901 { Bad_Opcode },
11902 { "kord", { MaskG, MaskVex, MaskR }, 0 },
11903 },
11904 {
11905 /* MOD_VEX_W_0_0F46_P_0_LEN_1 */
11906 { Bad_Opcode },
11907 { "kxnorw", { MaskG, MaskVex, MaskR }, 0 },
11908 },
11909 {
11910 /* MOD_VEX_W_1_0F46_P_0_LEN_1 */
11911 { Bad_Opcode },
11912 { "kxnorq", { MaskG, MaskVex, MaskR }, 0 },
11913 },
11914 {
11915 /* MOD_VEX_W_0_0F46_P_2_LEN_1 */
11916 { Bad_Opcode },
11917 { "kxnorb", { MaskG, MaskVex, MaskR }, 0 },
11918 },
11919 {
11920 /* MOD_VEX_W_1_0F46_P_2_LEN_1 */
11921 { Bad_Opcode },
11922 { "kxnord", { MaskG, MaskVex, MaskR }, 0 },
11923 },
11924 {
11925 /* MOD_VEX_W_0_0F47_P_0_LEN_1 */
11926 { Bad_Opcode },
11927 { "kxorw", { MaskG, MaskVex, MaskR }, 0 },
11928 },
11929 {
11930 /* MOD_VEX_W_1_0F47_P_0_LEN_1 */
11931 { Bad_Opcode },
11932 { "kxorq", { MaskG, MaskVex, MaskR }, 0 },
11933 },
11934 {
11935 /* MOD_VEX_W_0_0F47_P_2_LEN_1 */
11936 { Bad_Opcode },
11937 { "kxorb", { MaskG, MaskVex, MaskR }, 0 },
11938 },
11939 {
11940 /* MOD_VEX_W_1_0F47_P_2_LEN_1 */
11941 { Bad_Opcode },
11942 { "kxord", { MaskG, MaskVex, MaskR }, 0 },
11943 },
11944 {
11945 /* MOD_VEX_W_0_0F4A_P_0_LEN_1 */
11946 { Bad_Opcode },
11947 { "kaddw", { MaskG, MaskVex, MaskR }, 0 },
11948 },
11949 {
11950 /* MOD_VEX_W_1_0F4A_P_0_LEN_1 */
11951 { Bad_Opcode },
11952 { "kaddq", { MaskG, MaskVex, MaskR }, 0 },
11953 },
11954 {
11955 /* MOD_VEX_W_0_0F4A_P_2_LEN_1 */
11956 { Bad_Opcode },
11957 { "kaddb", { MaskG, MaskVex, MaskR }, 0 },
11958 },
11959 {
11960 /* MOD_VEX_W_1_0F4A_P_2_LEN_1 */
11961 { Bad_Opcode },
11962 { "kaddd", { MaskG, MaskVex, MaskR }, 0 },
11963 },
11964 {
11965 /* MOD_VEX_W_0_0F4B_P_0_LEN_1 */
11966 { Bad_Opcode },
11967 { "kunpckwd", { MaskG, MaskVex, MaskR }, 0 },
11968 },
11969 {
11970 /* MOD_VEX_W_1_0F4B_P_0_LEN_1 */
11971 { Bad_Opcode },
11972 { "kunpckdq", { MaskG, MaskVex, MaskR }, 0 },
11973 },
11974 {
11975 /* MOD_VEX_W_0_0F4B_P_2_LEN_1 */
11976 { Bad_Opcode },
11977 { "kunpckbw", { MaskG, MaskVex, MaskR }, 0 },
11978 },
c0f3af97 11979 {
592a252b 11980 /* MOD_VEX_0F50 */
592d1631 11981 { Bad_Opcode },
592a252b 11982 { VEX_W_TABLE (VEX_W_0F50_M_0) },
c0f3af97
L
11983 },
11984 {
592a252b 11985 /* MOD_VEX_0F71_REG_2 */
592d1631 11986 { Bad_Opcode },
592a252b 11987 { PREFIX_TABLE (PREFIX_VEX_0F71_REG_2) },
b844680a
L
11988 },
11989 {
592a252b 11990 /* MOD_VEX_0F71_REG_4 */
592d1631 11991 { Bad_Opcode },
592a252b 11992 { PREFIX_TABLE (PREFIX_VEX_0F71_REG_4) },
b844680a
L
11993 },
11994 {
592a252b 11995 /* MOD_VEX_0F71_REG_6 */
592d1631 11996 { Bad_Opcode },
592a252b 11997 { PREFIX_TABLE (PREFIX_VEX_0F71_REG_6) },
b844680a
L
11998 },
11999 {
592a252b 12000 /* MOD_VEX_0F72_REG_2 */
592d1631 12001 { Bad_Opcode },
592a252b 12002 { PREFIX_TABLE (PREFIX_VEX_0F72_REG_2) },
b844680a 12003 },
d8faab4e 12004 {
592a252b 12005 /* MOD_VEX_0F72_REG_4 */
592d1631 12006 { Bad_Opcode },
592a252b 12007 { PREFIX_TABLE (PREFIX_VEX_0F72_REG_4) },
d8faab4e
L
12008 },
12009 {
592a252b 12010 /* MOD_VEX_0F72_REG_6 */
592d1631 12011 { Bad_Opcode },
592a252b 12012 { PREFIX_TABLE (PREFIX_VEX_0F72_REG_6) },
d8faab4e 12013 },
876d4bfa 12014 {
592a252b 12015 /* MOD_VEX_0F73_REG_2 */
592d1631 12016 { Bad_Opcode },
592a252b 12017 { PREFIX_TABLE (PREFIX_VEX_0F73_REG_2) },
876d4bfa
L
12018 },
12019 {
592a252b 12020 /* MOD_VEX_0F73_REG_3 */
592d1631 12021 { Bad_Opcode },
592a252b 12022 { PREFIX_TABLE (PREFIX_VEX_0F73_REG_3) },
475a2301
L
12023 },
12024 {
592a252b 12025 /* MOD_VEX_0F73_REG_6 */
592d1631 12026 { Bad_Opcode },
592a252b 12027 { PREFIX_TABLE (PREFIX_VEX_0F73_REG_6) },
876d4bfa
L
12028 },
12029 {
592a252b 12030 /* MOD_VEX_0F73_REG_7 */
592d1631 12031 { Bad_Opcode },
592a252b 12032 { PREFIX_TABLE (PREFIX_VEX_0F73_REG_7) },
876d4bfa 12033 },
ab4e4ed5
AF
12034 {
12035 /* MOD_VEX_W_0_0F91_P_0_LEN_0 */
12036 { "kmovw", { Ew, MaskG }, 0 },
12037 { Bad_Opcode },
12038 },
12039 {
12040 /* MOD_VEX_W_0_0F91_P_0_LEN_0 */
12041 { "kmovq", { Eq, MaskG }, 0 },
12042 { Bad_Opcode },
12043 },
12044 {
12045 /* MOD_VEX_W_0_0F91_P_2_LEN_0 */
12046 { "kmovb", { Eb, MaskG }, 0 },
12047 { Bad_Opcode },
12048 },
12049 {
12050 /* MOD_VEX_W_0_0F91_P_2_LEN_0 */
12051 { "kmovd", { Ed, MaskG }, 0 },
12052 { Bad_Opcode },
12053 },
12054 {
12055 /* MOD_VEX_W_0_0F92_P_0_LEN_0 */
12056 { Bad_Opcode },
12057 { "kmovw", { MaskG, Rdq }, 0 },
12058 },
12059 {
12060 /* MOD_VEX_W_0_0F92_P_2_LEN_0 */
12061 { Bad_Opcode },
12062 { "kmovb", { MaskG, Rdq }, 0 },
12063 },
12064 {
12065 /* MOD_VEX_W_0_0F92_P_3_LEN_0 */
12066 { Bad_Opcode },
12067 { "kmovd", { MaskG, Rdq }, 0 },
12068 },
12069 {
12070 /* MOD_VEX_W_1_0F92_P_3_LEN_0 */
12071 { Bad_Opcode },
12072 { "kmovq", { MaskG, Rdq }, 0 },
12073 },
12074 {
12075 /* MOD_VEX_W_0_0F93_P_0_LEN_0 */
12076 { Bad_Opcode },
12077 { "kmovw", { Gdq, MaskR }, 0 },
12078 },
12079 {
12080 /* MOD_VEX_W_0_0F93_P_2_LEN_0 */
12081 { Bad_Opcode },
12082 { "kmovb", { Gdq, MaskR }, 0 },
12083 },
12084 {
12085 /* MOD_VEX_W_0_0F93_P_3_LEN_0 */
12086 { Bad_Opcode },
12087 { "kmovd", { Gdq, MaskR }, 0 },
12088 },
12089 {
12090 /* MOD_VEX_W_1_0F93_P_3_LEN_0 */
12091 { Bad_Opcode },
12092 { "kmovq", { Gdq, MaskR }, 0 },
12093 },
12094 {
12095 /* MOD_VEX_W_0_0F98_P_0_LEN_0 */
12096 { Bad_Opcode },
12097 { "kortestw", { MaskG, MaskR }, 0 },
12098 },
12099 {
12100 /* MOD_VEX_W_1_0F98_P_0_LEN_0 */
12101 { Bad_Opcode },
12102 { "kortestq", { MaskG, MaskR }, 0 },
12103 },
12104 {
12105 /* MOD_VEX_W_0_0F98_P_2_LEN_0 */
12106 { Bad_Opcode },
12107 { "kortestb", { MaskG, MaskR }, 0 },
12108 },
12109 {
12110 /* MOD_VEX_W_1_0F98_P_2_LEN_0 */
12111 { Bad_Opcode },
12112 { "kortestd", { MaskG, MaskR }, 0 },
12113 },
12114 {
12115 /* MOD_VEX_W_0_0F99_P_0_LEN_0 */
12116 { Bad_Opcode },
12117 { "ktestw", { MaskG, MaskR }, 0 },
12118 },
12119 {
12120 /* MOD_VEX_W_1_0F99_P_0_LEN_0 */
12121 { Bad_Opcode },
12122 { "ktestq", { MaskG, MaskR }, 0 },
12123 },
12124 {
12125 /* MOD_VEX_W_0_0F99_P_2_LEN_0 */
12126 { Bad_Opcode },
12127 { "ktestb", { MaskG, MaskR }, 0 },
12128 },
12129 {
12130 /* MOD_VEX_W_1_0F99_P_2_LEN_0 */
12131 { Bad_Opcode },
12132 { "ktestd", { MaskG, MaskR }, 0 },
12133 },
876d4bfa 12134 {
592a252b
L
12135 /* MOD_VEX_0FAE_REG_2 */
12136 { VEX_LEN_TABLE (VEX_LEN_0FAE_R_2_M_0) },
876d4bfa 12137 },
bbedc832 12138 {
592a252b
L
12139 /* MOD_VEX_0FAE_REG_3 */
12140 { VEX_LEN_TABLE (VEX_LEN_0FAE_R_3_M_0) },
bbedc832 12141 },
144c41d9 12142 {
592a252b 12143 /* MOD_VEX_0FD7_PREFIX_2 */
592d1631 12144 { Bad_Opcode },
6c30d220 12145 { VEX_W_TABLE (VEX_W_0FD7_P_2_M_1) },
144c41d9 12146 },
1afd85e3 12147 {
592a252b
L
12148 /* MOD_VEX_0FE7_PREFIX_2 */
12149 { VEX_W_TABLE (VEX_W_0FE7_P_2_M_0) },
1afd85e3
L
12150 },
12151 {
592a252b
L
12152 /* MOD_VEX_0FF0_PREFIX_3 */
12153 { VEX_W_TABLE (VEX_W_0FF0_P_3_M_0) },
92fddf8e 12154 },
75c135a8 12155 {
592a252b
L
12156 /* MOD_VEX_0F381A_PREFIX_2 */
12157 { VEX_LEN_TABLE (VEX_LEN_0F381A_P_2_M_0) },
75c135a8 12158 },
1afd85e3 12159 {
592a252b 12160 /* MOD_VEX_0F382A_PREFIX_2 */
6c30d220 12161 { VEX_W_TABLE (VEX_W_0F382A_P_2_M_0) },
1afd85e3 12162 },
75c135a8 12163 {
592a252b
L
12164 /* MOD_VEX_0F382C_PREFIX_2 */
12165 { VEX_W_TABLE (VEX_W_0F382C_P_2_M_0) },
75c135a8 12166 },
1afd85e3 12167 {
592a252b
L
12168 /* MOD_VEX_0F382D_PREFIX_2 */
12169 { VEX_W_TABLE (VEX_W_0F382D_P_2_M_0) },
1afd85e3
L
12170 },
12171 {
592a252b
L
12172 /* MOD_VEX_0F382E_PREFIX_2 */
12173 { VEX_W_TABLE (VEX_W_0F382E_P_2_M_0) },
1afd85e3
L
12174 },
12175 {
592a252b
L
12176 /* MOD_VEX_0F382F_PREFIX_2 */
12177 { VEX_W_TABLE (VEX_W_0F382F_P_2_M_0) },
1afd85e3 12178 },
6c30d220
L
12179 {
12180 /* MOD_VEX_0F385A_PREFIX_2 */
12181 { VEX_LEN_TABLE (VEX_LEN_0F385A_P_2_M_0) },
12182 },
12183 {
12184 /* MOD_VEX_0F388C_PREFIX_2 */
bf890a93 12185 { "vpmaskmov%LW", { XM, Vex, Mx }, 0 },
6c30d220
L
12186 },
12187 {
12188 /* MOD_VEX_0F388E_PREFIX_2 */
bf890a93 12189 { "vpmaskmov%LW", { Mx, Vex, XM }, 0 },
6c30d220 12190 },
ab4e4ed5
AF
12191 {
12192 /* MOD_VEX_W_0_0F3A30_P_2_LEN_0 */
12193 { Bad_Opcode },
12194 { "kshiftrb", { MaskG, MaskR, Ib }, 0 },
12195 },
12196 {
12197 /* MOD_VEX_W_1_0F3A30_P_2_LEN_0 */
12198 { Bad_Opcode },
12199 { "kshiftrw", { MaskG, MaskR, Ib }, 0 },
12200 },
12201 {
12202 /* MOD_VEX_W_0_0F3A31_P_2_LEN_0 */
12203 { Bad_Opcode },
12204 { "kshiftrd", { MaskG, MaskR, Ib }, 0 },
12205 },
12206 {
12207 /* MOD_VEX_W_1_0F3A31_P_2_LEN_0 */
12208 { Bad_Opcode },
12209 { "kshiftrq", { MaskG, MaskR, Ib }, 0 },
12210 },
12211 {
12212 /* MOD_VEX_W_0_0F3A32_P_2_LEN_0 */
12213 { Bad_Opcode },
12214 { "kshiftlb", { MaskG, MaskR, Ib }, 0 },
12215 },
12216 {
12217 /* MOD_VEX_W_1_0F3A32_P_2_LEN_0 */
12218 { Bad_Opcode },
12219 { "kshiftlw", { MaskG, MaskR, Ib }, 0 },
12220 },
12221 {
12222 /* MOD_VEX_W_0_0F3A33_P_2_LEN_0 */
12223 { Bad_Opcode },
12224 { "kshiftld", { MaskG, MaskR, Ib }, 0 },
12225 },
12226 {
12227 /* MOD_VEX_W_1_0F3A33_P_2_LEN_0 */
12228 { Bad_Opcode },
12229 { "kshiftlq", { MaskG, MaskR, Ib }, 0 },
12230 },
43234a1e
L
12231#define NEED_MOD_TABLE
12232#include "i386-dis-evex.h"
12233#undef NEED_MOD_TABLE
b844680a
L
12234};
12235
1ceb70f8 12236static const struct dis386 rm_table[][8] = {
42164a71
L
12237 {
12238 /* RM_C6_REG_7 */
bf890a93 12239 { "xabort", { Skip_MODRM, Ib }, 0 },
42164a71
L
12240 },
12241 {
12242 /* RM_C7_REG_7 */
bf890a93 12243 { "xbeginT", { Skip_MODRM, Jv }, 0 },
42164a71 12244 },
b844680a 12245 {
1ceb70f8 12246 /* RM_0F01_REG_0 */
592d1631 12247 { Bad_Opcode },
bf890a93
IT
12248 { "vmcall", { Skip_MODRM }, 0 },
12249 { "vmlaunch", { Skip_MODRM }, 0 },
12250 { "vmresume", { Skip_MODRM }, 0 },
12251 { "vmxoff", { Skip_MODRM }, 0 },
b844680a
L
12252 },
12253 {
1ceb70f8 12254 /* RM_0F01_REG_1 */
bf890a93
IT
12255 { "monitor", { { OP_Monitor, 0 } }, 0 },
12256 { "mwait", { { OP_Mwait, 0 } }, 0 },
12257 { "clac", { Skip_MODRM }, 0 },
12258 { "stac", { Skip_MODRM }, 0 },
2cf200a4
IT
12259 { Bad_Opcode },
12260 { Bad_Opcode },
12261 { Bad_Opcode },
bf890a93 12262 { "encls", { Skip_MODRM }, 0 },
b844680a 12263 },
475a2301
L
12264 {
12265 /* RM_0F01_REG_2 */
bf890a93
IT
12266 { "xgetbv", { Skip_MODRM }, 0 },
12267 { "xsetbv", { Skip_MODRM }, 0 },
8729a6f6
L
12268 { Bad_Opcode },
12269 { Bad_Opcode },
bf890a93
IT
12270 { "vmfunc", { Skip_MODRM }, 0 },
12271 { "xend", { Skip_MODRM }, 0 },
12272 { "xtest", { Skip_MODRM }, 0 },
12273 { "enclu", { Skip_MODRM }, 0 },
475a2301 12274 },
b844680a 12275 {
1ceb70f8 12276 /* RM_0F01_REG_3 */
bf890a93
IT
12277 { "vmrun", { Skip_MODRM }, 0 },
12278 { "vmmcall", { Skip_MODRM }, 0 },
12279 { "vmload", { Skip_MODRM }, 0 },
12280 { "vmsave", { Skip_MODRM }, 0 },
12281 { "stgi", { Skip_MODRM }, 0 },
12282 { "clgi", { Skip_MODRM }, 0 },
12283 { "skinit", { Skip_MODRM }, 0 },
12284 { "invlpga", { Skip_MODRM }, 0 },
4e7d34a6 12285 },
8eab4136
L
12286 {
12287 /* RM_0F01_REG_5 */
2234eee6 12288 { PREFIX_TABLE (PREFIX_MOD_3_0F01_REG_5_RM_0) },
8eab4136 12289 { Bad_Opcode },
603555e5 12290 { PREFIX_TABLE (PREFIX_MOD_3_0F01_REG_5_RM_2) },
8eab4136
L
12291 { Bad_Opcode },
12292 { Bad_Opcode },
12293 { Bad_Opcode },
12294 { "rdpkru", { Skip_MODRM }, 0 },
12295 { "wrpkru", { Skip_MODRM }, 0 },
12296 },
4e7d34a6 12297 {
1ceb70f8 12298 /* RM_0F01_REG_7 */
bf890a93
IT
12299 { "swapgs", { Skip_MODRM }, 0 },
12300 { "rdtscp", { Skip_MODRM }, 0 },
9916071f
AP
12301 { "monitorx", { { OP_Monitor, 0 } }, 0 },
12302 { "mwaitx", { { OP_Mwaitx, 0 } }, 0 },
bf890a93 12303 { "clzero", { Skip_MODRM }, 0 },
b844680a 12304 },
603555e5
L
12305 {
12306 /* RM_0F1E_MOD_3_REG_7 */
12307 { "nopQ", { Ev }, 0 },
12308 { "nopQ", { Ev }, 0 },
12309 { "endbr64", { Skip_MODRM }, PREFIX_OPCODE },
12310 { "endbr32", { Skip_MODRM }, PREFIX_OPCODE },
12311 { "nopQ", { Ev }, 0 },
12312 { "nopQ", { Ev }, 0 },
12313 { "nopQ", { Ev }, 0 },
12314 { "nopQ", { Ev }, 0 },
12315 },
b844680a 12316 {
1ceb70f8 12317 /* RM_0FAE_REG_6 */
bf890a93 12318 { "mfence", { Skip_MODRM }, 0 },
b844680a 12319 },
bbedc832 12320 {
1ceb70f8 12321 /* RM_0FAE_REG_7 */
b5cefcca
L
12322 { "sfence", { Skip_MODRM }, 0 },
12323
144c41d9 12324 },
b844680a
L
12325};
12326
c608c12e
AM
12327#define INTERNAL_DISASSEMBLER_ERROR _("<internal disassembler error>")
12328
f16cd0d5
L
12329/* We use the high bit to indicate different name for the same
12330 prefix. */
f16cd0d5 12331#define REP_PREFIX (0xf3 | 0x100)
42164a71
L
12332#define XACQUIRE_PREFIX (0xf2 | 0x200)
12333#define XRELEASE_PREFIX (0xf3 | 0x400)
7e8b059b 12334#define BND_PREFIX (0xf2 | 0x400)
04ef582a 12335#define NOTRACK_PREFIX (0x3e | 0x100)
f16cd0d5
L
12336
12337static int
26ca5450 12338ckprefix (void)
252b5132 12339{
f16cd0d5 12340 int newrex, i, length;
52b15da3 12341 rex = 0;
c0f3af97 12342 rex_ignored = 0;
252b5132 12343 prefixes = 0;
7d421014 12344 used_prefixes = 0;
52b15da3 12345 rex_used = 0;
f16cd0d5
L
12346 last_lock_prefix = -1;
12347 last_repz_prefix = -1;
12348 last_repnz_prefix = -1;
12349 last_data_prefix = -1;
12350 last_addr_prefix = -1;
12351 last_rex_prefix = -1;
12352 last_seg_prefix = -1;
d9949a36 12353 fwait_prefix = -1;
285ca992 12354 active_seg_prefix = 0;
f310f33d
L
12355 for (i = 0; i < (int) ARRAY_SIZE (all_prefixes); i++)
12356 all_prefixes[i] = 0;
12357 i = 0;
f16cd0d5
L
12358 length = 0;
12359 /* The maximum instruction length is 15bytes. */
12360 while (length < MAX_CODE_LENGTH - 1)
252b5132
RH
12361 {
12362 FETCH_DATA (the_info, codep + 1);
52b15da3 12363 newrex = 0;
252b5132
RH
12364 switch (*codep)
12365 {
52b15da3
JH
12366 /* REX prefixes family. */
12367 case 0x40:
12368 case 0x41:
12369 case 0x42:
12370 case 0x43:
12371 case 0x44:
12372 case 0x45:
12373 case 0x46:
12374 case 0x47:
12375 case 0x48:
12376 case 0x49:
12377 case 0x4a:
12378 case 0x4b:
12379 case 0x4c:
12380 case 0x4d:
12381 case 0x4e:
12382 case 0x4f:
f16cd0d5
L
12383 if (address_mode == mode_64bit)
12384 newrex = *codep;
12385 else
12386 return 1;
12387 last_rex_prefix = i;
52b15da3 12388 break;
252b5132
RH
12389 case 0xf3:
12390 prefixes |= PREFIX_REPZ;
f16cd0d5 12391 last_repz_prefix = i;
252b5132
RH
12392 break;
12393 case 0xf2:
12394 prefixes |= PREFIX_REPNZ;
f16cd0d5 12395 last_repnz_prefix = i;
252b5132
RH
12396 break;
12397 case 0xf0:
12398 prefixes |= PREFIX_LOCK;
f16cd0d5 12399 last_lock_prefix = i;
252b5132
RH
12400 break;
12401 case 0x2e:
12402 prefixes |= PREFIX_CS;
f16cd0d5 12403 last_seg_prefix = i;
285ca992 12404 active_seg_prefix = PREFIX_CS;
252b5132
RH
12405 break;
12406 case 0x36:
12407 prefixes |= PREFIX_SS;
f16cd0d5 12408 last_seg_prefix = i;
285ca992 12409 active_seg_prefix = PREFIX_SS;
252b5132
RH
12410 break;
12411 case 0x3e:
12412 prefixes |= PREFIX_DS;
f16cd0d5 12413 last_seg_prefix = i;
285ca992 12414 active_seg_prefix = PREFIX_DS;
252b5132
RH
12415 break;
12416 case 0x26:
12417 prefixes |= PREFIX_ES;
f16cd0d5 12418 last_seg_prefix = i;
285ca992 12419 active_seg_prefix = PREFIX_ES;
252b5132
RH
12420 break;
12421 case 0x64:
12422 prefixes |= PREFIX_FS;
f16cd0d5 12423 last_seg_prefix = i;
285ca992 12424 active_seg_prefix = PREFIX_FS;
252b5132
RH
12425 break;
12426 case 0x65:
12427 prefixes |= PREFIX_GS;
f16cd0d5 12428 last_seg_prefix = i;
285ca992 12429 active_seg_prefix = PREFIX_GS;
252b5132
RH
12430 break;
12431 case 0x66:
12432 prefixes |= PREFIX_DATA;
f16cd0d5 12433 last_data_prefix = i;
252b5132
RH
12434 break;
12435 case 0x67:
12436 prefixes |= PREFIX_ADDR;
f16cd0d5 12437 last_addr_prefix = i;
252b5132 12438 break;
5076851f 12439 case FWAIT_OPCODE:
252b5132
RH
12440 /* fwait is really an instruction. If there are prefixes
12441 before the fwait, they belong to the fwait, *not* to the
12442 following instruction. */
d9949a36 12443 fwait_prefix = i;
3e7d61b2 12444 if (prefixes || rex)
252b5132
RH
12445 {
12446 prefixes |= PREFIX_FWAIT;
12447 codep++;
6c067bbb
RM
12448 /* This ensures that the previous REX prefixes are noticed
12449 as unused prefixes, as in the return case below. */
12450 rex_used = rex;
f16cd0d5 12451 return 1;
252b5132
RH
12452 }
12453 prefixes = PREFIX_FWAIT;
12454 break;
12455 default:
f16cd0d5 12456 return 1;
252b5132 12457 }
52b15da3
JH
12458 /* Rex is ignored when followed by another prefix. */
12459 if (rex)
12460 {
3e7d61b2 12461 rex_used = rex;
f16cd0d5 12462 return 1;
52b15da3 12463 }
f16cd0d5 12464 if (*codep != FWAIT_OPCODE)
4e9ac44a 12465 all_prefixes[i++] = *codep;
52b15da3 12466 rex = newrex;
252b5132 12467 codep++;
f16cd0d5
L
12468 length++;
12469 }
12470 return 0;
12471}
12472
7d421014
ILT
12473/* Return the name of the prefix byte PREF, or NULL if PREF is not a
12474 prefix byte. */
12475
12476static const char *
26ca5450 12477prefix_name (int pref, int sizeflag)
7d421014 12478{
0003779b
L
12479 static const char *rexes [16] =
12480 {
12481 "rex", /* 0x40 */
12482 "rex.B", /* 0x41 */
12483 "rex.X", /* 0x42 */
12484 "rex.XB", /* 0x43 */
12485 "rex.R", /* 0x44 */
12486 "rex.RB", /* 0x45 */
12487 "rex.RX", /* 0x46 */
12488 "rex.RXB", /* 0x47 */
12489 "rex.W", /* 0x48 */
12490 "rex.WB", /* 0x49 */
12491 "rex.WX", /* 0x4a */
12492 "rex.WXB", /* 0x4b */
12493 "rex.WR", /* 0x4c */
12494 "rex.WRB", /* 0x4d */
12495 "rex.WRX", /* 0x4e */
12496 "rex.WRXB", /* 0x4f */
12497 };
12498
7d421014
ILT
12499 switch (pref)
12500 {
52b15da3
JH
12501 /* REX prefixes family. */
12502 case 0x40:
52b15da3 12503 case 0x41:
52b15da3 12504 case 0x42:
52b15da3 12505 case 0x43:
52b15da3 12506 case 0x44:
52b15da3 12507 case 0x45:
52b15da3 12508 case 0x46:
52b15da3 12509 case 0x47:
52b15da3 12510 case 0x48:
52b15da3 12511 case 0x49:
52b15da3 12512 case 0x4a:
52b15da3 12513 case 0x4b:
52b15da3 12514 case 0x4c:
52b15da3 12515 case 0x4d:
52b15da3 12516 case 0x4e:
52b15da3 12517 case 0x4f:
0003779b 12518 return rexes [pref - 0x40];
7d421014
ILT
12519 case 0xf3:
12520 return "repz";
12521 case 0xf2:
12522 return "repnz";
12523 case 0xf0:
12524 return "lock";
12525 case 0x2e:
12526 return "cs";
12527 case 0x36:
12528 return "ss";
12529 case 0x3e:
12530 return "ds";
12531 case 0x26:
12532 return "es";
12533 case 0x64:
12534 return "fs";
12535 case 0x65:
12536 return "gs";
12537 case 0x66:
12538 return (sizeflag & DFLAG) ? "data16" : "data32";
12539 case 0x67:
cb712a9e 12540 if (address_mode == mode_64bit)
db6eb5be 12541 return (sizeflag & AFLAG) ? "addr32" : "addr64";
c1a64871 12542 else
2888cb7a 12543 return (sizeflag & AFLAG) ? "addr16" : "addr32";
7d421014
ILT
12544 case FWAIT_OPCODE:
12545 return "fwait";
f16cd0d5
L
12546 case REP_PREFIX:
12547 return "rep";
42164a71
L
12548 case XACQUIRE_PREFIX:
12549 return "xacquire";
12550 case XRELEASE_PREFIX:
12551 return "xrelease";
7e8b059b
L
12552 case BND_PREFIX:
12553 return "bnd";
04ef582a
L
12554 case NOTRACK_PREFIX:
12555 return "notrack";
7d421014
ILT
12556 default:
12557 return NULL;
12558 }
12559}
12560
ce518a5f
L
12561static char op_out[MAX_OPERANDS][100];
12562static int op_ad, op_index[MAX_OPERANDS];
1d9f512f 12563static int two_source_ops;
ce518a5f
L
12564static bfd_vma op_address[MAX_OPERANDS];
12565static bfd_vma op_riprel[MAX_OPERANDS];
52b15da3 12566static bfd_vma start_pc;
ce518a5f 12567
252b5132
RH
12568/*
12569 * On the 386's of 1988, the maximum length of an instruction is 15 bytes.
12570 * (see topic "Redundant prefixes" in the "Differences from 8086"
12571 * section of the "Virtual 8086 Mode" chapter.)
12572 * 'pc' should be the address of this instruction, it will
12573 * be used to print the target address if this is a relative jump or call
12574 * The function returns the length of this instruction in bytes.
12575 */
12576
252b5132 12577static char intel_syntax;
9d141669 12578static char intel_mnemonic = !SYSV386_COMPAT;
252b5132
RH
12579static char open_char;
12580static char close_char;
12581static char separator_char;
12582static char scale_char;
12583
5db04b09
L
12584enum x86_64_isa
12585{
12586 amd64 = 0,
12587 intel64
12588};
12589
12590static enum x86_64_isa isa64;
12591
e396998b
AM
12592/* Here for backwards compatibility. When gdb stops using
12593 print_insn_i386_att and print_insn_i386_intel these functions can
12594 disappear, and print_insn_i386 be merged into print_insn. */
252b5132 12595int
26ca5450 12596print_insn_i386_att (bfd_vma pc, disassemble_info *info)
252b5132
RH
12597{
12598 intel_syntax = 0;
e396998b
AM
12599
12600 return print_insn (pc, info);
252b5132
RH
12601}
12602
12603int
26ca5450 12604print_insn_i386_intel (bfd_vma pc, disassemble_info *info)
252b5132
RH
12605{
12606 intel_syntax = 1;
e396998b
AM
12607
12608 return print_insn (pc, info);
252b5132
RH
12609}
12610
e396998b 12611int
26ca5450 12612print_insn_i386 (bfd_vma pc, disassemble_info *info)
e396998b
AM
12613{
12614 intel_syntax = -1;
12615
12616 return print_insn (pc, info);
12617}
12618
f59a29b9
L
12619void
12620print_i386_disassembler_options (FILE *stream)
12621{
12622 fprintf (stream, _("\n\
12623The following i386/x86-64 specific disassembler options are supported for use\n\
12624with the -M switch (multiple options should be separated by commas):\n"));
12625
12626 fprintf (stream, _(" x86-64 Disassemble in 64bit mode\n"));
12627 fprintf (stream, _(" i386 Disassemble in 32bit mode\n"));
12628 fprintf (stream, _(" i8086 Disassemble in 16bit mode\n"));
12629 fprintf (stream, _(" att Display instruction in AT&T syntax\n"));
12630 fprintf (stream, _(" intel Display instruction in Intel syntax\n"));
9d141669
L
12631 fprintf (stream, _(" att-mnemonic\n"
12632 " Display instruction in AT&T mnemonic\n"));
12633 fprintf (stream, _(" intel-mnemonic\n"
12634 " Display instruction in Intel mnemonic\n"));
f59a29b9
L
12635 fprintf (stream, _(" addr64 Assume 64bit address size\n"));
12636 fprintf (stream, _(" addr32 Assume 32bit address size\n"));
12637 fprintf (stream, _(" addr16 Assume 16bit address size\n"));
12638 fprintf (stream, _(" data32 Assume 32bit data size\n"));
12639 fprintf (stream, _(" data16 Assume 16bit data size\n"));
12640 fprintf (stream, _(" suffix Always display instruction suffix in AT&T syntax\n"));
5db04b09
L
12641 fprintf (stream, _(" amd64 Display instruction in AMD64 ISA\n"));
12642 fprintf (stream, _(" intel64 Display instruction in Intel64 ISA\n"));
f59a29b9
L
12643}
12644
592d1631 12645/* Bad opcode. */
bf890a93 12646static const struct dis386 bad_opcode = { "(bad)", { XX }, 0 };
592d1631 12647
b844680a
L
12648/* Get a pointer to struct dis386 with a valid name. */
12649
12650static const struct dis386 *
8bb15339 12651get_valid_dis386 (const struct dis386 *dp, disassemble_info *info)
b844680a 12652{
91d6fa6a 12653 int vindex, vex_table_index;
b844680a
L
12654
12655 if (dp->name != NULL)
12656 return dp;
12657
12658 switch (dp->op[0].bytemode)
12659 {
1ceb70f8
L
12660 case USE_REG_TABLE:
12661 dp = &reg_table[dp->op[1].bytemode][modrm.reg];
12662 break;
12663
12664 case USE_MOD_TABLE:
91d6fa6a
NC
12665 vindex = modrm.mod == 0x3 ? 1 : 0;
12666 dp = &mod_table[dp->op[1].bytemode][vindex];
1ceb70f8
L
12667 break;
12668
12669 case USE_RM_TABLE:
12670 dp = &rm_table[dp->op[1].bytemode][modrm.rm];
b844680a
L
12671 break;
12672
4e7d34a6 12673 case USE_PREFIX_TABLE:
c0f3af97 12674 if (need_vex)
b844680a 12675 {
c0f3af97
L
12676 /* The prefix in VEX is implicit. */
12677 switch (vex.prefix)
12678 {
12679 case 0:
91d6fa6a 12680 vindex = 0;
c0f3af97
L
12681 break;
12682 case REPE_PREFIX_OPCODE:
91d6fa6a 12683 vindex = 1;
c0f3af97
L
12684 break;
12685 case DATA_PREFIX_OPCODE:
91d6fa6a 12686 vindex = 2;
c0f3af97
L
12687 break;
12688 case REPNE_PREFIX_OPCODE:
91d6fa6a 12689 vindex = 3;
c0f3af97
L
12690 break;
12691 default:
12692 abort ();
12693 break;
12694 }
b844680a 12695 }
7bb15c6f 12696 else
b844680a 12697 {
285ca992
L
12698 int last_prefix = -1;
12699 int prefix = 0;
91d6fa6a 12700 vindex = 0;
285ca992
L
12701 /* We check PREFIX_REPNZ and PREFIX_REPZ before PREFIX_DATA.
12702 When there are multiple PREFIX_REPNZ and PREFIX_REPZ, the
12703 last one wins. */
12704 if ((prefixes & (PREFIX_REPZ | PREFIX_REPNZ)) != 0)
b844680a 12705 {
285ca992 12706 if (last_repz_prefix > last_repnz_prefix)
c0f3af97 12707 {
285ca992
L
12708 vindex = 1;
12709 prefix = PREFIX_REPZ;
12710 last_prefix = last_repz_prefix;
c0f3af97
L
12711 }
12712 else
b844680a 12713 {
285ca992
L
12714 vindex = 3;
12715 prefix = PREFIX_REPNZ;
12716 last_prefix = last_repnz_prefix;
b844680a 12717 }
285ca992 12718
507bd325
L
12719 /* Check if prefix should be ignored. */
12720 if ((((prefix_table[dp->op[1].bytemode][vindex].prefix_requirement
12721 & PREFIX_IGNORED) >> PREFIX_IGNORED_SHIFT)
12722 & prefix) != 0)
285ca992
L
12723 vindex = 0;
12724 }
12725
12726 if (vindex == 0 && (prefixes & PREFIX_DATA) != 0)
12727 {
12728 vindex = 2;
12729 prefix = PREFIX_DATA;
12730 last_prefix = last_data_prefix;
12731 }
12732
12733 if (vindex != 0)
12734 {
12735 used_prefixes |= prefix;
12736 all_prefixes[last_prefix] = 0;
b844680a
L
12737 }
12738 }
91d6fa6a 12739 dp = &prefix_table[dp->op[1].bytemode][vindex];
b844680a
L
12740 break;
12741
4e7d34a6 12742 case USE_X86_64_TABLE:
91d6fa6a
NC
12743 vindex = address_mode == mode_64bit ? 1 : 0;
12744 dp = &x86_64_table[dp->op[1].bytemode][vindex];
b844680a
L
12745 break;
12746
4e7d34a6 12747 case USE_3BYTE_TABLE:
8bb15339 12748 FETCH_DATA (info, codep + 2);
91d6fa6a
NC
12749 vindex = *codep++;
12750 dp = &three_byte_table[dp->op[1].bytemode][vindex];
285ca992 12751 end_codep = codep;
8bb15339
L
12752 modrm.mod = (*codep >> 6) & 3;
12753 modrm.reg = (*codep >> 3) & 7;
12754 modrm.rm = *codep & 7;
12755 break;
12756
c0f3af97
L
12757 case USE_VEX_LEN_TABLE:
12758 if (!need_vex)
12759 abort ();
12760
12761 switch (vex.length)
12762 {
12763 case 128:
91d6fa6a 12764 vindex = 0;
c0f3af97
L
12765 break;
12766 case 256:
91d6fa6a 12767 vindex = 1;
c0f3af97
L
12768 break;
12769 default:
12770 abort ();
12771 break;
12772 }
12773
91d6fa6a 12774 dp = &vex_len_table[dp->op[1].bytemode][vindex];
c0f3af97
L
12775 break;
12776
f88c9eb0
SP
12777 case USE_XOP_8F_TABLE:
12778 FETCH_DATA (info, codep + 3);
12779 /* All bits in the REX prefix are ignored. */
12780 rex_ignored = rex;
12781 rex = ~(*codep >> 5) & 0x7;
12782
12783 /* VEX_TABLE_INDEX is the mmmmm part of the XOP byte 1 "RCB.mmmmm". */
12784 switch ((*codep & 0x1f))
12785 {
12786 default:
f07af43e
L
12787 dp = &bad_opcode;
12788 return dp;
5dd85c99
SP
12789 case 0x8:
12790 vex_table_index = XOP_08;
12791 break;
f88c9eb0
SP
12792 case 0x9:
12793 vex_table_index = XOP_09;
12794 break;
12795 case 0xa:
12796 vex_table_index = XOP_0A;
12797 break;
12798 }
12799 codep++;
12800 vex.w = *codep & 0x80;
12801 if (vex.w && address_mode == mode_64bit)
12802 rex |= REX_W;
12803
12804 vex.register_specifier = (~(*codep >> 3)) & 0xf;
abfcb414 12805 if (address_mode != mode_64bit)
f07af43e 12806 {
abfcb414
AP
12807 /* In 16/32-bit mode REX_B is silently ignored. */
12808 rex &= ~REX_B;
12809 if (vex.register_specifier > 0x7)
12810 {
12811 dp = &bad_opcode;
12812 return dp;
12813 }
f07af43e 12814 }
f88c9eb0
SP
12815
12816 vex.length = (*codep & 0x4) ? 256 : 128;
12817 switch ((*codep & 0x3))
12818 {
12819 case 0:
12820 vex.prefix = 0;
12821 break;
12822 case 1:
12823 vex.prefix = DATA_PREFIX_OPCODE;
12824 break;
12825 case 2:
12826 vex.prefix = REPE_PREFIX_OPCODE;
12827 break;
12828 case 3:
12829 vex.prefix = REPNE_PREFIX_OPCODE;
12830 break;
12831 }
12832 need_vex = 1;
12833 need_vex_reg = 1;
12834 codep++;
91d6fa6a
NC
12835 vindex = *codep++;
12836 dp = &xop_table[vex_table_index][vindex];
c48244a5 12837
285ca992 12838 end_codep = codep;
c48244a5
SP
12839 FETCH_DATA (info, codep + 1);
12840 modrm.mod = (*codep >> 6) & 3;
12841 modrm.reg = (*codep >> 3) & 7;
12842 modrm.rm = *codep & 7;
f88c9eb0
SP
12843 break;
12844
c0f3af97 12845 case USE_VEX_C4_TABLE:
43234a1e 12846 /* VEX prefix. */
c0f3af97
L
12847 FETCH_DATA (info, codep + 3);
12848 /* All bits in the REX prefix are ignored. */
12849 rex_ignored = rex;
12850 rex = ~(*codep >> 5) & 0x7;
12851 switch ((*codep & 0x1f))
12852 {
12853 default:
f07af43e
L
12854 dp = &bad_opcode;
12855 return dp;
c0f3af97 12856 case 0x1:
f88c9eb0 12857 vex_table_index = VEX_0F;
c0f3af97
L
12858 break;
12859 case 0x2:
f88c9eb0 12860 vex_table_index = VEX_0F38;
c0f3af97
L
12861 break;
12862 case 0x3:
f88c9eb0 12863 vex_table_index = VEX_0F3A;
c0f3af97
L
12864 break;
12865 }
12866 codep++;
12867 vex.w = *codep & 0x80;
9889cbb1 12868 if (address_mode == mode_64bit)
f07af43e 12869 {
9889cbb1
L
12870 if (vex.w)
12871 rex |= REX_W;
12872 vex.register_specifier = (~(*codep >> 3)) & 0xf;
12873 }
12874 else
12875 {
12876 /* For the 3-byte VEX prefix in 32-bit mode, the REX_B bit
12877 is ignored, other REX bits are 0 and the highest bit in
12878 VEX.vvvv is also ignored. */
12879 rex = 0;
12880 vex.register_specifier = (~(*codep >> 3)) & 0x7;
f07af43e 12881 }
c0f3af97
L
12882 vex.length = (*codep & 0x4) ? 256 : 128;
12883 switch ((*codep & 0x3))
12884 {
12885 case 0:
12886 vex.prefix = 0;
12887 break;
12888 case 1:
12889 vex.prefix = DATA_PREFIX_OPCODE;
12890 break;
12891 case 2:
12892 vex.prefix = REPE_PREFIX_OPCODE;
12893 break;
12894 case 3:
12895 vex.prefix = REPNE_PREFIX_OPCODE;
12896 break;
12897 }
12898 need_vex = 1;
12899 need_vex_reg = 1;
12900 codep++;
91d6fa6a
NC
12901 vindex = *codep++;
12902 dp = &vex_table[vex_table_index][vindex];
285ca992 12903 end_codep = codep;
53c4d625
JB
12904 /* There is no MODRM byte for VEX0F 77. */
12905 if (vex_table_index != VEX_0F || vindex != 0x77)
c0f3af97
L
12906 {
12907 FETCH_DATA (info, codep + 1);
12908 modrm.mod = (*codep >> 6) & 3;
12909 modrm.reg = (*codep >> 3) & 7;
12910 modrm.rm = *codep & 7;
12911 }
12912 break;
12913
12914 case USE_VEX_C5_TABLE:
43234a1e 12915 /* VEX prefix. */
c0f3af97
L
12916 FETCH_DATA (info, codep + 2);
12917 /* All bits in the REX prefix are ignored. */
12918 rex_ignored = rex;
12919 rex = (*codep & 0x80) ? 0 : REX_R;
12920
9889cbb1
L
12921 /* For the 2-byte VEX prefix in 32-bit mode, the highest bit in
12922 VEX.vvvv is 1. */
c0f3af97 12923 vex.register_specifier = (~(*codep >> 3)) & 0xf;
759a05ce 12924 vex.w = 0;
c0f3af97
L
12925 vex.length = (*codep & 0x4) ? 256 : 128;
12926 switch ((*codep & 0x3))
12927 {
12928 case 0:
12929 vex.prefix = 0;
12930 break;
12931 case 1:
12932 vex.prefix = DATA_PREFIX_OPCODE;
12933 break;
12934 case 2:
12935 vex.prefix = REPE_PREFIX_OPCODE;
12936 break;
12937 case 3:
12938 vex.prefix = REPNE_PREFIX_OPCODE;
12939 break;
12940 }
12941 need_vex = 1;
12942 need_vex_reg = 1;
12943 codep++;
91d6fa6a
NC
12944 vindex = *codep++;
12945 dp = &vex_table[dp->op[1].bytemode][vindex];
285ca992 12946 end_codep = codep;
53c4d625
JB
12947 /* There is no MODRM byte for VEX 77. */
12948 if (vindex != 0x77)
c0f3af97
L
12949 {
12950 FETCH_DATA (info, codep + 1);
12951 modrm.mod = (*codep >> 6) & 3;
12952 modrm.reg = (*codep >> 3) & 7;
12953 modrm.rm = *codep & 7;
12954 }
12955 break;
12956
9e30b8e0
L
12957 case USE_VEX_W_TABLE:
12958 if (!need_vex)
12959 abort ();
12960
12961 dp = &vex_w_table[dp->op[1].bytemode][vex.w ? 1 : 0];
12962 break;
12963
43234a1e
L
12964 case USE_EVEX_TABLE:
12965 two_source_ops = 0;
12966 /* EVEX prefix. */
12967 vex.evex = 1;
12968 FETCH_DATA (info, codep + 4);
12969 /* All bits in the REX prefix are ignored. */
12970 rex_ignored = rex;
12971 /* The first byte after 0x62. */
12972 rex = ~(*codep >> 5) & 0x7;
12973 vex.r = *codep & 0x10;
12974 switch ((*codep & 0xf))
12975 {
12976 default:
12977 return &bad_opcode;
12978 case 0x1:
12979 vex_table_index = EVEX_0F;
12980 break;
12981 case 0x2:
12982 vex_table_index = EVEX_0F38;
12983 break;
12984 case 0x3:
12985 vex_table_index = EVEX_0F3A;
12986 break;
12987 }
12988
12989 /* The second byte after 0x62. */
12990 codep++;
12991 vex.w = *codep & 0x80;
12992 if (vex.w && address_mode == mode_64bit)
12993 rex |= REX_W;
12994
12995 vex.register_specifier = (~(*codep >> 3)) & 0xf;
12996 if (address_mode != mode_64bit)
12997 {
12998 /* In 16/32-bit mode silently ignore following bits. */
12999 rex &= ~REX_B;
13000 vex.r = 1;
13001 vex.v = 1;
13002 vex.register_specifier &= 0x7;
13003 }
13004
13005 /* The U bit. */
13006 if (!(*codep & 0x4))
13007 return &bad_opcode;
13008
13009 switch ((*codep & 0x3))
13010 {
13011 case 0:
13012 vex.prefix = 0;
13013 break;
13014 case 1:
13015 vex.prefix = DATA_PREFIX_OPCODE;
13016 break;
13017 case 2:
13018 vex.prefix = REPE_PREFIX_OPCODE;
13019 break;
13020 case 3:
13021 vex.prefix = REPNE_PREFIX_OPCODE;
13022 break;
13023 }
13024
13025 /* The third byte after 0x62. */
13026 codep++;
13027
13028 /* Remember the static rounding bits. */
13029 vex.ll = (*codep >> 5) & 3;
13030 vex.b = (*codep & 0x10) != 0;
13031
13032 vex.v = *codep & 0x8;
13033 vex.mask_register_specifier = *codep & 0x7;
13034 vex.zeroing = *codep & 0x80;
13035
13036 need_vex = 1;
13037 need_vex_reg = 1;
13038 codep++;
13039 vindex = *codep++;
13040 dp = &evex_table[vex_table_index][vindex];
285ca992 13041 end_codep = codep;
43234a1e
L
13042 FETCH_DATA (info, codep + 1);
13043 modrm.mod = (*codep >> 6) & 3;
13044 modrm.reg = (*codep >> 3) & 7;
13045 modrm.rm = *codep & 7;
13046
13047 /* Set vector length. */
13048 if (modrm.mod == 3 && vex.b)
13049 vex.length = 512;
13050 else
13051 {
13052 switch (vex.ll)
13053 {
13054 case 0x0:
13055 vex.length = 128;
13056 break;
13057 case 0x1:
13058 vex.length = 256;
13059 break;
13060 case 0x2:
13061 vex.length = 512;
13062 break;
13063 default:
13064 return &bad_opcode;
13065 }
13066 }
13067 break;
13068
592d1631
L
13069 case 0:
13070 dp = &bad_opcode;
13071 break;
13072
b844680a 13073 default:
d34b5006 13074 abort ();
b844680a
L
13075 }
13076
13077 if (dp->name != NULL)
13078 return dp;
13079 else
8bb15339 13080 return get_valid_dis386 (dp, info);
b844680a
L
13081}
13082
dfc8cf43 13083static void
55cf16e1 13084get_sib (disassemble_info *info, int sizeflag)
dfc8cf43
L
13085{
13086 /* If modrm.mod == 3, operand must be register. */
13087 if (need_modrm
55cf16e1 13088 && ((sizeflag & AFLAG) || address_mode == mode_64bit)
dfc8cf43
L
13089 && modrm.mod != 3
13090 && modrm.rm == 4)
13091 {
13092 FETCH_DATA (info, codep + 2);
13093 sib.index = (codep [1] >> 3) & 7;
13094 sib.scale = (codep [1] >> 6) & 3;
13095 sib.base = codep [1] & 7;
13096 }
13097}
13098
e396998b 13099static int
26ca5450 13100print_insn (bfd_vma pc, disassemble_info *info)
252b5132 13101{
2da11e11 13102 const struct dis386 *dp;
252b5132 13103 int i;
ce518a5f 13104 char *op_txt[MAX_OPERANDS];
252b5132 13105 int needcomma;
df18fdba 13106 int sizeflag, orig_sizeflag;
e396998b 13107 const char *p;
252b5132 13108 struct dis_private priv;
f16cd0d5 13109 int prefix_length;
252b5132 13110
d7921315
L
13111 priv.orig_sizeflag = AFLAG | DFLAG;
13112 if ((info->mach & bfd_mach_i386_i386) != 0)
cb712a9e 13113 address_mode = mode_32bit;
2da11e11 13114 else if (info->mach == bfd_mach_i386_i8086)
d7921315
L
13115 {
13116 address_mode = mode_16bit;
13117 priv.orig_sizeflag = 0;
13118 }
2da11e11 13119 else
d7921315
L
13120 address_mode = mode_64bit;
13121
13122 if (intel_syntax == (char) -1)
13123 intel_syntax = (info->mach & bfd_mach_i386_intel_syntax) != 0;
e396998b
AM
13124
13125 for (p = info->disassembler_options; p != NULL; )
13126 {
5db04b09
L
13127 if (CONST_STRNEQ (p, "amd64"))
13128 isa64 = amd64;
13129 else if (CONST_STRNEQ (p, "intel64"))
13130 isa64 = intel64;
13131 else if (CONST_STRNEQ (p, "x86-64"))
e396998b 13132 {
cb712a9e 13133 address_mode = mode_64bit;
e396998b
AM
13134 priv.orig_sizeflag = AFLAG | DFLAG;
13135 }
0112cd26 13136 else if (CONST_STRNEQ (p, "i386"))
e396998b 13137 {
cb712a9e 13138 address_mode = mode_32bit;
e396998b
AM
13139 priv.orig_sizeflag = AFLAG | DFLAG;
13140 }
0112cd26 13141 else if (CONST_STRNEQ (p, "i8086"))
e396998b 13142 {
cb712a9e 13143 address_mode = mode_16bit;
e396998b
AM
13144 priv.orig_sizeflag = 0;
13145 }
0112cd26 13146 else if (CONST_STRNEQ (p, "intel"))
e396998b
AM
13147 {
13148 intel_syntax = 1;
9d141669
L
13149 if (CONST_STRNEQ (p + 5, "-mnemonic"))
13150 intel_mnemonic = 1;
e396998b 13151 }
0112cd26 13152 else if (CONST_STRNEQ (p, "att"))
e396998b
AM
13153 {
13154 intel_syntax = 0;
9d141669
L
13155 if (CONST_STRNEQ (p + 3, "-mnemonic"))
13156 intel_mnemonic = 0;
e396998b 13157 }
0112cd26 13158 else if (CONST_STRNEQ (p, "addr"))
e396998b 13159 {
f59a29b9
L
13160 if (address_mode == mode_64bit)
13161 {
13162 if (p[4] == '3' && p[5] == '2')
13163 priv.orig_sizeflag &= ~AFLAG;
13164 else if (p[4] == '6' && p[5] == '4')
13165 priv.orig_sizeflag |= AFLAG;
13166 }
13167 else
13168 {
13169 if (p[4] == '1' && p[5] == '6')
13170 priv.orig_sizeflag &= ~AFLAG;
13171 else if (p[4] == '3' && p[5] == '2')
13172 priv.orig_sizeflag |= AFLAG;
13173 }
e396998b 13174 }
0112cd26 13175 else if (CONST_STRNEQ (p, "data"))
e396998b
AM
13176 {
13177 if (p[4] == '1' && p[5] == '6')
13178 priv.orig_sizeflag &= ~DFLAG;
13179 else if (p[4] == '3' && p[5] == '2')
13180 priv.orig_sizeflag |= DFLAG;
13181 }
0112cd26 13182 else if (CONST_STRNEQ (p, "suffix"))
e396998b
AM
13183 priv.orig_sizeflag |= SUFFIX_ALWAYS;
13184
13185 p = strchr (p, ',');
13186 if (p != NULL)
13187 p++;
13188 }
13189
c0f92bf9
L
13190 if (address_mode == mode_64bit && sizeof (bfd_vma) < 8)
13191 {
13192 (*info->fprintf_func) (info->stream,
13193 _("64-bit address is disabled"));
13194 return -1;
13195 }
13196
e396998b
AM
13197 if (intel_syntax)
13198 {
13199 names64 = intel_names64;
13200 names32 = intel_names32;
13201 names16 = intel_names16;
13202 names8 = intel_names8;
13203 names8rex = intel_names8rex;
13204 names_seg = intel_names_seg;
b9733481 13205 names_mm = intel_names_mm;
7e8b059b 13206 names_bnd = intel_names_bnd;
b9733481
L
13207 names_xmm = intel_names_xmm;
13208 names_ymm = intel_names_ymm;
43234a1e 13209 names_zmm = intel_names_zmm;
db51cc60
L
13210 index64 = intel_index64;
13211 index32 = intel_index32;
43234a1e 13212 names_mask = intel_names_mask;
e396998b
AM
13213 index16 = intel_index16;
13214 open_char = '[';
13215 close_char = ']';
13216 separator_char = '+';
13217 scale_char = '*';
13218 }
13219 else
13220 {
13221 names64 = att_names64;
13222 names32 = att_names32;
13223 names16 = att_names16;
13224 names8 = att_names8;
13225 names8rex = att_names8rex;
13226 names_seg = att_names_seg;
b9733481 13227 names_mm = att_names_mm;
7e8b059b 13228 names_bnd = att_names_bnd;
b9733481
L
13229 names_xmm = att_names_xmm;
13230 names_ymm = att_names_ymm;
43234a1e 13231 names_zmm = att_names_zmm;
db51cc60
L
13232 index64 = att_index64;
13233 index32 = att_index32;
43234a1e 13234 names_mask = att_names_mask;
e396998b
AM
13235 index16 = att_index16;
13236 open_char = '(';
13237 close_char = ')';
13238 separator_char = ',';
13239 scale_char = ',';
13240 }
2da11e11 13241
4fe53c98 13242 /* The output looks better if we put 7 bytes on a line, since that
8a9036a4
L
13243 puts most long word instructions on a single line. Use 8 bytes
13244 for Intel L1OM. */
d7921315 13245 if ((info->mach & bfd_mach_l1om) != 0)
8a9036a4
L
13246 info->bytes_per_line = 8;
13247 else
13248 info->bytes_per_line = 7;
252b5132 13249
26ca5450 13250 info->private_data = &priv;
252b5132
RH
13251 priv.max_fetched = priv.the_buffer;
13252 priv.insn_start = pc;
252b5132
RH
13253
13254 obuf[0] = 0;
ce518a5f
L
13255 for (i = 0; i < MAX_OPERANDS; ++i)
13256 {
13257 op_out[i][0] = 0;
13258 op_index[i] = -1;
13259 }
252b5132
RH
13260
13261 the_info = info;
13262 start_pc = pc;
e396998b
AM
13263 start_codep = priv.the_buffer;
13264 codep = priv.the_buffer;
252b5132 13265
8df14d78 13266 if (OPCODES_SIGSETJMP (priv.bailout) != 0)
5076851f 13267 {
7d421014
ILT
13268 const char *name;
13269
5076851f 13270 /* Getting here means we tried for data but didn't get it. That
e396998b
AM
13271 means we have an incomplete instruction of some sort. Just
13272 print the first byte as a prefix or a .byte pseudo-op. */
13273 if (codep > priv.the_buffer)
5076851f 13274 {
e396998b 13275 name = prefix_name (priv.the_buffer[0], priv.orig_sizeflag);
7d421014
ILT
13276 if (name != NULL)
13277 (*info->fprintf_func) (info->stream, "%s", name);
13278 else
5076851f 13279 {
7d421014
ILT
13280 /* Just print the first byte as a .byte instruction. */
13281 (*info->fprintf_func) (info->stream, ".byte 0x%x",
e396998b 13282 (unsigned int) priv.the_buffer[0]);
5076851f 13283 }
5076851f 13284
7d421014 13285 return 1;
5076851f
ILT
13286 }
13287
13288 return -1;
13289 }
13290
52b15da3 13291 obufp = obuf;
f16cd0d5
L
13292 sizeflag = priv.orig_sizeflag;
13293
13294 if (!ckprefix () || rex_used)
13295 {
13296 /* Too many prefixes or unused REX prefixes. */
13297 for (i = 0;
f6dd4781 13298 i < (int) ARRAY_SIZE (all_prefixes) && all_prefixes[i];
f16cd0d5 13299 i++)
de882298 13300 (*info->fprintf_func) (info->stream, "%s%s",
6c067bbb 13301 i == 0 ? "" : " ",
f16cd0d5 13302 prefix_name (all_prefixes[i], sizeflag));
de882298 13303 return i;
f16cd0d5 13304 }
252b5132
RH
13305
13306 insn_codep = codep;
13307
13308 FETCH_DATA (info, codep + 1);
13309 two_source_ops = (*codep == 0x62) || (*codep == 0xc8);
13310
3e7d61b2 13311 if (((prefixes & PREFIX_FWAIT)
f16cd0d5 13312 && ((*codep < 0xd8) || (*codep > 0xdf))))
252b5132 13313 {
86a80a50 13314 /* Handle prefixes before fwait. */
d9949a36 13315 for (i = 0; i < fwait_prefix && all_prefixes[i];
86a80a50
L
13316 i++)
13317 (*info->fprintf_func) (info->stream, "%s ",
13318 prefix_name (all_prefixes[i], sizeflag));
f16cd0d5 13319 (*info->fprintf_func) (info->stream, "fwait");
86a80a50 13320 return i + 1;
252b5132
RH
13321 }
13322
252b5132
RH
13323 if (*codep == 0x0f)
13324 {
eec0f4ca 13325 unsigned char threebyte;
5f40e14d
JS
13326
13327 codep++;
13328 FETCH_DATA (info, codep + 1);
13329 threebyte = *codep;
eec0f4ca 13330 dp = &dis386_twobyte[threebyte];
252b5132 13331 need_modrm = twobyte_has_modrm[*codep];
eec0f4ca 13332 codep++;
252b5132
RH
13333 }
13334 else
13335 {
6439fc28 13336 dp = &dis386[*codep];
252b5132 13337 need_modrm = onebyte_has_modrm[*codep];
eec0f4ca 13338 codep++;
252b5132 13339 }
246c51aa 13340
df18fdba
L
13341 /* Save sizeflag for printing the extra prefixes later before updating
13342 it for mnemonic and operand processing. The prefix names depend
13343 only on the address mode. */
13344 orig_sizeflag = sizeflag;
c608c12e 13345 if (prefixes & PREFIX_ADDR)
df18fdba 13346 sizeflag ^= AFLAG;
b844680a 13347 if ((prefixes & PREFIX_DATA))
df18fdba 13348 sizeflag ^= DFLAG;
3ffd33cf 13349
285ca992 13350 end_codep = codep;
8bb15339 13351 if (need_modrm)
252b5132
RH
13352 {
13353 FETCH_DATA (info, codep + 1);
7967e09e
L
13354 modrm.mod = (*codep >> 6) & 3;
13355 modrm.reg = (*codep >> 3) & 7;
13356 modrm.rm = *codep & 7;
252b5132
RH
13357 }
13358
42d5f9c6
MS
13359 need_vex = 0;
13360 need_vex_reg = 0;
13361 vex_w_done = 0;
43234a1e 13362 vex.evex = 0;
55b126d4 13363
ce518a5f 13364 if (dp->name == NULL && dp->op[0].bytemode == FLOATCODE)
252b5132 13365 {
55cf16e1 13366 get_sib (info, sizeflag);
252b5132
RH
13367 dofloat (sizeflag);
13368 }
13369 else
13370 {
8bb15339 13371 dp = get_valid_dis386 (dp, info);
b844680a 13372 if (dp != NULL && putop (dp->name, sizeflag) == 0)
6c067bbb 13373 {
55cf16e1 13374 get_sib (info, sizeflag);
ce518a5f
L
13375 for (i = 0; i < MAX_OPERANDS; ++i)
13376 {
246c51aa 13377 obufp = op_out[i];
ce518a5f
L
13378 op_ad = MAX_OPERANDS - 1 - i;
13379 if (dp->op[i].rtn)
13380 (*dp->op[i].rtn) (dp->op[i].bytemode, sizeflag);
43234a1e
L
13381 /* For EVEX instruction after the last operand masking
13382 should be printed. */
13383 if (i == 0 && vex.evex)
13384 {
13385 /* Don't print {%k0}. */
13386 if (vex.mask_register_specifier)
13387 {
13388 oappend ("{");
13389 oappend (names_mask[vex.mask_register_specifier]);
13390 oappend ("}");
13391 }
13392 if (vex.zeroing)
13393 oappend ("{z}");
13394 }
ce518a5f 13395 }
6439fc28 13396 }
252b5132
RH
13397 }
13398
d869730d 13399 /* Check if the REX prefix is used. */
e2e6193d 13400 if (rex_ignored == 0 && (rex ^ rex_used) == 0 && last_rex_prefix >= 0)
f16cd0d5
L
13401 all_prefixes[last_rex_prefix] = 0;
13402
5e6718e4 13403 /* Check if the SEG prefix is used. */
f16cd0d5
L
13404 if ((prefixes & (PREFIX_CS | PREFIX_SS | PREFIX_DS | PREFIX_ES
13405 | PREFIX_FS | PREFIX_GS)) != 0
285ca992 13406 && (used_prefixes & active_seg_prefix) != 0)
f16cd0d5
L
13407 all_prefixes[last_seg_prefix] = 0;
13408
5e6718e4 13409 /* Check if the ADDR prefix is used. */
f16cd0d5
L
13410 if ((prefixes & PREFIX_ADDR) != 0
13411 && (used_prefixes & PREFIX_ADDR) != 0)
13412 all_prefixes[last_addr_prefix] = 0;
13413
df18fdba
L
13414 /* Check if the DATA prefix is used. */
13415 if ((prefixes & PREFIX_DATA) != 0
13416 && (used_prefixes & PREFIX_DATA) != 0)
13417 all_prefixes[last_data_prefix] = 0;
f16cd0d5 13418
df18fdba 13419 /* Print the extra prefixes. */
f16cd0d5 13420 prefix_length = 0;
f310f33d 13421 for (i = 0; i < (int) ARRAY_SIZE (all_prefixes); i++)
f16cd0d5
L
13422 if (all_prefixes[i])
13423 {
13424 const char *name;
df18fdba 13425 name = prefix_name (all_prefixes[i], orig_sizeflag);
f16cd0d5
L
13426 if (name == NULL)
13427 abort ();
13428 prefix_length += strlen (name) + 1;
13429 (*info->fprintf_func) (info->stream, "%s ", name);
13430 }
b844680a 13431
285ca992
L
13432 /* If the mandatory PREFIX_REPZ/PREFIX_REPNZ/PREFIX_DATA prefix is
13433 unused, opcode is invalid. Since the PREFIX_DATA prefix may be
13434 used by putop and MMX/SSE operand and may be overriden by the
13435 PREFIX_REPZ/PREFIX_REPNZ fix, we check the PREFIX_DATA prefix
13436 separately. */
3888916d 13437 if (dp->prefix_requirement == PREFIX_OPCODE
285ca992
L
13438 && dp != &bad_opcode
13439 && (((prefixes
13440 & (PREFIX_REPZ | PREFIX_REPNZ)) != 0
13441 && (used_prefixes
13442 & (PREFIX_REPZ | PREFIX_REPNZ)) == 0)
13443 || ((((prefixes
13444 & (PREFIX_REPZ | PREFIX_REPNZ | PREFIX_DATA))
13445 == PREFIX_DATA)
13446 && (used_prefixes & PREFIX_DATA) == 0))))
13447 {
13448 (*info->fprintf_func) (info->stream, "(bad)");
13449 return end_codep - priv.the_buffer;
13450 }
13451
f16cd0d5
L
13452 /* Check maximum code length. */
13453 if ((codep - start_codep) > MAX_CODE_LENGTH)
13454 {
13455 (*info->fprintf_func) (info->stream, "(bad)");
13456 return MAX_CODE_LENGTH;
13457 }
b844680a 13458
ea397f5b 13459 obufp = mnemonicendp;
f16cd0d5 13460 for (i = strlen (obuf) + prefix_length; i < 6; i++)
252b5132
RH
13461 oappend (" ");
13462 oappend (" ");
13463 (*info->fprintf_func) (info->stream, "%s", obuf);
13464
13465 /* The enter and bound instructions are printed with operands in the same
13466 order as the intel book; everything else is printed in reverse order. */
2da11e11 13467 if (intel_syntax || two_source_ops)
252b5132 13468 {
185b1163
L
13469 bfd_vma riprel;
13470
ce518a5f 13471 for (i = 0; i < MAX_OPERANDS; ++i)
6c067bbb 13472 op_txt[i] = op_out[i];
246c51aa 13473
3a8547d2
JB
13474 if (intel_syntax && dp && dp->op[2].rtn == OP_Rounding
13475 && dp->op[3].rtn == OP_E && dp->op[4].rtn == NULL)
13476 {
13477 op_txt[2] = op_out[3];
13478 op_txt[3] = op_out[2];
13479 }
13480
ce518a5f
L
13481 for (i = 0; i < (MAX_OPERANDS >> 1); ++i)
13482 {
6c067bbb
RM
13483 op_ad = op_index[i];
13484 op_index[i] = op_index[MAX_OPERANDS - 1 - i];
13485 op_index[MAX_OPERANDS - 1 - i] = op_ad;
185b1163
L
13486 riprel = op_riprel[i];
13487 op_riprel[i] = op_riprel [MAX_OPERANDS - 1 - i];
13488 op_riprel[MAX_OPERANDS - 1 - i] = riprel;
ce518a5f 13489 }
252b5132
RH
13490 }
13491 else
13492 {
ce518a5f 13493 for (i = 0; i < MAX_OPERANDS; ++i)
6c067bbb 13494 op_txt[MAX_OPERANDS - 1 - i] = op_out[i];
050dfa73
MM
13495 }
13496
ce518a5f
L
13497 needcomma = 0;
13498 for (i = 0; i < MAX_OPERANDS; ++i)
13499 if (*op_txt[i])
13500 {
13501 if (needcomma)
13502 (*info->fprintf_func) (info->stream, ",");
13503 if (op_index[i] != -1 && !op_riprel[i])
13504 (*info->print_address_func) ((bfd_vma) op_address[op_index[i]], info);
13505 else
13506 (*info->fprintf_func) (info->stream, "%s", op_txt[i]);
13507 needcomma = 1;
13508 }
050dfa73 13509
ce518a5f 13510 for (i = 0; i < MAX_OPERANDS; i++)
52b15da3
JH
13511 if (op_index[i] != -1 && op_riprel[i])
13512 {
13513 (*info->fprintf_func) (info->stream, " # ");
4fd7268a 13514 (*info->print_address_func) ((bfd_vma) (start_pc + (codep - start_codep)
52b15da3 13515 + op_address[op_index[i]]), info);
185b1163 13516 break;
52b15da3 13517 }
e396998b 13518 return codep - priv.the_buffer;
252b5132
RH
13519}
13520
6439fc28 13521static const char *float_mem[] = {
252b5132 13522 /* d8 */
7c52e0e8
L
13523 "fadd{s|}",
13524 "fmul{s|}",
13525 "fcom{s|}",
13526 "fcomp{s|}",
13527 "fsub{s|}",
13528 "fsubr{s|}",
13529 "fdiv{s|}",
13530 "fdivr{s|}",
db6eb5be 13531 /* d9 */
7c52e0e8 13532 "fld{s|}",
252b5132 13533 "(bad)",
7c52e0e8
L
13534 "fst{s|}",
13535 "fstp{s|}",
9306ca4a 13536 "fldenvIC",
252b5132 13537 "fldcw",
9306ca4a 13538 "fNstenvIC",
252b5132
RH
13539 "fNstcw",
13540 /* da */
7c52e0e8
L
13541 "fiadd{l|}",
13542 "fimul{l|}",
13543 "ficom{l|}",
13544 "ficomp{l|}",
13545 "fisub{l|}",
13546 "fisubr{l|}",
13547 "fidiv{l|}",
13548 "fidivr{l|}",
252b5132 13549 /* db */
7c52e0e8
L
13550 "fild{l|}",
13551 "fisttp{l|}",
13552 "fist{l|}",
13553 "fistp{l|}",
252b5132 13554 "(bad)",
6439fc28 13555 "fld{t||t|}",
252b5132 13556 "(bad)",
6439fc28 13557 "fstp{t||t|}",
252b5132 13558 /* dc */
7c52e0e8
L
13559 "fadd{l|}",
13560 "fmul{l|}",
13561 "fcom{l|}",
13562 "fcomp{l|}",
13563 "fsub{l|}",
13564 "fsubr{l|}",
13565 "fdiv{l|}",
13566 "fdivr{l|}",
252b5132 13567 /* dd */
7c52e0e8
L
13568 "fld{l|}",
13569 "fisttp{ll|}",
13570 "fst{l||}",
13571 "fstp{l|}",
9306ca4a 13572 "frstorIC",
252b5132 13573 "(bad)",
9306ca4a 13574 "fNsaveIC",
252b5132
RH
13575 "fNstsw",
13576 /* de */
13577 "fiadd",
13578 "fimul",
13579 "ficom",
13580 "ficomp",
13581 "fisub",
13582 "fisubr",
13583 "fidiv",
13584 "fidivr",
13585 /* df */
13586 "fild",
ca164297 13587 "fisttp",
252b5132
RH
13588 "fist",
13589 "fistp",
13590 "fbld",
7c52e0e8 13591 "fild{ll|}",
252b5132 13592 "fbstp",
7c52e0e8 13593 "fistp{ll|}",
1d9f512f
AM
13594};
13595
13596static const unsigned char float_mem_mode[] = {
13597 /* d8 */
13598 d_mode,
13599 d_mode,
13600 d_mode,
13601 d_mode,
13602 d_mode,
13603 d_mode,
13604 d_mode,
13605 d_mode,
13606 /* d9 */
13607 d_mode,
13608 0,
13609 d_mode,
13610 d_mode,
13611 0,
13612 w_mode,
13613 0,
13614 w_mode,
13615 /* da */
13616 d_mode,
13617 d_mode,
13618 d_mode,
13619 d_mode,
13620 d_mode,
13621 d_mode,
13622 d_mode,
13623 d_mode,
13624 /* db */
13625 d_mode,
13626 d_mode,
13627 d_mode,
13628 d_mode,
13629 0,
9306ca4a 13630 t_mode,
1d9f512f 13631 0,
9306ca4a 13632 t_mode,
1d9f512f
AM
13633 /* dc */
13634 q_mode,
13635 q_mode,
13636 q_mode,
13637 q_mode,
13638 q_mode,
13639 q_mode,
13640 q_mode,
13641 q_mode,
13642 /* dd */
13643 q_mode,
13644 q_mode,
13645 q_mode,
13646 q_mode,
13647 0,
13648 0,
13649 0,
13650 w_mode,
13651 /* de */
13652 w_mode,
13653 w_mode,
13654 w_mode,
13655 w_mode,
13656 w_mode,
13657 w_mode,
13658 w_mode,
13659 w_mode,
13660 /* df */
13661 w_mode,
13662 w_mode,
13663 w_mode,
13664 w_mode,
9306ca4a 13665 t_mode,
1d9f512f 13666 q_mode,
9306ca4a 13667 t_mode,
1d9f512f 13668 q_mode
252b5132
RH
13669};
13670
ce518a5f
L
13671#define ST { OP_ST, 0 }
13672#define STi { OP_STi, 0 }
252b5132 13673
48c97fa1
L
13674#define FGRPd9_2 NULL, { { NULL, 1 } }, 0
13675#define FGRPd9_4 NULL, { { NULL, 2 } }, 0
13676#define FGRPd9_5 NULL, { { NULL, 3 } }, 0
13677#define FGRPd9_6 NULL, { { NULL, 4 } }, 0
13678#define FGRPd9_7 NULL, { { NULL, 5 } }, 0
13679#define FGRPda_5 NULL, { { NULL, 6 } }, 0
13680#define FGRPdb_4 NULL, { { NULL, 7 } }, 0
13681#define FGRPde_3 NULL, { { NULL, 8 } }, 0
13682#define FGRPdf_4 NULL, { { NULL, 9 } }, 0
252b5132 13683
2da11e11 13684static const struct dis386 float_reg[][8] = {
252b5132
RH
13685 /* d8 */
13686 {
bf890a93
IT
13687 { "fadd", { ST, STi }, 0 },
13688 { "fmul", { ST, STi }, 0 },
13689 { "fcom", { STi }, 0 },
13690 { "fcomp", { STi }, 0 },
13691 { "fsub", { ST, STi }, 0 },
13692 { "fsubr", { ST, STi }, 0 },
13693 { "fdiv", { ST, STi }, 0 },
13694 { "fdivr", { ST, STi }, 0 },
252b5132
RH
13695 },
13696 /* d9 */
13697 {
bf890a93
IT
13698 { "fld", { STi }, 0 },
13699 { "fxch", { STi }, 0 },
252b5132 13700 { FGRPd9_2 },
592d1631 13701 { Bad_Opcode },
252b5132
RH
13702 { FGRPd9_4 },
13703 { FGRPd9_5 },
13704 { FGRPd9_6 },
13705 { FGRPd9_7 },
13706 },
13707 /* da */
13708 {
bf890a93
IT
13709 { "fcmovb", { ST, STi }, 0 },
13710 { "fcmove", { ST, STi }, 0 },
13711 { "fcmovbe",{ ST, STi }, 0 },
13712 { "fcmovu", { ST, STi }, 0 },
592d1631 13713 { Bad_Opcode },
252b5132 13714 { FGRPda_5 },
592d1631
L
13715 { Bad_Opcode },
13716 { Bad_Opcode },
252b5132
RH
13717 },
13718 /* db */
13719 {
bf890a93
IT
13720 { "fcmovnb",{ ST, STi }, 0 },
13721 { "fcmovne",{ ST, STi }, 0 },
13722 { "fcmovnbe",{ ST, STi }, 0 },
13723 { "fcmovnu",{ ST, STi }, 0 },
252b5132 13724 { FGRPdb_4 },
bf890a93
IT
13725 { "fucomi", { ST, STi }, 0 },
13726 { "fcomi", { ST, STi }, 0 },
592d1631 13727 { Bad_Opcode },
252b5132
RH
13728 },
13729 /* dc */
13730 {
bf890a93
IT
13731 { "fadd", { STi, ST }, 0 },
13732 { "fmul", { STi, ST }, 0 },
592d1631
L
13733 { Bad_Opcode },
13734 { Bad_Opcode },
bf890a93
IT
13735 { "fsub!M", { STi, ST }, 0 },
13736 { "fsubM", { STi, ST }, 0 },
13737 { "fdiv!M", { STi, ST }, 0 },
13738 { "fdivM", { STi, ST }, 0 },
252b5132
RH
13739 },
13740 /* dd */
13741 {
bf890a93 13742 { "ffree", { STi }, 0 },
592d1631 13743 { Bad_Opcode },
bf890a93
IT
13744 { "fst", { STi }, 0 },
13745 { "fstp", { STi }, 0 },
13746 { "fucom", { STi }, 0 },
13747 { "fucomp", { STi }, 0 },
592d1631
L
13748 { Bad_Opcode },
13749 { Bad_Opcode },
252b5132
RH
13750 },
13751 /* de */
13752 {
bf890a93
IT
13753 { "faddp", { STi, ST }, 0 },
13754 { "fmulp", { STi, ST }, 0 },
592d1631 13755 { Bad_Opcode },
252b5132 13756 { FGRPde_3 },
bf890a93
IT
13757 { "fsub!Mp", { STi, ST }, 0 },
13758 { "fsubMp", { STi, ST }, 0 },
13759 { "fdiv!Mp", { STi, ST }, 0 },
13760 { "fdivMp", { STi, ST }, 0 },
252b5132
RH
13761 },
13762 /* df */
13763 {
bf890a93 13764 { "ffreep", { STi }, 0 },
592d1631
L
13765 { Bad_Opcode },
13766 { Bad_Opcode },
13767 { Bad_Opcode },
252b5132 13768 { FGRPdf_4 },
bf890a93
IT
13769 { "fucomip", { ST, STi }, 0 },
13770 { "fcomip", { ST, STi }, 0 },
592d1631 13771 { Bad_Opcode },
252b5132
RH
13772 },
13773};
13774
252b5132 13775static char *fgrps[][8] = {
48c97fa1
L
13776 /* Bad opcode 0 */
13777 {
13778 "(bad)","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
13779 },
13780
13781 /* d9_2 1 */
252b5132
RH
13782 {
13783 "fnop","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
13784 },
13785
48c97fa1 13786 /* d9_4 2 */
252b5132
RH
13787 {
13788 "fchs","fabs","(bad)","(bad)","ftst","fxam","(bad)","(bad)",
13789 },
13790
48c97fa1 13791 /* d9_5 3 */
252b5132
RH
13792 {
13793 "fld1","fldl2t","fldl2e","fldpi","fldlg2","fldln2","fldz","(bad)",
13794 },
13795
48c97fa1 13796 /* d9_6 4 */
252b5132
RH
13797 {
13798 "f2xm1","fyl2x","fptan","fpatan","fxtract","fprem1","fdecstp","fincstp",
13799 },
13800
48c97fa1 13801 /* d9_7 5 */
252b5132
RH
13802 {
13803 "fprem","fyl2xp1","fsqrt","fsincos","frndint","fscale","fsin","fcos",
13804 },
13805
48c97fa1 13806 /* da_5 6 */
252b5132
RH
13807 {
13808 "(bad)","fucompp","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
13809 },
13810
48c97fa1 13811 /* db_4 7 */
252b5132 13812 {
309d3373
JB
13813 "fNeni(8087 only)","fNdisi(8087 only)","fNclex","fNinit",
13814 "fNsetpm(287 only)","frstpm(287 only)","(bad)","(bad)",
252b5132
RH
13815 },
13816
48c97fa1 13817 /* de_3 8 */
252b5132
RH
13818 {
13819 "(bad)","fcompp","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
13820 },
13821
48c97fa1 13822 /* df_4 9 */
252b5132
RH
13823 {
13824 "fNstsw","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
13825 },
13826};
13827
b6169b20
L
13828static void
13829swap_operand (void)
13830{
13831 mnemonicendp[0] = '.';
13832 mnemonicendp[1] = 's';
13833 mnemonicendp += 2;
13834}
13835
b844680a
L
13836static void
13837OP_Skip_MODRM (int bytemode ATTRIBUTE_UNUSED,
13838 int sizeflag ATTRIBUTE_UNUSED)
13839{
13840 /* Skip mod/rm byte. */
13841 MODRM_CHECK;
13842 codep++;
13843}
13844
252b5132 13845static void
26ca5450 13846dofloat (int sizeflag)
252b5132 13847{
2da11e11 13848 const struct dis386 *dp;
252b5132
RH
13849 unsigned char floatop;
13850
13851 floatop = codep[-1];
13852
7967e09e 13853 if (modrm.mod != 3)
252b5132 13854 {
7967e09e 13855 int fp_indx = (floatop - 0xd8) * 8 + modrm.reg;
1d9f512f
AM
13856
13857 putop (float_mem[fp_indx], sizeflag);
ce518a5f 13858 obufp = op_out[0];
6e50d963 13859 op_ad = 2;
1d9f512f 13860 OP_E (float_mem_mode[fp_indx], sizeflag);
252b5132
RH
13861 return;
13862 }
6608db57 13863 /* Skip mod/rm byte. */
4bba6815 13864 MODRM_CHECK;
252b5132
RH
13865 codep++;
13866
7967e09e 13867 dp = &float_reg[floatop - 0xd8][modrm.reg];
252b5132
RH
13868 if (dp->name == NULL)
13869 {
7967e09e 13870 putop (fgrps[dp->op[0].bytemode][modrm.rm], sizeflag);
252b5132 13871
6608db57 13872 /* Instruction fnstsw is only one with strange arg. */
252b5132 13873 if (floatop == 0xdf && codep[-1] == 0xe0)
ce518a5f 13874 strcpy (op_out[0], names16[0]);
252b5132
RH
13875 }
13876 else
13877 {
13878 putop (dp->name, sizeflag);
13879
ce518a5f 13880 obufp = op_out[0];
6e50d963 13881 op_ad = 2;
ce518a5f
L
13882 if (dp->op[0].rtn)
13883 (*dp->op[0].rtn) (dp->op[0].bytemode, sizeflag);
6e50d963 13884
ce518a5f 13885 obufp = op_out[1];
6e50d963 13886 op_ad = 1;
ce518a5f
L
13887 if (dp->op[1].rtn)
13888 (*dp->op[1].rtn) (dp->op[1].bytemode, sizeflag);
252b5132
RH
13889 }
13890}
13891
9ce09ba2
RM
13892/* Like oappend (below), but S is a string starting with '%'.
13893 In Intel syntax, the '%' is elided. */
13894static void
13895oappend_maybe_intel (const char *s)
13896{
13897 oappend (s + intel_syntax);
13898}
13899
252b5132 13900static void
26ca5450 13901OP_ST (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 13902{
9ce09ba2 13903 oappend_maybe_intel ("%st");
252b5132
RH
13904}
13905
252b5132 13906static void
26ca5450 13907OP_STi (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 13908{
7967e09e 13909 sprintf (scratchbuf, "%%st(%d)", modrm.rm);
9ce09ba2 13910 oappend_maybe_intel (scratchbuf);
252b5132
RH
13911}
13912
6608db57 13913/* Capital letters in template are macros. */
6439fc28 13914static int
d3ce72d0 13915putop (const char *in_template, int sizeflag)
252b5132 13916{
2da11e11 13917 const char *p;
9306ca4a 13918 int alt = 0;
9d141669 13919 int cond = 1;
98b528ac
L
13920 unsigned int l = 0, len = 1;
13921 char last[4];
13922
13923#define SAVE_LAST(c) \
13924 if (l < len && l < sizeof (last)) \
13925 last[l++] = c; \
13926 else \
13927 abort ();
252b5132 13928
d3ce72d0 13929 for (p = in_template; *p; p++)
252b5132
RH
13930 {
13931 switch (*p)
13932 {
13933 default:
13934 *obufp++ = *p;
13935 break;
98b528ac
L
13936 case '%':
13937 len++;
13938 break;
9d141669
L
13939 case '!':
13940 cond = 0;
13941 break;
6439fc28 13942 case '{':
6439fc28 13943 if (intel_syntax)
6439fc28
AM
13944 {
13945 while (*++p != '|')
7c52e0e8
L
13946 if (*p == '}' || *p == '\0')
13947 abort ();
6439fc28 13948 }
9306ca4a
JB
13949 /* Fall through. */
13950 case 'I':
13951 alt = 1;
13952 continue;
6439fc28
AM
13953 case '|':
13954 while (*++p != '}')
13955 {
13956 if (*p == '\0')
13957 abort ();
13958 }
13959 break;
13960 case '}':
13961 break;
252b5132 13962 case 'A':
db6eb5be
AM
13963 if (intel_syntax)
13964 break;
7967e09e 13965 if (modrm.mod != 3 || (sizeflag & SUFFIX_ALWAYS))
252b5132
RH
13966 *obufp++ = 'b';
13967 break;
13968 case 'B':
4b06377f
L
13969 if (l == 0 && len == 1)
13970 {
13971case_B:
13972 if (intel_syntax)
13973 break;
13974 if (sizeflag & SUFFIX_ALWAYS)
13975 *obufp++ = 'b';
13976 }
13977 else
13978 {
13979 if (l != 1
13980 || len != 2
13981 || last[0] != 'L')
13982 {
13983 SAVE_LAST (*p);
13984 break;
13985 }
13986
13987 if (address_mode == mode_64bit
13988 && !(prefixes & PREFIX_ADDR))
13989 {
13990 *obufp++ = 'a';
13991 *obufp++ = 'b';
13992 *obufp++ = 's';
13993 }
13994
13995 goto case_B;
13996 }
252b5132 13997 break;
9306ca4a
JB
13998 case 'C':
13999 if (intel_syntax && !alt)
14000 break;
14001 if ((prefixes & PREFIX_DATA) || (sizeflag & SUFFIX_ALWAYS))
14002 {
14003 if (sizeflag & DFLAG)
14004 *obufp++ = intel_syntax ? 'd' : 'l';
14005 else
14006 *obufp++ = intel_syntax ? 'w' : 's';
14007 used_prefixes |= (prefixes & PREFIX_DATA);
14008 }
14009 break;
ed7841b3
JB
14010 case 'D':
14011 if (intel_syntax || !(sizeflag & SUFFIX_ALWAYS))
14012 break;
161a04f6 14013 USED_REX (REX_W);
7967e09e 14014 if (modrm.mod == 3)
ed7841b3 14015 {
161a04f6 14016 if (rex & REX_W)
ed7841b3 14017 *obufp++ = 'q';
ed7841b3 14018 else
f16cd0d5
L
14019 {
14020 if (sizeflag & DFLAG)
14021 *obufp++ = intel_syntax ? 'd' : 'l';
14022 else
14023 *obufp++ = 'w';
14024 used_prefixes |= (prefixes & PREFIX_DATA);
14025 }
ed7841b3
JB
14026 }
14027 else
14028 *obufp++ = 'w';
14029 break;
252b5132 14030 case 'E': /* For jcxz/jecxz */
cb712a9e 14031 if (address_mode == mode_64bit)
c1a64871
JH
14032 {
14033 if (sizeflag & AFLAG)
14034 *obufp++ = 'r';
14035 else
14036 *obufp++ = 'e';
14037 }
14038 else
14039 if (sizeflag & AFLAG)
14040 *obufp++ = 'e';
3ffd33cf
AM
14041 used_prefixes |= (prefixes & PREFIX_ADDR);
14042 break;
14043 case 'F':
db6eb5be
AM
14044 if (intel_syntax)
14045 break;
e396998b 14046 if ((prefixes & PREFIX_ADDR) || (sizeflag & SUFFIX_ALWAYS))
3ffd33cf
AM
14047 {
14048 if (sizeflag & AFLAG)
cb712a9e 14049 *obufp++ = address_mode == mode_64bit ? 'q' : 'l';
3ffd33cf 14050 else
cb712a9e 14051 *obufp++ = address_mode == mode_64bit ? 'l' : 'w';
3ffd33cf
AM
14052 used_prefixes |= (prefixes & PREFIX_ADDR);
14053 }
252b5132 14054 break;
52fd6d94
JB
14055 case 'G':
14056 if (intel_syntax || (obufp[-1] != 's' && !(sizeflag & SUFFIX_ALWAYS)))
14057 break;
161a04f6 14058 if ((rex & REX_W) || (sizeflag & DFLAG))
52fd6d94
JB
14059 *obufp++ = 'l';
14060 else
14061 *obufp++ = 'w';
161a04f6 14062 if (!(rex & REX_W))
52fd6d94
JB
14063 used_prefixes |= (prefixes & PREFIX_DATA);
14064 break;
5dd0794d 14065 case 'H':
db6eb5be
AM
14066 if (intel_syntax)
14067 break;
5dd0794d
AM
14068 if ((prefixes & (PREFIX_CS | PREFIX_DS)) == PREFIX_CS
14069 || (prefixes & (PREFIX_CS | PREFIX_DS)) == PREFIX_DS)
14070 {
14071 used_prefixes |= prefixes & (PREFIX_CS | PREFIX_DS);
14072 *obufp++ = ',';
14073 *obufp++ = 'p';
14074 if (prefixes & PREFIX_DS)
14075 *obufp++ = 't';
14076 else
14077 *obufp++ = 'n';
14078 }
14079 break;
9306ca4a
JB
14080 case 'J':
14081 if (intel_syntax)
14082 break;
14083 *obufp++ = 'l';
14084 break;
42903f7f
L
14085 case 'K':
14086 USED_REX (REX_W);
14087 if (rex & REX_W)
14088 *obufp++ = 'q';
14089 else
14090 *obufp++ = 'd';
14091 break;
6dd5059a 14092 case 'Z':
04d824a4
JB
14093 if (l != 0 || len != 1)
14094 {
14095 if (l != 1 || len != 2 || last[0] != 'X')
14096 {
14097 SAVE_LAST (*p);
14098 break;
14099 }
14100 if (!need_vex || !vex.evex)
14101 abort ();
14102 if (intel_syntax
14103 || ((modrm.mod == 3 || vex.b) && !(sizeflag & SUFFIX_ALWAYS)))
14104 break;
14105 switch (vex.length)
14106 {
14107 case 128:
14108 *obufp++ = 'x';
14109 break;
14110 case 256:
14111 *obufp++ = 'y';
14112 break;
14113 case 512:
14114 *obufp++ = 'z';
14115 break;
14116 default:
14117 abort ();
14118 }
14119 break;
14120 }
6dd5059a
L
14121 if (intel_syntax)
14122 break;
14123 if (address_mode == mode_64bit && (sizeflag & SUFFIX_ALWAYS))
14124 {
14125 *obufp++ = 'q';
14126 break;
14127 }
14128 /* Fall through. */
98b528ac 14129 goto case_L;
252b5132 14130 case 'L':
98b528ac
L
14131 if (l != 0 || len != 1)
14132 {
14133 SAVE_LAST (*p);
14134 break;
14135 }
14136case_L:
db6eb5be
AM
14137 if (intel_syntax)
14138 break;
252b5132
RH
14139 if (sizeflag & SUFFIX_ALWAYS)
14140 *obufp++ = 'l';
252b5132 14141 break;
9d141669
L
14142 case 'M':
14143 if (intel_mnemonic != cond)
14144 *obufp++ = 'r';
14145 break;
252b5132
RH
14146 case 'N':
14147 if ((prefixes & PREFIX_FWAIT) == 0)
14148 *obufp++ = 'n';
7d421014
ILT
14149 else
14150 used_prefixes |= PREFIX_FWAIT;
252b5132 14151 break;
52b15da3 14152 case 'O':
161a04f6
L
14153 USED_REX (REX_W);
14154 if (rex & REX_W)
6439fc28 14155 *obufp++ = 'o';
a35ca55a
JB
14156 else if (intel_syntax && (sizeflag & DFLAG))
14157 *obufp++ = 'q';
52b15da3
JH
14158 else
14159 *obufp++ = 'd';
161a04f6 14160 if (!(rex & REX_W))
a35ca55a 14161 used_prefixes |= (prefixes & PREFIX_DATA);
52b15da3 14162 break;
07f5af7d
L
14163 case '&':
14164 if (!intel_syntax
14165 && address_mode == mode_64bit
14166 && isa64 == intel64)
14167 {
14168 *obufp++ = 'q';
14169 break;
14170 }
14171 /* Fall through. */
6439fc28 14172 case 'T':
d9e3625e
L
14173 if (!intel_syntax
14174 && address_mode == mode_64bit
7bb15c6f 14175 && ((sizeflag & DFLAG) || (rex & REX_W)))
6439fc28
AM
14176 {
14177 *obufp++ = 'q';
14178 break;
14179 }
6608db57 14180 /* Fall through. */
4b4c407a 14181 goto case_P;
252b5132 14182 case 'P':
4b4c407a 14183 if (l == 0 && len == 1)
d9e3625e 14184 {
4b4c407a
L
14185case_P:
14186 if (intel_syntax)
d9e3625e 14187 {
4b4c407a
L
14188 if ((rex & REX_W) == 0
14189 && (prefixes & PREFIX_DATA))
14190 {
14191 if ((sizeflag & DFLAG) == 0)
14192 *obufp++ = 'w';
14193 used_prefixes |= (prefixes & PREFIX_DATA);
14194 }
14195 break;
14196 }
14197 if ((prefixes & PREFIX_DATA)
14198 || (rex & REX_W)
14199 || (sizeflag & SUFFIX_ALWAYS))
14200 {
14201 USED_REX (REX_W);
14202 if (rex & REX_W)
14203 *obufp++ = 'q';
14204 else
14205 {
14206 if (sizeflag & DFLAG)
14207 *obufp++ = 'l';
14208 else
14209 *obufp++ = 'w';
14210 used_prefixes |= (prefixes & PREFIX_DATA);
14211 }
d9e3625e 14212 }
d9e3625e 14213 }
4b4c407a 14214 else
252b5132 14215 {
4b4c407a
L
14216 if (l != 1 || len != 2 || last[0] != 'L')
14217 {
14218 SAVE_LAST (*p);
14219 break;
14220 }
14221
14222 if ((prefixes & PREFIX_DATA)
14223 || (rex & REX_W)
14224 || (sizeflag & SUFFIX_ALWAYS))
52b15da3 14225 {
4b4c407a
L
14226 USED_REX (REX_W);
14227 if (rex & REX_W)
14228 *obufp++ = 'q';
14229 else
14230 {
14231 if (sizeflag & DFLAG)
14232 *obufp++ = intel_syntax ? 'd' : 'l';
14233 else
14234 *obufp++ = 'w';
14235 used_prefixes |= (prefixes & PREFIX_DATA);
14236 }
52b15da3 14237 }
252b5132
RH
14238 }
14239 break;
6439fc28 14240 case 'U':
db6eb5be
AM
14241 if (intel_syntax)
14242 break;
7bb15c6f 14243 if (address_mode == mode_64bit
6c067bbb 14244 && ((sizeflag & DFLAG) || (rex & REX_W)))
6439fc28 14245 {
7967e09e 14246 if (modrm.mod != 3 || (sizeflag & SUFFIX_ALWAYS))
1a114b12 14247 *obufp++ = 'q';
6439fc28
AM
14248 break;
14249 }
6608db57 14250 /* Fall through. */
98b528ac 14251 goto case_Q;
252b5132 14252 case 'Q':
98b528ac 14253 if (l == 0 && len == 1)
252b5132 14254 {
98b528ac
L
14255case_Q:
14256 if (intel_syntax && !alt)
14257 break;
14258 USED_REX (REX_W);
14259 if (modrm.mod != 3 || (sizeflag & SUFFIX_ALWAYS))
52b15da3 14260 {
98b528ac
L
14261 if (rex & REX_W)
14262 *obufp++ = 'q';
52b15da3 14263 else
98b528ac
L
14264 {
14265 if (sizeflag & DFLAG)
14266 *obufp++ = intel_syntax ? 'd' : 'l';
14267 else
14268 *obufp++ = 'w';
f16cd0d5 14269 used_prefixes |= (prefixes & PREFIX_DATA);
98b528ac 14270 }
52b15da3 14271 }
98b528ac
L
14272 }
14273 else
14274 {
14275 if (l != 1 || len != 2 || last[0] != 'L')
14276 {
14277 SAVE_LAST (*p);
14278 break;
14279 }
14280 if (intel_syntax
14281 || (modrm.mod == 3 && !(sizeflag & SUFFIX_ALWAYS)))
14282 break;
14283 if ((rex & REX_W))
14284 {
14285 USED_REX (REX_W);
14286 *obufp++ = 'q';
14287 }
14288 else
14289 *obufp++ = 'l';
252b5132
RH
14290 }
14291 break;
14292 case 'R':
161a04f6
L
14293 USED_REX (REX_W);
14294 if (rex & REX_W)
a35ca55a
JB
14295 *obufp++ = 'q';
14296 else if (sizeflag & DFLAG)
c608c12e 14297 {
a35ca55a 14298 if (intel_syntax)
c608c12e 14299 *obufp++ = 'd';
c608c12e 14300 else
a35ca55a 14301 *obufp++ = 'l';
c608c12e 14302 }
252b5132 14303 else
a35ca55a
JB
14304 *obufp++ = 'w';
14305 if (intel_syntax && !p[1]
161a04f6 14306 && ((rex & REX_W) || (sizeflag & DFLAG)))
a35ca55a 14307 *obufp++ = 'e';
161a04f6 14308 if (!(rex & REX_W))
52b15da3 14309 used_prefixes |= (prefixes & PREFIX_DATA);
252b5132 14310 break;
1a114b12 14311 case 'V':
4b06377f 14312 if (l == 0 && len == 1)
1a114b12 14313 {
4b06377f
L
14314 if (intel_syntax)
14315 break;
7bb15c6f 14316 if (address_mode == mode_64bit
6c067bbb 14317 && ((sizeflag & DFLAG) || (rex & REX_W)))
4b06377f
L
14318 {
14319 if (sizeflag & SUFFIX_ALWAYS)
14320 *obufp++ = 'q';
14321 break;
14322 }
14323 }
14324 else
14325 {
14326 if (l != 1
14327 || len != 2
14328 || last[0] != 'L')
14329 {
14330 SAVE_LAST (*p);
14331 break;
14332 }
14333
14334 if (rex & REX_W)
14335 {
14336 *obufp++ = 'a';
14337 *obufp++ = 'b';
14338 *obufp++ = 's';
14339 }
1a114b12
JB
14340 }
14341 /* Fall through. */
4b06377f 14342 goto case_S;
252b5132 14343 case 'S':
4b06377f 14344 if (l == 0 && len == 1)
252b5132 14345 {
4b06377f
L
14346case_S:
14347 if (intel_syntax)
14348 break;
14349 if (sizeflag & SUFFIX_ALWAYS)
52b15da3 14350 {
4b06377f
L
14351 if (rex & REX_W)
14352 *obufp++ = 'q';
52b15da3 14353 else
4b06377f
L
14354 {
14355 if (sizeflag & DFLAG)
14356 *obufp++ = 'l';
14357 else
14358 *obufp++ = 'w';
14359 used_prefixes |= (prefixes & PREFIX_DATA);
14360 }
14361 }
14362 }
14363 else
14364 {
14365 if (l != 1
14366 || len != 2
14367 || last[0] != 'L')
14368 {
14369 SAVE_LAST (*p);
14370 break;
52b15da3 14371 }
4b06377f
L
14372
14373 if (address_mode == mode_64bit
14374 && !(prefixes & PREFIX_ADDR))
14375 {
14376 *obufp++ = 'a';
14377 *obufp++ = 'b';
14378 *obufp++ = 's';
14379 }
14380
14381 goto case_S;
252b5132 14382 }
252b5132 14383 break;
041bd2e0 14384 case 'X':
c0f3af97
L
14385 if (l != 0 || len != 1)
14386 {
14387 SAVE_LAST (*p);
14388 break;
14389 }
14390 if (need_vex && vex.prefix)
14391 {
14392 if (vex.prefix == DATA_PREFIX_OPCODE)
14393 *obufp++ = 'd';
14394 else
14395 *obufp++ = 's';
14396 }
041bd2e0 14397 else
f16cd0d5
L
14398 {
14399 if (prefixes & PREFIX_DATA)
14400 *obufp++ = 'd';
14401 else
14402 *obufp++ = 's';
14403 used_prefixes |= (prefixes & PREFIX_DATA);
14404 }
041bd2e0 14405 break;
76f227a5 14406 case 'Y':
c0f3af97 14407 if (l == 0 && len == 1)
76f227a5 14408 {
c0f3af97
L
14409 if (intel_syntax || !(sizeflag & SUFFIX_ALWAYS))
14410 break;
14411 if (rex & REX_W)
14412 {
14413 USED_REX (REX_W);
14414 *obufp++ = 'q';
14415 }
14416 break;
14417 }
14418 else
14419 {
14420 if (l != 1 || len != 2 || last[0] != 'X')
14421 {
14422 SAVE_LAST (*p);
14423 break;
14424 }
14425 if (!need_vex)
14426 abort ();
14427 if (intel_syntax
04d824a4 14428 || ((modrm.mod == 3 || vex.b) && !(sizeflag & SUFFIX_ALWAYS)))
c0f3af97
L
14429 break;
14430 switch (vex.length)
14431 {
14432 case 128:
14433 *obufp++ = 'x';
14434 break;
14435 case 256:
14436 *obufp++ = 'y';
14437 break;
04d824a4
JB
14438 case 512:
14439 if (!vex.evex)
c0f3af97 14440 default:
04d824a4 14441 abort ();
c0f3af97 14442 }
76f227a5
JH
14443 }
14444 break;
252b5132 14445 case 'W':
0bfee649 14446 if (l == 0 && len == 1)
a35ca55a 14447 {
0bfee649
L
14448 /* operand size flag for cwtl, cbtw */
14449 USED_REX (REX_W);
14450 if (rex & REX_W)
14451 {
14452 if (intel_syntax)
14453 *obufp++ = 'd';
14454 else
14455 *obufp++ = 'l';
14456 }
14457 else if (sizeflag & DFLAG)
14458 *obufp++ = 'w';
a35ca55a 14459 else
0bfee649
L
14460 *obufp++ = 'b';
14461 if (!(rex & REX_W))
14462 used_prefixes |= (prefixes & PREFIX_DATA);
a35ca55a 14463 }
252b5132 14464 else
0bfee649 14465 {
6c30d220
L
14466 if (l != 1
14467 || len != 2
14468 || (last[0] != 'X'
14469 && last[0] != 'L'))
0bfee649
L
14470 {
14471 SAVE_LAST (*p);
14472 break;
14473 }
14474 if (!need_vex)
14475 abort ();
6c30d220
L
14476 if (last[0] == 'X')
14477 *obufp++ = vex.w ? 'd': 's';
14478 else
14479 *obufp++ = vex.w ? 'q': 'd';
0bfee649 14480 }
252b5132 14481 break;
a72d2af2
L
14482 case '^':
14483 if (intel_syntax)
14484 break;
14485 if ((prefixes & PREFIX_DATA) || (sizeflag & SUFFIX_ALWAYS))
14486 {
14487 if (sizeflag & DFLAG)
14488 *obufp++ = 'l';
14489 else
14490 *obufp++ = 'w';
14491 used_prefixes |= (prefixes & PREFIX_DATA);
14492 }
14493 break;
5db04b09
L
14494 case '@':
14495 if (intel_syntax)
14496 break;
14497 if (address_mode == mode_64bit
14498 && (isa64 == intel64
14499 || ((sizeflag & DFLAG) || (rex & REX_W))))
14500 *obufp++ = 'q';
14501 else if ((prefixes & PREFIX_DATA))
14502 {
14503 if (!(sizeflag & DFLAG))
14504 *obufp++ = 'w';
14505 used_prefixes |= (prefixes & PREFIX_DATA);
14506 }
14507 break;
252b5132 14508 }
9306ca4a 14509 alt = 0;
252b5132
RH
14510 }
14511 *obufp = 0;
ea397f5b 14512 mnemonicendp = obufp;
6439fc28 14513 return 0;
252b5132
RH
14514}
14515
14516static void
26ca5450 14517oappend (const char *s)
252b5132 14518{
ea397f5b 14519 obufp = stpcpy (obufp, s);
252b5132
RH
14520}
14521
14522static void
26ca5450 14523append_seg (void)
252b5132 14524{
285ca992
L
14525 /* Only print the active segment register. */
14526 if (!active_seg_prefix)
14527 return;
14528
14529 used_prefixes |= active_seg_prefix;
14530 switch (active_seg_prefix)
7d421014 14531 {
285ca992 14532 case PREFIX_CS:
9ce09ba2 14533 oappend_maybe_intel ("%cs:");
285ca992
L
14534 break;
14535 case PREFIX_DS:
9ce09ba2 14536 oappend_maybe_intel ("%ds:");
285ca992
L
14537 break;
14538 case PREFIX_SS:
9ce09ba2 14539 oappend_maybe_intel ("%ss:");
285ca992
L
14540 break;
14541 case PREFIX_ES:
9ce09ba2 14542 oappend_maybe_intel ("%es:");
285ca992
L
14543 break;
14544 case PREFIX_FS:
9ce09ba2 14545 oappend_maybe_intel ("%fs:");
285ca992
L
14546 break;
14547 case PREFIX_GS:
9ce09ba2 14548 oappend_maybe_intel ("%gs:");
285ca992
L
14549 break;
14550 default:
14551 break;
7d421014 14552 }
252b5132
RH
14553}
14554
14555static void
26ca5450 14556OP_indirE (int bytemode, int sizeflag)
252b5132
RH
14557{
14558 if (!intel_syntax)
14559 oappend ("*");
14560 OP_E (bytemode, sizeflag);
14561}
14562
52b15da3 14563static void
26ca5450 14564print_operand_value (char *buf, int hex, bfd_vma disp)
52b15da3 14565{
cb712a9e 14566 if (address_mode == mode_64bit)
52b15da3
JH
14567 {
14568 if (hex)
14569 {
14570 char tmp[30];
14571 int i;
14572 buf[0] = '0';
14573 buf[1] = 'x';
14574 sprintf_vma (tmp, disp);
6608db57 14575 for (i = 0; tmp[i] == '0' && tmp[i + 1]; i++);
52b15da3
JH
14576 strcpy (buf + 2, tmp + i);
14577 }
14578 else
14579 {
14580 bfd_signed_vma v = disp;
14581 char tmp[30];
14582 int i;
14583 if (v < 0)
14584 {
14585 *(buf++) = '-';
14586 v = -disp;
6608db57 14587 /* Check for possible overflow on 0x8000000000000000. */
52b15da3
JH
14588 if (v < 0)
14589 {
14590 strcpy (buf, "9223372036854775808");
14591 return;
14592 }
14593 }
14594 if (!v)
14595 {
14596 strcpy (buf, "0");
14597 return;
14598 }
14599
14600 i = 0;
14601 tmp[29] = 0;
14602 while (v)
14603 {
6608db57 14604 tmp[28 - i] = (v % 10) + '0';
52b15da3
JH
14605 v /= 10;
14606 i++;
14607 }
14608 strcpy (buf, tmp + 29 - i);
14609 }
14610 }
14611 else
14612 {
14613 if (hex)
14614 sprintf (buf, "0x%x", (unsigned int) disp);
14615 else
14616 sprintf (buf, "%d", (int) disp);
14617 }
14618}
14619
5d669648
L
14620/* Put DISP in BUF as signed hex number. */
14621
14622static void
14623print_displacement (char *buf, bfd_vma disp)
14624{
14625 bfd_signed_vma val = disp;
14626 char tmp[30];
14627 int i, j = 0;
14628
14629 if (val < 0)
14630 {
14631 buf[j++] = '-';
14632 val = -disp;
14633
14634 /* Check for possible overflow. */
14635 if (val < 0)
14636 {
14637 switch (address_mode)
14638 {
14639 case mode_64bit:
14640 strcpy (buf + j, "0x8000000000000000");
14641 break;
14642 case mode_32bit:
14643 strcpy (buf + j, "0x80000000");
14644 break;
14645 case mode_16bit:
14646 strcpy (buf + j, "0x8000");
14647 break;
14648 }
14649 return;
14650 }
14651 }
14652
14653 buf[j++] = '0';
14654 buf[j++] = 'x';
14655
0af1713e 14656 sprintf_vma (tmp, (bfd_vma) val);
5d669648
L
14657 for (i = 0; tmp[i] == '0'; i++)
14658 continue;
14659 if (tmp[i] == '\0')
14660 i--;
14661 strcpy (buf + j, tmp + i);
14662}
14663
3f31e633
JB
14664static void
14665intel_operand_size (int bytemode, int sizeflag)
14666{
43234a1e
L
14667 if (vex.evex
14668 && vex.b
14669 && (bytemode == x_mode
14670 || bytemode == evex_half_bcst_xmmq_mode))
14671 {
14672 if (vex.w)
14673 oappend ("QWORD PTR ");
14674 else
14675 oappend ("DWORD PTR ");
14676 return;
14677 }
3f31e633
JB
14678 switch (bytemode)
14679 {
14680 case b_mode:
b6169b20 14681 case b_swap_mode:
42903f7f 14682 case dqb_mode:
1ba585e8 14683 case db_mode:
3f31e633
JB
14684 oappend ("BYTE PTR ");
14685 break;
14686 case w_mode:
1ba585e8 14687 case dw_mode:
3f31e633
JB
14688 case dqw_mode:
14689 oappend ("WORD PTR ");
14690 break;
07f5af7d
L
14691 case indir_v_mode:
14692 if (address_mode == mode_64bit && isa64 == intel64)
14693 {
14694 oappend ("QWORD PTR ");
14695 break;
14696 }
1a0670f3 14697 /* Fall through. */
1a114b12 14698 case stack_v_mode:
7bb15c6f 14699 if (address_mode == mode_64bit && ((sizeflag & DFLAG) || (rex & REX_W)))
3f31e633
JB
14700 {
14701 oappend ("QWORD PTR ");
3f31e633
JB
14702 break;
14703 }
1a0670f3 14704 /* Fall through. */
3f31e633 14705 case v_mode:
b6169b20 14706 case v_swap_mode:
3f31e633 14707 case dq_mode:
161a04f6
L
14708 USED_REX (REX_W);
14709 if (rex & REX_W)
3f31e633 14710 oappend ("QWORD PTR ");
3f31e633 14711 else
f16cd0d5
L
14712 {
14713 if ((sizeflag & DFLAG) || bytemode == dq_mode)
14714 oappend ("DWORD PTR ");
14715 else
14716 oappend ("WORD PTR ");
14717 used_prefixes |= (prefixes & PREFIX_DATA);
14718 }
3f31e633 14719 break;
52fd6d94 14720 case z_mode:
161a04f6 14721 if ((rex & REX_W) || (sizeflag & DFLAG))
52fd6d94
JB
14722 *obufp++ = 'D';
14723 oappend ("WORD PTR ");
161a04f6 14724 if (!(rex & REX_W))
52fd6d94
JB
14725 used_prefixes |= (prefixes & PREFIX_DATA);
14726 break;
34b772a6
JB
14727 case a_mode:
14728 if (sizeflag & DFLAG)
14729 oappend ("QWORD PTR ");
14730 else
14731 oappend ("DWORD PTR ");
14732 used_prefixes |= (prefixes & PREFIX_DATA);
14733 break;
3f31e633 14734 case d_mode:
539f890d
L
14735 case d_scalar_mode:
14736 case d_scalar_swap_mode:
fa99fab2 14737 case d_swap_mode:
42903f7f 14738 case dqd_mode:
3f31e633
JB
14739 oappend ("DWORD PTR ");
14740 break;
14741 case q_mode:
539f890d
L
14742 case q_scalar_mode:
14743 case q_scalar_swap_mode:
b6169b20 14744 case q_swap_mode:
3f31e633
JB
14745 oappend ("QWORD PTR ");
14746 break;
14747 case m_mode:
cb712a9e 14748 if (address_mode == mode_64bit)
3f31e633
JB
14749 oappend ("QWORD PTR ");
14750 else
14751 oappend ("DWORD PTR ");
14752 break;
14753 case f_mode:
14754 if (sizeflag & DFLAG)
14755 oappend ("FWORD PTR ");
14756 else
14757 oappend ("DWORD PTR ");
14758 used_prefixes |= (prefixes & PREFIX_DATA);
14759 break;
14760 case t_mode:
14761 oappend ("TBYTE PTR ");
14762 break;
14763 case x_mode:
b6169b20 14764 case x_swap_mode:
43234a1e
L
14765 case evex_x_gscat_mode:
14766 case evex_x_nobcst_mode:
53467f57
IT
14767 case b_scalar_mode:
14768 case w_scalar_mode:
c0f3af97
L
14769 if (need_vex)
14770 {
14771 switch (vex.length)
14772 {
14773 case 128:
14774 oappend ("XMMWORD PTR ");
14775 break;
14776 case 256:
14777 oappend ("YMMWORD PTR ");
14778 break;
43234a1e
L
14779 case 512:
14780 oappend ("ZMMWORD PTR ");
14781 break;
c0f3af97
L
14782 default:
14783 abort ();
14784 }
14785 }
14786 else
14787 oappend ("XMMWORD PTR ");
14788 break;
14789 case xmm_mode:
3f31e633
JB
14790 oappend ("XMMWORD PTR ");
14791 break;
43234a1e
L
14792 case ymm_mode:
14793 oappend ("YMMWORD PTR ");
14794 break;
c0f3af97 14795 case xmmq_mode:
43234a1e 14796 case evex_half_bcst_xmmq_mode:
c0f3af97
L
14797 if (!need_vex)
14798 abort ();
14799
14800 switch (vex.length)
14801 {
14802 case 128:
14803 oappend ("QWORD PTR ");
14804 break;
14805 case 256:
14806 oappend ("XMMWORD PTR ");
14807 break;
43234a1e
L
14808 case 512:
14809 oappend ("YMMWORD PTR ");
14810 break;
c0f3af97
L
14811 default:
14812 abort ();
14813 }
14814 break;
6c30d220
L
14815 case xmm_mb_mode:
14816 if (!need_vex)
14817 abort ();
14818
14819 switch (vex.length)
14820 {
14821 case 128:
14822 case 256:
43234a1e 14823 case 512:
6c30d220
L
14824 oappend ("BYTE PTR ");
14825 break;
14826 default:
14827 abort ();
14828 }
14829 break;
14830 case xmm_mw_mode:
14831 if (!need_vex)
14832 abort ();
14833
14834 switch (vex.length)
14835 {
14836 case 128:
14837 case 256:
43234a1e 14838 case 512:
6c30d220
L
14839 oappend ("WORD PTR ");
14840 break;
14841 default:
14842 abort ();
14843 }
14844 break;
14845 case xmm_md_mode:
14846 if (!need_vex)
14847 abort ();
14848
14849 switch (vex.length)
14850 {
14851 case 128:
14852 case 256:
43234a1e 14853 case 512:
6c30d220
L
14854 oappend ("DWORD PTR ");
14855 break;
14856 default:
14857 abort ();
14858 }
14859 break;
14860 case xmm_mq_mode:
14861 if (!need_vex)
14862 abort ();
14863
14864 switch (vex.length)
14865 {
14866 case 128:
14867 case 256:
43234a1e 14868 case 512:
6c30d220
L
14869 oappend ("QWORD PTR ");
14870 break;
14871 default:
14872 abort ();
14873 }
14874 break;
14875 case xmmdw_mode:
14876 if (!need_vex)
14877 abort ();
14878
14879 switch (vex.length)
14880 {
14881 case 128:
14882 oappend ("WORD PTR ");
14883 break;
14884 case 256:
14885 oappend ("DWORD PTR ");
14886 break;
43234a1e
L
14887 case 512:
14888 oappend ("QWORD PTR ");
14889 break;
6c30d220
L
14890 default:
14891 abort ();
14892 }
14893 break;
14894 case xmmqd_mode:
14895 if (!need_vex)
14896 abort ();
14897
14898 switch (vex.length)
14899 {
14900 case 128:
14901 oappend ("DWORD PTR ");
14902 break;
14903 case 256:
14904 oappend ("QWORD PTR ");
14905 break;
43234a1e
L
14906 case 512:
14907 oappend ("XMMWORD PTR ");
14908 break;
6c30d220
L
14909 default:
14910 abort ();
14911 }
14912 break;
c0f3af97
L
14913 case ymmq_mode:
14914 if (!need_vex)
14915 abort ();
14916
14917 switch (vex.length)
14918 {
14919 case 128:
14920 oappend ("QWORD PTR ");
14921 break;
14922 case 256:
14923 oappend ("YMMWORD PTR ");
14924 break;
43234a1e
L
14925 case 512:
14926 oappend ("ZMMWORD PTR ");
14927 break;
c0f3af97
L
14928 default:
14929 abort ();
14930 }
14931 break;
6c30d220
L
14932 case ymmxmm_mode:
14933 if (!need_vex)
14934 abort ();
14935
14936 switch (vex.length)
14937 {
14938 case 128:
14939 case 256:
14940 oappend ("XMMWORD PTR ");
14941 break;
14942 default:
14943 abort ();
14944 }
14945 break;
fb9c77c7
L
14946 case o_mode:
14947 oappend ("OWORD PTR ");
14948 break;
43234a1e 14949 case xmm_mdq_mode:
0bfee649 14950 case vex_w_dq_mode:
1c480963 14951 case vex_scalar_w_dq_mode:
0bfee649
L
14952 if (!need_vex)
14953 abort ();
14954
14955 if (vex.w)
14956 oappend ("QWORD PTR ");
14957 else
14958 oappend ("DWORD PTR ");
14959 break;
43234a1e
L
14960 case vex_vsib_d_w_dq_mode:
14961 case vex_vsib_q_w_dq_mode:
14962 if (!need_vex)
14963 abort ();
14964
14965 if (!vex.evex)
14966 {
14967 if (vex.w)
14968 oappend ("QWORD PTR ");
14969 else
14970 oappend ("DWORD PTR ");
14971 }
14972 else
14973 {
b28d1bda
IT
14974 switch (vex.length)
14975 {
14976 case 128:
14977 oappend ("XMMWORD PTR ");
14978 break;
14979 case 256:
14980 oappend ("YMMWORD PTR ");
14981 break;
14982 case 512:
14983 oappend ("ZMMWORD PTR ");
14984 break;
14985 default:
14986 abort ();
14987 }
43234a1e
L
14988 }
14989 break;
5fc35d96
IT
14990 case vex_vsib_q_w_d_mode:
14991 case vex_vsib_d_w_d_mode:
b28d1bda 14992 if (!need_vex || !vex.evex)
5fc35d96
IT
14993 abort ();
14994
b28d1bda
IT
14995 switch (vex.length)
14996 {
14997 case 128:
14998 oappend ("QWORD PTR ");
14999 break;
15000 case 256:
15001 oappend ("XMMWORD PTR ");
15002 break;
15003 case 512:
15004 oappend ("YMMWORD PTR ");
15005 break;
15006 default:
15007 abort ();
15008 }
5fc35d96
IT
15009
15010 break;
1ba585e8
IT
15011 case mask_bd_mode:
15012 if (!need_vex || vex.length != 128)
15013 abort ();
15014 if (vex.w)
15015 oappend ("DWORD PTR ");
15016 else
15017 oappend ("BYTE PTR ");
15018 break;
43234a1e
L
15019 case mask_mode:
15020 if (!need_vex)
15021 abort ();
1ba585e8
IT
15022 if (vex.w)
15023 oappend ("QWORD PTR ");
15024 else
15025 oappend ("WORD PTR ");
43234a1e 15026 break;
6c75cc62 15027 case v_bnd_mode:
3f31e633
JB
15028 default:
15029 break;
15030 }
15031}
15032
252b5132 15033static void
c0f3af97 15034OP_E_register (int bytemode, int sizeflag)
252b5132 15035{
c0f3af97
L
15036 int reg = modrm.rm;
15037 const char **names;
252b5132 15038
c0f3af97
L
15039 USED_REX (REX_B);
15040 if ((rex & REX_B))
15041 reg += 8;
252b5132 15042
b6169b20 15043 if ((sizeflag & SUFFIX_ALWAYS)
1ba585e8 15044 && (bytemode == b_swap_mode
60227d64 15045 || bytemode == v_swap_mode))
b6169b20
L
15046 swap_operand ();
15047
c0f3af97 15048 switch (bytemode)
252b5132 15049 {
c0f3af97 15050 case b_mode:
b6169b20 15051 case b_swap_mode:
c0f3af97
L
15052 USED_REX (0);
15053 if (rex)
15054 names = names8rex;
15055 else
15056 names = names8;
15057 break;
15058 case w_mode:
15059 names = names16;
15060 break;
15061 case d_mode:
1ba585e8
IT
15062 case dw_mode:
15063 case db_mode:
c0f3af97
L
15064 names = names32;
15065 break;
15066 case q_mode:
15067 names = names64;
15068 break;
15069 case m_mode:
6c75cc62 15070 case v_bnd_mode:
c0f3af97
L
15071 names = address_mode == mode_64bit ? names64 : names32;
15072 break;
7e8b059b 15073 case bnd_mode:
0d96e4df
L
15074 if (reg > 0x3)
15075 {
15076 oappend ("(bad)");
15077 return;
15078 }
7e8b059b
L
15079 names = names_bnd;
15080 break;
07f5af7d
L
15081 case indir_v_mode:
15082 if (address_mode == mode_64bit && isa64 == intel64)
15083 {
15084 names = names64;
15085 break;
15086 }
1a0670f3 15087 /* Fall through. */
c0f3af97 15088 case stack_v_mode:
7bb15c6f 15089 if (address_mode == mode_64bit && ((sizeflag & DFLAG) || (rex & REX_W)))
252b5132 15090 {
c0f3af97 15091 names = names64;
252b5132 15092 break;
252b5132 15093 }
c0f3af97 15094 bytemode = v_mode;
1a0670f3 15095 /* Fall through. */
c0f3af97 15096 case v_mode:
b6169b20 15097 case v_swap_mode:
c0f3af97
L
15098 case dq_mode:
15099 case dqb_mode:
15100 case dqd_mode:
15101 case dqw_mode:
15102 USED_REX (REX_W);
15103 if (rex & REX_W)
15104 names = names64;
c0f3af97 15105 else
f16cd0d5 15106 {
7bb15c6f 15107 if ((sizeflag & DFLAG)
f16cd0d5
L
15108 || (bytemode != v_mode
15109 && bytemode != v_swap_mode))
15110 names = names32;
15111 else
15112 names = names16;
15113 used_prefixes |= (prefixes & PREFIX_DATA);
15114 }
c0f3af97 15115 break;
1ba585e8 15116 case mask_bd_mode:
43234a1e 15117 case mask_mode:
9889cbb1
L
15118 if (reg > 0x7)
15119 {
15120 oappend ("(bad)");
15121 return;
15122 }
43234a1e
L
15123 names = names_mask;
15124 break;
c0f3af97
L
15125 case 0:
15126 return;
15127 default:
15128 oappend (INTERNAL_DISASSEMBLER_ERROR);
252b5132
RH
15129 return;
15130 }
c0f3af97
L
15131 oappend (names[reg]);
15132}
15133
15134static void
c1e679ec 15135OP_E_memory (int bytemode, int sizeflag)
c0f3af97
L
15136{
15137 bfd_vma disp = 0;
15138 int add = (rex & REX_B) ? 8 : 0;
15139 int riprel = 0;
43234a1e
L
15140 int shift;
15141
15142 if (vex.evex)
15143 {
15144 /* In EVEX, if operand doesn't allow broadcast, vex.b should be 0. */
15145 if (vex.b
15146 && bytemode != x_mode
90a915bf 15147 && bytemode != xmmq_mode
43234a1e
L
15148 && bytemode != evex_half_bcst_xmmq_mode)
15149 {
15150 BadOp ();
15151 return;
15152 }
15153 switch (bytemode)
15154 {
1ba585e8
IT
15155 case dqw_mode:
15156 case dw_mode:
1ba585e8
IT
15157 shift = 1;
15158 break;
15159 case dqb_mode:
15160 case db_mode:
15161 shift = 0;
15162 break;
43234a1e 15163 case vex_vsib_d_w_dq_mode:
5fc35d96 15164 case vex_vsib_d_w_d_mode:
eaa9d1ad 15165 case vex_vsib_q_w_dq_mode:
5fc35d96 15166 case vex_vsib_q_w_d_mode:
43234a1e
L
15167 case evex_x_gscat_mode:
15168 case xmm_mdq_mode:
15169 shift = vex.w ? 3 : 2;
15170 break;
43234a1e
L
15171 case x_mode:
15172 case evex_half_bcst_xmmq_mode:
90a915bf 15173 case xmmq_mode:
43234a1e
L
15174 if (vex.b)
15175 {
15176 shift = vex.w ? 3 : 2;
15177 break;
15178 }
1a0670f3 15179 /* Fall through. */
43234a1e
L
15180 case xmmqd_mode:
15181 case xmmdw_mode:
43234a1e
L
15182 case ymmq_mode:
15183 case evex_x_nobcst_mode:
15184 case x_swap_mode:
15185 switch (vex.length)
15186 {
15187 case 128:
15188 shift = 4;
15189 break;
15190 case 256:
15191 shift = 5;
15192 break;
15193 case 512:
15194 shift = 6;
15195 break;
15196 default:
15197 abort ();
15198 }
15199 break;
15200 case ymm_mode:
15201 shift = 5;
15202 break;
15203 case xmm_mode:
15204 shift = 4;
15205 break;
15206 case xmm_mq_mode:
15207 case q_mode:
15208 case q_scalar_mode:
15209 case q_swap_mode:
15210 case q_scalar_swap_mode:
15211 shift = 3;
15212 break;
15213 case dqd_mode:
15214 case xmm_md_mode:
15215 case d_mode:
15216 case d_scalar_mode:
15217 case d_swap_mode:
15218 case d_scalar_swap_mode:
15219 shift = 2;
15220 break;
53467f57 15221 case w_scalar_mode:
43234a1e
L
15222 case xmm_mw_mode:
15223 shift = 1;
15224 break;
53467f57 15225 case b_scalar_mode:
43234a1e
L
15226 case xmm_mb_mode:
15227 shift = 0;
15228 break;
15229 default:
15230 abort ();
15231 }
15232 /* Make necessary corrections to shift for modes that need it.
15233 For these modes we currently have shift 4, 5 or 6 depending on
15234 vex.length (it corresponds to xmmword, ymmword or zmmword
15235 operand). We might want to make it 3, 4 or 5 (e.g. for
15236 xmmq_mode). In case of broadcast enabled the corrections
15237 aren't needed, as element size is always 32 or 64 bits. */
90a915bf
IT
15238 if (!vex.b
15239 && (bytemode == xmmq_mode
15240 || bytemode == evex_half_bcst_xmmq_mode))
43234a1e
L
15241 shift -= 1;
15242 else if (bytemode == xmmqd_mode)
15243 shift -= 2;
15244 else if (bytemode == xmmdw_mode)
15245 shift -= 3;
b28d1bda
IT
15246 else if (bytemode == ymmq_mode && vex.length == 128)
15247 shift -= 1;
43234a1e
L
15248 }
15249 else
15250 shift = 0;
252b5132 15251
c0f3af97 15252 USED_REX (REX_B);
3f31e633
JB
15253 if (intel_syntax)
15254 intel_operand_size (bytemode, sizeflag);
252b5132
RH
15255 append_seg ();
15256
5d669648 15257 if ((sizeflag & AFLAG) || address_mode == mode_64bit)
252b5132 15258 {
5d669648
L
15259 /* 32/64 bit address mode */
15260 int havedisp;
252b5132
RH
15261 int havesib;
15262 int havebase;
0f7da397 15263 int haveindex;
20afcfb7 15264 int needindex;
82c18208 15265 int base, rbase;
91d6fa6a 15266 int vindex = 0;
252b5132 15267 int scale = 0;
7e8b059b
L
15268 int addr32flag = !((sizeflag & AFLAG)
15269 || bytemode == v_bnd_mode
15270 || bytemode == bnd_mode);
6c30d220
L
15271 const char **indexes64 = names64;
15272 const char **indexes32 = names32;
252b5132
RH
15273
15274 havesib = 0;
15275 havebase = 1;
0f7da397 15276 haveindex = 0;
7967e09e 15277 base = modrm.rm;
252b5132
RH
15278
15279 if (base == 4)
15280 {
15281 havesib = 1;
dfc8cf43 15282 vindex = sib.index;
161a04f6
L
15283 USED_REX (REX_X);
15284 if (rex & REX_X)
91d6fa6a 15285 vindex += 8;
6c30d220
L
15286 switch (bytemode)
15287 {
15288 case vex_vsib_d_w_dq_mode:
5fc35d96 15289 case vex_vsib_d_w_d_mode:
6c30d220 15290 case vex_vsib_q_w_dq_mode:
5fc35d96 15291 case vex_vsib_q_w_d_mode:
6c30d220
L
15292 if (!need_vex)
15293 abort ();
43234a1e
L
15294 if (vex.evex)
15295 {
15296 if (!vex.v)
15297 vindex += 16;
15298 }
6c30d220
L
15299
15300 haveindex = 1;
15301 switch (vex.length)
15302 {
15303 case 128:
7bb15c6f 15304 indexes64 = indexes32 = names_xmm;
6c30d220
L
15305 break;
15306 case 256:
5fc35d96
IT
15307 if (!vex.w
15308 || bytemode == vex_vsib_q_w_dq_mode
15309 || bytemode == vex_vsib_q_w_d_mode)
7bb15c6f 15310 indexes64 = indexes32 = names_ymm;
6c30d220 15311 else
7bb15c6f 15312 indexes64 = indexes32 = names_xmm;
6c30d220 15313 break;
43234a1e 15314 case 512:
5fc35d96
IT
15315 if (!vex.w
15316 || bytemode == vex_vsib_q_w_dq_mode
15317 || bytemode == vex_vsib_q_w_d_mode)
43234a1e
L
15318 indexes64 = indexes32 = names_zmm;
15319 else
15320 indexes64 = indexes32 = names_ymm;
15321 break;
6c30d220
L
15322 default:
15323 abort ();
15324 }
15325 break;
15326 default:
15327 haveindex = vindex != 4;
15328 break;
15329 }
15330 scale = sib.scale;
15331 base = sib.base;
252b5132
RH
15332 codep++;
15333 }
82c18208 15334 rbase = base + add;
252b5132 15335
7967e09e 15336 switch (modrm.mod)
252b5132
RH
15337 {
15338 case 0:
82c18208 15339 if (base == 5)
252b5132
RH
15340 {
15341 havebase = 0;
cb712a9e 15342 if (address_mode == mode_64bit && !havesib)
52b15da3
JH
15343 riprel = 1;
15344 disp = get32s ();
252b5132
RH
15345 }
15346 break;
15347 case 1:
15348 FETCH_DATA (the_info, codep + 1);
15349 disp = *codep++;
15350 if ((disp & 0x80) != 0)
15351 disp -= 0x100;
43234a1e
L
15352 if (vex.evex && shift > 0)
15353 disp <<= shift;
252b5132
RH
15354 break;
15355 case 2:
52b15da3 15356 disp = get32s ();
252b5132
RH
15357 break;
15358 }
15359
20afcfb7
L
15360 /* In 32bit mode, we need index register to tell [offset] from
15361 [eiz*1 + offset]. */
15362 needindex = (havesib
15363 && !havebase
15364 && !haveindex
15365 && address_mode == mode_32bit);
15366 havedisp = (havebase
15367 || needindex
15368 || (havesib && (haveindex || scale != 0)));
5d669648 15369
252b5132 15370 if (!intel_syntax)
82c18208 15371 if (modrm.mod != 0 || base == 5)
db6eb5be 15372 {
5d669648
L
15373 if (havedisp || riprel)
15374 print_displacement (scratchbuf, disp);
15375 else
15376 print_operand_value (scratchbuf, 1, disp);
db6eb5be 15377 oappend (scratchbuf);
52b15da3
JH
15378 if (riprel)
15379 {
15380 set_op (disp, 1);
28596323 15381 oappend (!addr32flag ? "(%rip)" : "(%eip)");
52b15da3 15382 }
db6eb5be 15383 }
2da11e11 15384
7e8b059b
L
15385 if ((havebase || haveindex || riprel)
15386 && (bytemode != v_bnd_mode)
15387 && (bytemode != bnd_mode))
87767711
JB
15388 used_prefixes |= PREFIX_ADDR;
15389
5d669648 15390 if (havedisp || (intel_syntax && riprel))
252b5132 15391 {
252b5132 15392 *obufp++ = open_char;
52b15da3 15393 if (intel_syntax && riprel)
185b1163
L
15394 {
15395 set_op (disp, 1);
28596323 15396 oappend (!addr32flag ? "rip" : "eip");
185b1163 15397 }
db6eb5be 15398 *obufp = '\0';
252b5132 15399 if (havebase)
7e8b059b 15400 oappend (address_mode == mode_64bit && !addr32flag
82c18208 15401 ? names64[rbase] : names32[rbase]);
252b5132
RH
15402 if (havesib)
15403 {
db51cc60
L
15404 /* ESP/RSP won't allow index. If base isn't ESP/RSP,
15405 print index to tell base + index from base. */
15406 if (scale != 0
20afcfb7 15407 || needindex
db51cc60
L
15408 || haveindex
15409 || (havebase && base != ESP_REG_NUM))
252b5132 15410 {
9306ca4a 15411 if (!intel_syntax || havebase)
db6eb5be 15412 {
9306ca4a
JB
15413 *obufp++ = separator_char;
15414 *obufp = '\0';
db6eb5be 15415 }
db51cc60 15416 if (haveindex)
7e8b059b 15417 oappend (address_mode == mode_64bit && !addr32flag
6c30d220 15418 ? indexes64[vindex] : indexes32[vindex]);
db51cc60 15419 else
7e8b059b 15420 oappend (address_mode == mode_64bit && !addr32flag
db51cc60
L
15421 ? index64 : index32);
15422
db6eb5be
AM
15423 *obufp++ = scale_char;
15424 *obufp = '\0';
15425 sprintf (scratchbuf, "%d", 1 << scale);
15426 oappend (scratchbuf);
15427 }
252b5132 15428 }
185b1163 15429 if (intel_syntax
82c18208 15430 && (disp || modrm.mod != 0 || base == 5))
3d456fa1 15431 {
db51cc60 15432 if (!havedisp || (bfd_signed_vma) disp >= 0)
3d456fa1
JB
15433 {
15434 *obufp++ = '+';
15435 *obufp = '\0';
15436 }
05203043 15437 else if (modrm.mod != 1 && disp != -disp)
3d456fa1
JB
15438 {
15439 *obufp++ = '-';
15440 *obufp = '\0';
15441 disp = - (bfd_signed_vma) disp;
15442 }
15443
db51cc60
L
15444 if (havedisp)
15445 print_displacement (scratchbuf, disp);
15446 else
15447 print_operand_value (scratchbuf, 1, disp);
3d456fa1
JB
15448 oappend (scratchbuf);
15449 }
252b5132
RH
15450
15451 *obufp++ = close_char;
db6eb5be 15452 *obufp = '\0';
252b5132
RH
15453 }
15454 else if (intel_syntax)
db6eb5be 15455 {
82c18208 15456 if (modrm.mod != 0 || base == 5)
db6eb5be 15457 {
285ca992 15458 if (!active_seg_prefix)
252b5132 15459 {
d708bcba 15460 oappend (names_seg[ds_reg - es_reg]);
252b5132
RH
15461 oappend (":");
15462 }
52b15da3 15463 print_operand_value (scratchbuf, 1, disp);
db6eb5be
AM
15464 oappend (scratchbuf);
15465 }
15466 }
252b5132
RH
15467 }
15468 else
f16cd0d5
L
15469 {
15470 /* 16 bit address mode */
15471 used_prefixes |= prefixes & PREFIX_ADDR;
7967e09e 15472 switch (modrm.mod)
252b5132
RH
15473 {
15474 case 0:
7967e09e 15475 if (modrm.rm == 6)
252b5132
RH
15476 {
15477 disp = get16 ();
15478 if ((disp & 0x8000) != 0)
15479 disp -= 0x10000;
15480 }
15481 break;
15482 case 1:
15483 FETCH_DATA (the_info, codep + 1);
15484 disp = *codep++;
15485 if ((disp & 0x80) != 0)
15486 disp -= 0x100;
15487 break;
15488 case 2:
15489 disp = get16 ();
15490 if ((disp & 0x8000) != 0)
15491 disp -= 0x10000;
15492 break;
15493 }
15494
15495 if (!intel_syntax)
7967e09e 15496 if (modrm.mod != 0 || modrm.rm == 6)
db6eb5be 15497 {
5d669648 15498 print_displacement (scratchbuf, disp);
db6eb5be
AM
15499 oappend (scratchbuf);
15500 }
252b5132 15501
7967e09e 15502 if (modrm.mod != 0 || modrm.rm != 6)
252b5132
RH
15503 {
15504 *obufp++ = open_char;
db6eb5be 15505 *obufp = '\0';
7967e09e 15506 oappend (index16[modrm.rm]);
5d669648
L
15507 if (intel_syntax
15508 && (disp || modrm.mod != 0 || modrm.rm == 6))
3d456fa1 15509 {
5d669648 15510 if ((bfd_signed_vma) disp >= 0)
3d456fa1
JB
15511 {
15512 *obufp++ = '+';
15513 *obufp = '\0';
15514 }
7967e09e 15515 else if (modrm.mod != 1)
3d456fa1
JB
15516 {
15517 *obufp++ = '-';
15518 *obufp = '\0';
15519 disp = - (bfd_signed_vma) disp;
15520 }
15521
5d669648 15522 print_displacement (scratchbuf, disp);
3d456fa1
JB
15523 oappend (scratchbuf);
15524 }
15525
db6eb5be
AM
15526 *obufp++ = close_char;
15527 *obufp = '\0';
252b5132 15528 }
3d456fa1
JB
15529 else if (intel_syntax)
15530 {
285ca992 15531 if (!active_seg_prefix)
3d456fa1
JB
15532 {
15533 oappend (names_seg[ds_reg - es_reg]);
15534 oappend (":");
15535 }
15536 print_operand_value (scratchbuf, 1, disp & 0xffff);
15537 oappend (scratchbuf);
15538 }
252b5132 15539 }
43234a1e
L
15540 if (vex.evex && vex.b
15541 && (bytemode == x_mode
90a915bf 15542 || bytemode == xmmq_mode
43234a1e
L
15543 || bytemode == evex_half_bcst_xmmq_mode))
15544 {
90a915bf
IT
15545 if (vex.w
15546 || bytemode == xmmq_mode
15547 || bytemode == evex_half_bcst_xmmq_mode)
b28d1bda
IT
15548 {
15549 switch (vex.length)
15550 {
15551 case 128:
15552 oappend ("{1to2}");
15553 break;
15554 case 256:
15555 oappend ("{1to4}");
15556 break;
15557 case 512:
15558 oappend ("{1to8}");
15559 break;
15560 default:
15561 abort ();
15562 }
15563 }
43234a1e 15564 else
b28d1bda
IT
15565 {
15566 switch (vex.length)
15567 {
15568 case 128:
15569 oappend ("{1to4}");
15570 break;
15571 case 256:
15572 oappend ("{1to8}");
15573 break;
15574 case 512:
15575 oappend ("{1to16}");
15576 break;
15577 default:
15578 abort ();
15579 }
15580 }
43234a1e 15581 }
252b5132
RH
15582}
15583
c0f3af97 15584static void
8b3f93e7 15585OP_E (int bytemode, int sizeflag)
c0f3af97
L
15586{
15587 /* Skip mod/rm byte. */
15588 MODRM_CHECK;
15589 codep++;
15590
15591 if (modrm.mod == 3)
15592 OP_E_register (bytemode, sizeflag);
15593 else
c1e679ec 15594 OP_E_memory (bytemode, sizeflag);
c0f3af97
L
15595}
15596
252b5132 15597static void
26ca5450 15598OP_G (int bytemode, int sizeflag)
252b5132 15599{
52b15da3 15600 int add = 0;
161a04f6
L
15601 USED_REX (REX_R);
15602 if (rex & REX_R)
52b15da3 15603 add += 8;
252b5132
RH
15604 switch (bytemode)
15605 {
15606 case b_mode:
52b15da3
JH
15607 USED_REX (0);
15608 if (rex)
7967e09e 15609 oappend (names8rex[modrm.reg + add]);
52b15da3 15610 else
7967e09e 15611 oappend (names8[modrm.reg + add]);
252b5132
RH
15612 break;
15613 case w_mode:
7967e09e 15614 oappend (names16[modrm.reg + add]);
252b5132
RH
15615 break;
15616 case d_mode:
1ba585e8
IT
15617 case db_mode:
15618 case dw_mode:
7967e09e 15619 oappend (names32[modrm.reg + add]);
52b15da3
JH
15620 break;
15621 case q_mode:
7967e09e 15622 oappend (names64[modrm.reg + add]);
252b5132 15623 break;
7e8b059b 15624 case bnd_mode:
0d96e4df
L
15625 if (modrm.reg > 0x3)
15626 {
15627 oappend ("(bad)");
15628 return;
15629 }
7e8b059b
L
15630 oappend (names_bnd[modrm.reg]);
15631 break;
252b5132 15632 case v_mode:
9306ca4a 15633 case dq_mode:
42903f7f
L
15634 case dqb_mode:
15635 case dqd_mode:
9306ca4a 15636 case dqw_mode:
161a04f6
L
15637 USED_REX (REX_W);
15638 if (rex & REX_W)
7967e09e 15639 oappend (names64[modrm.reg + add]);
252b5132 15640 else
f16cd0d5
L
15641 {
15642 if ((sizeflag & DFLAG) || bytemode != v_mode)
15643 oappend (names32[modrm.reg + add]);
15644 else
15645 oappend (names16[modrm.reg + add]);
15646 used_prefixes |= (prefixes & PREFIX_DATA);
15647 }
252b5132 15648 break;
90700ea2 15649 case m_mode:
cb712a9e 15650 if (address_mode == mode_64bit)
7967e09e 15651 oappend (names64[modrm.reg + add]);
90700ea2 15652 else
7967e09e 15653 oappend (names32[modrm.reg + add]);
90700ea2 15654 break;
1ba585e8 15655 case mask_bd_mode:
43234a1e 15656 case mask_mode:
9889cbb1
L
15657 if ((modrm.reg + add) > 0x7)
15658 {
15659 oappend ("(bad)");
15660 return;
15661 }
43234a1e
L
15662 oappend (names_mask[modrm.reg + add]);
15663 break;
252b5132
RH
15664 default:
15665 oappend (INTERNAL_DISASSEMBLER_ERROR);
15666 break;
15667 }
15668}
15669
52b15da3 15670static bfd_vma
26ca5450 15671get64 (void)
52b15da3 15672{
5dd0794d 15673 bfd_vma x;
52b15da3 15674#ifdef BFD64
5dd0794d
AM
15675 unsigned int a;
15676 unsigned int b;
15677
52b15da3
JH
15678 FETCH_DATA (the_info, codep + 8);
15679 a = *codep++ & 0xff;
15680 a |= (*codep++ & 0xff) << 8;
15681 a |= (*codep++ & 0xff) << 16;
070fe95d 15682 a |= (*codep++ & 0xffu) << 24;
5dd0794d 15683 b = *codep++ & 0xff;
52b15da3
JH
15684 b |= (*codep++ & 0xff) << 8;
15685 b |= (*codep++ & 0xff) << 16;
070fe95d 15686 b |= (*codep++ & 0xffu) << 24;
52b15da3
JH
15687 x = a + ((bfd_vma) b << 32);
15688#else
6608db57 15689 abort ();
5dd0794d 15690 x = 0;
52b15da3
JH
15691#endif
15692 return x;
15693}
15694
15695static bfd_signed_vma
26ca5450 15696get32 (void)
252b5132 15697{
52b15da3 15698 bfd_signed_vma x = 0;
252b5132
RH
15699
15700 FETCH_DATA (the_info, codep + 4);
52b15da3
JH
15701 x = *codep++ & (bfd_signed_vma) 0xff;
15702 x |= (*codep++ & (bfd_signed_vma) 0xff) << 8;
15703 x |= (*codep++ & (bfd_signed_vma) 0xff) << 16;
15704 x |= (*codep++ & (bfd_signed_vma) 0xff) << 24;
15705 return x;
15706}
15707
15708static bfd_signed_vma
26ca5450 15709get32s (void)
52b15da3
JH
15710{
15711 bfd_signed_vma x = 0;
15712
15713 FETCH_DATA (the_info, codep + 4);
15714 x = *codep++ & (bfd_signed_vma) 0xff;
15715 x |= (*codep++ & (bfd_signed_vma) 0xff) << 8;
15716 x |= (*codep++ & (bfd_signed_vma) 0xff) << 16;
15717 x |= (*codep++ & (bfd_signed_vma) 0xff) << 24;
15718
15719 x = (x ^ ((bfd_signed_vma) 1 << 31)) - ((bfd_signed_vma) 1 << 31);
15720
252b5132
RH
15721 return x;
15722}
15723
15724static int
26ca5450 15725get16 (void)
252b5132
RH
15726{
15727 int x = 0;
15728
15729 FETCH_DATA (the_info, codep + 2);
15730 x = *codep++ & 0xff;
15731 x |= (*codep++ & 0xff) << 8;
15732 return x;
15733}
15734
15735static void
26ca5450 15736set_op (bfd_vma op, int riprel)
252b5132
RH
15737{
15738 op_index[op_ad] = op_ad;
cb712a9e 15739 if (address_mode == mode_64bit)
7081ff04
AJ
15740 {
15741 op_address[op_ad] = op;
15742 op_riprel[op_ad] = riprel;
15743 }
15744 else
15745 {
15746 /* Mask to get a 32-bit address. */
15747 op_address[op_ad] = op & 0xffffffff;
15748 op_riprel[op_ad] = riprel & 0xffffffff;
15749 }
252b5132
RH
15750}
15751
15752static void
26ca5450 15753OP_REG (int code, int sizeflag)
252b5132 15754{
2da11e11 15755 const char *s;
9b60702d 15756 int add;
de882298
RM
15757
15758 switch (code)
15759 {
15760 case es_reg: case ss_reg: case cs_reg:
15761 case ds_reg: case fs_reg: case gs_reg:
15762 oappend (names_seg[code - es_reg]);
15763 return;
15764 }
15765
161a04f6
L
15766 USED_REX (REX_B);
15767 if (rex & REX_B)
52b15da3 15768 add = 8;
9b60702d
L
15769 else
15770 add = 0;
52b15da3
JH
15771
15772 switch (code)
15773 {
52b15da3
JH
15774 case ax_reg: case cx_reg: case dx_reg: case bx_reg:
15775 case sp_reg: case bp_reg: case si_reg: case di_reg:
15776 s = names16[code - ax_reg + add];
15777 break;
52b15da3
JH
15778 case al_reg: case ah_reg: case cl_reg: case ch_reg:
15779 case dl_reg: case dh_reg: case bl_reg: case bh_reg:
15780 USED_REX (0);
15781 if (rex)
15782 s = names8rex[code - al_reg + add];
15783 else
15784 s = names8[code - al_reg];
15785 break;
6439fc28
AM
15786 case rAX_reg: case rCX_reg: case rDX_reg: case rBX_reg:
15787 case rSP_reg: case rBP_reg: case rSI_reg: case rDI_reg:
7bb15c6f 15788 if (address_mode == mode_64bit
6c067bbb 15789 && ((sizeflag & DFLAG) || (rex & REX_W)))
6439fc28
AM
15790 {
15791 s = names64[code - rAX_reg + add];
15792 break;
15793 }
15794 code += eAX_reg - rAX_reg;
6608db57 15795 /* Fall through. */
52b15da3
JH
15796 case eAX_reg: case eCX_reg: case eDX_reg: case eBX_reg:
15797 case eSP_reg: case eBP_reg: case eSI_reg: case eDI_reg:
161a04f6
L
15798 USED_REX (REX_W);
15799 if (rex & REX_W)
52b15da3 15800 s = names64[code - eAX_reg + add];
52b15da3 15801 else
f16cd0d5
L
15802 {
15803 if (sizeflag & DFLAG)
15804 s = names32[code - eAX_reg + add];
15805 else
15806 s = names16[code - eAX_reg + add];
15807 used_prefixes |= (prefixes & PREFIX_DATA);
15808 }
52b15da3 15809 break;
52b15da3
JH
15810 default:
15811 s = INTERNAL_DISASSEMBLER_ERROR;
15812 break;
15813 }
15814 oappend (s);
15815}
15816
15817static void
26ca5450 15818OP_IMREG (int code, int sizeflag)
52b15da3
JH
15819{
15820 const char *s;
252b5132
RH
15821
15822 switch (code)
15823 {
15824 case indir_dx_reg:
d708bcba 15825 if (intel_syntax)
52fd6d94 15826 s = "dx";
d708bcba 15827 else
db6eb5be 15828 s = "(%dx)";
252b5132
RH
15829 break;
15830 case ax_reg: case cx_reg: case dx_reg: case bx_reg:
15831 case sp_reg: case bp_reg: case si_reg: case di_reg:
15832 s = names16[code - ax_reg];
15833 break;
15834 case es_reg: case ss_reg: case cs_reg:
15835 case ds_reg: case fs_reg: case gs_reg:
15836 s = names_seg[code - es_reg];
15837 break;
15838 case al_reg: case ah_reg: case cl_reg: case ch_reg:
15839 case dl_reg: case dh_reg: case bl_reg: case bh_reg:
52b15da3
JH
15840 USED_REX (0);
15841 if (rex)
15842 s = names8rex[code - al_reg];
15843 else
15844 s = names8[code - al_reg];
252b5132
RH
15845 break;
15846 case eAX_reg: case eCX_reg: case eDX_reg: case eBX_reg:
15847 case eSP_reg: case eBP_reg: case eSI_reg: case eDI_reg:
161a04f6
L
15848 USED_REX (REX_W);
15849 if (rex & REX_W)
52b15da3 15850 s = names64[code - eAX_reg];
252b5132 15851 else
f16cd0d5
L
15852 {
15853 if (sizeflag & DFLAG)
15854 s = names32[code - eAX_reg];
15855 else
15856 s = names16[code - eAX_reg];
15857 used_prefixes |= (prefixes & PREFIX_DATA);
15858 }
252b5132 15859 break;
52fd6d94 15860 case z_mode_ax_reg:
161a04f6 15861 if ((rex & REX_W) || (sizeflag & DFLAG))
52fd6d94
JB
15862 s = *names32;
15863 else
15864 s = *names16;
161a04f6 15865 if (!(rex & REX_W))
52fd6d94
JB
15866 used_prefixes |= (prefixes & PREFIX_DATA);
15867 break;
252b5132
RH
15868 default:
15869 s = INTERNAL_DISASSEMBLER_ERROR;
15870 break;
15871 }
15872 oappend (s);
15873}
15874
15875static void
26ca5450 15876OP_I (int bytemode, int sizeflag)
252b5132 15877{
52b15da3
JH
15878 bfd_signed_vma op;
15879 bfd_signed_vma mask = -1;
252b5132
RH
15880
15881 switch (bytemode)
15882 {
15883 case b_mode:
15884 FETCH_DATA (the_info, codep + 1);
52b15da3
JH
15885 op = *codep++;
15886 mask = 0xff;
15887 break;
15888 case q_mode:
cb712a9e 15889 if (address_mode == mode_64bit)
6439fc28
AM
15890 {
15891 op = get32s ();
15892 break;
15893 }
6608db57 15894 /* Fall through. */
252b5132 15895 case v_mode:
161a04f6
L
15896 USED_REX (REX_W);
15897 if (rex & REX_W)
52b15da3 15898 op = get32s ();
252b5132 15899 else
52b15da3 15900 {
f16cd0d5
L
15901 if (sizeflag & DFLAG)
15902 {
15903 op = get32 ();
15904 mask = 0xffffffff;
15905 }
15906 else
15907 {
15908 op = get16 ();
15909 mask = 0xfffff;
15910 }
15911 used_prefixes |= (prefixes & PREFIX_DATA);
52b15da3 15912 }
252b5132
RH
15913 break;
15914 case w_mode:
52b15da3 15915 mask = 0xfffff;
252b5132
RH
15916 op = get16 ();
15917 break;
9306ca4a
JB
15918 case const_1_mode:
15919 if (intel_syntax)
6c067bbb 15920 oappend ("1");
9306ca4a 15921 return;
252b5132
RH
15922 default:
15923 oappend (INTERNAL_DISASSEMBLER_ERROR);
15924 return;
15925 }
15926
52b15da3
JH
15927 op &= mask;
15928 scratchbuf[0] = '$';
d708bcba 15929 print_operand_value (scratchbuf + 1, 1, op);
9ce09ba2 15930 oappend_maybe_intel (scratchbuf);
52b15da3
JH
15931 scratchbuf[0] = '\0';
15932}
15933
15934static void
26ca5450 15935OP_I64 (int bytemode, int sizeflag)
52b15da3
JH
15936{
15937 bfd_signed_vma op;
15938 bfd_signed_vma mask = -1;
15939
cb712a9e 15940 if (address_mode != mode_64bit)
6439fc28
AM
15941 {
15942 OP_I (bytemode, sizeflag);
15943 return;
15944 }
15945
52b15da3
JH
15946 switch (bytemode)
15947 {
15948 case b_mode:
15949 FETCH_DATA (the_info, codep + 1);
15950 op = *codep++;
15951 mask = 0xff;
15952 break;
15953 case v_mode:
161a04f6
L
15954 USED_REX (REX_W);
15955 if (rex & REX_W)
52b15da3 15956 op = get64 ();
52b15da3
JH
15957 else
15958 {
f16cd0d5
L
15959 if (sizeflag & DFLAG)
15960 {
15961 op = get32 ();
15962 mask = 0xffffffff;
15963 }
15964 else
15965 {
15966 op = get16 ();
15967 mask = 0xfffff;
15968 }
15969 used_prefixes |= (prefixes & PREFIX_DATA);
52b15da3 15970 }
52b15da3
JH
15971 break;
15972 case w_mode:
15973 mask = 0xfffff;
15974 op = get16 ();
15975 break;
15976 default:
15977 oappend (INTERNAL_DISASSEMBLER_ERROR);
15978 return;
15979 }
15980
15981 op &= mask;
15982 scratchbuf[0] = '$';
d708bcba 15983 print_operand_value (scratchbuf + 1, 1, op);
9ce09ba2 15984 oappend_maybe_intel (scratchbuf);
252b5132
RH
15985 scratchbuf[0] = '\0';
15986}
15987
15988static void
26ca5450 15989OP_sI (int bytemode, int sizeflag)
252b5132 15990{
52b15da3 15991 bfd_signed_vma op;
252b5132
RH
15992
15993 switch (bytemode)
15994 {
15995 case b_mode:
e3949f17 15996 case b_T_mode:
252b5132
RH
15997 FETCH_DATA (the_info, codep + 1);
15998 op = *codep++;
15999 if ((op & 0x80) != 0)
16000 op -= 0x100;
e3949f17
L
16001 if (bytemode == b_T_mode)
16002 {
16003 if (address_mode != mode_64bit
7bb15c6f 16004 || !((sizeflag & DFLAG) || (rex & REX_W)))
e3949f17 16005 {
6c067bbb
RM
16006 /* The operand-size prefix is overridden by a REX prefix. */
16007 if ((sizeflag & DFLAG) || (rex & REX_W))
e3949f17
L
16008 op &= 0xffffffff;
16009 else
16010 op &= 0xffff;
16011 }
16012 }
16013 else
16014 {
16015 if (!(rex & REX_W))
16016 {
16017 if (sizeflag & DFLAG)
16018 op &= 0xffffffff;
16019 else
16020 op &= 0xffff;
16021 }
16022 }
252b5132
RH
16023 break;
16024 case v_mode:
7bb15c6f
RM
16025 /* The operand-size prefix is overridden by a REX prefix. */
16026 if ((sizeflag & DFLAG) || (rex & REX_W))
52b15da3 16027 op = get32s ();
252b5132 16028 else
d9e3625e 16029 op = get16 ();
252b5132
RH
16030 break;
16031 default:
16032 oappend (INTERNAL_DISASSEMBLER_ERROR);
16033 return;
16034 }
52b15da3
JH
16035
16036 scratchbuf[0] = '$';
16037 print_operand_value (scratchbuf + 1, 1, op);
9ce09ba2 16038 oappend_maybe_intel (scratchbuf);
252b5132
RH
16039}
16040
16041static void
26ca5450 16042OP_J (int bytemode, int sizeflag)
252b5132 16043{
52b15da3 16044 bfd_vma disp;
7081ff04 16045 bfd_vma mask = -1;
65ca155d 16046 bfd_vma segment = 0;
252b5132
RH
16047
16048 switch (bytemode)
16049 {
16050 case b_mode:
16051 FETCH_DATA (the_info, codep + 1);
16052 disp = *codep++;
16053 if ((disp & 0x80) != 0)
16054 disp -= 0x100;
16055 break;
16056 case v_mode:
5db04b09
L
16057 if (isa64 == amd64)
16058 USED_REX (REX_W);
16059 if ((sizeflag & DFLAG)
16060 || (address_mode == mode_64bit
16061 && (isa64 != amd64 || (rex & REX_W))))
52b15da3 16062 disp = get32s ();
252b5132
RH
16063 else
16064 {
16065 disp = get16 ();
206717e8
L
16066 if ((disp & 0x8000) != 0)
16067 disp -= 0x10000;
65ca155d
L
16068 /* In 16bit mode, address is wrapped around at 64k within
16069 the same segment. Otherwise, a data16 prefix on a jump
16070 instruction means that the pc is masked to 16 bits after
16071 the displacement is added! */
16072 mask = 0xffff;
16073 if ((prefixes & PREFIX_DATA) == 0)
4fd7268a 16074 segment = ((start_pc + (codep - start_codep))
65ca155d 16075 & ~((bfd_vma) 0xffff));
252b5132 16076 }
5db04b09
L
16077 if (address_mode != mode_64bit
16078 || (isa64 == amd64 && !(rex & REX_W)))
f16cd0d5 16079 used_prefixes |= (prefixes & PREFIX_DATA);
252b5132
RH
16080 break;
16081 default:
16082 oappend (INTERNAL_DISASSEMBLER_ERROR);
16083 return;
16084 }
42d5f9c6 16085 disp = ((start_pc + (codep - start_codep) + disp) & mask) | segment;
52b15da3
JH
16086 set_op (disp, 0);
16087 print_operand_value (scratchbuf, 1, disp);
252b5132
RH
16088 oappend (scratchbuf);
16089}
16090
252b5132 16091static void
ed7841b3 16092OP_SEG (int bytemode, int sizeflag)
252b5132 16093{
ed7841b3 16094 if (bytemode == w_mode)
7967e09e 16095 oappend (names_seg[modrm.reg]);
ed7841b3 16096 else
7967e09e 16097 OP_E (modrm.mod == 3 ? bytemode : w_mode, sizeflag);
252b5132
RH
16098}
16099
16100static void
26ca5450 16101OP_DIR (int dummy ATTRIBUTE_UNUSED, int sizeflag)
252b5132
RH
16102{
16103 int seg, offset;
16104
c608c12e 16105 if (sizeflag & DFLAG)
252b5132 16106 {
c608c12e
AM
16107 offset = get32 ();
16108 seg = get16 ();
252b5132 16109 }
c608c12e
AM
16110 else
16111 {
16112 offset = get16 ();
16113 seg = get16 ();
16114 }
7d421014 16115 used_prefixes |= (prefixes & PREFIX_DATA);
d708bcba 16116 if (intel_syntax)
3f31e633 16117 sprintf (scratchbuf, "0x%x:0x%x", seg, offset);
d708bcba
AM
16118 else
16119 sprintf (scratchbuf, "$0x%x,$0x%x", seg, offset);
c608c12e 16120 oappend (scratchbuf);
252b5132
RH
16121}
16122
252b5132 16123static void
3f31e633 16124OP_OFF (int bytemode, int sizeflag)
252b5132 16125{
52b15da3 16126 bfd_vma off;
252b5132 16127
3f31e633
JB
16128 if (intel_syntax && (sizeflag & SUFFIX_ALWAYS))
16129 intel_operand_size (bytemode, sizeflag);
252b5132
RH
16130 append_seg ();
16131
cb712a9e 16132 if ((sizeflag & AFLAG) || address_mode == mode_64bit)
252b5132
RH
16133 off = get32 ();
16134 else
16135 off = get16 ();
16136
16137 if (intel_syntax)
16138 {
285ca992 16139 if (!active_seg_prefix)
252b5132 16140 {
d708bcba 16141 oappend (names_seg[ds_reg - es_reg]);
252b5132
RH
16142 oappend (":");
16143 }
16144 }
52b15da3
JH
16145 print_operand_value (scratchbuf, 1, off);
16146 oappend (scratchbuf);
16147}
6439fc28 16148
52b15da3 16149static void
3f31e633 16150OP_OFF64 (int bytemode, int sizeflag)
52b15da3
JH
16151{
16152 bfd_vma off;
16153
539e75ad
L
16154 if (address_mode != mode_64bit
16155 || (prefixes & PREFIX_ADDR))
6439fc28
AM
16156 {
16157 OP_OFF (bytemode, sizeflag);
16158 return;
16159 }
16160
3f31e633
JB
16161 if (intel_syntax && (sizeflag & SUFFIX_ALWAYS))
16162 intel_operand_size (bytemode, sizeflag);
52b15da3
JH
16163 append_seg ();
16164
6608db57 16165 off = get64 ();
52b15da3
JH
16166
16167 if (intel_syntax)
16168 {
285ca992 16169 if (!active_seg_prefix)
52b15da3 16170 {
d708bcba 16171 oappend (names_seg[ds_reg - es_reg]);
52b15da3
JH
16172 oappend (":");
16173 }
16174 }
16175 print_operand_value (scratchbuf, 1, off);
252b5132
RH
16176 oappend (scratchbuf);
16177}
16178
16179static void
26ca5450 16180ptr_reg (int code, int sizeflag)
252b5132 16181{
2da11e11 16182 const char *s;
d708bcba 16183
1d9f512f 16184 *obufp++ = open_char;
20f0a1fc 16185 used_prefixes |= (prefixes & PREFIX_ADDR);
cb712a9e 16186 if (address_mode == mode_64bit)
c1a64871
JH
16187 {
16188 if (!(sizeflag & AFLAG))
db6eb5be 16189 s = names32[code - eAX_reg];
c1a64871 16190 else
db6eb5be 16191 s = names64[code - eAX_reg];
c1a64871 16192 }
52b15da3 16193 else if (sizeflag & AFLAG)
252b5132
RH
16194 s = names32[code - eAX_reg];
16195 else
16196 s = names16[code - eAX_reg];
16197 oappend (s);
1d9f512f
AM
16198 *obufp++ = close_char;
16199 *obufp = 0;
252b5132
RH
16200}
16201
16202static void
26ca5450 16203OP_ESreg (int code, int sizeflag)
252b5132 16204{
9306ca4a 16205 if (intel_syntax)
52fd6d94
JB
16206 {
16207 switch (codep[-1])
16208 {
16209 case 0x6d: /* insw/insl */
16210 intel_operand_size (z_mode, sizeflag);
16211 break;
16212 case 0xa5: /* movsw/movsl/movsq */
16213 case 0xa7: /* cmpsw/cmpsl/cmpsq */
16214 case 0xab: /* stosw/stosl */
16215 case 0xaf: /* scasw/scasl */
16216 intel_operand_size (v_mode, sizeflag);
16217 break;
16218 default:
16219 intel_operand_size (b_mode, sizeflag);
16220 }
16221 }
9ce09ba2 16222 oappend_maybe_intel ("%es:");
252b5132
RH
16223 ptr_reg (code, sizeflag);
16224}
16225
16226static void
26ca5450 16227OP_DSreg (int code, int sizeflag)
252b5132 16228{
9306ca4a 16229 if (intel_syntax)
52fd6d94
JB
16230 {
16231 switch (codep[-1])
16232 {
16233 case 0x6f: /* outsw/outsl */
16234 intel_operand_size (z_mode, sizeflag);
16235 break;
16236 case 0xa5: /* movsw/movsl/movsq */
16237 case 0xa7: /* cmpsw/cmpsl/cmpsq */
16238 case 0xad: /* lodsw/lodsl/lodsq */
16239 intel_operand_size (v_mode, sizeflag);
16240 break;
16241 default:
16242 intel_operand_size (b_mode, sizeflag);
16243 }
16244 }
285ca992
L
16245 /* Set active_seg_prefix to PREFIX_DS if it is unset so that the
16246 default segment register DS is printed. */
16247 if (!active_seg_prefix)
16248 active_seg_prefix = PREFIX_DS;
6608db57 16249 append_seg ();
252b5132
RH
16250 ptr_reg (code, sizeflag);
16251}
16252
252b5132 16253static void
26ca5450 16254OP_C (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 16255{
9b60702d 16256 int add;
161a04f6 16257 if (rex & REX_R)
c4a530c5 16258 {
161a04f6 16259 USED_REX (REX_R);
c4a530c5
JB
16260 add = 8;
16261 }
cb712a9e 16262 else if (address_mode != mode_64bit && (prefixes & PREFIX_LOCK))
c4a530c5 16263 {
f16cd0d5 16264 all_prefixes[last_lock_prefix] = 0;
c4a530c5
JB
16265 used_prefixes |= PREFIX_LOCK;
16266 add = 8;
16267 }
9b60702d
L
16268 else
16269 add = 0;
7967e09e 16270 sprintf (scratchbuf, "%%cr%d", modrm.reg + add);
9ce09ba2 16271 oappend_maybe_intel (scratchbuf);
252b5132
RH
16272}
16273
252b5132 16274static void
26ca5450 16275OP_D (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 16276{
9b60702d 16277 int add;
161a04f6
L
16278 USED_REX (REX_R);
16279 if (rex & REX_R)
52b15da3 16280 add = 8;
9b60702d
L
16281 else
16282 add = 0;
d708bcba 16283 if (intel_syntax)
7967e09e 16284 sprintf (scratchbuf, "db%d", modrm.reg + add);
d708bcba 16285 else
7967e09e 16286 sprintf (scratchbuf, "%%db%d", modrm.reg + add);
252b5132
RH
16287 oappend (scratchbuf);
16288}
16289
252b5132 16290static void
26ca5450 16291OP_T (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 16292{
7967e09e 16293 sprintf (scratchbuf, "%%tr%d", modrm.reg);
9ce09ba2 16294 oappend_maybe_intel (scratchbuf);
252b5132
RH
16295}
16296
16297static void
6f74c397 16298OP_R (int bytemode, int sizeflag)
252b5132 16299{
68f34464
L
16300 /* Skip mod/rm byte. */
16301 MODRM_CHECK;
16302 codep++;
16303 OP_E_register (bytemode, sizeflag);
252b5132
RH
16304}
16305
16306static void
26ca5450 16307OP_MMX (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 16308{
b9733481
L
16309 int reg = modrm.reg;
16310 const char **names;
16311
041bd2e0
JH
16312 used_prefixes |= (prefixes & PREFIX_DATA);
16313 if (prefixes & PREFIX_DATA)
20f0a1fc 16314 {
b9733481 16315 names = names_xmm;
161a04f6
L
16316 USED_REX (REX_R);
16317 if (rex & REX_R)
b9733481 16318 reg += 8;
20f0a1fc 16319 }
041bd2e0 16320 else
b9733481
L
16321 names = names_mm;
16322 oappend (names[reg]);
252b5132
RH
16323}
16324
c608c12e 16325static void
c0f3af97 16326OP_XMM (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
c608c12e 16327{
b9733481
L
16328 int reg = modrm.reg;
16329 const char **names;
16330
161a04f6
L
16331 USED_REX (REX_R);
16332 if (rex & REX_R)
b9733481 16333 reg += 8;
43234a1e
L
16334 if (vex.evex)
16335 {
16336 if (!vex.r)
16337 reg += 16;
16338 }
16339
539f890d
L
16340 if (need_vex
16341 && bytemode != xmm_mode
43234a1e
L
16342 && bytemode != xmmq_mode
16343 && bytemode != evex_half_bcst_xmmq_mode
16344 && bytemode != ymm_mode
539f890d 16345 && bytemode != scalar_mode)
c0f3af97
L
16346 {
16347 switch (vex.length)
16348 {
16349 case 128:
b9733481 16350 names = names_xmm;
c0f3af97
L
16351 break;
16352 case 256:
5fc35d96
IT
16353 if (vex.w
16354 || (bytemode != vex_vsib_q_w_dq_mode
16355 && bytemode != vex_vsib_q_w_d_mode))
6c30d220
L
16356 names = names_ymm;
16357 else
16358 names = names_xmm;
c0f3af97 16359 break;
43234a1e
L
16360 case 512:
16361 names = names_zmm;
16362 break;
c0f3af97
L
16363 default:
16364 abort ();
16365 }
16366 }
43234a1e
L
16367 else if (bytemode == xmmq_mode
16368 || bytemode == evex_half_bcst_xmmq_mode)
16369 {
16370 switch (vex.length)
16371 {
16372 case 128:
16373 case 256:
16374 names = names_xmm;
16375 break;
16376 case 512:
16377 names = names_ymm;
16378 break;
16379 default:
16380 abort ();
16381 }
16382 }
16383 else if (bytemode == ymm_mode)
16384 names = names_ymm;
c0f3af97 16385 else
b9733481
L
16386 names = names_xmm;
16387 oappend (names[reg]);
c608c12e
AM
16388}
16389
252b5132 16390static void
26ca5450 16391OP_EM (int bytemode, int sizeflag)
252b5132 16392{
b9733481
L
16393 int reg;
16394 const char **names;
16395
7967e09e 16396 if (modrm.mod != 3)
252b5132 16397 {
b6169b20
L
16398 if (intel_syntax
16399 && (bytemode == v_mode || bytemode == v_swap_mode))
9306ca4a
JB
16400 {
16401 bytemode = (prefixes & PREFIX_DATA) ? x_mode : q_mode;
16402 used_prefixes |= (prefixes & PREFIX_DATA);
6c067bbb 16403 }
252b5132
RH
16404 OP_E (bytemode, sizeflag);
16405 return;
16406 }
16407
b6169b20
L
16408 if ((sizeflag & SUFFIX_ALWAYS) && bytemode == v_swap_mode)
16409 swap_operand ();
16410
6608db57 16411 /* Skip mod/rm byte. */
4bba6815 16412 MODRM_CHECK;
252b5132 16413 codep++;
041bd2e0 16414 used_prefixes |= (prefixes & PREFIX_DATA);
b9733481 16415 reg = modrm.rm;
041bd2e0 16416 if (prefixes & PREFIX_DATA)
20f0a1fc 16417 {
b9733481 16418 names = names_xmm;
161a04f6
L
16419 USED_REX (REX_B);
16420 if (rex & REX_B)
b9733481 16421 reg += 8;
20f0a1fc 16422 }
041bd2e0 16423 else
b9733481
L
16424 names = names_mm;
16425 oappend (names[reg]);
252b5132
RH
16426}
16427
246c51aa
L
16428/* cvt* are the only instructions in sse2 which have
16429 both SSE and MMX operands and also have 0x66 prefix
16430 in their opcode. 0x66 was originally used to differentiate
16431 between SSE and MMX instruction(operands). So we have to handle the
4d9567e0
MM
16432 cvt* separately using OP_EMC and OP_MXC */
16433static void
16434OP_EMC (int bytemode, int sizeflag)
16435{
7967e09e 16436 if (modrm.mod != 3)
4d9567e0
MM
16437 {
16438 if (intel_syntax && bytemode == v_mode)
16439 {
16440 bytemode = (prefixes & PREFIX_DATA) ? x_mode : q_mode;
16441 used_prefixes |= (prefixes & PREFIX_DATA);
6c067bbb 16442 }
4d9567e0
MM
16443 OP_E (bytemode, sizeflag);
16444 return;
16445 }
246c51aa 16446
4d9567e0
MM
16447 /* Skip mod/rm byte. */
16448 MODRM_CHECK;
16449 codep++;
16450 used_prefixes |= (prefixes & PREFIX_DATA);
b9733481 16451 oappend (names_mm[modrm.rm]);
4d9567e0
MM
16452}
16453
16454static void
16455OP_MXC (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
16456{
16457 used_prefixes |= (prefixes & PREFIX_DATA);
b9733481 16458 oappend (names_mm[modrm.reg]);
4d9567e0
MM
16459}
16460
c608c12e 16461static void
26ca5450 16462OP_EX (int bytemode, int sizeflag)
c608c12e 16463{
b9733481
L
16464 int reg;
16465 const char **names;
d6f574e0
L
16466
16467 /* Skip mod/rm byte. */
16468 MODRM_CHECK;
16469 codep++;
16470
7967e09e 16471 if (modrm.mod != 3)
c608c12e 16472 {
c1e679ec 16473 OP_E_memory (bytemode, sizeflag);
c608c12e
AM
16474 return;
16475 }
d6f574e0 16476
b9733481 16477 reg = modrm.rm;
161a04f6
L
16478 USED_REX (REX_B);
16479 if (rex & REX_B)
b9733481 16480 reg += 8;
43234a1e
L
16481 if (vex.evex)
16482 {
16483 USED_REX (REX_X);
16484 if ((rex & REX_X))
16485 reg += 16;
16486 }
c608c12e 16487
b6169b20 16488 if ((sizeflag & SUFFIX_ALWAYS)
fa99fab2
L
16489 && (bytemode == x_swap_mode
16490 || bytemode == d_swap_mode
7bb15c6f 16491 || bytemode == d_scalar_swap_mode
539f890d
L
16492 || bytemode == q_swap_mode
16493 || bytemode == q_scalar_swap_mode))
b6169b20
L
16494 swap_operand ();
16495
c0f3af97
L
16496 if (need_vex
16497 && bytemode != xmm_mode
6c30d220
L
16498 && bytemode != xmmdw_mode
16499 && bytemode != xmmqd_mode
16500 && bytemode != xmm_mb_mode
16501 && bytemode != xmm_mw_mode
16502 && bytemode != xmm_md_mode
16503 && bytemode != xmm_mq_mode
43234a1e 16504 && bytemode != xmm_mdq_mode
539f890d 16505 && bytemode != xmmq_mode
43234a1e
L
16506 && bytemode != evex_half_bcst_xmmq_mode
16507 && bytemode != ymm_mode
539f890d 16508 && bytemode != d_scalar_mode
7bb15c6f 16509 && bytemode != d_scalar_swap_mode
539f890d 16510 && bytemode != q_scalar_mode
1c480963
L
16511 && bytemode != q_scalar_swap_mode
16512 && bytemode != vex_scalar_w_dq_mode)
c0f3af97
L
16513 {
16514 switch (vex.length)
16515 {
16516 case 128:
b9733481 16517 names = names_xmm;
c0f3af97
L
16518 break;
16519 case 256:
b9733481 16520 names = names_ymm;
c0f3af97 16521 break;
43234a1e
L
16522 case 512:
16523 names = names_zmm;
16524 break;
c0f3af97
L
16525 default:
16526 abort ();
16527 }
16528 }
43234a1e
L
16529 else if (bytemode == xmmq_mode
16530 || bytemode == evex_half_bcst_xmmq_mode)
16531 {
16532 switch (vex.length)
16533 {
16534 case 128:
16535 case 256:
16536 names = names_xmm;
16537 break;
16538 case 512:
16539 names = names_ymm;
16540 break;
16541 default:
16542 abort ();
16543 }
16544 }
16545 else if (bytemode == ymm_mode)
16546 names = names_ymm;
c0f3af97 16547 else
b9733481
L
16548 names = names_xmm;
16549 oappend (names[reg]);
c608c12e
AM
16550}
16551
252b5132 16552static void
26ca5450 16553OP_MS (int bytemode, int sizeflag)
252b5132 16554{
7967e09e 16555 if (modrm.mod == 3)
2da11e11
AM
16556 OP_EM (bytemode, sizeflag);
16557 else
6608db57 16558 BadOp ();
252b5132
RH
16559}
16560
992aaec9 16561static void
26ca5450 16562OP_XS (int bytemode, int sizeflag)
992aaec9 16563{
7967e09e 16564 if (modrm.mod == 3)
992aaec9
AM
16565 OP_EX (bytemode, sizeflag);
16566 else
6608db57 16567 BadOp ();
992aaec9
AM
16568}
16569
cc0ec051
AM
16570static void
16571OP_M (int bytemode, int sizeflag)
16572{
7967e09e 16573 if (modrm.mod == 3)
75413a22
L
16574 /* bad bound,lea,lds,les,lfs,lgs,lss,cmpxchg8b,vmptrst modrm */
16575 BadOp ();
cc0ec051
AM
16576 else
16577 OP_E (bytemode, sizeflag);
16578}
16579
16580static void
16581OP_0f07 (int bytemode, int sizeflag)
16582{
7967e09e 16583 if (modrm.mod != 3 || modrm.rm != 0)
cc0ec051
AM
16584 BadOp ();
16585 else
16586 OP_E (bytemode, sizeflag);
16587}
16588
46e883c5 16589/* NOP is an alias of "xchg %ax,%ax" in 16bit mode, "xchg %eax,%eax" in
246c51aa 16590 32bit mode and "xchg %rax,%rax" in 64bit mode. */
46e883c5 16591
cc0ec051 16592static void
46e883c5 16593NOP_Fixup1 (int bytemode, int sizeflag)
cc0ec051 16594{
8b38ad71
L
16595 if ((prefixes & PREFIX_DATA) != 0
16596 || (rex != 0
16597 && rex != 0x48
16598 && address_mode == mode_64bit))
46e883c5
L
16599 OP_REG (bytemode, sizeflag);
16600 else
16601 strcpy (obuf, "nop");
16602}
16603
16604static void
16605NOP_Fixup2 (int bytemode, int sizeflag)
16606{
8b38ad71
L
16607 if ((prefixes & PREFIX_DATA) != 0
16608 || (rex != 0
16609 && rex != 0x48
16610 && address_mode == mode_64bit))
46e883c5 16611 OP_IMREG (bytemode, sizeflag);
cc0ec051
AM
16612}
16613
84037f8c 16614static const char *const Suffix3DNow[] = {
252b5132
RH
16615/* 00 */ NULL, NULL, NULL, NULL,
16616/* 04 */ NULL, NULL, NULL, NULL,
16617/* 08 */ NULL, NULL, NULL, NULL,
9e525108 16618/* 0C */ "pi2fw", "pi2fd", NULL, NULL,
252b5132
RH
16619/* 10 */ NULL, NULL, NULL, NULL,
16620/* 14 */ NULL, NULL, NULL, NULL,
16621/* 18 */ NULL, NULL, NULL, NULL,
9e525108 16622/* 1C */ "pf2iw", "pf2id", NULL, NULL,
252b5132
RH
16623/* 20 */ NULL, NULL, NULL, NULL,
16624/* 24 */ NULL, NULL, NULL, NULL,
16625/* 28 */ NULL, NULL, NULL, NULL,
16626/* 2C */ NULL, NULL, NULL, NULL,
16627/* 30 */ NULL, NULL, NULL, NULL,
16628/* 34 */ NULL, NULL, NULL, NULL,
16629/* 38 */ NULL, NULL, NULL, NULL,
16630/* 3C */ NULL, NULL, NULL, NULL,
16631/* 40 */ NULL, NULL, NULL, NULL,
16632/* 44 */ NULL, NULL, NULL, NULL,
16633/* 48 */ NULL, NULL, NULL, NULL,
16634/* 4C */ NULL, NULL, NULL, NULL,
16635/* 50 */ NULL, NULL, NULL, NULL,
16636/* 54 */ NULL, NULL, NULL, NULL,
16637/* 58 */ NULL, NULL, NULL, NULL,
16638/* 5C */ NULL, NULL, NULL, NULL,
16639/* 60 */ NULL, NULL, NULL, NULL,
16640/* 64 */ NULL, NULL, NULL, NULL,
16641/* 68 */ NULL, NULL, NULL, NULL,
16642/* 6C */ NULL, NULL, NULL, NULL,
16643/* 70 */ NULL, NULL, NULL, NULL,
16644/* 74 */ NULL, NULL, NULL, NULL,
16645/* 78 */ NULL, NULL, NULL, NULL,
16646/* 7C */ NULL, NULL, NULL, NULL,
16647/* 80 */ NULL, NULL, NULL, NULL,
16648/* 84 */ NULL, NULL, NULL, NULL,
9e525108
AM
16649/* 88 */ NULL, NULL, "pfnacc", NULL,
16650/* 8C */ NULL, NULL, "pfpnacc", NULL,
252b5132
RH
16651/* 90 */ "pfcmpge", NULL, NULL, NULL,
16652/* 94 */ "pfmin", NULL, "pfrcp", "pfrsqrt",
16653/* 98 */ NULL, NULL, "pfsub", NULL,
16654/* 9C */ NULL, NULL, "pfadd", NULL,
16655/* A0 */ "pfcmpgt", NULL, NULL, NULL,
16656/* A4 */ "pfmax", NULL, "pfrcpit1", "pfrsqit1",
16657/* A8 */ NULL, NULL, "pfsubr", NULL,
16658/* AC */ NULL, NULL, "pfacc", NULL,
16659/* B0 */ "pfcmpeq", NULL, NULL, NULL,
9beff690 16660/* B4 */ "pfmul", NULL, "pfrcpit2", "pmulhrw",
9e525108 16661/* B8 */ NULL, NULL, NULL, "pswapd",
252b5132
RH
16662/* BC */ NULL, NULL, NULL, "pavgusb",
16663/* C0 */ NULL, NULL, NULL, NULL,
16664/* C4 */ NULL, NULL, NULL, NULL,
16665/* C8 */ NULL, NULL, NULL, NULL,
16666/* CC */ NULL, NULL, NULL, NULL,
16667/* D0 */ NULL, NULL, NULL, NULL,
16668/* D4 */ NULL, NULL, NULL, NULL,
16669/* D8 */ NULL, NULL, NULL, NULL,
16670/* DC */ NULL, NULL, NULL, NULL,
16671/* E0 */ NULL, NULL, NULL, NULL,
16672/* E4 */ NULL, NULL, NULL, NULL,
16673/* E8 */ NULL, NULL, NULL, NULL,
16674/* EC */ NULL, NULL, NULL, NULL,
16675/* F0 */ NULL, NULL, NULL, NULL,
16676/* F4 */ NULL, NULL, NULL, NULL,
16677/* F8 */ NULL, NULL, NULL, NULL,
16678/* FC */ NULL, NULL, NULL, NULL,
16679};
16680
16681static void
26ca5450 16682OP_3DNowSuffix (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132
RH
16683{
16684 const char *mnemonic;
16685
16686 FETCH_DATA (the_info, codep + 1);
16687 /* AMD 3DNow! instructions are specified by an opcode suffix in the
16688 place where an 8-bit immediate would normally go. ie. the last
16689 byte of the instruction. */
ea397f5b 16690 obufp = mnemonicendp;
c608c12e 16691 mnemonic = Suffix3DNow[*codep++ & 0xff];
252b5132 16692 if (mnemonic)
2da11e11 16693 oappend (mnemonic);
252b5132
RH
16694 else
16695 {
16696 /* Since a variable sized modrm/sib chunk is between the start
16697 of the opcode (0x0f0f) and the opcode suffix, we need to do
16698 all the modrm processing first, and don't know until now that
16699 we have a bad opcode. This necessitates some cleaning up. */
ce518a5f
L
16700 op_out[0][0] = '\0';
16701 op_out[1][0] = '\0';
6608db57 16702 BadOp ();
252b5132 16703 }
ea397f5b 16704 mnemonicendp = obufp;
252b5132 16705}
c608c12e 16706
ea397f5b
L
16707static struct op simd_cmp_op[] =
16708{
16709 { STRING_COMMA_LEN ("eq") },
16710 { STRING_COMMA_LEN ("lt") },
16711 { STRING_COMMA_LEN ("le") },
16712 { STRING_COMMA_LEN ("unord") },
16713 { STRING_COMMA_LEN ("neq") },
16714 { STRING_COMMA_LEN ("nlt") },
16715 { STRING_COMMA_LEN ("nle") },
16716 { STRING_COMMA_LEN ("ord") }
c608c12e
AM
16717};
16718
16719static void
ad19981d 16720CMP_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
c608c12e
AM
16721{
16722 unsigned int cmp_type;
16723
16724 FETCH_DATA (the_info, codep + 1);
16725 cmp_type = *codep++ & 0xff;
c0f3af97 16726 if (cmp_type < ARRAY_SIZE (simd_cmp_op))
c608c12e 16727 {
ad19981d 16728 char suffix [3];
ea397f5b 16729 char *p = mnemonicendp - 2;
ad19981d
L
16730 suffix[0] = p[0];
16731 suffix[1] = p[1];
16732 suffix[2] = '\0';
ea397f5b
L
16733 sprintf (p, "%s%s", simd_cmp_op[cmp_type].name, suffix);
16734 mnemonicendp += simd_cmp_op[cmp_type].len;
c608c12e
AM
16735 }
16736 else
16737 {
ad19981d
L
16738 /* We have a reserved extension byte. Output it directly. */
16739 scratchbuf[0] = '$';
16740 print_operand_value (scratchbuf + 1, 1, cmp_type);
9ce09ba2 16741 oappend_maybe_intel (scratchbuf);
ad19981d 16742 scratchbuf[0] = '\0';
c608c12e
AM
16743 }
16744}
16745
9916071f
AP
16746static void
16747OP_Mwaitx (int bytemode ATTRIBUTE_UNUSED,
16748 int sizeflag ATTRIBUTE_UNUSED)
16749{
16750 /* mwaitx %eax,%ecx,%ebx */
16751 if (!intel_syntax)
16752 {
16753 const char **names = (address_mode == mode_64bit
16754 ? names64 : names32);
16755 strcpy (op_out[0], names[0]);
16756 strcpy (op_out[1], names[1]);
16757 strcpy (op_out[2], names[3]);
16758 two_source_ops = 1;
16759 }
16760 /* Skip mod/rm byte. */
16761 MODRM_CHECK;
16762 codep++;
16763}
16764
ca164297 16765static void
b844680a
L
16766OP_Mwait (int bytemode ATTRIBUTE_UNUSED,
16767 int sizeflag ATTRIBUTE_UNUSED)
16768{
16769 /* mwait %eax,%ecx */
16770 if (!intel_syntax)
16771 {
16772 const char **names = (address_mode == mode_64bit
16773 ? names64 : names32);
16774 strcpy (op_out[0], names[0]);
16775 strcpy (op_out[1], names[1]);
16776 two_source_ops = 1;
16777 }
16778 /* Skip mod/rm byte. */
16779 MODRM_CHECK;
16780 codep++;
16781}
16782
16783static void
16784OP_Monitor (int bytemode ATTRIBUTE_UNUSED,
16785 int sizeflag ATTRIBUTE_UNUSED)
ca164297 16786{
b844680a
L
16787 /* monitor %eax,%ecx,%edx" */
16788 if (!intel_syntax)
ca164297 16789 {
b844680a 16790 const char **op1_names;
cb712a9e
L
16791 const char **names = (address_mode == mode_64bit
16792 ? names64 : names32);
1d9f512f 16793
b844680a
L
16794 if (!(prefixes & PREFIX_ADDR))
16795 op1_names = (address_mode == mode_16bit
16796 ? names16 : names);
ca164297
L
16797 else
16798 {
b844680a 16799 /* Remove "addr16/addr32". */
f16cd0d5 16800 all_prefixes[last_addr_prefix] = 0;
b844680a
L
16801 op1_names = (address_mode != mode_32bit
16802 ? names32 : names16);
16803 used_prefixes |= PREFIX_ADDR;
ca164297 16804 }
b844680a
L
16805 strcpy (op_out[0], op1_names[0]);
16806 strcpy (op_out[1], names[1]);
16807 strcpy (op_out[2], names[2]);
16808 two_source_ops = 1;
ca164297 16809 }
b844680a
L
16810 /* Skip mod/rm byte. */
16811 MODRM_CHECK;
16812 codep++;
30123838
JB
16813}
16814
6608db57
KH
16815static void
16816BadOp (void)
2da11e11 16817{
6608db57
KH
16818 /* Throw away prefixes and 1st. opcode byte. */
16819 codep = insn_codep + 1;
2da11e11
AM
16820 oappend ("(bad)");
16821}
4cc91dba 16822
35c52694
L
16823static void
16824REP_Fixup (int bytemode, int sizeflag)
16825{
16826 /* The 0xf3 prefix should be displayed as "rep" for ins, outs, movs,
16827 lods and stos. */
35c52694 16828 if (prefixes & PREFIX_REPZ)
f16cd0d5 16829 all_prefixes[last_repz_prefix] = REP_PREFIX;
35c52694
L
16830
16831 switch (bytemode)
16832 {
16833 case al_reg:
16834 case eAX_reg:
16835 case indir_dx_reg:
16836 OP_IMREG (bytemode, sizeflag);
16837 break;
16838 case eDI_reg:
16839 OP_ESreg (bytemode, sizeflag);
16840 break;
16841 case eSI_reg:
16842 OP_DSreg (bytemode, sizeflag);
16843 break;
16844 default:
16845 abort ();
16846 break;
16847 }
16848}
f5804c90 16849
7e8b059b
L
16850/* For BND-prefixed instructions 0xF2 prefix should be displayed as
16851 "bnd". */
16852
16853static void
16854BND_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
16855{
16856 if (prefixes & PREFIX_REPNZ)
16857 all_prefixes[last_repnz_prefix] = BND_PREFIX;
16858}
16859
04ef582a
L
16860/* For NOTRACK-prefixed instructions, 0x3E prefix should be displayed as
16861 "notrack". */
16862
16863static void
16864NOTRACK_Fixup (int bytemode ATTRIBUTE_UNUSED,
16865 int sizeflag ATTRIBUTE_UNUSED)
16866{
9fef80d6 16867 if (active_seg_prefix == PREFIX_DS
04ef582a
L
16868 && (address_mode != mode_64bit || last_data_prefix < 0))
16869 {
4e9ac44a 16870 /* NOTRACK prefix is only valid on indirect branch instructions.
9fef80d6 16871 NB: DATA prefix is unsupported for Intel64. */
04ef582a
L
16872 active_seg_prefix = 0;
16873 all_prefixes[last_seg_prefix] = NOTRACK_PREFIX;
16874 }
16875}
16876
42164a71
L
16877/* Similar to OP_E. But the 0xf2/0xf3 prefixes should be displayed as
16878 "xacquire"/"xrelease" for memory operand if there is a LOCK prefix.
16879 */
16880
16881static void
16882HLE_Fixup1 (int bytemode, int sizeflag)
16883{
16884 if (modrm.mod != 3
16885 && (prefixes & PREFIX_LOCK) != 0)
16886 {
16887 if (prefixes & PREFIX_REPZ)
16888 all_prefixes[last_repz_prefix] = XRELEASE_PREFIX;
16889 if (prefixes & PREFIX_REPNZ)
16890 all_prefixes[last_repnz_prefix] = XACQUIRE_PREFIX;
16891 }
16892
16893 OP_E (bytemode, sizeflag);
16894}
16895
16896/* Similar to OP_E. But the 0xf2/0xf3 prefixes should be displayed as
16897 "xacquire"/"xrelease" for memory operand. No check for LOCK prefix.
16898 */
16899
16900static void
16901HLE_Fixup2 (int bytemode, int sizeflag)
16902{
16903 if (modrm.mod != 3)
16904 {
16905 if (prefixes & PREFIX_REPZ)
16906 all_prefixes[last_repz_prefix] = XRELEASE_PREFIX;
16907 if (prefixes & PREFIX_REPNZ)
16908 all_prefixes[last_repnz_prefix] = XACQUIRE_PREFIX;
16909 }
16910
16911 OP_E (bytemode, sizeflag);
16912}
16913
16914/* Similar to OP_E. But the 0xf3 prefixes should be displayed as
16915 "xrelease" for memory operand. No check for LOCK prefix. */
16916
16917static void
16918HLE_Fixup3 (int bytemode, int sizeflag)
16919{
16920 if (modrm.mod != 3
16921 && last_repz_prefix > last_repnz_prefix
16922 && (prefixes & PREFIX_REPZ) != 0)
16923 all_prefixes[last_repz_prefix] = XRELEASE_PREFIX;
16924
16925 OP_E (bytemode, sizeflag);
16926}
16927
f5804c90
L
16928static void
16929CMPXCHG8B_Fixup (int bytemode, int sizeflag)
16930{
161a04f6
L
16931 USED_REX (REX_W);
16932 if (rex & REX_W)
f5804c90
L
16933 {
16934 /* Change cmpxchg8b to cmpxchg16b. */
ea397f5b
L
16935 char *p = mnemonicendp - 2;
16936 mnemonicendp = stpcpy (p, "16b");
fb9c77c7 16937 bytemode = o_mode;
f5804c90 16938 }
42164a71
L
16939 else if ((prefixes & PREFIX_LOCK) != 0)
16940 {
16941 if (prefixes & PREFIX_REPZ)
16942 all_prefixes[last_repz_prefix] = XRELEASE_PREFIX;
16943 if (prefixes & PREFIX_REPNZ)
16944 all_prefixes[last_repnz_prefix] = XACQUIRE_PREFIX;
16945 }
16946
f5804c90
L
16947 OP_M (bytemode, sizeflag);
16948}
42903f7f
L
16949
16950static void
16951XMM_Fixup (int reg, int sizeflag ATTRIBUTE_UNUSED)
16952{
b9733481
L
16953 const char **names;
16954
c0f3af97
L
16955 if (need_vex)
16956 {
16957 switch (vex.length)
16958 {
16959 case 128:
b9733481 16960 names = names_xmm;
c0f3af97
L
16961 break;
16962 case 256:
b9733481 16963 names = names_ymm;
c0f3af97
L
16964 break;
16965 default:
16966 abort ();
16967 }
16968 }
16969 else
b9733481
L
16970 names = names_xmm;
16971 oappend (names[reg]);
42903f7f 16972}
381d071f
L
16973
16974static void
16975CRC32_Fixup (int bytemode, int sizeflag)
16976{
16977 /* Add proper suffix to "crc32". */
ea397f5b 16978 char *p = mnemonicendp;
381d071f
L
16979
16980 switch (bytemode)
16981 {
16982 case b_mode:
20592a94 16983 if (intel_syntax)
ea397f5b 16984 goto skip;
20592a94 16985
381d071f
L
16986 *p++ = 'b';
16987 break;
16988 case v_mode:
20592a94 16989 if (intel_syntax)
ea397f5b 16990 goto skip;
20592a94 16991
381d071f
L
16992 USED_REX (REX_W);
16993 if (rex & REX_W)
16994 *p++ = 'q';
7bb15c6f 16995 else
f16cd0d5
L
16996 {
16997 if (sizeflag & DFLAG)
16998 *p++ = 'l';
16999 else
17000 *p++ = 'w';
17001 used_prefixes |= (prefixes & PREFIX_DATA);
17002 }
381d071f
L
17003 break;
17004 default:
17005 oappend (INTERNAL_DISASSEMBLER_ERROR);
17006 break;
17007 }
ea397f5b 17008 mnemonicendp = p;
381d071f
L
17009 *p = '\0';
17010
ea397f5b 17011skip:
381d071f
L
17012 if (modrm.mod == 3)
17013 {
17014 int add;
17015
17016 /* Skip mod/rm byte. */
17017 MODRM_CHECK;
17018 codep++;
17019
17020 USED_REX (REX_B);
17021 add = (rex & REX_B) ? 8 : 0;
17022 if (bytemode == b_mode)
17023 {
17024 USED_REX (0);
17025 if (rex)
17026 oappend (names8rex[modrm.rm + add]);
17027 else
17028 oappend (names8[modrm.rm + add]);
17029 }
17030 else
17031 {
17032 USED_REX (REX_W);
17033 if (rex & REX_W)
17034 oappend (names64[modrm.rm + add]);
17035 else if ((prefixes & PREFIX_DATA))
17036 oappend (names16[modrm.rm + add]);
17037 else
17038 oappend (names32[modrm.rm + add]);
17039 }
17040 }
17041 else
9344ff29 17042 OP_E (bytemode, sizeflag);
381d071f 17043}
85f10a01 17044
eacc9c89
L
17045static void
17046FXSAVE_Fixup (int bytemode, int sizeflag)
17047{
17048 /* Add proper suffix to "fxsave" and "fxrstor". */
17049 USED_REX (REX_W);
17050 if (rex & REX_W)
17051 {
17052 char *p = mnemonicendp;
17053 *p++ = '6';
17054 *p++ = '4';
17055 *p = '\0';
17056 mnemonicendp = p;
17057 }
17058 OP_M (bytemode, sizeflag);
17059}
17060
15c7c1d8
JB
17061static void
17062PCMPESTR_Fixup (int bytemode, int sizeflag)
17063{
17064 /* Add proper suffix to "{,v}pcmpestr{i,m}". */
17065 if (!intel_syntax)
17066 {
17067 char *p = mnemonicendp;
17068
17069 USED_REX (REX_W);
17070 if (rex & REX_W)
17071 *p++ = 'q';
17072 else if (sizeflag & SUFFIX_ALWAYS)
17073 *p++ = 'l';
17074
17075 *p = '\0';
17076 mnemonicendp = p;
17077 }
17078
17079 OP_EX (bytemode, sizeflag);
17080}
17081
c0f3af97
L
17082/* Display the destination register operand for instructions with
17083 VEX. */
17084
17085static void
17086OP_VEX (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
17087{
539f890d 17088 int reg;
b9733481
L
17089 const char **names;
17090
c0f3af97
L
17091 if (!need_vex)
17092 abort ();
17093
17094 if (!need_vex_reg)
17095 return;
17096
539f890d 17097 reg = vex.register_specifier;
43234a1e
L
17098 if (vex.evex)
17099 {
17100 if (!vex.v)
17101 reg += 16;
17102 }
17103
539f890d
L
17104 if (bytemode == vex_scalar_mode)
17105 {
17106 oappend (names_xmm[reg]);
17107 return;
17108 }
17109
c0f3af97
L
17110 switch (vex.length)
17111 {
17112 case 128:
17113 switch (bytemode)
17114 {
17115 case vex_mode:
17116 case vex128_mode:
6c30d220 17117 case vex_vsib_q_w_dq_mode:
5fc35d96 17118 case vex_vsib_q_w_d_mode:
cb21baef
L
17119 names = names_xmm;
17120 break;
17121 case dq_mode:
17122 if (vex.w)
17123 names = names64;
17124 else
17125 names = names32;
c0f3af97 17126 break;
1ba585e8 17127 case mask_bd_mode:
43234a1e 17128 case mask_mode:
9889cbb1
L
17129 if (reg > 0x7)
17130 {
17131 oappend ("(bad)");
17132 return;
17133 }
43234a1e
L
17134 names = names_mask;
17135 break;
c0f3af97
L
17136 default:
17137 abort ();
17138 return;
17139 }
c0f3af97
L
17140 break;
17141 case 256:
17142 switch (bytemode)
17143 {
17144 case vex_mode:
17145 case vex256_mode:
6c30d220
L
17146 names = names_ymm;
17147 break;
17148 case vex_vsib_q_w_dq_mode:
5fc35d96 17149 case vex_vsib_q_w_d_mode:
6c30d220 17150 names = vex.w ? names_ymm : names_xmm;
c0f3af97 17151 break;
1ba585e8 17152 case mask_bd_mode:
43234a1e 17153 case mask_mode:
9889cbb1
L
17154 if (reg > 0x7)
17155 {
17156 oappend ("(bad)");
17157 return;
17158 }
43234a1e
L
17159 names = names_mask;
17160 break;
c0f3af97 17161 default:
a37a2806
NC
17162 /* See PR binutils/20893 for a reproducer. */
17163 oappend ("(bad)");
c0f3af97
L
17164 return;
17165 }
c0f3af97 17166 break;
43234a1e
L
17167 case 512:
17168 names = names_zmm;
17169 break;
c0f3af97
L
17170 default:
17171 abort ();
17172 break;
17173 }
539f890d 17174 oappend (names[reg]);
c0f3af97
L
17175}
17176
922d8de8
DR
17177/* Get the VEX immediate byte without moving codep. */
17178
17179static unsigned char
ccc5981b 17180get_vex_imm8 (int sizeflag, int opnum)
922d8de8
DR
17181{
17182 int bytes_before_imm = 0;
17183
922d8de8
DR
17184 if (modrm.mod != 3)
17185 {
17186 /* There are SIB/displacement bytes. */
17187 if ((sizeflag & AFLAG) || address_mode == mode_64bit)
6c067bbb 17188 {
922d8de8 17189 /* 32/64 bit address mode */
6c067bbb 17190 int base = modrm.rm;
922d8de8
DR
17191
17192 /* Check SIB byte. */
6c067bbb
RM
17193 if (base == 4)
17194 {
17195 FETCH_DATA (the_info, codep + 1);
17196 base = *codep & 7;
17197 /* When decoding the third source, don't increase
17198 bytes_before_imm as this has already been incremented
17199 by one in OP_E_memory while decoding the second
17200 source operand. */
17201 if (opnum == 0)
17202 bytes_before_imm++;
17203 }
17204
17205 /* Don't increase bytes_before_imm when decoding the third source,
17206 it has already been incremented by OP_E_memory while decoding
17207 the second source operand. */
17208 if (opnum == 0)
17209 {
17210 switch (modrm.mod)
17211 {
17212 case 0:
17213 /* When modrm.rm == 5 or modrm.rm == 4 and base in
17214 SIB == 5, there is a 4 byte displacement. */
17215 if (base != 5)
17216 /* No displacement. */
17217 break;
1a0670f3 17218 /* Fall through. */
6c067bbb
RM
17219 case 2:
17220 /* 4 byte displacement. */
17221 bytes_before_imm += 4;
17222 break;
17223 case 1:
17224 /* 1 byte displacement. */
17225 bytes_before_imm++;
17226 break;
17227 }
17228 }
17229 }
922d8de8 17230 else
02e647f9
SP
17231 {
17232 /* 16 bit address mode */
6c067bbb
RM
17233 /* Don't increase bytes_before_imm when decoding the third source,
17234 it has already been incremented by OP_E_memory while decoding
17235 the second source operand. */
17236 if (opnum == 0)
17237 {
02e647f9
SP
17238 switch (modrm.mod)
17239 {
17240 case 0:
17241 /* When modrm.rm == 6, there is a 2 byte displacement. */
17242 if (modrm.rm != 6)
17243 /* No displacement. */
17244 break;
1a0670f3 17245 /* Fall through. */
02e647f9
SP
17246 case 2:
17247 /* 2 byte displacement. */
17248 bytes_before_imm += 2;
17249 break;
17250 case 1:
17251 /* 1 byte displacement: when decoding the third source,
17252 don't increase bytes_before_imm as this has already
17253 been incremented by one in OP_E_memory while decoding
17254 the second source operand. */
17255 if (opnum == 0)
17256 bytes_before_imm++;
ccc5981b 17257
02e647f9
SP
17258 break;
17259 }
922d8de8
DR
17260 }
17261 }
17262 }
17263
17264 FETCH_DATA (the_info, codep + bytes_before_imm + 1);
17265 return codep [bytes_before_imm];
17266}
17267
17268static void
17269OP_EX_VexReg (int bytemode, int sizeflag, int reg)
17270{
b9733481
L
17271 const char **names;
17272
922d8de8
DR
17273 if (reg == -1 && modrm.mod != 3)
17274 {
17275 OP_E_memory (bytemode, sizeflag);
17276 return;
17277 }
17278 else
17279 {
17280 if (reg == -1)
17281 {
17282 reg = modrm.rm;
17283 USED_REX (REX_B);
17284 if (rex & REX_B)
17285 reg += 8;
17286 }
17287 else if (reg > 7 && address_mode != mode_64bit)
17288 BadOp ();
17289 }
17290
17291 switch (vex.length)
17292 {
17293 case 128:
b9733481 17294 names = names_xmm;
922d8de8
DR
17295 break;
17296 case 256:
b9733481 17297 names = names_ymm;
922d8de8
DR
17298 break;
17299 default:
17300 abort ();
17301 }
b9733481 17302 oappend (names[reg]);
922d8de8
DR
17303}
17304
a683cc34
SP
17305static void
17306OP_EX_VexImmW (int bytemode, int sizeflag)
17307{
17308 int reg = -1;
17309 static unsigned char vex_imm8;
17310
17311 if (vex_w_done == 0)
17312 {
17313 vex_w_done = 1;
17314
17315 /* Skip mod/rm byte. */
17316 MODRM_CHECK;
17317 codep++;
17318
17319 vex_imm8 = get_vex_imm8 (sizeflag, 0);
17320
17321 if (vex.w)
17322 reg = vex_imm8 >> 4;
17323
17324 OP_EX_VexReg (bytemode, sizeflag, reg);
17325 }
17326 else if (vex_w_done == 1)
17327 {
17328 vex_w_done = 2;
17329
17330 if (!vex.w)
17331 reg = vex_imm8 >> 4;
17332
17333 OP_EX_VexReg (bytemode, sizeflag, reg);
17334 }
17335 else
17336 {
17337 /* Output the imm8 directly. */
17338 scratchbuf[0] = '$';
17339 print_operand_value (scratchbuf + 1, 1, vex_imm8 & 0xf);
9ce09ba2 17340 oappend_maybe_intel (scratchbuf);
a683cc34
SP
17341 scratchbuf[0] = '\0';
17342 codep++;
17343 }
17344}
17345
5dd85c99
SP
17346static void
17347OP_Vex_2src (int bytemode, int sizeflag)
17348{
17349 if (modrm.mod == 3)
17350 {
b9733481 17351 int reg = modrm.rm;
5dd85c99 17352 USED_REX (REX_B);
b9733481
L
17353 if (rex & REX_B)
17354 reg += 8;
17355 oappend (names_xmm[reg]);
5dd85c99
SP
17356 }
17357 else
17358 {
17359 if (intel_syntax
17360 && (bytemode == v_mode || bytemode == v_swap_mode))
17361 {
17362 bytemode = (prefixes & PREFIX_DATA) ? x_mode : q_mode;
17363 used_prefixes |= (prefixes & PREFIX_DATA);
17364 }
17365 OP_E (bytemode, sizeflag);
17366 }
17367}
17368
17369static void
17370OP_Vex_2src_1 (int bytemode, int sizeflag)
17371{
17372 if (modrm.mod == 3)
17373 {
17374 /* Skip mod/rm byte. */
17375 MODRM_CHECK;
17376 codep++;
17377 }
17378
17379 if (vex.w)
b9733481 17380 oappend (names_xmm[vex.register_specifier]);
5dd85c99
SP
17381 else
17382 OP_Vex_2src (bytemode, sizeflag);
17383}
17384
17385static void
17386OP_Vex_2src_2 (int bytemode, int sizeflag)
17387{
17388 if (vex.w)
17389 OP_Vex_2src (bytemode, sizeflag);
17390 else
b9733481 17391 oappend (names_xmm[vex.register_specifier]);
5dd85c99
SP
17392}
17393
922d8de8
DR
17394static void
17395OP_EX_VexW (int bytemode, int sizeflag)
17396{
17397 int reg = -1;
17398
17399 if (!vex_w_done)
17400 {
17401 vex_w_done = 1;
41effecb
SP
17402
17403 /* Skip mod/rm byte. */
17404 MODRM_CHECK;
17405 codep++;
17406
922d8de8 17407 if (vex.w)
ccc5981b 17408 reg = get_vex_imm8 (sizeflag, 0) >> 4;
922d8de8
DR
17409 }
17410 else
17411 {
17412 if (!vex.w)
ccc5981b 17413 reg = get_vex_imm8 (sizeflag, 1) >> 4;
922d8de8
DR
17414 }
17415
17416 OP_EX_VexReg (bytemode, sizeflag, reg);
17417}
17418
922d8de8
DR
17419static void
17420VEXI4_Fixup (int bytemode ATTRIBUTE_UNUSED,
17421 int sizeflag ATTRIBUTE_UNUSED)
17422{
17423 /* Skip the immediate byte and check for invalid bits. */
17424 FETCH_DATA (the_info, codep + 1);
17425 if (*codep++ & 0xf)
17426 BadOp ();
17427}
17428
c0f3af97
L
17429static void
17430OP_REG_VexI4 (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
17431{
17432 int reg;
b9733481
L
17433 const char **names;
17434
c0f3af97
L
17435 FETCH_DATA (the_info, codep + 1);
17436 reg = *codep++;
17437
17438 if (bytemode != x_mode)
17439 abort ();
17440
17441 if (reg & 0xf)
17442 BadOp ();
17443
17444 reg >>= 4;
dae39acc
L
17445 if (reg > 7 && address_mode != mode_64bit)
17446 BadOp ();
17447
c0f3af97
L
17448 switch (vex.length)
17449 {
17450 case 128:
b9733481 17451 names = names_xmm;
c0f3af97
L
17452 break;
17453 case 256:
b9733481 17454 names = names_ymm;
c0f3af97
L
17455 break;
17456 default:
17457 abort ();
17458 }
b9733481 17459 oappend (names[reg]);
c0f3af97
L
17460}
17461
922d8de8
DR
17462static void
17463OP_XMM_VexW (int bytemode, int sizeflag)
17464{
17465 /* Turn off the REX.W bit since it is used for swapping operands
17466 now. */
17467 rex &= ~REX_W;
17468 OP_XMM (bytemode, sizeflag);
17469}
17470
c0f3af97
L
17471static void
17472OP_EX_Vex (int bytemode, int sizeflag)
17473{
17474 if (modrm.mod != 3)
17475 {
17476 if (vex.register_specifier != 0)
17477 BadOp ();
17478 need_vex_reg = 0;
17479 }
17480 OP_EX (bytemode, sizeflag);
17481}
17482
17483static void
17484OP_XMM_Vex (int bytemode, int sizeflag)
17485{
17486 if (modrm.mod != 3)
17487 {
17488 if (vex.register_specifier != 0)
17489 BadOp ();
17490 need_vex_reg = 0;
17491 }
17492 OP_XMM (bytemode, sizeflag);
17493}
17494
17495static void
17496VZERO_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
17497{
17498 switch (vex.length)
17499 {
17500 case 128:
ea397f5b 17501 mnemonicendp = stpcpy (obuf, "vzeroupper");
c0f3af97
L
17502 break;
17503 case 256:
ea397f5b 17504 mnemonicendp = stpcpy (obuf, "vzeroall");
c0f3af97
L
17505 break;
17506 default:
17507 abort ();
17508 }
17509}
17510
ea397f5b
L
17511static struct op vex_cmp_op[] =
17512{
17513 { STRING_COMMA_LEN ("eq") },
17514 { STRING_COMMA_LEN ("lt") },
17515 { STRING_COMMA_LEN ("le") },
17516 { STRING_COMMA_LEN ("unord") },
17517 { STRING_COMMA_LEN ("neq") },
17518 { STRING_COMMA_LEN ("nlt") },
17519 { STRING_COMMA_LEN ("nle") },
17520 { STRING_COMMA_LEN ("ord") },
17521 { STRING_COMMA_LEN ("eq_uq") },
17522 { STRING_COMMA_LEN ("nge") },
17523 { STRING_COMMA_LEN ("ngt") },
17524 { STRING_COMMA_LEN ("false") },
17525 { STRING_COMMA_LEN ("neq_oq") },
17526 { STRING_COMMA_LEN ("ge") },
17527 { STRING_COMMA_LEN ("gt") },
17528 { STRING_COMMA_LEN ("true") },
17529 { STRING_COMMA_LEN ("eq_os") },
17530 { STRING_COMMA_LEN ("lt_oq") },
17531 { STRING_COMMA_LEN ("le_oq") },
17532 { STRING_COMMA_LEN ("unord_s") },
17533 { STRING_COMMA_LEN ("neq_us") },
17534 { STRING_COMMA_LEN ("nlt_uq") },
17535 { STRING_COMMA_LEN ("nle_uq") },
17536 { STRING_COMMA_LEN ("ord_s") },
17537 { STRING_COMMA_LEN ("eq_us") },
17538 { STRING_COMMA_LEN ("nge_uq") },
17539 { STRING_COMMA_LEN ("ngt_uq") },
17540 { STRING_COMMA_LEN ("false_os") },
17541 { STRING_COMMA_LEN ("neq_os") },
17542 { STRING_COMMA_LEN ("ge_oq") },
17543 { STRING_COMMA_LEN ("gt_oq") },
17544 { STRING_COMMA_LEN ("true_us") },
c0f3af97
L
17545};
17546
17547static void
17548VCMP_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
17549{
17550 unsigned int cmp_type;
17551
17552 FETCH_DATA (the_info, codep + 1);
17553 cmp_type = *codep++ & 0xff;
17554 if (cmp_type < ARRAY_SIZE (vex_cmp_op))
17555 {
17556 char suffix [3];
ea397f5b 17557 char *p = mnemonicendp - 2;
c0f3af97
L
17558 suffix[0] = p[0];
17559 suffix[1] = p[1];
17560 suffix[2] = '\0';
ea397f5b
L
17561 sprintf (p, "%s%s", vex_cmp_op[cmp_type].name, suffix);
17562 mnemonicendp += vex_cmp_op[cmp_type].len;
c0f3af97
L
17563 }
17564 else
17565 {
17566 /* We have a reserved extension byte. Output it directly. */
17567 scratchbuf[0] = '$';
17568 print_operand_value (scratchbuf + 1, 1, cmp_type);
9ce09ba2 17569 oappend_maybe_intel (scratchbuf);
c0f3af97
L
17570 scratchbuf[0] = '\0';
17571 }
17572}
17573
43234a1e
L
17574static void
17575VPCMP_Fixup (int bytemode ATTRIBUTE_UNUSED,
17576 int sizeflag ATTRIBUTE_UNUSED)
17577{
17578 unsigned int cmp_type;
17579
17580 if (!vex.evex)
17581 abort ();
17582
17583 FETCH_DATA (the_info, codep + 1);
17584 cmp_type = *codep++ & 0xff;
17585 /* There are aliases for immediates 0, 1, 2, 4, 5, 6.
17586 If it's the case, print suffix, otherwise - print the immediate. */
17587 if (cmp_type < ARRAY_SIZE (simd_cmp_op)
17588 && cmp_type != 3
17589 && cmp_type != 7)
17590 {
17591 char suffix [3];
17592 char *p = mnemonicendp - 2;
17593
17594 /* vpcmp* can have both one- and two-lettered suffix. */
17595 if (p[0] == 'p')
17596 {
17597 p++;
17598 suffix[0] = p[0];
17599 suffix[1] = '\0';
17600 }
17601 else
17602 {
17603 suffix[0] = p[0];
17604 suffix[1] = p[1];
17605 suffix[2] = '\0';
17606 }
17607
17608 sprintf (p, "%s%s", simd_cmp_op[cmp_type].name, suffix);
17609 mnemonicendp += simd_cmp_op[cmp_type].len;
17610 }
17611 else
17612 {
17613 /* We have a reserved extension byte. Output it directly. */
17614 scratchbuf[0] = '$';
17615 print_operand_value (scratchbuf + 1, 1, cmp_type);
9ce09ba2 17616 oappend_maybe_intel (scratchbuf);
43234a1e
L
17617 scratchbuf[0] = '\0';
17618 }
17619}
17620
ea397f5b
L
17621static const struct op pclmul_op[] =
17622{
17623 { STRING_COMMA_LEN ("lql") },
17624 { STRING_COMMA_LEN ("hql") },
17625 { STRING_COMMA_LEN ("lqh") },
17626 { STRING_COMMA_LEN ("hqh") }
c0f3af97
L
17627};
17628
17629static void
17630PCLMUL_Fixup (int bytemode ATTRIBUTE_UNUSED,
17631 int sizeflag ATTRIBUTE_UNUSED)
17632{
17633 unsigned int pclmul_type;
17634
17635 FETCH_DATA (the_info, codep + 1);
17636 pclmul_type = *codep++ & 0xff;
17637 switch (pclmul_type)
17638 {
17639 case 0x10:
17640 pclmul_type = 2;
17641 break;
17642 case 0x11:
17643 pclmul_type = 3;
17644 break;
17645 default:
17646 break;
7bb15c6f 17647 }
c0f3af97
L
17648 if (pclmul_type < ARRAY_SIZE (pclmul_op))
17649 {
17650 char suffix [4];
ea397f5b 17651 char *p = mnemonicendp - 3;
c0f3af97
L
17652 suffix[0] = p[0];
17653 suffix[1] = p[1];
17654 suffix[2] = p[2];
17655 suffix[3] = '\0';
ea397f5b
L
17656 sprintf (p, "%s%s", pclmul_op[pclmul_type].name, suffix);
17657 mnemonicendp += pclmul_op[pclmul_type].len;
c0f3af97
L
17658 }
17659 else
17660 {
17661 /* We have a reserved extension byte. Output it directly. */
17662 scratchbuf[0] = '$';
17663 print_operand_value (scratchbuf + 1, 1, pclmul_type);
9ce09ba2 17664 oappend_maybe_intel (scratchbuf);
c0f3af97
L
17665 scratchbuf[0] = '\0';
17666 }
17667}
17668
f1f8f695
L
17669static void
17670MOVBE_Fixup (int bytemode, int sizeflag)
17671{
17672 /* Add proper suffix to "movbe". */
ea397f5b 17673 char *p = mnemonicendp;
f1f8f695
L
17674
17675 switch (bytemode)
17676 {
17677 case v_mode:
17678 if (intel_syntax)
ea397f5b 17679 goto skip;
f1f8f695
L
17680
17681 USED_REX (REX_W);
17682 if (sizeflag & SUFFIX_ALWAYS)
17683 {
17684 if (rex & REX_W)
17685 *p++ = 'q';
f1f8f695 17686 else
f16cd0d5
L
17687 {
17688 if (sizeflag & DFLAG)
17689 *p++ = 'l';
17690 else
17691 *p++ = 'w';
17692 used_prefixes |= (prefixes & PREFIX_DATA);
17693 }
f1f8f695 17694 }
f1f8f695
L
17695 break;
17696 default:
17697 oappend (INTERNAL_DISASSEMBLER_ERROR);
17698 break;
17699 }
ea397f5b 17700 mnemonicendp = p;
f1f8f695
L
17701 *p = '\0';
17702
ea397f5b 17703skip:
f1f8f695
L
17704 OP_M (bytemode, sizeflag);
17705}
f88c9eb0
SP
17706
17707static void
17708OP_LWPCB_E (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
17709{
17710 int reg;
17711 const char **names;
17712
17713 /* Skip mod/rm byte. */
17714 MODRM_CHECK;
17715 codep++;
17716
17717 if (vex.w)
17718 names = names64;
f88c9eb0 17719 else
ce7d077e 17720 names = names32;
f88c9eb0
SP
17721
17722 reg = modrm.rm;
17723 USED_REX (REX_B);
17724 if (rex & REX_B)
17725 reg += 8;
17726
17727 oappend (names[reg]);
17728}
17729
17730static void
17731OP_LWP_E (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
17732{
17733 const char **names;
17734
17735 if (vex.w)
17736 names = names64;
f88c9eb0 17737 else
ce7d077e 17738 names = names32;
f88c9eb0
SP
17739
17740 oappend (names[vex.register_specifier]);
17741}
43234a1e
L
17742
17743static void
17744OP_Mask (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
17745{
17746 if (!vex.evex
1ba585e8 17747 || (bytemode != mask_mode && bytemode != mask_bd_mode))
43234a1e
L
17748 abort ();
17749
17750 USED_REX (REX_R);
17751 if ((rex & REX_R) != 0 || !vex.r)
17752 {
17753 BadOp ();
17754 return;
17755 }
17756
17757 oappend (names_mask [modrm.reg]);
17758}
17759
17760static void
17761OP_Rounding (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
17762{
17763 if (!vex.evex
17764 || (bytemode != evex_rounding_mode
17765 && bytemode != evex_sae_mode))
17766 abort ();
17767 if (modrm.mod == 3 && vex.b)
17768 switch (bytemode)
17769 {
17770 case evex_rounding_mode:
17771 oappend (names_rounding[vex.ll]);
17772 break;
17773 case evex_sae_mode:
17774 oappend ("{sae}");
17775 break;
17776 default:
17777 break;
17778 }
17779}
This page took 2.183063 seconds and 4 git commands to generate.