x86: Properly handle __ehdr_start
[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 }
8976381e 379#define EXw { OP_EX, w_mode }
09a2c6cf 380#define EXd { OP_EX, d_mode }
539f890d 381#define EXdScalar { OP_EX, d_scalar_mode }
fa99fab2 382#define EXdS { OP_EX, d_swap_mode }
43234a1e 383#define EXdScalarS { OP_EX, d_scalar_swap_mode }
09a2c6cf 384#define EXq { OP_EX, q_mode }
539f890d
L
385#define EXqScalar { OP_EX, q_scalar_mode }
386#define EXqScalarS { OP_EX, q_scalar_swap_mode }
b6169b20 387#define EXqS { OP_EX, q_swap_mode }
09a2c6cf 388#define EXx { OP_EX, x_mode }
b6169b20 389#define EXxS { OP_EX, x_swap_mode }
c0f3af97 390#define EXxmm { OP_EX, xmm_mode }
43234a1e 391#define EXymm { OP_EX, ymm_mode }
c0f3af97 392#define EXxmmq { OP_EX, xmmq_mode }
43234a1e 393#define EXEvexHalfBcstXmmq { OP_EX, evex_half_bcst_xmmq_mode }
6c30d220
L
394#define EXxmm_mb { OP_EX, xmm_mb_mode }
395#define EXxmm_mw { OP_EX, xmm_mw_mode }
396#define EXxmm_md { OP_EX, xmm_md_mode }
397#define EXxmm_mq { OP_EX, xmm_mq_mode }
43234a1e 398#define EXxmm_mdq { OP_EX, xmm_mdq_mode }
6c30d220
L
399#define EXxmmdw { OP_EX, xmmdw_mode }
400#define EXxmmqd { OP_EX, xmmqd_mode }
c0f3af97 401#define EXymmq { OP_EX, ymmq_mode }
0bfee649 402#define EXVexWdq { OP_EX, vex_w_dq_mode }
1c480963 403#define EXVexWdqScalar { OP_EX, vex_scalar_w_dq_mode }
43234a1e
L
404#define EXEvexXGscat { OP_EX, evex_x_gscat_mode }
405#define EXEvexXNoBcst { OP_EX, evex_x_nobcst_mode }
ce518a5f
L
406#define MS { OP_MS, v_mode }
407#define XS { OP_XS, v_mode }
09335d05 408#define EMCq { OP_EMC, q_mode }
ce518a5f 409#define MXC { OP_MXC, 0 }
ce518a5f 410#define OPSUF { OP_3DNowSuffix, 0 }
ad19981d 411#define CMP { CMP_Fixup, 0 }
42903f7f 412#define XMM0 { XMM_Fixup, 0 }
eacc9c89 413#define FXSAVE { FXSAVE_Fixup, 0 }
5dd85c99
SP
414#define Vex_2src_1 { OP_Vex_2src_1, 0 }
415#define Vex_2src_2 { OP_Vex_2src_2, 0 }
252b5132 416
c0f3af97 417#define Vex { OP_VEX, vex_mode }
539f890d 418#define VexScalar { OP_VEX, vex_scalar_mode }
6c30d220 419#define VexGatherQ { OP_VEX, vex_vsib_q_w_dq_mode }
c0f3af97
L
420#define Vex128 { OP_VEX, vex128_mode }
421#define Vex256 { OP_VEX, vex256_mode }
cb21baef 422#define VexGdq { OP_VEX, dq_mode }
922d8de8 423#define VexI4 { VEXI4_Fixup, 0}
c0f3af97 424#define EXdVex { OP_EX_Vex, d_mode }
fa99fab2 425#define EXdVexS { OP_EX_Vex, d_swap_mode }
539f890d 426#define EXdVexScalarS { OP_EX_Vex, d_scalar_swap_mode }
c0f3af97 427#define EXqVex { OP_EX_Vex, q_mode }
fa99fab2 428#define EXqVexS { OP_EX_Vex, q_swap_mode }
539f890d 429#define EXqVexScalarS { OP_EX_Vex, q_scalar_swap_mode }
922d8de8
DR
430#define EXVexW { OP_EX_VexW, x_mode }
431#define EXdVexW { OP_EX_VexW, d_mode }
432#define EXqVexW { OP_EX_VexW, q_mode }
a683cc34 433#define EXVexImmW { OP_EX_VexImmW, x_mode }
c0f3af97 434#define XMVex { OP_XMM_Vex, 0 }
539f890d 435#define XMVexScalar { OP_XMM_Vex, scalar_mode }
922d8de8 436#define XMVexW { OP_XMM_VexW, 0 }
c0f3af97
L
437#define XMVexI4 { OP_REG_VexI4, x_mode }
438#define PCLMUL { PCLMUL_Fixup, 0 }
439#define VZERO { VZERO_Fixup, 0 }
440#define VCMP { VCMP_Fixup, 0 }
43234a1e
L
441#define VPCMP { VPCMP_Fixup, 0 }
442
443#define EXxEVexR { OP_Rounding, evex_rounding_mode }
444#define EXxEVexS { OP_Rounding, evex_sae_mode }
445
446#define XMask { OP_Mask, mask_mode }
447#define MaskG { OP_G, mask_mode }
448#define MaskE { OP_E, mask_mode }
1ba585e8 449#define MaskBDE { OP_E, mask_bd_mode }
43234a1e
L
450#define MaskR { OP_R, mask_mode }
451#define MaskVex { OP_VEX, mask_mode }
c0f3af97 452
6c30d220 453#define MVexVSIBDWpX { OP_M, vex_vsib_d_w_dq_mode }
5fc35d96 454#define MVexVSIBDQWpX { OP_M, vex_vsib_d_w_d_mode }
6c30d220 455#define MVexVSIBQWpX { OP_M, vex_vsib_q_w_dq_mode }
5fc35d96 456#define MVexVSIBQDWpX { OP_M, vex_vsib_q_w_d_mode }
6c30d220 457
35c52694 458/* Used handle "rep" prefix for string instructions. */
ce518a5f
L
459#define Xbr { REP_Fixup, eSI_reg }
460#define Xvr { REP_Fixup, eSI_reg }
461#define Ybr { REP_Fixup, eDI_reg }
462#define Yvr { REP_Fixup, eDI_reg }
463#define Yzr { REP_Fixup, eDI_reg }
464#define indirDXr { REP_Fixup, indir_dx_reg }
465#define ALr { REP_Fixup, al_reg }
466#define eAXr { REP_Fixup, eAX_reg }
467
42164a71
L
468/* Used handle HLE prefix for lockable instructions. */
469#define Ebh1 { HLE_Fixup1, b_mode }
470#define Evh1 { HLE_Fixup1, v_mode }
471#define Ebh2 { HLE_Fixup2, b_mode }
472#define Evh2 { HLE_Fixup2, v_mode }
473#define Ebh3 { HLE_Fixup3, b_mode }
474#define Evh3 { HLE_Fixup3, v_mode }
475
7e8b059b 476#define BND { BND_Fixup, 0 }
04ef582a 477#define NOTRACK { NOTRACK_Fixup, 0 }
7e8b059b 478
ce518a5f
L
479#define cond_jump_flag { NULL, cond_jump_mode }
480#define loop_jcxz_flag { NULL, loop_jcxz_mode }
3ffd33cf 481
252b5132 482/* bits in sizeflag */
252b5132 483#define SUFFIX_ALWAYS 4
252b5132
RH
484#define AFLAG 2
485#define DFLAG 1
486
51e7da1b
L
487enum
488{
489 /* byte operand */
490 b_mode = 1,
491 /* byte operand with operand swapped */
3873ba12 492 b_swap_mode,
e3949f17
L
493 /* byte operand, sign extend like 'T' suffix */
494 b_T_mode,
51e7da1b 495 /* operand size depends on prefixes */
3873ba12 496 v_mode,
51e7da1b 497 /* operand size depends on prefixes with operand swapped */
3873ba12 498 v_swap_mode,
51e7da1b 499 /* word operand */
3873ba12 500 w_mode,
51e7da1b 501 /* double word operand */
3873ba12 502 d_mode,
51e7da1b 503 /* double word operand with operand swapped */
3873ba12 504 d_swap_mode,
51e7da1b 505 /* quad word operand */
3873ba12 506 q_mode,
51e7da1b 507 /* quad word operand with operand swapped */
3873ba12 508 q_swap_mode,
51e7da1b 509 /* ten-byte operand */
3873ba12 510 t_mode,
43234a1e
L
511 /* 16-byte XMM, 32-byte YMM or 64-byte ZMM operand. In EVEX with
512 broadcast enabled. */
3873ba12 513 x_mode,
43234a1e
L
514 /* Similar to x_mode, but with different EVEX mem shifts. */
515 evex_x_gscat_mode,
516 /* Similar to x_mode, but with disabled broadcast. */
517 evex_x_nobcst_mode,
518 /* Similar to x_mode, but with operands swapped and disabled broadcast
519 in EVEX. */
3873ba12 520 x_swap_mode,
51e7da1b 521 /* 16-byte XMM operand */
3873ba12 522 xmm_mode,
43234a1e
L
523 /* XMM, XMM or YMM register operand, or quad word, xmmword or ymmword
524 memory operand (depending on vector length). Broadcast isn't
525 allowed. */
3873ba12 526 xmmq_mode,
43234a1e
L
527 /* Same as xmmq_mode, but broadcast is allowed. */
528 evex_half_bcst_xmmq_mode,
6c30d220
L
529 /* XMM register or byte memory operand */
530 xmm_mb_mode,
531 /* XMM register or word memory operand */
532 xmm_mw_mode,
533 /* XMM register or double word memory operand */
534 xmm_md_mode,
535 /* XMM register or quad word memory operand */
536 xmm_mq_mode,
43234a1e
L
537 /* XMM register or double/quad word memory operand, depending on
538 VEX.W. */
539 xmm_mdq_mode,
540 /* 16-byte XMM, word, double word or quad word operand. */
6c30d220 541 xmmdw_mode,
43234a1e 542 /* 16-byte XMM, double word, quad word operand or xmm word operand. */
6c30d220 543 xmmqd_mode,
43234a1e
L
544 /* 32-byte YMM operand */
545 ymm_mode,
546 /* quad word, ymmword or zmmword memory operand. */
3873ba12 547 ymmq_mode,
6c30d220
L
548 /* 32-byte YMM or 16-byte word operand */
549 ymmxmm_mode,
51e7da1b 550 /* d_mode in 32bit, q_mode in 64bit mode. */
3873ba12 551 m_mode,
51e7da1b 552 /* pair of v_mode operands */
3873ba12
L
553 a_mode,
554 cond_jump_mode,
555 loop_jcxz_mode,
7e8b059b 556 v_bnd_mode,
51e7da1b 557 /* operand size depends on REX prefixes. */
3873ba12 558 dq_mode,
51e7da1b 559 /* registers like dq_mode, memory like w_mode. */
3873ba12 560 dqw_mode,
7e8b059b 561 bnd_mode,
51e7da1b 562 /* 4- or 6-byte pointer operand */
3873ba12
L
563 f_mode,
564 const_1_mode,
07f5af7d
L
565 /* v_mode for indirect branch opcodes. */
566 indir_v_mode,
51e7da1b 567 /* v_mode for stack-related opcodes. */
3873ba12 568 stack_v_mode,
51e7da1b 569 /* non-quad operand size depends on prefixes */
3873ba12 570 z_mode,
51e7da1b 571 /* 16-byte operand */
3873ba12 572 o_mode,
51e7da1b 573 /* registers like dq_mode, memory like b_mode. */
3873ba12 574 dqb_mode,
1ba585e8
IT
575 /* registers like d_mode, memory like b_mode. */
576 db_mode,
577 /* registers like d_mode, memory like w_mode. */
578 dw_mode,
51e7da1b 579 /* registers like dq_mode, memory like d_mode. */
3873ba12 580 dqd_mode,
51e7da1b 581 /* normal vex mode */
3873ba12 582 vex_mode,
51e7da1b 583 /* 128bit vex mode */
3873ba12 584 vex128_mode,
51e7da1b 585 /* 256bit vex mode */
3873ba12 586 vex256_mode,
51e7da1b 587 /* operand size depends on the VEX.W bit. */
3873ba12 588 vex_w_dq_mode,
d55ee72f 589
6c30d220
L
590 /* Similar to vex_w_dq_mode, with VSIB dword indices. */
591 vex_vsib_d_w_dq_mode,
5fc35d96
IT
592 /* Similar to vex_vsib_d_w_dq_mode, with smaller memory. */
593 vex_vsib_d_w_d_mode,
6c30d220
L
594 /* Similar to vex_w_dq_mode, with VSIB qword indices. */
595 vex_vsib_q_w_dq_mode,
5fc35d96
IT
596 /* Similar to vex_vsib_q_w_dq_mode, with smaller memory. */
597 vex_vsib_q_w_d_mode,
6c30d220 598
539f890d
L
599 /* scalar, ignore vector length. */
600 scalar_mode,
601 /* like d_mode, ignore vector length. */
602 d_scalar_mode,
603 /* like d_swap_mode, ignore vector length. */
604 d_scalar_swap_mode,
605 /* like q_mode, ignore vector length. */
606 q_scalar_mode,
607 /* like q_swap_mode, ignore vector length. */
608 q_scalar_swap_mode,
609 /* like vex_mode, ignore vector length. */
610 vex_scalar_mode,
1c480963
L
611 /* like vex_w_dq_mode, ignore vector length. */
612 vex_scalar_w_dq_mode,
539f890d 613
43234a1e
L
614 /* Static rounding. */
615 evex_rounding_mode,
616 /* Supress all exceptions. */
617 evex_sae_mode,
618
619 /* Mask register operand. */
620 mask_mode,
1ba585e8
IT
621 /* Mask register operand. */
622 mask_bd_mode,
43234a1e 623
3873ba12
L
624 es_reg,
625 cs_reg,
626 ss_reg,
627 ds_reg,
628 fs_reg,
629 gs_reg,
d55ee72f 630
3873ba12
L
631 eAX_reg,
632 eCX_reg,
633 eDX_reg,
634 eBX_reg,
635 eSP_reg,
636 eBP_reg,
637 eSI_reg,
638 eDI_reg,
d55ee72f 639
3873ba12
L
640 al_reg,
641 cl_reg,
642 dl_reg,
643 bl_reg,
644 ah_reg,
645 ch_reg,
646 dh_reg,
647 bh_reg,
d55ee72f 648
3873ba12
L
649 ax_reg,
650 cx_reg,
651 dx_reg,
652 bx_reg,
653 sp_reg,
654 bp_reg,
655 si_reg,
656 di_reg,
d55ee72f 657
3873ba12
L
658 rAX_reg,
659 rCX_reg,
660 rDX_reg,
661 rBX_reg,
662 rSP_reg,
663 rBP_reg,
664 rSI_reg,
665 rDI_reg,
d55ee72f 666
3873ba12
L
667 z_mode_ax_reg,
668 indir_dx_reg
51e7da1b 669};
252b5132 670
51e7da1b
L
671enum
672{
673 FLOATCODE = 1,
3873ba12
L
674 USE_REG_TABLE,
675 USE_MOD_TABLE,
676 USE_RM_TABLE,
677 USE_PREFIX_TABLE,
678 USE_X86_64_TABLE,
679 USE_3BYTE_TABLE,
f88c9eb0 680 USE_XOP_8F_TABLE,
3873ba12
L
681 USE_VEX_C4_TABLE,
682 USE_VEX_C5_TABLE,
9e30b8e0 683 USE_VEX_LEN_TABLE,
43234a1e
L
684 USE_VEX_W_TABLE,
685 USE_EVEX_TABLE
51e7da1b 686};
6439fc28 687
bf890a93 688#define FLOAT NULL, { { NULL, FLOATCODE } }, 0
4efba78c 689
bf890a93
IT
690#define DIS386(T, I) NULL, { { NULL, (T)}, { NULL, (I) } }, 0
691#define DIS386_PREFIX(T, I, P) NULL, { { NULL, (T)}, { NULL, (I) } }, P
1ceb70f8
L
692#define REG_TABLE(I) DIS386 (USE_REG_TABLE, (I))
693#define MOD_TABLE(I) DIS386 (USE_MOD_TABLE, (I))
694#define RM_TABLE(I) DIS386 (USE_RM_TABLE, (I))
695#define PREFIX_TABLE(I) DIS386 (USE_PREFIX_TABLE, (I))
4e7d34a6
L
696#define X86_64_TABLE(I) DIS386 (USE_X86_64_TABLE, (I))
697#define THREE_BYTE_TABLE(I) DIS386 (USE_3BYTE_TABLE, (I))
bf890a93 698#define THREE_BYTE_TABLE_PREFIX(I, P) DIS386_PREFIX (USE_3BYTE_TABLE, (I), P)
f88c9eb0 699#define XOP_8F_TABLE(I) DIS386 (USE_XOP_8F_TABLE, (I))
c0f3af97
L
700#define VEX_C4_TABLE(I) DIS386 (USE_VEX_C4_TABLE, (I))
701#define VEX_C5_TABLE(I) DIS386 (USE_VEX_C5_TABLE, (I))
702#define VEX_LEN_TABLE(I) DIS386 (USE_VEX_LEN_TABLE, (I))
9e30b8e0 703#define VEX_W_TABLE(I) DIS386 (USE_VEX_W_TABLE, (I))
43234a1e 704#define EVEX_TABLE(I) DIS386 (USE_EVEX_TABLE, (I))
1ceb70f8 705
51e7da1b
L
706enum
707{
708 REG_80 = 0,
3873ba12 709 REG_81,
7148c369 710 REG_83,
3873ba12
L
711 REG_8F,
712 REG_C0,
713 REG_C1,
714 REG_C6,
715 REG_C7,
716 REG_D0,
717 REG_D1,
718 REG_D2,
719 REG_D3,
720 REG_F6,
721 REG_F7,
722 REG_FE,
723 REG_FF,
724 REG_0F00,
725 REG_0F01,
726 REG_0F0D,
727 REG_0F18,
603555e5 728 REG_0F1E_MOD_3,
3873ba12
L
729 REG_0F71,
730 REG_0F72,
731 REG_0F73,
732 REG_0FA6,
733 REG_0FA7,
734 REG_0FAE,
735 REG_0FBA,
736 REG_0FC7,
592a252b
L
737 REG_VEX_0F71,
738 REG_VEX_0F72,
739 REG_VEX_0F73,
740 REG_VEX_0FAE,
f12dc422 741 REG_VEX_0F38F3,
f88c9eb0 742 REG_XOP_LWPCB,
2a2a0f38
QN
743 REG_XOP_LWP,
744 REG_XOP_TBM_01,
43234a1e
L
745 REG_XOP_TBM_02,
746
1ba585e8 747 REG_EVEX_0F71,
43234a1e
L
748 REG_EVEX_0F72,
749 REG_EVEX_0F73,
750 REG_EVEX_0F38C6,
751 REG_EVEX_0F38C7
51e7da1b 752};
1ceb70f8 753
51e7da1b
L
754enum
755{
756 MOD_8D = 0,
42164a71
L
757 MOD_C6_REG_7,
758 MOD_C7_REG_7,
4a357820
MZ
759 MOD_FF_REG_3,
760 MOD_FF_REG_5,
3873ba12
L
761 MOD_0F01_REG_0,
762 MOD_0F01_REG_1,
763 MOD_0F01_REG_2,
764 MOD_0F01_REG_3,
8eab4136 765 MOD_0F01_REG_5,
3873ba12
L
766 MOD_0F01_REG_7,
767 MOD_0F12_PREFIX_0,
768 MOD_0F13,
769 MOD_0F16_PREFIX_0,
770 MOD_0F17,
771 MOD_0F18_REG_0,
772 MOD_0F18_REG_1,
773 MOD_0F18_REG_2,
774 MOD_0F18_REG_3,
d7189fa5
RM
775 MOD_0F18_REG_4,
776 MOD_0F18_REG_5,
777 MOD_0F18_REG_6,
778 MOD_0F18_REG_7,
7e8b059b
L
779 MOD_0F1A_PREFIX_0,
780 MOD_0F1B_PREFIX_0,
781 MOD_0F1B_PREFIX_1,
603555e5 782 MOD_0F1E_PREFIX_1,
3873ba12
L
783 MOD_0F24,
784 MOD_0F26,
785 MOD_0F2B_PREFIX_0,
786 MOD_0F2B_PREFIX_1,
787 MOD_0F2B_PREFIX_2,
788 MOD_0F2B_PREFIX_3,
789 MOD_0F51,
790 MOD_0F71_REG_2,
791 MOD_0F71_REG_4,
792 MOD_0F71_REG_6,
793 MOD_0F72_REG_2,
794 MOD_0F72_REG_4,
795 MOD_0F72_REG_6,
796 MOD_0F73_REG_2,
797 MOD_0F73_REG_3,
798 MOD_0F73_REG_6,
799 MOD_0F73_REG_7,
800 MOD_0FAE_REG_0,
801 MOD_0FAE_REG_1,
802 MOD_0FAE_REG_2,
803 MOD_0FAE_REG_3,
804 MOD_0FAE_REG_4,
805 MOD_0FAE_REG_5,
806 MOD_0FAE_REG_6,
807 MOD_0FAE_REG_7,
808 MOD_0FB2,
809 MOD_0FB4,
810 MOD_0FB5,
a8484f96 811 MOD_0FC3,
963f3586
IT
812 MOD_0FC7_REG_3,
813 MOD_0FC7_REG_4,
814 MOD_0FC7_REG_5,
3873ba12
L
815 MOD_0FC7_REG_6,
816 MOD_0FC7_REG_7,
817 MOD_0FD7,
818 MOD_0FE7_PREFIX_2,
819 MOD_0FF0_PREFIX_3,
820 MOD_0F382A_PREFIX_2,
603555e5
L
821 MOD_0F38F5_PREFIX_2,
822 MOD_0F38F6_PREFIX_0,
3873ba12
L
823 MOD_62_32BIT,
824 MOD_C4_32BIT,
825 MOD_C5_32BIT,
592a252b
L
826 MOD_VEX_0F12_PREFIX_0,
827 MOD_VEX_0F13,
828 MOD_VEX_0F16_PREFIX_0,
829 MOD_VEX_0F17,
830 MOD_VEX_0F2B,
ab4e4ed5
AF
831 MOD_VEX_W_0_0F41_P_0_LEN_1,
832 MOD_VEX_W_1_0F41_P_0_LEN_1,
833 MOD_VEX_W_0_0F41_P_2_LEN_1,
834 MOD_VEX_W_1_0F41_P_2_LEN_1,
835 MOD_VEX_W_0_0F42_P_0_LEN_1,
836 MOD_VEX_W_1_0F42_P_0_LEN_1,
837 MOD_VEX_W_0_0F42_P_2_LEN_1,
838 MOD_VEX_W_1_0F42_P_2_LEN_1,
839 MOD_VEX_W_0_0F44_P_0_LEN_1,
840 MOD_VEX_W_1_0F44_P_0_LEN_1,
841 MOD_VEX_W_0_0F44_P_2_LEN_1,
842 MOD_VEX_W_1_0F44_P_2_LEN_1,
843 MOD_VEX_W_0_0F45_P_0_LEN_1,
844 MOD_VEX_W_1_0F45_P_0_LEN_1,
845 MOD_VEX_W_0_0F45_P_2_LEN_1,
846 MOD_VEX_W_1_0F45_P_2_LEN_1,
847 MOD_VEX_W_0_0F46_P_0_LEN_1,
848 MOD_VEX_W_1_0F46_P_0_LEN_1,
849 MOD_VEX_W_0_0F46_P_2_LEN_1,
850 MOD_VEX_W_1_0F46_P_2_LEN_1,
851 MOD_VEX_W_0_0F47_P_0_LEN_1,
852 MOD_VEX_W_1_0F47_P_0_LEN_1,
853 MOD_VEX_W_0_0F47_P_2_LEN_1,
854 MOD_VEX_W_1_0F47_P_2_LEN_1,
855 MOD_VEX_W_0_0F4A_P_0_LEN_1,
856 MOD_VEX_W_1_0F4A_P_0_LEN_1,
857 MOD_VEX_W_0_0F4A_P_2_LEN_1,
858 MOD_VEX_W_1_0F4A_P_2_LEN_1,
859 MOD_VEX_W_0_0F4B_P_0_LEN_1,
860 MOD_VEX_W_1_0F4B_P_0_LEN_1,
861 MOD_VEX_W_0_0F4B_P_2_LEN_1,
592a252b
L
862 MOD_VEX_0F50,
863 MOD_VEX_0F71_REG_2,
864 MOD_VEX_0F71_REG_4,
865 MOD_VEX_0F71_REG_6,
866 MOD_VEX_0F72_REG_2,
867 MOD_VEX_0F72_REG_4,
868 MOD_VEX_0F72_REG_6,
869 MOD_VEX_0F73_REG_2,
870 MOD_VEX_0F73_REG_3,
871 MOD_VEX_0F73_REG_6,
872 MOD_VEX_0F73_REG_7,
ab4e4ed5
AF
873 MOD_VEX_W_0_0F91_P_0_LEN_0,
874 MOD_VEX_W_1_0F91_P_0_LEN_0,
875 MOD_VEX_W_0_0F91_P_2_LEN_0,
876 MOD_VEX_W_1_0F91_P_2_LEN_0,
877 MOD_VEX_W_0_0F92_P_0_LEN_0,
878 MOD_VEX_W_0_0F92_P_2_LEN_0,
879 MOD_VEX_W_0_0F92_P_3_LEN_0,
880 MOD_VEX_W_1_0F92_P_3_LEN_0,
881 MOD_VEX_W_0_0F93_P_0_LEN_0,
882 MOD_VEX_W_0_0F93_P_2_LEN_0,
883 MOD_VEX_W_0_0F93_P_3_LEN_0,
884 MOD_VEX_W_1_0F93_P_3_LEN_0,
885 MOD_VEX_W_0_0F98_P_0_LEN_0,
886 MOD_VEX_W_1_0F98_P_0_LEN_0,
887 MOD_VEX_W_0_0F98_P_2_LEN_0,
888 MOD_VEX_W_1_0F98_P_2_LEN_0,
889 MOD_VEX_W_0_0F99_P_0_LEN_0,
890 MOD_VEX_W_1_0F99_P_0_LEN_0,
891 MOD_VEX_W_0_0F99_P_2_LEN_0,
892 MOD_VEX_W_1_0F99_P_2_LEN_0,
592a252b
L
893 MOD_VEX_0FAE_REG_2,
894 MOD_VEX_0FAE_REG_3,
895 MOD_VEX_0FD7_PREFIX_2,
896 MOD_VEX_0FE7_PREFIX_2,
897 MOD_VEX_0FF0_PREFIX_3,
592a252b
L
898 MOD_VEX_0F381A_PREFIX_2,
899 MOD_VEX_0F382A_PREFIX_2,
900 MOD_VEX_0F382C_PREFIX_2,
901 MOD_VEX_0F382D_PREFIX_2,
902 MOD_VEX_0F382E_PREFIX_2,
6c30d220
L
903 MOD_VEX_0F382F_PREFIX_2,
904 MOD_VEX_0F385A_PREFIX_2,
905 MOD_VEX_0F388C_PREFIX_2,
906 MOD_VEX_0F388E_PREFIX_2,
ab4e4ed5
AF
907 MOD_VEX_W_0_0F3A30_P_2_LEN_0,
908 MOD_VEX_W_1_0F3A30_P_2_LEN_0,
909 MOD_VEX_W_0_0F3A31_P_2_LEN_0,
910 MOD_VEX_W_1_0F3A31_P_2_LEN_0,
911 MOD_VEX_W_0_0F3A32_P_2_LEN_0,
912 MOD_VEX_W_1_0F3A32_P_2_LEN_0,
913 MOD_VEX_W_0_0F3A33_P_2_LEN_0,
914 MOD_VEX_W_1_0F3A33_P_2_LEN_0,
43234a1e
L
915
916 MOD_EVEX_0F10_PREFIX_1,
917 MOD_EVEX_0F10_PREFIX_3,
918 MOD_EVEX_0F11_PREFIX_1,
919 MOD_EVEX_0F11_PREFIX_3,
920 MOD_EVEX_0F12_PREFIX_0,
921 MOD_EVEX_0F16_PREFIX_0,
922 MOD_EVEX_0F38C6_REG_1,
923 MOD_EVEX_0F38C6_REG_2,
924 MOD_EVEX_0F38C6_REG_5,
925 MOD_EVEX_0F38C6_REG_6,
926 MOD_EVEX_0F38C7_REG_1,
927 MOD_EVEX_0F38C7_REG_2,
928 MOD_EVEX_0F38C7_REG_5,
929 MOD_EVEX_0F38C7_REG_6
51e7da1b 930};
1ceb70f8 931
51e7da1b
L
932enum
933{
42164a71
L
934 RM_C6_REG_7 = 0,
935 RM_C7_REG_7,
936 RM_0F01_REG_0,
3873ba12
L
937 RM_0F01_REG_1,
938 RM_0F01_REG_2,
939 RM_0F01_REG_3,
8eab4136 940 RM_0F01_REG_5,
3873ba12 941 RM_0F01_REG_7,
603555e5 942 RM_0F1E_MOD_3_REG_7,
3873ba12
L
943 RM_0FAE_REG_6,
944 RM_0FAE_REG_7
51e7da1b 945};
1ceb70f8 946
51e7da1b
L
947enum
948{
949 PREFIX_90 = 0,
603555e5 950 PREFIX_MOD_0_0F01_REG_5,
2234eee6 951 PREFIX_MOD_3_0F01_REG_5_RM_0,
603555e5 952 PREFIX_MOD_3_0F01_REG_5_RM_2,
3873ba12
L
953 PREFIX_0F10,
954 PREFIX_0F11,
955 PREFIX_0F12,
956 PREFIX_0F16,
7e8b059b
L
957 PREFIX_0F1A,
958 PREFIX_0F1B,
603555e5 959 PREFIX_0F1E,
3873ba12
L
960 PREFIX_0F2A,
961 PREFIX_0F2B,
962 PREFIX_0F2C,
963 PREFIX_0F2D,
964 PREFIX_0F2E,
965 PREFIX_0F2F,
966 PREFIX_0F51,
967 PREFIX_0F52,
968 PREFIX_0F53,
969 PREFIX_0F58,
970 PREFIX_0F59,
971 PREFIX_0F5A,
972 PREFIX_0F5B,
973 PREFIX_0F5C,
974 PREFIX_0F5D,
975 PREFIX_0F5E,
976 PREFIX_0F5F,
977 PREFIX_0F60,
978 PREFIX_0F61,
979 PREFIX_0F62,
980 PREFIX_0F6C,
981 PREFIX_0F6D,
982 PREFIX_0F6F,
983 PREFIX_0F70,
984 PREFIX_0F73_REG_3,
985 PREFIX_0F73_REG_7,
986 PREFIX_0F78,
987 PREFIX_0F79,
988 PREFIX_0F7C,
989 PREFIX_0F7D,
990 PREFIX_0F7E,
991 PREFIX_0F7F,
c7b8aa3a
L
992 PREFIX_0FAE_REG_0,
993 PREFIX_0FAE_REG_1,
994 PREFIX_0FAE_REG_2,
995 PREFIX_0FAE_REG_3,
6b40c462
L
996 PREFIX_MOD_0_0FAE_REG_4,
997 PREFIX_MOD_3_0FAE_REG_4,
603555e5 998 PREFIX_MOD_0_0FAE_REG_5,
2234eee6 999 PREFIX_MOD_3_0FAE_REG_5,
c5e7287a 1000 PREFIX_0FAE_REG_6,
963f3586 1001 PREFIX_0FAE_REG_7,
3873ba12 1002 PREFIX_0FB8,
f12dc422 1003 PREFIX_0FBC,
3873ba12
L
1004 PREFIX_0FBD,
1005 PREFIX_0FC2,
a8484f96 1006 PREFIX_MOD_0_0FC3,
f24bcbaa
L
1007 PREFIX_MOD_0_0FC7_REG_6,
1008 PREFIX_MOD_3_0FC7_REG_6,
1009 PREFIX_MOD_3_0FC7_REG_7,
3873ba12
L
1010 PREFIX_0FD0,
1011 PREFIX_0FD6,
1012 PREFIX_0FE6,
1013 PREFIX_0FE7,
1014 PREFIX_0FF0,
1015 PREFIX_0FF7,
1016 PREFIX_0F3810,
1017 PREFIX_0F3814,
1018 PREFIX_0F3815,
1019 PREFIX_0F3817,
1020 PREFIX_0F3820,
1021 PREFIX_0F3821,
1022 PREFIX_0F3822,
1023 PREFIX_0F3823,
1024 PREFIX_0F3824,
1025 PREFIX_0F3825,
1026 PREFIX_0F3828,
1027 PREFIX_0F3829,
1028 PREFIX_0F382A,
1029 PREFIX_0F382B,
1030 PREFIX_0F3830,
1031 PREFIX_0F3831,
1032 PREFIX_0F3832,
1033 PREFIX_0F3833,
1034 PREFIX_0F3834,
1035 PREFIX_0F3835,
1036 PREFIX_0F3837,
1037 PREFIX_0F3838,
1038 PREFIX_0F3839,
1039 PREFIX_0F383A,
1040 PREFIX_0F383B,
1041 PREFIX_0F383C,
1042 PREFIX_0F383D,
1043 PREFIX_0F383E,
1044 PREFIX_0F383F,
1045 PREFIX_0F3840,
1046 PREFIX_0F3841,
1047 PREFIX_0F3880,
1048 PREFIX_0F3881,
6c30d220 1049 PREFIX_0F3882,
a0046408
L
1050 PREFIX_0F38C8,
1051 PREFIX_0F38C9,
1052 PREFIX_0F38CA,
1053 PREFIX_0F38CB,
1054 PREFIX_0F38CC,
1055 PREFIX_0F38CD,
3873ba12
L
1056 PREFIX_0F38DB,
1057 PREFIX_0F38DC,
1058 PREFIX_0F38DD,
1059 PREFIX_0F38DE,
1060 PREFIX_0F38DF,
1061 PREFIX_0F38F0,
1062 PREFIX_0F38F1,
603555e5 1063 PREFIX_0F38F5,
e2e1fcde 1064 PREFIX_0F38F6,
3873ba12
L
1065 PREFIX_0F3A08,
1066 PREFIX_0F3A09,
1067 PREFIX_0F3A0A,
1068 PREFIX_0F3A0B,
1069 PREFIX_0F3A0C,
1070 PREFIX_0F3A0D,
1071 PREFIX_0F3A0E,
1072 PREFIX_0F3A14,
1073 PREFIX_0F3A15,
1074 PREFIX_0F3A16,
1075 PREFIX_0F3A17,
1076 PREFIX_0F3A20,
1077 PREFIX_0F3A21,
1078 PREFIX_0F3A22,
1079 PREFIX_0F3A40,
1080 PREFIX_0F3A41,
1081 PREFIX_0F3A42,
1082 PREFIX_0F3A44,
1083 PREFIX_0F3A60,
1084 PREFIX_0F3A61,
1085 PREFIX_0F3A62,
1086 PREFIX_0F3A63,
a0046408 1087 PREFIX_0F3ACC,
3873ba12 1088 PREFIX_0F3ADF,
592a252b
L
1089 PREFIX_VEX_0F10,
1090 PREFIX_VEX_0F11,
1091 PREFIX_VEX_0F12,
1092 PREFIX_VEX_0F16,
1093 PREFIX_VEX_0F2A,
1094 PREFIX_VEX_0F2C,
1095 PREFIX_VEX_0F2D,
1096 PREFIX_VEX_0F2E,
1097 PREFIX_VEX_0F2F,
43234a1e
L
1098 PREFIX_VEX_0F41,
1099 PREFIX_VEX_0F42,
1100 PREFIX_VEX_0F44,
1101 PREFIX_VEX_0F45,
1102 PREFIX_VEX_0F46,
1103 PREFIX_VEX_0F47,
1ba585e8 1104 PREFIX_VEX_0F4A,
43234a1e 1105 PREFIX_VEX_0F4B,
592a252b
L
1106 PREFIX_VEX_0F51,
1107 PREFIX_VEX_0F52,
1108 PREFIX_VEX_0F53,
1109 PREFIX_VEX_0F58,
1110 PREFIX_VEX_0F59,
1111 PREFIX_VEX_0F5A,
1112 PREFIX_VEX_0F5B,
1113 PREFIX_VEX_0F5C,
1114 PREFIX_VEX_0F5D,
1115 PREFIX_VEX_0F5E,
1116 PREFIX_VEX_0F5F,
1117 PREFIX_VEX_0F60,
1118 PREFIX_VEX_0F61,
1119 PREFIX_VEX_0F62,
1120 PREFIX_VEX_0F63,
1121 PREFIX_VEX_0F64,
1122 PREFIX_VEX_0F65,
1123 PREFIX_VEX_0F66,
1124 PREFIX_VEX_0F67,
1125 PREFIX_VEX_0F68,
1126 PREFIX_VEX_0F69,
1127 PREFIX_VEX_0F6A,
1128 PREFIX_VEX_0F6B,
1129 PREFIX_VEX_0F6C,
1130 PREFIX_VEX_0F6D,
1131 PREFIX_VEX_0F6E,
1132 PREFIX_VEX_0F6F,
1133 PREFIX_VEX_0F70,
1134 PREFIX_VEX_0F71_REG_2,
1135 PREFIX_VEX_0F71_REG_4,
1136 PREFIX_VEX_0F71_REG_6,
1137 PREFIX_VEX_0F72_REG_2,
1138 PREFIX_VEX_0F72_REG_4,
1139 PREFIX_VEX_0F72_REG_6,
1140 PREFIX_VEX_0F73_REG_2,
1141 PREFIX_VEX_0F73_REG_3,
1142 PREFIX_VEX_0F73_REG_6,
1143 PREFIX_VEX_0F73_REG_7,
1144 PREFIX_VEX_0F74,
1145 PREFIX_VEX_0F75,
1146 PREFIX_VEX_0F76,
1147 PREFIX_VEX_0F77,
1148 PREFIX_VEX_0F7C,
1149 PREFIX_VEX_0F7D,
1150 PREFIX_VEX_0F7E,
1151 PREFIX_VEX_0F7F,
43234a1e
L
1152 PREFIX_VEX_0F90,
1153 PREFIX_VEX_0F91,
1154 PREFIX_VEX_0F92,
1155 PREFIX_VEX_0F93,
1156 PREFIX_VEX_0F98,
1ba585e8 1157 PREFIX_VEX_0F99,
592a252b
L
1158 PREFIX_VEX_0FC2,
1159 PREFIX_VEX_0FC4,
1160 PREFIX_VEX_0FC5,
1161 PREFIX_VEX_0FD0,
1162 PREFIX_VEX_0FD1,
1163 PREFIX_VEX_0FD2,
1164 PREFIX_VEX_0FD3,
1165 PREFIX_VEX_0FD4,
1166 PREFIX_VEX_0FD5,
1167 PREFIX_VEX_0FD6,
1168 PREFIX_VEX_0FD7,
1169 PREFIX_VEX_0FD8,
1170 PREFIX_VEX_0FD9,
1171 PREFIX_VEX_0FDA,
1172 PREFIX_VEX_0FDB,
1173 PREFIX_VEX_0FDC,
1174 PREFIX_VEX_0FDD,
1175 PREFIX_VEX_0FDE,
1176 PREFIX_VEX_0FDF,
1177 PREFIX_VEX_0FE0,
1178 PREFIX_VEX_0FE1,
1179 PREFIX_VEX_0FE2,
1180 PREFIX_VEX_0FE3,
1181 PREFIX_VEX_0FE4,
1182 PREFIX_VEX_0FE5,
1183 PREFIX_VEX_0FE6,
1184 PREFIX_VEX_0FE7,
1185 PREFIX_VEX_0FE8,
1186 PREFIX_VEX_0FE9,
1187 PREFIX_VEX_0FEA,
1188 PREFIX_VEX_0FEB,
1189 PREFIX_VEX_0FEC,
1190 PREFIX_VEX_0FED,
1191 PREFIX_VEX_0FEE,
1192 PREFIX_VEX_0FEF,
1193 PREFIX_VEX_0FF0,
1194 PREFIX_VEX_0FF1,
1195 PREFIX_VEX_0FF2,
1196 PREFIX_VEX_0FF3,
1197 PREFIX_VEX_0FF4,
1198 PREFIX_VEX_0FF5,
1199 PREFIX_VEX_0FF6,
1200 PREFIX_VEX_0FF7,
1201 PREFIX_VEX_0FF8,
1202 PREFIX_VEX_0FF9,
1203 PREFIX_VEX_0FFA,
1204 PREFIX_VEX_0FFB,
1205 PREFIX_VEX_0FFC,
1206 PREFIX_VEX_0FFD,
1207 PREFIX_VEX_0FFE,
1208 PREFIX_VEX_0F3800,
1209 PREFIX_VEX_0F3801,
1210 PREFIX_VEX_0F3802,
1211 PREFIX_VEX_0F3803,
1212 PREFIX_VEX_0F3804,
1213 PREFIX_VEX_0F3805,
1214 PREFIX_VEX_0F3806,
1215 PREFIX_VEX_0F3807,
1216 PREFIX_VEX_0F3808,
1217 PREFIX_VEX_0F3809,
1218 PREFIX_VEX_0F380A,
1219 PREFIX_VEX_0F380B,
1220 PREFIX_VEX_0F380C,
1221 PREFIX_VEX_0F380D,
1222 PREFIX_VEX_0F380E,
1223 PREFIX_VEX_0F380F,
1224 PREFIX_VEX_0F3813,
6c30d220 1225 PREFIX_VEX_0F3816,
592a252b
L
1226 PREFIX_VEX_0F3817,
1227 PREFIX_VEX_0F3818,
1228 PREFIX_VEX_0F3819,
1229 PREFIX_VEX_0F381A,
1230 PREFIX_VEX_0F381C,
1231 PREFIX_VEX_0F381D,
1232 PREFIX_VEX_0F381E,
1233 PREFIX_VEX_0F3820,
1234 PREFIX_VEX_0F3821,
1235 PREFIX_VEX_0F3822,
1236 PREFIX_VEX_0F3823,
1237 PREFIX_VEX_0F3824,
1238 PREFIX_VEX_0F3825,
1239 PREFIX_VEX_0F3828,
1240 PREFIX_VEX_0F3829,
1241 PREFIX_VEX_0F382A,
1242 PREFIX_VEX_0F382B,
1243 PREFIX_VEX_0F382C,
1244 PREFIX_VEX_0F382D,
1245 PREFIX_VEX_0F382E,
1246 PREFIX_VEX_0F382F,
1247 PREFIX_VEX_0F3830,
1248 PREFIX_VEX_0F3831,
1249 PREFIX_VEX_0F3832,
1250 PREFIX_VEX_0F3833,
1251 PREFIX_VEX_0F3834,
1252 PREFIX_VEX_0F3835,
6c30d220 1253 PREFIX_VEX_0F3836,
592a252b
L
1254 PREFIX_VEX_0F3837,
1255 PREFIX_VEX_0F3838,
1256 PREFIX_VEX_0F3839,
1257 PREFIX_VEX_0F383A,
1258 PREFIX_VEX_0F383B,
1259 PREFIX_VEX_0F383C,
1260 PREFIX_VEX_0F383D,
1261 PREFIX_VEX_0F383E,
1262 PREFIX_VEX_0F383F,
1263 PREFIX_VEX_0F3840,
1264 PREFIX_VEX_0F3841,
6c30d220
L
1265 PREFIX_VEX_0F3845,
1266 PREFIX_VEX_0F3846,
1267 PREFIX_VEX_0F3847,
1268 PREFIX_VEX_0F3858,
1269 PREFIX_VEX_0F3859,
1270 PREFIX_VEX_0F385A,
1271 PREFIX_VEX_0F3878,
1272 PREFIX_VEX_0F3879,
1273 PREFIX_VEX_0F388C,
1274 PREFIX_VEX_0F388E,
1275 PREFIX_VEX_0F3890,
1276 PREFIX_VEX_0F3891,
1277 PREFIX_VEX_0F3892,
1278 PREFIX_VEX_0F3893,
592a252b
L
1279 PREFIX_VEX_0F3896,
1280 PREFIX_VEX_0F3897,
1281 PREFIX_VEX_0F3898,
1282 PREFIX_VEX_0F3899,
1283 PREFIX_VEX_0F389A,
1284 PREFIX_VEX_0F389B,
1285 PREFIX_VEX_0F389C,
1286 PREFIX_VEX_0F389D,
1287 PREFIX_VEX_0F389E,
1288 PREFIX_VEX_0F389F,
1289 PREFIX_VEX_0F38A6,
1290 PREFIX_VEX_0F38A7,
1291 PREFIX_VEX_0F38A8,
1292 PREFIX_VEX_0F38A9,
1293 PREFIX_VEX_0F38AA,
1294 PREFIX_VEX_0F38AB,
1295 PREFIX_VEX_0F38AC,
1296 PREFIX_VEX_0F38AD,
1297 PREFIX_VEX_0F38AE,
1298 PREFIX_VEX_0F38AF,
1299 PREFIX_VEX_0F38B6,
1300 PREFIX_VEX_0F38B7,
1301 PREFIX_VEX_0F38B8,
1302 PREFIX_VEX_0F38B9,
1303 PREFIX_VEX_0F38BA,
1304 PREFIX_VEX_0F38BB,
1305 PREFIX_VEX_0F38BC,
1306 PREFIX_VEX_0F38BD,
1307 PREFIX_VEX_0F38BE,
1308 PREFIX_VEX_0F38BF,
1309 PREFIX_VEX_0F38DB,
1310 PREFIX_VEX_0F38DC,
1311 PREFIX_VEX_0F38DD,
1312 PREFIX_VEX_0F38DE,
1313 PREFIX_VEX_0F38DF,
f12dc422
L
1314 PREFIX_VEX_0F38F2,
1315 PREFIX_VEX_0F38F3_REG_1,
1316 PREFIX_VEX_0F38F3_REG_2,
1317 PREFIX_VEX_0F38F3_REG_3,
6c30d220
L
1318 PREFIX_VEX_0F38F5,
1319 PREFIX_VEX_0F38F6,
f12dc422 1320 PREFIX_VEX_0F38F7,
6c30d220
L
1321 PREFIX_VEX_0F3A00,
1322 PREFIX_VEX_0F3A01,
1323 PREFIX_VEX_0F3A02,
592a252b
L
1324 PREFIX_VEX_0F3A04,
1325 PREFIX_VEX_0F3A05,
1326 PREFIX_VEX_0F3A06,
1327 PREFIX_VEX_0F3A08,
1328 PREFIX_VEX_0F3A09,
1329 PREFIX_VEX_0F3A0A,
1330 PREFIX_VEX_0F3A0B,
1331 PREFIX_VEX_0F3A0C,
1332 PREFIX_VEX_0F3A0D,
1333 PREFIX_VEX_0F3A0E,
1334 PREFIX_VEX_0F3A0F,
1335 PREFIX_VEX_0F3A14,
1336 PREFIX_VEX_0F3A15,
1337 PREFIX_VEX_0F3A16,
1338 PREFIX_VEX_0F3A17,
1339 PREFIX_VEX_0F3A18,
1340 PREFIX_VEX_0F3A19,
1341 PREFIX_VEX_0F3A1D,
1342 PREFIX_VEX_0F3A20,
1343 PREFIX_VEX_0F3A21,
1344 PREFIX_VEX_0F3A22,
43234a1e 1345 PREFIX_VEX_0F3A30,
1ba585e8 1346 PREFIX_VEX_0F3A31,
43234a1e 1347 PREFIX_VEX_0F3A32,
1ba585e8 1348 PREFIX_VEX_0F3A33,
6c30d220
L
1349 PREFIX_VEX_0F3A38,
1350 PREFIX_VEX_0F3A39,
592a252b
L
1351 PREFIX_VEX_0F3A40,
1352 PREFIX_VEX_0F3A41,
1353 PREFIX_VEX_0F3A42,
1354 PREFIX_VEX_0F3A44,
6c30d220 1355 PREFIX_VEX_0F3A46,
592a252b
L
1356 PREFIX_VEX_0F3A48,
1357 PREFIX_VEX_0F3A49,
1358 PREFIX_VEX_0F3A4A,
1359 PREFIX_VEX_0F3A4B,
1360 PREFIX_VEX_0F3A4C,
1361 PREFIX_VEX_0F3A5C,
1362 PREFIX_VEX_0F3A5D,
1363 PREFIX_VEX_0F3A5E,
1364 PREFIX_VEX_0F3A5F,
1365 PREFIX_VEX_0F3A60,
1366 PREFIX_VEX_0F3A61,
1367 PREFIX_VEX_0F3A62,
1368 PREFIX_VEX_0F3A63,
1369 PREFIX_VEX_0F3A68,
1370 PREFIX_VEX_0F3A69,
1371 PREFIX_VEX_0F3A6A,
1372 PREFIX_VEX_0F3A6B,
1373 PREFIX_VEX_0F3A6C,
1374 PREFIX_VEX_0F3A6D,
1375 PREFIX_VEX_0F3A6E,
1376 PREFIX_VEX_0F3A6F,
1377 PREFIX_VEX_0F3A78,
1378 PREFIX_VEX_0F3A79,
1379 PREFIX_VEX_0F3A7A,
1380 PREFIX_VEX_0F3A7B,
1381 PREFIX_VEX_0F3A7C,
1382 PREFIX_VEX_0F3A7D,
1383 PREFIX_VEX_0F3A7E,
1384 PREFIX_VEX_0F3A7F,
6c30d220 1385 PREFIX_VEX_0F3ADF,
43234a1e
L
1386 PREFIX_VEX_0F3AF0,
1387
1388 PREFIX_EVEX_0F10,
1389 PREFIX_EVEX_0F11,
1390 PREFIX_EVEX_0F12,
1391 PREFIX_EVEX_0F13,
1392 PREFIX_EVEX_0F14,
1393 PREFIX_EVEX_0F15,
1394 PREFIX_EVEX_0F16,
1395 PREFIX_EVEX_0F17,
1396 PREFIX_EVEX_0F28,
1397 PREFIX_EVEX_0F29,
1398 PREFIX_EVEX_0F2A,
1399 PREFIX_EVEX_0F2B,
1400 PREFIX_EVEX_0F2C,
1401 PREFIX_EVEX_0F2D,
1402 PREFIX_EVEX_0F2E,
1403 PREFIX_EVEX_0F2F,
1404 PREFIX_EVEX_0F51,
90a915bf
IT
1405 PREFIX_EVEX_0F54,
1406 PREFIX_EVEX_0F55,
1407 PREFIX_EVEX_0F56,
1408 PREFIX_EVEX_0F57,
43234a1e
L
1409 PREFIX_EVEX_0F58,
1410 PREFIX_EVEX_0F59,
1411 PREFIX_EVEX_0F5A,
1412 PREFIX_EVEX_0F5B,
1413 PREFIX_EVEX_0F5C,
1414 PREFIX_EVEX_0F5D,
1415 PREFIX_EVEX_0F5E,
1416 PREFIX_EVEX_0F5F,
1ba585e8
IT
1417 PREFIX_EVEX_0F60,
1418 PREFIX_EVEX_0F61,
43234a1e 1419 PREFIX_EVEX_0F62,
1ba585e8
IT
1420 PREFIX_EVEX_0F63,
1421 PREFIX_EVEX_0F64,
1422 PREFIX_EVEX_0F65,
43234a1e 1423 PREFIX_EVEX_0F66,
1ba585e8
IT
1424 PREFIX_EVEX_0F67,
1425 PREFIX_EVEX_0F68,
1426 PREFIX_EVEX_0F69,
43234a1e 1427 PREFIX_EVEX_0F6A,
1ba585e8 1428 PREFIX_EVEX_0F6B,
43234a1e
L
1429 PREFIX_EVEX_0F6C,
1430 PREFIX_EVEX_0F6D,
1431 PREFIX_EVEX_0F6E,
1432 PREFIX_EVEX_0F6F,
1433 PREFIX_EVEX_0F70,
1ba585e8
IT
1434 PREFIX_EVEX_0F71_REG_2,
1435 PREFIX_EVEX_0F71_REG_4,
1436 PREFIX_EVEX_0F71_REG_6,
43234a1e
L
1437 PREFIX_EVEX_0F72_REG_0,
1438 PREFIX_EVEX_0F72_REG_1,
1439 PREFIX_EVEX_0F72_REG_2,
1440 PREFIX_EVEX_0F72_REG_4,
1441 PREFIX_EVEX_0F72_REG_6,
1442 PREFIX_EVEX_0F73_REG_2,
1ba585e8 1443 PREFIX_EVEX_0F73_REG_3,
43234a1e 1444 PREFIX_EVEX_0F73_REG_6,
1ba585e8
IT
1445 PREFIX_EVEX_0F73_REG_7,
1446 PREFIX_EVEX_0F74,
1447 PREFIX_EVEX_0F75,
43234a1e
L
1448 PREFIX_EVEX_0F76,
1449 PREFIX_EVEX_0F78,
1450 PREFIX_EVEX_0F79,
1451 PREFIX_EVEX_0F7A,
1452 PREFIX_EVEX_0F7B,
1453 PREFIX_EVEX_0F7E,
1454 PREFIX_EVEX_0F7F,
1455 PREFIX_EVEX_0FC2,
1ba585e8
IT
1456 PREFIX_EVEX_0FC4,
1457 PREFIX_EVEX_0FC5,
43234a1e 1458 PREFIX_EVEX_0FC6,
1ba585e8 1459 PREFIX_EVEX_0FD1,
43234a1e
L
1460 PREFIX_EVEX_0FD2,
1461 PREFIX_EVEX_0FD3,
1462 PREFIX_EVEX_0FD4,
1ba585e8 1463 PREFIX_EVEX_0FD5,
43234a1e 1464 PREFIX_EVEX_0FD6,
1ba585e8
IT
1465 PREFIX_EVEX_0FD8,
1466 PREFIX_EVEX_0FD9,
1467 PREFIX_EVEX_0FDA,
43234a1e 1468 PREFIX_EVEX_0FDB,
1ba585e8
IT
1469 PREFIX_EVEX_0FDC,
1470 PREFIX_EVEX_0FDD,
1471 PREFIX_EVEX_0FDE,
43234a1e 1472 PREFIX_EVEX_0FDF,
1ba585e8
IT
1473 PREFIX_EVEX_0FE0,
1474 PREFIX_EVEX_0FE1,
43234a1e 1475 PREFIX_EVEX_0FE2,
1ba585e8
IT
1476 PREFIX_EVEX_0FE3,
1477 PREFIX_EVEX_0FE4,
1478 PREFIX_EVEX_0FE5,
43234a1e
L
1479 PREFIX_EVEX_0FE6,
1480 PREFIX_EVEX_0FE7,
1ba585e8
IT
1481 PREFIX_EVEX_0FE8,
1482 PREFIX_EVEX_0FE9,
1483 PREFIX_EVEX_0FEA,
43234a1e 1484 PREFIX_EVEX_0FEB,
1ba585e8
IT
1485 PREFIX_EVEX_0FEC,
1486 PREFIX_EVEX_0FED,
1487 PREFIX_EVEX_0FEE,
43234a1e 1488 PREFIX_EVEX_0FEF,
1ba585e8 1489 PREFIX_EVEX_0FF1,
43234a1e
L
1490 PREFIX_EVEX_0FF2,
1491 PREFIX_EVEX_0FF3,
1492 PREFIX_EVEX_0FF4,
1ba585e8
IT
1493 PREFIX_EVEX_0FF5,
1494 PREFIX_EVEX_0FF6,
1495 PREFIX_EVEX_0FF8,
1496 PREFIX_EVEX_0FF9,
43234a1e
L
1497 PREFIX_EVEX_0FFA,
1498 PREFIX_EVEX_0FFB,
1ba585e8
IT
1499 PREFIX_EVEX_0FFC,
1500 PREFIX_EVEX_0FFD,
43234a1e 1501 PREFIX_EVEX_0FFE,
1ba585e8
IT
1502 PREFIX_EVEX_0F3800,
1503 PREFIX_EVEX_0F3804,
1504 PREFIX_EVEX_0F380B,
43234a1e
L
1505 PREFIX_EVEX_0F380C,
1506 PREFIX_EVEX_0F380D,
1ba585e8 1507 PREFIX_EVEX_0F3810,
43234a1e
L
1508 PREFIX_EVEX_0F3811,
1509 PREFIX_EVEX_0F3812,
1510 PREFIX_EVEX_0F3813,
1511 PREFIX_EVEX_0F3814,
1512 PREFIX_EVEX_0F3815,
1513 PREFIX_EVEX_0F3816,
1514 PREFIX_EVEX_0F3818,
1515 PREFIX_EVEX_0F3819,
1516 PREFIX_EVEX_0F381A,
1517 PREFIX_EVEX_0F381B,
1ba585e8
IT
1518 PREFIX_EVEX_0F381C,
1519 PREFIX_EVEX_0F381D,
43234a1e
L
1520 PREFIX_EVEX_0F381E,
1521 PREFIX_EVEX_0F381F,
1ba585e8 1522 PREFIX_EVEX_0F3820,
43234a1e
L
1523 PREFIX_EVEX_0F3821,
1524 PREFIX_EVEX_0F3822,
1525 PREFIX_EVEX_0F3823,
1526 PREFIX_EVEX_0F3824,
1527 PREFIX_EVEX_0F3825,
1ba585e8 1528 PREFIX_EVEX_0F3826,
43234a1e
L
1529 PREFIX_EVEX_0F3827,
1530 PREFIX_EVEX_0F3828,
1531 PREFIX_EVEX_0F3829,
1532 PREFIX_EVEX_0F382A,
1ba585e8 1533 PREFIX_EVEX_0F382B,
43234a1e
L
1534 PREFIX_EVEX_0F382C,
1535 PREFIX_EVEX_0F382D,
1ba585e8 1536 PREFIX_EVEX_0F3830,
43234a1e
L
1537 PREFIX_EVEX_0F3831,
1538 PREFIX_EVEX_0F3832,
1539 PREFIX_EVEX_0F3833,
1540 PREFIX_EVEX_0F3834,
1541 PREFIX_EVEX_0F3835,
1542 PREFIX_EVEX_0F3836,
1543 PREFIX_EVEX_0F3837,
1ba585e8 1544 PREFIX_EVEX_0F3838,
43234a1e
L
1545 PREFIX_EVEX_0F3839,
1546 PREFIX_EVEX_0F383A,
1547 PREFIX_EVEX_0F383B,
1ba585e8 1548 PREFIX_EVEX_0F383C,
43234a1e 1549 PREFIX_EVEX_0F383D,
1ba585e8 1550 PREFIX_EVEX_0F383E,
43234a1e
L
1551 PREFIX_EVEX_0F383F,
1552 PREFIX_EVEX_0F3840,
1553 PREFIX_EVEX_0F3842,
1554 PREFIX_EVEX_0F3843,
1555 PREFIX_EVEX_0F3844,
1556 PREFIX_EVEX_0F3845,
1557 PREFIX_EVEX_0F3846,
1558 PREFIX_EVEX_0F3847,
1559 PREFIX_EVEX_0F384C,
1560 PREFIX_EVEX_0F384D,
1561 PREFIX_EVEX_0F384E,
1562 PREFIX_EVEX_0F384F,
47acf0bd
IT
1563 PREFIX_EVEX_0F3852,
1564 PREFIX_EVEX_0F3853,
620214f7 1565 PREFIX_EVEX_0F3855,
43234a1e
L
1566 PREFIX_EVEX_0F3858,
1567 PREFIX_EVEX_0F3859,
1568 PREFIX_EVEX_0F385A,
1569 PREFIX_EVEX_0F385B,
1570 PREFIX_EVEX_0F3864,
1571 PREFIX_EVEX_0F3865,
1ba585e8
IT
1572 PREFIX_EVEX_0F3866,
1573 PREFIX_EVEX_0F3875,
43234a1e
L
1574 PREFIX_EVEX_0F3876,
1575 PREFIX_EVEX_0F3877,
1ba585e8
IT
1576 PREFIX_EVEX_0F3878,
1577 PREFIX_EVEX_0F3879,
1578 PREFIX_EVEX_0F387A,
1579 PREFIX_EVEX_0F387B,
43234a1e 1580 PREFIX_EVEX_0F387C,
1ba585e8 1581 PREFIX_EVEX_0F387D,
43234a1e
L
1582 PREFIX_EVEX_0F387E,
1583 PREFIX_EVEX_0F387F,
14f195c9 1584 PREFIX_EVEX_0F3883,
43234a1e
L
1585 PREFIX_EVEX_0F3888,
1586 PREFIX_EVEX_0F3889,
1587 PREFIX_EVEX_0F388A,
1588 PREFIX_EVEX_0F388B,
1ba585e8 1589 PREFIX_EVEX_0F388D,
43234a1e
L
1590 PREFIX_EVEX_0F3890,
1591 PREFIX_EVEX_0F3891,
1592 PREFIX_EVEX_0F3892,
1593 PREFIX_EVEX_0F3893,
1594 PREFIX_EVEX_0F3896,
1595 PREFIX_EVEX_0F3897,
1596 PREFIX_EVEX_0F3898,
1597 PREFIX_EVEX_0F3899,
1598 PREFIX_EVEX_0F389A,
1599 PREFIX_EVEX_0F389B,
1600 PREFIX_EVEX_0F389C,
1601 PREFIX_EVEX_0F389D,
1602 PREFIX_EVEX_0F389E,
1603 PREFIX_EVEX_0F389F,
1604 PREFIX_EVEX_0F38A0,
1605 PREFIX_EVEX_0F38A1,
1606 PREFIX_EVEX_0F38A2,
1607 PREFIX_EVEX_0F38A3,
1608 PREFIX_EVEX_0F38A6,
1609 PREFIX_EVEX_0F38A7,
1610 PREFIX_EVEX_0F38A8,
1611 PREFIX_EVEX_0F38A9,
1612 PREFIX_EVEX_0F38AA,
1613 PREFIX_EVEX_0F38AB,
1614 PREFIX_EVEX_0F38AC,
1615 PREFIX_EVEX_0F38AD,
1616 PREFIX_EVEX_0F38AE,
1617 PREFIX_EVEX_0F38AF,
2cc1b5aa
IT
1618 PREFIX_EVEX_0F38B4,
1619 PREFIX_EVEX_0F38B5,
43234a1e
L
1620 PREFIX_EVEX_0F38B6,
1621 PREFIX_EVEX_0F38B7,
1622 PREFIX_EVEX_0F38B8,
1623 PREFIX_EVEX_0F38B9,
1624 PREFIX_EVEX_0F38BA,
1625 PREFIX_EVEX_0F38BB,
1626 PREFIX_EVEX_0F38BC,
1627 PREFIX_EVEX_0F38BD,
1628 PREFIX_EVEX_0F38BE,
1629 PREFIX_EVEX_0F38BF,
1630 PREFIX_EVEX_0F38C4,
1631 PREFIX_EVEX_0F38C6_REG_1,
1632 PREFIX_EVEX_0F38C6_REG_2,
1633 PREFIX_EVEX_0F38C6_REG_5,
1634 PREFIX_EVEX_0F38C6_REG_6,
1635 PREFIX_EVEX_0F38C7_REG_1,
1636 PREFIX_EVEX_0F38C7_REG_2,
1637 PREFIX_EVEX_0F38C7_REG_5,
1638 PREFIX_EVEX_0F38C7_REG_6,
1639 PREFIX_EVEX_0F38C8,
1640 PREFIX_EVEX_0F38CA,
1641 PREFIX_EVEX_0F38CB,
1642 PREFIX_EVEX_0F38CC,
1643 PREFIX_EVEX_0F38CD,
1644
1645 PREFIX_EVEX_0F3A00,
1646 PREFIX_EVEX_0F3A01,
1647 PREFIX_EVEX_0F3A03,
1648 PREFIX_EVEX_0F3A04,
1649 PREFIX_EVEX_0F3A05,
1650 PREFIX_EVEX_0F3A08,
1651 PREFIX_EVEX_0F3A09,
1652 PREFIX_EVEX_0F3A0A,
1653 PREFIX_EVEX_0F3A0B,
1ba585e8
IT
1654 PREFIX_EVEX_0F3A0F,
1655 PREFIX_EVEX_0F3A14,
1656 PREFIX_EVEX_0F3A15,
90a915bf 1657 PREFIX_EVEX_0F3A16,
43234a1e
L
1658 PREFIX_EVEX_0F3A17,
1659 PREFIX_EVEX_0F3A18,
1660 PREFIX_EVEX_0F3A19,
1661 PREFIX_EVEX_0F3A1A,
1662 PREFIX_EVEX_0F3A1B,
1663 PREFIX_EVEX_0F3A1D,
1664 PREFIX_EVEX_0F3A1E,
1665 PREFIX_EVEX_0F3A1F,
1ba585e8 1666 PREFIX_EVEX_0F3A20,
43234a1e 1667 PREFIX_EVEX_0F3A21,
90a915bf 1668 PREFIX_EVEX_0F3A22,
43234a1e
L
1669 PREFIX_EVEX_0F3A23,
1670 PREFIX_EVEX_0F3A25,
1671 PREFIX_EVEX_0F3A26,
1672 PREFIX_EVEX_0F3A27,
1673 PREFIX_EVEX_0F3A38,
1674 PREFIX_EVEX_0F3A39,
1675 PREFIX_EVEX_0F3A3A,
1676 PREFIX_EVEX_0F3A3B,
1ba585e8
IT
1677 PREFIX_EVEX_0F3A3E,
1678 PREFIX_EVEX_0F3A3F,
1679 PREFIX_EVEX_0F3A42,
43234a1e 1680 PREFIX_EVEX_0F3A43,
90a915bf
IT
1681 PREFIX_EVEX_0F3A50,
1682 PREFIX_EVEX_0F3A51,
43234a1e 1683 PREFIX_EVEX_0F3A54,
90a915bf
IT
1684 PREFIX_EVEX_0F3A55,
1685 PREFIX_EVEX_0F3A56,
1686 PREFIX_EVEX_0F3A57,
1687 PREFIX_EVEX_0F3A66,
1688 PREFIX_EVEX_0F3A67
51e7da1b 1689};
4e7d34a6 1690
51e7da1b
L
1691enum
1692{
1693 X86_64_06 = 0,
3873ba12
L
1694 X86_64_07,
1695 X86_64_0D,
1696 X86_64_16,
1697 X86_64_17,
1698 X86_64_1E,
1699 X86_64_1F,
1700 X86_64_27,
1701 X86_64_2F,
1702 X86_64_37,
1703 X86_64_3F,
1704 X86_64_60,
1705 X86_64_61,
1706 X86_64_62,
1707 X86_64_63,
1708 X86_64_6D,
1709 X86_64_6F,
d039fef3 1710 X86_64_82,
3873ba12
L
1711 X86_64_9A,
1712 X86_64_C4,
1713 X86_64_C5,
1714 X86_64_CE,
1715 X86_64_D4,
1716 X86_64_D5,
a72d2af2
L
1717 X86_64_E8,
1718 X86_64_E9,
3873ba12
L
1719 X86_64_EA,
1720 X86_64_0F01_REG_0,
1721 X86_64_0F01_REG_1,
1722 X86_64_0F01_REG_2,
1723 X86_64_0F01_REG_3
51e7da1b 1724};
4e7d34a6 1725
51e7da1b
L
1726enum
1727{
1728 THREE_BYTE_0F38 = 0,
1f334aeb 1729 THREE_BYTE_0F3A
51e7da1b 1730};
4e7d34a6 1731
f88c9eb0
SP
1732enum
1733{
5dd85c99
SP
1734 XOP_08 = 0,
1735 XOP_09,
f88c9eb0
SP
1736 XOP_0A
1737};
1738
51e7da1b
L
1739enum
1740{
1741 VEX_0F = 0,
3873ba12
L
1742 VEX_0F38,
1743 VEX_0F3A
51e7da1b 1744};
c0f3af97 1745
43234a1e
L
1746enum
1747{
1748 EVEX_0F = 0,
1749 EVEX_0F38,
1750 EVEX_0F3A
1751};
1752
51e7da1b
L
1753enum
1754{
592a252b
L
1755 VEX_LEN_0F10_P_1 = 0,
1756 VEX_LEN_0F10_P_3,
1757 VEX_LEN_0F11_P_1,
1758 VEX_LEN_0F11_P_3,
1759 VEX_LEN_0F12_P_0_M_0,
1760 VEX_LEN_0F12_P_0_M_1,
1761 VEX_LEN_0F12_P_2,
1762 VEX_LEN_0F13_M_0,
1763 VEX_LEN_0F16_P_0_M_0,
1764 VEX_LEN_0F16_P_0_M_1,
1765 VEX_LEN_0F16_P_2,
1766 VEX_LEN_0F17_M_0,
1767 VEX_LEN_0F2A_P_1,
1768 VEX_LEN_0F2A_P_3,
1769 VEX_LEN_0F2C_P_1,
1770 VEX_LEN_0F2C_P_3,
1771 VEX_LEN_0F2D_P_1,
1772 VEX_LEN_0F2D_P_3,
1773 VEX_LEN_0F2E_P_0,
1774 VEX_LEN_0F2E_P_2,
1775 VEX_LEN_0F2F_P_0,
1776 VEX_LEN_0F2F_P_2,
43234a1e 1777 VEX_LEN_0F41_P_0,
1ba585e8 1778 VEX_LEN_0F41_P_2,
43234a1e 1779 VEX_LEN_0F42_P_0,
1ba585e8 1780 VEX_LEN_0F42_P_2,
43234a1e 1781 VEX_LEN_0F44_P_0,
1ba585e8 1782 VEX_LEN_0F44_P_2,
43234a1e 1783 VEX_LEN_0F45_P_0,
1ba585e8 1784 VEX_LEN_0F45_P_2,
43234a1e 1785 VEX_LEN_0F46_P_0,
1ba585e8 1786 VEX_LEN_0F46_P_2,
43234a1e 1787 VEX_LEN_0F47_P_0,
1ba585e8
IT
1788 VEX_LEN_0F47_P_2,
1789 VEX_LEN_0F4A_P_0,
1790 VEX_LEN_0F4A_P_2,
1791 VEX_LEN_0F4B_P_0,
43234a1e 1792 VEX_LEN_0F4B_P_2,
592a252b
L
1793 VEX_LEN_0F51_P_1,
1794 VEX_LEN_0F51_P_3,
1795 VEX_LEN_0F52_P_1,
1796 VEX_LEN_0F53_P_1,
1797 VEX_LEN_0F58_P_1,
1798 VEX_LEN_0F58_P_3,
1799 VEX_LEN_0F59_P_1,
1800 VEX_LEN_0F59_P_3,
1801 VEX_LEN_0F5A_P_1,
1802 VEX_LEN_0F5A_P_3,
1803 VEX_LEN_0F5C_P_1,
1804 VEX_LEN_0F5C_P_3,
1805 VEX_LEN_0F5D_P_1,
1806 VEX_LEN_0F5D_P_3,
1807 VEX_LEN_0F5E_P_1,
1808 VEX_LEN_0F5E_P_3,
1809 VEX_LEN_0F5F_P_1,
1810 VEX_LEN_0F5F_P_3,
592a252b 1811 VEX_LEN_0F6E_P_2,
592a252b
L
1812 VEX_LEN_0F7E_P_1,
1813 VEX_LEN_0F7E_P_2,
43234a1e 1814 VEX_LEN_0F90_P_0,
1ba585e8 1815 VEX_LEN_0F90_P_2,
43234a1e 1816 VEX_LEN_0F91_P_0,
1ba585e8 1817 VEX_LEN_0F91_P_2,
43234a1e 1818 VEX_LEN_0F92_P_0,
90a915bf 1819 VEX_LEN_0F92_P_2,
1ba585e8 1820 VEX_LEN_0F92_P_3,
43234a1e 1821 VEX_LEN_0F93_P_0,
90a915bf 1822 VEX_LEN_0F93_P_2,
1ba585e8 1823 VEX_LEN_0F93_P_3,
43234a1e 1824 VEX_LEN_0F98_P_0,
1ba585e8
IT
1825 VEX_LEN_0F98_P_2,
1826 VEX_LEN_0F99_P_0,
1827 VEX_LEN_0F99_P_2,
592a252b
L
1828 VEX_LEN_0FAE_R_2_M_0,
1829 VEX_LEN_0FAE_R_3_M_0,
1830 VEX_LEN_0FC2_P_1,
1831 VEX_LEN_0FC2_P_3,
1832 VEX_LEN_0FC4_P_2,
1833 VEX_LEN_0FC5_P_2,
592a252b 1834 VEX_LEN_0FD6_P_2,
592a252b 1835 VEX_LEN_0FF7_P_2,
6c30d220
L
1836 VEX_LEN_0F3816_P_2,
1837 VEX_LEN_0F3819_P_2,
592a252b 1838 VEX_LEN_0F381A_P_2_M_0,
6c30d220 1839 VEX_LEN_0F3836_P_2,
592a252b 1840 VEX_LEN_0F3841_P_2,
6c30d220 1841 VEX_LEN_0F385A_P_2_M_0,
592a252b
L
1842 VEX_LEN_0F38DB_P_2,
1843 VEX_LEN_0F38DC_P_2,
1844 VEX_LEN_0F38DD_P_2,
1845 VEX_LEN_0F38DE_P_2,
1846 VEX_LEN_0F38DF_P_2,
f12dc422
L
1847 VEX_LEN_0F38F2_P_0,
1848 VEX_LEN_0F38F3_R_1_P_0,
1849 VEX_LEN_0F38F3_R_2_P_0,
1850 VEX_LEN_0F38F3_R_3_P_0,
6c30d220
L
1851 VEX_LEN_0F38F5_P_0,
1852 VEX_LEN_0F38F5_P_1,
1853 VEX_LEN_0F38F5_P_3,
1854 VEX_LEN_0F38F6_P_3,
f12dc422 1855 VEX_LEN_0F38F7_P_0,
6c30d220
L
1856 VEX_LEN_0F38F7_P_1,
1857 VEX_LEN_0F38F7_P_2,
1858 VEX_LEN_0F38F7_P_3,
1859 VEX_LEN_0F3A00_P_2,
1860 VEX_LEN_0F3A01_P_2,
592a252b
L
1861 VEX_LEN_0F3A06_P_2,
1862 VEX_LEN_0F3A0A_P_2,
1863 VEX_LEN_0F3A0B_P_2,
592a252b
L
1864 VEX_LEN_0F3A14_P_2,
1865 VEX_LEN_0F3A15_P_2,
1866 VEX_LEN_0F3A16_P_2,
1867 VEX_LEN_0F3A17_P_2,
1868 VEX_LEN_0F3A18_P_2,
1869 VEX_LEN_0F3A19_P_2,
1870 VEX_LEN_0F3A20_P_2,
1871 VEX_LEN_0F3A21_P_2,
1872 VEX_LEN_0F3A22_P_2,
43234a1e 1873 VEX_LEN_0F3A30_P_2,
1ba585e8 1874 VEX_LEN_0F3A31_P_2,
43234a1e 1875 VEX_LEN_0F3A32_P_2,
1ba585e8 1876 VEX_LEN_0F3A33_P_2,
6c30d220
L
1877 VEX_LEN_0F3A38_P_2,
1878 VEX_LEN_0F3A39_P_2,
592a252b 1879 VEX_LEN_0F3A41_P_2,
592a252b 1880 VEX_LEN_0F3A44_P_2,
6c30d220 1881 VEX_LEN_0F3A46_P_2,
592a252b
L
1882 VEX_LEN_0F3A60_P_2,
1883 VEX_LEN_0F3A61_P_2,
1884 VEX_LEN_0F3A62_P_2,
1885 VEX_LEN_0F3A63_P_2,
1886 VEX_LEN_0F3A6A_P_2,
1887 VEX_LEN_0F3A6B_P_2,
1888 VEX_LEN_0F3A6E_P_2,
1889 VEX_LEN_0F3A6F_P_2,
1890 VEX_LEN_0F3A7A_P_2,
1891 VEX_LEN_0F3A7B_P_2,
1892 VEX_LEN_0F3A7E_P_2,
1893 VEX_LEN_0F3A7F_P_2,
1894 VEX_LEN_0F3ADF_P_2,
6c30d220 1895 VEX_LEN_0F3AF0_P_3,
ff688e1f
L
1896 VEX_LEN_0FXOP_08_CC,
1897 VEX_LEN_0FXOP_08_CD,
1898 VEX_LEN_0FXOP_08_CE,
1899 VEX_LEN_0FXOP_08_CF,
1900 VEX_LEN_0FXOP_08_EC,
1901 VEX_LEN_0FXOP_08_ED,
1902 VEX_LEN_0FXOP_08_EE,
1903 VEX_LEN_0FXOP_08_EF,
592a252b
L
1904 VEX_LEN_0FXOP_09_80,
1905 VEX_LEN_0FXOP_09_81
51e7da1b 1906};
c0f3af97 1907
9e30b8e0
L
1908enum
1909{
592a252b
L
1910 VEX_W_0F10_P_0 = 0,
1911 VEX_W_0F10_P_1,
1912 VEX_W_0F10_P_2,
1913 VEX_W_0F10_P_3,
1914 VEX_W_0F11_P_0,
1915 VEX_W_0F11_P_1,
1916 VEX_W_0F11_P_2,
1917 VEX_W_0F11_P_3,
1918 VEX_W_0F12_P_0_M_0,
1919 VEX_W_0F12_P_0_M_1,
1920 VEX_W_0F12_P_1,
1921 VEX_W_0F12_P_2,
1922 VEX_W_0F12_P_3,
1923 VEX_W_0F13_M_0,
1924 VEX_W_0F14,
1925 VEX_W_0F15,
1926 VEX_W_0F16_P_0_M_0,
1927 VEX_W_0F16_P_0_M_1,
1928 VEX_W_0F16_P_1,
1929 VEX_W_0F16_P_2,
1930 VEX_W_0F17_M_0,
1931 VEX_W_0F28,
1932 VEX_W_0F29,
1933 VEX_W_0F2B_M_0,
1934 VEX_W_0F2E_P_0,
1935 VEX_W_0F2E_P_2,
1936 VEX_W_0F2F_P_0,
1937 VEX_W_0F2F_P_2,
43234a1e 1938 VEX_W_0F41_P_0_LEN_1,
1ba585e8 1939 VEX_W_0F41_P_2_LEN_1,
43234a1e 1940 VEX_W_0F42_P_0_LEN_1,
1ba585e8 1941 VEX_W_0F42_P_2_LEN_1,
43234a1e 1942 VEX_W_0F44_P_0_LEN_0,
1ba585e8 1943 VEX_W_0F44_P_2_LEN_0,
43234a1e 1944 VEX_W_0F45_P_0_LEN_1,
1ba585e8 1945 VEX_W_0F45_P_2_LEN_1,
43234a1e 1946 VEX_W_0F46_P_0_LEN_1,
1ba585e8 1947 VEX_W_0F46_P_2_LEN_1,
43234a1e 1948 VEX_W_0F47_P_0_LEN_1,
1ba585e8
IT
1949 VEX_W_0F47_P_2_LEN_1,
1950 VEX_W_0F4A_P_0_LEN_1,
1951 VEX_W_0F4A_P_2_LEN_1,
1952 VEX_W_0F4B_P_0_LEN_1,
43234a1e 1953 VEX_W_0F4B_P_2_LEN_1,
592a252b
L
1954 VEX_W_0F50_M_0,
1955 VEX_W_0F51_P_0,
1956 VEX_W_0F51_P_1,
1957 VEX_W_0F51_P_2,
1958 VEX_W_0F51_P_3,
1959 VEX_W_0F52_P_0,
1960 VEX_W_0F52_P_1,
1961 VEX_W_0F53_P_0,
1962 VEX_W_0F53_P_1,
1963 VEX_W_0F58_P_0,
1964 VEX_W_0F58_P_1,
1965 VEX_W_0F58_P_2,
1966 VEX_W_0F58_P_3,
1967 VEX_W_0F59_P_0,
1968 VEX_W_0F59_P_1,
1969 VEX_W_0F59_P_2,
1970 VEX_W_0F59_P_3,
1971 VEX_W_0F5A_P_0,
1972 VEX_W_0F5A_P_1,
1973 VEX_W_0F5A_P_3,
1974 VEX_W_0F5B_P_0,
1975 VEX_W_0F5B_P_1,
1976 VEX_W_0F5B_P_2,
1977 VEX_W_0F5C_P_0,
1978 VEX_W_0F5C_P_1,
1979 VEX_W_0F5C_P_2,
1980 VEX_W_0F5C_P_3,
1981 VEX_W_0F5D_P_0,
1982 VEX_W_0F5D_P_1,
1983 VEX_W_0F5D_P_2,
1984 VEX_W_0F5D_P_3,
1985 VEX_W_0F5E_P_0,
1986 VEX_W_0F5E_P_1,
1987 VEX_W_0F5E_P_2,
1988 VEX_W_0F5E_P_3,
1989 VEX_W_0F5F_P_0,
1990 VEX_W_0F5F_P_1,
1991 VEX_W_0F5F_P_2,
1992 VEX_W_0F5F_P_3,
1993 VEX_W_0F60_P_2,
1994 VEX_W_0F61_P_2,
1995 VEX_W_0F62_P_2,
1996 VEX_W_0F63_P_2,
1997 VEX_W_0F64_P_2,
1998 VEX_W_0F65_P_2,
1999 VEX_W_0F66_P_2,
2000 VEX_W_0F67_P_2,
2001 VEX_W_0F68_P_2,
2002 VEX_W_0F69_P_2,
2003 VEX_W_0F6A_P_2,
2004 VEX_W_0F6B_P_2,
2005 VEX_W_0F6C_P_2,
2006 VEX_W_0F6D_P_2,
2007 VEX_W_0F6F_P_1,
2008 VEX_W_0F6F_P_2,
2009 VEX_W_0F70_P_1,
2010 VEX_W_0F70_P_2,
2011 VEX_W_0F70_P_3,
2012 VEX_W_0F71_R_2_P_2,
2013 VEX_W_0F71_R_4_P_2,
2014 VEX_W_0F71_R_6_P_2,
2015 VEX_W_0F72_R_2_P_2,
2016 VEX_W_0F72_R_4_P_2,
2017 VEX_W_0F72_R_6_P_2,
2018 VEX_W_0F73_R_2_P_2,
2019 VEX_W_0F73_R_3_P_2,
2020 VEX_W_0F73_R_6_P_2,
2021 VEX_W_0F73_R_7_P_2,
2022 VEX_W_0F74_P_2,
2023 VEX_W_0F75_P_2,
2024 VEX_W_0F76_P_2,
2025 VEX_W_0F77_P_0,
2026 VEX_W_0F7C_P_2,
2027 VEX_W_0F7C_P_3,
2028 VEX_W_0F7D_P_2,
2029 VEX_W_0F7D_P_3,
2030 VEX_W_0F7E_P_1,
2031 VEX_W_0F7F_P_1,
2032 VEX_W_0F7F_P_2,
43234a1e 2033 VEX_W_0F90_P_0_LEN_0,
1ba585e8 2034 VEX_W_0F90_P_2_LEN_0,
43234a1e 2035 VEX_W_0F91_P_0_LEN_0,
1ba585e8 2036 VEX_W_0F91_P_2_LEN_0,
43234a1e 2037 VEX_W_0F92_P_0_LEN_0,
90a915bf 2038 VEX_W_0F92_P_2_LEN_0,
1ba585e8 2039 VEX_W_0F92_P_3_LEN_0,
43234a1e 2040 VEX_W_0F93_P_0_LEN_0,
90a915bf 2041 VEX_W_0F93_P_2_LEN_0,
1ba585e8 2042 VEX_W_0F93_P_3_LEN_0,
43234a1e 2043 VEX_W_0F98_P_0_LEN_0,
1ba585e8
IT
2044 VEX_W_0F98_P_2_LEN_0,
2045 VEX_W_0F99_P_0_LEN_0,
2046 VEX_W_0F99_P_2_LEN_0,
592a252b
L
2047 VEX_W_0FAE_R_2_M_0,
2048 VEX_W_0FAE_R_3_M_0,
2049 VEX_W_0FC2_P_0,
2050 VEX_W_0FC2_P_1,
2051 VEX_W_0FC2_P_2,
2052 VEX_W_0FC2_P_3,
2053 VEX_W_0FC4_P_2,
2054 VEX_W_0FC5_P_2,
2055 VEX_W_0FD0_P_2,
2056 VEX_W_0FD0_P_3,
2057 VEX_W_0FD1_P_2,
2058 VEX_W_0FD2_P_2,
2059 VEX_W_0FD3_P_2,
2060 VEX_W_0FD4_P_2,
2061 VEX_W_0FD5_P_2,
2062 VEX_W_0FD6_P_2,
2063 VEX_W_0FD7_P_2_M_1,
2064 VEX_W_0FD8_P_2,
2065 VEX_W_0FD9_P_2,
2066 VEX_W_0FDA_P_2,
2067 VEX_W_0FDB_P_2,
2068 VEX_W_0FDC_P_2,
2069 VEX_W_0FDD_P_2,
2070 VEX_W_0FDE_P_2,
2071 VEX_W_0FDF_P_2,
2072 VEX_W_0FE0_P_2,
2073 VEX_W_0FE1_P_2,
2074 VEX_W_0FE2_P_2,
2075 VEX_W_0FE3_P_2,
2076 VEX_W_0FE4_P_2,
2077 VEX_W_0FE5_P_2,
2078 VEX_W_0FE6_P_1,
2079 VEX_W_0FE6_P_2,
2080 VEX_W_0FE6_P_3,
2081 VEX_W_0FE7_P_2_M_0,
2082 VEX_W_0FE8_P_2,
2083 VEX_W_0FE9_P_2,
2084 VEX_W_0FEA_P_2,
2085 VEX_W_0FEB_P_2,
2086 VEX_W_0FEC_P_2,
2087 VEX_W_0FED_P_2,
2088 VEX_W_0FEE_P_2,
2089 VEX_W_0FEF_P_2,
2090 VEX_W_0FF0_P_3_M_0,
2091 VEX_W_0FF1_P_2,
2092 VEX_W_0FF2_P_2,
2093 VEX_W_0FF3_P_2,
2094 VEX_W_0FF4_P_2,
2095 VEX_W_0FF5_P_2,
2096 VEX_W_0FF6_P_2,
2097 VEX_W_0FF7_P_2,
2098 VEX_W_0FF8_P_2,
2099 VEX_W_0FF9_P_2,
2100 VEX_W_0FFA_P_2,
2101 VEX_W_0FFB_P_2,
2102 VEX_W_0FFC_P_2,
2103 VEX_W_0FFD_P_2,
2104 VEX_W_0FFE_P_2,
2105 VEX_W_0F3800_P_2,
2106 VEX_W_0F3801_P_2,
2107 VEX_W_0F3802_P_2,
2108 VEX_W_0F3803_P_2,
2109 VEX_W_0F3804_P_2,
2110 VEX_W_0F3805_P_2,
2111 VEX_W_0F3806_P_2,
2112 VEX_W_0F3807_P_2,
2113 VEX_W_0F3808_P_2,
2114 VEX_W_0F3809_P_2,
2115 VEX_W_0F380A_P_2,
2116 VEX_W_0F380B_P_2,
2117 VEX_W_0F380C_P_2,
2118 VEX_W_0F380D_P_2,
2119 VEX_W_0F380E_P_2,
2120 VEX_W_0F380F_P_2,
6c30d220 2121 VEX_W_0F3816_P_2,
592a252b 2122 VEX_W_0F3817_P_2,
6c30d220
L
2123 VEX_W_0F3818_P_2,
2124 VEX_W_0F3819_P_2,
592a252b
L
2125 VEX_W_0F381A_P_2_M_0,
2126 VEX_W_0F381C_P_2,
2127 VEX_W_0F381D_P_2,
2128 VEX_W_0F381E_P_2,
2129 VEX_W_0F3820_P_2,
2130 VEX_W_0F3821_P_2,
2131 VEX_W_0F3822_P_2,
2132 VEX_W_0F3823_P_2,
2133 VEX_W_0F3824_P_2,
2134 VEX_W_0F3825_P_2,
2135 VEX_W_0F3828_P_2,
2136 VEX_W_0F3829_P_2,
2137 VEX_W_0F382A_P_2_M_0,
2138 VEX_W_0F382B_P_2,
2139 VEX_W_0F382C_P_2_M_0,
2140 VEX_W_0F382D_P_2_M_0,
2141 VEX_W_0F382E_P_2_M_0,
2142 VEX_W_0F382F_P_2_M_0,
2143 VEX_W_0F3830_P_2,
2144 VEX_W_0F3831_P_2,
2145 VEX_W_0F3832_P_2,
2146 VEX_W_0F3833_P_2,
2147 VEX_W_0F3834_P_2,
2148 VEX_W_0F3835_P_2,
6c30d220 2149 VEX_W_0F3836_P_2,
592a252b
L
2150 VEX_W_0F3837_P_2,
2151 VEX_W_0F3838_P_2,
2152 VEX_W_0F3839_P_2,
2153 VEX_W_0F383A_P_2,
2154 VEX_W_0F383B_P_2,
2155 VEX_W_0F383C_P_2,
2156 VEX_W_0F383D_P_2,
2157 VEX_W_0F383E_P_2,
2158 VEX_W_0F383F_P_2,
2159 VEX_W_0F3840_P_2,
2160 VEX_W_0F3841_P_2,
6c30d220
L
2161 VEX_W_0F3846_P_2,
2162 VEX_W_0F3858_P_2,
2163 VEX_W_0F3859_P_2,
2164 VEX_W_0F385A_P_2_M_0,
2165 VEX_W_0F3878_P_2,
2166 VEX_W_0F3879_P_2,
592a252b
L
2167 VEX_W_0F38DB_P_2,
2168 VEX_W_0F38DC_P_2,
2169 VEX_W_0F38DD_P_2,
2170 VEX_W_0F38DE_P_2,
2171 VEX_W_0F38DF_P_2,
6c30d220
L
2172 VEX_W_0F3A00_P_2,
2173 VEX_W_0F3A01_P_2,
2174 VEX_W_0F3A02_P_2,
592a252b
L
2175 VEX_W_0F3A04_P_2,
2176 VEX_W_0F3A05_P_2,
2177 VEX_W_0F3A06_P_2,
2178 VEX_W_0F3A08_P_2,
2179 VEX_W_0F3A09_P_2,
2180 VEX_W_0F3A0A_P_2,
2181 VEX_W_0F3A0B_P_2,
2182 VEX_W_0F3A0C_P_2,
2183 VEX_W_0F3A0D_P_2,
2184 VEX_W_0F3A0E_P_2,
2185 VEX_W_0F3A0F_P_2,
2186 VEX_W_0F3A14_P_2,
2187 VEX_W_0F3A15_P_2,
2188 VEX_W_0F3A18_P_2,
2189 VEX_W_0F3A19_P_2,
2190 VEX_W_0F3A20_P_2,
2191 VEX_W_0F3A21_P_2,
43234a1e 2192 VEX_W_0F3A30_P_2_LEN_0,
1ba585e8 2193 VEX_W_0F3A31_P_2_LEN_0,
43234a1e 2194 VEX_W_0F3A32_P_2_LEN_0,
1ba585e8 2195 VEX_W_0F3A33_P_2_LEN_0,
6c30d220
L
2196 VEX_W_0F3A38_P_2,
2197 VEX_W_0F3A39_P_2,
592a252b
L
2198 VEX_W_0F3A40_P_2,
2199 VEX_W_0F3A41_P_2,
2200 VEX_W_0F3A42_P_2,
2201 VEX_W_0F3A44_P_2,
6c30d220 2202 VEX_W_0F3A46_P_2,
592a252b
L
2203 VEX_W_0F3A48_P_2,
2204 VEX_W_0F3A49_P_2,
2205 VEX_W_0F3A4A_P_2,
2206 VEX_W_0F3A4B_P_2,
2207 VEX_W_0F3A4C_P_2,
592a252b
L
2208 VEX_W_0F3A62_P_2,
2209 VEX_W_0F3A63_P_2,
43234a1e
L
2210 VEX_W_0F3ADF_P_2,
2211
2212 EVEX_W_0F10_P_0,
2213 EVEX_W_0F10_P_1_M_0,
2214 EVEX_W_0F10_P_1_M_1,
2215 EVEX_W_0F10_P_2,
2216 EVEX_W_0F10_P_3_M_0,
2217 EVEX_W_0F10_P_3_M_1,
2218 EVEX_W_0F11_P_0,
2219 EVEX_W_0F11_P_1_M_0,
2220 EVEX_W_0F11_P_1_M_1,
2221 EVEX_W_0F11_P_2,
2222 EVEX_W_0F11_P_3_M_0,
2223 EVEX_W_0F11_P_3_M_1,
2224 EVEX_W_0F12_P_0_M_0,
2225 EVEX_W_0F12_P_0_M_1,
2226 EVEX_W_0F12_P_1,
2227 EVEX_W_0F12_P_2,
2228 EVEX_W_0F12_P_3,
2229 EVEX_W_0F13_P_0,
2230 EVEX_W_0F13_P_2,
2231 EVEX_W_0F14_P_0,
2232 EVEX_W_0F14_P_2,
2233 EVEX_W_0F15_P_0,
2234 EVEX_W_0F15_P_2,
2235 EVEX_W_0F16_P_0_M_0,
2236 EVEX_W_0F16_P_0_M_1,
2237 EVEX_W_0F16_P_1,
2238 EVEX_W_0F16_P_2,
2239 EVEX_W_0F17_P_0,
2240 EVEX_W_0F17_P_2,
2241 EVEX_W_0F28_P_0,
2242 EVEX_W_0F28_P_2,
2243 EVEX_W_0F29_P_0,
2244 EVEX_W_0F29_P_2,
2245 EVEX_W_0F2A_P_1,
2246 EVEX_W_0F2A_P_3,
2247 EVEX_W_0F2B_P_0,
2248 EVEX_W_0F2B_P_2,
2249 EVEX_W_0F2E_P_0,
2250 EVEX_W_0F2E_P_2,
2251 EVEX_W_0F2F_P_0,
2252 EVEX_W_0F2F_P_2,
2253 EVEX_W_0F51_P_0,
2254 EVEX_W_0F51_P_1,
2255 EVEX_W_0F51_P_2,
2256 EVEX_W_0F51_P_3,
90a915bf
IT
2257 EVEX_W_0F54_P_0,
2258 EVEX_W_0F54_P_2,
2259 EVEX_W_0F55_P_0,
2260 EVEX_W_0F55_P_2,
2261 EVEX_W_0F56_P_0,
2262 EVEX_W_0F56_P_2,
2263 EVEX_W_0F57_P_0,
2264 EVEX_W_0F57_P_2,
43234a1e
L
2265 EVEX_W_0F58_P_0,
2266 EVEX_W_0F58_P_1,
2267 EVEX_W_0F58_P_2,
2268 EVEX_W_0F58_P_3,
2269 EVEX_W_0F59_P_0,
2270 EVEX_W_0F59_P_1,
2271 EVEX_W_0F59_P_2,
2272 EVEX_W_0F59_P_3,
2273 EVEX_W_0F5A_P_0,
2274 EVEX_W_0F5A_P_1,
2275 EVEX_W_0F5A_P_2,
2276 EVEX_W_0F5A_P_3,
2277 EVEX_W_0F5B_P_0,
2278 EVEX_W_0F5B_P_1,
2279 EVEX_W_0F5B_P_2,
2280 EVEX_W_0F5C_P_0,
2281 EVEX_W_0F5C_P_1,
2282 EVEX_W_0F5C_P_2,
2283 EVEX_W_0F5C_P_3,
2284 EVEX_W_0F5D_P_0,
2285 EVEX_W_0F5D_P_1,
2286 EVEX_W_0F5D_P_2,
2287 EVEX_W_0F5D_P_3,
2288 EVEX_W_0F5E_P_0,
2289 EVEX_W_0F5E_P_1,
2290 EVEX_W_0F5E_P_2,
2291 EVEX_W_0F5E_P_3,
2292 EVEX_W_0F5F_P_0,
2293 EVEX_W_0F5F_P_1,
2294 EVEX_W_0F5F_P_2,
2295 EVEX_W_0F5F_P_3,
2296 EVEX_W_0F62_P_2,
2297 EVEX_W_0F66_P_2,
2298 EVEX_W_0F6A_P_2,
1ba585e8 2299 EVEX_W_0F6B_P_2,
43234a1e
L
2300 EVEX_W_0F6C_P_2,
2301 EVEX_W_0F6D_P_2,
2302 EVEX_W_0F6E_P_2,
2303 EVEX_W_0F6F_P_1,
2304 EVEX_W_0F6F_P_2,
1ba585e8 2305 EVEX_W_0F6F_P_3,
43234a1e
L
2306 EVEX_W_0F70_P_2,
2307 EVEX_W_0F72_R_2_P_2,
2308 EVEX_W_0F72_R_6_P_2,
2309 EVEX_W_0F73_R_2_P_2,
2310 EVEX_W_0F73_R_6_P_2,
2311 EVEX_W_0F76_P_2,
2312 EVEX_W_0F78_P_0,
90a915bf 2313 EVEX_W_0F78_P_2,
43234a1e 2314 EVEX_W_0F79_P_0,
90a915bf 2315 EVEX_W_0F79_P_2,
43234a1e 2316 EVEX_W_0F7A_P_1,
90a915bf 2317 EVEX_W_0F7A_P_2,
43234a1e
L
2318 EVEX_W_0F7A_P_3,
2319 EVEX_W_0F7B_P_1,
90a915bf 2320 EVEX_W_0F7B_P_2,
43234a1e
L
2321 EVEX_W_0F7B_P_3,
2322 EVEX_W_0F7E_P_1,
2323 EVEX_W_0F7E_P_2,
2324 EVEX_W_0F7F_P_1,
2325 EVEX_W_0F7F_P_2,
1ba585e8 2326 EVEX_W_0F7F_P_3,
43234a1e
L
2327 EVEX_W_0FC2_P_0,
2328 EVEX_W_0FC2_P_1,
2329 EVEX_W_0FC2_P_2,
2330 EVEX_W_0FC2_P_3,
2331 EVEX_W_0FC6_P_0,
2332 EVEX_W_0FC6_P_2,
2333 EVEX_W_0FD2_P_2,
2334 EVEX_W_0FD3_P_2,
2335 EVEX_W_0FD4_P_2,
2336 EVEX_W_0FD6_P_2,
2337 EVEX_W_0FE6_P_1,
2338 EVEX_W_0FE6_P_2,
2339 EVEX_W_0FE6_P_3,
2340 EVEX_W_0FE7_P_2,
2341 EVEX_W_0FF2_P_2,
2342 EVEX_W_0FF3_P_2,
2343 EVEX_W_0FF4_P_2,
2344 EVEX_W_0FFA_P_2,
2345 EVEX_W_0FFB_P_2,
2346 EVEX_W_0FFE_P_2,
2347 EVEX_W_0F380C_P_2,
2348 EVEX_W_0F380D_P_2,
1ba585e8
IT
2349 EVEX_W_0F3810_P_1,
2350 EVEX_W_0F3810_P_2,
43234a1e 2351 EVEX_W_0F3811_P_1,
1ba585e8 2352 EVEX_W_0F3811_P_2,
43234a1e 2353 EVEX_W_0F3812_P_1,
1ba585e8 2354 EVEX_W_0F3812_P_2,
43234a1e
L
2355 EVEX_W_0F3813_P_1,
2356 EVEX_W_0F3813_P_2,
2357 EVEX_W_0F3814_P_1,
2358 EVEX_W_0F3815_P_1,
2359 EVEX_W_0F3818_P_2,
2360 EVEX_W_0F3819_P_2,
2361 EVEX_W_0F381A_P_2,
2362 EVEX_W_0F381B_P_2,
2363 EVEX_W_0F381E_P_2,
2364 EVEX_W_0F381F_P_2,
1ba585e8 2365 EVEX_W_0F3820_P_1,
43234a1e
L
2366 EVEX_W_0F3821_P_1,
2367 EVEX_W_0F3822_P_1,
2368 EVEX_W_0F3823_P_1,
2369 EVEX_W_0F3824_P_1,
2370 EVEX_W_0F3825_P_1,
2371 EVEX_W_0F3825_P_2,
1ba585e8
IT
2372 EVEX_W_0F3826_P_1,
2373 EVEX_W_0F3826_P_2,
2374 EVEX_W_0F3828_P_1,
43234a1e 2375 EVEX_W_0F3828_P_2,
1ba585e8 2376 EVEX_W_0F3829_P_1,
43234a1e
L
2377 EVEX_W_0F3829_P_2,
2378 EVEX_W_0F382A_P_1,
2379 EVEX_W_0F382A_P_2,
1ba585e8
IT
2380 EVEX_W_0F382B_P_2,
2381 EVEX_W_0F3830_P_1,
43234a1e
L
2382 EVEX_W_0F3831_P_1,
2383 EVEX_W_0F3832_P_1,
2384 EVEX_W_0F3833_P_1,
2385 EVEX_W_0F3834_P_1,
2386 EVEX_W_0F3835_P_1,
2387 EVEX_W_0F3835_P_2,
2388 EVEX_W_0F3837_P_2,
90a915bf
IT
2389 EVEX_W_0F3838_P_1,
2390 EVEX_W_0F3839_P_1,
43234a1e
L
2391 EVEX_W_0F383A_P_1,
2392 EVEX_W_0F3840_P_2,
620214f7 2393 EVEX_W_0F3855_P_2,
43234a1e
L
2394 EVEX_W_0F3858_P_2,
2395 EVEX_W_0F3859_P_2,
2396 EVEX_W_0F385A_P_2,
2397 EVEX_W_0F385B_P_2,
1ba585e8
IT
2398 EVEX_W_0F3866_P_2,
2399 EVEX_W_0F3875_P_2,
2400 EVEX_W_0F3878_P_2,
2401 EVEX_W_0F3879_P_2,
2402 EVEX_W_0F387A_P_2,
2403 EVEX_W_0F387B_P_2,
2404 EVEX_W_0F387D_P_2,
14f195c9 2405 EVEX_W_0F3883_P_2,
1ba585e8 2406 EVEX_W_0F388D_P_2,
43234a1e
L
2407 EVEX_W_0F3891_P_2,
2408 EVEX_W_0F3893_P_2,
2409 EVEX_W_0F38A1_P_2,
2410 EVEX_W_0F38A3_P_2,
2411 EVEX_W_0F38C7_R_1_P_2,
2412 EVEX_W_0F38C7_R_2_P_2,
2413 EVEX_W_0F38C7_R_5_P_2,
2414 EVEX_W_0F38C7_R_6_P_2,
2415
2416 EVEX_W_0F3A00_P_2,
2417 EVEX_W_0F3A01_P_2,
2418 EVEX_W_0F3A04_P_2,
2419 EVEX_W_0F3A05_P_2,
2420 EVEX_W_0F3A08_P_2,
2421 EVEX_W_0F3A09_P_2,
2422 EVEX_W_0F3A0A_P_2,
2423 EVEX_W_0F3A0B_P_2,
90a915bf 2424 EVEX_W_0F3A16_P_2,
43234a1e
L
2425 EVEX_W_0F3A18_P_2,
2426 EVEX_W_0F3A19_P_2,
2427 EVEX_W_0F3A1A_P_2,
2428 EVEX_W_0F3A1B_P_2,
2429 EVEX_W_0F3A1D_P_2,
2430 EVEX_W_0F3A21_P_2,
90a915bf 2431 EVEX_W_0F3A22_P_2,
43234a1e
L
2432 EVEX_W_0F3A23_P_2,
2433 EVEX_W_0F3A38_P_2,
2434 EVEX_W_0F3A39_P_2,
2435 EVEX_W_0F3A3A_P_2,
2436 EVEX_W_0F3A3B_P_2,
1ba585e8
IT
2437 EVEX_W_0F3A3E_P_2,
2438 EVEX_W_0F3A3F_P_2,
2439 EVEX_W_0F3A42_P_2,
90a915bf
IT
2440 EVEX_W_0F3A43_P_2,
2441 EVEX_W_0F3A50_P_2,
2442 EVEX_W_0F3A51_P_2,
2443 EVEX_W_0F3A56_P_2,
2444 EVEX_W_0F3A57_P_2,
2445 EVEX_W_0F3A66_P_2,
2446 EVEX_W_0F3A67_P_2
9e30b8e0
L
2447};
2448
26ca5450 2449typedef void (*op_rtn) (int bytemode, int sizeflag);
252b5132
RH
2450
2451struct dis386 {
2da11e11 2452 const char *name;
ce518a5f
L
2453 struct
2454 {
2455 op_rtn rtn;
2456 int bytemode;
2457 } op[MAX_OPERANDS];
bf890a93 2458 unsigned int prefix_requirement;
252b5132
RH
2459};
2460
2461/* Upper case letters in the instruction names here are macros.
2462 'A' => print 'b' if no register operands or suffix_always is true
2463 'B' => print 'b' if suffix_always is true
9306ca4a 2464 'C' => print 's' or 'l' ('w' or 'd' in Intel mode) depending on operand
98b528ac 2465 size prefix
ed7841b3 2466 'D' => print 'w' if no register operands or 'w', 'l' or 'q', if
98b528ac 2467 suffix_always is true
252b5132 2468 'E' => print 'e' if 32-bit form of jcxz
3ffd33cf 2469 'F' => print 'w' or 'l' depending on address size prefix (loop insns)
52fd6d94 2470 'G' => print 'w' or 'l' depending on operand size prefix (i/o insns)
5dd0794d 2471 'H' => print ",pt" or ",pn" branch hint
9306ca4a 2472 'I' => honor following macro letter even in Intel mode (implemented only
98b528ac 2473 for some of the macro letters)
9306ca4a 2474 'J' => print 'l'
42903f7f 2475 'K' => print 'd' or 'q' if rex prefix is present.
252b5132 2476 'L' => print 'l' if suffix_always is true
9d141669 2477 'M' => print 'r' if intel_mnemonic is false.
252b5132 2478 'N' => print 'n' if instruction has no wait "prefix"
a35ca55a 2479 'O' => print 'd' or 'o' (or 'q' in Intel mode)
52b15da3 2480 'P' => print 'w', 'l' or 'q' if instruction has an operand size prefix,
98b528ac
L
2481 or suffix_always is true. print 'q' if rex prefix is present.
2482 'Q' => print 'w', 'l' or 'q' for memory operand or suffix_always
2483 is true
a35ca55a 2484 'R' => print 'w', 'l' or 'q' ('d' for 'l' and 'e' in Intel mode)
52b15da3 2485 'S' => print 'w', 'l' or 'q' if suffix_always is true
a72d2af2
L
2486 'T' => print 'q' in 64bit mode if instruction has no operand size
2487 prefix and behave as 'P' otherwise
2488 'U' => print 'q' in 64bit mode if instruction has no operand size
2489 prefix and behave as 'Q' otherwise
2490 'V' => print 'q' in 64bit mode if instruction has no operand size
2491 prefix and behave as 'S' otherwise
a35ca55a 2492 'W' => print 'b', 'w' or 'l' ('d' in Intel mode)
9306ca4a 2493 'X' => print 's', 'd' depending on data16 prefix (for XMM)
8a72226a
L
2494 'Y' => 'q' if instruction has an REX 64bit overwrite prefix and
2495 suffix_always is true.
6dd5059a 2496 'Z' => print 'q' in 64bit mode and behave as 'L' otherwise
9d141669 2497 '!' => change condition from true to false or from false to true.
98b528ac 2498 '%' => add 1 upper case letter to the macro.
a72d2af2
L
2499 '^' => print 'w' or 'l' depending on operand size prefix or
2500 suffix_always is true (lcall/ljmp).
5db04b09
L
2501 '@' => print 'q' for Intel64 ISA, 'w' or 'q' for AMD64 ISA depending
2502 on operand size prefix.
07f5af7d
L
2503 '&' => print 'q' in 64bit mode for Intel64 ISA or if instruction
2504 has no operand size prefix for AMD64 ISA, behave as 'P'
2505 otherwise
98b528ac
L
2506
2507 2 upper case letter macros:
04d824a4
JB
2508 "XY" => print 'x' or 'y' if suffix_always is true or no register
2509 operands and no broadcast.
2510 "XZ" => print 'x', 'y', or 'z' if suffix_always is true or no
2511 register operands and no broadcast.
4b06377f
L
2512 "XW" => print 's', 'd' depending on the VEX.W bit (for FMA)
2513 "LQ" => print 'l' ('d' in Intel mode) or 'q' for memory operand
98b528ac 2514 or suffix_always is true
4b06377f
L
2515 "LB" => print "abs" in 64bit mode and behave as 'B' otherwise
2516 "LS" => print "abs" in 64bit mode and behave as 'S' otherwise
2517 "LV" => print "abs" for 64bit operand and behave as 'S' otherwise
6c30d220 2518 "LW" => print 'd', 'q' depending on the VEX.W bit
4b4c407a
L
2519 "LP" => print 'w' or 'l' ('d' in Intel mode) if instruction has
2520 an operand size prefix, or suffix_always is true. print
2521 'q' if rex prefix is present.
52b15da3 2522
6439fc28
AM
2523 Many of the above letters print nothing in Intel mode. See "putop"
2524 for the details.
52b15da3 2525
6439fc28 2526 Braces '{' and '}', and vertical bars '|', indicate alternative
7c52e0e8 2527 mnemonic strings for AT&T and Intel. */
252b5132 2528
6439fc28 2529static const struct dis386 dis386[] = {
252b5132 2530 /* 00 */
bf890a93
IT
2531 { "addB", { Ebh1, Gb }, 0 },
2532 { "addS", { Evh1, Gv }, 0 },
2533 { "addB", { Gb, EbS }, 0 },
2534 { "addS", { Gv, EvS }, 0 },
2535 { "addB", { AL, Ib }, 0 },
2536 { "addS", { eAX, Iv }, 0 },
4e7d34a6
L
2537 { X86_64_TABLE (X86_64_06) },
2538 { X86_64_TABLE (X86_64_07) },
252b5132 2539 /* 08 */
bf890a93
IT
2540 { "orB", { Ebh1, Gb }, 0 },
2541 { "orS", { Evh1, Gv }, 0 },
2542 { "orB", { Gb, EbS }, 0 },
2543 { "orS", { Gv, EvS }, 0 },
2544 { "orB", { AL, Ib }, 0 },
2545 { "orS", { eAX, Iv }, 0 },
4e7d34a6 2546 { X86_64_TABLE (X86_64_0D) },
592d1631 2547 { Bad_Opcode }, /* 0x0f extended opcode escape */
252b5132 2548 /* 10 */
bf890a93
IT
2549 { "adcB", { Ebh1, Gb }, 0 },
2550 { "adcS", { Evh1, Gv }, 0 },
2551 { "adcB", { Gb, EbS }, 0 },
2552 { "adcS", { Gv, EvS }, 0 },
2553 { "adcB", { AL, Ib }, 0 },
2554 { "adcS", { eAX, Iv }, 0 },
4e7d34a6
L
2555 { X86_64_TABLE (X86_64_16) },
2556 { X86_64_TABLE (X86_64_17) },
252b5132 2557 /* 18 */
bf890a93
IT
2558 { "sbbB", { Ebh1, Gb }, 0 },
2559 { "sbbS", { Evh1, Gv }, 0 },
2560 { "sbbB", { Gb, EbS }, 0 },
2561 { "sbbS", { Gv, EvS }, 0 },
2562 { "sbbB", { AL, Ib }, 0 },
2563 { "sbbS", { eAX, Iv }, 0 },
4e7d34a6
L
2564 { X86_64_TABLE (X86_64_1E) },
2565 { X86_64_TABLE (X86_64_1F) },
252b5132 2566 /* 20 */
bf890a93
IT
2567 { "andB", { Ebh1, Gb }, 0 },
2568 { "andS", { Evh1, Gv }, 0 },
2569 { "andB", { Gb, EbS }, 0 },
2570 { "andS", { Gv, EvS }, 0 },
2571 { "andB", { AL, Ib }, 0 },
2572 { "andS", { eAX, Iv }, 0 },
592d1631 2573 { Bad_Opcode }, /* SEG ES prefix */
4e7d34a6 2574 { X86_64_TABLE (X86_64_27) },
252b5132 2575 /* 28 */
bf890a93
IT
2576 { "subB", { Ebh1, Gb }, 0 },
2577 { "subS", { Evh1, Gv }, 0 },
2578 { "subB", { Gb, EbS }, 0 },
2579 { "subS", { Gv, EvS }, 0 },
2580 { "subB", { AL, Ib }, 0 },
2581 { "subS", { eAX, Iv }, 0 },
592d1631 2582 { Bad_Opcode }, /* SEG CS prefix */
4e7d34a6 2583 { X86_64_TABLE (X86_64_2F) },
252b5132 2584 /* 30 */
bf890a93
IT
2585 { "xorB", { Ebh1, Gb }, 0 },
2586 { "xorS", { Evh1, Gv }, 0 },
2587 { "xorB", { Gb, EbS }, 0 },
2588 { "xorS", { Gv, EvS }, 0 },
2589 { "xorB", { AL, Ib }, 0 },
2590 { "xorS", { eAX, Iv }, 0 },
592d1631 2591 { Bad_Opcode }, /* SEG SS prefix */
4e7d34a6 2592 { X86_64_TABLE (X86_64_37) },
252b5132 2593 /* 38 */
bf890a93
IT
2594 { "cmpB", { Eb, Gb }, 0 },
2595 { "cmpS", { Ev, Gv }, 0 },
2596 { "cmpB", { Gb, EbS }, 0 },
2597 { "cmpS", { Gv, EvS }, 0 },
2598 { "cmpB", { AL, Ib }, 0 },
2599 { "cmpS", { eAX, Iv }, 0 },
592d1631 2600 { Bad_Opcode }, /* SEG DS prefix */
4e7d34a6 2601 { X86_64_TABLE (X86_64_3F) },
252b5132 2602 /* 40 */
bf890a93
IT
2603 { "inc{S|}", { RMeAX }, 0 },
2604 { "inc{S|}", { RMeCX }, 0 },
2605 { "inc{S|}", { RMeDX }, 0 },
2606 { "inc{S|}", { RMeBX }, 0 },
2607 { "inc{S|}", { RMeSP }, 0 },
2608 { "inc{S|}", { RMeBP }, 0 },
2609 { "inc{S|}", { RMeSI }, 0 },
2610 { "inc{S|}", { RMeDI }, 0 },
252b5132 2611 /* 48 */
bf890a93
IT
2612 { "dec{S|}", { RMeAX }, 0 },
2613 { "dec{S|}", { RMeCX }, 0 },
2614 { "dec{S|}", { RMeDX }, 0 },
2615 { "dec{S|}", { RMeBX }, 0 },
2616 { "dec{S|}", { RMeSP }, 0 },
2617 { "dec{S|}", { RMeBP }, 0 },
2618 { "dec{S|}", { RMeSI }, 0 },
2619 { "dec{S|}", { RMeDI }, 0 },
252b5132 2620 /* 50 */
bf890a93
IT
2621 { "pushV", { RMrAX }, 0 },
2622 { "pushV", { RMrCX }, 0 },
2623 { "pushV", { RMrDX }, 0 },
2624 { "pushV", { RMrBX }, 0 },
2625 { "pushV", { RMrSP }, 0 },
2626 { "pushV", { RMrBP }, 0 },
2627 { "pushV", { RMrSI }, 0 },
2628 { "pushV", { RMrDI }, 0 },
252b5132 2629 /* 58 */
bf890a93
IT
2630 { "popV", { RMrAX }, 0 },
2631 { "popV", { RMrCX }, 0 },
2632 { "popV", { RMrDX }, 0 },
2633 { "popV", { RMrBX }, 0 },
2634 { "popV", { RMrSP }, 0 },
2635 { "popV", { RMrBP }, 0 },
2636 { "popV", { RMrSI }, 0 },
2637 { "popV", { RMrDI }, 0 },
252b5132 2638 /* 60 */
4e7d34a6
L
2639 { X86_64_TABLE (X86_64_60) },
2640 { X86_64_TABLE (X86_64_61) },
2641 { X86_64_TABLE (X86_64_62) },
2642 { X86_64_TABLE (X86_64_63) },
592d1631
L
2643 { Bad_Opcode }, /* seg fs */
2644 { Bad_Opcode }, /* seg gs */
2645 { Bad_Opcode }, /* op size prefix */
2646 { Bad_Opcode }, /* adr size prefix */
252b5132 2647 /* 68 */
bf890a93
IT
2648 { "pushT", { sIv }, 0 },
2649 { "imulS", { Gv, Ev, Iv }, 0 },
2650 { "pushT", { sIbT }, 0 },
2651 { "imulS", { Gv, Ev, sIb }, 0 },
2652 { "ins{b|}", { Ybr, indirDX }, 0 },
4e7d34a6 2653 { X86_64_TABLE (X86_64_6D) },
bf890a93 2654 { "outs{b|}", { indirDXr, Xb }, 0 },
4e7d34a6 2655 { X86_64_TABLE (X86_64_6F) },
252b5132 2656 /* 70 */
bf890a93
IT
2657 { "joH", { Jb, BND, cond_jump_flag }, 0 },
2658 { "jnoH", { Jb, BND, cond_jump_flag }, 0 },
2659 { "jbH", { Jb, BND, cond_jump_flag }, 0 },
2660 { "jaeH", { Jb, BND, cond_jump_flag }, 0 },
2661 { "jeH", { Jb, BND, cond_jump_flag }, 0 },
2662 { "jneH", { Jb, BND, cond_jump_flag }, 0 },
2663 { "jbeH", { Jb, BND, cond_jump_flag }, 0 },
2664 { "jaH", { Jb, BND, cond_jump_flag }, 0 },
252b5132 2665 /* 78 */
bf890a93
IT
2666 { "jsH", { Jb, BND, cond_jump_flag }, 0 },
2667 { "jnsH", { Jb, BND, cond_jump_flag }, 0 },
2668 { "jpH", { Jb, BND, cond_jump_flag }, 0 },
2669 { "jnpH", { Jb, BND, cond_jump_flag }, 0 },
2670 { "jlH", { Jb, BND, cond_jump_flag }, 0 },
2671 { "jgeH", { Jb, BND, cond_jump_flag }, 0 },
2672 { "jleH", { Jb, BND, cond_jump_flag }, 0 },
2673 { "jgH", { Jb, BND, cond_jump_flag }, 0 },
252b5132 2674 /* 80 */
1ceb70f8
L
2675 { REG_TABLE (REG_80) },
2676 { REG_TABLE (REG_81) },
d039fef3 2677 { X86_64_TABLE (X86_64_82) },
7148c369 2678 { REG_TABLE (REG_83) },
bf890a93
IT
2679 { "testB", { Eb, Gb }, 0 },
2680 { "testS", { Ev, Gv }, 0 },
2681 { "xchgB", { Ebh2, Gb }, 0 },
2682 { "xchgS", { Evh2, Gv }, 0 },
252b5132 2683 /* 88 */
bf890a93
IT
2684 { "movB", { Ebh3, Gb }, 0 },
2685 { "movS", { Evh3, Gv }, 0 },
2686 { "movB", { Gb, EbS }, 0 },
2687 { "movS", { Gv, EvS }, 0 },
2688 { "movD", { Sv, Sw }, 0 },
1ceb70f8 2689 { MOD_TABLE (MOD_8D) },
bf890a93 2690 { "movD", { Sw, Sv }, 0 },
1ceb70f8 2691 { REG_TABLE (REG_8F) },
252b5132 2692 /* 90 */
1ceb70f8 2693 { PREFIX_TABLE (PREFIX_90) },
bf890a93
IT
2694 { "xchgS", { RMeCX, eAX }, 0 },
2695 { "xchgS", { RMeDX, eAX }, 0 },
2696 { "xchgS", { RMeBX, eAX }, 0 },
2697 { "xchgS", { RMeSP, eAX }, 0 },
2698 { "xchgS", { RMeBP, eAX }, 0 },
2699 { "xchgS", { RMeSI, eAX }, 0 },
2700 { "xchgS", { RMeDI, eAX }, 0 },
252b5132 2701 /* 98 */
bf890a93
IT
2702 { "cW{t|}R", { XX }, 0 },
2703 { "cR{t|}O", { XX }, 0 },
4e7d34a6 2704 { X86_64_TABLE (X86_64_9A) },
592d1631 2705 { Bad_Opcode }, /* fwait */
bf890a93
IT
2706 { "pushfT", { XX }, 0 },
2707 { "popfT", { XX }, 0 },
2708 { "sahf", { XX }, 0 },
2709 { "lahf", { XX }, 0 },
252b5132 2710 /* a0 */
bf890a93
IT
2711 { "mov%LB", { AL, Ob }, 0 },
2712 { "mov%LS", { eAX, Ov }, 0 },
2713 { "mov%LB", { Ob, AL }, 0 },
2714 { "mov%LS", { Ov, eAX }, 0 },
2715 { "movs{b|}", { Ybr, Xb }, 0 },
2716 { "movs{R|}", { Yvr, Xv }, 0 },
2717 { "cmps{b|}", { Xb, Yb }, 0 },
2718 { "cmps{R|}", { Xv, Yv }, 0 },
252b5132 2719 /* a8 */
bf890a93
IT
2720 { "testB", { AL, Ib }, 0 },
2721 { "testS", { eAX, Iv }, 0 },
2722 { "stosB", { Ybr, AL }, 0 },
2723 { "stosS", { Yvr, eAX }, 0 },
2724 { "lodsB", { ALr, Xb }, 0 },
2725 { "lodsS", { eAXr, Xv }, 0 },
2726 { "scasB", { AL, Yb }, 0 },
2727 { "scasS", { eAX, Yv }, 0 },
252b5132 2728 /* b0 */
bf890a93
IT
2729 { "movB", { RMAL, Ib }, 0 },
2730 { "movB", { RMCL, Ib }, 0 },
2731 { "movB", { RMDL, Ib }, 0 },
2732 { "movB", { RMBL, Ib }, 0 },
2733 { "movB", { RMAH, Ib }, 0 },
2734 { "movB", { RMCH, Ib }, 0 },
2735 { "movB", { RMDH, Ib }, 0 },
2736 { "movB", { RMBH, Ib }, 0 },
252b5132 2737 /* b8 */
bf890a93
IT
2738 { "mov%LV", { RMeAX, Iv64 }, 0 },
2739 { "mov%LV", { RMeCX, Iv64 }, 0 },
2740 { "mov%LV", { RMeDX, Iv64 }, 0 },
2741 { "mov%LV", { RMeBX, Iv64 }, 0 },
2742 { "mov%LV", { RMeSP, Iv64 }, 0 },
2743 { "mov%LV", { RMeBP, Iv64 }, 0 },
2744 { "mov%LV", { RMeSI, Iv64 }, 0 },
2745 { "mov%LV", { RMeDI, Iv64 }, 0 },
252b5132 2746 /* c0 */
1ceb70f8
L
2747 { REG_TABLE (REG_C0) },
2748 { REG_TABLE (REG_C1) },
bf890a93
IT
2749 { "retT", { Iw, BND }, 0 },
2750 { "retT", { BND }, 0 },
4e7d34a6
L
2751 { X86_64_TABLE (X86_64_C4) },
2752 { X86_64_TABLE (X86_64_C5) },
1ceb70f8
L
2753 { REG_TABLE (REG_C6) },
2754 { REG_TABLE (REG_C7) },
252b5132 2755 /* c8 */
bf890a93
IT
2756 { "enterT", { Iw, Ib }, 0 },
2757 { "leaveT", { XX }, 0 },
2758 { "Jret{|f}P", { Iw }, 0 },
2759 { "Jret{|f}P", { XX }, 0 },
2760 { "int3", { XX }, 0 },
2761 { "int", { Ib }, 0 },
4e7d34a6 2762 { X86_64_TABLE (X86_64_CE) },
bf890a93 2763 { "iret%LP", { XX }, 0 },
252b5132 2764 /* d0 */
1ceb70f8
L
2765 { REG_TABLE (REG_D0) },
2766 { REG_TABLE (REG_D1) },
2767 { REG_TABLE (REG_D2) },
2768 { REG_TABLE (REG_D3) },
4e7d34a6
L
2769 { X86_64_TABLE (X86_64_D4) },
2770 { X86_64_TABLE (X86_64_D5) },
592d1631 2771 { Bad_Opcode },
bf890a93 2772 { "xlat", { DSBX }, 0 },
252b5132
RH
2773 /* d8 */
2774 { FLOAT },
2775 { FLOAT },
2776 { FLOAT },
2777 { FLOAT },
2778 { FLOAT },
2779 { FLOAT },
2780 { FLOAT },
2781 { FLOAT },
2782 /* e0 */
bf890a93
IT
2783 { "loopneFH", { Jb, XX, loop_jcxz_flag }, 0 },
2784 { "loopeFH", { Jb, XX, loop_jcxz_flag }, 0 },
2785 { "loopFH", { Jb, XX, loop_jcxz_flag }, 0 },
2786 { "jEcxzH", { Jb, XX, loop_jcxz_flag }, 0 },
2787 { "inB", { AL, Ib }, 0 },
2788 { "inG", { zAX, Ib }, 0 },
2789 { "outB", { Ib, AL }, 0 },
2790 { "outG", { Ib, zAX }, 0 },
252b5132 2791 /* e8 */
a72d2af2
L
2792 { X86_64_TABLE (X86_64_E8) },
2793 { X86_64_TABLE (X86_64_E9) },
4e7d34a6 2794 { X86_64_TABLE (X86_64_EA) },
bf890a93
IT
2795 { "jmp", { Jb, BND }, 0 },
2796 { "inB", { AL, indirDX }, 0 },
2797 { "inG", { zAX, indirDX }, 0 },
2798 { "outB", { indirDX, AL }, 0 },
2799 { "outG", { indirDX, zAX }, 0 },
252b5132 2800 /* f0 */
592d1631 2801 { Bad_Opcode }, /* lock prefix */
bf890a93 2802 { "icebp", { XX }, 0 },
592d1631
L
2803 { Bad_Opcode }, /* repne */
2804 { Bad_Opcode }, /* repz */
bf890a93
IT
2805 { "hlt", { XX }, 0 },
2806 { "cmc", { XX }, 0 },
1ceb70f8
L
2807 { REG_TABLE (REG_F6) },
2808 { REG_TABLE (REG_F7) },
252b5132 2809 /* f8 */
bf890a93
IT
2810 { "clc", { XX }, 0 },
2811 { "stc", { XX }, 0 },
2812 { "cli", { XX }, 0 },
2813 { "sti", { XX }, 0 },
2814 { "cld", { XX }, 0 },
2815 { "std", { XX }, 0 },
1ceb70f8
L
2816 { REG_TABLE (REG_FE) },
2817 { REG_TABLE (REG_FF) },
252b5132
RH
2818};
2819
6439fc28 2820static const struct dis386 dis386_twobyte[] = {
252b5132 2821 /* 00 */
1ceb70f8
L
2822 { REG_TABLE (REG_0F00 ) },
2823 { REG_TABLE (REG_0F01 ) },
bf890a93
IT
2824 { "larS", { Gv, Ew }, 0 },
2825 { "lslS", { Gv, Ew }, 0 },
592d1631 2826 { Bad_Opcode },
bf890a93
IT
2827 { "syscall", { XX }, 0 },
2828 { "clts", { XX }, 0 },
2829 { "sysret%LP", { XX }, 0 },
252b5132 2830 /* 08 */
bf890a93
IT
2831 { "invd", { XX }, 0 },
2832 { "wbinvd", { XX }, 0 },
592d1631 2833 { Bad_Opcode },
bf890a93 2834 { "ud2", { XX }, 0 },
592d1631 2835 { Bad_Opcode },
b5b1fc4f 2836 { REG_TABLE (REG_0F0D) },
bf890a93
IT
2837 { "femms", { XX }, 0 },
2838 { "", { MX, EM, OPSUF }, 0 }, /* See OP_3DNowSuffix. */
252b5132 2839 /* 10 */
1ceb70f8
L
2840 { PREFIX_TABLE (PREFIX_0F10) },
2841 { PREFIX_TABLE (PREFIX_0F11) },
2842 { PREFIX_TABLE (PREFIX_0F12) },
2843 { MOD_TABLE (MOD_0F13) },
507bd325
L
2844 { "unpcklpX", { XM, EXx }, PREFIX_OPCODE },
2845 { "unpckhpX", { XM, EXx }, PREFIX_OPCODE },
1ceb70f8
L
2846 { PREFIX_TABLE (PREFIX_0F16) },
2847 { MOD_TABLE (MOD_0F17) },
252b5132 2848 /* 18 */
1ceb70f8 2849 { REG_TABLE (REG_0F18) },
bf890a93 2850 { "nopQ", { Ev }, 0 },
7e8b059b
L
2851 { PREFIX_TABLE (PREFIX_0F1A) },
2852 { PREFIX_TABLE (PREFIX_0F1B) },
bf890a93
IT
2853 { "nopQ", { Ev }, 0 },
2854 { "nopQ", { Ev }, 0 },
603555e5 2855 { PREFIX_TABLE (PREFIX_0F1E) },
bf890a93 2856 { "nopQ", { Ev }, 0 },
252b5132 2857 /* 20 */
bf890a93
IT
2858 { "movZ", { Rm, Cm }, 0 },
2859 { "movZ", { Rm, Dm }, 0 },
2860 { "movZ", { Cm, Rm }, 0 },
2861 { "movZ", { Dm, Rm }, 0 },
1ceb70f8 2862 { MOD_TABLE (MOD_0F24) },
592d1631 2863 { Bad_Opcode },
1ceb70f8 2864 { MOD_TABLE (MOD_0F26) },
592d1631 2865 { Bad_Opcode },
252b5132 2866 /* 28 */
507bd325
L
2867 { "movapX", { XM, EXx }, PREFIX_OPCODE },
2868 { "movapX", { EXxS, XM }, PREFIX_OPCODE },
1ceb70f8
L
2869 { PREFIX_TABLE (PREFIX_0F2A) },
2870 { PREFIX_TABLE (PREFIX_0F2B) },
2871 { PREFIX_TABLE (PREFIX_0F2C) },
2872 { PREFIX_TABLE (PREFIX_0F2D) },
2873 { PREFIX_TABLE (PREFIX_0F2E) },
2874 { PREFIX_TABLE (PREFIX_0F2F) },
252b5132 2875 /* 30 */
bf890a93
IT
2876 { "wrmsr", { XX }, 0 },
2877 { "rdtsc", { XX }, 0 },
2878 { "rdmsr", { XX }, 0 },
2879 { "rdpmc", { XX }, 0 },
2880 { "sysenter", { XX }, 0 },
2881 { "sysexit", { XX }, 0 },
592d1631 2882 { Bad_Opcode },
bf890a93 2883 { "getsec", { XX }, 0 },
252b5132 2884 /* 38 */
507bd325 2885 { THREE_BYTE_TABLE_PREFIX (THREE_BYTE_0F38, PREFIX_OPCODE) },
592d1631 2886 { Bad_Opcode },
507bd325 2887 { THREE_BYTE_TABLE_PREFIX (THREE_BYTE_0F3A, PREFIX_OPCODE) },
592d1631
L
2888 { Bad_Opcode },
2889 { Bad_Opcode },
2890 { Bad_Opcode },
2891 { Bad_Opcode },
2892 { Bad_Opcode },
252b5132 2893 /* 40 */
bf890a93
IT
2894 { "cmovoS", { Gv, Ev }, 0 },
2895 { "cmovnoS", { Gv, Ev }, 0 },
2896 { "cmovbS", { Gv, Ev }, 0 },
2897 { "cmovaeS", { Gv, Ev }, 0 },
2898 { "cmoveS", { Gv, Ev }, 0 },
2899 { "cmovneS", { Gv, Ev }, 0 },
2900 { "cmovbeS", { Gv, Ev }, 0 },
2901 { "cmovaS", { Gv, Ev }, 0 },
252b5132 2902 /* 48 */
bf890a93
IT
2903 { "cmovsS", { Gv, Ev }, 0 },
2904 { "cmovnsS", { Gv, Ev }, 0 },
2905 { "cmovpS", { Gv, Ev }, 0 },
2906 { "cmovnpS", { Gv, Ev }, 0 },
2907 { "cmovlS", { Gv, Ev }, 0 },
2908 { "cmovgeS", { Gv, Ev }, 0 },
2909 { "cmovleS", { Gv, Ev }, 0 },
2910 { "cmovgS", { Gv, Ev }, 0 },
252b5132 2911 /* 50 */
75c135a8 2912 { MOD_TABLE (MOD_0F51) },
1ceb70f8
L
2913 { PREFIX_TABLE (PREFIX_0F51) },
2914 { PREFIX_TABLE (PREFIX_0F52) },
2915 { PREFIX_TABLE (PREFIX_0F53) },
507bd325
L
2916 { "andpX", { XM, EXx }, PREFIX_OPCODE },
2917 { "andnpX", { XM, EXx }, PREFIX_OPCODE },
2918 { "orpX", { XM, EXx }, PREFIX_OPCODE },
2919 { "xorpX", { XM, EXx }, PREFIX_OPCODE },
252b5132 2920 /* 58 */
1ceb70f8
L
2921 { PREFIX_TABLE (PREFIX_0F58) },
2922 { PREFIX_TABLE (PREFIX_0F59) },
2923 { PREFIX_TABLE (PREFIX_0F5A) },
2924 { PREFIX_TABLE (PREFIX_0F5B) },
2925 { PREFIX_TABLE (PREFIX_0F5C) },
2926 { PREFIX_TABLE (PREFIX_0F5D) },
2927 { PREFIX_TABLE (PREFIX_0F5E) },
2928 { PREFIX_TABLE (PREFIX_0F5F) },
252b5132 2929 /* 60 */
1ceb70f8
L
2930 { PREFIX_TABLE (PREFIX_0F60) },
2931 { PREFIX_TABLE (PREFIX_0F61) },
2932 { PREFIX_TABLE (PREFIX_0F62) },
507bd325
L
2933 { "packsswb", { MX, EM }, PREFIX_OPCODE },
2934 { "pcmpgtb", { MX, EM }, PREFIX_OPCODE },
2935 { "pcmpgtw", { MX, EM }, PREFIX_OPCODE },
2936 { "pcmpgtd", { MX, EM }, PREFIX_OPCODE },
2937 { "packuswb", { MX, EM }, PREFIX_OPCODE },
252b5132 2938 /* 68 */
507bd325
L
2939 { "punpckhbw", { MX, EM }, PREFIX_OPCODE },
2940 { "punpckhwd", { MX, EM }, PREFIX_OPCODE },
2941 { "punpckhdq", { MX, EM }, PREFIX_OPCODE },
2942 { "packssdw", { MX, EM }, PREFIX_OPCODE },
1ceb70f8
L
2943 { PREFIX_TABLE (PREFIX_0F6C) },
2944 { PREFIX_TABLE (PREFIX_0F6D) },
507bd325 2945 { "movK", { MX, Edq }, PREFIX_OPCODE },
1ceb70f8 2946 { PREFIX_TABLE (PREFIX_0F6F) },
252b5132 2947 /* 70 */
1ceb70f8
L
2948 { PREFIX_TABLE (PREFIX_0F70) },
2949 { REG_TABLE (REG_0F71) },
2950 { REG_TABLE (REG_0F72) },
2951 { REG_TABLE (REG_0F73) },
507bd325
L
2952 { "pcmpeqb", { MX, EM }, PREFIX_OPCODE },
2953 { "pcmpeqw", { MX, EM }, PREFIX_OPCODE },
2954 { "pcmpeqd", { MX, EM }, PREFIX_OPCODE },
2955 { "emms", { XX }, PREFIX_OPCODE },
252b5132 2956 /* 78 */
1ceb70f8
L
2957 { PREFIX_TABLE (PREFIX_0F78) },
2958 { PREFIX_TABLE (PREFIX_0F79) },
1f334aeb 2959 { Bad_Opcode },
592d1631 2960 { Bad_Opcode },
1ceb70f8
L
2961 { PREFIX_TABLE (PREFIX_0F7C) },
2962 { PREFIX_TABLE (PREFIX_0F7D) },
2963 { PREFIX_TABLE (PREFIX_0F7E) },
2964 { PREFIX_TABLE (PREFIX_0F7F) },
252b5132 2965 /* 80 */
bf890a93
IT
2966 { "joH", { Jv, BND, cond_jump_flag }, 0 },
2967 { "jnoH", { Jv, BND, cond_jump_flag }, 0 },
2968 { "jbH", { Jv, BND, cond_jump_flag }, 0 },
2969 { "jaeH", { Jv, BND, cond_jump_flag }, 0 },
2970 { "jeH", { Jv, BND, cond_jump_flag }, 0 },
2971 { "jneH", { Jv, BND, cond_jump_flag }, 0 },
2972 { "jbeH", { Jv, BND, cond_jump_flag }, 0 },
2973 { "jaH", { Jv, BND, cond_jump_flag }, 0 },
252b5132 2974 /* 88 */
bf890a93
IT
2975 { "jsH", { Jv, BND, cond_jump_flag }, 0 },
2976 { "jnsH", { Jv, BND, cond_jump_flag }, 0 },
2977 { "jpH", { Jv, BND, cond_jump_flag }, 0 },
2978 { "jnpH", { Jv, BND, cond_jump_flag }, 0 },
2979 { "jlH", { Jv, BND, cond_jump_flag }, 0 },
2980 { "jgeH", { Jv, BND, cond_jump_flag }, 0 },
2981 { "jleH", { Jv, BND, cond_jump_flag }, 0 },
2982 { "jgH", { Jv, BND, cond_jump_flag }, 0 },
252b5132 2983 /* 90 */
bf890a93
IT
2984 { "seto", { Eb }, 0 },
2985 { "setno", { Eb }, 0 },
2986 { "setb", { Eb }, 0 },
2987 { "setae", { Eb }, 0 },
2988 { "sete", { Eb }, 0 },
2989 { "setne", { Eb }, 0 },
2990 { "setbe", { Eb }, 0 },
2991 { "seta", { Eb }, 0 },
252b5132 2992 /* 98 */
bf890a93
IT
2993 { "sets", { Eb }, 0 },
2994 { "setns", { Eb }, 0 },
2995 { "setp", { Eb }, 0 },
2996 { "setnp", { Eb }, 0 },
2997 { "setl", { Eb }, 0 },
2998 { "setge", { Eb }, 0 },
2999 { "setle", { Eb }, 0 },
3000 { "setg", { Eb }, 0 },
252b5132 3001 /* a0 */
bf890a93
IT
3002 { "pushT", { fs }, 0 },
3003 { "popT", { fs }, 0 },
3004 { "cpuid", { XX }, 0 },
3005 { "btS", { Ev, Gv }, 0 },
3006 { "shldS", { Ev, Gv, Ib }, 0 },
3007 { "shldS", { Ev, Gv, CL }, 0 },
1ceb70f8
L
3008 { REG_TABLE (REG_0FA6) },
3009 { REG_TABLE (REG_0FA7) },
252b5132 3010 /* a8 */
bf890a93
IT
3011 { "pushT", { gs }, 0 },
3012 { "popT", { gs }, 0 },
3013 { "rsm", { XX }, 0 },
3014 { "btsS", { Evh1, Gv }, 0 },
3015 { "shrdS", { Ev, Gv, Ib }, 0 },
3016 { "shrdS", { Ev, Gv, CL }, 0 },
1ceb70f8 3017 { REG_TABLE (REG_0FAE) },
bf890a93 3018 { "imulS", { Gv, Ev }, 0 },
252b5132 3019 /* b0 */
bf890a93
IT
3020 { "cmpxchgB", { Ebh1, Gb }, 0 },
3021 { "cmpxchgS", { Evh1, Gv }, 0 },
1ceb70f8 3022 { MOD_TABLE (MOD_0FB2) },
bf890a93 3023 { "btrS", { Evh1, Gv }, 0 },
1ceb70f8
L
3024 { MOD_TABLE (MOD_0FB4) },
3025 { MOD_TABLE (MOD_0FB5) },
bf890a93
IT
3026 { "movz{bR|x}", { Gv, Eb }, 0 },
3027 { "movz{wR|x}", { Gv, Ew }, 0 }, /* yes, there really is movzww ! */
252b5132 3028 /* b8 */
1ceb70f8 3029 { PREFIX_TABLE (PREFIX_0FB8) },
bf890a93 3030 { "ud1", { XX }, 0 },
1ceb70f8 3031 { REG_TABLE (REG_0FBA) },
bf890a93 3032 { "btcS", { Evh1, Gv }, 0 },
f12dc422 3033 { PREFIX_TABLE (PREFIX_0FBC) },
1ceb70f8 3034 { PREFIX_TABLE (PREFIX_0FBD) },
bf890a93
IT
3035 { "movs{bR|x}", { Gv, Eb }, 0 },
3036 { "movs{wR|x}", { Gv, Ew }, 0 }, /* yes, there really is movsww ! */
252b5132 3037 /* c0 */
bf890a93
IT
3038 { "xaddB", { Ebh1, Gb }, 0 },
3039 { "xaddS", { Evh1, Gv }, 0 },
1ceb70f8 3040 { PREFIX_TABLE (PREFIX_0FC2) },
a8484f96 3041 { MOD_TABLE (MOD_0FC3) },
507bd325
L
3042 { "pinsrw", { MX, Edqw, Ib }, PREFIX_OPCODE },
3043 { "pextrw", { Gdq, MS, Ib }, PREFIX_OPCODE },
3044 { "shufpX", { XM, EXx, Ib }, PREFIX_OPCODE },
1ceb70f8 3045 { REG_TABLE (REG_0FC7) },
252b5132 3046 /* c8 */
bf890a93
IT
3047 { "bswap", { RMeAX }, 0 },
3048 { "bswap", { RMeCX }, 0 },
3049 { "bswap", { RMeDX }, 0 },
3050 { "bswap", { RMeBX }, 0 },
3051 { "bswap", { RMeSP }, 0 },
3052 { "bswap", { RMeBP }, 0 },
3053 { "bswap", { RMeSI }, 0 },
3054 { "bswap", { RMeDI }, 0 },
252b5132 3055 /* d0 */
1ceb70f8 3056 { PREFIX_TABLE (PREFIX_0FD0) },
507bd325
L
3057 { "psrlw", { MX, EM }, PREFIX_OPCODE },
3058 { "psrld", { MX, EM }, PREFIX_OPCODE },
3059 { "psrlq", { MX, EM }, PREFIX_OPCODE },
3060 { "paddq", { MX, EM }, PREFIX_OPCODE },
3061 { "pmullw", { MX, EM }, PREFIX_OPCODE },
1ceb70f8 3062 { PREFIX_TABLE (PREFIX_0FD6) },
75c135a8 3063 { MOD_TABLE (MOD_0FD7) },
252b5132 3064 /* d8 */
507bd325
L
3065 { "psubusb", { MX, EM }, PREFIX_OPCODE },
3066 { "psubusw", { MX, EM }, PREFIX_OPCODE },
3067 { "pminub", { MX, EM }, PREFIX_OPCODE },
3068 { "pand", { MX, EM }, PREFIX_OPCODE },
3069 { "paddusb", { MX, EM }, PREFIX_OPCODE },
3070 { "paddusw", { MX, EM }, PREFIX_OPCODE },
3071 { "pmaxub", { MX, EM }, PREFIX_OPCODE },
3072 { "pandn", { MX, EM }, PREFIX_OPCODE },
252b5132 3073 /* e0 */
507bd325
L
3074 { "pavgb", { MX, EM }, PREFIX_OPCODE },
3075 { "psraw", { MX, EM }, PREFIX_OPCODE },
3076 { "psrad", { MX, EM }, PREFIX_OPCODE },
3077 { "pavgw", { MX, EM }, PREFIX_OPCODE },
3078 { "pmulhuw", { MX, EM }, PREFIX_OPCODE },
3079 { "pmulhw", { MX, EM }, PREFIX_OPCODE },
1ceb70f8
L
3080 { PREFIX_TABLE (PREFIX_0FE6) },
3081 { PREFIX_TABLE (PREFIX_0FE7) },
252b5132 3082 /* e8 */
507bd325
L
3083 { "psubsb", { MX, EM }, PREFIX_OPCODE },
3084 { "psubsw", { MX, EM }, PREFIX_OPCODE },
3085 { "pminsw", { MX, EM }, PREFIX_OPCODE },
3086 { "por", { MX, EM }, PREFIX_OPCODE },
3087 { "paddsb", { MX, EM }, PREFIX_OPCODE },
3088 { "paddsw", { MX, EM }, PREFIX_OPCODE },
3089 { "pmaxsw", { MX, EM }, PREFIX_OPCODE },
3090 { "pxor", { MX, EM }, PREFIX_OPCODE },
252b5132 3091 /* f0 */
1ceb70f8 3092 { PREFIX_TABLE (PREFIX_0FF0) },
507bd325
L
3093 { "psllw", { MX, EM }, PREFIX_OPCODE },
3094 { "pslld", { MX, EM }, PREFIX_OPCODE },
3095 { "psllq", { MX, EM }, PREFIX_OPCODE },
3096 { "pmuludq", { MX, EM }, PREFIX_OPCODE },
3097 { "pmaddwd", { MX, EM }, PREFIX_OPCODE },
3098 { "psadbw", { MX, EM }, PREFIX_OPCODE },
1ceb70f8 3099 { PREFIX_TABLE (PREFIX_0FF7) },
252b5132 3100 /* f8 */
507bd325
L
3101 { "psubb", { MX, EM }, PREFIX_OPCODE },
3102 { "psubw", { MX, EM }, PREFIX_OPCODE },
3103 { "psubd", { MX, EM }, PREFIX_OPCODE },
3104 { "psubq", { MX, EM }, PREFIX_OPCODE },
3105 { "paddb", { MX, EM }, PREFIX_OPCODE },
3106 { "paddw", { MX, EM }, PREFIX_OPCODE },
3107 { "paddd", { MX, EM }, PREFIX_OPCODE },
592d1631 3108 { Bad_Opcode },
252b5132
RH
3109};
3110
3111static const unsigned char onebyte_has_modrm[256] = {
c608c12e
AM
3112 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
3113 /* ------------------------------- */
3114 /* 00 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 00 */
3115 /* 10 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 10 */
3116 /* 20 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 20 */
3117 /* 30 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 30 */
3118 /* 40 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 40 */
3119 /* 50 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 50 */
3120 /* 60 */ 0,0,1,1,0,0,0,0,0,1,0,1,0,0,0,0, /* 60 */
3121 /* 70 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 70 */
3122 /* 80 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 80 */
3123 /* 90 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 90 */
3124 /* a0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* a0 */
3125 /* b0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* b0 */
3126 /* c0 */ 1,1,0,0,1,1,1,1,0,0,0,0,0,0,0,0, /* c0 */
3127 /* d0 */ 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1, /* d0 */
3128 /* e0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* e0 */
3129 /* f0 */ 0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1 /* f0 */
3130 /* ------------------------------- */
3131 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
252b5132
RH
3132};
3133
3134static const unsigned char twobyte_has_modrm[256] = {
c608c12e
AM
3135 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
3136 /* ------------------------------- */
252b5132 3137 /* 00 */ 1,1,1,1,0,0,0,0,0,0,0,0,0,1,0,1, /* 0f */
b5b1fc4f 3138 /* 10 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 1f */
85f10a01 3139 /* 20 */ 1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1, /* 2f */
331d2d0d 3140 /* 30 */ 0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0, /* 3f */
252b5132 3141 /* 40 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 4f */
4bba6815
AM
3142 /* 50 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 5f */
3143 /* 60 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 6f */
85f10a01 3144 /* 70 */ 1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1, /* 7f */
252b5132
RH
3145 /* 80 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 8f */
3146 /* 90 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 9f */
30d1c836 3147 /* a0 */ 0,0,0,1,1,1,1,1,0,0,0,1,1,1,1,1, /* af */
050dfa73 3148 /* b0 */ 1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1, /* bf */
252b5132 3149 /* c0 */ 1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0, /* cf */
ca164297 3150 /* d0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* df */
4bba6815 3151 /* e0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* ef */
ca164297 3152 /* f0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0 /* ff */
c608c12e
AM
3153 /* ------------------------------- */
3154 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
3155};
3156
252b5132
RH
3157static char obuf[100];
3158static char *obufp;
ea397f5b 3159static char *mnemonicendp;
252b5132
RH
3160static char scratchbuf[100];
3161static unsigned char *start_codep;
3162static unsigned char *insn_codep;
3163static unsigned char *codep;
285ca992 3164static unsigned char *end_codep;
f16cd0d5
L
3165static int last_lock_prefix;
3166static int last_repz_prefix;
3167static int last_repnz_prefix;
3168static int last_data_prefix;
3169static int last_addr_prefix;
3170static int last_rex_prefix;
3171static int last_seg_prefix;
04ef582a 3172static int last_active_prefix;
d9949a36 3173static int fwait_prefix;
285ca992
L
3174/* The active segment register prefix. */
3175static int active_seg_prefix;
f16cd0d5
L
3176#define MAX_CODE_LENGTH 15
3177/* We can up to 14 prefixes since the maximum instruction length is
3178 15bytes. */
3179static int all_prefixes[MAX_CODE_LENGTH - 1];
252b5132 3180static disassemble_info *the_info;
7967e09e
L
3181static struct
3182 {
3183 int mod;
7967e09e 3184 int reg;
484c222e 3185 int rm;
7967e09e
L
3186 }
3187modrm;
4bba6815 3188static unsigned char need_modrm;
dfc8cf43
L
3189static struct
3190 {
3191 int scale;
3192 int index;
3193 int base;
3194 }
3195sib;
c0f3af97
L
3196static struct
3197 {
3198 int register_specifier;
3199 int length;
3200 int prefix;
3201 int w;
43234a1e
L
3202 int evex;
3203 int r;
3204 int v;
3205 int mask_register_specifier;
3206 int zeroing;
3207 int ll;
3208 int b;
c0f3af97
L
3209 }
3210vex;
3211static unsigned char need_vex;
3212static unsigned char need_vex_reg;
dae39acc 3213static unsigned char vex_w_done;
252b5132 3214
ea397f5b
L
3215struct op
3216 {
3217 const char *name;
3218 unsigned int len;
3219 };
3220
4bba6815
AM
3221/* If we are accessing mod/rm/reg without need_modrm set, then the
3222 values are stale. Hitting this abort likely indicates that you
3223 need to update onebyte_has_modrm or twobyte_has_modrm. */
3224#define MODRM_CHECK if (!need_modrm) abort ()
3225
d708bcba
AM
3226static const char **names64;
3227static const char **names32;
3228static const char **names16;
3229static const char **names8;
3230static const char **names8rex;
3231static const char **names_seg;
db51cc60
L
3232static const char *index64;
3233static const char *index32;
d708bcba 3234static const char **index16;
7e8b059b 3235static const char **names_bnd;
d708bcba
AM
3236
3237static const char *intel_names64[] = {
3238 "rax", "rcx", "rdx", "rbx", "rsp", "rbp", "rsi", "rdi",
3239 "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15"
3240};
3241static const char *intel_names32[] = {
3242 "eax", "ecx", "edx", "ebx", "esp", "ebp", "esi", "edi",
3243 "r8d", "r9d", "r10d", "r11d", "r12d", "r13d", "r14d", "r15d"
3244};
3245static const char *intel_names16[] = {
3246 "ax", "cx", "dx", "bx", "sp", "bp", "si", "di",
3247 "r8w", "r9w", "r10w", "r11w", "r12w", "r13w", "r14w", "r15w"
3248};
3249static const char *intel_names8[] = {
3250 "al", "cl", "dl", "bl", "ah", "ch", "dh", "bh",
3251};
3252static const char *intel_names8rex[] = {
3253 "al", "cl", "dl", "bl", "spl", "bpl", "sil", "dil",
3254 "r8b", "r9b", "r10b", "r11b", "r12b", "r13b", "r14b", "r15b"
3255};
3256static const char *intel_names_seg[] = {
3257 "es", "cs", "ss", "ds", "fs", "gs", "?", "?",
3258};
db51cc60
L
3259static const char *intel_index64 = "riz";
3260static const char *intel_index32 = "eiz";
d708bcba
AM
3261static const char *intel_index16[] = {
3262 "bx+si", "bx+di", "bp+si", "bp+di", "si", "di", "bp", "bx"
3263};
3264
3265static const char *att_names64[] = {
3266 "%rax", "%rcx", "%rdx", "%rbx", "%rsp", "%rbp", "%rsi", "%rdi",
52b15da3
JH
3267 "%r8", "%r9", "%r10", "%r11", "%r12", "%r13", "%r14", "%r15"
3268};
d708bcba
AM
3269static const char *att_names32[] = {
3270 "%eax", "%ecx", "%edx", "%ebx", "%esp", "%ebp", "%esi", "%edi",
52b15da3 3271 "%r8d", "%r9d", "%r10d", "%r11d", "%r12d", "%r13d", "%r14d", "%r15d"
252b5132 3272};
d708bcba
AM
3273static const char *att_names16[] = {
3274 "%ax", "%cx", "%dx", "%bx", "%sp", "%bp", "%si", "%di",
52b15da3 3275 "%r8w", "%r9w", "%r10w", "%r11w", "%r12w", "%r13w", "%r14w", "%r15w"
252b5132 3276};
d708bcba
AM
3277static const char *att_names8[] = {
3278 "%al", "%cl", "%dl", "%bl", "%ah", "%ch", "%dh", "%bh",
252b5132 3279};
d708bcba
AM
3280static const char *att_names8rex[] = {
3281 "%al", "%cl", "%dl", "%bl", "%spl", "%bpl", "%sil", "%dil",
52b15da3
JH
3282 "%r8b", "%r9b", "%r10b", "%r11b", "%r12b", "%r13b", "%r14b", "%r15b"
3283};
d708bcba
AM
3284static const char *att_names_seg[] = {
3285 "%es", "%cs", "%ss", "%ds", "%fs", "%gs", "%?", "%?",
252b5132 3286};
db51cc60
L
3287static const char *att_index64 = "%riz";
3288static const char *att_index32 = "%eiz";
d708bcba
AM
3289static const char *att_index16[] = {
3290 "%bx,%si", "%bx,%di", "%bp,%si", "%bp,%di", "%si", "%di", "%bp", "%bx"
252b5132
RH
3291};
3292
b9733481
L
3293static const char **names_mm;
3294static const char *intel_names_mm[] = {
3295 "mm0", "mm1", "mm2", "mm3",
3296 "mm4", "mm5", "mm6", "mm7"
3297};
3298static const char *att_names_mm[] = {
3299 "%mm0", "%mm1", "%mm2", "%mm3",
3300 "%mm4", "%mm5", "%mm6", "%mm7"
3301};
3302
7e8b059b
L
3303static const char *intel_names_bnd[] = {
3304 "bnd0", "bnd1", "bnd2", "bnd3"
3305};
3306
3307static const char *att_names_bnd[] = {
3308 "%bnd0", "%bnd1", "%bnd2", "%bnd3"
3309};
3310
b9733481
L
3311static const char **names_xmm;
3312static const char *intel_names_xmm[] = {
3313 "xmm0", "xmm1", "xmm2", "xmm3",
3314 "xmm4", "xmm5", "xmm6", "xmm7",
3315 "xmm8", "xmm9", "xmm10", "xmm11",
43234a1e
L
3316 "xmm12", "xmm13", "xmm14", "xmm15",
3317 "xmm16", "xmm17", "xmm18", "xmm19",
3318 "xmm20", "xmm21", "xmm22", "xmm23",
3319 "xmm24", "xmm25", "xmm26", "xmm27",
3320 "xmm28", "xmm29", "xmm30", "xmm31"
b9733481
L
3321};
3322static const char *att_names_xmm[] = {
3323 "%xmm0", "%xmm1", "%xmm2", "%xmm3",
3324 "%xmm4", "%xmm5", "%xmm6", "%xmm7",
3325 "%xmm8", "%xmm9", "%xmm10", "%xmm11",
43234a1e
L
3326 "%xmm12", "%xmm13", "%xmm14", "%xmm15",
3327 "%xmm16", "%xmm17", "%xmm18", "%xmm19",
3328 "%xmm20", "%xmm21", "%xmm22", "%xmm23",
3329 "%xmm24", "%xmm25", "%xmm26", "%xmm27",
3330 "%xmm28", "%xmm29", "%xmm30", "%xmm31"
b9733481
L
3331};
3332
3333static const char **names_ymm;
3334static const char *intel_names_ymm[] = {
3335 "ymm0", "ymm1", "ymm2", "ymm3",
3336 "ymm4", "ymm5", "ymm6", "ymm7",
3337 "ymm8", "ymm9", "ymm10", "ymm11",
43234a1e
L
3338 "ymm12", "ymm13", "ymm14", "ymm15",
3339 "ymm16", "ymm17", "ymm18", "ymm19",
3340 "ymm20", "ymm21", "ymm22", "ymm23",
3341 "ymm24", "ymm25", "ymm26", "ymm27",
3342 "ymm28", "ymm29", "ymm30", "ymm31"
b9733481
L
3343};
3344static const char *att_names_ymm[] = {
3345 "%ymm0", "%ymm1", "%ymm2", "%ymm3",
3346 "%ymm4", "%ymm5", "%ymm6", "%ymm7",
3347 "%ymm8", "%ymm9", "%ymm10", "%ymm11",
43234a1e
L
3348 "%ymm12", "%ymm13", "%ymm14", "%ymm15",
3349 "%ymm16", "%ymm17", "%ymm18", "%ymm19",
3350 "%ymm20", "%ymm21", "%ymm22", "%ymm23",
3351 "%ymm24", "%ymm25", "%ymm26", "%ymm27",
3352 "%ymm28", "%ymm29", "%ymm30", "%ymm31"
3353};
3354
3355static const char **names_zmm;
3356static const char *intel_names_zmm[] = {
3357 "zmm0", "zmm1", "zmm2", "zmm3",
3358 "zmm4", "zmm5", "zmm6", "zmm7",
3359 "zmm8", "zmm9", "zmm10", "zmm11",
3360 "zmm12", "zmm13", "zmm14", "zmm15",
3361 "zmm16", "zmm17", "zmm18", "zmm19",
3362 "zmm20", "zmm21", "zmm22", "zmm23",
3363 "zmm24", "zmm25", "zmm26", "zmm27",
3364 "zmm28", "zmm29", "zmm30", "zmm31"
3365};
3366static const char *att_names_zmm[] = {
3367 "%zmm0", "%zmm1", "%zmm2", "%zmm3",
3368 "%zmm4", "%zmm5", "%zmm6", "%zmm7",
3369 "%zmm8", "%zmm9", "%zmm10", "%zmm11",
3370 "%zmm12", "%zmm13", "%zmm14", "%zmm15",
3371 "%zmm16", "%zmm17", "%zmm18", "%zmm19",
3372 "%zmm20", "%zmm21", "%zmm22", "%zmm23",
3373 "%zmm24", "%zmm25", "%zmm26", "%zmm27",
3374 "%zmm28", "%zmm29", "%zmm30", "%zmm31"
3375};
3376
3377static const char **names_mask;
3378static const char *intel_names_mask[] = {
3379 "k0", "k1", "k2", "k3", "k4", "k5", "k6", "k7"
3380};
3381static const char *att_names_mask[] = {
3382 "%k0", "%k1", "%k2", "%k3", "%k4", "%k5", "%k6", "%k7"
3383};
3384
3385static const char *names_rounding[] =
3386{
3387 "{rn-sae}",
3388 "{rd-sae}",
3389 "{ru-sae}",
3390 "{rz-sae}"
b9733481
L
3391};
3392
1ceb70f8
L
3393static const struct dis386 reg_table[][8] = {
3394 /* REG_80 */
252b5132 3395 {
bf890a93
IT
3396 { "addA", { Ebh1, Ib }, 0 },
3397 { "orA", { Ebh1, Ib }, 0 },
3398 { "adcA", { Ebh1, Ib }, 0 },
3399 { "sbbA", { Ebh1, Ib }, 0 },
3400 { "andA", { Ebh1, Ib }, 0 },
3401 { "subA", { Ebh1, Ib }, 0 },
3402 { "xorA", { Ebh1, Ib }, 0 },
3403 { "cmpA", { Eb, Ib }, 0 },
252b5132 3404 },
1ceb70f8 3405 /* REG_81 */
252b5132 3406 {
bf890a93
IT
3407 { "addQ", { Evh1, Iv }, 0 },
3408 { "orQ", { Evh1, Iv }, 0 },
3409 { "adcQ", { Evh1, Iv }, 0 },
3410 { "sbbQ", { Evh1, Iv }, 0 },
3411 { "andQ", { Evh1, Iv }, 0 },
3412 { "subQ", { Evh1, Iv }, 0 },
3413 { "xorQ", { Evh1, Iv }, 0 },
3414 { "cmpQ", { Ev, Iv }, 0 },
252b5132 3415 },
7148c369 3416 /* REG_83 */
252b5132 3417 {
bf890a93
IT
3418 { "addQ", { Evh1, sIb }, 0 },
3419 { "orQ", { Evh1, sIb }, 0 },
3420 { "adcQ", { Evh1, sIb }, 0 },
3421 { "sbbQ", { Evh1, sIb }, 0 },
3422 { "andQ", { Evh1, sIb }, 0 },
3423 { "subQ", { Evh1, sIb }, 0 },
3424 { "xorQ", { Evh1, sIb }, 0 },
3425 { "cmpQ", { Ev, sIb }, 0 },
252b5132 3426 },
1ceb70f8 3427 /* REG_8F */
4e7d34a6 3428 {
bf890a93 3429 { "popU", { stackEv }, 0 },
c48244a5 3430 { XOP_8F_TABLE (XOP_09) },
592d1631
L
3431 { Bad_Opcode },
3432 { Bad_Opcode },
3433 { Bad_Opcode },
f88c9eb0 3434 { XOP_8F_TABLE (XOP_09) },
4e7d34a6 3435 },
1ceb70f8 3436 /* REG_C0 */
252b5132 3437 {
bf890a93
IT
3438 { "rolA", { Eb, Ib }, 0 },
3439 { "rorA", { Eb, Ib }, 0 },
3440 { "rclA", { Eb, Ib }, 0 },
3441 { "rcrA", { Eb, Ib }, 0 },
3442 { "shlA", { Eb, Ib }, 0 },
3443 { "shrA", { Eb, Ib }, 0 },
e4bdd679 3444 { "shlA", { Eb, Ib }, 0 },
bf890a93 3445 { "sarA", { Eb, Ib }, 0 },
252b5132 3446 },
1ceb70f8 3447 /* REG_C1 */
252b5132 3448 {
bf890a93
IT
3449 { "rolQ", { Ev, Ib }, 0 },
3450 { "rorQ", { Ev, Ib }, 0 },
3451 { "rclQ", { Ev, Ib }, 0 },
3452 { "rcrQ", { Ev, Ib }, 0 },
3453 { "shlQ", { Ev, Ib }, 0 },
3454 { "shrQ", { Ev, Ib }, 0 },
e4bdd679 3455 { "shlQ", { Ev, Ib }, 0 },
bf890a93 3456 { "sarQ", { Ev, Ib }, 0 },
252b5132 3457 },
1ceb70f8 3458 /* REG_C6 */
4e7d34a6 3459 {
bf890a93 3460 { "movA", { Ebh3, Ib }, 0 },
42164a71
L
3461 { Bad_Opcode },
3462 { Bad_Opcode },
3463 { Bad_Opcode },
3464 { Bad_Opcode },
3465 { Bad_Opcode },
3466 { Bad_Opcode },
3467 { MOD_TABLE (MOD_C6_REG_7) },
4e7d34a6 3468 },
1ceb70f8 3469 /* REG_C7 */
4e7d34a6 3470 {
bf890a93 3471 { "movQ", { Evh3, Iv }, 0 },
42164a71
L
3472 { Bad_Opcode },
3473 { Bad_Opcode },
3474 { Bad_Opcode },
3475 { Bad_Opcode },
3476 { Bad_Opcode },
3477 { Bad_Opcode },
3478 { MOD_TABLE (MOD_C7_REG_7) },
4e7d34a6 3479 },
1ceb70f8 3480 /* REG_D0 */
252b5132 3481 {
bf890a93
IT
3482 { "rolA", { Eb, I1 }, 0 },
3483 { "rorA", { Eb, I1 }, 0 },
3484 { "rclA", { Eb, I1 }, 0 },
3485 { "rcrA", { Eb, I1 }, 0 },
3486 { "shlA", { Eb, I1 }, 0 },
3487 { "shrA", { Eb, I1 }, 0 },
e4bdd679 3488 { "shlA", { Eb, I1 }, 0 },
bf890a93 3489 { "sarA", { Eb, I1 }, 0 },
252b5132 3490 },
1ceb70f8 3491 /* REG_D1 */
252b5132 3492 {
bf890a93
IT
3493 { "rolQ", { Ev, I1 }, 0 },
3494 { "rorQ", { Ev, I1 }, 0 },
3495 { "rclQ", { Ev, I1 }, 0 },
3496 { "rcrQ", { Ev, I1 }, 0 },
3497 { "shlQ", { Ev, I1 }, 0 },
3498 { "shrQ", { Ev, I1 }, 0 },
e4bdd679 3499 { "shlQ", { Ev, I1 }, 0 },
bf890a93 3500 { "sarQ", { Ev, I1 }, 0 },
252b5132 3501 },
1ceb70f8 3502 /* REG_D2 */
252b5132 3503 {
bf890a93
IT
3504 { "rolA", { Eb, CL }, 0 },
3505 { "rorA", { Eb, CL }, 0 },
3506 { "rclA", { Eb, CL }, 0 },
3507 { "rcrA", { Eb, CL }, 0 },
3508 { "shlA", { Eb, CL }, 0 },
3509 { "shrA", { Eb, CL }, 0 },
e4bdd679 3510 { "shlA", { Eb, CL }, 0 },
bf890a93 3511 { "sarA", { Eb, CL }, 0 },
252b5132 3512 },
1ceb70f8 3513 /* REG_D3 */
252b5132 3514 {
bf890a93
IT
3515 { "rolQ", { Ev, CL }, 0 },
3516 { "rorQ", { Ev, CL }, 0 },
3517 { "rclQ", { Ev, CL }, 0 },
3518 { "rcrQ", { Ev, CL }, 0 },
3519 { "shlQ", { Ev, CL }, 0 },
3520 { "shrQ", { Ev, CL }, 0 },
e4bdd679 3521 { "shlQ", { Ev, CL }, 0 },
bf890a93 3522 { "sarQ", { Ev, CL }, 0 },
252b5132 3523 },
1ceb70f8 3524 /* REG_F6 */
252b5132 3525 {
bf890a93 3526 { "testA", { Eb, Ib }, 0 },
7db2c588 3527 { "testA", { Eb, Ib }, 0 },
bf890a93
IT
3528 { "notA", { Ebh1 }, 0 },
3529 { "negA", { Ebh1 }, 0 },
3530 { "mulA", { Eb }, 0 }, /* Don't print the implicit %al register, */
3531 { "imulA", { Eb }, 0 }, /* to distinguish these opcodes from other */
3532 { "divA", { Eb }, 0 }, /* mul/imul opcodes. Do the same for div */
3533 { "idivA", { Eb }, 0 }, /* and idiv for consistency. */
252b5132 3534 },
1ceb70f8 3535 /* REG_F7 */
252b5132 3536 {
bf890a93 3537 { "testQ", { Ev, Iv }, 0 },
7db2c588 3538 { "testQ", { Ev, Iv }, 0 },
bf890a93
IT
3539 { "notQ", { Evh1 }, 0 },
3540 { "negQ", { Evh1 }, 0 },
3541 { "mulQ", { Ev }, 0 }, /* Don't print the implicit register. */
3542 { "imulQ", { Ev }, 0 },
3543 { "divQ", { Ev }, 0 },
3544 { "idivQ", { Ev }, 0 },
252b5132 3545 },
1ceb70f8 3546 /* REG_FE */
252b5132 3547 {
bf890a93
IT
3548 { "incA", { Ebh1 }, 0 },
3549 { "decA", { Ebh1 }, 0 },
252b5132 3550 },
1ceb70f8 3551 /* REG_FF */
252b5132 3552 {
bf890a93
IT
3553 { "incQ", { Evh1 }, 0 },
3554 { "decQ", { Evh1 }, 0 },
9fef80d6 3555 { "call{&|}", { NOTRACK, indirEv, BND }, 0 },
4a357820 3556 { MOD_TABLE (MOD_FF_REG_3) },
9fef80d6 3557 { "jmp{&|}", { NOTRACK, indirEv, BND }, 0 },
4a357820 3558 { MOD_TABLE (MOD_FF_REG_5) },
bf890a93 3559 { "pushU", { stackEv }, 0 },
592d1631 3560 { Bad_Opcode },
252b5132 3561 },
1ceb70f8 3562 /* REG_0F00 */
252b5132 3563 {
bf890a93
IT
3564 { "sldtD", { Sv }, 0 },
3565 { "strD", { Sv }, 0 },
3566 { "lldt", { Ew }, 0 },
3567 { "ltr", { Ew }, 0 },
3568 { "verr", { Ew }, 0 },
3569 { "verw", { Ew }, 0 },
592d1631
L
3570 { Bad_Opcode },
3571 { Bad_Opcode },
252b5132 3572 },
1ceb70f8 3573 /* REG_0F01 */
252b5132 3574 {
1ceb70f8
L
3575 { MOD_TABLE (MOD_0F01_REG_0) },
3576 { MOD_TABLE (MOD_0F01_REG_1) },
3577 { MOD_TABLE (MOD_0F01_REG_2) },
3578 { MOD_TABLE (MOD_0F01_REG_3) },
bf890a93 3579 { "smswD", { Sv }, 0 },
8eab4136 3580 { MOD_TABLE (MOD_0F01_REG_5) },
bf890a93 3581 { "lmsw", { Ew }, 0 },
1ceb70f8 3582 { MOD_TABLE (MOD_0F01_REG_7) },
252b5132 3583 },
b5b1fc4f 3584 /* REG_0F0D */
252b5132 3585 {
bf890a93
IT
3586 { "prefetch", { Mb }, 0 },
3587 { "prefetchw", { Mb }, 0 },
3588 { "prefetchwt1", { Mb }, 0 },
3589 { "prefetch", { Mb }, 0 },
3590 { "prefetch", { Mb }, 0 },
3591 { "prefetch", { Mb }, 0 },
3592 { "prefetch", { Mb }, 0 },
3593 { "prefetch", { Mb }, 0 },
252b5132 3594 },
1ceb70f8 3595 /* REG_0F18 */
252b5132 3596 {
1ceb70f8
L
3597 { MOD_TABLE (MOD_0F18_REG_0) },
3598 { MOD_TABLE (MOD_0F18_REG_1) },
3599 { MOD_TABLE (MOD_0F18_REG_2) },
3600 { MOD_TABLE (MOD_0F18_REG_3) },
d7189fa5
RM
3601 { MOD_TABLE (MOD_0F18_REG_4) },
3602 { MOD_TABLE (MOD_0F18_REG_5) },
3603 { MOD_TABLE (MOD_0F18_REG_6) },
3604 { MOD_TABLE (MOD_0F18_REG_7) },
252b5132 3605 },
603555e5
L
3606 /* REG_0F1E_MOD_3 */
3607 {
3608 { "nopQ", { Ev }, 0 },
3609 { "rdsspK", { Rdq }, PREFIX_OPCODE },
3610 { "nopQ", { Ev }, 0 },
3611 { "nopQ", { Ev }, 0 },
3612 { "nopQ", { Ev }, 0 },
3613 { "nopQ", { Ev }, 0 },
3614 { "nopQ", { Ev }, 0 },
3615 { RM_TABLE (RM_0F1E_MOD_3_REG_7) },
3616 },
1ceb70f8 3617 /* REG_0F71 */
a6bd098c 3618 {
592d1631
L
3619 { Bad_Opcode },
3620 { Bad_Opcode },
1ceb70f8 3621 { MOD_TABLE (MOD_0F71_REG_2) },
592d1631 3622 { Bad_Opcode },
1ceb70f8 3623 { MOD_TABLE (MOD_0F71_REG_4) },
592d1631 3624 { Bad_Opcode },
1ceb70f8 3625 { MOD_TABLE (MOD_0F71_REG_6) },
a6bd098c 3626 },
1ceb70f8 3627 /* REG_0F72 */
a6bd098c 3628 {
592d1631
L
3629 { Bad_Opcode },
3630 { Bad_Opcode },
1ceb70f8 3631 { MOD_TABLE (MOD_0F72_REG_2) },
592d1631 3632 { Bad_Opcode },
1ceb70f8 3633 { MOD_TABLE (MOD_0F72_REG_4) },
592d1631 3634 { Bad_Opcode },
1ceb70f8 3635 { MOD_TABLE (MOD_0F72_REG_6) },
a6bd098c 3636 },
1ceb70f8 3637 /* REG_0F73 */
252b5132 3638 {
592d1631
L
3639 { Bad_Opcode },
3640 { Bad_Opcode },
1ceb70f8
L
3641 { MOD_TABLE (MOD_0F73_REG_2) },
3642 { MOD_TABLE (MOD_0F73_REG_3) },
592d1631
L
3643 { Bad_Opcode },
3644 { Bad_Opcode },
1ceb70f8
L
3645 { MOD_TABLE (MOD_0F73_REG_6) },
3646 { MOD_TABLE (MOD_0F73_REG_7) },
252b5132 3647 },
1ceb70f8 3648 /* REG_0FA6 */
252b5132 3649 {
bf890a93
IT
3650 { "montmul", { { OP_0f07, 0 } }, 0 },
3651 { "xsha1", { { OP_0f07, 0 } }, 0 },
3652 { "xsha256", { { OP_0f07, 0 } }, 0 },
4e7d34a6 3653 },
1ceb70f8 3654 /* REG_0FA7 */
4e7d34a6 3655 {
bf890a93
IT
3656 { "xstore-rng", { { OP_0f07, 0 } }, 0 },
3657 { "xcrypt-ecb", { { OP_0f07, 0 } }, 0 },
3658 { "xcrypt-cbc", { { OP_0f07, 0 } }, 0 },
3659 { "xcrypt-ctr", { { OP_0f07, 0 } }, 0 },
3660 { "xcrypt-cfb", { { OP_0f07, 0 } }, 0 },
3661 { "xcrypt-ofb", { { OP_0f07, 0 } }, 0 },
4e7d34a6 3662 },
1ceb70f8 3663 /* REG_0FAE */
4e7d34a6 3664 {
1ceb70f8
L
3665 { MOD_TABLE (MOD_0FAE_REG_0) },
3666 { MOD_TABLE (MOD_0FAE_REG_1) },
3667 { MOD_TABLE (MOD_0FAE_REG_2) },
3668 { MOD_TABLE (MOD_0FAE_REG_3) },
475a2301 3669 { MOD_TABLE (MOD_0FAE_REG_4) },
1ceb70f8
L
3670 { MOD_TABLE (MOD_0FAE_REG_5) },
3671 { MOD_TABLE (MOD_0FAE_REG_6) },
3672 { MOD_TABLE (MOD_0FAE_REG_7) },
252b5132 3673 },
1ceb70f8 3674 /* REG_0FBA */
252b5132 3675 {
592d1631
L
3676 { Bad_Opcode },
3677 { Bad_Opcode },
3678 { Bad_Opcode },
3679 { Bad_Opcode },
bf890a93
IT
3680 { "btQ", { Ev, Ib }, 0 },
3681 { "btsQ", { Evh1, Ib }, 0 },
3682 { "btrQ", { Evh1, Ib }, 0 },
3683 { "btcQ", { Evh1, Ib }, 0 },
c608c12e 3684 },
1ceb70f8 3685 /* REG_0FC7 */
c608c12e 3686 {
592d1631 3687 { Bad_Opcode },
bf890a93 3688 { "cmpxchg8b", { { CMPXCHG8B_Fixup, q_mode } }, 0 },
592d1631 3689 { Bad_Opcode },
963f3586
IT
3690 { MOD_TABLE (MOD_0FC7_REG_3) },
3691 { MOD_TABLE (MOD_0FC7_REG_4) },
3692 { MOD_TABLE (MOD_0FC7_REG_5) },
1ceb70f8
L
3693 { MOD_TABLE (MOD_0FC7_REG_6) },
3694 { MOD_TABLE (MOD_0FC7_REG_7) },
252b5132 3695 },
592a252b 3696 /* REG_VEX_0F71 */
c0f3af97 3697 {
592d1631
L
3698 { Bad_Opcode },
3699 { Bad_Opcode },
592a252b 3700 { MOD_TABLE (MOD_VEX_0F71_REG_2) },
592d1631 3701 { Bad_Opcode },
592a252b 3702 { MOD_TABLE (MOD_VEX_0F71_REG_4) },
592d1631 3703 { Bad_Opcode },
592a252b 3704 { MOD_TABLE (MOD_VEX_0F71_REG_6) },
c0f3af97 3705 },
592a252b 3706 /* REG_VEX_0F72 */
c0f3af97 3707 {
592d1631
L
3708 { Bad_Opcode },
3709 { Bad_Opcode },
592a252b 3710 { MOD_TABLE (MOD_VEX_0F72_REG_2) },
592d1631 3711 { Bad_Opcode },
592a252b 3712 { MOD_TABLE (MOD_VEX_0F72_REG_4) },
592d1631 3713 { Bad_Opcode },
592a252b 3714 { MOD_TABLE (MOD_VEX_0F72_REG_6) },
c0f3af97 3715 },
592a252b 3716 /* REG_VEX_0F73 */
c0f3af97 3717 {
592d1631
L
3718 { Bad_Opcode },
3719 { Bad_Opcode },
592a252b
L
3720 { MOD_TABLE (MOD_VEX_0F73_REG_2) },
3721 { MOD_TABLE (MOD_VEX_0F73_REG_3) },
592d1631
L
3722 { Bad_Opcode },
3723 { Bad_Opcode },
592a252b
L
3724 { MOD_TABLE (MOD_VEX_0F73_REG_6) },
3725 { MOD_TABLE (MOD_VEX_0F73_REG_7) },
c0f3af97 3726 },
592a252b 3727 /* REG_VEX_0FAE */
c0f3af97 3728 {
592d1631
L
3729 { Bad_Opcode },
3730 { Bad_Opcode },
592a252b
L
3731 { MOD_TABLE (MOD_VEX_0FAE_REG_2) },
3732 { MOD_TABLE (MOD_VEX_0FAE_REG_3) },
c0f3af97 3733 },
f12dc422
L
3734 /* REG_VEX_0F38F3 */
3735 {
3736 { Bad_Opcode },
3737 { PREFIX_TABLE (PREFIX_VEX_0F38F3_REG_1) },
3738 { PREFIX_TABLE (PREFIX_VEX_0F38F3_REG_2) },
3739 { PREFIX_TABLE (PREFIX_VEX_0F38F3_REG_3) },
3740 },
f88c9eb0
SP
3741 /* REG_XOP_LWPCB */
3742 {
bf890a93
IT
3743 { "llwpcb", { { OP_LWPCB_E, 0 } }, 0 },
3744 { "slwpcb", { { OP_LWPCB_E, 0 } }, 0 },
f88c9eb0
SP
3745 },
3746 /* REG_XOP_LWP */
3747 {
bf890a93
IT
3748 { "lwpins", { { OP_LWP_E, 0 }, Ed, Iq }, 0 },
3749 { "lwpval", { { OP_LWP_E, 0 }, Ed, Iq }, 0 },
f88c9eb0 3750 },
2a2a0f38
QN
3751 /* REG_XOP_TBM_01 */
3752 {
3753 { Bad_Opcode },
bf890a93
IT
3754 { "blcfill", { { OP_LWP_E, 0 }, Ev }, 0 },
3755 { "blsfill", { { OP_LWP_E, 0 }, Ev }, 0 },
3756 { "blcs", { { OP_LWP_E, 0 }, Ev }, 0 },
3757 { "tzmsk", { { OP_LWP_E, 0 }, Ev }, 0 },
3758 { "blcic", { { OP_LWP_E, 0 }, Ev }, 0 },
3759 { "blsic", { { OP_LWP_E, 0 }, Ev }, 0 },
3760 { "t1mskc", { { OP_LWP_E, 0 }, Ev }, 0 },
2a2a0f38
QN
3761 },
3762 /* REG_XOP_TBM_02 */
3763 {
3764 { Bad_Opcode },
bf890a93 3765 { "blcmsk", { { OP_LWP_E, 0 }, Ev }, 0 },
2a2a0f38
QN
3766 { Bad_Opcode },
3767 { Bad_Opcode },
3768 { Bad_Opcode },
3769 { Bad_Opcode },
bf890a93 3770 { "blci", { { OP_LWP_E, 0 }, Ev }, 0 },
2a2a0f38 3771 },
43234a1e
L
3772#define NEED_REG_TABLE
3773#include "i386-dis-evex.h"
3774#undef NEED_REG_TABLE
4e7d34a6
L
3775};
3776
1ceb70f8
L
3777static const struct dis386 prefix_table[][4] = {
3778 /* PREFIX_90 */
252b5132 3779 {
bf890a93
IT
3780 { "xchgS", { { NOP_Fixup1, eAX_reg }, { NOP_Fixup2, eAX_reg } }, 0 },
3781 { "pause", { XX }, 0 },
3782 { "xchgS", { { NOP_Fixup1, eAX_reg }, { NOP_Fixup2, eAX_reg } }, 0 },
507bd325 3783 { NULL, { { NULL, 0 } }, PREFIX_IGNORED }
0f10071e 3784 },
4e7d34a6 3785
603555e5
L
3786 /* PREFIX_MOD_0_0F01_REG_5 */
3787 {
3788 { Bad_Opcode },
3789 { "rstorssp", { Mq }, PREFIX_OPCODE },
3790 },
3791
2234eee6 3792 /* PREFIX_MOD_3_0F01_REG_5_RM_0 */
603555e5
L
3793 {
3794 { Bad_Opcode },
2234eee6 3795 { "setssbsy", { Skip_MODRM }, PREFIX_OPCODE },
603555e5
L
3796 },
3797
3798 /* PREFIX_MOD_3_0F01_REG_5_RM_2 */
3799 {
3800 { Bad_Opcode },
c2f76402 3801 { "saveprevssp", { Skip_MODRM }, PREFIX_OPCODE },
603555e5
L
3802 },
3803
1ceb70f8 3804 /* PREFIX_0F10 */
cc0ec051 3805 {
507bd325
L
3806 { "movups", { XM, EXx }, PREFIX_OPCODE },
3807 { "movss", { XM, EXd }, PREFIX_OPCODE },
3808 { "movupd", { XM, EXx }, PREFIX_OPCODE },
3809 { "movsd", { XM, EXq }, PREFIX_OPCODE },
30d1c836 3810 },
4e7d34a6 3811
1ceb70f8 3812 /* PREFIX_0F11 */
30d1c836 3813 {
507bd325
L
3814 { "movups", { EXxS, XM }, PREFIX_OPCODE },
3815 { "movss", { EXdS, XM }, PREFIX_OPCODE },
3816 { "movupd", { EXxS, XM }, PREFIX_OPCODE },
3817 { "movsd", { EXqS, XM }, PREFIX_OPCODE },
4e7d34a6 3818 },
252b5132 3819
1ceb70f8 3820 /* PREFIX_0F12 */
c608c12e 3821 {
1ceb70f8 3822 { MOD_TABLE (MOD_0F12_PREFIX_0) },
507bd325
L
3823 { "movsldup", { XM, EXx }, PREFIX_OPCODE },
3824 { "movlpd", { XM, EXq }, PREFIX_OPCODE },
3825 { "movddup", { XM, EXq }, PREFIX_OPCODE },
c608c12e 3826 },
4e7d34a6 3827
1ceb70f8 3828 /* PREFIX_0F16 */
c608c12e 3829 {
1ceb70f8 3830 { MOD_TABLE (MOD_0F16_PREFIX_0) },
507bd325
L
3831 { "movshdup", { XM, EXx }, PREFIX_OPCODE },
3832 { "movhpd", { XM, EXq }, PREFIX_OPCODE },
c608c12e 3833 },
4e7d34a6 3834
7e8b059b
L
3835 /* PREFIX_0F1A */
3836 {
3837 { MOD_TABLE (MOD_0F1A_PREFIX_0) },
bf890a93
IT
3838 { "bndcl", { Gbnd, Ev_bnd }, 0 },
3839 { "bndmov", { Gbnd, Ebnd }, 0 },
3840 { "bndcu", { Gbnd, Ev_bnd }, 0 },
7e8b059b
L
3841 },
3842
3843 /* PREFIX_0F1B */
3844 {
3845 { MOD_TABLE (MOD_0F1B_PREFIX_0) },
3846 { MOD_TABLE (MOD_0F1B_PREFIX_1) },
bf890a93
IT
3847 { "bndmov", { Ebnd, Gbnd }, 0 },
3848 { "bndcn", { Gbnd, Ev_bnd }, 0 },
7e8b059b
L
3849 },
3850
603555e5
L
3851 /* PREFIX_0F1E */
3852 {
3853 { "nopQ", { Ev }, PREFIX_OPCODE },
3854 { MOD_TABLE (MOD_0F1E_PREFIX_1) },
3855 { "nopQ", { Ev }, PREFIX_OPCODE },
3856 { "nopQ", { Ev }, PREFIX_OPCODE },
3857 },
3858
1ceb70f8 3859 /* PREFIX_0F2A */
c608c12e 3860 {
507bd325
L
3861 { "cvtpi2ps", { XM, EMCq }, PREFIX_OPCODE },
3862 { "cvtsi2ss%LQ", { XM, Ev }, PREFIX_OPCODE },
3863 { "cvtpi2pd", { XM, EMCq }, PREFIX_OPCODE },
bf890a93 3864 { "cvtsi2sd%LQ", { XM, Ev }, 0 },
c608c12e 3865 },
4e7d34a6 3866
1ceb70f8 3867 /* PREFIX_0F2B */
c608c12e 3868 {
75c135a8
L
3869 { MOD_TABLE (MOD_0F2B_PREFIX_0) },
3870 { MOD_TABLE (MOD_0F2B_PREFIX_1) },
3871 { MOD_TABLE (MOD_0F2B_PREFIX_2) },
3872 { MOD_TABLE (MOD_0F2B_PREFIX_3) },
c608c12e 3873 },
4e7d34a6 3874
1ceb70f8 3875 /* PREFIX_0F2C */
c608c12e 3876 {
507bd325
L
3877 { "cvttps2pi", { MXC, EXq }, PREFIX_OPCODE },
3878 { "cvttss2siY", { Gv, EXd }, PREFIX_OPCODE },
3879 { "cvttpd2pi", { MXC, EXx }, PREFIX_OPCODE },
3880 { "cvttsd2siY", { Gv, EXq }, PREFIX_OPCODE },
c608c12e 3881 },
4e7d34a6 3882
1ceb70f8 3883 /* PREFIX_0F2D */
c608c12e 3884 {
507bd325
L
3885 { "cvtps2pi", { MXC, EXq }, PREFIX_OPCODE },
3886 { "cvtss2siY", { Gv, EXd }, PREFIX_OPCODE },
3887 { "cvtpd2pi", { MXC, EXx }, PREFIX_OPCODE },
3888 { "cvtsd2siY", { Gv, EXq }, PREFIX_OPCODE },
c608c12e 3889 },
4e7d34a6 3890
1ceb70f8 3891 /* PREFIX_0F2E */
c608c12e 3892 {
bf890a93 3893 { "ucomiss",{ XM, EXd }, 0 },
592d1631 3894 { Bad_Opcode },
bf890a93 3895 { "ucomisd",{ XM, EXq }, 0 },
c608c12e 3896 },
4e7d34a6 3897
1ceb70f8 3898 /* PREFIX_0F2F */
c608c12e 3899 {
bf890a93 3900 { "comiss", { XM, EXd }, 0 },
592d1631 3901 { Bad_Opcode },
bf890a93 3902 { "comisd", { XM, EXq }, 0 },
c608c12e 3903 },
4e7d34a6 3904
1ceb70f8 3905 /* PREFIX_0F51 */
c608c12e 3906 {
507bd325
L
3907 { "sqrtps", { XM, EXx }, PREFIX_OPCODE },
3908 { "sqrtss", { XM, EXd }, PREFIX_OPCODE },
3909 { "sqrtpd", { XM, EXx }, PREFIX_OPCODE },
3910 { "sqrtsd", { XM, EXq }, PREFIX_OPCODE },
c608c12e 3911 },
4e7d34a6 3912
1ceb70f8 3913 /* PREFIX_0F52 */
c608c12e 3914 {
507bd325
L
3915 { "rsqrtps",{ XM, EXx }, PREFIX_OPCODE },
3916 { "rsqrtss",{ XM, EXd }, PREFIX_OPCODE },
c608c12e 3917 },
4e7d34a6 3918
1ceb70f8 3919 /* PREFIX_0F53 */
c608c12e 3920 {
507bd325
L
3921 { "rcpps", { XM, EXx }, PREFIX_OPCODE },
3922 { "rcpss", { XM, EXd }, PREFIX_OPCODE },
c608c12e 3923 },
4e7d34a6 3924
1ceb70f8 3925 /* PREFIX_0F58 */
c608c12e 3926 {
507bd325
L
3927 { "addps", { XM, EXx }, PREFIX_OPCODE },
3928 { "addss", { XM, EXd }, PREFIX_OPCODE },
3929 { "addpd", { XM, EXx }, PREFIX_OPCODE },
3930 { "addsd", { XM, EXq }, PREFIX_OPCODE },
c608c12e 3931 },
4e7d34a6 3932
1ceb70f8 3933 /* PREFIX_0F59 */
c608c12e 3934 {
507bd325
L
3935 { "mulps", { XM, EXx }, PREFIX_OPCODE },
3936 { "mulss", { XM, EXd }, PREFIX_OPCODE },
3937 { "mulpd", { XM, EXx }, PREFIX_OPCODE },
3938 { "mulsd", { XM, EXq }, PREFIX_OPCODE },
041bd2e0 3939 },
4e7d34a6 3940
1ceb70f8 3941 /* PREFIX_0F5A */
041bd2e0 3942 {
507bd325
L
3943 { "cvtps2pd", { XM, EXq }, PREFIX_OPCODE },
3944 { "cvtss2sd", { XM, EXd }, PREFIX_OPCODE },
3945 { "cvtpd2ps", { XM, EXx }, PREFIX_OPCODE },
3946 { "cvtsd2ss", { XM, EXq }, PREFIX_OPCODE },
041bd2e0 3947 },
4e7d34a6 3948
1ceb70f8 3949 /* PREFIX_0F5B */
041bd2e0 3950 {
507bd325
L
3951 { "cvtdq2ps", { XM, EXx }, PREFIX_OPCODE },
3952 { "cvttps2dq", { XM, EXx }, PREFIX_OPCODE },
3953 { "cvtps2dq", { XM, EXx }, PREFIX_OPCODE },
041bd2e0 3954 },
4e7d34a6 3955
1ceb70f8 3956 /* PREFIX_0F5C */
041bd2e0 3957 {
507bd325
L
3958 { "subps", { XM, EXx }, PREFIX_OPCODE },
3959 { "subss", { XM, EXd }, PREFIX_OPCODE },
3960 { "subpd", { XM, EXx }, PREFIX_OPCODE },
3961 { "subsd", { XM, EXq }, PREFIX_OPCODE },
041bd2e0 3962 },
4e7d34a6 3963
1ceb70f8 3964 /* PREFIX_0F5D */
041bd2e0 3965 {
507bd325
L
3966 { "minps", { XM, EXx }, PREFIX_OPCODE },
3967 { "minss", { XM, EXd }, PREFIX_OPCODE },
3968 { "minpd", { XM, EXx }, PREFIX_OPCODE },
3969 { "minsd", { XM, EXq }, PREFIX_OPCODE },
041bd2e0 3970 },
4e7d34a6 3971
1ceb70f8 3972 /* PREFIX_0F5E */
041bd2e0 3973 {
507bd325
L
3974 { "divps", { XM, EXx }, PREFIX_OPCODE },
3975 { "divss", { XM, EXd }, PREFIX_OPCODE },
3976 { "divpd", { XM, EXx }, PREFIX_OPCODE },
3977 { "divsd", { XM, EXq }, PREFIX_OPCODE },
041bd2e0 3978 },
4e7d34a6 3979
1ceb70f8 3980 /* PREFIX_0F5F */
041bd2e0 3981 {
507bd325
L
3982 { "maxps", { XM, EXx }, PREFIX_OPCODE },
3983 { "maxss", { XM, EXd }, PREFIX_OPCODE },
3984 { "maxpd", { XM, EXx }, PREFIX_OPCODE },
3985 { "maxsd", { XM, EXq }, PREFIX_OPCODE },
041bd2e0 3986 },
4e7d34a6 3987
1ceb70f8 3988 /* PREFIX_0F60 */
041bd2e0 3989 {
507bd325 3990 { "punpcklbw",{ MX, EMd }, PREFIX_OPCODE },
592d1631 3991 { Bad_Opcode },
507bd325 3992 { "punpcklbw",{ MX, EMx }, PREFIX_OPCODE },
041bd2e0 3993 },
4e7d34a6 3994
1ceb70f8 3995 /* PREFIX_0F61 */
041bd2e0 3996 {
507bd325 3997 { "punpcklwd",{ MX, EMd }, PREFIX_OPCODE },
592d1631 3998 { Bad_Opcode },
507bd325 3999 { "punpcklwd",{ MX, EMx }, PREFIX_OPCODE },
041bd2e0 4000 },
4e7d34a6 4001
1ceb70f8 4002 /* PREFIX_0F62 */
041bd2e0 4003 {
507bd325 4004 { "punpckldq",{ MX, EMd }, PREFIX_OPCODE },
592d1631 4005 { Bad_Opcode },
507bd325 4006 { "punpckldq",{ MX, EMx }, PREFIX_OPCODE },
041bd2e0 4007 },
4e7d34a6 4008
1ceb70f8 4009 /* PREFIX_0F6C */
041bd2e0 4010 {
592d1631
L
4011 { Bad_Opcode },
4012 { Bad_Opcode },
507bd325 4013 { "punpcklqdq", { XM, EXx }, PREFIX_OPCODE },
0f17484f 4014 },
4e7d34a6 4015
1ceb70f8 4016 /* PREFIX_0F6D */
0f17484f 4017 {
592d1631
L
4018 { Bad_Opcode },
4019 { Bad_Opcode },
507bd325 4020 { "punpckhqdq", { XM, EXx }, PREFIX_OPCODE },
041bd2e0 4021 },
4e7d34a6 4022
1ceb70f8 4023 /* PREFIX_0F6F */
ca164297 4024 {
507bd325
L
4025 { "movq", { MX, EM }, PREFIX_OPCODE },
4026 { "movdqu", { XM, EXx }, PREFIX_OPCODE },
4027 { "movdqa", { XM, EXx }, PREFIX_OPCODE },
ca164297 4028 },
4e7d34a6 4029
1ceb70f8 4030 /* PREFIX_0F70 */
4e7d34a6 4031 {
507bd325
L
4032 { "pshufw", { MX, EM, Ib }, PREFIX_OPCODE },
4033 { "pshufhw",{ XM, EXx, Ib }, PREFIX_OPCODE },
4034 { "pshufd", { XM, EXx, Ib }, PREFIX_OPCODE },
4035 { "pshuflw",{ XM, EXx, Ib }, PREFIX_OPCODE },
4e7d34a6
L
4036 },
4037
92fddf8e
L
4038 /* PREFIX_0F73_REG_3 */
4039 {
592d1631
L
4040 { Bad_Opcode },
4041 { Bad_Opcode },
bf890a93 4042 { "psrldq", { XS, Ib }, 0 },
92fddf8e
L
4043 },
4044
4045 /* PREFIX_0F73_REG_7 */
4046 {
592d1631
L
4047 { Bad_Opcode },
4048 { Bad_Opcode },
bf890a93 4049 { "pslldq", { XS, Ib }, 0 },
92fddf8e
L
4050 },
4051
1ceb70f8 4052 /* PREFIX_0F78 */
4e7d34a6 4053 {
bf890a93 4054 {"vmread", { Em, Gm }, 0 },
592d1631 4055 { Bad_Opcode },
bf890a93
IT
4056 {"extrq", { XS, Ib, Ib }, 0 },
4057 {"insertq", { XM, XS, Ib, Ib }, 0 },
4e7d34a6
L
4058 },
4059
1ceb70f8 4060 /* PREFIX_0F79 */
4e7d34a6 4061 {
bf890a93 4062 {"vmwrite", { Gm, Em }, 0 },
592d1631 4063 { Bad_Opcode },
bf890a93
IT
4064 {"extrq", { XM, XS }, 0 },
4065 {"insertq", { XM, XS }, 0 },
4e7d34a6
L
4066 },
4067
1ceb70f8 4068 /* PREFIX_0F7C */
ca164297 4069 {
592d1631
L
4070 { Bad_Opcode },
4071 { Bad_Opcode },
507bd325
L
4072 { "haddpd", { XM, EXx }, PREFIX_OPCODE },
4073 { "haddps", { XM, EXx }, PREFIX_OPCODE },
ca164297 4074 },
4e7d34a6 4075
1ceb70f8 4076 /* PREFIX_0F7D */
ca164297 4077 {
592d1631
L
4078 { Bad_Opcode },
4079 { Bad_Opcode },
507bd325
L
4080 { "hsubpd", { XM, EXx }, PREFIX_OPCODE },
4081 { "hsubps", { XM, EXx }, PREFIX_OPCODE },
ca164297 4082 },
4e7d34a6 4083
1ceb70f8 4084 /* PREFIX_0F7E */
ca164297 4085 {
507bd325
L
4086 { "movK", { Edq, MX }, PREFIX_OPCODE },
4087 { "movq", { XM, EXq }, PREFIX_OPCODE },
4088 { "movK", { Edq, XM }, PREFIX_OPCODE },
ca164297 4089 },
4e7d34a6 4090
1ceb70f8 4091 /* PREFIX_0F7F */
ca164297 4092 {
507bd325
L
4093 { "movq", { EMS, MX }, PREFIX_OPCODE },
4094 { "movdqu", { EXxS, XM }, PREFIX_OPCODE },
4095 { "movdqa", { EXxS, XM }, PREFIX_OPCODE },
ca164297 4096 },
4e7d34a6 4097
c7b8aa3a
L
4098 /* PREFIX_0FAE_REG_0 */
4099 {
4100 { Bad_Opcode },
bf890a93 4101 { "rdfsbase", { Ev }, 0 },
c7b8aa3a
L
4102 },
4103
4104 /* PREFIX_0FAE_REG_1 */
4105 {
4106 { Bad_Opcode },
bf890a93 4107 { "rdgsbase", { Ev }, 0 },
c7b8aa3a
L
4108 },
4109
4110 /* PREFIX_0FAE_REG_2 */
4111 {
4112 { Bad_Opcode },
bf890a93 4113 { "wrfsbase", { Ev }, 0 },
c7b8aa3a
L
4114 },
4115
4116 /* PREFIX_0FAE_REG_3 */
4117 {
4118 { Bad_Opcode },
bf890a93 4119 { "wrgsbase", { Ev }, 0 },
c7b8aa3a
L
4120 },
4121
6b40c462
L
4122 /* PREFIX_MOD_0_0FAE_REG_4 */
4123 {
4124 { "xsave", { FXSAVE }, 0 },
4125 { "ptwrite%LQ", { Edq }, 0 },
4126 },
4127
4128 /* PREFIX_MOD_3_0FAE_REG_4 */
4129 {
4130 { Bad_Opcode },
4131 { "ptwrite%LQ", { Edq }, 0 },
4132 },
4133
603555e5
L
4134 /* PREFIX_MOD_0_0FAE_REG_5 */
4135 {
4136 { "xrstor", { FXSAVE }, PREFIX_OPCODE },
2234eee6
L
4137 },
4138
4139 /* PREFIX_MOD_3_0FAE_REG_5 */
4140 {
4141 { "lfence", { Skip_MODRM }, 0 },
4142 { "incsspK", { Rdq }, PREFIX_OPCODE },
603555e5
L
4143 },
4144
c5e7287a
IT
4145 /* PREFIX_0FAE_REG_6 */
4146 {
603555e5
L
4147 { "xsaveopt", { FXSAVE }, PREFIX_OPCODE },
4148 { "clrssbsy", { Mq }, PREFIX_OPCODE },
4149 { "clwb", { Mb }, PREFIX_OPCODE },
c5e7287a
IT
4150 },
4151
963f3586
IT
4152 /* PREFIX_0FAE_REG_7 */
4153 {
bf890a93 4154 { "clflush", { Mb }, 0 },
963f3586 4155 { Bad_Opcode },
bf890a93 4156 { "clflushopt", { Mb }, 0 },
963f3586
IT
4157 },
4158
1ceb70f8 4159 /* PREFIX_0FB8 */
ca164297 4160 {
592d1631 4161 { Bad_Opcode },
bf890a93 4162 { "popcntS", { Gv, Ev }, 0 },
ca164297 4163 },
4e7d34a6 4164
f12dc422
L
4165 /* PREFIX_0FBC */
4166 {
bf890a93
IT
4167 { "bsfS", { Gv, Ev }, 0 },
4168 { "tzcntS", { Gv, Ev }, 0 },
4169 { "bsfS", { Gv, Ev }, 0 },
f12dc422
L
4170 },
4171
1ceb70f8 4172 /* PREFIX_0FBD */
050dfa73 4173 {
bf890a93
IT
4174 { "bsrS", { Gv, Ev }, 0 },
4175 { "lzcntS", { Gv, Ev }, 0 },
4176 { "bsrS", { Gv, Ev }, 0 },
050dfa73
MM
4177 },
4178
1ceb70f8 4179 /* PREFIX_0FC2 */
050dfa73 4180 {
507bd325
L
4181 { "cmpps", { XM, EXx, CMP }, PREFIX_OPCODE },
4182 { "cmpss", { XM, EXd, CMP }, PREFIX_OPCODE },
4183 { "cmppd", { XM, EXx, CMP }, PREFIX_OPCODE },
4184 { "cmpsd", { XM, EXq, CMP }, PREFIX_OPCODE },
050dfa73 4185 },
246c51aa 4186
a8484f96 4187 /* PREFIX_MOD_0_0FC3 */
4ee52178 4188 {
a8484f96 4189 { "movntiS", { Ev, Gv }, PREFIX_OPCODE },
4ee52178
L
4190 },
4191
f24bcbaa 4192 /* PREFIX_MOD_0_0FC7_REG_6 */
92fddf8e 4193 {
bf890a93
IT
4194 { "vmptrld",{ Mq }, 0 },
4195 { "vmxon", { Mq }, 0 },
4196 { "vmclear",{ Mq }, 0 },
92fddf8e
L
4197 },
4198
f24bcbaa
L
4199 /* PREFIX_MOD_3_0FC7_REG_6 */
4200 {
4201 { "rdrand", { Ev }, 0 },
4202 { Bad_Opcode },
4203 { "rdrand", { Ev }, 0 }
4204 },
4205
4206 /* PREFIX_MOD_3_0FC7_REG_7 */
4207 {
4208 { "rdseed", { Ev }, 0 },
8bc52696 4209 { "rdpid", { Em }, 0 },
f24bcbaa
L
4210 { "rdseed", { Ev }, 0 },
4211 },
4212
1ceb70f8 4213 /* PREFIX_0FD0 */
050dfa73 4214 {
592d1631
L
4215 { Bad_Opcode },
4216 { Bad_Opcode },
bf890a93
IT
4217 { "addsubpd", { XM, EXx }, 0 },
4218 { "addsubps", { XM, EXx }, 0 },
246c51aa 4219 },
050dfa73 4220
1ceb70f8 4221 /* PREFIX_0FD6 */
050dfa73 4222 {
592d1631 4223 { Bad_Opcode },
bf890a93
IT
4224 { "movq2dq",{ XM, MS }, 0 },
4225 { "movq", { EXqS, XM }, 0 },
4226 { "movdq2q",{ MX, XS }, 0 },
050dfa73
MM
4227 },
4228
1ceb70f8 4229 /* PREFIX_0FE6 */
7918206c 4230 {
592d1631 4231 { Bad_Opcode },
507bd325
L
4232 { "cvtdq2pd", { XM, EXq }, PREFIX_OPCODE },
4233 { "cvttpd2dq", { XM, EXx }, PREFIX_OPCODE },
4234 { "cvtpd2dq", { XM, EXx }, PREFIX_OPCODE },
7918206c 4235 },
8b38ad71 4236
1ceb70f8 4237 /* PREFIX_0FE7 */
8b38ad71 4238 {
507bd325 4239 { "movntq", { Mq, MX }, PREFIX_OPCODE },
592d1631 4240 { Bad_Opcode },
75c135a8 4241 { MOD_TABLE (MOD_0FE7_PREFIX_2) },
4e7d34a6
L
4242 },
4243
1ceb70f8 4244 /* PREFIX_0FF0 */
4e7d34a6 4245 {
592d1631
L
4246 { Bad_Opcode },
4247 { Bad_Opcode },
4248 { Bad_Opcode },
1ceb70f8 4249 { MOD_TABLE (MOD_0FF0_PREFIX_3) },
4e7d34a6
L
4250 },
4251
1ceb70f8 4252 /* PREFIX_0FF7 */
4e7d34a6 4253 {
507bd325 4254 { "maskmovq", { MX, MS }, PREFIX_OPCODE },
592d1631 4255 { Bad_Opcode },
507bd325 4256 { "maskmovdqu", { XM, XS }, PREFIX_OPCODE },
8b38ad71 4257 },
42903f7f 4258
1ceb70f8 4259 /* PREFIX_0F3810 */
42903f7f 4260 {
592d1631
L
4261 { Bad_Opcode },
4262 { Bad_Opcode },
507bd325 4263 { "pblendvb", { XM, EXx, XMM0 }, PREFIX_OPCODE },
42903f7f
L
4264 },
4265
1ceb70f8 4266 /* PREFIX_0F3814 */
42903f7f 4267 {
592d1631
L
4268 { Bad_Opcode },
4269 { Bad_Opcode },
507bd325 4270 { "blendvps", { XM, EXx, XMM0 }, PREFIX_OPCODE },
42903f7f
L
4271 },
4272
1ceb70f8 4273 /* PREFIX_0F3815 */
42903f7f 4274 {
592d1631
L
4275 { Bad_Opcode },
4276 { Bad_Opcode },
507bd325 4277 { "blendvpd", { XM, EXx, XMM0 }, PREFIX_OPCODE },
42903f7f
L
4278 },
4279
1ceb70f8 4280 /* PREFIX_0F3817 */
42903f7f 4281 {
592d1631
L
4282 { Bad_Opcode },
4283 { Bad_Opcode },
507bd325 4284 { "ptest", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4285 },
4286
1ceb70f8 4287 /* PREFIX_0F3820 */
42903f7f 4288 {
592d1631
L
4289 { Bad_Opcode },
4290 { Bad_Opcode },
507bd325 4291 { "pmovsxbw", { XM, EXq }, PREFIX_OPCODE },
42903f7f
L
4292 },
4293
1ceb70f8 4294 /* PREFIX_0F3821 */
42903f7f 4295 {
592d1631
L
4296 { Bad_Opcode },
4297 { Bad_Opcode },
507bd325 4298 { "pmovsxbd", { XM, EXd }, PREFIX_OPCODE },
42903f7f
L
4299 },
4300
1ceb70f8 4301 /* PREFIX_0F3822 */
42903f7f 4302 {
592d1631
L
4303 { Bad_Opcode },
4304 { Bad_Opcode },
507bd325 4305 { "pmovsxbq", { XM, EXw }, PREFIX_OPCODE },
42903f7f
L
4306 },
4307
1ceb70f8 4308 /* PREFIX_0F3823 */
42903f7f 4309 {
592d1631
L
4310 { Bad_Opcode },
4311 { Bad_Opcode },
507bd325 4312 { "pmovsxwd", { XM, EXq }, PREFIX_OPCODE },
42903f7f
L
4313 },
4314
1ceb70f8 4315 /* PREFIX_0F3824 */
42903f7f 4316 {
592d1631
L
4317 { Bad_Opcode },
4318 { Bad_Opcode },
507bd325 4319 { "pmovsxwq", { XM, EXd }, PREFIX_OPCODE },
42903f7f
L
4320 },
4321
1ceb70f8 4322 /* PREFIX_0F3825 */
42903f7f 4323 {
592d1631
L
4324 { Bad_Opcode },
4325 { Bad_Opcode },
507bd325 4326 { "pmovsxdq", { XM, EXq }, PREFIX_OPCODE },
42903f7f
L
4327 },
4328
1ceb70f8 4329 /* PREFIX_0F3828 */
42903f7f 4330 {
592d1631
L
4331 { Bad_Opcode },
4332 { Bad_Opcode },
507bd325 4333 { "pmuldq", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4334 },
4335
1ceb70f8 4336 /* PREFIX_0F3829 */
42903f7f 4337 {
592d1631
L
4338 { Bad_Opcode },
4339 { Bad_Opcode },
507bd325 4340 { "pcmpeqq", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4341 },
4342
1ceb70f8 4343 /* PREFIX_0F382A */
42903f7f 4344 {
592d1631
L
4345 { Bad_Opcode },
4346 { Bad_Opcode },
75c135a8 4347 { MOD_TABLE (MOD_0F382A_PREFIX_2) },
42903f7f
L
4348 },
4349
1ceb70f8 4350 /* PREFIX_0F382B */
42903f7f 4351 {
592d1631
L
4352 { Bad_Opcode },
4353 { Bad_Opcode },
507bd325 4354 { "packusdw", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4355 },
4356
1ceb70f8 4357 /* PREFIX_0F3830 */
42903f7f 4358 {
592d1631
L
4359 { Bad_Opcode },
4360 { Bad_Opcode },
507bd325 4361 { "pmovzxbw", { XM, EXq }, PREFIX_OPCODE },
42903f7f
L
4362 },
4363
1ceb70f8 4364 /* PREFIX_0F3831 */
42903f7f 4365 {
592d1631
L
4366 { Bad_Opcode },
4367 { Bad_Opcode },
507bd325 4368 { "pmovzxbd", { XM, EXd }, PREFIX_OPCODE },
42903f7f
L
4369 },
4370
1ceb70f8 4371 /* PREFIX_0F3832 */
42903f7f 4372 {
592d1631
L
4373 { Bad_Opcode },
4374 { Bad_Opcode },
507bd325 4375 { "pmovzxbq", { XM, EXw }, PREFIX_OPCODE },
42903f7f
L
4376 },
4377
1ceb70f8 4378 /* PREFIX_0F3833 */
42903f7f 4379 {
592d1631
L
4380 { Bad_Opcode },
4381 { Bad_Opcode },
507bd325 4382 { "pmovzxwd", { XM, EXq }, PREFIX_OPCODE },
42903f7f
L
4383 },
4384
1ceb70f8 4385 /* PREFIX_0F3834 */
42903f7f 4386 {
592d1631
L
4387 { Bad_Opcode },
4388 { Bad_Opcode },
507bd325 4389 { "pmovzxwq", { XM, EXd }, PREFIX_OPCODE },
42903f7f
L
4390 },
4391
1ceb70f8 4392 /* PREFIX_0F3835 */
42903f7f 4393 {
592d1631
L
4394 { Bad_Opcode },
4395 { Bad_Opcode },
507bd325 4396 { "pmovzxdq", { XM, EXq }, PREFIX_OPCODE },
42903f7f
L
4397 },
4398
1ceb70f8 4399 /* PREFIX_0F3837 */
4e7d34a6 4400 {
592d1631
L
4401 { Bad_Opcode },
4402 { Bad_Opcode },
507bd325 4403 { "pcmpgtq", { XM, EXx }, PREFIX_OPCODE },
4e7d34a6
L
4404 },
4405
1ceb70f8 4406 /* PREFIX_0F3838 */
42903f7f 4407 {
592d1631
L
4408 { Bad_Opcode },
4409 { Bad_Opcode },
507bd325 4410 { "pminsb", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4411 },
4412
1ceb70f8 4413 /* PREFIX_0F3839 */
42903f7f 4414 {
592d1631
L
4415 { Bad_Opcode },
4416 { Bad_Opcode },
507bd325 4417 { "pminsd", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4418 },
4419
1ceb70f8 4420 /* PREFIX_0F383A */
42903f7f 4421 {
592d1631
L
4422 { Bad_Opcode },
4423 { Bad_Opcode },
507bd325 4424 { "pminuw", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4425 },
4426
1ceb70f8 4427 /* PREFIX_0F383B */
42903f7f 4428 {
592d1631
L
4429 { Bad_Opcode },
4430 { Bad_Opcode },
507bd325 4431 { "pminud", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4432 },
4433
1ceb70f8 4434 /* PREFIX_0F383C */
42903f7f 4435 {
592d1631
L
4436 { Bad_Opcode },
4437 { Bad_Opcode },
507bd325 4438 { "pmaxsb", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4439 },
4440
1ceb70f8 4441 /* PREFIX_0F383D */
42903f7f 4442 {
592d1631
L
4443 { Bad_Opcode },
4444 { Bad_Opcode },
507bd325 4445 { "pmaxsd", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4446 },
4447
1ceb70f8 4448 /* PREFIX_0F383E */
42903f7f 4449 {
592d1631
L
4450 { Bad_Opcode },
4451 { Bad_Opcode },
507bd325 4452 { "pmaxuw", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4453 },
4454
1ceb70f8 4455 /* PREFIX_0F383F */
42903f7f 4456 {
592d1631
L
4457 { Bad_Opcode },
4458 { Bad_Opcode },
507bd325 4459 { "pmaxud", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4460 },
4461
1ceb70f8 4462 /* PREFIX_0F3840 */
42903f7f 4463 {
592d1631
L
4464 { Bad_Opcode },
4465 { Bad_Opcode },
507bd325 4466 { "pmulld", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4467 },
4468
1ceb70f8 4469 /* PREFIX_0F3841 */
42903f7f 4470 {
592d1631
L
4471 { Bad_Opcode },
4472 { Bad_Opcode },
507bd325 4473 { "phminposuw", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4474 },
4475
f1f8f695
L
4476 /* PREFIX_0F3880 */
4477 {
592d1631
L
4478 { Bad_Opcode },
4479 { Bad_Opcode },
507bd325 4480 { "invept", { Gm, Mo }, PREFIX_OPCODE },
f1f8f695
L
4481 },
4482
4483 /* PREFIX_0F3881 */
4484 {
592d1631
L
4485 { Bad_Opcode },
4486 { Bad_Opcode },
507bd325 4487 { "invvpid", { Gm, Mo }, PREFIX_OPCODE },
f1f8f695
L
4488 },
4489
6c30d220
L
4490 /* PREFIX_0F3882 */
4491 {
4492 { Bad_Opcode },
4493 { Bad_Opcode },
507bd325 4494 { "invpcid", { Gm, M }, PREFIX_OPCODE },
6c30d220
L
4495 },
4496
a0046408
L
4497 /* PREFIX_0F38C8 */
4498 {
507bd325 4499 { "sha1nexte", { XM, EXxmm }, PREFIX_OPCODE },
a0046408
L
4500 },
4501
4502 /* PREFIX_0F38C9 */
4503 {
507bd325 4504 { "sha1msg1", { XM, EXxmm }, PREFIX_OPCODE },
a0046408
L
4505 },
4506
4507 /* PREFIX_0F38CA */
4508 {
507bd325 4509 { "sha1msg2", { XM, EXxmm }, PREFIX_OPCODE },
a0046408
L
4510 },
4511
4512 /* PREFIX_0F38CB */
4513 {
507bd325 4514 { "sha256rnds2", { XM, EXxmm, XMM0 }, PREFIX_OPCODE },
a0046408
L
4515 },
4516
4517 /* PREFIX_0F38CC */
4518 {
507bd325 4519 { "sha256msg1", { XM, EXxmm }, PREFIX_OPCODE },
a0046408
L
4520 },
4521
4522 /* PREFIX_0F38CD */
4523 {
507bd325 4524 { "sha256msg2", { XM, EXxmm }, PREFIX_OPCODE },
a0046408
L
4525 },
4526
c0f3af97
L
4527 /* PREFIX_0F38DB */
4528 {
592d1631
L
4529 { Bad_Opcode },
4530 { Bad_Opcode },
507bd325 4531 { "aesimc", { XM, EXx }, PREFIX_OPCODE },
c0f3af97
L
4532 },
4533
4534 /* PREFIX_0F38DC */
4535 {
592d1631
L
4536 { Bad_Opcode },
4537 { Bad_Opcode },
507bd325 4538 { "aesenc", { XM, EXx }, PREFIX_OPCODE },
c0f3af97
L
4539 },
4540
4541 /* PREFIX_0F38DD */
4542 {
592d1631
L
4543 { Bad_Opcode },
4544 { Bad_Opcode },
507bd325 4545 { "aesenclast", { XM, EXx }, PREFIX_OPCODE },
c0f3af97
L
4546 },
4547
4548 /* PREFIX_0F38DE */
4549 {
592d1631
L
4550 { Bad_Opcode },
4551 { Bad_Opcode },
507bd325 4552 { "aesdec", { XM, EXx }, PREFIX_OPCODE },
c0f3af97
L
4553 },
4554
4555 /* PREFIX_0F38DF */
4556 {
592d1631
L
4557 { Bad_Opcode },
4558 { Bad_Opcode },
507bd325 4559 { "aesdeclast", { XM, EXx }, PREFIX_OPCODE },
c0f3af97
L
4560 },
4561
1ceb70f8 4562 /* PREFIX_0F38F0 */
4e7d34a6 4563 {
507bd325 4564 { "movbeS", { Gv, { MOVBE_Fixup, v_mode } }, PREFIX_OPCODE },
592d1631 4565 { Bad_Opcode },
507bd325
L
4566 { "movbeS", { Gv, { MOVBE_Fixup, v_mode } }, PREFIX_OPCODE },
4567 { "crc32", { Gdq, { CRC32_Fixup, b_mode } }, PREFIX_OPCODE },
4e7d34a6
L
4568 },
4569
1ceb70f8 4570 /* PREFIX_0F38F1 */
4e7d34a6 4571 {
507bd325 4572 { "movbeS", { { MOVBE_Fixup, v_mode }, Gv }, PREFIX_OPCODE },
592d1631 4573 { Bad_Opcode },
507bd325
L
4574 { "movbeS", { { MOVBE_Fixup, v_mode }, Gv }, PREFIX_OPCODE },
4575 { "crc32", { Gdq, { CRC32_Fixup, v_mode } }, PREFIX_OPCODE },
4e7d34a6
L
4576 },
4577
603555e5 4578 /* PREFIX_0F38F5 */
e2e1fcde
L
4579 {
4580 { Bad_Opcode },
603555e5
L
4581 { Bad_Opcode },
4582 { MOD_TABLE (MOD_0F38F5_PREFIX_2) },
4583 },
4584
4585 /* PREFIX_0F38F6 */
4586 {
4587 { MOD_TABLE (MOD_0F38F6_PREFIX_0) },
507bd325
L
4588 { "adoxS", { Gdq, Edq}, PREFIX_OPCODE },
4589 { "adcxS", { Gdq, Edq}, PREFIX_OPCODE },
e2e1fcde
L
4590 { Bad_Opcode },
4591 },
4592
1ceb70f8 4593 /* PREFIX_0F3A08 */
42903f7f 4594 {
592d1631
L
4595 { Bad_Opcode },
4596 { Bad_Opcode },
507bd325 4597 { "roundps", { XM, EXx, Ib }, PREFIX_OPCODE },
42903f7f
L
4598 },
4599
1ceb70f8 4600 /* PREFIX_0F3A09 */
42903f7f 4601 {
592d1631
L
4602 { Bad_Opcode },
4603 { Bad_Opcode },
507bd325 4604 { "roundpd", { XM, EXx, Ib }, PREFIX_OPCODE },
42903f7f
L
4605 },
4606
1ceb70f8 4607 /* PREFIX_0F3A0A */
42903f7f 4608 {
592d1631
L
4609 { Bad_Opcode },
4610 { Bad_Opcode },
507bd325 4611 { "roundss", { XM, EXd, Ib }, PREFIX_OPCODE },
42903f7f
L
4612 },
4613
1ceb70f8 4614 /* PREFIX_0F3A0B */
42903f7f 4615 {
592d1631
L
4616 { Bad_Opcode },
4617 { Bad_Opcode },
507bd325 4618 { "roundsd", { XM, EXq, Ib }, PREFIX_OPCODE },
42903f7f
L
4619 },
4620
1ceb70f8 4621 /* PREFIX_0F3A0C */
42903f7f 4622 {
592d1631
L
4623 { Bad_Opcode },
4624 { Bad_Opcode },
507bd325 4625 { "blendps", { XM, EXx, Ib }, PREFIX_OPCODE },
42903f7f
L
4626 },
4627
1ceb70f8 4628 /* PREFIX_0F3A0D */
42903f7f 4629 {
592d1631
L
4630 { Bad_Opcode },
4631 { Bad_Opcode },
507bd325 4632 { "blendpd", { XM, EXx, Ib }, PREFIX_OPCODE },
42903f7f
L
4633 },
4634
1ceb70f8 4635 /* PREFIX_0F3A0E */
42903f7f 4636 {
592d1631
L
4637 { Bad_Opcode },
4638 { Bad_Opcode },
507bd325 4639 { "pblendw", { XM, EXx, Ib }, PREFIX_OPCODE },
42903f7f
L
4640 },
4641
1ceb70f8 4642 /* PREFIX_0F3A14 */
42903f7f 4643 {
592d1631
L
4644 { Bad_Opcode },
4645 { Bad_Opcode },
507bd325 4646 { "pextrb", { Edqb, XM, Ib }, PREFIX_OPCODE },
42903f7f
L
4647 },
4648
1ceb70f8 4649 /* PREFIX_0F3A15 */
42903f7f 4650 {
592d1631
L
4651 { Bad_Opcode },
4652 { Bad_Opcode },
507bd325 4653 { "pextrw", { Edqw, XM, Ib }, PREFIX_OPCODE },
42903f7f
L
4654 },
4655
1ceb70f8 4656 /* PREFIX_0F3A16 */
42903f7f 4657 {
592d1631
L
4658 { Bad_Opcode },
4659 { Bad_Opcode },
507bd325 4660 { "pextrK", { Edq, XM, Ib }, PREFIX_OPCODE },
42903f7f
L
4661 },
4662
1ceb70f8 4663 /* PREFIX_0F3A17 */
42903f7f 4664 {
592d1631
L
4665 { Bad_Opcode },
4666 { Bad_Opcode },
507bd325 4667 { "extractps", { Edqd, XM, Ib }, PREFIX_OPCODE },
42903f7f
L
4668 },
4669
1ceb70f8 4670 /* PREFIX_0F3A20 */
42903f7f 4671 {
592d1631
L
4672 { Bad_Opcode },
4673 { Bad_Opcode },
507bd325 4674 { "pinsrb", { XM, Edqb, Ib }, PREFIX_OPCODE },
42903f7f
L
4675 },
4676
1ceb70f8 4677 /* PREFIX_0F3A21 */
42903f7f 4678 {
592d1631
L
4679 { Bad_Opcode },
4680 { Bad_Opcode },
507bd325 4681 { "insertps", { XM, EXd, Ib }, PREFIX_OPCODE },
42903f7f
L
4682 },
4683
1ceb70f8 4684 /* PREFIX_0F3A22 */
42903f7f 4685 {
592d1631
L
4686 { Bad_Opcode },
4687 { Bad_Opcode },
507bd325 4688 { "pinsrK", { XM, Edq, Ib }, PREFIX_OPCODE },
42903f7f
L
4689 },
4690
1ceb70f8 4691 /* PREFIX_0F3A40 */
42903f7f 4692 {
592d1631
L
4693 { Bad_Opcode },
4694 { Bad_Opcode },
507bd325 4695 { "dpps", { XM, EXx, Ib }, PREFIX_OPCODE },
42903f7f
L
4696 },
4697
1ceb70f8 4698 /* PREFIX_0F3A41 */
42903f7f 4699 {
592d1631
L
4700 { Bad_Opcode },
4701 { Bad_Opcode },
507bd325 4702 { "dppd", { XM, EXx, Ib }, PREFIX_OPCODE },
42903f7f
L
4703 },
4704
1ceb70f8 4705 /* PREFIX_0F3A42 */
42903f7f 4706 {
592d1631
L
4707 { Bad_Opcode },
4708 { Bad_Opcode },
507bd325 4709 { "mpsadbw", { XM, EXx, Ib }, PREFIX_OPCODE },
42903f7f 4710 },
381d071f 4711
c0f3af97
L
4712 /* PREFIX_0F3A44 */
4713 {
592d1631
L
4714 { Bad_Opcode },
4715 { Bad_Opcode },
507bd325 4716 { "pclmulqdq", { XM, EXx, PCLMUL }, PREFIX_OPCODE },
c0f3af97
L
4717 },
4718
1ceb70f8 4719 /* PREFIX_0F3A60 */
381d071f 4720 {
592d1631
L
4721 { Bad_Opcode },
4722 { Bad_Opcode },
15c7c1d8 4723 { "pcmpestrm", { XM, { PCMPESTR_Fixup, x_mode }, Ib }, PREFIX_OPCODE },
381d071f
L
4724 },
4725
1ceb70f8 4726 /* PREFIX_0F3A61 */
381d071f 4727 {
592d1631
L
4728 { Bad_Opcode },
4729 { Bad_Opcode },
15c7c1d8 4730 { "pcmpestri", { XM, { PCMPESTR_Fixup, x_mode }, Ib }, PREFIX_OPCODE },
381d071f
L
4731 },
4732
1ceb70f8 4733 /* PREFIX_0F3A62 */
381d071f 4734 {
592d1631
L
4735 { Bad_Opcode },
4736 { Bad_Opcode },
507bd325 4737 { "pcmpistrm", { XM, EXx, Ib }, PREFIX_OPCODE },
381d071f
L
4738 },
4739
1ceb70f8 4740 /* PREFIX_0F3A63 */
381d071f 4741 {
592d1631
L
4742 { Bad_Opcode },
4743 { Bad_Opcode },
507bd325 4744 { "pcmpistri", { XM, EXx, Ib }, PREFIX_OPCODE },
381d071f 4745 },
09a2c6cf 4746
a0046408
L
4747 /* PREFIX_0F3ACC */
4748 {
507bd325 4749 { "sha1rnds4", { XM, EXxmm, Ib }, PREFIX_OPCODE },
a0046408
L
4750 },
4751
c0f3af97 4752 /* PREFIX_0F3ADF */
09a2c6cf 4753 {
592d1631
L
4754 { Bad_Opcode },
4755 { Bad_Opcode },
507bd325 4756 { "aeskeygenassist", { XM, EXx, Ib }, PREFIX_OPCODE },
09a2c6cf
L
4757 },
4758
592a252b 4759 /* PREFIX_VEX_0F10 */
09a2c6cf 4760 {
592a252b
L
4761 { VEX_W_TABLE (VEX_W_0F10_P_0) },
4762 { VEX_LEN_TABLE (VEX_LEN_0F10_P_1) },
4763 { VEX_W_TABLE (VEX_W_0F10_P_2) },
4764 { VEX_LEN_TABLE (VEX_LEN_0F10_P_3) },
09a2c6cf
L
4765 },
4766
592a252b 4767 /* PREFIX_VEX_0F11 */
09a2c6cf 4768 {
592a252b
L
4769 { VEX_W_TABLE (VEX_W_0F11_P_0) },
4770 { VEX_LEN_TABLE (VEX_LEN_0F11_P_1) },
4771 { VEX_W_TABLE (VEX_W_0F11_P_2) },
4772 { VEX_LEN_TABLE (VEX_LEN_0F11_P_3) },
09a2c6cf
L
4773 },
4774
592a252b 4775 /* PREFIX_VEX_0F12 */
09a2c6cf 4776 {
592a252b
L
4777 { MOD_TABLE (MOD_VEX_0F12_PREFIX_0) },
4778 { VEX_W_TABLE (VEX_W_0F12_P_1) },
4779 { VEX_LEN_TABLE (VEX_LEN_0F12_P_2) },
4780 { VEX_W_TABLE (VEX_W_0F12_P_3) },
09a2c6cf
L
4781 },
4782
592a252b 4783 /* PREFIX_VEX_0F16 */
09a2c6cf 4784 {
592a252b
L
4785 { MOD_TABLE (MOD_VEX_0F16_PREFIX_0) },
4786 { VEX_W_TABLE (VEX_W_0F16_P_1) },
4787 { VEX_LEN_TABLE (VEX_LEN_0F16_P_2) },
5f754f58 4788 },
7c52e0e8 4789
592a252b 4790 /* PREFIX_VEX_0F2A */
5f754f58 4791 {
592d1631 4792 { Bad_Opcode },
592a252b 4793 { VEX_LEN_TABLE (VEX_LEN_0F2A_P_1) },
592d1631 4794 { Bad_Opcode },
592a252b 4795 { VEX_LEN_TABLE (VEX_LEN_0F2A_P_3) },
5f754f58 4796 },
7c52e0e8 4797
592a252b 4798 /* PREFIX_VEX_0F2C */
5f754f58 4799 {
592d1631 4800 { Bad_Opcode },
592a252b 4801 { VEX_LEN_TABLE (VEX_LEN_0F2C_P_1) },
592d1631 4802 { Bad_Opcode },
592a252b 4803 { VEX_LEN_TABLE (VEX_LEN_0F2C_P_3) },
5f754f58 4804 },
7c52e0e8 4805
592a252b 4806 /* PREFIX_VEX_0F2D */
7c52e0e8 4807 {
592d1631 4808 { Bad_Opcode },
592a252b 4809 { VEX_LEN_TABLE (VEX_LEN_0F2D_P_1) },
592d1631 4810 { Bad_Opcode },
592a252b 4811 { VEX_LEN_TABLE (VEX_LEN_0F2D_P_3) },
7c52e0e8
L
4812 },
4813
592a252b 4814 /* PREFIX_VEX_0F2E */
7c52e0e8 4815 {
592a252b 4816 { VEX_LEN_TABLE (VEX_LEN_0F2E_P_0) },
592d1631 4817 { Bad_Opcode },
592a252b 4818 { VEX_LEN_TABLE (VEX_LEN_0F2E_P_2) },
7c52e0e8
L
4819 },
4820
592a252b 4821 /* PREFIX_VEX_0F2F */
7c52e0e8 4822 {
592a252b 4823 { VEX_LEN_TABLE (VEX_LEN_0F2F_P_0) },
592d1631 4824 { Bad_Opcode },
592a252b 4825 { VEX_LEN_TABLE (VEX_LEN_0F2F_P_2) },
7c52e0e8
L
4826 },
4827
43234a1e
L
4828 /* PREFIX_VEX_0F41 */
4829 {
4830 { VEX_LEN_TABLE (VEX_LEN_0F41_P_0) },
1ba585e8
IT
4831 { Bad_Opcode },
4832 { VEX_LEN_TABLE (VEX_LEN_0F41_P_2) },
43234a1e
L
4833 },
4834
4835 /* PREFIX_VEX_0F42 */
4836 {
4837 { VEX_LEN_TABLE (VEX_LEN_0F42_P_0) },
1ba585e8
IT
4838 { Bad_Opcode },
4839 { VEX_LEN_TABLE (VEX_LEN_0F42_P_2) },
43234a1e
L
4840 },
4841
4842 /* PREFIX_VEX_0F44 */
4843 {
4844 { VEX_LEN_TABLE (VEX_LEN_0F44_P_0) },
1ba585e8
IT
4845 { Bad_Opcode },
4846 { VEX_LEN_TABLE (VEX_LEN_0F44_P_2) },
43234a1e
L
4847 },
4848
4849 /* PREFIX_VEX_0F45 */
4850 {
4851 { VEX_LEN_TABLE (VEX_LEN_0F45_P_0) },
1ba585e8
IT
4852 { Bad_Opcode },
4853 { VEX_LEN_TABLE (VEX_LEN_0F45_P_2) },
43234a1e
L
4854 },
4855
4856 /* PREFIX_VEX_0F46 */
4857 {
4858 { VEX_LEN_TABLE (VEX_LEN_0F46_P_0) },
1ba585e8
IT
4859 { Bad_Opcode },
4860 { VEX_LEN_TABLE (VEX_LEN_0F46_P_2) },
43234a1e
L
4861 },
4862
4863 /* PREFIX_VEX_0F47 */
4864 {
4865 { VEX_LEN_TABLE (VEX_LEN_0F47_P_0) },
1ba585e8
IT
4866 { Bad_Opcode },
4867 { VEX_LEN_TABLE (VEX_LEN_0F47_P_2) },
43234a1e
L
4868 },
4869
1ba585e8 4870 /* PREFIX_VEX_0F4A */
43234a1e 4871 {
1ba585e8 4872 { VEX_LEN_TABLE (VEX_LEN_0F4A_P_0) },
43234a1e 4873 { Bad_Opcode },
1ba585e8
IT
4874 { VEX_LEN_TABLE (VEX_LEN_0F4A_P_2) },
4875 },
4876
4877 /* PREFIX_VEX_0F4B */
4878 {
4879 { VEX_LEN_TABLE (VEX_LEN_0F4B_P_0) },
43234a1e
L
4880 { Bad_Opcode },
4881 { VEX_LEN_TABLE (VEX_LEN_0F4B_P_2) },
4882 },
4883
592a252b 4884 /* PREFIX_VEX_0F51 */
7c52e0e8 4885 {
592a252b
L
4886 { VEX_W_TABLE (VEX_W_0F51_P_0) },
4887 { VEX_LEN_TABLE (VEX_LEN_0F51_P_1) },
4888 { VEX_W_TABLE (VEX_W_0F51_P_2) },
4889 { VEX_LEN_TABLE (VEX_LEN_0F51_P_3) },
7c52e0e8
L
4890 },
4891
592a252b 4892 /* PREFIX_VEX_0F52 */
7c52e0e8 4893 {
592a252b
L
4894 { VEX_W_TABLE (VEX_W_0F52_P_0) },
4895 { VEX_LEN_TABLE (VEX_LEN_0F52_P_1) },
7c52e0e8
L
4896 },
4897
592a252b 4898 /* PREFIX_VEX_0F53 */
7c52e0e8 4899 {
592a252b
L
4900 { VEX_W_TABLE (VEX_W_0F53_P_0) },
4901 { VEX_LEN_TABLE (VEX_LEN_0F53_P_1) },
7c52e0e8
L
4902 },
4903
592a252b 4904 /* PREFIX_VEX_0F58 */
7c52e0e8 4905 {
592a252b
L
4906 { VEX_W_TABLE (VEX_W_0F58_P_0) },
4907 { VEX_LEN_TABLE (VEX_LEN_0F58_P_1) },
4908 { VEX_W_TABLE (VEX_W_0F58_P_2) },
4909 { VEX_LEN_TABLE (VEX_LEN_0F58_P_3) },
7c52e0e8
L
4910 },
4911
592a252b 4912 /* PREFIX_VEX_0F59 */
7c52e0e8 4913 {
592a252b
L
4914 { VEX_W_TABLE (VEX_W_0F59_P_0) },
4915 { VEX_LEN_TABLE (VEX_LEN_0F59_P_1) },
4916 { VEX_W_TABLE (VEX_W_0F59_P_2) },
4917 { VEX_LEN_TABLE (VEX_LEN_0F59_P_3) },
7c52e0e8
L
4918 },
4919
592a252b 4920 /* PREFIX_VEX_0F5A */
7c52e0e8 4921 {
592a252b
L
4922 { VEX_W_TABLE (VEX_W_0F5A_P_0) },
4923 { VEX_LEN_TABLE (VEX_LEN_0F5A_P_1) },
bf890a93 4924 { "vcvtpd2ps%XY", { XMM, EXx }, 0 },
592a252b 4925 { VEX_LEN_TABLE (VEX_LEN_0F5A_P_3) },
7c52e0e8
L
4926 },
4927
592a252b 4928 /* PREFIX_VEX_0F5B */
7c52e0e8 4929 {
592a252b
L
4930 { VEX_W_TABLE (VEX_W_0F5B_P_0) },
4931 { VEX_W_TABLE (VEX_W_0F5B_P_1) },
4932 { VEX_W_TABLE (VEX_W_0F5B_P_2) },
7c52e0e8
L
4933 },
4934
592a252b 4935 /* PREFIX_VEX_0F5C */
7c52e0e8 4936 {
592a252b
L
4937 { VEX_W_TABLE (VEX_W_0F5C_P_0) },
4938 { VEX_LEN_TABLE (VEX_LEN_0F5C_P_1) },
4939 { VEX_W_TABLE (VEX_W_0F5C_P_2) },
4940 { VEX_LEN_TABLE (VEX_LEN_0F5C_P_3) },
7c52e0e8
L
4941 },
4942
592a252b 4943 /* PREFIX_VEX_0F5D */
7c52e0e8 4944 {
592a252b
L
4945 { VEX_W_TABLE (VEX_W_0F5D_P_0) },
4946 { VEX_LEN_TABLE (VEX_LEN_0F5D_P_1) },
4947 { VEX_W_TABLE (VEX_W_0F5D_P_2) },
4948 { VEX_LEN_TABLE (VEX_LEN_0F5D_P_3) },
7c52e0e8
L
4949 },
4950
592a252b 4951 /* PREFIX_VEX_0F5E */
7c52e0e8 4952 {
592a252b
L
4953 { VEX_W_TABLE (VEX_W_0F5E_P_0) },
4954 { VEX_LEN_TABLE (VEX_LEN_0F5E_P_1) },
4955 { VEX_W_TABLE (VEX_W_0F5E_P_2) },
4956 { VEX_LEN_TABLE (VEX_LEN_0F5E_P_3) },
7c52e0e8
L
4957 },
4958
592a252b 4959 /* PREFIX_VEX_0F5F */
7c52e0e8 4960 {
592a252b
L
4961 { VEX_W_TABLE (VEX_W_0F5F_P_0) },
4962 { VEX_LEN_TABLE (VEX_LEN_0F5F_P_1) },
4963 { VEX_W_TABLE (VEX_W_0F5F_P_2) },
4964 { VEX_LEN_TABLE (VEX_LEN_0F5F_P_3) },
7c52e0e8
L
4965 },
4966
592a252b 4967 /* PREFIX_VEX_0F60 */
7c52e0e8 4968 {
592d1631
L
4969 { Bad_Opcode },
4970 { Bad_Opcode },
6c30d220 4971 { VEX_W_TABLE (VEX_W_0F60_P_2) },
7c52e0e8
L
4972 },
4973
592a252b 4974 /* PREFIX_VEX_0F61 */
7c52e0e8 4975 {
592d1631
L
4976 { Bad_Opcode },
4977 { Bad_Opcode },
6c30d220 4978 { VEX_W_TABLE (VEX_W_0F61_P_2) },
7c52e0e8
L
4979 },
4980
592a252b 4981 /* PREFIX_VEX_0F62 */
7c52e0e8 4982 {
592d1631
L
4983 { Bad_Opcode },
4984 { Bad_Opcode },
6c30d220 4985 { VEX_W_TABLE (VEX_W_0F62_P_2) },
7c52e0e8
L
4986 },
4987
592a252b 4988 /* PREFIX_VEX_0F63 */
7c52e0e8 4989 {
592d1631
L
4990 { Bad_Opcode },
4991 { Bad_Opcode },
6c30d220 4992 { VEX_W_TABLE (VEX_W_0F63_P_2) },
7c52e0e8
L
4993 },
4994
592a252b 4995 /* PREFIX_VEX_0F64 */
7c52e0e8 4996 {
592d1631
L
4997 { Bad_Opcode },
4998 { Bad_Opcode },
6c30d220 4999 { VEX_W_TABLE (VEX_W_0F64_P_2) },
7c52e0e8
L
5000 },
5001
592a252b 5002 /* PREFIX_VEX_0F65 */
7c52e0e8 5003 {
592d1631
L
5004 { Bad_Opcode },
5005 { Bad_Opcode },
6c30d220 5006 { VEX_W_TABLE (VEX_W_0F65_P_2) },
7c52e0e8
L
5007 },
5008
592a252b 5009 /* PREFIX_VEX_0F66 */
7c52e0e8 5010 {
592d1631
L
5011 { Bad_Opcode },
5012 { Bad_Opcode },
6c30d220 5013 { VEX_W_TABLE (VEX_W_0F66_P_2) },
7c52e0e8 5014 },
6439fc28 5015
592a252b 5016 /* PREFIX_VEX_0F67 */
331d2d0d 5017 {
592d1631
L
5018 { Bad_Opcode },
5019 { Bad_Opcode },
6c30d220 5020 { VEX_W_TABLE (VEX_W_0F67_P_2) },
c0f3af97
L
5021 },
5022
592a252b 5023 /* PREFIX_VEX_0F68 */
c0f3af97 5024 {
592d1631
L
5025 { Bad_Opcode },
5026 { Bad_Opcode },
6c30d220 5027 { VEX_W_TABLE (VEX_W_0F68_P_2) },
c0f3af97
L
5028 },
5029
592a252b 5030 /* PREFIX_VEX_0F69 */
c0f3af97 5031 {
592d1631
L
5032 { Bad_Opcode },
5033 { Bad_Opcode },
6c30d220 5034 { VEX_W_TABLE (VEX_W_0F69_P_2) },
c0f3af97
L
5035 },
5036
592a252b 5037 /* PREFIX_VEX_0F6A */
c0f3af97 5038 {
592d1631
L
5039 { Bad_Opcode },
5040 { Bad_Opcode },
6c30d220 5041 { VEX_W_TABLE (VEX_W_0F6A_P_2) },
c0f3af97
L
5042 },
5043
592a252b 5044 /* PREFIX_VEX_0F6B */
c0f3af97 5045 {
592d1631
L
5046 { Bad_Opcode },
5047 { Bad_Opcode },
6c30d220 5048 { VEX_W_TABLE (VEX_W_0F6B_P_2) },
c0f3af97
L
5049 },
5050
592a252b 5051 /* PREFIX_VEX_0F6C */
c0f3af97 5052 {
592d1631
L
5053 { Bad_Opcode },
5054 { Bad_Opcode },
6c30d220 5055 { VEX_W_TABLE (VEX_W_0F6C_P_2) },
c0f3af97
L
5056 },
5057
592a252b 5058 /* PREFIX_VEX_0F6D */
c0f3af97 5059 {
592d1631
L
5060 { Bad_Opcode },
5061 { Bad_Opcode },
6c30d220 5062 { VEX_W_TABLE (VEX_W_0F6D_P_2) },
c0f3af97
L
5063 },
5064
592a252b 5065 /* PREFIX_VEX_0F6E */
c0f3af97 5066 {
592d1631
L
5067 { Bad_Opcode },
5068 { Bad_Opcode },
592a252b 5069 { VEX_LEN_TABLE (VEX_LEN_0F6E_P_2) },
c0f3af97
L
5070 },
5071
592a252b 5072 /* PREFIX_VEX_0F6F */
c0f3af97 5073 {
592d1631 5074 { Bad_Opcode },
592a252b
L
5075 { VEX_W_TABLE (VEX_W_0F6F_P_1) },
5076 { VEX_W_TABLE (VEX_W_0F6F_P_2) },
c0f3af97
L
5077 },
5078
592a252b 5079 /* PREFIX_VEX_0F70 */
c0f3af97 5080 {
592d1631 5081 { Bad_Opcode },
6c30d220
L
5082 { VEX_W_TABLE (VEX_W_0F70_P_1) },
5083 { VEX_W_TABLE (VEX_W_0F70_P_2) },
5084 { VEX_W_TABLE (VEX_W_0F70_P_3) },
c0f3af97
L
5085 },
5086
592a252b 5087 /* PREFIX_VEX_0F71_REG_2 */
c0f3af97 5088 {
592d1631
L
5089 { Bad_Opcode },
5090 { Bad_Opcode },
6c30d220 5091 { VEX_W_TABLE (VEX_W_0F71_R_2_P_2) },
c0f3af97
L
5092 },
5093
592a252b 5094 /* PREFIX_VEX_0F71_REG_4 */
c0f3af97 5095 {
592d1631
L
5096 { Bad_Opcode },
5097 { Bad_Opcode },
6c30d220 5098 { VEX_W_TABLE (VEX_W_0F71_R_4_P_2) },
c0f3af97
L
5099 },
5100
592a252b 5101 /* PREFIX_VEX_0F71_REG_6 */
c0f3af97 5102 {
592d1631
L
5103 { Bad_Opcode },
5104 { Bad_Opcode },
6c30d220 5105 { VEX_W_TABLE (VEX_W_0F71_R_6_P_2) },
c0f3af97
L
5106 },
5107
592a252b 5108 /* PREFIX_VEX_0F72_REG_2 */
c0f3af97 5109 {
592d1631
L
5110 { Bad_Opcode },
5111 { Bad_Opcode },
6c30d220 5112 { VEX_W_TABLE (VEX_W_0F72_R_2_P_2) },
c0f3af97
L
5113 },
5114
592a252b 5115 /* PREFIX_VEX_0F72_REG_4 */
c0f3af97 5116 {
592d1631
L
5117 { Bad_Opcode },
5118 { Bad_Opcode },
6c30d220 5119 { VEX_W_TABLE (VEX_W_0F72_R_4_P_2) },
c0f3af97
L
5120 },
5121
592a252b 5122 /* PREFIX_VEX_0F72_REG_6 */
c0f3af97 5123 {
592d1631
L
5124 { Bad_Opcode },
5125 { Bad_Opcode },
6c30d220 5126 { VEX_W_TABLE (VEX_W_0F72_R_6_P_2) },
c0f3af97
L
5127 },
5128
592a252b 5129 /* PREFIX_VEX_0F73_REG_2 */
c0f3af97 5130 {
592d1631
L
5131 { Bad_Opcode },
5132 { Bad_Opcode },
6c30d220 5133 { VEX_W_TABLE (VEX_W_0F73_R_2_P_2) },
c0f3af97
L
5134 },
5135
592a252b 5136 /* PREFIX_VEX_0F73_REG_3 */
c0f3af97 5137 {
592d1631
L
5138 { Bad_Opcode },
5139 { Bad_Opcode },
6c30d220 5140 { VEX_W_TABLE (VEX_W_0F73_R_3_P_2) },
c0f3af97
L
5141 },
5142
592a252b 5143 /* PREFIX_VEX_0F73_REG_6 */
c0f3af97 5144 {
592d1631
L
5145 { Bad_Opcode },
5146 { Bad_Opcode },
6c30d220 5147 { VEX_W_TABLE (VEX_W_0F73_R_6_P_2) },
c0f3af97
L
5148 },
5149
592a252b 5150 /* PREFIX_VEX_0F73_REG_7 */
c0f3af97 5151 {
592d1631
L
5152 { Bad_Opcode },
5153 { Bad_Opcode },
6c30d220 5154 { VEX_W_TABLE (VEX_W_0F73_R_7_P_2) },
c0f3af97
L
5155 },
5156
592a252b 5157 /* PREFIX_VEX_0F74 */
c0f3af97 5158 {
592d1631
L
5159 { Bad_Opcode },
5160 { Bad_Opcode },
6c30d220 5161 { VEX_W_TABLE (VEX_W_0F74_P_2) },
c0f3af97
L
5162 },
5163
592a252b 5164 /* PREFIX_VEX_0F75 */
c0f3af97 5165 {
592d1631
L
5166 { Bad_Opcode },
5167 { Bad_Opcode },
6c30d220 5168 { VEX_W_TABLE (VEX_W_0F75_P_2) },
c0f3af97
L
5169 },
5170
592a252b 5171 /* PREFIX_VEX_0F76 */
c0f3af97 5172 {
592d1631
L
5173 { Bad_Opcode },
5174 { Bad_Opcode },
6c30d220 5175 { VEX_W_TABLE (VEX_W_0F76_P_2) },
c0f3af97
L
5176 },
5177
592a252b 5178 /* PREFIX_VEX_0F77 */
c0f3af97 5179 {
592a252b 5180 { VEX_W_TABLE (VEX_W_0F77_P_0) },
c0f3af97
L
5181 },
5182
592a252b 5183 /* PREFIX_VEX_0F7C */
c0f3af97 5184 {
592d1631
L
5185 { Bad_Opcode },
5186 { Bad_Opcode },
592a252b
L
5187 { VEX_W_TABLE (VEX_W_0F7C_P_2) },
5188 { VEX_W_TABLE (VEX_W_0F7C_P_3) },
c0f3af97
L
5189 },
5190
592a252b 5191 /* PREFIX_VEX_0F7D */
c0f3af97 5192 {
592d1631
L
5193 { Bad_Opcode },
5194 { Bad_Opcode },
592a252b
L
5195 { VEX_W_TABLE (VEX_W_0F7D_P_2) },
5196 { VEX_W_TABLE (VEX_W_0F7D_P_3) },
c0f3af97
L
5197 },
5198
592a252b 5199 /* PREFIX_VEX_0F7E */
c0f3af97 5200 {
592d1631 5201 { Bad_Opcode },
592a252b
L
5202 { VEX_LEN_TABLE (VEX_LEN_0F7E_P_1) },
5203 { VEX_LEN_TABLE (VEX_LEN_0F7E_P_2) },
c0f3af97
L
5204 },
5205
592a252b 5206 /* PREFIX_VEX_0F7F */
c0f3af97 5207 {
592d1631 5208 { Bad_Opcode },
592a252b
L
5209 { VEX_W_TABLE (VEX_W_0F7F_P_1) },
5210 { VEX_W_TABLE (VEX_W_0F7F_P_2) },
c0f3af97
L
5211 },
5212
43234a1e
L
5213 /* PREFIX_VEX_0F90 */
5214 {
5215 { VEX_LEN_TABLE (VEX_LEN_0F90_P_0) },
1ba585e8
IT
5216 { Bad_Opcode },
5217 { VEX_LEN_TABLE (VEX_LEN_0F90_P_2) },
43234a1e
L
5218 },
5219
5220 /* PREFIX_VEX_0F91 */
5221 {
5222 { VEX_LEN_TABLE (VEX_LEN_0F91_P_0) },
1ba585e8
IT
5223 { Bad_Opcode },
5224 { VEX_LEN_TABLE (VEX_LEN_0F91_P_2) },
43234a1e
L
5225 },
5226
5227 /* PREFIX_VEX_0F92 */
5228 {
5229 { VEX_LEN_TABLE (VEX_LEN_0F92_P_0) },
1ba585e8 5230 { Bad_Opcode },
90a915bf 5231 { VEX_LEN_TABLE (VEX_LEN_0F92_P_2) },
1ba585e8 5232 { VEX_LEN_TABLE (VEX_LEN_0F92_P_3) },
43234a1e
L
5233 },
5234
5235 /* PREFIX_VEX_0F93 */
5236 {
5237 { VEX_LEN_TABLE (VEX_LEN_0F93_P_0) },
1ba585e8 5238 { Bad_Opcode },
90a915bf 5239 { VEX_LEN_TABLE (VEX_LEN_0F93_P_2) },
1ba585e8 5240 { VEX_LEN_TABLE (VEX_LEN_0F93_P_3) },
43234a1e
L
5241 },
5242
5243 /* PREFIX_VEX_0F98 */
5244 {
5245 { VEX_LEN_TABLE (VEX_LEN_0F98_P_0) },
1ba585e8
IT
5246 { Bad_Opcode },
5247 { VEX_LEN_TABLE (VEX_LEN_0F98_P_2) },
5248 },
5249
5250 /* PREFIX_VEX_0F99 */
5251 {
5252 { VEX_LEN_TABLE (VEX_LEN_0F99_P_0) },
5253 { Bad_Opcode },
5254 { VEX_LEN_TABLE (VEX_LEN_0F99_P_2) },
43234a1e
L
5255 },
5256
592a252b 5257 /* PREFIX_VEX_0FC2 */
c0f3af97 5258 {
592a252b
L
5259 { VEX_W_TABLE (VEX_W_0FC2_P_0) },
5260 { VEX_LEN_TABLE (VEX_LEN_0FC2_P_1) },
5261 { VEX_W_TABLE (VEX_W_0FC2_P_2) },
5262 { VEX_LEN_TABLE (VEX_LEN_0FC2_P_3) },
c0f3af97
L
5263 },
5264
592a252b 5265 /* PREFIX_VEX_0FC4 */
c0f3af97 5266 {
592d1631
L
5267 { Bad_Opcode },
5268 { Bad_Opcode },
592a252b 5269 { VEX_LEN_TABLE (VEX_LEN_0FC4_P_2) },
c0f3af97
L
5270 },
5271
592a252b 5272 /* PREFIX_VEX_0FC5 */
c0f3af97 5273 {
592d1631
L
5274 { Bad_Opcode },
5275 { Bad_Opcode },
592a252b 5276 { VEX_LEN_TABLE (VEX_LEN_0FC5_P_2) },
c0f3af97
L
5277 },
5278
592a252b 5279 /* PREFIX_VEX_0FD0 */
c0f3af97 5280 {
592d1631
L
5281 { Bad_Opcode },
5282 { Bad_Opcode },
592a252b
L
5283 { VEX_W_TABLE (VEX_W_0FD0_P_2) },
5284 { VEX_W_TABLE (VEX_W_0FD0_P_3) },
c0f3af97
L
5285 },
5286
592a252b 5287 /* PREFIX_VEX_0FD1 */
c0f3af97 5288 {
592d1631
L
5289 { Bad_Opcode },
5290 { Bad_Opcode },
6c30d220 5291 { VEX_W_TABLE (VEX_W_0FD1_P_2) },
c0f3af97
L
5292 },
5293
592a252b 5294 /* PREFIX_VEX_0FD2 */
c0f3af97 5295 {
592d1631
L
5296 { Bad_Opcode },
5297 { Bad_Opcode },
6c30d220 5298 { VEX_W_TABLE (VEX_W_0FD2_P_2) },
c0f3af97
L
5299 },
5300
592a252b 5301 /* PREFIX_VEX_0FD3 */
c0f3af97 5302 {
592d1631
L
5303 { Bad_Opcode },
5304 { Bad_Opcode },
6c30d220 5305 { VEX_W_TABLE (VEX_W_0FD3_P_2) },
c0f3af97
L
5306 },
5307
592a252b 5308 /* PREFIX_VEX_0FD4 */
c0f3af97 5309 {
592d1631
L
5310 { Bad_Opcode },
5311 { Bad_Opcode },
6c30d220 5312 { VEX_W_TABLE (VEX_W_0FD4_P_2) },
c0f3af97
L
5313 },
5314
592a252b 5315 /* PREFIX_VEX_0FD5 */
c0f3af97 5316 {
592d1631
L
5317 { Bad_Opcode },
5318 { Bad_Opcode },
6c30d220 5319 { VEX_W_TABLE (VEX_W_0FD5_P_2) },
c0f3af97
L
5320 },
5321
592a252b 5322 /* PREFIX_VEX_0FD6 */
c0f3af97 5323 {
592d1631
L
5324 { Bad_Opcode },
5325 { Bad_Opcode },
592a252b 5326 { VEX_LEN_TABLE (VEX_LEN_0FD6_P_2) },
c0f3af97
L
5327 },
5328
592a252b 5329 /* PREFIX_VEX_0FD7 */
c0f3af97 5330 {
592d1631
L
5331 { Bad_Opcode },
5332 { Bad_Opcode },
592a252b 5333 { MOD_TABLE (MOD_VEX_0FD7_PREFIX_2) },
c0f3af97
L
5334 },
5335
592a252b 5336 /* PREFIX_VEX_0FD8 */
c0f3af97 5337 {
592d1631
L
5338 { Bad_Opcode },
5339 { Bad_Opcode },
6c30d220 5340 { VEX_W_TABLE (VEX_W_0FD8_P_2) },
c0f3af97
L
5341 },
5342
592a252b 5343 /* PREFIX_VEX_0FD9 */
c0f3af97 5344 {
592d1631
L
5345 { Bad_Opcode },
5346 { Bad_Opcode },
6c30d220 5347 { VEX_W_TABLE (VEX_W_0FD9_P_2) },
c0f3af97
L
5348 },
5349
592a252b 5350 /* PREFIX_VEX_0FDA */
c0f3af97 5351 {
592d1631
L
5352 { Bad_Opcode },
5353 { Bad_Opcode },
6c30d220 5354 { VEX_W_TABLE (VEX_W_0FDA_P_2) },
c0f3af97
L
5355 },
5356
592a252b 5357 /* PREFIX_VEX_0FDB */
c0f3af97 5358 {
592d1631
L
5359 { Bad_Opcode },
5360 { Bad_Opcode },
6c30d220 5361 { VEX_W_TABLE (VEX_W_0FDB_P_2) },
c0f3af97
L
5362 },
5363
592a252b 5364 /* PREFIX_VEX_0FDC */
c0f3af97 5365 {
592d1631
L
5366 { Bad_Opcode },
5367 { Bad_Opcode },
6c30d220 5368 { VEX_W_TABLE (VEX_W_0FDC_P_2) },
c0f3af97
L
5369 },
5370
592a252b 5371 /* PREFIX_VEX_0FDD */
c0f3af97 5372 {
592d1631
L
5373 { Bad_Opcode },
5374 { Bad_Opcode },
6c30d220 5375 { VEX_W_TABLE (VEX_W_0FDD_P_2) },
c0f3af97
L
5376 },
5377
592a252b 5378 /* PREFIX_VEX_0FDE */
c0f3af97 5379 {
592d1631
L
5380 { Bad_Opcode },
5381 { Bad_Opcode },
6c30d220 5382 { VEX_W_TABLE (VEX_W_0FDE_P_2) },
c0f3af97
L
5383 },
5384
592a252b 5385 /* PREFIX_VEX_0FDF */
c0f3af97 5386 {
592d1631
L
5387 { Bad_Opcode },
5388 { Bad_Opcode },
6c30d220 5389 { VEX_W_TABLE (VEX_W_0FDF_P_2) },
c0f3af97
L
5390 },
5391
592a252b 5392 /* PREFIX_VEX_0FE0 */
c0f3af97 5393 {
592d1631
L
5394 { Bad_Opcode },
5395 { Bad_Opcode },
6c30d220 5396 { VEX_W_TABLE (VEX_W_0FE0_P_2) },
c0f3af97
L
5397 },
5398
592a252b 5399 /* PREFIX_VEX_0FE1 */
c0f3af97 5400 {
592d1631
L
5401 { Bad_Opcode },
5402 { Bad_Opcode },
6c30d220 5403 { VEX_W_TABLE (VEX_W_0FE1_P_2) },
c0f3af97
L
5404 },
5405
592a252b 5406 /* PREFIX_VEX_0FE2 */
c0f3af97 5407 {
592d1631
L
5408 { Bad_Opcode },
5409 { Bad_Opcode },
6c30d220 5410 { VEX_W_TABLE (VEX_W_0FE2_P_2) },
c0f3af97
L
5411 },
5412
592a252b 5413 /* PREFIX_VEX_0FE3 */
c0f3af97 5414 {
592d1631
L
5415 { Bad_Opcode },
5416 { Bad_Opcode },
6c30d220 5417 { VEX_W_TABLE (VEX_W_0FE3_P_2) },
c0f3af97
L
5418 },
5419
592a252b 5420 /* PREFIX_VEX_0FE4 */
c0f3af97 5421 {
592d1631
L
5422 { Bad_Opcode },
5423 { Bad_Opcode },
6c30d220 5424 { VEX_W_TABLE (VEX_W_0FE4_P_2) },
c0f3af97
L
5425 },
5426
592a252b 5427 /* PREFIX_VEX_0FE5 */
c0f3af97 5428 {
592d1631
L
5429 { Bad_Opcode },
5430 { Bad_Opcode },
6c30d220 5431 { VEX_W_TABLE (VEX_W_0FE5_P_2) },
c0f3af97
L
5432 },
5433
592a252b 5434 /* PREFIX_VEX_0FE6 */
c0f3af97 5435 {
592d1631 5436 { Bad_Opcode },
592a252b
L
5437 { VEX_W_TABLE (VEX_W_0FE6_P_1) },
5438 { VEX_W_TABLE (VEX_W_0FE6_P_2) },
5439 { VEX_W_TABLE (VEX_W_0FE6_P_3) },
c0f3af97
L
5440 },
5441
592a252b 5442 /* PREFIX_VEX_0FE7 */
c0f3af97 5443 {
592d1631
L
5444 { Bad_Opcode },
5445 { Bad_Opcode },
592a252b 5446 { MOD_TABLE (MOD_VEX_0FE7_PREFIX_2) },
c0f3af97
L
5447 },
5448
592a252b 5449 /* PREFIX_VEX_0FE8 */
c0f3af97 5450 {
592d1631
L
5451 { Bad_Opcode },
5452 { Bad_Opcode },
6c30d220 5453 { VEX_W_TABLE (VEX_W_0FE8_P_2) },
c0f3af97
L
5454 },
5455
592a252b 5456 /* PREFIX_VEX_0FE9 */
c0f3af97 5457 {
592d1631
L
5458 { Bad_Opcode },
5459 { Bad_Opcode },
6c30d220 5460 { VEX_W_TABLE (VEX_W_0FE9_P_2) },
c0f3af97
L
5461 },
5462
592a252b 5463 /* PREFIX_VEX_0FEA */
c0f3af97 5464 {
592d1631
L
5465 { Bad_Opcode },
5466 { Bad_Opcode },
6c30d220 5467 { VEX_W_TABLE (VEX_W_0FEA_P_2) },
c0f3af97
L
5468 },
5469
592a252b 5470 /* PREFIX_VEX_0FEB */
c0f3af97 5471 {
592d1631
L
5472 { Bad_Opcode },
5473 { Bad_Opcode },
6c30d220 5474 { VEX_W_TABLE (VEX_W_0FEB_P_2) },
c0f3af97
L
5475 },
5476
592a252b 5477 /* PREFIX_VEX_0FEC */
c0f3af97 5478 {
592d1631
L
5479 { Bad_Opcode },
5480 { Bad_Opcode },
6c30d220 5481 { VEX_W_TABLE (VEX_W_0FEC_P_2) },
c0f3af97
L
5482 },
5483
592a252b 5484 /* PREFIX_VEX_0FED */
c0f3af97 5485 {
592d1631
L
5486 { Bad_Opcode },
5487 { Bad_Opcode },
6c30d220 5488 { VEX_W_TABLE (VEX_W_0FED_P_2) },
c0f3af97
L
5489 },
5490
592a252b 5491 /* PREFIX_VEX_0FEE */
c0f3af97 5492 {
592d1631
L
5493 { Bad_Opcode },
5494 { Bad_Opcode },
6c30d220 5495 { VEX_W_TABLE (VEX_W_0FEE_P_2) },
c0f3af97
L
5496 },
5497
592a252b 5498 /* PREFIX_VEX_0FEF */
c0f3af97 5499 {
592d1631
L
5500 { Bad_Opcode },
5501 { Bad_Opcode },
6c30d220 5502 { VEX_W_TABLE (VEX_W_0FEF_P_2) },
c0f3af97
L
5503 },
5504
592a252b 5505 /* PREFIX_VEX_0FF0 */
c0f3af97 5506 {
592d1631
L
5507 { Bad_Opcode },
5508 { Bad_Opcode },
5509 { Bad_Opcode },
592a252b 5510 { MOD_TABLE (MOD_VEX_0FF0_PREFIX_3) },
c0f3af97
L
5511 },
5512
592a252b 5513 /* PREFIX_VEX_0FF1 */
c0f3af97 5514 {
592d1631
L
5515 { Bad_Opcode },
5516 { Bad_Opcode },
6c30d220 5517 { VEX_W_TABLE (VEX_W_0FF1_P_2) },
c0f3af97
L
5518 },
5519
592a252b 5520 /* PREFIX_VEX_0FF2 */
c0f3af97 5521 {
592d1631
L
5522 { Bad_Opcode },
5523 { Bad_Opcode },
6c30d220 5524 { VEX_W_TABLE (VEX_W_0FF2_P_2) },
c0f3af97
L
5525 },
5526
592a252b 5527 /* PREFIX_VEX_0FF3 */
c0f3af97 5528 {
592d1631
L
5529 { Bad_Opcode },
5530 { Bad_Opcode },
6c30d220 5531 { VEX_W_TABLE (VEX_W_0FF3_P_2) },
c0f3af97
L
5532 },
5533
592a252b 5534 /* PREFIX_VEX_0FF4 */
c0f3af97 5535 {
592d1631
L
5536 { Bad_Opcode },
5537 { Bad_Opcode },
6c30d220 5538 { VEX_W_TABLE (VEX_W_0FF4_P_2) },
c0f3af97
L
5539 },
5540
592a252b 5541 /* PREFIX_VEX_0FF5 */
c0f3af97 5542 {
592d1631
L
5543 { Bad_Opcode },
5544 { Bad_Opcode },
6c30d220 5545 { VEX_W_TABLE (VEX_W_0FF5_P_2) },
c0f3af97
L
5546 },
5547
592a252b 5548 /* PREFIX_VEX_0FF6 */
c0f3af97 5549 {
592d1631
L
5550 { Bad_Opcode },
5551 { Bad_Opcode },
6c30d220 5552 { VEX_W_TABLE (VEX_W_0FF6_P_2) },
c0f3af97
L
5553 },
5554
592a252b 5555 /* PREFIX_VEX_0FF7 */
c0f3af97 5556 {
592d1631
L
5557 { Bad_Opcode },
5558 { Bad_Opcode },
592a252b 5559 { VEX_LEN_TABLE (VEX_LEN_0FF7_P_2) },
c0f3af97
L
5560 },
5561
592a252b 5562 /* PREFIX_VEX_0FF8 */
c0f3af97 5563 {
592d1631
L
5564 { Bad_Opcode },
5565 { Bad_Opcode },
6c30d220 5566 { VEX_W_TABLE (VEX_W_0FF8_P_2) },
c0f3af97
L
5567 },
5568
592a252b 5569 /* PREFIX_VEX_0FF9 */
c0f3af97 5570 {
592d1631
L
5571 { Bad_Opcode },
5572 { Bad_Opcode },
6c30d220 5573 { VEX_W_TABLE (VEX_W_0FF9_P_2) },
c0f3af97
L
5574 },
5575
592a252b 5576 /* PREFIX_VEX_0FFA */
c0f3af97 5577 {
592d1631
L
5578 { Bad_Opcode },
5579 { Bad_Opcode },
6c30d220 5580 { VEX_W_TABLE (VEX_W_0FFA_P_2) },
c0f3af97
L
5581 },
5582
592a252b 5583 /* PREFIX_VEX_0FFB */
c0f3af97 5584 {
592d1631
L
5585 { Bad_Opcode },
5586 { Bad_Opcode },
6c30d220 5587 { VEX_W_TABLE (VEX_W_0FFB_P_2) },
c0f3af97
L
5588 },
5589
592a252b 5590 /* PREFIX_VEX_0FFC */
c0f3af97 5591 {
592d1631
L
5592 { Bad_Opcode },
5593 { Bad_Opcode },
6c30d220 5594 { VEX_W_TABLE (VEX_W_0FFC_P_2) },
c0f3af97
L
5595 },
5596
592a252b 5597 /* PREFIX_VEX_0FFD */
c0f3af97 5598 {
592d1631
L
5599 { Bad_Opcode },
5600 { Bad_Opcode },
6c30d220 5601 { VEX_W_TABLE (VEX_W_0FFD_P_2) },
c0f3af97
L
5602 },
5603
592a252b 5604 /* PREFIX_VEX_0FFE */
c0f3af97 5605 {
592d1631
L
5606 { Bad_Opcode },
5607 { Bad_Opcode },
6c30d220 5608 { VEX_W_TABLE (VEX_W_0FFE_P_2) },
c0f3af97
L
5609 },
5610
592a252b 5611 /* PREFIX_VEX_0F3800 */
c0f3af97 5612 {
592d1631
L
5613 { Bad_Opcode },
5614 { Bad_Opcode },
6c30d220 5615 { VEX_W_TABLE (VEX_W_0F3800_P_2) },
c0f3af97
L
5616 },
5617
592a252b 5618 /* PREFIX_VEX_0F3801 */
c0f3af97 5619 {
592d1631
L
5620 { Bad_Opcode },
5621 { Bad_Opcode },
6c30d220 5622 { VEX_W_TABLE (VEX_W_0F3801_P_2) },
c0f3af97
L
5623 },
5624
592a252b 5625 /* PREFIX_VEX_0F3802 */
c0f3af97 5626 {
592d1631
L
5627 { Bad_Opcode },
5628 { Bad_Opcode },
6c30d220 5629 { VEX_W_TABLE (VEX_W_0F3802_P_2) },
c0f3af97
L
5630 },
5631
592a252b 5632 /* PREFIX_VEX_0F3803 */
c0f3af97 5633 {
592d1631
L
5634 { Bad_Opcode },
5635 { Bad_Opcode },
6c30d220 5636 { VEX_W_TABLE (VEX_W_0F3803_P_2) },
c0f3af97
L
5637 },
5638
592a252b 5639 /* PREFIX_VEX_0F3804 */
c0f3af97 5640 {
592d1631
L
5641 { Bad_Opcode },
5642 { Bad_Opcode },
6c30d220 5643 { VEX_W_TABLE (VEX_W_0F3804_P_2) },
c0f3af97
L
5644 },
5645
592a252b 5646 /* PREFIX_VEX_0F3805 */
c0f3af97 5647 {
592d1631
L
5648 { Bad_Opcode },
5649 { Bad_Opcode },
6c30d220 5650 { VEX_W_TABLE (VEX_W_0F3805_P_2) },
c0f3af97
L
5651 },
5652
592a252b 5653 /* PREFIX_VEX_0F3806 */
c0f3af97 5654 {
592d1631
L
5655 { Bad_Opcode },
5656 { Bad_Opcode },
6c30d220 5657 { VEX_W_TABLE (VEX_W_0F3806_P_2) },
c0f3af97
L
5658 },
5659
592a252b 5660 /* PREFIX_VEX_0F3807 */
c0f3af97 5661 {
592d1631
L
5662 { Bad_Opcode },
5663 { Bad_Opcode },
6c30d220 5664 { VEX_W_TABLE (VEX_W_0F3807_P_2) },
c0f3af97
L
5665 },
5666
592a252b 5667 /* PREFIX_VEX_0F3808 */
c0f3af97 5668 {
592d1631
L
5669 { Bad_Opcode },
5670 { Bad_Opcode },
6c30d220 5671 { VEX_W_TABLE (VEX_W_0F3808_P_2) },
c0f3af97
L
5672 },
5673
592a252b 5674 /* PREFIX_VEX_0F3809 */
c0f3af97 5675 {
592d1631
L
5676 { Bad_Opcode },
5677 { Bad_Opcode },
6c30d220 5678 { VEX_W_TABLE (VEX_W_0F3809_P_2) },
c0f3af97
L
5679 },
5680
592a252b 5681 /* PREFIX_VEX_0F380A */
c0f3af97 5682 {
592d1631
L
5683 { Bad_Opcode },
5684 { Bad_Opcode },
6c30d220 5685 { VEX_W_TABLE (VEX_W_0F380A_P_2) },
c0f3af97
L
5686 },
5687
592a252b 5688 /* PREFIX_VEX_0F380B */
c0f3af97 5689 {
592d1631
L
5690 { Bad_Opcode },
5691 { Bad_Opcode },
6c30d220 5692 { VEX_W_TABLE (VEX_W_0F380B_P_2) },
c0f3af97
L
5693 },
5694
592a252b 5695 /* PREFIX_VEX_0F380C */
c0f3af97 5696 {
592d1631
L
5697 { Bad_Opcode },
5698 { Bad_Opcode },
592a252b 5699 { VEX_W_TABLE (VEX_W_0F380C_P_2) },
c0f3af97
L
5700 },
5701
592a252b 5702 /* PREFIX_VEX_0F380D */
c0f3af97 5703 {
592d1631
L
5704 { Bad_Opcode },
5705 { Bad_Opcode },
592a252b 5706 { VEX_W_TABLE (VEX_W_0F380D_P_2) },
c0f3af97
L
5707 },
5708
592a252b 5709 /* PREFIX_VEX_0F380E */
c0f3af97 5710 {
592d1631
L
5711 { Bad_Opcode },
5712 { Bad_Opcode },
592a252b 5713 { VEX_W_TABLE (VEX_W_0F380E_P_2) },
c0f3af97
L
5714 },
5715
592a252b 5716 /* PREFIX_VEX_0F380F */
c0f3af97 5717 {
592d1631
L
5718 { Bad_Opcode },
5719 { Bad_Opcode },
592a252b 5720 { VEX_W_TABLE (VEX_W_0F380F_P_2) },
c0f3af97
L
5721 },
5722
592a252b 5723 /* PREFIX_VEX_0F3813 */
c7b8aa3a
L
5724 {
5725 { Bad_Opcode },
5726 { Bad_Opcode },
bf890a93 5727 { "vcvtph2ps", { XM, EXxmmq }, 0 },
c7b8aa3a
L
5728 },
5729
6c30d220
L
5730 /* PREFIX_VEX_0F3816 */
5731 {
5732 { Bad_Opcode },
5733 { Bad_Opcode },
5734 { VEX_LEN_TABLE (VEX_LEN_0F3816_P_2) },
5735 },
5736
592a252b 5737 /* PREFIX_VEX_0F3817 */
c0f3af97 5738 {
592d1631
L
5739 { Bad_Opcode },
5740 { Bad_Opcode },
592a252b 5741 { VEX_W_TABLE (VEX_W_0F3817_P_2) },
c0f3af97
L
5742 },
5743
592a252b 5744 /* PREFIX_VEX_0F3818 */
c0f3af97 5745 {
592d1631
L
5746 { Bad_Opcode },
5747 { Bad_Opcode },
6c30d220 5748 { VEX_W_TABLE (VEX_W_0F3818_P_2) },
c0f3af97
L
5749 },
5750
592a252b 5751 /* PREFIX_VEX_0F3819 */
c0f3af97 5752 {
592d1631
L
5753 { Bad_Opcode },
5754 { Bad_Opcode },
6c30d220 5755 { VEX_LEN_TABLE (VEX_LEN_0F3819_P_2) },
c0f3af97
L
5756 },
5757
592a252b 5758 /* PREFIX_VEX_0F381A */
c0f3af97 5759 {
592d1631
L
5760 { Bad_Opcode },
5761 { Bad_Opcode },
592a252b 5762 { MOD_TABLE (MOD_VEX_0F381A_PREFIX_2) },
c0f3af97
L
5763 },
5764
592a252b 5765 /* PREFIX_VEX_0F381C */
c0f3af97 5766 {
592d1631
L
5767 { Bad_Opcode },
5768 { Bad_Opcode },
6c30d220 5769 { VEX_W_TABLE (VEX_W_0F381C_P_2) },
c0f3af97
L
5770 },
5771
592a252b 5772 /* PREFIX_VEX_0F381D */
c0f3af97 5773 {
592d1631
L
5774 { Bad_Opcode },
5775 { Bad_Opcode },
6c30d220 5776 { VEX_W_TABLE (VEX_W_0F381D_P_2) },
c0f3af97
L
5777 },
5778
592a252b 5779 /* PREFIX_VEX_0F381E */
c0f3af97 5780 {
592d1631
L
5781 { Bad_Opcode },
5782 { Bad_Opcode },
6c30d220 5783 { VEX_W_TABLE (VEX_W_0F381E_P_2) },
c0f3af97
L
5784 },
5785
592a252b 5786 /* PREFIX_VEX_0F3820 */
c0f3af97 5787 {
592d1631
L
5788 { Bad_Opcode },
5789 { Bad_Opcode },
6c30d220 5790 { VEX_W_TABLE (VEX_W_0F3820_P_2) },
c0f3af97
L
5791 },
5792
592a252b 5793 /* PREFIX_VEX_0F3821 */
c0f3af97 5794 {
592d1631
L
5795 { Bad_Opcode },
5796 { Bad_Opcode },
6c30d220 5797 { VEX_W_TABLE (VEX_W_0F3821_P_2) },
c0f3af97
L
5798 },
5799
592a252b 5800 /* PREFIX_VEX_0F3822 */
c0f3af97 5801 {
592d1631
L
5802 { Bad_Opcode },
5803 { Bad_Opcode },
6c30d220 5804 { VEX_W_TABLE (VEX_W_0F3822_P_2) },
c0f3af97
L
5805 },
5806
592a252b 5807 /* PREFIX_VEX_0F3823 */
c0f3af97 5808 {
592d1631
L
5809 { Bad_Opcode },
5810 { Bad_Opcode },
6c30d220 5811 { VEX_W_TABLE (VEX_W_0F3823_P_2) },
c0f3af97
L
5812 },
5813
592a252b 5814 /* PREFIX_VEX_0F3824 */
c0f3af97 5815 {
592d1631
L
5816 { Bad_Opcode },
5817 { Bad_Opcode },
6c30d220 5818 { VEX_W_TABLE (VEX_W_0F3824_P_2) },
c0f3af97
L
5819 },
5820
592a252b 5821 /* PREFIX_VEX_0F3825 */
c0f3af97 5822 {
592d1631
L
5823 { Bad_Opcode },
5824 { Bad_Opcode },
6c30d220 5825 { VEX_W_TABLE (VEX_W_0F3825_P_2) },
c0f3af97
L
5826 },
5827
592a252b 5828 /* PREFIX_VEX_0F3828 */
c0f3af97 5829 {
592d1631
L
5830 { Bad_Opcode },
5831 { Bad_Opcode },
6c30d220 5832 { VEX_W_TABLE (VEX_W_0F3828_P_2) },
c0f3af97
L
5833 },
5834
592a252b 5835 /* PREFIX_VEX_0F3829 */
c0f3af97 5836 {
592d1631
L
5837 { Bad_Opcode },
5838 { Bad_Opcode },
6c30d220 5839 { VEX_W_TABLE (VEX_W_0F3829_P_2) },
c0f3af97
L
5840 },
5841
592a252b 5842 /* PREFIX_VEX_0F382A */
c0f3af97 5843 {
592d1631
L
5844 { Bad_Opcode },
5845 { Bad_Opcode },
592a252b 5846 { MOD_TABLE (MOD_VEX_0F382A_PREFIX_2) },
c0f3af97
L
5847 },
5848
592a252b 5849 /* PREFIX_VEX_0F382B */
c0f3af97 5850 {
592d1631
L
5851 { Bad_Opcode },
5852 { Bad_Opcode },
6c30d220 5853 { VEX_W_TABLE (VEX_W_0F382B_P_2) },
c0f3af97
L
5854 },
5855
592a252b 5856 /* PREFIX_VEX_0F382C */
c0f3af97 5857 {
592d1631
L
5858 { Bad_Opcode },
5859 { Bad_Opcode },
592a252b 5860 { MOD_TABLE (MOD_VEX_0F382C_PREFIX_2) },
c0f3af97
L
5861 },
5862
592a252b 5863 /* PREFIX_VEX_0F382D */
c0f3af97 5864 {
592d1631
L
5865 { Bad_Opcode },
5866 { Bad_Opcode },
592a252b 5867 { MOD_TABLE (MOD_VEX_0F382D_PREFIX_2) },
c0f3af97
L
5868 },
5869
592a252b 5870 /* PREFIX_VEX_0F382E */
c0f3af97 5871 {
592d1631
L
5872 { Bad_Opcode },
5873 { Bad_Opcode },
592a252b 5874 { MOD_TABLE (MOD_VEX_0F382E_PREFIX_2) },
c0f3af97
L
5875 },
5876
592a252b 5877 /* PREFIX_VEX_0F382F */
c0f3af97 5878 {
592d1631
L
5879 { Bad_Opcode },
5880 { Bad_Opcode },
592a252b 5881 { MOD_TABLE (MOD_VEX_0F382F_PREFIX_2) },
c0f3af97
L
5882 },
5883
592a252b 5884 /* PREFIX_VEX_0F3830 */
c0f3af97 5885 {
592d1631
L
5886 { Bad_Opcode },
5887 { Bad_Opcode },
6c30d220 5888 { VEX_W_TABLE (VEX_W_0F3830_P_2) },
c0f3af97
L
5889 },
5890
592a252b 5891 /* PREFIX_VEX_0F3831 */
c0f3af97 5892 {
592d1631
L
5893 { Bad_Opcode },
5894 { Bad_Opcode },
6c30d220 5895 { VEX_W_TABLE (VEX_W_0F3831_P_2) },
c0f3af97
L
5896 },
5897
592a252b 5898 /* PREFIX_VEX_0F3832 */
c0f3af97 5899 {
592d1631
L
5900 { Bad_Opcode },
5901 { Bad_Opcode },
6c30d220 5902 { VEX_W_TABLE (VEX_W_0F3832_P_2) },
c0f3af97
L
5903 },
5904
592a252b 5905 /* PREFIX_VEX_0F3833 */
c0f3af97 5906 {
592d1631
L
5907 { Bad_Opcode },
5908 { Bad_Opcode },
6c30d220 5909 { VEX_W_TABLE (VEX_W_0F3833_P_2) },
c0f3af97
L
5910 },
5911
592a252b 5912 /* PREFIX_VEX_0F3834 */
c0f3af97 5913 {
592d1631
L
5914 { Bad_Opcode },
5915 { Bad_Opcode },
6c30d220 5916 { VEX_W_TABLE (VEX_W_0F3834_P_2) },
c0f3af97
L
5917 },
5918
592a252b 5919 /* PREFIX_VEX_0F3835 */
c0f3af97 5920 {
592d1631
L
5921 { Bad_Opcode },
5922 { Bad_Opcode },
6c30d220
L
5923 { VEX_W_TABLE (VEX_W_0F3835_P_2) },
5924 },
5925
5926 /* PREFIX_VEX_0F3836 */
5927 {
5928 { Bad_Opcode },
5929 { Bad_Opcode },
5930 { VEX_LEN_TABLE (VEX_LEN_0F3836_P_2) },
c0f3af97
L
5931 },
5932
592a252b 5933 /* PREFIX_VEX_0F3837 */
c0f3af97 5934 {
592d1631
L
5935 { Bad_Opcode },
5936 { Bad_Opcode },
6c30d220 5937 { VEX_W_TABLE (VEX_W_0F3837_P_2) },
c0f3af97
L
5938 },
5939
592a252b 5940 /* PREFIX_VEX_0F3838 */
c0f3af97 5941 {
592d1631
L
5942 { Bad_Opcode },
5943 { Bad_Opcode },
6c30d220 5944 { VEX_W_TABLE (VEX_W_0F3838_P_2) },
c0f3af97
L
5945 },
5946
592a252b 5947 /* PREFIX_VEX_0F3839 */
c0f3af97 5948 {
592d1631
L
5949 { Bad_Opcode },
5950 { Bad_Opcode },
6c30d220 5951 { VEX_W_TABLE (VEX_W_0F3839_P_2) },
c0f3af97
L
5952 },
5953
592a252b 5954 /* PREFIX_VEX_0F383A */
c0f3af97 5955 {
592d1631
L
5956 { Bad_Opcode },
5957 { Bad_Opcode },
6c30d220 5958 { VEX_W_TABLE (VEX_W_0F383A_P_2) },
c0f3af97
L
5959 },
5960
592a252b 5961 /* PREFIX_VEX_0F383B */
c0f3af97 5962 {
592d1631
L
5963 { Bad_Opcode },
5964 { Bad_Opcode },
6c30d220 5965 { VEX_W_TABLE (VEX_W_0F383B_P_2) },
c0f3af97
L
5966 },
5967
592a252b 5968 /* PREFIX_VEX_0F383C */
c0f3af97 5969 {
592d1631
L
5970 { Bad_Opcode },
5971 { Bad_Opcode },
6c30d220 5972 { VEX_W_TABLE (VEX_W_0F383C_P_2) },
c0f3af97
L
5973 },
5974
592a252b 5975 /* PREFIX_VEX_0F383D */
c0f3af97 5976 {
592d1631
L
5977 { Bad_Opcode },
5978 { Bad_Opcode },
6c30d220 5979 { VEX_W_TABLE (VEX_W_0F383D_P_2) },
c0f3af97
L
5980 },
5981
592a252b 5982 /* PREFIX_VEX_0F383E */
c0f3af97 5983 {
592d1631
L
5984 { Bad_Opcode },
5985 { Bad_Opcode },
6c30d220 5986 { VEX_W_TABLE (VEX_W_0F383E_P_2) },
c0f3af97
L
5987 },
5988
592a252b 5989 /* PREFIX_VEX_0F383F */
c0f3af97 5990 {
592d1631
L
5991 { Bad_Opcode },
5992 { Bad_Opcode },
6c30d220 5993 { VEX_W_TABLE (VEX_W_0F383F_P_2) },
c0f3af97
L
5994 },
5995
592a252b 5996 /* PREFIX_VEX_0F3840 */
c0f3af97 5997 {
592d1631
L
5998 { Bad_Opcode },
5999 { Bad_Opcode },
6c30d220 6000 { VEX_W_TABLE (VEX_W_0F3840_P_2) },
c0f3af97
L
6001 },
6002
592a252b 6003 /* PREFIX_VEX_0F3841 */
c0f3af97 6004 {
592d1631
L
6005 { Bad_Opcode },
6006 { Bad_Opcode },
592a252b 6007 { VEX_LEN_TABLE (VEX_LEN_0F3841_P_2) },
c0f3af97
L
6008 },
6009
6c30d220
L
6010 /* PREFIX_VEX_0F3845 */
6011 {
6012 { Bad_Opcode },
6013 { Bad_Opcode },
bf890a93 6014 { "vpsrlv%LW", { XM, Vex, EXx }, 0 },
6c30d220
L
6015 },
6016
6017 /* PREFIX_VEX_0F3846 */
6018 {
6019 { Bad_Opcode },
6020 { Bad_Opcode },
6021 { VEX_W_TABLE (VEX_W_0F3846_P_2) },
6022 },
6023
6024 /* PREFIX_VEX_0F3847 */
6025 {
6026 { Bad_Opcode },
6027 { Bad_Opcode },
bf890a93 6028 { "vpsllv%LW", { XM, Vex, EXx }, 0 },
6c30d220
L
6029 },
6030
6031 /* PREFIX_VEX_0F3858 */
6032 {
6033 { Bad_Opcode },
6034 { Bad_Opcode },
6035 { VEX_W_TABLE (VEX_W_0F3858_P_2) },
6036 },
6037
6038 /* PREFIX_VEX_0F3859 */
6039 {
6040 { Bad_Opcode },
6041 { Bad_Opcode },
6042 { VEX_W_TABLE (VEX_W_0F3859_P_2) },
6043 },
6044
6045 /* PREFIX_VEX_0F385A */
6046 {
6047 { Bad_Opcode },
6048 { Bad_Opcode },
6049 { MOD_TABLE (MOD_VEX_0F385A_PREFIX_2) },
6050 },
6051
6052 /* PREFIX_VEX_0F3878 */
6053 {
6054 { Bad_Opcode },
6055 { Bad_Opcode },
6056 { VEX_W_TABLE (VEX_W_0F3878_P_2) },
6057 },
6058
6059 /* PREFIX_VEX_0F3879 */
6060 {
6061 { Bad_Opcode },
6062 { Bad_Opcode },
6063 { VEX_W_TABLE (VEX_W_0F3879_P_2) },
6064 },
6065
6066 /* PREFIX_VEX_0F388C */
6067 {
6068 { Bad_Opcode },
6069 { Bad_Opcode },
f7002f42 6070 { MOD_TABLE (MOD_VEX_0F388C_PREFIX_2) },
6c30d220
L
6071 },
6072
6073 /* PREFIX_VEX_0F388E */
6074 {
6075 { Bad_Opcode },
6076 { Bad_Opcode },
f7002f42 6077 { MOD_TABLE (MOD_VEX_0F388E_PREFIX_2) },
6c30d220
L
6078 },
6079
6080 /* PREFIX_VEX_0F3890 */
6081 {
6082 { Bad_Opcode },
6083 { Bad_Opcode },
bf890a93 6084 { "vpgatherd%LW", { XM, MVexVSIBDWpX, Vex }, 0 },
6c30d220
L
6085 },
6086
6087 /* PREFIX_VEX_0F3891 */
6088 {
6089 { Bad_Opcode },
6090 { Bad_Opcode },
bf890a93 6091 { "vpgatherq%LW", { XMGatherQ, MVexVSIBQWpX, VexGatherQ }, 0 },
6c30d220
L
6092 },
6093
6094 /* PREFIX_VEX_0F3892 */
6095 {
6096 { Bad_Opcode },
6097 { Bad_Opcode },
bf890a93 6098 { "vgatherdp%XW", { XM, MVexVSIBDWpX, Vex }, 0 },
6c30d220
L
6099 },
6100
6101 /* PREFIX_VEX_0F3893 */
6102 {
6103 { Bad_Opcode },
6104 { Bad_Opcode },
bf890a93 6105 { "vgatherqp%XW", { XMGatherQ, MVexVSIBQWpX, VexGatherQ }, 0 },
6c30d220
L
6106 },
6107
592a252b 6108 /* PREFIX_VEX_0F3896 */
a5ff0eb2 6109 {
592d1631
L
6110 { Bad_Opcode },
6111 { Bad_Opcode },
bf890a93 6112 { "vfmaddsub132p%XW", { XM, Vex, EXx }, 0 },
a5ff0eb2
L
6113 },
6114
592a252b 6115 /* PREFIX_VEX_0F3897 */
a5ff0eb2 6116 {
592d1631
L
6117 { Bad_Opcode },
6118 { Bad_Opcode },
bf890a93 6119 { "vfmsubadd132p%XW", { XM, Vex, EXx }, 0 },
a5ff0eb2
L
6120 },
6121
592a252b 6122 /* PREFIX_VEX_0F3898 */
a5ff0eb2 6123 {
592d1631
L
6124 { Bad_Opcode },
6125 { Bad_Opcode },
bf890a93 6126 { "vfmadd132p%XW", { XM, Vex, EXx }, 0 },
a5ff0eb2
L
6127 },
6128
592a252b 6129 /* PREFIX_VEX_0F3899 */
a5ff0eb2 6130 {
592d1631
L
6131 { Bad_Opcode },
6132 { Bad_Opcode },
bf890a93 6133 { "vfmadd132s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
a5ff0eb2
L
6134 },
6135
592a252b 6136 /* PREFIX_VEX_0F389A */
a5ff0eb2 6137 {
592d1631
L
6138 { Bad_Opcode },
6139 { Bad_Opcode },
bf890a93 6140 { "vfmsub132p%XW", { XM, Vex, EXx }, 0 },
a5ff0eb2
L
6141 },
6142
592a252b 6143 /* PREFIX_VEX_0F389B */
c0f3af97 6144 {
592d1631
L
6145 { Bad_Opcode },
6146 { Bad_Opcode },
bf890a93 6147 { "vfmsub132s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6148 },
6149
592a252b 6150 /* PREFIX_VEX_0F389C */
c0f3af97 6151 {
592d1631
L
6152 { Bad_Opcode },
6153 { Bad_Opcode },
bf890a93 6154 { "vfnmadd132p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6155 },
6156
592a252b 6157 /* PREFIX_VEX_0F389D */
c0f3af97 6158 {
592d1631
L
6159 { Bad_Opcode },
6160 { Bad_Opcode },
bf890a93 6161 { "vfnmadd132s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6162 },
6163
592a252b 6164 /* PREFIX_VEX_0F389E */
c0f3af97 6165 {
592d1631
L
6166 { Bad_Opcode },
6167 { Bad_Opcode },
bf890a93 6168 { "vfnmsub132p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6169 },
6170
592a252b 6171 /* PREFIX_VEX_0F389F */
c0f3af97 6172 {
592d1631
L
6173 { Bad_Opcode },
6174 { Bad_Opcode },
bf890a93 6175 { "vfnmsub132s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6176 },
6177
592a252b 6178 /* PREFIX_VEX_0F38A6 */
c0f3af97 6179 {
592d1631
L
6180 { Bad_Opcode },
6181 { Bad_Opcode },
bf890a93 6182 { "vfmaddsub213p%XW", { XM, Vex, EXx }, 0 },
592d1631 6183 { Bad_Opcode },
c0f3af97
L
6184 },
6185
592a252b 6186 /* PREFIX_VEX_0F38A7 */
c0f3af97 6187 {
592d1631
L
6188 { Bad_Opcode },
6189 { Bad_Opcode },
bf890a93 6190 { "vfmsubadd213p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6191 },
6192
592a252b 6193 /* PREFIX_VEX_0F38A8 */
c0f3af97 6194 {
592d1631
L
6195 { Bad_Opcode },
6196 { Bad_Opcode },
bf890a93 6197 { "vfmadd213p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6198 },
6199
592a252b 6200 /* PREFIX_VEX_0F38A9 */
c0f3af97 6201 {
592d1631
L
6202 { Bad_Opcode },
6203 { Bad_Opcode },
bf890a93 6204 { "vfmadd213s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6205 },
6206
592a252b 6207 /* PREFIX_VEX_0F38AA */
c0f3af97 6208 {
592d1631
L
6209 { Bad_Opcode },
6210 { Bad_Opcode },
bf890a93 6211 { "vfmsub213p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6212 },
6213
592a252b 6214 /* PREFIX_VEX_0F38AB */
c0f3af97 6215 {
592d1631
L
6216 { Bad_Opcode },
6217 { Bad_Opcode },
bf890a93 6218 { "vfmsub213s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6219 },
6220
592a252b 6221 /* PREFIX_VEX_0F38AC */
c0f3af97 6222 {
592d1631
L
6223 { Bad_Opcode },
6224 { Bad_Opcode },
bf890a93 6225 { "vfnmadd213p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6226 },
6227
592a252b 6228 /* PREFIX_VEX_0F38AD */
c0f3af97 6229 {
592d1631
L
6230 { Bad_Opcode },
6231 { Bad_Opcode },
bf890a93 6232 { "vfnmadd213s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6233 },
6234
592a252b 6235 /* PREFIX_VEX_0F38AE */
c0f3af97 6236 {
592d1631
L
6237 { Bad_Opcode },
6238 { Bad_Opcode },
bf890a93 6239 { "vfnmsub213p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6240 },
6241
592a252b 6242 /* PREFIX_VEX_0F38AF */
c0f3af97 6243 {
592d1631
L
6244 { Bad_Opcode },
6245 { Bad_Opcode },
bf890a93 6246 { "vfnmsub213s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6247 },
6248
592a252b 6249 /* PREFIX_VEX_0F38B6 */
c0f3af97 6250 {
592d1631
L
6251 { Bad_Opcode },
6252 { Bad_Opcode },
bf890a93 6253 { "vfmaddsub231p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6254 },
6255
592a252b 6256 /* PREFIX_VEX_0F38B7 */
c0f3af97 6257 {
592d1631
L
6258 { Bad_Opcode },
6259 { Bad_Opcode },
bf890a93 6260 { "vfmsubadd231p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6261 },
6262
592a252b 6263 /* PREFIX_VEX_0F38B8 */
c0f3af97 6264 {
592d1631
L
6265 { Bad_Opcode },
6266 { Bad_Opcode },
bf890a93 6267 { "vfmadd231p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6268 },
6269
592a252b 6270 /* PREFIX_VEX_0F38B9 */
c0f3af97 6271 {
592d1631
L
6272 { Bad_Opcode },
6273 { Bad_Opcode },
bf890a93 6274 { "vfmadd231s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6275 },
6276
592a252b 6277 /* PREFIX_VEX_0F38BA */
c0f3af97 6278 {
592d1631
L
6279 { Bad_Opcode },
6280 { Bad_Opcode },
bf890a93 6281 { "vfmsub231p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6282 },
6283
592a252b 6284 /* PREFIX_VEX_0F38BB */
c0f3af97 6285 {
592d1631
L
6286 { Bad_Opcode },
6287 { Bad_Opcode },
bf890a93 6288 { "vfmsub231s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6289 },
6290
592a252b 6291 /* PREFIX_VEX_0F38BC */
c0f3af97 6292 {
592d1631
L
6293 { Bad_Opcode },
6294 { Bad_Opcode },
bf890a93 6295 { "vfnmadd231p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6296 },
6297
592a252b 6298 /* PREFIX_VEX_0F38BD */
c0f3af97 6299 {
592d1631
L
6300 { Bad_Opcode },
6301 { Bad_Opcode },
bf890a93 6302 { "vfnmadd231s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6303 },
6304
592a252b 6305 /* PREFIX_VEX_0F38BE */
c0f3af97 6306 {
592d1631
L
6307 { Bad_Opcode },
6308 { Bad_Opcode },
bf890a93 6309 { "vfnmsub231p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6310 },
6311
592a252b 6312 /* PREFIX_VEX_0F38BF */
c0f3af97 6313 {
592d1631
L
6314 { Bad_Opcode },
6315 { Bad_Opcode },
bf890a93 6316 { "vfnmsub231s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6317 },
6318
592a252b 6319 /* PREFIX_VEX_0F38DB */
c0f3af97 6320 {
592d1631
L
6321 { Bad_Opcode },
6322 { Bad_Opcode },
592a252b 6323 { VEX_LEN_TABLE (VEX_LEN_0F38DB_P_2) },
c0f3af97
L
6324 },
6325
592a252b 6326 /* PREFIX_VEX_0F38DC */
c0f3af97 6327 {
592d1631
L
6328 { Bad_Opcode },
6329 { Bad_Opcode },
592a252b 6330 { VEX_LEN_TABLE (VEX_LEN_0F38DC_P_2) },
c0f3af97
L
6331 },
6332
592a252b 6333 /* PREFIX_VEX_0F38DD */
c0f3af97 6334 {
592d1631
L
6335 { Bad_Opcode },
6336 { Bad_Opcode },
592a252b 6337 { VEX_LEN_TABLE (VEX_LEN_0F38DD_P_2) },
c0f3af97
L
6338 },
6339
592a252b 6340 /* PREFIX_VEX_0F38DE */
c0f3af97 6341 {
592d1631
L
6342 { Bad_Opcode },
6343 { Bad_Opcode },
592a252b 6344 { VEX_LEN_TABLE (VEX_LEN_0F38DE_P_2) },
c0f3af97
L
6345 },
6346
592a252b 6347 /* PREFIX_VEX_0F38DF */
c0f3af97 6348 {
592d1631
L
6349 { Bad_Opcode },
6350 { Bad_Opcode },
592a252b 6351 { VEX_LEN_TABLE (VEX_LEN_0F38DF_P_2) },
c0f3af97
L
6352 },
6353
f12dc422
L
6354 /* PREFIX_VEX_0F38F2 */
6355 {
6356 { VEX_LEN_TABLE (VEX_LEN_0F38F2_P_0) },
6357 },
6358
6359 /* PREFIX_VEX_0F38F3_REG_1 */
6360 {
6361 { VEX_LEN_TABLE (VEX_LEN_0F38F3_R_1_P_0) },
6362 },
6363
6364 /* PREFIX_VEX_0F38F3_REG_2 */
6365 {
6366 { VEX_LEN_TABLE (VEX_LEN_0F38F3_R_2_P_0) },
6367 },
6368
6369 /* PREFIX_VEX_0F38F3_REG_3 */
6370 {
6371 { VEX_LEN_TABLE (VEX_LEN_0F38F3_R_3_P_0) },
6372 },
6373
6c30d220
L
6374 /* PREFIX_VEX_0F38F5 */
6375 {
6376 { VEX_LEN_TABLE (VEX_LEN_0F38F5_P_0) },
6377 { VEX_LEN_TABLE (VEX_LEN_0F38F5_P_1) },
6378 { Bad_Opcode },
6379 { VEX_LEN_TABLE (VEX_LEN_0F38F5_P_3) },
6380 },
6381
6382 /* PREFIX_VEX_0F38F6 */
6383 {
6384 { Bad_Opcode },
6385 { Bad_Opcode },
6386 { Bad_Opcode },
6387 { VEX_LEN_TABLE (VEX_LEN_0F38F6_P_3) },
6388 },
6389
f12dc422
L
6390 /* PREFIX_VEX_0F38F7 */
6391 {
6392 { VEX_LEN_TABLE (VEX_LEN_0F38F7_P_0) },
6c30d220
L
6393 { VEX_LEN_TABLE (VEX_LEN_0F38F7_P_1) },
6394 { VEX_LEN_TABLE (VEX_LEN_0F38F7_P_2) },
6395 { VEX_LEN_TABLE (VEX_LEN_0F38F7_P_3) },
6396 },
6397
6398 /* PREFIX_VEX_0F3A00 */
6399 {
6400 { Bad_Opcode },
6401 { Bad_Opcode },
6402 { VEX_LEN_TABLE (VEX_LEN_0F3A00_P_2) },
6403 },
6404
6405 /* PREFIX_VEX_0F3A01 */
6406 {
6407 { Bad_Opcode },
6408 { Bad_Opcode },
6409 { VEX_LEN_TABLE (VEX_LEN_0F3A01_P_2) },
6410 },
6411
6412 /* PREFIX_VEX_0F3A02 */
6413 {
6414 { Bad_Opcode },
6415 { Bad_Opcode },
6416 { VEX_W_TABLE (VEX_W_0F3A02_P_2) },
f12dc422
L
6417 },
6418
592a252b 6419 /* PREFIX_VEX_0F3A04 */
c0f3af97 6420 {
592d1631
L
6421 { Bad_Opcode },
6422 { Bad_Opcode },
592a252b 6423 { VEX_W_TABLE (VEX_W_0F3A04_P_2) },
c0f3af97
L
6424 },
6425
592a252b 6426 /* PREFIX_VEX_0F3A05 */
c0f3af97 6427 {
592d1631
L
6428 { Bad_Opcode },
6429 { Bad_Opcode },
592a252b 6430 { VEX_W_TABLE (VEX_W_0F3A05_P_2) },
c0f3af97
L
6431 },
6432
592a252b 6433 /* PREFIX_VEX_0F3A06 */
c0f3af97 6434 {
592d1631
L
6435 { Bad_Opcode },
6436 { Bad_Opcode },
592a252b 6437 { VEX_LEN_TABLE (VEX_LEN_0F3A06_P_2) },
c0f3af97
L
6438 },
6439
592a252b 6440 /* PREFIX_VEX_0F3A08 */
c0f3af97 6441 {
592d1631
L
6442 { Bad_Opcode },
6443 { Bad_Opcode },
592a252b 6444 { VEX_W_TABLE (VEX_W_0F3A08_P_2) },
c0f3af97
L
6445 },
6446
592a252b 6447 /* PREFIX_VEX_0F3A09 */
c0f3af97 6448 {
592d1631
L
6449 { Bad_Opcode },
6450 { Bad_Opcode },
592a252b 6451 { VEX_W_TABLE (VEX_W_0F3A09_P_2) },
c0f3af97
L
6452 },
6453
592a252b 6454 /* PREFIX_VEX_0F3A0A */
c0f3af97 6455 {
592d1631
L
6456 { Bad_Opcode },
6457 { Bad_Opcode },
592a252b 6458 { VEX_LEN_TABLE (VEX_LEN_0F3A0A_P_2) },
0bfee649
L
6459 },
6460
592a252b 6461 /* PREFIX_VEX_0F3A0B */
0bfee649 6462 {
592d1631
L
6463 { Bad_Opcode },
6464 { Bad_Opcode },
592a252b 6465 { VEX_LEN_TABLE (VEX_LEN_0F3A0B_P_2) },
0bfee649
L
6466 },
6467
592a252b 6468 /* PREFIX_VEX_0F3A0C */
0bfee649 6469 {
592d1631
L
6470 { Bad_Opcode },
6471 { Bad_Opcode },
592a252b 6472 { VEX_W_TABLE (VEX_W_0F3A0C_P_2) },
0bfee649
L
6473 },
6474
592a252b 6475 /* PREFIX_VEX_0F3A0D */
0bfee649 6476 {
592d1631
L
6477 { Bad_Opcode },
6478 { Bad_Opcode },
592a252b 6479 { VEX_W_TABLE (VEX_W_0F3A0D_P_2) },
c0f3af97
L
6480 },
6481
592a252b 6482 /* PREFIX_VEX_0F3A0E */
0bfee649 6483 {
592d1631
L
6484 { Bad_Opcode },
6485 { Bad_Opcode },
6c30d220 6486 { VEX_W_TABLE (VEX_W_0F3A0E_P_2) },
0bfee649
L
6487 },
6488
592a252b 6489 /* PREFIX_VEX_0F3A0F */
0bfee649 6490 {
592d1631
L
6491 { Bad_Opcode },
6492 { Bad_Opcode },
6c30d220 6493 { VEX_W_TABLE (VEX_W_0F3A0F_P_2) },
0bfee649
L
6494 },
6495
592a252b 6496 /* PREFIX_VEX_0F3A14 */
0bfee649 6497 {
592d1631
L
6498 { Bad_Opcode },
6499 { Bad_Opcode },
592a252b 6500 { VEX_LEN_TABLE (VEX_LEN_0F3A14_P_2) },
0bfee649
L
6501 },
6502
592a252b 6503 /* PREFIX_VEX_0F3A15 */
0bfee649 6504 {
592d1631
L
6505 { Bad_Opcode },
6506 { Bad_Opcode },
592a252b 6507 { VEX_LEN_TABLE (VEX_LEN_0F3A15_P_2) },
0bfee649
L
6508 },
6509
592a252b 6510 /* PREFIX_VEX_0F3A16 */
c0f3af97 6511 {
592d1631
L
6512 { Bad_Opcode },
6513 { Bad_Opcode },
592a252b 6514 { VEX_LEN_TABLE (VEX_LEN_0F3A16_P_2) },
c0f3af97
L
6515 },
6516
592a252b 6517 /* PREFIX_VEX_0F3A17 */
c0f3af97 6518 {
592d1631
L
6519 { Bad_Opcode },
6520 { Bad_Opcode },
592a252b 6521 { VEX_LEN_TABLE (VEX_LEN_0F3A17_P_2) },
c0f3af97
L
6522 },
6523
592a252b 6524 /* PREFIX_VEX_0F3A18 */
c0f3af97 6525 {
592d1631
L
6526 { Bad_Opcode },
6527 { Bad_Opcode },
592a252b 6528 { VEX_LEN_TABLE (VEX_LEN_0F3A18_P_2) },
c0f3af97
L
6529 },
6530
592a252b 6531 /* PREFIX_VEX_0F3A19 */
c0f3af97 6532 {
592d1631
L
6533 { Bad_Opcode },
6534 { Bad_Opcode },
592a252b 6535 { VEX_LEN_TABLE (VEX_LEN_0F3A19_P_2) },
c0f3af97
L
6536 },
6537
592a252b 6538 /* PREFIX_VEX_0F3A1D */
c7b8aa3a
L
6539 {
6540 { Bad_Opcode },
6541 { Bad_Opcode },
bf890a93 6542 { "vcvtps2ph", { EXxmmq, XM, Ib }, 0 },
c7b8aa3a
L
6543 },
6544
592a252b 6545 /* PREFIX_VEX_0F3A20 */
c0f3af97 6546 {
592d1631
L
6547 { Bad_Opcode },
6548 { Bad_Opcode },
592a252b 6549 { VEX_LEN_TABLE (VEX_LEN_0F3A20_P_2) },
c0f3af97
L
6550 },
6551
592a252b 6552 /* PREFIX_VEX_0F3A21 */
c0f3af97 6553 {
592d1631
L
6554 { Bad_Opcode },
6555 { Bad_Opcode },
592a252b 6556 { VEX_LEN_TABLE (VEX_LEN_0F3A21_P_2) },
c0f3af97
L
6557 },
6558
592a252b 6559 /* PREFIX_VEX_0F3A22 */
0bfee649 6560 {
592d1631
L
6561 { Bad_Opcode },
6562 { Bad_Opcode },
592a252b 6563 { VEX_LEN_TABLE (VEX_LEN_0F3A22_P_2) },
0bfee649
L
6564 },
6565
43234a1e
L
6566 /* PREFIX_VEX_0F3A30 */
6567 {
6568 { Bad_Opcode },
6569 { Bad_Opcode },
6570 { VEX_LEN_TABLE (VEX_LEN_0F3A30_P_2) },
6571 },
6572
1ba585e8
IT
6573 /* PREFIX_VEX_0F3A31 */
6574 {
6575 { Bad_Opcode },
6576 { Bad_Opcode },
6577 { VEX_LEN_TABLE (VEX_LEN_0F3A31_P_2) },
6578 },
6579
43234a1e
L
6580 /* PREFIX_VEX_0F3A32 */
6581 {
6582 { Bad_Opcode },
6583 { Bad_Opcode },
6584 { VEX_LEN_TABLE (VEX_LEN_0F3A32_P_2) },
6585 },
6586
1ba585e8
IT
6587 /* PREFIX_VEX_0F3A33 */
6588 {
6589 { Bad_Opcode },
6590 { Bad_Opcode },
6591 { VEX_LEN_TABLE (VEX_LEN_0F3A33_P_2) },
6592 },
6593
6c30d220
L
6594 /* PREFIX_VEX_0F3A38 */
6595 {
6596 { Bad_Opcode },
6597 { Bad_Opcode },
6598 { VEX_LEN_TABLE (VEX_LEN_0F3A38_P_2) },
6599 },
6600
6601 /* PREFIX_VEX_0F3A39 */
6602 {
6603 { Bad_Opcode },
6604 { Bad_Opcode },
6605 { VEX_LEN_TABLE (VEX_LEN_0F3A39_P_2) },
6606 },
6607
592a252b 6608 /* PREFIX_VEX_0F3A40 */
c0f3af97 6609 {
592d1631
L
6610 { Bad_Opcode },
6611 { Bad_Opcode },
592a252b 6612 { VEX_W_TABLE (VEX_W_0F3A40_P_2) },
c0f3af97
L
6613 },
6614
592a252b 6615 /* PREFIX_VEX_0F3A41 */
c0f3af97 6616 {
592d1631
L
6617 { Bad_Opcode },
6618 { Bad_Opcode },
592a252b 6619 { VEX_LEN_TABLE (VEX_LEN_0F3A41_P_2) },
c0f3af97
L
6620 },
6621
592a252b 6622 /* PREFIX_VEX_0F3A42 */
c0f3af97 6623 {
592d1631
L
6624 { Bad_Opcode },
6625 { Bad_Opcode },
6c30d220 6626 { VEX_W_TABLE (VEX_W_0F3A42_P_2) },
c0f3af97
L
6627 },
6628
592a252b 6629 /* PREFIX_VEX_0F3A44 */
ce2f5b3c 6630 {
592d1631
L
6631 { Bad_Opcode },
6632 { Bad_Opcode },
592a252b 6633 { VEX_LEN_TABLE (VEX_LEN_0F3A44_P_2) },
ce2f5b3c
L
6634 },
6635
6c30d220
L
6636 /* PREFIX_VEX_0F3A46 */
6637 {
6638 { Bad_Opcode },
6639 { Bad_Opcode },
6640 { VEX_LEN_TABLE (VEX_LEN_0F3A46_P_2) },
6641 },
6642
592a252b 6643 /* PREFIX_VEX_0F3A48 */
a683cc34
SP
6644 {
6645 { Bad_Opcode },
6646 { Bad_Opcode },
592a252b 6647 { VEX_W_TABLE (VEX_W_0F3A48_P_2) },
a683cc34
SP
6648 },
6649
592a252b 6650 /* PREFIX_VEX_0F3A49 */
a683cc34
SP
6651 {
6652 { Bad_Opcode },
6653 { Bad_Opcode },
592a252b 6654 { VEX_W_TABLE (VEX_W_0F3A49_P_2) },
a683cc34
SP
6655 },
6656
592a252b 6657 /* PREFIX_VEX_0F3A4A */
c0f3af97 6658 {
592d1631
L
6659 { Bad_Opcode },
6660 { Bad_Opcode },
592a252b 6661 { VEX_W_TABLE (VEX_W_0F3A4A_P_2) },
c0f3af97
L
6662 },
6663
592a252b 6664 /* PREFIX_VEX_0F3A4B */
c0f3af97 6665 {
592d1631
L
6666 { Bad_Opcode },
6667 { Bad_Opcode },
592a252b 6668 { VEX_W_TABLE (VEX_W_0F3A4B_P_2) },
c0f3af97
L
6669 },
6670
592a252b 6671 /* PREFIX_VEX_0F3A4C */
c0f3af97 6672 {
592d1631
L
6673 { Bad_Opcode },
6674 { Bad_Opcode },
6c30d220 6675 { VEX_W_TABLE (VEX_W_0F3A4C_P_2) },
c0f3af97
L
6676 },
6677
592a252b 6678 /* PREFIX_VEX_0F3A5C */
922d8de8 6679 {
592d1631
L
6680 { Bad_Opcode },
6681 { Bad_Opcode },
bf890a93 6682 { "vfmaddsubps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
922d8de8
DR
6683 },
6684
592a252b 6685 /* PREFIX_VEX_0F3A5D */
922d8de8 6686 {
592d1631
L
6687 { Bad_Opcode },
6688 { Bad_Opcode },
bf890a93 6689 { "vfmaddsubpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
922d8de8
DR
6690 },
6691
592a252b 6692 /* PREFIX_VEX_0F3A5E */
922d8de8 6693 {
592d1631
L
6694 { Bad_Opcode },
6695 { Bad_Opcode },
bf890a93 6696 { "vfmsubaddps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
922d8de8
DR
6697 },
6698
592a252b 6699 /* PREFIX_VEX_0F3A5F */
922d8de8 6700 {
592d1631
L
6701 { Bad_Opcode },
6702 { Bad_Opcode },
bf890a93 6703 { "vfmsubaddpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
922d8de8
DR
6704 },
6705
592a252b 6706 /* PREFIX_VEX_0F3A60 */
c0f3af97 6707 {
592d1631
L
6708 { Bad_Opcode },
6709 { Bad_Opcode },
592a252b 6710 { VEX_LEN_TABLE (VEX_LEN_0F3A60_P_2) },
592d1631 6711 { Bad_Opcode },
c0f3af97
L
6712 },
6713
592a252b 6714 /* PREFIX_VEX_0F3A61 */
c0f3af97 6715 {
592d1631
L
6716 { Bad_Opcode },
6717 { Bad_Opcode },
592a252b 6718 { VEX_LEN_TABLE (VEX_LEN_0F3A61_P_2) },
c0f3af97
L
6719 },
6720
592a252b 6721 /* PREFIX_VEX_0F3A62 */
c0f3af97 6722 {
592d1631
L
6723 { Bad_Opcode },
6724 { Bad_Opcode },
592a252b 6725 { VEX_LEN_TABLE (VEX_LEN_0F3A62_P_2) },
c0f3af97
L
6726 },
6727
592a252b 6728 /* PREFIX_VEX_0F3A63 */
c0f3af97 6729 {
592d1631
L
6730 { Bad_Opcode },
6731 { Bad_Opcode },
592a252b 6732 { VEX_LEN_TABLE (VEX_LEN_0F3A63_P_2) },
c0f3af97 6733 },
a5ff0eb2 6734
592a252b 6735 /* PREFIX_VEX_0F3A68 */
922d8de8 6736 {
592d1631
L
6737 { Bad_Opcode },
6738 { Bad_Opcode },
bf890a93 6739 { "vfmaddps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
922d8de8
DR
6740 },
6741
592a252b 6742 /* PREFIX_VEX_0F3A69 */
922d8de8 6743 {
592d1631
L
6744 { Bad_Opcode },
6745 { Bad_Opcode },
bf890a93 6746 { "vfmaddpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
922d8de8
DR
6747 },
6748
592a252b 6749 /* PREFIX_VEX_0F3A6A */
922d8de8 6750 {
592d1631
L
6751 { Bad_Opcode },
6752 { Bad_Opcode },
592a252b 6753 { VEX_LEN_TABLE (VEX_LEN_0F3A6A_P_2) },
922d8de8
DR
6754 },
6755
592a252b 6756 /* PREFIX_VEX_0F3A6B */
922d8de8 6757 {
592d1631
L
6758 { Bad_Opcode },
6759 { Bad_Opcode },
592a252b 6760 { VEX_LEN_TABLE (VEX_LEN_0F3A6B_P_2) },
922d8de8
DR
6761 },
6762
592a252b 6763 /* PREFIX_VEX_0F3A6C */
922d8de8 6764 {
592d1631
L
6765 { Bad_Opcode },
6766 { Bad_Opcode },
bf890a93 6767 { "vfmsubps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
922d8de8
DR
6768 },
6769
592a252b 6770 /* PREFIX_VEX_0F3A6D */
922d8de8 6771 {
592d1631
L
6772 { Bad_Opcode },
6773 { Bad_Opcode },
bf890a93 6774 { "vfmsubpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
922d8de8
DR
6775 },
6776
592a252b 6777 /* PREFIX_VEX_0F3A6E */
922d8de8 6778 {
592d1631
L
6779 { Bad_Opcode },
6780 { Bad_Opcode },
592a252b 6781 { VEX_LEN_TABLE (VEX_LEN_0F3A6E_P_2) },
922d8de8
DR
6782 },
6783
592a252b 6784 /* PREFIX_VEX_0F3A6F */
922d8de8 6785 {
592d1631
L
6786 { Bad_Opcode },
6787 { Bad_Opcode },
592a252b 6788 { VEX_LEN_TABLE (VEX_LEN_0F3A6F_P_2) },
922d8de8
DR
6789 },
6790
592a252b 6791 /* PREFIX_VEX_0F3A78 */
922d8de8 6792 {
592d1631
L
6793 { Bad_Opcode },
6794 { Bad_Opcode },
bf890a93 6795 { "vfnmaddps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
922d8de8
DR
6796 },
6797
592a252b 6798 /* PREFIX_VEX_0F3A79 */
922d8de8 6799 {
592d1631
L
6800 { Bad_Opcode },
6801 { Bad_Opcode },
bf890a93 6802 { "vfnmaddpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
922d8de8
DR
6803 },
6804
592a252b 6805 /* PREFIX_VEX_0F3A7A */
922d8de8 6806 {
592d1631
L
6807 { Bad_Opcode },
6808 { Bad_Opcode },
592a252b 6809 { VEX_LEN_TABLE (VEX_LEN_0F3A7A_P_2) },
922d8de8
DR
6810 },
6811
592a252b 6812 /* PREFIX_VEX_0F3A7B */
922d8de8 6813 {
592d1631
L
6814 { Bad_Opcode },
6815 { Bad_Opcode },
592a252b 6816 { VEX_LEN_TABLE (VEX_LEN_0F3A7B_P_2) },
922d8de8
DR
6817 },
6818
592a252b 6819 /* PREFIX_VEX_0F3A7C */
922d8de8 6820 {
592d1631
L
6821 { Bad_Opcode },
6822 { Bad_Opcode },
bf890a93 6823 { "vfnmsubps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
592d1631 6824 { Bad_Opcode },
922d8de8
DR
6825 },
6826
592a252b 6827 /* PREFIX_VEX_0F3A7D */
922d8de8 6828 {
592d1631
L
6829 { Bad_Opcode },
6830 { Bad_Opcode },
bf890a93 6831 { "vfnmsubpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
922d8de8
DR
6832 },
6833
592a252b 6834 /* PREFIX_VEX_0F3A7E */
922d8de8 6835 {
592d1631
L
6836 { Bad_Opcode },
6837 { Bad_Opcode },
592a252b 6838 { VEX_LEN_TABLE (VEX_LEN_0F3A7E_P_2) },
922d8de8
DR
6839 },
6840
592a252b 6841 /* PREFIX_VEX_0F3A7F */
922d8de8 6842 {
592d1631
L
6843 { Bad_Opcode },
6844 { Bad_Opcode },
592a252b 6845 { VEX_LEN_TABLE (VEX_LEN_0F3A7F_P_2) },
922d8de8
DR
6846 },
6847
592a252b 6848 /* PREFIX_VEX_0F3ADF */
a5ff0eb2 6849 {
592d1631
L
6850 { Bad_Opcode },
6851 { Bad_Opcode },
592a252b 6852 { VEX_LEN_TABLE (VEX_LEN_0F3ADF_P_2) },
a5ff0eb2 6853 },
6c30d220
L
6854
6855 /* PREFIX_VEX_0F3AF0 */
6856 {
6857 { Bad_Opcode },
6858 { Bad_Opcode },
6859 { Bad_Opcode },
6860 { VEX_LEN_TABLE (VEX_LEN_0F3AF0_P_3) },
6861 },
43234a1e
L
6862
6863#define NEED_PREFIX_TABLE
6864#include "i386-dis-evex.h"
6865#undef NEED_PREFIX_TABLE
c0f3af97
L
6866};
6867
6868static const struct dis386 x86_64_table[][2] = {
6869 /* X86_64_06 */
6870 {
bf890a93 6871 { "pushP", { es }, 0 },
c0f3af97
L
6872 },
6873
6874 /* X86_64_07 */
6875 {
bf890a93 6876 { "popP", { es }, 0 },
c0f3af97
L
6877 },
6878
6879 /* X86_64_0D */
6880 {
bf890a93 6881 { "pushP", { cs }, 0 },
c0f3af97
L
6882 },
6883
6884 /* X86_64_16 */
6885 {
bf890a93 6886 { "pushP", { ss }, 0 },
c0f3af97
L
6887 },
6888
6889 /* X86_64_17 */
6890 {
bf890a93 6891 { "popP", { ss }, 0 },
c0f3af97
L
6892 },
6893
6894 /* X86_64_1E */
6895 {
bf890a93 6896 { "pushP", { ds }, 0 },
c0f3af97
L
6897 },
6898
6899 /* X86_64_1F */
6900 {
bf890a93 6901 { "popP", { ds }, 0 },
c0f3af97
L
6902 },
6903
6904 /* X86_64_27 */
6905 {
bf890a93 6906 { "daa", { XX }, 0 },
c0f3af97
L
6907 },
6908
6909 /* X86_64_2F */
6910 {
bf890a93 6911 { "das", { XX }, 0 },
c0f3af97
L
6912 },
6913
6914 /* X86_64_37 */
6915 {
bf890a93 6916 { "aaa", { XX }, 0 },
c0f3af97
L
6917 },
6918
6919 /* X86_64_3F */
6920 {
bf890a93 6921 { "aas", { XX }, 0 },
c0f3af97
L
6922 },
6923
6924 /* X86_64_60 */
6925 {
bf890a93 6926 { "pushaP", { XX }, 0 },
c0f3af97
L
6927 },
6928
6929 /* X86_64_61 */
6930 {
bf890a93 6931 { "popaP", { XX }, 0 },
c0f3af97
L
6932 },
6933
6934 /* X86_64_62 */
6935 {
6936 { MOD_TABLE (MOD_62_32BIT) },
43234a1e 6937 { EVEX_TABLE (EVEX_0F) },
c0f3af97
L
6938 },
6939
6940 /* X86_64_63 */
6941 {
bf890a93
IT
6942 { "arpl", { Ew, Gw }, 0 },
6943 { "movs{lq|xd}", { Gv, Ed }, 0 },
c0f3af97
L
6944 },
6945
6946 /* X86_64_6D */
6947 {
bf890a93
IT
6948 { "ins{R|}", { Yzr, indirDX }, 0 },
6949 { "ins{G|}", { Yzr, indirDX }, 0 },
c0f3af97
L
6950 },
6951
6952 /* X86_64_6F */
6953 {
bf890a93
IT
6954 { "outs{R|}", { indirDXr, Xz }, 0 },
6955 { "outs{G|}", { indirDXr, Xz }, 0 },
c0f3af97
L
6956 },
6957
d039fef3 6958 /* X86_64_82 */
8b89fe14 6959 {
de194d85 6960 /* Opcode 0x82 is an alias of opcode 0x80 in 32-bit mode. */
d039fef3 6961 { REG_TABLE (REG_80) },
8b89fe14
L
6962 },
6963
c0f3af97
L
6964 /* X86_64_9A */
6965 {
bf890a93 6966 { "Jcall{T|}", { Ap }, 0 },
c0f3af97
L
6967 },
6968
6969 /* X86_64_C4 */
6970 {
6971 { MOD_TABLE (MOD_C4_32BIT) },
6972 { VEX_C4_TABLE (VEX_0F) },
6973 },
6974
6975 /* X86_64_C5 */
6976 {
6977 { MOD_TABLE (MOD_C5_32BIT) },
6978 { VEX_C5_TABLE (VEX_0F) },
6979 },
6980
6981 /* X86_64_CE */
6982 {
bf890a93 6983 { "into", { XX }, 0 },
c0f3af97
L
6984 },
6985
6986 /* X86_64_D4 */
6987 {
bf890a93 6988 { "aam", { Ib }, 0 },
c0f3af97
L
6989 },
6990
6991 /* X86_64_D5 */
6992 {
bf890a93 6993 { "aad", { Ib }, 0 },
c0f3af97
L
6994 },
6995
a72d2af2
L
6996 /* X86_64_E8 */
6997 {
6998 { "callP", { Jv, BND }, 0 },
5db04b09 6999 { "call@", { Jv, BND }, 0 }
a72d2af2
L
7000 },
7001
7002 /* X86_64_E9 */
7003 {
7004 { "jmpP", { Jv, BND }, 0 },
5db04b09 7005 { "jmp@", { Jv, BND }, 0 }
a72d2af2
L
7006 },
7007
c0f3af97
L
7008 /* X86_64_EA */
7009 {
bf890a93 7010 { "Jjmp{T|}", { Ap }, 0 },
c0f3af97
L
7011 },
7012
7013 /* X86_64_0F01_REG_0 */
7014 {
bf890a93
IT
7015 { "sgdt{Q|IQ}", { M }, 0 },
7016 { "sgdt", { M }, 0 },
c0f3af97
L
7017 },
7018
7019 /* X86_64_0F01_REG_1 */
7020 {
bf890a93
IT
7021 { "sidt{Q|IQ}", { M }, 0 },
7022 { "sidt", { M }, 0 },
c0f3af97
L
7023 },
7024
7025 /* X86_64_0F01_REG_2 */
7026 {
bf890a93
IT
7027 { "lgdt{Q|Q}", { M }, 0 },
7028 { "lgdt", { M }, 0 },
c0f3af97
L
7029 },
7030
7031 /* X86_64_0F01_REG_3 */
7032 {
bf890a93
IT
7033 { "lidt{Q|Q}", { M }, 0 },
7034 { "lidt", { M }, 0 },
c0f3af97
L
7035 },
7036};
7037
7038static const struct dis386 three_byte_table[][256] = {
c1e679ec
DR
7039
7040 /* THREE_BYTE_0F38 */
c0f3af97
L
7041 {
7042 /* 00 */
507bd325
L
7043 { "pshufb", { MX, EM }, PREFIX_OPCODE },
7044 { "phaddw", { MX, EM }, PREFIX_OPCODE },
7045 { "phaddd", { MX, EM }, PREFIX_OPCODE },
7046 { "phaddsw", { MX, EM }, PREFIX_OPCODE },
7047 { "pmaddubsw", { MX, EM }, PREFIX_OPCODE },
7048 { "phsubw", { MX, EM }, PREFIX_OPCODE },
7049 { "phsubd", { MX, EM }, PREFIX_OPCODE },
7050 { "phsubsw", { MX, EM }, PREFIX_OPCODE },
c0f3af97 7051 /* 08 */
507bd325
L
7052 { "psignb", { MX, EM }, PREFIX_OPCODE },
7053 { "psignw", { MX, EM }, PREFIX_OPCODE },
7054 { "psignd", { MX, EM }, PREFIX_OPCODE },
7055 { "pmulhrsw", { MX, EM }, PREFIX_OPCODE },
592d1631
L
7056 { Bad_Opcode },
7057 { Bad_Opcode },
7058 { Bad_Opcode },
7059 { Bad_Opcode },
f88c9eb0
SP
7060 /* 10 */
7061 { PREFIX_TABLE (PREFIX_0F3810) },
592d1631
L
7062 { Bad_Opcode },
7063 { Bad_Opcode },
7064 { Bad_Opcode },
f88c9eb0
SP
7065 { PREFIX_TABLE (PREFIX_0F3814) },
7066 { PREFIX_TABLE (PREFIX_0F3815) },
592d1631 7067 { Bad_Opcode },
f88c9eb0
SP
7068 { PREFIX_TABLE (PREFIX_0F3817) },
7069 /* 18 */
592d1631
L
7070 { Bad_Opcode },
7071 { Bad_Opcode },
7072 { Bad_Opcode },
7073 { Bad_Opcode },
507bd325
L
7074 { "pabsb", { MX, EM }, PREFIX_OPCODE },
7075 { "pabsw", { MX, EM }, PREFIX_OPCODE },
7076 { "pabsd", { MX, EM }, PREFIX_OPCODE },
592d1631 7077 { Bad_Opcode },
f88c9eb0
SP
7078 /* 20 */
7079 { PREFIX_TABLE (PREFIX_0F3820) },
7080 { PREFIX_TABLE (PREFIX_0F3821) },
7081 { PREFIX_TABLE (PREFIX_0F3822) },
7082 { PREFIX_TABLE (PREFIX_0F3823) },
7083 { PREFIX_TABLE (PREFIX_0F3824) },
7084 { PREFIX_TABLE (PREFIX_0F3825) },
592d1631
L
7085 { Bad_Opcode },
7086 { Bad_Opcode },
f88c9eb0
SP
7087 /* 28 */
7088 { PREFIX_TABLE (PREFIX_0F3828) },
7089 { PREFIX_TABLE (PREFIX_0F3829) },
7090 { PREFIX_TABLE (PREFIX_0F382A) },
7091 { PREFIX_TABLE (PREFIX_0F382B) },
592d1631
L
7092 { Bad_Opcode },
7093 { Bad_Opcode },
7094 { Bad_Opcode },
7095 { Bad_Opcode },
f88c9eb0
SP
7096 /* 30 */
7097 { PREFIX_TABLE (PREFIX_0F3830) },
7098 { PREFIX_TABLE (PREFIX_0F3831) },
7099 { PREFIX_TABLE (PREFIX_0F3832) },
7100 { PREFIX_TABLE (PREFIX_0F3833) },
7101 { PREFIX_TABLE (PREFIX_0F3834) },
7102 { PREFIX_TABLE (PREFIX_0F3835) },
592d1631 7103 { Bad_Opcode },
f88c9eb0
SP
7104 { PREFIX_TABLE (PREFIX_0F3837) },
7105 /* 38 */
7106 { PREFIX_TABLE (PREFIX_0F3838) },
7107 { PREFIX_TABLE (PREFIX_0F3839) },
7108 { PREFIX_TABLE (PREFIX_0F383A) },
7109 { PREFIX_TABLE (PREFIX_0F383B) },
7110 { PREFIX_TABLE (PREFIX_0F383C) },
7111 { PREFIX_TABLE (PREFIX_0F383D) },
7112 { PREFIX_TABLE (PREFIX_0F383E) },
7113 { PREFIX_TABLE (PREFIX_0F383F) },
7114 /* 40 */
7115 { PREFIX_TABLE (PREFIX_0F3840) },
7116 { PREFIX_TABLE (PREFIX_0F3841) },
592d1631
L
7117 { Bad_Opcode },
7118 { Bad_Opcode },
7119 { Bad_Opcode },
7120 { Bad_Opcode },
7121 { Bad_Opcode },
7122 { Bad_Opcode },
f88c9eb0 7123 /* 48 */
592d1631
L
7124 { Bad_Opcode },
7125 { Bad_Opcode },
7126 { Bad_Opcode },
7127 { Bad_Opcode },
7128 { Bad_Opcode },
7129 { Bad_Opcode },
7130 { Bad_Opcode },
7131 { Bad_Opcode },
f88c9eb0 7132 /* 50 */
592d1631
L
7133 { Bad_Opcode },
7134 { Bad_Opcode },
7135 { Bad_Opcode },
7136 { Bad_Opcode },
7137 { Bad_Opcode },
7138 { Bad_Opcode },
7139 { Bad_Opcode },
7140 { Bad_Opcode },
f88c9eb0 7141 /* 58 */
592d1631
L
7142 { Bad_Opcode },
7143 { Bad_Opcode },
7144 { Bad_Opcode },
7145 { Bad_Opcode },
7146 { Bad_Opcode },
7147 { Bad_Opcode },
7148 { Bad_Opcode },
7149 { Bad_Opcode },
f88c9eb0 7150 /* 60 */
592d1631
L
7151 { Bad_Opcode },
7152 { Bad_Opcode },
7153 { Bad_Opcode },
7154 { Bad_Opcode },
7155 { Bad_Opcode },
7156 { Bad_Opcode },
7157 { Bad_Opcode },
7158 { Bad_Opcode },
f88c9eb0 7159 /* 68 */
592d1631
L
7160 { Bad_Opcode },
7161 { Bad_Opcode },
7162 { Bad_Opcode },
7163 { Bad_Opcode },
7164 { Bad_Opcode },
7165 { Bad_Opcode },
7166 { Bad_Opcode },
7167 { Bad_Opcode },
f88c9eb0 7168 /* 70 */
592d1631
L
7169 { Bad_Opcode },
7170 { Bad_Opcode },
7171 { Bad_Opcode },
7172 { Bad_Opcode },
7173 { Bad_Opcode },
7174 { Bad_Opcode },
7175 { Bad_Opcode },
7176 { Bad_Opcode },
f88c9eb0 7177 /* 78 */
592d1631
L
7178 { Bad_Opcode },
7179 { Bad_Opcode },
7180 { Bad_Opcode },
7181 { Bad_Opcode },
7182 { Bad_Opcode },
7183 { Bad_Opcode },
7184 { Bad_Opcode },
7185 { Bad_Opcode },
f88c9eb0
SP
7186 /* 80 */
7187 { PREFIX_TABLE (PREFIX_0F3880) },
7188 { PREFIX_TABLE (PREFIX_0F3881) },
6c30d220 7189 { PREFIX_TABLE (PREFIX_0F3882) },
592d1631
L
7190 { Bad_Opcode },
7191 { Bad_Opcode },
7192 { Bad_Opcode },
7193 { Bad_Opcode },
7194 { Bad_Opcode },
f88c9eb0 7195 /* 88 */
592d1631
L
7196 { Bad_Opcode },
7197 { Bad_Opcode },
7198 { Bad_Opcode },
7199 { Bad_Opcode },
7200 { Bad_Opcode },
7201 { Bad_Opcode },
7202 { Bad_Opcode },
7203 { Bad_Opcode },
f88c9eb0 7204 /* 90 */
592d1631
L
7205 { Bad_Opcode },
7206 { Bad_Opcode },
7207 { Bad_Opcode },
7208 { Bad_Opcode },
7209 { Bad_Opcode },
7210 { Bad_Opcode },
7211 { Bad_Opcode },
7212 { Bad_Opcode },
f88c9eb0 7213 /* 98 */
592d1631
L
7214 { Bad_Opcode },
7215 { Bad_Opcode },
7216 { Bad_Opcode },
7217 { Bad_Opcode },
7218 { Bad_Opcode },
7219 { Bad_Opcode },
7220 { Bad_Opcode },
7221 { Bad_Opcode },
f88c9eb0 7222 /* a0 */
592d1631
L
7223 { Bad_Opcode },
7224 { Bad_Opcode },
7225 { Bad_Opcode },
7226 { Bad_Opcode },
7227 { Bad_Opcode },
7228 { Bad_Opcode },
7229 { Bad_Opcode },
7230 { Bad_Opcode },
f88c9eb0 7231 /* a8 */
592d1631
L
7232 { Bad_Opcode },
7233 { Bad_Opcode },
7234 { Bad_Opcode },
7235 { Bad_Opcode },
7236 { Bad_Opcode },
7237 { Bad_Opcode },
7238 { Bad_Opcode },
7239 { Bad_Opcode },
f88c9eb0 7240 /* b0 */
592d1631
L
7241 { Bad_Opcode },
7242 { Bad_Opcode },
7243 { Bad_Opcode },
7244 { Bad_Opcode },
7245 { Bad_Opcode },
7246 { Bad_Opcode },
7247 { Bad_Opcode },
7248 { Bad_Opcode },
f88c9eb0 7249 /* b8 */
592d1631
L
7250 { Bad_Opcode },
7251 { Bad_Opcode },
7252 { Bad_Opcode },
7253 { Bad_Opcode },
7254 { Bad_Opcode },
7255 { Bad_Opcode },
7256 { Bad_Opcode },
7257 { Bad_Opcode },
f88c9eb0 7258 /* c0 */
592d1631
L
7259 { Bad_Opcode },
7260 { Bad_Opcode },
7261 { Bad_Opcode },
7262 { Bad_Opcode },
7263 { Bad_Opcode },
7264 { Bad_Opcode },
7265 { Bad_Opcode },
7266 { Bad_Opcode },
f88c9eb0 7267 /* c8 */
a0046408
L
7268 { PREFIX_TABLE (PREFIX_0F38C8) },
7269 { PREFIX_TABLE (PREFIX_0F38C9) },
7270 { PREFIX_TABLE (PREFIX_0F38CA) },
7271 { PREFIX_TABLE (PREFIX_0F38CB) },
7272 { PREFIX_TABLE (PREFIX_0F38CC) },
7273 { PREFIX_TABLE (PREFIX_0F38CD) },
592d1631
L
7274 { Bad_Opcode },
7275 { Bad_Opcode },
f88c9eb0 7276 /* d0 */
592d1631
L
7277 { Bad_Opcode },
7278 { Bad_Opcode },
7279 { Bad_Opcode },
7280 { Bad_Opcode },
7281 { Bad_Opcode },
7282 { Bad_Opcode },
7283 { Bad_Opcode },
7284 { Bad_Opcode },
f88c9eb0 7285 /* d8 */
592d1631
L
7286 { Bad_Opcode },
7287 { Bad_Opcode },
7288 { Bad_Opcode },
f88c9eb0
SP
7289 { PREFIX_TABLE (PREFIX_0F38DB) },
7290 { PREFIX_TABLE (PREFIX_0F38DC) },
7291 { PREFIX_TABLE (PREFIX_0F38DD) },
7292 { PREFIX_TABLE (PREFIX_0F38DE) },
7293 { PREFIX_TABLE (PREFIX_0F38DF) },
7294 /* e0 */
592d1631
L
7295 { Bad_Opcode },
7296 { Bad_Opcode },
7297 { Bad_Opcode },
7298 { Bad_Opcode },
7299 { Bad_Opcode },
7300 { Bad_Opcode },
7301 { Bad_Opcode },
7302 { Bad_Opcode },
f88c9eb0 7303 /* e8 */
592d1631
L
7304 { Bad_Opcode },
7305 { Bad_Opcode },
7306 { Bad_Opcode },
7307 { Bad_Opcode },
7308 { Bad_Opcode },
7309 { Bad_Opcode },
7310 { Bad_Opcode },
7311 { Bad_Opcode },
f88c9eb0
SP
7312 /* f0 */
7313 { PREFIX_TABLE (PREFIX_0F38F0) },
7314 { PREFIX_TABLE (PREFIX_0F38F1) },
592d1631
L
7315 { Bad_Opcode },
7316 { Bad_Opcode },
7317 { Bad_Opcode },
603555e5 7318 { PREFIX_TABLE (PREFIX_0F38F5) },
e2e1fcde 7319 { PREFIX_TABLE (PREFIX_0F38F6) },
592d1631 7320 { Bad_Opcode },
f88c9eb0 7321 /* f8 */
592d1631
L
7322 { Bad_Opcode },
7323 { Bad_Opcode },
7324 { Bad_Opcode },
7325 { Bad_Opcode },
7326 { Bad_Opcode },
7327 { Bad_Opcode },
7328 { Bad_Opcode },
7329 { Bad_Opcode },
f88c9eb0
SP
7330 },
7331 /* THREE_BYTE_0F3A */
7332 {
7333 /* 00 */
592d1631
L
7334 { Bad_Opcode },
7335 { Bad_Opcode },
7336 { Bad_Opcode },
7337 { Bad_Opcode },
7338 { Bad_Opcode },
7339 { Bad_Opcode },
7340 { Bad_Opcode },
7341 { Bad_Opcode },
f88c9eb0
SP
7342 /* 08 */
7343 { PREFIX_TABLE (PREFIX_0F3A08) },
7344 { PREFIX_TABLE (PREFIX_0F3A09) },
7345 { PREFIX_TABLE (PREFIX_0F3A0A) },
7346 { PREFIX_TABLE (PREFIX_0F3A0B) },
7347 { PREFIX_TABLE (PREFIX_0F3A0C) },
7348 { PREFIX_TABLE (PREFIX_0F3A0D) },
7349 { PREFIX_TABLE (PREFIX_0F3A0E) },
507bd325 7350 { "palignr", { MX, EM, Ib }, PREFIX_OPCODE },
f88c9eb0 7351 /* 10 */
592d1631
L
7352 { Bad_Opcode },
7353 { Bad_Opcode },
7354 { Bad_Opcode },
7355 { Bad_Opcode },
f88c9eb0
SP
7356 { PREFIX_TABLE (PREFIX_0F3A14) },
7357 { PREFIX_TABLE (PREFIX_0F3A15) },
7358 { PREFIX_TABLE (PREFIX_0F3A16) },
7359 { PREFIX_TABLE (PREFIX_0F3A17) },
7360 /* 18 */
592d1631
L
7361 { Bad_Opcode },
7362 { Bad_Opcode },
7363 { Bad_Opcode },
7364 { Bad_Opcode },
7365 { Bad_Opcode },
7366 { Bad_Opcode },
7367 { Bad_Opcode },
7368 { Bad_Opcode },
f88c9eb0
SP
7369 /* 20 */
7370 { PREFIX_TABLE (PREFIX_0F3A20) },
7371 { PREFIX_TABLE (PREFIX_0F3A21) },
7372 { PREFIX_TABLE (PREFIX_0F3A22) },
592d1631
L
7373 { Bad_Opcode },
7374 { Bad_Opcode },
7375 { Bad_Opcode },
7376 { Bad_Opcode },
7377 { Bad_Opcode },
f88c9eb0 7378 /* 28 */
592d1631
L
7379 { Bad_Opcode },
7380 { Bad_Opcode },
7381 { Bad_Opcode },
7382 { Bad_Opcode },
7383 { Bad_Opcode },
7384 { Bad_Opcode },
7385 { Bad_Opcode },
7386 { Bad_Opcode },
f88c9eb0 7387 /* 30 */
592d1631
L
7388 { Bad_Opcode },
7389 { Bad_Opcode },
7390 { Bad_Opcode },
7391 { Bad_Opcode },
7392 { Bad_Opcode },
7393 { Bad_Opcode },
7394 { Bad_Opcode },
7395 { Bad_Opcode },
f88c9eb0 7396 /* 38 */
592d1631
L
7397 { Bad_Opcode },
7398 { Bad_Opcode },
7399 { Bad_Opcode },
7400 { Bad_Opcode },
7401 { Bad_Opcode },
7402 { Bad_Opcode },
7403 { Bad_Opcode },
7404 { Bad_Opcode },
f88c9eb0
SP
7405 /* 40 */
7406 { PREFIX_TABLE (PREFIX_0F3A40) },
7407 { PREFIX_TABLE (PREFIX_0F3A41) },
7408 { PREFIX_TABLE (PREFIX_0F3A42) },
592d1631 7409 { Bad_Opcode },
f88c9eb0 7410 { PREFIX_TABLE (PREFIX_0F3A44) },
592d1631
L
7411 { Bad_Opcode },
7412 { Bad_Opcode },
7413 { Bad_Opcode },
f88c9eb0 7414 /* 48 */
592d1631
L
7415 { Bad_Opcode },
7416 { Bad_Opcode },
7417 { Bad_Opcode },
7418 { Bad_Opcode },
7419 { Bad_Opcode },
7420 { Bad_Opcode },
7421 { Bad_Opcode },
7422 { Bad_Opcode },
f88c9eb0 7423 /* 50 */
592d1631
L
7424 { Bad_Opcode },
7425 { Bad_Opcode },
7426 { Bad_Opcode },
7427 { Bad_Opcode },
7428 { Bad_Opcode },
7429 { Bad_Opcode },
7430 { Bad_Opcode },
7431 { Bad_Opcode },
f88c9eb0 7432 /* 58 */
592d1631
L
7433 { Bad_Opcode },
7434 { Bad_Opcode },
7435 { Bad_Opcode },
7436 { Bad_Opcode },
7437 { Bad_Opcode },
7438 { Bad_Opcode },
7439 { Bad_Opcode },
7440 { Bad_Opcode },
f88c9eb0
SP
7441 /* 60 */
7442 { PREFIX_TABLE (PREFIX_0F3A60) },
7443 { PREFIX_TABLE (PREFIX_0F3A61) },
7444 { PREFIX_TABLE (PREFIX_0F3A62) },
7445 { PREFIX_TABLE (PREFIX_0F3A63) },
592d1631
L
7446 { Bad_Opcode },
7447 { Bad_Opcode },
7448 { Bad_Opcode },
7449 { Bad_Opcode },
f88c9eb0 7450 /* 68 */
592d1631
L
7451 { Bad_Opcode },
7452 { Bad_Opcode },
7453 { Bad_Opcode },
7454 { Bad_Opcode },
7455 { Bad_Opcode },
7456 { Bad_Opcode },
7457 { Bad_Opcode },
7458 { Bad_Opcode },
f88c9eb0 7459 /* 70 */
592d1631
L
7460 { Bad_Opcode },
7461 { Bad_Opcode },
7462 { Bad_Opcode },
7463 { Bad_Opcode },
7464 { Bad_Opcode },
7465 { Bad_Opcode },
7466 { Bad_Opcode },
7467 { Bad_Opcode },
f88c9eb0 7468 /* 78 */
592d1631
L
7469 { Bad_Opcode },
7470 { Bad_Opcode },
7471 { Bad_Opcode },
7472 { Bad_Opcode },
7473 { Bad_Opcode },
7474 { Bad_Opcode },
7475 { Bad_Opcode },
7476 { Bad_Opcode },
f88c9eb0 7477 /* 80 */
592d1631
L
7478 { Bad_Opcode },
7479 { Bad_Opcode },
7480 { Bad_Opcode },
7481 { Bad_Opcode },
7482 { Bad_Opcode },
7483 { Bad_Opcode },
7484 { Bad_Opcode },
7485 { Bad_Opcode },
f88c9eb0 7486 /* 88 */
592d1631
L
7487 { Bad_Opcode },
7488 { Bad_Opcode },
7489 { Bad_Opcode },
7490 { Bad_Opcode },
7491 { Bad_Opcode },
7492 { Bad_Opcode },
7493 { Bad_Opcode },
7494 { Bad_Opcode },
f88c9eb0 7495 /* 90 */
592d1631
L
7496 { Bad_Opcode },
7497 { Bad_Opcode },
7498 { Bad_Opcode },
7499 { Bad_Opcode },
7500 { Bad_Opcode },
7501 { Bad_Opcode },
7502 { Bad_Opcode },
7503 { Bad_Opcode },
f88c9eb0 7504 /* 98 */
592d1631
L
7505 { Bad_Opcode },
7506 { Bad_Opcode },
7507 { Bad_Opcode },
7508 { Bad_Opcode },
7509 { Bad_Opcode },
7510 { Bad_Opcode },
7511 { Bad_Opcode },
7512 { Bad_Opcode },
f88c9eb0 7513 /* a0 */
592d1631
L
7514 { Bad_Opcode },
7515 { Bad_Opcode },
7516 { Bad_Opcode },
7517 { Bad_Opcode },
7518 { Bad_Opcode },
7519 { Bad_Opcode },
7520 { Bad_Opcode },
7521 { Bad_Opcode },
f88c9eb0 7522 /* a8 */
592d1631
L
7523 { Bad_Opcode },
7524 { Bad_Opcode },
7525 { Bad_Opcode },
7526 { Bad_Opcode },
7527 { Bad_Opcode },
7528 { Bad_Opcode },
7529 { Bad_Opcode },
7530 { Bad_Opcode },
f88c9eb0 7531 /* b0 */
592d1631
L
7532 { Bad_Opcode },
7533 { Bad_Opcode },
7534 { Bad_Opcode },
7535 { Bad_Opcode },
7536 { Bad_Opcode },
7537 { Bad_Opcode },
7538 { Bad_Opcode },
7539 { Bad_Opcode },
f88c9eb0 7540 /* b8 */
592d1631
L
7541 { Bad_Opcode },
7542 { Bad_Opcode },
7543 { Bad_Opcode },
7544 { Bad_Opcode },
7545 { Bad_Opcode },
7546 { Bad_Opcode },
7547 { Bad_Opcode },
7548 { Bad_Opcode },
f88c9eb0 7549 /* c0 */
592d1631
L
7550 { Bad_Opcode },
7551 { Bad_Opcode },
7552 { Bad_Opcode },
7553 { Bad_Opcode },
7554 { Bad_Opcode },
7555 { Bad_Opcode },
7556 { Bad_Opcode },
7557 { Bad_Opcode },
f88c9eb0 7558 /* c8 */
592d1631
L
7559 { Bad_Opcode },
7560 { Bad_Opcode },
7561 { Bad_Opcode },
7562 { Bad_Opcode },
a0046408 7563 { PREFIX_TABLE (PREFIX_0F3ACC) },
592d1631
L
7564 { Bad_Opcode },
7565 { Bad_Opcode },
7566 { Bad_Opcode },
f88c9eb0 7567 /* d0 */
592d1631
L
7568 { Bad_Opcode },
7569 { Bad_Opcode },
7570 { Bad_Opcode },
7571 { Bad_Opcode },
7572 { Bad_Opcode },
7573 { Bad_Opcode },
7574 { Bad_Opcode },
7575 { Bad_Opcode },
f88c9eb0 7576 /* d8 */
592d1631
L
7577 { Bad_Opcode },
7578 { Bad_Opcode },
7579 { Bad_Opcode },
7580 { Bad_Opcode },
7581 { Bad_Opcode },
7582 { Bad_Opcode },
7583 { Bad_Opcode },
f88c9eb0
SP
7584 { PREFIX_TABLE (PREFIX_0F3ADF) },
7585 /* e0 */
592d1631
L
7586 { Bad_Opcode },
7587 { Bad_Opcode },
7588 { Bad_Opcode },
7589 { Bad_Opcode },
7590 { Bad_Opcode },
592d1631
L
7591 { Bad_Opcode },
7592 { Bad_Opcode },
7593 { Bad_Opcode },
85f10a01 7594 /* e8 */
592d1631
L
7595 { Bad_Opcode },
7596 { Bad_Opcode },
7597 { Bad_Opcode },
7598 { Bad_Opcode },
7599 { Bad_Opcode },
7600 { Bad_Opcode },
7601 { Bad_Opcode },
7602 { Bad_Opcode },
85f10a01 7603 /* f0 */
592d1631
L
7604 { Bad_Opcode },
7605 { Bad_Opcode },
7606 { Bad_Opcode },
7607 { Bad_Opcode },
7608 { Bad_Opcode },
7609 { Bad_Opcode },
7610 { Bad_Opcode },
7611 { Bad_Opcode },
85f10a01 7612 /* f8 */
592d1631
L
7613 { Bad_Opcode },
7614 { Bad_Opcode },
7615 { Bad_Opcode },
7616 { Bad_Opcode },
7617 { Bad_Opcode },
7618 { Bad_Opcode },
7619 { Bad_Opcode },
7620 { Bad_Opcode },
85f10a01 7621 },
f88c9eb0
SP
7622};
7623
7624static const struct dis386 xop_table[][256] = {
5dd85c99 7625 /* XOP_08 */
85f10a01
MM
7626 {
7627 /* 00 */
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 },
85f10a01 7636 /* 08 */
592d1631
L
7637 { Bad_Opcode },
7638 { Bad_Opcode },
7639 { Bad_Opcode },
7640 { Bad_Opcode },
7641 { Bad_Opcode },
7642 { Bad_Opcode },
7643 { Bad_Opcode },
7644 { Bad_Opcode },
85f10a01 7645 /* 10 */
3929df09 7646 { Bad_Opcode },
592d1631
L
7647 { Bad_Opcode },
7648 { Bad_Opcode },
7649 { Bad_Opcode },
7650 { Bad_Opcode },
7651 { Bad_Opcode },
7652 { Bad_Opcode },
7653 { Bad_Opcode },
85f10a01 7654 /* 18 */
592d1631
L
7655 { Bad_Opcode },
7656 { Bad_Opcode },
7657 { Bad_Opcode },
7658 { Bad_Opcode },
7659 { Bad_Opcode },
7660 { Bad_Opcode },
7661 { Bad_Opcode },
7662 { Bad_Opcode },
85f10a01 7663 /* 20 */
592d1631
L
7664 { Bad_Opcode },
7665 { Bad_Opcode },
7666 { Bad_Opcode },
7667 { Bad_Opcode },
7668 { Bad_Opcode },
7669 { Bad_Opcode },
7670 { Bad_Opcode },
7671 { Bad_Opcode },
85f10a01 7672 /* 28 */
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 },
c0f3af97 7681 /* 30 */
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 },
c0f3af97 7690 /* 38 */
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 },
c0f3af97 7699 /* 40 */
592d1631
L
7700 { Bad_Opcode },
7701 { Bad_Opcode },
7702 { Bad_Opcode },
7703 { Bad_Opcode },
7704 { Bad_Opcode },
7705 { Bad_Opcode },
7706 { Bad_Opcode },
7707 { Bad_Opcode },
85f10a01 7708 /* 48 */
592d1631
L
7709 { Bad_Opcode },
7710 { Bad_Opcode },
7711 { Bad_Opcode },
7712 { Bad_Opcode },
7713 { Bad_Opcode },
7714 { Bad_Opcode },
7715 { Bad_Opcode },
7716 { Bad_Opcode },
c0f3af97 7717 /* 50 */
592d1631
L
7718 { Bad_Opcode },
7719 { Bad_Opcode },
7720 { Bad_Opcode },
7721 { Bad_Opcode },
7722 { Bad_Opcode },
7723 { Bad_Opcode },
7724 { Bad_Opcode },
7725 { Bad_Opcode },
85f10a01 7726 /* 58 */
592d1631
L
7727 { Bad_Opcode },
7728 { Bad_Opcode },
7729 { Bad_Opcode },
7730 { Bad_Opcode },
7731 { Bad_Opcode },
7732 { Bad_Opcode },
7733 { Bad_Opcode },
7734 { Bad_Opcode },
c1e679ec 7735 /* 60 */
592d1631
L
7736 { Bad_Opcode },
7737 { Bad_Opcode },
7738 { Bad_Opcode },
7739 { Bad_Opcode },
7740 { Bad_Opcode },
7741 { Bad_Opcode },
7742 { Bad_Opcode },
7743 { Bad_Opcode },
c0f3af97 7744 /* 68 */
592d1631
L
7745 { Bad_Opcode },
7746 { Bad_Opcode },
7747 { Bad_Opcode },
7748 { Bad_Opcode },
7749 { Bad_Opcode },
7750 { Bad_Opcode },
7751 { Bad_Opcode },
7752 { Bad_Opcode },
85f10a01 7753 /* 70 */
592d1631
L
7754 { Bad_Opcode },
7755 { Bad_Opcode },
7756 { Bad_Opcode },
7757 { Bad_Opcode },
7758 { Bad_Opcode },
7759 { Bad_Opcode },
7760 { Bad_Opcode },
7761 { Bad_Opcode },
85f10a01 7762 /* 78 */
592d1631
L
7763 { Bad_Opcode },
7764 { Bad_Opcode },
7765 { Bad_Opcode },
7766 { Bad_Opcode },
7767 { Bad_Opcode },
7768 { Bad_Opcode },
7769 { Bad_Opcode },
7770 { Bad_Opcode },
85f10a01 7771 /* 80 */
592d1631
L
7772 { Bad_Opcode },
7773 { Bad_Opcode },
7774 { Bad_Opcode },
7775 { Bad_Opcode },
7776 { Bad_Opcode },
bf890a93
IT
7777 { "vpmacssww", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
7778 { "vpmacsswd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
7779 { "vpmacssdql", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
5dd85c99 7780 /* 88 */
592d1631
L
7781 { Bad_Opcode },
7782 { Bad_Opcode },
7783 { Bad_Opcode },
7784 { Bad_Opcode },
7785 { Bad_Opcode },
7786 { Bad_Opcode },
bf890a93
IT
7787 { "vpmacssdd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
7788 { "vpmacssdqh", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
5dd85c99 7789 /* 90 */
592d1631
L
7790 { Bad_Opcode },
7791 { Bad_Opcode },
7792 { Bad_Opcode },
7793 { Bad_Opcode },
7794 { Bad_Opcode },
bf890a93
IT
7795 { "vpmacsww", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
7796 { "vpmacswd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
7797 { "vpmacsdql", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
5dd85c99 7798 /* 98 */
592d1631
L
7799 { Bad_Opcode },
7800 { Bad_Opcode },
7801 { Bad_Opcode },
7802 { Bad_Opcode },
7803 { Bad_Opcode },
7804 { Bad_Opcode },
bf890a93
IT
7805 { "vpmacsdd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
7806 { "vpmacsdqh", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
5dd85c99 7807 /* a0 */
592d1631
L
7808 { Bad_Opcode },
7809 { Bad_Opcode },
bf890a93
IT
7810 { "vpcmov", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
7811 { "vpperm", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
592d1631
L
7812 { Bad_Opcode },
7813 { Bad_Opcode },
bf890a93 7814 { "vpmadcsswd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
592d1631 7815 { Bad_Opcode },
5dd85c99 7816 /* a8 */
592d1631
L
7817 { Bad_Opcode },
7818 { Bad_Opcode },
7819 { Bad_Opcode },
7820 { Bad_Opcode },
7821 { Bad_Opcode },
7822 { Bad_Opcode },
7823 { Bad_Opcode },
7824 { Bad_Opcode },
5dd85c99 7825 /* b0 */
592d1631
L
7826 { Bad_Opcode },
7827 { Bad_Opcode },
7828 { Bad_Opcode },
7829 { Bad_Opcode },
7830 { Bad_Opcode },
7831 { Bad_Opcode },
bf890a93 7832 { "vpmadcswd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
592d1631 7833 { Bad_Opcode },
5dd85c99 7834 /* b8 */
592d1631
L
7835 { Bad_Opcode },
7836 { Bad_Opcode },
7837 { Bad_Opcode },
7838 { Bad_Opcode },
7839 { Bad_Opcode },
7840 { Bad_Opcode },
7841 { Bad_Opcode },
7842 { Bad_Opcode },
5dd85c99 7843 /* c0 */
bf890a93
IT
7844 { "vprotb", { XM, Vex_2src_1, Ib }, 0 },
7845 { "vprotw", { XM, Vex_2src_1, Ib }, 0 },
7846 { "vprotd", { XM, Vex_2src_1, Ib }, 0 },
7847 { "vprotq", { XM, Vex_2src_1, Ib }, 0 },
592d1631
L
7848 { Bad_Opcode },
7849 { Bad_Opcode },
7850 { Bad_Opcode },
7851 { Bad_Opcode },
5dd85c99 7852 /* c8 */
592d1631
L
7853 { Bad_Opcode },
7854 { Bad_Opcode },
7855 { Bad_Opcode },
7856 { Bad_Opcode },
ff688e1f
L
7857 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_CC) },
7858 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_CD) },
7859 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_CE) },
7860 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_CF) },
5dd85c99 7861 /* d0 */
592d1631
L
7862 { Bad_Opcode },
7863 { Bad_Opcode },
7864 { Bad_Opcode },
7865 { Bad_Opcode },
7866 { Bad_Opcode },
7867 { Bad_Opcode },
7868 { Bad_Opcode },
7869 { Bad_Opcode },
5dd85c99 7870 /* d8 */
592d1631
L
7871 { Bad_Opcode },
7872 { Bad_Opcode },
7873 { Bad_Opcode },
7874 { Bad_Opcode },
7875 { Bad_Opcode },
7876 { Bad_Opcode },
7877 { Bad_Opcode },
7878 { Bad_Opcode },
5dd85c99 7879 /* e0 */
592d1631
L
7880 { Bad_Opcode },
7881 { Bad_Opcode },
7882 { Bad_Opcode },
7883 { Bad_Opcode },
7884 { Bad_Opcode },
7885 { Bad_Opcode },
7886 { Bad_Opcode },
7887 { Bad_Opcode },
5dd85c99 7888 /* e8 */
592d1631
L
7889 { Bad_Opcode },
7890 { Bad_Opcode },
7891 { Bad_Opcode },
7892 { Bad_Opcode },
ff688e1f
L
7893 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_EC) },
7894 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_ED) },
7895 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_EE) },
7896 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_EF) },
5dd85c99 7897 /* f0 */
592d1631
L
7898 { Bad_Opcode },
7899 { Bad_Opcode },
7900 { Bad_Opcode },
7901 { Bad_Opcode },
7902 { Bad_Opcode },
7903 { Bad_Opcode },
7904 { Bad_Opcode },
7905 { Bad_Opcode },
5dd85c99 7906 /* f8 */
592d1631
L
7907 { Bad_Opcode },
7908 { Bad_Opcode },
7909 { Bad_Opcode },
7910 { Bad_Opcode },
7911 { Bad_Opcode },
7912 { Bad_Opcode },
7913 { Bad_Opcode },
7914 { Bad_Opcode },
5dd85c99
SP
7915 },
7916 /* XOP_09 */
7917 {
7918 /* 00 */
592d1631 7919 { Bad_Opcode },
2a2a0f38
QN
7920 { REG_TABLE (REG_XOP_TBM_01) },
7921 { REG_TABLE (REG_XOP_TBM_02) },
592d1631
L
7922 { Bad_Opcode },
7923 { Bad_Opcode },
7924 { Bad_Opcode },
7925 { Bad_Opcode },
7926 { Bad_Opcode },
5dd85c99 7927 /* 08 */
592d1631
L
7928 { Bad_Opcode },
7929 { Bad_Opcode },
7930 { Bad_Opcode },
7931 { Bad_Opcode },
7932 { Bad_Opcode },
7933 { Bad_Opcode },
7934 { Bad_Opcode },
7935 { Bad_Opcode },
5dd85c99 7936 /* 10 */
592d1631
L
7937 { Bad_Opcode },
7938 { Bad_Opcode },
5dd85c99 7939 { REG_TABLE (REG_XOP_LWPCB) },
592d1631
L
7940 { Bad_Opcode },
7941 { Bad_Opcode },
7942 { Bad_Opcode },
7943 { Bad_Opcode },
7944 { Bad_Opcode },
5dd85c99 7945 /* 18 */
592d1631
L
7946 { Bad_Opcode },
7947 { Bad_Opcode },
7948 { Bad_Opcode },
7949 { Bad_Opcode },
7950 { Bad_Opcode },
7951 { Bad_Opcode },
7952 { Bad_Opcode },
7953 { Bad_Opcode },
5dd85c99 7954 /* 20 */
592d1631
L
7955 { Bad_Opcode },
7956 { Bad_Opcode },
7957 { Bad_Opcode },
7958 { Bad_Opcode },
7959 { Bad_Opcode },
7960 { Bad_Opcode },
7961 { Bad_Opcode },
7962 { Bad_Opcode },
5dd85c99 7963 /* 28 */
592d1631
L
7964 { Bad_Opcode },
7965 { Bad_Opcode },
7966 { Bad_Opcode },
7967 { Bad_Opcode },
7968 { Bad_Opcode },
7969 { Bad_Opcode },
7970 { Bad_Opcode },
7971 { Bad_Opcode },
5dd85c99 7972 /* 30 */
592d1631
L
7973 { Bad_Opcode },
7974 { Bad_Opcode },
7975 { Bad_Opcode },
7976 { Bad_Opcode },
7977 { Bad_Opcode },
7978 { Bad_Opcode },
7979 { Bad_Opcode },
7980 { Bad_Opcode },
5dd85c99 7981 /* 38 */
592d1631
L
7982 { Bad_Opcode },
7983 { Bad_Opcode },
7984 { Bad_Opcode },
7985 { Bad_Opcode },
7986 { Bad_Opcode },
7987 { Bad_Opcode },
7988 { Bad_Opcode },
7989 { Bad_Opcode },
5dd85c99 7990 /* 40 */
592d1631
L
7991 { Bad_Opcode },
7992 { Bad_Opcode },
7993 { Bad_Opcode },
7994 { Bad_Opcode },
7995 { Bad_Opcode },
7996 { Bad_Opcode },
7997 { Bad_Opcode },
7998 { Bad_Opcode },
5dd85c99 7999 /* 48 */
592d1631
L
8000 { Bad_Opcode },
8001 { Bad_Opcode },
8002 { Bad_Opcode },
8003 { Bad_Opcode },
8004 { Bad_Opcode },
8005 { Bad_Opcode },
8006 { Bad_Opcode },
8007 { Bad_Opcode },
5dd85c99 8008 /* 50 */
592d1631
L
8009 { Bad_Opcode },
8010 { Bad_Opcode },
8011 { Bad_Opcode },
8012 { Bad_Opcode },
8013 { Bad_Opcode },
8014 { Bad_Opcode },
8015 { Bad_Opcode },
8016 { Bad_Opcode },
5dd85c99 8017 /* 58 */
592d1631
L
8018 { Bad_Opcode },
8019 { Bad_Opcode },
8020 { Bad_Opcode },
8021 { Bad_Opcode },
8022 { Bad_Opcode },
8023 { Bad_Opcode },
8024 { Bad_Opcode },
8025 { Bad_Opcode },
5dd85c99 8026 /* 60 */
592d1631
L
8027 { Bad_Opcode },
8028 { Bad_Opcode },
8029 { Bad_Opcode },
8030 { Bad_Opcode },
8031 { Bad_Opcode },
8032 { Bad_Opcode },
8033 { Bad_Opcode },
8034 { Bad_Opcode },
5dd85c99 8035 /* 68 */
592d1631
L
8036 { Bad_Opcode },
8037 { Bad_Opcode },
8038 { Bad_Opcode },
8039 { Bad_Opcode },
8040 { Bad_Opcode },
8041 { Bad_Opcode },
8042 { Bad_Opcode },
8043 { Bad_Opcode },
5dd85c99 8044 /* 70 */
592d1631
L
8045 { Bad_Opcode },
8046 { Bad_Opcode },
8047 { Bad_Opcode },
8048 { Bad_Opcode },
8049 { Bad_Opcode },
8050 { Bad_Opcode },
8051 { Bad_Opcode },
8052 { Bad_Opcode },
5dd85c99 8053 /* 78 */
592d1631
L
8054 { Bad_Opcode },
8055 { Bad_Opcode },
8056 { Bad_Opcode },
8057 { Bad_Opcode },
8058 { Bad_Opcode },
8059 { Bad_Opcode },
8060 { Bad_Opcode },
8061 { Bad_Opcode },
5dd85c99 8062 /* 80 */
592a252b
L
8063 { VEX_LEN_TABLE (VEX_LEN_0FXOP_09_80) },
8064 { VEX_LEN_TABLE (VEX_LEN_0FXOP_09_81) },
bf890a93
IT
8065 { "vfrczss", { XM, EXd }, 0 },
8066 { "vfrczsd", { XM, EXq }, 0 },
592d1631
L
8067 { Bad_Opcode },
8068 { Bad_Opcode },
8069 { Bad_Opcode },
8070 { Bad_Opcode },
5dd85c99 8071 /* 88 */
592d1631
L
8072 { Bad_Opcode },
8073 { Bad_Opcode },
8074 { Bad_Opcode },
8075 { Bad_Opcode },
8076 { Bad_Opcode },
8077 { Bad_Opcode },
8078 { Bad_Opcode },
8079 { Bad_Opcode },
5dd85c99 8080 /* 90 */
bf890a93
IT
8081 { "vprotb", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8082 { "vprotw", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8083 { "vprotd", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8084 { "vprotq", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8085 { "vpshlb", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8086 { "vpshlw", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8087 { "vpshld", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8088 { "vpshlq", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
5dd85c99 8089 /* 98 */
bf890a93
IT
8090 { "vpshab", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8091 { "vpshaw", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8092 { "vpshad", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8093 { "vpshaq", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
592d1631
L
8094 { Bad_Opcode },
8095 { Bad_Opcode },
8096 { Bad_Opcode },
8097 { Bad_Opcode },
5dd85c99 8098 /* a0 */
592d1631
L
8099 { Bad_Opcode },
8100 { Bad_Opcode },
8101 { Bad_Opcode },
8102 { Bad_Opcode },
8103 { Bad_Opcode },
8104 { Bad_Opcode },
8105 { Bad_Opcode },
8106 { Bad_Opcode },
5dd85c99 8107 /* a8 */
592d1631
L
8108 { Bad_Opcode },
8109 { Bad_Opcode },
8110 { Bad_Opcode },
8111 { Bad_Opcode },
8112 { Bad_Opcode },
8113 { Bad_Opcode },
8114 { Bad_Opcode },
8115 { Bad_Opcode },
5dd85c99 8116 /* b0 */
592d1631
L
8117 { Bad_Opcode },
8118 { Bad_Opcode },
8119 { Bad_Opcode },
8120 { Bad_Opcode },
8121 { Bad_Opcode },
8122 { Bad_Opcode },
8123 { Bad_Opcode },
8124 { Bad_Opcode },
5dd85c99 8125 /* b8 */
592d1631
L
8126 { Bad_Opcode },
8127 { Bad_Opcode },
8128 { Bad_Opcode },
8129 { Bad_Opcode },
8130 { Bad_Opcode },
8131 { Bad_Opcode },
8132 { Bad_Opcode },
8133 { Bad_Opcode },
5dd85c99 8134 /* c0 */
592d1631 8135 { Bad_Opcode },
bf890a93
IT
8136 { "vphaddbw", { XM, EXxmm }, 0 },
8137 { "vphaddbd", { XM, EXxmm }, 0 },
8138 { "vphaddbq", { XM, EXxmm }, 0 },
592d1631
L
8139 { Bad_Opcode },
8140 { Bad_Opcode },
bf890a93
IT
8141 { "vphaddwd", { XM, EXxmm }, 0 },
8142 { "vphaddwq", { XM, EXxmm }, 0 },
5dd85c99 8143 /* c8 */
592d1631
L
8144 { Bad_Opcode },
8145 { Bad_Opcode },
8146 { Bad_Opcode },
bf890a93 8147 { "vphadddq", { XM, EXxmm }, 0 },
592d1631
L
8148 { Bad_Opcode },
8149 { Bad_Opcode },
8150 { Bad_Opcode },
8151 { Bad_Opcode },
5dd85c99 8152 /* d0 */
592d1631 8153 { Bad_Opcode },
bf890a93
IT
8154 { "vphaddubw", { XM, EXxmm }, 0 },
8155 { "vphaddubd", { XM, EXxmm }, 0 },
8156 { "vphaddubq", { XM, EXxmm }, 0 },
592d1631
L
8157 { Bad_Opcode },
8158 { Bad_Opcode },
bf890a93
IT
8159 { "vphadduwd", { XM, EXxmm }, 0 },
8160 { "vphadduwq", { XM, EXxmm }, 0 },
5dd85c99 8161 /* d8 */
592d1631
L
8162 { Bad_Opcode },
8163 { Bad_Opcode },
8164 { Bad_Opcode },
bf890a93 8165 { "vphaddudq", { XM, EXxmm }, 0 },
592d1631
L
8166 { Bad_Opcode },
8167 { Bad_Opcode },
8168 { Bad_Opcode },
8169 { Bad_Opcode },
5dd85c99 8170 /* e0 */
592d1631 8171 { Bad_Opcode },
bf890a93
IT
8172 { "vphsubbw", { XM, EXxmm }, 0 },
8173 { "vphsubwd", { XM, EXxmm }, 0 },
8174 { "vphsubdq", { XM, EXxmm }, 0 },
592d1631
L
8175 { Bad_Opcode },
8176 { Bad_Opcode },
8177 { Bad_Opcode },
8178 { Bad_Opcode },
4e7d34a6 8179 /* e8 */
592d1631
L
8180 { Bad_Opcode },
8181 { Bad_Opcode },
8182 { Bad_Opcode },
8183 { Bad_Opcode },
8184 { Bad_Opcode },
8185 { Bad_Opcode },
8186 { Bad_Opcode },
8187 { Bad_Opcode },
4e7d34a6 8188 /* f0 */
592d1631
L
8189 { Bad_Opcode },
8190 { Bad_Opcode },
8191 { Bad_Opcode },
8192 { Bad_Opcode },
8193 { Bad_Opcode },
8194 { Bad_Opcode },
8195 { Bad_Opcode },
8196 { Bad_Opcode },
4e7d34a6 8197 /* f8 */
592d1631
L
8198 { Bad_Opcode },
8199 { Bad_Opcode },
8200 { Bad_Opcode },
8201 { Bad_Opcode },
8202 { Bad_Opcode },
8203 { Bad_Opcode },
8204 { Bad_Opcode },
8205 { Bad_Opcode },
4e7d34a6 8206 },
f88c9eb0 8207 /* XOP_0A */
4e7d34a6
L
8208 {
8209 /* 00 */
592d1631
L
8210 { Bad_Opcode },
8211 { Bad_Opcode },
8212 { Bad_Opcode },
8213 { Bad_Opcode },
8214 { Bad_Opcode },
8215 { Bad_Opcode },
8216 { Bad_Opcode },
8217 { Bad_Opcode },
4e7d34a6 8218 /* 08 */
592d1631
L
8219 { Bad_Opcode },
8220 { Bad_Opcode },
8221 { Bad_Opcode },
8222 { Bad_Opcode },
8223 { Bad_Opcode },
8224 { Bad_Opcode },
8225 { Bad_Opcode },
8226 { Bad_Opcode },
4e7d34a6 8227 /* 10 */
bf890a93 8228 { "bextr", { Gv, Ev, Iq }, 0 },
592d1631 8229 { Bad_Opcode },
f88c9eb0 8230 { REG_TABLE (REG_XOP_LWP) },
592d1631
L
8231 { Bad_Opcode },
8232 { Bad_Opcode },
8233 { Bad_Opcode },
8234 { Bad_Opcode },
8235 { Bad_Opcode },
4e7d34a6 8236 /* 18 */
592d1631
L
8237 { Bad_Opcode },
8238 { Bad_Opcode },
8239 { Bad_Opcode },
8240 { Bad_Opcode },
8241 { Bad_Opcode },
8242 { Bad_Opcode },
8243 { Bad_Opcode },
8244 { Bad_Opcode },
4e7d34a6 8245 /* 20 */
592d1631
L
8246 { Bad_Opcode },
8247 { Bad_Opcode },
8248 { Bad_Opcode },
8249 { Bad_Opcode },
8250 { Bad_Opcode },
8251 { Bad_Opcode },
8252 { Bad_Opcode },
8253 { Bad_Opcode },
4e7d34a6 8254 /* 28 */
592d1631
L
8255 { Bad_Opcode },
8256 { Bad_Opcode },
8257 { Bad_Opcode },
8258 { Bad_Opcode },
8259 { Bad_Opcode },
8260 { Bad_Opcode },
8261 { Bad_Opcode },
8262 { Bad_Opcode },
4e7d34a6 8263 /* 30 */
592d1631
L
8264 { Bad_Opcode },
8265 { Bad_Opcode },
8266 { Bad_Opcode },
8267 { Bad_Opcode },
8268 { Bad_Opcode },
8269 { Bad_Opcode },
8270 { Bad_Opcode },
8271 { Bad_Opcode },
c0f3af97 8272 /* 38 */
592d1631
L
8273 { Bad_Opcode },
8274 { Bad_Opcode },
8275 { Bad_Opcode },
8276 { Bad_Opcode },
8277 { Bad_Opcode },
8278 { Bad_Opcode },
8279 { Bad_Opcode },
8280 { Bad_Opcode },
c0f3af97 8281 /* 40 */
592d1631
L
8282 { Bad_Opcode },
8283 { Bad_Opcode },
8284 { Bad_Opcode },
8285 { Bad_Opcode },
8286 { Bad_Opcode },
8287 { Bad_Opcode },
8288 { Bad_Opcode },
8289 { Bad_Opcode },
c1e679ec 8290 /* 48 */
592d1631
L
8291 { Bad_Opcode },
8292 { Bad_Opcode },
8293 { Bad_Opcode },
8294 { Bad_Opcode },
8295 { Bad_Opcode },
8296 { Bad_Opcode },
8297 { Bad_Opcode },
8298 { Bad_Opcode },
c1e679ec 8299 /* 50 */
592d1631
L
8300 { Bad_Opcode },
8301 { Bad_Opcode },
8302 { Bad_Opcode },
8303 { Bad_Opcode },
8304 { Bad_Opcode },
8305 { Bad_Opcode },
8306 { Bad_Opcode },
8307 { Bad_Opcode },
4e7d34a6 8308 /* 58 */
592d1631
L
8309 { Bad_Opcode },
8310 { Bad_Opcode },
8311 { Bad_Opcode },
8312 { Bad_Opcode },
8313 { Bad_Opcode },
8314 { Bad_Opcode },
8315 { Bad_Opcode },
8316 { Bad_Opcode },
4e7d34a6 8317 /* 60 */
592d1631
L
8318 { Bad_Opcode },
8319 { Bad_Opcode },
8320 { Bad_Opcode },
8321 { Bad_Opcode },
8322 { Bad_Opcode },
8323 { Bad_Opcode },
8324 { Bad_Opcode },
8325 { Bad_Opcode },
4e7d34a6 8326 /* 68 */
592d1631
L
8327 { Bad_Opcode },
8328 { Bad_Opcode },
8329 { Bad_Opcode },
8330 { Bad_Opcode },
8331 { Bad_Opcode },
8332 { Bad_Opcode },
8333 { Bad_Opcode },
8334 { Bad_Opcode },
4e7d34a6 8335 /* 70 */
592d1631
L
8336 { Bad_Opcode },
8337 { Bad_Opcode },
8338 { Bad_Opcode },
8339 { Bad_Opcode },
8340 { Bad_Opcode },
8341 { Bad_Opcode },
8342 { Bad_Opcode },
8343 { Bad_Opcode },
4e7d34a6 8344 /* 78 */
592d1631
L
8345 { Bad_Opcode },
8346 { Bad_Opcode },
8347 { Bad_Opcode },
8348 { Bad_Opcode },
8349 { Bad_Opcode },
8350 { Bad_Opcode },
8351 { Bad_Opcode },
8352 { Bad_Opcode },
4e7d34a6 8353 /* 80 */
592d1631
L
8354 { Bad_Opcode },
8355 { Bad_Opcode },
8356 { Bad_Opcode },
8357 { Bad_Opcode },
8358 { Bad_Opcode },
8359 { Bad_Opcode },
8360 { Bad_Opcode },
8361 { Bad_Opcode },
4e7d34a6 8362 /* 88 */
592d1631
L
8363 { Bad_Opcode },
8364 { Bad_Opcode },
8365 { Bad_Opcode },
8366 { Bad_Opcode },
8367 { Bad_Opcode },
8368 { Bad_Opcode },
8369 { Bad_Opcode },
8370 { Bad_Opcode },
4e7d34a6 8371 /* 90 */
592d1631
L
8372 { Bad_Opcode },
8373 { Bad_Opcode },
8374 { Bad_Opcode },
8375 { Bad_Opcode },
8376 { Bad_Opcode },
8377 { Bad_Opcode },
8378 { Bad_Opcode },
8379 { Bad_Opcode },
4e7d34a6 8380 /* 98 */
592d1631
L
8381 { Bad_Opcode },
8382 { Bad_Opcode },
8383 { Bad_Opcode },
8384 { Bad_Opcode },
8385 { Bad_Opcode },
8386 { Bad_Opcode },
8387 { Bad_Opcode },
8388 { Bad_Opcode },
4e7d34a6 8389 /* a0 */
592d1631
L
8390 { Bad_Opcode },
8391 { Bad_Opcode },
8392 { Bad_Opcode },
8393 { Bad_Opcode },
8394 { Bad_Opcode },
8395 { Bad_Opcode },
8396 { Bad_Opcode },
8397 { Bad_Opcode },
4e7d34a6 8398 /* a8 */
592d1631
L
8399 { Bad_Opcode },
8400 { Bad_Opcode },
8401 { Bad_Opcode },
8402 { Bad_Opcode },
8403 { Bad_Opcode },
8404 { Bad_Opcode },
8405 { Bad_Opcode },
8406 { Bad_Opcode },
d5d7db8e 8407 /* b0 */
592d1631
L
8408 { Bad_Opcode },
8409 { Bad_Opcode },
8410 { Bad_Opcode },
8411 { Bad_Opcode },
8412 { Bad_Opcode },
8413 { Bad_Opcode },
8414 { Bad_Opcode },
8415 { Bad_Opcode },
85f10a01 8416 /* b8 */
592d1631
L
8417 { Bad_Opcode },
8418 { Bad_Opcode },
8419 { Bad_Opcode },
8420 { Bad_Opcode },
8421 { Bad_Opcode },
8422 { Bad_Opcode },
8423 { Bad_Opcode },
8424 { Bad_Opcode },
85f10a01 8425 /* c0 */
592d1631
L
8426 { Bad_Opcode },
8427 { Bad_Opcode },
8428 { Bad_Opcode },
8429 { Bad_Opcode },
8430 { Bad_Opcode },
8431 { Bad_Opcode },
8432 { Bad_Opcode },
8433 { Bad_Opcode },
85f10a01 8434 /* c8 */
592d1631
L
8435 { Bad_Opcode },
8436 { Bad_Opcode },
8437 { Bad_Opcode },
8438 { Bad_Opcode },
8439 { Bad_Opcode },
8440 { Bad_Opcode },
8441 { Bad_Opcode },
8442 { Bad_Opcode },
85f10a01 8443 /* d0 */
592d1631
L
8444 { Bad_Opcode },
8445 { Bad_Opcode },
8446 { Bad_Opcode },
8447 { Bad_Opcode },
8448 { Bad_Opcode },
8449 { Bad_Opcode },
8450 { Bad_Opcode },
8451 { Bad_Opcode },
85f10a01 8452 /* d8 */
592d1631
L
8453 { Bad_Opcode },
8454 { Bad_Opcode },
8455 { Bad_Opcode },
8456 { Bad_Opcode },
8457 { Bad_Opcode },
8458 { Bad_Opcode },
8459 { Bad_Opcode },
8460 { Bad_Opcode },
85f10a01 8461 /* e0 */
592d1631
L
8462 { Bad_Opcode },
8463 { Bad_Opcode },
8464 { Bad_Opcode },
8465 { Bad_Opcode },
8466 { Bad_Opcode },
8467 { Bad_Opcode },
8468 { Bad_Opcode },
8469 { Bad_Opcode },
85f10a01 8470 /* e8 */
592d1631
L
8471 { Bad_Opcode },
8472 { Bad_Opcode },
8473 { Bad_Opcode },
8474 { Bad_Opcode },
8475 { Bad_Opcode },
8476 { Bad_Opcode },
8477 { Bad_Opcode },
8478 { Bad_Opcode },
85f10a01 8479 /* f0 */
592d1631
L
8480 { Bad_Opcode },
8481 { Bad_Opcode },
8482 { Bad_Opcode },
8483 { Bad_Opcode },
8484 { Bad_Opcode },
8485 { Bad_Opcode },
8486 { Bad_Opcode },
8487 { Bad_Opcode },
85f10a01 8488 /* f8 */
592d1631
L
8489 { Bad_Opcode },
8490 { Bad_Opcode },
8491 { Bad_Opcode },
8492 { Bad_Opcode },
8493 { Bad_Opcode },
8494 { Bad_Opcode },
8495 { Bad_Opcode },
8496 { Bad_Opcode },
85f10a01 8497 },
c0f3af97
L
8498};
8499
8500static const struct dis386 vex_table[][256] = {
8501 /* VEX_0F */
85f10a01
MM
8502 {
8503 /* 00 */
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 /* 08 */
592d1631
L
8513 { Bad_Opcode },
8514 { Bad_Opcode },
8515 { Bad_Opcode },
8516 { Bad_Opcode },
8517 { Bad_Opcode },
8518 { Bad_Opcode },
8519 { Bad_Opcode },
8520 { Bad_Opcode },
c0f3af97 8521 /* 10 */
592a252b
L
8522 { PREFIX_TABLE (PREFIX_VEX_0F10) },
8523 { PREFIX_TABLE (PREFIX_VEX_0F11) },
8524 { PREFIX_TABLE (PREFIX_VEX_0F12) },
8525 { MOD_TABLE (MOD_VEX_0F13) },
8526 { VEX_W_TABLE (VEX_W_0F14) },
8527 { VEX_W_TABLE (VEX_W_0F15) },
8528 { PREFIX_TABLE (PREFIX_VEX_0F16) },
8529 { MOD_TABLE (MOD_VEX_0F17) },
c0f3af97 8530 /* 18 */
592d1631
L
8531 { Bad_Opcode },
8532 { Bad_Opcode },
8533 { Bad_Opcode },
8534 { Bad_Opcode },
8535 { Bad_Opcode },
8536 { Bad_Opcode },
8537 { Bad_Opcode },
8538 { Bad_Opcode },
c0f3af97 8539 /* 20 */
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 },
c0f3af97 8548 /* 28 */
592a252b
L
8549 { VEX_W_TABLE (VEX_W_0F28) },
8550 { VEX_W_TABLE (VEX_W_0F29) },
8551 { PREFIX_TABLE (PREFIX_VEX_0F2A) },
8552 { MOD_TABLE (MOD_VEX_0F2B) },
8553 { PREFIX_TABLE (PREFIX_VEX_0F2C) },
8554 { PREFIX_TABLE (PREFIX_VEX_0F2D) },
8555 { PREFIX_TABLE (PREFIX_VEX_0F2E) },
8556 { PREFIX_TABLE (PREFIX_VEX_0F2F) },
85f10a01 8557 /* 30 */
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 },
4e7d34a6 8566 /* 38 */
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 },
d5d7db8e 8575 /* 40 */
592d1631 8576 { Bad_Opcode },
43234a1e
L
8577 { PREFIX_TABLE (PREFIX_VEX_0F41) },
8578 { PREFIX_TABLE (PREFIX_VEX_0F42) },
592d1631 8579 { Bad_Opcode },
43234a1e
L
8580 { PREFIX_TABLE (PREFIX_VEX_0F44) },
8581 { PREFIX_TABLE (PREFIX_VEX_0F45) },
8582 { PREFIX_TABLE (PREFIX_VEX_0F46) },
8583 { PREFIX_TABLE (PREFIX_VEX_0F47) },
85f10a01 8584 /* 48 */
592d1631
L
8585 { Bad_Opcode },
8586 { Bad_Opcode },
1ba585e8 8587 { PREFIX_TABLE (PREFIX_VEX_0F4A) },
43234a1e 8588 { PREFIX_TABLE (PREFIX_VEX_0F4B) },
592d1631
L
8589 { Bad_Opcode },
8590 { Bad_Opcode },
8591 { Bad_Opcode },
8592 { Bad_Opcode },
d5d7db8e 8593 /* 50 */
592a252b
L
8594 { MOD_TABLE (MOD_VEX_0F50) },
8595 { PREFIX_TABLE (PREFIX_VEX_0F51) },
8596 { PREFIX_TABLE (PREFIX_VEX_0F52) },
8597 { PREFIX_TABLE (PREFIX_VEX_0F53) },
bf890a93
IT
8598 { "vandpX", { XM, Vex, EXx }, 0 },
8599 { "vandnpX", { XM, Vex, EXx }, 0 },
8600 { "vorpX", { XM, Vex, EXx }, 0 },
8601 { "vxorpX", { XM, Vex, EXx }, 0 },
c0f3af97 8602 /* 58 */
592a252b
L
8603 { PREFIX_TABLE (PREFIX_VEX_0F58) },
8604 { PREFIX_TABLE (PREFIX_VEX_0F59) },
8605 { PREFIX_TABLE (PREFIX_VEX_0F5A) },
8606 { PREFIX_TABLE (PREFIX_VEX_0F5B) },
8607 { PREFIX_TABLE (PREFIX_VEX_0F5C) },
8608 { PREFIX_TABLE (PREFIX_VEX_0F5D) },
8609 { PREFIX_TABLE (PREFIX_VEX_0F5E) },
8610 { PREFIX_TABLE (PREFIX_VEX_0F5F) },
c0f3af97 8611 /* 60 */
592a252b
L
8612 { PREFIX_TABLE (PREFIX_VEX_0F60) },
8613 { PREFIX_TABLE (PREFIX_VEX_0F61) },
8614 { PREFIX_TABLE (PREFIX_VEX_0F62) },
8615 { PREFIX_TABLE (PREFIX_VEX_0F63) },
8616 { PREFIX_TABLE (PREFIX_VEX_0F64) },
8617 { PREFIX_TABLE (PREFIX_VEX_0F65) },
8618 { PREFIX_TABLE (PREFIX_VEX_0F66) },
8619 { PREFIX_TABLE (PREFIX_VEX_0F67) },
c0f3af97 8620 /* 68 */
592a252b
L
8621 { PREFIX_TABLE (PREFIX_VEX_0F68) },
8622 { PREFIX_TABLE (PREFIX_VEX_0F69) },
8623 { PREFIX_TABLE (PREFIX_VEX_0F6A) },
8624 { PREFIX_TABLE (PREFIX_VEX_0F6B) },
8625 { PREFIX_TABLE (PREFIX_VEX_0F6C) },
8626 { PREFIX_TABLE (PREFIX_VEX_0F6D) },
8627 { PREFIX_TABLE (PREFIX_VEX_0F6E) },
8628 { PREFIX_TABLE (PREFIX_VEX_0F6F) },
c0f3af97 8629 /* 70 */
592a252b
L
8630 { PREFIX_TABLE (PREFIX_VEX_0F70) },
8631 { REG_TABLE (REG_VEX_0F71) },
8632 { REG_TABLE (REG_VEX_0F72) },
8633 { REG_TABLE (REG_VEX_0F73) },
8634 { PREFIX_TABLE (PREFIX_VEX_0F74) },
8635 { PREFIX_TABLE (PREFIX_VEX_0F75) },
8636 { PREFIX_TABLE (PREFIX_VEX_0F76) },
8637 { PREFIX_TABLE (PREFIX_VEX_0F77) },
c0f3af97 8638 /* 78 */
592d1631
L
8639 { Bad_Opcode },
8640 { Bad_Opcode },
8641 { Bad_Opcode },
8642 { Bad_Opcode },
592a252b
L
8643 { PREFIX_TABLE (PREFIX_VEX_0F7C) },
8644 { PREFIX_TABLE (PREFIX_VEX_0F7D) },
8645 { PREFIX_TABLE (PREFIX_VEX_0F7E) },
8646 { PREFIX_TABLE (PREFIX_VEX_0F7F) },
c0f3af97 8647 /* 80 */
592d1631
L
8648 { Bad_Opcode },
8649 { Bad_Opcode },
8650 { Bad_Opcode },
8651 { Bad_Opcode },
8652 { Bad_Opcode },
8653 { Bad_Opcode },
8654 { Bad_Opcode },
8655 { Bad_Opcode },
c0f3af97 8656 /* 88 */
592d1631
L
8657 { Bad_Opcode },
8658 { Bad_Opcode },
8659 { Bad_Opcode },
8660 { Bad_Opcode },
8661 { Bad_Opcode },
8662 { Bad_Opcode },
8663 { Bad_Opcode },
8664 { Bad_Opcode },
c0f3af97 8665 /* 90 */
43234a1e
L
8666 { PREFIX_TABLE (PREFIX_VEX_0F90) },
8667 { PREFIX_TABLE (PREFIX_VEX_0F91) },
8668 { PREFIX_TABLE (PREFIX_VEX_0F92) },
8669 { PREFIX_TABLE (PREFIX_VEX_0F93) },
592d1631
L
8670 { Bad_Opcode },
8671 { Bad_Opcode },
8672 { Bad_Opcode },
8673 { Bad_Opcode },
c0f3af97 8674 /* 98 */
43234a1e 8675 { PREFIX_TABLE (PREFIX_VEX_0F98) },
1ba585e8 8676 { PREFIX_TABLE (PREFIX_VEX_0F99) },
592d1631
L
8677 { Bad_Opcode },
8678 { Bad_Opcode },
8679 { Bad_Opcode },
8680 { Bad_Opcode },
8681 { Bad_Opcode },
8682 { Bad_Opcode },
c0f3af97 8683 /* a0 */
592d1631
L
8684 { Bad_Opcode },
8685 { Bad_Opcode },
8686 { Bad_Opcode },
8687 { Bad_Opcode },
8688 { Bad_Opcode },
8689 { Bad_Opcode },
8690 { Bad_Opcode },
8691 { Bad_Opcode },
c0f3af97 8692 /* a8 */
592d1631
L
8693 { Bad_Opcode },
8694 { Bad_Opcode },
8695 { Bad_Opcode },
8696 { Bad_Opcode },
8697 { Bad_Opcode },
8698 { Bad_Opcode },
592a252b 8699 { REG_TABLE (REG_VEX_0FAE) },
592d1631 8700 { Bad_Opcode },
c0f3af97 8701 /* b0 */
592d1631
L
8702 { Bad_Opcode },
8703 { Bad_Opcode },
8704 { Bad_Opcode },
8705 { Bad_Opcode },
8706 { Bad_Opcode },
8707 { Bad_Opcode },
8708 { Bad_Opcode },
8709 { Bad_Opcode },
c0f3af97 8710 /* b8 */
592d1631
L
8711 { Bad_Opcode },
8712 { Bad_Opcode },
8713 { Bad_Opcode },
8714 { Bad_Opcode },
8715 { Bad_Opcode },
8716 { Bad_Opcode },
8717 { Bad_Opcode },
8718 { Bad_Opcode },
c0f3af97 8719 /* c0 */
592d1631
L
8720 { Bad_Opcode },
8721 { Bad_Opcode },
592a252b 8722 { PREFIX_TABLE (PREFIX_VEX_0FC2) },
592d1631 8723 { Bad_Opcode },
592a252b
L
8724 { PREFIX_TABLE (PREFIX_VEX_0FC4) },
8725 { PREFIX_TABLE (PREFIX_VEX_0FC5) },
bf890a93 8726 { "vshufpX", { XM, Vex, EXx, Ib }, 0 },
592d1631 8727 { Bad_Opcode },
c0f3af97 8728 /* c8 */
592d1631
L
8729 { Bad_Opcode },
8730 { Bad_Opcode },
8731 { Bad_Opcode },
8732 { Bad_Opcode },
8733 { Bad_Opcode },
8734 { Bad_Opcode },
8735 { Bad_Opcode },
8736 { Bad_Opcode },
c0f3af97 8737 /* d0 */
592a252b
L
8738 { PREFIX_TABLE (PREFIX_VEX_0FD0) },
8739 { PREFIX_TABLE (PREFIX_VEX_0FD1) },
8740 { PREFIX_TABLE (PREFIX_VEX_0FD2) },
8741 { PREFIX_TABLE (PREFIX_VEX_0FD3) },
8742 { PREFIX_TABLE (PREFIX_VEX_0FD4) },
8743 { PREFIX_TABLE (PREFIX_VEX_0FD5) },
8744 { PREFIX_TABLE (PREFIX_VEX_0FD6) },
8745 { PREFIX_TABLE (PREFIX_VEX_0FD7) },
c0f3af97 8746 /* d8 */
592a252b
L
8747 { PREFIX_TABLE (PREFIX_VEX_0FD8) },
8748 { PREFIX_TABLE (PREFIX_VEX_0FD9) },
8749 { PREFIX_TABLE (PREFIX_VEX_0FDA) },
8750 { PREFIX_TABLE (PREFIX_VEX_0FDB) },
8751 { PREFIX_TABLE (PREFIX_VEX_0FDC) },
8752 { PREFIX_TABLE (PREFIX_VEX_0FDD) },
8753 { PREFIX_TABLE (PREFIX_VEX_0FDE) },
8754 { PREFIX_TABLE (PREFIX_VEX_0FDF) },
c0f3af97 8755 /* e0 */
592a252b
L
8756 { PREFIX_TABLE (PREFIX_VEX_0FE0) },
8757 { PREFIX_TABLE (PREFIX_VEX_0FE1) },
8758 { PREFIX_TABLE (PREFIX_VEX_0FE2) },
8759 { PREFIX_TABLE (PREFIX_VEX_0FE3) },
8760 { PREFIX_TABLE (PREFIX_VEX_0FE4) },
8761 { PREFIX_TABLE (PREFIX_VEX_0FE5) },
8762 { PREFIX_TABLE (PREFIX_VEX_0FE6) },
8763 { PREFIX_TABLE (PREFIX_VEX_0FE7) },
c0f3af97 8764 /* e8 */
592a252b
L
8765 { PREFIX_TABLE (PREFIX_VEX_0FE8) },
8766 { PREFIX_TABLE (PREFIX_VEX_0FE9) },
8767 { PREFIX_TABLE (PREFIX_VEX_0FEA) },
8768 { PREFIX_TABLE (PREFIX_VEX_0FEB) },
8769 { PREFIX_TABLE (PREFIX_VEX_0FEC) },
8770 { PREFIX_TABLE (PREFIX_VEX_0FED) },
8771 { PREFIX_TABLE (PREFIX_VEX_0FEE) },
8772 { PREFIX_TABLE (PREFIX_VEX_0FEF) },
c0f3af97 8773 /* f0 */
592a252b
L
8774 { PREFIX_TABLE (PREFIX_VEX_0FF0) },
8775 { PREFIX_TABLE (PREFIX_VEX_0FF1) },
8776 { PREFIX_TABLE (PREFIX_VEX_0FF2) },
8777 { PREFIX_TABLE (PREFIX_VEX_0FF3) },
8778 { PREFIX_TABLE (PREFIX_VEX_0FF4) },
8779 { PREFIX_TABLE (PREFIX_VEX_0FF5) },
8780 { PREFIX_TABLE (PREFIX_VEX_0FF6) },
8781 { PREFIX_TABLE (PREFIX_VEX_0FF7) },
c0f3af97 8782 /* f8 */
592a252b
L
8783 { PREFIX_TABLE (PREFIX_VEX_0FF8) },
8784 { PREFIX_TABLE (PREFIX_VEX_0FF9) },
8785 { PREFIX_TABLE (PREFIX_VEX_0FFA) },
8786 { PREFIX_TABLE (PREFIX_VEX_0FFB) },
8787 { PREFIX_TABLE (PREFIX_VEX_0FFC) },
8788 { PREFIX_TABLE (PREFIX_VEX_0FFD) },
8789 { PREFIX_TABLE (PREFIX_VEX_0FFE) },
592d1631 8790 { Bad_Opcode },
c0f3af97
L
8791 },
8792 /* VEX_0F38 */
8793 {
8794 /* 00 */
592a252b
L
8795 { PREFIX_TABLE (PREFIX_VEX_0F3800) },
8796 { PREFIX_TABLE (PREFIX_VEX_0F3801) },
8797 { PREFIX_TABLE (PREFIX_VEX_0F3802) },
8798 { PREFIX_TABLE (PREFIX_VEX_0F3803) },
8799 { PREFIX_TABLE (PREFIX_VEX_0F3804) },
8800 { PREFIX_TABLE (PREFIX_VEX_0F3805) },
8801 { PREFIX_TABLE (PREFIX_VEX_0F3806) },
8802 { PREFIX_TABLE (PREFIX_VEX_0F3807) },
c0f3af97 8803 /* 08 */
592a252b
L
8804 { PREFIX_TABLE (PREFIX_VEX_0F3808) },
8805 { PREFIX_TABLE (PREFIX_VEX_0F3809) },
8806 { PREFIX_TABLE (PREFIX_VEX_0F380A) },
8807 { PREFIX_TABLE (PREFIX_VEX_0F380B) },
8808 { PREFIX_TABLE (PREFIX_VEX_0F380C) },
8809 { PREFIX_TABLE (PREFIX_VEX_0F380D) },
8810 { PREFIX_TABLE (PREFIX_VEX_0F380E) },
8811 { PREFIX_TABLE (PREFIX_VEX_0F380F) },
c0f3af97 8812 /* 10 */
592d1631
L
8813 { Bad_Opcode },
8814 { Bad_Opcode },
8815 { Bad_Opcode },
592a252b 8816 { PREFIX_TABLE (PREFIX_VEX_0F3813) },
592d1631
L
8817 { Bad_Opcode },
8818 { Bad_Opcode },
6c30d220 8819 { PREFIX_TABLE (PREFIX_VEX_0F3816) },
592a252b 8820 { PREFIX_TABLE (PREFIX_VEX_0F3817) },
c0f3af97 8821 /* 18 */
592a252b
L
8822 { PREFIX_TABLE (PREFIX_VEX_0F3818) },
8823 { PREFIX_TABLE (PREFIX_VEX_0F3819) },
8824 { PREFIX_TABLE (PREFIX_VEX_0F381A) },
592d1631 8825 { Bad_Opcode },
592a252b
L
8826 { PREFIX_TABLE (PREFIX_VEX_0F381C) },
8827 { PREFIX_TABLE (PREFIX_VEX_0F381D) },
8828 { PREFIX_TABLE (PREFIX_VEX_0F381E) },
592d1631 8829 { Bad_Opcode },
c0f3af97 8830 /* 20 */
592a252b
L
8831 { PREFIX_TABLE (PREFIX_VEX_0F3820) },
8832 { PREFIX_TABLE (PREFIX_VEX_0F3821) },
8833 { PREFIX_TABLE (PREFIX_VEX_0F3822) },
8834 { PREFIX_TABLE (PREFIX_VEX_0F3823) },
8835 { PREFIX_TABLE (PREFIX_VEX_0F3824) },
8836 { PREFIX_TABLE (PREFIX_VEX_0F3825) },
592d1631
L
8837 { Bad_Opcode },
8838 { Bad_Opcode },
c0f3af97 8839 /* 28 */
592a252b
L
8840 { PREFIX_TABLE (PREFIX_VEX_0F3828) },
8841 { PREFIX_TABLE (PREFIX_VEX_0F3829) },
8842 { PREFIX_TABLE (PREFIX_VEX_0F382A) },
8843 { PREFIX_TABLE (PREFIX_VEX_0F382B) },
8844 { PREFIX_TABLE (PREFIX_VEX_0F382C) },
8845 { PREFIX_TABLE (PREFIX_VEX_0F382D) },
8846 { PREFIX_TABLE (PREFIX_VEX_0F382E) },
8847 { PREFIX_TABLE (PREFIX_VEX_0F382F) },
c0f3af97 8848 /* 30 */
592a252b
L
8849 { PREFIX_TABLE (PREFIX_VEX_0F3830) },
8850 { PREFIX_TABLE (PREFIX_VEX_0F3831) },
8851 { PREFIX_TABLE (PREFIX_VEX_0F3832) },
8852 { PREFIX_TABLE (PREFIX_VEX_0F3833) },
8853 { PREFIX_TABLE (PREFIX_VEX_0F3834) },
8854 { PREFIX_TABLE (PREFIX_VEX_0F3835) },
6c30d220 8855 { PREFIX_TABLE (PREFIX_VEX_0F3836) },
592a252b 8856 { PREFIX_TABLE (PREFIX_VEX_0F3837) },
c0f3af97 8857 /* 38 */
592a252b
L
8858 { PREFIX_TABLE (PREFIX_VEX_0F3838) },
8859 { PREFIX_TABLE (PREFIX_VEX_0F3839) },
8860 { PREFIX_TABLE (PREFIX_VEX_0F383A) },
8861 { PREFIX_TABLE (PREFIX_VEX_0F383B) },
8862 { PREFIX_TABLE (PREFIX_VEX_0F383C) },
8863 { PREFIX_TABLE (PREFIX_VEX_0F383D) },
8864 { PREFIX_TABLE (PREFIX_VEX_0F383E) },
8865 { PREFIX_TABLE (PREFIX_VEX_0F383F) },
c0f3af97 8866 /* 40 */
592a252b
L
8867 { PREFIX_TABLE (PREFIX_VEX_0F3840) },
8868 { PREFIX_TABLE (PREFIX_VEX_0F3841) },
592d1631
L
8869 { Bad_Opcode },
8870 { Bad_Opcode },
8871 { Bad_Opcode },
6c30d220
L
8872 { PREFIX_TABLE (PREFIX_VEX_0F3845) },
8873 { PREFIX_TABLE (PREFIX_VEX_0F3846) },
8874 { PREFIX_TABLE (PREFIX_VEX_0F3847) },
c0f3af97 8875 /* 48 */
592d1631
L
8876 { Bad_Opcode },
8877 { Bad_Opcode },
8878 { Bad_Opcode },
8879 { Bad_Opcode },
8880 { Bad_Opcode },
8881 { Bad_Opcode },
8882 { Bad_Opcode },
8883 { Bad_Opcode },
c0f3af97 8884 /* 50 */
592d1631
L
8885 { Bad_Opcode },
8886 { Bad_Opcode },
8887 { Bad_Opcode },
8888 { Bad_Opcode },
8889 { Bad_Opcode },
8890 { Bad_Opcode },
8891 { Bad_Opcode },
8892 { Bad_Opcode },
c0f3af97 8893 /* 58 */
6c30d220
L
8894 { PREFIX_TABLE (PREFIX_VEX_0F3858) },
8895 { PREFIX_TABLE (PREFIX_VEX_0F3859) },
8896 { PREFIX_TABLE (PREFIX_VEX_0F385A) },
592d1631
L
8897 { Bad_Opcode },
8898 { Bad_Opcode },
8899 { Bad_Opcode },
8900 { Bad_Opcode },
8901 { Bad_Opcode },
c0f3af97 8902 /* 60 */
592d1631
L
8903 { Bad_Opcode },
8904 { Bad_Opcode },
8905 { Bad_Opcode },
8906 { Bad_Opcode },
8907 { Bad_Opcode },
8908 { Bad_Opcode },
8909 { Bad_Opcode },
8910 { Bad_Opcode },
c0f3af97 8911 /* 68 */
592d1631
L
8912 { Bad_Opcode },
8913 { Bad_Opcode },
8914 { Bad_Opcode },
8915 { Bad_Opcode },
8916 { Bad_Opcode },
8917 { Bad_Opcode },
8918 { Bad_Opcode },
8919 { Bad_Opcode },
c0f3af97 8920 /* 70 */
592d1631
L
8921 { Bad_Opcode },
8922 { Bad_Opcode },
8923 { Bad_Opcode },
8924 { Bad_Opcode },
8925 { Bad_Opcode },
8926 { Bad_Opcode },
8927 { Bad_Opcode },
8928 { Bad_Opcode },
c0f3af97 8929 /* 78 */
6c30d220
L
8930 { PREFIX_TABLE (PREFIX_VEX_0F3878) },
8931 { PREFIX_TABLE (PREFIX_VEX_0F3879) },
592d1631
L
8932 { Bad_Opcode },
8933 { Bad_Opcode },
8934 { Bad_Opcode },
8935 { Bad_Opcode },
8936 { Bad_Opcode },
8937 { Bad_Opcode },
c0f3af97 8938 /* 80 */
592d1631
L
8939 { Bad_Opcode },
8940 { Bad_Opcode },
8941 { Bad_Opcode },
8942 { Bad_Opcode },
8943 { Bad_Opcode },
8944 { Bad_Opcode },
8945 { Bad_Opcode },
8946 { Bad_Opcode },
c0f3af97 8947 /* 88 */
592d1631
L
8948 { Bad_Opcode },
8949 { Bad_Opcode },
8950 { Bad_Opcode },
8951 { Bad_Opcode },
6c30d220 8952 { PREFIX_TABLE (PREFIX_VEX_0F388C) },
592d1631 8953 { Bad_Opcode },
6c30d220 8954 { PREFIX_TABLE (PREFIX_VEX_0F388E) },
592d1631 8955 { Bad_Opcode },
c0f3af97 8956 /* 90 */
6c30d220
L
8957 { PREFIX_TABLE (PREFIX_VEX_0F3890) },
8958 { PREFIX_TABLE (PREFIX_VEX_0F3891) },
8959 { PREFIX_TABLE (PREFIX_VEX_0F3892) },
8960 { PREFIX_TABLE (PREFIX_VEX_0F3893) },
592d1631
L
8961 { Bad_Opcode },
8962 { Bad_Opcode },
592a252b
L
8963 { PREFIX_TABLE (PREFIX_VEX_0F3896) },
8964 { PREFIX_TABLE (PREFIX_VEX_0F3897) },
c0f3af97 8965 /* 98 */
592a252b
L
8966 { PREFIX_TABLE (PREFIX_VEX_0F3898) },
8967 { PREFIX_TABLE (PREFIX_VEX_0F3899) },
8968 { PREFIX_TABLE (PREFIX_VEX_0F389A) },
8969 { PREFIX_TABLE (PREFIX_VEX_0F389B) },
8970 { PREFIX_TABLE (PREFIX_VEX_0F389C) },
8971 { PREFIX_TABLE (PREFIX_VEX_0F389D) },
8972 { PREFIX_TABLE (PREFIX_VEX_0F389E) },
8973 { PREFIX_TABLE (PREFIX_VEX_0F389F) },
c0f3af97 8974 /* a0 */
592d1631
L
8975 { Bad_Opcode },
8976 { Bad_Opcode },
8977 { Bad_Opcode },
8978 { Bad_Opcode },
8979 { Bad_Opcode },
8980 { Bad_Opcode },
592a252b
L
8981 { PREFIX_TABLE (PREFIX_VEX_0F38A6) },
8982 { PREFIX_TABLE (PREFIX_VEX_0F38A7) },
c0f3af97 8983 /* a8 */
592a252b
L
8984 { PREFIX_TABLE (PREFIX_VEX_0F38A8) },
8985 { PREFIX_TABLE (PREFIX_VEX_0F38A9) },
8986 { PREFIX_TABLE (PREFIX_VEX_0F38AA) },
8987 { PREFIX_TABLE (PREFIX_VEX_0F38AB) },
8988 { PREFIX_TABLE (PREFIX_VEX_0F38AC) },
8989 { PREFIX_TABLE (PREFIX_VEX_0F38AD) },
8990 { PREFIX_TABLE (PREFIX_VEX_0F38AE) },
8991 { PREFIX_TABLE (PREFIX_VEX_0F38AF) },
c0f3af97 8992 /* b0 */
592d1631
L
8993 { Bad_Opcode },
8994 { Bad_Opcode },
8995 { Bad_Opcode },
8996 { Bad_Opcode },
8997 { Bad_Opcode },
8998 { Bad_Opcode },
592a252b
L
8999 { PREFIX_TABLE (PREFIX_VEX_0F38B6) },
9000 { PREFIX_TABLE (PREFIX_VEX_0F38B7) },
c0f3af97 9001 /* b8 */
592a252b
L
9002 { PREFIX_TABLE (PREFIX_VEX_0F38B8) },
9003 { PREFIX_TABLE (PREFIX_VEX_0F38B9) },
9004 { PREFIX_TABLE (PREFIX_VEX_0F38BA) },
9005 { PREFIX_TABLE (PREFIX_VEX_0F38BB) },
9006 { PREFIX_TABLE (PREFIX_VEX_0F38BC) },
9007 { PREFIX_TABLE (PREFIX_VEX_0F38BD) },
9008 { PREFIX_TABLE (PREFIX_VEX_0F38BE) },
9009 { PREFIX_TABLE (PREFIX_VEX_0F38BF) },
c0f3af97 9010 /* c0 */
592d1631
L
9011 { Bad_Opcode },
9012 { Bad_Opcode },
9013 { Bad_Opcode },
9014 { Bad_Opcode },
9015 { Bad_Opcode },
9016 { Bad_Opcode },
9017 { Bad_Opcode },
9018 { Bad_Opcode },
c0f3af97 9019 /* c8 */
592d1631
L
9020 { Bad_Opcode },
9021 { Bad_Opcode },
9022 { Bad_Opcode },
9023 { Bad_Opcode },
9024 { Bad_Opcode },
9025 { Bad_Opcode },
9026 { Bad_Opcode },
9027 { Bad_Opcode },
c0f3af97 9028 /* d0 */
592d1631
L
9029 { Bad_Opcode },
9030 { Bad_Opcode },
9031 { Bad_Opcode },
9032 { Bad_Opcode },
9033 { Bad_Opcode },
9034 { Bad_Opcode },
9035 { Bad_Opcode },
9036 { Bad_Opcode },
c0f3af97 9037 /* d8 */
592d1631
L
9038 { Bad_Opcode },
9039 { Bad_Opcode },
9040 { Bad_Opcode },
592a252b
L
9041 { PREFIX_TABLE (PREFIX_VEX_0F38DB) },
9042 { PREFIX_TABLE (PREFIX_VEX_0F38DC) },
9043 { PREFIX_TABLE (PREFIX_VEX_0F38DD) },
9044 { PREFIX_TABLE (PREFIX_VEX_0F38DE) },
9045 { PREFIX_TABLE (PREFIX_VEX_0F38DF) },
c0f3af97 9046 /* e0 */
592d1631
L
9047 { Bad_Opcode },
9048 { Bad_Opcode },
9049 { Bad_Opcode },
9050 { Bad_Opcode },
9051 { Bad_Opcode },
9052 { Bad_Opcode },
9053 { Bad_Opcode },
9054 { Bad_Opcode },
c0f3af97 9055 /* e8 */
592d1631
L
9056 { Bad_Opcode },
9057 { Bad_Opcode },
9058 { Bad_Opcode },
9059 { Bad_Opcode },
9060 { Bad_Opcode },
9061 { Bad_Opcode },
9062 { Bad_Opcode },
9063 { Bad_Opcode },
c0f3af97 9064 /* f0 */
592d1631
L
9065 { Bad_Opcode },
9066 { Bad_Opcode },
f12dc422
L
9067 { PREFIX_TABLE (PREFIX_VEX_0F38F2) },
9068 { REG_TABLE (REG_VEX_0F38F3) },
592d1631 9069 { Bad_Opcode },
6c30d220
L
9070 { PREFIX_TABLE (PREFIX_VEX_0F38F5) },
9071 { PREFIX_TABLE (PREFIX_VEX_0F38F6) },
f12dc422 9072 { PREFIX_TABLE (PREFIX_VEX_0F38F7) },
c0f3af97 9073 /* f8 */
592d1631
L
9074 { Bad_Opcode },
9075 { Bad_Opcode },
9076 { Bad_Opcode },
9077 { Bad_Opcode },
9078 { Bad_Opcode },
9079 { Bad_Opcode },
9080 { Bad_Opcode },
9081 { Bad_Opcode },
c0f3af97
L
9082 },
9083 /* VEX_0F3A */
9084 {
9085 /* 00 */
6c30d220
L
9086 { PREFIX_TABLE (PREFIX_VEX_0F3A00) },
9087 { PREFIX_TABLE (PREFIX_VEX_0F3A01) },
9088 { PREFIX_TABLE (PREFIX_VEX_0F3A02) },
592d1631 9089 { Bad_Opcode },
592a252b
L
9090 { PREFIX_TABLE (PREFIX_VEX_0F3A04) },
9091 { PREFIX_TABLE (PREFIX_VEX_0F3A05) },
9092 { PREFIX_TABLE (PREFIX_VEX_0F3A06) },
592d1631 9093 { Bad_Opcode },
c0f3af97 9094 /* 08 */
592a252b
L
9095 { PREFIX_TABLE (PREFIX_VEX_0F3A08) },
9096 { PREFIX_TABLE (PREFIX_VEX_0F3A09) },
9097 { PREFIX_TABLE (PREFIX_VEX_0F3A0A) },
9098 { PREFIX_TABLE (PREFIX_VEX_0F3A0B) },
9099 { PREFIX_TABLE (PREFIX_VEX_0F3A0C) },
9100 { PREFIX_TABLE (PREFIX_VEX_0F3A0D) },
9101 { PREFIX_TABLE (PREFIX_VEX_0F3A0E) },
9102 { PREFIX_TABLE (PREFIX_VEX_0F3A0F) },
c0f3af97 9103 /* 10 */
592d1631
L
9104 { Bad_Opcode },
9105 { Bad_Opcode },
9106 { Bad_Opcode },
9107 { Bad_Opcode },
592a252b
L
9108 { PREFIX_TABLE (PREFIX_VEX_0F3A14) },
9109 { PREFIX_TABLE (PREFIX_VEX_0F3A15) },
9110 { PREFIX_TABLE (PREFIX_VEX_0F3A16) },
9111 { PREFIX_TABLE (PREFIX_VEX_0F3A17) },
c0f3af97 9112 /* 18 */
592a252b
L
9113 { PREFIX_TABLE (PREFIX_VEX_0F3A18) },
9114 { PREFIX_TABLE (PREFIX_VEX_0F3A19) },
592d1631
L
9115 { Bad_Opcode },
9116 { Bad_Opcode },
9117 { Bad_Opcode },
592a252b 9118 { PREFIX_TABLE (PREFIX_VEX_0F3A1D) },
592d1631
L
9119 { Bad_Opcode },
9120 { Bad_Opcode },
c0f3af97 9121 /* 20 */
592a252b
L
9122 { PREFIX_TABLE (PREFIX_VEX_0F3A20) },
9123 { PREFIX_TABLE (PREFIX_VEX_0F3A21) },
9124 { PREFIX_TABLE (PREFIX_VEX_0F3A22) },
592d1631
L
9125 { Bad_Opcode },
9126 { Bad_Opcode },
9127 { Bad_Opcode },
9128 { Bad_Opcode },
9129 { Bad_Opcode },
c0f3af97 9130 /* 28 */
592d1631
L
9131 { Bad_Opcode },
9132 { Bad_Opcode },
9133 { Bad_Opcode },
9134 { Bad_Opcode },
9135 { Bad_Opcode },
9136 { Bad_Opcode },
9137 { Bad_Opcode },
9138 { Bad_Opcode },
c0f3af97 9139 /* 30 */
43234a1e 9140 { PREFIX_TABLE (PREFIX_VEX_0F3A30) },
1ba585e8 9141 { PREFIX_TABLE (PREFIX_VEX_0F3A31) },
43234a1e 9142 { PREFIX_TABLE (PREFIX_VEX_0F3A32) },
1ba585e8 9143 { PREFIX_TABLE (PREFIX_VEX_0F3A33) },
592d1631
L
9144 { Bad_Opcode },
9145 { Bad_Opcode },
9146 { Bad_Opcode },
9147 { Bad_Opcode },
c0f3af97 9148 /* 38 */
6c30d220
L
9149 { PREFIX_TABLE (PREFIX_VEX_0F3A38) },
9150 { PREFIX_TABLE (PREFIX_VEX_0F3A39) },
592d1631
L
9151 { Bad_Opcode },
9152 { Bad_Opcode },
9153 { Bad_Opcode },
9154 { Bad_Opcode },
9155 { Bad_Opcode },
9156 { Bad_Opcode },
c0f3af97 9157 /* 40 */
592a252b
L
9158 { PREFIX_TABLE (PREFIX_VEX_0F3A40) },
9159 { PREFIX_TABLE (PREFIX_VEX_0F3A41) },
9160 { PREFIX_TABLE (PREFIX_VEX_0F3A42) },
592d1631 9161 { Bad_Opcode },
592a252b 9162 { PREFIX_TABLE (PREFIX_VEX_0F3A44) },
592d1631 9163 { Bad_Opcode },
6c30d220 9164 { PREFIX_TABLE (PREFIX_VEX_0F3A46) },
592d1631 9165 { Bad_Opcode },
c0f3af97 9166 /* 48 */
592a252b
L
9167 { PREFIX_TABLE (PREFIX_VEX_0F3A48) },
9168 { PREFIX_TABLE (PREFIX_VEX_0F3A49) },
9169 { PREFIX_TABLE (PREFIX_VEX_0F3A4A) },
9170 { PREFIX_TABLE (PREFIX_VEX_0F3A4B) },
9171 { PREFIX_TABLE (PREFIX_VEX_0F3A4C) },
592d1631
L
9172 { Bad_Opcode },
9173 { Bad_Opcode },
9174 { Bad_Opcode },
c0f3af97 9175 /* 50 */
592d1631
L
9176 { Bad_Opcode },
9177 { Bad_Opcode },
9178 { Bad_Opcode },
9179 { Bad_Opcode },
9180 { Bad_Opcode },
9181 { Bad_Opcode },
9182 { Bad_Opcode },
9183 { Bad_Opcode },
c0f3af97 9184 /* 58 */
592d1631
L
9185 { Bad_Opcode },
9186 { Bad_Opcode },
9187 { Bad_Opcode },
9188 { Bad_Opcode },
592a252b
L
9189 { PREFIX_TABLE (PREFIX_VEX_0F3A5C) },
9190 { PREFIX_TABLE (PREFIX_VEX_0F3A5D) },
9191 { PREFIX_TABLE (PREFIX_VEX_0F3A5E) },
9192 { PREFIX_TABLE (PREFIX_VEX_0F3A5F) },
c0f3af97 9193 /* 60 */
592a252b
L
9194 { PREFIX_TABLE (PREFIX_VEX_0F3A60) },
9195 { PREFIX_TABLE (PREFIX_VEX_0F3A61) },
9196 { PREFIX_TABLE (PREFIX_VEX_0F3A62) },
9197 { PREFIX_TABLE (PREFIX_VEX_0F3A63) },
592d1631
L
9198 { Bad_Opcode },
9199 { Bad_Opcode },
9200 { Bad_Opcode },
9201 { Bad_Opcode },
c0f3af97 9202 /* 68 */
592a252b
L
9203 { PREFIX_TABLE (PREFIX_VEX_0F3A68) },
9204 { PREFIX_TABLE (PREFIX_VEX_0F3A69) },
9205 { PREFIX_TABLE (PREFIX_VEX_0F3A6A) },
9206 { PREFIX_TABLE (PREFIX_VEX_0F3A6B) },
9207 { PREFIX_TABLE (PREFIX_VEX_0F3A6C) },
9208 { PREFIX_TABLE (PREFIX_VEX_0F3A6D) },
9209 { PREFIX_TABLE (PREFIX_VEX_0F3A6E) },
9210 { PREFIX_TABLE (PREFIX_VEX_0F3A6F) },
c0f3af97 9211 /* 70 */
592d1631
L
9212 { Bad_Opcode },
9213 { Bad_Opcode },
9214 { Bad_Opcode },
9215 { Bad_Opcode },
9216 { Bad_Opcode },
9217 { Bad_Opcode },
9218 { Bad_Opcode },
9219 { Bad_Opcode },
c0f3af97 9220 /* 78 */
592a252b
L
9221 { PREFIX_TABLE (PREFIX_VEX_0F3A78) },
9222 { PREFIX_TABLE (PREFIX_VEX_0F3A79) },
9223 { PREFIX_TABLE (PREFIX_VEX_0F3A7A) },
9224 { PREFIX_TABLE (PREFIX_VEX_0F3A7B) },
9225 { PREFIX_TABLE (PREFIX_VEX_0F3A7C) },
9226 { PREFIX_TABLE (PREFIX_VEX_0F3A7D) },
9227 { PREFIX_TABLE (PREFIX_VEX_0F3A7E) },
9228 { PREFIX_TABLE (PREFIX_VEX_0F3A7F) },
c0f3af97 9229 /* 80 */
592d1631
L
9230 { Bad_Opcode },
9231 { Bad_Opcode },
9232 { Bad_Opcode },
9233 { Bad_Opcode },
9234 { Bad_Opcode },
9235 { Bad_Opcode },
9236 { Bad_Opcode },
9237 { Bad_Opcode },
c0f3af97 9238 /* 88 */
592d1631
L
9239 { Bad_Opcode },
9240 { Bad_Opcode },
9241 { Bad_Opcode },
9242 { Bad_Opcode },
9243 { Bad_Opcode },
9244 { Bad_Opcode },
9245 { Bad_Opcode },
9246 { Bad_Opcode },
c0f3af97 9247 /* 90 */
592d1631
L
9248 { Bad_Opcode },
9249 { Bad_Opcode },
9250 { Bad_Opcode },
9251 { Bad_Opcode },
9252 { Bad_Opcode },
9253 { Bad_Opcode },
9254 { Bad_Opcode },
9255 { Bad_Opcode },
c0f3af97 9256 /* 98 */
592d1631
L
9257 { Bad_Opcode },
9258 { Bad_Opcode },
9259 { Bad_Opcode },
9260 { Bad_Opcode },
9261 { Bad_Opcode },
9262 { Bad_Opcode },
9263 { Bad_Opcode },
9264 { Bad_Opcode },
c0f3af97 9265 /* a0 */
592d1631
L
9266 { Bad_Opcode },
9267 { Bad_Opcode },
9268 { Bad_Opcode },
9269 { Bad_Opcode },
9270 { Bad_Opcode },
9271 { Bad_Opcode },
9272 { Bad_Opcode },
9273 { Bad_Opcode },
c0f3af97 9274 /* a8 */
592d1631
L
9275 { Bad_Opcode },
9276 { Bad_Opcode },
9277 { Bad_Opcode },
9278 { Bad_Opcode },
9279 { Bad_Opcode },
9280 { Bad_Opcode },
9281 { Bad_Opcode },
9282 { Bad_Opcode },
c0f3af97 9283 /* b0 */
592d1631
L
9284 { Bad_Opcode },
9285 { Bad_Opcode },
9286 { Bad_Opcode },
9287 { Bad_Opcode },
9288 { Bad_Opcode },
9289 { Bad_Opcode },
9290 { Bad_Opcode },
9291 { Bad_Opcode },
c0f3af97 9292 /* b8 */
592d1631
L
9293 { Bad_Opcode },
9294 { Bad_Opcode },
9295 { Bad_Opcode },
9296 { Bad_Opcode },
9297 { Bad_Opcode },
9298 { Bad_Opcode },
9299 { Bad_Opcode },
9300 { Bad_Opcode },
c0f3af97 9301 /* c0 */
592d1631
L
9302 { Bad_Opcode },
9303 { Bad_Opcode },
9304 { Bad_Opcode },
9305 { Bad_Opcode },
9306 { Bad_Opcode },
9307 { Bad_Opcode },
9308 { Bad_Opcode },
9309 { Bad_Opcode },
c0f3af97 9310 /* c8 */
592d1631
L
9311 { Bad_Opcode },
9312 { Bad_Opcode },
9313 { Bad_Opcode },
9314 { Bad_Opcode },
9315 { Bad_Opcode },
9316 { Bad_Opcode },
9317 { Bad_Opcode },
9318 { Bad_Opcode },
c0f3af97 9319 /* d0 */
592d1631
L
9320 { Bad_Opcode },
9321 { Bad_Opcode },
9322 { Bad_Opcode },
9323 { Bad_Opcode },
9324 { Bad_Opcode },
9325 { Bad_Opcode },
9326 { Bad_Opcode },
9327 { Bad_Opcode },
c0f3af97 9328 /* d8 */
592d1631
L
9329 { Bad_Opcode },
9330 { Bad_Opcode },
9331 { Bad_Opcode },
9332 { Bad_Opcode },
9333 { Bad_Opcode },
9334 { Bad_Opcode },
9335 { Bad_Opcode },
592a252b 9336 { PREFIX_TABLE (PREFIX_VEX_0F3ADF) },
c0f3af97 9337 /* e0 */
592d1631
L
9338 { Bad_Opcode },
9339 { Bad_Opcode },
9340 { Bad_Opcode },
9341 { Bad_Opcode },
9342 { Bad_Opcode },
9343 { Bad_Opcode },
9344 { Bad_Opcode },
9345 { Bad_Opcode },
c0f3af97 9346 /* e8 */
592d1631
L
9347 { Bad_Opcode },
9348 { Bad_Opcode },
9349 { Bad_Opcode },
9350 { Bad_Opcode },
9351 { Bad_Opcode },
9352 { Bad_Opcode },
9353 { Bad_Opcode },
9354 { Bad_Opcode },
c0f3af97 9355 /* f0 */
6c30d220 9356 { PREFIX_TABLE (PREFIX_VEX_0F3AF0) },
592d1631
L
9357 { Bad_Opcode },
9358 { Bad_Opcode },
9359 { Bad_Opcode },
9360 { Bad_Opcode },
9361 { Bad_Opcode },
9362 { Bad_Opcode },
9363 { Bad_Opcode },
c0f3af97 9364 /* f8 */
592d1631
L
9365 { Bad_Opcode },
9366 { Bad_Opcode },
9367 { Bad_Opcode },
9368 { Bad_Opcode },
9369 { Bad_Opcode },
9370 { Bad_Opcode },
9371 { Bad_Opcode },
9372 { Bad_Opcode },
c0f3af97
L
9373 },
9374};
9375
43234a1e
L
9376#define NEED_OPCODE_TABLE
9377#include "i386-dis-evex.h"
9378#undef NEED_OPCODE_TABLE
c0f3af97 9379static const struct dis386 vex_len_table[][2] = {
592a252b 9380 /* VEX_LEN_0F10_P_1 */
c0f3af97 9381 {
592a252b
L
9382 { VEX_W_TABLE (VEX_W_0F10_P_1) },
9383 { VEX_W_TABLE (VEX_W_0F10_P_1) },
c0f3af97
L
9384 },
9385
592a252b 9386 /* VEX_LEN_0F10_P_3 */
c0f3af97 9387 {
592a252b
L
9388 { VEX_W_TABLE (VEX_W_0F10_P_3) },
9389 { VEX_W_TABLE (VEX_W_0F10_P_3) },
c0f3af97
L
9390 },
9391
592a252b 9392 /* VEX_LEN_0F11_P_1 */
c0f3af97 9393 {
592a252b
L
9394 { VEX_W_TABLE (VEX_W_0F11_P_1) },
9395 { VEX_W_TABLE (VEX_W_0F11_P_1) },
c0f3af97
L
9396 },
9397
592a252b 9398 /* VEX_LEN_0F11_P_3 */
c0f3af97 9399 {
592a252b
L
9400 { VEX_W_TABLE (VEX_W_0F11_P_3) },
9401 { VEX_W_TABLE (VEX_W_0F11_P_3) },
c0f3af97
L
9402 },
9403
592a252b 9404 /* VEX_LEN_0F12_P_0_M_0 */
c0f3af97 9405 {
592a252b 9406 { VEX_W_TABLE (VEX_W_0F12_P_0_M_0) },
c0f3af97
L
9407 },
9408
592a252b 9409 /* VEX_LEN_0F12_P_0_M_1 */
c0f3af97 9410 {
592a252b 9411 { VEX_W_TABLE (VEX_W_0F12_P_0_M_1) },
c0f3af97
L
9412 },
9413
592a252b 9414 /* VEX_LEN_0F12_P_2 */
c0f3af97 9415 {
592a252b 9416 { VEX_W_TABLE (VEX_W_0F12_P_2) },
c0f3af97
L
9417 },
9418
592a252b 9419 /* VEX_LEN_0F13_M_0 */
c0f3af97 9420 {
592a252b 9421 { VEX_W_TABLE (VEX_W_0F13_M_0) },
c0f3af97
L
9422 },
9423
592a252b 9424 /* VEX_LEN_0F16_P_0_M_0 */
c0f3af97 9425 {
592a252b 9426 { VEX_W_TABLE (VEX_W_0F16_P_0_M_0) },
c0f3af97
L
9427 },
9428
592a252b 9429 /* VEX_LEN_0F16_P_0_M_1 */
c0f3af97 9430 {
592a252b 9431 { VEX_W_TABLE (VEX_W_0F16_P_0_M_1) },
c0f3af97
L
9432 },
9433
592a252b 9434 /* VEX_LEN_0F16_P_2 */
c0f3af97 9435 {
592a252b 9436 { VEX_W_TABLE (VEX_W_0F16_P_2) },
c0f3af97
L
9437 },
9438
592a252b 9439 /* VEX_LEN_0F17_M_0 */
c0f3af97 9440 {
592a252b 9441 { VEX_W_TABLE (VEX_W_0F17_M_0) },
c0f3af97
L
9442 },
9443
592a252b 9444 /* VEX_LEN_0F2A_P_1 */
c0f3af97 9445 {
bf890a93
IT
9446 { "vcvtsi2ss%LQ", { XMScalar, VexScalar, Ev }, 0 },
9447 { "vcvtsi2ss%LQ", { XMScalar, VexScalar, Ev }, 0 },
c0f3af97
L
9448 },
9449
592a252b 9450 /* VEX_LEN_0F2A_P_3 */
c0f3af97 9451 {
bf890a93
IT
9452 { "vcvtsi2sd%LQ", { XMScalar, VexScalar, Ev }, 0 },
9453 { "vcvtsi2sd%LQ", { XMScalar, VexScalar, Ev }, 0 },
c0f3af97
L
9454 },
9455
592a252b 9456 /* VEX_LEN_0F2C_P_1 */
c0f3af97 9457 {
bf890a93
IT
9458 { "vcvttss2siY", { Gv, EXdScalar }, 0 },
9459 { "vcvttss2siY", { Gv, EXdScalar }, 0 },
c0f3af97
L
9460 },
9461
592a252b 9462 /* VEX_LEN_0F2C_P_3 */
c0f3af97 9463 {
bf890a93
IT
9464 { "vcvttsd2siY", { Gv, EXqScalar }, 0 },
9465 { "vcvttsd2siY", { Gv, EXqScalar }, 0 },
c0f3af97
L
9466 },
9467
592a252b 9468 /* VEX_LEN_0F2D_P_1 */
c0f3af97 9469 {
bf890a93
IT
9470 { "vcvtss2siY", { Gv, EXdScalar }, 0 },
9471 { "vcvtss2siY", { Gv, EXdScalar }, 0 },
c0f3af97
L
9472 },
9473
592a252b 9474 /* VEX_LEN_0F2D_P_3 */
c0f3af97 9475 {
bf890a93
IT
9476 { "vcvtsd2siY", { Gv, EXqScalar }, 0 },
9477 { "vcvtsd2siY", { Gv, EXqScalar }, 0 },
c0f3af97
L
9478 },
9479
592a252b 9480 /* VEX_LEN_0F2E_P_0 */
c0f3af97 9481 {
592a252b
L
9482 { VEX_W_TABLE (VEX_W_0F2E_P_0) },
9483 { VEX_W_TABLE (VEX_W_0F2E_P_0) },
c0f3af97
L
9484 },
9485
592a252b 9486 /* VEX_LEN_0F2E_P_2 */
c0f3af97 9487 {
592a252b
L
9488 { VEX_W_TABLE (VEX_W_0F2E_P_2) },
9489 { VEX_W_TABLE (VEX_W_0F2E_P_2) },
c0f3af97
L
9490 },
9491
592a252b 9492 /* VEX_LEN_0F2F_P_0 */
c0f3af97 9493 {
592a252b
L
9494 { VEX_W_TABLE (VEX_W_0F2F_P_0) },
9495 { VEX_W_TABLE (VEX_W_0F2F_P_0) },
c0f3af97
L
9496 },
9497
592a252b 9498 /* VEX_LEN_0F2F_P_2 */
c0f3af97 9499 {
592a252b
L
9500 { VEX_W_TABLE (VEX_W_0F2F_P_2) },
9501 { VEX_W_TABLE (VEX_W_0F2F_P_2) },
c0f3af97
L
9502 },
9503
43234a1e
L
9504 /* VEX_LEN_0F41_P_0 */
9505 {
9506 { Bad_Opcode },
9507 { VEX_W_TABLE (VEX_W_0F41_P_0_LEN_1) },
9508 },
1ba585e8
IT
9509 /* VEX_LEN_0F41_P_2 */
9510 {
9511 { Bad_Opcode },
9512 { VEX_W_TABLE (VEX_W_0F41_P_2_LEN_1) },
9513 },
43234a1e
L
9514 /* VEX_LEN_0F42_P_0 */
9515 {
9516 { Bad_Opcode },
9517 { VEX_W_TABLE (VEX_W_0F42_P_0_LEN_1) },
9518 },
1ba585e8
IT
9519 /* VEX_LEN_0F42_P_2 */
9520 {
9521 { Bad_Opcode },
9522 { VEX_W_TABLE (VEX_W_0F42_P_2_LEN_1) },
9523 },
43234a1e
L
9524 /* VEX_LEN_0F44_P_0 */
9525 {
9526 { VEX_W_TABLE (VEX_W_0F44_P_0_LEN_0) },
9527 },
1ba585e8
IT
9528 /* VEX_LEN_0F44_P_2 */
9529 {
9530 { VEX_W_TABLE (VEX_W_0F44_P_2_LEN_0) },
9531 },
43234a1e
L
9532 /* VEX_LEN_0F45_P_0 */
9533 {
9534 { Bad_Opcode },
9535 { VEX_W_TABLE (VEX_W_0F45_P_0_LEN_1) },
9536 },
1ba585e8
IT
9537 /* VEX_LEN_0F45_P_2 */
9538 {
9539 { Bad_Opcode },
9540 { VEX_W_TABLE (VEX_W_0F45_P_2_LEN_1) },
9541 },
43234a1e
L
9542 /* VEX_LEN_0F46_P_0 */
9543 {
9544 { Bad_Opcode },
9545 { VEX_W_TABLE (VEX_W_0F46_P_0_LEN_1) },
9546 },
1ba585e8
IT
9547 /* VEX_LEN_0F46_P_2 */
9548 {
9549 { Bad_Opcode },
9550 { VEX_W_TABLE (VEX_W_0F46_P_2_LEN_1) },
9551 },
43234a1e
L
9552 /* VEX_LEN_0F47_P_0 */
9553 {
9554 { Bad_Opcode },
9555 { VEX_W_TABLE (VEX_W_0F47_P_0_LEN_1) },
9556 },
1ba585e8
IT
9557 /* VEX_LEN_0F47_P_2 */
9558 {
9559 { Bad_Opcode },
9560 { VEX_W_TABLE (VEX_W_0F47_P_2_LEN_1) },
9561 },
9562 /* VEX_LEN_0F4A_P_0 */
9563 {
9564 { Bad_Opcode },
9565 { VEX_W_TABLE (VEX_W_0F4A_P_0_LEN_1) },
9566 },
9567 /* VEX_LEN_0F4A_P_2 */
9568 {
9569 { Bad_Opcode },
9570 { VEX_W_TABLE (VEX_W_0F4A_P_2_LEN_1) },
9571 },
9572 /* VEX_LEN_0F4B_P_0 */
9573 {
9574 { Bad_Opcode },
9575 { VEX_W_TABLE (VEX_W_0F4B_P_0_LEN_1) },
9576 },
43234a1e
L
9577 /* VEX_LEN_0F4B_P_2 */
9578 {
9579 { Bad_Opcode },
9580 { VEX_W_TABLE (VEX_W_0F4B_P_2_LEN_1) },
9581 },
9582
592a252b 9583 /* VEX_LEN_0F51_P_1 */
c0f3af97 9584 {
592a252b
L
9585 { VEX_W_TABLE (VEX_W_0F51_P_1) },
9586 { VEX_W_TABLE (VEX_W_0F51_P_1) },
c0f3af97
L
9587 },
9588
592a252b 9589 /* VEX_LEN_0F51_P_3 */
c0f3af97 9590 {
592a252b
L
9591 { VEX_W_TABLE (VEX_W_0F51_P_3) },
9592 { VEX_W_TABLE (VEX_W_0F51_P_3) },
c0f3af97
L
9593 },
9594
592a252b 9595 /* VEX_LEN_0F52_P_1 */
c0f3af97 9596 {
592a252b
L
9597 { VEX_W_TABLE (VEX_W_0F52_P_1) },
9598 { VEX_W_TABLE (VEX_W_0F52_P_1) },
c0f3af97
L
9599 },
9600
592a252b 9601 /* VEX_LEN_0F53_P_1 */
c0f3af97 9602 {
592a252b
L
9603 { VEX_W_TABLE (VEX_W_0F53_P_1) },
9604 { VEX_W_TABLE (VEX_W_0F53_P_1) },
c0f3af97
L
9605 },
9606
592a252b 9607 /* VEX_LEN_0F58_P_1 */
c0f3af97 9608 {
592a252b
L
9609 { VEX_W_TABLE (VEX_W_0F58_P_1) },
9610 { VEX_W_TABLE (VEX_W_0F58_P_1) },
c0f3af97
L
9611 },
9612
592a252b 9613 /* VEX_LEN_0F58_P_3 */
c0f3af97 9614 {
592a252b
L
9615 { VEX_W_TABLE (VEX_W_0F58_P_3) },
9616 { VEX_W_TABLE (VEX_W_0F58_P_3) },
c0f3af97
L
9617 },
9618
592a252b 9619 /* VEX_LEN_0F59_P_1 */
c0f3af97 9620 {
592a252b
L
9621 { VEX_W_TABLE (VEX_W_0F59_P_1) },
9622 { VEX_W_TABLE (VEX_W_0F59_P_1) },
c0f3af97
L
9623 },
9624
592a252b 9625 /* VEX_LEN_0F59_P_3 */
c0f3af97 9626 {
592a252b
L
9627 { VEX_W_TABLE (VEX_W_0F59_P_3) },
9628 { VEX_W_TABLE (VEX_W_0F59_P_3) },
c0f3af97
L
9629 },
9630
592a252b 9631 /* VEX_LEN_0F5A_P_1 */
c0f3af97 9632 {
592a252b
L
9633 { VEX_W_TABLE (VEX_W_0F5A_P_1) },
9634 { VEX_W_TABLE (VEX_W_0F5A_P_1) },
c0f3af97
L
9635 },
9636
592a252b 9637 /* VEX_LEN_0F5A_P_3 */
c0f3af97 9638 {
592a252b
L
9639 { VEX_W_TABLE (VEX_W_0F5A_P_3) },
9640 { VEX_W_TABLE (VEX_W_0F5A_P_3) },
c0f3af97
L
9641 },
9642
592a252b 9643 /* VEX_LEN_0F5C_P_1 */
c0f3af97 9644 {
592a252b
L
9645 { VEX_W_TABLE (VEX_W_0F5C_P_1) },
9646 { VEX_W_TABLE (VEX_W_0F5C_P_1) },
c0f3af97
L
9647 },
9648
592a252b 9649 /* VEX_LEN_0F5C_P_3 */
c0f3af97 9650 {
592a252b
L
9651 { VEX_W_TABLE (VEX_W_0F5C_P_3) },
9652 { VEX_W_TABLE (VEX_W_0F5C_P_3) },
c0f3af97
L
9653 },
9654
592a252b 9655 /* VEX_LEN_0F5D_P_1 */
c0f3af97 9656 {
592a252b
L
9657 { VEX_W_TABLE (VEX_W_0F5D_P_1) },
9658 { VEX_W_TABLE (VEX_W_0F5D_P_1) },
c0f3af97
L
9659 },
9660
592a252b 9661 /* VEX_LEN_0F5D_P_3 */
c0f3af97 9662 {
592a252b
L
9663 { VEX_W_TABLE (VEX_W_0F5D_P_3) },
9664 { VEX_W_TABLE (VEX_W_0F5D_P_3) },
c0f3af97
L
9665 },
9666
592a252b 9667 /* VEX_LEN_0F5E_P_1 */
c0f3af97 9668 {
592a252b
L
9669 { VEX_W_TABLE (VEX_W_0F5E_P_1) },
9670 { VEX_W_TABLE (VEX_W_0F5E_P_1) },
c0f3af97
L
9671 },
9672
592a252b 9673 /* VEX_LEN_0F5E_P_3 */
c0f3af97 9674 {
592a252b
L
9675 { VEX_W_TABLE (VEX_W_0F5E_P_3) },
9676 { VEX_W_TABLE (VEX_W_0F5E_P_3) },
c0f3af97
L
9677 },
9678
592a252b 9679 /* VEX_LEN_0F5F_P_1 */
c0f3af97 9680 {
592a252b
L
9681 { VEX_W_TABLE (VEX_W_0F5F_P_1) },
9682 { VEX_W_TABLE (VEX_W_0F5F_P_1) },
c0f3af97
L
9683 },
9684
592a252b 9685 /* VEX_LEN_0F5F_P_3 */
c0f3af97 9686 {
592a252b
L
9687 { VEX_W_TABLE (VEX_W_0F5F_P_3) },
9688 { VEX_W_TABLE (VEX_W_0F5F_P_3) },
c0f3af97
L
9689 },
9690
592a252b 9691 /* VEX_LEN_0F6E_P_2 */
c0f3af97 9692 {
bf890a93
IT
9693 { "vmovK", { XMScalar, Edq }, 0 },
9694 { "vmovK", { XMScalar, Edq }, 0 },
c0f3af97
L
9695 },
9696
592a252b 9697 /* VEX_LEN_0F7E_P_1 */
c0f3af97 9698 {
592a252b
L
9699 { VEX_W_TABLE (VEX_W_0F7E_P_1) },
9700 { VEX_W_TABLE (VEX_W_0F7E_P_1) },
c0f3af97
L
9701 },
9702
592a252b 9703 /* VEX_LEN_0F7E_P_2 */
c0f3af97 9704 {
bf890a93
IT
9705 { "vmovK", { Edq, XMScalar }, 0 },
9706 { "vmovK", { Edq, XMScalar }, 0 },
c0f3af97
L
9707 },
9708
43234a1e
L
9709 /* VEX_LEN_0F90_P_0 */
9710 {
9711 { VEX_W_TABLE (VEX_W_0F90_P_0_LEN_0) },
9712 },
9713
1ba585e8
IT
9714 /* VEX_LEN_0F90_P_2 */
9715 {
9716 { VEX_W_TABLE (VEX_W_0F90_P_2_LEN_0) },
9717 },
9718
43234a1e
L
9719 /* VEX_LEN_0F91_P_0 */
9720 {
9721 { VEX_W_TABLE (VEX_W_0F91_P_0_LEN_0) },
9722 },
9723
1ba585e8
IT
9724 /* VEX_LEN_0F91_P_2 */
9725 {
9726 { VEX_W_TABLE (VEX_W_0F91_P_2_LEN_0) },
9727 },
9728
43234a1e
L
9729 /* VEX_LEN_0F92_P_0 */
9730 {
9731 { VEX_W_TABLE (VEX_W_0F92_P_0_LEN_0) },
9732 },
9733
90a915bf
IT
9734 /* VEX_LEN_0F92_P_2 */
9735 {
9736 { VEX_W_TABLE (VEX_W_0F92_P_2_LEN_0) },
9737 },
9738
1ba585e8
IT
9739 /* VEX_LEN_0F92_P_3 */
9740 {
9741 { VEX_W_TABLE (VEX_W_0F92_P_3_LEN_0) },
9742 },
9743
43234a1e
L
9744 /* VEX_LEN_0F93_P_0 */
9745 {
9746 { VEX_W_TABLE (VEX_W_0F93_P_0_LEN_0) },
9747 },
9748
90a915bf
IT
9749 /* VEX_LEN_0F93_P_2 */
9750 {
9751 { VEX_W_TABLE (VEX_W_0F93_P_2_LEN_0) },
9752 },
9753
1ba585e8
IT
9754 /* VEX_LEN_0F93_P_3 */
9755 {
9756 { VEX_W_TABLE (VEX_W_0F93_P_3_LEN_0) },
9757 },
9758
43234a1e
L
9759 /* VEX_LEN_0F98_P_0 */
9760 {
9761 { VEX_W_TABLE (VEX_W_0F98_P_0_LEN_0) },
9762 },
9763
1ba585e8
IT
9764 /* VEX_LEN_0F98_P_2 */
9765 {
9766 { VEX_W_TABLE (VEX_W_0F98_P_2_LEN_0) },
9767 },
9768
9769 /* VEX_LEN_0F99_P_0 */
9770 {
9771 { VEX_W_TABLE (VEX_W_0F99_P_0_LEN_0) },
9772 },
9773
9774 /* VEX_LEN_0F99_P_2 */
9775 {
9776 { VEX_W_TABLE (VEX_W_0F99_P_2_LEN_0) },
9777 },
9778
6c30d220 9779 /* VEX_LEN_0FAE_R_2_M_0 */
c0f3af97 9780 {
6c30d220 9781 { VEX_W_TABLE (VEX_W_0FAE_R_2_M_0) },
c0f3af97
L
9782 },
9783
6c30d220 9784 /* VEX_LEN_0FAE_R_3_M_0 */
c0f3af97 9785 {
6c30d220 9786 { VEX_W_TABLE (VEX_W_0FAE_R_3_M_0) },
c0f3af97
L
9787 },
9788
6c30d220 9789 /* VEX_LEN_0FC2_P_1 */
c0f3af97 9790 {
6c30d220
L
9791 { VEX_W_TABLE (VEX_W_0FC2_P_1) },
9792 { VEX_W_TABLE (VEX_W_0FC2_P_1) },
c0f3af97
L
9793 },
9794
6c30d220 9795 /* VEX_LEN_0FC2_P_3 */
c0f3af97 9796 {
6c30d220
L
9797 { VEX_W_TABLE (VEX_W_0FC2_P_3) },
9798 { VEX_W_TABLE (VEX_W_0FC2_P_3) },
c0f3af97
L
9799 },
9800
6c30d220 9801 /* VEX_LEN_0FC4_P_2 */
c0f3af97 9802 {
6c30d220 9803 { VEX_W_TABLE (VEX_W_0FC4_P_2) },
c0f3af97
L
9804 },
9805
6c30d220 9806 /* VEX_LEN_0FC5_P_2 */
c0f3af97 9807 {
6c30d220 9808 { VEX_W_TABLE (VEX_W_0FC5_P_2) },
c0f3af97
L
9809 },
9810
6c30d220 9811 /* VEX_LEN_0FD6_P_2 */
c0f3af97 9812 {
6c30d220
L
9813 { VEX_W_TABLE (VEX_W_0FD6_P_2) },
9814 { VEX_W_TABLE (VEX_W_0FD6_P_2) },
c0f3af97
L
9815 },
9816
6c30d220 9817 /* VEX_LEN_0FF7_P_2 */
c0f3af97 9818 {
6c30d220 9819 { VEX_W_TABLE (VEX_W_0FF7_P_2) },
c0f3af97
L
9820 },
9821
6c30d220 9822 /* VEX_LEN_0F3816_P_2 */
c0f3af97 9823 {
6c30d220
L
9824 { Bad_Opcode },
9825 { VEX_W_TABLE (VEX_W_0F3816_P_2) },
c0f3af97
L
9826 },
9827
6c30d220 9828 /* VEX_LEN_0F3819_P_2 */
c0f3af97 9829 {
6c30d220
L
9830 { Bad_Opcode },
9831 { VEX_W_TABLE (VEX_W_0F3819_P_2) },
c0f3af97
L
9832 },
9833
6c30d220 9834 /* VEX_LEN_0F381A_P_2_M_0 */
c0f3af97 9835 {
6c30d220
L
9836 { Bad_Opcode },
9837 { VEX_W_TABLE (VEX_W_0F381A_P_2_M_0) },
c0f3af97
L
9838 },
9839
6c30d220 9840 /* VEX_LEN_0F3836_P_2 */
c0f3af97 9841 {
6c30d220
L
9842 { Bad_Opcode },
9843 { VEX_W_TABLE (VEX_W_0F3836_P_2) },
c0f3af97
L
9844 },
9845
592a252b 9846 /* VEX_LEN_0F3841_P_2 */
c0f3af97 9847 {
592a252b 9848 { VEX_W_TABLE (VEX_W_0F3841_P_2) },
c0f3af97
L
9849 },
9850
6c30d220
L
9851 /* VEX_LEN_0F385A_P_2_M_0 */
9852 {
9853 { Bad_Opcode },
9854 { VEX_W_TABLE (VEX_W_0F385A_P_2_M_0) },
9855 },
9856
592a252b 9857 /* VEX_LEN_0F38DB_P_2 */
a5ff0eb2 9858 {
592a252b 9859 { VEX_W_TABLE (VEX_W_0F38DB_P_2) },
a5ff0eb2
L
9860 },
9861
592a252b 9862 /* VEX_LEN_0F38DC_P_2 */
a5ff0eb2 9863 {
592a252b 9864 { VEX_W_TABLE (VEX_W_0F38DC_P_2) },
a5ff0eb2
L
9865 },
9866
592a252b 9867 /* VEX_LEN_0F38DD_P_2 */
a5ff0eb2 9868 {
592a252b 9869 { VEX_W_TABLE (VEX_W_0F38DD_P_2) },
a5ff0eb2
L
9870 },
9871
592a252b 9872 /* VEX_LEN_0F38DE_P_2 */
a5ff0eb2 9873 {
592a252b 9874 { VEX_W_TABLE (VEX_W_0F38DE_P_2) },
a5ff0eb2
L
9875 },
9876
592a252b 9877 /* VEX_LEN_0F38DF_P_2 */
a5ff0eb2 9878 {
592a252b 9879 { VEX_W_TABLE (VEX_W_0F38DF_P_2) },
a5ff0eb2
L
9880 },
9881
f12dc422
L
9882 /* VEX_LEN_0F38F2_P_0 */
9883 {
bf890a93 9884 { "andnS", { Gdq, VexGdq, Edq }, 0 },
f12dc422
L
9885 },
9886
9887 /* VEX_LEN_0F38F3_R_1_P_0 */
9888 {
bf890a93 9889 { "blsrS", { VexGdq, Edq }, 0 },
f12dc422
L
9890 },
9891
9892 /* VEX_LEN_0F38F3_R_2_P_0 */
9893 {
bf890a93 9894 { "blsmskS", { VexGdq, Edq }, 0 },
f12dc422
L
9895 },
9896
9897 /* VEX_LEN_0F38F3_R_3_P_0 */
9898 {
bf890a93 9899 { "blsiS", { VexGdq, Edq }, 0 },
f12dc422
L
9900 },
9901
6c30d220
L
9902 /* VEX_LEN_0F38F5_P_0 */
9903 {
bf890a93 9904 { "bzhiS", { Gdq, Edq, VexGdq }, 0 },
6c30d220
L
9905 },
9906
9907 /* VEX_LEN_0F38F5_P_1 */
9908 {
bf890a93 9909 { "pextS", { Gdq, VexGdq, Edq }, 0 },
6c30d220
L
9910 },
9911
9912 /* VEX_LEN_0F38F5_P_3 */
9913 {
bf890a93 9914 { "pdepS", { Gdq, VexGdq, Edq }, 0 },
6c30d220
L
9915 },
9916
9917 /* VEX_LEN_0F38F6_P_3 */
9918 {
bf890a93 9919 { "mulxS", { Gdq, VexGdq, Edq }, 0 },
6c30d220
L
9920 },
9921
f12dc422
L
9922 /* VEX_LEN_0F38F7_P_0 */
9923 {
bf890a93 9924 { "bextrS", { Gdq, Edq, VexGdq }, 0 },
f12dc422
L
9925 },
9926
6c30d220
L
9927 /* VEX_LEN_0F38F7_P_1 */
9928 {
bf890a93 9929 { "sarxS", { Gdq, Edq, VexGdq }, 0 },
6c30d220
L
9930 },
9931
9932 /* VEX_LEN_0F38F7_P_2 */
9933 {
bf890a93 9934 { "shlxS", { Gdq, Edq, VexGdq }, 0 },
6c30d220
L
9935 },
9936
9937 /* VEX_LEN_0F38F7_P_3 */
9938 {
bf890a93 9939 { "shrxS", { Gdq, Edq, VexGdq }, 0 },
6c30d220
L
9940 },
9941
9942 /* VEX_LEN_0F3A00_P_2 */
9943 {
9944 { Bad_Opcode },
9945 { VEX_W_TABLE (VEX_W_0F3A00_P_2) },
9946 },
9947
9948 /* VEX_LEN_0F3A01_P_2 */
9949 {
9950 { Bad_Opcode },
9951 { VEX_W_TABLE (VEX_W_0F3A01_P_2) },
9952 },
9953
592a252b 9954 /* VEX_LEN_0F3A06_P_2 */
c0f3af97 9955 {
592d1631 9956 { Bad_Opcode },
592a252b 9957 { VEX_W_TABLE (VEX_W_0F3A06_P_2) },
c0f3af97
L
9958 },
9959
592a252b 9960 /* VEX_LEN_0F3A0A_P_2 */
c0f3af97 9961 {
592a252b
L
9962 { VEX_W_TABLE (VEX_W_0F3A0A_P_2) },
9963 { VEX_W_TABLE (VEX_W_0F3A0A_P_2) },
c0f3af97
L
9964 },
9965
592a252b 9966 /* VEX_LEN_0F3A0B_P_2 */
c0f3af97 9967 {
592a252b
L
9968 { VEX_W_TABLE (VEX_W_0F3A0B_P_2) },
9969 { VEX_W_TABLE (VEX_W_0F3A0B_P_2) },
c0f3af97
L
9970 },
9971
592a252b 9972 /* VEX_LEN_0F3A14_P_2 */
c0f3af97 9973 {
592a252b 9974 { VEX_W_TABLE (VEX_W_0F3A14_P_2) },
c0f3af97
L
9975 },
9976
592a252b 9977 /* VEX_LEN_0F3A15_P_2 */
c0f3af97 9978 {
592a252b 9979 { VEX_W_TABLE (VEX_W_0F3A15_P_2) },
c0f3af97
L
9980 },
9981
592a252b 9982 /* VEX_LEN_0F3A16_P_2 */
c0f3af97 9983 {
bf890a93 9984 { "vpextrK", { Edq, XM, Ib }, 0 },
c0f3af97
L
9985 },
9986
592a252b 9987 /* VEX_LEN_0F3A17_P_2 */
c0f3af97 9988 {
bf890a93 9989 { "vextractps", { Edqd, XM, Ib }, 0 },
c0f3af97
L
9990 },
9991
592a252b 9992 /* VEX_LEN_0F3A18_P_2 */
c0f3af97 9993 {
592d1631 9994 { Bad_Opcode },
592a252b 9995 { VEX_W_TABLE (VEX_W_0F3A18_P_2) },
c0f3af97
L
9996 },
9997
592a252b 9998 /* VEX_LEN_0F3A19_P_2 */
c0f3af97 9999 {
592d1631 10000 { Bad_Opcode },
592a252b 10001 { VEX_W_TABLE (VEX_W_0F3A19_P_2) },
c0f3af97
L
10002 },
10003
592a252b 10004 /* VEX_LEN_0F3A20_P_2 */
c0f3af97 10005 {
592a252b 10006 { VEX_W_TABLE (VEX_W_0F3A20_P_2) },
c0f3af97
L
10007 },
10008
592a252b 10009 /* VEX_LEN_0F3A21_P_2 */
c0f3af97 10010 {
592a252b 10011 { VEX_W_TABLE (VEX_W_0F3A21_P_2) },
c0f3af97
L
10012 },
10013
592a252b 10014 /* VEX_LEN_0F3A22_P_2 */
c0f3af97 10015 {
bf890a93 10016 { "vpinsrK", { XM, Vex128, Edq, Ib }, 0 },
c0f3af97
L
10017 },
10018
43234a1e
L
10019 /* VEX_LEN_0F3A30_P_2 */
10020 {
10021 { VEX_W_TABLE (VEX_W_0F3A30_P_2_LEN_0) },
10022 },
10023
1ba585e8
IT
10024 /* VEX_LEN_0F3A31_P_2 */
10025 {
10026 { VEX_W_TABLE (VEX_W_0F3A31_P_2_LEN_0) },
10027 },
10028
43234a1e
L
10029 /* VEX_LEN_0F3A32_P_2 */
10030 {
10031 { VEX_W_TABLE (VEX_W_0F3A32_P_2_LEN_0) },
10032 },
10033
1ba585e8
IT
10034 /* VEX_LEN_0F3A33_P_2 */
10035 {
10036 { VEX_W_TABLE (VEX_W_0F3A33_P_2_LEN_0) },
10037 },
10038
6c30d220 10039 /* VEX_LEN_0F3A38_P_2 */
c0f3af97 10040 {
6c30d220
L
10041 { Bad_Opcode },
10042 { VEX_W_TABLE (VEX_W_0F3A38_P_2) },
c0f3af97
L
10043 },
10044
6c30d220 10045 /* VEX_LEN_0F3A39_P_2 */
c0f3af97 10046 {
6c30d220
L
10047 { Bad_Opcode },
10048 { VEX_W_TABLE (VEX_W_0F3A39_P_2) },
10049 },
10050
10051 /* VEX_LEN_0F3A41_P_2 */
10052 {
10053 { VEX_W_TABLE (VEX_W_0F3A41_P_2) },
c0f3af97
L
10054 },
10055
592a252b 10056 /* VEX_LEN_0F3A44_P_2 */
ce2f5b3c 10057 {
592a252b 10058 { VEX_W_TABLE (VEX_W_0F3A44_P_2) },
ce2f5b3c
L
10059 },
10060
6c30d220 10061 /* VEX_LEN_0F3A46_P_2 */
c0f3af97 10062 {
6c30d220
L
10063 { Bad_Opcode },
10064 { VEX_W_TABLE (VEX_W_0F3A46_P_2) },
c0f3af97
L
10065 },
10066
592a252b 10067 /* VEX_LEN_0F3A60_P_2 */
c0f3af97 10068 {
15c7c1d8 10069 { "vpcmpestrm", { XM, { PCMPESTR_Fixup, x_mode }, Ib }, 0 },
c0f3af97
L
10070 },
10071
592a252b 10072 /* VEX_LEN_0F3A61_P_2 */
c0f3af97 10073 {
15c7c1d8 10074 { "vpcmpestri", { XM, { PCMPESTR_Fixup, x_mode }, Ib }, 0 },
c0f3af97
L
10075 },
10076
592a252b 10077 /* VEX_LEN_0F3A62_P_2 */
c0f3af97 10078 {
592a252b 10079 { VEX_W_TABLE (VEX_W_0F3A62_P_2) },
c0f3af97
L
10080 },
10081
592a252b 10082 /* VEX_LEN_0F3A63_P_2 */
c0f3af97 10083 {
592a252b 10084 { VEX_W_TABLE (VEX_W_0F3A63_P_2) },
c0f3af97
L
10085 },
10086
592a252b 10087 /* VEX_LEN_0F3A6A_P_2 */
922d8de8 10088 {
bf890a93 10089 { "vfmaddss", { XMVexW, Vex128, EXdVexW, EXdVexW, VexI4 }, 0 },
922d8de8
DR
10090 },
10091
592a252b 10092 /* VEX_LEN_0F3A6B_P_2 */
922d8de8 10093 {
bf890a93 10094 { "vfmaddsd", { XMVexW, Vex128, EXqVexW, EXqVexW, VexI4 }, 0 },
922d8de8
DR
10095 },
10096
592a252b 10097 /* VEX_LEN_0F3A6E_P_2 */
922d8de8 10098 {
bf890a93 10099 { "vfmsubss", { XMVexW, Vex128, EXdVexW, EXdVexW, VexI4 }, 0 },
922d8de8
DR
10100 },
10101
592a252b 10102 /* VEX_LEN_0F3A6F_P_2 */
922d8de8 10103 {
bf890a93 10104 { "vfmsubsd", { XMVexW, Vex128, EXqVexW, EXqVexW, VexI4 }, 0 },
922d8de8
DR
10105 },
10106
592a252b 10107 /* VEX_LEN_0F3A7A_P_2 */
922d8de8 10108 {
bf890a93 10109 { "vfnmaddss", { XMVexW, Vex128, EXdVexW, EXdVexW, VexI4 }, 0 },
922d8de8
DR
10110 },
10111
592a252b 10112 /* VEX_LEN_0F3A7B_P_2 */
922d8de8 10113 {
bf890a93 10114 { "vfnmaddsd", { XMVexW, Vex128, EXqVexW, EXqVexW, VexI4 }, 0 },
922d8de8
DR
10115 },
10116
592a252b 10117 /* VEX_LEN_0F3A7E_P_2 */
922d8de8 10118 {
bf890a93 10119 { "vfnmsubss", { XMVexW, Vex128, EXdVexW, EXdVexW, VexI4 }, 0 },
922d8de8
DR
10120 },
10121
592a252b 10122 /* VEX_LEN_0F3A7F_P_2 */
922d8de8 10123 {
bf890a93 10124 { "vfnmsubsd", { XMVexW, Vex128, EXqVexW, EXqVexW, VexI4 }, 0 },
922d8de8
DR
10125 },
10126
592a252b 10127 /* VEX_LEN_0F3ADF_P_2 */
a5ff0eb2 10128 {
592a252b 10129 { VEX_W_TABLE (VEX_W_0F3ADF_P_2) },
a5ff0eb2 10130 },
4c807e72 10131
6c30d220
L
10132 /* VEX_LEN_0F3AF0_P_3 */
10133 {
bf890a93 10134 { "rorxS", { Gdq, Edq, Ib }, 0 },
6c30d220
L
10135 },
10136
ff688e1f
L
10137 /* VEX_LEN_0FXOP_08_CC */
10138 {
bf890a93 10139 { "vpcomb", { XM, Vex128, EXx, Ib }, 0 },
ff688e1f
L
10140 },
10141
10142 /* VEX_LEN_0FXOP_08_CD */
10143 {
bf890a93 10144 { "vpcomw", { XM, Vex128, EXx, Ib }, 0 },
ff688e1f
L
10145 },
10146
10147 /* VEX_LEN_0FXOP_08_CE */
10148 {
bf890a93 10149 { "vpcomd", { XM, Vex128, EXx, Ib }, 0 },
ff688e1f
L
10150 },
10151
10152 /* VEX_LEN_0FXOP_08_CF */
10153 {
bf890a93 10154 { "vpcomq", { XM, Vex128, EXx, Ib }, 0 },
ff688e1f
L
10155 },
10156
10157 /* VEX_LEN_0FXOP_08_EC */
10158 {
bf890a93 10159 { "vpcomub", { XM, Vex128, EXx, Ib }, 0 },
ff688e1f
L
10160 },
10161
10162 /* VEX_LEN_0FXOP_08_ED */
10163 {
bf890a93 10164 { "vpcomuw", { XM, Vex128, EXx, Ib }, 0 },
ff688e1f
L
10165 },
10166
10167 /* VEX_LEN_0FXOP_08_EE */
10168 {
bf890a93 10169 { "vpcomud", { XM, Vex128, EXx, Ib }, 0 },
ff688e1f
L
10170 },
10171
10172 /* VEX_LEN_0FXOP_08_EF */
10173 {
bf890a93 10174 { "vpcomuq", { XM, Vex128, EXx, Ib }, 0 },
ff688e1f
L
10175 },
10176
592a252b 10177 /* VEX_LEN_0FXOP_09_80 */
5dd85c99 10178 {
bf890a93
IT
10179 { "vfrczps", { XM, EXxmm }, 0 },
10180 { "vfrczps", { XM, EXymmq }, 0 },
5dd85c99 10181 },
4c807e72 10182
592a252b 10183 /* VEX_LEN_0FXOP_09_81 */
5dd85c99 10184 {
bf890a93
IT
10185 { "vfrczpd", { XM, EXxmm }, 0 },
10186 { "vfrczpd", { XM, EXymmq }, 0 },
5dd85c99 10187 },
331d2d0d
L
10188};
10189
9e30b8e0 10190static const struct dis386 vex_w_table[][2] = {
b844680a 10191 {
592a252b 10192 /* VEX_W_0F10_P_0 */
bf890a93 10193 { "vmovups", { XM, EXx }, 0 },
d8faab4e
L
10194 },
10195 {
592a252b 10196 /* VEX_W_0F10_P_1 */
bf890a93 10197 { "vmovss", { XMVexScalar, VexScalar, EXdScalar }, 0 },
d8faab4e
L
10198 },
10199 {
592a252b 10200 /* VEX_W_0F10_P_2 */
bf890a93 10201 { "vmovupd", { XM, EXx }, 0 },
d8faab4e
L
10202 },
10203 {
592a252b 10204 /* VEX_W_0F10_P_3 */
bf890a93 10205 { "vmovsd", { XMVexScalar, VexScalar, EXqScalar }, 0 },
d8faab4e
L
10206 },
10207 {
592a252b 10208 /* VEX_W_0F11_P_0 */
bf890a93 10209 { "vmovups", { EXxS, XM }, 0 },
d8faab4e
L
10210 },
10211 {
592a252b 10212 /* VEX_W_0F11_P_1 */
bf890a93 10213 { "vmovss", { EXdVexScalarS, VexScalar, XMScalar }, 0 },
b844680a
L
10214 },
10215 {
592a252b 10216 /* VEX_W_0F11_P_2 */
bf890a93 10217 { "vmovupd", { EXxS, XM }, 0 },
b844680a
L
10218 },
10219 {
592a252b 10220 /* VEX_W_0F11_P_3 */
bf890a93 10221 { "vmovsd", { EXqVexScalarS, VexScalar, XMScalar }, 0 },
d8faab4e
L
10222 },
10223 {
592a252b 10224 /* VEX_W_0F12_P_0_M_0 */
bf890a93 10225 { "vmovlps", { XM, Vex128, EXq }, 0 },
b844680a
L
10226 },
10227 {
592a252b 10228 /* VEX_W_0F12_P_0_M_1 */
bf890a93 10229 { "vmovhlps", { XM, Vex128, EXq }, 0 },
b844680a
L
10230 },
10231 {
592a252b 10232 /* VEX_W_0F12_P_1 */
bf890a93 10233 { "vmovsldup", { XM, EXx }, 0 },
b844680a
L
10234 },
10235 {
592a252b 10236 /* VEX_W_0F12_P_2 */
bf890a93 10237 { "vmovlpd", { XM, Vex128, EXq }, 0 },
b844680a
L
10238 },
10239 {
592a252b 10240 /* VEX_W_0F12_P_3 */
bf890a93 10241 { "vmovddup", { XM, EXymmq }, 0 },
b844680a
L
10242 },
10243 {
592a252b 10244 /* VEX_W_0F13_M_0 */
bf890a93 10245 { "vmovlpX", { EXq, XM }, 0 },
b844680a
L
10246 },
10247 {
592a252b 10248 /* VEX_W_0F14 */
bf890a93 10249 { "vunpcklpX", { XM, Vex, EXx }, 0 },
b844680a
L
10250 },
10251 {
592a252b 10252 /* VEX_W_0F15 */
bf890a93 10253 { "vunpckhpX", { XM, Vex, EXx }, 0 },
b844680a
L
10254 },
10255 {
592a252b 10256 /* VEX_W_0F16_P_0_M_0 */
bf890a93 10257 { "vmovhps", { XM, Vex128, EXq }, 0 },
9e30b8e0
L
10258 },
10259 {
592a252b 10260 /* VEX_W_0F16_P_0_M_1 */
bf890a93 10261 { "vmovlhps", { XM, Vex128, EXq }, 0 },
9e30b8e0
L
10262 },
10263 {
592a252b 10264 /* VEX_W_0F16_P_1 */
bf890a93 10265 { "vmovshdup", { XM, EXx }, 0 },
9e30b8e0
L
10266 },
10267 {
592a252b 10268 /* VEX_W_0F16_P_2 */
bf890a93 10269 { "vmovhpd", { XM, Vex128, EXq }, 0 },
9e30b8e0
L
10270 },
10271 {
592a252b 10272 /* VEX_W_0F17_M_0 */
bf890a93 10273 { "vmovhpX", { EXq, XM }, 0 },
9e30b8e0
L
10274 },
10275 {
592a252b 10276 /* VEX_W_0F28 */
bf890a93 10277 { "vmovapX", { XM, EXx }, 0 },
9e30b8e0
L
10278 },
10279 {
592a252b 10280 /* VEX_W_0F29 */
bf890a93 10281 { "vmovapX", { EXxS, XM }, 0 },
9e30b8e0
L
10282 },
10283 {
592a252b 10284 /* VEX_W_0F2B_M_0 */
bf890a93 10285 { "vmovntpX", { Mx, XM }, 0 },
9e30b8e0
L
10286 },
10287 {
592a252b 10288 /* VEX_W_0F2E_P_0 */
bf890a93 10289 { "vucomiss", { XMScalar, EXdScalar }, 0 },
9e30b8e0
L
10290 },
10291 {
592a252b 10292 /* VEX_W_0F2E_P_2 */
bf890a93 10293 { "vucomisd", { XMScalar, EXqScalar }, 0 },
9e30b8e0
L
10294 },
10295 {
592a252b 10296 /* VEX_W_0F2F_P_0 */
bf890a93 10297 { "vcomiss", { XMScalar, EXdScalar }, 0 },
9e30b8e0
L
10298 },
10299 {
592a252b 10300 /* VEX_W_0F2F_P_2 */
bf890a93 10301 { "vcomisd", { XMScalar, EXqScalar }, 0 },
9e30b8e0 10302 },
43234a1e
L
10303 {
10304 /* VEX_W_0F41_P_0_LEN_1 */
ab4e4ed5
AF
10305 { MOD_TABLE (MOD_VEX_W_0_0F41_P_0_LEN_1) },
10306 { MOD_TABLE (MOD_VEX_W_1_0F41_P_0_LEN_1) },
1ba585e8
IT
10307 },
10308 {
10309 /* VEX_W_0F41_P_2_LEN_1 */
ab4e4ed5
AF
10310 { MOD_TABLE (MOD_VEX_W_0_0F41_P_2_LEN_1) },
10311 { MOD_TABLE (MOD_VEX_W_1_0F41_P_2_LEN_1) }
43234a1e
L
10312 },
10313 {
10314 /* VEX_W_0F42_P_0_LEN_1 */
ab4e4ed5
AF
10315 { MOD_TABLE (MOD_VEX_W_0_0F42_P_0_LEN_1) },
10316 { MOD_TABLE (MOD_VEX_W_1_0F42_P_0_LEN_1) },
1ba585e8
IT
10317 },
10318 {
10319 /* VEX_W_0F42_P_2_LEN_1 */
ab4e4ed5
AF
10320 { MOD_TABLE (MOD_VEX_W_0_0F42_P_2_LEN_1) },
10321 { MOD_TABLE (MOD_VEX_W_1_0F42_P_2_LEN_1) },
43234a1e
L
10322 },
10323 {
10324 /* VEX_W_0F44_P_0_LEN_0 */
ab4e4ed5
AF
10325 { MOD_TABLE (MOD_VEX_W_0_0F44_P_0_LEN_1) },
10326 { MOD_TABLE (MOD_VEX_W_1_0F44_P_0_LEN_1) },
1ba585e8
IT
10327 },
10328 {
10329 /* VEX_W_0F44_P_2_LEN_0 */
ab4e4ed5
AF
10330 { MOD_TABLE (MOD_VEX_W_0_0F44_P_2_LEN_1) },
10331 { MOD_TABLE (MOD_VEX_W_1_0F44_P_2_LEN_1) },
43234a1e
L
10332 },
10333 {
10334 /* VEX_W_0F45_P_0_LEN_1 */
ab4e4ed5
AF
10335 { MOD_TABLE (MOD_VEX_W_0_0F45_P_0_LEN_1) },
10336 { MOD_TABLE (MOD_VEX_W_1_0F45_P_0_LEN_1) },
1ba585e8
IT
10337 },
10338 {
10339 /* VEX_W_0F45_P_2_LEN_1 */
ab4e4ed5
AF
10340 { MOD_TABLE (MOD_VEX_W_0_0F45_P_2_LEN_1) },
10341 { MOD_TABLE (MOD_VEX_W_1_0F45_P_2_LEN_1) },
43234a1e
L
10342 },
10343 {
10344 /* VEX_W_0F46_P_0_LEN_1 */
ab4e4ed5
AF
10345 { MOD_TABLE (MOD_VEX_W_0_0F46_P_0_LEN_1) },
10346 { MOD_TABLE (MOD_VEX_W_1_0F46_P_0_LEN_1) },
1ba585e8
IT
10347 },
10348 {
10349 /* VEX_W_0F46_P_2_LEN_1 */
ab4e4ed5
AF
10350 { MOD_TABLE (MOD_VEX_W_0_0F46_P_2_LEN_1) },
10351 { MOD_TABLE (MOD_VEX_W_1_0F46_P_2_LEN_1) },
43234a1e
L
10352 },
10353 {
10354 /* VEX_W_0F47_P_0_LEN_1 */
ab4e4ed5
AF
10355 { MOD_TABLE (MOD_VEX_W_0_0F47_P_0_LEN_1) },
10356 { MOD_TABLE (MOD_VEX_W_1_0F47_P_0_LEN_1) },
1ba585e8
IT
10357 },
10358 {
10359 /* VEX_W_0F47_P_2_LEN_1 */
ab4e4ed5
AF
10360 { MOD_TABLE (MOD_VEX_W_0_0F47_P_2_LEN_1) },
10361 { MOD_TABLE (MOD_VEX_W_1_0F47_P_2_LEN_1) },
1ba585e8
IT
10362 },
10363 {
10364 /* VEX_W_0F4A_P_0_LEN_1 */
ab4e4ed5
AF
10365 { MOD_TABLE (MOD_VEX_W_0_0F4A_P_0_LEN_1) },
10366 { MOD_TABLE (MOD_VEX_W_1_0F4A_P_0_LEN_1) },
1ba585e8
IT
10367 },
10368 {
10369 /* VEX_W_0F4A_P_2_LEN_1 */
ab4e4ed5
AF
10370 { MOD_TABLE (MOD_VEX_W_0_0F4A_P_2_LEN_1) },
10371 { MOD_TABLE (MOD_VEX_W_1_0F4A_P_2_LEN_1) },
1ba585e8
IT
10372 },
10373 {
10374 /* VEX_W_0F4B_P_0_LEN_1 */
ab4e4ed5
AF
10375 { MOD_TABLE (MOD_VEX_W_0_0F4B_P_0_LEN_1) },
10376 { MOD_TABLE (MOD_VEX_W_1_0F4B_P_0_LEN_1) },
43234a1e
L
10377 },
10378 {
10379 /* VEX_W_0F4B_P_2_LEN_1 */
ab4e4ed5 10380 { MOD_TABLE (MOD_VEX_W_0_0F4B_P_2_LEN_1) },
43234a1e 10381 },
9e30b8e0 10382 {
592a252b 10383 /* VEX_W_0F50_M_0 */
bf890a93 10384 { "vmovmskpX", { Gdq, XS }, 0 },
9e30b8e0
L
10385 },
10386 {
592a252b 10387 /* VEX_W_0F51_P_0 */
bf890a93 10388 { "vsqrtps", { XM, EXx }, 0 },
9e30b8e0
L
10389 },
10390 {
592a252b 10391 /* VEX_W_0F51_P_1 */
bf890a93 10392 { "vsqrtss", { XMScalar, VexScalar, EXdScalar }, 0 },
9e30b8e0
L
10393 },
10394 {
592a252b 10395 /* VEX_W_0F51_P_2 */
bf890a93 10396 { "vsqrtpd", { XM, EXx }, 0 },
9e30b8e0
L
10397 },
10398 {
592a252b 10399 /* VEX_W_0F51_P_3 */
bf890a93 10400 { "vsqrtsd", { XMScalar, VexScalar, EXqScalar }, 0 },
9e30b8e0
L
10401 },
10402 {
592a252b 10403 /* VEX_W_0F52_P_0 */
bf890a93 10404 { "vrsqrtps", { XM, EXx }, 0 },
9e30b8e0
L
10405 },
10406 {
592a252b 10407 /* VEX_W_0F52_P_1 */
bf890a93 10408 { "vrsqrtss", { XMScalar, VexScalar, EXdScalar }, 0 },
9e30b8e0
L
10409 },
10410 {
592a252b 10411 /* VEX_W_0F53_P_0 */
bf890a93 10412 { "vrcpps", { XM, EXx }, 0 },
9e30b8e0
L
10413 },
10414 {
592a252b 10415 /* VEX_W_0F53_P_1 */
bf890a93 10416 { "vrcpss", { XMScalar, VexScalar, EXdScalar }, 0 },
9e30b8e0
L
10417 },
10418 {
592a252b 10419 /* VEX_W_0F58_P_0 */
bf890a93 10420 { "vaddps", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10421 },
10422 {
592a252b 10423 /* VEX_W_0F58_P_1 */
bf890a93 10424 { "vaddss", { XMScalar, VexScalar, EXdScalar }, 0 },
9e30b8e0
L
10425 },
10426 {
592a252b 10427 /* VEX_W_0F58_P_2 */
bf890a93 10428 { "vaddpd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10429 },
10430 {
592a252b 10431 /* VEX_W_0F58_P_3 */
bf890a93 10432 { "vaddsd", { XMScalar, VexScalar, EXqScalar }, 0 },
9e30b8e0
L
10433 },
10434 {
592a252b 10435 /* VEX_W_0F59_P_0 */
bf890a93 10436 { "vmulps", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10437 },
10438 {
592a252b 10439 /* VEX_W_0F59_P_1 */
bf890a93 10440 { "vmulss", { XMScalar, VexScalar, EXdScalar }, 0 },
9e30b8e0
L
10441 },
10442 {
592a252b 10443 /* VEX_W_0F59_P_2 */
bf890a93 10444 { "vmulpd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10445 },
10446 {
592a252b 10447 /* VEX_W_0F59_P_3 */
bf890a93 10448 { "vmulsd", { XMScalar, VexScalar, EXqScalar }, 0 },
9e30b8e0
L
10449 },
10450 {
592a252b 10451 /* VEX_W_0F5A_P_0 */
bf890a93 10452 { "vcvtps2pd", { XM, EXxmmq }, 0 },
9e30b8e0
L
10453 },
10454 {
592a252b 10455 /* VEX_W_0F5A_P_1 */
bf890a93 10456 { "vcvtss2sd", { XMScalar, VexScalar, EXdScalar }, 0 },
9e30b8e0
L
10457 },
10458 {
592a252b 10459 /* VEX_W_0F5A_P_3 */
bf890a93 10460 { "vcvtsd2ss", { XMScalar, VexScalar, EXqScalar }, 0 },
9e30b8e0
L
10461 },
10462 {
592a252b 10463 /* VEX_W_0F5B_P_0 */
bf890a93 10464 { "vcvtdq2ps", { XM, EXx }, 0 },
9e30b8e0
L
10465 },
10466 {
592a252b 10467 /* VEX_W_0F5B_P_1 */
bf890a93 10468 { "vcvttps2dq", { XM, EXx }, 0 },
9e30b8e0
L
10469 },
10470 {
592a252b 10471 /* VEX_W_0F5B_P_2 */
bf890a93 10472 { "vcvtps2dq", { XM, EXx }, 0 },
9e30b8e0
L
10473 },
10474 {
592a252b 10475 /* VEX_W_0F5C_P_0 */
bf890a93 10476 { "vsubps", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10477 },
10478 {
592a252b 10479 /* VEX_W_0F5C_P_1 */
bf890a93 10480 { "vsubss", { XMScalar, VexScalar, EXdScalar }, 0 },
9e30b8e0
L
10481 },
10482 {
592a252b 10483 /* VEX_W_0F5C_P_2 */
bf890a93 10484 { "vsubpd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10485 },
10486 {
592a252b 10487 /* VEX_W_0F5C_P_3 */
bf890a93 10488 { "vsubsd", { XMScalar, VexScalar, EXqScalar }, 0 },
9e30b8e0
L
10489 },
10490 {
592a252b 10491 /* VEX_W_0F5D_P_0 */
bf890a93 10492 { "vminps", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10493 },
10494 {
592a252b 10495 /* VEX_W_0F5D_P_1 */
bf890a93 10496 { "vminss", { XMScalar, VexScalar, EXdScalar }, 0 },
9e30b8e0
L
10497 },
10498 {
592a252b 10499 /* VEX_W_0F5D_P_2 */
bf890a93 10500 { "vminpd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10501 },
10502 {
592a252b 10503 /* VEX_W_0F5D_P_3 */
bf890a93 10504 { "vminsd", { XMScalar, VexScalar, EXqScalar }, 0 },
9e30b8e0
L
10505 },
10506 {
592a252b 10507 /* VEX_W_0F5E_P_0 */
bf890a93 10508 { "vdivps", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10509 },
10510 {
592a252b 10511 /* VEX_W_0F5E_P_1 */
bf890a93 10512 { "vdivss", { XMScalar, VexScalar, EXdScalar }, 0 },
9e30b8e0
L
10513 },
10514 {
592a252b 10515 /* VEX_W_0F5E_P_2 */
bf890a93 10516 { "vdivpd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10517 },
10518 {
592a252b 10519 /* VEX_W_0F5E_P_3 */
bf890a93 10520 { "vdivsd", { XMScalar, VexScalar, EXqScalar }, 0 },
9e30b8e0
L
10521 },
10522 {
592a252b 10523 /* VEX_W_0F5F_P_0 */
bf890a93 10524 { "vmaxps", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10525 },
10526 {
592a252b 10527 /* VEX_W_0F5F_P_1 */
bf890a93 10528 { "vmaxss", { XMScalar, VexScalar, EXdScalar }, 0 },
9e30b8e0
L
10529 },
10530 {
592a252b 10531 /* VEX_W_0F5F_P_2 */
bf890a93 10532 { "vmaxpd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10533 },
10534 {
592a252b 10535 /* VEX_W_0F5F_P_3 */
bf890a93 10536 { "vmaxsd", { XMScalar, VexScalar, EXqScalar }, 0 },
9e30b8e0
L
10537 },
10538 {
592a252b 10539 /* VEX_W_0F60_P_2 */
bf890a93 10540 { "vpunpcklbw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10541 },
10542 {
592a252b 10543 /* VEX_W_0F61_P_2 */
bf890a93 10544 { "vpunpcklwd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10545 },
10546 {
592a252b 10547 /* VEX_W_0F62_P_2 */
bf890a93 10548 { "vpunpckldq", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10549 },
10550 {
592a252b 10551 /* VEX_W_0F63_P_2 */
bf890a93 10552 { "vpacksswb", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10553 },
10554 {
592a252b 10555 /* VEX_W_0F64_P_2 */
bf890a93 10556 { "vpcmpgtb", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10557 },
10558 {
592a252b 10559 /* VEX_W_0F65_P_2 */
bf890a93 10560 { "vpcmpgtw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10561 },
10562 {
592a252b 10563 /* VEX_W_0F66_P_2 */
bf890a93 10564 { "vpcmpgtd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10565 },
10566 {
592a252b 10567 /* VEX_W_0F67_P_2 */
bf890a93 10568 { "vpackuswb", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10569 },
10570 {
592a252b 10571 /* VEX_W_0F68_P_2 */
bf890a93 10572 { "vpunpckhbw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10573 },
10574 {
592a252b 10575 /* VEX_W_0F69_P_2 */
bf890a93 10576 { "vpunpckhwd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10577 },
10578 {
592a252b 10579 /* VEX_W_0F6A_P_2 */
bf890a93 10580 { "vpunpckhdq", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10581 },
10582 {
592a252b 10583 /* VEX_W_0F6B_P_2 */
bf890a93 10584 { "vpackssdw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10585 },
10586 {
592a252b 10587 /* VEX_W_0F6C_P_2 */
bf890a93 10588 { "vpunpcklqdq", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10589 },
10590 {
592a252b 10591 /* VEX_W_0F6D_P_2 */
bf890a93 10592 { "vpunpckhqdq", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10593 },
10594 {
592a252b 10595 /* VEX_W_0F6F_P_1 */
bf890a93 10596 { "vmovdqu", { XM, EXx }, 0 },
9e30b8e0
L
10597 },
10598 {
592a252b 10599 /* VEX_W_0F6F_P_2 */
bf890a93 10600 { "vmovdqa", { XM, EXx }, 0 },
9e30b8e0
L
10601 },
10602 {
592a252b 10603 /* VEX_W_0F70_P_1 */
bf890a93 10604 { "vpshufhw", { XM, EXx, Ib }, 0 },
9e30b8e0
L
10605 },
10606 {
592a252b 10607 /* VEX_W_0F70_P_2 */
bf890a93 10608 { "vpshufd", { XM, EXx, Ib }, 0 },
9e30b8e0
L
10609 },
10610 {
592a252b 10611 /* VEX_W_0F70_P_3 */
bf890a93 10612 { "vpshuflw", { XM, EXx, Ib }, 0 },
9e30b8e0
L
10613 },
10614 {
592a252b 10615 /* VEX_W_0F71_R_2_P_2 */
bf890a93 10616 { "vpsrlw", { Vex, XS, Ib }, 0 },
9e30b8e0
L
10617 },
10618 {
592a252b 10619 /* VEX_W_0F71_R_4_P_2 */
bf890a93 10620 { "vpsraw", { Vex, XS, Ib }, 0 },
9e30b8e0
L
10621 },
10622 {
592a252b 10623 /* VEX_W_0F71_R_6_P_2 */
bf890a93 10624 { "vpsllw", { Vex, XS, Ib }, 0 },
9e30b8e0
L
10625 },
10626 {
592a252b 10627 /* VEX_W_0F72_R_2_P_2 */
bf890a93 10628 { "vpsrld", { Vex, XS, Ib }, 0 },
9e30b8e0
L
10629 },
10630 {
592a252b 10631 /* VEX_W_0F72_R_4_P_2 */
bf890a93 10632 { "vpsrad", { Vex, XS, Ib }, 0 },
9e30b8e0
L
10633 },
10634 {
592a252b 10635 /* VEX_W_0F72_R_6_P_2 */
bf890a93 10636 { "vpslld", { Vex, XS, Ib }, 0 },
9e30b8e0
L
10637 },
10638 {
592a252b 10639 /* VEX_W_0F73_R_2_P_2 */
bf890a93 10640 { "vpsrlq", { Vex, XS, Ib }, 0 },
9e30b8e0
L
10641 },
10642 {
592a252b 10643 /* VEX_W_0F73_R_3_P_2 */
bf890a93 10644 { "vpsrldq", { Vex, XS, Ib }, 0 },
9e30b8e0
L
10645 },
10646 {
592a252b 10647 /* VEX_W_0F73_R_6_P_2 */
bf890a93 10648 { "vpsllq", { Vex, XS, Ib }, 0 },
9e30b8e0
L
10649 },
10650 {
592a252b 10651 /* VEX_W_0F73_R_7_P_2 */
bf890a93 10652 { "vpslldq", { Vex, XS, Ib }, 0 },
9e30b8e0
L
10653 },
10654 {
592a252b 10655 /* VEX_W_0F74_P_2 */
bf890a93 10656 { "vpcmpeqb", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10657 },
10658 {
592a252b 10659 /* VEX_W_0F75_P_2 */
bf890a93 10660 { "vpcmpeqw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10661 },
10662 {
592a252b 10663 /* VEX_W_0F76_P_2 */
bf890a93 10664 { "vpcmpeqd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10665 },
10666 {
592a252b 10667 /* VEX_W_0F77_P_0 */
bf890a93 10668 { "", { VZERO }, 0 },
9e30b8e0
L
10669 },
10670 {
592a252b 10671 /* VEX_W_0F7C_P_2 */
bf890a93 10672 { "vhaddpd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10673 },
10674 {
592a252b 10675 /* VEX_W_0F7C_P_3 */
bf890a93 10676 { "vhaddps", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10677 },
10678 {
592a252b 10679 /* VEX_W_0F7D_P_2 */
bf890a93 10680 { "vhsubpd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10681 },
10682 {
592a252b 10683 /* VEX_W_0F7D_P_3 */
bf890a93 10684 { "vhsubps", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10685 },
10686 {
592a252b 10687 /* VEX_W_0F7E_P_1 */
bf890a93 10688 { "vmovq", { XMScalar, EXqScalar }, 0 },
9e30b8e0
L
10689 },
10690 {
592a252b 10691 /* VEX_W_0F7F_P_1 */
bf890a93 10692 { "vmovdqu", { EXxS, XM }, 0 },
9e30b8e0
L
10693 },
10694 {
592a252b 10695 /* VEX_W_0F7F_P_2 */
bf890a93 10696 { "vmovdqa", { EXxS, XM }, 0 },
9e30b8e0 10697 },
43234a1e
L
10698 {
10699 /* VEX_W_0F90_P_0_LEN_0 */
bf890a93
IT
10700 { "kmovw", { MaskG, MaskE }, 0 },
10701 { "kmovq", { MaskG, MaskE }, 0 },
1ba585e8
IT
10702 },
10703 {
10704 /* VEX_W_0F90_P_2_LEN_0 */
bf890a93
IT
10705 { "kmovb", { MaskG, MaskBDE }, 0 },
10706 { "kmovd", { MaskG, MaskBDE }, 0 },
43234a1e
L
10707 },
10708 {
10709 /* VEX_W_0F91_P_0_LEN_0 */
ab4e4ed5
AF
10710 { MOD_TABLE (MOD_VEX_W_0_0F91_P_0_LEN_0) },
10711 { MOD_TABLE (MOD_VEX_W_1_0F91_P_0_LEN_0) },
1ba585e8
IT
10712 },
10713 {
10714 /* VEX_W_0F91_P_2_LEN_0 */
ab4e4ed5
AF
10715 { MOD_TABLE (MOD_VEX_W_0_0F91_P_2_LEN_0) },
10716 { MOD_TABLE (MOD_VEX_W_1_0F91_P_2_LEN_0) },
43234a1e
L
10717 },
10718 {
10719 /* VEX_W_0F92_P_0_LEN_0 */
ab4e4ed5 10720 { MOD_TABLE (MOD_VEX_W_0_0F92_P_0_LEN_0) },
43234a1e 10721 },
90a915bf
IT
10722 {
10723 /* VEX_W_0F92_P_2_LEN_0 */
ab4e4ed5 10724 { MOD_TABLE (MOD_VEX_W_0_0F92_P_2_LEN_0) },
90a915bf 10725 },
1ba585e8
IT
10726 {
10727 /* VEX_W_0F92_P_3_LEN_0 */
ab4e4ed5
AF
10728 { MOD_TABLE (MOD_VEX_W_0_0F92_P_3_LEN_0) },
10729 { MOD_TABLE (MOD_VEX_W_1_0F92_P_3_LEN_0) },
1ba585e8 10730 },
43234a1e
L
10731 {
10732 /* VEX_W_0F93_P_0_LEN_0 */
ab4e4ed5 10733 { MOD_TABLE (MOD_VEX_W_0_0F93_P_0_LEN_0) },
43234a1e 10734 },
90a915bf
IT
10735 {
10736 /* VEX_W_0F93_P_2_LEN_0 */
ab4e4ed5 10737 { MOD_TABLE (MOD_VEX_W_0_0F93_P_2_LEN_0) },
90a915bf 10738 },
1ba585e8
IT
10739 {
10740 /* VEX_W_0F93_P_3_LEN_0 */
ab4e4ed5
AF
10741 { MOD_TABLE (MOD_VEX_W_0_0F93_P_3_LEN_0) },
10742 { MOD_TABLE (MOD_VEX_W_1_0F93_P_3_LEN_0) },
1ba585e8 10743 },
43234a1e
L
10744 {
10745 /* VEX_W_0F98_P_0_LEN_0 */
ab4e4ed5
AF
10746 { MOD_TABLE (MOD_VEX_W_0_0F98_P_0_LEN_0) },
10747 { MOD_TABLE (MOD_VEX_W_1_0F98_P_0_LEN_0) },
1ba585e8
IT
10748 },
10749 {
10750 /* VEX_W_0F98_P_2_LEN_0 */
ab4e4ed5
AF
10751 { MOD_TABLE (MOD_VEX_W_0_0F98_P_2_LEN_0) },
10752 { MOD_TABLE (MOD_VEX_W_1_0F98_P_2_LEN_0) },
1ba585e8
IT
10753 },
10754 {
10755 /* VEX_W_0F99_P_0_LEN_0 */
ab4e4ed5
AF
10756 { MOD_TABLE (MOD_VEX_W_0_0F99_P_0_LEN_0) },
10757 { MOD_TABLE (MOD_VEX_W_1_0F99_P_0_LEN_0) },
1ba585e8
IT
10758 },
10759 {
10760 /* VEX_W_0F99_P_2_LEN_0 */
ab4e4ed5
AF
10761 { MOD_TABLE (MOD_VEX_W_0_0F99_P_2_LEN_0) },
10762 { MOD_TABLE (MOD_VEX_W_1_0F99_P_2_LEN_0) },
43234a1e 10763 },
9e30b8e0 10764 {
592a252b 10765 /* VEX_W_0FAE_R_2_M_0 */
bf890a93 10766 { "vldmxcsr", { Md }, 0 },
9e30b8e0
L
10767 },
10768 {
592a252b 10769 /* VEX_W_0FAE_R_3_M_0 */
bf890a93 10770 { "vstmxcsr", { Md }, 0 },
9e30b8e0
L
10771 },
10772 {
592a252b 10773 /* VEX_W_0FC2_P_0 */
bf890a93 10774 { "vcmpps", { XM, Vex, EXx, VCMP }, 0 },
9e30b8e0
L
10775 },
10776 {
592a252b 10777 /* VEX_W_0FC2_P_1 */
bf890a93 10778 { "vcmpss", { XMScalar, VexScalar, EXdScalar, VCMP }, 0 },
9e30b8e0
L
10779 },
10780 {
592a252b 10781 /* VEX_W_0FC2_P_2 */
bf890a93 10782 { "vcmppd", { XM, Vex, EXx, VCMP }, 0 },
9e30b8e0
L
10783 },
10784 {
592a252b 10785 /* VEX_W_0FC2_P_3 */
bf890a93 10786 { "vcmpsd", { XMScalar, VexScalar, EXqScalar, VCMP }, 0 },
9e30b8e0
L
10787 },
10788 {
592a252b 10789 /* VEX_W_0FC4_P_2 */
bf890a93 10790 { "vpinsrw", { XM, Vex128, Edqw, Ib }, 0 },
9e30b8e0
L
10791 },
10792 {
592a252b 10793 /* VEX_W_0FC5_P_2 */
bf890a93 10794 { "vpextrw", { Gdq, XS, Ib }, 0 },
9e30b8e0
L
10795 },
10796 {
592a252b 10797 /* VEX_W_0FD0_P_2 */
bf890a93 10798 { "vaddsubpd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10799 },
10800 {
592a252b 10801 /* VEX_W_0FD0_P_3 */
bf890a93 10802 { "vaddsubps", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10803 },
10804 {
592a252b 10805 /* VEX_W_0FD1_P_2 */
bf890a93 10806 { "vpsrlw", { XM, Vex, EXxmm }, 0 },
9e30b8e0
L
10807 },
10808 {
592a252b 10809 /* VEX_W_0FD2_P_2 */
bf890a93 10810 { "vpsrld", { XM, Vex, EXxmm }, 0 },
9e30b8e0
L
10811 },
10812 {
592a252b 10813 /* VEX_W_0FD3_P_2 */
bf890a93 10814 { "vpsrlq", { XM, Vex, EXxmm }, 0 },
9e30b8e0
L
10815 },
10816 {
592a252b 10817 /* VEX_W_0FD4_P_2 */
bf890a93 10818 { "vpaddq", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10819 },
10820 {
592a252b 10821 /* VEX_W_0FD5_P_2 */
bf890a93 10822 { "vpmullw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10823 },
10824 {
592a252b 10825 /* VEX_W_0FD6_P_2 */
bf890a93 10826 { "vmovq", { EXqScalarS, XMScalar }, 0 },
9e30b8e0
L
10827 },
10828 {
592a252b 10829 /* VEX_W_0FD7_P_2_M_1 */
bf890a93 10830 { "vpmovmskb", { Gdq, XS }, 0 },
9e30b8e0
L
10831 },
10832 {
592a252b 10833 /* VEX_W_0FD8_P_2 */
bf890a93 10834 { "vpsubusb", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10835 },
10836 {
592a252b 10837 /* VEX_W_0FD9_P_2 */
bf890a93 10838 { "vpsubusw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10839 },
10840 {
592a252b 10841 /* VEX_W_0FDA_P_2 */
bf890a93 10842 { "vpminub", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10843 },
10844 {
592a252b 10845 /* VEX_W_0FDB_P_2 */
bf890a93 10846 { "vpand", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10847 },
10848 {
592a252b 10849 /* VEX_W_0FDC_P_2 */
bf890a93 10850 { "vpaddusb", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10851 },
10852 {
592a252b 10853 /* VEX_W_0FDD_P_2 */
bf890a93 10854 { "vpaddusw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10855 },
10856 {
592a252b 10857 /* VEX_W_0FDE_P_2 */
bf890a93 10858 { "vpmaxub", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10859 },
10860 {
592a252b 10861 /* VEX_W_0FDF_P_2 */
bf890a93 10862 { "vpandn", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10863 },
10864 {
592a252b 10865 /* VEX_W_0FE0_P_2 */
bf890a93 10866 { "vpavgb", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10867 },
10868 {
592a252b 10869 /* VEX_W_0FE1_P_2 */
bf890a93 10870 { "vpsraw", { XM, Vex, EXxmm }, 0 },
9e30b8e0
L
10871 },
10872 {
592a252b 10873 /* VEX_W_0FE2_P_2 */
bf890a93 10874 { "vpsrad", { XM, Vex, EXxmm }, 0 },
9e30b8e0
L
10875 },
10876 {
592a252b 10877 /* VEX_W_0FE3_P_2 */
bf890a93 10878 { "vpavgw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10879 },
10880 {
592a252b 10881 /* VEX_W_0FE4_P_2 */
bf890a93 10882 { "vpmulhuw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10883 },
10884 {
592a252b 10885 /* VEX_W_0FE5_P_2 */
bf890a93 10886 { "vpmulhw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10887 },
10888 {
592a252b 10889 /* VEX_W_0FE6_P_1 */
bf890a93 10890 { "vcvtdq2pd", { XM, EXxmmq }, 0 },
9e30b8e0
L
10891 },
10892 {
592a252b 10893 /* VEX_W_0FE6_P_2 */
bf890a93 10894 { "vcvttpd2dq%XY", { XMM, EXx }, 0 },
9e30b8e0
L
10895 },
10896 {
592a252b 10897 /* VEX_W_0FE6_P_3 */
bf890a93 10898 { "vcvtpd2dq%XY", { XMM, EXx }, 0 },
9e30b8e0
L
10899 },
10900 {
592a252b 10901 /* VEX_W_0FE7_P_2_M_0 */
bf890a93 10902 { "vmovntdq", { Mx, XM }, 0 },
9e30b8e0
L
10903 },
10904 {
592a252b 10905 /* VEX_W_0FE8_P_2 */
bf890a93 10906 { "vpsubsb", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10907 },
10908 {
592a252b 10909 /* VEX_W_0FE9_P_2 */
bf890a93 10910 { "vpsubsw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10911 },
10912 {
592a252b 10913 /* VEX_W_0FEA_P_2 */
bf890a93 10914 { "vpminsw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10915 },
10916 {
592a252b 10917 /* VEX_W_0FEB_P_2 */
bf890a93 10918 { "vpor", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10919 },
10920 {
592a252b 10921 /* VEX_W_0FEC_P_2 */
bf890a93 10922 { "vpaddsb", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10923 },
10924 {
592a252b 10925 /* VEX_W_0FED_P_2 */
bf890a93 10926 { "vpaddsw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10927 },
10928 {
592a252b 10929 /* VEX_W_0FEE_P_2 */
bf890a93 10930 { "vpmaxsw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10931 },
10932 {
592a252b 10933 /* VEX_W_0FEF_P_2 */
bf890a93 10934 { "vpxor", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10935 },
10936 {
592a252b 10937 /* VEX_W_0FF0_P_3_M_0 */
bf890a93 10938 { "vlddqu", { XM, M }, 0 },
9e30b8e0
L
10939 },
10940 {
592a252b 10941 /* VEX_W_0FF1_P_2 */
bf890a93 10942 { "vpsllw", { XM, Vex, EXxmm }, 0 },
9e30b8e0
L
10943 },
10944 {
592a252b 10945 /* VEX_W_0FF2_P_2 */
bf890a93 10946 { "vpslld", { XM, Vex, EXxmm }, 0 },
9e30b8e0
L
10947 },
10948 {
592a252b 10949 /* VEX_W_0FF3_P_2 */
bf890a93 10950 { "vpsllq", { XM, Vex, EXxmm }, 0 },
9e30b8e0
L
10951 },
10952 {
592a252b 10953 /* VEX_W_0FF4_P_2 */
bf890a93 10954 { "vpmuludq", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10955 },
10956 {
592a252b 10957 /* VEX_W_0FF5_P_2 */
bf890a93 10958 { "vpmaddwd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10959 },
10960 {
592a252b 10961 /* VEX_W_0FF6_P_2 */
bf890a93 10962 { "vpsadbw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10963 },
10964 {
592a252b 10965 /* VEX_W_0FF7_P_2 */
bf890a93 10966 { "vmaskmovdqu", { XM, XS }, 0 },
9e30b8e0
L
10967 },
10968 {
592a252b 10969 /* VEX_W_0FF8_P_2 */
bf890a93 10970 { "vpsubb", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10971 },
10972 {
592a252b 10973 /* VEX_W_0FF9_P_2 */
bf890a93 10974 { "vpsubw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10975 },
10976 {
592a252b 10977 /* VEX_W_0FFA_P_2 */
bf890a93 10978 { "vpsubd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10979 },
10980 {
592a252b 10981 /* VEX_W_0FFB_P_2 */
bf890a93 10982 { "vpsubq", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10983 },
10984 {
592a252b 10985 /* VEX_W_0FFC_P_2 */
bf890a93 10986 { "vpaddb", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10987 },
10988 {
592a252b 10989 /* VEX_W_0FFD_P_2 */
bf890a93 10990 { "vpaddw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10991 },
10992 {
592a252b 10993 /* VEX_W_0FFE_P_2 */
bf890a93 10994 { "vpaddd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10995 },
10996 {
592a252b 10997 /* VEX_W_0F3800_P_2 */
bf890a93 10998 { "vpshufb", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10999 },
11000 {
592a252b 11001 /* VEX_W_0F3801_P_2 */
bf890a93 11002 { "vphaddw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11003 },
11004 {
592a252b 11005 /* VEX_W_0F3802_P_2 */
bf890a93 11006 { "vphaddd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11007 },
11008 {
592a252b 11009 /* VEX_W_0F3803_P_2 */
bf890a93 11010 { "vphaddsw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11011 },
11012 {
592a252b 11013 /* VEX_W_0F3804_P_2 */
bf890a93 11014 { "vpmaddubsw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11015 },
11016 {
592a252b 11017 /* VEX_W_0F3805_P_2 */
bf890a93 11018 { "vphsubw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11019 },
11020 {
592a252b 11021 /* VEX_W_0F3806_P_2 */
bf890a93 11022 { "vphsubd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11023 },
11024 {
592a252b 11025 /* VEX_W_0F3807_P_2 */
bf890a93 11026 { "vphsubsw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11027 },
11028 {
592a252b 11029 /* VEX_W_0F3808_P_2 */
bf890a93 11030 { "vpsignb", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11031 },
11032 {
592a252b 11033 /* VEX_W_0F3809_P_2 */
bf890a93 11034 { "vpsignw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11035 },
11036 {
592a252b 11037 /* VEX_W_0F380A_P_2 */
bf890a93 11038 { "vpsignd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11039 },
11040 {
592a252b 11041 /* VEX_W_0F380B_P_2 */
bf890a93 11042 { "vpmulhrsw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11043 },
11044 {
592a252b 11045 /* VEX_W_0F380C_P_2 */
bf890a93 11046 { "vpermilps", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11047 },
11048 {
592a252b 11049 /* VEX_W_0F380D_P_2 */
bf890a93 11050 { "vpermilpd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11051 },
11052 {
592a252b 11053 /* VEX_W_0F380E_P_2 */
bf890a93 11054 { "vtestps", { XM, EXx }, 0 },
9e30b8e0
L
11055 },
11056 {
592a252b 11057 /* VEX_W_0F380F_P_2 */
bf890a93 11058 { "vtestpd", { XM, EXx }, 0 },
9e30b8e0 11059 },
6c30d220
L
11060 {
11061 /* VEX_W_0F3816_P_2 */
bf890a93 11062 { "vpermps", { XM, Vex, EXx }, 0 },
6c30d220 11063 },
9e30b8e0 11064 {
592a252b 11065 /* VEX_W_0F3817_P_2 */
bf890a93 11066 { "vptest", { XM, EXx }, 0 },
9e30b8e0 11067 },
bcf2684f 11068 {
6c30d220 11069 /* VEX_W_0F3818_P_2 */
bf890a93 11070 { "vbroadcastss", { XM, EXxmm_md }, 0 },
bcf2684f 11071 },
9e30b8e0 11072 {
6c30d220 11073 /* VEX_W_0F3819_P_2 */
bf890a93 11074 { "vbroadcastsd", { XM, EXxmm_mq }, 0 },
9e30b8e0
L
11075 },
11076 {
592a252b 11077 /* VEX_W_0F381A_P_2_M_0 */
bf890a93 11078 { "vbroadcastf128", { XM, Mxmm }, 0 },
9e30b8e0
L
11079 },
11080 {
592a252b 11081 /* VEX_W_0F381C_P_2 */
bf890a93 11082 { "vpabsb", { XM, EXx }, 0 },
9e30b8e0
L
11083 },
11084 {
592a252b 11085 /* VEX_W_0F381D_P_2 */
bf890a93 11086 { "vpabsw", { XM, EXx }, 0 },
9e30b8e0
L
11087 },
11088 {
592a252b 11089 /* VEX_W_0F381E_P_2 */
bf890a93 11090 { "vpabsd", { XM, EXx }, 0 },
9e30b8e0
L
11091 },
11092 {
592a252b 11093 /* VEX_W_0F3820_P_2 */
bf890a93 11094 { "vpmovsxbw", { XM, EXxmmq }, 0 },
9e30b8e0
L
11095 },
11096 {
592a252b 11097 /* VEX_W_0F3821_P_2 */
bf890a93 11098 { "vpmovsxbd", { XM, EXxmmqd }, 0 },
9e30b8e0
L
11099 },
11100 {
592a252b 11101 /* VEX_W_0F3822_P_2 */
bf890a93 11102 { "vpmovsxbq", { XM, EXxmmdw }, 0 },
9e30b8e0
L
11103 },
11104 {
592a252b 11105 /* VEX_W_0F3823_P_2 */
bf890a93 11106 { "vpmovsxwd", { XM, EXxmmq }, 0 },
9e30b8e0
L
11107 },
11108 {
592a252b 11109 /* VEX_W_0F3824_P_2 */
bf890a93 11110 { "vpmovsxwq", { XM, EXxmmqd }, 0 },
9e30b8e0
L
11111 },
11112 {
592a252b 11113 /* VEX_W_0F3825_P_2 */
bf890a93 11114 { "vpmovsxdq", { XM, EXxmmq }, 0 },
9e30b8e0
L
11115 },
11116 {
592a252b 11117 /* VEX_W_0F3828_P_2 */
bf890a93 11118 { "vpmuldq", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11119 },
11120 {
592a252b 11121 /* VEX_W_0F3829_P_2 */
bf890a93 11122 { "vpcmpeqq", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11123 },
11124 {
592a252b 11125 /* VEX_W_0F382A_P_2_M_0 */
bf890a93 11126 { "vmovntdqa", { XM, Mx }, 0 },
9e30b8e0
L
11127 },
11128 {
592a252b 11129 /* VEX_W_0F382B_P_2 */
bf890a93 11130 { "vpackusdw", { XM, Vex, EXx }, 0 },
9e30b8e0 11131 },
53aa04a0 11132 {
592a252b 11133 /* VEX_W_0F382C_P_2_M_0 */
bf890a93 11134 { "vmaskmovps", { XM, Vex, Mx }, 0 },
53aa04a0
L
11135 },
11136 {
592a252b 11137 /* VEX_W_0F382D_P_2_M_0 */
bf890a93 11138 { "vmaskmovpd", { XM, Vex, Mx }, 0 },
53aa04a0
L
11139 },
11140 {
592a252b 11141 /* VEX_W_0F382E_P_2_M_0 */
bf890a93 11142 { "vmaskmovps", { Mx, Vex, XM }, 0 },
53aa04a0
L
11143 },
11144 {
592a252b 11145 /* VEX_W_0F382F_P_2_M_0 */
bf890a93 11146 { "vmaskmovpd", { Mx, Vex, XM }, 0 },
53aa04a0 11147 },
9e30b8e0 11148 {
592a252b 11149 /* VEX_W_0F3830_P_2 */
bf890a93 11150 { "vpmovzxbw", { XM, EXxmmq }, 0 },
9e30b8e0
L
11151 },
11152 {
592a252b 11153 /* VEX_W_0F3831_P_2 */
bf890a93 11154 { "vpmovzxbd", { XM, EXxmmqd }, 0 },
9e30b8e0
L
11155 },
11156 {
592a252b 11157 /* VEX_W_0F3832_P_2 */
bf890a93 11158 { "vpmovzxbq", { XM, EXxmmdw }, 0 },
9e30b8e0
L
11159 },
11160 {
592a252b 11161 /* VEX_W_0F3833_P_2 */
bf890a93 11162 { "vpmovzxwd", { XM, EXxmmq }, 0 },
9e30b8e0
L
11163 },
11164 {
592a252b 11165 /* VEX_W_0F3834_P_2 */
bf890a93 11166 { "vpmovzxwq", { XM, EXxmmqd }, 0 },
9e30b8e0
L
11167 },
11168 {
592a252b 11169 /* VEX_W_0F3835_P_2 */
bf890a93 11170 { "vpmovzxdq", { XM, EXxmmq }, 0 },
6c30d220
L
11171 },
11172 {
11173 /* VEX_W_0F3836_P_2 */
bf890a93 11174 { "vpermd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11175 },
11176 {
592a252b 11177 /* VEX_W_0F3837_P_2 */
bf890a93 11178 { "vpcmpgtq", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11179 },
11180 {
592a252b 11181 /* VEX_W_0F3838_P_2 */
bf890a93 11182 { "vpminsb", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11183 },
11184 {
592a252b 11185 /* VEX_W_0F3839_P_2 */
bf890a93 11186 { "vpminsd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11187 },
11188 {
592a252b 11189 /* VEX_W_0F383A_P_2 */
bf890a93 11190 { "vpminuw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11191 },
11192 {
592a252b 11193 /* VEX_W_0F383B_P_2 */
bf890a93 11194 { "vpminud", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11195 },
11196 {
592a252b 11197 /* VEX_W_0F383C_P_2 */
bf890a93 11198 { "vpmaxsb", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11199 },
11200 {
592a252b 11201 /* VEX_W_0F383D_P_2 */
bf890a93 11202 { "vpmaxsd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11203 },
11204 {
592a252b 11205 /* VEX_W_0F383E_P_2 */
bf890a93 11206 { "vpmaxuw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11207 },
11208 {
592a252b 11209 /* VEX_W_0F383F_P_2 */
bf890a93 11210 { "vpmaxud", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11211 },
11212 {
592a252b 11213 /* VEX_W_0F3840_P_2 */
bf890a93 11214 { "vpmulld", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11215 },
11216 {
592a252b 11217 /* VEX_W_0F3841_P_2 */
bf890a93 11218 { "vphminposuw", { XM, EXx }, 0 },
9e30b8e0 11219 },
6c30d220
L
11220 {
11221 /* VEX_W_0F3846_P_2 */
bf890a93 11222 { "vpsravd", { XM, Vex, EXx }, 0 },
6c30d220
L
11223 },
11224 {
11225 /* VEX_W_0F3858_P_2 */
bf890a93 11226 { "vpbroadcastd", { XM, EXxmm_md }, 0 },
6c30d220
L
11227 },
11228 {
11229 /* VEX_W_0F3859_P_2 */
bf890a93 11230 { "vpbroadcastq", { XM, EXxmm_mq }, 0 },
6c30d220
L
11231 },
11232 {
11233 /* VEX_W_0F385A_P_2_M_0 */
bf890a93 11234 { "vbroadcasti128", { XM, Mxmm }, 0 },
6c30d220
L
11235 },
11236 {
11237 /* VEX_W_0F3878_P_2 */
bf890a93 11238 { "vpbroadcastb", { XM, EXxmm_mb }, 0 },
6c30d220
L
11239 },
11240 {
11241 /* VEX_W_0F3879_P_2 */
bf890a93 11242 { "vpbroadcastw", { XM, EXxmm_mw }, 0 },
6c30d220 11243 },
9e30b8e0 11244 {
592a252b 11245 /* VEX_W_0F38DB_P_2 */
bf890a93 11246 { "vaesimc", { XM, EXx }, 0 },
9e30b8e0
L
11247 },
11248 {
592a252b 11249 /* VEX_W_0F38DC_P_2 */
bf890a93 11250 { "vaesenc", { XM, Vex128, EXx }, 0 },
9e30b8e0
L
11251 },
11252 {
592a252b 11253 /* VEX_W_0F38DD_P_2 */
bf890a93 11254 { "vaesenclast", { XM, Vex128, EXx }, 0 },
9e30b8e0
L
11255 },
11256 {
592a252b 11257 /* VEX_W_0F38DE_P_2 */
bf890a93 11258 { "vaesdec", { XM, Vex128, EXx }, 0 },
9e30b8e0
L
11259 },
11260 {
592a252b 11261 /* VEX_W_0F38DF_P_2 */
bf890a93 11262 { "vaesdeclast", { XM, Vex128, EXx }, 0 },
9e30b8e0 11263 },
6c30d220
L
11264 {
11265 /* VEX_W_0F3A00_P_2 */
11266 { Bad_Opcode },
bf890a93 11267 { "vpermq", { XM, EXx, Ib }, 0 },
6c30d220
L
11268 },
11269 {
11270 /* VEX_W_0F3A01_P_2 */
11271 { Bad_Opcode },
bf890a93 11272 { "vpermpd", { XM, EXx, Ib }, 0 },
6c30d220
L
11273 },
11274 {
11275 /* VEX_W_0F3A02_P_2 */
bf890a93 11276 { "vpblendd", { XM, Vex, EXx, Ib }, 0 },
6c30d220 11277 },
9e30b8e0 11278 {
592a252b 11279 /* VEX_W_0F3A04_P_2 */
bf890a93 11280 { "vpermilps", { XM, EXx, Ib }, 0 },
9e30b8e0
L
11281 },
11282 {
592a252b 11283 /* VEX_W_0F3A05_P_2 */
bf890a93 11284 { "vpermilpd", { XM, EXx, Ib }, 0 },
9e30b8e0
L
11285 },
11286 {
592a252b 11287 /* VEX_W_0F3A06_P_2 */
bf890a93 11288 { "vperm2f128", { XM, Vex256, EXx, Ib }, 0 },
9e30b8e0
L
11289 },
11290 {
592a252b 11291 /* VEX_W_0F3A08_P_2 */
bf890a93 11292 { "vroundps", { XM, EXx, Ib }, 0 },
9e30b8e0
L
11293 },
11294 {
592a252b 11295 /* VEX_W_0F3A09_P_2 */
bf890a93 11296 { "vroundpd", { XM, EXx, Ib }, 0 },
9e30b8e0
L
11297 },
11298 {
592a252b 11299 /* VEX_W_0F3A0A_P_2 */
bf890a93 11300 { "vroundss", { XMScalar, VexScalar, EXdScalar, Ib }, 0 },
9e30b8e0
L
11301 },
11302 {
592a252b 11303 /* VEX_W_0F3A0B_P_2 */
bf890a93 11304 { "vroundsd", { XMScalar, VexScalar, EXqScalar, Ib }, 0 },
9e30b8e0
L
11305 },
11306 {
592a252b 11307 /* VEX_W_0F3A0C_P_2 */
bf890a93 11308 { "vblendps", { XM, Vex, EXx, Ib }, 0 },
9e30b8e0
L
11309 },
11310 {
592a252b 11311 /* VEX_W_0F3A0D_P_2 */
bf890a93 11312 { "vblendpd", { XM, Vex, EXx, Ib }, 0 },
9e30b8e0
L
11313 },
11314 {
592a252b 11315 /* VEX_W_0F3A0E_P_2 */
bf890a93 11316 { "vpblendw", { XM, Vex, EXx, Ib }, 0 },
9e30b8e0
L
11317 },
11318 {
592a252b 11319 /* VEX_W_0F3A0F_P_2 */
bf890a93 11320 { "vpalignr", { XM, Vex, EXx, Ib }, 0 },
9e30b8e0
L
11321 },
11322 {
592a252b 11323 /* VEX_W_0F3A14_P_2 */
bf890a93 11324 { "vpextrb", { Edqb, XM, Ib }, 0 },
9e30b8e0
L
11325 },
11326 {
592a252b 11327 /* VEX_W_0F3A15_P_2 */
bf890a93 11328 { "vpextrw", { Edqw, XM, Ib }, 0 },
9e30b8e0
L
11329 },
11330 {
592a252b 11331 /* VEX_W_0F3A18_P_2 */
bf890a93 11332 { "vinsertf128", { XM, Vex256, EXxmm, Ib }, 0 },
9e30b8e0
L
11333 },
11334 {
592a252b 11335 /* VEX_W_0F3A19_P_2 */
bf890a93 11336 { "vextractf128", { EXxmm, XM, Ib }, 0 },
9e30b8e0
L
11337 },
11338 {
592a252b 11339 /* VEX_W_0F3A20_P_2 */
bf890a93 11340 { "vpinsrb", { XM, Vex128, Edqb, Ib }, 0 },
9e30b8e0
L
11341 },
11342 {
592a252b 11343 /* VEX_W_0F3A21_P_2 */
bf890a93 11344 { "vinsertps", { XM, Vex128, EXd, Ib }, 0 },
9e30b8e0 11345 },
43234a1e 11346 {
1ba585e8 11347 /* VEX_W_0F3A30_P_2_LEN_0 */
ab4e4ed5
AF
11348 { MOD_TABLE (MOD_VEX_W_0_0F3A30_P_2_LEN_0) },
11349 { MOD_TABLE (MOD_VEX_W_1_0F3A30_P_2_LEN_0) },
43234a1e
L
11350 },
11351 {
1ba585e8 11352 /* VEX_W_0F3A31_P_2_LEN_0 */
ab4e4ed5
AF
11353 { MOD_TABLE (MOD_VEX_W_0_0F3A31_P_2_LEN_0) },
11354 { MOD_TABLE (MOD_VEX_W_1_0F3A31_P_2_LEN_0) },
1ba585e8
IT
11355 },
11356 {
11357 /* VEX_W_0F3A32_P_2_LEN_0 */
ab4e4ed5
AF
11358 { MOD_TABLE (MOD_VEX_W_0_0F3A32_P_2_LEN_0) },
11359 { MOD_TABLE (MOD_VEX_W_1_0F3A32_P_2_LEN_0) },
43234a1e 11360 },
1ba585e8
IT
11361 {
11362 /* VEX_W_0F3A33_P_2_LEN_0 */
ab4e4ed5
AF
11363 { MOD_TABLE (MOD_VEX_W_0_0F3A33_P_2_LEN_0) },
11364 { MOD_TABLE (MOD_VEX_W_1_0F3A33_P_2_LEN_0) },
1ba585e8 11365 },
6c30d220
L
11366 {
11367 /* VEX_W_0F3A38_P_2 */
bf890a93 11368 { "vinserti128", { XM, Vex256, EXxmm, Ib }, 0 },
6c30d220
L
11369 },
11370 {
11371 /* VEX_W_0F3A39_P_2 */
bf890a93 11372 { "vextracti128", { EXxmm, XM, Ib }, 0 },
6c30d220 11373 },
9e30b8e0 11374 {
592a252b 11375 /* VEX_W_0F3A40_P_2 */
bf890a93 11376 { "vdpps", { XM, Vex, EXx, Ib }, 0 },
9e30b8e0
L
11377 },
11378 {
592a252b 11379 /* VEX_W_0F3A41_P_2 */
bf890a93 11380 { "vdppd", { XM, Vex128, EXx, Ib }, 0 },
9e30b8e0
L
11381 },
11382 {
592a252b 11383 /* VEX_W_0F3A42_P_2 */
bf890a93 11384 { "vmpsadbw", { XM, Vex, EXx, Ib }, 0 },
9e30b8e0
L
11385 },
11386 {
592a252b 11387 /* VEX_W_0F3A44_P_2 */
bf890a93 11388 { "vpclmulqdq", { XM, Vex128, EXx, PCLMUL }, 0 },
9e30b8e0 11389 },
6c30d220
L
11390 {
11391 /* VEX_W_0F3A46_P_2 */
bf890a93 11392 { "vperm2i128", { XM, Vex256, EXx, Ib }, 0 },
6c30d220 11393 },
a683cc34 11394 {
592a252b 11395 /* VEX_W_0F3A48_P_2 */
bf890a93
IT
11396 { "vpermil2ps", { XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW }, 0 },
11397 { "vpermil2ps", { XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW }, 0 },
a683cc34
SP
11398 },
11399 {
592a252b 11400 /* VEX_W_0F3A49_P_2 */
bf890a93
IT
11401 { "vpermil2pd", { XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW }, 0 },
11402 { "vpermil2pd", { XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW }, 0 },
a683cc34 11403 },
9e30b8e0 11404 {
592a252b 11405 /* VEX_W_0F3A4A_P_2 */
bf890a93 11406 { "vblendvps", { XM, Vex, EXx, XMVexI4 }, 0 },
9e30b8e0
L
11407 },
11408 {
592a252b 11409 /* VEX_W_0F3A4B_P_2 */
bf890a93 11410 { "vblendvpd", { XM, Vex, EXx, XMVexI4 }, 0 },
9e30b8e0
L
11411 },
11412 {
592a252b 11413 /* VEX_W_0F3A4C_P_2 */
bf890a93 11414 { "vpblendvb", { XM, Vex, EXx, XMVexI4 }, 0 },
9e30b8e0 11415 },
9e30b8e0 11416 {
592a252b 11417 /* VEX_W_0F3A62_P_2 */
bf890a93 11418 { "vpcmpistrm", { XM, EXx, Ib }, 0 },
9e30b8e0
L
11419 },
11420 {
592a252b 11421 /* VEX_W_0F3A63_P_2 */
bf890a93 11422 { "vpcmpistri", { XM, EXx, Ib }, 0 },
9e30b8e0
L
11423 },
11424 {
592a252b 11425 /* VEX_W_0F3ADF_P_2 */
bf890a93 11426 { "vaeskeygenassist", { XM, EXx, Ib }, 0 },
9e30b8e0 11427 },
43234a1e
L
11428#define NEED_VEX_W_TABLE
11429#include "i386-dis-evex.h"
11430#undef NEED_VEX_W_TABLE
9e30b8e0
L
11431};
11432
11433static const struct dis386 mod_table[][2] = {
11434 {
11435 /* MOD_8D */
bf890a93 11436 { "leaS", { Gv, M }, 0 },
9e30b8e0 11437 },
42164a71
L
11438 {
11439 /* MOD_C6_REG_7 */
11440 { Bad_Opcode },
11441 { RM_TABLE (RM_C6_REG_7) },
11442 },
11443 {
11444 /* MOD_C7_REG_7 */
11445 { Bad_Opcode },
11446 { RM_TABLE (RM_C7_REG_7) },
11447 },
4a357820
MZ
11448 {
11449 /* MOD_FF_REG_3 */
a72d2af2 11450 { "Jcall^", { indirEp }, 0 },
4a357820
MZ
11451 },
11452 {
11453 /* MOD_FF_REG_5 */
a72d2af2 11454 { "Jjmp^", { indirEp }, 0 },
4a357820 11455 },
9e30b8e0
L
11456 {
11457 /* MOD_0F01_REG_0 */
11458 { X86_64_TABLE (X86_64_0F01_REG_0) },
11459 { RM_TABLE (RM_0F01_REG_0) },
11460 },
11461 {
11462 /* MOD_0F01_REG_1 */
11463 { X86_64_TABLE (X86_64_0F01_REG_1) },
11464 { RM_TABLE (RM_0F01_REG_1) },
11465 },
11466 {
11467 /* MOD_0F01_REG_2 */
11468 { X86_64_TABLE (X86_64_0F01_REG_2) },
11469 { RM_TABLE (RM_0F01_REG_2) },
11470 },
11471 {
11472 /* MOD_0F01_REG_3 */
11473 { X86_64_TABLE (X86_64_0F01_REG_3) },
11474 { RM_TABLE (RM_0F01_REG_3) },
11475 },
8eab4136
L
11476 {
11477 /* MOD_0F01_REG_5 */
603555e5 11478 { PREFIX_TABLE (PREFIX_MOD_0_0F01_REG_5) },
8eab4136
L
11479 { RM_TABLE (RM_0F01_REG_5) },
11480 },
9e30b8e0
L
11481 {
11482 /* MOD_0F01_REG_7 */
bf890a93 11483 { "invlpg", { Mb }, 0 },
9e30b8e0
L
11484 { RM_TABLE (RM_0F01_REG_7) },
11485 },
11486 {
11487 /* MOD_0F12_PREFIX_0 */
507bd325
L
11488 { "movlps", { XM, EXq }, PREFIX_OPCODE },
11489 { "movhlps", { XM, EXq }, PREFIX_OPCODE },
9e30b8e0
L
11490 },
11491 {
11492 /* MOD_0F13 */
507bd325 11493 { "movlpX", { EXq, XM }, PREFIX_OPCODE },
9e30b8e0
L
11494 },
11495 {
11496 /* MOD_0F16_PREFIX_0 */
bf890a93
IT
11497 { "movhps", { XM, EXq }, 0 },
11498 { "movlhps", { XM, EXq }, 0 },
9e30b8e0
L
11499 },
11500 {
11501 /* MOD_0F17 */
507bd325 11502 { "movhpX", { EXq, XM }, PREFIX_OPCODE },
9e30b8e0
L
11503 },
11504 {
11505 /* MOD_0F18_REG_0 */
bf890a93 11506 { "prefetchnta", { Mb }, 0 },
9e30b8e0
L
11507 },
11508 {
11509 /* MOD_0F18_REG_1 */
bf890a93 11510 { "prefetcht0", { Mb }, 0 },
9e30b8e0
L
11511 },
11512 {
11513 /* MOD_0F18_REG_2 */
bf890a93 11514 { "prefetcht1", { Mb }, 0 },
9e30b8e0
L
11515 },
11516 {
11517 /* MOD_0F18_REG_3 */
bf890a93 11518 { "prefetcht2", { Mb }, 0 },
9e30b8e0 11519 },
d7189fa5
RM
11520 {
11521 /* MOD_0F18_REG_4 */
bf890a93 11522 { "nop/reserved", { Mb }, 0 },
d7189fa5
RM
11523 },
11524 {
11525 /* MOD_0F18_REG_5 */
bf890a93 11526 { "nop/reserved", { Mb }, 0 },
d7189fa5
RM
11527 },
11528 {
11529 /* MOD_0F18_REG_6 */
bf890a93 11530 { "nop/reserved", { Mb }, 0 },
d7189fa5
RM
11531 },
11532 {
11533 /* MOD_0F18_REG_7 */
bf890a93 11534 { "nop/reserved", { Mb }, 0 },
d7189fa5 11535 },
7e8b059b
L
11536 {
11537 /* MOD_0F1A_PREFIX_0 */
bf890a93
IT
11538 { "bndldx", { Gbnd, Ev_bnd }, 0 },
11539 { "nopQ", { Ev }, 0 },
7e8b059b
L
11540 },
11541 {
11542 /* MOD_0F1B_PREFIX_0 */
bf890a93
IT
11543 { "bndstx", { Ev_bnd, Gbnd }, 0 },
11544 { "nopQ", { Ev }, 0 },
7e8b059b
L
11545 },
11546 {
11547 /* MOD_0F1B_PREFIX_1 */
bf890a93
IT
11548 { "bndmk", { Gbnd, Ev_bnd }, 0 },
11549 { "nopQ", { Ev }, 0 },
7e8b059b 11550 },
603555e5
L
11551 {
11552 /* MOD_0F1E_PREFIX_1 */
11553 { "nopQ", { Ev }, 0 },
11554 { REG_TABLE (REG_0F1E_MOD_3) },
11555 },
b844680a 11556 {
92fddf8e 11557 /* MOD_0F24 */
7bb15c6f 11558 { Bad_Opcode },
bf890a93 11559 { "movL", { Rd, Td }, 0 },
b844680a
L
11560 },
11561 {
92fddf8e 11562 /* MOD_0F26 */
592d1631 11563 { Bad_Opcode },
bf890a93 11564 { "movL", { Td, Rd }, 0 },
b844680a 11565 },
75c135a8
L
11566 {
11567 /* MOD_0F2B_PREFIX_0 */
507bd325 11568 {"movntps", { Mx, XM }, PREFIX_OPCODE },
75c135a8
L
11569 },
11570 {
11571 /* MOD_0F2B_PREFIX_1 */
507bd325 11572 {"movntss", { Md, XM }, PREFIX_OPCODE },
75c135a8
L
11573 },
11574 {
11575 /* MOD_0F2B_PREFIX_2 */
507bd325 11576 {"movntpd", { Mx, XM }, PREFIX_OPCODE },
75c135a8
L
11577 },
11578 {
11579 /* MOD_0F2B_PREFIX_3 */
507bd325 11580 {"movntsd", { Mq, XM }, PREFIX_OPCODE },
75c135a8
L
11581 },
11582 {
11583 /* MOD_0F51 */
592d1631 11584 { Bad_Opcode },
507bd325 11585 { "movmskpX", { Gdq, XS }, PREFIX_OPCODE },
75c135a8 11586 },
b844680a 11587 {
1ceb70f8 11588 /* MOD_0F71_REG_2 */
592d1631 11589 { Bad_Opcode },
bf890a93 11590 { "psrlw", { MS, Ib }, 0 },
b844680a
L
11591 },
11592 {
1ceb70f8 11593 /* MOD_0F71_REG_4 */
592d1631 11594 { Bad_Opcode },
bf890a93 11595 { "psraw", { MS, Ib }, 0 },
b844680a
L
11596 },
11597 {
1ceb70f8 11598 /* MOD_0F71_REG_6 */
592d1631 11599 { Bad_Opcode },
bf890a93 11600 { "psllw", { MS, Ib }, 0 },
b844680a
L
11601 },
11602 {
1ceb70f8 11603 /* MOD_0F72_REG_2 */
592d1631 11604 { Bad_Opcode },
bf890a93 11605 { "psrld", { MS, Ib }, 0 },
b844680a
L
11606 },
11607 {
1ceb70f8 11608 /* MOD_0F72_REG_4 */
592d1631 11609 { Bad_Opcode },
bf890a93 11610 { "psrad", { MS, Ib }, 0 },
b844680a
L
11611 },
11612 {
1ceb70f8 11613 /* MOD_0F72_REG_6 */
592d1631 11614 { Bad_Opcode },
bf890a93 11615 { "pslld", { MS, Ib }, 0 },
b844680a
L
11616 },
11617 {
1ceb70f8 11618 /* MOD_0F73_REG_2 */
592d1631 11619 { Bad_Opcode },
bf890a93 11620 { "psrlq", { MS, Ib }, 0 },
b844680a
L
11621 },
11622 {
1ceb70f8 11623 /* MOD_0F73_REG_3 */
592d1631 11624 { Bad_Opcode },
c0f3af97
L
11625 { PREFIX_TABLE (PREFIX_0F73_REG_3) },
11626 },
11627 {
11628 /* MOD_0F73_REG_6 */
592d1631 11629 { Bad_Opcode },
bf890a93 11630 { "psllq", { MS, Ib }, 0 },
c0f3af97
L
11631 },
11632 {
11633 /* MOD_0F73_REG_7 */
592d1631 11634 { Bad_Opcode },
c0f3af97
L
11635 { PREFIX_TABLE (PREFIX_0F73_REG_7) },
11636 },
11637 {
11638 /* MOD_0FAE_REG_0 */
bf890a93 11639 { "fxsave", { FXSAVE }, 0 },
c7b8aa3a 11640 { PREFIX_TABLE (PREFIX_0FAE_REG_0) },
c0f3af97
L
11641 },
11642 {
11643 /* MOD_0FAE_REG_1 */
bf890a93 11644 { "fxrstor", { FXSAVE }, 0 },
c7b8aa3a 11645 { PREFIX_TABLE (PREFIX_0FAE_REG_1) },
c0f3af97
L
11646 },
11647 {
11648 /* MOD_0FAE_REG_2 */
bf890a93 11649 { "ldmxcsr", { Md }, 0 },
c7b8aa3a 11650 { PREFIX_TABLE (PREFIX_0FAE_REG_2) },
c0f3af97
L
11651 },
11652 {
11653 /* MOD_0FAE_REG_3 */
bf890a93 11654 { "stmxcsr", { Md }, 0 },
c7b8aa3a 11655 { PREFIX_TABLE (PREFIX_0FAE_REG_3) },
c0f3af97
L
11656 },
11657 {
11658 /* MOD_0FAE_REG_4 */
6b40c462
L
11659 { PREFIX_TABLE (PREFIX_MOD_0_0FAE_REG_4) },
11660 { PREFIX_TABLE (PREFIX_MOD_3_0FAE_REG_4) },
c0f3af97
L
11661 },
11662 {
11663 /* MOD_0FAE_REG_5 */
603555e5 11664 { PREFIX_TABLE (PREFIX_MOD_0_0FAE_REG_5) },
2234eee6 11665 { PREFIX_TABLE (PREFIX_MOD_3_0FAE_REG_5) },
c0f3af97
L
11666 },
11667 {
11668 /* MOD_0FAE_REG_6 */
c5e7287a 11669 { PREFIX_TABLE (PREFIX_0FAE_REG_6) },
c0f3af97
L
11670 { RM_TABLE (RM_0FAE_REG_6) },
11671 },
11672 {
11673 /* MOD_0FAE_REG_7 */
963f3586 11674 { PREFIX_TABLE (PREFIX_0FAE_REG_7) },
c0f3af97
L
11675 { RM_TABLE (RM_0FAE_REG_7) },
11676 },
11677 {
11678 /* MOD_0FB2 */
bf890a93 11679 { "lssS", { Gv, Mp }, 0 },
c0f3af97
L
11680 },
11681 {
11682 /* MOD_0FB4 */
bf890a93 11683 { "lfsS", { Gv, Mp }, 0 },
c0f3af97
L
11684 },
11685 {
11686 /* MOD_0FB5 */
bf890a93 11687 { "lgsS", { Gv, Mp }, 0 },
c0f3af97 11688 },
a8484f96
L
11689 {
11690 /* MOD_0FC3 */
11691 { PREFIX_TABLE (PREFIX_MOD_0_0FC3) },
11692 },
963f3586
IT
11693 {
11694 /* MOD_0FC7_REG_3 */
a8484f96 11695 { "xrstors", { FXSAVE }, 0 },
963f3586
IT
11696 },
11697 {
11698 /* MOD_0FC7_REG_4 */
bf890a93 11699 { "xsavec", { FXSAVE }, 0 },
963f3586
IT
11700 },
11701 {
11702 /* MOD_0FC7_REG_5 */
bf890a93 11703 { "xsaves", { FXSAVE }, 0 },
963f3586 11704 },
c0f3af97
L
11705 {
11706 /* MOD_0FC7_REG_6 */
f24bcbaa
L
11707 { PREFIX_TABLE (PREFIX_MOD_0_0FC7_REG_6) },
11708 { PREFIX_TABLE (PREFIX_MOD_3_0FC7_REG_6) }
c0f3af97
L
11709 },
11710 {
11711 /* MOD_0FC7_REG_7 */
bf890a93 11712 { "vmptrst", { Mq }, 0 },
f24bcbaa 11713 { PREFIX_TABLE (PREFIX_MOD_3_0FC7_REG_7) }
c0f3af97
L
11714 },
11715 {
11716 /* MOD_0FD7 */
592d1631 11717 { Bad_Opcode },
bf890a93 11718 { "pmovmskb", { Gdq, MS }, 0 },
c0f3af97
L
11719 },
11720 {
11721 /* MOD_0FE7_PREFIX_2 */
bf890a93 11722 { "movntdq", { Mx, XM }, 0 },
c0f3af97
L
11723 },
11724 {
11725 /* MOD_0FF0_PREFIX_3 */
bf890a93 11726 { "lddqu", { XM, M }, 0 },
c0f3af97
L
11727 },
11728 {
11729 /* MOD_0F382A_PREFIX_2 */
bf890a93 11730 { "movntdqa", { XM, Mx }, 0 },
c0f3af97 11731 },
603555e5
L
11732 {
11733 /* MOD_0F38F5_PREFIX_2 */
11734 { "wrussK", { M, Gdq }, PREFIX_OPCODE },
11735 },
11736 {
11737 /* MOD_0F38F6_PREFIX_0 */
11738 { "wrssK", { M, Gdq }, PREFIX_OPCODE },
11739 },
c0f3af97
L
11740 {
11741 /* MOD_62_32BIT */
bf890a93 11742 { "bound{S|}", { Gv, Ma }, 0 },
43234a1e 11743 { EVEX_TABLE (EVEX_0F) },
c0f3af97
L
11744 },
11745 {
11746 /* MOD_C4_32BIT */
bf890a93 11747 { "lesS", { Gv, Mp }, 0 },
c0f3af97
L
11748 { VEX_C4_TABLE (VEX_0F) },
11749 },
11750 {
11751 /* MOD_C5_32BIT */
bf890a93 11752 { "ldsS", { Gv, Mp }, 0 },
c0f3af97
L
11753 { VEX_C5_TABLE (VEX_0F) },
11754 },
11755 {
592a252b
L
11756 /* MOD_VEX_0F12_PREFIX_0 */
11757 { VEX_LEN_TABLE (VEX_LEN_0F12_P_0_M_0) },
11758 { VEX_LEN_TABLE (VEX_LEN_0F12_P_0_M_1) },
c0f3af97
L
11759 },
11760 {
592a252b
L
11761 /* MOD_VEX_0F13 */
11762 { VEX_LEN_TABLE (VEX_LEN_0F13_M_0) },
c0f3af97
L
11763 },
11764 {
592a252b
L
11765 /* MOD_VEX_0F16_PREFIX_0 */
11766 { VEX_LEN_TABLE (VEX_LEN_0F16_P_0_M_0) },
11767 { VEX_LEN_TABLE (VEX_LEN_0F16_P_0_M_1) },
c0f3af97
L
11768 },
11769 {
592a252b
L
11770 /* MOD_VEX_0F17 */
11771 { VEX_LEN_TABLE (VEX_LEN_0F17_M_0) },
c0f3af97
L
11772 },
11773 {
592a252b
L
11774 /* MOD_VEX_0F2B */
11775 { VEX_W_TABLE (VEX_W_0F2B_M_0) },
c0f3af97 11776 },
ab4e4ed5
AF
11777 {
11778 /* MOD_VEX_W_0_0F41_P_0_LEN_1 */
11779 { Bad_Opcode },
11780 { "kandw", { MaskG, MaskVex, MaskR }, 0 },
11781 },
11782 {
11783 /* MOD_VEX_W_1_0F41_P_0_LEN_1 */
11784 { Bad_Opcode },
11785 { "kandq", { MaskG, MaskVex, MaskR }, 0 },
11786 },
11787 {
11788 /* MOD_VEX_W_0_0F41_P_2_LEN_1 */
11789 { Bad_Opcode },
11790 { "kandb", { MaskG, MaskVex, MaskR }, 0 },
11791 },
11792 {
11793 /* MOD_VEX_W_1_0F41_P_2_LEN_1 */
11794 { Bad_Opcode },
11795 { "kandd", { MaskG, MaskVex, MaskR }, 0 },
11796 },
11797 {
11798 /* MOD_VEX_W_0_0F42_P_0_LEN_1 */
11799 { Bad_Opcode },
11800 { "kandnw", { MaskG, MaskVex, MaskR }, 0 },
11801 },
11802 {
11803 /* MOD_VEX_W_1_0F42_P_0_LEN_1 */
11804 { Bad_Opcode },
11805 { "kandnq", { MaskG, MaskVex, MaskR }, 0 },
11806 },
11807 {
11808 /* MOD_VEX_W_0_0F42_P_2_LEN_1 */
11809 { Bad_Opcode },
11810 { "kandnb", { MaskG, MaskVex, MaskR }, 0 },
11811 },
11812 {
11813 /* MOD_VEX_W_1_0F42_P_2_LEN_1 */
11814 { Bad_Opcode },
11815 { "kandnd", { MaskG, MaskVex, MaskR }, 0 },
11816 },
11817 {
11818 /* MOD_VEX_W_0_0F44_P_0_LEN_0 */
11819 { Bad_Opcode },
11820 { "knotw", { MaskG, MaskR }, 0 },
11821 },
11822 {
11823 /* MOD_VEX_W_1_0F44_P_0_LEN_0 */
11824 { Bad_Opcode },
11825 { "knotq", { MaskG, MaskR }, 0 },
11826 },
11827 {
11828 /* MOD_VEX_W_0_0F44_P_2_LEN_0 */
11829 { Bad_Opcode },
11830 { "knotb", { MaskG, MaskR }, 0 },
11831 },
11832 {
11833 /* MOD_VEX_W_1_0F44_P_2_LEN_0 */
11834 { Bad_Opcode },
11835 { "knotd", { MaskG, MaskR }, 0 },
11836 },
11837 {
11838 /* MOD_VEX_W_0_0F45_P_0_LEN_1 */
11839 { Bad_Opcode },
11840 { "korw", { MaskG, MaskVex, MaskR }, 0 },
11841 },
11842 {
11843 /* MOD_VEX_W_1_0F45_P_0_LEN_1 */
11844 { Bad_Opcode },
11845 { "korq", { MaskG, MaskVex, MaskR }, 0 },
11846 },
11847 {
11848 /* MOD_VEX_W_0_0F45_P_2_LEN_1 */
11849 { Bad_Opcode },
11850 { "korb", { MaskG, MaskVex, MaskR }, 0 },
11851 },
11852 {
11853 /* MOD_VEX_W_1_0F45_P_2_LEN_1 */
11854 { Bad_Opcode },
11855 { "kord", { MaskG, MaskVex, MaskR }, 0 },
11856 },
11857 {
11858 /* MOD_VEX_W_0_0F46_P_0_LEN_1 */
11859 { Bad_Opcode },
11860 { "kxnorw", { MaskG, MaskVex, MaskR }, 0 },
11861 },
11862 {
11863 /* MOD_VEX_W_1_0F46_P_0_LEN_1 */
11864 { Bad_Opcode },
11865 { "kxnorq", { MaskG, MaskVex, MaskR }, 0 },
11866 },
11867 {
11868 /* MOD_VEX_W_0_0F46_P_2_LEN_1 */
11869 { Bad_Opcode },
11870 { "kxnorb", { MaskG, MaskVex, MaskR }, 0 },
11871 },
11872 {
11873 /* MOD_VEX_W_1_0F46_P_2_LEN_1 */
11874 { Bad_Opcode },
11875 { "kxnord", { MaskG, MaskVex, MaskR }, 0 },
11876 },
11877 {
11878 /* MOD_VEX_W_0_0F47_P_0_LEN_1 */
11879 { Bad_Opcode },
11880 { "kxorw", { MaskG, MaskVex, MaskR }, 0 },
11881 },
11882 {
11883 /* MOD_VEX_W_1_0F47_P_0_LEN_1 */
11884 { Bad_Opcode },
11885 { "kxorq", { MaskG, MaskVex, MaskR }, 0 },
11886 },
11887 {
11888 /* MOD_VEX_W_0_0F47_P_2_LEN_1 */
11889 { Bad_Opcode },
11890 { "kxorb", { MaskG, MaskVex, MaskR }, 0 },
11891 },
11892 {
11893 /* MOD_VEX_W_1_0F47_P_2_LEN_1 */
11894 { Bad_Opcode },
11895 { "kxord", { MaskG, MaskVex, MaskR }, 0 },
11896 },
11897 {
11898 /* MOD_VEX_W_0_0F4A_P_0_LEN_1 */
11899 { Bad_Opcode },
11900 { "kaddw", { MaskG, MaskVex, MaskR }, 0 },
11901 },
11902 {
11903 /* MOD_VEX_W_1_0F4A_P_0_LEN_1 */
11904 { Bad_Opcode },
11905 { "kaddq", { MaskG, MaskVex, MaskR }, 0 },
11906 },
11907 {
11908 /* MOD_VEX_W_0_0F4A_P_2_LEN_1 */
11909 { Bad_Opcode },
11910 { "kaddb", { MaskG, MaskVex, MaskR }, 0 },
11911 },
11912 {
11913 /* MOD_VEX_W_1_0F4A_P_2_LEN_1 */
11914 { Bad_Opcode },
11915 { "kaddd", { MaskG, MaskVex, MaskR }, 0 },
11916 },
11917 {
11918 /* MOD_VEX_W_0_0F4B_P_0_LEN_1 */
11919 { Bad_Opcode },
11920 { "kunpckwd", { MaskG, MaskVex, MaskR }, 0 },
11921 },
11922 {
11923 /* MOD_VEX_W_1_0F4B_P_0_LEN_1 */
11924 { Bad_Opcode },
11925 { "kunpckdq", { MaskG, MaskVex, MaskR }, 0 },
11926 },
11927 {
11928 /* MOD_VEX_W_0_0F4B_P_2_LEN_1 */
11929 { Bad_Opcode },
11930 { "kunpckbw", { MaskG, MaskVex, MaskR }, 0 },
11931 },
c0f3af97 11932 {
592a252b 11933 /* MOD_VEX_0F50 */
592d1631 11934 { Bad_Opcode },
592a252b 11935 { VEX_W_TABLE (VEX_W_0F50_M_0) },
c0f3af97
L
11936 },
11937 {
592a252b 11938 /* MOD_VEX_0F71_REG_2 */
592d1631 11939 { Bad_Opcode },
592a252b 11940 { PREFIX_TABLE (PREFIX_VEX_0F71_REG_2) },
b844680a
L
11941 },
11942 {
592a252b 11943 /* MOD_VEX_0F71_REG_4 */
592d1631 11944 { Bad_Opcode },
592a252b 11945 { PREFIX_TABLE (PREFIX_VEX_0F71_REG_4) },
b844680a
L
11946 },
11947 {
592a252b 11948 /* MOD_VEX_0F71_REG_6 */
592d1631 11949 { Bad_Opcode },
592a252b 11950 { PREFIX_TABLE (PREFIX_VEX_0F71_REG_6) },
b844680a
L
11951 },
11952 {
592a252b 11953 /* MOD_VEX_0F72_REG_2 */
592d1631 11954 { Bad_Opcode },
592a252b 11955 { PREFIX_TABLE (PREFIX_VEX_0F72_REG_2) },
b844680a 11956 },
d8faab4e 11957 {
592a252b 11958 /* MOD_VEX_0F72_REG_4 */
592d1631 11959 { Bad_Opcode },
592a252b 11960 { PREFIX_TABLE (PREFIX_VEX_0F72_REG_4) },
d8faab4e
L
11961 },
11962 {
592a252b 11963 /* MOD_VEX_0F72_REG_6 */
592d1631 11964 { Bad_Opcode },
592a252b 11965 { PREFIX_TABLE (PREFIX_VEX_0F72_REG_6) },
d8faab4e 11966 },
876d4bfa 11967 {
592a252b 11968 /* MOD_VEX_0F73_REG_2 */
592d1631 11969 { Bad_Opcode },
592a252b 11970 { PREFIX_TABLE (PREFIX_VEX_0F73_REG_2) },
876d4bfa
L
11971 },
11972 {
592a252b 11973 /* MOD_VEX_0F73_REG_3 */
592d1631 11974 { Bad_Opcode },
592a252b 11975 { PREFIX_TABLE (PREFIX_VEX_0F73_REG_3) },
475a2301
L
11976 },
11977 {
592a252b 11978 /* MOD_VEX_0F73_REG_6 */
592d1631 11979 { Bad_Opcode },
592a252b 11980 { PREFIX_TABLE (PREFIX_VEX_0F73_REG_6) },
876d4bfa
L
11981 },
11982 {
592a252b 11983 /* MOD_VEX_0F73_REG_7 */
592d1631 11984 { Bad_Opcode },
592a252b 11985 { PREFIX_TABLE (PREFIX_VEX_0F73_REG_7) },
876d4bfa 11986 },
ab4e4ed5
AF
11987 {
11988 /* MOD_VEX_W_0_0F91_P_0_LEN_0 */
11989 { "kmovw", { Ew, MaskG }, 0 },
11990 { Bad_Opcode },
11991 },
11992 {
11993 /* MOD_VEX_W_0_0F91_P_0_LEN_0 */
11994 { "kmovq", { Eq, MaskG }, 0 },
11995 { Bad_Opcode },
11996 },
11997 {
11998 /* MOD_VEX_W_0_0F91_P_2_LEN_0 */
11999 { "kmovb", { Eb, MaskG }, 0 },
12000 { Bad_Opcode },
12001 },
12002 {
12003 /* MOD_VEX_W_0_0F91_P_2_LEN_0 */
12004 { "kmovd", { Ed, MaskG }, 0 },
12005 { Bad_Opcode },
12006 },
12007 {
12008 /* MOD_VEX_W_0_0F92_P_0_LEN_0 */
12009 { Bad_Opcode },
12010 { "kmovw", { MaskG, Rdq }, 0 },
12011 },
12012 {
12013 /* MOD_VEX_W_0_0F92_P_2_LEN_0 */
12014 { Bad_Opcode },
12015 { "kmovb", { MaskG, Rdq }, 0 },
12016 },
12017 {
12018 /* MOD_VEX_W_0_0F92_P_3_LEN_0 */
12019 { Bad_Opcode },
12020 { "kmovd", { MaskG, Rdq }, 0 },
12021 },
12022 {
12023 /* MOD_VEX_W_1_0F92_P_3_LEN_0 */
12024 { Bad_Opcode },
12025 { "kmovq", { MaskG, Rdq }, 0 },
12026 },
12027 {
12028 /* MOD_VEX_W_0_0F93_P_0_LEN_0 */
12029 { Bad_Opcode },
12030 { "kmovw", { Gdq, MaskR }, 0 },
12031 },
12032 {
12033 /* MOD_VEX_W_0_0F93_P_2_LEN_0 */
12034 { Bad_Opcode },
12035 { "kmovb", { Gdq, MaskR }, 0 },
12036 },
12037 {
12038 /* MOD_VEX_W_0_0F93_P_3_LEN_0 */
12039 { Bad_Opcode },
12040 { "kmovd", { Gdq, MaskR }, 0 },
12041 },
12042 {
12043 /* MOD_VEX_W_1_0F93_P_3_LEN_0 */
12044 { Bad_Opcode },
12045 { "kmovq", { Gdq, MaskR }, 0 },
12046 },
12047 {
12048 /* MOD_VEX_W_0_0F98_P_0_LEN_0 */
12049 { Bad_Opcode },
12050 { "kortestw", { MaskG, MaskR }, 0 },
12051 },
12052 {
12053 /* MOD_VEX_W_1_0F98_P_0_LEN_0 */
12054 { Bad_Opcode },
12055 { "kortestq", { MaskG, MaskR }, 0 },
12056 },
12057 {
12058 /* MOD_VEX_W_0_0F98_P_2_LEN_0 */
12059 { Bad_Opcode },
12060 { "kortestb", { MaskG, MaskR }, 0 },
12061 },
12062 {
12063 /* MOD_VEX_W_1_0F98_P_2_LEN_0 */
12064 { Bad_Opcode },
12065 { "kortestd", { MaskG, MaskR }, 0 },
12066 },
12067 {
12068 /* MOD_VEX_W_0_0F99_P_0_LEN_0 */
12069 { Bad_Opcode },
12070 { "ktestw", { MaskG, MaskR }, 0 },
12071 },
12072 {
12073 /* MOD_VEX_W_1_0F99_P_0_LEN_0 */
12074 { Bad_Opcode },
12075 { "ktestq", { MaskG, MaskR }, 0 },
12076 },
12077 {
12078 /* MOD_VEX_W_0_0F99_P_2_LEN_0 */
12079 { Bad_Opcode },
12080 { "ktestb", { MaskG, MaskR }, 0 },
12081 },
12082 {
12083 /* MOD_VEX_W_1_0F99_P_2_LEN_0 */
12084 { Bad_Opcode },
12085 { "ktestd", { MaskG, MaskR }, 0 },
12086 },
876d4bfa 12087 {
592a252b
L
12088 /* MOD_VEX_0FAE_REG_2 */
12089 { VEX_LEN_TABLE (VEX_LEN_0FAE_R_2_M_0) },
876d4bfa 12090 },
bbedc832 12091 {
592a252b
L
12092 /* MOD_VEX_0FAE_REG_3 */
12093 { VEX_LEN_TABLE (VEX_LEN_0FAE_R_3_M_0) },
bbedc832 12094 },
144c41d9 12095 {
592a252b 12096 /* MOD_VEX_0FD7_PREFIX_2 */
592d1631 12097 { Bad_Opcode },
6c30d220 12098 { VEX_W_TABLE (VEX_W_0FD7_P_2_M_1) },
144c41d9 12099 },
1afd85e3 12100 {
592a252b
L
12101 /* MOD_VEX_0FE7_PREFIX_2 */
12102 { VEX_W_TABLE (VEX_W_0FE7_P_2_M_0) },
1afd85e3
L
12103 },
12104 {
592a252b
L
12105 /* MOD_VEX_0FF0_PREFIX_3 */
12106 { VEX_W_TABLE (VEX_W_0FF0_P_3_M_0) },
92fddf8e 12107 },
75c135a8 12108 {
592a252b
L
12109 /* MOD_VEX_0F381A_PREFIX_2 */
12110 { VEX_LEN_TABLE (VEX_LEN_0F381A_P_2_M_0) },
75c135a8 12111 },
1afd85e3 12112 {
592a252b 12113 /* MOD_VEX_0F382A_PREFIX_2 */
6c30d220 12114 { VEX_W_TABLE (VEX_W_0F382A_P_2_M_0) },
1afd85e3 12115 },
75c135a8 12116 {
592a252b
L
12117 /* MOD_VEX_0F382C_PREFIX_2 */
12118 { VEX_W_TABLE (VEX_W_0F382C_P_2_M_0) },
75c135a8 12119 },
1afd85e3 12120 {
592a252b
L
12121 /* MOD_VEX_0F382D_PREFIX_2 */
12122 { VEX_W_TABLE (VEX_W_0F382D_P_2_M_0) },
1afd85e3
L
12123 },
12124 {
592a252b
L
12125 /* MOD_VEX_0F382E_PREFIX_2 */
12126 { VEX_W_TABLE (VEX_W_0F382E_P_2_M_0) },
1afd85e3
L
12127 },
12128 {
592a252b
L
12129 /* MOD_VEX_0F382F_PREFIX_2 */
12130 { VEX_W_TABLE (VEX_W_0F382F_P_2_M_0) },
1afd85e3 12131 },
6c30d220
L
12132 {
12133 /* MOD_VEX_0F385A_PREFIX_2 */
12134 { VEX_LEN_TABLE (VEX_LEN_0F385A_P_2_M_0) },
12135 },
12136 {
12137 /* MOD_VEX_0F388C_PREFIX_2 */
bf890a93 12138 { "vpmaskmov%LW", { XM, Vex, Mx }, 0 },
6c30d220
L
12139 },
12140 {
12141 /* MOD_VEX_0F388E_PREFIX_2 */
bf890a93 12142 { "vpmaskmov%LW", { Mx, Vex, XM }, 0 },
6c30d220 12143 },
ab4e4ed5
AF
12144 {
12145 /* MOD_VEX_W_0_0F3A30_P_2_LEN_0 */
12146 { Bad_Opcode },
12147 { "kshiftrb", { MaskG, MaskR, Ib }, 0 },
12148 },
12149 {
12150 /* MOD_VEX_W_1_0F3A30_P_2_LEN_0 */
12151 { Bad_Opcode },
12152 { "kshiftrw", { MaskG, MaskR, Ib }, 0 },
12153 },
12154 {
12155 /* MOD_VEX_W_0_0F3A31_P_2_LEN_0 */
12156 { Bad_Opcode },
12157 { "kshiftrd", { MaskG, MaskR, Ib }, 0 },
12158 },
12159 {
12160 /* MOD_VEX_W_1_0F3A31_P_2_LEN_0 */
12161 { Bad_Opcode },
12162 { "kshiftrq", { MaskG, MaskR, Ib }, 0 },
12163 },
12164 {
12165 /* MOD_VEX_W_0_0F3A32_P_2_LEN_0 */
12166 { Bad_Opcode },
12167 { "kshiftlb", { MaskG, MaskR, Ib }, 0 },
12168 },
12169 {
12170 /* MOD_VEX_W_1_0F3A32_P_2_LEN_0 */
12171 { Bad_Opcode },
12172 { "kshiftlw", { MaskG, MaskR, Ib }, 0 },
12173 },
12174 {
12175 /* MOD_VEX_W_0_0F3A33_P_2_LEN_0 */
12176 { Bad_Opcode },
12177 { "kshiftld", { MaskG, MaskR, Ib }, 0 },
12178 },
12179 {
12180 /* MOD_VEX_W_1_0F3A33_P_2_LEN_0 */
12181 { Bad_Opcode },
12182 { "kshiftlq", { MaskG, MaskR, Ib }, 0 },
12183 },
43234a1e
L
12184#define NEED_MOD_TABLE
12185#include "i386-dis-evex.h"
12186#undef NEED_MOD_TABLE
b844680a
L
12187};
12188
1ceb70f8 12189static const struct dis386 rm_table[][8] = {
42164a71
L
12190 {
12191 /* RM_C6_REG_7 */
bf890a93 12192 { "xabort", { Skip_MODRM, Ib }, 0 },
42164a71
L
12193 },
12194 {
12195 /* RM_C7_REG_7 */
bf890a93 12196 { "xbeginT", { Skip_MODRM, Jv }, 0 },
42164a71 12197 },
b844680a 12198 {
1ceb70f8 12199 /* RM_0F01_REG_0 */
592d1631 12200 { Bad_Opcode },
bf890a93
IT
12201 { "vmcall", { Skip_MODRM }, 0 },
12202 { "vmlaunch", { Skip_MODRM }, 0 },
12203 { "vmresume", { Skip_MODRM }, 0 },
12204 { "vmxoff", { Skip_MODRM }, 0 },
b844680a
L
12205 },
12206 {
1ceb70f8 12207 /* RM_0F01_REG_1 */
bf890a93
IT
12208 { "monitor", { { OP_Monitor, 0 } }, 0 },
12209 { "mwait", { { OP_Mwait, 0 } }, 0 },
12210 { "clac", { Skip_MODRM }, 0 },
12211 { "stac", { Skip_MODRM }, 0 },
2cf200a4
IT
12212 { Bad_Opcode },
12213 { Bad_Opcode },
12214 { Bad_Opcode },
bf890a93 12215 { "encls", { Skip_MODRM }, 0 },
b844680a 12216 },
475a2301
L
12217 {
12218 /* RM_0F01_REG_2 */
bf890a93
IT
12219 { "xgetbv", { Skip_MODRM }, 0 },
12220 { "xsetbv", { Skip_MODRM }, 0 },
8729a6f6
L
12221 { Bad_Opcode },
12222 { Bad_Opcode },
bf890a93
IT
12223 { "vmfunc", { Skip_MODRM }, 0 },
12224 { "xend", { Skip_MODRM }, 0 },
12225 { "xtest", { Skip_MODRM }, 0 },
12226 { "enclu", { Skip_MODRM }, 0 },
475a2301 12227 },
b844680a 12228 {
1ceb70f8 12229 /* RM_0F01_REG_3 */
bf890a93
IT
12230 { "vmrun", { Skip_MODRM }, 0 },
12231 { "vmmcall", { Skip_MODRM }, 0 },
12232 { "vmload", { Skip_MODRM }, 0 },
12233 { "vmsave", { Skip_MODRM }, 0 },
12234 { "stgi", { Skip_MODRM }, 0 },
12235 { "clgi", { Skip_MODRM }, 0 },
12236 { "skinit", { Skip_MODRM }, 0 },
12237 { "invlpga", { Skip_MODRM }, 0 },
4e7d34a6 12238 },
8eab4136
L
12239 {
12240 /* RM_0F01_REG_5 */
2234eee6 12241 { PREFIX_TABLE (PREFIX_MOD_3_0F01_REG_5_RM_0) },
8eab4136 12242 { Bad_Opcode },
603555e5 12243 { PREFIX_TABLE (PREFIX_MOD_3_0F01_REG_5_RM_2) },
8eab4136
L
12244 { Bad_Opcode },
12245 { Bad_Opcode },
12246 { Bad_Opcode },
12247 { "rdpkru", { Skip_MODRM }, 0 },
12248 { "wrpkru", { Skip_MODRM }, 0 },
12249 },
4e7d34a6 12250 {
1ceb70f8 12251 /* RM_0F01_REG_7 */
bf890a93
IT
12252 { "swapgs", { Skip_MODRM }, 0 },
12253 { "rdtscp", { Skip_MODRM }, 0 },
9916071f
AP
12254 { "monitorx", { { OP_Monitor, 0 } }, 0 },
12255 { "mwaitx", { { OP_Mwaitx, 0 } }, 0 },
bf890a93 12256 { "clzero", { Skip_MODRM }, 0 },
b844680a 12257 },
603555e5
L
12258 {
12259 /* RM_0F1E_MOD_3_REG_7 */
12260 { "nopQ", { Ev }, 0 },
12261 { "nopQ", { Ev }, 0 },
12262 { "endbr64", { Skip_MODRM }, PREFIX_OPCODE },
12263 { "endbr32", { Skip_MODRM }, PREFIX_OPCODE },
12264 { "nopQ", { Ev }, 0 },
12265 { "nopQ", { Ev }, 0 },
12266 { "nopQ", { Ev }, 0 },
12267 { "nopQ", { Ev }, 0 },
12268 },
b844680a 12269 {
1ceb70f8 12270 /* RM_0FAE_REG_6 */
bf890a93 12271 { "mfence", { Skip_MODRM }, 0 },
b844680a 12272 },
bbedc832 12273 {
1ceb70f8 12274 /* RM_0FAE_REG_7 */
b5cefcca
L
12275 { "sfence", { Skip_MODRM }, 0 },
12276
144c41d9 12277 },
b844680a
L
12278};
12279
c608c12e
AM
12280#define INTERNAL_DISASSEMBLER_ERROR _("<internal disassembler error>")
12281
f16cd0d5
L
12282/* We use the high bit to indicate different name for the same
12283 prefix. */
f16cd0d5 12284#define REP_PREFIX (0xf3 | 0x100)
42164a71
L
12285#define XACQUIRE_PREFIX (0xf2 | 0x200)
12286#define XRELEASE_PREFIX (0xf3 | 0x400)
7e8b059b 12287#define BND_PREFIX (0xf2 | 0x400)
04ef582a 12288#define NOTRACK_PREFIX (0x3e | 0x100)
f16cd0d5
L
12289
12290static int
26ca5450 12291ckprefix (void)
252b5132 12292{
f16cd0d5 12293 int newrex, i, length;
52b15da3 12294 rex = 0;
c0f3af97 12295 rex_ignored = 0;
252b5132 12296 prefixes = 0;
7d421014 12297 used_prefixes = 0;
52b15da3 12298 rex_used = 0;
f16cd0d5
L
12299 last_lock_prefix = -1;
12300 last_repz_prefix = -1;
12301 last_repnz_prefix = -1;
12302 last_data_prefix = -1;
12303 last_addr_prefix = -1;
12304 last_rex_prefix = -1;
12305 last_seg_prefix = -1;
04ef582a 12306 last_active_prefix = -1;
d9949a36 12307 fwait_prefix = -1;
285ca992 12308 active_seg_prefix = 0;
f310f33d
L
12309 for (i = 0; i < (int) ARRAY_SIZE (all_prefixes); i++)
12310 all_prefixes[i] = 0;
12311 i = 0;
f16cd0d5
L
12312 length = 0;
12313 /* The maximum instruction length is 15bytes. */
12314 while (length < MAX_CODE_LENGTH - 1)
252b5132
RH
12315 {
12316 FETCH_DATA (the_info, codep + 1);
52b15da3 12317 newrex = 0;
252b5132
RH
12318 switch (*codep)
12319 {
52b15da3
JH
12320 /* REX prefixes family. */
12321 case 0x40:
12322 case 0x41:
12323 case 0x42:
12324 case 0x43:
12325 case 0x44:
12326 case 0x45:
12327 case 0x46:
12328 case 0x47:
12329 case 0x48:
12330 case 0x49:
12331 case 0x4a:
12332 case 0x4b:
12333 case 0x4c:
12334 case 0x4d:
12335 case 0x4e:
12336 case 0x4f:
f16cd0d5
L
12337 if (address_mode == mode_64bit)
12338 newrex = *codep;
12339 else
12340 return 1;
12341 last_rex_prefix = i;
52b15da3 12342 break;
252b5132
RH
12343 case 0xf3:
12344 prefixes |= PREFIX_REPZ;
f16cd0d5 12345 last_repz_prefix = i;
252b5132
RH
12346 break;
12347 case 0xf2:
12348 prefixes |= PREFIX_REPNZ;
f16cd0d5 12349 last_repnz_prefix = i;
252b5132
RH
12350 break;
12351 case 0xf0:
12352 prefixes |= PREFIX_LOCK;
f16cd0d5 12353 last_lock_prefix = i;
252b5132
RH
12354 break;
12355 case 0x2e:
12356 prefixes |= PREFIX_CS;
f16cd0d5 12357 last_seg_prefix = i;
285ca992 12358 active_seg_prefix = PREFIX_CS;
252b5132
RH
12359 break;
12360 case 0x36:
12361 prefixes |= PREFIX_SS;
f16cd0d5 12362 last_seg_prefix = i;
285ca992 12363 active_seg_prefix = PREFIX_SS;
252b5132
RH
12364 break;
12365 case 0x3e:
12366 prefixes |= PREFIX_DS;
f16cd0d5 12367 last_seg_prefix = i;
285ca992 12368 active_seg_prefix = PREFIX_DS;
252b5132
RH
12369 break;
12370 case 0x26:
12371 prefixes |= PREFIX_ES;
f16cd0d5 12372 last_seg_prefix = i;
285ca992 12373 active_seg_prefix = PREFIX_ES;
252b5132
RH
12374 break;
12375 case 0x64:
12376 prefixes |= PREFIX_FS;
f16cd0d5 12377 last_seg_prefix = i;
285ca992 12378 active_seg_prefix = PREFIX_FS;
252b5132
RH
12379 break;
12380 case 0x65:
12381 prefixes |= PREFIX_GS;
f16cd0d5 12382 last_seg_prefix = i;
285ca992 12383 active_seg_prefix = PREFIX_GS;
252b5132
RH
12384 break;
12385 case 0x66:
12386 prefixes |= PREFIX_DATA;
f16cd0d5 12387 last_data_prefix = i;
252b5132
RH
12388 break;
12389 case 0x67:
12390 prefixes |= PREFIX_ADDR;
f16cd0d5 12391 last_addr_prefix = i;
252b5132 12392 break;
5076851f 12393 case FWAIT_OPCODE:
252b5132
RH
12394 /* fwait is really an instruction. If there are prefixes
12395 before the fwait, they belong to the fwait, *not* to the
12396 following instruction. */
d9949a36 12397 fwait_prefix = i;
3e7d61b2 12398 if (prefixes || rex)
252b5132
RH
12399 {
12400 prefixes |= PREFIX_FWAIT;
12401 codep++;
6c067bbb
RM
12402 /* This ensures that the previous REX prefixes are noticed
12403 as unused prefixes, as in the return case below. */
12404 rex_used = rex;
f16cd0d5 12405 return 1;
252b5132
RH
12406 }
12407 prefixes = PREFIX_FWAIT;
12408 break;
12409 default:
f16cd0d5 12410 return 1;
252b5132 12411 }
52b15da3
JH
12412 /* Rex is ignored when followed by another prefix. */
12413 if (rex)
12414 {
3e7d61b2 12415 rex_used = rex;
f16cd0d5 12416 return 1;
52b15da3 12417 }
f16cd0d5 12418 if (*codep != FWAIT_OPCODE)
04ef582a
L
12419 {
12420 last_active_prefix = i;
12421 all_prefixes[i++] = *codep;
12422 }
52b15da3 12423 rex = newrex;
252b5132 12424 codep++;
f16cd0d5
L
12425 length++;
12426 }
12427 return 0;
12428}
12429
7d421014
ILT
12430/* Return the name of the prefix byte PREF, or NULL if PREF is not a
12431 prefix byte. */
12432
12433static const char *
26ca5450 12434prefix_name (int pref, int sizeflag)
7d421014 12435{
0003779b
L
12436 static const char *rexes [16] =
12437 {
12438 "rex", /* 0x40 */
12439 "rex.B", /* 0x41 */
12440 "rex.X", /* 0x42 */
12441 "rex.XB", /* 0x43 */
12442 "rex.R", /* 0x44 */
12443 "rex.RB", /* 0x45 */
12444 "rex.RX", /* 0x46 */
12445 "rex.RXB", /* 0x47 */
12446 "rex.W", /* 0x48 */
12447 "rex.WB", /* 0x49 */
12448 "rex.WX", /* 0x4a */
12449 "rex.WXB", /* 0x4b */
12450 "rex.WR", /* 0x4c */
12451 "rex.WRB", /* 0x4d */
12452 "rex.WRX", /* 0x4e */
12453 "rex.WRXB", /* 0x4f */
12454 };
12455
7d421014
ILT
12456 switch (pref)
12457 {
52b15da3
JH
12458 /* REX prefixes family. */
12459 case 0x40:
52b15da3 12460 case 0x41:
52b15da3 12461 case 0x42:
52b15da3 12462 case 0x43:
52b15da3 12463 case 0x44:
52b15da3 12464 case 0x45:
52b15da3 12465 case 0x46:
52b15da3 12466 case 0x47:
52b15da3 12467 case 0x48:
52b15da3 12468 case 0x49:
52b15da3 12469 case 0x4a:
52b15da3 12470 case 0x4b:
52b15da3 12471 case 0x4c:
52b15da3 12472 case 0x4d:
52b15da3 12473 case 0x4e:
52b15da3 12474 case 0x4f:
0003779b 12475 return rexes [pref - 0x40];
7d421014
ILT
12476 case 0xf3:
12477 return "repz";
12478 case 0xf2:
12479 return "repnz";
12480 case 0xf0:
12481 return "lock";
12482 case 0x2e:
12483 return "cs";
12484 case 0x36:
12485 return "ss";
12486 case 0x3e:
12487 return "ds";
12488 case 0x26:
12489 return "es";
12490 case 0x64:
12491 return "fs";
12492 case 0x65:
12493 return "gs";
12494 case 0x66:
12495 return (sizeflag & DFLAG) ? "data16" : "data32";
12496 case 0x67:
cb712a9e 12497 if (address_mode == mode_64bit)
db6eb5be 12498 return (sizeflag & AFLAG) ? "addr32" : "addr64";
c1a64871 12499 else
2888cb7a 12500 return (sizeflag & AFLAG) ? "addr16" : "addr32";
7d421014
ILT
12501 case FWAIT_OPCODE:
12502 return "fwait";
f16cd0d5
L
12503 case REP_PREFIX:
12504 return "rep";
42164a71
L
12505 case XACQUIRE_PREFIX:
12506 return "xacquire";
12507 case XRELEASE_PREFIX:
12508 return "xrelease";
7e8b059b
L
12509 case BND_PREFIX:
12510 return "bnd";
04ef582a
L
12511 case NOTRACK_PREFIX:
12512 return "notrack";
7d421014
ILT
12513 default:
12514 return NULL;
12515 }
12516}
12517
ce518a5f
L
12518static char op_out[MAX_OPERANDS][100];
12519static int op_ad, op_index[MAX_OPERANDS];
1d9f512f 12520static int two_source_ops;
ce518a5f
L
12521static bfd_vma op_address[MAX_OPERANDS];
12522static bfd_vma op_riprel[MAX_OPERANDS];
52b15da3 12523static bfd_vma start_pc;
ce518a5f 12524
252b5132
RH
12525/*
12526 * On the 386's of 1988, the maximum length of an instruction is 15 bytes.
12527 * (see topic "Redundant prefixes" in the "Differences from 8086"
12528 * section of the "Virtual 8086 Mode" chapter.)
12529 * 'pc' should be the address of this instruction, it will
12530 * be used to print the target address if this is a relative jump or call
12531 * The function returns the length of this instruction in bytes.
12532 */
12533
252b5132 12534static char intel_syntax;
9d141669 12535static char intel_mnemonic = !SYSV386_COMPAT;
252b5132
RH
12536static char open_char;
12537static char close_char;
12538static char separator_char;
12539static char scale_char;
12540
5db04b09
L
12541enum x86_64_isa
12542{
12543 amd64 = 0,
12544 intel64
12545};
12546
12547static enum x86_64_isa isa64;
12548
e396998b
AM
12549/* Here for backwards compatibility. When gdb stops using
12550 print_insn_i386_att and print_insn_i386_intel these functions can
12551 disappear, and print_insn_i386 be merged into print_insn. */
252b5132 12552int
26ca5450 12553print_insn_i386_att (bfd_vma pc, disassemble_info *info)
252b5132
RH
12554{
12555 intel_syntax = 0;
e396998b
AM
12556
12557 return print_insn (pc, info);
252b5132
RH
12558}
12559
12560int
26ca5450 12561print_insn_i386_intel (bfd_vma pc, disassemble_info *info)
252b5132
RH
12562{
12563 intel_syntax = 1;
e396998b
AM
12564
12565 return print_insn (pc, info);
252b5132
RH
12566}
12567
e396998b 12568int
26ca5450 12569print_insn_i386 (bfd_vma pc, disassemble_info *info)
e396998b
AM
12570{
12571 intel_syntax = -1;
12572
12573 return print_insn (pc, info);
12574}
12575
f59a29b9
L
12576void
12577print_i386_disassembler_options (FILE *stream)
12578{
12579 fprintf (stream, _("\n\
12580The following i386/x86-64 specific disassembler options are supported for use\n\
12581with the -M switch (multiple options should be separated by commas):\n"));
12582
12583 fprintf (stream, _(" x86-64 Disassemble in 64bit mode\n"));
12584 fprintf (stream, _(" i386 Disassemble in 32bit mode\n"));
12585 fprintf (stream, _(" i8086 Disassemble in 16bit mode\n"));
12586 fprintf (stream, _(" att Display instruction in AT&T syntax\n"));
12587 fprintf (stream, _(" intel Display instruction in Intel syntax\n"));
9d141669
L
12588 fprintf (stream, _(" att-mnemonic\n"
12589 " Display instruction in AT&T mnemonic\n"));
12590 fprintf (stream, _(" intel-mnemonic\n"
12591 " Display instruction in Intel mnemonic\n"));
f59a29b9
L
12592 fprintf (stream, _(" addr64 Assume 64bit address size\n"));
12593 fprintf (stream, _(" addr32 Assume 32bit address size\n"));
12594 fprintf (stream, _(" addr16 Assume 16bit address size\n"));
12595 fprintf (stream, _(" data32 Assume 32bit data size\n"));
12596 fprintf (stream, _(" data16 Assume 16bit data size\n"));
12597 fprintf (stream, _(" suffix Always display instruction suffix in AT&T syntax\n"));
5db04b09
L
12598 fprintf (stream, _(" amd64 Display instruction in AMD64 ISA\n"));
12599 fprintf (stream, _(" intel64 Display instruction in Intel64 ISA\n"));
f59a29b9
L
12600}
12601
592d1631 12602/* Bad opcode. */
bf890a93 12603static const struct dis386 bad_opcode = { "(bad)", { XX }, 0 };
592d1631 12604
b844680a
L
12605/* Get a pointer to struct dis386 with a valid name. */
12606
12607static const struct dis386 *
8bb15339 12608get_valid_dis386 (const struct dis386 *dp, disassemble_info *info)
b844680a 12609{
91d6fa6a 12610 int vindex, vex_table_index;
b844680a
L
12611
12612 if (dp->name != NULL)
12613 return dp;
12614
12615 switch (dp->op[0].bytemode)
12616 {
1ceb70f8
L
12617 case USE_REG_TABLE:
12618 dp = &reg_table[dp->op[1].bytemode][modrm.reg];
12619 break;
12620
12621 case USE_MOD_TABLE:
91d6fa6a
NC
12622 vindex = modrm.mod == 0x3 ? 1 : 0;
12623 dp = &mod_table[dp->op[1].bytemode][vindex];
1ceb70f8
L
12624 break;
12625
12626 case USE_RM_TABLE:
12627 dp = &rm_table[dp->op[1].bytemode][modrm.rm];
b844680a
L
12628 break;
12629
4e7d34a6 12630 case USE_PREFIX_TABLE:
c0f3af97 12631 if (need_vex)
b844680a 12632 {
c0f3af97
L
12633 /* The prefix in VEX is implicit. */
12634 switch (vex.prefix)
12635 {
12636 case 0:
91d6fa6a 12637 vindex = 0;
c0f3af97
L
12638 break;
12639 case REPE_PREFIX_OPCODE:
91d6fa6a 12640 vindex = 1;
c0f3af97
L
12641 break;
12642 case DATA_PREFIX_OPCODE:
91d6fa6a 12643 vindex = 2;
c0f3af97
L
12644 break;
12645 case REPNE_PREFIX_OPCODE:
91d6fa6a 12646 vindex = 3;
c0f3af97
L
12647 break;
12648 default:
12649 abort ();
12650 break;
12651 }
b844680a 12652 }
7bb15c6f 12653 else
b844680a 12654 {
285ca992
L
12655 int last_prefix = -1;
12656 int prefix = 0;
91d6fa6a 12657 vindex = 0;
285ca992
L
12658 /* We check PREFIX_REPNZ and PREFIX_REPZ before PREFIX_DATA.
12659 When there are multiple PREFIX_REPNZ and PREFIX_REPZ, the
12660 last one wins. */
12661 if ((prefixes & (PREFIX_REPZ | PREFIX_REPNZ)) != 0)
b844680a 12662 {
285ca992 12663 if (last_repz_prefix > last_repnz_prefix)
c0f3af97 12664 {
285ca992
L
12665 vindex = 1;
12666 prefix = PREFIX_REPZ;
12667 last_prefix = last_repz_prefix;
c0f3af97
L
12668 }
12669 else
b844680a 12670 {
285ca992
L
12671 vindex = 3;
12672 prefix = PREFIX_REPNZ;
12673 last_prefix = last_repnz_prefix;
b844680a 12674 }
285ca992 12675
507bd325
L
12676 /* Check if prefix should be ignored. */
12677 if ((((prefix_table[dp->op[1].bytemode][vindex].prefix_requirement
12678 & PREFIX_IGNORED) >> PREFIX_IGNORED_SHIFT)
12679 & prefix) != 0)
285ca992
L
12680 vindex = 0;
12681 }
12682
12683 if (vindex == 0 && (prefixes & PREFIX_DATA) != 0)
12684 {
12685 vindex = 2;
12686 prefix = PREFIX_DATA;
12687 last_prefix = last_data_prefix;
12688 }
12689
12690 if (vindex != 0)
12691 {
12692 used_prefixes |= prefix;
12693 all_prefixes[last_prefix] = 0;
b844680a
L
12694 }
12695 }
91d6fa6a 12696 dp = &prefix_table[dp->op[1].bytemode][vindex];
b844680a
L
12697 break;
12698
4e7d34a6 12699 case USE_X86_64_TABLE:
91d6fa6a
NC
12700 vindex = address_mode == mode_64bit ? 1 : 0;
12701 dp = &x86_64_table[dp->op[1].bytemode][vindex];
b844680a
L
12702 break;
12703
4e7d34a6 12704 case USE_3BYTE_TABLE:
8bb15339 12705 FETCH_DATA (info, codep + 2);
91d6fa6a
NC
12706 vindex = *codep++;
12707 dp = &three_byte_table[dp->op[1].bytemode][vindex];
285ca992 12708 end_codep = codep;
8bb15339
L
12709 modrm.mod = (*codep >> 6) & 3;
12710 modrm.reg = (*codep >> 3) & 7;
12711 modrm.rm = *codep & 7;
12712 break;
12713
c0f3af97
L
12714 case USE_VEX_LEN_TABLE:
12715 if (!need_vex)
12716 abort ();
12717
12718 switch (vex.length)
12719 {
12720 case 128:
91d6fa6a 12721 vindex = 0;
c0f3af97
L
12722 break;
12723 case 256:
91d6fa6a 12724 vindex = 1;
c0f3af97
L
12725 break;
12726 default:
12727 abort ();
12728 break;
12729 }
12730
91d6fa6a 12731 dp = &vex_len_table[dp->op[1].bytemode][vindex];
c0f3af97
L
12732 break;
12733
f88c9eb0
SP
12734 case USE_XOP_8F_TABLE:
12735 FETCH_DATA (info, codep + 3);
12736 /* All bits in the REX prefix are ignored. */
12737 rex_ignored = rex;
12738 rex = ~(*codep >> 5) & 0x7;
12739
12740 /* VEX_TABLE_INDEX is the mmmmm part of the XOP byte 1 "RCB.mmmmm". */
12741 switch ((*codep & 0x1f))
12742 {
12743 default:
f07af43e
L
12744 dp = &bad_opcode;
12745 return dp;
5dd85c99
SP
12746 case 0x8:
12747 vex_table_index = XOP_08;
12748 break;
f88c9eb0
SP
12749 case 0x9:
12750 vex_table_index = XOP_09;
12751 break;
12752 case 0xa:
12753 vex_table_index = XOP_0A;
12754 break;
12755 }
12756 codep++;
12757 vex.w = *codep & 0x80;
12758 if (vex.w && address_mode == mode_64bit)
12759 rex |= REX_W;
12760
12761 vex.register_specifier = (~(*codep >> 3)) & 0xf;
abfcb414 12762 if (address_mode != mode_64bit)
f07af43e 12763 {
abfcb414
AP
12764 /* In 16/32-bit mode REX_B is silently ignored. */
12765 rex &= ~REX_B;
12766 if (vex.register_specifier > 0x7)
12767 {
12768 dp = &bad_opcode;
12769 return dp;
12770 }
f07af43e 12771 }
f88c9eb0
SP
12772
12773 vex.length = (*codep & 0x4) ? 256 : 128;
12774 switch ((*codep & 0x3))
12775 {
12776 case 0:
12777 vex.prefix = 0;
12778 break;
12779 case 1:
12780 vex.prefix = DATA_PREFIX_OPCODE;
12781 break;
12782 case 2:
12783 vex.prefix = REPE_PREFIX_OPCODE;
12784 break;
12785 case 3:
12786 vex.prefix = REPNE_PREFIX_OPCODE;
12787 break;
12788 }
12789 need_vex = 1;
12790 need_vex_reg = 1;
12791 codep++;
91d6fa6a
NC
12792 vindex = *codep++;
12793 dp = &xop_table[vex_table_index][vindex];
c48244a5 12794
285ca992 12795 end_codep = codep;
c48244a5
SP
12796 FETCH_DATA (info, codep + 1);
12797 modrm.mod = (*codep >> 6) & 3;
12798 modrm.reg = (*codep >> 3) & 7;
12799 modrm.rm = *codep & 7;
f88c9eb0
SP
12800 break;
12801
c0f3af97 12802 case USE_VEX_C4_TABLE:
43234a1e 12803 /* VEX prefix. */
c0f3af97
L
12804 FETCH_DATA (info, codep + 3);
12805 /* All bits in the REX prefix are ignored. */
12806 rex_ignored = rex;
12807 rex = ~(*codep >> 5) & 0x7;
12808 switch ((*codep & 0x1f))
12809 {
12810 default:
f07af43e
L
12811 dp = &bad_opcode;
12812 return dp;
c0f3af97 12813 case 0x1:
f88c9eb0 12814 vex_table_index = VEX_0F;
c0f3af97
L
12815 break;
12816 case 0x2:
f88c9eb0 12817 vex_table_index = VEX_0F38;
c0f3af97
L
12818 break;
12819 case 0x3:
f88c9eb0 12820 vex_table_index = VEX_0F3A;
c0f3af97
L
12821 break;
12822 }
12823 codep++;
12824 vex.w = *codep & 0x80;
9889cbb1 12825 if (address_mode == mode_64bit)
f07af43e 12826 {
9889cbb1
L
12827 if (vex.w)
12828 rex |= REX_W;
12829 vex.register_specifier = (~(*codep >> 3)) & 0xf;
12830 }
12831 else
12832 {
12833 /* For the 3-byte VEX prefix in 32-bit mode, the REX_B bit
12834 is ignored, other REX bits are 0 and the highest bit in
12835 VEX.vvvv is also ignored. */
12836 rex = 0;
12837 vex.register_specifier = (~(*codep >> 3)) & 0x7;
f07af43e 12838 }
c0f3af97
L
12839 vex.length = (*codep & 0x4) ? 256 : 128;
12840 switch ((*codep & 0x3))
12841 {
12842 case 0:
12843 vex.prefix = 0;
12844 break;
12845 case 1:
12846 vex.prefix = DATA_PREFIX_OPCODE;
12847 break;
12848 case 2:
12849 vex.prefix = REPE_PREFIX_OPCODE;
12850 break;
12851 case 3:
12852 vex.prefix = REPNE_PREFIX_OPCODE;
12853 break;
12854 }
12855 need_vex = 1;
12856 need_vex_reg = 1;
12857 codep++;
91d6fa6a
NC
12858 vindex = *codep++;
12859 dp = &vex_table[vex_table_index][vindex];
285ca992 12860 end_codep = codep;
53c4d625
JB
12861 /* There is no MODRM byte for VEX0F 77. */
12862 if (vex_table_index != VEX_0F || vindex != 0x77)
c0f3af97
L
12863 {
12864 FETCH_DATA (info, codep + 1);
12865 modrm.mod = (*codep >> 6) & 3;
12866 modrm.reg = (*codep >> 3) & 7;
12867 modrm.rm = *codep & 7;
12868 }
12869 break;
12870
12871 case USE_VEX_C5_TABLE:
43234a1e 12872 /* VEX prefix. */
c0f3af97
L
12873 FETCH_DATA (info, codep + 2);
12874 /* All bits in the REX prefix are ignored. */
12875 rex_ignored = rex;
12876 rex = (*codep & 0x80) ? 0 : REX_R;
12877
9889cbb1
L
12878 /* For the 2-byte VEX prefix in 32-bit mode, the highest bit in
12879 VEX.vvvv is 1. */
c0f3af97 12880 vex.register_specifier = (~(*codep >> 3)) & 0xf;
759a05ce 12881 vex.w = 0;
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[dp->op[1].bytemode][vindex];
285ca992 12903 end_codep = codep;
53c4d625
JB
12904 /* There is no MODRM byte for VEX 77. */
12905 if (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
9e30b8e0
L
12914 case USE_VEX_W_TABLE:
12915 if (!need_vex)
12916 abort ();
12917
12918 dp = &vex_w_table[dp->op[1].bytemode][vex.w ? 1 : 0];
12919 break;
12920
43234a1e
L
12921 case USE_EVEX_TABLE:
12922 two_source_ops = 0;
12923 /* EVEX prefix. */
12924 vex.evex = 1;
12925 FETCH_DATA (info, codep + 4);
12926 /* All bits in the REX prefix are ignored. */
12927 rex_ignored = rex;
12928 /* The first byte after 0x62. */
12929 rex = ~(*codep >> 5) & 0x7;
12930 vex.r = *codep & 0x10;
12931 switch ((*codep & 0xf))
12932 {
12933 default:
12934 return &bad_opcode;
12935 case 0x1:
12936 vex_table_index = EVEX_0F;
12937 break;
12938 case 0x2:
12939 vex_table_index = EVEX_0F38;
12940 break;
12941 case 0x3:
12942 vex_table_index = EVEX_0F3A;
12943 break;
12944 }
12945
12946 /* The second byte after 0x62. */
12947 codep++;
12948 vex.w = *codep & 0x80;
12949 if (vex.w && address_mode == mode_64bit)
12950 rex |= REX_W;
12951
12952 vex.register_specifier = (~(*codep >> 3)) & 0xf;
12953 if (address_mode != mode_64bit)
12954 {
12955 /* In 16/32-bit mode silently ignore following bits. */
12956 rex &= ~REX_B;
12957 vex.r = 1;
12958 vex.v = 1;
12959 vex.register_specifier &= 0x7;
12960 }
12961
12962 /* The U bit. */
12963 if (!(*codep & 0x4))
12964 return &bad_opcode;
12965
12966 switch ((*codep & 0x3))
12967 {
12968 case 0:
12969 vex.prefix = 0;
12970 break;
12971 case 1:
12972 vex.prefix = DATA_PREFIX_OPCODE;
12973 break;
12974 case 2:
12975 vex.prefix = REPE_PREFIX_OPCODE;
12976 break;
12977 case 3:
12978 vex.prefix = REPNE_PREFIX_OPCODE;
12979 break;
12980 }
12981
12982 /* The third byte after 0x62. */
12983 codep++;
12984
12985 /* Remember the static rounding bits. */
12986 vex.ll = (*codep >> 5) & 3;
12987 vex.b = (*codep & 0x10) != 0;
12988
12989 vex.v = *codep & 0x8;
12990 vex.mask_register_specifier = *codep & 0x7;
12991 vex.zeroing = *codep & 0x80;
12992
12993 need_vex = 1;
12994 need_vex_reg = 1;
12995 codep++;
12996 vindex = *codep++;
12997 dp = &evex_table[vex_table_index][vindex];
285ca992 12998 end_codep = codep;
43234a1e
L
12999 FETCH_DATA (info, codep + 1);
13000 modrm.mod = (*codep >> 6) & 3;
13001 modrm.reg = (*codep >> 3) & 7;
13002 modrm.rm = *codep & 7;
13003
13004 /* Set vector length. */
13005 if (modrm.mod == 3 && vex.b)
13006 vex.length = 512;
13007 else
13008 {
13009 switch (vex.ll)
13010 {
13011 case 0x0:
13012 vex.length = 128;
13013 break;
13014 case 0x1:
13015 vex.length = 256;
13016 break;
13017 case 0x2:
13018 vex.length = 512;
13019 break;
13020 default:
13021 return &bad_opcode;
13022 }
13023 }
13024 break;
13025
592d1631
L
13026 case 0:
13027 dp = &bad_opcode;
13028 break;
13029
b844680a 13030 default:
d34b5006 13031 abort ();
b844680a
L
13032 }
13033
13034 if (dp->name != NULL)
13035 return dp;
13036 else
8bb15339 13037 return get_valid_dis386 (dp, info);
b844680a
L
13038}
13039
dfc8cf43 13040static void
55cf16e1 13041get_sib (disassemble_info *info, int sizeflag)
dfc8cf43
L
13042{
13043 /* If modrm.mod == 3, operand must be register. */
13044 if (need_modrm
55cf16e1 13045 && ((sizeflag & AFLAG) || address_mode == mode_64bit)
dfc8cf43
L
13046 && modrm.mod != 3
13047 && modrm.rm == 4)
13048 {
13049 FETCH_DATA (info, codep + 2);
13050 sib.index = (codep [1] >> 3) & 7;
13051 sib.scale = (codep [1] >> 6) & 3;
13052 sib.base = codep [1] & 7;
13053 }
13054}
13055
e396998b 13056static int
26ca5450 13057print_insn (bfd_vma pc, disassemble_info *info)
252b5132 13058{
2da11e11 13059 const struct dis386 *dp;
252b5132 13060 int i;
ce518a5f 13061 char *op_txt[MAX_OPERANDS];
252b5132 13062 int needcomma;
df18fdba 13063 int sizeflag, orig_sizeflag;
e396998b 13064 const char *p;
252b5132 13065 struct dis_private priv;
f16cd0d5 13066 int prefix_length;
252b5132 13067
d7921315
L
13068 priv.orig_sizeflag = AFLAG | DFLAG;
13069 if ((info->mach & bfd_mach_i386_i386) != 0)
cb712a9e 13070 address_mode = mode_32bit;
2da11e11 13071 else if (info->mach == bfd_mach_i386_i8086)
d7921315
L
13072 {
13073 address_mode = mode_16bit;
13074 priv.orig_sizeflag = 0;
13075 }
2da11e11 13076 else
d7921315
L
13077 address_mode = mode_64bit;
13078
13079 if (intel_syntax == (char) -1)
13080 intel_syntax = (info->mach & bfd_mach_i386_intel_syntax) != 0;
e396998b
AM
13081
13082 for (p = info->disassembler_options; p != NULL; )
13083 {
5db04b09
L
13084 if (CONST_STRNEQ (p, "amd64"))
13085 isa64 = amd64;
13086 else if (CONST_STRNEQ (p, "intel64"))
13087 isa64 = intel64;
13088 else if (CONST_STRNEQ (p, "x86-64"))
e396998b 13089 {
cb712a9e 13090 address_mode = mode_64bit;
e396998b
AM
13091 priv.orig_sizeflag = AFLAG | DFLAG;
13092 }
0112cd26 13093 else if (CONST_STRNEQ (p, "i386"))
e396998b 13094 {
cb712a9e 13095 address_mode = mode_32bit;
e396998b
AM
13096 priv.orig_sizeflag = AFLAG | DFLAG;
13097 }
0112cd26 13098 else if (CONST_STRNEQ (p, "i8086"))
e396998b 13099 {
cb712a9e 13100 address_mode = mode_16bit;
e396998b
AM
13101 priv.orig_sizeflag = 0;
13102 }
0112cd26 13103 else if (CONST_STRNEQ (p, "intel"))
e396998b
AM
13104 {
13105 intel_syntax = 1;
9d141669
L
13106 if (CONST_STRNEQ (p + 5, "-mnemonic"))
13107 intel_mnemonic = 1;
e396998b 13108 }
0112cd26 13109 else if (CONST_STRNEQ (p, "att"))
e396998b
AM
13110 {
13111 intel_syntax = 0;
9d141669
L
13112 if (CONST_STRNEQ (p + 3, "-mnemonic"))
13113 intel_mnemonic = 0;
e396998b 13114 }
0112cd26 13115 else if (CONST_STRNEQ (p, "addr"))
e396998b 13116 {
f59a29b9
L
13117 if (address_mode == mode_64bit)
13118 {
13119 if (p[4] == '3' && p[5] == '2')
13120 priv.orig_sizeflag &= ~AFLAG;
13121 else if (p[4] == '6' && p[5] == '4')
13122 priv.orig_sizeflag |= AFLAG;
13123 }
13124 else
13125 {
13126 if (p[4] == '1' && p[5] == '6')
13127 priv.orig_sizeflag &= ~AFLAG;
13128 else if (p[4] == '3' && p[5] == '2')
13129 priv.orig_sizeflag |= AFLAG;
13130 }
e396998b 13131 }
0112cd26 13132 else if (CONST_STRNEQ (p, "data"))
e396998b
AM
13133 {
13134 if (p[4] == '1' && p[5] == '6')
13135 priv.orig_sizeflag &= ~DFLAG;
13136 else if (p[4] == '3' && p[5] == '2')
13137 priv.orig_sizeflag |= DFLAG;
13138 }
0112cd26 13139 else if (CONST_STRNEQ (p, "suffix"))
e396998b
AM
13140 priv.orig_sizeflag |= SUFFIX_ALWAYS;
13141
13142 p = strchr (p, ',');
13143 if (p != NULL)
13144 p++;
13145 }
13146
c0f92bf9
L
13147 if (address_mode == mode_64bit && sizeof (bfd_vma) < 8)
13148 {
13149 (*info->fprintf_func) (info->stream,
13150 _("64-bit address is disabled"));
13151 return -1;
13152 }
13153
e396998b
AM
13154 if (intel_syntax)
13155 {
13156 names64 = intel_names64;
13157 names32 = intel_names32;
13158 names16 = intel_names16;
13159 names8 = intel_names8;
13160 names8rex = intel_names8rex;
13161 names_seg = intel_names_seg;
b9733481 13162 names_mm = intel_names_mm;
7e8b059b 13163 names_bnd = intel_names_bnd;
b9733481
L
13164 names_xmm = intel_names_xmm;
13165 names_ymm = intel_names_ymm;
43234a1e 13166 names_zmm = intel_names_zmm;
db51cc60
L
13167 index64 = intel_index64;
13168 index32 = intel_index32;
43234a1e 13169 names_mask = intel_names_mask;
e396998b
AM
13170 index16 = intel_index16;
13171 open_char = '[';
13172 close_char = ']';
13173 separator_char = '+';
13174 scale_char = '*';
13175 }
13176 else
13177 {
13178 names64 = att_names64;
13179 names32 = att_names32;
13180 names16 = att_names16;
13181 names8 = att_names8;
13182 names8rex = att_names8rex;
13183 names_seg = att_names_seg;
b9733481 13184 names_mm = att_names_mm;
7e8b059b 13185 names_bnd = att_names_bnd;
b9733481
L
13186 names_xmm = att_names_xmm;
13187 names_ymm = att_names_ymm;
43234a1e 13188 names_zmm = att_names_zmm;
db51cc60
L
13189 index64 = att_index64;
13190 index32 = att_index32;
43234a1e 13191 names_mask = att_names_mask;
e396998b
AM
13192 index16 = att_index16;
13193 open_char = '(';
13194 close_char = ')';
13195 separator_char = ',';
13196 scale_char = ',';
13197 }
2da11e11 13198
4fe53c98 13199 /* The output looks better if we put 7 bytes on a line, since that
8a9036a4
L
13200 puts most long word instructions on a single line. Use 8 bytes
13201 for Intel L1OM. */
d7921315 13202 if ((info->mach & bfd_mach_l1om) != 0)
8a9036a4
L
13203 info->bytes_per_line = 8;
13204 else
13205 info->bytes_per_line = 7;
252b5132 13206
26ca5450 13207 info->private_data = &priv;
252b5132
RH
13208 priv.max_fetched = priv.the_buffer;
13209 priv.insn_start = pc;
252b5132
RH
13210
13211 obuf[0] = 0;
ce518a5f
L
13212 for (i = 0; i < MAX_OPERANDS; ++i)
13213 {
13214 op_out[i][0] = 0;
13215 op_index[i] = -1;
13216 }
252b5132
RH
13217
13218 the_info = info;
13219 start_pc = pc;
e396998b
AM
13220 start_codep = priv.the_buffer;
13221 codep = priv.the_buffer;
252b5132 13222
8df14d78 13223 if (OPCODES_SIGSETJMP (priv.bailout) != 0)
5076851f 13224 {
7d421014
ILT
13225 const char *name;
13226
5076851f 13227 /* Getting here means we tried for data but didn't get it. That
e396998b
AM
13228 means we have an incomplete instruction of some sort. Just
13229 print the first byte as a prefix or a .byte pseudo-op. */
13230 if (codep > priv.the_buffer)
5076851f 13231 {
e396998b 13232 name = prefix_name (priv.the_buffer[0], priv.orig_sizeflag);
7d421014
ILT
13233 if (name != NULL)
13234 (*info->fprintf_func) (info->stream, "%s", name);
13235 else
5076851f 13236 {
7d421014
ILT
13237 /* Just print the first byte as a .byte instruction. */
13238 (*info->fprintf_func) (info->stream, ".byte 0x%x",
e396998b 13239 (unsigned int) priv.the_buffer[0]);
5076851f 13240 }
5076851f 13241
7d421014 13242 return 1;
5076851f
ILT
13243 }
13244
13245 return -1;
13246 }
13247
52b15da3 13248 obufp = obuf;
f16cd0d5
L
13249 sizeflag = priv.orig_sizeflag;
13250
13251 if (!ckprefix () || rex_used)
13252 {
13253 /* Too many prefixes or unused REX prefixes. */
13254 for (i = 0;
f6dd4781 13255 i < (int) ARRAY_SIZE (all_prefixes) && all_prefixes[i];
f16cd0d5 13256 i++)
de882298 13257 (*info->fprintf_func) (info->stream, "%s%s",
6c067bbb 13258 i == 0 ? "" : " ",
f16cd0d5 13259 prefix_name (all_prefixes[i], sizeflag));
de882298 13260 return i;
f16cd0d5 13261 }
252b5132
RH
13262
13263 insn_codep = codep;
13264
13265 FETCH_DATA (info, codep + 1);
13266 two_source_ops = (*codep == 0x62) || (*codep == 0xc8);
13267
3e7d61b2 13268 if (((prefixes & PREFIX_FWAIT)
f16cd0d5 13269 && ((*codep < 0xd8) || (*codep > 0xdf))))
252b5132 13270 {
86a80a50 13271 /* Handle prefixes before fwait. */
d9949a36 13272 for (i = 0; i < fwait_prefix && all_prefixes[i];
86a80a50
L
13273 i++)
13274 (*info->fprintf_func) (info->stream, "%s ",
13275 prefix_name (all_prefixes[i], sizeflag));
f16cd0d5 13276 (*info->fprintf_func) (info->stream, "fwait");
86a80a50 13277 return i + 1;
252b5132
RH
13278 }
13279
252b5132
RH
13280 if (*codep == 0x0f)
13281 {
eec0f4ca 13282 unsigned char threebyte;
5f40e14d
JS
13283
13284 codep++;
13285 FETCH_DATA (info, codep + 1);
13286 threebyte = *codep;
eec0f4ca 13287 dp = &dis386_twobyte[threebyte];
252b5132 13288 need_modrm = twobyte_has_modrm[*codep];
eec0f4ca 13289 codep++;
252b5132
RH
13290 }
13291 else
13292 {
6439fc28 13293 dp = &dis386[*codep];
252b5132 13294 need_modrm = onebyte_has_modrm[*codep];
eec0f4ca 13295 codep++;
252b5132 13296 }
246c51aa 13297
df18fdba
L
13298 /* Save sizeflag for printing the extra prefixes later before updating
13299 it for mnemonic and operand processing. The prefix names depend
13300 only on the address mode. */
13301 orig_sizeflag = sizeflag;
c608c12e 13302 if (prefixes & PREFIX_ADDR)
df18fdba 13303 sizeflag ^= AFLAG;
b844680a 13304 if ((prefixes & PREFIX_DATA))
df18fdba 13305 sizeflag ^= DFLAG;
3ffd33cf 13306
285ca992 13307 end_codep = codep;
8bb15339 13308 if (need_modrm)
252b5132
RH
13309 {
13310 FETCH_DATA (info, codep + 1);
7967e09e
L
13311 modrm.mod = (*codep >> 6) & 3;
13312 modrm.reg = (*codep >> 3) & 7;
13313 modrm.rm = *codep & 7;
252b5132
RH
13314 }
13315
42d5f9c6
MS
13316 need_vex = 0;
13317 need_vex_reg = 0;
13318 vex_w_done = 0;
43234a1e 13319 vex.evex = 0;
55b126d4 13320
ce518a5f 13321 if (dp->name == NULL && dp->op[0].bytemode == FLOATCODE)
252b5132 13322 {
55cf16e1 13323 get_sib (info, sizeflag);
252b5132
RH
13324 dofloat (sizeflag);
13325 }
13326 else
13327 {
8bb15339 13328 dp = get_valid_dis386 (dp, info);
b844680a 13329 if (dp != NULL && putop (dp->name, sizeflag) == 0)
6c067bbb 13330 {
55cf16e1 13331 get_sib (info, sizeflag);
ce518a5f
L
13332 for (i = 0; i < MAX_OPERANDS; ++i)
13333 {
246c51aa 13334 obufp = op_out[i];
ce518a5f
L
13335 op_ad = MAX_OPERANDS - 1 - i;
13336 if (dp->op[i].rtn)
13337 (*dp->op[i].rtn) (dp->op[i].bytemode, sizeflag);
43234a1e
L
13338 /* For EVEX instruction after the last operand masking
13339 should be printed. */
13340 if (i == 0 && vex.evex)
13341 {
13342 /* Don't print {%k0}. */
13343 if (vex.mask_register_specifier)
13344 {
13345 oappend ("{");
13346 oappend (names_mask[vex.mask_register_specifier]);
13347 oappend ("}");
13348 }
13349 if (vex.zeroing)
13350 oappend ("{z}");
13351 }
ce518a5f 13352 }
6439fc28 13353 }
252b5132
RH
13354 }
13355
d869730d 13356 /* Check if the REX prefix is used. */
e2e6193d 13357 if (rex_ignored == 0 && (rex ^ rex_used) == 0 && last_rex_prefix >= 0)
f16cd0d5
L
13358 all_prefixes[last_rex_prefix] = 0;
13359
5e6718e4 13360 /* Check if the SEG prefix is used. */
f16cd0d5
L
13361 if ((prefixes & (PREFIX_CS | PREFIX_SS | PREFIX_DS | PREFIX_ES
13362 | PREFIX_FS | PREFIX_GS)) != 0
285ca992 13363 && (used_prefixes & active_seg_prefix) != 0)
f16cd0d5
L
13364 all_prefixes[last_seg_prefix] = 0;
13365
5e6718e4 13366 /* Check if the ADDR prefix is used. */
f16cd0d5
L
13367 if ((prefixes & PREFIX_ADDR) != 0
13368 && (used_prefixes & PREFIX_ADDR) != 0)
13369 all_prefixes[last_addr_prefix] = 0;
13370
df18fdba
L
13371 /* Check if the DATA prefix is used. */
13372 if ((prefixes & PREFIX_DATA) != 0
13373 && (used_prefixes & PREFIX_DATA) != 0)
13374 all_prefixes[last_data_prefix] = 0;
f16cd0d5 13375
df18fdba 13376 /* Print the extra prefixes. */
f16cd0d5 13377 prefix_length = 0;
f310f33d 13378 for (i = 0; i < (int) ARRAY_SIZE (all_prefixes); i++)
f16cd0d5
L
13379 if (all_prefixes[i])
13380 {
13381 const char *name;
df18fdba 13382 name = prefix_name (all_prefixes[i], orig_sizeflag);
f16cd0d5
L
13383 if (name == NULL)
13384 abort ();
13385 prefix_length += strlen (name) + 1;
13386 (*info->fprintf_func) (info->stream, "%s ", name);
13387 }
b844680a 13388
285ca992
L
13389 /* If the mandatory PREFIX_REPZ/PREFIX_REPNZ/PREFIX_DATA prefix is
13390 unused, opcode is invalid. Since the PREFIX_DATA prefix may be
13391 used by putop and MMX/SSE operand and may be overriden by the
13392 PREFIX_REPZ/PREFIX_REPNZ fix, we check the PREFIX_DATA prefix
13393 separately. */
3888916d 13394 if (dp->prefix_requirement == PREFIX_OPCODE
285ca992
L
13395 && dp != &bad_opcode
13396 && (((prefixes
13397 & (PREFIX_REPZ | PREFIX_REPNZ)) != 0
13398 && (used_prefixes
13399 & (PREFIX_REPZ | PREFIX_REPNZ)) == 0)
13400 || ((((prefixes
13401 & (PREFIX_REPZ | PREFIX_REPNZ | PREFIX_DATA))
13402 == PREFIX_DATA)
13403 && (used_prefixes & PREFIX_DATA) == 0))))
13404 {
13405 (*info->fprintf_func) (info->stream, "(bad)");
13406 return end_codep - priv.the_buffer;
13407 }
13408
f16cd0d5
L
13409 /* Check maximum code length. */
13410 if ((codep - start_codep) > MAX_CODE_LENGTH)
13411 {
13412 (*info->fprintf_func) (info->stream, "(bad)");
13413 return MAX_CODE_LENGTH;
13414 }
b844680a 13415
ea397f5b 13416 obufp = mnemonicendp;
f16cd0d5 13417 for (i = strlen (obuf) + prefix_length; i < 6; i++)
252b5132
RH
13418 oappend (" ");
13419 oappend (" ");
13420 (*info->fprintf_func) (info->stream, "%s", obuf);
13421
13422 /* The enter and bound instructions are printed with operands in the same
13423 order as the intel book; everything else is printed in reverse order. */
2da11e11 13424 if (intel_syntax || two_source_ops)
252b5132 13425 {
185b1163
L
13426 bfd_vma riprel;
13427
ce518a5f 13428 for (i = 0; i < MAX_OPERANDS; ++i)
6c067bbb 13429 op_txt[i] = op_out[i];
246c51aa 13430
3a8547d2
JB
13431 if (intel_syntax && dp && dp->op[2].rtn == OP_Rounding
13432 && dp->op[3].rtn == OP_E && dp->op[4].rtn == NULL)
13433 {
13434 op_txt[2] = op_out[3];
13435 op_txt[3] = op_out[2];
13436 }
13437
ce518a5f
L
13438 for (i = 0; i < (MAX_OPERANDS >> 1); ++i)
13439 {
6c067bbb
RM
13440 op_ad = op_index[i];
13441 op_index[i] = op_index[MAX_OPERANDS - 1 - i];
13442 op_index[MAX_OPERANDS - 1 - i] = op_ad;
185b1163
L
13443 riprel = op_riprel[i];
13444 op_riprel[i] = op_riprel [MAX_OPERANDS - 1 - i];
13445 op_riprel[MAX_OPERANDS - 1 - i] = riprel;
ce518a5f 13446 }
252b5132
RH
13447 }
13448 else
13449 {
ce518a5f 13450 for (i = 0; i < MAX_OPERANDS; ++i)
6c067bbb 13451 op_txt[MAX_OPERANDS - 1 - i] = op_out[i];
050dfa73
MM
13452 }
13453
ce518a5f
L
13454 needcomma = 0;
13455 for (i = 0; i < MAX_OPERANDS; ++i)
13456 if (*op_txt[i])
13457 {
13458 if (needcomma)
13459 (*info->fprintf_func) (info->stream, ",");
13460 if (op_index[i] != -1 && !op_riprel[i])
13461 (*info->print_address_func) ((bfd_vma) op_address[op_index[i]], info);
13462 else
13463 (*info->fprintf_func) (info->stream, "%s", op_txt[i]);
13464 needcomma = 1;
13465 }
050dfa73 13466
ce518a5f 13467 for (i = 0; i < MAX_OPERANDS; i++)
52b15da3
JH
13468 if (op_index[i] != -1 && op_riprel[i])
13469 {
13470 (*info->fprintf_func) (info->stream, " # ");
4fd7268a 13471 (*info->print_address_func) ((bfd_vma) (start_pc + (codep - start_codep)
52b15da3 13472 + op_address[op_index[i]]), info);
185b1163 13473 break;
52b15da3 13474 }
e396998b 13475 return codep - priv.the_buffer;
252b5132
RH
13476}
13477
6439fc28 13478static const char *float_mem[] = {
252b5132 13479 /* d8 */
7c52e0e8
L
13480 "fadd{s|}",
13481 "fmul{s|}",
13482 "fcom{s|}",
13483 "fcomp{s|}",
13484 "fsub{s|}",
13485 "fsubr{s|}",
13486 "fdiv{s|}",
13487 "fdivr{s|}",
db6eb5be 13488 /* d9 */
7c52e0e8 13489 "fld{s|}",
252b5132 13490 "(bad)",
7c52e0e8
L
13491 "fst{s|}",
13492 "fstp{s|}",
9306ca4a 13493 "fldenvIC",
252b5132 13494 "fldcw",
9306ca4a 13495 "fNstenvIC",
252b5132
RH
13496 "fNstcw",
13497 /* da */
7c52e0e8
L
13498 "fiadd{l|}",
13499 "fimul{l|}",
13500 "ficom{l|}",
13501 "ficomp{l|}",
13502 "fisub{l|}",
13503 "fisubr{l|}",
13504 "fidiv{l|}",
13505 "fidivr{l|}",
252b5132 13506 /* db */
7c52e0e8
L
13507 "fild{l|}",
13508 "fisttp{l|}",
13509 "fist{l|}",
13510 "fistp{l|}",
252b5132 13511 "(bad)",
6439fc28 13512 "fld{t||t|}",
252b5132 13513 "(bad)",
6439fc28 13514 "fstp{t||t|}",
252b5132 13515 /* dc */
7c52e0e8
L
13516 "fadd{l|}",
13517 "fmul{l|}",
13518 "fcom{l|}",
13519 "fcomp{l|}",
13520 "fsub{l|}",
13521 "fsubr{l|}",
13522 "fdiv{l|}",
13523 "fdivr{l|}",
252b5132 13524 /* dd */
7c52e0e8
L
13525 "fld{l|}",
13526 "fisttp{ll|}",
13527 "fst{l||}",
13528 "fstp{l|}",
9306ca4a 13529 "frstorIC",
252b5132 13530 "(bad)",
9306ca4a 13531 "fNsaveIC",
252b5132
RH
13532 "fNstsw",
13533 /* de */
13534 "fiadd",
13535 "fimul",
13536 "ficom",
13537 "ficomp",
13538 "fisub",
13539 "fisubr",
13540 "fidiv",
13541 "fidivr",
13542 /* df */
13543 "fild",
ca164297 13544 "fisttp",
252b5132
RH
13545 "fist",
13546 "fistp",
13547 "fbld",
7c52e0e8 13548 "fild{ll|}",
252b5132 13549 "fbstp",
7c52e0e8 13550 "fistp{ll|}",
1d9f512f
AM
13551};
13552
13553static const unsigned char float_mem_mode[] = {
13554 /* d8 */
13555 d_mode,
13556 d_mode,
13557 d_mode,
13558 d_mode,
13559 d_mode,
13560 d_mode,
13561 d_mode,
13562 d_mode,
13563 /* d9 */
13564 d_mode,
13565 0,
13566 d_mode,
13567 d_mode,
13568 0,
13569 w_mode,
13570 0,
13571 w_mode,
13572 /* da */
13573 d_mode,
13574 d_mode,
13575 d_mode,
13576 d_mode,
13577 d_mode,
13578 d_mode,
13579 d_mode,
13580 d_mode,
13581 /* db */
13582 d_mode,
13583 d_mode,
13584 d_mode,
13585 d_mode,
13586 0,
9306ca4a 13587 t_mode,
1d9f512f 13588 0,
9306ca4a 13589 t_mode,
1d9f512f
AM
13590 /* dc */
13591 q_mode,
13592 q_mode,
13593 q_mode,
13594 q_mode,
13595 q_mode,
13596 q_mode,
13597 q_mode,
13598 q_mode,
13599 /* dd */
13600 q_mode,
13601 q_mode,
13602 q_mode,
13603 q_mode,
13604 0,
13605 0,
13606 0,
13607 w_mode,
13608 /* de */
13609 w_mode,
13610 w_mode,
13611 w_mode,
13612 w_mode,
13613 w_mode,
13614 w_mode,
13615 w_mode,
13616 w_mode,
13617 /* df */
13618 w_mode,
13619 w_mode,
13620 w_mode,
13621 w_mode,
9306ca4a 13622 t_mode,
1d9f512f 13623 q_mode,
9306ca4a 13624 t_mode,
1d9f512f 13625 q_mode
252b5132
RH
13626};
13627
ce518a5f
L
13628#define ST { OP_ST, 0 }
13629#define STi { OP_STi, 0 }
252b5132 13630
48c97fa1
L
13631#define FGRPd9_2 NULL, { { NULL, 1 } }, 0
13632#define FGRPd9_4 NULL, { { NULL, 2 } }, 0
13633#define FGRPd9_5 NULL, { { NULL, 3 } }, 0
13634#define FGRPd9_6 NULL, { { NULL, 4 } }, 0
13635#define FGRPd9_7 NULL, { { NULL, 5 } }, 0
13636#define FGRPda_5 NULL, { { NULL, 6 } }, 0
13637#define FGRPdb_4 NULL, { { NULL, 7 } }, 0
13638#define FGRPde_3 NULL, { { NULL, 8 } }, 0
13639#define FGRPdf_4 NULL, { { NULL, 9 } }, 0
252b5132 13640
2da11e11 13641static const struct dis386 float_reg[][8] = {
252b5132
RH
13642 /* d8 */
13643 {
bf890a93
IT
13644 { "fadd", { ST, STi }, 0 },
13645 { "fmul", { ST, STi }, 0 },
13646 { "fcom", { STi }, 0 },
13647 { "fcomp", { STi }, 0 },
13648 { "fsub", { ST, STi }, 0 },
13649 { "fsubr", { ST, STi }, 0 },
13650 { "fdiv", { ST, STi }, 0 },
13651 { "fdivr", { ST, STi }, 0 },
252b5132
RH
13652 },
13653 /* d9 */
13654 {
bf890a93
IT
13655 { "fld", { STi }, 0 },
13656 { "fxch", { STi }, 0 },
252b5132 13657 { FGRPd9_2 },
592d1631 13658 { Bad_Opcode },
252b5132
RH
13659 { FGRPd9_4 },
13660 { FGRPd9_5 },
13661 { FGRPd9_6 },
13662 { FGRPd9_7 },
13663 },
13664 /* da */
13665 {
bf890a93
IT
13666 { "fcmovb", { ST, STi }, 0 },
13667 { "fcmove", { ST, STi }, 0 },
13668 { "fcmovbe",{ ST, STi }, 0 },
13669 { "fcmovu", { ST, STi }, 0 },
592d1631 13670 { Bad_Opcode },
252b5132 13671 { FGRPda_5 },
592d1631
L
13672 { Bad_Opcode },
13673 { Bad_Opcode },
252b5132
RH
13674 },
13675 /* db */
13676 {
bf890a93
IT
13677 { "fcmovnb",{ ST, STi }, 0 },
13678 { "fcmovne",{ ST, STi }, 0 },
13679 { "fcmovnbe",{ ST, STi }, 0 },
13680 { "fcmovnu",{ ST, STi }, 0 },
252b5132 13681 { FGRPdb_4 },
bf890a93
IT
13682 { "fucomi", { ST, STi }, 0 },
13683 { "fcomi", { ST, STi }, 0 },
592d1631 13684 { Bad_Opcode },
252b5132
RH
13685 },
13686 /* dc */
13687 {
bf890a93
IT
13688 { "fadd", { STi, ST }, 0 },
13689 { "fmul", { STi, ST }, 0 },
592d1631
L
13690 { Bad_Opcode },
13691 { Bad_Opcode },
bf890a93
IT
13692 { "fsub!M", { STi, ST }, 0 },
13693 { "fsubM", { STi, ST }, 0 },
13694 { "fdiv!M", { STi, ST }, 0 },
13695 { "fdivM", { STi, ST }, 0 },
252b5132
RH
13696 },
13697 /* dd */
13698 {
bf890a93 13699 { "ffree", { STi }, 0 },
592d1631 13700 { Bad_Opcode },
bf890a93
IT
13701 { "fst", { STi }, 0 },
13702 { "fstp", { STi }, 0 },
13703 { "fucom", { STi }, 0 },
13704 { "fucomp", { STi }, 0 },
592d1631
L
13705 { Bad_Opcode },
13706 { Bad_Opcode },
252b5132
RH
13707 },
13708 /* de */
13709 {
bf890a93
IT
13710 { "faddp", { STi, ST }, 0 },
13711 { "fmulp", { STi, ST }, 0 },
592d1631 13712 { Bad_Opcode },
252b5132 13713 { FGRPde_3 },
bf890a93
IT
13714 { "fsub!Mp", { STi, ST }, 0 },
13715 { "fsubMp", { STi, ST }, 0 },
13716 { "fdiv!Mp", { STi, ST }, 0 },
13717 { "fdivMp", { STi, ST }, 0 },
252b5132
RH
13718 },
13719 /* df */
13720 {
bf890a93 13721 { "ffreep", { STi }, 0 },
592d1631
L
13722 { Bad_Opcode },
13723 { Bad_Opcode },
13724 { Bad_Opcode },
252b5132 13725 { FGRPdf_4 },
bf890a93
IT
13726 { "fucomip", { ST, STi }, 0 },
13727 { "fcomip", { ST, STi }, 0 },
592d1631 13728 { Bad_Opcode },
252b5132
RH
13729 },
13730};
13731
252b5132 13732static char *fgrps[][8] = {
48c97fa1
L
13733 /* Bad opcode 0 */
13734 {
13735 "(bad)","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
13736 },
13737
13738 /* d9_2 1 */
252b5132
RH
13739 {
13740 "fnop","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
13741 },
13742
48c97fa1 13743 /* d9_4 2 */
252b5132
RH
13744 {
13745 "fchs","fabs","(bad)","(bad)","ftst","fxam","(bad)","(bad)",
13746 },
13747
48c97fa1 13748 /* d9_5 3 */
252b5132
RH
13749 {
13750 "fld1","fldl2t","fldl2e","fldpi","fldlg2","fldln2","fldz","(bad)",
13751 },
13752
48c97fa1 13753 /* d9_6 4 */
252b5132
RH
13754 {
13755 "f2xm1","fyl2x","fptan","fpatan","fxtract","fprem1","fdecstp","fincstp",
13756 },
13757
48c97fa1 13758 /* d9_7 5 */
252b5132
RH
13759 {
13760 "fprem","fyl2xp1","fsqrt","fsincos","frndint","fscale","fsin","fcos",
13761 },
13762
48c97fa1 13763 /* da_5 6 */
252b5132
RH
13764 {
13765 "(bad)","fucompp","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
13766 },
13767
48c97fa1 13768 /* db_4 7 */
252b5132 13769 {
309d3373
JB
13770 "fNeni(8087 only)","fNdisi(8087 only)","fNclex","fNinit",
13771 "fNsetpm(287 only)","frstpm(287 only)","(bad)","(bad)",
252b5132
RH
13772 },
13773
48c97fa1 13774 /* de_3 8 */
252b5132
RH
13775 {
13776 "(bad)","fcompp","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
13777 },
13778
48c97fa1 13779 /* df_4 9 */
252b5132
RH
13780 {
13781 "fNstsw","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
13782 },
13783};
13784
b6169b20
L
13785static void
13786swap_operand (void)
13787{
13788 mnemonicendp[0] = '.';
13789 mnemonicendp[1] = 's';
13790 mnemonicendp += 2;
13791}
13792
b844680a
L
13793static void
13794OP_Skip_MODRM (int bytemode ATTRIBUTE_UNUSED,
13795 int sizeflag ATTRIBUTE_UNUSED)
13796{
13797 /* Skip mod/rm byte. */
13798 MODRM_CHECK;
13799 codep++;
13800}
13801
252b5132 13802static void
26ca5450 13803dofloat (int sizeflag)
252b5132 13804{
2da11e11 13805 const struct dis386 *dp;
252b5132
RH
13806 unsigned char floatop;
13807
13808 floatop = codep[-1];
13809
7967e09e 13810 if (modrm.mod != 3)
252b5132 13811 {
7967e09e 13812 int fp_indx = (floatop - 0xd8) * 8 + modrm.reg;
1d9f512f
AM
13813
13814 putop (float_mem[fp_indx], sizeflag);
ce518a5f 13815 obufp = op_out[0];
6e50d963 13816 op_ad = 2;
1d9f512f 13817 OP_E (float_mem_mode[fp_indx], sizeflag);
252b5132
RH
13818 return;
13819 }
6608db57 13820 /* Skip mod/rm byte. */
4bba6815 13821 MODRM_CHECK;
252b5132
RH
13822 codep++;
13823
7967e09e 13824 dp = &float_reg[floatop - 0xd8][modrm.reg];
252b5132
RH
13825 if (dp->name == NULL)
13826 {
7967e09e 13827 putop (fgrps[dp->op[0].bytemode][modrm.rm], sizeflag);
252b5132 13828
6608db57 13829 /* Instruction fnstsw is only one with strange arg. */
252b5132 13830 if (floatop == 0xdf && codep[-1] == 0xe0)
ce518a5f 13831 strcpy (op_out[0], names16[0]);
252b5132
RH
13832 }
13833 else
13834 {
13835 putop (dp->name, sizeflag);
13836
ce518a5f 13837 obufp = op_out[0];
6e50d963 13838 op_ad = 2;
ce518a5f
L
13839 if (dp->op[0].rtn)
13840 (*dp->op[0].rtn) (dp->op[0].bytemode, sizeflag);
6e50d963 13841
ce518a5f 13842 obufp = op_out[1];
6e50d963 13843 op_ad = 1;
ce518a5f
L
13844 if (dp->op[1].rtn)
13845 (*dp->op[1].rtn) (dp->op[1].bytemode, sizeflag);
252b5132
RH
13846 }
13847}
13848
9ce09ba2
RM
13849/* Like oappend (below), but S is a string starting with '%'.
13850 In Intel syntax, the '%' is elided. */
13851static void
13852oappend_maybe_intel (const char *s)
13853{
13854 oappend (s + intel_syntax);
13855}
13856
252b5132 13857static void
26ca5450 13858OP_ST (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 13859{
9ce09ba2 13860 oappend_maybe_intel ("%st");
252b5132
RH
13861}
13862
252b5132 13863static void
26ca5450 13864OP_STi (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 13865{
7967e09e 13866 sprintf (scratchbuf, "%%st(%d)", modrm.rm);
9ce09ba2 13867 oappend_maybe_intel (scratchbuf);
252b5132
RH
13868}
13869
6608db57 13870/* Capital letters in template are macros. */
6439fc28 13871static int
d3ce72d0 13872putop (const char *in_template, int sizeflag)
252b5132 13873{
2da11e11 13874 const char *p;
9306ca4a 13875 int alt = 0;
9d141669 13876 int cond = 1;
98b528ac
L
13877 unsigned int l = 0, len = 1;
13878 char last[4];
13879
13880#define SAVE_LAST(c) \
13881 if (l < len && l < sizeof (last)) \
13882 last[l++] = c; \
13883 else \
13884 abort ();
252b5132 13885
d3ce72d0 13886 for (p = in_template; *p; p++)
252b5132
RH
13887 {
13888 switch (*p)
13889 {
13890 default:
13891 *obufp++ = *p;
13892 break;
98b528ac
L
13893 case '%':
13894 len++;
13895 break;
9d141669
L
13896 case '!':
13897 cond = 0;
13898 break;
6439fc28 13899 case '{':
6439fc28 13900 if (intel_syntax)
6439fc28
AM
13901 {
13902 while (*++p != '|')
7c52e0e8
L
13903 if (*p == '}' || *p == '\0')
13904 abort ();
6439fc28 13905 }
9306ca4a
JB
13906 /* Fall through. */
13907 case 'I':
13908 alt = 1;
13909 continue;
6439fc28
AM
13910 case '|':
13911 while (*++p != '}')
13912 {
13913 if (*p == '\0')
13914 abort ();
13915 }
13916 break;
13917 case '}':
13918 break;
252b5132 13919 case 'A':
db6eb5be
AM
13920 if (intel_syntax)
13921 break;
7967e09e 13922 if (modrm.mod != 3 || (sizeflag & SUFFIX_ALWAYS))
252b5132
RH
13923 *obufp++ = 'b';
13924 break;
13925 case 'B':
4b06377f
L
13926 if (l == 0 && len == 1)
13927 {
13928case_B:
13929 if (intel_syntax)
13930 break;
13931 if (sizeflag & SUFFIX_ALWAYS)
13932 *obufp++ = 'b';
13933 }
13934 else
13935 {
13936 if (l != 1
13937 || len != 2
13938 || last[0] != 'L')
13939 {
13940 SAVE_LAST (*p);
13941 break;
13942 }
13943
13944 if (address_mode == mode_64bit
13945 && !(prefixes & PREFIX_ADDR))
13946 {
13947 *obufp++ = 'a';
13948 *obufp++ = 'b';
13949 *obufp++ = 's';
13950 }
13951
13952 goto case_B;
13953 }
252b5132 13954 break;
9306ca4a
JB
13955 case 'C':
13956 if (intel_syntax && !alt)
13957 break;
13958 if ((prefixes & PREFIX_DATA) || (sizeflag & SUFFIX_ALWAYS))
13959 {
13960 if (sizeflag & DFLAG)
13961 *obufp++ = intel_syntax ? 'd' : 'l';
13962 else
13963 *obufp++ = intel_syntax ? 'w' : 's';
13964 used_prefixes |= (prefixes & PREFIX_DATA);
13965 }
13966 break;
ed7841b3
JB
13967 case 'D':
13968 if (intel_syntax || !(sizeflag & SUFFIX_ALWAYS))
13969 break;
161a04f6 13970 USED_REX (REX_W);
7967e09e 13971 if (modrm.mod == 3)
ed7841b3 13972 {
161a04f6 13973 if (rex & REX_W)
ed7841b3 13974 *obufp++ = 'q';
ed7841b3 13975 else
f16cd0d5
L
13976 {
13977 if (sizeflag & DFLAG)
13978 *obufp++ = intel_syntax ? 'd' : 'l';
13979 else
13980 *obufp++ = 'w';
13981 used_prefixes |= (prefixes & PREFIX_DATA);
13982 }
ed7841b3
JB
13983 }
13984 else
13985 *obufp++ = 'w';
13986 break;
252b5132 13987 case 'E': /* For jcxz/jecxz */
cb712a9e 13988 if (address_mode == mode_64bit)
c1a64871
JH
13989 {
13990 if (sizeflag & AFLAG)
13991 *obufp++ = 'r';
13992 else
13993 *obufp++ = 'e';
13994 }
13995 else
13996 if (sizeflag & AFLAG)
13997 *obufp++ = 'e';
3ffd33cf
AM
13998 used_prefixes |= (prefixes & PREFIX_ADDR);
13999 break;
14000 case 'F':
db6eb5be
AM
14001 if (intel_syntax)
14002 break;
e396998b 14003 if ((prefixes & PREFIX_ADDR) || (sizeflag & SUFFIX_ALWAYS))
3ffd33cf
AM
14004 {
14005 if (sizeflag & AFLAG)
cb712a9e 14006 *obufp++ = address_mode == mode_64bit ? 'q' : 'l';
3ffd33cf 14007 else
cb712a9e 14008 *obufp++ = address_mode == mode_64bit ? 'l' : 'w';
3ffd33cf
AM
14009 used_prefixes |= (prefixes & PREFIX_ADDR);
14010 }
252b5132 14011 break;
52fd6d94
JB
14012 case 'G':
14013 if (intel_syntax || (obufp[-1] != 's' && !(sizeflag & SUFFIX_ALWAYS)))
14014 break;
161a04f6 14015 if ((rex & REX_W) || (sizeflag & DFLAG))
52fd6d94
JB
14016 *obufp++ = 'l';
14017 else
14018 *obufp++ = 'w';
161a04f6 14019 if (!(rex & REX_W))
52fd6d94
JB
14020 used_prefixes |= (prefixes & PREFIX_DATA);
14021 break;
5dd0794d 14022 case 'H':
db6eb5be
AM
14023 if (intel_syntax)
14024 break;
5dd0794d
AM
14025 if ((prefixes & (PREFIX_CS | PREFIX_DS)) == PREFIX_CS
14026 || (prefixes & (PREFIX_CS | PREFIX_DS)) == PREFIX_DS)
14027 {
14028 used_prefixes |= prefixes & (PREFIX_CS | PREFIX_DS);
14029 *obufp++ = ',';
14030 *obufp++ = 'p';
14031 if (prefixes & PREFIX_DS)
14032 *obufp++ = 't';
14033 else
14034 *obufp++ = 'n';
14035 }
14036 break;
9306ca4a
JB
14037 case 'J':
14038 if (intel_syntax)
14039 break;
14040 *obufp++ = 'l';
14041 break;
42903f7f
L
14042 case 'K':
14043 USED_REX (REX_W);
14044 if (rex & REX_W)
14045 *obufp++ = 'q';
14046 else
14047 *obufp++ = 'd';
14048 break;
6dd5059a 14049 case 'Z':
04d824a4
JB
14050 if (l != 0 || len != 1)
14051 {
14052 if (l != 1 || len != 2 || last[0] != 'X')
14053 {
14054 SAVE_LAST (*p);
14055 break;
14056 }
14057 if (!need_vex || !vex.evex)
14058 abort ();
14059 if (intel_syntax
14060 || ((modrm.mod == 3 || vex.b) && !(sizeflag & SUFFIX_ALWAYS)))
14061 break;
14062 switch (vex.length)
14063 {
14064 case 128:
14065 *obufp++ = 'x';
14066 break;
14067 case 256:
14068 *obufp++ = 'y';
14069 break;
14070 case 512:
14071 *obufp++ = 'z';
14072 break;
14073 default:
14074 abort ();
14075 }
14076 break;
14077 }
6dd5059a
L
14078 if (intel_syntax)
14079 break;
14080 if (address_mode == mode_64bit && (sizeflag & SUFFIX_ALWAYS))
14081 {
14082 *obufp++ = 'q';
14083 break;
14084 }
14085 /* Fall through. */
98b528ac 14086 goto case_L;
252b5132 14087 case 'L':
98b528ac
L
14088 if (l != 0 || len != 1)
14089 {
14090 SAVE_LAST (*p);
14091 break;
14092 }
14093case_L:
db6eb5be
AM
14094 if (intel_syntax)
14095 break;
252b5132
RH
14096 if (sizeflag & SUFFIX_ALWAYS)
14097 *obufp++ = 'l';
252b5132 14098 break;
9d141669
L
14099 case 'M':
14100 if (intel_mnemonic != cond)
14101 *obufp++ = 'r';
14102 break;
252b5132
RH
14103 case 'N':
14104 if ((prefixes & PREFIX_FWAIT) == 0)
14105 *obufp++ = 'n';
7d421014
ILT
14106 else
14107 used_prefixes |= PREFIX_FWAIT;
252b5132 14108 break;
52b15da3 14109 case 'O':
161a04f6
L
14110 USED_REX (REX_W);
14111 if (rex & REX_W)
6439fc28 14112 *obufp++ = 'o';
a35ca55a
JB
14113 else if (intel_syntax && (sizeflag & DFLAG))
14114 *obufp++ = 'q';
52b15da3
JH
14115 else
14116 *obufp++ = 'd';
161a04f6 14117 if (!(rex & REX_W))
a35ca55a 14118 used_prefixes |= (prefixes & PREFIX_DATA);
52b15da3 14119 break;
07f5af7d
L
14120 case '&':
14121 if (!intel_syntax
14122 && address_mode == mode_64bit
14123 && isa64 == intel64)
14124 {
14125 *obufp++ = 'q';
14126 break;
14127 }
14128 /* Fall through. */
6439fc28 14129 case 'T':
d9e3625e
L
14130 if (!intel_syntax
14131 && address_mode == mode_64bit
7bb15c6f 14132 && ((sizeflag & DFLAG) || (rex & REX_W)))
6439fc28
AM
14133 {
14134 *obufp++ = 'q';
14135 break;
14136 }
6608db57 14137 /* Fall through. */
4b4c407a 14138 goto case_P;
252b5132 14139 case 'P':
4b4c407a 14140 if (l == 0 && len == 1)
d9e3625e 14141 {
4b4c407a
L
14142case_P:
14143 if (intel_syntax)
d9e3625e 14144 {
4b4c407a
L
14145 if ((rex & REX_W) == 0
14146 && (prefixes & PREFIX_DATA))
14147 {
14148 if ((sizeflag & DFLAG) == 0)
14149 *obufp++ = 'w';
14150 used_prefixes |= (prefixes & PREFIX_DATA);
14151 }
14152 break;
14153 }
14154 if ((prefixes & PREFIX_DATA)
14155 || (rex & REX_W)
14156 || (sizeflag & SUFFIX_ALWAYS))
14157 {
14158 USED_REX (REX_W);
14159 if (rex & REX_W)
14160 *obufp++ = 'q';
14161 else
14162 {
14163 if (sizeflag & DFLAG)
14164 *obufp++ = 'l';
14165 else
14166 *obufp++ = 'w';
14167 used_prefixes |= (prefixes & PREFIX_DATA);
14168 }
d9e3625e 14169 }
d9e3625e 14170 }
4b4c407a 14171 else
252b5132 14172 {
4b4c407a
L
14173 if (l != 1 || len != 2 || last[0] != 'L')
14174 {
14175 SAVE_LAST (*p);
14176 break;
14177 }
14178
14179 if ((prefixes & PREFIX_DATA)
14180 || (rex & REX_W)
14181 || (sizeflag & SUFFIX_ALWAYS))
52b15da3 14182 {
4b4c407a
L
14183 USED_REX (REX_W);
14184 if (rex & REX_W)
14185 *obufp++ = 'q';
14186 else
14187 {
14188 if (sizeflag & DFLAG)
14189 *obufp++ = intel_syntax ? 'd' : 'l';
14190 else
14191 *obufp++ = 'w';
14192 used_prefixes |= (prefixes & PREFIX_DATA);
14193 }
52b15da3 14194 }
252b5132
RH
14195 }
14196 break;
6439fc28 14197 case 'U':
db6eb5be
AM
14198 if (intel_syntax)
14199 break;
7bb15c6f 14200 if (address_mode == mode_64bit
6c067bbb 14201 && ((sizeflag & DFLAG) || (rex & REX_W)))
6439fc28 14202 {
7967e09e 14203 if (modrm.mod != 3 || (sizeflag & SUFFIX_ALWAYS))
1a114b12 14204 *obufp++ = 'q';
6439fc28
AM
14205 break;
14206 }
6608db57 14207 /* Fall through. */
98b528ac 14208 goto case_Q;
252b5132 14209 case 'Q':
98b528ac 14210 if (l == 0 && len == 1)
252b5132 14211 {
98b528ac
L
14212case_Q:
14213 if (intel_syntax && !alt)
14214 break;
14215 USED_REX (REX_W);
14216 if (modrm.mod != 3 || (sizeflag & SUFFIX_ALWAYS))
52b15da3 14217 {
98b528ac
L
14218 if (rex & REX_W)
14219 *obufp++ = 'q';
52b15da3 14220 else
98b528ac
L
14221 {
14222 if (sizeflag & DFLAG)
14223 *obufp++ = intel_syntax ? 'd' : 'l';
14224 else
14225 *obufp++ = 'w';
f16cd0d5 14226 used_prefixes |= (prefixes & PREFIX_DATA);
98b528ac 14227 }
52b15da3 14228 }
98b528ac
L
14229 }
14230 else
14231 {
14232 if (l != 1 || len != 2 || last[0] != 'L')
14233 {
14234 SAVE_LAST (*p);
14235 break;
14236 }
14237 if (intel_syntax
14238 || (modrm.mod == 3 && !(sizeflag & SUFFIX_ALWAYS)))
14239 break;
14240 if ((rex & REX_W))
14241 {
14242 USED_REX (REX_W);
14243 *obufp++ = 'q';
14244 }
14245 else
14246 *obufp++ = 'l';
252b5132
RH
14247 }
14248 break;
14249 case 'R':
161a04f6
L
14250 USED_REX (REX_W);
14251 if (rex & REX_W)
a35ca55a
JB
14252 *obufp++ = 'q';
14253 else if (sizeflag & DFLAG)
c608c12e 14254 {
a35ca55a 14255 if (intel_syntax)
c608c12e 14256 *obufp++ = 'd';
c608c12e 14257 else
a35ca55a 14258 *obufp++ = 'l';
c608c12e 14259 }
252b5132 14260 else
a35ca55a
JB
14261 *obufp++ = 'w';
14262 if (intel_syntax && !p[1]
161a04f6 14263 && ((rex & REX_W) || (sizeflag & DFLAG)))
a35ca55a 14264 *obufp++ = 'e';
161a04f6 14265 if (!(rex & REX_W))
52b15da3 14266 used_prefixes |= (prefixes & PREFIX_DATA);
252b5132 14267 break;
1a114b12 14268 case 'V':
4b06377f 14269 if (l == 0 && len == 1)
1a114b12 14270 {
4b06377f
L
14271 if (intel_syntax)
14272 break;
7bb15c6f 14273 if (address_mode == mode_64bit
6c067bbb 14274 && ((sizeflag & DFLAG) || (rex & REX_W)))
4b06377f
L
14275 {
14276 if (sizeflag & SUFFIX_ALWAYS)
14277 *obufp++ = 'q';
14278 break;
14279 }
14280 }
14281 else
14282 {
14283 if (l != 1
14284 || len != 2
14285 || last[0] != 'L')
14286 {
14287 SAVE_LAST (*p);
14288 break;
14289 }
14290
14291 if (rex & REX_W)
14292 {
14293 *obufp++ = 'a';
14294 *obufp++ = 'b';
14295 *obufp++ = 's';
14296 }
1a114b12
JB
14297 }
14298 /* Fall through. */
4b06377f 14299 goto case_S;
252b5132 14300 case 'S':
4b06377f 14301 if (l == 0 && len == 1)
252b5132 14302 {
4b06377f
L
14303case_S:
14304 if (intel_syntax)
14305 break;
14306 if (sizeflag & SUFFIX_ALWAYS)
52b15da3 14307 {
4b06377f
L
14308 if (rex & REX_W)
14309 *obufp++ = 'q';
52b15da3 14310 else
4b06377f
L
14311 {
14312 if (sizeflag & DFLAG)
14313 *obufp++ = 'l';
14314 else
14315 *obufp++ = 'w';
14316 used_prefixes |= (prefixes & PREFIX_DATA);
14317 }
14318 }
14319 }
14320 else
14321 {
14322 if (l != 1
14323 || len != 2
14324 || last[0] != 'L')
14325 {
14326 SAVE_LAST (*p);
14327 break;
52b15da3 14328 }
4b06377f
L
14329
14330 if (address_mode == mode_64bit
14331 && !(prefixes & PREFIX_ADDR))
14332 {
14333 *obufp++ = 'a';
14334 *obufp++ = 'b';
14335 *obufp++ = 's';
14336 }
14337
14338 goto case_S;
252b5132 14339 }
252b5132 14340 break;
041bd2e0 14341 case 'X':
c0f3af97
L
14342 if (l != 0 || len != 1)
14343 {
14344 SAVE_LAST (*p);
14345 break;
14346 }
14347 if (need_vex && vex.prefix)
14348 {
14349 if (vex.prefix == DATA_PREFIX_OPCODE)
14350 *obufp++ = 'd';
14351 else
14352 *obufp++ = 's';
14353 }
041bd2e0 14354 else
f16cd0d5
L
14355 {
14356 if (prefixes & PREFIX_DATA)
14357 *obufp++ = 'd';
14358 else
14359 *obufp++ = 's';
14360 used_prefixes |= (prefixes & PREFIX_DATA);
14361 }
041bd2e0 14362 break;
76f227a5 14363 case 'Y':
c0f3af97 14364 if (l == 0 && len == 1)
76f227a5 14365 {
c0f3af97
L
14366 if (intel_syntax || !(sizeflag & SUFFIX_ALWAYS))
14367 break;
14368 if (rex & REX_W)
14369 {
14370 USED_REX (REX_W);
14371 *obufp++ = 'q';
14372 }
14373 break;
14374 }
14375 else
14376 {
14377 if (l != 1 || len != 2 || last[0] != 'X')
14378 {
14379 SAVE_LAST (*p);
14380 break;
14381 }
14382 if (!need_vex)
14383 abort ();
14384 if (intel_syntax
04d824a4 14385 || ((modrm.mod == 3 || vex.b) && !(sizeflag & SUFFIX_ALWAYS)))
c0f3af97
L
14386 break;
14387 switch (vex.length)
14388 {
14389 case 128:
14390 *obufp++ = 'x';
14391 break;
14392 case 256:
14393 *obufp++ = 'y';
14394 break;
04d824a4
JB
14395 case 512:
14396 if (!vex.evex)
c0f3af97 14397 default:
04d824a4 14398 abort ();
c0f3af97 14399 }
76f227a5
JH
14400 }
14401 break;
252b5132 14402 case 'W':
0bfee649 14403 if (l == 0 && len == 1)
a35ca55a 14404 {
0bfee649
L
14405 /* operand size flag for cwtl, cbtw */
14406 USED_REX (REX_W);
14407 if (rex & REX_W)
14408 {
14409 if (intel_syntax)
14410 *obufp++ = 'd';
14411 else
14412 *obufp++ = 'l';
14413 }
14414 else if (sizeflag & DFLAG)
14415 *obufp++ = 'w';
a35ca55a 14416 else
0bfee649
L
14417 *obufp++ = 'b';
14418 if (!(rex & REX_W))
14419 used_prefixes |= (prefixes & PREFIX_DATA);
a35ca55a 14420 }
252b5132 14421 else
0bfee649 14422 {
6c30d220
L
14423 if (l != 1
14424 || len != 2
14425 || (last[0] != 'X'
14426 && last[0] != 'L'))
0bfee649
L
14427 {
14428 SAVE_LAST (*p);
14429 break;
14430 }
14431 if (!need_vex)
14432 abort ();
6c30d220
L
14433 if (last[0] == 'X')
14434 *obufp++ = vex.w ? 'd': 's';
14435 else
14436 *obufp++ = vex.w ? 'q': 'd';
0bfee649 14437 }
252b5132 14438 break;
a72d2af2
L
14439 case '^':
14440 if (intel_syntax)
14441 break;
14442 if ((prefixes & PREFIX_DATA) || (sizeflag & SUFFIX_ALWAYS))
14443 {
14444 if (sizeflag & DFLAG)
14445 *obufp++ = 'l';
14446 else
14447 *obufp++ = 'w';
14448 used_prefixes |= (prefixes & PREFIX_DATA);
14449 }
14450 break;
5db04b09
L
14451 case '@':
14452 if (intel_syntax)
14453 break;
14454 if (address_mode == mode_64bit
14455 && (isa64 == intel64
14456 || ((sizeflag & DFLAG) || (rex & REX_W))))
14457 *obufp++ = 'q';
14458 else if ((prefixes & PREFIX_DATA))
14459 {
14460 if (!(sizeflag & DFLAG))
14461 *obufp++ = 'w';
14462 used_prefixes |= (prefixes & PREFIX_DATA);
14463 }
14464 break;
252b5132 14465 }
9306ca4a 14466 alt = 0;
252b5132
RH
14467 }
14468 *obufp = 0;
ea397f5b 14469 mnemonicendp = obufp;
6439fc28 14470 return 0;
252b5132
RH
14471}
14472
14473static void
26ca5450 14474oappend (const char *s)
252b5132 14475{
ea397f5b 14476 obufp = stpcpy (obufp, s);
252b5132
RH
14477}
14478
14479static void
26ca5450 14480append_seg (void)
252b5132 14481{
285ca992
L
14482 /* Only print the active segment register. */
14483 if (!active_seg_prefix)
14484 return;
14485
14486 used_prefixes |= active_seg_prefix;
14487 switch (active_seg_prefix)
7d421014 14488 {
285ca992 14489 case PREFIX_CS:
9ce09ba2 14490 oappend_maybe_intel ("%cs:");
285ca992
L
14491 break;
14492 case PREFIX_DS:
9ce09ba2 14493 oappend_maybe_intel ("%ds:");
285ca992
L
14494 break;
14495 case PREFIX_SS:
9ce09ba2 14496 oappend_maybe_intel ("%ss:");
285ca992
L
14497 break;
14498 case PREFIX_ES:
9ce09ba2 14499 oappend_maybe_intel ("%es:");
285ca992
L
14500 break;
14501 case PREFIX_FS:
9ce09ba2 14502 oappend_maybe_intel ("%fs:");
285ca992
L
14503 break;
14504 case PREFIX_GS:
9ce09ba2 14505 oappend_maybe_intel ("%gs:");
285ca992
L
14506 break;
14507 default:
14508 break;
7d421014 14509 }
252b5132
RH
14510}
14511
14512static void
26ca5450 14513OP_indirE (int bytemode, int sizeflag)
252b5132
RH
14514{
14515 if (!intel_syntax)
14516 oappend ("*");
14517 OP_E (bytemode, sizeflag);
14518}
14519
52b15da3 14520static void
26ca5450 14521print_operand_value (char *buf, int hex, bfd_vma disp)
52b15da3 14522{
cb712a9e 14523 if (address_mode == mode_64bit)
52b15da3
JH
14524 {
14525 if (hex)
14526 {
14527 char tmp[30];
14528 int i;
14529 buf[0] = '0';
14530 buf[1] = 'x';
14531 sprintf_vma (tmp, disp);
6608db57 14532 for (i = 0; tmp[i] == '0' && tmp[i + 1]; i++);
52b15da3
JH
14533 strcpy (buf + 2, tmp + i);
14534 }
14535 else
14536 {
14537 bfd_signed_vma v = disp;
14538 char tmp[30];
14539 int i;
14540 if (v < 0)
14541 {
14542 *(buf++) = '-';
14543 v = -disp;
6608db57 14544 /* Check for possible overflow on 0x8000000000000000. */
52b15da3
JH
14545 if (v < 0)
14546 {
14547 strcpy (buf, "9223372036854775808");
14548 return;
14549 }
14550 }
14551 if (!v)
14552 {
14553 strcpy (buf, "0");
14554 return;
14555 }
14556
14557 i = 0;
14558 tmp[29] = 0;
14559 while (v)
14560 {
6608db57 14561 tmp[28 - i] = (v % 10) + '0';
52b15da3
JH
14562 v /= 10;
14563 i++;
14564 }
14565 strcpy (buf, tmp + 29 - i);
14566 }
14567 }
14568 else
14569 {
14570 if (hex)
14571 sprintf (buf, "0x%x", (unsigned int) disp);
14572 else
14573 sprintf (buf, "%d", (int) disp);
14574 }
14575}
14576
5d669648
L
14577/* Put DISP in BUF as signed hex number. */
14578
14579static void
14580print_displacement (char *buf, bfd_vma disp)
14581{
14582 bfd_signed_vma val = disp;
14583 char tmp[30];
14584 int i, j = 0;
14585
14586 if (val < 0)
14587 {
14588 buf[j++] = '-';
14589 val = -disp;
14590
14591 /* Check for possible overflow. */
14592 if (val < 0)
14593 {
14594 switch (address_mode)
14595 {
14596 case mode_64bit:
14597 strcpy (buf + j, "0x8000000000000000");
14598 break;
14599 case mode_32bit:
14600 strcpy (buf + j, "0x80000000");
14601 break;
14602 case mode_16bit:
14603 strcpy (buf + j, "0x8000");
14604 break;
14605 }
14606 return;
14607 }
14608 }
14609
14610 buf[j++] = '0';
14611 buf[j++] = 'x';
14612
0af1713e 14613 sprintf_vma (tmp, (bfd_vma) val);
5d669648
L
14614 for (i = 0; tmp[i] == '0'; i++)
14615 continue;
14616 if (tmp[i] == '\0')
14617 i--;
14618 strcpy (buf + j, tmp + i);
14619}
14620
3f31e633
JB
14621static void
14622intel_operand_size (int bytemode, int sizeflag)
14623{
43234a1e
L
14624 if (vex.evex
14625 && vex.b
14626 && (bytemode == x_mode
14627 || bytemode == evex_half_bcst_xmmq_mode))
14628 {
14629 if (vex.w)
14630 oappend ("QWORD PTR ");
14631 else
14632 oappend ("DWORD PTR ");
14633 return;
14634 }
3f31e633
JB
14635 switch (bytemode)
14636 {
14637 case b_mode:
b6169b20 14638 case b_swap_mode:
42903f7f 14639 case dqb_mode:
1ba585e8 14640 case db_mode:
3f31e633
JB
14641 oappend ("BYTE PTR ");
14642 break;
14643 case w_mode:
1ba585e8 14644 case dw_mode:
3f31e633
JB
14645 case dqw_mode:
14646 oappend ("WORD PTR ");
14647 break;
07f5af7d
L
14648 case indir_v_mode:
14649 if (address_mode == mode_64bit && isa64 == intel64)
14650 {
14651 oappend ("QWORD PTR ");
14652 break;
14653 }
1a0670f3 14654 /* Fall through. */
1a114b12 14655 case stack_v_mode:
7bb15c6f 14656 if (address_mode == mode_64bit && ((sizeflag & DFLAG) || (rex & REX_W)))
3f31e633
JB
14657 {
14658 oappend ("QWORD PTR ");
3f31e633
JB
14659 break;
14660 }
1a0670f3 14661 /* Fall through. */
3f31e633 14662 case v_mode:
b6169b20 14663 case v_swap_mode:
3f31e633 14664 case dq_mode:
161a04f6
L
14665 USED_REX (REX_W);
14666 if (rex & REX_W)
3f31e633 14667 oappend ("QWORD PTR ");
3f31e633 14668 else
f16cd0d5
L
14669 {
14670 if ((sizeflag & DFLAG) || bytemode == dq_mode)
14671 oappend ("DWORD PTR ");
14672 else
14673 oappend ("WORD PTR ");
14674 used_prefixes |= (prefixes & PREFIX_DATA);
14675 }
3f31e633 14676 break;
52fd6d94 14677 case z_mode:
161a04f6 14678 if ((rex & REX_W) || (sizeflag & DFLAG))
52fd6d94
JB
14679 *obufp++ = 'D';
14680 oappend ("WORD PTR ");
161a04f6 14681 if (!(rex & REX_W))
52fd6d94
JB
14682 used_prefixes |= (prefixes & PREFIX_DATA);
14683 break;
34b772a6
JB
14684 case a_mode:
14685 if (sizeflag & DFLAG)
14686 oappend ("QWORD PTR ");
14687 else
14688 oappend ("DWORD PTR ");
14689 used_prefixes |= (prefixes & PREFIX_DATA);
14690 break;
3f31e633 14691 case d_mode:
539f890d
L
14692 case d_scalar_mode:
14693 case d_scalar_swap_mode:
fa99fab2 14694 case d_swap_mode:
42903f7f 14695 case dqd_mode:
3f31e633
JB
14696 oappend ("DWORD PTR ");
14697 break;
14698 case q_mode:
539f890d
L
14699 case q_scalar_mode:
14700 case q_scalar_swap_mode:
b6169b20 14701 case q_swap_mode:
3f31e633
JB
14702 oappend ("QWORD PTR ");
14703 break;
14704 case m_mode:
cb712a9e 14705 if (address_mode == mode_64bit)
3f31e633
JB
14706 oappend ("QWORD PTR ");
14707 else
14708 oappend ("DWORD PTR ");
14709 break;
14710 case f_mode:
14711 if (sizeflag & DFLAG)
14712 oappend ("FWORD PTR ");
14713 else
14714 oappend ("DWORD PTR ");
14715 used_prefixes |= (prefixes & PREFIX_DATA);
14716 break;
14717 case t_mode:
14718 oappend ("TBYTE PTR ");
14719 break;
14720 case x_mode:
b6169b20 14721 case x_swap_mode:
43234a1e
L
14722 case evex_x_gscat_mode:
14723 case evex_x_nobcst_mode:
c0f3af97
L
14724 if (need_vex)
14725 {
14726 switch (vex.length)
14727 {
14728 case 128:
14729 oappend ("XMMWORD PTR ");
14730 break;
14731 case 256:
14732 oappend ("YMMWORD PTR ");
14733 break;
43234a1e
L
14734 case 512:
14735 oappend ("ZMMWORD PTR ");
14736 break;
c0f3af97
L
14737 default:
14738 abort ();
14739 }
14740 }
14741 else
14742 oappend ("XMMWORD PTR ");
14743 break;
14744 case xmm_mode:
3f31e633
JB
14745 oappend ("XMMWORD PTR ");
14746 break;
43234a1e
L
14747 case ymm_mode:
14748 oappend ("YMMWORD PTR ");
14749 break;
c0f3af97 14750 case xmmq_mode:
43234a1e 14751 case evex_half_bcst_xmmq_mode:
c0f3af97
L
14752 if (!need_vex)
14753 abort ();
14754
14755 switch (vex.length)
14756 {
14757 case 128:
14758 oappend ("QWORD PTR ");
14759 break;
14760 case 256:
14761 oappend ("XMMWORD PTR ");
14762 break;
43234a1e
L
14763 case 512:
14764 oappend ("YMMWORD PTR ");
14765 break;
c0f3af97
L
14766 default:
14767 abort ();
14768 }
14769 break;
6c30d220
L
14770 case xmm_mb_mode:
14771 if (!need_vex)
14772 abort ();
14773
14774 switch (vex.length)
14775 {
14776 case 128:
14777 case 256:
43234a1e 14778 case 512:
6c30d220
L
14779 oappend ("BYTE PTR ");
14780 break;
14781 default:
14782 abort ();
14783 }
14784 break;
14785 case xmm_mw_mode:
14786 if (!need_vex)
14787 abort ();
14788
14789 switch (vex.length)
14790 {
14791 case 128:
14792 case 256:
43234a1e 14793 case 512:
6c30d220
L
14794 oappend ("WORD PTR ");
14795 break;
14796 default:
14797 abort ();
14798 }
14799 break;
14800 case xmm_md_mode:
14801 if (!need_vex)
14802 abort ();
14803
14804 switch (vex.length)
14805 {
14806 case 128:
14807 case 256:
43234a1e 14808 case 512:
6c30d220
L
14809 oappend ("DWORD PTR ");
14810 break;
14811 default:
14812 abort ();
14813 }
14814 break;
14815 case xmm_mq_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 ("QWORD PTR ");
14825 break;
14826 default:
14827 abort ();
14828 }
14829 break;
14830 case xmmdw_mode:
14831 if (!need_vex)
14832 abort ();
14833
14834 switch (vex.length)
14835 {
14836 case 128:
14837 oappend ("WORD PTR ");
14838 break;
14839 case 256:
14840 oappend ("DWORD PTR ");
14841 break;
43234a1e
L
14842 case 512:
14843 oappend ("QWORD PTR ");
14844 break;
6c30d220
L
14845 default:
14846 abort ();
14847 }
14848 break;
14849 case xmmqd_mode:
14850 if (!need_vex)
14851 abort ();
14852
14853 switch (vex.length)
14854 {
14855 case 128:
14856 oappend ("DWORD PTR ");
14857 break;
14858 case 256:
14859 oappend ("QWORD PTR ");
14860 break;
43234a1e
L
14861 case 512:
14862 oappend ("XMMWORD PTR ");
14863 break;
6c30d220
L
14864 default:
14865 abort ();
14866 }
14867 break;
c0f3af97
L
14868 case ymmq_mode:
14869 if (!need_vex)
14870 abort ();
14871
14872 switch (vex.length)
14873 {
14874 case 128:
14875 oappend ("QWORD PTR ");
14876 break;
14877 case 256:
14878 oappend ("YMMWORD PTR ");
14879 break;
43234a1e
L
14880 case 512:
14881 oappend ("ZMMWORD PTR ");
14882 break;
c0f3af97
L
14883 default:
14884 abort ();
14885 }
14886 break;
6c30d220
L
14887 case ymmxmm_mode:
14888 if (!need_vex)
14889 abort ();
14890
14891 switch (vex.length)
14892 {
14893 case 128:
14894 case 256:
14895 oappend ("XMMWORD PTR ");
14896 break;
14897 default:
14898 abort ();
14899 }
14900 break;
fb9c77c7
L
14901 case o_mode:
14902 oappend ("OWORD PTR ");
14903 break;
43234a1e 14904 case xmm_mdq_mode:
0bfee649 14905 case vex_w_dq_mode:
1c480963 14906 case vex_scalar_w_dq_mode:
0bfee649
L
14907 if (!need_vex)
14908 abort ();
14909
14910 if (vex.w)
14911 oappend ("QWORD PTR ");
14912 else
14913 oappend ("DWORD PTR ");
14914 break;
43234a1e
L
14915 case vex_vsib_d_w_dq_mode:
14916 case vex_vsib_q_w_dq_mode:
14917 if (!need_vex)
14918 abort ();
14919
14920 if (!vex.evex)
14921 {
14922 if (vex.w)
14923 oappend ("QWORD PTR ");
14924 else
14925 oappend ("DWORD PTR ");
14926 }
14927 else
14928 {
b28d1bda
IT
14929 switch (vex.length)
14930 {
14931 case 128:
14932 oappend ("XMMWORD PTR ");
14933 break;
14934 case 256:
14935 oappend ("YMMWORD PTR ");
14936 break;
14937 case 512:
14938 oappend ("ZMMWORD PTR ");
14939 break;
14940 default:
14941 abort ();
14942 }
43234a1e
L
14943 }
14944 break;
5fc35d96
IT
14945 case vex_vsib_q_w_d_mode:
14946 case vex_vsib_d_w_d_mode:
b28d1bda 14947 if (!need_vex || !vex.evex)
5fc35d96
IT
14948 abort ();
14949
b28d1bda
IT
14950 switch (vex.length)
14951 {
14952 case 128:
14953 oappend ("QWORD PTR ");
14954 break;
14955 case 256:
14956 oappend ("XMMWORD PTR ");
14957 break;
14958 case 512:
14959 oappend ("YMMWORD PTR ");
14960 break;
14961 default:
14962 abort ();
14963 }
5fc35d96
IT
14964
14965 break;
1ba585e8
IT
14966 case mask_bd_mode:
14967 if (!need_vex || vex.length != 128)
14968 abort ();
14969 if (vex.w)
14970 oappend ("DWORD PTR ");
14971 else
14972 oappend ("BYTE PTR ");
14973 break;
43234a1e
L
14974 case mask_mode:
14975 if (!need_vex)
14976 abort ();
1ba585e8
IT
14977 if (vex.w)
14978 oappend ("QWORD PTR ");
14979 else
14980 oappend ("WORD PTR ");
43234a1e 14981 break;
6c75cc62 14982 case v_bnd_mode:
3f31e633
JB
14983 default:
14984 break;
14985 }
14986}
14987
252b5132 14988static void
c0f3af97 14989OP_E_register (int bytemode, int sizeflag)
252b5132 14990{
c0f3af97
L
14991 int reg = modrm.rm;
14992 const char **names;
252b5132 14993
c0f3af97
L
14994 USED_REX (REX_B);
14995 if ((rex & REX_B))
14996 reg += 8;
252b5132 14997
b6169b20 14998 if ((sizeflag & SUFFIX_ALWAYS)
1ba585e8 14999 && (bytemode == b_swap_mode
60227d64 15000 || bytemode == v_swap_mode))
b6169b20
L
15001 swap_operand ();
15002
c0f3af97 15003 switch (bytemode)
252b5132 15004 {
c0f3af97 15005 case b_mode:
b6169b20 15006 case b_swap_mode:
c0f3af97
L
15007 USED_REX (0);
15008 if (rex)
15009 names = names8rex;
15010 else
15011 names = names8;
15012 break;
15013 case w_mode:
15014 names = names16;
15015 break;
15016 case d_mode:
1ba585e8
IT
15017 case dw_mode:
15018 case db_mode:
c0f3af97
L
15019 names = names32;
15020 break;
15021 case q_mode:
15022 names = names64;
15023 break;
15024 case m_mode:
6c75cc62 15025 case v_bnd_mode:
c0f3af97
L
15026 names = address_mode == mode_64bit ? names64 : names32;
15027 break;
7e8b059b 15028 case bnd_mode:
0d96e4df
L
15029 if (reg > 0x3)
15030 {
15031 oappend ("(bad)");
15032 return;
15033 }
7e8b059b
L
15034 names = names_bnd;
15035 break;
07f5af7d
L
15036 case indir_v_mode:
15037 if (address_mode == mode_64bit && isa64 == intel64)
15038 {
15039 names = names64;
15040 break;
15041 }
1a0670f3 15042 /* Fall through. */
c0f3af97 15043 case stack_v_mode:
7bb15c6f 15044 if (address_mode == mode_64bit && ((sizeflag & DFLAG) || (rex & REX_W)))
252b5132 15045 {
c0f3af97 15046 names = names64;
252b5132 15047 break;
252b5132 15048 }
c0f3af97 15049 bytemode = v_mode;
1a0670f3 15050 /* Fall through. */
c0f3af97 15051 case v_mode:
b6169b20 15052 case v_swap_mode:
c0f3af97
L
15053 case dq_mode:
15054 case dqb_mode:
15055 case dqd_mode:
15056 case dqw_mode:
15057 USED_REX (REX_W);
15058 if (rex & REX_W)
15059 names = names64;
c0f3af97 15060 else
f16cd0d5 15061 {
7bb15c6f 15062 if ((sizeflag & DFLAG)
f16cd0d5
L
15063 || (bytemode != v_mode
15064 && bytemode != v_swap_mode))
15065 names = names32;
15066 else
15067 names = names16;
15068 used_prefixes |= (prefixes & PREFIX_DATA);
15069 }
c0f3af97 15070 break;
1ba585e8 15071 case mask_bd_mode:
43234a1e 15072 case mask_mode:
9889cbb1
L
15073 if (reg > 0x7)
15074 {
15075 oappend ("(bad)");
15076 return;
15077 }
43234a1e
L
15078 names = names_mask;
15079 break;
c0f3af97
L
15080 case 0:
15081 return;
15082 default:
15083 oappend (INTERNAL_DISASSEMBLER_ERROR);
252b5132
RH
15084 return;
15085 }
c0f3af97
L
15086 oappend (names[reg]);
15087}
15088
15089static void
c1e679ec 15090OP_E_memory (int bytemode, int sizeflag)
c0f3af97
L
15091{
15092 bfd_vma disp = 0;
15093 int add = (rex & REX_B) ? 8 : 0;
15094 int riprel = 0;
43234a1e
L
15095 int shift;
15096
15097 if (vex.evex)
15098 {
15099 /* In EVEX, if operand doesn't allow broadcast, vex.b should be 0. */
15100 if (vex.b
15101 && bytemode != x_mode
90a915bf 15102 && bytemode != xmmq_mode
43234a1e
L
15103 && bytemode != evex_half_bcst_xmmq_mode)
15104 {
15105 BadOp ();
15106 return;
15107 }
15108 switch (bytemode)
15109 {
1ba585e8
IT
15110 case dqw_mode:
15111 case dw_mode:
1ba585e8
IT
15112 shift = 1;
15113 break;
15114 case dqb_mode:
15115 case db_mode:
15116 shift = 0;
15117 break;
43234a1e 15118 case vex_vsib_d_w_dq_mode:
5fc35d96 15119 case vex_vsib_d_w_d_mode:
eaa9d1ad 15120 case vex_vsib_q_w_dq_mode:
5fc35d96 15121 case vex_vsib_q_w_d_mode:
43234a1e
L
15122 case evex_x_gscat_mode:
15123 case xmm_mdq_mode:
15124 shift = vex.w ? 3 : 2;
15125 break;
43234a1e
L
15126 case x_mode:
15127 case evex_half_bcst_xmmq_mode:
90a915bf 15128 case xmmq_mode:
43234a1e
L
15129 if (vex.b)
15130 {
15131 shift = vex.w ? 3 : 2;
15132 break;
15133 }
1a0670f3 15134 /* Fall through. */
43234a1e
L
15135 case xmmqd_mode:
15136 case xmmdw_mode:
43234a1e
L
15137 case ymmq_mode:
15138 case evex_x_nobcst_mode:
15139 case x_swap_mode:
15140 switch (vex.length)
15141 {
15142 case 128:
15143 shift = 4;
15144 break;
15145 case 256:
15146 shift = 5;
15147 break;
15148 case 512:
15149 shift = 6;
15150 break;
15151 default:
15152 abort ();
15153 }
15154 break;
15155 case ymm_mode:
15156 shift = 5;
15157 break;
15158 case xmm_mode:
15159 shift = 4;
15160 break;
15161 case xmm_mq_mode:
15162 case q_mode:
15163 case q_scalar_mode:
15164 case q_swap_mode:
15165 case q_scalar_swap_mode:
15166 shift = 3;
15167 break;
15168 case dqd_mode:
15169 case xmm_md_mode:
15170 case d_mode:
15171 case d_scalar_mode:
15172 case d_swap_mode:
15173 case d_scalar_swap_mode:
15174 shift = 2;
15175 break;
15176 case xmm_mw_mode:
15177 shift = 1;
15178 break;
15179 case xmm_mb_mode:
15180 shift = 0;
15181 break;
15182 default:
15183 abort ();
15184 }
15185 /* Make necessary corrections to shift for modes that need it.
15186 For these modes we currently have shift 4, 5 or 6 depending on
15187 vex.length (it corresponds to xmmword, ymmword or zmmword
15188 operand). We might want to make it 3, 4 or 5 (e.g. for
15189 xmmq_mode). In case of broadcast enabled the corrections
15190 aren't needed, as element size is always 32 or 64 bits. */
90a915bf
IT
15191 if (!vex.b
15192 && (bytemode == xmmq_mode
15193 || bytemode == evex_half_bcst_xmmq_mode))
43234a1e
L
15194 shift -= 1;
15195 else if (bytemode == xmmqd_mode)
15196 shift -= 2;
15197 else if (bytemode == xmmdw_mode)
15198 shift -= 3;
b28d1bda
IT
15199 else if (bytemode == ymmq_mode && vex.length == 128)
15200 shift -= 1;
43234a1e
L
15201 }
15202 else
15203 shift = 0;
252b5132 15204
c0f3af97 15205 USED_REX (REX_B);
3f31e633
JB
15206 if (intel_syntax)
15207 intel_operand_size (bytemode, sizeflag);
252b5132
RH
15208 append_seg ();
15209
5d669648 15210 if ((sizeflag & AFLAG) || address_mode == mode_64bit)
252b5132 15211 {
5d669648
L
15212 /* 32/64 bit address mode */
15213 int havedisp;
252b5132
RH
15214 int havesib;
15215 int havebase;
0f7da397 15216 int haveindex;
20afcfb7 15217 int needindex;
82c18208 15218 int base, rbase;
91d6fa6a 15219 int vindex = 0;
252b5132 15220 int scale = 0;
7e8b059b
L
15221 int addr32flag = !((sizeflag & AFLAG)
15222 || bytemode == v_bnd_mode
15223 || bytemode == bnd_mode);
6c30d220
L
15224 const char **indexes64 = names64;
15225 const char **indexes32 = names32;
252b5132
RH
15226
15227 havesib = 0;
15228 havebase = 1;
0f7da397 15229 haveindex = 0;
7967e09e 15230 base = modrm.rm;
252b5132
RH
15231
15232 if (base == 4)
15233 {
15234 havesib = 1;
dfc8cf43 15235 vindex = sib.index;
161a04f6
L
15236 USED_REX (REX_X);
15237 if (rex & REX_X)
91d6fa6a 15238 vindex += 8;
6c30d220
L
15239 switch (bytemode)
15240 {
15241 case vex_vsib_d_w_dq_mode:
5fc35d96 15242 case vex_vsib_d_w_d_mode:
6c30d220 15243 case vex_vsib_q_w_dq_mode:
5fc35d96 15244 case vex_vsib_q_w_d_mode:
6c30d220
L
15245 if (!need_vex)
15246 abort ();
43234a1e
L
15247 if (vex.evex)
15248 {
15249 if (!vex.v)
15250 vindex += 16;
15251 }
6c30d220
L
15252
15253 haveindex = 1;
15254 switch (vex.length)
15255 {
15256 case 128:
7bb15c6f 15257 indexes64 = indexes32 = names_xmm;
6c30d220
L
15258 break;
15259 case 256:
5fc35d96
IT
15260 if (!vex.w
15261 || bytemode == vex_vsib_q_w_dq_mode
15262 || bytemode == vex_vsib_q_w_d_mode)
7bb15c6f 15263 indexes64 = indexes32 = names_ymm;
6c30d220 15264 else
7bb15c6f 15265 indexes64 = indexes32 = names_xmm;
6c30d220 15266 break;
43234a1e 15267 case 512:
5fc35d96
IT
15268 if (!vex.w
15269 || bytemode == vex_vsib_q_w_dq_mode
15270 || bytemode == vex_vsib_q_w_d_mode)
43234a1e
L
15271 indexes64 = indexes32 = names_zmm;
15272 else
15273 indexes64 = indexes32 = names_ymm;
15274 break;
6c30d220
L
15275 default:
15276 abort ();
15277 }
15278 break;
15279 default:
15280 haveindex = vindex != 4;
15281 break;
15282 }
15283 scale = sib.scale;
15284 base = sib.base;
252b5132
RH
15285 codep++;
15286 }
82c18208 15287 rbase = base + add;
252b5132 15288
7967e09e 15289 switch (modrm.mod)
252b5132
RH
15290 {
15291 case 0:
82c18208 15292 if (base == 5)
252b5132
RH
15293 {
15294 havebase = 0;
cb712a9e 15295 if (address_mode == mode_64bit && !havesib)
52b15da3
JH
15296 riprel = 1;
15297 disp = get32s ();
252b5132
RH
15298 }
15299 break;
15300 case 1:
15301 FETCH_DATA (the_info, codep + 1);
15302 disp = *codep++;
15303 if ((disp & 0x80) != 0)
15304 disp -= 0x100;
43234a1e
L
15305 if (vex.evex && shift > 0)
15306 disp <<= shift;
252b5132
RH
15307 break;
15308 case 2:
52b15da3 15309 disp = get32s ();
252b5132
RH
15310 break;
15311 }
15312
20afcfb7
L
15313 /* In 32bit mode, we need index register to tell [offset] from
15314 [eiz*1 + offset]. */
15315 needindex = (havesib
15316 && !havebase
15317 && !haveindex
15318 && address_mode == mode_32bit);
15319 havedisp = (havebase
15320 || needindex
15321 || (havesib && (haveindex || scale != 0)));
5d669648 15322
252b5132 15323 if (!intel_syntax)
82c18208 15324 if (modrm.mod != 0 || base == 5)
db6eb5be 15325 {
5d669648
L
15326 if (havedisp || riprel)
15327 print_displacement (scratchbuf, disp);
15328 else
15329 print_operand_value (scratchbuf, 1, disp);
db6eb5be 15330 oappend (scratchbuf);
52b15da3
JH
15331 if (riprel)
15332 {
15333 set_op (disp, 1);
28596323 15334 oappend (!addr32flag ? "(%rip)" : "(%eip)");
52b15da3 15335 }
db6eb5be 15336 }
2da11e11 15337
7e8b059b
L
15338 if ((havebase || haveindex || riprel)
15339 && (bytemode != v_bnd_mode)
15340 && (bytemode != bnd_mode))
87767711
JB
15341 used_prefixes |= PREFIX_ADDR;
15342
5d669648 15343 if (havedisp || (intel_syntax && riprel))
252b5132 15344 {
252b5132 15345 *obufp++ = open_char;
52b15da3 15346 if (intel_syntax && riprel)
185b1163
L
15347 {
15348 set_op (disp, 1);
28596323 15349 oappend (!addr32flag ? "rip" : "eip");
185b1163 15350 }
db6eb5be 15351 *obufp = '\0';
252b5132 15352 if (havebase)
7e8b059b 15353 oappend (address_mode == mode_64bit && !addr32flag
82c18208 15354 ? names64[rbase] : names32[rbase]);
252b5132
RH
15355 if (havesib)
15356 {
db51cc60
L
15357 /* ESP/RSP won't allow index. If base isn't ESP/RSP,
15358 print index to tell base + index from base. */
15359 if (scale != 0
20afcfb7 15360 || needindex
db51cc60
L
15361 || haveindex
15362 || (havebase && base != ESP_REG_NUM))
252b5132 15363 {
9306ca4a 15364 if (!intel_syntax || havebase)
db6eb5be 15365 {
9306ca4a
JB
15366 *obufp++ = separator_char;
15367 *obufp = '\0';
db6eb5be 15368 }
db51cc60 15369 if (haveindex)
7e8b059b 15370 oappend (address_mode == mode_64bit && !addr32flag
6c30d220 15371 ? indexes64[vindex] : indexes32[vindex]);
db51cc60 15372 else
7e8b059b 15373 oappend (address_mode == mode_64bit && !addr32flag
db51cc60
L
15374 ? index64 : index32);
15375
db6eb5be
AM
15376 *obufp++ = scale_char;
15377 *obufp = '\0';
15378 sprintf (scratchbuf, "%d", 1 << scale);
15379 oappend (scratchbuf);
15380 }
252b5132 15381 }
185b1163 15382 if (intel_syntax
82c18208 15383 && (disp || modrm.mod != 0 || base == 5))
3d456fa1 15384 {
db51cc60 15385 if (!havedisp || (bfd_signed_vma) disp >= 0)
3d456fa1
JB
15386 {
15387 *obufp++ = '+';
15388 *obufp = '\0';
15389 }
05203043 15390 else if (modrm.mod != 1 && disp != -disp)
3d456fa1
JB
15391 {
15392 *obufp++ = '-';
15393 *obufp = '\0';
15394 disp = - (bfd_signed_vma) disp;
15395 }
15396
db51cc60
L
15397 if (havedisp)
15398 print_displacement (scratchbuf, disp);
15399 else
15400 print_operand_value (scratchbuf, 1, disp);
3d456fa1
JB
15401 oappend (scratchbuf);
15402 }
252b5132
RH
15403
15404 *obufp++ = close_char;
db6eb5be 15405 *obufp = '\0';
252b5132
RH
15406 }
15407 else if (intel_syntax)
db6eb5be 15408 {
82c18208 15409 if (modrm.mod != 0 || base == 5)
db6eb5be 15410 {
285ca992 15411 if (!active_seg_prefix)
252b5132 15412 {
d708bcba 15413 oappend (names_seg[ds_reg - es_reg]);
252b5132
RH
15414 oappend (":");
15415 }
52b15da3 15416 print_operand_value (scratchbuf, 1, disp);
db6eb5be
AM
15417 oappend (scratchbuf);
15418 }
15419 }
252b5132
RH
15420 }
15421 else
f16cd0d5
L
15422 {
15423 /* 16 bit address mode */
15424 used_prefixes |= prefixes & PREFIX_ADDR;
7967e09e 15425 switch (modrm.mod)
252b5132
RH
15426 {
15427 case 0:
7967e09e 15428 if (modrm.rm == 6)
252b5132
RH
15429 {
15430 disp = get16 ();
15431 if ((disp & 0x8000) != 0)
15432 disp -= 0x10000;
15433 }
15434 break;
15435 case 1:
15436 FETCH_DATA (the_info, codep + 1);
15437 disp = *codep++;
15438 if ((disp & 0x80) != 0)
15439 disp -= 0x100;
15440 break;
15441 case 2:
15442 disp = get16 ();
15443 if ((disp & 0x8000) != 0)
15444 disp -= 0x10000;
15445 break;
15446 }
15447
15448 if (!intel_syntax)
7967e09e 15449 if (modrm.mod != 0 || modrm.rm == 6)
db6eb5be 15450 {
5d669648 15451 print_displacement (scratchbuf, disp);
db6eb5be
AM
15452 oappend (scratchbuf);
15453 }
252b5132 15454
7967e09e 15455 if (modrm.mod != 0 || modrm.rm != 6)
252b5132
RH
15456 {
15457 *obufp++ = open_char;
db6eb5be 15458 *obufp = '\0';
7967e09e 15459 oappend (index16[modrm.rm]);
5d669648
L
15460 if (intel_syntax
15461 && (disp || modrm.mod != 0 || modrm.rm == 6))
3d456fa1 15462 {
5d669648 15463 if ((bfd_signed_vma) disp >= 0)
3d456fa1
JB
15464 {
15465 *obufp++ = '+';
15466 *obufp = '\0';
15467 }
7967e09e 15468 else if (modrm.mod != 1)
3d456fa1
JB
15469 {
15470 *obufp++ = '-';
15471 *obufp = '\0';
15472 disp = - (bfd_signed_vma) disp;
15473 }
15474
5d669648 15475 print_displacement (scratchbuf, disp);
3d456fa1
JB
15476 oappend (scratchbuf);
15477 }
15478
db6eb5be
AM
15479 *obufp++ = close_char;
15480 *obufp = '\0';
252b5132 15481 }
3d456fa1
JB
15482 else if (intel_syntax)
15483 {
285ca992 15484 if (!active_seg_prefix)
3d456fa1
JB
15485 {
15486 oappend (names_seg[ds_reg - es_reg]);
15487 oappend (":");
15488 }
15489 print_operand_value (scratchbuf, 1, disp & 0xffff);
15490 oappend (scratchbuf);
15491 }
252b5132 15492 }
43234a1e
L
15493 if (vex.evex && vex.b
15494 && (bytemode == x_mode
90a915bf 15495 || bytemode == xmmq_mode
43234a1e
L
15496 || bytemode == evex_half_bcst_xmmq_mode))
15497 {
90a915bf
IT
15498 if (vex.w
15499 || bytemode == xmmq_mode
15500 || bytemode == evex_half_bcst_xmmq_mode)
b28d1bda
IT
15501 {
15502 switch (vex.length)
15503 {
15504 case 128:
15505 oappend ("{1to2}");
15506 break;
15507 case 256:
15508 oappend ("{1to4}");
15509 break;
15510 case 512:
15511 oappend ("{1to8}");
15512 break;
15513 default:
15514 abort ();
15515 }
15516 }
43234a1e 15517 else
b28d1bda
IT
15518 {
15519 switch (vex.length)
15520 {
15521 case 128:
15522 oappend ("{1to4}");
15523 break;
15524 case 256:
15525 oappend ("{1to8}");
15526 break;
15527 case 512:
15528 oappend ("{1to16}");
15529 break;
15530 default:
15531 abort ();
15532 }
15533 }
43234a1e 15534 }
252b5132
RH
15535}
15536
c0f3af97 15537static void
8b3f93e7 15538OP_E (int bytemode, int sizeflag)
c0f3af97
L
15539{
15540 /* Skip mod/rm byte. */
15541 MODRM_CHECK;
15542 codep++;
15543
15544 if (modrm.mod == 3)
15545 OP_E_register (bytemode, sizeflag);
15546 else
c1e679ec 15547 OP_E_memory (bytemode, sizeflag);
c0f3af97
L
15548}
15549
252b5132 15550static void
26ca5450 15551OP_G (int bytemode, int sizeflag)
252b5132 15552{
52b15da3 15553 int add = 0;
161a04f6
L
15554 USED_REX (REX_R);
15555 if (rex & REX_R)
52b15da3 15556 add += 8;
252b5132
RH
15557 switch (bytemode)
15558 {
15559 case b_mode:
52b15da3
JH
15560 USED_REX (0);
15561 if (rex)
7967e09e 15562 oappend (names8rex[modrm.reg + add]);
52b15da3 15563 else
7967e09e 15564 oappend (names8[modrm.reg + add]);
252b5132
RH
15565 break;
15566 case w_mode:
7967e09e 15567 oappend (names16[modrm.reg + add]);
252b5132
RH
15568 break;
15569 case d_mode:
1ba585e8
IT
15570 case db_mode:
15571 case dw_mode:
7967e09e 15572 oappend (names32[modrm.reg + add]);
52b15da3
JH
15573 break;
15574 case q_mode:
7967e09e 15575 oappend (names64[modrm.reg + add]);
252b5132 15576 break;
7e8b059b 15577 case bnd_mode:
0d96e4df
L
15578 if (modrm.reg > 0x3)
15579 {
15580 oappend ("(bad)");
15581 return;
15582 }
7e8b059b
L
15583 oappend (names_bnd[modrm.reg]);
15584 break;
252b5132 15585 case v_mode:
9306ca4a 15586 case dq_mode:
42903f7f
L
15587 case dqb_mode:
15588 case dqd_mode:
9306ca4a 15589 case dqw_mode:
161a04f6
L
15590 USED_REX (REX_W);
15591 if (rex & REX_W)
7967e09e 15592 oappend (names64[modrm.reg + add]);
252b5132 15593 else
f16cd0d5
L
15594 {
15595 if ((sizeflag & DFLAG) || bytemode != v_mode)
15596 oappend (names32[modrm.reg + add]);
15597 else
15598 oappend (names16[modrm.reg + add]);
15599 used_prefixes |= (prefixes & PREFIX_DATA);
15600 }
252b5132 15601 break;
90700ea2 15602 case m_mode:
cb712a9e 15603 if (address_mode == mode_64bit)
7967e09e 15604 oappend (names64[modrm.reg + add]);
90700ea2 15605 else
7967e09e 15606 oappend (names32[modrm.reg + add]);
90700ea2 15607 break;
1ba585e8 15608 case mask_bd_mode:
43234a1e 15609 case mask_mode:
9889cbb1
L
15610 if ((modrm.reg + add) > 0x7)
15611 {
15612 oappend ("(bad)");
15613 return;
15614 }
43234a1e
L
15615 oappend (names_mask[modrm.reg + add]);
15616 break;
252b5132
RH
15617 default:
15618 oappend (INTERNAL_DISASSEMBLER_ERROR);
15619 break;
15620 }
15621}
15622
52b15da3 15623static bfd_vma
26ca5450 15624get64 (void)
52b15da3 15625{
5dd0794d 15626 bfd_vma x;
52b15da3 15627#ifdef BFD64
5dd0794d
AM
15628 unsigned int a;
15629 unsigned int b;
15630
52b15da3
JH
15631 FETCH_DATA (the_info, codep + 8);
15632 a = *codep++ & 0xff;
15633 a |= (*codep++ & 0xff) << 8;
15634 a |= (*codep++ & 0xff) << 16;
070fe95d 15635 a |= (*codep++ & 0xffu) << 24;
5dd0794d 15636 b = *codep++ & 0xff;
52b15da3
JH
15637 b |= (*codep++ & 0xff) << 8;
15638 b |= (*codep++ & 0xff) << 16;
070fe95d 15639 b |= (*codep++ & 0xffu) << 24;
52b15da3
JH
15640 x = a + ((bfd_vma) b << 32);
15641#else
6608db57 15642 abort ();
5dd0794d 15643 x = 0;
52b15da3
JH
15644#endif
15645 return x;
15646}
15647
15648static bfd_signed_vma
26ca5450 15649get32 (void)
252b5132 15650{
52b15da3 15651 bfd_signed_vma x = 0;
252b5132
RH
15652
15653 FETCH_DATA (the_info, codep + 4);
52b15da3
JH
15654 x = *codep++ & (bfd_signed_vma) 0xff;
15655 x |= (*codep++ & (bfd_signed_vma) 0xff) << 8;
15656 x |= (*codep++ & (bfd_signed_vma) 0xff) << 16;
15657 x |= (*codep++ & (bfd_signed_vma) 0xff) << 24;
15658 return x;
15659}
15660
15661static bfd_signed_vma
26ca5450 15662get32s (void)
52b15da3
JH
15663{
15664 bfd_signed_vma x = 0;
15665
15666 FETCH_DATA (the_info, codep + 4);
15667 x = *codep++ & (bfd_signed_vma) 0xff;
15668 x |= (*codep++ & (bfd_signed_vma) 0xff) << 8;
15669 x |= (*codep++ & (bfd_signed_vma) 0xff) << 16;
15670 x |= (*codep++ & (bfd_signed_vma) 0xff) << 24;
15671
15672 x = (x ^ ((bfd_signed_vma) 1 << 31)) - ((bfd_signed_vma) 1 << 31);
15673
252b5132
RH
15674 return x;
15675}
15676
15677static int
26ca5450 15678get16 (void)
252b5132
RH
15679{
15680 int x = 0;
15681
15682 FETCH_DATA (the_info, codep + 2);
15683 x = *codep++ & 0xff;
15684 x |= (*codep++ & 0xff) << 8;
15685 return x;
15686}
15687
15688static void
26ca5450 15689set_op (bfd_vma op, int riprel)
252b5132
RH
15690{
15691 op_index[op_ad] = op_ad;
cb712a9e 15692 if (address_mode == mode_64bit)
7081ff04
AJ
15693 {
15694 op_address[op_ad] = op;
15695 op_riprel[op_ad] = riprel;
15696 }
15697 else
15698 {
15699 /* Mask to get a 32-bit address. */
15700 op_address[op_ad] = op & 0xffffffff;
15701 op_riprel[op_ad] = riprel & 0xffffffff;
15702 }
252b5132
RH
15703}
15704
15705static void
26ca5450 15706OP_REG (int code, int sizeflag)
252b5132 15707{
2da11e11 15708 const char *s;
9b60702d 15709 int add;
de882298
RM
15710
15711 switch (code)
15712 {
15713 case es_reg: case ss_reg: case cs_reg:
15714 case ds_reg: case fs_reg: case gs_reg:
15715 oappend (names_seg[code - es_reg]);
15716 return;
15717 }
15718
161a04f6
L
15719 USED_REX (REX_B);
15720 if (rex & REX_B)
52b15da3 15721 add = 8;
9b60702d
L
15722 else
15723 add = 0;
52b15da3
JH
15724
15725 switch (code)
15726 {
52b15da3
JH
15727 case ax_reg: case cx_reg: case dx_reg: case bx_reg:
15728 case sp_reg: case bp_reg: case si_reg: case di_reg:
15729 s = names16[code - ax_reg + add];
15730 break;
52b15da3
JH
15731 case al_reg: case ah_reg: case cl_reg: case ch_reg:
15732 case dl_reg: case dh_reg: case bl_reg: case bh_reg:
15733 USED_REX (0);
15734 if (rex)
15735 s = names8rex[code - al_reg + add];
15736 else
15737 s = names8[code - al_reg];
15738 break;
6439fc28
AM
15739 case rAX_reg: case rCX_reg: case rDX_reg: case rBX_reg:
15740 case rSP_reg: case rBP_reg: case rSI_reg: case rDI_reg:
7bb15c6f 15741 if (address_mode == mode_64bit
6c067bbb 15742 && ((sizeflag & DFLAG) || (rex & REX_W)))
6439fc28
AM
15743 {
15744 s = names64[code - rAX_reg + add];
15745 break;
15746 }
15747 code += eAX_reg - rAX_reg;
6608db57 15748 /* Fall through. */
52b15da3
JH
15749 case eAX_reg: case eCX_reg: case eDX_reg: case eBX_reg:
15750 case eSP_reg: case eBP_reg: case eSI_reg: case eDI_reg:
161a04f6
L
15751 USED_REX (REX_W);
15752 if (rex & REX_W)
52b15da3 15753 s = names64[code - eAX_reg + add];
52b15da3 15754 else
f16cd0d5
L
15755 {
15756 if (sizeflag & DFLAG)
15757 s = names32[code - eAX_reg + add];
15758 else
15759 s = names16[code - eAX_reg + add];
15760 used_prefixes |= (prefixes & PREFIX_DATA);
15761 }
52b15da3 15762 break;
52b15da3
JH
15763 default:
15764 s = INTERNAL_DISASSEMBLER_ERROR;
15765 break;
15766 }
15767 oappend (s);
15768}
15769
15770static void
26ca5450 15771OP_IMREG (int code, int sizeflag)
52b15da3
JH
15772{
15773 const char *s;
252b5132
RH
15774
15775 switch (code)
15776 {
15777 case indir_dx_reg:
d708bcba 15778 if (intel_syntax)
52fd6d94 15779 s = "dx";
d708bcba 15780 else
db6eb5be 15781 s = "(%dx)";
252b5132
RH
15782 break;
15783 case ax_reg: case cx_reg: case dx_reg: case bx_reg:
15784 case sp_reg: case bp_reg: case si_reg: case di_reg:
15785 s = names16[code - ax_reg];
15786 break;
15787 case es_reg: case ss_reg: case cs_reg:
15788 case ds_reg: case fs_reg: case gs_reg:
15789 s = names_seg[code - es_reg];
15790 break;
15791 case al_reg: case ah_reg: case cl_reg: case ch_reg:
15792 case dl_reg: case dh_reg: case bl_reg: case bh_reg:
52b15da3
JH
15793 USED_REX (0);
15794 if (rex)
15795 s = names8rex[code - al_reg];
15796 else
15797 s = names8[code - al_reg];
252b5132
RH
15798 break;
15799 case eAX_reg: case eCX_reg: case eDX_reg: case eBX_reg:
15800 case eSP_reg: case eBP_reg: case eSI_reg: case eDI_reg:
161a04f6
L
15801 USED_REX (REX_W);
15802 if (rex & REX_W)
52b15da3 15803 s = names64[code - eAX_reg];
252b5132 15804 else
f16cd0d5
L
15805 {
15806 if (sizeflag & DFLAG)
15807 s = names32[code - eAX_reg];
15808 else
15809 s = names16[code - eAX_reg];
15810 used_prefixes |= (prefixes & PREFIX_DATA);
15811 }
252b5132 15812 break;
52fd6d94 15813 case z_mode_ax_reg:
161a04f6 15814 if ((rex & REX_W) || (sizeflag & DFLAG))
52fd6d94
JB
15815 s = *names32;
15816 else
15817 s = *names16;
161a04f6 15818 if (!(rex & REX_W))
52fd6d94
JB
15819 used_prefixes |= (prefixes & PREFIX_DATA);
15820 break;
252b5132
RH
15821 default:
15822 s = INTERNAL_DISASSEMBLER_ERROR;
15823 break;
15824 }
15825 oappend (s);
15826}
15827
15828static void
26ca5450 15829OP_I (int bytemode, int sizeflag)
252b5132 15830{
52b15da3
JH
15831 bfd_signed_vma op;
15832 bfd_signed_vma mask = -1;
252b5132
RH
15833
15834 switch (bytemode)
15835 {
15836 case b_mode:
15837 FETCH_DATA (the_info, codep + 1);
52b15da3
JH
15838 op = *codep++;
15839 mask = 0xff;
15840 break;
15841 case q_mode:
cb712a9e 15842 if (address_mode == mode_64bit)
6439fc28
AM
15843 {
15844 op = get32s ();
15845 break;
15846 }
6608db57 15847 /* Fall through. */
252b5132 15848 case v_mode:
161a04f6
L
15849 USED_REX (REX_W);
15850 if (rex & REX_W)
52b15da3 15851 op = get32s ();
252b5132 15852 else
52b15da3 15853 {
f16cd0d5
L
15854 if (sizeflag & DFLAG)
15855 {
15856 op = get32 ();
15857 mask = 0xffffffff;
15858 }
15859 else
15860 {
15861 op = get16 ();
15862 mask = 0xfffff;
15863 }
15864 used_prefixes |= (prefixes & PREFIX_DATA);
52b15da3 15865 }
252b5132
RH
15866 break;
15867 case w_mode:
52b15da3 15868 mask = 0xfffff;
252b5132
RH
15869 op = get16 ();
15870 break;
9306ca4a
JB
15871 case const_1_mode:
15872 if (intel_syntax)
6c067bbb 15873 oappend ("1");
9306ca4a 15874 return;
252b5132
RH
15875 default:
15876 oappend (INTERNAL_DISASSEMBLER_ERROR);
15877 return;
15878 }
15879
52b15da3
JH
15880 op &= mask;
15881 scratchbuf[0] = '$';
d708bcba 15882 print_operand_value (scratchbuf + 1, 1, op);
9ce09ba2 15883 oappend_maybe_intel (scratchbuf);
52b15da3
JH
15884 scratchbuf[0] = '\0';
15885}
15886
15887static void
26ca5450 15888OP_I64 (int bytemode, int sizeflag)
52b15da3
JH
15889{
15890 bfd_signed_vma op;
15891 bfd_signed_vma mask = -1;
15892
cb712a9e 15893 if (address_mode != mode_64bit)
6439fc28
AM
15894 {
15895 OP_I (bytemode, sizeflag);
15896 return;
15897 }
15898
52b15da3
JH
15899 switch (bytemode)
15900 {
15901 case b_mode:
15902 FETCH_DATA (the_info, codep + 1);
15903 op = *codep++;
15904 mask = 0xff;
15905 break;
15906 case v_mode:
161a04f6
L
15907 USED_REX (REX_W);
15908 if (rex & REX_W)
52b15da3 15909 op = get64 ();
52b15da3
JH
15910 else
15911 {
f16cd0d5
L
15912 if (sizeflag & DFLAG)
15913 {
15914 op = get32 ();
15915 mask = 0xffffffff;
15916 }
15917 else
15918 {
15919 op = get16 ();
15920 mask = 0xfffff;
15921 }
15922 used_prefixes |= (prefixes & PREFIX_DATA);
52b15da3 15923 }
52b15da3
JH
15924 break;
15925 case w_mode:
15926 mask = 0xfffff;
15927 op = get16 ();
15928 break;
15929 default:
15930 oappend (INTERNAL_DISASSEMBLER_ERROR);
15931 return;
15932 }
15933
15934 op &= mask;
15935 scratchbuf[0] = '$';
d708bcba 15936 print_operand_value (scratchbuf + 1, 1, op);
9ce09ba2 15937 oappend_maybe_intel (scratchbuf);
252b5132
RH
15938 scratchbuf[0] = '\0';
15939}
15940
15941static void
26ca5450 15942OP_sI (int bytemode, int sizeflag)
252b5132 15943{
52b15da3 15944 bfd_signed_vma op;
252b5132
RH
15945
15946 switch (bytemode)
15947 {
15948 case b_mode:
e3949f17 15949 case b_T_mode:
252b5132
RH
15950 FETCH_DATA (the_info, codep + 1);
15951 op = *codep++;
15952 if ((op & 0x80) != 0)
15953 op -= 0x100;
e3949f17
L
15954 if (bytemode == b_T_mode)
15955 {
15956 if (address_mode != mode_64bit
7bb15c6f 15957 || !((sizeflag & DFLAG) || (rex & REX_W)))
e3949f17 15958 {
6c067bbb
RM
15959 /* The operand-size prefix is overridden by a REX prefix. */
15960 if ((sizeflag & DFLAG) || (rex & REX_W))
e3949f17
L
15961 op &= 0xffffffff;
15962 else
15963 op &= 0xffff;
15964 }
15965 }
15966 else
15967 {
15968 if (!(rex & REX_W))
15969 {
15970 if (sizeflag & DFLAG)
15971 op &= 0xffffffff;
15972 else
15973 op &= 0xffff;
15974 }
15975 }
252b5132
RH
15976 break;
15977 case v_mode:
7bb15c6f
RM
15978 /* The operand-size prefix is overridden by a REX prefix. */
15979 if ((sizeflag & DFLAG) || (rex & REX_W))
52b15da3 15980 op = get32s ();
252b5132 15981 else
d9e3625e 15982 op = get16 ();
252b5132
RH
15983 break;
15984 default:
15985 oappend (INTERNAL_DISASSEMBLER_ERROR);
15986 return;
15987 }
52b15da3
JH
15988
15989 scratchbuf[0] = '$';
15990 print_operand_value (scratchbuf + 1, 1, op);
9ce09ba2 15991 oappend_maybe_intel (scratchbuf);
252b5132
RH
15992}
15993
15994static void
26ca5450 15995OP_J (int bytemode, int sizeflag)
252b5132 15996{
52b15da3 15997 bfd_vma disp;
7081ff04 15998 bfd_vma mask = -1;
65ca155d 15999 bfd_vma segment = 0;
252b5132
RH
16000
16001 switch (bytemode)
16002 {
16003 case b_mode:
16004 FETCH_DATA (the_info, codep + 1);
16005 disp = *codep++;
16006 if ((disp & 0x80) != 0)
16007 disp -= 0x100;
16008 break;
16009 case v_mode:
5db04b09
L
16010 if (isa64 == amd64)
16011 USED_REX (REX_W);
16012 if ((sizeflag & DFLAG)
16013 || (address_mode == mode_64bit
16014 && (isa64 != amd64 || (rex & REX_W))))
52b15da3 16015 disp = get32s ();
252b5132
RH
16016 else
16017 {
16018 disp = get16 ();
206717e8
L
16019 if ((disp & 0x8000) != 0)
16020 disp -= 0x10000;
65ca155d
L
16021 /* In 16bit mode, address is wrapped around at 64k within
16022 the same segment. Otherwise, a data16 prefix on a jump
16023 instruction means that the pc is masked to 16 bits after
16024 the displacement is added! */
16025 mask = 0xffff;
16026 if ((prefixes & PREFIX_DATA) == 0)
4fd7268a 16027 segment = ((start_pc + (codep - start_codep))
65ca155d 16028 & ~((bfd_vma) 0xffff));
252b5132 16029 }
5db04b09
L
16030 if (address_mode != mode_64bit
16031 || (isa64 == amd64 && !(rex & REX_W)))
f16cd0d5 16032 used_prefixes |= (prefixes & PREFIX_DATA);
252b5132
RH
16033 break;
16034 default:
16035 oappend (INTERNAL_DISASSEMBLER_ERROR);
16036 return;
16037 }
42d5f9c6 16038 disp = ((start_pc + (codep - start_codep) + disp) & mask) | segment;
52b15da3
JH
16039 set_op (disp, 0);
16040 print_operand_value (scratchbuf, 1, disp);
252b5132
RH
16041 oappend (scratchbuf);
16042}
16043
252b5132 16044static void
ed7841b3 16045OP_SEG (int bytemode, int sizeflag)
252b5132 16046{
ed7841b3 16047 if (bytemode == w_mode)
7967e09e 16048 oappend (names_seg[modrm.reg]);
ed7841b3 16049 else
7967e09e 16050 OP_E (modrm.mod == 3 ? bytemode : w_mode, sizeflag);
252b5132
RH
16051}
16052
16053static void
26ca5450 16054OP_DIR (int dummy ATTRIBUTE_UNUSED, int sizeflag)
252b5132
RH
16055{
16056 int seg, offset;
16057
c608c12e 16058 if (sizeflag & DFLAG)
252b5132 16059 {
c608c12e
AM
16060 offset = get32 ();
16061 seg = get16 ();
252b5132 16062 }
c608c12e
AM
16063 else
16064 {
16065 offset = get16 ();
16066 seg = get16 ();
16067 }
7d421014 16068 used_prefixes |= (prefixes & PREFIX_DATA);
d708bcba 16069 if (intel_syntax)
3f31e633 16070 sprintf (scratchbuf, "0x%x:0x%x", seg, offset);
d708bcba
AM
16071 else
16072 sprintf (scratchbuf, "$0x%x,$0x%x", seg, offset);
c608c12e 16073 oappend (scratchbuf);
252b5132
RH
16074}
16075
252b5132 16076static void
3f31e633 16077OP_OFF (int bytemode, int sizeflag)
252b5132 16078{
52b15da3 16079 bfd_vma off;
252b5132 16080
3f31e633
JB
16081 if (intel_syntax && (sizeflag & SUFFIX_ALWAYS))
16082 intel_operand_size (bytemode, sizeflag);
252b5132
RH
16083 append_seg ();
16084
cb712a9e 16085 if ((sizeflag & AFLAG) || address_mode == mode_64bit)
252b5132
RH
16086 off = get32 ();
16087 else
16088 off = get16 ();
16089
16090 if (intel_syntax)
16091 {
285ca992 16092 if (!active_seg_prefix)
252b5132 16093 {
d708bcba 16094 oappend (names_seg[ds_reg - es_reg]);
252b5132
RH
16095 oappend (":");
16096 }
16097 }
52b15da3
JH
16098 print_operand_value (scratchbuf, 1, off);
16099 oappend (scratchbuf);
16100}
6439fc28 16101
52b15da3 16102static void
3f31e633 16103OP_OFF64 (int bytemode, int sizeflag)
52b15da3
JH
16104{
16105 bfd_vma off;
16106
539e75ad
L
16107 if (address_mode != mode_64bit
16108 || (prefixes & PREFIX_ADDR))
6439fc28
AM
16109 {
16110 OP_OFF (bytemode, sizeflag);
16111 return;
16112 }
16113
3f31e633
JB
16114 if (intel_syntax && (sizeflag & SUFFIX_ALWAYS))
16115 intel_operand_size (bytemode, sizeflag);
52b15da3
JH
16116 append_seg ();
16117
6608db57 16118 off = get64 ();
52b15da3
JH
16119
16120 if (intel_syntax)
16121 {
285ca992 16122 if (!active_seg_prefix)
52b15da3 16123 {
d708bcba 16124 oappend (names_seg[ds_reg - es_reg]);
52b15da3
JH
16125 oappend (":");
16126 }
16127 }
16128 print_operand_value (scratchbuf, 1, off);
252b5132
RH
16129 oappend (scratchbuf);
16130}
16131
16132static void
26ca5450 16133ptr_reg (int code, int sizeflag)
252b5132 16134{
2da11e11 16135 const char *s;
d708bcba 16136
1d9f512f 16137 *obufp++ = open_char;
20f0a1fc 16138 used_prefixes |= (prefixes & PREFIX_ADDR);
cb712a9e 16139 if (address_mode == mode_64bit)
c1a64871
JH
16140 {
16141 if (!(sizeflag & AFLAG))
db6eb5be 16142 s = names32[code - eAX_reg];
c1a64871 16143 else
db6eb5be 16144 s = names64[code - eAX_reg];
c1a64871 16145 }
52b15da3 16146 else if (sizeflag & AFLAG)
252b5132
RH
16147 s = names32[code - eAX_reg];
16148 else
16149 s = names16[code - eAX_reg];
16150 oappend (s);
1d9f512f
AM
16151 *obufp++ = close_char;
16152 *obufp = 0;
252b5132
RH
16153}
16154
16155static void
26ca5450 16156OP_ESreg (int code, int sizeflag)
252b5132 16157{
9306ca4a 16158 if (intel_syntax)
52fd6d94
JB
16159 {
16160 switch (codep[-1])
16161 {
16162 case 0x6d: /* insw/insl */
16163 intel_operand_size (z_mode, sizeflag);
16164 break;
16165 case 0xa5: /* movsw/movsl/movsq */
16166 case 0xa7: /* cmpsw/cmpsl/cmpsq */
16167 case 0xab: /* stosw/stosl */
16168 case 0xaf: /* scasw/scasl */
16169 intel_operand_size (v_mode, sizeflag);
16170 break;
16171 default:
16172 intel_operand_size (b_mode, sizeflag);
16173 }
16174 }
9ce09ba2 16175 oappend_maybe_intel ("%es:");
252b5132
RH
16176 ptr_reg (code, sizeflag);
16177}
16178
16179static void
26ca5450 16180OP_DSreg (int code, int sizeflag)
252b5132 16181{
9306ca4a 16182 if (intel_syntax)
52fd6d94
JB
16183 {
16184 switch (codep[-1])
16185 {
16186 case 0x6f: /* outsw/outsl */
16187 intel_operand_size (z_mode, sizeflag);
16188 break;
16189 case 0xa5: /* movsw/movsl/movsq */
16190 case 0xa7: /* cmpsw/cmpsl/cmpsq */
16191 case 0xad: /* lodsw/lodsl/lodsq */
16192 intel_operand_size (v_mode, sizeflag);
16193 break;
16194 default:
16195 intel_operand_size (b_mode, sizeflag);
16196 }
16197 }
285ca992
L
16198 /* Set active_seg_prefix to PREFIX_DS if it is unset so that the
16199 default segment register DS is printed. */
16200 if (!active_seg_prefix)
16201 active_seg_prefix = PREFIX_DS;
6608db57 16202 append_seg ();
252b5132
RH
16203 ptr_reg (code, sizeflag);
16204}
16205
252b5132 16206static void
26ca5450 16207OP_C (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 16208{
9b60702d 16209 int add;
161a04f6 16210 if (rex & REX_R)
c4a530c5 16211 {
161a04f6 16212 USED_REX (REX_R);
c4a530c5
JB
16213 add = 8;
16214 }
cb712a9e 16215 else if (address_mode != mode_64bit && (prefixes & PREFIX_LOCK))
c4a530c5 16216 {
f16cd0d5 16217 all_prefixes[last_lock_prefix] = 0;
c4a530c5
JB
16218 used_prefixes |= PREFIX_LOCK;
16219 add = 8;
16220 }
9b60702d
L
16221 else
16222 add = 0;
7967e09e 16223 sprintf (scratchbuf, "%%cr%d", modrm.reg + add);
9ce09ba2 16224 oappend_maybe_intel (scratchbuf);
252b5132
RH
16225}
16226
252b5132 16227static void
26ca5450 16228OP_D (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 16229{
9b60702d 16230 int add;
161a04f6
L
16231 USED_REX (REX_R);
16232 if (rex & REX_R)
52b15da3 16233 add = 8;
9b60702d
L
16234 else
16235 add = 0;
d708bcba 16236 if (intel_syntax)
7967e09e 16237 sprintf (scratchbuf, "db%d", modrm.reg + add);
d708bcba 16238 else
7967e09e 16239 sprintf (scratchbuf, "%%db%d", modrm.reg + add);
252b5132
RH
16240 oappend (scratchbuf);
16241}
16242
252b5132 16243static void
26ca5450 16244OP_T (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 16245{
7967e09e 16246 sprintf (scratchbuf, "%%tr%d", modrm.reg);
9ce09ba2 16247 oappend_maybe_intel (scratchbuf);
252b5132
RH
16248}
16249
16250static void
6f74c397 16251OP_R (int bytemode, int sizeflag)
252b5132 16252{
68f34464
L
16253 /* Skip mod/rm byte. */
16254 MODRM_CHECK;
16255 codep++;
16256 OP_E_register (bytemode, sizeflag);
252b5132
RH
16257}
16258
16259static void
26ca5450 16260OP_MMX (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 16261{
b9733481
L
16262 int reg = modrm.reg;
16263 const char **names;
16264
041bd2e0
JH
16265 used_prefixes |= (prefixes & PREFIX_DATA);
16266 if (prefixes & PREFIX_DATA)
20f0a1fc 16267 {
b9733481 16268 names = names_xmm;
161a04f6
L
16269 USED_REX (REX_R);
16270 if (rex & REX_R)
b9733481 16271 reg += 8;
20f0a1fc 16272 }
041bd2e0 16273 else
b9733481
L
16274 names = names_mm;
16275 oappend (names[reg]);
252b5132
RH
16276}
16277
c608c12e 16278static void
c0f3af97 16279OP_XMM (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
c608c12e 16280{
b9733481
L
16281 int reg = modrm.reg;
16282 const char **names;
16283
161a04f6
L
16284 USED_REX (REX_R);
16285 if (rex & REX_R)
b9733481 16286 reg += 8;
43234a1e
L
16287 if (vex.evex)
16288 {
16289 if (!vex.r)
16290 reg += 16;
16291 }
16292
539f890d
L
16293 if (need_vex
16294 && bytemode != xmm_mode
43234a1e
L
16295 && bytemode != xmmq_mode
16296 && bytemode != evex_half_bcst_xmmq_mode
16297 && bytemode != ymm_mode
539f890d 16298 && bytemode != scalar_mode)
c0f3af97
L
16299 {
16300 switch (vex.length)
16301 {
16302 case 128:
b9733481 16303 names = names_xmm;
c0f3af97
L
16304 break;
16305 case 256:
5fc35d96
IT
16306 if (vex.w
16307 || (bytemode != vex_vsib_q_w_dq_mode
16308 && bytemode != vex_vsib_q_w_d_mode))
6c30d220
L
16309 names = names_ymm;
16310 else
16311 names = names_xmm;
c0f3af97 16312 break;
43234a1e
L
16313 case 512:
16314 names = names_zmm;
16315 break;
c0f3af97
L
16316 default:
16317 abort ();
16318 }
16319 }
43234a1e
L
16320 else if (bytemode == xmmq_mode
16321 || bytemode == evex_half_bcst_xmmq_mode)
16322 {
16323 switch (vex.length)
16324 {
16325 case 128:
16326 case 256:
16327 names = names_xmm;
16328 break;
16329 case 512:
16330 names = names_ymm;
16331 break;
16332 default:
16333 abort ();
16334 }
16335 }
16336 else if (bytemode == ymm_mode)
16337 names = names_ymm;
c0f3af97 16338 else
b9733481
L
16339 names = names_xmm;
16340 oappend (names[reg]);
c608c12e
AM
16341}
16342
252b5132 16343static void
26ca5450 16344OP_EM (int bytemode, int sizeflag)
252b5132 16345{
b9733481
L
16346 int reg;
16347 const char **names;
16348
7967e09e 16349 if (modrm.mod != 3)
252b5132 16350 {
b6169b20
L
16351 if (intel_syntax
16352 && (bytemode == v_mode || bytemode == v_swap_mode))
9306ca4a
JB
16353 {
16354 bytemode = (prefixes & PREFIX_DATA) ? x_mode : q_mode;
16355 used_prefixes |= (prefixes & PREFIX_DATA);
6c067bbb 16356 }
252b5132
RH
16357 OP_E (bytemode, sizeflag);
16358 return;
16359 }
16360
b6169b20
L
16361 if ((sizeflag & SUFFIX_ALWAYS) && bytemode == v_swap_mode)
16362 swap_operand ();
16363
6608db57 16364 /* Skip mod/rm byte. */
4bba6815 16365 MODRM_CHECK;
252b5132 16366 codep++;
041bd2e0 16367 used_prefixes |= (prefixes & PREFIX_DATA);
b9733481 16368 reg = modrm.rm;
041bd2e0 16369 if (prefixes & PREFIX_DATA)
20f0a1fc 16370 {
b9733481 16371 names = names_xmm;
161a04f6
L
16372 USED_REX (REX_B);
16373 if (rex & REX_B)
b9733481 16374 reg += 8;
20f0a1fc 16375 }
041bd2e0 16376 else
b9733481
L
16377 names = names_mm;
16378 oappend (names[reg]);
252b5132
RH
16379}
16380
246c51aa
L
16381/* cvt* are the only instructions in sse2 which have
16382 both SSE and MMX operands and also have 0x66 prefix
16383 in their opcode. 0x66 was originally used to differentiate
16384 between SSE and MMX instruction(operands). So we have to handle the
4d9567e0
MM
16385 cvt* separately using OP_EMC and OP_MXC */
16386static void
16387OP_EMC (int bytemode, int sizeflag)
16388{
7967e09e 16389 if (modrm.mod != 3)
4d9567e0
MM
16390 {
16391 if (intel_syntax && bytemode == v_mode)
16392 {
16393 bytemode = (prefixes & PREFIX_DATA) ? x_mode : q_mode;
16394 used_prefixes |= (prefixes & PREFIX_DATA);
6c067bbb 16395 }
4d9567e0
MM
16396 OP_E (bytemode, sizeflag);
16397 return;
16398 }
246c51aa 16399
4d9567e0
MM
16400 /* Skip mod/rm byte. */
16401 MODRM_CHECK;
16402 codep++;
16403 used_prefixes |= (prefixes & PREFIX_DATA);
b9733481 16404 oappend (names_mm[modrm.rm]);
4d9567e0
MM
16405}
16406
16407static void
16408OP_MXC (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
16409{
16410 used_prefixes |= (prefixes & PREFIX_DATA);
b9733481 16411 oappend (names_mm[modrm.reg]);
4d9567e0
MM
16412}
16413
c608c12e 16414static void
26ca5450 16415OP_EX (int bytemode, int sizeflag)
c608c12e 16416{
b9733481
L
16417 int reg;
16418 const char **names;
d6f574e0
L
16419
16420 /* Skip mod/rm byte. */
16421 MODRM_CHECK;
16422 codep++;
16423
7967e09e 16424 if (modrm.mod != 3)
c608c12e 16425 {
c1e679ec 16426 OP_E_memory (bytemode, sizeflag);
c608c12e
AM
16427 return;
16428 }
d6f574e0 16429
b9733481 16430 reg = modrm.rm;
161a04f6
L
16431 USED_REX (REX_B);
16432 if (rex & REX_B)
b9733481 16433 reg += 8;
43234a1e
L
16434 if (vex.evex)
16435 {
16436 USED_REX (REX_X);
16437 if ((rex & REX_X))
16438 reg += 16;
16439 }
c608c12e 16440
b6169b20 16441 if ((sizeflag & SUFFIX_ALWAYS)
fa99fab2
L
16442 && (bytemode == x_swap_mode
16443 || bytemode == d_swap_mode
7bb15c6f 16444 || bytemode == d_scalar_swap_mode
539f890d
L
16445 || bytemode == q_swap_mode
16446 || bytemode == q_scalar_swap_mode))
b6169b20
L
16447 swap_operand ();
16448
c0f3af97
L
16449 if (need_vex
16450 && bytemode != xmm_mode
6c30d220
L
16451 && bytemode != xmmdw_mode
16452 && bytemode != xmmqd_mode
16453 && bytemode != xmm_mb_mode
16454 && bytemode != xmm_mw_mode
16455 && bytemode != xmm_md_mode
16456 && bytemode != xmm_mq_mode
43234a1e 16457 && bytemode != xmm_mdq_mode
539f890d 16458 && bytemode != xmmq_mode
43234a1e
L
16459 && bytemode != evex_half_bcst_xmmq_mode
16460 && bytemode != ymm_mode
539f890d 16461 && bytemode != d_scalar_mode
7bb15c6f 16462 && bytemode != d_scalar_swap_mode
539f890d 16463 && bytemode != q_scalar_mode
1c480963
L
16464 && bytemode != q_scalar_swap_mode
16465 && bytemode != vex_scalar_w_dq_mode)
c0f3af97
L
16466 {
16467 switch (vex.length)
16468 {
16469 case 128:
b9733481 16470 names = names_xmm;
c0f3af97
L
16471 break;
16472 case 256:
b9733481 16473 names = names_ymm;
c0f3af97 16474 break;
43234a1e
L
16475 case 512:
16476 names = names_zmm;
16477 break;
c0f3af97
L
16478 default:
16479 abort ();
16480 }
16481 }
43234a1e
L
16482 else if (bytemode == xmmq_mode
16483 || bytemode == evex_half_bcst_xmmq_mode)
16484 {
16485 switch (vex.length)
16486 {
16487 case 128:
16488 case 256:
16489 names = names_xmm;
16490 break;
16491 case 512:
16492 names = names_ymm;
16493 break;
16494 default:
16495 abort ();
16496 }
16497 }
16498 else if (bytemode == ymm_mode)
16499 names = names_ymm;
c0f3af97 16500 else
b9733481
L
16501 names = names_xmm;
16502 oappend (names[reg]);
c608c12e
AM
16503}
16504
252b5132 16505static void
26ca5450 16506OP_MS (int bytemode, int sizeflag)
252b5132 16507{
7967e09e 16508 if (modrm.mod == 3)
2da11e11
AM
16509 OP_EM (bytemode, sizeflag);
16510 else
6608db57 16511 BadOp ();
252b5132
RH
16512}
16513
992aaec9 16514static void
26ca5450 16515OP_XS (int bytemode, int sizeflag)
992aaec9 16516{
7967e09e 16517 if (modrm.mod == 3)
992aaec9
AM
16518 OP_EX (bytemode, sizeflag);
16519 else
6608db57 16520 BadOp ();
992aaec9
AM
16521}
16522
cc0ec051
AM
16523static void
16524OP_M (int bytemode, int sizeflag)
16525{
7967e09e 16526 if (modrm.mod == 3)
75413a22
L
16527 /* bad bound,lea,lds,les,lfs,lgs,lss,cmpxchg8b,vmptrst modrm */
16528 BadOp ();
cc0ec051
AM
16529 else
16530 OP_E (bytemode, sizeflag);
16531}
16532
16533static void
16534OP_0f07 (int bytemode, int sizeflag)
16535{
7967e09e 16536 if (modrm.mod != 3 || modrm.rm != 0)
cc0ec051
AM
16537 BadOp ();
16538 else
16539 OP_E (bytemode, sizeflag);
16540}
16541
46e883c5 16542/* NOP is an alias of "xchg %ax,%ax" in 16bit mode, "xchg %eax,%eax" in
246c51aa 16543 32bit mode and "xchg %rax,%rax" in 64bit mode. */
46e883c5 16544
cc0ec051 16545static void
46e883c5 16546NOP_Fixup1 (int bytemode, int sizeflag)
cc0ec051 16547{
8b38ad71
L
16548 if ((prefixes & PREFIX_DATA) != 0
16549 || (rex != 0
16550 && rex != 0x48
16551 && address_mode == mode_64bit))
46e883c5
L
16552 OP_REG (bytemode, sizeflag);
16553 else
16554 strcpy (obuf, "nop");
16555}
16556
16557static void
16558NOP_Fixup2 (int bytemode, int sizeflag)
16559{
8b38ad71
L
16560 if ((prefixes & PREFIX_DATA) != 0
16561 || (rex != 0
16562 && rex != 0x48
16563 && address_mode == mode_64bit))
46e883c5 16564 OP_IMREG (bytemode, sizeflag);
cc0ec051
AM
16565}
16566
84037f8c 16567static const char *const Suffix3DNow[] = {
252b5132
RH
16568/* 00 */ NULL, NULL, NULL, NULL,
16569/* 04 */ NULL, NULL, NULL, NULL,
16570/* 08 */ NULL, NULL, NULL, NULL,
9e525108 16571/* 0C */ "pi2fw", "pi2fd", NULL, NULL,
252b5132
RH
16572/* 10 */ NULL, NULL, NULL, NULL,
16573/* 14 */ NULL, NULL, NULL, NULL,
16574/* 18 */ NULL, NULL, NULL, NULL,
9e525108 16575/* 1C */ "pf2iw", "pf2id", NULL, NULL,
252b5132
RH
16576/* 20 */ NULL, NULL, NULL, NULL,
16577/* 24 */ NULL, NULL, NULL, NULL,
16578/* 28 */ NULL, NULL, NULL, NULL,
16579/* 2C */ NULL, NULL, NULL, NULL,
16580/* 30 */ NULL, NULL, NULL, NULL,
16581/* 34 */ NULL, NULL, NULL, NULL,
16582/* 38 */ NULL, NULL, NULL, NULL,
16583/* 3C */ NULL, NULL, NULL, NULL,
16584/* 40 */ NULL, NULL, NULL, NULL,
16585/* 44 */ NULL, NULL, NULL, NULL,
16586/* 48 */ NULL, NULL, NULL, NULL,
16587/* 4C */ NULL, NULL, NULL, NULL,
16588/* 50 */ NULL, NULL, NULL, NULL,
16589/* 54 */ NULL, NULL, NULL, NULL,
16590/* 58 */ NULL, NULL, NULL, NULL,
16591/* 5C */ NULL, NULL, NULL, NULL,
16592/* 60 */ NULL, NULL, NULL, NULL,
16593/* 64 */ NULL, NULL, NULL, NULL,
16594/* 68 */ NULL, NULL, NULL, NULL,
16595/* 6C */ NULL, NULL, NULL, NULL,
16596/* 70 */ NULL, NULL, NULL, NULL,
16597/* 74 */ NULL, NULL, NULL, NULL,
16598/* 78 */ NULL, NULL, NULL, NULL,
16599/* 7C */ NULL, NULL, NULL, NULL,
16600/* 80 */ NULL, NULL, NULL, NULL,
16601/* 84 */ NULL, NULL, NULL, NULL,
9e525108
AM
16602/* 88 */ NULL, NULL, "pfnacc", NULL,
16603/* 8C */ NULL, NULL, "pfpnacc", NULL,
252b5132
RH
16604/* 90 */ "pfcmpge", NULL, NULL, NULL,
16605/* 94 */ "pfmin", NULL, "pfrcp", "pfrsqrt",
16606/* 98 */ NULL, NULL, "pfsub", NULL,
16607/* 9C */ NULL, NULL, "pfadd", NULL,
16608/* A0 */ "pfcmpgt", NULL, NULL, NULL,
16609/* A4 */ "pfmax", NULL, "pfrcpit1", "pfrsqit1",
16610/* A8 */ NULL, NULL, "pfsubr", NULL,
16611/* AC */ NULL, NULL, "pfacc", NULL,
16612/* B0 */ "pfcmpeq", NULL, NULL, NULL,
9beff690 16613/* B4 */ "pfmul", NULL, "pfrcpit2", "pmulhrw",
9e525108 16614/* B8 */ NULL, NULL, NULL, "pswapd",
252b5132
RH
16615/* BC */ NULL, NULL, NULL, "pavgusb",
16616/* C0 */ NULL, NULL, NULL, NULL,
16617/* C4 */ NULL, NULL, NULL, NULL,
16618/* C8 */ NULL, NULL, NULL, NULL,
16619/* CC */ NULL, NULL, NULL, NULL,
16620/* D0 */ NULL, NULL, NULL, NULL,
16621/* D4 */ NULL, NULL, NULL, NULL,
16622/* D8 */ NULL, NULL, NULL, NULL,
16623/* DC */ NULL, NULL, NULL, NULL,
16624/* E0 */ NULL, NULL, NULL, NULL,
16625/* E4 */ NULL, NULL, NULL, NULL,
16626/* E8 */ NULL, NULL, NULL, NULL,
16627/* EC */ NULL, NULL, NULL, NULL,
16628/* F0 */ NULL, NULL, NULL, NULL,
16629/* F4 */ NULL, NULL, NULL, NULL,
16630/* F8 */ NULL, NULL, NULL, NULL,
16631/* FC */ NULL, NULL, NULL, NULL,
16632};
16633
16634static void
26ca5450 16635OP_3DNowSuffix (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132
RH
16636{
16637 const char *mnemonic;
16638
16639 FETCH_DATA (the_info, codep + 1);
16640 /* AMD 3DNow! instructions are specified by an opcode suffix in the
16641 place where an 8-bit immediate would normally go. ie. the last
16642 byte of the instruction. */
ea397f5b 16643 obufp = mnemonicendp;
c608c12e 16644 mnemonic = Suffix3DNow[*codep++ & 0xff];
252b5132 16645 if (mnemonic)
2da11e11 16646 oappend (mnemonic);
252b5132
RH
16647 else
16648 {
16649 /* Since a variable sized modrm/sib chunk is between the start
16650 of the opcode (0x0f0f) and the opcode suffix, we need to do
16651 all the modrm processing first, and don't know until now that
16652 we have a bad opcode. This necessitates some cleaning up. */
ce518a5f
L
16653 op_out[0][0] = '\0';
16654 op_out[1][0] = '\0';
6608db57 16655 BadOp ();
252b5132 16656 }
ea397f5b 16657 mnemonicendp = obufp;
252b5132 16658}
c608c12e 16659
ea397f5b
L
16660static struct op simd_cmp_op[] =
16661{
16662 { STRING_COMMA_LEN ("eq") },
16663 { STRING_COMMA_LEN ("lt") },
16664 { STRING_COMMA_LEN ("le") },
16665 { STRING_COMMA_LEN ("unord") },
16666 { STRING_COMMA_LEN ("neq") },
16667 { STRING_COMMA_LEN ("nlt") },
16668 { STRING_COMMA_LEN ("nle") },
16669 { STRING_COMMA_LEN ("ord") }
c608c12e
AM
16670};
16671
16672static void
ad19981d 16673CMP_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
c608c12e
AM
16674{
16675 unsigned int cmp_type;
16676
16677 FETCH_DATA (the_info, codep + 1);
16678 cmp_type = *codep++ & 0xff;
c0f3af97 16679 if (cmp_type < ARRAY_SIZE (simd_cmp_op))
c608c12e 16680 {
ad19981d 16681 char suffix [3];
ea397f5b 16682 char *p = mnemonicendp - 2;
ad19981d
L
16683 suffix[0] = p[0];
16684 suffix[1] = p[1];
16685 suffix[2] = '\0';
ea397f5b
L
16686 sprintf (p, "%s%s", simd_cmp_op[cmp_type].name, suffix);
16687 mnemonicendp += simd_cmp_op[cmp_type].len;
c608c12e
AM
16688 }
16689 else
16690 {
ad19981d
L
16691 /* We have a reserved extension byte. Output it directly. */
16692 scratchbuf[0] = '$';
16693 print_operand_value (scratchbuf + 1, 1, cmp_type);
9ce09ba2 16694 oappend_maybe_intel (scratchbuf);
ad19981d 16695 scratchbuf[0] = '\0';
c608c12e
AM
16696 }
16697}
16698
9916071f
AP
16699static void
16700OP_Mwaitx (int bytemode ATTRIBUTE_UNUSED,
16701 int sizeflag ATTRIBUTE_UNUSED)
16702{
16703 /* mwaitx %eax,%ecx,%ebx */
16704 if (!intel_syntax)
16705 {
16706 const char **names = (address_mode == mode_64bit
16707 ? names64 : names32);
16708 strcpy (op_out[0], names[0]);
16709 strcpy (op_out[1], names[1]);
16710 strcpy (op_out[2], names[3]);
16711 two_source_ops = 1;
16712 }
16713 /* Skip mod/rm byte. */
16714 MODRM_CHECK;
16715 codep++;
16716}
16717
ca164297 16718static void
b844680a
L
16719OP_Mwait (int bytemode ATTRIBUTE_UNUSED,
16720 int sizeflag ATTRIBUTE_UNUSED)
16721{
16722 /* mwait %eax,%ecx */
16723 if (!intel_syntax)
16724 {
16725 const char **names = (address_mode == mode_64bit
16726 ? names64 : names32);
16727 strcpy (op_out[0], names[0]);
16728 strcpy (op_out[1], names[1]);
16729 two_source_ops = 1;
16730 }
16731 /* Skip mod/rm byte. */
16732 MODRM_CHECK;
16733 codep++;
16734}
16735
16736static void
16737OP_Monitor (int bytemode ATTRIBUTE_UNUSED,
16738 int sizeflag ATTRIBUTE_UNUSED)
ca164297 16739{
b844680a
L
16740 /* monitor %eax,%ecx,%edx" */
16741 if (!intel_syntax)
ca164297 16742 {
b844680a 16743 const char **op1_names;
cb712a9e
L
16744 const char **names = (address_mode == mode_64bit
16745 ? names64 : names32);
1d9f512f 16746
b844680a
L
16747 if (!(prefixes & PREFIX_ADDR))
16748 op1_names = (address_mode == mode_16bit
16749 ? names16 : names);
ca164297
L
16750 else
16751 {
b844680a 16752 /* Remove "addr16/addr32". */
f16cd0d5 16753 all_prefixes[last_addr_prefix] = 0;
b844680a
L
16754 op1_names = (address_mode != mode_32bit
16755 ? names32 : names16);
16756 used_prefixes |= PREFIX_ADDR;
ca164297 16757 }
b844680a
L
16758 strcpy (op_out[0], op1_names[0]);
16759 strcpy (op_out[1], names[1]);
16760 strcpy (op_out[2], names[2]);
16761 two_source_ops = 1;
ca164297 16762 }
b844680a
L
16763 /* Skip mod/rm byte. */
16764 MODRM_CHECK;
16765 codep++;
30123838
JB
16766}
16767
6608db57
KH
16768static void
16769BadOp (void)
2da11e11 16770{
6608db57
KH
16771 /* Throw away prefixes and 1st. opcode byte. */
16772 codep = insn_codep + 1;
2da11e11
AM
16773 oappend ("(bad)");
16774}
4cc91dba 16775
35c52694
L
16776static void
16777REP_Fixup (int bytemode, int sizeflag)
16778{
16779 /* The 0xf3 prefix should be displayed as "rep" for ins, outs, movs,
16780 lods and stos. */
35c52694 16781 if (prefixes & PREFIX_REPZ)
f16cd0d5 16782 all_prefixes[last_repz_prefix] = REP_PREFIX;
35c52694
L
16783
16784 switch (bytemode)
16785 {
16786 case al_reg:
16787 case eAX_reg:
16788 case indir_dx_reg:
16789 OP_IMREG (bytemode, sizeflag);
16790 break;
16791 case eDI_reg:
16792 OP_ESreg (bytemode, sizeflag);
16793 break;
16794 case eSI_reg:
16795 OP_DSreg (bytemode, sizeflag);
16796 break;
16797 default:
16798 abort ();
16799 break;
16800 }
16801}
f5804c90 16802
7e8b059b
L
16803/* For BND-prefixed instructions 0xF2 prefix should be displayed as
16804 "bnd". */
16805
16806static void
16807BND_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
16808{
16809 if (prefixes & PREFIX_REPNZ)
16810 all_prefixes[last_repnz_prefix] = BND_PREFIX;
16811}
16812
04ef582a
L
16813/* For NOTRACK-prefixed instructions, 0x3E prefix should be displayed as
16814 "notrack". */
16815
16816static void
16817NOTRACK_Fixup (int bytemode ATTRIBUTE_UNUSED,
16818 int sizeflag ATTRIBUTE_UNUSED)
16819{
9fef80d6 16820 if (active_seg_prefix == PREFIX_DS
04ef582a
L
16821 && (address_mode != mode_64bit || last_data_prefix < 0))
16822 {
9fef80d6
L
16823 /* NOTRACK prefix is only valid on indirect branch instructions
16824 and it must be the last prefix before REX prefix and opcode.
16825 NB: DATA prefix is unsupported for Intel64. */
04ef582a
L
16826 if (last_active_prefix >= 0)
16827 {
16828 int notrack_prefix = last_active_prefix;
16829 if (last_rex_prefix == last_active_prefix)
16830 notrack_prefix--;
16831 if (all_prefixes[notrack_prefix] != NOTRACK_PREFIX_OPCODE)
16832 return;
16833 }
16834 active_seg_prefix = 0;
16835 all_prefixes[last_seg_prefix] = NOTRACK_PREFIX;
16836 }
16837}
16838
42164a71
L
16839/* Similar to OP_E. But the 0xf2/0xf3 prefixes should be displayed as
16840 "xacquire"/"xrelease" for memory operand if there is a LOCK prefix.
16841 */
16842
16843static void
16844HLE_Fixup1 (int bytemode, int sizeflag)
16845{
16846 if (modrm.mod != 3
16847 && (prefixes & PREFIX_LOCK) != 0)
16848 {
16849 if (prefixes & PREFIX_REPZ)
16850 all_prefixes[last_repz_prefix] = XRELEASE_PREFIX;
16851 if (prefixes & PREFIX_REPNZ)
16852 all_prefixes[last_repnz_prefix] = XACQUIRE_PREFIX;
16853 }
16854
16855 OP_E (bytemode, sizeflag);
16856}
16857
16858/* Similar to OP_E. But the 0xf2/0xf3 prefixes should be displayed as
16859 "xacquire"/"xrelease" for memory operand. No check for LOCK prefix.
16860 */
16861
16862static void
16863HLE_Fixup2 (int bytemode, int sizeflag)
16864{
16865 if (modrm.mod != 3)
16866 {
16867 if (prefixes & PREFIX_REPZ)
16868 all_prefixes[last_repz_prefix] = XRELEASE_PREFIX;
16869 if (prefixes & PREFIX_REPNZ)
16870 all_prefixes[last_repnz_prefix] = XACQUIRE_PREFIX;
16871 }
16872
16873 OP_E (bytemode, sizeflag);
16874}
16875
16876/* Similar to OP_E. But the 0xf3 prefixes should be displayed as
16877 "xrelease" for memory operand. No check for LOCK prefix. */
16878
16879static void
16880HLE_Fixup3 (int bytemode, int sizeflag)
16881{
16882 if (modrm.mod != 3
16883 && last_repz_prefix > last_repnz_prefix
16884 && (prefixes & PREFIX_REPZ) != 0)
16885 all_prefixes[last_repz_prefix] = XRELEASE_PREFIX;
16886
16887 OP_E (bytemode, sizeflag);
16888}
16889
f5804c90
L
16890static void
16891CMPXCHG8B_Fixup (int bytemode, int sizeflag)
16892{
161a04f6
L
16893 USED_REX (REX_W);
16894 if (rex & REX_W)
f5804c90
L
16895 {
16896 /* Change cmpxchg8b to cmpxchg16b. */
ea397f5b
L
16897 char *p = mnemonicendp - 2;
16898 mnemonicendp = stpcpy (p, "16b");
fb9c77c7 16899 bytemode = o_mode;
f5804c90 16900 }
42164a71
L
16901 else if ((prefixes & PREFIX_LOCK) != 0)
16902 {
16903 if (prefixes & PREFIX_REPZ)
16904 all_prefixes[last_repz_prefix] = XRELEASE_PREFIX;
16905 if (prefixes & PREFIX_REPNZ)
16906 all_prefixes[last_repnz_prefix] = XACQUIRE_PREFIX;
16907 }
16908
f5804c90
L
16909 OP_M (bytemode, sizeflag);
16910}
42903f7f
L
16911
16912static void
16913XMM_Fixup (int reg, int sizeflag ATTRIBUTE_UNUSED)
16914{
b9733481
L
16915 const char **names;
16916
c0f3af97
L
16917 if (need_vex)
16918 {
16919 switch (vex.length)
16920 {
16921 case 128:
b9733481 16922 names = names_xmm;
c0f3af97
L
16923 break;
16924 case 256:
b9733481 16925 names = names_ymm;
c0f3af97
L
16926 break;
16927 default:
16928 abort ();
16929 }
16930 }
16931 else
b9733481
L
16932 names = names_xmm;
16933 oappend (names[reg]);
42903f7f 16934}
381d071f
L
16935
16936static void
16937CRC32_Fixup (int bytemode, int sizeflag)
16938{
16939 /* Add proper suffix to "crc32". */
ea397f5b 16940 char *p = mnemonicendp;
381d071f
L
16941
16942 switch (bytemode)
16943 {
16944 case b_mode:
20592a94 16945 if (intel_syntax)
ea397f5b 16946 goto skip;
20592a94 16947
381d071f
L
16948 *p++ = 'b';
16949 break;
16950 case v_mode:
20592a94 16951 if (intel_syntax)
ea397f5b 16952 goto skip;
20592a94 16953
381d071f
L
16954 USED_REX (REX_W);
16955 if (rex & REX_W)
16956 *p++ = 'q';
7bb15c6f 16957 else
f16cd0d5
L
16958 {
16959 if (sizeflag & DFLAG)
16960 *p++ = 'l';
16961 else
16962 *p++ = 'w';
16963 used_prefixes |= (prefixes & PREFIX_DATA);
16964 }
381d071f
L
16965 break;
16966 default:
16967 oappend (INTERNAL_DISASSEMBLER_ERROR);
16968 break;
16969 }
ea397f5b 16970 mnemonicendp = p;
381d071f
L
16971 *p = '\0';
16972
ea397f5b 16973skip:
381d071f
L
16974 if (modrm.mod == 3)
16975 {
16976 int add;
16977
16978 /* Skip mod/rm byte. */
16979 MODRM_CHECK;
16980 codep++;
16981
16982 USED_REX (REX_B);
16983 add = (rex & REX_B) ? 8 : 0;
16984 if (bytemode == b_mode)
16985 {
16986 USED_REX (0);
16987 if (rex)
16988 oappend (names8rex[modrm.rm + add]);
16989 else
16990 oappend (names8[modrm.rm + add]);
16991 }
16992 else
16993 {
16994 USED_REX (REX_W);
16995 if (rex & REX_W)
16996 oappend (names64[modrm.rm + add]);
16997 else if ((prefixes & PREFIX_DATA))
16998 oappend (names16[modrm.rm + add]);
16999 else
17000 oappend (names32[modrm.rm + add]);
17001 }
17002 }
17003 else
9344ff29 17004 OP_E (bytemode, sizeflag);
381d071f 17005}
85f10a01 17006
eacc9c89
L
17007static void
17008FXSAVE_Fixup (int bytemode, int sizeflag)
17009{
17010 /* Add proper suffix to "fxsave" and "fxrstor". */
17011 USED_REX (REX_W);
17012 if (rex & REX_W)
17013 {
17014 char *p = mnemonicendp;
17015 *p++ = '6';
17016 *p++ = '4';
17017 *p = '\0';
17018 mnemonicendp = p;
17019 }
17020 OP_M (bytemode, sizeflag);
17021}
17022
15c7c1d8
JB
17023static void
17024PCMPESTR_Fixup (int bytemode, int sizeflag)
17025{
17026 /* Add proper suffix to "{,v}pcmpestr{i,m}". */
17027 if (!intel_syntax)
17028 {
17029 char *p = mnemonicendp;
17030
17031 USED_REX (REX_W);
17032 if (rex & REX_W)
17033 *p++ = 'q';
17034 else if (sizeflag & SUFFIX_ALWAYS)
17035 *p++ = 'l';
17036
17037 *p = '\0';
17038 mnemonicendp = p;
17039 }
17040
17041 OP_EX (bytemode, sizeflag);
17042}
17043
c0f3af97
L
17044/* Display the destination register operand for instructions with
17045 VEX. */
17046
17047static void
17048OP_VEX (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
17049{
539f890d 17050 int reg;
b9733481
L
17051 const char **names;
17052
c0f3af97
L
17053 if (!need_vex)
17054 abort ();
17055
17056 if (!need_vex_reg)
17057 return;
17058
539f890d 17059 reg = vex.register_specifier;
43234a1e
L
17060 if (vex.evex)
17061 {
17062 if (!vex.v)
17063 reg += 16;
17064 }
17065
539f890d
L
17066 if (bytemode == vex_scalar_mode)
17067 {
17068 oappend (names_xmm[reg]);
17069 return;
17070 }
17071
c0f3af97
L
17072 switch (vex.length)
17073 {
17074 case 128:
17075 switch (bytemode)
17076 {
17077 case vex_mode:
17078 case vex128_mode:
6c30d220 17079 case vex_vsib_q_w_dq_mode:
5fc35d96 17080 case vex_vsib_q_w_d_mode:
cb21baef
L
17081 names = names_xmm;
17082 break;
17083 case dq_mode:
17084 if (vex.w)
17085 names = names64;
17086 else
17087 names = names32;
c0f3af97 17088 break;
1ba585e8 17089 case mask_bd_mode:
43234a1e 17090 case mask_mode:
9889cbb1
L
17091 if (reg > 0x7)
17092 {
17093 oappend ("(bad)");
17094 return;
17095 }
43234a1e
L
17096 names = names_mask;
17097 break;
c0f3af97
L
17098 default:
17099 abort ();
17100 return;
17101 }
c0f3af97
L
17102 break;
17103 case 256:
17104 switch (bytemode)
17105 {
17106 case vex_mode:
17107 case vex256_mode:
6c30d220
L
17108 names = names_ymm;
17109 break;
17110 case vex_vsib_q_w_dq_mode:
5fc35d96 17111 case vex_vsib_q_w_d_mode:
6c30d220 17112 names = vex.w ? names_ymm : names_xmm;
c0f3af97 17113 break;
1ba585e8 17114 case mask_bd_mode:
43234a1e 17115 case mask_mode:
9889cbb1
L
17116 if (reg > 0x7)
17117 {
17118 oappend ("(bad)");
17119 return;
17120 }
43234a1e
L
17121 names = names_mask;
17122 break;
c0f3af97 17123 default:
a37a2806
NC
17124 /* See PR binutils/20893 for a reproducer. */
17125 oappend ("(bad)");
c0f3af97
L
17126 return;
17127 }
c0f3af97 17128 break;
43234a1e
L
17129 case 512:
17130 names = names_zmm;
17131 break;
c0f3af97
L
17132 default:
17133 abort ();
17134 break;
17135 }
539f890d 17136 oappend (names[reg]);
c0f3af97
L
17137}
17138
922d8de8
DR
17139/* Get the VEX immediate byte without moving codep. */
17140
17141static unsigned char
ccc5981b 17142get_vex_imm8 (int sizeflag, int opnum)
922d8de8
DR
17143{
17144 int bytes_before_imm = 0;
17145
922d8de8
DR
17146 if (modrm.mod != 3)
17147 {
17148 /* There are SIB/displacement bytes. */
17149 if ((sizeflag & AFLAG) || address_mode == mode_64bit)
6c067bbb 17150 {
922d8de8 17151 /* 32/64 bit address mode */
6c067bbb 17152 int base = modrm.rm;
922d8de8
DR
17153
17154 /* Check SIB byte. */
6c067bbb
RM
17155 if (base == 4)
17156 {
17157 FETCH_DATA (the_info, codep + 1);
17158 base = *codep & 7;
17159 /* When decoding the third source, don't increase
17160 bytes_before_imm as this has already been incremented
17161 by one in OP_E_memory while decoding the second
17162 source operand. */
17163 if (opnum == 0)
17164 bytes_before_imm++;
17165 }
17166
17167 /* Don't increase bytes_before_imm when decoding the third source,
17168 it has already been incremented by OP_E_memory while decoding
17169 the second source operand. */
17170 if (opnum == 0)
17171 {
17172 switch (modrm.mod)
17173 {
17174 case 0:
17175 /* When modrm.rm == 5 or modrm.rm == 4 and base in
17176 SIB == 5, there is a 4 byte displacement. */
17177 if (base != 5)
17178 /* No displacement. */
17179 break;
1a0670f3 17180 /* Fall through. */
6c067bbb
RM
17181 case 2:
17182 /* 4 byte displacement. */
17183 bytes_before_imm += 4;
17184 break;
17185 case 1:
17186 /* 1 byte displacement. */
17187 bytes_before_imm++;
17188 break;
17189 }
17190 }
17191 }
922d8de8 17192 else
02e647f9
SP
17193 {
17194 /* 16 bit address mode */
6c067bbb
RM
17195 /* Don't increase bytes_before_imm when decoding the third source,
17196 it has already been incremented by OP_E_memory while decoding
17197 the second source operand. */
17198 if (opnum == 0)
17199 {
02e647f9
SP
17200 switch (modrm.mod)
17201 {
17202 case 0:
17203 /* When modrm.rm == 6, there is a 2 byte displacement. */
17204 if (modrm.rm != 6)
17205 /* No displacement. */
17206 break;
1a0670f3 17207 /* Fall through. */
02e647f9
SP
17208 case 2:
17209 /* 2 byte displacement. */
17210 bytes_before_imm += 2;
17211 break;
17212 case 1:
17213 /* 1 byte displacement: when decoding the third source,
17214 don't increase bytes_before_imm as this has already
17215 been incremented by one in OP_E_memory while decoding
17216 the second source operand. */
17217 if (opnum == 0)
17218 bytes_before_imm++;
ccc5981b 17219
02e647f9
SP
17220 break;
17221 }
922d8de8
DR
17222 }
17223 }
17224 }
17225
17226 FETCH_DATA (the_info, codep + bytes_before_imm + 1);
17227 return codep [bytes_before_imm];
17228}
17229
17230static void
17231OP_EX_VexReg (int bytemode, int sizeflag, int reg)
17232{
b9733481
L
17233 const char **names;
17234
922d8de8
DR
17235 if (reg == -1 && modrm.mod != 3)
17236 {
17237 OP_E_memory (bytemode, sizeflag);
17238 return;
17239 }
17240 else
17241 {
17242 if (reg == -1)
17243 {
17244 reg = modrm.rm;
17245 USED_REX (REX_B);
17246 if (rex & REX_B)
17247 reg += 8;
17248 }
17249 else if (reg > 7 && address_mode != mode_64bit)
17250 BadOp ();
17251 }
17252
17253 switch (vex.length)
17254 {
17255 case 128:
b9733481 17256 names = names_xmm;
922d8de8
DR
17257 break;
17258 case 256:
b9733481 17259 names = names_ymm;
922d8de8
DR
17260 break;
17261 default:
17262 abort ();
17263 }
b9733481 17264 oappend (names[reg]);
922d8de8
DR
17265}
17266
a683cc34
SP
17267static void
17268OP_EX_VexImmW (int bytemode, int sizeflag)
17269{
17270 int reg = -1;
17271 static unsigned char vex_imm8;
17272
17273 if (vex_w_done == 0)
17274 {
17275 vex_w_done = 1;
17276
17277 /* Skip mod/rm byte. */
17278 MODRM_CHECK;
17279 codep++;
17280
17281 vex_imm8 = get_vex_imm8 (sizeflag, 0);
17282
17283 if (vex.w)
17284 reg = vex_imm8 >> 4;
17285
17286 OP_EX_VexReg (bytemode, sizeflag, reg);
17287 }
17288 else if (vex_w_done == 1)
17289 {
17290 vex_w_done = 2;
17291
17292 if (!vex.w)
17293 reg = vex_imm8 >> 4;
17294
17295 OP_EX_VexReg (bytemode, sizeflag, reg);
17296 }
17297 else
17298 {
17299 /* Output the imm8 directly. */
17300 scratchbuf[0] = '$';
17301 print_operand_value (scratchbuf + 1, 1, vex_imm8 & 0xf);
9ce09ba2 17302 oappend_maybe_intel (scratchbuf);
a683cc34
SP
17303 scratchbuf[0] = '\0';
17304 codep++;
17305 }
17306}
17307
5dd85c99
SP
17308static void
17309OP_Vex_2src (int bytemode, int sizeflag)
17310{
17311 if (modrm.mod == 3)
17312 {
b9733481 17313 int reg = modrm.rm;
5dd85c99 17314 USED_REX (REX_B);
b9733481
L
17315 if (rex & REX_B)
17316 reg += 8;
17317 oappend (names_xmm[reg]);
5dd85c99
SP
17318 }
17319 else
17320 {
17321 if (intel_syntax
17322 && (bytemode == v_mode || bytemode == v_swap_mode))
17323 {
17324 bytemode = (prefixes & PREFIX_DATA) ? x_mode : q_mode;
17325 used_prefixes |= (prefixes & PREFIX_DATA);
17326 }
17327 OP_E (bytemode, sizeflag);
17328 }
17329}
17330
17331static void
17332OP_Vex_2src_1 (int bytemode, int sizeflag)
17333{
17334 if (modrm.mod == 3)
17335 {
17336 /* Skip mod/rm byte. */
17337 MODRM_CHECK;
17338 codep++;
17339 }
17340
17341 if (vex.w)
b9733481 17342 oappend (names_xmm[vex.register_specifier]);
5dd85c99
SP
17343 else
17344 OP_Vex_2src (bytemode, sizeflag);
17345}
17346
17347static void
17348OP_Vex_2src_2 (int bytemode, int sizeflag)
17349{
17350 if (vex.w)
17351 OP_Vex_2src (bytemode, sizeflag);
17352 else
b9733481 17353 oappend (names_xmm[vex.register_specifier]);
5dd85c99
SP
17354}
17355
922d8de8
DR
17356static void
17357OP_EX_VexW (int bytemode, int sizeflag)
17358{
17359 int reg = -1;
17360
17361 if (!vex_w_done)
17362 {
17363 vex_w_done = 1;
41effecb
SP
17364
17365 /* Skip mod/rm byte. */
17366 MODRM_CHECK;
17367 codep++;
17368
922d8de8 17369 if (vex.w)
ccc5981b 17370 reg = get_vex_imm8 (sizeflag, 0) >> 4;
922d8de8
DR
17371 }
17372 else
17373 {
17374 if (!vex.w)
ccc5981b 17375 reg = get_vex_imm8 (sizeflag, 1) >> 4;
922d8de8
DR
17376 }
17377
17378 OP_EX_VexReg (bytemode, sizeflag, reg);
17379}
17380
922d8de8
DR
17381static void
17382VEXI4_Fixup (int bytemode ATTRIBUTE_UNUSED,
17383 int sizeflag ATTRIBUTE_UNUSED)
17384{
17385 /* Skip the immediate byte and check for invalid bits. */
17386 FETCH_DATA (the_info, codep + 1);
17387 if (*codep++ & 0xf)
17388 BadOp ();
17389}
17390
c0f3af97
L
17391static void
17392OP_REG_VexI4 (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
17393{
17394 int reg;
b9733481
L
17395 const char **names;
17396
c0f3af97
L
17397 FETCH_DATA (the_info, codep + 1);
17398 reg = *codep++;
17399
17400 if (bytemode != x_mode)
17401 abort ();
17402
17403 if (reg & 0xf)
17404 BadOp ();
17405
17406 reg >>= 4;
dae39acc
L
17407 if (reg > 7 && address_mode != mode_64bit)
17408 BadOp ();
17409
c0f3af97
L
17410 switch (vex.length)
17411 {
17412 case 128:
b9733481 17413 names = names_xmm;
c0f3af97
L
17414 break;
17415 case 256:
b9733481 17416 names = names_ymm;
c0f3af97
L
17417 break;
17418 default:
17419 abort ();
17420 }
b9733481 17421 oappend (names[reg]);
c0f3af97
L
17422}
17423
922d8de8
DR
17424static void
17425OP_XMM_VexW (int bytemode, int sizeflag)
17426{
17427 /* Turn off the REX.W bit since it is used for swapping operands
17428 now. */
17429 rex &= ~REX_W;
17430 OP_XMM (bytemode, sizeflag);
17431}
17432
c0f3af97
L
17433static void
17434OP_EX_Vex (int bytemode, int sizeflag)
17435{
17436 if (modrm.mod != 3)
17437 {
17438 if (vex.register_specifier != 0)
17439 BadOp ();
17440 need_vex_reg = 0;
17441 }
17442 OP_EX (bytemode, sizeflag);
17443}
17444
17445static void
17446OP_XMM_Vex (int bytemode, int sizeflag)
17447{
17448 if (modrm.mod != 3)
17449 {
17450 if (vex.register_specifier != 0)
17451 BadOp ();
17452 need_vex_reg = 0;
17453 }
17454 OP_XMM (bytemode, sizeflag);
17455}
17456
17457static void
17458VZERO_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
17459{
17460 switch (vex.length)
17461 {
17462 case 128:
ea397f5b 17463 mnemonicendp = stpcpy (obuf, "vzeroupper");
c0f3af97
L
17464 break;
17465 case 256:
ea397f5b 17466 mnemonicendp = stpcpy (obuf, "vzeroall");
c0f3af97
L
17467 break;
17468 default:
17469 abort ();
17470 }
17471}
17472
ea397f5b
L
17473static struct op vex_cmp_op[] =
17474{
17475 { STRING_COMMA_LEN ("eq") },
17476 { STRING_COMMA_LEN ("lt") },
17477 { STRING_COMMA_LEN ("le") },
17478 { STRING_COMMA_LEN ("unord") },
17479 { STRING_COMMA_LEN ("neq") },
17480 { STRING_COMMA_LEN ("nlt") },
17481 { STRING_COMMA_LEN ("nle") },
17482 { STRING_COMMA_LEN ("ord") },
17483 { STRING_COMMA_LEN ("eq_uq") },
17484 { STRING_COMMA_LEN ("nge") },
17485 { STRING_COMMA_LEN ("ngt") },
17486 { STRING_COMMA_LEN ("false") },
17487 { STRING_COMMA_LEN ("neq_oq") },
17488 { STRING_COMMA_LEN ("ge") },
17489 { STRING_COMMA_LEN ("gt") },
17490 { STRING_COMMA_LEN ("true") },
17491 { STRING_COMMA_LEN ("eq_os") },
17492 { STRING_COMMA_LEN ("lt_oq") },
17493 { STRING_COMMA_LEN ("le_oq") },
17494 { STRING_COMMA_LEN ("unord_s") },
17495 { STRING_COMMA_LEN ("neq_us") },
17496 { STRING_COMMA_LEN ("nlt_uq") },
17497 { STRING_COMMA_LEN ("nle_uq") },
17498 { STRING_COMMA_LEN ("ord_s") },
17499 { STRING_COMMA_LEN ("eq_us") },
17500 { STRING_COMMA_LEN ("nge_uq") },
17501 { STRING_COMMA_LEN ("ngt_uq") },
17502 { STRING_COMMA_LEN ("false_os") },
17503 { STRING_COMMA_LEN ("neq_os") },
17504 { STRING_COMMA_LEN ("ge_oq") },
17505 { STRING_COMMA_LEN ("gt_oq") },
17506 { STRING_COMMA_LEN ("true_us") },
c0f3af97
L
17507};
17508
17509static void
17510VCMP_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
17511{
17512 unsigned int cmp_type;
17513
17514 FETCH_DATA (the_info, codep + 1);
17515 cmp_type = *codep++ & 0xff;
17516 if (cmp_type < ARRAY_SIZE (vex_cmp_op))
17517 {
17518 char suffix [3];
ea397f5b 17519 char *p = mnemonicendp - 2;
c0f3af97
L
17520 suffix[0] = p[0];
17521 suffix[1] = p[1];
17522 suffix[2] = '\0';
ea397f5b
L
17523 sprintf (p, "%s%s", vex_cmp_op[cmp_type].name, suffix);
17524 mnemonicendp += vex_cmp_op[cmp_type].len;
c0f3af97
L
17525 }
17526 else
17527 {
17528 /* We have a reserved extension byte. Output it directly. */
17529 scratchbuf[0] = '$';
17530 print_operand_value (scratchbuf + 1, 1, cmp_type);
9ce09ba2 17531 oappend_maybe_intel (scratchbuf);
c0f3af97
L
17532 scratchbuf[0] = '\0';
17533 }
17534}
17535
43234a1e
L
17536static void
17537VPCMP_Fixup (int bytemode ATTRIBUTE_UNUSED,
17538 int sizeflag ATTRIBUTE_UNUSED)
17539{
17540 unsigned int cmp_type;
17541
17542 if (!vex.evex)
17543 abort ();
17544
17545 FETCH_DATA (the_info, codep + 1);
17546 cmp_type = *codep++ & 0xff;
17547 /* There are aliases for immediates 0, 1, 2, 4, 5, 6.
17548 If it's the case, print suffix, otherwise - print the immediate. */
17549 if (cmp_type < ARRAY_SIZE (simd_cmp_op)
17550 && cmp_type != 3
17551 && cmp_type != 7)
17552 {
17553 char suffix [3];
17554 char *p = mnemonicendp - 2;
17555
17556 /* vpcmp* can have both one- and two-lettered suffix. */
17557 if (p[0] == 'p')
17558 {
17559 p++;
17560 suffix[0] = p[0];
17561 suffix[1] = '\0';
17562 }
17563 else
17564 {
17565 suffix[0] = p[0];
17566 suffix[1] = p[1];
17567 suffix[2] = '\0';
17568 }
17569
17570 sprintf (p, "%s%s", simd_cmp_op[cmp_type].name, suffix);
17571 mnemonicendp += simd_cmp_op[cmp_type].len;
17572 }
17573 else
17574 {
17575 /* We have a reserved extension byte. Output it directly. */
17576 scratchbuf[0] = '$';
17577 print_operand_value (scratchbuf + 1, 1, cmp_type);
9ce09ba2 17578 oappend_maybe_intel (scratchbuf);
43234a1e
L
17579 scratchbuf[0] = '\0';
17580 }
17581}
17582
ea397f5b
L
17583static const struct op pclmul_op[] =
17584{
17585 { STRING_COMMA_LEN ("lql") },
17586 { STRING_COMMA_LEN ("hql") },
17587 { STRING_COMMA_LEN ("lqh") },
17588 { STRING_COMMA_LEN ("hqh") }
c0f3af97
L
17589};
17590
17591static void
17592PCLMUL_Fixup (int bytemode ATTRIBUTE_UNUSED,
17593 int sizeflag ATTRIBUTE_UNUSED)
17594{
17595 unsigned int pclmul_type;
17596
17597 FETCH_DATA (the_info, codep + 1);
17598 pclmul_type = *codep++ & 0xff;
17599 switch (pclmul_type)
17600 {
17601 case 0x10:
17602 pclmul_type = 2;
17603 break;
17604 case 0x11:
17605 pclmul_type = 3;
17606 break;
17607 default:
17608 break;
7bb15c6f 17609 }
c0f3af97
L
17610 if (pclmul_type < ARRAY_SIZE (pclmul_op))
17611 {
17612 char suffix [4];
ea397f5b 17613 char *p = mnemonicendp - 3;
c0f3af97
L
17614 suffix[0] = p[0];
17615 suffix[1] = p[1];
17616 suffix[2] = p[2];
17617 suffix[3] = '\0';
ea397f5b
L
17618 sprintf (p, "%s%s", pclmul_op[pclmul_type].name, suffix);
17619 mnemonicendp += pclmul_op[pclmul_type].len;
c0f3af97
L
17620 }
17621 else
17622 {
17623 /* We have a reserved extension byte. Output it directly. */
17624 scratchbuf[0] = '$';
17625 print_operand_value (scratchbuf + 1, 1, pclmul_type);
9ce09ba2 17626 oappend_maybe_intel (scratchbuf);
c0f3af97
L
17627 scratchbuf[0] = '\0';
17628 }
17629}
17630
f1f8f695
L
17631static void
17632MOVBE_Fixup (int bytemode, int sizeflag)
17633{
17634 /* Add proper suffix to "movbe". */
ea397f5b 17635 char *p = mnemonicendp;
f1f8f695
L
17636
17637 switch (bytemode)
17638 {
17639 case v_mode:
17640 if (intel_syntax)
ea397f5b 17641 goto skip;
f1f8f695
L
17642
17643 USED_REX (REX_W);
17644 if (sizeflag & SUFFIX_ALWAYS)
17645 {
17646 if (rex & REX_W)
17647 *p++ = 'q';
f1f8f695 17648 else
f16cd0d5
L
17649 {
17650 if (sizeflag & DFLAG)
17651 *p++ = 'l';
17652 else
17653 *p++ = 'w';
17654 used_prefixes |= (prefixes & PREFIX_DATA);
17655 }
f1f8f695 17656 }
f1f8f695
L
17657 break;
17658 default:
17659 oappend (INTERNAL_DISASSEMBLER_ERROR);
17660 break;
17661 }
ea397f5b 17662 mnemonicendp = p;
f1f8f695
L
17663 *p = '\0';
17664
ea397f5b 17665skip:
f1f8f695
L
17666 OP_M (bytemode, sizeflag);
17667}
f88c9eb0
SP
17668
17669static void
17670OP_LWPCB_E (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
17671{
17672 int reg;
17673 const char **names;
17674
17675 /* Skip mod/rm byte. */
17676 MODRM_CHECK;
17677 codep++;
17678
17679 if (vex.w)
17680 names = names64;
f88c9eb0 17681 else
ce7d077e 17682 names = names32;
f88c9eb0
SP
17683
17684 reg = modrm.rm;
17685 USED_REX (REX_B);
17686 if (rex & REX_B)
17687 reg += 8;
17688
17689 oappend (names[reg]);
17690}
17691
17692static void
17693OP_LWP_E (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
17694{
17695 const char **names;
17696
17697 if (vex.w)
17698 names = names64;
f88c9eb0 17699 else
ce7d077e 17700 names = names32;
f88c9eb0
SP
17701
17702 oappend (names[vex.register_specifier]);
17703}
43234a1e
L
17704
17705static void
17706OP_Mask (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
17707{
17708 if (!vex.evex
1ba585e8 17709 || (bytemode != mask_mode && bytemode != mask_bd_mode))
43234a1e
L
17710 abort ();
17711
17712 USED_REX (REX_R);
17713 if ((rex & REX_R) != 0 || !vex.r)
17714 {
17715 BadOp ();
17716 return;
17717 }
17718
17719 oappend (names_mask [modrm.reg]);
17720}
17721
17722static void
17723OP_Rounding (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
17724{
17725 if (!vex.evex
17726 || (bytemode != evex_rounding_mode
17727 && bytemode != evex_sae_mode))
17728 abort ();
17729 if (modrm.mod == 3 && vex.b)
17730 switch (bytemode)
17731 {
17732 case evex_rounding_mode:
17733 oappend (names_rounding[vex.ll]);
17734 break;
17735 case evex_sae_mode:
17736 oappend ("{sae}");
17737 break;
17738 default:
17739 break;
17740 }
17741}
This page took 3.698578 seconds and 4 git commands to generate.