Allow veneers to claim veneered symbols
[deliverable/binutils-gdb.git] / opcodes / i386-dis.c
CommitLineData
252b5132 1/* Print i386 instructions for GDB, the GNU debugger.
6f2750fe 2 Copyright (C) 1988-2016 Free Software Foundation, Inc.
252b5132 3
9b201bb5 4 This file is part of the GNU opcodes library.
20f0a1fc 5
9b201bb5 6 This library is free software; you can redistribute it and/or modify
20f0a1fc 7 it under the terms of the GNU General Public License as published by
9b201bb5
NC
8 the Free Software Foundation; either version 3, or (at your option)
9 any later version.
20f0a1fc 10
9b201bb5
NC
11 It is distributed in the hope that it will be useful, but WITHOUT
12 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
13 or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
14 License for more details.
20f0a1fc
NC
15
16 You should have received a copy of the GNU General Public License
17 along with this program; if not, write to the Free Software
9b201bb5
NC
18 Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
19 MA 02110-1301, USA. */
20
20f0a1fc
NC
21
22/* 80386 instruction printer by Pace Willisson (pace@prep.ai.mit.edu)
23 July 1988
24 modified by John Hassey (hassey@dg-rtp.dg.com)
25 x86-64 support added by Jan Hubicka (jh@suse.cz)
26 VIA PadLock support by Michal Ludvig (mludvig@suse.cz). */
27
28/* The main tables describing the instructions is essentially a copy
29 of the "Opcode Map" chapter (Appendix A) of the Intel 80386
30 Programmers Manual. Usually, there is a capital letter, followed
31 by a small letter. The capital letter tell the addressing mode,
32 and the small letter tells about the operand size. Refer to
33 the Intel manual for details. */
252b5132 34
252b5132 35#include "sysdep.h"
dabbade6 36#include "dis-asm.h"
252b5132 37#include "opintl.h"
0b1cf022 38#include "opcode/i386.h"
85f10a01 39#include "libiberty.h"
252b5132
RH
40
41#include <setjmp.h>
42
26ca5450
AJ
43static int print_insn (bfd_vma, disassemble_info *);
44static void dofloat (int);
45static void OP_ST (int, int);
46static void OP_STi (int, int);
47static int putop (const char *, int);
48static void oappend (const char *);
49static void append_seg (void);
50static void OP_indirE (int, int);
51static void print_operand_value (char *, int, bfd_vma);
c0f3af97 52static void OP_E_register (int, int);
c1e679ec 53static void OP_E_memory (int, int);
5d669648 54static void print_displacement (char *, bfd_vma);
26ca5450
AJ
55static void OP_E (int, int);
56static void OP_G (int, int);
57static bfd_vma get64 (void);
58static bfd_signed_vma get32 (void);
59static bfd_signed_vma get32s (void);
60static int get16 (void);
61static void set_op (bfd_vma, int);
b844680a 62static void OP_Skip_MODRM (int, int);
26ca5450
AJ
63static void OP_REG (int, int);
64static void OP_IMREG (int, int);
65static void OP_I (int, int);
66static void OP_I64 (int, int);
67static void OP_sI (int, int);
68static void OP_J (int, int);
69static void OP_SEG (int, int);
70static void OP_DIR (int, int);
71static void OP_OFF (int, int);
72static void OP_OFF64 (int, int);
73static void ptr_reg (int, int);
74static void OP_ESreg (int, int);
75static void OP_DSreg (int, int);
76static void OP_C (int, int);
77static void OP_D (int, int);
78static void OP_T (int, int);
6f74c397 79static void OP_R (int, int);
26ca5450
AJ
80static void OP_MMX (int, int);
81static void OP_XMM (int, int);
82static void OP_EM (int, int);
83static void OP_EX (int, int);
4d9567e0
MM
84static void OP_EMC (int,int);
85static void OP_MXC (int,int);
26ca5450
AJ
86static void OP_MS (int, int);
87static void OP_XS (int, int);
cc0ec051 88static void OP_M (int, int);
c0f3af97
L
89static void OP_VEX (int, int);
90static void OP_EX_Vex (int, int);
922d8de8 91static void OP_EX_VexW (int, int);
a683cc34 92static void OP_EX_VexImmW (int, int);
c0f3af97 93static void OP_XMM_Vex (int, int);
922d8de8 94static void OP_XMM_VexW (int, int);
43234a1e 95static void OP_Rounding (int, int);
c0f3af97
L
96static void OP_REG_VexI4 (int, int);
97static void PCLMUL_Fixup (int, int);
922d8de8 98static void VEXI4_Fixup (int, int);
c0f3af97
L
99static void VZERO_Fixup (int, int);
100static void VCMP_Fixup (int, int);
43234a1e 101static void VPCMP_Fixup (int, int);
cc0ec051 102static void OP_0f07 (int, int);
b844680a
L
103static void OP_Monitor (int, int);
104static void OP_Mwait (int, int);
9916071f 105static void OP_Mwaitx (int, int);
46e883c5
L
106static void NOP_Fixup1 (int, int);
107static void NOP_Fixup2 (int, int);
26ca5450 108static void OP_3DNowSuffix (int, int);
ad19981d 109static void CMP_Fixup (int, int);
26ca5450 110static void BadOp (void);
35c52694 111static void REP_Fixup (int, int);
7e8b059b 112static void BND_Fixup (int, int);
42164a71
L
113static void HLE_Fixup1 (int, int);
114static void HLE_Fixup2 (int, int);
115static void HLE_Fixup3 (int, int);
f5804c90 116static void CMPXCHG8B_Fixup (int, int);
42903f7f 117static void XMM_Fixup (int, int);
381d071f 118static void CRC32_Fixup (int, int);
eacc9c89 119static void FXSAVE_Fixup (int, int);
f88c9eb0
SP
120static void OP_LWPCB_E (int, int);
121static void OP_LWP_E (int, int);
5dd85c99
SP
122static void OP_Vex_2src_1 (int, int);
123static void OP_Vex_2src_2 (int, int);
c1e679ec 124
f1f8f695 125static void MOVBE_Fixup (int, int);
252b5132 126
43234a1e
L
127static void OP_Mask (int, int);
128
6608db57 129struct dis_private {
252b5132
RH
130 /* Points to first byte not fetched. */
131 bfd_byte *max_fetched;
0b1cf022 132 bfd_byte the_buffer[MAX_MNEM_SIZE];
252b5132 133 bfd_vma insn_start;
e396998b 134 int orig_sizeflag;
8df14d78 135 OPCODES_SIGJMP_BUF bailout;
252b5132
RH
136};
137
cb712a9e
L
138enum address_mode
139{
140 mode_16bit,
141 mode_32bit,
142 mode_64bit
143};
144
145enum address_mode address_mode;
52b15da3 146
5076851f
ILT
147/* Flags for the prefixes for the current instruction. See below. */
148static int prefixes;
149
52b15da3
JH
150/* REX prefix the current instruction. See below. */
151static int rex;
152/* Bits of REX we've already used. */
153static int rex_used;
d869730d 154/* REX bits in original REX prefix ignored. */
c0f3af97 155static int rex_ignored;
52b15da3
JH
156/* Mark parts used in the REX prefix. When we are testing for
157 empty prefix (for 8bit register REX extension), just mask it
158 out. Otherwise test for REX bit is excuse for existence of REX
159 only in case value is nonzero. */
160#define USED_REX(value) \
161 { \
162 if (value) \
161a04f6
L
163 { \
164 if ((rex & value)) \
165 rex_used |= (value) | REX_OPCODE; \
166 } \
52b15da3 167 else \
161a04f6 168 rex_used |= REX_OPCODE; \
52b15da3
JH
169 }
170
7d421014
ILT
171/* Flags for prefixes which we somehow handled when printing the
172 current instruction. */
173static int used_prefixes;
174
5076851f
ILT
175/* Flags stored in PREFIXES. */
176#define PREFIX_REPZ 1
177#define PREFIX_REPNZ 2
178#define PREFIX_LOCK 4
179#define PREFIX_CS 8
180#define PREFIX_SS 0x10
181#define PREFIX_DS 0x20
182#define PREFIX_ES 0x40
183#define PREFIX_FS 0x80
184#define PREFIX_GS 0x100
185#define PREFIX_DATA 0x200
186#define PREFIX_ADDR 0x400
187#define PREFIX_FWAIT 0x800
188
252b5132
RH
189/* Make sure that bytes from INFO->PRIVATE_DATA->BUFFER (inclusive)
190 to ADDR (exclusive) are valid. Returns 1 for success, longjmps
191 on error. */
192#define FETCH_DATA(info, addr) \
6608db57 193 ((addr) <= ((struct dis_private *) (info->private_data))->max_fetched \
252b5132
RH
194 ? 1 : fetch_data ((info), (addr)))
195
196static int
26ca5450 197fetch_data (struct disassemble_info *info, bfd_byte *addr)
252b5132
RH
198{
199 int status;
6608db57 200 struct dis_private *priv = (struct dis_private *) info->private_data;
252b5132
RH
201 bfd_vma start = priv->insn_start + (priv->max_fetched - priv->the_buffer);
202
0b1cf022 203 if (addr <= priv->the_buffer + MAX_MNEM_SIZE)
272c9217
JB
204 status = (*info->read_memory_func) (start,
205 priv->max_fetched,
206 addr - priv->max_fetched,
207 info);
208 else
209 status = -1;
252b5132
RH
210 if (status != 0)
211 {
7d421014 212 /* If we did manage to read at least one byte, then
db6eb5be
AM
213 print_insn_i386 will do something sensible. Otherwise, print
214 an error. We do that here because this is where we know
215 STATUS. */
7d421014 216 if (priv->max_fetched == priv->the_buffer)
5076851f 217 (*info->memory_error_func) (status, start, info);
8df14d78 218 OPCODES_SIGLONGJMP (priv->bailout, 1);
252b5132
RH
219 }
220 else
221 priv->max_fetched = addr;
222 return 1;
223}
224
bf890a93 225/* Possible values for prefix requirement. */
507bd325
L
226#define PREFIX_IGNORED_SHIFT 16
227#define PREFIX_IGNORED_REPZ (PREFIX_REPZ << PREFIX_IGNORED_SHIFT)
228#define PREFIX_IGNORED_REPNZ (PREFIX_REPNZ << PREFIX_IGNORED_SHIFT)
229#define PREFIX_IGNORED_DATA (PREFIX_DATA << PREFIX_IGNORED_SHIFT)
230#define PREFIX_IGNORED_ADDR (PREFIX_ADDR << PREFIX_IGNORED_SHIFT)
231#define PREFIX_IGNORED_LOCK (PREFIX_LOCK << PREFIX_IGNORED_SHIFT)
232
233/* Opcode prefixes. */
234#define PREFIX_OPCODE (PREFIX_REPZ \
235 | PREFIX_REPNZ \
236 | PREFIX_DATA)
237
238/* Prefixes ignored. */
239#define PREFIX_IGNORED (PREFIX_IGNORED_REPZ \
240 | PREFIX_IGNORED_REPNZ \
241 | PREFIX_IGNORED_DATA)
bf890a93 242
ce518a5f 243#define XX { NULL, 0 }
507bd325 244#define Bad_Opcode NULL, { { NULL, 0 } }, 0
ce518a5f
L
245
246#define Eb { OP_E, b_mode }
7e8b059b 247#define Ebnd { OP_E, bnd_mode }
b6169b20 248#define EbS { OP_E, b_swap_mode }
ce518a5f 249#define Ev { OP_E, v_mode }
7e8b059b 250#define Ev_bnd { OP_E, v_bnd_mode }
b6169b20 251#define EvS { OP_E, v_swap_mode }
ce518a5f
L
252#define Ed { OP_E, d_mode }
253#define Edq { OP_E, dq_mode }
254#define Edqw { OP_E, dqw_mode }
1ba585e8 255#define EdqwS { OP_E, dqw_swap_mode }
42903f7f 256#define Edqb { OP_E, dqb_mode }
1ba585e8
IT
257#define Edb { OP_E, db_mode }
258#define Edw { OP_E, dw_mode }
42903f7f 259#define Edqd { OP_E, dqd_mode }
09335d05 260#define Eq { OP_E, q_mode }
ce518a5f
L
261#define indirEv { OP_indirE, stack_v_mode }
262#define indirEp { OP_indirE, f_mode }
263#define stackEv { OP_E, stack_v_mode }
264#define Em { OP_E, m_mode }
265#define Ew { OP_E, w_mode }
266#define M { OP_M, 0 } /* lea, lgdt, etc. */
34b772a6 267#define Ma { OP_M, a_mode }
b844680a 268#define Mb { OP_M, b_mode }
d9a5e5e5 269#define Md { OP_M, d_mode }
f1f8f695 270#define Mo { OP_M, o_mode }
ce518a5f
L
271#define Mp { OP_M, f_mode } /* 32 or 48 bit memory operand for LDS, LES etc */
272#define Mq { OP_M, q_mode }
4ee52178 273#define Mx { OP_M, x_mode }
c0f3af97 274#define Mxmm { OP_M, xmm_mode }
ce518a5f 275#define Gb { OP_G, b_mode }
7e8b059b 276#define Gbnd { OP_G, bnd_mode }
ce518a5f
L
277#define Gv { OP_G, v_mode }
278#define Gd { OP_G, d_mode }
279#define Gdq { OP_G, dq_mode }
280#define Gm { OP_G, m_mode }
281#define Gw { OP_G, w_mode }
6f74c397 282#define Rd { OP_R, d_mode }
43234a1e 283#define Rdq { OP_R, dq_mode }
6f74c397 284#define Rm { OP_R, m_mode }
ce518a5f
L
285#define Ib { OP_I, b_mode }
286#define sIb { OP_sI, b_mode } /* sign extened byte */
e3949f17 287#define sIbT { OP_sI, b_T_mode } /* sign extened byte like 'T' */
ce518a5f 288#define Iv { OP_I, v_mode }
7bb15c6f 289#define sIv { OP_sI, v_mode }
ce518a5f
L
290#define Iq { OP_I, q_mode }
291#define Iv64 { OP_I64, v_mode }
292#define Iw { OP_I, w_mode }
293#define I1 { OP_I, const_1_mode }
294#define Jb { OP_J, b_mode }
295#define Jv { OP_J, v_mode }
296#define Cm { OP_C, m_mode }
297#define Dm { OP_D, m_mode }
298#define Td { OP_T, d_mode }
b844680a 299#define Skip_MODRM { OP_Skip_MODRM, 0 }
ce518a5f
L
300
301#define RMeAX { OP_REG, eAX_reg }
302#define RMeBX { OP_REG, eBX_reg }
303#define RMeCX { OP_REG, eCX_reg }
304#define RMeDX { OP_REG, eDX_reg }
305#define RMeSP { OP_REG, eSP_reg }
306#define RMeBP { OP_REG, eBP_reg }
307#define RMeSI { OP_REG, eSI_reg }
308#define RMeDI { OP_REG, eDI_reg }
309#define RMrAX { OP_REG, rAX_reg }
310#define RMrBX { OP_REG, rBX_reg }
311#define RMrCX { OP_REG, rCX_reg }
312#define RMrDX { OP_REG, rDX_reg }
313#define RMrSP { OP_REG, rSP_reg }
314#define RMrBP { OP_REG, rBP_reg }
315#define RMrSI { OP_REG, rSI_reg }
316#define RMrDI { OP_REG, rDI_reg }
317#define RMAL { OP_REG, al_reg }
ce518a5f
L
318#define RMCL { OP_REG, cl_reg }
319#define RMDL { OP_REG, dl_reg }
320#define RMBL { OP_REG, bl_reg }
321#define RMAH { OP_REG, ah_reg }
322#define RMCH { OP_REG, ch_reg }
323#define RMDH { OP_REG, dh_reg }
324#define RMBH { OP_REG, bh_reg }
325#define RMAX { OP_REG, ax_reg }
326#define RMDX { OP_REG, dx_reg }
327
328#define eAX { OP_IMREG, eAX_reg }
329#define eBX { OP_IMREG, eBX_reg }
330#define eCX { OP_IMREG, eCX_reg }
331#define eDX { OP_IMREG, eDX_reg }
332#define eSP { OP_IMREG, eSP_reg }
333#define eBP { OP_IMREG, eBP_reg }
334#define eSI { OP_IMREG, eSI_reg }
335#define eDI { OP_IMREG, eDI_reg }
336#define AL { OP_IMREG, al_reg }
337#define CL { OP_IMREG, cl_reg }
338#define DL { OP_IMREG, dl_reg }
339#define BL { OP_IMREG, bl_reg }
340#define AH { OP_IMREG, ah_reg }
341#define CH { OP_IMREG, ch_reg }
342#define DH { OP_IMREG, dh_reg }
343#define BH { OP_IMREG, bh_reg }
344#define AX { OP_IMREG, ax_reg }
345#define DX { OP_IMREG, dx_reg }
346#define zAX { OP_IMREG, z_mode_ax_reg }
347#define indirDX { OP_IMREG, indir_dx_reg }
348
349#define Sw { OP_SEG, w_mode }
350#define Sv { OP_SEG, v_mode }
351#define Ap { OP_DIR, 0 }
352#define Ob { OP_OFF64, b_mode }
353#define Ov { OP_OFF64, v_mode }
354#define Xb { OP_DSreg, eSI_reg }
355#define Xv { OP_DSreg, eSI_reg }
356#define Xz { OP_DSreg, eSI_reg }
357#define Yb { OP_ESreg, eDI_reg }
358#define Yv { OP_ESreg, eDI_reg }
359#define DSBX { OP_DSreg, eBX_reg }
360
361#define es { OP_REG, es_reg }
362#define ss { OP_REG, ss_reg }
363#define cs { OP_REG, cs_reg }
364#define ds { OP_REG, ds_reg }
365#define fs { OP_REG, fs_reg }
366#define gs { OP_REG, gs_reg }
367
368#define MX { OP_MMX, 0 }
369#define XM { OP_XMM, 0 }
539f890d 370#define XMScalar { OP_XMM, scalar_mode }
6c30d220 371#define XMGatherQ { OP_XMM, vex_vsib_q_w_dq_mode }
c0f3af97 372#define XMM { OP_XMM, xmm_mode }
43234a1e 373#define XMxmmq { OP_XMM, xmmq_mode }
ce518a5f 374#define EM { OP_EM, v_mode }
b6169b20 375#define EMS { OP_EM, v_swap_mode }
09a2c6cf 376#define EMd { OP_EM, d_mode }
14051056 377#define EMx { OP_EM, x_mode }
8976381e 378#define EXw { OP_EX, w_mode }
09a2c6cf 379#define EXd { OP_EX, d_mode }
539f890d 380#define EXdScalar { OP_EX, d_scalar_mode }
fa99fab2 381#define EXdS { OP_EX, d_swap_mode }
43234a1e 382#define EXdScalarS { OP_EX, d_scalar_swap_mode }
09a2c6cf 383#define EXq { OP_EX, q_mode }
539f890d
L
384#define EXqScalar { OP_EX, q_scalar_mode }
385#define EXqScalarS { OP_EX, q_scalar_swap_mode }
b6169b20 386#define EXqS { OP_EX, q_swap_mode }
09a2c6cf 387#define EXx { OP_EX, x_mode }
b6169b20 388#define EXxS { OP_EX, x_swap_mode }
c0f3af97 389#define EXxmm { OP_EX, xmm_mode }
43234a1e 390#define EXymm { OP_EX, ymm_mode }
c0f3af97 391#define EXxmmq { OP_EX, xmmq_mode }
43234a1e 392#define EXEvexHalfBcstXmmq { OP_EX, evex_half_bcst_xmmq_mode }
6c30d220
L
393#define EXxmm_mb { OP_EX, xmm_mb_mode }
394#define EXxmm_mw { OP_EX, xmm_mw_mode }
395#define EXxmm_md { OP_EX, xmm_md_mode }
396#define EXxmm_mq { OP_EX, xmm_mq_mode }
43234a1e 397#define EXxmm_mdq { OP_EX, xmm_mdq_mode }
6c30d220
L
398#define EXxmmdw { OP_EX, xmmdw_mode }
399#define EXxmmqd { OP_EX, xmmqd_mode }
c0f3af97 400#define EXymmq { OP_EX, ymmq_mode }
0bfee649 401#define EXVexWdq { OP_EX, vex_w_dq_mode }
1c480963 402#define EXVexWdqScalar { OP_EX, vex_scalar_w_dq_mode }
43234a1e
L
403#define EXEvexXGscat { OP_EX, evex_x_gscat_mode }
404#define EXEvexXNoBcst { OP_EX, evex_x_nobcst_mode }
ce518a5f
L
405#define MS { OP_MS, v_mode }
406#define XS { OP_XS, v_mode }
09335d05 407#define EMCq { OP_EMC, q_mode }
ce518a5f 408#define MXC { OP_MXC, 0 }
ce518a5f 409#define OPSUF { OP_3DNowSuffix, 0 }
ad19981d 410#define CMP { CMP_Fixup, 0 }
42903f7f 411#define XMM0 { XMM_Fixup, 0 }
eacc9c89 412#define FXSAVE { FXSAVE_Fixup, 0 }
5dd85c99
SP
413#define Vex_2src_1 { OP_Vex_2src_1, 0 }
414#define Vex_2src_2 { OP_Vex_2src_2, 0 }
252b5132 415
c0f3af97 416#define Vex { OP_VEX, vex_mode }
539f890d 417#define VexScalar { OP_VEX, vex_scalar_mode }
6c30d220 418#define VexGatherQ { OP_VEX, vex_vsib_q_w_dq_mode }
c0f3af97
L
419#define Vex128 { OP_VEX, vex128_mode }
420#define Vex256 { OP_VEX, vex256_mode }
cb21baef 421#define VexGdq { OP_VEX, dq_mode }
922d8de8 422#define VexI4 { VEXI4_Fixup, 0}
c0f3af97 423#define EXdVex { OP_EX_Vex, d_mode }
fa99fab2 424#define EXdVexS { OP_EX_Vex, d_swap_mode }
539f890d 425#define EXdVexScalarS { OP_EX_Vex, d_scalar_swap_mode }
c0f3af97 426#define EXqVex { OP_EX_Vex, q_mode }
fa99fab2 427#define EXqVexS { OP_EX_Vex, q_swap_mode }
539f890d 428#define EXqVexScalarS { OP_EX_Vex, q_scalar_swap_mode }
922d8de8
DR
429#define EXVexW { OP_EX_VexW, x_mode }
430#define EXdVexW { OP_EX_VexW, d_mode }
431#define EXqVexW { OP_EX_VexW, q_mode }
a683cc34 432#define EXVexImmW { OP_EX_VexImmW, x_mode }
c0f3af97 433#define XMVex { OP_XMM_Vex, 0 }
539f890d 434#define XMVexScalar { OP_XMM_Vex, scalar_mode }
922d8de8 435#define XMVexW { OP_XMM_VexW, 0 }
c0f3af97
L
436#define XMVexI4 { OP_REG_VexI4, x_mode }
437#define PCLMUL { PCLMUL_Fixup, 0 }
438#define VZERO { VZERO_Fixup, 0 }
439#define VCMP { VCMP_Fixup, 0 }
43234a1e
L
440#define VPCMP { VPCMP_Fixup, 0 }
441
442#define EXxEVexR { OP_Rounding, evex_rounding_mode }
443#define EXxEVexS { OP_Rounding, evex_sae_mode }
444
445#define XMask { OP_Mask, mask_mode }
446#define MaskG { OP_G, mask_mode }
447#define MaskE { OP_E, mask_mode }
1ba585e8 448#define MaskBDE { OP_E, mask_bd_mode }
43234a1e
L
449#define MaskR { OP_R, mask_mode }
450#define MaskVex { OP_VEX, mask_mode }
c0f3af97 451
6c30d220 452#define MVexVSIBDWpX { OP_M, vex_vsib_d_w_dq_mode }
5fc35d96 453#define MVexVSIBDQWpX { OP_M, vex_vsib_d_w_d_mode }
6c30d220 454#define MVexVSIBQWpX { OP_M, vex_vsib_q_w_dq_mode }
5fc35d96 455#define MVexVSIBQDWpX { OP_M, vex_vsib_q_w_d_mode }
6c30d220 456
35c52694 457/* Used handle "rep" prefix for string instructions. */
ce518a5f
L
458#define Xbr { REP_Fixup, eSI_reg }
459#define Xvr { REP_Fixup, eSI_reg }
460#define Ybr { REP_Fixup, eDI_reg }
461#define Yvr { REP_Fixup, eDI_reg }
462#define Yzr { REP_Fixup, eDI_reg }
463#define indirDXr { REP_Fixup, indir_dx_reg }
464#define ALr { REP_Fixup, al_reg }
465#define eAXr { REP_Fixup, eAX_reg }
466
42164a71
L
467/* Used handle HLE prefix for lockable instructions. */
468#define Ebh1 { HLE_Fixup1, b_mode }
469#define Evh1 { HLE_Fixup1, v_mode }
470#define Ebh2 { HLE_Fixup2, b_mode }
471#define Evh2 { HLE_Fixup2, v_mode }
472#define Ebh3 { HLE_Fixup3, b_mode }
473#define Evh3 { HLE_Fixup3, v_mode }
474
7e8b059b
L
475#define BND { BND_Fixup, 0 }
476
ce518a5f
L
477#define cond_jump_flag { NULL, cond_jump_mode }
478#define loop_jcxz_flag { NULL, loop_jcxz_mode }
3ffd33cf 479
252b5132 480/* bits in sizeflag */
252b5132 481#define SUFFIX_ALWAYS 4
252b5132
RH
482#define AFLAG 2
483#define DFLAG 1
484
51e7da1b
L
485enum
486{
487 /* byte operand */
488 b_mode = 1,
489 /* byte operand with operand swapped */
3873ba12 490 b_swap_mode,
e3949f17
L
491 /* byte operand, sign extend like 'T' suffix */
492 b_T_mode,
51e7da1b 493 /* operand size depends on prefixes */
3873ba12 494 v_mode,
51e7da1b 495 /* operand size depends on prefixes with operand swapped */
3873ba12 496 v_swap_mode,
51e7da1b 497 /* word operand */
3873ba12 498 w_mode,
51e7da1b 499 /* double word operand */
3873ba12 500 d_mode,
51e7da1b 501 /* double word operand with operand swapped */
3873ba12 502 d_swap_mode,
51e7da1b 503 /* quad word operand */
3873ba12 504 q_mode,
51e7da1b 505 /* quad word operand with operand swapped */
3873ba12 506 q_swap_mode,
51e7da1b 507 /* ten-byte operand */
3873ba12 508 t_mode,
43234a1e
L
509 /* 16-byte XMM, 32-byte YMM or 64-byte ZMM operand. In EVEX with
510 broadcast enabled. */
3873ba12 511 x_mode,
43234a1e
L
512 /* Similar to x_mode, but with different EVEX mem shifts. */
513 evex_x_gscat_mode,
514 /* Similar to x_mode, but with disabled broadcast. */
515 evex_x_nobcst_mode,
516 /* Similar to x_mode, but with operands swapped and disabled broadcast
517 in EVEX. */
3873ba12 518 x_swap_mode,
51e7da1b 519 /* 16-byte XMM operand */
3873ba12 520 xmm_mode,
43234a1e
L
521 /* XMM, XMM or YMM register operand, or quad word, xmmword or ymmword
522 memory operand (depending on vector length). Broadcast isn't
523 allowed. */
3873ba12 524 xmmq_mode,
43234a1e
L
525 /* Same as xmmq_mode, but broadcast is allowed. */
526 evex_half_bcst_xmmq_mode,
6c30d220
L
527 /* XMM register or byte memory operand */
528 xmm_mb_mode,
529 /* XMM register or word memory operand */
530 xmm_mw_mode,
531 /* XMM register or double word memory operand */
532 xmm_md_mode,
533 /* XMM register or quad word memory operand */
534 xmm_mq_mode,
43234a1e
L
535 /* XMM register or double/quad word memory operand, depending on
536 VEX.W. */
537 xmm_mdq_mode,
538 /* 16-byte XMM, word, double word or quad word operand. */
6c30d220 539 xmmdw_mode,
43234a1e 540 /* 16-byte XMM, double word, quad word operand or xmm word operand. */
6c30d220 541 xmmqd_mode,
43234a1e
L
542 /* 32-byte YMM operand */
543 ymm_mode,
544 /* quad word, ymmword or zmmword memory operand. */
3873ba12 545 ymmq_mode,
6c30d220
L
546 /* 32-byte YMM or 16-byte word operand */
547 ymmxmm_mode,
51e7da1b 548 /* d_mode in 32bit, q_mode in 64bit mode. */
3873ba12 549 m_mode,
51e7da1b 550 /* pair of v_mode operands */
3873ba12
L
551 a_mode,
552 cond_jump_mode,
553 loop_jcxz_mode,
7e8b059b 554 v_bnd_mode,
51e7da1b 555 /* operand size depends on REX prefixes. */
3873ba12 556 dq_mode,
51e7da1b 557 /* registers like dq_mode, memory like w_mode. */
3873ba12 558 dqw_mode,
1ba585e8 559 dqw_swap_mode,
7e8b059b 560 bnd_mode,
51e7da1b 561 /* 4- or 6-byte pointer operand */
3873ba12
L
562 f_mode,
563 const_1_mode,
51e7da1b 564 /* v_mode for stack-related opcodes. */
3873ba12 565 stack_v_mode,
51e7da1b 566 /* non-quad operand size depends on prefixes */
3873ba12 567 z_mode,
51e7da1b 568 /* 16-byte operand */
3873ba12 569 o_mode,
51e7da1b 570 /* registers like dq_mode, memory like b_mode. */
3873ba12 571 dqb_mode,
1ba585e8
IT
572 /* registers like d_mode, memory like b_mode. */
573 db_mode,
574 /* registers like d_mode, memory like w_mode. */
575 dw_mode,
51e7da1b 576 /* registers like dq_mode, memory like d_mode. */
3873ba12 577 dqd_mode,
51e7da1b 578 /* normal vex mode */
3873ba12 579 vex_mode,
51e7da1b 580 /* 128bit vex mode */
3873ba12 581 vex128_mode,
51e7da1b 582 /* 256bit vex mode */
3873ba12 583 vex256_mode,
51e7da1b 584 /* operand size depends on the VEX.W bit. */
3873ba12 585 vex_w_dq_mode,
d55ee72f 586
6c30d220
L
587 /* Similar to vex_w_dq_mode, with VSIB dword indices. */
588 vex_vsib_d_w_dq_mode,
5fc35d96
IT
589 /* Similar to vex_vsib_d_w_dq_mode, with smaller memory. */
590 vex_vsib_d_w_d_mode,
6c30d220
L
591 /* Similar to vex_w_dq_mode, with VSIB qword indices. */
592 vex_vsib_q_w_dq_mode,
5fc35d96
IT
593 /* Similar to vex_vsib_q_w_dq_mode, with smaller memory. */
594 vex_vsib_q_w_d_mode,
6c30d220 595
539f890d
L
596 /* scalar, ignore vector length. */
597 scalar_mode,
598 /* like d_mode, ignore vector length. */
599 d_scalar_mode,
600 /* like d_swap_mode, ignore vector length. */
601 d_scalar_swap_mode,
602 /* like q_mode, ignore vector length. */
603 q_scalar_mode,
604 /* like q_swap_mode, ignore vector length. */
605 q_scalar_swap_mode,
606 /* like vex_mode, ignore vector length. */
607 vex_scalar_mode,
1c480963
L
608 /* like vex_w_dq_mode, ignore vector length. */
609 vex_scalar_w_dq_mode,
539f890d 610
43234a1e
L
611 /* Static rounding. */
612 evex_rounding_mode,
613 /* Supress all exceptions. */
614 evex_sae_mode,
615
616 /* Mask register operand. */
617 mask_mode,
1ba585e8
IT
618 /* Mask register operand. */
619 mask_bd_mode,
43234a1e 620
3873ba12
L
621 es_reg,
622 cs_reg,
623 ss_reg,
624 ds_reg,
625 fs_reg,
626 gs_reg,
d55ee72f 627
3873ba12
L
628 eAX_reg,
629 eCX_reg,
630 eDX_reg,
631 eBX_reg,
632 eSP_reg,
633 eBP_reg,
634 eSI_reg,
635 eDI_reg,
d55ee72f 636
3873ba12
L
637 al_reg,
638 cl_reg,
639 dl_reg,
640 bl_reg,
641 ah_reg,
642 ch_reg,
643 dh_reg,
644 bh_reg,
d55ee72f 645
3873ba12
L
646 ax_reg,
647 cx_reg,
648 dx_reg,
649 bx_reg,
650 sp_reg,
651 bp_reg,
652 si_reg,
653 di_reg,
d55ee72f 654
3873ba12
L
655 rAX_reg,
656 rCX_reg,
657 rDX_reg,
658 rBX_reg,
659 rSP_reg,
660 rBP_reg,
661 rSI_reg,
662 rDI_reg,
d55ee72f 663
3873ba12
L
664 z_mode_ax_reg,
665 indir_dx_reg
51e7da1b 666};
252b5132 667
51e7da1b
L
668enum
669{
670 FLOATCODE = 1,
3873ba12
L
671 USE_REG_TABLE,
672 USE_MOD_TABLE,
673 USE_RM_TABLE,
674 USE_PREFIX_TABLE,
675 USE_X86_64_TABLE,
676 USE_3BYTE_TABLE,
f88c9eb0 677 USE_XOP_8F_TABLE,
3873ba12
L
678 USE_VEX_C4_TABLE,
679 USE_VEX_C5_TABLE,
9e30b8e0 680 USE_VEX_LEN_TABLE,
43234a1e
L
681 USE_VEX_W_TABLE,
682 USE_EVEX_TABLE
51e7da1b 683};
6439fc28 684
bf890a93 685#define FLOAT NULL, { { NULL, FLOATCODE } }, 0
4efba78c 686
bf890a93
IT
687#define DIS386(T, I) NULL, { { NULL, (T)}, { NULL, (I) } }, 0
688#define DIS386_PREFIX(T, I, P) NULL, { { NULL, (T)}, { NULL, (I) } }, P
1ceb70f8
L
689#define REG_TABLE(I) DIS386 (USE_REG_TABLE, (I))
690#define MOD_TABLE(I) DIS386 (USE_MOD_TABLE, (I))
691#define RM_TABLE(I) DIS386 (USE_RM_TABLE, (I))
692#define PREFIX_TABLE(I) DIS386 (USE_PREFIX_TABLE, (I))
4e7d34a6
L
693#define X86_64_TABLE(I) DIS386 (USE_X86_64_TABLE, (I))
694#define THREE_BYTE_TABLE(I) DIS386 (USE_3BYTE_TABLE, (I))
bf890a93 695#define THREE_BYTE_TABLE_PREFIX(I, P) DIS386_PREFIX (USE_3BYTE_TABLE, (I), P)
f88c9eb0 696#define XOP_8F_TABLE(I) DIS386 (USE_XOP_8F_TABLE, (I))
c0f3af97
L
697#define VEX_C4_TABLE(I) DIS386 (USE_VEX_C4_TABLE, (I))
698#define VEX_C5_TABLE(I) DIS386 (USE_VEX_C5_TABLE, (I))
699#define VEX_LEN_TABLE(I) DIS386 (USE_VEX_LEN_TABLE, (I))
9e30b8e0 700#define VEX_W_TABLE(I) DIS386 (USE_VEX_W_TABLE, (I))
43234a1e 701#define EVEX_TABLE(I) DIS386 (USE_EVEX_TABLE, (I))
1ceb70f8 702
51e7da1b
L
703enum
704{
705 REG_80 = 0,
3873ba12
L
706 REG_81,
707 REG_82,
708 REG_8F,
709 REG_C0,
710 REG_C1,
711 REG_C6,
712 REG_C7,
713 REG_D0,
714 REG_D1,
715 REG_D2,
716 REG_D3,
717 REG_F6,
718 REG_F7,
719 REG_FE,
720 REG_FF,
721 REG_0F00,
722 REG_0F01,
723 REG_0F0D,
724 REG_0F18,
725 REG_0F71,
726 REG_0F72,
727 REG_0F73,
728 REG_0FA6,
729 REG_0FA7,
730 REG_0FAE,
731 REG_0FBA,
732 REG_0FC7,
592a252b
L
733 REG_VEX_0F71,
734 REG_VEX_0F72,
735 REG_VEX_0F73,
736 REG_VEX_0FAE,
f12dc422 737 REG_VEX_0F38F3,
f88c9eb0 738 REG_XOP_LWPCB,
2a2a0f38
QN
739 REG_XOP_LWP,
740 REG_XOP_TBM_01,
43234a1e
L
741 REG_XOP_TBM_02,
742
1ba585e8 743 REG_EVEX_0F71,
43234a1e
L
744 REG_EVEX_0F72,
745 REG_EVEX_0F73,
746 REG_EVEX_0F38C6,
747 REG_EVEX_0F38C7
51e7da1b 748};
1ceb70f8 749
51e7da1b
L
750enum
751{
752 MOD_8D = 0,
42164a71
L
753 MOD_C6_REG_7,
754 MOD_C7_REG_7,
4a357820
MZ
755 MOD_FF_REG_3,
756 MOD_FF_REG_5,
3873ba12
L
757 MOD_0F01_REG_0,
758 MOD_0F01_REG_1,
759 MOD_0F01_REG_2,
760 MOD_0F01_REG_3,
8eab4136 761 MOD_0F01_REG_5,
3873ba12
L
762 MOD_0F01_REG_7,
763 MOD_0F12_PREFIX_0,
764 MOD_0F13,
765 MOD_0F16_PREFIX_0,
766 MOD_0F17,
767 MOD_0F18_REG_0,
768 MOD_0F18_REG_1,
769 MOD_0F18_REG_2,
770 MOD_0F18_REG_3,
d7189fa5
RM
771 MOD_0F18_REG_4,
772 MOD_0F18_REG_5,
773 MOD_0F18_REG_6,
774 MOD_0F18_REG_7,
7e8b059b
L
775 MOD_0F1A_PREFIX_0,
776 MOD_0F1B_PREFIX_0,
777 MOD_0F1B_PREFIX_1,
3873ba12
L
778 MOD_0F24,
779 MOD_0F26,
780 MOD_0F2B_PREFIX_0,
781 MOD_0F2B_PREFIX_1,
782 MOD_0F2B_PREFIX_2,
783 MOD_0F2B_PREFIX_3,
784 MOD_0F51,
785 MOD_0F71_REG_2,
786 MOD_0F71_REG_4,
787 MOD_0F71_REG_6,
788 MOD_0F72_REG_2,
789 MOD_0F72_REG_4,
790 MOD_0F72_REG_6,
791 MOD_0F73_REG_2,
792 MOD_0F73_REG_3,
793 MOD_0F73_REG_6,
794 MOD_0F73_REG_7,
795 MOD_0FAE_REG_0,
796 MOD_0FAE_REG_1,
797 MOD_0FAE_REG_2,
798 MOD_0FAE_REG_3,
799 MOD_0FAE_REG_4,
800 MOD_0FAE_REG_5,
801 MOD_0FAE_REG_6,
802 MOD_0FAE_REG_7,
803 MOD_0FB2,
804 MOD_0FB4,
805 MOD_0FB5,
a8484f96 806 MOD_0FC3,
963f3586
IT
807 MOD_0FC7_REG_3,
808 MOD_0FC7_REG_4,
809 MOD_0FC7_REG_5,
3873ba12
L
810 MOD_0FC7_REG_6,
811 MOD_0FC7_REG_7,
812 MOD_0FD7,
813 MOD_0FE7_PREFIX_2,
814 MOD_0FF0_PREFIX_3,
815 MOD_0F382A_PREFIX_2,
816 MOD_62_32BIT,
817 MOD_C4_32BIT,
818 MOD_C5_32BIT,
592a252b
L
819 MOD_VEX_0F12_PREFIX_0,
820 MOD_VEX_0F13,
821 MOD_VEX_0F16_PREFIX_0,
822 MOD_VEX_0F17,
823 MOD_VEX_0F2B,
ab4e4ed5
AF
824 MOD_VEX_W_0_0F41_P_0_LEN_1,
825 MOD_VEX_W_1_0F41_P_0_LEN_1,
826 MOD_VEX_W_0_0F41_P_2_LEN_1,
827 MOD_VEX_W_1_0F41_P_2_LEN_1,
828 MOD_VEX_W_0_0F42_P_0_LEN_1,
829 MOD_VEX_W_1_0F42_P_0_LEN_1,
830 MOD_VEX_W_0_0F42_P_2_LEN_1,
831 MOD_VEX_W_1_0F42_P_2_LEN_1,
832 MOD_VEX_W_0_0F44_P_0_LEN_1,
833 MOD_VEX_W_1_0F44_P_0_LEN_1,
834 MOD_VEX_W_0_0F44_P_2_LEN_1,
835 MOD_VEX_W_1_0F44_P_2_LEN_1,
836 MOD_VEX_W_0_0F45_P_0_LEN_1,
837 MOD_VEX_W_1_0F45_P_0_LEN_1,
838 MOD_VEX_W_0_0F45_P_2_LEN_1,
839 MOD_VEX_W_1_0F45_P_2_LEN_1,
840 MOD_VEX_W_0_0F46_P_0_LEN_1,
841 MOD_VEX_W_1_0F46_P_0_LEN_1,
842 MOD_VEX_W_0_0F46_P_2_LEN_1,
843 MOD_VEX_W_1_0F46_P_2_LEN_1,
844 MOD_VEX_W_0_0F47_P_0_LEN_1,
845 MOD_VEX_W_1_0F47_P_0_LEN_1,
846 MOD_VEX_W_0_0F47_P_2_LEN_1,
847 MOD_VEX_W_1_0F47_P_2_LEN_1,
848 MOD_VEX_W_0_0F4A_P_0_LEN_1,
849 MOD_VEX_W_1_0F4A_P_0_LEN_1,
850 MOD_VEX_W_0_0F4A_P_2_LEN_1,
851 MOD_VEX_W_1_0F4A_P_2_LEN_1,
852 MOD_VEX_W_0_0F4B_P_0_LEN_1,
853 MOD_VEX_W_1_0F4B_P_0_LEN_1,
854 MOD_VEX_W_0_0F4B_P_2_LEN_1,
592a252b
L
855 MOD_VEX_0F50,
856 MOD_VEX_0F71_REG_2,
857 MOD_VEX_0F71_REG_4,
858 MOD_VEX_0F71_REG_6,
859 MOD_VEX_0F72_REG_2,
860 MOD_VEX_0F72_REG_4,
861 MOD_VEX_0F72_REG_6,
862 MOD_VEX_0F73_REG_2,
863 MOD_VEX_0F73_REG_3,
864 MOD_VEX_0F73_REG_6,
865 MOD_VEX_0F73_REG_7,
ab4e4ed5
AF
866 MOD_VEX_W_0_0F91_P_0_LEN_0,
867 MOD_VEX_W_1_0F91_P_0_LEN_0,
868 MOD_VEX_W_0_0F91_P_2_LEN_0,
869 MOD_VEX_W_1_0F91_P_2_LEN_0,
870 MOD_VEX_W_0_0F92_P_0_LEN_0,
871 MOD_VEX_W_0_0F92_P_2_LEN_0,
872 MOD_VEX_W_0_0F92_P_3_LEN_0,
873 MOD_VEX_W_1_0F92_P_3_LEN_0,
874 MOD_VEX_W_0_0F93_P_0_LEN_0,
875 MOD_VEX_W_0_0F93_P_2_LEN_0,
876 MOD_VEX_W_0_0F93_P_3_LEN_0,
877 MOD_VEX_W_1_0F93_P_3_LEN_0,
878 MOD_VEX_W_0_0F98_P_0_LEN_0,
879 MOD_VEX_W_1_0F98_P_0_LEN_0,
880 MOD_VEX_W_0_0F98_P_2_LEN_0,
881 MOD_VEX_W_1_0F98_P_2_LEN_0,
882 MOD_VEX_W_0_0F99_P_0_LEN_0,
883 MOD_VEX_W_1_0F99_P_0_LEN_0,
884 MOD_VEX_W_0_0F99_P_2_LEN_0,
885 MOD_VEX_W_1_0F99_P_2_LEN_0,
592a252b
L
886 MOD_VEX_0FAE_REG_2,
887 MOD_VEX_0FAE_REG_3,
888 MOD_VEX_0FD7_PREFIX_2,
889 MOD_VEX_0FE7_PREFIX_2,
890 MOD_VEX_0FF0_PREFIX_3,
592a252b
L
891 MOD_VEX_0F381A_PREFIX_2,
892 MOD_VEX_0F382A_PREFIX_2,
893 MOD_VEX_0F382C_PREFIX_2,
894 MOD_VEX_0F382D_PREFIX_2,
895 MOD_VEX_0F382E_PREFIX_2,
6c30d220
L
896 MOD_VEX_0F382F_PREFIX_2,
897 MOD_VEX_0F385A_PREFIX_2,
898 MOD_VEX_0F388C_PREFIX_2,
899 MOD_VEX_0F388E_PREFIX_2,
ab4e4ed5
AF
900 MOD_VEX_W_0_0F3A30_P_2_LEN_0,
901 MOD_VEX_W_1_0F3A30_P_2_LEN_0,
902 MOD_VEX_W_0_0F3A31_P_2_LEN_0,
903 MOD_VEX_W_1_0F3A31_P_2_LEN_0,
904 MOD_VEX_W_0_0F3A32_P_2_LEN_0,
905 MOD_VEX_W_1_0F3A32_P_2_LEN_0,
906 MOD_VEX_W_0_0F3A33_P_2_LEN_0,
907 MOD_VEX_W_1_0F3A33_P_2_LEN_0,
43234a1e
L
908
909 MOD_EVEX_0F10_PREFIX_1,
910 MOD_EVEX_0F10_PREFIX_3,
911 MOD_EVEX_0F11_PREFIX_1,
912 MOD_EVEX_0F11_PREFIX_3,
913 MOD_EVEX_0F12_PREFIX_0,
914 MOD_EVEX_0F16_PREFIX_0,
915 MOD_EVEX_0F38C6_REG_1,
916 MOD_EVEX_0F38C6_REG_2,
917 MOD_EVEX_0F38C6_REG_5,
918 MOD_EVEX_0F38C6_REG_6,
919 MOD_EVEX_0F38C7_REG_1,
920 MOD_EVEX_0F38C7_REG_2,
921 MOD_EVEX_0F38C7_REG_5,
922 MOD_EVEX_0F38C7_REG_6
51e7da1b 923};
1ceb70f8 924
51e7da1b
L
925enum
926{
42164a71
L
927 RM_C6_REG_7 = 0,
928 RM_C7_REG_7,
929 RM_0F01_REG_0,
3873ba12
L
930 RM_0F01_REG_1,
931 RM_0F01_REG_2,
932 RM_0F01_REG_3,
8eab4136 933 RM_0F01_REG_5,
3873ba12
L
934 RM_0F01_REG_7,
935 RM_0FAE_REG_5,
936 RM_0FAE_REG_6,
937 RM_0FAE_REG_7
51e7da1b 938};
1ceb70f8 939
51e7da1b
L
940enum
941{
942 PREFIX_90 = 0,
3873ba12
L
943 PREFIX_0F10,
944 PREFIX_0F11,
945 PREFIX_0F12,
946 PREFIX_0F16,
7e8b059b
L
947 PREFIX_0F1A,
948 PREFIX_0F1B,
3873ba12
L
949 PREFIX_0F2A,
950 PREFIX_0F2B,
951 PREFIX_0F2C,
952 PREFIX_0F2D,
953 PREFIX_0F2E,
954 PREFIX_0F2F,
955 PREFIX_0F51,
956 PREFIX_0F52,
957 PREFIX_0F53,
958 PREFIX_0F58,
959 PREFIX_0F59,
960 PREFIX_0F5A,
961 PREFIX_0F5B,
962 PREFIX_0F5C,
963 PREFIX_0F5D,
964 PREFIX_0F5E,
965 PREFIX_0F5F,
966 PREFIX_0F60,
967 PREFIX_0F61,
968 PREFIX_0F62,
969 PREFIX_0F6C,
970 PREFIX_0F6D,
971 PREFIX_0F6F,
972 PREFIX_0F70,
973 PREFIX_0F73_REG_3,
974 PREFIX_0F73_REG_7,
975 PREFIX_0F78,
976 PREFIX_0F79,
977 PREFIX_0F7C,
978 PREFIX_0F7D,
979 PREFIX_0F7E,
980 PREFIX_0F7F,
c7b8aa3a
L
981 PREFIX_0FAE_REG_0,
982 PREFIX_0FAE_REG_1,
983 PREFIX_0FAE_REG_2,
984 PREFIX_0FAE_REG_3,
c5e7287a 985 PREFIX_0FAE_REG_6,
963f3586 986 PREFIX_0FAE_REG_7,
9d8596f0 987 PREFIX_RM_0_0FAE_REG_7,
3873ba12 988 PREFIX_0FB8,
f12dc422 989 PREFIX_0FBC,
3873ba12
L
990 PREFIX_0FBD,
991 PREFIX_0FC2,
a8484f96 992 PREFIX_MOD_0_0FC3,
f24bcbaa
L
993 PREFIX_MOD_0_0FC7_REG_6,
994 PREFIX_MOD_3_0FC7_REG_6,
995 PREFIX_MOD_3_0FC7_REG_7,
3873ba12
L
996 PREFIX_0FD0,
997 PREFIX_0FD6,
998 PREFIX_0FE6,
999 PREFIX_0FE7,
1000 PREFIX_0FF0,
1001 PREFIX_0FF7,
1002 PREFIX_0F3810,
1003 PREFIX_0F3814,
1004 PREFIX_0F3815,
1005 PREFIX_0F3817,
1006 PREFIX_0F3820,
1007 PREFIX_0F3821,
1008 PREFIX_0F3822,
1009 PREFIX_0F3823,
1010 PREFIX_0F3824,
1011 PREFIX_0F3825,
1012 PREFIX_0F3828,
1013 PREFIX_0F3829,
1014 PREFIX_0F382A,
1015 PREFIX_0F382B,
1016 PREFIX_0F3830,
1017 PREFIX_0F3831,
1018 PREFIX_0F3832,
1019 PREFIX_0F3833,
1020 PREFIX_0F3834,
1021 PREFIX_0F3835,
1022 PREFIX_0F3837,
1023 PREFIX_0F3838,
1024 PREFIX_0F3839,
1025 PREFIX_0F383A,
1026 PREFIX_0F383B,
1027 PREFIX_0F383C,
1028 PREFIX_0F383D,
1029 PREFIX_0F383E,
1030 PREFIX_0F383F,
1031 PREFIX_0F3840,
1032 PREFIX_0F3841,
1033 PREFIX_0F3880,
1034 PREFIX_0F3881,
6c30d220 1035 PREFIX_0F3882,
a0046408
L
1036 PREFIX_0F38C8,
1037 PREFIX_0F38C9,
1038 PREFIX_0F38CA,
1039 PREFIX_0F38CB,
1040 PREFIX_0F38CC,
1041 PREFIX_0F38CD,
3873ba12
L
1042 PREFIX_0F38DB,
1043 PREFIX_0F38DC,
1044 PREFIX_0F38DD,
1045 PREFIX_0F38DE,
1046 PREFIX_0F38DF,
1047 PREFIX_0F38F0,
1048 PREFIX_0F38F1,
e2e1fcde 1049 PREFIX_0F38F6,
3873ba12
L
1050 PREFIX_0F3A08,
1051 PREFIX_0F3A09,
1052 PREFIX_0F3A0A,
1053 PREFIX_0F3A0B,
1054 PREFIX_0F3A0C,
1055 PREFIX_0F3A0D,
1056 PREFIX_0F3A0E,
1057 PREFIX_0F3A14,
1058 PREFIX_0F3A15,
1059 PREFIX_0F3A16,
1060 PREFIX_0F3A17,
1061 PREFIX_0F3A20,
1062 PREFIX_0F3A21,
1063 PREFIX_0F3A22,
1064 PREFIX_0F3A40,
1065 PREFIX_0F3A41,
1066 PREFIX_0F3A42,
1067 PREFIX_0F3A44,
1068 PREFIX_0F3A60,
1069 PREFIX_0F3A61,
1070 PREFIX_0F3A62,
1071 PREFIX_0F3A63,
a0046408 1072 PREFIX_0F3ACC,
3873ba12 1073 PREFIX_0F3ADF,
592a252b
L
1074 PREFIX_VEX_0F10,
1075 PREFIX_VEX_0F11,
1076 PREFIX_VEX_0F12,
1077 PREFIX_VEX_0F16,
1078 PREFIX_VEX_0F2A,
1079 PREFIX_VEX_0F2C,
1080 PREFIX_VEX_0F2D,
1081 PREFIX_VEX_0F2E,
1082 PREFIX_VEX_0F2F,
43234a1e
L
1083 PREFIX_VEX_0F41,
1084 PREFIX_VEX_0F42,
1085 PREFIX_VEX_0F44,
1086 PREFIX_VEX_0F45,
1087 PREFIX_VEX_0F46,
1088 PREFIX_VEX_0F47,
1ba585e8 1089 PREFIX_VEX_0F4A,
43234a1e 1090 PREFIX_VEX_0F4B,
592a252b
L
1091 PREFIX_VEX_0F51,
1092 PREFIX_VEX_0F52,
1093 PREFIX_VEX_0F53,
1094 PREFIX_VEX_0F58,
1095 PREFIX_VEX_0F59,
1096 PREFIX_VEX_0F5A,
1097 PREFIX_VEX_0F5B,
1098 PREFIX_VEX_0F5C,
1099 PREFIX_VEX_0F5D,
1100 PREFIX_VEX_0F5E,
1101 PREFIX_VEX_0F5F,
1102 PREFIX_VEX_0F60,
1103 PREFIX_VEX_0F61,
1104 PREFIX_VEX_0F62,
1105 PREFIX_VEX_0F63,
1106 PREFIX_VEX_0F64,
1107 PREFIX_VEX_0F65,
1108 PREFIX_VEX_0F66,
1109 PREFIX_VEX_0F67,
1110 PREFIX_VEX_0F68,
1111 PREFIX_VEX_0F69,
1112 PREFIX_VEX_0F6A,
1113 PREFIX_VEX_0F6B,
1114 PREFIX_VEX_0F6C,
1115 PREFIX_VEX_0F6D,
1116 PREFIX_VEX_0F6E,
1117 PREFIX_VEX_0F6F,
1118 PREFIX_VEX_0F70,
1119 PREFIX_VEX_0F71_REG_2,
1120 PREFIX_VEX_0F71_REG_4,
1121 PREFIX_VEX_0F71_REG_6,
1122 PREFIX_VEX_0F72_REG_2,
1123 PREFIX_VEX_0F72_REG_4,
1124 PREFIX_VEX_0F72_REG_6,
1125 PREFIX_VEX_0F73_REG_2,
1126 PREFIX_VEX_0F73_REG_3,
1127 PREFIX_VEX_0F73_REG_6,
1128 PREFIX_VEX_0F73_REG_7,
1129 PREFIX_VEX_0F74,
1130 PREFIX_VEX_0F75,
1131 PREFIX_VEX_0F76,
1132 PREFIX_VEX_0F77,
1133 PREFIX_VEX_0F7C,
1134 PREFIX_VEX_0F7D,
1135 PREFIX_VEX_0F7E,
1136 PREFIX_VEX_0F7F,
43234a1e
L
1137 PREFIX_VEX_0F90,
1138 PREFIX_VEX_0F91,
1139 PREFIX_VEX_0F92,
1140 PREFIX_VEX_0F93,
1141 PREFIX_VEX_0F98,
1ba585e8 1142 PREFIX_VEX_0F99,
592a252b
L
1143 PREFIX_VEX_0FC2,
1144 PREFIX_VEX_0FC4,
1145 PREFIX_VEX_0FC5,
1146 PREFIX_VEX_0FD0,
1147 PREFIX_VEX_0FD1,
1148 PREFIX_VEX_0FD2,
1149 PREFIX_VEX_0FD3,
1150 PREFIX_VEX_0FD4,
1151 PREFIX_VEX_0FD5,
1152 PREFIX_VEX_0FD6,
1153 PREFIX_VEX_0FD7,
1154 PREFIX_VEX_0FD8,
1155 PREFIX_VEX_0FD9,
1156 PREFIX_VEX_0FDA,
1157 PREFIX_VEX_0FDB,
1158 PREFIX_VEX_0FDC,
1159 PREFIX_VEX_0FDD,
1160 PREFIX_VEX_0FDE,
1161 PREFIX_VEX_0FDF,
1162 PREFIX_VEX_0FE0,
1163 PREFIX_VEX_0FE1,
1164 PREFIX_VEX_0FE2,
1165 PREFIX_VEX_0FE3,
1166 PREFIX_VEX_0FE4,
1167 PREFIX_VEX_0FE5,
1168 PREFIX_VEX_0FE6,
1169 PREFIX_VEX_0FE7,
1170 PREFIX_VEX_0FE8,
1171 PREFIX_VEX_0FE9,
1172 PREFIX_VEX_0FEA,
1173 PREFIX_VEX_0FEB,
1174 PREFIX_VEX_0FEC,
1175 PREFIX_VEX_0FED,
1176 PREFIX_VEX_0FEE,
1177 PREFIX_VEX_0FEF,
1178 PREFIX_VEX_0FF0,
1179 PREFIX_VEX_0FF1,
1180 PREFIX_VEX_0FF2,
1181 PREFIX_VEX_0FF3,
1182 PREFIX_VEX_0FF4,
1183 PREFIX_VEX_0FF5,
1184 PREFIX_VEX_0FF6,
1185 PREFIX_VEX_0FF7,
1186 PREFIX_VEX_0FF8,
1187 PREFIX_VEX_0FF9,
1188 PREFIX_VEX_0FFA,
1189 PREFIX_VEX_0FFB,
1190 PREFIX_VEX_0FFC,
1191 PREFIX_VEX_0FFD,
1192 PREFIX_VEX_0FFE,
1193 PREFIX_VEX_0F3800,
1194 PREFIX_VEX_0F3801,
1195 PREFIX_VEX_0F3802,
1196 PREFIX_VEX_0F3803,
1197 PREFIX_VEX_0F3804,
1198 PREFIX_VEX_0F3805,
1199 PREFIX_VEX_0F3806,
1200 PREFIX_VEX_0F3807,
1201 PREFIX_VEX_0F3808,
1202 PREFIX_VEX_0F3809,
1203 PREFIX_VEX_0F380A,
1204 PREFIX_VEX_0F380B,
1205 PREFIX_VEX_0F380C,
1206 PREFIX_VEX_0F380D,
1207 PREFIX_VEX_0F380E,
1208 PREFIX_VEX_0F380F,
1209 PREFIX_VEX_0F3813,
6c30d220 1210 PREFIX_VEX_0F3816,
592a252b
L
1211 PREFIX_VEX_0F3817,
1212 PREFIX_VEX_0F3818,
1213 PREFIX_VEX_0F3819,
1214 PREFIX_VEX_0F381A,
1215 PREFIX_VEX_0F381C,
1216 PREFIX_VEX_0F381D,
1217 PREFIX_VEX_0F381E,
1218 PREFIX_VEX_0F3820,
1219 PREFIX_VEX_0F3821,
1220 PREFIX_VEX_0F3822,
1221 PREFIX_VEX_0F3823,
1222 PREFIX_VEX_0F3824,
1223 PREFIX_VEX_0F3825,
1224 PREFIX_VEX_0F3828,
1225 PREFIX_VEX_0F3829,
1226 PREFIX_VEX_0F382A,
1227 PREFIX_VEX_0F382B,
1228 PREFIX_VEX_0F382C,
1229 PREFIX_VEX_0F382D,
1230 PREFIX_VEX_0F382E,
1231 PREFIX_VEX_0F382F,
1232 PREFIX_VEX_0F3830,
1233 PREFIX_VEX_0F3831,
1234 PREFIX_VEX_0F3832,
1235 PREFIX_VEX_0F3833,
1236 PREFIX_VEX_0F3834,
1237 PREFIX_VEX_0F3835,
6c30d220 1238 PREFIX_VEX_0F3836,
592a252b
L
1239 PREFIX_VEX_0F3837,
1240 PREFIX_VEX_0F3838,
1241 PREFIX_VEX_0F3839,
1242 PREFIX_VEX_0F383A,
1243 PREFIX_VEX_0F383B,
1244 PREFIX_VEX_0F383C,
1245 PREFIX_VEX_0F383D,
1246 PREFIX_VEX_0F383E,
1247 PREFIX_VEX_0F383F,
1248 PREFIX_VEX_0F3840,
1249 PREFIX_VEX_0F3841,
6c30d220
L
1250 PREFIX_VEX_0F3845,
1251 PREFIX_VEX_0F3846,
1252 PREFIX_VEX_0F3847,
1253 PREFIX_VEX_0F3858,
1254 PREFIX_VEX_0F3859,
1255 PREFIX_VEX_0F385A,
1256 PREFIX_VEX_0F3878,
1257 PREFIX_VEX_0F3879,
1258 PREFIX_VEX_0F388C,
1259 PREFIX_VEX_0F388E,
1260 PREFIX_VEX_0F3890,
1261 PREFIX_VEX_0F3891,
1262 PREFIX_VEX_0F3892,
1263 PREFIX_VEX_0F3893,
592a252b
L
1264 PREFIX_VEX_0F3896,
1265 PREFIX_VEX_0F3897,
1266 PREFIX_VEX_0F3898,
1267 PREFIX_VEX_0F3899,
1268 PREFIX_VEX_0F389A,
1269 PREFIX_VEX_0F389B,
1270 PREFIX_VEX_0F389C,
1271 PREFIX_VEX_0F389D,
1272 PREFIX_VEX_0F389E,
1273 PREFIX_VEX_0F389F,
1274 PREFIX_VEX_0F38A6,
1275 PREFIX_VEX_0F38A7,
1276 PREFIX_VEX_0F38A8,
1277 PREFIX_VEX_0F38A9,
1278 PREFIX_VEX_0F38AA,
1279 PREFIX_VEX_0F38AB,
1280 PREFIX_VEX_0F38AC,
1281 PREFIX_VEX_0F38AD,
1282 PREFIX_VEX_0F38AE,
1283 PREFIX_VEX_0F38AF,
1284 PREFIX_VEX_0F38B6,
1285 PREFIX_VEX_0F38B7,
1286 PREFIX_VEX_0F38B8,
1287 PREFIX_VEX_0F38B9,
1288 PREFIX_VEX_0F38BA,
1289 PREFIX_VEX_0F38BB,
1290 PREFIX_VEX_0F38BC,
1291 PREFIX_VEX_0F38BD,
1292 PREFIX_VEX_0F38BE,
1293 PREFIX_VEX_0F38BF,
1294 PREFIX_VEX_0F38DB,
1295 PREFIX_VEX_0F38DC,
1296 PREFIX_VEX_0F38DD,
1297 PREFIX_VEX_0F38DE,
1298 PREFIX_VEX_0F38DF,
f12dc422
L
1299 PREFIX_VEX_0F38F2,
1300 PREFIX_VEX_0F38F3_REG_1,
1301 PREFIX_VEX_0F38F3_REG_2,
1302 PREFIX_VEX_0F38F3_REG_3,
6c30d220
L
1303 PREFIX_VEX_0F38F5,
1304 PREFIX_VEX_0F38F6,
f12dc422 1305 PREFIX_VEX_0F38F7,
6c30d220
L
1306 PREFIX_VEX_0F3A00,
1307 PREFIX_VEX_0F3A01,
1308 PREFIX_VEX_0F3A02,
592a252b
L
1309 PREFIX_VEX_0F3A04,
1310 PREFIX_VEX_0F3A05,
1311 PREFIX_VEX_0F3A06,
1312 PREFIX_VEX_0F3A08,
1313 PREFIX_VEX_0F3A09,
1314 PREFIX_VEX_0F3A0A,
1315 PREFIX_VEX_0F3A0B,
1316 PREFIX_VEX_0F3A0C,
1317 PREFIX_VEX_0F3A0D,
1318 PREFIX_VEX_0F3A0E,
1319 PREFIX_VEX_0F3A0F,
1320 PREFIX_VEX_0F3A14,
1321 PREFIX_VEX_0F3A15,
1322 PREFIX_VEX_0F3A16,
1323 PREFIX_VEX_0F3A17,
1324 PREFIX_VEX_0F3A18,
1325 PREFIX_VEX_0F3A19,
1326 PREFIX_VEX_0F3A1D,
1327 PREFIX_VEX_0F3A20,
1328 PREFIX_VEX_0F3A21,
1329 PREFIX_VEX_0F3A22,
43234a1e 1330 PREFIX_VEX_0F3A30,
1ba585e8 1331 PREFIX_VEX_0F3A31,
43234a1e 1332 PREFIX_VEX_0F3A32,
1ba585e8 1333 PREFIX_VEX_0F3A33,
6c30d220
L
1334 PREFIX_VEX_0F3A38,
1335 PREFIX_VEX_0F3A39,
592a252b
L
1336 PREFIX_VEX_0F3A40,
1337 PREFIX_VEX_0F3A41,
1338 PREFIX_VEX_0F3A42,
1339 PREFIX_VEX_0F3A44,
6c30d220 1340 PREFIX_VEX_0F3A46,
592a252b
L
1341 PREFIX_VEX_0F3A48,
1342 PREFIX_VEX_0F3A49,
1343 PREFIX_VEX_0F3A4A,
1344 PREFIX_VEX_0F3A4B,
1345 PREFIX_VEX_0F3A4C,
1346 PREFIX_VEX_0F3A5C,
1347 PREFIX_VEX_0F3A5D,
1348 PREFIX_VEX_0F3A5E,
1349 PREFIX_VEX_0F3A5F,
1350 PREFIX_VEX_0F3A60,
1351 PREFIX_VEX_0F3A61,
1352 PREFIX_VEX_0F3A62,
1353 PREFIX_VEX_0F3A63,
1354 PREFIX_VEX_0F3A68,
1355 PREFIX_VEX_0F3A69,
1356 PREFIX_VEX_0F3A6A,
1357 PREFIX_VEX_0F3A6B,
1358 PREFIX_VEX_0F3A6C,
1359 PREFIX_VEX_0F3A6D,
1360 PREFIX_VEX_0F3A6E,
1361 PREFIX_VEX_0F3A6F,
1362 PREFIX_VEX_0F3A78,
1363 PREFIX_VEX_0F3A79,
1364 PREFIX_VEX_0F3A7A,
1365 PREFIX_VEX_0F3A7B,
1366 PREFIX_VEX_0F3A7C,
1367 PREFIX_VEX_0F3A7D,
1368 PREFIX_VEX_0F3A7E,
1369 PREFIX_VEX_0F3A7F,
6c30d220 1370 PREFIX_VEX_0F3ADF,
43234a1e
L
1371 PREFIX_VEX_0F3AF0,
1372
1373 PREFIX_EVEX_0F10,
1374 PREFIX_EVEX_0F11,
1375 PREFIX_EVEX_0F12,
1376 PREFIX_EVEX_0F13,
1377 PREFIX_EVEX_0F14,
1378 PREFIX_EVEX_0F15,
1379 PREFIX_EVEX_0F16,
1380 PREFIX_EVEX_0F17,
1381 PREFIX_EVEX_0F28,
1382 PREFIX_EVEX_0F29,
1383 PREFIX_EVEX_0F2A,
1384 PREFIX_EVEX_0F2B,
1385 PREFIX_EVEX_0F2C,
1386 PREFIX_EVEX_0F2D,
1387 PREFIX_EVEX_0F2E,
1388 PREFIX_EVEX_0F2F,
1389 PREFIX_EVEX_0F51,
90a915bf
IT
1390 PREFIX_EVEX_0F54,
1391 PREFIX_EVEX_0F55,
1392 PREFIX_EVEX_0F56,
1393 PREFIX_EVEX_0F57,
43234a1e
L
1394 PREFIX_EVEX_0F58,
1395 PREFIX_EVEX_0F59,
1396 PREFIX_EVEX_0F5A,
1397 PREFIX_EVEX_0F5B,
1398 PREFIX_EVEX_0F5C,
1399 PREFIX_EVEX_0F5D,
1400 PREFIX_EVEX_0F5E,
1401 PREFIX_EVEX_0F5F,
1ba585e8
IT
1402 PREFIX_EVEX_0F60,
1403 PREFIX_EVEX_0F61,
43234a1e 1404 PREFIX_EVEX_0F62,
1ba585e8
IT
1405 PREFIX_EVEX_0F63,
1406 PREFIX_EVEX_0F64,
1407 PREFIX_EVEX_0F65,
43234a1e 1408 PREFIX_EVEX_0F66,
1ba585e8
IT
1409 PREFIX_EVEX_0F67,
1410 PREFIX_EVEX_0F68,
1411 PREFIX_EVEX_0F69,
43234a1e 1412 PREFIX_EVEX_0F6A,
1ba585e8 1413 PREFIX_EVEX_0F6B,
43234a1e
L
1414 PREFIX_EVEX_0F6C,
1415 PREFIX_EVEX_0F6D,
1416 PREFIX_EVEX_0F6E,
1417 PREFIX_EVEX_0F6F,
1418 PREFIX_EVEX_0F70,
1ba585e8
IT
1419 PREFIX_EVEX_0F71_REG_2,
1420 PREFIX_EVEX_0F71_REG_4,
1421 PREFIX_EVEX_0F71_REG_6,
43234a1e
L
1422 PREFIX_EVEX_0F72_REG_0,
1423 PREFIX_EVEX_0F72_REG_1,
1424 PREFIX_EVEX_0F72_REG_2,
1425 PREFIX_EVEX_0F72_REG_4,
1426 PREFIX_EVEX_0F72_REG_6,
1427 PREFIX_EVEX_0F73_REG_2,
1ba585e8 1428 PREFIX_EVEX_0F73_REG_3,
43234a1e 1429 PREFIX_EVEX_0F73_REG_6,
1ba585e8
IT
1430 PREFIX_EVEX_0F73_REG_7,
1431 PREFIX_EVEX_0F74,
1432 PREFIX_EVEX_0F75,
43234a1e
L
1433 PREFIX_EVEX_0F76,
1434 PREFIX_EVEX_0F78,
1435 PREFIX_EVEX_0F79,
1436 PREFIX_EVEX_0F7A,
1437 PREFIX_EVEX_0F7B,
1438 PREFIX_EVEX_0F7E,
1439 PREFIX_EVEX_0F7F,
1440 PREFIX_EVEX_0FC2,
1ba585e8
IT
1441 PREFIX_EVEX_0FC4,
1442 PREFIX_EVEX_0FC5,
43234a1e 1443 PREFIX_EVEX_0FC6,
1ba585e8 1444 PREFIX_EVEX_0FD1,
43234a1e
L
1445 PREFIX_EVEX_0FD2,
1446 PREFIX_EVEX_0FD3,
1447 PREFIX_EVEX_0FD4,
1ba585e8 1448 PREFIX_EVEX_0FD5,
43234a1e 1449 PREFIX_EVEX_0FD6,
1ba585e8
IT
1450 PREFIX_EVEX_0FD8,
1451 PREFIX_EVEX_0FD9,
1452 PREFIX_EVEX_0FDA,
43234a1e 1453 PREFIX_EVEX_0FDB,
1ba585e8
IT
1454 PREFIX_EVEX_0FDC,
1455 PREFIX_EVEX_0FDD,
1456 PREFIX_EVEX_0FDE,
43234a1e 1457 PREFIX_EVEX_0FDF,
1ba585e8
IT
1458 PREFIX_EVEX_0FE0,
1459 PREFIX_EVEX_0FE1,
43234a1e 1460 PREFIX_EVEX_0FE2,
1ba585e8
IT
1461 PREFIX_EVEX_0FE3,
1462 PREFIX_EVEX_0FE4,
1463 PREFIX_EVEX_0FE5,
43234a1e
L
1464 PREFIX_EVEX_0FE6,
1465 PREFIX_EVEX_0FE7,
1ba585e8
IT
1466 PREFIX_EVEX_0FE8,
1467 PREFIX_EVEX_0FE9,
1468 PREFIX_EVEX_0FEA,
43234a1e 1469 PREFIX_EVEX_0FEB,
1ba585e8
IT
1470 PREFIX_EVEX_0FEC,
1471 PREFIX_EVEX_0FED,
1472 PREFIX_EVEX_0FEE,
43234a1e 1473 PREFIX_EVEX_0FEF,
1ba585e8 1474 PREFIX_EVEX_0FF1,
43234a1e
L
1475 PREFIX_EVEX_0FF2,
1476 PREFIX_EVEX_0FF3,
1477 PREFIX_EVEX_0FF4,
1ba585e8
IT
1478 PREFIX_EVEX_0FF5,
1479 PREFIX_EVEX_0FF6,
1480 PREFIX_EVEX_0FF8,
1481 PREFIX_EVEX_0FF9,
43234a1e
L
1482 PREFIX_EVEX_0FFA,
1483 PREFIX_EVEX_0FFB,
1ba585e8
IT
1484 PREFIX_EVEX_0FFC,
1485 PREFIX_EVEX_0FFD,
43234a1e 1486 PREFIX_EVEX_0FFE,
1ba585e8
IT
1487 PREFIX_EVEX_0F3800,
1488 PREFIX_EVEX_0F3804,
1489 PREFIX_EVEX_0F380B,
43234a1e
L
1490 PREFIX_EVEX_0F380C,
1491 PREFIX_EVEX_0F380D,
1ba585e8 1492 PREFIX_EVEX_0F3810,
43234a1e
L
1493 PREFIX_EVEX_0F3811,
1494 PREFIX_EVEX_0F3812,
1495 PREFIX_EVEX_0F3813,
1496 PREFIX_EVEX_0F3814,
1497 PREFIX_EVEX_0F3815,
1498 PREFIX_EVEX_0F3816,
1499 PREFIX_EVEX_0F3818,
1500 PREFIX_EVEX_0F3819,
1501 PREFIX_EVEX_0F381A,
1502 PREFIX_EVEX_0F381B,
1ba585e8
IT
1503 PREFIX_EVEX_0F381C,
1504 PREFIX_EVEX_0F381D,
43234a1e
L
1505 PREFIX_EVEX_0F381E,
1506 PREFIX_EVEX_0F381F,
1ba585e8 1507 PREFIX_EVEX_0F3820,
43234a1e
L
1508 PREFIX_EVEX_0F3821,
1509 PREFIX_EVEX_0F3822,
1510 PREFIX_EVEX_0F3823,
1511 PREFIX_EVEX_0F3824,
1512 PREFIX_EVEX_0F3825,
1ba585e8 1513 PREFIX_EVEX_0F3826,
43234a1e
L
1514 PREFIX_EVEX_0F3827,
1515 PREFIX_EVEX_0F3828,
1516 PREFIX_EVEX_0F3829,
1517 PREFIX_EVEX_0F382A,
1ba585e8 1518 PREFIX_EVEX_0F382B,
43234a1e
L
1519 PREFIX_EVEX_0F382C,
1520 PREFIX_EVEX_0F382D,
1ba585e8 1521 PREFIX_EVEX_0F3830,
43234a1e
L
1522 PREFIX_EVEX_0F3831,
1523 PREFIX_EVEX_0F3832,
1524 PREFIX_EVEX_0F3833,
1525 PREFIX_EVEX_0F3834,
1526 PREFIX_EVEX_0F3835,
1527 PREFIX_EVEX_0F3836,
1528 PREFIX_EVEX_0F3837,
1ba585e8 1529 PREFIX_EVEX_0F3838,
43234a1e
L
1530 PREFIX_EVEX_0F3839,
1531 PREFIX_EVEX_0F383A,
1532 PREFIX_EVEX_0F383B,
1ba585e8 1533 PREFIX_EVEX_0F383C,
43234a1e 1534 PREFIX_EVEX_0F383D,
1ba585e8 1535 PREFIX_EVEX_0F383E,
43234a1e
L
1536 PREFIX_EVEX_0F383F,
1537 PREFIX_EVEX_0F3840,
1538 PREFIX_EVEX_0F3842,
1539 PREFIX_EVEX_0F3843,
1540 PREFIX_EVEX_0F3844,
1541 PREFIX_EVEX_0F3845,
1542 PREFIX_EVEX_0F3846,
1543 PREFIX_EVEX_0F3847,
1544 PREFIX_EVEX_0F384C,
1545 PREFIX_EVEX_0F384D,
1546 PREFIX_EVEX_0F384E,
1547 PREFIX_EVEX_0F384F,
1548 PREFIX_EVEX_0F3858,
1549 PREFIX_EVEX_0F3859,
1550 PREFIX_EVEX_0F385A,
1551 PREFIX_EVEX_0F385B,
1552 PREFIX_EVEX_0F3864,
1553 PREFIX_EVEX_0F3865,
1ba585e8
IT
1554 PREFIX_EVEX_0F3866,
1555 PREFIX_EVEX_0F3875,
43234a1e
L
1556 PREFIX_EVEX_0F3876,
1557 PREFIX_EVEX_0F3877,
1ba585e8
IT
1558 PREFIX_EVEX_0F3878,
1559 PREFIX_EVEX_0F3879,
1560 PREFIX_EVEX_0F387A,
1561 PREFIX_EVEX_0F387B,
43234a1e 1562 PREFIX_EVEX_0F387C,
1ba585e8 1563 PREFIX_EVEX_0F387D,
43234a1e
L
1564 PREFIX_EVEX_0F387E,
1565 PREFIX_EVEX_0F387F,
14f195c9 1566 PREFIX_EVEX_0F3883,
43234a1e
L
1567 PREFIX_EVEX_0F3888,
1568 PREFIX_EVEX_0F3889,
1569 PREFIX_EVEX_0F388A,
1570 PREFIX_EVEX_0F388B,
1ba585e8 1571 PREFIX_EVEX_0F388D,
43234a1e
L
1572 PREFIX_EVEX_0F3890,
1573 PREFIX_EVEX_0F3891,
1574 PREFIX_EVEX_0F3892,
1575 PREFIX_EVEX_0F3893,
1576 PREFIX_EVEX_0F3896,
1577 PREFIX_EVEX_0F3897,
1578 PREFIX_EVEX_0F3898,
1579 PREFIX_EVEX_0F3899,
1580 PREFIX_EVEX_0F389A,
1581 PREFIX_EVEX_0F389B,
1582 PREFIX_EVEX_0F389C,
1583 PREFIX_EVEX_0F389D,
1584 PREFIX_EVEX_0F389E,
1585 PREFIX_EVEX_0F389F,
1586 PREFIX_EVEX_0F38A0,
1587 PREFIX_EVEX_0F38A1,
1588 PREFIX_EVEX_0F38A2,
1589 PREFIX_EVEX_0F38A3,
1590 PREFIX_EVEX_0F38A6,
1591 PREFIX_EVEX_0F38A7,
1592 PREFIX_EVEX_0F38A8,
1593 PREFIX_EVEX_0F38A9,
1594 PREFIX_EVEX_0F38AA,
1595 PREFIX_EVEX_0F38AB,
1596 PREFIX_EVEX_0F38AC,
1597 PREFIX_EVEX_0F38AD,
1598 PREFIX_EVEX_0F38AE,
1599 PREFIX_EVEX_0F38AF,
2cc1b5aa
IT
1600 PREFIX_EVEX_0F38B4,
1601 PREFIX_EVEX_0F38B5,
43234a1e
L
1602 PREFIX_EVEX_0F38B6,
1603 PREFIX_EVEX_0F38B7,
1604 PREFIX_EVEX_0F38B8,
1605 PREFIX_EVEX_0F38B9,
1606 PREFIX_EVEX_0F38BA,
1607 PREFIX_EVEX_0F38BB,
1608 PREFIX_EVEX_0F38BC,
1609 PREFIX_EVEX_0F38BD,
1610 PREFIX_EVEX_0F38BE,
1611 PREFIX_EVEX_0F38BF,
1612 PREFIX_EVEX_0F38C4,
1613 PREFIX_EVEX_0F38C6_REG_1,
1614 PREFIX_EVEX_0F38C6_REG_2,
1615 PREFIX_EVEX_0F38C6_REG_5,
1616 PREFIX_EVEX_0F38C6_REG_6,
1617 PREFIX_EVEX_0F38C7_REG_1,
1618 PREFIX_EVEX_0F38C7_REG_2,
1619 PREFIX_EVEX_0F38C7_REG_5,
1620 PREFIX_EVEX_0F38C7_REG_6,
1621 PREFIX_EVEX_0F38C8,
1622 PREFIX_EVEX_0F38CA,
1623 PREFIX_EVEX_0F38CB,
1624 PREFIX_EVEX_0F38CC,
1625 PREFIX_EVEX_0F38CD,
1626
1627 PREFIX_EVEX_0F3A00,
1628 PREFIX_EVEX_0F3A01,
1629 PREFIX_EVEX_0F3A03,
1630 PREFIX_EVEX_0F3A04,
1631 PREFIX_EVEX_0F3A05,
1632 PREFIX_EVEX_0F3A08,
1633 PREFIX_EVEX_0F3A09,
1634 PREFIX_EVEX_0F3A0A,
1635 PREFIX_EVEX_0F3A0B,
1ba585e8
IT
1636 PREFIX_EVEX_0F3A0F,
1637 PREFIX_EVEX_0F3A14,
1638 PREFIX_EVEX_0F3A15,
90a915bf 1639 PREFIX_EVEX_0F3A16,
43234a1e
L
1640 PREFIX_EVEX_0F3A17,
1641 PREFIX_EVEX_0F3A18,
1642 PREFIX_EVEX_0F3A19,
1643 PREFIX_EVEX_0F3A1A,
1644 PREFIX_EVEX_0F3A1B,
1645 PREFIX_EVEX_0F3A1D,
1646 PREFIX_EVEX_0F3A1E,
1647 PREFIX_EVEX_0F3A1F,
1ba585e8 1648 PREFIX_EVEX_0F3A20,
43234a1e 1649 PREFIX_EVEX_0F3A21,
90a915bf 1650 PREFIX_EVEX_0F3A22,
43234a1e
L
1651 PREFIX_EVEX_0F3A23,
1652 PREFIX_EVEX_0F3A25,
1653 PREFIX_EVEX_0F3A26,
1654 PREFIX_EVEX_0F3A27,
1655 PREFIX_EVEX_0F3A38,
1656 PREFIX_EVEX_0F3A39,
1657 PREFIX_EVEX_0F3A3A,
1658 PREFIX_EVEX_0F3A3B,
1ba585e8
IT
1659 PREFIX_EVEX_0F3A3E,
1660 PREFIX_EVEX_0F3A3F,
1661 PREFIX_EVEX_0F3A42,
43234a1e 1662 PREFIX_EVEX_0F3A43,
90a915bf
IT
1663 PREFIX_EVEX_0F3A50,
1664 PREFIX_EVEX_0F3A51,
43234a1e 1665 PREFIX_EVEX_0F3A54,
90a915bf
IT
1666 PREFIX_EVEX_0F3A55,
1667 PREFIX_EVEX_0F3A56,
1668 PREFIX_EVEX_0F3A57,
1669 PREFIX_EVEX_0F3A66,
1670 PREFIX_EVEX_0F3A67
51e7da1b 1671};
4e7d34a6 1672
51e7da1b
L
1673enum
1674{
1675 X86_64_06 = 0,
3873ba12
L
1676 X86_64_07,
1677 X86_64_0D,
1678 X86_64_16,
1679 X86_64_17,
1680 X86_64_1E,
1681 X86_64_1F,
1682 X86_64_27,
1683 X86_64_2F,
1684 X86_64_37,
1685 X86_64_3F,
1686 X86_64_60,
1687 X86_64_61,
1688 X86_64_62,
1689 X86_64_63,
1690 X86_64_6D,
1691 X86_64_6F,
1692 X86_64_9A,
1693 X86_64_C4,
1694 X86_64_C5,
1695 X86_64_CE,
1696 X86_64_D4,
1697 X86_64_D5,
a72d2af2
L
1698 X86_64_E8,
1699 X86_64_E9,
3873ba12
L
1700 X86_64_EA,
1701 X86_64_0F01_REG_0,
1702 X86_64_0F01_REG_1,
1703 X86_64_0F01_REG_2,
1704 X86_64_0F01_REG_3
51e7da1b 1705};
4e7d34a6 1706
51e7da1b
L
1707enum
1708{
1709 THREE_BYTE_0F38 = 0,
3873ba12
L
1710 THREE_BYTE_0F3A,
1711 THREE_BYTE_0F7A
51e7da1b 1712};
4e7d34a6 1713
f88c9eb0
SP
1714enum
1715{
5dd85c99
SP
1716 XOP_08 = 0,
1717 XOP_09,
f88c9eb0
SP
1718 XOP_0A
1719};
1720
51e7da1b
L
1721enum
1722{
1723 VEX_0F = 0,
3873ba12
L
1724 VEX_0F38,
1725 VEX_0F3A
51e7da1b 1726};
c0f3af97 1727
43234a1e
L
1728enum
1729{
1730 EVEX_0F = 0,
1731 EVEX_0F38,
1732 EVEX_0F3A
1733};
1734
51e7da1b
L
1735enum
1736{
592a252b
L
1737 VEX_LEN_0F10_P_1 = 0,
1738 VEX_LEN_0F10_P_3,
1739 VEX_LEN_0F11_P_1,
1740 VEX_LEN_0F11_P_3,
1741 VEX_LEN_0F12_P_0_M_0,
1742 VEX_LEN_0F12_P_0_M_1,
1743 VEX_LEN_0F12_P_2,
1744 VEX_LEN_0F13_M_0,
1745 VEX_LEN_0F16_P_0_M_0,
1746 VEX_LEN_0F16_P_0_M_1,
1747 VEX_LEN_0F16_P_2,
1748 VEX_LEN_0F17_M_0,
1749 VEX_LEN_0F2A_P_1,
1750 VEX_LEN_0F2A_P_3,
1751 VEX_LEN_0F2C_P_1,
1752 VEX_LEN_0F2C_P_3,
1753 VEX_LEN_0F2D_P_1,
1754 VEX_LEN_0F2D_P_3,
1755 VEX_LEN_0F2E_P_0,
1756 VEX_LEN_0F2E_P_2,
1757 VEX_LEN_0F2F_P_0,
1758 VEX_LEN_0F2F_P_2,
43234a1e 1759 VEX_LEN_0F41_P_0,
1ba585e8 1760 VEX_LEN_0F41_P_2,
43234a1e 1761 VEX_LEN_0F42_P_0,
1ba585e8 1762 VEX_LEN_0F42_P_2,
43234a1e 1763 VEX_LEN_0F44_P_0,
1ba585e8 1764 VEX_LEN_0F44_P_2,
43234a1e 1765 VEX_LEN_0F45_P_0,
1ba585e8 1766 VEX_LEN_0F45_P_2,
43234a1e 1767 VEX_LEN_0F46_P_0,
1ba585e8 1768 VEX_LEN_0F46_P_2,
43234a1e 1769 VEX_LEN_0F47_P_0,
1ba585e8
IT
1770 VEX_LEN_0F47_P_2,
1771 VEX_LEN_0F4A_P_0,
1772 VEX_LEN_0F4A_P_2,
1773 VEX_LEN_0F4B_P_0,
43234a1e 1774 VEX_LEN_0F4B_P_2,
592a252b
L
1775 VEX_LEN_0F51_P_1,
1776 VEX_LEN_0F51_P_3,
1777 VEX_LEN_0F52_P_1,
1778 VEX_LEN_0F53_P_1,
1779 VEX_LEN_0F58_P_1,
1780 VEX_LEN_0F58_P_3,
1781 VEX_LEN_0F59_P_1,
1782 VEX_LEN_0F59_P_3,
1783 VEX_LEN_0F5A_P_1,
1784 VEX_LEN_0F5A_P_3,
1785 VEX_LEN_0F5C_P_1,
1786 VEX_LEN_0F5C_P_3,
1787 VEX_LEN_0F5D_P_1,
1788 VEX_LEN_0F5D_P_3,
1789 VEX_LEN_0F5E_P_1,
1790 VEX_LEN_0F5E_P_3,
1791 VEX_LEN_0F5F_P_1,
1792 VEX_LEN_0F5F_P_3,
592a252b 1793 VEX_LEN_0F6E_P_2,
592a252b
L
1794 VEX_LEN_0F7E_P_1,
1795 VEX_LEN_0F7E_P_2,
43234a1e 1796 VEX_LEN_0F90_P_0,
1ba585e8 1797 VEX_LEN_0F90_P_2,
43234a1e 1798 VEX_LEN_0F91_P_0,
1ba585e8 1799 VEX_LEN_0F91_P_2,
43234a1e 1800 VEX_LEN_0F92_P_0,
90a915bf 1801 VEX_LEN_0F92_P_2,
1ba585e8 1802 VEX_LEN_0F92_P_3,
43234a1e 1803 VEX_LEN_0F93_P_0,
90a915bf 1804 VEX_LEN_0F93_P_2,
1ba585e8 1805 VEX_LEN_0F93_P_3,
43234a1e 1806 VEX_LEN_0F98_P_0,
1ba585e8
IT
1807 VEX_LEN_0F98_P_2,
1808 VEX_LEN_0F99_P_0,
1809 VEX_LEN_0F99_P_2,
592a252b
L
1810 VEX_LEN_0FAE_R_2_M_0,
1811 VEX_LEN_0FAE_R_3_M_0,
1812 VEX_LEN_0FC2_P_1,
1813 VEX_LEN_0FC2_P_3,
1814 VEX_LEN_0FC4_P_2,
1815 VEX_LEN_0FC5_P_2,
592a252b 1816 VEX_LEN_0FD6_P_2,
592a252b 1817 VEX_LEN_0FF7_P_2,
6c30d220
L
1818 VEX_LEN_0F3816_P_2,
1819 VEX_LEN_0F3819_P_2,
592a252b 1820 VEX_LEN_0F381A_P_2_M_0,
6c30d220 1821 VEX_LEN_0F3836_P_2,
592a252b 1822 VEX_LEN_0F3841_P_2,
6c30d220 1823 VEX_LEN_0F385A_P_2_M_0,
592a252b
L
1824 VEX_LEN_0F38DB_P_2,
1825 VEX_LEN_0F38DC_P_2,
1826 VEX_LEN_0F38DD_P_2,
1827 VEX_LEN_0F38DE_P_2,
1828 VEX_LEN_0F38DF_P_2,
f12dc422
L
1829 VEX_LEN_0F38F2_P_0,
1830 VEX_LEN_0F38F3_R_1_P_0,
1831 VEX_LEN_0F38F3_R_2_P_0,
1832 VEX_LEN_0F38F3_R_3_P_0,
6c30d220
L
1833 VEX_LEN_0F38F5_P_0,
1834 VEX_LEN_0F38F5_P_1,
1835 VEX_LEN_0F38F5_P_3,
1836 VEX_LEN_0F38F6_P_3,
f12dc422 1837 VEX_LEN_0F38F7_P_0,
6c30d220
L
1838 VEX_LEN_0F38F7_P_1,
1839 VEX_LEN_0F38F7_P_2,
1840 VEX_LEN_0F38F7_P_3,
1841 VEX_LEN_0F3A00_P_2,
1842 VEX_LEN_0F3A01_P_2,
592a252b
L
1843 VEX_LEN_0F3A06_P_2,
1844 VEX_LEN_0F3A0A_P_2,
1845 VEX_LEN_0F3A0B_P_2,
592a252b
L
1846 VEX_LEN_0F3A14_P_2,
1847 VEX_LEN_0F3A15_P_2,
1848 VEX_LEN_0F3A16_P_2,
1849 VEX_LEN_0F3A17_P_2,
1850 VEX_LEN_0F3A18_P_2,
1851 VEX_LEN_0F3A19_P_2,
1852 VEX_LEN_0F3A20_P_2,
1853 VEX_LEN_0F3A21_P_2,
1854 VEX_LEN_0F3A22_P_2,
43234a1e 1855 VEX_LEN_0F3A30_P_2,
1ba585e8 1856 VEX_LEN_0F3A31_P_2,
43234a1e 1857 VEX_LEN_0F3A32_P_2,
1ba585e8 1858 VEX_LEN_0F3A33_P_2,
6c30d220
L
1859 VEX_LEN_0F3A38_P_2,
1860 VEX_LEN_0F3A39_P_2,
592a252b 1861 VEX_LEN_0F3A41_P_2,
592a252b 1862 VEX_LEN_0F3A44_P_2,
6c30d220 1863 VEX_LEN_0F3A46_P_2,
592a252b
L
1864 VEX_LEN_0F3A60_P_2,
1865 VEX_LEN_0F3A61_P_2,
1866 VEX_LEN_0F3A62_P_2,
1867 VEX_LEN_0F3A63_P_2,
1868 VEX_LEN_0F3A6A_P_2,
1869 VEX_LEN_0F3A6B_P_2,
1870 VEX_LEN_0F3A6E_P_2,
1871 VEX_LEN_0F3A6F_P_2,
1872 VEX_LEN_0F3A7A_P_2,
1873 VEX_LEN_0F3A7B_P_2,
1874 VEX_LEN_0F3A7E_P_2,
1875 VEX_LEN_0F3A7F_P_2,
1876 VEX_LEN_0F3ADF_P_2,
6c30d220 1877 VEX_LEN_0F3AF0_P_3,
ff688e1f
L
1878 VEX_LEN_0FXOP_08_CC,
1879 VEX_LEN_0FXOP_08_CD,
1880 VEX_LEN_0FXOP_08_CE,
1881 VEX_LEN_0FXOP_08_CF,
1882 VEX_LEN_0FXOP_08_EC,
1883 VEX_LEN_0FXOP_08_ED,
1884 VEX_LEN_0FXOP_08_EE,
1885 VEX_LEN_0FXOP_08_EF,
592a252b
L
1886 VEX_LEN_0FXOP_09_80,
1887 VEX_LEN_0FXOP_09_81
51e7da1b 1888};
c0f3af97 1889
9e30b8e0
L
1890enum
1891{
592a252b
L
1892 VEX_W_0F10_P_0 = 0,
1893 VEX_W_0F10_P_1,
1894 VEX_W_0F10_P_2,
1895 VEX_W_0F10_P_3,
1896 VEX_W_0F11_P_0,
1897 VEX_W_0F11_P_1,
1898 VEX_W_0F11_P_2,
1899 VEX_W_0F11_P_3,
1900 VEX_W_0F12_P_0_M_0,
1901 VEX_W_0F12_P_0_M_1,
1902 VEX_W_0F12_P_1,
1903 VEX_W_0F12_P_2,
1904 VEX_W_0F12_P_3,
1905 VEX_W_0F13_M_0,
1906 VEX_W_0F14,
1907 VEX_W_0F15,
1908 VEX_W_0F16_P_0_M_0,
1909 VEX_W_0F16_P_0_M_1,
1910 VEX_W_0F16_P_1,
1911 VEX_W_0F16_P_2,
1912 VEX_W_0F17_M_0,
1913 VEX_W_0F28,
1914 VEX_W_0F29,
1915 VEX_W_0F2B_M_0,
1916 VEX_W_0F2E_P_0,
1917 VEX_W_0F2E_P_2,
1918 VEX_W_0F2F_P_0,
1919 VEX_W_0F2F_P_2,
43234a1e 1920 VEX_W_0F41_P_0_LEN_1,
1ba585e8 1921 VEX_W_0F41_P_2_LEN_1,
43234a1e 1922 VEX_W_0F42_P_0_LEN_1,
1ba585e8 1923 VEX_W_0F42_P_2_LEN_1,
43234a1e 1924 VEX_W_0F44_P_0_LEN_0,
1ba585e8 1925 VEX_W_0F44_P_2_LEN_0,
43234a1e 1926 VEX_W_0F45_P_0_LEN_1,
1ba585e8 1927 VEX_W_0F45_P_2_LEN_1,
43234a1e 1928 VEX_W_0F46_P_0_LEN_1,
1ba585e8 1929 VEX_W_0F46_P_2_LEN_1,
43234a1e 1930 VEX_W_0F47_P_0_LEN_1,
1ba585e8
IT
1931 VEX_W_0F47_P_2_LEN_1,
1932 VEX_W_0F4A_P_0_LEN_1,
1933 VEX_W_0F4A_P_2_LEN_1,
1934 VEX_W_0F4B_P_0_LEN_1,
43234a1e 1935 VEX_W_0F4B_P_2_LEN_1,
592a252b
L
1936 VEX_W_0F50_M_0,
1937 VEX_W_0F51_P_0,
1938 VEX_W_0F51_P_1,
1939 VEX_W_0F51_P_2,
1940 VEX_W_0F51_P_3,
1941 VEX_W_0F52_P_0,
1942 VEX_W_0F52_P_1,
1943 VEX_W_0F53_P_0,
1944 VEX_W_0F53_P_1,
1945 VEX_W_0F58_P_0,
1946 VEX_W_0F58_P_1,
1947 VEX_W_0F58_P_2,
1948 VEX_W_0F58_P_3,
1949 VEX_W_0F59_P_0,
1950 VEX_W_0F59_P_1,
1951 VEX_W_0F59_P_2,
1952 VEX_W_0F59_P_3,
1953 VEX_W_0F5A_P_0,
1954 VEX_W_0F5A_P_1,
1955 VEX_W_0F5A_P_3,
1956 VEX_W_0F5B_P_0,
1957 VEX_W_0F5B_P_1,
1958 VEX_W_0F5B_P_2,
1959 VEX_W_0F5C_P_0,
1960 VEX_W_0F5C_P_1,
1961 VEX_W_0F5C_P_2,
1962 VEX_W_0F5C_P_3,
1963 VEX_W_0F5D_P_0,
1964 VEX_W_0F5D_P_1,
1965 VEX_W_0F5D_P_2,
1966 VEX_W_0F5D_P_3,
1967 VEX_W_0F5E_P_0,
1968 VEX_W_0F5E_P_1,
1969 VEX_W_0F5E_P_2,
1970 VEX_W_0F5E_P_3,
1971 VEX_W_0F5F_P_0,
1972 VEX_W_0F5F_P_1,
1973 VEX_W_0F5F_P_2,
1974 VEX_W_0F5F_P_3,
1975 VEX_W_0F60_P_2,
1976 VEX_W_0F61_P_2,
1977 VEX_W_0F62_P_2,
1978 VEX_W_0F63_P_2,
1979 VEX_W_0F64_P_2,
1980 VEX_W_0F65_P_2,
1981 VEX_W_0F66_P_2,
1982 VEX_W_0F67_P_2,
1983 VEX_W_0F68_P_2,
1984 VEX_W_0F69_P_2,
1985 VEX_W_0F6A_P_2,
1986 VEX_W_0F6B_P_2,
1987 VEX_W_0F6C_P_2,
1988 VEX_W_0F6D_P_2,
1989 VEX_W_0F6F_P_1,
1990 VEX_W_0F6F_P_2,
1991 VEX_W_0F70_P_1,
1992 VEX_W_0F70_P_2,
1993 VEX_W_0F70_P_3,
1994 VEX_W_0F71_R_2_P_2,
1995 VEX_W_0F71_R_4_P_2,
1996 VEX_W_0F71_R_6_P_2,
1997 VEX_W_0F72_R_2_P_2,
1998 VEX_W_0F72_R_4_P_2,
1999 VEX_W_0F72_R_6_P_2,
2000 VEX_W_0F73_R_2_P_2,
2001 VEX_W_0F73_R_3_P_2,
2002 VEX_W_0F73_R_6_P_2,
2003 VEX_W_0F73_R_7_P_2,
2004 VEX_W_0F74_P_2,
2005 VEX_W_0F75_P_2,
2006 VEX_W_0F76_P_2,
2007 VEX_W_0F77_P_0,
2008 VEX_W_0F7C_P_2,
2009 VEX_W_0F7C_P_3,
2010 VEX_W_0F7D_P_2,
2011 VEX_W_0F7D_P_3,
2012 VEX_W_0F7E_P_1,
2013 VEX_W_0F7F_P_1,
2014 VEX_W_0F7F_P_2,
43234a1e 2015 VEX_W_0F90_P_0_LEN_0,
1ba585e8 2016 VEX_W_0F90_P_2_LEN_0,
43234a1e 2017 VEX_W_0F91_P_0_LEN_0,
1ba585e8 2018 VEX_W_0F91_P_2_LEN_0,
43234a1e 2019 VEX_W_0F92_P_0_LEN_0,
90a915bf 2020 VEX_W_0F92_P_2_LEN_0,
1ba585e8 2021 VEX_W_0F92_P_3_LEN_0,
43234a1e 2022 VEX_W_0F93_P_0_LEN_0,
90a915bf 2023 VEX_W_0F93_P_2_LEN_0,
1ba585e8 2024 VEX_W_0F93_P_3_LEN_0,
43234a1e 2025 VEX_W_0F98_P_0_LEN_0,
1ba585e8
IT
2026 VEX_W_0F98_P_2_LEN_0,
2027 VEX_W_0F99_P_0_LEN_0,
2028 VEX_W_0F99_P_2_LEN_0,
592a252b
L
2029 VEX_W_0FAE_R_2_M_0,
2030 VEX_W_0FAE_R_3_M_0,
2031 VEX_W_0FC2_P_0,
2032 VEX_W_0FC2_P_1,
2033 VEX_W_0FC2_P_2,
2034 VEX_W_0FC2_P_3,
2035 VEX_W_0FC4_P_2,
2036 VEX_W_0FC5_P_2,
2037 VEX_W_0FD0_P_2,
2038 VEX_W_0FD0_P_3,
2039 VEX_W_0FD1_P_2,
2040 VEX_W_0FD2_P_2,
2041 VEX_W_0FD3_P_2,
2042 VEX_W_0FD4_P_2,
2043 VEX_W_0FD5_P_2,
2044 VEX_W_0FD6_P_2,
2045 VEX_W_0FD7_P_2_M_1,
2046 VEX_W_0FD8_P_2,
2047 VEX_W_0FD9_P_2,
2048 VEX_W_0FDA_P_2,
2049 VEX_W_0FDB_P_2,
2050 VEX_W_0FDC_P_2,
2051 VEX_W_0FDD_P_2,
2052 VEX_W_0FDE_P_2,
2053 VEX_W_0FDF_P_2,
2054 VEX_W_0FE0_P_2,
2055 VEX_W_0FE1_P_2,
2056 VEX_W_0FE2_P_2,
2057 VEX_W_0FE3_P_2,
2058 VEX_W_0FE4_P_2,
2059 VEX_W_0FE5_P_2,
2060 VEX_W_0FE6_P_1,
2061 VEX_W_0FE6_P_2,
2062 VEX_W_0FE6_P_3,
2063 VEX_W_0FE7_P_2_M_0,
2064 VEX_W_0FE8_P_2,
2065 VEX_W_0FE9_P_2,
2066 VEX_W_0FEA_P_2,
2067 VEX_W_0FEB_P_2,
2068 VEX_W_0FEC_P_2,
2069 VEX_W_0FED_P_2,
2070 VEX_W_0FEE_P_2,
2071 VEX_W_0FEF_P_2,
2072 VEX_W_0FF0_P_3_M_0,
2073 VEX_W_0FF1_P_2,
2074 VEX_W_0FF2_P_2,
2075 VEX_W_0FF3_P_2,
2076 VEX_W_0FF4_P_2,
2077 VEX_W_0FF5_P_2,
2078 VEX_W_0FF6_P_2,
2079 VEX_W_0FF7_P_2,
2080 VEX_W_0FF8_P_2,
2081 VEX_W_0FF9_P_2,
2082 VEX_W_0FFA_P_2,
2083 VEX_W_0FFB_P_2,
2084 VEX_W_0FFC_P_2,
2085 VEX_W_0FFD_P_2,
2086 VEX_W_0FFE_P_2,
2087 VEX_W_0F3800_P_2,
2088 VEX_W_0F3801_P_2,
2089 VEX_W_0F3802_P_2,
2090 VEX_W_0F3803_P_2,
2091 VEX_W_0F3804_P_2,
2092 VEX_W_0F3805_P_2,
2093 VEX_W_0F3806_P_2,
2094 VEX_W_0F3807_P_2,
2095 VEX_W_0F3808_P_2,
2096 VEX_W_0F3809_P_2,
2097 VEX_W_0F380A_P_2,
2098 VEX_W_0F380B_P_2,
2099 VEX_W_0F380C_P_2,
2100 VEX_W_0F380D_P_2,
2101 VEX_W_0F380E_P_2,
2102 VEX_W_0F380F_P_2,
6c30d220 2103 VEX_W_0F3816_P_2,
592a252b 2104 VEX_W_0F3817_P_2,
6c30d220
L
2105 VEX_W_0F3818_P_2,
2106 VEX_W_0F3819_P_2,
592a252b
L
2107 VEX_W_0F381A_P_2_M_0,
2108 VEX_W_0F381C_P_2,
2109 VEX_W_0F381D_P_2,
2110 VEX_W_0F381E_P_2,
2111 VEX_W_0F3820_P_2,
2112 VEX_W_0F3821_P_2,
2113 VEX_W_0F3822_P_2,
2114 VEX_W_0F3823_P_2,
2115 VEX_W_0F3824_P_2,
2116 VEX_W_0F3825_P_2,
2117 VEX_W_0F3828_P_2,
2118 VEX_W_0F3829_P_2,
2119 VEX_W_0F382A_P_2_M_0,
2120 VEX_W_0F382B_P_2,
2121 VEX_W_0F382C_P_2_M_0,
2122 VEX_W_0F382D_P_2_M_0,
2123 VEX_W_0F382E_P_2_M_0,
2124 VEX_W_0F382F_P_2_M_0,
2125 VEX_W_0F3830_P_2,
2126 VEX_W_0F3831_P_2,
2127 VEX_W_0F3832_P_2,
2128 VEX_W_0F3833_P_2,
2129 VEX_W_0F3834_P_2,
2130 VEX_W_0F3835_P_2,
6c30d220 2131 VEX_W_0F3836_P_2,
592a252b
L
2132 VEX_W_0F3837_P_2,
2133 VEX_W_0F3838_P_2,
2134 VEX_W_0F3839_P_2,
2135 VEX_W_0F383A_P_2,
2136 VEX_W_0F383B_P_2,
2137 VEX_W_0F383C_P_2,
2138 VEX_W_0F383D_P_2,
2139 VEX_W_0F383E_P_2,
2140 VEX_W_0F383F_P_2,
2141 VEX_W_0F3840_P_2,
2142 VEX_W_0F3841_P_2,
6c30d220
L
2143 VEX_W_0F3846_P_2,
2144 VEX_W_0F3858_P_2,
2145 VEX_W_0F3859_P_2,
2146 VEX_W_0F385A_P_2_M_0,
2147 VEX_W_0F3878_P_2,
2148 VEX_W_0F3879_P_2,
592a252b
L
2149 VEX_W_0F38DB_P_2,
2150 VEX_W_0F38DC_P_2,
2151 VEX_W_0F38DD_P_2,
2152 VEX_W_0F38DE_P_2,
2153 VEX_W_0F38DF_P_2,
6c30d220
L
2154 VEX_W_0F3A00_P_2,
2155 VEX_W_0F3A01_P_2,
2156 VEX_W_0F3A02_P_2,
592a252b
L
2157 VEX_W_0F3A04_P_2,
2158 VEX_W_0F3A05_P_2,
2159 VEX_W_0F3A06_P_2,
2160 VEX_W_0F3A08_P_2,
2161 VEX_W_0F3A09_P_2,
2162 VEX_W_0F3A0A_P_2,
2163 VEX_W_0F3A0B_P_2,
2164 VEX_W_0F3A0C_P_2,
2165 VEX_W_0F3A0D_P_2,
2166 VEX_W_0F3A0E_P_2,
2167 VEX_W_0F3A0F_P_2,
2168 VEX_W_0F3A14_P_2,
2169 VEX_W_0F3A15_P_2,
2170 VEX_W_0F3A18_P_2,
2171 VEX_W_0F3A19_P_2,
2172 VEX_W_0F3A20_P_2,
2173 VEX_W_0F3A21_P_2,
43234a1e 2174 VEX_W_0F3A30_P_2_LEN_0,
1ba585e8 2175 VEX_W_0F3A31_P_2_LEN_0,
43234a1e 2176 VEX_W_0F3A32_P_2_LEN_0,
1ba585e8 2177 VEX_W_0F3A33_P_2_LEN_0,
6c30d220
L
2178 VEX_W_0F3A38_P_2,
2179 VEX_W_0F3A39_P_2,
592a252b
L
2180 VEX_W_0F3A40_P_2,
2181 VEX_W_0F3A41_P_2,
2182 VEX_W_0F3A42_P_2,
2183 VEX_W_0F3A44_P_2,
6c30d220 2184 VEX_W_0F3A46_P_2,
592a252b
L
2185 VEX_W_0F3A48_P_2,
2186 VEX_W_0F3A49_P_2,
2187 VEX_W_0F3A4A_P_2,
2188 VEX_W_0F3A4B_P_2,
2189 VEX_W_0F3A4C_P_2,
2190 VEX_W_0F3A60_P_2,
2191 VEX_W_0F3A61_P_2,
2192 VEX_W_0F3A62_P_2,
2193 VEX_W_0F3A63_P_2,
43234a1e
L
2194 VEX_W_0F3ADF_P_2,
2195
2196 EVEX_W_0F10_P_0,
2197 EVEX_W_0F10_P_1_M_0,
2198 EVEX_W_0F10_P_1_M_1,
2199 EVEX_W_0F10_P_2,
2200 EVEX_W_0F10_P_3_M_0,
2201 EVEX_W_0F10_P_3_M_1,
2202 EVEX_W_0F11_P_0,
2203 EVEX_W_0F11_P_1_M_0,
2204 EVEX_W_0F11_P_1_M_1,
2205 EVEX_W_0F11_P_2,
2206 EVEX_W_0F11_P_3_M_0,
2207 EVEX_W_0F11_P_3_M_1,
2208 EVEX_W_0F12_P_0_M_0,
2209 EVEX_W_0F12_P_0_M_1,
2210 EVEX_W_0F12_P_1,
2211 EVEX_W_0F12_P_2,
2212 EVEX_W_0F12_P_3,
2213 EVEX_W_0F13_P_0,
2214 EVEX_W_0F13_P_2,
2215 EVEX_W_0F14_P_0,
2216 EVEX_W_0F14_P_2,
2217 EVEX_W_0F15_P_0,
2218 EVEX_W_0F15_P_2,
2219 EVEX_W_0F16_P_0_M_0,
2220 EVEX_W_0F16_P_0_M_1,
2221 EVEX_W_0F16_P_1,
2222 EVEX_W_0F16_P_2,
2223 EVEX_W_0F17_P_0,
2224 EVEX_W_0F17_P_2,
2225 EVEX_W_0F28_P_0,
2226 EVEX_W_0F28_P_2,
2227 EVEX_W_0F29_P_0,
2228 EVEX_W_0F29_P_2,
2229 EVEX_W_0F2A_P_1,
2230 EVEX_W_0F2A_P_3,
2231 EVEX_W_0F2B_P_0,
2232 EVEX_W_0F2B_P_2,
2233 EVEX_W_0F2E_P_0,
2234 EVEX_W_0F2E_P_2,
2235 EVEX_W_0F2F_P_0,
2236 EVEX_W_0F2F_P_2,
2237 EVEX_W_0F51_P_0,
2238 EVEX_W_0F51_P_1,
2239 EVEX_W_0F51_P_2,
2240 EVEX_W_0F51_P_3,
90a915bf
IT
2241 EVEX_W_0F54_P_0,
2242 EVEX_W_0F54_P_2,
2243 EVEX_W_0F55_P_0,
2244 EVEX_W_0F55_P_2,
2245 EVEX_W_0F56_P_0,
2246 EVEX_W_0F56_P_2,
2247 EVEX_W_0F57_P_0,
2248 EVEX_W_0F57_P_2,
43234a1e
L
2249 EVEX_W_0F58_P_0,
2250 EVEX_W_0F58_P_1,
2251 EVEX_W_0F58_P_2,
2252 EVEX_W_0F58_P_3,
2253 EVEX_W_0F59_P_0,
2254 EVEX_W_0F59_P_1,
2255 EVEX_W_0F59_P_2,
2256 EVEX_W_0F59_P_3,
2257 EVEX_W_0F5A_P_0,
2258 EVEX_W_0F5A_P_1,
2259 EVEX_W_0F5A_P_2,
2260 EVEX_W_0F5A_P_3,
2261 EVEX_W_0F5B_P_0,
2262 EVEX_W_0F5B_P_1,
2263 EVEX_W_0F5B_P_2,
2264 EVEX_W_0F5C_P_0,
2265 EVEX_W_0F5C_P_1,
2266 EVEX_W_0F5C_P_2,
2267 EVEX_W_0F5C_P_3,
2268 EVEX_W_0F5D_P_0,
2269 EVEX_W_0F5D_P_1,
2270 EVEX_W_0F5D_P_2,
2271 EVEX_W_0F5D_P_3,
2272 EVEX_W_0F5E_P_0,
2273 EVEX_W_0F5E_P_1,
2274 EVEX_W_0F5E_P_2,
2275 EVEX_W_0F5E_P_3,
2276 EVEX_W_0F5F_P_0,
2277 EVEX_W_0F5F_P_1,
2278 EVEX_W_0F5F_P_2,
2279 EVEX_W_0F5F_P_3,
2280 EVEX_W_0F62_P_2,
2281 EVEX_W_0F66_P_2,
2282 EVEX_W_0F6A_P_2,
1ba585e8 2283 EVEX_W_0F6B_P_2,
43234a1e
L
2284 EVEX_W_0F6C_P_2,
2285 EVEX_W_0F6D_P_2,
2286 EVEX_W_0F6E_P_2,
2287 EVEX_W_0F6F_P_1,
2288 EVEX_W_0F6F_P_2,
1ba585e8 2289 EVEX_W_0F6F_P_3,
43234a1e
L
2290 EVEX_W_0F70_P_2,
2291 EVEX_W_0F72_R_2_P_2,
2292 EVEX_W_0F72_R_6_P_2,
2293 EVEX_W_0F73_R_2_P_2,
2294 EVEX_W_0F73_R_6_P_2,
2295 EVEX_W_0F76_P_2,
2296 EVEX_W_0F78_P_0,
90a915bf 2297 EVEX_W_0F78_P_2,
43234a1e 2298 EVEX_W_0F79_P_0,
90a915bf 2299 EVEX_W_0F79_P_2,
43234a1e 2300 EVEX_W_0F7A_P_1,
90a915bf 2301 EVEX_W_0F7A_P_2,
43234a1e
L
2302 EVEX_W_0F7A_P_3,
2303 EVEX_W_0F7B_P_1,
90a915bf 2304 EVEX_W_0F7B_P_2,
43234a1e
L
2305 EVEX_W_0F7B_P_3,
2306 EVEX_W_0F7E_P_1,
2307 EVEX_W_0F7E_P_2,
2308 EVEX_W_0F7F_P_1,
2309 EVEX_W_0F7F_P_2,
1ba585e8 2310 EVEX_W_0F7F_P_3,
43234a1e
L
2311 EVEX_W_0FC2_P_0,
2312 EVEX_W_0FC2_P_1,
2313 EVEX_W_0FC2_P_2,
2314 EVEX_W_0FC2_P_3,
2315 EVEX_W_0FC6_P_0,
2316 EVEX_W_0FC6_P_2,
2317 EVEX_W_0FD2_P_2,
2318 EVEX_W_0FD3_P_2,
2319 EVEX_W_0FD4_P_2,
2320 EVEX_W_0FD6_P_2,
2321 EVEX_W_0FE6_P_1,
2322 EVEX_W_0FE6_P_2,
2323 EVEX_W_0FE6_P_3,
2324 EVEX_W_0FE7_P_2,
2325 EVEX_W_0FF2_P_2,
2326 EVEX_W_0FF3_P_2,
2327 EVEX_W_0FF4_P_2,
2328 EVEX_W_0FFA_P_2,
2329 EVEX_W_0FFB_P_2,
2330 EVEX_W_0FFE_P_2,
2331 EVEX_W_0F380C_P_2,
2332 EVEX_W_0F380D_P_2,
1ba585e8
IT
2333 EVEX_W_0F3810_P_1,
2334 EVEX_W_0F3810_P_2,
43234a1e 2335 EVEX_W_0F3811_P_1,
1ba585e8 2336 EVEX_W_0F3811_P_2,
43234a1e 2337 EVEX_W_0F3812_P_1,
1ba585e8 2338 EVEX_W_0F3812_P_2,
43234a1e
L
2339 EVEX_W_0F3813_P_1,
2340 EVEX_W_0F3813_P_2,
2341 EVEX_W_0F3814_P_1,
2342 EVEX_W_0F3815_P_1,
2343 EVEX_W_0F3818_P_2,
2344 EVEX_W_0F3819_P_2,
2345 EVEX_W_0F381A_P_2,
2346 EVEX_W_0F381B_P_2,
2347 EVEX_W_0F381E_P_2,
2348 EVEX_W_0F381F_P_2,
1ba585e8 2349 EVEX_W_0F3820_P_1,
43234a1e
L
2350 EVEX_W_0F3821_P_1,
2351 EVEX_W_0F3822_P_1,
2352 EVEX_W_0F3823_P_1,
2353 EVEX_W_0F3824_P_1,
2354 EVEX_W_0F3825_P_1,
2355 EVEX_W_0F3825_P_2,
1ba585e8
IT
2356 EVEX_W_0F3826_P_1,
2357 EVEX_W_0F3826_P_2,
2358 EVEX_W_0F3828_P_1,
43234a1e 2359 EVEX_W_0F3828_P_2,
1ba585e8 2360 EVEX_W_0F3829_P_1,
43234a1e
L
2361 EVEX_W_0F3829_P_2,
2362 EVEX_W_0F382A_P_1,
2363 EVEX_W_0F382A_P_2,
1ba585e8
IT
2364 EVEX_W_0F382B_P_2,
2365 EVEX_W_0F3830_P_1,
43234a1e
L
2366 EVEX_W_0F3831_P_1,
2367 EVEX_W_0F3832_P_1,
2368 EVEX_W_0F3833_P_1,
2369 EVEX_W_0F3834_P_1,
2370 EVEX_W_0F3835_P_1,
2371 EVEX_W_0F3835_P_2,
2372 EVEX_W_0F3837_P_2,
90a915bf
IT
2373 EVEX_W_0F3838_P_1,
2374 EVEX_W_0F3839_P_1,
43234a1e
L
2375 EVEX_W_0F383A_P_1,
2376 EVEX_W_0F3840_P_2,
2377 EVEX_W_0F3858_P_2,
2378 EVEX_W_0F3859_P_2,
2379 EVEX_W_0F385A_P_2,
2380 EVEX_W_0F385B_P_2,
1ba585e8
IT
2381 EVEX_W_0F3866_P_2,
2382 EVEX_W_0F3875_P_2,
2383 EVEX_W_0F3878_P_2,
2384 EVEX_W_0F3879_P_2,
2385 EVEX_W_0F387A_P_2,
2386 EVEX_W_0F387B_P_2,
2387 EVEX_W_0F387D_P_2,
14f195c9 2388 EVEX_W_0F3883_P_2,
1ba585e8 2389 EVEX_W_0F388D_P_2,
43234a1e
L
2390 EVEX_W_0F3891_P_2,
2391 EVEX_W_0F3893_P_2,
2392 EVEX_W_0F38A1_P_2,
2393 EVEX_W_0F38A3_P_2,
2394 EVEX_W_0F38C7_R_1_P_2,
2395 EVEX_W_0F38C7_R_2_P_2,
2396 EVEX_W_0F38C7_R_5_P_2,
2397 EVEX_W_0F38C7_R_6_P_2,
2398
2399 EVEX_W_0F3A00_P_2,
2400 EVEX_W_0F3A01_P_2,
2401 EVEX_W_0F3A04_P_2,
2402 EVEX_W_0F3A05_P_2,
2403 EVEX_W_0F3A08_P_2,
2404 EVEX_W_0F3A09_P_2,
2405 EVEX_W_0F3A0A_P_2,
2406 EVEX_W_0F3A0B_P_2,
90a915bf 2407 EVEX_W_0F3A16_P_2,
43234a1e
L
2408 EVEX_W_0F3A18_P_2,
2409 EVEX_W_0F3A19_P_2,
2410 EVEX_W_0F3A1A_P_2,
2411 EVEX_W_0F3A1B_P_2,
2412 EVEX_W_0F3A1D_P_2,
2413 EVEX_W_0F3A21_P_2,
90a915bf 2414 EVEX_W_0F3A22_P_2,
43234a1e
L
2415 EVEX_W_0F3A23_P_2,
2416 EVEX_W_0F3A38_P_2,
2417 EVEX_W_0F3A39_P_2,
2418 EVEX_W_0F3A3A_P_2,
2419 EVEX_W_0F3A3B_P_2,
1ba585e8
IT
2420 EVEX_W_0F3A3E_P_2,
2421 EVEX_W_0F3A3F_P_2,
2422 EVEX_W_0F3A42_P_2,
90a915bf
IT
2423 EVEX_W_0F3A43_P_2,
2424 EVEX_W_0F3A50_P_2,
2425 EVEX_W_0F3A51_P_2,
2426 EVEX_W_0F3A56_P_2,
2427 EVEX_W_0F3A57_P_2,
2428 EVEX_W_0F3A66_P_2,
2429 EVEX_W_0F3A67_P_2
9e30b8e0
L
2430};
2431
26ca5450 2432typedef void (*op_rtn) (int bytemode, int sizeflag);
252b5132
RH
2433
2434struct dis386 {
2da11e11 2435 const char *name;
ce518a5f
L
2436 struct
2437 {
2438 op_rtn rtn;
2439 int bytemode;
2440 } op[MAX_OPERANDS];
bf890a93 2441 unsigned int prefix_requirement;
252b5132
RH
2442};
2443
2444/* Upper case letters in the instruction names here are macros.
2445 'A' => print 'b' if no register operands or suffix_always is true
2446 'B' => print 'b' if suffix_always is true
9306ca4a 2447 'C' => print 's' or 'l' ('w' or 'd' in Intel mode) depending on operand
98b528ac 2448 size prefix
ed7841b3 2449 'D' => print 'w' if no register operands or 'w', 'l' or 'q', if
98b528ac 2450 suffix_always is true
252b5132 2451 'E' => print 'e' if 32-bit form of jcxz
3ffd33cf 2452 'F' => print 'w' or 'l' depending on address size prefix (loop insns)
52fd6d94 2453 'G' => print 'w' or 'l' depending on operand size prefix (i/o insns)
5dd0794d 2454 'H' => print ",pt" or ",pn" branch hint
9306ca4a 2455 'I' => honor following macro letter even in Intel mode (implemented only
98b528ac 2456 for some of the macro letters)
9306ca4a 2457 'J' => print 'l'
42903f7f 2458 'K' => print 'd' or 'q' if rex prefix is present.
252b5132 2459 'L' => print 'l' if suffix_always is true
9d141669 2460 'M' => print 'r' if intel_mnemonic is false.
252b5132 2461 'N' => print 'n' if instruction has no wait "prefix"
a35ca55a 2462 'O' => print 'd' or 'o' (or 'q' in Intel mode)
52b15da3 2463 'P' => print 'w', 'l' or 'q' if instruction has an operand size prefix,
98b528ac
L
2464 or suffix_always is true. print 'q' if rex prefix is present.
2465 'Q' => print 'w', 'l' or 'q' for memory operand or suffix_always
2466 is true
a35ca55a 2467 'R' => print 'w', 'l' or 'q' ('d' for 'l' and 'e' in Intel mode)
52b15da3 2468 'S' => print 'w', 'l' or 'q' if suffix_always is true
a72d2af2
L
2469 'T' => print 'q' in 64bit mode if instruction has no operand size
2470 prefix and behave as 'P' otherwise
2471 'U' => print 'q' in 64bit mode if instruction has no operand size
2472 prefix and behave as 'Q' otherwise
2473 'V' => print 'q' in 64bit mode if instruction has no operand size
2474 prefix and behave as 'S' otherwise
a35ca55a 2475 'W' => print 'b', 'w' or 'l' ('d' in Intel mode)
9306ca4a 2476 'X' => print 's', 'd' depending on data16 prefix (for XMM)
8a72226a
L
2477 'Y' => 'q' if instruction has an REX 64bit overwrite prefix and
2478 suffix_always is true.
6dd5059a 2479 'Z' => print 'q' in 64bit mode and behave as 'L' otherwise
9d141669 2480 '!' => change condition from true to false or from false to true.
98b528ac 2481 '%' => add 1 upper case letter to the macro.
a72d2af2
L
2482 '^' => print 'w' or 'l' depending on operand size prefix or
2483 suffix_always is true (lcall/ljmp).
5db04b09
L
2484 '@' => print 'q' for Intel64 ISA, 'w' or 'q' for AMD64 ISA depending
2485 on operand size prefix.
98b528ac
L
2486
2487 2 upper case letter macros:
04d824a4
JB
2488 "XY" => print 'x' or 'y' if suffix_always is true or no register
2489 operands and no broadcast.
2490 "XZ" => print 'x', 'y', or 'z' if suffix_always is true or no
2491 register operands and no broadcast.
4b06377f
L
2492 "XW" => print 's', 'd' depending on the VEX.W bit (for FMA)
2493 "LQ" => print 'l' ('d' in Intel mode) or 'q' for memory operand
98b528ac 2494 or suffix_always is true
4b06377f
L
2495 "LB" => print "abs" in 64bit mode and behave as 'B' otherwise
2496 "LS" => print "abs" in 64bit mode and behave as 'S' otherwise
2497 "LV" => print "abs" for 64bit operand and behave as 'S' otherwise
6c30d220 2498 "LW" => print 'd', 'q' depending on the VEX.W bit
4b4c407a
L
2499 "LP" => print 'w' or 'l' ('d' in Intel mode) if instruction has
2500 an operand size prefix, or suffix_always is true. print
2501 'q' if rex prefix is present.
52b15da3 2502
6439fc28
AM
2503 Many of the above letters print nothing in Intel mode. See "putop"
2504 for the details.
52b15da3 2505
6439fc28 2506 Braces '{' and '}', and vertical bars '|', indicate alternative
7c52e0e8 2507 mnemonic strings for AT&T and Intel. */
252b5132 2508
6439fc28 2509static const struct dis386 dis386[] = {
252b5132 2510 /* 00 */
bf890a93
IT
2511 { "addB", { Ebh1, Gb }, 0 },
2512 { "addS", { Evh1, Gv }, 0 },
2513 { "addB", { Gb, EbS }, 0 },
2514 { "addS", { Gv, EvS }, 0 },
2515 { "addB", { AL, Ib }, 0 },
2516 { "addS", { eAX, Iv }, 0 },
4e7d34a6
L
2517 { X86_64_TABLE (X86_64_06) },
2518 { X86_64_TABLE (X86_64_07) },
252b5132 2519 /* 08 */
bf890a93
IT
2520 { "orB", { Ebh1, Gb }, 0 },
2521 { "orS", { Evh1, Gv }, 0 },
2522 { "orB", { Gb, EbS }, 0 },
2523 { "orS", { Gv, EvS }, 0 },
2524 { "orB", { AL, Ib }, 0 },
2525 { "orS", { eAX, Iv }, 0 },
4e7d34a6 2526 { X86_64_TABLE (X86_64_0D) },
592d1631 2527 { Bad_Opcode }, /* 0x0f extended opcode escape */
252b5132 2528 /* 10 */
bf890a93
IT
2529 { "adcB", { Ebh1, Gb }, 0 },
2530 { "adcS", { Evh1, Gv }, 0 },
2531 { "adcB", { Gb, EbS }, 0 },
2532 { "adcS", { Gv, EvS }, 0 },
2533 { "adcB", { AL, Ib }, 0 },
2534 { "adcS", { eAX, Iv }, 0 },
4e7d34a6
L
2535 { X86_64_TABLE (X86_64_16) },
2536 { X86_64_TABLE (X86_64_17) },
252b5132 2537 /* 18 */
bf890a93
IT
2538 { "sbbB", { Ebh1, Gb }, 0 },
2539 { "sbbS", { Evh1, Gv }, 0 },
2540 { "sbbB", { Gb, EbS }, 0 },
2541 { "sbbS", { Gv, EvS }, 0 },
2542 { "sbbB", { AL, Ib }, 0 },
2543 { "sbbS", { eAX, Iv }, 0 },
4e7d34a6
L
2544 { X86_64_TABLE (X86_64_1E) },
2545 { X86_64_TABLE (X86_64_1F) },
252b5132 2546 /* 20 */
bf890a93
IT
2547 { "andB", { Ebh1, Gb }, 0 },
2548 { "andS", { Evh1, Gv }, 0 },
2549 { "andB", { Gb, EbS }, 0 },
2550 { "andS", { Gv, EvS }, 0 },
2551 { "andB", { AL, Ib }, 0 },
2552 { "andS", { eAX, Iv }, 0 },
592d1631 2553 { Bad_Opcode }, /* SEG ES prefix */
4e7d34a6 2554 { X86_64_TABLE (X86_64_27) },
252b5132 2555 /* 28 */
bf890a93
IT
2556 { "subB", { Ebh1, Gb }, 0 },
2557 { "subS", { Evh1, Gv }, 0 },
2558 { "subB", { Gb, EbS }, 0 },
2559 { "subS", { Gv, EvS }, 0 },
2560 { "subB", { AL, Ib }, 0 },
2561 { "subS", { eAX, Iv }, 0 },
592d1631 2562 { Bad_Opcode }, /* SEG CS prefix */
4e7d34a6 2563 { X86_64_TABLE (X86_64_2F) },
252b5132 2564 /* 30 */
bf890a93
IT
2565 { "xorB", { Ebh1, Gb }, 0 },
2566 { "xorS", { Evh1, Gv }, 0 },
2567 { "xorB", { Gb, EbS }, 0 },
2568 { "xorS", { Gv, EvS }, 0 },
2569 { "xorB", { AL, Ib }, 0 },
2570 { "xorS", { eAX, Iv }, 0 },
592d1631 2571 { Bad_Opcode }, /* SEG SS prefix */
4e7d34a6 2572 { X86_64_TABLE (X86_64_37) },
252b5132 2573 /* 38 */
bf890a93
IT
2574 { "cmpB", { Eb, Gb }, 0 },
2575 { "cmpS", { Ev, Gv }, 0 },
2576 { "cmpB", { Gb, EbS }, 0 },
2577 { "cmpS", { Gv, EvS }, 0 },
2578 { "cmpB", { AL, Ib }, 0 },
2579 { "cmpS", { eAX, Iv }, 0 },
592d1631 2580 { Bad_Opcode }, /* SEG DS prefix */
4e7d34a6 2581 { X86_64_TABLE (X86_64_3F) },
252b5132 2582 /* 40 */
bf890a93
IT
2583 { "inc{S|}", { RMeAX }, 0 },
2584 { "inc{S|}", { RMeCX }, 0 },
2585 { "inc{S|}", { RMeDX }, 0 },
2586 { "inc{S|}", { RMeBX }, 0 },
2587 { "inc{S|}", { RMeSP }, 0 },
2588 { "inc{S|}", { RMeBP }, 0 },
2589 { "inc{S|}", { RMeSI }, 0 },
2590 { "inc{S|}", { RMeDI }, 0 },
252b5132 2591 /* 48 */
bf890a93
IT
2592 { "dec{S|}", { RMeAX }, 0 },
2593 { "dec{S|}", { RMeCX }, 0 },
2594 { "dec{S|}", { RMeDX }, 0 },
2595 { "dec{S|}", { RMeBX }, 0 },
2596 { "dec{S|}", { RMeSP }, 0 },
2597 { "dec{S|}", { RMeBP }, 0 },
2598 { "dec{S|}", { RMeSI }, 0 },
2599 { "dec{S|}", { RMeDI }, 0 },
252b5132 2600 /* 50 */
bf890a93
IT
2601 { "pushV", { RMrAX }, 0 },
2602 { "pushV", { RMrCX }, 0 },
2603 { "pushV", { RMrDX }, 0 },
2604 { "pushV", { RMrBX }, 0 },
2605 { "pushV", { RMrSP }, 0 },
2606 { "pushV", { RMrBP }, 0 },
2607 { "pushV", { RMrSI }, 0 },
2608 { "pushV", { RMrDI }, 0 },
252b5132 2609 /* 58 */
bf890a93
IT
2610 { "popV", { RMrAX }, 0 },
2611 { "popV", { RMrCX }, 0 },
2612 { "popV", { RMrDX }, 0 },
2613 { "popV", { RMrBX }, 0 },
2614 { "popV", { RMrSP }, 0 },
2615 { "popV", { RMrBP }, 0 },
2616 { "popV", { RMrSI }, 0 },
2617 { "popV", { RMrDI }, 0 },
252b5132 2618 /* 60 */
4e7d34a6
L
2619 { X86_64_TABLE (X86_64_60) },
2620 { X86_64_TABLE (X86_64_61) },
2621 { X86_64_TABLE (X86_64_62) },
2622 { X86_64_TABLE (X86_64_63) },
592d1631
L
2623 { Bad_Opcode }, /* seg fs */
2624 { Bad_Opcode }, /* seg gs */
2625 { Bad_Opcode }, /* op size prefix */
2626 { Bad_Opcode }, /* adr size prefix */
252b5132 2627 /* 68 */
bf890a93
IT
2628 { "pushT", { sIv }, 0 },
2629 { "imulS", { Gv, Ev, Iv }, 0 },
2630 { "pushT", { sIbT }, 0 },
2631 { "imulS", { Gv, Ev, sIb }, 0 },
2632 { "ins{b|}", { Ybr, indirDX }, 0 },
4e7d34a6 2633 { X86_64_TABLE (X86_64_6D) },
bf890a93 2634 { "outs{b|}", { indirDXr, Xb }, 0 },
4e7d34a6 2635 { X86_64_TABLE (X86_64_6F) },
252b5132 2636 /* 70 */
bf890a93
IT
2637 { "joH", { Jb, BND, cond_jump_flag }, 0 },
2638 { "jnoH", { Jb, BND, cond_jump_flag }, 0 },
2639 { "jbH", { Jb, BND, cond_jump_flag }, 0 },
2640 { "jaeH", { Jb, BND, cond_jump_flag }, 0 },
2641 { "jeH", { Jb, BND, cond_jump_flag }, 0 },
2642 { "jneH", { Jb, BND, cond_jump_flag }, 0 },
2643 { "jbeH", { Jb, BND, cond_jump_flag }, 0 },
2644 { "jaH", { Jb, BND, cond_jump_flag }, 0 },
252b5132 2645 /* 78 */
bf890a93
IT
2646 { "jsH", { Jb, BND, cond_jump_flag }, 0 },
2647 { "jnsH", { Jb, BND, cond_jump_flag }, 0 },
2648 { "jpH", { Jb, BND, cond_jump_flag }, 0 },
2649 { "jnpH", { Jb, BND, cond_jump_flag }, 0 },
2650 { "jlH", { Jb, BND, cond_jump_flag }, 0 },
2651 { "jgeH", { Jb, BND, cond_jump_flag }, 0 },
2652 { "jleH", { Jb, BND, cond_jump_flag }, 0 },
2653 { "jgH", { Jb, BND, cond_jump_flag }, 0 },
252b5132 2654 /* 80 */
1ceb70f8
L
2655 { REG_TABLE (REG_80) },
2656 { REG_TABLE (REG_81) },
592d1631 2657 { Bad_Opcode },
1ceb70f8 2658 { REG_TABLE (REG_82) },
bf890a93
IT
2659 { "testB", { Eb, Gb }, 0 },
2660 { "testS", { Ev, Gv }, 0 },
2661 { "xchgB", { Ebh2, Gb }, 0 },
2662 { "xchgS", { Evh2, Gv }, 0 },
252b5132 2663 /* 88 */
bf890a93
IT
2664 { "movB", { Ebh3, Gb }, 0 },
2665 { "movS", { Evh3, Gv }, 0 },
2666 { "movB", { Gb, EbS }, 0 },
2667 { "movS", { Gv, EvS }, 0 },
2668 { "movD", { Sv, Sw }, 0 },
1ceb70f8 2669 { MOD_TABLE (MOD_8D) },
bf890a93 2670 { "movD", { Sw, Sv }, 0 },
1ceb70f8 2671 { REG_TABLE (REG_8F) },
252b5132 2672 /* 90 */
1ceb70f8 2673 { PREFIX_TABLE (PREFIX_90) },
bf890a93
IT
2674 { "xchgS", { RMeCX, eAX }, 0 },
2675 { "xchgS", { RMeDX, eAX }, 0 },
2676 { "xchgS", { RMeBX, eAX }, 0 },
2677 { "xchgS", { RMeSP, eAX }, 0 },
2678 { "xchgS", { RMeBP, eAX }, 0 },
2679 { "xchgS", { RMeSI, eAX }, 0 },
2680 { "xchgS", { RMeDI, eAX }, 0 },
252b5132 2681 /* 98 */
bf890a93
IT
2682 { "cW{t|}R", { XX }, 0 },
2683 { "cR{t|}O", { XX }, 0 },
4e7d34a6 2684 { X86_64_TABLE (X86_64_9A) },
592d1631 2685 { Bad_Opcode }, /* fwait */
bf890a93
IT
2686 { "pushfT", { XX }, 0 },
2687 { "popfT", { XX }, 0 },
2688 { "sahf", { XX }, 0 },
2689 { "lahf", { XX }, 0 },
252b5132 2690 /* a0 */
bf890a93
IT
2691 { "mov%LB", { AL, Ob }, 0 },
2692 { "mov%LS", { eAX, Ov }, 0 },
2693 { "mov%LB", { Ob, AL }, 0 },
2694 { "mov%LS", { Ov, eAX }, 0 },
2695 { "movs{b|}", { Ybr, Xb }, 0 },
2696 { "movs{R|}", { Yvr, Xv }, 0 },
2697 { "cmps{b|}", { Xb, Yb }, 0 },
2698 { "cmps{R|}", { Xv, Yv }, 0 },
252b5132 2699 /* a8 */
bf890a93
IT
2700 { "testB", { AL, Ib }, 0 },
2701 { "testS", { eAX, Iv }, 0 },
2702 { "stosB", { Ybr, AL }, 0 },
2703 { "stosS", { Yvr, eAX }, 0 },
2704 { "lodsB", { ALr, Xb }, 0 },
2705 { "lodsS", { eAXr, Xv }, 0 },
2706 { "scasB", { AL, Yb }, 0 },
2707 { "scasS", { eAX, Yv }, 0 },
252b5132 2708 /* b0 */
bf890a93
IT
2709 { "movB", { RMAL, Ib }, 0 },
2710 { "movB", { RMCL, Ib }, 0 },
2711 { "movB", { RMDL, Ib }, 0 },
2712 { "movB", { RMBL, Ib }, 0 },
2713 { "movB", { RMAH, Ib }, 0 },
2714 { "movB", { RMCH, Ib }, 0 },
2715 { "movB", { RMDH, Ib }, 0 },
2716 { "movB", { RMBH, Ib }, 0 },
252b5132 2717 /* b8 */
bf890a93
IT
2718 { "mov%LV", { RMeAX, Iv64 }, 0 },
2719 { "mov%LV", { RMeCX, Iv64 }, 0 },
2720 { "mov%LV", { RMeDX, Iv64 }, 0 },
2721 { "mov%LV", { RMeBX, Iv64 }, 0 },
2722 { "mov%LV", { RMeSP, Iv64 }, 0 },
2723 { "mov%LV", { RMeBP, Iv64 }, 0 },
2724 { "mov%LV", { RMeSI, Iv64 }, 0 },
2725 { "mov%LV", { RMeDI, Iv64 }, 0 },
252b5132 2726 /* c0 */
1ceb70f8
L
2727 { REG_TABLE (REG_C0) },
2728 { REG_TABLE (REG_C1) },
bf890a93
IT
2729 { "retT", { Iw, BND }, 0 },
2730 { "retT", { BND }, 0 },
4e7d34a6
L
2731 { X86_64_TABLE (X86_64_C4) },
2732 { X86_64_TABLE (X86_64_C5) },
1ceb70f8
L
2733 { REG_TABLE (REG_C6) },
2734 { REG_TABLE (REG_C7) },
252b5132 2735 /* c8 */
bf890a93
IT
2736 { "enterT", { Iw, Ib }, 0 },
2737 { "leaveT", { XX }, 0 },
2738 { "Jret{|f}P", { Iw }, 0 },
2739 { "Jret{|f}P", { XX }, 0 },
2740 { "int3", { XX }, 0 },
2741 { "int", { Ib }, 0 },
4e7d34a6 2742 { X86_64_TABLE (X86_64_CE) },
bf890a93 2743 { "iret%LP", { XX }, 0 },
252b5132 2744 /* d0 */
1ceb70f8
L
2745 { REG_TABLE (REG_D0) },
2746 { REG_TABLE (REG_D1) },
2747 { REG_TABLE (REG_D2) },
2748 { REG_TABLE (REG_D3) },
4e7d34a6
L
2749 { X86_64_TABLE (X86_64_D4) },
2750 { X86_64_TABLE (X86_64_D5) },
592d1631 2751 { Bad_Opcode },
bf890a93 2752 { "xlat", { DSBX }, 0 },
252b5132
RH
2753 /* d8 */
2754 { FLOAT },
2755 { FLOAT },
2756 { FLOAT },
2757 { FLOAT },
2758 { FLOAT },
2759 { FLOAT },
2760 { FLOAT },
2761 { FLOAT },
2762 /* e0 */
bf890a93
IT
2763 { "loopneFH", { Jb, XX, loop_jcxz_flag }, 0 },
2764 { "loopeFH", { Jb, XX, loop_jcxz_flag }, 0 },
2765 { "loopFH", { Jb, XX, loop_jcxz_flag }, 0 },
2766 { "jEcxzH", { Jb, XX, loop_jcxz_flag }, 0 },
2767 { "inB", { AL, Ib }, 0 },
2768 { "inG", { zAX, Ib }, 0 },
2769 { "outB", { Ib, AL }, 0 },
2770 { "outG", { Ib, zAX }, 0 },
252b5132 2771 /* e8 */
a72d2af2
L
2772 { X86_64_TABLE (X86_64_E8) },
2773 { X86_64_TABLE (X86_64_E9) },
4e7d34a6 2774 { X86_64_TABLE (X86_64_EA) },
bf890a93
IT
2775 { "jmp", { Jb, BND }, 0 },
2776 { "inB", { AL, indirDX }, 0 },
2777 { "inG", { zAX, indirDX }, 0 },
2778 { "outB", { indirDX, AL }, 0 },
2779 { "outG", { indirDX, zAX }, 0 },
252b5132 2780 /* f0 */
592d1631 2781 { Bad_Opcode }, /* lock prefix */
bf890a93 2782 { "icebp", { XX }, 0 },
592d1631
L
2783 { Bad_Opcode }, /* repne */
2784 { Bad_Opcode }, /* repz */
bf890a93
IT
2785 { "hlt", { XX }, 0 },
2786 { "cmc", { XX }, 0 },
1ceb70f8
L
2787 { REG_TABLE (REG_F6) },
2788 { REG_TABLE (REG_F7) },
252b5132 2789 /* f8 */
bf890a93
IT
2790 { "clc", { XX }, 0 },
2791 { "stc", { XX }, 0 },
2792 { "cli", { XX }, 0 },
2793 { "sti", { XX }, 0 },
2794 { "cld", { XX }, 0 },
2795 { "std", { XX }, 0 },
1ceb70f8
L
2796 { REG_TABLE (REG_FE) },
2797 { REG_TABLE (REG_FF) },
252b5132
RH
2798};
2799
6439fc28 2800static const struct dis386 dis386_twobyte[] = {
252b5132 2801 /* 00 */
1ceb70f8
L
2802 { REG_TABLE (REG_0F00 ) },
2803 { REG_TABLE (REG_0F01 ) },
bf890a93
IT
2804 { "larS", { Gv, Ew }, 0 },
2805 { "lslS", { Gv, Ew }, 0 },
592d1631 2806 { Bad_Opcode },
bf890a93
IT
2807 { "syscall", { XX }, 0 },
2808 { "clts", { XX }, 0 },
2809 { "sysret%LP", { XX }, 0 },
252b5132 2810 /* 08 */
bf890a93
IT
2811 { "invd", { XX }, 0 },
2812 { "wbinvd", { XX }, 0 },
592d1631 2813 { Bad_Opcode },
bf890a93 2814 { "ud2", { XX }, 0 },
592d1631 2815 { Bad_Opcode },
b5b1fc4f 2816 { REG_TABLE (REG_0F0D) },
bf890a93
IT
2817 { "femms", { XX }, 0 },
2818 { "", { MX, EM, OPSUF }, 0 }, /* See OP_3DNowSuffix. */
252b5132 2819 /* 10 */
1ceb70f8
L
2820 { PREFIX_TABLE (PREFIX_0F10) },
2821 { PREFIX_TABLE (PREFIX_0F11) },
2822 { PREFIX_TABLE (PREFIX_0F12) },
2823 { MOD_TABLE (MOD_0F13) },
507bd325
L
2824 { "unpcklpX", { XM, EXx }, PREFIX_OPCODE },
2825 { "unpckhpX", { XM, EXx }, PREFIX_OPCODE },
1ceb70f8
L
2826 { PREFIX_TABLE (PREFIX_0F16) },
2827 { MOD_TABLE (MOD_0F17) },
252b5132 2828 /* 18 */
1ceb70f8 2829 { REG_TABLE (REG_0F18) },
bf890a93 2830 { "nopQ", { Ev }, 0 },
7e8b059b
L
2831 { PREFIX_TABLE (PREFIX_0F1A) },
2832 { PREFIX_TABLE (PREFIX_0F1B) },
bf890a93
IT
2833 { "nopQ", { Ev }, 0 },
2834 { "nopQ", { Ev }, 0 },
2835 { "nopQ", { Ev }, 0 },
2836 { "nopQ", { Ev }, 0 },
252b5132 2837 /* 20 */
bf890a93
IT
2838 { "movZ", { Rm, Cm }, 0 },
2839 { "movZ", { Rm, Dm }, 0 },
2840 { "movZ", { Cm, Rm }, 0 },
2841 { "movZ", { Dm, Rm }, 0 },
1ceb70f8 2842 { MOD_TABLE (MOD_0F24) },
592d1631 2843 { Bad_Opcode },
1ceb70f8 2844 { MOD_TABLE (MOD_0F26) },
592d1631 2845 { Bad_Opcode },
252b5132 2846 /* 28 */
507bd325
L
2847 { "movapX", { XM, EXx }, PREFIX_OPCODE },
2848 { "movapX", { EXxS, XM }, PREFIX_OPCODE },
1ceb70f8
L
2849 { PREFIX_TABLE (PREFIX_0F2A) },
2850 { PREFIX_TABLE (PREFIX_0F2B) },
2851 { PREFIX_TABLE (PREFIX_0F2C) },
2852 { PREFIX_TABLE (PREFIX_0F2D) },
2853 { PREFIX_TABLE (PREFIX_0F2E) },
2854 { PREFIX_TABLE (PREFIX_0F2F) },
252b5132 2855 /* 30 */
bf890a93
IT
2856 { "wrmsr", { XX }, 0 },
2857 { "rdtsc", { XX }, 0 },
2858 { "rdmsr", { XX }, 0 },
2859 { "rdpmc", { XX }, 0 },
2860 { "sysenter", { XX }, 0 },
2861 { "sysexit", { XX }, 0 },
592d1631 2862 { Bad_Opcode },
bf890a93 2863 { "getsec", { XX }, 0 },
252b5132 2864 /* 38 */
507bd325 2865 { THREE_BYTE_TABLE_PREFIX (THREE_BYTE_0F38, PREFIX_OPCODE) },
592d1631 2866 { Bad_Opcode },
507bd325 2867 { THREE_BYTE_TABLE_PREFIX (THREE_BYTE_0F3A, PREFIX_OPCODE) },
592d1631
L
2868 { Bad_Opcode },
2869 { Bad_Opcode },
2870 { Bad_Opcode },
2871 { Bad_Opcode },
2872 { Bad_Opcode },
252b5132 2873 /* 40 */
bf890a93
IT
2874 { "cmovoS", { Gv, Ev }, 0 },
2875 { "cmovnoS", { Gv, Ev }, 0 },
2876 { "cmovbS", { Gv, Ev }, 0 },
2877 { "cmovaeS", { Gv, Ev }, 0 },
2878 { "cmoveS", { Gv, Ev }, 0 },
2879 { "cmovneS", { Gv, Ev }, 0 },
2880 { "cmovbeS", { Gv, Ev }, 0 },
2881 { "cmovaS", { Gv, Ev }, 0 },
252b5132 2882 /* 48 */
bf890a93
IT
2883 { "cmovsS", { Gv, Ev }, 0 },
2884 { "cmovnsS", { Gv, Ev }, 0 },
2885 { "cmovpS", { Gv, Ev }, 0 },
2886 { "cmovnpS", { Gv, Ev }, 0 },
2887 { "cmovlS", { Gv, Ev }, 0 },
2888 { "cmovgeS", { Gv, Ev }, 0 },
2889 { "cmovleS", { Gv, Ev }, 0 },
2890 { "cmovgS", { Gv, Ev }, 0 },
252b5132 2891 /* 50 */
75c135a8 2892 { MOD_TABLE (MOD_0F51) },
1ceb70f8
L
2893 { PREFIX_TABLE (PREFIX_0F51) },
2894 { PREFIX_TABLE (PREFIX_0F52) },
2895 { PREFIX_TABLE (PREFIX_0F53) },
507bd325
L
2896 { "andpX", { XM, EXx }, PREFIX_OPCODE },
2897 { "andnpX", { XM, EXx }, PREFIX_OPCODE },
2898 { "orpX", { XM, EXx }, PREFIX_OPCODE },
2899 { "xorpX", { XM, EXx }, PREFIX_OPCODE },
252b5132 2900 /* 58 */
1ceb70f8
L
2901 { PREFIX_TABLE (PREFIX_0F58) },
2902 { PREFIX_TABLE (PREFIX_0F59) },
2903 { PREFIX_TABLE (PREFIX_0F5A) },
2904 { PREFIX_TABLE (PREFIX_0F5B) },
2905 { PREFIX_TABLE (PREFIX_0F5C) },
2906 { PREFIX_TABLE (PREFIX_0F5D) },
2907 { PREFIX_TABLE (PREFIX_0F5E) },
2908 { PREFIX_TABLE (PREFIX_0F5F) },
252b5132 2909 /* 60 */
1ceb70f8
L
2910 { PREFIX_TABLE (PREFIX_0F60) },
2911 { PREFIX_TABLE (PREFIX_0F61) },
2912 { PREFIX_TABLE (PREFIX_0F62) },
507bd325
L
2913 { "packsswb", { MX, EM }, PREFIX_OPCODE },
2914 { "pcmpgtb", { MX, EM }, PREFIX_OPCODE },
2915 { "pcmpgtw", { MX, EM }, PREFIX_OPCODE },
2916 { "pcmpgtd", { MX, EM }, PREFIX_OPCODE },
2917 { "packuswb", { MX, EM }, PREFIX_OPCODE },
252b5132 2918 /* 68 */
507bd325
L
2919 { "punpckhbw", { MX, EM }, PREFIX_OPCODE },
2920 { "punpckhwd", { MX, EM }, PREFIX_OPCODE },
2921 { "punpckhdq", { MX, EM }, PREFIX_OPCODE },
2922 { "packssdw", { MX, EM }, PREFIX_OPCODE },
1ceb70f8
L
2923 { PREFIX_TABLE (PREFIX_0F6C) },
2924 { PREFIX_TABLE (PREFIX_0F6D) },
507bd325 2925 { "movK", { MX, Edq }, PREFIX_OPCODE },
1ceb70f8 2926 { PREFIX_TABLE (PREFIX_0F6F) },
252b5132 2927 /* 70 */
1ceb70f8
L
2928 { PREFIX_TABLE (PREFIX_0F70) },
2929 { REG_TABLE (REG_0F71) },
2930 { REG_TABLE (REG_0F72) },
2931 { REG_TABLE (REG_0F73) },
507bd325
L
2932 { "pcmpeqb", { MX, EM }, PREFIX_OPCODE },
2933 { "pcmpeqw", { MX, EM }, PREFIX_OPCODE },
2934 { "pcmpeqd", { MX, EM }, PREFIX_OPCODE },
2935 { "emms", { XX }, PREFIX_OPCODE },
252b5132 2936 /* 78 */
1ceb70f8
L
2937 { PREFIX_TABLE (PREFIX_0F78) },
2938 { PREFIX_TABLE (PREFIX_0F79) },
4e7d34a6 2939 { THREE_BYTE_TABLE (THREE_BYTE_0F7A) },
592d1631 2940 { Bad_Opcode },
1ceb70f8
L
2941 { PREFIX_TABLE (PREFIX_0F7C) },
2942 { PREFIX_TABLE (PREFIX_0F7D) },
2943 { PREFIX_TABLE (PREFIX_0F7E) },
2944 { PREFIX_TABLE (PREFIX_0F7F) },
252b5132 2945 /* 80 */
bf890a93
IT
2946 { "joH", { Jv, BND, cond_jump_flag }, 0 },
2947 { "jnoH", { Jv, BND, cond_jump_flag }, 0 },
2948 { "jbH", { Jv, BND, cond_jump_flag }, 0 },
2949 { "jaeH", { Jv, BND, cond_jump_flag }, 0 },
2950 { "jeH", { Jv, BND, cond_jump_flag }, 0 },
2951 { "jneH", { Jv, BND, cond_jump_flag }, 0 },
2952 { "jbeH", { Jv, BND, cond_jump_flag }, 0 },
2953 { "jaH", { Jv, BND, cond_jump_flag }, 0 },
252b5132 2954 /* 88 */
bf890a93
IT
2955 { "jsH", { Jv, BND, cond_jump_flag }, 0 },
2956 { "jnsH", { Jv, BND, cond_jump_flag }, 0 },
2957 { "jpH", { Jv, BND, cond_jump_flag }, 0 },
2958 { "jnpH", { Jv, BND, cond_jump_flag }, 0 },
2959 { "jlH", { Jv, BND, cond_jump_flag }, 0 },
2960 { "jgeH", { Jv, BND, cond_jump_flag }, 0 },
2961 { "jleH", { Jv, BND, cond_jump_flag }, 0 },
2962 { "jgH", { Jv, BND, cond_jump_flag }, 0 },
252b5132 2963 /* 90 */
bf890a93
IT
2964 { "seto", { Eb }, 0 },
2965 { "setno", { Eb }, 0 },
2966 { "setb", { Eb }, 0 },
2967 { "setae", { Eb }, 0 },
2968 { "sete", { Eb }, 0 },
2969 { "setne", { Eb }, 0 },
2970 { "setbe", { Eb }, 0 },
2971 { "seta", { Eb }, 0 },
252b5132 2972 /* 98 */
bf890a93
IT
2973 { "sets", { Eb }, 0 },
2974 { "setns", { Eb }, 0 },
2975 { "setp", { Eb }, 0 },
2976 { "setnp", { Eb }, 0 },
2977 { "setl", { Eb }, 0 },
2978 { "setge", { Eb }, 0 },
2979 { "setle", { Eb }, 0 },
2980 { "setg", { Eb }, 0 },
252b5132 2981 /* a0 */
bf890a93
IT
2982 { "pushT", { fs }, 0 },
2983 { "popT", { fs }, 0 },
2984 { "cpuid", { XX }, 0 },
2985 { "btS", { Ev, Gv }, 0 },
2986 { "shldS", { Ev, Gv, Ib }, 0 },
2987 { "shldS", { Ev, Gv, CL }, 0 },
1ceb70f8
L
2988 { REG_TABLE (REG_0FA6) },
2989 { REG_TABLE (REG_0FA7) },
252b5132 2990 /* a8 */
bf890a93
IT
2991 { "pushT", { gs }, 0 },
2992 { "popT", { gs }, 0 },
2993 { "rsm", { XX }, 0 },
2994 { "btsS", { Evh1, Gv }, 0 },
2995 { "shrdS", { Ev, Gv, Ib }, 0 },
2996 { "shrdS", { Ev, Gv, CL }, 0 },
1ceb70f8 2997 { REG_TABLE (REG_0FAE) },
bf890a93 2998 { "imulS", { Gv, Ev }, 0 },
252b5132 2999 /* b0 */
bf890a93
IT
3000 { "cmpxchgB", { Ebh1, Gb }, 0 },
3001 { "cmpxchgS", { Evh1, Gv }, 0 },
1ceb70f8 3002 { MOD_TABLE (MOD_0FB2) },
bf890a93 3003 { "btrS", { Evh1, Gv }, 0 },
1ceb70f8
L
3004 { MOD_TABLE (MOD_0FB4) },
3005 { MOD_TABLE (MOD_0FB5) },
bf890a93
IT
3006 { "movz{bR|x}", { Gv, Eb }, 0 },
3007 { "movz{wR|x}", { Gv, Ew }, 0 }, /* yes, there really is movzww ! */
252b5132 3008 /* b8 */
1ceb70f8 3009 { PREFIX_TABLE (PREFIX_0FB8) },
bf890a93 3010 { "ud1", { XX }, 0 },
1ceb70f8 3011 { REG_TABLE (REG_0FBA) },
bf890a93 3012 { "btcS", { Evh1, Gv }, 0 },
f12dc422 3013 { PREFIX_TABLE (PREFIX_0FBC) },
1ceb70f8 3014 { PREFIX_TABLE (PREFIX_0FBD) },
bf890a93
IT
3015 { "movs{bR|x}", { Gv, Eb }, 0 },
3016 { "movs{wR|x}", { Gv, Ew }, 0 }, /* yes, there really is movsww ! */
252b5132 3017 /* c0 */
bf890a93
IT
3018 { "xaddB", { Ebh1, Gb }, 0 },
3019 { "xaddS", { Evh1, Gv }, 0 },
1ceb70f8 3020 { PREFIX_TABLE (PREFIX_0FC2) },
a8484f96 3021 { MOD_TABLE (MOD_0FC3) },
507bd325
L
3022 { "pinsrw", { MX, Edqw, Ib }, PREFIX_OPCODE },
3023 { "pextrw", { Gdq, MS, Ib }, PREFIX_OPCODE },
3024 { "shufpX", { XM, EXx, Ib }, PREFIX_OPCODE },
1ceb70f8 3025 { REG_TABLE (REG_0FC7) },
252b5132 3026 /* c8 */
bf890a93
IT
3027 { "bswap", { RMeAX }, 0 },
3028 { "bswap", { RMeCX }, 0 },
3029 { "bswap", { RMeDX }, 0 },
3030 { "bswap", { RMeBX }, 0 },
3031 { "bswap", { RMeSP }, 0 },
3032 { "bswap", { RMeBP }, 0 },
3033 { "bswap", { RMeSI }, 0 },
3034 { "bswap", { RMeDI }, 0 },
252b5132 3035 /* d0 */
1ceb70f8 3036 { PREFIX_TABLE (PREFIX_0FD0) },
507bd325
L
3037 { "psrlw", { MX, EM }, PREFIX_OPCODE },
3038 { "psrld", { MX, EM }, PREFIX_OPCODE },
3039 { "psrlq", { MX, EM }, PREFIX_OPCODE },
3040 { "paddq", { MX, EM }, PREFIX_OPCODE },
3041 { "pmullw", { MX, EM }, PREFIX_OPCODE },
1ceb70f8 3042 { PREFIX_TABLE (PREFIX_0FD6) },
75c135a8 3043 { MOD_TABLE (MOD_0FD7) },
252b5132 3044 /* d8 */
507bd325
L
3045 { "psubusb", { MX, EM }, PREFIX_OPCODE },
3046 { "psubusw", { MX, EM }, PREFIX_OPCODE },
3047 { "pminub", { MX, EM }, PREFIX_OPCODE },
3048 { "pand", { MX, EM }, PREFIX_OPCODE },
3049 { "paddusb", { MX, EM }, PREFIX_OPCODE },
3050 { "paddusw", { MX, EM }, PREFIX_OPCODE },
3051 { "pmaxub", { MX, EM }, PREFIX_OPCODE },
3052 { "pandn", { MX, EM }, PREFIX_OPCODE },
252b5132 3053 /* e0 */
507bd325
L
3054 { "pavgb", { MX, EM }, PREFIX_OPCODE },
3055 { "psraw", { MX, EM }, PREFIX_OPCODE },
3056 { "psrad", { MX, EM }, PREFIX_OPCODE },
3057 { "pavgw", { MX, EM }, PREFIX_OPCODE },
3058 { "pmulhuw", { MX, EM }, PREFIX_OPCODE },
3059 { "pmulhw", { MX, EM }, PREFIX_OPCODE },
1ceb70f8
L
3060 { PREFIX_TABLE (PREFIX_0FE6) },
3061 { PREFIX_TABLE (PREFIX_0FE7) },
252b5132 3062 /* e8 */
507bd325
L
3063 { "psubsb", { MX, EM }, PREFIX_OPCODE },
3064 { "psubsw", { MX, EM }, PREFIX_OPCODE },
3065 { "pminsw", { MX, EM }, PREFIX_OPCODE },
3066 { "por", { MX, EM }, PREFIX_OPCODE },
3067 { "paddsb", { MX, EM }, PREFIX_OPCODE },
3068 { "paddsw", { MX, EM }, PREFIX_OPCODE },
3069 { "pmaxsw", { MX, EM }, PREFIX_OPCODE },
3070 { "pxor", { MX, EM }, PREFIX_OPCODE },
252b5132 3071 /* f0 */
1ceb70f8 3072 { PREFIX_TABLE (PREFIX_0FF0) },
507bd325
L
3073 { "psllw", { MX, EM }, PREFIX_OPCODE },
3074 { "pslld", { MX, EM }, PREFIX_OPCODE },
3075 { "psllq", { MX, EM }, PREFIX_OPCODE },
3076 { "pmuludq", { MX, EM }, PREFIX_OPCODE },
3077 { "pmaddwd", { MX, EM }, PREFIX_OPCODE },
3078 { "psadbw", { MX, EM }, PREFIX_OPCODE },
1ceb70f8 3079 { PREFIX_TABLE (PREFIX_0FF7) },
252b5132 3080 /* f8 */
507bd325
L
3081 { "psubb", { MX, EM }, PREFIX_OPCODE },
3082 { "psubw", { MX, EM }, PREFIX_OPCODE },
3083 { "psubd", { MX, EM }, PREFIX_OPCODE },
3084 { "psubq", { MX, EM }, PREFIX_OPCODE },
3085 { "paddb", { MX, EM }, PREFIX_OPCODE },
3086 { "paddw", { MX, EM }, PREFIX_OPCODE },
3087 { "paddd", { MX, EM }, PREFIX_OPCODE },
592d1631 3088 { Bad_Opcode },
252b5132
RH
3089};
3090
3091static const unsigned char onebyte_has_modrm[256] = {
c608c12e
AM
3092 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
3093 /* ------------------------------- */
3094 /* 00 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 00 */
3095 /* 10 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 10 */
3096 /* 20 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 20 */
3097 /* 30 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 30 */
3098 /* 40 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 40 */
3099 /* 50 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 50 */
3100 /* 60 */ 0,0,1,1,0,0,0,0,0,1,0,1,0,0,0,0, /* 60 */
3101 /* 70 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 70 */
3102 /* 80 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 80 */
3103 /* 90 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 90 */
3104 /* a0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* a0 */
3105 /* b0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* b0 */
3106 /* c0 */ 1,1,0,0,1,1,1,1,0,0,0,0,0,0,0,0, /* c0 */
3107 /* d0 */ 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1, /* d0 */
3108 /* e0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* e0 */
3109 /* f0 */ 0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1 /* f0 */
3110 /* ------------------------------- */
3111 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
252b5132
RH
3112};
3113
3114static const unsigned char twobyte_has_modrm[256] = {
c608c12e
AM
3115 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
3116 /* ------------------------------- */
252b5132 3117 /* 00 */ 1,1,1,1,0,0,0,0,0,0,0,0,0,1,0,1, /* 0f */
b5b1fc4f 3118 /* 10 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 1f */
85f10a01 3119 /* 20 */ 1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1, /* 2f */
331d2d0d 3120 /* 30 */ 0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0, /* 3f */
252b5132 3121 /* 40 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 4f */
4bba6815
AM
3122 /* 50 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 5f */
3123 /* 60 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 6f */
85f10a01 3124 /* 70 */ 1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1, /* 7f */
252b5132
RH
3125 /* 80 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 8f */
3126 /* 90 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 9f */
30d1c836 3127 /* a0 */ 0,0,0,1,1,1,1,1,0,0,0,1,1,1,1,1, /* af */
050dfa73 3128 /* b0 */ 1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1, /* bf */
252b5132 3129 /* c0 */ 1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0, /* cf */
ca164297 3130 /* d0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* df */
4bba6815 3131 /* e0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* ef */
ca164297 3132 /* f0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0 /* ff */
c608c12e
AM
3133 /* ------------------------------- */
3134 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
3135};
3136
252b5132
RH
3137static char obuf[100];
3138static char *obufp;
ea397f5b 3139static char *mnemonicendp;
252b5132
RH
3140static char scratchbuf[100];
3141static unsigned char *start_codep;
3142static unsigned char *insn_codep;
3143static unsigned char *codep;
285ca992 3144static unsigned char *end_codep;
f16cd0d5
L
3145static int last_lock_prefix;
3146static int last_repz_prefix;
3147static int last_repnz_prefix;
3148static int last_data_prefix;
3149static int last_addr_prefix;
3150static int last_rex_prefix;
3151static int last_seg_prefix;
d9949a36 3152static int fwait_prefix;
285ca992
L
3153/* The active segment register prefix. */
3154static int active_seg_prefix;
f16cd0d5
L
3155#define MAX_CODE_LENGTH 15
3156/* We can up to 14 prefixes since the maximum instruction length is
3157 15bytes. */
3158static int all_prefixes[MAX_CODE_LENGTH - 1];
252b5132 3159static disassemble_info *the_info;
7967e09e
L
3160static struct
3161 {
3162 int mod;
7967e09e 3163 int reg;
484c222e 3164 int rm;
7967e09e
L
3165 }
3166modrm;
4bba6815 3167static unsigned char need_modrm;
dfc8cf43
L
3168static struct
3169 {
3170 int scale;
3171 int index;
3172 int base;
3173 }
3174sib;
c0f3af97
L
3175static struct
3176 {
3177 int register_specifier;
3178 int length;
3179 int prefix;
3180 int w;
43234a1e
L
3181 int evex;
3182 int r;
3183 int v;
3184 int mask_register_specifier;
3185 int zeroing;
3186 int ll;
3187 int b;
c0f3af97
L
3188 }
3189vex;
3190static unsigned char need_vex;
3191static unsigned char need_vex_reg;
dae39acc 3192static unsigned char vex_w_done;
252b5132 3193
ea397f5b
L
3194struct op
3195 {
3196 const char *name;
3197 unsigned int len;
3198 };
3199
4bba6815
AM
3200/* If we are accessing mod/rm/reg without need_modrm set, then the
3201 values are stale. Hitting this abort likely indicates that you
3202 need to update onebyte_has_modrm or twobyte_has_modrm. */
3203#define MODRM_CHECK if (!need_modrm) abort ()
3204
d708bcba
AM
3205static const char **names64;
3206static const char **names32;
3207static const char **names16;
3208static const char **names8;
3209static const char **names8rex;
3210static const char **names_seg;
db51cc60
L
3211static const char *index64;
3212static const char *index32;
d708bcba 3213static const char **index16;
7e8b059b 3214static const char **names_bnd;
d708bcba
AM
3215
3216static const char *intel_names64[] = {
3217 "rax", "rcx", "rdx", "rbx", "rsp", "rbp", "rsi", "rdi",
3218 "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15"
3219};
3220static const char *intel_names32[] = {
3221 "eax", "ecx", "edx", "ebx", "esp", "ebp", "esi", "edi",
3222 "r8d", "r9d", "r10d", "r11d", "r12d", "r13d", "r14d", "r15d"
3223};
3224static const char *intel_names16[] = {
3225 "ax", "cx", "dx", "bx", "sp", "bp", "si", "di",
3226 "r8w", "r9w", "r10w", "r11w", "r12w", "r13w", "r14w", "r15w"
3227};
3228static const char *intel_names8[] = {
3229 "al", "cl", "dl", "bl", "ah", "ch", "dh", "bh",
3230};
3231static const char *intel_names8rex[] = {
3232 "al", "cl", "dl", "bl", "spl", "bpl", "sil", "dil",
3233 "r8b", "r9b", "r10b", "r11b", "r12b", "r13b", "r14b", "r15b"
3234};
3235static const char *intel_names_seg[] = {
3236 "es", "cs", "ss", "ds", "fs", "gs", "?", "?",
3237};
db51cc60
L
3238static const char *intel_index64 = "riz";
3239static const char *intel_index32 = "eiz";
d708bcba
AM
3240static const char *intel_index16[] = {
3241 "bx+si", "bx+di", "bp+si", "bp+di", "si", "di", "bp", "bx"
3242};
3243
3244static const char *att_names64[] = {
3245 "%rax", "%rcx", "%rdx", "%rbx", "%rsp", "%rbp", "%rsi", "%rdi",
52b15da3
JH
3246 "%r8", "%r9", "%r10", "%r11", "%r12", "%r13", "%r14", "%r15"
3247};
d708bcba
AM
3248static const char *att_names32[] = {
3249 "%eax", "%ecx", "%edx", "%ebx", "%esp", "%ebp", "%esi", "%edi",
52b15da3 3250 "%r8d", "%r9d", "%r10d", "%r11d", "%r12d", "%r13d", "%r14d", "%r15d"
252b5132 3251};
d708bcba
AM
3252static const char *att_names16[] = {
3253 "%ax", "%cx", "%dx", "%bx", "%sp", "%bp", "%si", "%di",
52b15da3 3254 "%r8w", "%r9w", "%r10w", "%r11w", "%r12w", "%r13w", "%r14w", "%r15w"
252b5132 3255};
d708bcba
AM
3256static const char *att_names8[] = {
3257 "%al", "%cl", "%dl", "%bl", "%ah", "%ch", "%dh", "%bh",
252b5132 3258};
d708bcba
AM
3259static const char *att_names8rex[] = {
3260 "%al", "%cl", "%dl", "%bl", "%spl", "%bpl", "%sil", "%dil",
52b15da3
JH
3261 "%r8b", "%r9b", "%r10b", "%r11b", "%r12b", "%r13b", "%r14b", "%r15b"
3262};
d708bcba
AM
3263static const char *att_names_seg[] = {
3264 "%es", "%cs", "%ss", "%ds", "%fs", "%gs", "%?", "%?",
252b5132 3265};
db51cc60
L
3266static const char *att_index64 = "%riz";
3267static const char *att_index32 = "%eiz";
d708bcba
AM
3268static const char *att_index16[] = {
3269 "%bx,%si", "%bx,%di", "%bp,%si", "%bp,%di", "%si", "%di", "%bp", "%bx"
252b5132
RH
3270};
3271
b9733481
L
3272static const char **names_mm;
3273static const char *intel_names_mm[] = {
3274 "mm0", "mm1", "mm2", "mm3",
3275 "mm4", "mm5", "mm6", "mm7"
3276};
3277static const char *att_names_mm[] = {
3278 "%mm0", "%mm1", "%mm2", "%mm3",
3279 "%mm4", "%mm5", "%mm6", "%mm7"
3280};
3281
7e8b059b
L
3282static const char *intel_names_bnd[] = {
3283 "bnd0", "bnd1", "bnd2", "bnd3"
3284};
3285
3286static const char *att_names_bnd[] = {
3287 "%bnd0", "%bnd1", "%bnd2", "%bnd3"
3288};
3289
b9733481
L
3290static const char **names_xmm;
3291static const char *intel_names_xmm[] = {
3292 "xmm0", "xmm1", "xmm2", "xmm3",
3293 "xmm4", "xmm5", "xmm6", "xmm7",
3294 "xmm8", "xmm9", "xmm10", "xmm11",
43234a1e
L
3295 "xmm12", "xmm13", "xmm14", "xmm15",
3296 "xmm16", "xmm17", "xmm18", "xmm19",
3297 "xmm20", "xmm21", "xmm22", "xmm23",
3298 "xmm24", "xmm25", "xmm26", "xmm27",
3299 "xmm28", "xmm29", "xmm30", "xmm31"
b9733481
L
3300};
3301static const char *att_names_xmm[] = {
3302 "%xmm0", "%xmm1", "%xmm2", "%xmm3",
3303 "%xmm4", "%xmm5", "%xmm6", "%xmm7",
3304 "%xmm8", "%xmm9", "%xmm10", "%xmm11",
43234a1e
L
3305 "%xmm12", "%xmm13", "%xmm14", "%xmm15",
3306 "%xmm16", "%xmm17", "%xmm18", "%xmm19",
3307 "%xmm20", "%xmm21", "%xmm22", "%xmm23",
3308 "%xmm24", "%xmm25", "%xmm26", "%xmm27",
3309 "%xmm28", "%xmm29", "%xmm30", "%xmm31"
b9733481
L
3310};
3311
3312static const char **names_ymm;
3313static const char *intel_names_ymm[] = {
3314 "ymm0", "ymm1", "ymm2", "ymm3",
3315 "ymm4", "ymm5", "ymm6", "ymm7",
3316 "ymm8", "ymm9", "ymm10", "ymm11",
43234a1e
L
3317 "ymm12", "ymm13", "ymm14", "ymm15",
3318 "ymm16", "ymm17", "ymm18", "ymm19",
3319 "ymm20", "ymm21", "ymm22", "ymm23",
3320 "ymm24", "ymm25", "ymm26", "ymm27",
3321 "ymm28", "ymm29", "ymm30", "ymm31"
b9733481
L
3322};
3323static const char *att_names_ymm[] = {
3324 "%ymm0", "%ymm1", "%ymm2", "%ymm3",
3325 "%ymm4", "%ymm5", "%ymm6", "%ymm7",
3326 "%ymm8", "%ymm9", "%ymm10", "%ymm11",
43234a1e
L
3327 "%ymm12", "%ymm13", "%ymm14", "%ymm15",
3328 "%ymm16", "%ymm17", "%ymm18", "%ymm19",
3329 "%ymm20", "%ymm21", "%ymm22", "%ymm23",
3330 "%ymm24", "%ymm25", "%ymm26", "%ymm27",
3331 "%ymm28", "%ymm29", "%ymm30", "%ymm31"
3332};
3333
3334static const char **names_zmm;
3335static const char *intel_names_zmm[] = {
3336 "zmm0", "zmm1", "zmm2", "zmm3",
3337 "zmm4", "zmm5", "zmm6", "zmm7",
3338 "zmm8", "zmm9", "zmm10", "zmm11",
3339 "zmm12", "zmm13", "zmm14", "zmm15",
3340 "zmm16", "zmm17", "zmm18", "zmm19",
3341 "zmm20", "zmm21", "zmm22", "zmm23",
3342 "zmm24", "zmm25", "zmm26", "zmm27",
3343 "zmm28", "zmm29", "zmm30", "zmm31"
3344};
3345static const char *att_names_zmm[] = {
3346 "%zmm0", "%zmm1", "%zmm2", "%zmm3",
3347 "%zmm4", "%zmm5", "%zmm6", "%zmm7",
3348 "%zmm8", "%zmm9", "%zmm10", "%zmm11",
3349 "%zmm12", "%zmm13", "%zmm14", "%zmm15",
3350 "%zmm16", "%zmm17", "%zmm18", "%zmm19",
3351 "%zmm20", "%zmm21", "%zmm22", "%zmm23",
3352 "%zmm24", "%zmm25", "%zmm26", "%zmm27",
3353 "%zmm28", "%zmm29", "%zmm30", "%zmm31"
3354};
3355
3356static const char **names_mask;
3357static const char *intel_names_mask[] = {
3358 "k0", "k1", "k2", "k3", "k4", "k5", "k6", "k7"
3359};
3360static const char *att_names_mask[] = {
3361 "%k0", "%k1", "%k2", "%k3", "%k4", "%k5", "%k6", "%k7"
3362};
3363
3364static const char *names_rounding[] =
3365{
3366 "{rn-sae}",
3367 "{rd-sae}",
3368 "{ru-sae}",
3369 "{rz-sae}"
b9733481
L
3370};
3371
1ceb70f8
L
3372static const struct dis386 reg_table[][8] = {
3373 /* REG_80 */
252b5132 3374 {
bf890a93
IT
3375 { "addA", { Ebh1, Ib }, 0 },
3376 { "orA", { Ebh1, Ib }, 0 },
3377 { "adcA", { Ebh1, Ib }, 0 },
3378 { "sbbA", { Ebh1, Ib }, 0 },
3379 { "andA", { Ebh1, Ib }, 0 },
3380 { "subA", { Ebh1, Ib }, 0 },
3381 { "xorA", { Ebh1, Ib }, 0 },
3382 { "cmpA", { Eb, Ib }, 0 },
252b5132 3383 },
1ceb70f8 3384 /* REG_81 */
252b5132 3385 {
bf890a93
IT
3386 { "addQ", { Evh1, Iv }, 0 },
3387 { "orQ", { Evh1, Iv }, 0 },
3388 { "adcQ", { Evh1, Iv }, 0 },
3389 { "sbbQ", { Evh1, Iv }, 0 },
3390 { "andQ", { Evh1, Iv }, 0 },
3391 { "subQ", { Evh1, Iv }, 0 },
3392 { "xorQ", { Evh1, Iv }, 0 },
3393 { "cmpQ", { Ev, Iv }, 0 },
252b5132 3394 },
1ceb70f8 3395 /* REG_82 */
252b5132 3396 {
bf890a93
IT
3397 { "addQ", { Evh1, sIb }, 0 },
3398 { "orQ", { Evh1, sIb }, 0 },
3399 { "adcQ", { Evh1, sIb }, 0 },
3400 { "sbbQ", { Evh1, sIb }, 0 },
3401 { "andQ", { Evh1, sIb }, 0 },
3402 { "subQ", { Evh1, sIb }, 0 },
3403 { "xorQ", { Evh1, sIb }, 0 },
3404 { "cmpQ", { Ev, sIb }, 0 },
252b5132 3405 },
1ceb70f8 3406 /* REG_8F */
4e7d34a6 3407 {
bf890a93 3408 { "popU", { stackEv }, 0 },
c48244a5 3409 { XOP_8F_TABLE (XOP_09) },
592d1631
L
3410 { Bad_Opcode },
3411 { Bad_Opcode },
3412 { Bad_Opcode },
f88c9eb0 3413 { XOP_8F_TABLE (XOP_09) },
4e7d34a6 3414 },
1ceb70f8 3415 /* REG_C0 */
252b5132 3416 {
bf890a93
IT
3417 { "rolA", { Eb, Ib }, 0 },
3418 { "rorA", { Eb, Ib }, 0 },
3419 { "rclA", { Eb, Ib }, 0 },
3420 { "rcrA", { Eb, Ib }, 0 },
3421 { "shlA", { Eb, Ib }, 0 },
3422 { "shrA", { Eb, Ib }, 0 },
592d1631 3423 { Bad_Opcode },
bf890a93 3424 { "sarA", { Eb, Ib }, 0 },
252b5132 3425 },
1ceb70f8 3426 /* REG_C1 */
252b5132 3427 {
bf890a93
IT
3428 { "rolQ", { Ev, Ib }, 0 },
3429 { "rorQ", { Ev, Ib }, 0 },
3430 { "rclQ", { Ev, Ib }, 0 },
3431 { "rcrQ", { Ev, Ib }, 0 },
3432 { "shlQ", { Ev, Ib }, 0 },
3433 { "shrQ", { Ev, Ib }, 0 },
592d1631 3434 { Bad_Opcode },
bf890a93 3435 { "sarQ", { Ev, Ib }, 0 },
252b5132 3436 },
1ceb70f8 3437 /* REG_C6 */
4e7d34a6 3438 {
bf890a93 3439 { "movA", { Ebh3, Ib }, 0 },
42164a71
L
3440 { Bad_Opcode },
3441 { Bad_Opcode },
3442 { Bad_Opcode },
3443 { Bad_Opcode },
3444 { Bad_Opcode },
3445 { Bad_Opcode },
3446 { MOD_TABLE (MOD_C6_REG_7) },
4e7d34a6 3447 },
1ceb70f8 3448 /* REG_C7 */
4e7d34a6 3449 {
bf890a93 3450 { "movQ", { Evh3, Iv }, 0 },
42164a71
L
3451 { Bad_Opcode },
3452 { Bad_Opcode },
3453 { Bad_Opcode },
3454 { Bad_Opcode },
3455 { Bad_Opcode },
3456 { Bad_Opcode },
3457 { MOD_TABLE (MOD_C7_REG_7) },
4e7d34a6 3458 },
1ceb70f8 3459 /* REG_D0 */
252b5132 3460 {
bf890a93
IT
3461 { "rolA", { Eb, I1 }, 0 },
3462 { "rorA", { Eb, I1 }, 0 },
3463 { "rclA", { Eb, I1 }, 0 },
3464 { "rcrA", { Eb, I1 }, 0 },
3465 { "shlA", { Eb, I1 }, 0 },
3466 { "shrA", { Eb, I1 }, 0 },
592d1631 3467 { Bad_Opcode },
bf890a93 3468 { "sarA", { Eb, I1 }, 0 },
252b5132 3469 },
1ceb70f8 3470 /* REG_D1 */
252b5132 3471 {
bf890a93
IT
3472 { "rolQ", { Ev, I1 }, 0 },
3473 { "rorQ", { Ev, I1 }, 0 },
3474 { "rclQ", { Ev, I1 }, 0 },
3475 { "rcrQ", { Ev, I1 }, 0 },
3476 { "shlQ", { Ev, I1 }, 0 },
3477 { "shrQ", { Ev, I1 }, 0 },
592d1631 3478 { Bad_Opcode },
bf890a93 3479 { "sarQ", { Ev, I1 }, 0 },
252b5132 3480 },
1ceb70f8 3481 /* REG_D2 */
252b5132 3482 {
bf890a93
IT
3483 { "rolA", { Eb, CL }, 0 },
3484 { "rorA", { Eb, CL }, 0 },
3485 { "rclA", { Eb, CL }, 0 },
3486 { "rcrA", { Eb, CL }, 0 },
3487 { "shlA", { Eb, CL }, 0 },
3488 { "shrA", { Eb, CL }, 0 },
592d1631 3489 { Bad_Opcode },
bf890a93 3490 { "sarA", { Eb, CL }, 0 },
252b5132 3491 },
1ceb70f8 3492 /* REG_D3 */
252b5132 3493 {
bf890a93
IT
3494 { "rolQ", { Ev, CL }, 0 },
3495 { "rorQ", { Ev, CL }, 0 },
3496 { "rclQ", { Ev, CL }, 0 },
3497 { "rcrQ", { Ev, CL }, 0 },
3498 { "shlQ", { Ev, CL }, 0 },
3499 { "shrQ", { Ev, CL }, 0 },
592d1631 3500 { Bad_Opcode },
bf890a93 3501 { "sarQ", { Ev, CL }, 0 },
252b5132 3502 },
1ceb70f8 3503 /* REG_F6 */
252b5132 3504 {
bf890a93 3505 { "testA", { Eb, Ib }, 0 },
592d1631 3506 { Bad_Opcode },
bf890a93
IT
3507 { "notA", { Ebh1 }, 0 },
3508 { "negA", { Ebh1 }, 0 },
3509 { "mulA", { Eb }, 0 }, /* Don't print the implicit %al register, */
3510 { "imulA", { Eb }, 0 }, /* to distinguish these opcodes from other */
3511 { "divA", { Eb }, 0 }, /* mul/imul opcodes. Do the same for div */
3512 { "idivA", { Eb }, 0 }, /* and idiv for consistency. */
252b5132 3513 },
1ceb70f8 3514 /* REG_F7 */
252b5132 3515 {
bf890a93 3516 { "testQ", { Ev, Iv }, 0 },
592d1631 3517 { Bad_Opcode },
bf890a93
IT
3518 { "notQ", { Evh1 }, 0 },
3519 { "negQ", { Evh1 }, 0 },
3520 { "mulQ", { Ev }, 0 }, /* Don't print the implicit register. */
3521 { "imulQ", { Ev }, 0 },
3522 { "divQ", { Ev }, 0 },
3523 { "idivQ", { Ev }, 0 },
252b5132 3524 },
1ceb70f8 3525 /* REG_FE */
252b5132 3526 {
bf890a93
IT
3527 { "incA", { Ebh1 }, 0 },
3528 { "decA", { Ebh1 }, 0 },
252b5132 3529 },
1ceb70f8 3530 /* REG_FF */
252b5132 3531 {
bf890a93
IT
3532 { "incQ", { Evh1 }, 0 },
3533 { "decQ", { Evh1 }, 0 },
3534 { "call{T|}", { indirEv, BND }, 0 },
4a357820 3535 { MOD_TABLE (MOD_FF_REG_3) },
bf890a93 3536 { "jmp{T|}", { indirEv, BND }, 0 },
4a357820 3537 { MOD_TABLE (MOD_FF_REG_5) },
bf890a93 3538 { "pushU", { stackEv }, 0 },
592d1631 3539 { Bad_Opcode },
252b5132 3540 },
1ceb70f8 3541 /* REG_0F00 */
252b5132 3542 {
bf890a93
IT
3543 { "sldtD", { Sv }, 0 },
3544 { "strD", { Sv }, 0 },
3545 { "lldt", { Ew }, 0 },
3546 { "ltr", { Ew }, 0 },
3547 { "verr", { Ew }, 0 },
3548 { "verw", { Ew }, 0 },
592d1631
L
3549 { Bad_Opcode },
3550 { Bad_Opcode },
252b5132 3551 },
1ceb70f8 3552 /* REG_0F01 */
252b5132 3553 {
1ceb70f8
L
3554 { MOD_TABLE (MOD_0F01_REG_0) },
3555 { MOD_TABLE (MOD_0F01_REG_1) },
3556 { MOD_TABLE (MOD_0F01_REG_2) },
3557 { MOD_TABLE (MOD_0F01_REG_3) },
bf890a93 3558 { "smswD", { Sv }, 0 },
8eab4136 3559 { MOD_TABLE (MOD_0F01_REG_5) },
bf890a93 3560 { "lmsw", { Ew }, 0 },
1ceb70f8 3561 { MOD_TABLE (MOD_0F01_REG_7) },
252b5132 3562 },
b5b1fc4f 3563 /* REG_0F0D */
252b5132 3564 {
bf890a93
IT
3565 { "prefetch", { Mb }, 0 },
3566 { "prefetchw", { Mb }, 0 },
3567 { "prefetchwt1", { Mb }, 0 },
3568 { "prefetch", { Mb }, 0 },
3569 { "prefetch", { Mb }, 0 },
3570 { "prefetch", { Mb }, 0 },
3571 { "prefetch", { Mb }, 0 },
3572 { "prefetch", { Mb }, 0 },
252b5132 3573 },
1ceb70f8 3574 /* REG_0F18 */
252b5132 3575 {
1ceb70f8
L
3576 { MOD_TABLE (MOD_0F18_REG_0) },
3577 { MOD_TABLE (MOD_0F18_REG_1) },
3578 { MOD_TABLE (MOD_0F18_REG_2) },
3579 { MOD_TABLE (MOD_0F18_REG_3) },
d7189fa5
RM
3580 { MOD_TABLE (MOD_0F18_REG_4) },
3581 { MOD_TABLE (MOD_0F18_REG_5) },
3582 { MOD_TABLE (MOD_0F18_REG_6) },
3583 { MOD_TABLE (MOD_0F18_REG_7) },
252b5132 3584 },
1ceb70f8 3585 /* REG_0F71 */
a6bd098c 3586 {
592d1631
L
3587 { Bad_Opcode },
3588 { Bad_Opcode },
1ceb70f8 3589 { MOD_TABLE (MOD_0F71_REG_2) },
592d1631 3590 { Bad_Opcode },
1ceb70f8 3591 { MOD_TABLE (MOD_0F71_REG_4) },
592d1631 3592 { Bad_Opcode },
1ceb70f8 3593 { MOD_TABLE (MOD_0F71_REG_6) },
a6bd098c 3594 },
1ceb70f8 3595 /* REG_0F72 */
a6bd098c 3596 {
592d1631
L
3597 { Bad_Opcode },
3598 { Bad_Opcode },
1ceb70f8 3599 { MOD_TABLE (MOD_0F72_REG_2) },
592d1631 3600 { Bad_Opcode },
1ceb70f8 3601 { MOD_TABLE (MOD_0F72_REG_4) },
592d1631 3602 { Bad_Opcode },
1ceb70f8 3603 { MOD_TABLE (MOD_0F72_REG_6) },
a6bd098c 3604 },
1ceb70f8 3605 /* REG_0F73 */
252b5132 3606 {
592d1631
L
3607 { Bad_Opcode },
3608 { Bad_Opcode },
1ceb70f8
L
3609 { MOD_TABLE (MOD_0F73_REG_2) },
3610 { MOD_TABLE (MOD_0F73_REG_3) },
592d1631
L
3611 { Bad_Opcode },
3612 { Bad_Opcode },
1ceb70f8
L
3613 { MOD_TABLE (MOD_0F73_REG_6) },
3614 { MOD_TABLE (MOD_0F73_REG_7) },
252b5132 3615 },
1ceb70f8 3616 /* REG_0FA6 */
252b5132 3617 {
bf890a93
IT
3618 { "montmul", { { OP_0f07, 0 } }, 0 },
3619 { "xsha1", { { OP_0f07, 0 } }, 0 },
3620 { "xsha256", { { OP_0f07, 0 } }, 0 },
4e7d34a6 3621 },
1ceb70f8 3622 /* REG_0FA7 */
4e7d34a6 3623 {
bf890a93
IT
3624 { "xstore-rng", { { OP_0f07, 0 } }, 0 },
3625 { "xcrypt-ecb", { { OP_0f07, 0 } }, 0 },
3626 { "xcrypt-cbc", { { OP_0f07, 0 } }, 0 },
3627 { "xcrypt-ctr", { { OP_0f07, 0 } }, 0 },
3628 { "xcrypt-cfb", { { OP_0f07, 0 } }, 0 },
3629 { "xcrypt-ofb", { { OP_0f07, 0 } }, 0 },
4e7d34a6 3630 },
1ceb70f8 3631 /* REG_0FAE */
4e7d34a6 3632 {
1ceb70f8
L
3633 { MOD_TABLE (MOD_0FAE_REG_0) },
3634 { MOD_TABLE (MOD_0FAE_REG_1) },
3635 { MOD_TABLE (MOD_0FAE_REG_2) },
3636 { MOD_TABLE (MOD_0FAE_REG_3) },
475a2301 3637 { MOD_TABLE (MOD_0FAE_REG_4) },
1ceb70f8
L
3638 { MOD_TABLE (MOD_0FAE_REG_5) },
3639 { MOD_TABLE (MOD_0FAE_REG_6) },
3640 { MOD_TABLE (MOD_0FAE_REG_7) },
252b5132 3641 },
1ceb70f8 3642 /* REG_0FBA */
252b5132 3643 {
592d1631
L
3644 { Bad_Opcode },
3645 { Bad_Opcode },
3646 { Bad_Opcode },
3647 { Bad_Opcode },
bf890a93
IT
3648 { "btQ", { Ev, Ib }, 0 },
3649 { "btsQ", { Evh1, Ib }, 0 },
3650 { "btrQ", { Evh1, Ib }, 0 },
3651 { "btcQ", { Evh1, Ib }, 0 },
c608c12e 3652 },
1ceb70f8 3653 /* REG_0FC7 */
c608c12e 3654 {
592d1631 3655 { Bad_Opcode },
bf890a93 3656 { "cmpxchg8b", { { CMPXCHG8B_Fixup, q_mode } }, 0 },
592d1631 3657 { Bad_Opcode },
963f3586
IT
3658 { MOD_TABLE (MOD_0FC7_REG_3) },
3659 { MOD_TABLE (MOD_0FC7_REG_4) },
3660 { MOD_TABLE (MOD_0FC7_REG_5) },
1ceb70f8
L
3661 { MOD_TABLE (MOD_0FC7_REG_6) },
3662 { MOD_TABLE (MOD_0FC7_REG_7) },
252b5132 3663 },
592a252b 3664 /* REG_VEX_0F71 */
c0f3af97 3665 {
592d1631
L
3666 { Bad_Opcode },
3667 { Bad_Opcode },
592a252b 3668 { MOD_TABLE (MOD_VEX_0F71_REG_2) },
592d1631 3669 { Bad_Opcode },
592a252b 3670 { MOD_TABLE (MOD_VEX_0F71_REG_4) },
592d1631 3671 { Bad_Opcode },
592a252b 3672 { MOD_TABLE (MOD_VEX_0F71_REG_6) },
c0f3af97 3673 },
592a252b 3674 /* REG_VEX_0F72 */
c0f3af97 3675 {
592d1631
L
3676 { Bad_Opcode },
3677 { Bad_Opcode },
592a252b 3678 { MOD_TABLE (MOD_VEX_0F72_REG_2) },
592d1631 3679 { Bad_Opcode },
592a252b 3680 { MOD_TABLE (MOD_VEX_0F72_REG_4) },
592d1631 3681 { Bad_Opcode },
592a252b 3682 { MOD_TABLE (MOD_VEX_0F72_REG_6) },
c0f3af97 3683 },
592a252b 3684 /* REG_VEX_0F73 */
c0f3af97 3685 {
592d1631
L
3686 { Bad_Opcode },
3687 { Bad_Opcode },
592a252b
L
3688 { MOD_TABLE (MOD_VEX_0F73_REG_2) },
3689 { MOD_TABLE (MOD_VEX_0F73_REG_3) },
592d1631
L
3690 { Bad_Opcode },
3691 { Bad_Opcode },
592a252b
L
3692 { MOD_TABLE (MOD_VEX_0F73_REG_6) },
3693 { MOD_TABLE (MOD_VEX_0F73_REG_7) },
c0f3af97 3694 },
592a252b 3695 /* REG_VEX_0FAE */
c0f3af97 3696 {
592d1631
L
3697 { Bad_Opcode },
3698 { Bad_Opcode },
592a252b
L
3699 { MOD_TABLE (MOD_VEX_0FAE_REG_2) },
3700 { MOD_TABLE (MOD_VEX_0FAE_REG_3) },
c0f3af97 3701 },
f12dc422
L
3702 /* REG_VEX_0F38F3 */
3703 {
3704 { Bad_Opcode },
3705 { PREFIX_TABLE (PREFIX_VEX_0F38F3_REG_1) },
3706 { PREFIX_TABLE (PREFIX_VEX_0F38F3_REG_2) },
3707 { PREFIX_TABLE (PREFIX_VEX_0F38F3_REG_3) },
3708 },
f88c9eb0
SP
3709 /* REG_XOP_LWPCB */
3710 {
bf890a93
IT
3711 { "llwpcb", { { OP_LWPCB_E, 0 } }, 0 },
3712 { "slwpcb", { { OP_LWPCB_E, 0 } }, 0 },
f88c9eb0
SP
3713 },
3714 /* REG_XOP_LWP */
3715 {
bf890a93
IT
3716 { "lwpins", { { OP_LWP_E, 0 }, Ed, Iq }, 0 },
3717 { "lwpval", { { OP_LWP_E, 0 }, Ed, Iq }, 0 },
f88c9eb0 3718 },
2a2a0f38
QN
3719 /* REG_XOP_TBM_01 */
3720 {
3721 { Bad_Opcode },
bf890a93
IT
3722 { "blcfill", { { OP_LWP_E, 0 }, Ev }, 0 },
3723 { "blsfill", { { OP_LWP_E, 0 }, Ev }, 0 },
3724 { "blcs", { { OP_LWP_E, 0 }, Ev }, 0 },
3725 { "tzmsk", { { OP_LWP_E, 0 }, Ev }, 0 },
3726 { "blcic", { { OP_LWP_E, 0 }, Ev }, 0 },
3727 { "blsic", { { OP_LWP_E, 0 }, Ev }, 0 },
3728 { "t1mskc", { { OP_LWP_E, 0 }, Ev }, 0 },
2a2a0f38
QN
3729 },
3730 /* REG_XOP_TBM_02 */
3731 {
3732 { Bad_Opcode },
bf890a93 3733 { "blcmsk", { { OP_LWP_E, 0 }, Ev }, 0 },
2a2a0f38
QN
3734 { Bad_Opcode },
3735 { Bad_Opcode },
3736 { Bad_Opcode },
3737 { Bad_Opcode },
bf890a93 3738 { "blci", { { OP_LWP_E, 0 }, Ev }, 0 },
2a2a0f38 3739 },
43234a1e
L
3740#define NEED_REG_TABLE
3741#include "i386-dis-evex.h"
3742#undef NEED_REG_TABLE
4e7d34a6
L
3743};
3744
1ceb70f8
L
3745static const struct dis386 prefix_table[][4] = {
3746 /* PREFIX_90 */
252b5132 3747 {
bf890a93
IT
3748 { "xchgS", { { NOP_Fixup1, eAX_reg }, { NOP_Fixup2, eAX_reg } }, 0 },
3749 { "pause", { XX }, 0 },
3750 { "xchgS", { { NOP_Fixup1, eAX_reg }, { NOP_Fixup2, eAX_reg } }, 0 },
507bd325 3751 { NULL, { { NULL, 0 } }, PREFIX_IGNORED }
0f10071e 3752 },
4e7d34a6 3753
1ceb70f8 3754 /* PREFIX_0F10 */
cc0ec051 3755 {
507bd325
L
3756 { "movups", { XM, EXx }, PREFIX_OPCODE },
3757 { "movss", { XM, EXd }, PREFIX_OPCODE },
3758 { "movupd", { XM, EXx }, PREFIX_OPCODE },
3759 { "movsd", { XM, EXq }, PREFIX_OPCODE },
30d1c836 3760 },
4e7d34a6 3761
1ceb70f8 3762 /* PREFIX_0F11 */
30d1c836 3763 {
507bd325
L
3764 { "movups", { EXxS, XM }, PREFIX_OPCODE },
3765 { "movss", { EXdS, XM }, PREFIX_OPCODE },
3766 { "movupd", { EXxS, XM }, PREFIX_OPCODE },
3767 { "movsd", { EXqS, XM }, PREFIX_OPCODE },
4e7d34a6 3768 },
252b5132 3769
1ceb70f8 3770 /* PREFIX_0F12 */
c608c12e 3771 {
1ceb70f8 3772 { MOD_TABLE (MOD_0F12_PREFIX_0) },
507bd325
L
3773 { "movsldup", { XM, EXx }, PREFIX_OPCODE },
3774 { "movlpd", { XM, EXq }, PREFIX_OPCODE },
3775 { "movddup", { XM, EXq }, PREFIX_OPCODE },
c608c12e 3776 },
4e7d34a6 3777
1ceb70f8 3778 /* PREFIX_0F16 */
c608c12e 3779 {
1ceb70f8 3780 { MOD_TABLE (MOD_0F16_PREFIX_0) },
507bd325
L
3781 { "movshdup", { XM, EXx }, PREFIX_OPCODE },
3782 { "movhpd", { XM, EXq }, PREFIX_OPCODE },
c608c12e 3783 },
4e7d34a6 3784
7e8b059b
L
3785 /* PREFIX_0F1A */
3786 {
3787 { MOD_TABLE (MOD_0F1A_PREFIX_0) },
bf890a93
IT
3788 { "bndcl", { Gbnd, Ev_bnd }, 0 },
3789 { "bndmov", { Gbnd, Ebnd }, 0 },
3790 { "bndcu", { Gbnd, Ev_bnd }, 0 },
7e8b059b
L
3791 },
3792
3793 /* PREFIX_0F1B */
3794 {
3795 { MOD_TABLE (MOD_0F1B_PREFIX_0) },
3796 { MOD_TABLE (MOD_0F1B_PREFIX_1) },
bf890a93
IT
3797 { "bndmov", { Ebnd, Gbnd }, 0 },
3798 { "bndcn", { Gbnd, Ev_bnd }, 0 },
7e8b059b
L
3799 },
3800
1ceb70f8 3801 /* PREFIX_0F2A */
c608c12e 3802 {
507bd325
L
3803 { "cvtpi2ps", { XM, EMCq }, PREFIX_OPCODE },
3804 { "cvtsi2ss%LQ", { XM, Ev }, PREFIX_OPCODE },
3805 { "cvtpi2pd", { XM, EMCq }, PREFIX_OPCODE },
bf890a93 3806 { "cvtsi2sd%LQ", { XM, Ev }, 0 },
c608c12e 3807 },
4e7d34a6 3808
1ceb70f8 3809 /* PREFIX_0F2B */
c608c12e 3810 {
75c135a8
L
3811 { MOD_TABLE (MOD_0F2B_PREFIX_0) },
3812 { MOD_TABLE (MOD_0F2B_PREFIX_1) },
3813 { MOD_TABLE (MOD_0F2B_PREFIX_2) },
3814 { MOD_TABLE (MOD_0F2B_PREFIX_3) },
c608c12e 3815 },
4e7d34a6 3816
1ceb70f8 3817 /* PREFIX_0F2C */
c608c12e 3818 {
507bd325
L
3819 { "cvttps2pi", { MXC, EXq }, PREFIX_OPCODE },
3820 { "cvttss2siY", { Gv, EXd }, PREFIX_OPCODE },
3821 { "cvttpd2pi", { MXC, EXx }, PREFIX_OPCODE },
3822 { "cvttsd2siY", { Gv, EXq }, PREFIX_OPCODE },
c608c12e 3823 },
4e7d34a6 3824
1ceb70f8 3825 /* PREFIX_0F2D */
c608c12e 3826 {
507bd325
L
3827 { "cvtps2pi", { MXC, EXq }, PREFIX_OPCODE },
3828 { "cvtss2siY", { Gv, EXd }, PREFIX_OPCODE },
3829 { "cvtpd2pi", { MXC, EXx }, PREFIX_OPCODE },
3830 { "cvtsd2siY", { Gv, EXq }, PREFIX_OPCODE },
c608c12e 3831 },
4e7d34a6 3832
1ceb70f8 3833 /* PREFIX_0F2E */
c608c12e 3834 {
bf890a93 3835 { "ucomiss",{ XM, EXd }, 0 },
592d1631 3836 { Bad_Opcode },
bf890a93 3837 { "ucomisd",{ XM, EXq }, 0 },
c608c12e 3838 },
4e7d34a6 3839
1ceb70f8 3840 /* PREFIX_0F2F */
c608c12e 3841 {
bf890a93 3842 { "comiss", { XM, EXd }, 0 },
592d1631 3843 { Bad_Opcode },
bf890a93 3844 { "comisd", { XM, EXq }, 0 },
c608c12e 3845 },
4e7d34a6 3846
1ceb70f8 3847 /* PREFIX_0F51 */
c608c12e 3848 {
507bd325
L
3849 { "sqrtps", { XM, EXx }, PREFIX_OPCODE },
3850 { "sqrtss", { XM, EXd }, PREFIX_OPCODE },
3851 { "sqrtpd", { XM, EXx }, PREFIX_OPCODE },
3852 { "sqrtsd", { XM, EXq }, PREFIX_OPCODE },
c608c12e 3853 },
4e7d34a6 3854
1ceb70f8 3855 /* PREFIX_0F52 */
c608c12e 3856 {
507bd325
L
3857 { "rsqrtps",{ XM, EXx }, PREFIX_OPCODE },
3858 { "rsqrtss",{ XM, EXd }, PREFIX_OPCODE },
c608c12e 3859 },
4e7d34a6 3860
1ceb70f8 3861 /* PREFIX_0F53 */
c608c12e 3862 {
507bd325
L
3863 { "rcpps", { XM, EXx }, PREFIX_OPCODE },
3864 { "rcpss", { XM, EXd }, PREFIX_OPCODE },
c608c12e 3865 },
4e7d34a6 3866
1ceb70f8 3867 /* PREFIX_0F58 */
c608c12e 3868 {
507bd325
L
3869 { "addps", { XM, EXx }, PREFIX_OPCODE },
3870 { "addss", { XM, EXd }, PREFIX_OPCODE },
3871 { "addpd", { XM, EXx }, PREFIX_OPCODE },
3872 { "addsd", { XM, EXq }, PREFIX_OPCODE },
c608c12e 3873 },
4e7d34a6 3874
1ceb70f8 3875 /* PREFIX_0F59 */
c608c12e 3876 {
507bd325
L
3877 { "mulps", { XM, EXx }, PREFIX_OPCODE },
3878 { "mulss", { XM, EXd }, PREFIX_OPCODE },
3879 { "mulpd", { XM, EXx }, PREFIX_OPCODE },
3880 { "mulsd", { XM, EXq }, PREFIX_OPCODE },
041bd2e0 3881 },
4e7d34a6 3882
1ceb70f8 3883 /* PREFIX_0F5A */
041bd2e0 3884 {
507bd325
L
3885 { "cvtps2pd", { XM, EXq }, PREFIX_OPCODE },
3886 { "cvtss2sd", { XM, EXd }, PREFIX_OPCODE },
3887 { "cvtpd2ps", { XM, EXx }, PREFIX_OPCODE },
3888 { "cvtsd2ss", { XM, EXq }, PREFIX_OPCODE },
041bd2e0 3889 },
4e7d34a6 3890
1ceb70f8 3891 /* PREFIX_0F5B */
041bd2e0 3892 {
507bd325
L
3893 { "cvtdq2ps", { XM, EXx }, PREFIX_OPCODE },
3894 { "cvttps2dq", { XM, EXx }, PREFIX_OPCODE },
3895 { "cvtps2dq", { XM, EXx }, PREFIX_OPCODE },
041bd2e0 3896 },
4e7d34a6 3897
1ceb70f8 3898 /* PREFIX_0F5C */
041bd2e0 3899 {
507bd325
L
3900 { "subps", { XM, EXx }, PREFIX_OPCODE },
3901 { "subss", { XM, EXd }, PREFIX_OPCODE },
3902 { "subpd", { XM, EXx }, PREFIX_OPCODE },
3903 { "subsd", { XM, EXq }, PREFIX_OPCODE },
041bd2e0 3904 },
4e7d34a6 3905
1ceb70f8 3906 /* PREFIX_0F5D */
041bd2e0 3907 {
507bd325
L
3908 { "minps", { XM, EXx }, PREFIX_OPCODE },
3909 { "minss", { XM, EXd }, PREFIX_OPCODE },
3910 { "minpd", { XM, EXx }, PREFIX_OPCODE },
3911 { "minsd", { XM, EXq }, PREFIX_OPCODE },
041bd2e0 3912 },
4e7d34a6 3913
1ceb70f8 3914 /* PREFIX_0F5E */
041bd2e0 3915 {
507bd325
L
3916 { "divps", { XM, EXx }, PREFIX_OPCODE },
3917 { "divss", { XM, EXd }, PREFIX_OPCODE },
3918 { "divpd", { XM, EXx }, PREFIX_OPCODE },
3919 { "divsd", { XM, EXq }, PREFIX_OPCODE },
041bd2e0 3920 },
4e7d34a6 3921
1ceb70f8 3922 /* PREFIX_0F5F */
041bd2e0 3923 {
507bd325
L
3924 { "maxps", { XM, EXx }, PREFIX_OPCODE },
3925 { "maxss", { XM, EXd }, PREFIX_OPCODE },
3926 { "maxpd", { XM, EXx }, PREFIX_OPCODE },
3927 { "maxsd", { XM, EXq }, PREFIX_OPCODE },
041bd2e0 3928 },
4e7d34a6 3929
1ceb70f8 3930 /* PREFIX_0F60 */
041bd2e0 3931 {
507bd325 3932 { "punpcklbw",{ MX, EMd }, PREFIX_OPCODE },
592d1631 3933 { Bad_Opcode },
507bd325 3934 { "punpcklbw",{ MX, EMx }, PREFIX_OPCODE },
041bd2e0 3935 },
4e7d34a6 3936
1ceb70f8 3937 /* PREFIX_0F61 */
041bd2e0 3938 {
507bd325 3939 { "punpcklwd",{ MX, EMd }, PREFIX_OPCODE },
592d1631 3940 { Bad_Opcode },
507bd325 3941 { "punpcklwd",{ MX, EMx }, PREFIX_OPCODE },
041bd2e0 3942 },
4e7d34a6 3943
1ceb70f8 3944 /* PREFIX_0F62 */
041bd2e0 3945 {
507bd325 3946 { "punpckldq",{ MX, EMd }, PREFIX_OPCODE },
592d1631 3947 { Bad_Opcode },
507bd325 3948 { "punpckldq",{ MX, EMx }, PREFIX_OPCODE },
041bd2e0 3949 },
4e7d34a6 3950
1ceb70f8 3951 /* PREFIX_0F6C */
041bd2e0 3952 {
592d1631
L
3953 { Bad_Opcode },
3954 { Bad_Opcode },
507bd325 3955 { "punpcklqdq", { XM, EXx }, PREFIX_OPCODE },
0f17484f 3956 },
4e7d34a6 3957
1ceb70f8 3958 /* PREFIX_0F6D */
0f17484f 3959 {
592d1631
L
3960 { Bad_Opcode },
3961 { Bad_Opcode },
507bd325 3962 { "punpckhqdq", { XM, EXx }, PREFIX_OPCODE },
041bd2e0 3963 },
4e7d34a6 3964
1ceb70f8 3965 /* PREFIX_0F6F */
ca164297 3966 {
507bd325
L
3967 { "movq", { MX, EM }, PREFIX_OPCODE },
3968 { "movdqu", { XM, EXx }, PREFIX_OPCODE },
3969 { "movdqa", { XM, EXx }, PREFIX_OPCODE },
ca164297 3970 },
4e7d34a6 3971
1ceb70f8 3972 /* PREFIX_0F70 */
4e7d34a6 3973 {
507bd325
L
3974 { "pshufw", { MX, EM, Ib }, PREFIX_OPCODE },
3975 { "pshufhw",{ XM, EXx, Ib }, PREFIX_OPCODE },
3976 { "pshufd", { XM, EXx, Ib }, PREFIX_OPCODE },
3977 { "pshuflw",{ XM, EXx, Ib }, PREFIX_OPCODE },
4e7d34a6
L
3978 },
3979
92fddf8e
L
3980 /* PREFIX_0F73_REG_3 */
3981 {
592d1631
L
3982 { Bad_Opcode },
3983 { Bad_Opcode },
bf890a93 3984 { "psrldq", { XS, Ib }, 0 },
92fddf8e
L
3985 },
3986
3987 /* PREFIX_0F73_REG_7 */
3988 {
592d1631
L
3989 { Bad_Opcode },
3990 { Bad_Opcode },
bf890a93 3991 { "pslldq", { XS, Ib }, 0 },
92fddf8e
L
3992 },
3993
1ceb70f8 3994 /* PREFIX_0F78 */
4e7d34a6 3995 {
bf890a93 3996 {"vmread", { Em, Gm }, 0 },
592d1631 3997 { Bad_Opcode },
bf890a93
IT
3998 {"extrq", { XS, Ib, Ib }, 0 },
3999 {"insertq", { XM, XS, Ib, Ib }, 0 },
4e7d34a6
L
4000 },
4001
1ceb70f8 4002 /* PREFIX_0F79 */
4e7d34a6 4003 {
bf890a93 4004 {"vmwrite", { Gm, Em }, 0 },
592d1631 4005 { Bad_Opcode },
bf890a93
IT
4006 {"extrq", { XM, XS }, 0 },
4007 {"insertq", { XM, XS }, 0 },
4e7d34a6
L
4008 },
4009
1ceb70f8 4010 /* PREFIX_0F7C */
ca164297 4011 {
592d1631
L
4012 { Bad_Opcode },
4013 { Bad_Opcode },
507bd325
L
4014 { "haddpd", { XM, EXx }, PREFIX_OPCODE },
4015 { "haddps", { XM, EXx }, PREFIX_OPCODE },
ca164297 4016 },
4e7d34a6 4017
1ceb70f8 4018 /* PREFIX_0F7D */
ca164297 4019 {
592d1631
L
4020 { Bad_Opcode },
4021 { Bad_Opcode },
507bd325
L
4022 { "hsubpd", { XM, EXx }, PREFIX_OPCODE },
4023 { "hsubps", { XM, EXx }, PREFIX_OPCODE },
ca164297 4024 },
4e7d34a6 4025
1ceb70f8 4026 /* PREFIX_0F7E */
ca164297 4027 {
507bd325
L
4028 { "movK", { Edq, MX }, PREFIX_OPCODE },
4029 { "movq", { XM, EXq }, PREFIX_OPCODE },
4030 { "movK", { Edq, XM }, PREFIX_OPCODE },
ca164297 4031 },
4e7d34a6 4032
1ceb70f8 4033 /* PREFIX_0F7F */
ca164297 4034 {
507bd325
L
4035 { "movq", { EMS, MX }, PREFIX_OPCODE },
4036 { "movdqu", { EXxS, XM }, PREFIX_OPCODE },
4037 { "movdqa", { EXxS, XM }, PREFIX_OPCODE },
ca164297 4038 },
4e7d34a6 4039
c7b8aa3a
L
4040 /* PREFIX_0FAE_REG_0 */
4041 {
4042 { Bad_Opcode },
bf890a93 4043 { "rdfsbase", { Ev }, 0 },
c7b8aa3a
L
4044 },
4045
4046 /* PREFIX_0FAE_REG_1 */
4047 {
4048 { Bad_Opcode },
bf890a93 4049 { "rdgsbase", { Ev }, 0 },
c7b8aa3a
L
4050 },
4051
4052 /* PREFIX_0FAE_REG_2 */
4053 {
4054 { Bad_Opcode },
bf890a93 4055 { "wrfsbase", { Ev }, 0 },
c7b8aa3a
L
4056 },
4057
4058 /* PREFIX_0FAE_REG_3 */
4059 {
4060 { Bad_Opcode },
bf890a93 4061 { "wrgsbase", { Ev }, 0 },
c7b8aa3a
L
4062 },
4063
c5e7287a
IT
4064 /* PREFIX_0FAE_REG_6 */
4065 {
bf890a93 4066 { "xsaveopt", { FXSAVE }, 0 },
c5e7287a 4067 { Bad_Opcode },
bf890a93 4068 { "clwb", { Mb }, 0 },
c5e7287a
IT
4069 },
4070
963f3586
IT
4071 /* PREFIX_0FAE_REG_7 */
4072 {
bf890a93 4073 { "clflush", { Mb }, 0 },
963f3586 4074 { Bad_Opcode },
bf890a93 4075 { "clflushopt", { Mb }, 0 },
963f3586
IT
4076 },
4077
9d8596f0
IT
4078 /* PREFIX_RM_0_0FAE_REG_7 */
4079 {
bf890a93 4080 { "sfence", { Skip_MODRM }, 0 },
9d8596f0 4081 { Bad_Opcode },
bf890a93 4082 { "pcommit", { Skip_MODRM }, 0 },
9d8596f0
IT
4083 },
4084
1ceb70f8 4085 /* PREFIX_0FB8 */
ca164297 4086 {
592d1631 4087 { Bad_Opcode },
bf890a93 4088 { "popcntS", { Gv, Ev }, 0 },
ca164297 4089 },
4e7d34a6 4090
f12dc422
L
4091 /* PREFIX_0FBC */
4092 {
bf890a93
IT
4093 { "bsfS", { Gv, Ev }, 0 },
4094 { "tzcntS", { Gv, Ev }, 0 },
4095 { "bsfS", { Gv, Ev }, 0 },
f12dc422
L
4096 },
4097
1ceb70f8 4098 /* PREFIX_0FBD */
050dfa73 4099 {
bf890a93
IT
4100 { "bsrS", { Gv, Ev }, 0 },
4101 { "lzcntS", { Gv, Ev }, 0 },
4102 { "bsrS", { Gv, Ev }, 0 },
050dfa73
MM
4103 },
4104
1ceb70f8 4105 /* PREFIX_0FC2 */
050dfa73 4106 {
507bd325
L
4107 { "cmpps", { XM, EXx, CMP }, PREFIX_OPCODE },
4108 { "cmpss", { XM, EXd, CMP }, PREFIX_OPCODE },
4109 { "cmppd", { XM, EXx, CMP }, PREFIX_OPCODE },
4110 { "cmpsd", { XM, EXq, CMP }, PREFIX_OPCODE },
050dfa73 4111 },
246c51aa 4112
a8484f96 4113 /* PREFIX_MOD_0_0FC3 */
4ee52178 4114 {
a8484f96 4115 { "movntiS", { Ev, Gv }, PREFIX_OPCODE },
4ee52178
L
4116 },
4117
f24bcbaa 4118 /* PREFIX_MOD_0_0FC7_REG_6 */
92fddf8e 4119 {
bf890a93
IT
4120 { "vmptrld",{ Mq }, 0 },
4121 { "vmxon", { Mq }, 0 },
4122 { "vmclear",{ Mq }, 0 },
92fddf8e
L
4123 },
4124
f24bcbaa
L
4125 /* PREFIX_MOD_3_0FC7_REG_6 */
4126 {
4127 { "rdrand", { Ev }, 0 },
4128 { Bad_Opcode },
4129 { "rdrand", { Ev }, 0 }
4130 },
4131
4132 /* PREFIX_MOD_3_0FC7_REG_7 */
4133 {
4134 { "rdseed", { Ev }, 0 },
4135 { Bad_Opcode },
4136 { "rdseed", { Ev }, 0 },
4137 },
4138
1ceb70f8 4139 /* PREFIX_0FD0 */
050dfa73 4140 {
592d1631
L
4141 { Bad_Opcode },
4142 { Bad_Opcode },
bf890a93
IT
4143 { "addsubpd", { XM, EXx }, 0 },
4144 { "addsubps", { XM, EXx }, 0 },
246c51aa 4145 },
050dfa73 4146
1ceb70f8 4147 /* PREFIX_0FD6 */
050dfa73 4148 {
592d1631 4149 { Bad_Opcode },
bf890a93
IT
4150 { "movq2dq",{ XM, MS }, 0 },
4151 { "movq", { EXqS, XM }, 0 },
4152 { "movdq2q",{ MX, XS }, 0 },
050dfa73
MM
4153 },
4154
1ceb70f8 4155 /* PREFIX_0FE6 */
7918206c 4156 {
592d1631 4157 { Bad_Opcode },
507bd325
L
4158 { "cvtdq2pd", { XM, EXq }, PREFIX_OPCODE },
4159 { "cvttpd2dq", { XM, EXx }, PREFIX_OPCODE },
4160 { "cvtpd2dq", { XM, EXx }, PREFIX_OPCODE },
7918206c 4161 },
8b38ad71 4162
1ceb70f8 4163 /* PREFIX_0FE7 */
8b38ad71 4164 {
507bd325 4165 { "movntq", { Mq, MX }, PREFIX_OPCODE },
592d1631 4166 { Bad_Opcode },
75c135a8 4167 { MOD_TABLE (MOD_0FE7_PREFIX_2) },
4e7d34a6
L
4168 },
4169
1ceb70f8 4170 /* PREFIX_0FF0 */
4e7d34a6 4171 {
592d1631
L
4172 { Bad_Opcode },
4173 { Bad_Opcode },
4174 { Bad_Opcode },
1ceb70f8 4175 { MOD_TABLE (MOD_0FF0_PREFIX_3) },
4e7d34a6
L
4176 },
4177
1ceb70f8 4178 /* PREFIX_0FF7 */
4e7d34a6 4179 {
507bd325 4180 { "maskmovq", { MX, MS }, PREFIX_OPCODE },
592d1631 4181 { Bad_Opcode },
507bd325 4182 { "maskmovdqu", { XM, XS }, PREFIX_OPCODE },
8b38ad71 4183 },
42903f7f 4184
1ceb70f8 4185 /* PREFIX_0F3810 */
42903f7f 4186 {
592d1631
L
4187 { Bad_Opcode },
4188 { Bad_Opcode },
507bd325 4189 { "pblendvb", { XM, EXx, XMM0 }, PREFIX_OPCODE },
42903f7f
L
4190 },
4191
1ceb70f8 4192 /* PREFIX_0F3814 */
42903f7f 4193 {
592d1631
L
4194 { Bad_Opcode },
4195 { Bad_Opcode },
507bd325 4196 { "blendvps", { XM, EXx, XMM0 }, PREFIX_OPCODE },
42903f7f
L
4197 },
4198
1ceb70f8 4199 /* PREFIX_0F3815 */
42903f7f 4200 {
592d1631
L
4201 { Bad_Opcode },
4202 { Bad_Opcode },
507bd325 4203 { "blendvpd", { XM, EXx, XMM0 }, PREFIX_OPCODE },
42903f7f
L
4204 },
4205
1ceb70f8 4206 /* PREFIX_0F3817 */
42903f7f 4207 {
592d1631
L
4208 { Bad_Opcode },
4209 { Bad_Opcode },
507bd325 4210 { "ptest", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4211 },
4212
1ceb70f8 4213 /* PREFIX_0F3820 */
42903f7f 4214 {
592d1631
L
4215 { Bad_Opcode },
4216 { Bad_Opcode },
507bd325 4217 { "pmovsxbw", { XM, EXq }, PREFIX_OPCODE },
42903f7f
L
4218 },
4219
1ceb70f8 4220 /* PREFIX_0F3821 */
42903f7f 4221 {
592d1631
L
4222 { Bad_Opcode },
4223 { Bad_Opcode },
507bd325 4224 { "pmovsxbd", { XM, EXd }, PREFIX_OPCODE },
42903f7f
L
4225 },
4226
1ceb70f8 4227 /* PREFIX_0F3822 */
42903f7f 4228 {
592d1631
L
4229 { Bad_Opcode },
4230 { Bad_Opcode },
507bd325 4231 { "pmovsxbq", { XM, EXw }, PREFIX_OPCODE },
42903f7f
L
4232 },
4233
1ceb70f8 4234 /* PREFIX_0F3823 */
42903f7f 4235 {
592d1631
L
4236 { Bad_Opcode },
4237 { Bad_Opcode },
507bd325 4238 { "pmovsxwd", { XM, EXq }, PREFIX_OPCODE },
42903f7f
L
4239 },
4240
1ceb70f8 4241 /* PREFIX_0F3824 */
42903f7f 4242 {
592d1631
L
4243 { Bad_Opcode },
4244 { Bad_Opcode },
507bd325 4245 { "pmovsxwq", { XM, EXd }, PREFIX_OPCODE },
42903f7f
L
4246 },
4247
1ceb70f8 4248 /* PREFIX_0F3825 */
42903f7f 4249 {
592d1631
L
4250 { Bad_Opcode },
4251 { Bad_Opcode },
507bd325 4252 { "pmovsxdq", { XM, EXq }, PREFIX_OPCODE },
42903f7f
L
4253 },
4254
1ceb70f8 4255 /* PREFIX_0F3828 */
42903f7f 4256 {
592d1631
L
4257 { Bad_Opcode },
4258 { Bad_Opcode },
507bd325 4259 { "pmuldq", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4260 },
4261
1ceb70f8 4262 /* PREFIX_0F3829 */
42903f7f 4263 {
592d1631
L
4264 { Bad_Opcode },
4265 { Bad_Opcode },
507bd325 4266 { "pcmpeqq", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4267 },
4268
1ceb70f8 4269 /* PREFIX_0F382A */
42903f7f 4270 {
592d1631
L
4271 { Bad_Opcode },
4272 { Bad_Opcode },
75c135a8 4273 { MOD_TABLE (MOD_0F382A_PREFIX_2) },
42903f7f
L
4274 },
4275
1ceb70f8 4276 /* PREFIX_0F382B */
42903f7f 4277 {
592d1631
L
4278 { Bad_Opcode },
4279 { Bad_Opcode },
507bd325 4280 { "packusdw", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4281 },
4282
1ceb70f8 4283 /* PREFIX_0F3830 */
42903f7f 4284 {
592d1631
L
4285 { Bad_Opcode },
4286 { Bad_Opcode },
507bd325 4287 { "pmovzxbw", { XM, EXq }, PREFIX_OPCODE },
42903f7f
L
4288 },
4289
1ceb70f8 4290 /* PREFIX_0F3831 */
42903f7f 4291 {
592d1631
L
4292 { Bad_Opcode },
4293 { Bad_Opcode },
507bd325 4294 { "pmovzxbd", { XM, EXd }, PREFIX_OPCODE },
42903f7f
L
4295 },
4296
1ceb70f8 4297 /* PREFIX_0F3832 */
42903f7f 4298 {
592d1631
L
4299 { Bad_Opcode },
4300 { Bad_Opcode },
507bd325 4301 { "pmovzxbq", { XM, EXw }, PREFIX_OPCODE },
42903f7f
L
4302 },
4303
1ceb70f8 4304 /* PREFIX_0F3833 */
42903f7f 4305 {
592d1631
L
4306 { Bad_Opcode },
4307 { Bad_Opcode },
507bd325 4308 { "pmovzxwd", { XM, EXq }, PREFIX_OPCODE },
42903f7f
L
4309 },
4310
1ceb70f8 4311 /* PREFIX_0F3834 */
42903f7f 4312 {
592d1631
L
4313 { Bad_Opcode },
4314 { Bad_Opcode },
507bd325 4315 { "pmovzxwq", { XM, EXd }, PREFIX_OPCODE },
42903f7f
L
4316 },
4317
1ceb70f8 4318 /* PREFIX_0F3835 */
42903f7f 4319 {
592d1631
L
4320 { Bad_Opcode },
4321 { Bad_Opcode },
507bd325 4322 { "pmovzxdq", { XM, EXq }, PREFIX_OPCODE },
42903f7f
L
4323 },
4324
1ceb70f8 4325 /* PREFIX_0F3837 */
4e7d34a6 4326 {
592d1631
L
4327 { Bad_Opcode },
4328 { Bad_Opcode },
507bd325 4329 { "pcmpgtq", { XM, EXx }, PREFIX_OPCODE },
4e7d34a6
L
4330 },
4331
1ceb70f8 4332 /* PREFIX_0F3838 */
42903f7f 4333 {
592d1631
L
4334 { Bad_Opcode },
4335 { Bad_Opcode },
507bd325 4336 { "pminsb", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4337 },
4338
1ceb70f8 4339 /* PREFIX_0F3839 */
42903f7f 4340 {
592d1631
L
4341 { Bad_Opcode },
4342 { Bad_Opcode },
507bd325 4343 { "pminsd", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4344 },
4345
1ceb70f8 4346 /* PREFIX_0F383A */
42903f7f 4347 {
592d1631
L
4348 { Bad_Opcode },
4349 { Bad_Opcode },
507bd325 4350 { "pminuw", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4351 },
4352
1ceb70f8 4353 /* PREFIX_0F383B */
42903f7f 4354 {
592d1631
L
4355 { Bad_Opcode },
4356 { Bad_Opcode },
507bd325 4357 { "pminud", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4358 },
4359
1ceb70f8 4360 /* PREFIX_0F383C */
42903f7f 4361 {
592d1631
L
4362 { Bad_Opcode },
4363 { Bad_Opcode },
507bd325 4364 { "pmaxsb", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4365 },
4366
1ceb70f8 4367 /* PREFIX_0F383D */
42903f7f 4368 {
592d1631
L
4369 { Bad_Opcode },
4370 { Bad_Opcode },
507bd325 4371 { "pmaxsd", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4372 },
4373
1ceb70f8 4374 /* PREFIX_0F383E */
42903f7f 4375 {
592d1631
L
4376 { Bad_Opcode },
4377 { Bad_Opcode },
507bd325 4378 { "pmaxuw", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4379 },
4380
1ceb70f8 4381 /* PREFIX_0F383F */
42903f7f 4382 {
592d1631
L
4383 { Bad_Opcode },
4384 { Bad_Opcode },
507bd325 4385 { "pmaxud", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4386 },
4387
1ceb70f8 4388 /* PREFIX_0F3840 */
42903f7f 4389 {
592d1631
L
4390 { Bad_Opcode },
4391 { Bad_Opcode },
507bd325 4392 { "pmulld", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4393 },
4394
1ceb70f8 4395 /* PREFIX_0F3841 */
42903f7f 4396 {
592d1631
L
4397 { Bad_Opcode },
4398 { Bad_Opcode },
507bd325 4399 { "phminposuw", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4400 },
4401
f1f8f695
L
4402 /* PREFIX_0F3880 */
4403 {
592d1631
L
4404 { Bad_Opcode },
4405 { Bad_Opcode },
507bd325 4406 { "invept", { Gm, Mo }, PREFIX_OPCODE },
f1f8f695
L
4407 },
4408
4409 /* PREFIX_0F3881 */
4410 {
592d1631
L
4411 { Bad_Opcode },
4412 { Bad_Opcode },
507bd325 4413 { "invvpid", { Gm, Mo }, PREFIX_OPCODE },
f1f8f695
L
4414 },
4415
6c30d220
L
4416 /* PREFIX_0F3882 */
4417 {
4418 { Bad_Opcode },
4419 { Bad_Opcode },
507bd325 4420 { "invpcid", { Gm, M }, PREFIX_OPCODE },
6c30d220
L
4421 },
4422
a0046408
L
4423 /* PREFIX_0F38C8 */
4424 {
507bd325 4425 { "sha1nexte", { XM, EXxmm }, PREFIX_OPCODE },
a0046408
L
4426 },
4427
4428 /* PREFIX_0F38C9 */
4429 {
507bd325 4430 { "sha1msg1", { XM, EXxmm }, PREFIX_OPCODE },
a0046408
L
4431 },
4432
4433 /* PREFIX_0F38CA */
4434 {
507bd325 4435 { "sha1msg2", { XM, EXxmm }, PREFIX_OPCODE },
a0046408
L
4436 },
4437
4438 /* PREFIX_0F38CB */
4439 {
507bd325 4440 { "sha256rnds2", { XM, EXxmm, XMM0 }, PREFIX_OPCODE },
a0046408
L
4441 },
4442
4443 /* PREFIX_0F38CC */
4444 {
507bd325 4445 { "sha256msg1", { XM, EXxmm }, PREFIX_OPCODE },
a0046408
L
4446 },
4447
4448 /* PREFIX_0F38CD */
4449 {
507bd325 4450 { "sha256msg2", { XM, EXxmm }, PREFIX_OPCODE },
a0046408
L
4451 },
4452
c0f3af97
L
4453 /* PREFIX_0F38DB */
4454 {
592d1631
L
4455 { Bad_Opcode },
4456 { Bad_Opcode },
507bd325 4457 { "aesimc", { XM, EXx }, PREFIX_OPCODE },
c0f3af97
L
4458 },
4459
4460 /* PREFIX_0F38DC */
4461 {
592d1631
L
4462 { Bad_Opcode },
4463 { Bad_Opcode },
507bd325 4464 { "aesenc", { XM, EXx }, PREFIX_OPCODE },
c0f3af97
L
4465 },
4466
4467 /* PREFIX_0F38DD */
4468 {
592d1631
L
4469 { Bad_Opcode },
4470 { Bad_Opcode },
507bd325 4471 { "aesenclast", { XM, EXx }, PREFIX_OPCODE },
c0f3af97
L
4472 },
4473
4474 /* PREFIX_0F38DE */
4475 {
592d1631
L
4476 { Bad_Opcode },
4477 { Bad_Opcode },
507bd325 4478 { "aesdec", { XM, EXx }, PREFIX_OPCODE },
c0f3af97
L
4479 },
4480
4481 /* PREFIX_0F38DF */
4482 {
592d1631
L
4483 { Bad_Opcode },
4484 { Bad_Opcode },
507bd325 4485 { "aesdeclast", { XM, EXx }, PREFIX_OPCODE },
c0f3af97
L
4486 },
4487
1ceb70f8 4488 /* PREFIX_0F38F0 */
4e7d34a6 4489 {
507bd325 4490 { "movbeS", { Gv, { MOVBE_Fixup, v_mode } }, PREFIX_OPCODE },
592d1631 4491 { Bad_Opcode },
507bd325
L
4492 { "movbeS", { Gv, { MOVBE_Fixup, v_mode } }, PREFIX_OPCODE },
4493 { "crc32", { Gdq, { CRC32_Fixup, b_mode } }, PREFIX_OPCODE },
4e7d34a6
L
4494 },
4495
1ceb70f8 4496 /* PREFIX_0F38F1 */
4e7d34a6 4497 {
507bd325 4498 { "movbeS", { { MOVBE_Fixup, v_mode }, Gv }, PREFIX_OPCODE },
592d1631 4499 { Bad_Opcode },
507bd325
L
4500 { "movbeS", { { MOVBE_Fixup, v_mode }, Gv }, PREFIX_OPCODE },
4501 { "crc32", { Gdq, { CRC32_Fixup, v_mode } }, PREFIX_OPCODE },
4e7d34a6
L
4502 },
4503
e2e1fcde
L
4504 /* PREFIX_0F38F6 */
4505 {
4506 { Bad_Opcode },
507bd325
L
4507 { "adoxS", { Gdq, Edq}, PREFIX_OPCODE },
4508 { "adcxS", { Gdq, Edq}, PREFIX_OPCODE },
e2e1fcde
L
4509 { Bad_Opcode },
4510 },
4511
1ceb70f8 4512 /* PREFIX_0F3A08 */
42903f7f 4513 {
592d1631
L
4514 { Bad_Opcode },
4515 { Bad_Opcode },
507bd325 4516 { "roundps", { XM, EXx, Ib }, PREFIX_OPCODE },
42903f7f
L
4517 },
4518
1ceb70f8 4519 /* PREFIX_0F3A09 */
42903f7f 4520 {
592d1631
L
4521 { Bad_Opcode },
4522 { Bad_Opcode },
507bd325 4523 { "roundpd", { XM, EXx, Ib }, PREFIX_OPCODE },
42903f7f
L
4524 },
4525
1ceb70f8 4526 /* PREFIX_0F3A0A */
42903f7f 4527 {
592d1631
L
4528 { Bad_Opcode },
4529 { Bad_Opcode },
507bd325 4530 { "roundss", { XM, EXd, Ib }, PREFIX_OPCODE },
42903f7f
L
4531 },
4532
1ceb70f8 4533 /* PREFIX_0F3A0B */
42903f7f 4534 {
592d1631
L
4535 { Bad_Opcode },
4536 { Bad_Opcode },
507bd325 4537 { "roundsd", { XM, EXq, Ib }, PREFIX_OPCODE },
42903f7f
L
4538 },
4539
1ceb70f8 4540 /* PREFIX_0F3A0C */
42903f7f 4541 {
592d1631
L
4542 { Bad_Opcode },
4543 { Bad_Opcode },
507bd325 4544 { "blendps", { XM, EXx, Ib }, PREFIX_OPCODE },
42903f7f
L
4545 },
4546
1ceb70f8 4547 /* PREFIX_0F3A0D */
42903f7f 4548 {
592d1631
L
4549 { Bad_Opcode },
4550 { Bad_Opcode },
507bd325 4551 { "blendpd", { XM, EXx, Ib }, PREFIX_OPCODE },
42903f7f
L
4552 },
4553
1ceb70f8 4554 /* PREFIX_0F3A0E */
42903f7f 4555 {
592d1631
L
4556 { Bad_Opcode },
4557 { Bad_Opcode },
507bd325 4558 { "pblendw", { XM, EXx, Ib }, PREFIX_OPCODE },
42903f7f
L
4559 },
4560
1ceb70f8 4561 /* PREFIX_0F3A14 */
42903f7f 4562 {
592d1631
L
4563 { Bad_Opcode },
4564 { Bad_Opcode },
507bd325 4565 { "pextrb", { Edqb, XM, Ib }, PREFIX_OPCODE },
42903f7f
L
4566 },
4567
1ceb70f8 4568 /* PREFIX_0F3A15 */
42903f7f 4569 {
592d1631
L
4570 { Bad_Opcode },
4571 { Bad_Opcode },
507bd325 4572 { "pextrw", { Edqw, XM, Ib }, PREFIX_OPCODE },
42903f7f
L
4573 },
4574
1ceb70f8 4575 /* PREFIX_0F3A16 */
42903f7f 4576 {
592d1631
L
4577 { Bad_Opcode },
4578 { Bad_Opcode },
507bd325 4579 { "pextrK", { Edq, XM, Ib }, PREFIX_OPCODE },
42903f7f
L
4580 },
4581
1ceb70f8 4582 /* PREFIX_0F3A17 */
42903f7f 4583 {
592d1631
L
4584 { Bad_Opcode },
4585 { Bad_Opcode },
507bd325 4586 { "extractps", { Edqd, XM, Ib }, PREFIX_OPCODE },
42903f7f
L
4587 },
4588
1ceb70f8 4589 /* PREFIX_0F3A20 */
42903f7f 4590 {
592d1631
L
4591 { Bad_Opcode },
4592 { Bad_Opcode },
507bd325 4593 { "pinsrb", { XM, Edqb, Ib }, PREFIX_OPCODE },
42903f7f
L
4594 },
4595
1ceb70f8 4596 /* PREFIX_0F3A21 */
42903f7f 4597 {
592d1631
L
4598 { Bad_Opcode },
4599 { Bad_Opcode },
507bd325 4600 { "insertps", { XM, EXd, Ib }, PREFIX_OPCODE },
42903f7f
L
4601 },
4602
1ceb70f8 4603 /* PREFIX_0F3A22 */
42903f7f 4604 {
592d1631
L
4605 { Bad_Opcode },
4606 { Bad_Opcode },
507bd325 4607 { "pinsrK", { XM, Edq, Ib }, PREFIX_OPCODE },
42903f7f
L
4608 },
4609
1ceb70f8 4610 /* PREFIX_0F3A40 */
42903f7f 4611 {
592d1631
L
4612 { Bad_Opcode },
4613 { Bad_Opcode },
507bd325 4614 { "dpps", { XM, EXx, Ib }, PREFIX_OPCODE },
42903f7f
L
4615 },
4616
1ceb70f8 4617 /* PREFIX_0F3A41 */
42903f7f 4618 {
592d1631
L
4619 { Bad_Opcode },
4620 { Bad_Opcode },
507bd325 4621 { "dppd", { XM, EXx, Ib }, PREFIX_OPCODE },
42903f7f
L
4622 },
4623
1ceb70f8 4624 /* PREFIX_0F3A42 */
42903f7f 4625 {
592d1631
L
4626 { Bad_Opcode },
4627 { Bad_Opcode },
507bd325 4628 { "mpsadbw", { XM, EXx, Ib }, PREFIX_OPCODE },
42903f7f 4629 },
381d071f 4630
c0f3af97
L
4631 /* PREFIX_0F3A44 */
4632 {
592d1631
L
4633 { Bad_Opcode },
4634 { Bad_Opcode },
507bd325 4635 { "pclmulqdq", { XM, EXx, PCLMUL }, PREFIX_OPCODE },
c0f3af97
L
4636 },
4637
1ceb70f8 4638 /* PREFIX_0F3A60 */
381d071f 4639 {
592d1631
L
4640 { Bad_Opcode },
4641 { Bad_Opcode },
507bd325 4642 { "pcmpestrm", { XM, EXx, Ib }, PREFIX_OPCODE },
381d071f
L
4643 },
4644
1ceb70f8 4645 /* PREFIX_0F3A61 */
381d071f 4646 {
592d1631
L
4647 { Bad_Opcode },
4648 { Bad_Opcode },
507bd325 4649 { "pcmpestri", { XM, EXx, Ib }, PREFIX_OPCODE },
381d071f
L
4650 },
4651
1ceb70f8 4652 /* PREFIX_0F3A62 */
381d071f 4653 {
592d1631
L
4654 { Bad_Opcode },
4655 { Bad_Opcode },
507bd325 4656 { "pcmpistrm", { XM, EXx, Ib }, PREFIX_OPCODE },
381d071f
L
4657 },
4658
1ceb70f8 4659 /* PREFIX_0F3A63 */
381d071f 4660 {
592d1631
L
4661 { Bad_Opcode },
4662 { Bad_Opcode },
507bd325 4663 { "pcmpistri", { XM, EXx, Ib }, PREFIX_OPCODE },
381d071f 4664 },
09a2c6cf 4665
a0046408
L
4666 /* PREFIX_0F3ACC */
4667 {
507bd325 4668 { "sha1rnds4", { XM, EXxmm, Ib }, PREFIX_OPCODE },
a0046408
L
4669 },
4670
c0f3af97 4671 /* PREFIX_0F3ADF */
09a2c6cf 4672 {
592d1631
L
4673 { Bad_Opcode },
4674 { Bad_Opcode },
507bd325 4675 { "aeskeygenassist", { XM, EXx, Ib }, PREFIX_OPCODE },
09a2c6cf
L
4676 },
4677
592a252b 4678 /* PREFIX_VEX_0F10 */
09a2c6cf 4679 {
592a252b
L
4680 { VEX_W_TABLE (VEX_W_0F10_P_0) },
4681 { VEX_LEN_TABLE (VEX_LEN_0F10_P_1) },
4682 { VEX_W_TABLE (VEX_W_0F10_P_2) },
4683 { VEX_LEN_TABLE (VEX_LEN_0F10_P_3) },
09a2c6cf
L
4684 },
4685
592a252b 4686 /* PREFIX_VEX_0F11 */
09a2c6cf 4687 {
592a252b
L
4688 { VEX_W_TABLE (VEX_W_0F11_P_0) },
4689 { VEX_LEN_TABLE (VEX_LEN_0F11_P_1) },
4690 { VEX_W_TABLE (VEX_W_0F11_P_2) },
4691 { VEX_LEN_TABLE (VEX_LEN_0F11_P_3) },
09a2c6cf
L
4692 },
4693
592a252b 4694 /* PREFIX_VEX_0F12 */
09a2c6cf 4695 {
592a252b
L
4696 { MOD_TABLE (MOD_VEX_0F12_PREFIX_0) },
4697 { VEX_W_TABLE (VEX_W_0F12_P_1) },
4698 { VEX_LEN_TABLE (VEX_LEN_0F12_P_2) },
4699 { VEX_W_TABLE (VEX_W_0F12_P_3) },
09a2c6cf
L
4700 },
4701
592a252b 4702 /* PREFIX_VEX_0F16 */
09a2c6cf 4703 {
592a252b
L
4704 { MOD_TABLE (MOD_VEX_0F16_PREFIX_0) },
4705 { VEX_W_TABLE (VEX_W_0F16_P_1) },
4706 { VEX_LEN_TABLE (VEX_LEN_0F16_P_2) },
5f754f58 4707 },
7c52e0e8 4708
592a252b 4709 /* PREFIX_VEX_0F2A */
5f754f58 4710 {
592d1631 4711 { Bad_Opcode },
592a252b 4712 { VEX_LEN_TABLE (VEX_LEN_0F2A_P_1) },
592d1631 4713 { Bad_Opcode },
592a252b 4714 { VEX_LEN_TABLE (VEX_LEN_0F2A_P_3) },
5f754f58 4715 },
7c52e0e8 4716
592a252b 4717 /* PREFIX_VEX_0F2C */
5f754f58 4718 {
592d1631 4719 { Bad_Opcode },
592a252b 4720 { VEX_LEN_TABLE (VEX_LEN_0F2C_P_1) },
592d1631 4721 { Bad_Opcode },
592a252b 4722 { VEX_LEN_TABLE (VEX_LEN_0F2C_P_3) },
5f754f58 4723 },
7c52e0e8 4724
592a252b 4725 /* PREFIX_VEX_0F2D */
7c52e0e8 4726 {
592d1631 4727 { Bad_Opcode },
592a252b 4728 { VEX_LEN_TABLE (VEX_LEN_0F2D_P_1) },
592d1631 4729 { Bad_Opcode },
592a252b 4730 { VEX_LEN_TABLE (VEX_LEN_0F2D_P_3) },
7c52e0e8
L
4731 },
4732
592a252b 4733 /* PREFIX_VEX_0F2E */
7c52e0e8 4734 {
592a252b 4735 { VEX_LEN_TABLE (VEX_LEN_0F2E_P_0) },
592d1631 4736 { Bad_Opcode },
592a252b 4737 { VEX_LEN_TABLE (VEX_LEN_0F2E_P_2) },
7c52e0e8
L
4738 },
4739
592a252b 4740 /* PREFIX_VEX_0F2F */
7c52e0e8 4741 {
592a252b 4742 { VEX_LEN_TABLE (VEX_LEN_0F2F_P_0) },
592d1631 4743 { Bad_Opcode },
592a252b 4744 { VEX_LEN_TABLE (VEX_LEN_0F2F_P_2) },
7c52e0e8
L
4745 },
4746
43234a1e
L
4747 /* PREFIX_VEX_0F41 */
4748 {
4749 { VEX_LEN_TABLE (VEX_LEN_0F41_P_0) },
1ba585e8
IT
4750 { Bad_Opcode },
4751 { VEX_LEN_TABLE (VEX_LEN_0F41_P_2) },
43234a1e
L
4752 },
4753
4754 /* PREFIX_VEX_0F42 */
4755 {
4756 { VEX_LEN_TABLE (VEX_LEN_0F42_P_0) },
1ba585e8
IT
4757 { Bad_Opcode },
4758 { VEX_LEN_TABLE (VEX_LEN_0F42_P_2) },
43234a1e
L
4759 },
4760
4761 /* PREFIX_VEX_0F44 */
4762 {
4763 { VEX_LEN_TABLE (VEX_LEN_0F44_P_0) },
1ba585e8
IT
4764 { Bad_Opcode },
4765 { VEX_LEN_TABLE (VEX_LEN_0F44_P_2) },
43234a1e
L
4766 },
4767
4768 /* PREFIX_VEX_0F45 */
4769 {
4770 { VEX_LEN_TABLE (VEX_LEN_0F45_P_0) },
1ba585e8
IT
4771 { Bad_Opcode },
4772 { VEX_LEN_TABLE (VEX_LEN_0F45_P_2) },
43234a1e
L
4773 },
4774
4775 /* PREFIX_VEX_0F46 */
4776 {
4777 { VEX_LEN_TABLE (VEX_LEN_0F46_P_0) },
1ba585e8
IT
4778 { Bad_Opcode },
4779 { VEX_LEN_TABLE (VEX_LEN_0F46_P_2) },
43234a1e
L
4780 },
4781
4782 /* PREFIX_VEX_0F47 */
4783 {
4784 { VEX_LEN_TABLE (VEX_LEN_0F47_P_0) },
1ba585e8
IT
4785 { Bad_Opcode },
4786 { VEX_LEN_TABLE (VEX_LEN_0F47_P_2) },
43234a1e
L
4787 },
4788
1ba585e8 4789 /* PREFIX_VEX_0F4A */
43234a1e 4790 {
1ba585e8 4791 { VEX_LEN_TABLE (VEX_LEN_0F4A_P_0) },
43234a1e 4792 { Bad_Opcode },
1ba585e8
IT
4793 { VEX_LEN_TABLE (VEX_LEN_0F4A_P_2) },
4794 },
4795
4796 /* PREFIX_VEX_0F4B */
4797 {
4798 { VEX_LEN_TABLE (VEX_LEN_0F4B_P_0) },
43234a1e
L
4799 { Bad_Opcode },
4800 { VEX_LEN_TABLE (VEX_LEN_0F4B_P_2) },
4801 },
4802
592a252b 4803 /* PREFIX_VEX_0F51 */
7c52e0e8 4804 {
592a252b
L
4805 { VEX_W_TABLE (VEX_W_0F51_P_0) },
4806 { VEX_LEN_TABLE (VEX_LEN_0F51_P_1) },
4807 { VEX_W_TABLE (VEX_W_0F51_P_2) },
4808 { VEX_LEN_TABLE (VEX_LEN_0F51_P_3) },
7c52e0e8
L
4809 },
4810
592a252b 4811 /* PREFIX_VEX_0F52 */
7c52e0e8 4812 {
592a252b
L
4813 { VEX_W_TABLE (VEX_W_0F52_P_0) },
4814 { VEX_LEN_TABLE (VEX_LEN_0F52_P_1) },
7c52e0e8
L
4815 },
4816
592a252b 4817 /* PREFIX_VEX_0F53 */
7c52e0e8 4818 {
592a252b
L
4819 { VEX_W_TABLE (VEX_W_0F53_P_0) },
4820 { VEX_LEN_TABLE (VEX_LEN_0F53_P_1) },
7c52e0e8
L
4821 },
4822
592a252b 4823 /* PREFIX_VEX_0F58 */
7c52e0e8 4824 {
592a252b
L
4825 { VEX_W_TABLE (VEX_W_0F58_P_0) },
4826 { VEX_LEN_TABLE (VEX_LEN_0F58_P_1) },
4827 { VEX_W_TABLE (VEX_W_0F58_P_2) },
4828 { VEX_LEN_TABLE (VEX_LEN_0F58_P_3) },
7c52e0e8
L
4829 },
4830
592a252b 4831 /* PREFIX_VEX_0F59 */
7c52e0e8 4832 {
592a252b
L
4833 { VEX_W_TABLE (VEX_W_0F59_P_0) },
4834 { VEX_LEN_TABLE (VEX_LEN_0F59_P_1) },
4835 { VEX_W_TABLE (VEX_W_0F59_P_2) },
4836 { VEX_LEN_TABLE (VEX_LEN_0F59_P_3) },
7c52e0e8
L
4837 },
4838
592a252b 4839 /* PREFIX_VEX_0F5A */
7c52e0e8 4840 {
592a252b
L
4841 { VEX_W_TABLE (VEX_W_0F5A_P_0) },
4842 { VEX_LEN_TABLE (VEX_LEN_0F5A_P_1) },
bf890a93 4843 { "vcvtpd2ps%XY", { XMM, EXx }, 0 },
592a252b 4844 { VEX_LEN_TABLE (VEX_LEN_0F5A_P_3) },
7c52e0e8
L
4845 },
4846
592a252b 4847 /* PREFIX_VEX_0F5B */
7c52e0e8 4848 {
592a252b
L
4849 { VEX_W_TABLE (VEX_W_0F5B_P_0) },
4850 { VEX_W_TABLE (VEX_W_0F5B_P_1) },
4851 { VEX_W_TABLE (VEX_W_0F5B_P_2) },
7c52e0e8
L
4852 },
4853
592a252b 4854 /* PREFIX_VEX_0F5C */
7c52e0e8 4855 {
592a252b
L
4856 { VEX_W_TABLE (VEX_W_0F5C_P_0) },
4857 { VEX_LEN_TABLE (VEX_LEN_0F5C_P_1) },
4858 { VEX_W_TABLE (VEX_W_0F5C_P_2) },
4859 { VEX_LEN_TABLE (VEX_LEN_0F5C_P_3) },
7c52e0e8
L
4860 },
4861
592a252b 4862 /* PREFIX_VEX_0F5D */
7c52e0e8 4863 {
592a252b
L
4864 { VEX_W_TABLE (VEX_W_0F5D_P_0) },
4865 { VEX_LEN_TABLE (VEX_LEN_0F5D_P_1) },
4866 { VEX_W_TABLE (VEX_W_0F5D_P_2) },
4867 { VEX_LEN_TABLE (VEX_LEN_0F5D_P_3) },
7c52e0e8
L
4868 },
4869
592a252b 4870 /* PREFIX_VEX_0F5E */
7c52e0e8 4871 {
592a252b
L
4872 { VEX_W_TABLE (VEX_W_0F5E_P_0) },
4873 { VEX_LEN_TABLE (VEX_LEN_0F5E_P_1) },
4874 { VEX_W_TABLE (VEX_W_0F5E_P_2) },
4875 { VEX_LEN_TABLE (VEX_LEN_0F5E_P_3) },
7c52e0e8
L
4876 },
4877
592a252b 4878 /* PREFIX_VEX_0F5F */
7c52e0e8 4879 {
592a252b
L
4880 { VEX_W_TABLE (VEX_W_0F5F_P_0) },
4881 { VEX_LEN_TABLE (VEX_LEN_0F5F_P_1) },
4882 { VEX_W_TABLE (VEX_W_0F5F_P_2) },
4883 { VEX_LEN_TABLE (VEX_LEN_0F5F_P_3) },
7c52e0e8
L
4884 },
4885
592a252b 4886 /* PREFIX_VEX_0F60 */
7c52e0e8 4887 {
592d1631
L
4888 { Bad_Opcode },
4889 { Bad_Opcode },
6c30d220 4890 { VEX_W_TABLE (VEX_W_0F60_P_2) },
7c52e0e8
L
4891 },
4892
592a252b 4893 /* PREFIX_VEX_0F61 */
7c52e0e8 4894 {
592d1631
L
4895 { Bad_Opcode },
4896 { Bad_Opcode },
6c30d220 4897 { VEX_W_TABLE (VEX_W_0F61_P_2) },
7c52e0e8
L
4898 },
4899
592a252b 4900 /* PREFIX_VEX_0F62 */
7c52e0e8 4901 {
592d1631
L
4902 { Bad_Opcode },
4903 { Bad_Opcode },
6c30d220 4904 { VEX_W_TABLE (VEX_W_0F62_P_2) },
7c52e0e8
L
4905 },
4906
592a252b 4907 /* PREFIX_VEX_0F63 */
7c52e0e8 4908 {
592d1631
L
4909 { Bad_Opcode },
4910 { Bad_Opcode },
6c30d220 4911 { VEX_W_TABLE (VEX_W_0F63_P_2) },
7c52e0e8
L
4912 },
4913
592a252b 4914 /* PREFIX_VEX_0F64 */
7c52e0e8 4915 {
592d1631
L
4916 { Bad_Opcode },
4917 { Bad_Opcode },
6c30d220 4918 { VEX_W_TABLE (VEX_W_0F64_P_2) },
7c52e0e8
L
4919 },
4920
592a252b 4921 /* PREFIX_VEX_0F65 */
7c52e0e8 4922 {
592d1631
L
4923 { Bad_Opcode },
4924 { Bad_Opcode },
6c30d220 4925 { VEX_W_TABLE (VEX_W_0F65_P_2) },
7c52e0e8
L
4926 },
4927
592a252b 4928 /* PREFIX_VEX_0F66 */
7c52e0e8 4929 {
592d1631
L
4930 { Bad_Opcode },
4931 { Bad_Opcode },
6c30d220 4932 { VEX_W_TABLE (VEX_W_0F66_P_2) },
7c52e0e8 4933 },
6439fc28 4934
592a252b 4935 /* PREFIX_VEX_0F67 */
331d2d0d 4936 {
592d1631
L
4937 { Bad_Opcode },
4938 { Bad_Opcode },
6c30d220 4939 { VEX_W_TABLE (VEX_W_0F67_P_2) },
c0f3af97
L
4940 },
4941
592a252b 4942 /* PREFIX_VEX_0F68 */
c0f3af97 4943 {
592d1631
L
4944 { Bad_Opcode },
4945 { Bad_Opcode },
6c30d220 4946 { VEX_W_TABLE (VEX_W_0F68_P_2) },
c0f3af97
L
4947 },
4948
592a252b 4949 /* PREFIX_VEX_0F69 */
c0f3af97 4950 {
592d1631
L
4951 { Bad_Opcode },
4952 { Bad_Opcode },
6c30d220 4953 { VEX_W_TABLE (VEX_W_0F69_P_2) },
c0f3af97
L
4954 },
4955
592a252b 4956 /* PREFIX_VEX_0F6A */
c0f3af97 4957 {
592d1631
L
4958 { Bad_Opcode },
4959 { Bad_Opcode },
6c30d220 4960 { VEX_W_TABLE (VEX_W_0F6A_P_2) },
c0f3af97
L
4961 },
4962
592a252b 4963 /* PREFIX_VEX_0F6B */
c0f3af97 4964 {
592d1631
L
4965 { Bad_Opcode },
4966 { Bad_Opcode },
6c30d220 4967 { VEX_W_TABLE (VEX_W_0F6B_P_2) },
c0f3af97
L
4968 },
4969
592a252b 4970 /* PREFIX_VEX_0F6C */
c0f3af97 4971 {
592d1631
L
4972 { Bad_Opcode },
4973 { Bad_Opcode },
6c30d220 4974 { VEX_W_TABLE (VEX_W_0F6C_P_2) },
c0f3af97
L
4975 },
4976
592a252b 4977 /* PREFIX_VEX_0F6D */
c0f3af97 4978 {
592d1631
L
4979 { Bad_Opcode },
4980 { Bad_Opcode },
6c30d220 4981 { VEX_W_TABLE (VEX_W_0F6D_P_2) },
c0f3af97
L
4982 },
4983
592a252b 4984 /* PREFIX_VEX_0F6E */
c0f3af97 4985 {
592d1631
L
4986 { Bad_Opcode },
4987 { Bad_Opcode },
592a252b 4988 { VEX_LEN_TABLE (VEX_LEN_0F6E_P_2) },
c0f3af97
L
4989 },
4990
592a252b 4991 /* PREFIX_VEX_0F6F */
c0f3af97 4992 {
592d1631 4993 { Bad_Opcode },
592a252b
L
4994 { VEX_W_TABLE (VEX_W_0F6F_P_1) },
4995 { VEX_W_TABLE (VEX_W_0F6F_P_2) },
c0f3af97
L
4996 },
4997
592a252b 4998 /* PREFIX_VEX_0F70 */
c0f3af97 4999 {
592d1631 5000 { Bad_Opcode },
6c30d220
L
5001 { VEX_W_TABLE (VEX_W_0F70_P_1) },
5002 { VEX_W_TABLE (VEX_W_0F70_P_2) },
5003 { VEX_W_TABLE (VEX_W_0F70_P_3) },
c0f3af97
L
5004 },
5005
592a252b 5006 /* PREFIX_VEX_0F71_REG_2 */
c0f3af97 5007 {
592d1631
L
5008 { Bad_Opcode },
5009 { Bad_Opcode },
6c30d220 5010 { VEX_W_TABLE (VEX_W_0F71_R_2_P_2) },
c0f3af97
L
5011 },
5012
592a252b 5013 /* PREFIX_VEX_0F71_REG_4 */
c0f3af97 5014 {
592d1631
L
5015 { Bad_Opcode },
5016 { Bad_Opcode },
6c30d220 5017 { VEX_W_TABLE (VEX_W_0F71_R_4_P_2) },
c0f3af97
L
5018 },
5019
592a252b 5020 /* PREFIX_VEX_0F71_REG_6 */
c0f3af97 5021 {
592d1631
L
5022 { Bad_Opcode },
5023 { Bad_Opcode },
6c30d220 5024 { VEX_W_TABLE (VEX_W_0F71_R_6_P_2) },
c0f3af97
L
5025 },
5026
592a252b 5027 /* PREFIX_VEX_0F72_REG_2 */
c0f3af97 5028 {
592d1631
L
5029 { Bad_Opcode },
5030 { Bad_Opcode },
6c30d220 5031 { VEX_W_TABLE (VEX_W_0F72_R_2_P_2) },
c0f3af97
L
5032 },
5033
592a252b 5034 /* PREFIX_VEX_0F72_REG_4 */
c0f3af97 5035 {
592d1631
L
5036 { Bad_Opcode },
5037 { Bad_Opcode },
6c30d220 5038 { VEX_W_TABLE (VEX_W_0F72_R_4_P_2) },
c0f3af97
L
5039 },
5040
592a252b 5041 /* PREFIX_VEX_0F72_REG_6 */
c0f3af97 5042 {
592d1631
L
5043 { Bad_Opcode },
5044 { Bad_Opcode },
6c30d220 5045 { VEX_W_TABLE (VEX_W_0F72_R_6_P_2) },
c0f3af97
L
5046 },
5047
592a252b 5048 /* PREFIX_VEX_0F73_REG_2 */
c0f3af97 5049 {
592d1631
L
5050 { Bad_Opcode },
5051 { Bad_Opcode },
6c30d220 5052 { VEX_W_TABLE (VEX_W_0F73_R_2_P_2) },
c0f3af97
L
5053 },
5054
592a252b 5055 /* PREFIX_VEX_0F73_REG_3 */
c0f3af97 5056 {
592d1631
L
5057 { Bad_Opcode },
5058 { Bad_Opcode },
6c30d220 5059 { VEX_W_TABLE (VEX_W_0F73_R_3_P_2) },
c0f3af97
L
5060 },
5061
592a252b 5062 /* PREFIX_VEX_0F73_REG_6 */
c0f3af97 5063 {
592d1631
L
5064 { Bad_Opcode },
5065 { Bad_Opcode },
6c30d220 5066 { VEX_W_TABLE (VEX_W_0F73_R_6_P_2) },
c0f3af97
L
5067 },
5068
592a252b 5069 /* PREFIX_VEX_0F73_REG_7 */
c0f3af97 5070 {
592d1631
L
5071 { Bad_Opcode },
5072 { Bad_Opcode },
6c30d220 5073 { VEX_W_TABLE (VEX_W_0F73_R_7_P_2) },
c0f3af97
L
5074 },
5075
592a252b 5076 /* PREFIX_VEX_0F74 */
c0f3af97 5077 {
592d1631
L
5078 { Bad_Opcode },
5079 { Bad_Opcode },
6c30d220 5080 { VEX_W_TABLE (VEX_W_0F74_P_2) },
c0f3af97
L
5081 },
5082
592a252b 5083 /* PREFIX_VEX_0F75 */
c0f3af97 5084 {
592d1631
L
5085 { Bad_Opcode },
5086 { Bad_Opcode },
6c30d220 5087 { VEX_W_TABLE (VEX_W_0F75_P_2) },
c0f3af97
L
5088 },
5089
592a252b 5090 /* PREFIX_VEX_0F76 */
c0f3af97 5091 {
592d1631
L
5092 { Bad_Opcode },
5093 { Bad_Opcode },
6c30d220 5094 { VEX_W_TABLE (VEX_W_0F76_P_2) },
c0f3af97
L
5095 },
5096
592a252b 5097 /* PREFIX_VEX_0F77 */
c0f3af97 5098 {
592a252b 5099 { VEX_W_TABLE (VEX_W_0F77_P_0) },
c0f3af97
L
5100 },
5101
592a252b 5102 /* PREFIX_VEX_0F7C */
c0f3af97 5103 {
592d1631
L
5104 { Bad_Opcode },
5105 { Bad_Opcode },
592a252b
L
5106 { VEX_W_TABLE (VEX_W_0F7C_P_2) },
5107 { VEX_W_TABLE (VEX_W_0F7C_P_3) },
c0f3af97
L
5108 },
5109
592a252b 5110 /* PREFIX_VEX_0F7D */
c0f3af97 5111 {
592d1631
L
5112 { Bad_Opcode },
5113 { Bad_Opcode },
592a252b
L
5114 { VEX_W_TABLE (VEX_W_0F7D_P_2) },
5115 { VEX_W_TABLE (VEX_W_0F7D_P_3) },
c0f3af97
L
5116 },
5117
592a252b 5118 /* PREFIX_VEX_0F7E */
c0f3af97 5119 {
592d1631 5120 { Bad_Opcode },
592a252b
L
5121 { VEX_LEN_TABLE (VEX_LEN_0F7E_P_1) },
5122 { VEX_LEN_TABLE (VEX_LEN_0F7E_P_2) },
c0f3af97
L
5123 },
5124
592a252b 5125 /* PREFIX_VEX_0F7F */
c0f3af97 5126 {
592d1631 5127 { Bad_Opcode },
592a252b
L
5128 { VEX_W_TABLE (VEX_W_0F7F_P_1) },
5129 { VEX_W_TABLE (VEX_W_0F7F_P_2) },
c0f3af97
L
5130 },
5131
43234a1e
L
5132 /* PREFIX_VEX_0F90 */
5133 {
5134 { VEX_LEN_TABLE (VEX_LEN_0F90_P_0) },
1ba585e8
IT
5135 { Bad_Opcode },
5136 { VEX_LEN_TABLE (VEX_LEN_0F90_P_2) },
43234a1e
L
5137 },
5138
5139 /* PREFIX_VEX_0F91 */
5140 {
5141 { VEX_LEN_TABLE (VEX_LEN_0F91_P_0) },
1ba585e8
IT
5142 { Bad_Opcode },
5143 { VEX_LEN_TABLE (VEX_LEN_0F91_P_2) },
43234a1e
L
5144 },
5145
5146 /* PREFIX_VEX_0F92 */
5147 {
5148 { VEX_LEN_TABLE (VEX_LEN_0F92_P_0) },
1ba585e8 5149 { Bad_Opcode },
90a915bf 5150 { VEX_LEN_TABLE (VEX_LEN_0F92_P_2) },
1ba585e8 5151 { VEX_LEN_TABLE (VEX_LEN_0F92_P_3) },
43234a1e
L
5152 },
5153
5154 /* PREFIX_VEX_0F93 */
5155 {
5156 { VEX_LEN_TABLE (VEX_LEN_0F93_P_0) },
1ba585e8 5157 { Bad_Opcode },
90a915bf 5158 { VEX_LEN_TABLE (VEX_LEN_0F93_P_2) },
1ba585e8 5159 { VEX_LEN_TABLE (VEX_LEN_0F93_P_3) },
43234a1e
L
5160 },
5161
5162 /* PREFIX_VEX_0F98 */
5163 {
5164 { VEX_LEN_TABLE (VEX_LEN_0F98_P_0) },
1ba585e8
IT
5165 { Bad_Opcode },
5166 { VEX_LEN_TABLE (VEX_LEN_0F98_P_2) },
5167 },
5168
5169 /* PREFIX_VEX_0F99 */
5170 {
5171 { VEX_LEN_TABLE (VEX_LEN_0F99_P_0) },
5172 { Bad_Opcode },
5173 { VEX_LEN_TABLE (VEX_LEN_0F99_P_2) },
43234a1e
L
5174 },
5175
592a252b 5176 /* PREFIX_VEX_0FC2 */
c0f3af97 5177 {
592a252b
L
5178 { VEX_W_TABLE (VEX_W_0FC2_P_0) },
5179 { VEX_LEN_TABLE (VEX_LEN_0FC2_P_1) },
5180 { VEX_W_TABLE (VEX_W_0FC2_P_2) },
5181 { VEX_LEN_TABLE (VEX_LEN_0FC2_P_3) },
c0f3af97
L
5182 },
5183
592a252b 5184 /* PREFIX_VEX_0FC4 */
c0f3af97 5185 {
592d1631
L
5186 { Bad_Opcode },
5187 { Bad_Opcode },
592a252b 5188 { VEX_LEN_TABLE (VEX_LEN_0FC4_P_2) },
c0f3af97
L
5189 },
5190
592a252b 5191 /* PREFIX_VEX_0FC5 */
c0f3af97 5192 {
592d1631
L
5193 { Bad_Opcode },
5194 { Bad_Opcode },
592a252b 5195 { VEX_LEN_TABLE (VEX_LEN_0FC5_P_2) },
c0f3af97
L
5196 },
5197
592a252b 5198 /* PREFIX_VEX_0FD0 */
c0f3af97 5199 {
592d1631
L
5200 { Bad_Opcode },
5201 { Bad_Opcode },
592a252b
L
5202 { VEX_W_TABLE (VEX_W_0FD0_P_2) },
5203 { VEX_W_TABLE (VEX_W_0FD0_P_3) },
c0f3af97
L
5204 },
5205
592a252b 5206 /* PREFIX_VEX_0FD1 */
c0f3af97 5207 {
592d1631
L
5208 { Bad_Opcode },
5209 { Bad_Opcode },
6c30d220 5210 { VEX_W_TABLE (VEX_W_0FD1_P_2) },
c0f3af97
L
5211 },
5212
592a252b 5213 /* PREFIX_VEX_0FD2 */
c0f3af97 5214 {
592d1631
L
5215 { Bad_Opcode },
5216 { Bad_Opcode },
6c30d220 5217 { VEX_W_TABLE (VEX_W_0FD2_P_2) },
c0f3af97
L
5218 },
5219
592a252b 5220 /* PREFIX_VEX_0FD3 */
c0f3af97 5221 {
592d1631
L
5222 { Bad_Opcode },
5223 { Bad_Opcode },
6c30d220 5224 { VEX_W_TABLE (VEX_W_0FD3_P_2) },
c0f3af97
L
5225 },
5226
592a252b 5227 /* PREFIX_VEX_0FD4 */
c0f3af97 5228 {
592d1631
L
5229 { Bad_Opcode },
5230 { Bad_Opcode },
6c30d220 5231 { VEX_W_TABLE (VEX_W_0FD4_P_2) },
c0f3af97
L
5232 },
5233
592a252b 5234 /* PREFIX_VEX_0FD5 */
c0f3af97 5235 {
592d1631
L
5236 { Bad_Opcode },
5237 { Bad_Opcode },
6c30d220 5238 { VEX_W_TABLE (VEX_W_0FD5_P_2) },
c0f3af97
L
5239 },
5240
592a252b 5241 /* PREFIX_VEX_0FD6 */
c0f3af97 5242 {
592d1631
L
5243 { Bad_Opcode },
5244 { Bad_Opcode },
592a252b 5245 { VEX_LEN_TABLE (VEX_LEN_0FD6_P_2) },
c0f3af97
L
5246 },
5247
592a252b 5248 /* PREFIX_VEX_0FD7 */
c0f3af97 5249 {
592d1631
L
5250 { Bad_Opcode },
5251 { Bad_Opcode },
592a252b 5252 { MOD_TABLE (MOD_VEX_0FD7_PREFIX_2) },
c0f3af97
L
5253 },
5254
592a252b 5255 /* PREFIX_VEX_0FD8 */
c0f3af97 5256 {
592d1631
L
5257 { Bad_Opcode },
5258 { Bad_Opcode },
6c30d220 5259 { VEX_W_TABLE (VEX_W_0FD8_P_2) },
c0f3af97
L
5260 },
5261
592a252b 5262 /* PREFIX_VEX_0FD9 */
c0f3af97 5263 {
592d1631
L
5264 { Bad_Opcode },
5265 { Bad_Opcode },
6c30d220 5266 { VEX_W_TABLE (VEX_W_0FD9_P_2) },
c0f3af97
L
5267 },
5268
592a252b 5269 /* PREFIX_VEX_0FDA */
c0f3af97 5270 {
592d1631
L
5271 { Bad_Opcode },
5272 { Bad_Opcode },
6c30d220 5273 { VEX_W_TABLE (VEX_W_0FDA_P_2) },
c0f3af97
L
5274 },
5275
592a252b 5276 /* PREFIX_VEX_0FDB */
c0f3af97 5277 {
592d1631
L
5278 { Bad_Opcode },
5279 { Bad_Opcode },
6c30d220 5280 { VEX_W_TABLE (VEX_W_0FDB_P_2) },
c0f3af97
L
5281 },
5282
592a252b 5283 /* PREFIX_VEX_0FDC */
c0f3af97 5284 {
592d1631
L
5285 { Bad_Opcode },
5286 { Bad_Opcode },
6c30d220 5287 { VEX_W_TABLE (VEX_W_0FDC_P_2) },
c0f3af97
L
5288 },
5289
592a252b 5290 /* PREFIX_VEX_0FDD */
c0f3af97 5291 {
592d1631
L
5292 { Bad_Opcode },
5293 { Bad_Opcode },
6c30d220 5294 { VEX_W_TABLE (VEX_W_0FDD_P_2) },
c0f3af97
L
5295 },
5296
592a252b 5297 /* PREFIX_VEX_0FDE */
c0f3af97 5298 {
592d1631
L
5299 { Bad_Opcode },
5300 { Bad_Opcode },
6c30d220 5301 { VEX_W_TABLE (VEX_W_0FDE_P_2) },
c0f3af97
L
5302 },
5303
592a252b 5304 /* PREFIX_VEX_0FDF */
c0f3af97 5305 {
592d1631
L
5306 { Bad_Opcode },
5307 { Bad_Opcode },
6c30d220 5308 { VEX_W_TABLE (VEX_W_0FDF_P_2) },
c0f3af97
L
5309 },
5310
592a252b 5311 /* PREFIX_VEX_0FE0 */
c0f3af97 5312 {
592d1631
L
5313 { Bad_Opcode },
5314 { Bad_Opcode },
6c30d220 5315 { VEX_W_TABLE (VEX_W_0FE0_P_2) },
c0f3af97
L
5316 },
5317
592a252b 5318 /* PREFIX_VEX_0FE1 */
c0f3af97 5319 {
592d1631
L
5320 { Bad_Opcode },
5321 { Bad_Opcode },
6c30d220 5322 { VEX_W_TABLE (VEX_W_0FE1_P_2) },
c0f3af97
L
5323 },
5324
592a252b 5325 /* PREFIX_VEX_0FE2 */
c0f3af97 5326 {
592d1631
L
5327 { Bad_Opcode },
5328 { Bad_Opcode },
6c30d220 5329 { VEX_W_TABLE (VEX_W_0FE2_P_2) },
c0f3af97
L
5330 },
5331
592a252b 5332 /* PREFIX_VEX_0FE3 */
c0f3af97 5333 {
592d1631
L
5334 { Bad_Opcode },
5335 { Bad_Opcode },
6c30d220 5336 { VEX_W_TABLE (VEX_W_0FE3_P_2) },
c0f3af97
L
5337 },
5338
592a252b 5339 /* PREFIX_VEX_0FE4 */
c0f3af97 5340 {
592d1631
L
5341 { Bad_Opcode },
5342 { Bad_Opcode },
6c30d220 5343 { VEX_W_TABLE (VEX_W_0FE4_P_2) },
c0f3af97
L
5344 },
5345
592a252b 5346 /* PREFIX_VEX_0FE5 */
c0f3af97 5347 {
592d1631
L
5348 { Bad_Opcode },
5349 { Bad_Opcode },
6c30d220 5350 { VEX_W_TABLE (VEX_W_0FE5_P_2) },
c0f3af97
L
5351 },
5352
592a252b 5353 /* PREFIX_VEX_0FE6 */
c0f3af97 5354 {
592d1631 5355 { Bad_Opcode },
592a252b
L
5356 { VEX_W_TABLE (VEX_W_0FE6_P_1) },
5357 { VEX_W_TABLE (VEX_W_0FE6_P_2) },
5358 { VEX_W_TABLE (VEX_W_0FE6_P_3) },
c0f3af97
L
5359 },
5360
592a252b 5361 /* PREFIX_VEX_0FE7 */
c0f3af97 5362 {
592d1631
L
5363 { Bad_Opcode },
5364 { Bad_Opcode },
592a252b 5365 { MOD_TABLE (MOD_VEX_0FE7_PREFIX_2) },
c0f3af97
L
5366 },
5367
592a252b 5368 /* PREFIX_VEX_0FE8 */
c0f3af97 5369 {
592d1631
L
5370 { Bad_Opcode },
5371 { Bad_Opcode },
6c30d220 5372 { VEX_W_TABLE (VEX_W_0FE8_P_2) },
c0f3af97
L
5373 },
5374
592a252b 5375 /* PREFIX_VEX_0FE9 */
c0f3af97 5376 {
592d1631
L
5377 { Bad_Opcode },
5378 { Bad_Opcode },
6c30d220 5379 { VEX_W_TABLE (VEX_W_0FE9_P_2) },
c0f3af97
L
5380 },
5381
592a252b 5382 /* PREFIX_VEX_0FEA */
c0f3af97 5383 {
592d1631
L
5384 { Bad_Opcode },
5385 { Bad_Opcode },
6c30d220 5386 { VEX_W_TABLE (VEX_W_0FEA_P_2) },
c0f3af97
L
5387 },
5388
592a252b 5389 /* PREFIX_VEX_0FEB */
c0f3af97 5390 {
592d1631
L
5391 { Bad_Opcode },
5392 { Bad_Opcode },
6c30d220 5393 { VEX_W_TABLE (VEX_W_0FEB_P_2) },
c0f3af97
L
5394 },
5395
592a252b 5396 /* PREFIX_VEX_0FEC */
c0f3af97 5397 {
592d1631
L
5398 { Bad_Opcode },
5399 { Bad_Opcode },
6c30d220 5400 { VEX_W_TABLE (VEX_W_0FEC_P_2) },
c0f3af97
L
5401 },
5402
592a252b 5403 /* PREFIX_VEX_0FED */
c0f3af97 5404 {
592d1631
L
5405 { Bad_Opcode },
5406 { Bad_Opcode },
6c30d220 5407 { VEX_W_TABLE (VEX_W_0FED_P_2) },
c0f3af97
L
5408 },
5409
592a252b 5410 /* PREFIX_VEX_0FEE */
c0f3af97 5411 {
592d1631
L
5412 { Bad_Opcode },
5413 { Bad_Opcode },
6c30d220 5414 { VEX_W_TABLE (VEX_W_0FEE_P_2) },
c0f3af97
L
5415 },
5416
592a252b 5417 /* PREFIX_VEX_0FEF */
c0f3af97 5418 {
592d1631
L
5419 { Bad_Opcode },
5420 { Bad_Opcode },
6c30d220 5421 { VEX_W_TABLE (VEX_W_0FEF_P_2) },
c0f3af97
L
5422 },
5423
592a252b 5424 /* PREFIX_VEX_0FF0 */
c0f3af97 5425 {
592d1631
L
5426 { Bad_Opcode },
5427 { Bad_Opcode },
5428 { Bad_Opcode },
592a252b 5429 { MOD_TABLE (MOD_VEX_0FF0_PREFIX_3) },
c0f3af97
L
5430 },
5431
592a252b 5432 /* PREFIX_VEX_0FF1 */
c0f3af97 5433 {
592d1631
L
5434 { Bad_Opcode },
5435 { Bad_Opcode },
6c30d220 5436 { VEX_W_TABLE (VEX_W_0FF1_P_2) },
c0f3af97
L
5437 },
5438
592a252b 5439 /* PREFIX_VEX_0FF2 */
c0f3af97 5440 {
592d1631
L
5441 { Bad_Opcode },
5442 { Bad_Opcode },
6c30d220 5443 { VEX_W_TABLE (VEX_W_0FF2_P_2) },
c0f3af97
L
5444 },
5445
592a252b 5446 /* PREFIX_VEX_0FF3 */
c0f3af97 5447 {
592d1631
L
5448 { Bad_Opcode },
5449 { Bad_Opcode },
6c30d220 5450 { VEX_W_TABLE (VEX_W_0FF3_P_2) },
c0f3af97
L
5451 },
5452
592a252b 5453 /* PREFIX_VEX_0FF4 */
c0f3af97 5454 {
592d1631
L
5455 { Bad_Opcode },
5456 { Bad_Opcode },
6c30d220 5457 { VEX_W_TABLE (VEX_W_0FF4_P_2) },
c0f3af97
L
5458 },
5459
592a252b 5460 /* PREFIX_VEX_0FF5 */
c0f3af97 5461 {
592d1631
L
5462 { Bad_Opcode },
5463 { Bad_Opcode },
6c30d220 5464 { VEX_W_TABLE (VEX_W_0FF5_P_2) },
c0f3af97
L
5465 },
5466
592a252b 5467 /* PREFIX_VEX_0FF6 */
c0f3af97 5468 {
592d1631
L
5469 { Bad_Opcode },
5470 { Bad_Opcode },
6c30d220 5471 { VEX_W_TABLE (VEX_W_0FF6_P_2) },
c0f3af97
L
5472 },
5473
592a252b 5474 /* PREFIX_VEX_0FF7 */
c0f3af97 5475 {
592d1631
L
5476 { Bad_Opcode },
5477 { Bad_Opcode },
592a252b 5478 { VEX_LEN_TABLE (VEX_LEN_0FF7_P_2) },
c0f3af97
L
5479 },
5480
592a252b 5481 /* PREFIX_VEX_0FF8 */
c0f3af97 5482 {
592d1631
L
5483 { Bad_Opcode },
5484 { Bad_Opcode },
6c30d220 5485 { VEX_W_TABLE (VEX_W_0FF8_P_2) },
c0f3af97
L
5486 },
5487
592a252b 5488 /* PREFIX_VEX_0FF9 */
c0f3af97 5489 {
592d1631
L
5490 { Bad_Opcode },
5491 { Bad_Opcode },
6c30d220 5492 { VEX_W_TABLE (VEX_W_0FF9_P_2) },
c0f3af97
L
5493 },
5494
592a252b 5495 /* PREFIX_VEX_0FFA */
c0f3af97 5496 {
592d1631
L
5497 { Bad_Opcode },
5498 { Bad_Opcode },
6c30d220 5499 { VEX_W_TABLE (VEX_W_0FFA_P_2) },
c0f3af97
L
5500 },
5501
592a252b 5502 /* PREFIX_VEX_0FFB */
c0f3af97 5503 {
592d1631
L
5504 { Bad_Opcode },
5505 { Bad_Opcode },
6c30d220 5506 { VEX_W_TABLE (VEX_W_0FFB_P_2) },
c0f3af97
L
5507 },
5508
592a252b 5509 /* PREFIX_VEX_0FFC */
c0f3af97 5510 {
592d1631
L
5511 { Bad_Opcode },
5512 { Bad_Opcode },
6c30d220 5513 { VEX_W_TABLE (VEX_W_0FFC_P_2) },
c0f3af97
L
5514 },
5515
592a252b 5516 /* PREFIX_VEX_0FFD */
c0f3af97 5517 {
592d1631
L
5518 { Bad_Opcode },
5519 { Bad_Opcode },
6c30d220 5520 { VEX_W_TABLE (VEX_W_0FFD_P_2) },
c0f3af97
L
5521 },
5522
592a252b 5523 /* PREFIX_VEX_0FFE */
c0f3af97 5524 {
592d1631
L
5525 { Bad_Opcode },
5526 { Bad_Opcode },
6c30d220 5527 { VEX_W_TABLE (VEX_W_0FFE_P_2) },
c0f3af97
L
5528 },
5529
592a252b 5530 /* PREFIX_VEX_0F3800 */
c0f3af97 5531 {
592d1631
L
5532 { Bad_Opcode },
5533 { Bad_Opcode },
6c30d220 5534 { VEX_W_TABLE (VEX_W_0F3800_P_2) },
c0f3af97
L
5535 },
5536
592a252b 5537 /* PREFIX_VEX_0F3801 */
c0f3af97 5538 {
592d1631
L
5539 { Bad_Opcode },
5540 { Bad_Opcode },
6c30d220 5541 { VEX_W_TABLE (VEX_W_0F3801_P_2) },
c0f3af97
L
5542 },
5543
592a252b 5544 /* PREFIX_VEX_0F3802 */
c0f3af97 5545 {
592d1631
L
5546 { Bad_Opcode },
5547 { Bad_Opcode },
6c30d220 5548 { VEX_W_TABLE (VEX_W_0F3802_P_2) },
c0f3af97
L
5549 },
5550
592a252b 5551 /* PREFIX_VEX_0F3803 */
c0f3af97 5552 {
592d1631
L
5553 { Bad_Opcode },
5554 { Bad_Opcode },
6c30d220 5555 { VEX_W_TABLE (VEX_W_0F3803_P_2) },
c0f3af97
L
5556 },
5557
592a252b 5558 /* PREFIX_VEX_0F3804 */
c0f3af97 5559 {
592d1631
L
5560 { Bad_Opcode },
5561 { Bad_Opcode },
6c30d220 5562 { VEX_W_TABLE (VEX_W_0F3804_P_2) },
c0f3af97
L
5563 },
5564
592a252b 5565 /* PREFIX_VEX_0F3805 */
c0f3af97 5566 {
592d1631
L
5567 { Bad_Opcode },
5568 { Bad_Opcode },
6c30d220 5569 { VEX_W_TABLE (VEX_W_0F3805_P_2) },
c0f3af97
L
5570 },
5571
592a252b 5572 /* PREFIX_VEX_0F3806 */
c0f3af97 5573 {
592d1631
L
5574 { Bad_Opcode },
5575 { Bad_Opcode },
6c30d220 5576 { VEX_W_TABLE (VEX_W_0F3806_P_2) },
c0f3af97
L
5577 },
5578
592a252b 5579 /* PREFIX_VEX_0F3807 */
c0f3af97 5580 {
592d1631
L
5581 { Bad_Opcode },
5582 { Bad_Opcode },
6c30d220 5583 { VEX_W_TABLE (VEX_W_0F3807_P_2) },
c0f3af97
L
5584 },
5585
592a252b 5586 /* PREFIX_VEX_0F3808 */
c0f3af97 5587 {
592d1631
L
5588 { Bad_Opcode },
5589 { Bad_Opcode },
6c30d220 5590 { VEX_W_TABLE (VEX_W_0F3808_P_2) },
c0f3af97
L
5591 },
5592
592a252b 5593 /* PREFIX_VEX_0F3809 */
c0f3af97 5594 {
592d1631
L
5595 { Bad_Opcode },
5596 { Bad_Opcode },
6c30d220 5597 { VEX_W_TABLE (VEX_W_0F3809_P_2) },
c0f3af97
L
5598 },
5599
592a252b 5600 /* PREFIX_VEX_0F380A */
c0f3af97 5601 {
592d1631
L
5602 { Bad_Opcode },
5603 { Bad_Opcode },
6c30d220 5604 { VEX_W_TABLE (VEX_W_0F380A_P_2) },
c0f3af97
L
5605 },
5606
592a252b 5607 /* PREFIX_VEX_0F380B */
c0f3af97 5608 {
592d1631
L
5609 { Bad_Opcode },
5610 { Bad_Opcode },
6c30d220 5611 { VEX_W_TABLE (VEX_W_0F380B_P_2) },
c0f3af97
L
5612 },
5613
592a252b 5614 /* PREFIX_VEX_0F380C */
c0f3af97 5615 {
592d1631
L
5616 { Bad_Opcode },
5617 { Bad_Opcode },
592a252b 5618 { VEX_W_TABLE (VEX_W_0F380C_P_2) },
c0f3af97
L
5619 },
5620
592a252b 5621 /* PREFIX_VEX_0F380D */
c0f3af97 5622 {
592d1631
L
5623 { Bad_Opcode },
5624 { Bad_Opcode },
592a252b 5625 { VEX_W_TABLE (VEX_W_0F380D_P_2) },
c0f3af97
L
5626 },
5627
592a252b 5628 /* PREFIX_VEX_0F380E */
c0f3af97 5629 {
592d1631
L
5630 { Bad_Opcode },
5631 { Bad_Opcode },
592a252b 5632 { VEX_W_TABLE (VEX_W_0F380E_P_2) },
c0f3af97
L
5633 },
5634
592a252b 5635 /* PREFIX_VEX_0F380F */
c0f3af97 5636 {
592d1631
L
5637 { Bad_Opcode },
5638 { Bad_Opcode },
592a252b 5639 { VEX_W_TABLE (VEX_W_0F380F_P_2) },
c0f3af97
L
5640 },
5641
592a252b 5642 /* PREFIX_VEX_0F3813 */
c7b8aa3a
L
5643 {
5644 { Bad_Opcode },
5645 { Bad_Opcode },
bf890a93 5646 { "vcvtph2ps", { XM, EXxmmq }, 0 },
c7b8aa3a
L
5647 },
5648
6c30d220
L
5649 /* PREFIX_VEX_0F3816 */
5650 {
5651 { Bad_Opcode },
5652 { Bad_Opcode },
5653 { VEX_LEN_TABLE (VEX_LEN_0F3816_P_2) },
5654 },
5655
592a252b 5656 /* PREFIX_VEX_0F3817 */
c0f3af97 5657 {
592d1631
L
5658 { Bad_Opcode },
5659 { Bad_Opcode },
592a252b 5660 { VEX_W_TABLE (VEX_W_0F3817_P_2) },
c0f3af97
L
5661 },
5662
592a252b 5663 /* PREFIX_VEX_0F3818 */
c0f3af97 5664 {
592d1631
L
5665 { Bad_Opcode },
5666 { Bad_Opcode },
6c30d220 5667 { VEX_W_TABLE (VEX_W_0F3818_P_2) },
c0f3af97
L
5668 },
5669
592a252b 5670 /* PREFIX_VEX_0F3819 */
c0f3af97 5671 {
592d1631
L
5672 { Bad_Opcode },
5673 { Bad_Opcode },
6c30d220 5674 { VEX_LEN_TABLE (VEX_LEN_0F3819_P_2) },
c0f3af97
L
5675 },
5676
592a252b 5677 /* PREFIX_VEX_0F381A */
c0f3af97 5678 {
592d1631
L
5679 { Bad_Opcode },
5680 { Bad_Opcode },
592a252b 5681 { MOD_TABLE (MOD_VEX_0F381A_PREFIX_2) },
c0f3af97
L
5682 },
5683
592a252b 5684 /* PREFIX_VEX_0F381C */
c0f3af97 5685 {
592d1631
L
5686 { Bad_Opcode },
5687 { Bad_Opcode },
6c30d220 5688 { VEX_W_TABLE (VEX_W_0F381C_P_2) },
c0f3af97
L
5689 },
5690
592a252b 5691 /* PREFIX_VEX_0F381D */
c0f3af97 5692 {
592d1631
L
5693 { Bad_Opcode },
5694 { Bad_Opcode },
6c30d220 5695 { VEX_W_TABLE (VEX_W_0F381D_P_2) },
c0f3af97
L
5696 },
5697
592a252b 5698 /* PREFIX_VEX_0F381E */
c0f3af97 5699 {
592d1631
L
5700 { Bad_Opcode },
5701 { Bad_Opcode },
6c30d220 5702 { VEX_W_TABLE (VEX_W_0F381E_P_2) },
c0f3af97
L
5703 },
5704
592a252b 5705 /* PREFIX_VEX_0F3820 */
c0f3af97 5706 {
592d1631
L
5707 { Bad_Opcode },
5708 { Bad_Opcode },
6c30d220 5709 { VEX_W_TABLE (VEX_W_0F3820_P_2) },
c0f3af97
L
5710 },
5711
592a252b 5712 /* PREFIX_VEX_0F3821 */
c0f3af97 5713 {
592d1631
L
5714 { Bad_Opcode },
5715 { Bad_Opcode },
6c30d220 5716 { VEX_W_TABLE (VEX_W_0F3821_P_2) },
c0f3af97
L
5717 },
5718
592a252b 5719 /* PREFIX_VEX_0F3822 */
c0f3af97 5720 {
592d1631
L
5721 { Bad_Opcode },
5722 { Bad_Opcode },
6c30d220 5723 { VEX_W_TABLE (VEX_W_0F3822_P_2) },
c0f3af97
L
5724 },
5725
592a252b 5726 /* PREFIX_VEX_0F3823 */
c0f3af97 5727 {
592d1631
L
5728 { Bad_Opcode },
5729 { Bad_Opcode },
6c30d220 5730 { VEX_W_TABLE (VEX_W_0F3823_P_2) },
c0f3af97
L
5731 },
5732
592a252b 5733 /* PREFIX_VEX_0F3824 */
c0f3af97 5734 {
592d1631
L
5735 { Bad_Opcode },
5736 { Bad_Opcode },
6c30d220 5737 { VEX_W_TABLE (VEX_W_0F3824_P_2) },
c0f3af97
L
5738 },
5739
592a252b 5740 /* PREFIX_VEX_0F3825 */
c0f3af97 5741 {
592d1631
L
5742 { Bad_Opcode },
5743 { Bad_Opcode },
6c30d220 5744 { VEX_W_TABLE (VEX_W_0F3825_P_2) },
c0f3af97
L
5745 },
5746
592a252b 5747 /* PREFIX_VEX_0F3828 */
c0f3af97 5748 {
592d1631
L
5749 { Bad_Opcode },
5750 { Bad_Opcode },
6c30d220 5751 { VEX_W_TABLE (VEX_W_0F3828_P_2) },
c0f3af97
L
5752 },
5753
592a252b 5754 /* PREFIX_VEX_0F3829 */
c0f3af97 5755 {
592d1631
L
5756 { Bad_Opcode },
5757 { Bad_Opcode },
6c30d220 5758 { VEX_W_TABLE (VEX_W_0F3829_P_2) },
c0f3af97
L
5759 },
5760
592a252b 5761 /* PREFIX_VEX_0F382A */
c0f3af97 5762 {
592d1631
L
5763 { Bad_Opcode },
5764 { Bad_Opcode },
592a252b 5765 { MOD_TABLE (MOD_VEX_0F382A_PREFIX_2) },
c0f3af97
L
5766 },
5767
592a252b 5768 /* PREFIX_VEX_0F382B */
c0f3af97 5769 {
592d1631
L
5770 { Bad_Opcode },
5771 { Bad_Opcode },
6c30d220 5772 { VEX_W_TABLE (VEX_W_0F382B_P_2) },
c0f3af97
L
5773 },
5774
592a252b 5775 /* PREFIX_VEX_0F382C */
c0f3af97 5776 {
592d1631
L
5777 { Bad_Opcode },
5778 { Bad_Opcode },
592a252b 5779 { MOD_TABLE (MOD_VEX_0F382C_PREFIX_2) },
c0f3af97
L
5780 },
5781
592a252b 5782 /* PREFIX_VEX_0F382D */
c0f3af97 5783 {
592d1631
L
5784 { Bad_Opcode },
5785 { Bad_Opcode },
592a252b 5786 { MOD_TABLE (MOD_VEX_0F382D_PREFIX_2) },
c0f3af97
L
5787 },
5788
592a252b 5789 /* PREFIX_VEX_0F382E */
c0f3af97 5790 {
592d1631
L
5791 { Bad_Opcode },
5792 { Bad_Opcode },
592a252b 5793 { MOD_TABLE (MOD_VEX_0F382E_PREFIX_2) },
c0f3af97
L
5794 },
5795
592a252b 5796 /* PREFIX_VEX_0F382F */
c0f3af97 5797 {
592d1631
L
5798 { Bad_Opcode },
5799 { Bad_Opcode },
592a252b 5800 { MOD_TABLE (MOD_VEX_0F382F_PREFIX_2) },
c0f3af97
L
5801 },
5802
592a252b 5803 /* PREFIX_VEX_0F3830 */
c0f3af97 5804 {
592d1631
L
5805 { Bad_Opcode },
5806 { Bad_Opcode },
6c30d220 5807 { VEX_W_TABLE (VEX_W_0F3830_P_2) },
c0f3af97
L
5808 },
5809
592a252b 5810 /* PREFIX_VEX_0F3831 */
c0f3af97 5811 {
592d1631
L
5812 { Bad_Opcode },
5813 { Bad_Opcode },
6c30d220 5814 { VEX_W_TABLE (VEX_W_0F3831_P_2) },
c0f3af97
L
5815 },
5816
592a252b 5817 /* PREFIX_VEX_0F3832 */
c0f3af97 5818 {
592d1631
L
5819 { Bad_Opcode },
5820 { Bad_Opcode },
6c30d220 5821 { VEX_W_TABLE (VEX_W_0F3832_P_2) },
c0f3af97
L
5822 },
5823
592a252b 5824 /* PREFIX_VEX_0F3833 */
c0f3af97 5825 {
592d1631
L
5826 { Bad_Opcode },
5827 { Bad_Opcode },
6c30d220 5828 { VEX_W_TABLE (VEX_W_0F3833_P_2) },
c0f3af97
L
5829 },
5830
592a252b 5831 /* PREFIX_VEX_0F3834 */
c0f3af97 5832 {
592d1631
L
5833 { Bad_Opcode },
5834 { Bad_Opcode },
6c30d220 5835 { VEX_W_TABLE (VEX_W_0F3834_P_2) },
c0f3af97
L
5836 },
5837
592a252b 5838 /* PREFIX_VEX_0F3835 */
c0f3af97 5839 {
592d1631
L
5840 { Bad_Opcode },
5841 { Bad_Opcode },
6c30d220
L
5842 { VEX_W_TABLE (VEX_W_0F3835_P_2) },
5843 },
5844
5845 /* PREFIX_VEX_0F3836 */
5846 {
5847 { Bad_Opcode },
5848 { Bad_Opcode },
5849 { VEX_LEN_TABLE (VEX_LEN_0F3836_P_2) },
c0f3af97
L
5850 },
5851
592a252b 5852 /* PREFIX_VEX_0F3837 */
c0f3af97 5853 {
592d1631
L
5854 { Bad_Opcode },
5855 { Bad_Opcode },
6c30d220 5856 { VEX_W_TABLE (VEX_W_0F3837_P_2) },
c0f3af97
L
5857 },
5858
592a252b 5859 /* PREFIX_VEX_0F3838 */
c0f3af97 5860 {
592d1631
L
5861 { Bad_Opcode },
5862 { Bad_Opcode },
6c30d220 5863 { VEX_W_TABLE (VEX_W_0F3838_P_2) },
c0f3af97
L
5864 },
5865
592a252b 5866 /* PREFIX_VEX_0F3839 */
c0f3af97 5867 {
592d1631
L
5868 { Bad_Opcode },
5869 { Bad_Opcode },
6c30d220 5870 { VEX_W_TABLE (VEX_W_0F3839_P_2) },
c0f3af97
L
5871 },
5872
592a252b 5873 /* PREFIX_VEX_0F383A */
c0f3af97 5874 {
592d1631
L
5875 { Bad_Opcode },
5876 { Bad_Opcode },
6c30d220 5877 { VEX_W_TABLE (VEX_W_0F383A_P_2) },
c0f3af97
L
5878 },
5879
592a252b 5880 /* PREFIX_VEX_0F383B */
c0f3af97 5881 {
592d1631
L
5882 { Bad_Opcode },
5883 { Bad_Opcode },
6c30d220 5884 { VEX_W_TABLE (VEX_W_0F383B_P_2) },
c0f3af97
L
5885 },
5886
592a252b 5887 /* PREFIX_VEX_0F383C */
c0f3af97 5888 {
592d1631
L
5889 { Bad_Opcode },
5890 { Bad_Opcode },
6c30d220 5891 { VEX_W_TABLE (VEX_W_0F383C_P_2) },
c0f3af97
L
5892 },
5893
592a252b 5894 /* PREFIX_VEX_0F383D */
c0f3af97 5895 {
592d1631
L
5896 { Bad_Opcode },
5897 { Bad_Opcode },
6c30d220 5898 { VEX_W_TABLE (VEX_W_0F383D_P_2) },
c0f3af97
L
5899 },
5900
592a252b 5901 /* PREFIX_VEX_0F383E */
c0f3af97 5902 {
592d1631
L
5903 { Bad_Opcode },
5904 { Bad_Opcode },
6c30d220 5905 { VEX_W_TABLE (VEX_W_0F383E_P_2) },
c0f3af97
L
5906 },
5907
592a252b 5908 /* PREFIX_VEX_0F383F */
c0f3af97 5909 {
592d1631
L
5910 { Bad_Opcode },
5911 { Bad_Opcode },
6c30d220 5912 { VEX_W_TABLE (VEX_W_0F383F_P_2) },
c0f3af97
L
5913 },
5914
592a252b 5915 /* PREFIX_VEX_0F3840 */
c0f3af97 5916 {
592d1631
L
5917 { Bad_Opcode },
5918 { Bad_Opcode },
6c30d220 5919 { VEX_W_TABLE (VEX_W_0F3840_P_2) },
c0f3af97
L
5920 },
5921
592a252b 5922 /* PREFIX_VEX_0F3841 */
c0f3af97 5923 {
592d1631
L
5924 { Bad_Opcode },
5925 { Bad_Opcode },
592a252b 5926 { VEX_LEN_TABLE (VEX_LEN_0F3841_P_2) },
c0f3af97
L
5927 },
5928
6c30d220
L
5929 /* PREFIX_VEX_0F3845 */
5930 {
5931 { Bad_Opcode },
5932 { Bad_Opcode },
bf890a93 5933 { "vpsrlv%LW", { XM, Vex, EXx }, 0 },
6c30d220
L
5934 },
5935
5936 /* PREFIX_VEX_0F3846 */
5937 {
5938 { Bad_Opcode },
5939 { Bad_Opcode },
5940 { VEX_W_TABLE (VEX_W_0F3846_P_2) },
5941 },
5942
5943 /* PREFIX_VEX_0F3847 */
5944 {
5945 { Bad_Opcode },
5946 { Bad_Opcode },
bf890a93 5947 { "vpsllv%LW", { XM, Vex, EXx }, 0 },
6c30d220
L
5948 },
5949
5950 /* PREFIX_VEX_0F3858 */
5951 {
5952 { Bad_Opcode },
5953 { Bad_Opcode },
5954 { VEX_W_TABLE (VEX_W_0F3858_P_2) },
5955 },
5956
5957 /* PREFIX_VEX_0F3859 */
5958 {
5959 { Bad_Opcode },
5960 { Bad_Opcode },
5961 { VEX_W_TABLE (VEX_W_0F3859_P_2) },
5962 },
5963
5964 /* PREFIX_VEX_0F385A */
5965 {
5966 { Bad_Opcode },
5967 { Bad_Opcode },
5968 { MOD_TABLE (MOD_VEX_0F385A_PREFIX_2) },
5969 },
5970
5971 /* PREFIX_VEX_0F3878 */
5972 {
5973 { Bad_Opcode },
5974 { Bad_Opcode },
5975 { VEX_W_TABLE (VEX_W_0F3878_P_2) },
5976 },
5977
5978 /* PREFIX_VEX_0F3879 */
5979 {
5980 { Bad_Opcode },
5981 { Bad_Opcode },
5982 { VEX_W_TABLE (VEX_W_0F3879_P_2) },
5983 },
5984
5985 /* PREFIX_VEX_0F388C */
5986 {
5987 { Bad_Opcode },
5988 { Bad_Opcode },
f7002f42 5989 { MOD_TABLE (MOD_VEX_0F388C_PREFIX_2) },
6c30d220
L
5990 },
5991
5992 /* PREFIX_VEX_0F388E */
5993 {
5994 { Bad_Opcode },
5995 { Bad_Opcode },
f7002f42 5996 { MOD_TABLE (MOD_VEX_0F388E_PREFIX_2) },
6c30d220
L
5997 },
5998
5999 /* PREFIX_VEX_0F3890 */
6000 {
6001 { Bad_Opcode },
6002 { Bad_Opcode },
bf890a93 6003 { "vpgatherd%LW", { XM, MVexVSIBDWpX, Vex }, 0 },
6c30d220
L
6004 },
6005
6006 /* PREFIX_VEX_0F3891 */
6007 {
6008 { Bad_Opcode },
6009 { Bad_Opcode },
bf890a93 6010 { "vpgatherq%LW", { XMGatherQ, MVexVSIBQWpX, VexGatherQ }, 0 },
6c30d220
L
6011 },
6012
6013 /* PREFIX_VEX_0F3892 */
6014 {
6015 { Bad_Opcode },
6016 { Bad_Opcode },
bf890a93 6017 { "vgatherdp%XW", { XM, MVexVSIBDWpX, Vex }, 0 },
6c30d220
L
6018 },
6019
6020 /* PREFIX_VEX_0F3893 */
6021 {
6022 { Bad_Opcode },
6023 { Bad_Opcode },
bf890a93 6024 { "vgatherqp%XW", { XMGatherQ, MVexVSIBQWpX, VexGatherQ }, 0 },
6c30d220
L
6025 },
6026
592a252b 6027 /* PREFIX_VEX_0F3896 */
a5ff0eb2 6028 {
592d1631
L
6029 { Bad_Opcode },
6030 { Bad_Opcode },
bf890a93 6031 { "vfmaddsub132p%XW", { XM, Vex, EXx }, 0 },
a5ff0eb2
L
6032 },
6033
592a252b 6034 /* PREFIX_VEX_0F3897 */
a5ff0eb2 6035 {
592d1631
L
6036 { Bad_Opcode },
6037 { Bad_Opcode },
bf890a93 6038 { "vfmsubadd132p%XW", { XM, Vex, EXx }, 0 },
a5ff0eb2
L
6039 },
6040
592a252b 6041 /* PREFIX_VEX_0F3898 */
a5ff0eb2 6042 {
592d1631
L
6043 { Bad_Opcode },
6044 { Bad_Opcode },
bf890a93 6045 { "vfmadd132p%XW", { XM, Vex, EXx }, 0 },
a5ff0eb2
L
6046 },
6047
592a252b 6048 /* PREFIX_VEX_0F3899 */
a5ff0eb2 6049 {
592d1631
L
6050 { Bad_Opcode },
6051 { Bad_Opcode },
bf890a93 6052 { "vfmadd132s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
a5ff0eb2
L
6053 },
6054
592a252b 6055 /* PREFIX_VEX_0F389A */
a5ff0eb2 6056 {
592d1631
L
6057 { Bad_Opcode },
6058 { Bad_Opcode },
bf890a93 6059 { "vfmsub132p%XW", { XM, Vex, EXx }, 0 },
a5ff0eb2
L
6060 },
6061
592a252b 6062 /* PREFIX_VEX_0F389B */
c0f3af97 6063 {
592d1631
L
6064 { Bad_Opcode },
6065 { Bad_Opcode },
bf890a93 6066 { "vfmsub132s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6067 },
6068
592a252b 6069 /* PREFIX_VEX_0F389C */
c0f3af97 6070 {
592d1631
L
6071 { Bad_Opcode },
6072 { Bad_Opcode },
bf890a93 6073 { "vfnmadd132p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6074 },
6075
592a252b 6076 /* PREFIX_VEX_0F389D */
c0f3af97 6077 {
592d1631
L
6078 { Bad_Opcode },
6079 { Bad_Opcode },
bf890a93 6080 { "vfnmadd132s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6081 },
6082
592a252b 6083 /* PREFIX_VEX_0F389E */
c0f3af97 6084 {
592d1631
L
6085 { Bad_Opcode },
6086 { Bad_Opcode },
bf890a93 6087 { "vfnmsub132p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6088 },
6089
592a252b 6090 /* PREFIX_VEX_0F389F */
c0f3af97 6091 {
592d1631
L
6092 { Bad_Opcode },
6093 { Bad_Opcode },
bf890a93 6094 { "vfnmsub132s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6095 },
6096
592a252b 6097 /* PREFIX_VEX_0F38A6 */
c0f3af97 6098 {
592d1631
L
6099 { Bad_Opcode },
6100 { Bad_Opcode },
bf890a93 6101 { "vfmaddsub213p%XW", { XM, Vex, EXx }, 0 },
592d1631 6102 { Bad_Opcode },
c0f3af97
L
6103 },
6104
592a252b 6105 /* PREFIX_VEX_0F38A7 */
c0f3af97 6106 {
592d1631
L
6107 { Bad_Opcode },
6108 { Bad_Opcode },
bf890a93 6109 { "vfmsubadd213p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6110 },
6111
592a252b 6112 /* PREFIX_VEX_0F38A8 */
c0f3af97 6113 {
592d1631
L
6114 { Bad_Opcode },
6115 { Bad_Opcode },
bf890a93 6116 { "vfmadd213p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6117 },
6118
592a252b 6119 /* PREFIX_VEX_0F38A9 */
c0f3af97 6120 {
592d1631
L
6121 { Bad_Opcode },
6122 { Bad_Opcode },
bf890a93 6123 { "vfmadd213s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6124 },
6125
592a252b 6126 /* PREFIX_VEX_0F38AA */
c0f3af97 6127 {
592d1631
L
6128 { Bad_Opcode },
6129 { Bad_Opcode },
bf890a93 6130 { "vfmsub213p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6131 },
6132
592a252b 6133 /* PREFIX_VEX_0F38AB */
c0f3af97 6134 {
592d1631
L
6135 { Bad_Opcode },
6136 { Bad_Opcode },
bf890a93 6137 { "vfmsub213s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6138 },
6139
592a252b 6140 /* PREFIX_VEX_0F38AC */
c0f3af97 6141 {
592d1631
L
6142 { Bad_Opcode },
6143 { Bad_Opcode },
bf890a93 6144 { "vfnmadd213p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6145 },
6146
592a252b 6147 /* PREFIX_VEX_0F38AD */
c0f3af97 6148 {
592d1631
L
6149 { Bad_Opcode },
6150 { Bad_Opcode },
bf890a93 6151 { "vfnmadd213s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6152 },
6153
592a252b 6154 /* PREFIX_VEX_0F38AE */
c0f3af97 6155 {
592d1631
L
6156 { Bad_Opcode },
6157 { Bad_Opcode },
bf890a93 6158 { "vfnmsub213p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6159 },
6160
592a252b 6161 /* PREFIX_VEX_0F38AF */
c0f3af97 6162 {
592d1631
L
6163 { Bad_Opcode },
6164 { Bad_Opcode },
bf890a93 6165 { "vfnmsub213s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6166 },
6167
592a252b 6168 /* PREFIX_VEX_0F38B6 */
c0f3af97 6169 {
592d1631
L
6170 { Bad_Opcode },
6171 { Bad_Opcode },
bf890a93 6172 { "vfmaddsub231p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6173 },
6174
592a252b 6175 /* PREFIX_VEX_0F38B7 */
c0f3af97 6176 {
592d1631
L
6177 { Bad_Opcode },
6178 { Bad_Opcode },
bf890a93 6179 { "vfmsubadd231p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6180 },
6181
592a252b 6182 /* PREFIX_VEX_0F38B8 */
c0f3af97 6183 {
592d1631
L
6184 { Bad_Opcode },
6185 { Bad_Opcode },
bf890a93 6186 { "vfmadd231p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6187 },
6188
592a252b 6189 /* PREFIX_VEX_0F38B9 */
c0f3af97 6190 {
592d1631
L
6191 { Bad_Opcode },
6192 { Bad_Opcode },
bf890a93 6193 { "vfmadd231s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6194 },
6195
592a252b 6196 /* PREFIX_VEX_0F38BA */
c0f3af97 6197 {
592d1631
L
6198 { Bad_Opcode },
6199 { Bad_Opcode },
bf890a93 6200 { "vfmsub231p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6201 },
6202
592a252b 6203 /* PREFIX_VEX_0F38BB */
c0f3af97 6204 {
592d1631
L
6205 { Bad_Opcode },
6206 { Bad_Opcode },
bf890a93 6207 { "vfmsub231s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6208 },
6209
592a252b 6210 /* PREFIX_VEX_0F38BC */
c0f3af97 6211 {
592d1631
L
6212 { Bad_Opcode },
6213 { Bad_Opcode },
bf890a93 6214 { "vfnmadd231p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6215 },
6216
592a252b 6217 /* PREFIX_VEX_0F38BD */
c0f3af97 6218 {
592d1631
L
6219 { Bad_Opcode },
6220 { Bad_Opcode },
bf890a93 6221 { "vfnmadd231s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6222 },
6223
592a252b 6224 /* PREFIX_VEX_0F38BE */
c0f3af97 6225 {
592d1631
L
6226 { Bad_Opcode },
6227 { Bad_Opcode },
bf890a93 6228 { "vfnmsub231p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6229 },
6230
592a252b 6231 /* PREFIX_VEX_0F38BF */
c0f3af97 6232 {
592d1631
L
6233 { Bad_Opcode },
6234 { Bad_Opcode },
bf890a93 6235 { "vfnmsub231s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6236 },
6237
592a252b 6238 /* PREFIX_VEX_0F38DB */
c0f3af97 6239 {
592d1631
L
6240 { Bad_Opcode },
6241 { Bad_Opcode },
592a252b 6242 { VEX_LEN_TABLE (VEX_LEN_0F38DB_P_2) },
c0f3af97
L
6243 },
6244
592a252b 6245 /* PREFIX_VEX_0F38DC */
c0f3af97 6246 {
592d1631
L
6247 { Bad_Opcode },
6248 { Bad_Opcode },
592a252b 6249 { VEX_LEN_TABLE (VEX_LEN_0F38DC_P_2) },
c0f3af97
L
6250 },
6251
592a252b 6252 /* PREFIX_VEX_0F38DD */
c0f3af97 6253 {
592d1631
L
6254 { Bad_Opcode },
6255 { Bad_Opcode },
592a252b 6256 { VEX_LEN_TABLE (VEX_LEN_0F38DD_P_2) },
c0f3af97
L
6257 },
6258
592a252b 6259 /* PREFIX_VEX_0F38DE */
c0f3af97 6260 {
592d1631
L
6261 { Bad_Opcode },
6262 { Bad_Opcode },
592a252b 6263 { VEX_LEN_TABLE (VEX_LEN_0F38DE_P_2) },
c0f3af97
L
6264 },
6265
592a252b 6266 /* PREFIX_VEX_0F38DF */
c0f3af97 6267 {
592d1631
L
6268 { Bad_Opcode },
6269 { Bad_Opcode },
592a252b 6270 { VEX_LEN_TABLE (VEX_LEN_0F38DF_P_2) },
c0f3af97
L
6271 },
6272
f12dc422
L
6273 /* PREFIX_VEX_0F38F2 */
6274 {
6275 { VEX_LEN_TABLE (VEX_LEN_0F38F2_P_0) },
6276 },
6277
6278 /* PREFIX_VEX_0F38F3_REG_1 */
6279 {
6280 { VEX_LEN_TABLE (VEX_LEN_0F38F3_R_1_P_0) },
6281 },
6282
6283 /* PREFIX_VEX_0F38F3_REG_2 */
6284 {
6285 { VEX_LEN_TABLE (VEX_LEN_0F38F3_R_2_P_0) },
6286 },
6287
6288 /* PREFIX_VEX_0F38F3_REG_3 */
6289 {
6290 { VEX_LEN_TABLE (VEX_LEN_0F38F3_R_3_P_0) },
6291 },
6292
6c30d220
L
6293 /* PREFIX_VEX_0F38F5 */
6294 {
6295 { VEX_LEN_TABLE (VEX_LEN_0F38F5_P_0) },
6296 { VEX_LEN_TABLE (VEX_LEN_0F38F5_P_1) },
6297 { Bad_Opcode },
6298 { VEX_LEN_TABLE (VEX_LEN_0F38F5_P_3) },
6299 },
6300
6301 /* PREFIX_VEX_0F38F6 */
6302 {
6303 { Bad_Opcode },
6304 { Bad_Opcode },
6305 { Bad_Opcode },
6306 { VEX_LEN_TABLE (VEX_LEN_0F38F6_P_3) },
6307 },
6308
f12dc422
L
6309 /* PREFIX_VEX_0F38F7 */
6310 {
6311 { VEX_LEN_TABLE (VEX_LEN_0F38F7_P_0) },
6c30d220
L
6312 { VEX_LEN_TABLE (VEX_LEN_0F38F7_P_1) },
6313 { VEX_LEN_TABLE (VEX_LEN_0F38F7_P_2) },
6314 { VEX_LEN_TABLE (VEX_LEN_0F38F7_P_3) },
6315 },
6316
6317 /* PREFIX_VEX_0F3A00 */
6318 {
6319 { Bad_Opcode },
6320 { Bad_Opcode },
6321 { VEX_LEN_TABLE (VEX_LEN_0F3A00_P_2) },
6322 },
6323
6324 /* PREFIX_VEX_0F3A01 */
6325 {
6326 { Bad_Opcode },
6327 { Bad_Opcode },
6328 { VEX_LEN_TABLE (VEX_LEN_0F3A01_P_2) },
6329 },
6330
6331 /* PREFIX_VEX_0F3A02 */
6332 {
6333 { Bad_Opcode },
6334 { Bad_Opcode },
6335 { VEX_W_TABLE (VEX_W_0F3A02_P_2) },
f12dc422
L
6336 },
6337
592a252b 6338 /* PREFIX_VEX_0F3A04 */
c0f3af97 6339 {
592d1631
L
6340 { Bad_Opcode },
6341 { Bad_Opcode },
592a252b 6342 { VEX_W_TABLE (VEX_W_0F3A04_P_2) },
c0f3af97
L
6343 },
6344
592a252b 6345 /* PREFIX_VEX_0F3A05 */
c0f3af97 6346 {
592d1631
L
6347 { Bad_Opcode },
6348 { Bad_Opcode },
592a252b 6349 { VEX_W_TABLE (VEX_W_0F3A05_P_2) },
c0f3af97
L
6350 },
6351
592a252b 6352 /* PREFIX_VEX_0F3A06 */
c0f3af97 6353 {
592d1631
L
6354 { Bad_Opcode },
6355 { Bad_Opcode },
592a252b 6356 { VEX_LEN_TABLE (VEX_LEN_0F3A06_P_2) },
c0f3af97
L
6357 },
6358
592a252b 6359 /* PREFIX_VEX_0F3A08 */
c0f3af97 6360 {
592d1631
L
6361 { Bad_Opcode },
6362 { Bad_Opcode },
592a252b 6363 { VEX_W_TABLE (VEX_W_0F3A08_P_2) },
c0f3af97
L
6364 },
6365
592a252b 6366 /* PREFIX_VEX_0F3A09 */
c0f3af97 6367 {
592d1631
L
6368 { Bad_Opcode },
6369 { Bad_Opcode },
592a252b 6370 { VEX_W_TABLE (VEX_W_0F3A09_P_2) },
c0f3af97
L
6371 },
6372
592a252b 6373 /* PREFIX_VEX_0F3A0A */
c0f3af97 6374 {
592d1631
L
6375 { Bad_Opcode },
6376 { Bad_Opcode },
592a252b 6377 { VEX_LEN_TABLE (VEX_LEN_0F3A0A_P_2) },
0bfee649
L
6378 },
6379
592a252b 6380 /* PREFIX_VEX_0F3A0B */
0bfee649 6381 {
592d1631
L
6382 { Bad_Opcode },
6383 { Bad_Opcode },
592a252b 6384 { VEX_LEN_TABLE (VEX_LEN_0F3A0B_P_2) },
0bfee649
L
6385 },
6386
592a252b 6387 /* PREFIX_VEX_0F3A0C */
0bfee649 6388 {
592d1631
L
6389 { Bad_Opcode },
6390 { Bad_Opcode },
592a252b 6391 { VEX_W_TABLE (VEX_W_0F3A0C_P_2) },
0bfee649
L
6392 },
6393
592a252b 6394 /* PREFIX_VEX_0F3A0D */
0bfee649 6395 {
592d1631
L
6396 { Bad_Opcode },
6397 { Bad_Opcode },
592a252b 6398 { VEX_W_TABLE (VEX_W_0F3A0D_P_2) },
c0f3af97
L
6399 },
6400
592a252b 6401 /* PREFIX_VEX_0F3A0E */
0bfee649 6402 {
592d1631
L
6403 { Bad_Opcode },
6404 { Bad_Opcode },
6c30d220 6405 { VEX_W_TABLE (VEX_W_0F3A0E_P_2) },
0bfee649
L
6406 },
6407
592a252b 6408 /* PREFIX_VEX_0F3A0F */
0bfee649 6409 {
592d1631
L
6410 { Bad_Opcode },
6411 { Bad_Opcode },
6c30d220 6412 { VEX_W_TABLE (VEX_W_0F3A0F_P_2) },
0bfee649
L
6413 },
6414
592a252b 6415 /* PREFIX_VEX_0F3A14 */
0bfee649 6416 {
592d1631
L
6417 { Bad_Opcode },
6418 { Bad_Opcode },
592a252b 6419 { VEX_LEN_TABLE (VEX_LEN_0F3A14_P_2) },
0bfee649
L
6420 },
6421
592a252b 6422 /* PREFIX_VEX_0F3A15 */
0bfee649 6423 {
592d1631
L
6424 { Bad_Opcode },
6425 { Bad_Opcode },
592a252b 6426 { VEX_LEN_TABLE (VEX_LEN_0F3A15_P_2) },
0bfee649
L
6427 },
6428
592a252b 6429 /* PREFIX_VEX_0F3A16 */
c0f3af97 6430 {
592d1631
L
6431 { Bad_Opcode },
6432 { Bad_Opcode },
592a252b 6433 { VEX_LEN_TABLE (VEX_LEN_0F3A16_P_2) },
c0f3af97
L
6434 },
6435
592a252b 6436 /* PREFIX_VEX_0F3A17 */
c0f3af97 6437 {
592d1631
L
6438 { Bad_Opcode },
6439 { Bad_Opcode },
592a252b 6440 { VEX_LEN_TABLE (VEX_LEN_0F3A17_P_2) },
c0f3af97
L
6441 },
6442
592a252b 6443 /* PREFIX_VEX_0F3A18 */
c0f3af97 6444 {
592d1631
L
6445 { Bad_Opcode },
6446 { Bad_Opcode },
592a252b 6447 { VEX_LEN_TABLE (VEX_LEN_0F3A18_P_2) },
c0f3af97
L
6448 },
6449
592a252b 6450 /* PREFIX_VEX_0F3A19 */
c0f3af97 6451 {
592d1631
L
6452 { Bad_Opcode },
6453 { Bad_Opcode },
592a252b 6454 { VEX_LEN_TABLE (VEX_LEN_0F3A19_P_2) },
c0f3af97
L
6455 },
6456
592a252b 6457 /* PREFIX_VEX_0F3A1D */
c7b8aa3a
L
6458 {
6459 { Bad_Opcode },
6460 { Bad_Opcode },
bf890a93 6461 { "vcvtps2ph", { EXxmmq, XM, Ib }, 0 },
c7b8aa3a
L
6462 },
6463
592a252b 6464 /* PREFIX_VEX_0F3A20 */
c0f3af97 6465 {
592d1631
L
6466 { Bad_Opcode },
6467 { Bad_Opcode },
592a252b 6468 { VEX_LEN_TABLE (VEX_LEN_0F3A20_P_2) },
c0f3af97
L
6469 },
6470
592a252b 6471 /* PREFIX_VEX_0F3A21 */
c0f3af97 6472 {
592d1631
L
6473 { Bad_Opcode },
6474 { Bad_Opcode },
592a252b 6475 { VEX_LEN_TABLE (VEX_LEN_0F3A21_P_2) },
c0f3af97
L
6476 },
6477
592a252b 6478 /* PREFIX_VEX_0F3A22 */
0bfee649 6479 {
592d1631
L
6480 { Bad_Opcode },
6481 { Bad_Opcode },
592a252b 6482 { VEX_LEN_TABLE (VEX_LEN_0F3A22_P_2) },
0bfee649
L
6483 },
6484
43234a1e
L
6485 /* PREFIX_VEX_0F3A30 */
6486 {
6487 { Bad_Opcode },
6488 { Bad_Opcode },
6489 { VEX_LEN_TABLE (VEX_LEN_0F3A30_P_2) },
6490 },
6491
1ba585e8
IT
6492 /* PREFIX_VEX_0F3A31 */
6493 {
6494 { Bad_Opcode },
6495 { Bad_Opcode },
6496 { VEX_LEN_TABLE (VEX_LEN_0F3A31_P_2) },
6497 },
6498
43234a1e
L
6499 /* PREFIX_VEX_0F3A32 */
6500 {
6501 { Bad_Opcode },
6502 { Bad_Opcode },
6503 { VEX_LEN_TABLE (VEX_LEN_0F3A32_P_2) },
6504 },
6505
1ba585e8
IT
6506 /* PREFIX_VEX_0F3A33 */
6507 {
6508 { Bad_Opcode },
6509 { Bad_Opcode },
6510 { VEX_LEN_TABLE (VEX_LEN_0F3A33_P_2) },
6511 },
6512
6c30d220
L
6513 /* PREFIX_VEX_0F3A38 */
6514 {
6515 { Bad_Opcode },
6516 { Bad_Opcode },
6517 { VEX_LEN_TABLE (VEX_LEN_0F3A38_P_2) },
6518 },
6519
6520 /* PREFIX_VEX_0F3A39 */
6521 {
6522 { Bad_Opcode },
6523 { Bad_Opcode },
6524 { VEX_LEN_TABLE (VEX_LEN_0F3A39_P_2) },
6525 },
6526
592a252b 6527 /* PREFIX_VEX_0F3A40 */
c0f3af97 6528 {
592d1631
L
6529 { Bad_Opcode },
6530 { Bad_Opcode },
592a252b 6531 { VEX_W_TABLE (VEX_W_0F3A40_P_2) },
c0f3af97
L
6532 },
6533
592a252b 6534 /* PREFIX_VEX_0F3A41 */
c0f3af97 6535 {
592d1631
L
6536 { Bad_Opcode },
6537 { Bad_Opcode },
592a252b 6538 { VEX_LEN_TABLE (VEX_LEN_0F3A41_P_2) },
c0f3af97
L
6539 },
6540
592a252b 6541 /* PREFIX_VEX_0F3A42 */
c0f3af97 6542 {
592d1631
L
6543 { Bad_Opcode },
6544 { Bad_Opcode },
6c30d220 6545 { VEX_W_TABLE (VEX_W_0F3A42_P_2) },
c0f3af97
L
6546 },
6547
592a252b 6548 /* PREFIX_VEX_0F3A44 */
ce2f5b3c 6549 {
592d1631
L
6550 { Bad_Opcode },
6551 { Bad_Opcode },
592a252b 6552 { VEX_LEN_TABLE (VEX_LEN_0F3A44_P_2) },
ce2f5b3c
L
6553 },
6554
6c30d220
L
6555 /* PREFIX_VEX_0F3A46 */
6556 {
6557 { Bad_Opcode },
6558 { Bad_Opcode },
6559 { VEX_LEN_TABLE (VEX_LEN_0F3A46_P_2) },
6560 },
6561
592a252b 6562 /* PREFIX_VEX_0F3A48 */
a683cc34
SP
6563 {
6564 { Bad_Opcode },
6565 { Bad_Opcode },
592a252b 6566 { VEX_W_TABLE (VEX_W_0F3A48_P_2) },
a683cc34
SP
6567 },
6568
592a252b 6569 /* PREFIX_VEX_0F3A49 */
a683cc34
SP
6570 {
6571 { Bad_Opcode },
6572 { Bad_Opcode },
592a252b 6573 { VEX_W_TABLE (VEX_W_0F3A49_P_2) },
a683cc34
SP
6574 },
6575
592a252b 6576 /* PREFIX_VEX_0F3A4A */
c0f3af97 6577 {
592d1631
L
6578 { Bad_Opcode },
6579 { Bad_Opcode },
592a252b 6580 { VEX_W_TABLE (VEX_W_0F3A4A_P_2) },
c0f3af97
L
6581 },
6582
592a252b 6583 /* PREFIX_VEX_0F3A4B */
c0f3af97 6584 {
592d1631
L
6585 { Bad_Opcode },
6586 { Bad_Opcode },
592a252b 6587 { VEX_W_TABLE (VEX_W_0F3A4B_P_2) },
c0f3af97
L
6588 },
6589
592a252b 6590 /* PREFIX_VEX_0F3A4C */
c0f3af97 6591 {
592d1631
L
6592 { Bad_Opcode },
6593 { Bad_Opcode },
6c30d220 6594 { VEX_W_TABLE (VEX_W_0F3A4C_P_2) },
c0f3af97
L
6595 },
6596
592a252b 6597 /* PREFIX_VEX_0F3A5C */
922d8de8 6598 {
592d1631
L
6599 { Bad_Opcode },
6600 { Bad_Opcode },
bf890a93 6601 { "vfmaddsubps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
922d8de8
DR
6602 },
6603
592a252b 6604 /* PREFIX_VEX_0F3A5D */
922d8de8 6605 {
592d1631
L
6606 { Bad_Opcode },
6607 { Bad_Opcode },
bf890a93 6608 { "vfmaddsubpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
922d8de8
DR
6609 },
6610
592a252b 6611 /* PREFIX_VEX_0F3A5E */
922d8de8 6612 {
592d1631
L
6613 { Bad_Opcode },
6614 { Bad_Opcode },
bf890a93 6615 { "vfmsubaddps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
922d8de8
DR
6616 },
6617
592a252b 6618 /* PREFIX_VEX_0F3A5F */
922d8de8 6619 {
592d1631
L
6620 { Bad_Opcode },
6621 { Bad_Opcode },
bf890a93 6622 { "vfmsubaddpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
922d8de8
DR
6623 },
6624
592a252b 6625 /* PREFIX_VEX_0F3A60 */
c0f3af97 6626 {
592d1631
L
6627 { Bad_Opcode },
6628 { Bad_Opcode },
592a252b 6629 { VEX_LEN_TABLE (VEX_LEN_0F3A60_P_2) },
592d1631 6630 { Bad_Opcode },
c0f3af97
L
6631 },
6632
592a252b 6633 /* PREFIX_VEX_0F3A61 */
c0f3af97 6634 {
592d1631
L
6635 { Bad_Opcode },
6636 { Bad_Opcode },
592a252b 6637 { VEX_LEN_TABLE (VEX_LEN_0F3A61_P_2) },
c0f3af97
L
6638 },
6639
592a252b 6640 /* PREFIX_VEX_0F3A62 */
c0f3af97 6641 {
592d1631
L
6642 { Bad_Opcode },
6643 { Bad_Opcode },
592a252b 6644 { VEX_LEN_TABLE (VEX_LEN_0F3A62_P_2) },
c0f3af97
L
6645 },
6646
592a252b 6647 /* PREFIX_VEX_0F3A63 */
c0f3af97 6648 {
592d1631
L
6649 { Bad_Opcode },
6650 { Bad_Opcode },
592a252b 6651 { VEX_LEN_TABLE (VEX_LEN_0F3A63_P_2) },
c0f3af97 6652 },
a5ff0eb2 6653
592a252b 6654 /* PREFIX_VEX_0F3A68 */
922d8de8 6655 {
592d1631
L
6656 { Bad_Opcode },
6657 { Bad_Opcode },
bf890a93 6658 { "vfmaddps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
922d8de8
DR
6659 },
6660
592a252b 6661 /* PREFIX_VEX_0F3A69 */
922d8de8 6662 {
592d1631
L
6663 { Bad_Opcode },
6664 { Bad_Opcode },
bf890a93 6665 { "vfmaddpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
922d8de8
DR
6666 },
6667
592a252b 6668 /* PREFIX_VEX_0F3A6A */
922d8de8 6669 {
592d1631
L
6670 { Bad_Opcode },
6671 { Bad_Opcode },
592a252b 6672 { VEX_LEN_TABLE (VEX_LEN_0F3A6A_P_2) },
922d8de8
DR
6673 },
6674
592a252b 6675 /* PREFIX_VEX_0F3A6B */
922d8de8 6676 {
592d1631
L
6677 { Bad_Opcode },
6678 { Bad_Opcode },
592a252b 6679 { VEX_LEN_TABLE (VEX_LEN_0F3A6B_P_2) },
922d8de8
DR
6680 },
6681
592a252b 6682 /* PREFIX_VEX_0F3A6C */
922d8de8 6683 {
592d1631
L
6684 { Bad_Opcode },
6685 { Bad_Opcode },
bf890a93 6686 { "vfmsubps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
922d8de8
DR
6687 },
6688
592a252b 6689 /* PREFIX_VEX_0F3A6D */
922d8de8 6690 {
592d1631
L
6691 { Bad_Opcode },
6692 { Bad_Opcode },
bf890a93 6693 { "vfmsubpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
922d8de8
DR
6694 },
6695
592a252b 6696 /* PREFIX_VEX_0F3A6E */
922d8de8 6697 {
592d1631
L
6698 { Bad_Opcode },
6699 { Bad_Opcode },
592a252b 6700 { VEX_LEN_TABLE (VEX_LEN_0F3A6E_P_2) },
922d8de8
DR
6701 },
6702
592a252b 6703 /* PREFIX_VEX_0F3A6F */
922d8de8 6704 {
592d1631
L
6705 { Bad_Opcode },
6706 { Bad_Opcode },
592a252b 6707 { VEX_LEN_TABLE (VEX_LEN_0F3A6F_P_2) },
922d8de8
DR
6708 },
6709
592a252b 6710 /* PREFIX_VEX_0F3A78 */
922d8de8 6711 {
592d1631
L
6712 { Bad_Opcode },
6713 { Bad_Opcode },
bf890a93 6714 { "vfnmaddps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
922d8de8
DR
6715 },
6716
592a252b 6717 /* PREFIX_VEX_0F3A79 */
922d8de8 6718 {
592d1631
L
6719 { Bad_Opcode },
6720 { Bad_Opcode },
bf890a93 6721 { "vfnmaddpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
922d8de8
DR
6722 },
6723
592a252b 6724 /* PREFIX_VEX_0F3A7A */
922d8de8 6725 {
592d1631
L
6726 { Bad_Opcode },
6727 { Bad_Opcode },
592a252b 6728 { VEX_LEN_TABLE (VEX_LEN_0F3A7A_P_2) },
922d8de8
DR
6729 },
6730
592a252b 6731 /* PREFIX_VEX_0F3A7B */
922d8de8 6732 {
592d1631
L
6733 { Bad_Opcode },
6734 { Bad_Opcode },
592a252b 6735 { VEX_LEN_TABLE (VEX_LEN_0F3A7B_P_2) },
922d8de8
DR
6736 },
6737
592a252b 6738 /* PREFIX_VEX_0F3A7C */
922d8de8 6739 {
592d1631
L
6740 { Bad_Opcode },
6741 { Bad_Opcode },
bf890a93 6742 { "vfnmsubps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
592d1631 6743 { Bad_Opcode },
922d8de8
DR
6744 },
6745
592a252b 6746 /* PREFIX_VEX_0F3A7D */
922d8de8 6747 {
592d1631
L
6748 { Bad_Opcode },
6749 { Bad_Opcode },
bf890a93 6750 { "vfnmsubpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
922d8de8
DR
6751 },
6752
592a252b 6753 /* PREFIX_VEX_0F3A7E */
922d8de8 6754 {
592d1631
L
6755 { Bad_Opcode },
6756 { Bad_Opcode },
592a252b 6757 { VEX_LEN_TABLE (VEX_LEN_0F3A7E_P_2) },
922d8de8
DR
6758 },
6759
592a252b 6760 /* PREFIX_VEX_0F3A7F */
922d8de8 6761 {
592d1631
L
6762 { Bad_Opcode },
6763 { Bad_Opcode },
592a252b 6764 { VEX_LEN_TABLE (VEX_LEN_0F3A7F_P_2) },
922d8de8
DR
6765 },
6766
592a252b 6767 /* PREFIX_VEX_0F3ADF */
a5ff0eb2 6768 {
592d1631
L
6769 { Bad_Opcode },
6770 { Bad_Opcode },
592a252b 6771 { VEX_LEN_TABLE (VEX_LEN_0F3ADF_P_2) },
a5ff0eb2 6772 },
6c30d220
L
6773
6774 /* PREFIX_VEX_0F3AF0 */
6775 {
6776 { Bad_Opcode },
6777 { Bad_Opcode },
6778 { Bad_Opcode },
6779 { VEX_LEN_TABLE (VEX_LEN_0F3AF0_P_3) },
6780 },
43234a1e
L
6781
6782#define NEED_PREFIX_TABLE
6783#include "i386-dis-evex.h"
6784#undef NEED_PREFIX_TABLE
c0f3af97
L
6785};
6786
6787static const struct dis386 x86_64_table[][2] = {
6788 /* X86_64_06 */
6789 {
bf890a93 6790 { "pushP", { es }, 0 },
c0f3af97
L
6791 },
6792
6793 /* X86_64_07 */
6794 {
bf890a93 6795 { "popP", { es }, 0 },
c0f3af97
L
6796 },
6797
6798 /* X86_64_0D */
6799 {
bf890a93 6800 { "pushP", { cs }, 0 },
c0f3af97
L
6801 },
6802
6803 /* X86_64_16 */
6804 {
bf890a93 6805 { "pushP", { ss }, 0 },
c0f3af97
L
6806 },
6807
6808 /* X86_64_17 */
6809 {
bf890a93 6810 { "popP", { ss }, 0 },
c0f3af97
L
6811 },
6812
6813 /* X86_64_1E */
6814 {
bf890a93 6815 { "pushP", { ds }, 0 },
c0f3af97
L
6816 },
6817
6818 /* X86_64_1F */
6819 {
bf890a93 6820 { "popP", { ds }, 0 },
c0f3af97
L
6821 },
6822
6823 /* X86_64_27 */
6824 {
bf890a93 6825 { "daa", { XX }, 0 },
c0f3af97
L
6826 },
6827
6828 /* X86_64_2F */
6829 {
bf890a93 6830 { "das", { XX }, 0 },
c0f3af97
L
6831 },
6832
6833 /* X86_64_37 */
6834 {
bf890a93 6835 { "aaa", { XX }, 0 },
c0f3af97
L
6836 },
6837
6838 /* X86_64_3F */
6839 {
bf890a93 6840 { "aas", { XX }, 0 },
c0f3af97
L
6841 },
6842
6843 /* X86_64_60 */
6844 {
bf890a93 6845 { "pushaP", { XX }, 0 },
c0f3af97
L
6846 },
6847
6848 /* X86_64_61 */
6849 {
bf890a93 6850 { "popaP", { XX }, 0 },
c0f3af97
L
6851 },
6852
6853 /* X86_64_62 */
6854 {
6855 { MOD_TABLE (MOD_62_32BIT) },
43234a1e 6856 { EVEX_TABLE (EVEX_0F) },
c0f3af97
L
6857 },
6858
6859 /* X86_64_63 */
6860 {
bf890a93
IT
6861 { "arpl", { Ew, Gw }, 0 },
6862 { "movs{lq|xd}", { Gv, Ed }, 0 },
c0f3af97
L
6863 },
6864
6865 /* X86_64_6D */
6866 {
bf890a93
IT
6867 { "ins{R|}", { Yzr, indirDX }, 0 },
6868 { "ins{G|}", { Yzr, indirDX }, 0 },
c0f3af97
L
6869 },
6870
6871 /* X86_64_6F */
6872 {
bf890a93
IT
6873 { "outs{R|}", { indirDXr, Xz }, 0 },
6874 { "outs{G|}", { indirDXr, Xz }, 0 },
c0f3af97
L
6875 },
6876
6877 /* X86_64_9A */
6878 {
bf890a93 6879 { "Jcall{T|}", { Ap }, 0 },
c0f3af97
L
6880 },
6881
6882 /* X86_64_C4 */
6883 {
6884 { MOD_TABLE (MOD_C4_32BIT) },
6885 { VEX_C4_TABLE (VEX_0F) },
6886 },
6887
6888 /* X86_64_C5 */
6889 {
6890 { MOD_TABLE (MOD_C5_32BIT) },
6891 { VEX_C5_TABLE (VEX_0F) },
6892 },
6893
6894 /* X86_64_CE */
6895 {
bf890a93 6896 { "into", { XX }, 0 },
c0f3af97
L
6897 },
6898
6899 /* X86_64_D4 */
6900 {
bf890a93 6901 { "aam", { Ib }, 0 },
c0f3af97
L
6902 },
6903
6904 /* X86_64_D5 */
6905 {
bf890a93 6906 { "aad", { Ib }, 0 },
c0f3af97
L
6907 },
6908
a72d2af2
L
6909 /* X86_64_E8 */
6910 {
6911 { "callP", { Jv, BND }, 0 },
5db04b09 6912 { "call@", { Jv, BND }, 0 }
a72d2af2
L
6913 },
6914
6915 /* X86_64_E9 */
6916 {
6917 { "jmpP", { Jv, BND }, 0 },
5db04b09 6918 { "jmp@", { Jv, BND }, 0 }
a72d2af2
L
6919 },
6920
c0f3af97
L
6921 /* X86_64_EA */
6922 {
bf890a93 6923 { "Jjmp{T|}", { Ap }, 0 },
c0f3af97
L
6924 },
6925
6926 /* X86_64_0F01_REG_0 */
6927 {
bf890a93
IT
6928 { "sgdt{Q|IQ}", { M }, 0 },
6929 { "sgdt", { M }, 0 },
c0f3af97
L
6930 },
6931
6932 /* X86_64_0F01_REG_1 */
6933 {
bf890a93
IT
6934 { "sidt{Q|IQ}", { M }, 0 },
6935 { "sidt", { M }, 0 },
c0f3af97
L
6936 },
6937
6938 /* X86_64_0F01_REG_2 */
6939 {
bf890a93
IT
6940 { "lgdt{Q|Q}", { M }, 0 },
6941 { "lgdt", { M }, 0 },
c0f3af97
L
6942 },
6943
6944 /* X86_64_0F01_REG_3 */
6945 {
bf890a93
IT
6946 { "lidt{Q|Q}", { M }, 0 },
6947 { "lidt", { M }, 0 },
c0f3af97
L
6948 },
6949};
6950
6951static const struct dis386 three_byte_table[][256] = {
c1e679ec
DR
6952
6953 /* THREE_BYTE_0F38 */
c0f3af97
L
6954 {
6955 /* 00 */
507bd325
L
6956 { "pshufb", { MX, EM }, PREFIX_OPCODE },
6957 { "phaddw", { MX, EM }, PREFIX_OPCODE },
6958 { "phaddd", { MX, EM }, PREFIX_OPCODE },
6959 { "phaddsw", { MX, EM }, PREFIX_OPCODE },
6960 { "pmaddubsw", { MX, EM }, PREFIX_OPCODE },
6961 { "phsubw", { MX, EM }, PREFIX_OPCODE },
6962 { "phsubd", { MX, EM }, PREFIX_OPCODE },
6963 { "phsubsw", { MX, EM }, PREFIX_OPCODE },
c0f3af97 6964 /* 08 */
507bd325
L
6965 { "psignb", { MX, EM }, PREFIX_OPCODE },
6966 { "psignw", { MX, EM }, PREFIX_OPCODE },
6967 { "psignd", { MX, EM }, PREFIX_OPCODE },
6968 { "pmulhrsw", { MX, EM }, PREFIX_OPCODE },
592d1631
L
6969 { Bad_Opcode },
6970 { Bad_Opcode },
6971 { Bad_Opcode },
6972 { Bad_Opcode },
f88c9eb0
SP
6973 /* 10 */
6974 { PREFIX_TABLE (PREFIX_0F3810) },
592d1631
L
6975 { Bad_Opcode },
6976 { Bad_Opcode },
6977 { Bad_Opcode },
f88c9eb0
SP
6978 { PREFIX_TABLE (PREFIX_0F3814) },
6979 { PREFIX_TABLE (PREFIX_0F3815) },
592d1631 6980 { Bad_Opcode },
f88c9eb0
SP
6981 { PREFIX_TABLE (PREFIX_0F3817) },
6982 /* 18 */
592d1631
L
6983 { Bad_Opcode },
6984 { Bad_Opcode },
6985 { Bad_Opcode },
6986 { Bad_Opcode },
507bd325
L
6987 { "pabsb", { MX, EM }, PREFIX_OPCODE },
6988 { "pabsw", { MX, EM }, PREFIX_OPCODE },
6989 { "pabsd", { MX, EM }, PREFIX_OPCODE },
592d1631 6990 { Bad_Opcode },
f88c9eb0
SP
6991 /* 20 */
6992 { PREFIX_TABLE (PREFIX_0F3820) },
6993 { PREFIX_TABLE (PREFIX_0F3821) },
6994 { PREFIX_TABLE (PREFIX_0F3822) },
6995 { PREFIX_TABLE (PREFIX_0F3823) },
6996 { PREFIX_TABLE (PREFIX_0F3824) },
6997 { PREFIX_TABLE (PREFIX_0F3825) },
592d1631
L
6998 { Bad_Opcode },
6999 { Bad_Opcode },
f88c9eb0
SP
7000 /* 28 */
7001 { PREFIX_TABLE (PREFIX_0F3828) },
7002 { PREFIX_TABLE (PREFIX_0F3829) },
7003 { PREFIX_TABLE (PREFIX_0F382A) },
7004 { PREFIX_TABLE (PREFIX_0F382B) },
592d1631
L
7005 { Bad_Opcode },
7006 { Bad_Opcode },
7007 { Bad_Opcode },
7008 { Bad_Opcode },
f88c9eb0
SP
7009 /* 30 */
7010 { PREFIX_TABLE (PREFIX_0F3830) },
7011 { PREFIX_TABLE (PREFIX_0F3831) },
7012 { PREFIX_TABLE (PREFIX_0F3832) },
7013 { PREFIX_TABLE (PREFIX_0F3833) },
7014 { PREFIX_TABLE (PREFIX_0F3834) },
7015 { PREFIX_TABLE (PREFIX_0F3835) },
592d1631 7016 { Bad_Opcode },
f88c9eb0
SP
7017 { PREFIX_TABLE (PREFIX_0F3837) },
7018 /* 38 */
7019 { PREFIX_TABLE (PREFIX_0F3838) },
7020 { PREFIX_TABLE (PREFIX_0F3839) },
7021 { PREFIX_TABLE (PREFIX_0F383A) },
7022 { PREFIX_TABLE (PREFIX_0F383B) },
7023 { PREFIX_TABLE (PREFIX_0F383C) },
7024 { PREFIX_TABLE (PREFIX_0F383D) },
7025 { PREFIX_TABLE (PREFIX_0F383E) },
7026 { PREFIX_TABLE (PREFIX_0F383F) },
7027 /* 40 */
7028 { PREFIX_TABLE (PREFIX_0F3840) },
7029 { PREFIX_TABLE (PREFIX_0F3841) },
592d1631
L
7030 { Bad_Opcode },
7031 { Bad_Opcode },
7032 { Bad_Opcode },
7033 { Bad_Opcode },
7034 { Bad_Opcode },
7035 { Bad_Opcode },
f88c9eb0 7036 /* 48 */
592d1631
L
7037 { Bad_Opcode },
7038 { Bad_Opcode },
7039 { Bad_Opcode },
7040 { Bad_Opcode },
7041 { Bad_Opcode },
7042 { Bad_Opcode },
7043 { Bad_Opcode },
7044 { Bad_Opcode },
f88c9eb0 7045 /* 50 */
592d1631
L
7046 { Bad_Opcode },
7047 { Bad_Opcode },
7048 { Bad_Opcode },
7049 { Bad_Opcode },
7050 { Bad_Opcode },
7051 { Bad_Opcode },
7052 { Bad_Opcode },
7053 { Bad_Opcode },
f88c9eb0 7054 /* 58 */
592d1631
L
7055 { Bad_Opcode },
7056 { Bad_Opcode },
7057 { Bad_Opcode },
7058 { Bad_Opcode },
7059 { Bad_Opcode },
7060 { Bad_Opcode },
7061 { Bad_Opcode },
7062 { Bad_Opcode },
f88c9eb0 7063 /* 60 */
592d1631
L
7064 { Bad_Opcode },
7065 { Bad_Opcode },
7066 { Bad_Opcode },
7067 { Bad_Opcode },
7068 { Bad_Opcode },
7069 { Bad_Opcode },
7070 { Bad_Opcode },
7071 { Bad_Opcode },
f88c9eb0 7072 /* 68 */
592d1631
L
7073 { Bad_Opcode },
7074 { Bad_Opcode },
7075 { Bad_Opcode },
7076 { Bad_Opcode },
7077 { Bad_Opcode },
7078 { Bad_Opcode },
7079 { Bad_Opcode },
7080 { Bad_Opcode },
f88c9eb0 7081 /* 70 */
592d1631
L
7082 { Bad_Opcode },
7083 { Bad_Opcode },
7084 { Bad_Opcode },
7085 { Bad_Opcode },
7086 { Bad_Opcode },
7087 { Bad_Opcode },
7088 { Bad_Opcode },
7089 { Bad_Opcode },
f88c9eb0 7090 /* 78 */
592d1631
L
7091 { Bad_Opcode },
7092 { Bad_Opcode },
7093 { Bad_Opcode },
7094 { Bad_Opcode },
7095 { Bad_Opcode },
7096 { Bad_Opcode },
7097 { Bad_Opcode },
7098 { Bad_Opcode },
f88c9eb0
SP
7099 /* 80 */
7100 { PREFIX_TABLE (PREFIX_0F3880) },
7101 { PREFIX_TABLE (PREFIX_0F3881) },
6c30d220 7102 { PREFIX_TABLE (PREFIX_0F3882) },
592d1631
L
7103 { Bad_Opcode },
7104 { Bad_Opcode },
7105 { Bad_Opcode },
7106 { Bad_Opcode },
7107 { Bad_Opcode },
f88c9eb0 7108 /* 88 */
592d1631
L
7109 { Bad_Opcode },
7110 { Bad_Opcode },
7111 { Bad_Opcode },
7112 { Bad_Opcode },
7113 { Bad_Opcode },
7114 { Bad_Opcode },
7115 { Bad_Opcode },
7116 { Bad_Opcode },
f88c9eb0 7117 /* 90 */
592d1631
L
7118 { Bad_Opcode },
7119 { Bad_Opcode },
7120 { Bad_Opcode },
7121 { Bad_Opcode },
7122 { Bad_Opcode },
7123 { Bad_Opcode },
7124 { Bad_Opcode },
7125 { Bad_Opcode },
f88c9eb0 7126 /* 98 */
592d1631
L
7127 { Bad_Opcode },
7128 { Bad_Opcode },
7129 { Bad_Opcode },
7130 { Bad_Opcode },
7131 { Bad_Opcode },
7132 { Bad_Opcode },
7133 { Bad_Opcode },
7134 { Bad_Opcode },
f88c9eb0 7135 /* a0 */
592d1631
L
7136 { Bad_Opcode },
7137 { Bad_Opcode },
7138 { Bad_Opcode },
7139 { Bad_Opcode },
7140 { Bad_Opcode },
7141 { Bad_Opcode },
7142 { Bad_Opcode },
7143 { Bad_Opcode },
f88c9eb0 7144 /* a8 */
592d1631
L
7145 { Bad_Opcode },
7146 { Bad_Opcode },
7147 { Bad_Opcode },
7148 { Bad_Opcode },
7149 { Bad_Opcode },
7150 { Bad_Opcode },
7151 { Bad_Opcode },
7152 { Bad_Opcode },
f88c9eb0 7153 /* b0 */
592d1631
L
7154 { Bad_Opcode },
7155 { Bad_Opcode },
7156 { Bad_Opcode },
7157 { Bad_Opcode },
7158 { Bad_Opcode },
7159 { Bad_Opcode },
7160 { Bad_Opcode },
7161 { Bad_Opcode },
f88c9eb0 7162 /* b8 */
592d1631
L
7163 { Bad_Opcode },
7164 { Bad_Opcode },
7165 { Bad_Opcode },
7166 { Bad_Opcode },
7167 { Bad_Opcode },
7168 { Bad_Opcode },
7169 { Bad_Opcode },
7170 { Bad_Opcode },
f88c9eb0 7171 /* c0 */
592d1631
L
7172 { Bad_Opcode },
7173 { Bad_Opcode },
7174 { Bad_Opcode },
7175 { Bad_Opcode },
7176 { Bad_Opcode },
7177 { Bad_Opcode },
7178 { Bad_Opcode },
7179 { Bad_Opcode },
f88c9eb0 7180 /* c8 */
a0046408
L
7181 { PREFIX_TABLE (PREFIX_0F38C8) },
7182 { PREFIX_TABLE (PREFIX_0F38C9) },
7183 { PREFIX_TABLE (PREFIX_0F38CA) },
7184 { PREFIX_TABLE (PREFIX_0F38CB) },
7185 { PREFIX_TABLE (PREFIX_0F38CC) },
7186 { PREFIX_TABLE (PREFIX_0F38CD) },
592d1631
L
7187 { Bad_Opcode },
7188 { Bad_Opcode },
f88c9eb0 7189 /* d0 */
592d1631
L
7190 { Bad_Opcode },
7191 { Bad_Opcode },
7192 { Bad_Opcode },
7193 { Bad_Opcode },
7194 { Bad_Opcode },
7195 { Bad_Opcode },
7196 { Bad_Opcode },
7197 { Bad_Opcode },
f88c9eb0 7198 /* d8 */
592d1631
L
7199 { Bad_Opcode },
7200 { Bad_Opcode },
7201 { Bad_Opcode },
f88c9eb0
SP
7202 { PREFIX_TABLE (PREFIX_0F38DB) },
7203 { PREFIX_TABLE (PREFIX_0F38DC) },
7204 { PREFIX_TABLE (PREFIX_0F38DD) },
7205 { PREFIX_TABLE (PREFIX_0F38DE) },
7206 { PREFIX_TABLE (PREFIX_0F38DF) },
7207 /* e0 */
592d1631
L
7208 { Bad_Opcode },
7209 { Bad_Opcode },
7210 { Bad_Opcode },
7211 { Bad_Opcode },
7212 { Bad_Opcode },
7213 { Bad_Opcode },
7214 { Bad_Opcode },
7215 { Bad_Opcode },
f88c9eb0 7216 /* e8 */
592d1631
L
7217 { Bad_Opcode },
7218 { Bad_Opcode },
7219 { Bad_Opcode },
7220 { Bad_Opcode },
7221 { Bad_Opcode },
7222 { Bad_Opcode },
7223 { Bad_Opcode },
7224 { Bad_Opcode },
f88c9eb0
SP
7225 /* f0 */
7226 { PREFIX_TABLE (PREFIX_0F38F0) },
7227 { PREFIX_TABLE (PREFIX_0F38F1) },
592d1631
L
7228 { Bad_Opcode },
7229 { Bad_Opcode },
7230 { Bad_Opcode },
7231 { Bad_Opcode },
e2e1fcde 7232 { PREFIX_TABLE (PREFIX_0F38F6) },
592d1631 7233 { Bad_Opcode },
f88c9eb0 7234 /* f8 */
592d1631
L
7235 { Bad_Opcode },
7236 { Bad_Opcode },
7237 { Bad_Opcode },
7238 { Bad_Opcode },
7239 { Bad_Opcode },
7240 { Bad_Opcode },
7241 { Bad_Opcode },
7242 { Bad_Opcode },
f88c9eb0
SP
7243 },
7244 /* THREE_BYTE_0F3A */
7245 {
7246 /* 00 */
592d1631
L
7247 { Bad_Opcode },
7248 { Bad_Opcode },
7249 { Bad_Opcode },
7250 { Bad_Opcode },
7251 { Bad_Opcode },
7252 { Bad_Opcode },
7253 { Bad_Opcode },
7254 { Bad_Opcode },
f88c9eb0
SP
7255 /* 08 */
7256 { PREFIX_TABLE (PREFIX_0F3A08) },
7257 { PREFIX_TABLE (PREFIX_0F3A09) },
7258 { PREFIX_TABLE (PREFIX_0F3A0A) },
7259 { PREFIX_TABLE (PREFIX_0F3A0B) },
7260 { PREFIX_TABLE (PREFIX_0F3A0C) },
7261 { PREFIX_TABLE (PREFIX_0F3A0D) },
7262 { PREFIX_TABLE (PREFIX_0F3A0E) },
507bd325 7263 { "palignr", { MX, EM, Ib }, PREFIX_OPCODE },
f88c9eb0 7264 /* 10 */
592d1631
L
7265 { Bad_Opcode },
7266 { Bad_Opcode },
7267 { Bad_Opcode },
7268 { Bad_Opcode },
f88c9eb0
SP
7269 { PREFIX_TABLE (PREFIX_0F3A14) },
7270 { PREFIX_TABLE (PREFIX_0F3A15) },
7271 { PREFIX_TABLE (PREFIX_0F3A16) },
7272 { PREFIX_TABLE (PREFIX_0F3A17) },
7273 /* 18 */
592d1631
L
7274 { Bad_Opcode },
7275 { Bad_Opcode },
7276 { Bad_Opcode },
7277 { Bad_Opcode },
7278 { Bad_Opcode },
7279 { Bad_Opcode },
7280 { Bad_Opcode },
7281 { Bad_Opcode },
f88c9eb0
SP
7282 /* 20 */
7283 { PREFIX_TABLE (PREFIX_0F3A20) },
7284 { PREFIX_TABLE (PREFIX_0F3A21) },
7285 { PREFIX_TABLE (PREFIX_0F3A22) },
592d1631
L
7286 { Bad_Opcode },
7287 { Bad_Opcode },
7288 { Bad_Opcode },
7289 { Bad_Opcode },
7290 { Bad_Opcode },
f88c9eb0 7291 /* 28 */
592d1631
L
7292 { Bad_Opcode },
7293 { Bad_Opcode },
7294 { Bad_Opcode },
7295 { Bad_Opcode },
7296 { Bad_Opcode },
7297 { Bad_Opcode },
7298 { Bad_Opcode },
7299 { Bad_Opcode },
f88c9eb0 7300 /* 30 */
592d1631
L
7301 { Bad_Opcode },
7302 { Bad_Opcode },
7303 { Bad_Opcode },
7304 { Bad_Opcode },
7305 { Bad_Opcode },
7306 { Bad_Opcode },
7307 { Bad_Opcode },
7308 { Bad_Opcode },
f88c9eb0 7309 /* 38 */
592d1631
L
7310 { Bad_Opcode },
7311 { Bad_Opcode },
7312 { Bad_Opcode },
7313 { Bad_Opcode },
7314 { Bad_Opcode },
7315 { Bad_Opcode },
7316 { Bad_Opcode },
7317 { Bad_Opcode },
f88c9eb0
SP
7318 /* 40 */
7319 { PREFIX_TABLE (PREFIX_0F3A40) },
7320 { PREFIX_TABLE (PREFIX_0F3A41) },
7321 { PREFIX_TABLE (PREFIX_0F3A42) },
592d1631 7322 { Bad_Opcode },
f88c9eb0 7323 { PREFIX_TABLE (PREFIX_0F3A44) },
592d1631
L
7324 { Bad_Opcode },
7325 { Bad_Opcode },
7326 { Bad_Opcode },
f88c9eb0 7327 /* 48 */
592d1631
L
7328 { Bad_Opcode },
7329 { Bad_Opcode },
7330 { Bad_Opcode },
7331 { Bad_Opcode },
7332 { Bad_Opcode },
7333 { Bad_Opcode },
7334 { Bad_Opcode },
7335 { Bad_Opcode },
f88c9eb0 7336 /* 50 */
592d1631
L
7337 { Bad_Opcode },
7338 { Bad_Opcode },
7339 { Bad_Opcode },
7340 { Bad_Opcode },
7341 { Bad_Opcode },
7342 { Bad_Opcode },
7343 { Bad_Opcode },
7344 { Bad_Opcode },
f88c9eb0 7345 /* 58 */
592d1631
L
7346 { Bad_Opcode },
7347 { Bad_Opcode },
7348 { Bad_Opcode },
7349 { Bad_Opcode },
7350 { Bad_Opcode },
7351 { Bad_Opcode },
7352 { Bad_Opcode },
7353 { Bad_Opcode },
f88c9eb0
SP
7354 /* 60 */
7355 { PREFIX_TABLE (PREFIX_0F3A60) },
7356 { PREFIX_TABLE (PREFIX_0F3A61) },
7357 { PREFIX_TABLE (PREFIX_0F3A62) },
7358 { PREFIX_TABLE (PREFIX_0F3A63) },
592d1631
L
7359 { Bad_Opcode },
7360 { Bad_Opcode },
7361 { Bad_Opcode },
7362 { Bad_Opcode },
f88c9eb0 7363 /* 68 */
592d1631
L
7364 { Bad_Opcode },
7365 { Bad_Opcode },
7366 { Bad_Opcode },
7367 { Bad_Opcode },
7368 { Bad_Opcode },
7369 { Bad_Opcode },
7370 { Bad_Opcode },
7371 { Bad_Opcode },
f88c9eb0 7372 /* 70 */
592d1631
L
7373 { Bad_Opcode },
7374 { Bad_Opcode },
7375 { Bad_Opcode },
7376 { Bad_Opcode },
7377 { Bad_Opcode },
7378 { Bad_Opcode },
7379 { Bad_Opcode },
7380 { Bad_Opcode },
f88c9eb0 7381 /* 78 */
592d1631
L
7382 { Bad_Opcode },
7383 { Bad_Opcode },
7384 { Bad_Opcode },
7385 { Bad_Opcode },
7386 { Bad_Opcode },
7387 { Bad_Opcode },
7388 { Bad_Opcode },
7389 { Bad_Opcode },
f88c9eb0 7390 /* 80 */
592d1631
L
7391 { Bad_Opcode },
7392 { Bad_Opcode },
7393 { Bad_Opcode },
7394 { Bad_Opcode },
7395 { Bad_Opcode },
7396 { Bad_Opcode },
7397 { Bad_Opcode },
7398 { Bad_Opcode },
f88c9eb0 7399 /* 88 */
592d1631
L
7400 { Bad_Opcode },
7401 { Bad_Opcode },
7402 { Bad_Opcode },
7403 { Bad_Opcode },
7404 { Bad_Opcode },
7405 { Bad_Opcode },
7406 { Bad_Opcode },
7407 { Bad_Opcode },
f88c9eb0 7408 /* 90 */
592d1631
L
7409 { Bad_Opcode },
7410 { Bad_Opcode },
7411 { Bad_Opcode },
7412 { Bad_Opcode },
7413 { Bad_Opcode },
7414 { Bad_Opcode },
7415 { Bad_Opcode },
7416 { Bad_Opcode },
f88c9eb0 7417 /* 98 */
592d1631
L
7418 { Bad_Opcode },
7419 { Bad_Opcode },
7420 { Bad_Opcode },
7421 { Bad_Opcode },
7422 { Bad_Opcode },
7423 { Bad_Opcode },
7424 { Bad_Opcode },
7425 { Bad_Opcode },
f88c9eb0 7426 /* a0 */
592d1631
L
7427 { Bad_Opcode },
7428 { Bad_Opcode },
7429 { Bad_Opcode },
7430 { Bad_Opcode },
7431 { Bad_Opcode },
7432 { Bad_Opcode },
7433 { Bad_Opcode },
7434 { Bad_Opcode },
f88c9eb0 7435 /* a8 */
592d1631
L
7436 { Bad_Opcode },
7437 { Bad_Opcode },
7438 { Bad_Opcode },
7439 { Bad_Opcode },
7440 { Bad_Opcode },
7441 { Bad_Opcode },
7442 { Bad_Opcode },
7443 { Bad_Opcode },
f88c9eb0 7444 /* b0 */
592d1631
L
7445 { Bad_Opcode },
7446 { Bad_Opcode },
7447 { Bad_Opcode },
7448 { Bad_Opcode },
7449 { Bad_Opcode },
7450 { Bad_Opcode },
7451 { Bad_Opcode },
7452 { Bad_Opcode },
f88c9eb0 7453 /* b8 */
592d1631
L
7454 { Bad_Opcode },
7455 { Bad_Opcode },
7456 { Bad_Opcode },
7457 { Bad_Opcode },
7458 { Bad_Opcode },
7459 { Bad_Opcode },
7460 { Bad_Opcode },
7461 { Bad_Opcode },
f88c9eb0 7462 /* c0 */
592d1631
L
7463 { Bad_Opcode },
7464 { Bad_Opcode },
7465 { Bad_Opcode },
7466 { Bad_Opcode },
7467 { Bad_Opcode },
7468 { Bad_Opcode },
7469 { Bad_Opcode },
7470 { Bad_Opcode },
f88c9eb0 7471 /* c8 */
592d1631
L
7472 { Bad_Opcode },
7473 { Bad_Opcode },
7474 { Bad_Opcode },
7475 { Bad_Opcode },
a0046408 7476 { PREFIX_TABLE (PREFIX_0F3ACC) },
592d1631
L
7477 { Bad_Opcode },
7478 { Bad_Opcode },
7479 { Bad_Opcode },
f88c9eb0 7480 /* d0 */
592d1631
L
7481 { Bad_Opcode },
7482 { Bad_Opcode },
7483 { Bad_Opcode },
7484 { Bad_Opcode },
7485 { Bad_Opcode },
7486 { Bad_Opcode },
7487 { Bad_Opcode },
7488 { Bad_Opcode },
f88c9eb0 7489 /* d8 */
592d1631
L
7490 { Bad_Opcode },
7491 { Bad_Opcode },
7492 { Bad_Opcode },
7493 { Bad_Opcode },
7494 { Bad_Opcode },
7495 { Bad_Opcode },
7496 { Bad_Opcode },
f88c9eb0
SP
7497 { PREFIX_TABLE (PREFIX_0F3ADF) },
7498 /* e0 */
592d1631
L
7499 { Bad_Opcode },
7500 { Bad_Opcode },
7501 { Bad_Opcode },
7502 { Bad_Opcode },
7503 { Bad_Opcode },
7504 { Bad_Opcode },
7505 { Bad_Opcode },
7506 { Bad_Opcode },
f88c9eb0 7507 /* e8 */
592d1631
L
7508 { Bad_Opcode },
7509 { Bad_Opcode },
7510 { Bad_Opcode },
7511 { Bad_Opcode },
7512 { Bad_Opcode },
7513 { Bad_Opcode },
7514 { Bad_Opcode },
7515 { Bad_Opcode },
f88c9eb0 7516 /* f0 */
592d1631
L
7517 { Bad_Opcode },
7518 { Bad_Opcode },
7519 { Bad_Opcode },
7520 { Bad_Opcode },
7521 { Bad_Opcode },
7522 { Bad_Opcode },
7523 { Bad_Opcode },
7524 { Bad_Opcode },
f88c9eb0 7525 /* f8 */
592d1631
L
7526 { Bad_Opcode },
7527 { Bad_Opcode },
7528 { Bad_Opcode },
7529 { Bad_Opcode },
7530 { Bad_Opcode },
7531 { Bad_Opcode },
7532 { Bad_Opcode },
7533 { Bad_Opcode },
f88c9eb0
SP
7534 },
7535
7536 /* THREE_BYTE_0F7A */
7537 {
7538 /* 00 */
592d1631
L
7539 { Bad_Opcode },
7540 { Bad_Opcode },
7541 { Bad_Opcode },
7542 { Bad_Opcode },
7543 { Bad_Opcode },
7544 { Bad_Opcode },
7545 { Bad_Opcode },
7546 { Bad_Opcode },
f88c9eb0 7547 /* 08 */
592d1631
L
7548 { Bad_Opcode },
7549 { Bad_Opcode },
7550 { Bad_Opcode },
7551 { Bad_Opcode },
7552 { Bad_Opcode },
7553 { Bad_Opcode },
7554 { Bad_Opcode },
7555 { Bad_Opcode },
f88c9eb0 7556 /* 10 */
592d1631
L
7557 { Bad_Opcode },
7558 { Bad_Opcode },
7559 { Bad_Opcode },
7560 { Bad_Opcode },
7561 { Bad_Opcode },
7562 { Bad_Opcode },
7563 { Bad_Opcode },
7564 { Bad_Opcode },
f88c9eb0 7565 /* 18 */
592d1631
L
7566 { Bad_Opcode },
7567 { Bad_Opcode },
7568 { Bad_Opcode },
7569 { Bad_Opcode },
7570 { Bad_Opcode },
7571 { Bad_Opcode },
7572 { Bad_Opcode },
7573 { Bad_Opcode },
f88c9eb0 7574 /* 20 */
507bd325 7575 { "ptest", { XX }, PREFIX_OPCODE },
592d1631
L
7576 { Bad_Opcode },
7577 { Bad_Opcode },
7578 { Bad_Opcode },
7579 { Bad_Opcode },
7580 { Bad_Opcode },
7581 { Bad_Opcode },
7582 { Bad_Opcode },
f88c9eb0 7583 /* 28 */
592d1631
L
7584 { Bad_Opcode },
7585 { Bad_Opcode },
7586 { Bad_Opcode },
7587 { Bad_Opcode },
7588 { Bad_Opcode },
7589 { Bad_Opcode },
7590 { Bad_Opcode },
7591 { Bad_Opcode },
f88c9eb0 7592 /* 30 */
592d1631
L
7593 { Bad_Opcode },
7594 { Bad_Opcode },
7595 { Bad_Opcode },
7596 { Bad_Opcode },
7597 { Bad_Opcode },
7598 { Bad_Opcode },
7599 { Bad_Opcode },
7600 { Bad_Opcode },
f88c9eb0 7601 /* 38 */
592d1631
L
7602 { Bad_Opcode },
7603 { Bad_Opcode },
7604 { Bad_Opcode },
7605 { Bad_Opcode },
7606 { Bad_Opcode },
7607 { Bad_Opcode },
7608 { Bad_Opcode },
7609 { Bad_Opcode },
f88c9eb0 7610 /* 40 */
592d1631 7611 { Bad_Opcode },
507bd325
L
7612 { "phaddbw", { XM, EXq }, PREFIX_OPCODE },
7613 { "phaddbd", { XM, EXq }, PREFIX_OPCODE },
7614 { "phaddbq", { XM, EXq }, PREFIX_OPCODE },
592d1631
L
7615 { Bad_Opcode },
7616 { Bad_Opcode },
507bd325
L
7617 { "phaddwd", { XM, EXq }, PREFIX_OPCODE },
7618 { "phaddwq", { XM, EXq }, PREFIX_OPCODE },
f88c9eb0 7619 /* 48 */
592d1631
L
7620 { Bad_Opcode },
7621 { Bad_Opcode },
7622 { Bad_Opcode },
507bd325 7623 { "phadddq", { XM, EXq }, PREFIX_OPCODE },
592d1631
L
7624 { Bad_Opcode },
7625 { Bad_Opcode },
7626 { Bad_Opcode },
7627 { Bad_Opcode },
f88c9eb0 7628 /* 50 */
592d1631 7629 { Bad_Opcode },
507bd325
L
7630 { "phaddubw", { XM, EXq }, PREFIX_OPCODE },
7631 { "phaddubd", { XM, EXq }, PREFIX_OPCODE },
7632 { "phaddubq", { XM, EXq }, PREFIX_OPCODE },
592d1631
L
7633 { Bad_Opcode },
7634 { Bad_Opcode },
507bd325
L
7635 { "phadduwd", { XM, EXq }, PREFIX_OPCODE },
7636 { "phadduwq", { XM, EXq }, PREFIX_OPCODE },
f88c9eb0 7637 /* 58 */
592d1631
L
7638 { Bad_Opcode },
7639 { Bad_Opcode },
7640 { Bad_Opcode },
507bd325 7641 { "phaddudq", { XM, EXq }, PREFIX_OPCODE },
592d1631
L
7642 { Bad_Opcode },
7643 { Bad_Opcode },
7644 { Bad_Opcode },
7645 { Bad_Opcode },
f88c9eb0 7646 /* 60 */
592d1631 7647 { Bad_Opcode },
507bd325
L
7648 { "phsubbw", { XM, EXq }, PREFIX_OPCODE },
7649 { "phsubbd", { XM, EXq }, PREFIX_OPCODE },
7650 { "phsubbq", { XM, EXq }, PREFIX_OPCODE },
592d1631
L
7651 { Bad_Opcode },
7652 { Bad_Opcode },
7653 { Bad_Opcode },
7654 { Bad_Opcode },
4e7d34a6 7655 /* 68 */
592d1631
L
7656 { Bad_Opcode },
7657 { Bad_Opcode },
7658 { Bad_Opcode },
7659 { Bad_Opcode },
7660 { Bad_Opcode },
7661 { Bad_Opcode },
7662 { Bad_Opcode },
7663 { Bad_Opcode },
85f10a01 7664 /* 70 */
592d1631
L
7665 { Bad_Opcode },
7666 { Bad_Opcode },
7667 { Bad_Opcode },
7668 { Bad_Opcode },
7669 { Bad_Opcode },
7670 { Bad_Opcode },
7671 { Bad_Opcode },
7672 { Bad_Opcode },
85f10a01 7673 /* 78 */
592d1631
L
7674 { Bad_Opcode },
7675 { Bad_Opcode },
7676 { Bad_Opcode },
7677 { Bad_Opcode },
7678 { Bad_Opcode },
7679 { Bad_Opcode },
7680 { Bad_Opcode },
7681 { Bad_Opcode },
85f10a01 7682 /* 80 */
592d1631
L
7683 { Bad_Opcode },
7684 { Bad_Opcode },
7685 { Bad_Opcode },
7686 { Bad_Opcode },
7687 { Bad_Opcode },
7688 { Bad_Opcode },
7689 { Bad_Opcode },
7690 { Bad_Opcode },
85f10a01 7691 /* 88 */
592d1631
L
7692 { Bad_Opcode },
7693 { Bad_Opcode },
7694 { Bad_Opcode },
7695 { Bad_Opcode },
7696 { Bad_Opcode },
7697 { Bad_Opcode },
7698 { Bad_Opcode },
7699 { Bad_Opcode },
85f10a01 7700 /* 90 */
592d1631
L
7701 { Bad_Opcode },
7702 { Bad_Opcode },
7703 { Bad_Opcode },
7704 { Bad_Opcode },
7705 { Bad_Opcode },
7706 { Bad_Opcode },
7707 { Bad_Opcode },
7708 { Bad_Opcode },
85f10a01 7709 /* 98 */
592d1631
L
7710 { Bad_Opcode },
7711 { Bad_Opcode },
7712 { Bad_Opcode },
7713 { Bad_Opcode },
7714 { Bad_Opcode },
7715 { Bad_Opcode },
7716 { Bad_Opcode },
7717 { Bad_Opcode },
85f10a01 7718 /* a0 */
592d1631
L
7719 { Bad_Opcode },
7720 { Bad_Opcode },
7721 { Bad_Opcode },
7722 { Bad_Opcode },
7723 { Bad_Opcode },
7724 { Bad_Opcode },
7725 { Bad_Opcode },
7726 { Bad_Opcode },
85f10a01 7727 /* a8 */
592d1631
L
7728 { Bad_Opcode },
7729 { Bad_Opcode },
7730 { Bad_Opcode },
7731 { Bad_Opcode },
7732 { Bad_Opcode },
7733 { Bad_Opcode },
7734 { Bad_Opcode },
7735 { Bad_Opcode },
85f10a01 7736 /* b0 */
592d1631
L
7737 { Bad_Opcode },
7738 { Bad_Opcode },
7739 { Bad_Opcode },
7740 { Bad_Opcode },
7741 { Bad_Opcode },
7742 { Bad_Opcode },
7743 { Bad_Opcode },
7744 { Bad_Opcode },
85f10a01 7745 /* b8 */
592d1631
L
7746 { Bad_Opcode },
7747 { Bad_Opcode },
7748 { Bad_Opcode },
7749 { Bad_Opcode },
7750 { Bad_Opcode },
7751 { Bad_Opcode },
7752 { Bad_Opcode },
7753 { Bad_Opcode },
85f10a01 7754 /* c0 */
592d1631
L
7755 { Bad_Opcode },
7756 { Bad_Opcode },
7757 { Bad_Opcode },
7758 { Bad_Opcode },
7759 { Bad_Opcode },
7760 { Bad_Opcode },
7761 { Bad_Opcode },
7762 { Bad_Opcode },
85f10a01 7763 /* c8 */
592d1631
L
7764 { Bad_Opcode },
7765 { Bad_Opcode },
7766 { Bad_Opcode },
7767 { Bad_Opcode },
7768 { Bad_Opcode },
7769 { Bad_Opcode },
7770 { Bad_Opcode },
7771 { Bad_Opcode },
85f10a01 7772 /* d0 */
592d1631
L
7773 { Bad_Opcode },
7774 { Bad_Opcode },
7775 { Bad_Opcode },
7776 { Bad_Opcode },
7777 { Bad_Opcode },
7778 { Bad_Opcode },
7779 { Bad_Opcode },
7780 { Bad_Opcode },
85f10a01 7781 /* d8 */
592d1631
L
7782 { Bad_Opcode },
7783 { Bad_Opcode },
7784 { Bad_Opcode },
7785 { Bad_Opcode },
7786 { Bad_Opcode },
7787 { Bad_Opcode },
7788 { Bad_Opcode },
7789 { Bad_Opcode },
85f10a01 7790 /* e0 */
592d1631
L
7791 { Bad_Opcode },
7792 { Bad_Opcode },
7793 { Bad_Opcode },
7794 { Bad_Opcode },
7795 { Bad_Opcode },
7796 { Bad_Opcode },
7797 { Bad_Opcode },
7798 { Bad_Opcode },
85f10a01 7799 /* e8 */
592d1631
L
7800 { Bad_Opcode },
7801 { Bad_Opcode },
7802 { Bad_Opcode },
7803 { Bad_Opcode },
7804 { Bad_Opcode },
7805 { Bad_Opcode },
7806 { Bad_Opcode },
7807 { Bad_Opcode },
85f10a01 7808 /* f0 */
592d1631
L
7809 { Bad_Opcode },
7810 { Bad_Opcode },
7811 { Bad_Opcode },
7812 { Bad_Opcode },
7813 { Bad_Opcode },
7814 { Bad_Opcode },
7815 { Bad_Opcode },
7816 { Bad_Opcode },
85f10a01 7817 /* f8 */
592d1631
L
7818 { Bad_Opcode },
7819 { Bad_Opcode },
7820 { Bad_Opcode },
7821 { Bad_Opcode },
7822 { Bad_Opcode },
7823 { Bad_Opcode },
7824 { Bad_Opcode },
7825 { Bad_Opcode },
85f10a01 7826 },
f88c9eb0
SP
7827};
7828
7829static const struct dis386 xop_table[][256] = {
5dd85c99 7830 /* XOP_08 */
85f10a01
MM
7831 {
7832 /* 00 */
592d1631
L
7833 { Bad_Opcode },
7834 { Bad_Opcode },
7835 { Bad_Opcode },
7836 { Bad_Opcode },
7837 { Bad_Opcode },
7838 { Bad_Opcode },
7839 { Bad_Opcode },
7840 { Bad_Opcode },
85f10a01 7841 /* 08 */
592d1631
L
7842 { Bad_Opcode },
7843 { Bad_Opcode },
7844 { Bad_Opcode },
7845 { Bad_Opcode },
7846 { Bad_Opcode },
7847 { Bad_Opcode },
7848 { Bad_Opcode },
7849 { Bad_Opcode },
85f10a01 7850 /* 10 */
3929df09 7851 { Bad_Opcode },
592d1631
L
7852 { Bad_Opcode },
7853 { Bad_Opcode },
7854 { Bad_Opcode },
7855 { Bad_Opcode },
7856 { Bad_Opcode },
7857 { Bad_Opcode },
7858 { Bad_Opcode },
85f10a01 7859 /* 18 */
592d1631
L
7860 { Bad_Opcode },
7861 { Bad_Opcode },
7862 { Bad_Opcode },
7863 { Bad_Opcode },
7864 { Bad_Opcode },
7865 { Bad_Opcode },
7866 { Bad_Opcode },
7867 { Bad_Opcode },
85f10a01 7868 /* 20 */
592d1631
L
7869 { Bad_Opcode },
7870 { Bad_Opcode },
7871 { Bad_Opcode },
7872 { Bad_Opcode },
7873 { Bad_Opcode },
7874 { Bad_Opcode },
7875 { Bad_Opcode },
7876 { Bad_Opcode },
85f10a01 7877 /* 28 */
592d1631
L
7878 { Bad_Opcode },
7879 { Bad_Opcode },
7880 { Bad_Opcode },
7881 { Bad_Opcode },
7882 { Bad_Opcode },
7883 { Bad_Opcode },
7884 { Bad_Opcode },
7885 { Bad_Opcode },
c0f3af97 7886 /* 30 */
592d1631
L
7887 { Bad_Opcode },
7888 { Bad_Opcode },
7889 { Bad_Opcode },
7890 { Bad_Opcode },
7891 { Bad_Opcode },
7892 { Bad_Opcode },
7893 { Bad_Opcode },
7894 { Bad_Opcode },
c0f3af97 7895 /* 38 */
592d1631
L
7896 { Bad_Opcode },
7897 { Bad_Opcode },
7898 { Bad_Opcode },
7899 { Bad_Opcode },
7900 { Bad_Opcode },
7901 { Bad_Opcode },
7902 { Bad_Opcode },
7903 { Bad_Opcode },
c0f3af97 7904 /* 40 */
592d1631
L
7905 { Bad_Opcode },
7906 { Bad_Opcode },
7907 { Bad_Opcode },
7908 { Bad_Opcode },
7909 { Bad_Opcode },
7910 { Bad_Opcode },
7911 { Bad_Opcode },
7912 { Bad_Opcode },
85f10a01 7913 /* 48 */
592d1631
L
7914 { Bad_Opcode },
7915 { Bad_Opcode },
7916 { Bad_Opcode },
7917 { Bad_Opcode },
7918 { Bad_Opcode },
7919 { Bad_Opcode },
7920 { Bad_Opcode },
7921 { Bad_Opcode },
c0f3af97 7922 /* 50 */
592d1631
L
7923 { Bad_Opcode },
7924 { Bad_Opcode },
7925 { Bad_Opcode },
7926 { Bad_Opcode },
7927 { Bad_Opcode },
7928 { Bad_Opcode },
7929 { Bad_Opcode },
7930 { Bad_Opcode },
85f10a01 7931 /* 58 */
592d1631
L
7932 { Bad_Opcode },
7933 { Bad_Opcode },
7934 { Bad_Opcode },
7935 { Bad_Opcode },
7936 { Bad_Opcode },
7937 { Bad_Opcode },
7938 { Bad_Opcode },
7939 { Bad_Opcode },
c1e679ec 7940 /* 60 */
592d1631
L
7941 { Bad_Opcode },
7942 { Bad_Opcode },
7943 { Bad_Opcode },
7944 { Bad_Opcode },
7945 { Bad_Opcode },
7946 { Bad_Opcode },
7947 { Bad_Opcode },
7948 { Bad_Opcode },
c0f3af97 7949 /* 68 */
592d1631
L
7950 { Bad_Opcode },
7951 { Bad_Opcode },
7952 { Bad_Opcode },
7953 { Bad_Opcode },
7954 { Bad_Opcode },
7955 { Bad_Opcode },
7956 { Bad_Opcode },
7957 { Bad_Opcode },
85f10a01 7958 /* 70 */
592d1631
L
7959 { Bad_Opcode },
7960 { Bad_Opcode },
7961 { Bad_Opcode },
7962 { Bad_Opcode },
7963 { Bad_Opcode },
7964 { Bad_Opcode },
7965 { Bad_Opcode },
7966 { Bad_Opcode },
85f10a01 7967 /* 78 */
592d1631
L
7968 { Bad_Opcode },
7969 { Bad_Opcode },
7970 { Bad_Opcode },
7971 { Bad_Opcode },
7972 { Bad_Opcode },
7973 { Bad_Opcode },
7974 { Bad_Opcode },
7975 { Bad_Opcode },
85f10a01 7976 /* 80 */
592d1631
L
7977 { Bad_Opcode },
7978 { Bad_Opcode },
7979 { Bad_Opcode },
7980 { Bad_Opcode },
7981 { Bad_Opcode },
bf890a93
IT
7982 { "vpmacssww", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
7983 { "vpmacsswd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
7984 { "vpmacssdql", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
5dd85c99 7985 /* 88 */
592d1631
L
7986 { Bad_Opcode },
7987 { Bad_Opcode },
7988 { Bad_Opcode },
7989 { Bad_Opcode },
7990 { Bad_Opcode },
7991 { Bad_Opcode },
bf890a93
IT
7992 { "vpmacssdd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
7993 { "vpmacssdqh", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
5dd85c99 7994 /* 90 */
592d1631
L
7995 { Bad_Opcode },
7996 { Bad_Opcode },
7997 { Bad_Opcode },
7998 { Bad_Opcode },
7999 { Bad_Opcode },
bf890a93
IT
8000 { "vpmacsww", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
8001 { "vpmacswd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
8002 { "vpmacsdql", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
5dd85c99 8003 /* 98 */
592d1631
L
8004 { Bad_Opcode },
8005 { Bad_Opcode },
8006 { Bad_Opcode },
8007 { Bad_Opcode },
8008 { Bad_Opcode },
8009 { Bad_Opcode },
bf890a93
IT
8010 { "vpmacsdd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
8011 { "vpmacsdqh", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
5dd85c99 8012 /* a0 */
592d1631
L
8013 { Bad_Opcode },
8014 { Bad_Opcode },
bf890a93
IT
8015 { "vpcmov", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
8016 { "vpperm", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
592d1631
L
8017 { Bad_Opcode },
8018 { Bad_Opcode },
bf890a93 8019 { "vpmadcsswd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
592d1631 8020 { Bad_Opcode },
5dd85c99 8021 /* a8 */
592d1631
L
8022 { Bad_Opcode },
8023 { Bad_Opcode },
8024 { Bad_Opcode },
8025 { Bad_Opcode },
8026 { Bad_Opcode },
8027 { Bad_Opcode },
8028 { Bad_Opcode },
8029 { Bad_Opcode },
5dd85c99 8030 /* b0 */
592d1631
L
8031 { Bad_Opcode },
8032 { Bad_Opcode },
8033 { Bad_Opcode },
8034 { Bad_Opcode },
8035 { Bad_Opcode },
8036 { Bad_Opcode },
bf890a93 8037 { "vpmadcswd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
592d1631 8038 { Bad_Opcode },
5dd85c99 8039 /* b8 */
592d1631
L
8040 { Bad_Opcode },
8041 { Bad_Opcode },
8042 { Bad_Opcode },
8043 { Bad_Opcode },
8044 { Bad_Opcode },
8045 { Bad_Opcode },
8046 { Bad_Opcode },
8047 { Bad_Opcode },
5dd85c99 8048 /* c0 */
bf890a93
IT
8049 { "vprotb", { XM, Vex_2src_1, Ib }, 0 },
8050 { "vprotw", { XM, Vex_2src_1, Ib }, 0 },
8051 { "vprotd", { XM, Vex_2src_1, Ib }, 0 },
8052 { "vprotq", { XM, Vex_2src_1, Ib }, 0 },
592d1631
L
8053 { Bad_Opcode },
8054 { Bad_Opcode },
8055 { Bad_Opcode },
8056 { Bad_Opcode },
5dd85c99 8057 /* c8 */
592d1631
L
8058 { Bad_Opcode },
8059 { Bad_Opcode },
8060 { Bad_Opcode },
8061 { Bad_Opcode },
ff688e1f
L
8062 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_CC) },
8063 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_CD) },
8064 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_CE) },
8065 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_CF) },
5dd85c99 8066 /* d0 */
592d1631
L
8067 { Bad_Opcode },
8068 { Bad_Opcode },
8069 { Bad_Opcode },
8070 { Bad_Opcode },
8071 { Bad_Opcode },
8072 { Bad_Opcode },
8073 { Bad_Opcode },
8074 { Bad_Opcode },
5dd85c99 8075 /* d8 */
592d1631
L
8076 { Bad_Opcode },
8077 { Bad_Opcode },
8078 { Bad_Opcode },
8079 { Bad_Opcode },
8080 { Bad_Opcode },
8081 { Bad_Opcode },
8082 { Bad_Opcode },
8083 { Bad_Opcode },
5dd85c99 8084 /* e0 */
592d1631
L
8085 { Bad_Opcode },
8086 { Bad_Opcode },
8087 { Bad_Opcode },
8088 { Bad_Opcode },
8089 { Bad_Opcode },
8090 { Bad_Opcode },
8091 { Bad_Opcode },
8092 { Bad_Opcode },
5dd85c99 8093 /* e8 */
592d1631
L
8094 { Bad_Opcode },
8095 { Bad_Opcode },
8096 { Bad_Opcode },
8097 { Bad_Opcode },
ff688e1f
L
8098 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_EC) },
8099 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_ED) },
8100 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_EE) },
8101 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_EF) },
5dd85c99 8102 /* f0 */
592d1631
L
8103 { Bad_Opcode },
8104 { Bad_Opcode },
8105 { Bad_Opcode },
8106 { Bad_Opcode },
8107 { Bad_Opcode },
8108 { Bad_Opcode },
8109 { Bad_Opcode },
8110 { Bad_Opcode },
5dd85c99 8111 /* f8 */
592d1631
L
8112 { Bad_Opcode },
8113 { Bad_Opcode },
8114 { Bad_Opcode },
8115 { Bad_Opcode },
8116 { Bad_Opcode },
8117 { Bad_Opcode },
8118 { Bad_Opcode },
8119 { Bad_Opcode },
5dd85c99
SP
8120 },
8121 /* XOP_09 */
8122 {
8123 /* 00 */
592d1631 8124 { Bad_Opcode },
2a2a0f38
QN
8125 { REG_TABLE (REG_XOP_TBM_01) },
8126 { REG_TABLE (REG_XOP_TBM_02) },
592d1631
L
8127 { Bad_Opcode },
8128 { Bad_Opcode },
8129 { Bad_Opcode },
8130 { Bad_Opcode },
8131 { Bad_Opcode },
5dd85c99 8132 /* 08 */
592d1631
L
8133 { Bad_Opcode },
8134 { Bad_Opcode },
8135 { Bad_Opcode },
8136 { Bad_Opcode },
8137 { Bad_Opcode },
8138 { Bad_Opcode },
8139 { Bad_Opcode },
8140 { Bad_Opcode },
5dd85c99 8141 /* 10 */
592d1631
L
8142 { Bad_Opcode },
8143 { Bad_Opcode },
5dd85c99 8144 { REG_TABLE (REG_XOP_LWPCB) },
592d1631
L
8145 { Bad_Opcode },
8146 { Bad_Opcode },
8147 { Bad_Opcode },
8148 { Bad_Opcode },
8149 { Bad_Opcode },
5dd85c99 8150 /* 18 */
592d1631
L
8151 { Bad_Opcode },
8152 { Bad_Opcode },
8153 { Bad_Opcode },
8154 { Bad_Opcode },
8155 { Bad_Opcode },
8156 { Bad_Opcode },
8157 { Bad_Opcode },
8158 { Bad_Opcode },
5dd85c99 8159 /* 20 */
592d1631
L
8160 { Bad_Opcode },
8161 { Bad_Opcode },
8162 { Bad_Opcode },
8163 { Bad_Opcode },
8164 { Bad_Opcode },
8165 { Bad_Opcode },
8166 { Bad_Opcode },
8167 { Bad_Opcode },
5dd85c99 8168 /* 28 */
592d1631
L
8169 { Bad_Opcode },
8170 { Bad_Opcode },
8171 { Bad_Opcode },
8172 { Bad_Opcode },
8173 { Bad_Opcode },
8174 { Bad_Opcode },
8175 { Bad_Opcode },
8176 { Bad_Opcode },
5dd85c99 8177 /* 30 */
592d1631
L
8178 { Bad_Opcode },
8179 { Bad_Opcode },
8180 { Bad_Opcode },
8181 { Bad_Opcode },
8182 { Bad_Opcode },
8183 { Bad_Opcode },
8184 { Bad_Opcode },
8185 { Bad_Opcode },
5dd85c99 8186 /* 38 */
592d1631
L
8187 { Bad_Opcode },
8188 { Bad_Opcode },
8189 { Bad_Opcode },
8190 { Bad_Opcode },
8191 { Bad_Opcode },
8192 { Bad_Opcode },
8193 { Bad_Opcode },
8194 { Bad_Opcode },
5dd85c99 8195 /* 40 */
592d1631
L
8196 { Bad_Opcode },
8197 { Bad_Opcode },
8198 { Bad_Opcode },
8199 { Bad_Opcode },
8200 { Bad_Opcode },
8201 { Bad_Opcode },
8202 { Bad_Opcode },
8203 { Bad_Opcode },
5dd85c99 8204 /* 48 */
592d1631
L
8205 { Bad_Opcode },
8206 { Bad_Opcode },
8207 { Bad_Opcode },
8208 { Bad_Opcode },
8209 { Bad_Opcode },
8210 { Bad_Opcode },
8211 { Bad_Opcode },
8212 { Bad_Opcode },
5dd85c99 8213 /* 50 */
592d1631
L
8214 { Bad_Opcode },
8215 { Bad_Opcode },
8216 { Bad_Opcode },
8217 { Bad_Opcode },
8218 { Bad_Opcode },
8219 { Bad_Opcode },
8220 { Bad_Opcode },
8221 { Bad_Opcode },
5dd85c99 8222 /* 58 */
592d1631
L
8223 { Bad_Opcode },
8224 { Bad_Opcode },
8225 { Bad_Opcode },
8226 { Bad_Opcode },
8227 { Bad_Opcode },
8228 { Bad_Opcode },
8229 { Bad_Opcode },
8230 { Bad_Opcode },
5dd85c99 8231 /* 60 */
592d1631
L
8232 { Bad_Opcode },
8233 { Bad_Opcode },
8234 { Bad_Opcode },
8235 { Bad_Opcode },
8236 { Bad_Opcode },
8237 { Bad_Opcode },
8238 { Bad_Opcode },
8239 { Bad_Opcode },
5dd85c99 8240 /* 68 */
592d1631
L
8241 { Bad_Opcode },
8242 { Bad_Opcode },
8243 { Bad_Opcode },
8244 { Bad_Opcode },
8245 { Bad_Opcode },
8246 { Bad_Opcode },
8247 { Bad_Opcode },
8248 { Bad_Opcode },
5dd85c99 8249 /* 70 */
592d1631
L
8250 { Bad_Opcode },
8251 { Bad_Opcode },
8252 { Bad_Opcode },
8253 { Bad_Opcode },
8254 { Bad_Opcode },
8255 { Bad_Opcode },
8256 { Bad_Opcode },
8257 { Bad_Opcode },
5dd85c99 8258 /* 78 */
592d1631
L
8259 { Bad_Opcode },
8260 { Bad_Opcode },
8261 { Bad_Opcode },
8262 { Bad_Opcode },
8263 { Bad_Opcode },
8264 { Bad_Opcode },
8265 { Bad_Opcode },
8266 { Bad_Opcode },
5dd85c99 8267 /* 80 */
592a252b
L
8268 { VEX_LEN_TABLE (VEX_LEN_0FXOP_09_80) },
8269 { VEX_LEN_TABLE (VEX_LEN_0FXOP_09_81) },
bf890a93
IT
8270 { "vfrczss", { XM, EXd }, 0 },
8271 { "vfrczsd", { XM, EXq }, 0 },
592d1631
L
8272 { Bad_Opcode },
8273 { Bad_Opcode },
8274 { Bad_Opcode },
8275 { Bad_Opcode },
5dd85c99 8276 /* 88 */
592d1631
L
8277 { Bad_Opcode },
8278 { Bad_Opcode },
8279 { Bad_Opcode },
8280 { Bad_Opcode },
8281 { Bad_Opcode },
8282 { Bad_Opcode },
8283 { Bad_Opcode },
8284 { Bad_Opcode },
5dd85c99 8285 /* 90 */
bf890a93
IT
8286 { "vprotb", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8287 { "vprotw", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8288 { "vprotd", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8289 { "vprotq", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8290 { "vpshlb", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8291 { "vpshlw", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8292 { "vpshld", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8293 { "vpshlq", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
5dd85c99 8294 /* 98 */
bf890a93
IT
8295 { "vpshab", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8296 { "vpshaw", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8297 { "vpshad", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8298 { "vpshaq", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
592d1631
L
8299 { Bad_Opcode },
8300 { Bad_Opcode },
8301 { Bad_Opcode },
8302 { Bad_Opcode },
5dd85c99 8303 /* a0 */
592d1631
L
8304 { Bad_Opcode },
8305 { Bad_Opcode },
8306 { Bad_Opcode },
8307 { Bad_Opcode },
8308 { Bad_Opcode },
8309 { Bad_Opcode },
8310 { Bad_Opcode },
8311 { Bad_Opcode },
5dd85c99 8312 /* a8 */
592d1631
L
8313 { Bad_Opcode },
8314 { Bad_Opcode },
8315 { Bad_Opcode },
8316 { Bad_Opcode },
8317 { Bad_Opcode },
8318 { Bad_Opcode },
8319 { Bad_Opcode },
8320 { Bad_Opcode },
5dd85c99 8321 /* b0 */
592d1631
L
8322 { Bad_Opcode },
8323 { Bad_Opcode },
8324 { Bad_Opcode },
8325 { Bad_Opcode },
8326 { Bad_Opcode },
8327 { Bad_Opcode },
8328 { Bad_Opcode },
8329 { Bad_Opcode },
5dd85c99 8330 /* b8 */
592d1631
L
8331 { Bad_Opcode },
8332 { Bad_Opcode },
8333 { Bad_Opcode },
8334 { Bad_Opcode },
8335 { Bad_Opcode },
8336 { Bad_Opcode },
8337 { Bad_Opcode },
8338 { Bad_Opcode },
5dd85c99 8339 /* c0 */
592d1631 8340 { Bad_Opcode },
bf890a93
IT
8341 { "vphaddbw", { XM, EXxmm }, 0 },
8342 { "vphaddbd", { XM, EXxmm }, 0 },
8343 { "vphaddbq", { XM, EXxmm }, 0 },
592d1631
L
8344 { Bad_Opcode },
8345 { Bad_Opcode },
bf890a93
IT
8346 { "vphaddwd", { XM, EXxmm }, 0 },
8347 { "vphaddwq", { XM, EXxmm }, 0 },
5dd85c99 8348 /* c8 */
592d1631
L
8349 { Bad_Opcode },
8350 { Bad_Opcode },
8351 { Bad_Opcode },
bf890a93 8352 { "vphadddq", { XM, EXxmm }, 0 },
592d1631
L
8353 { Bad_Opcode },
8354 { Bad_Opcode },
8355 { Bad_Opcode },
8356 { Bad_Opcode },
5dd85c99 8357 /* d0 */
592d1631 8358 { Bad_Opcode },
bf890a93
IT
8359 { "vphaddubw", { XM, EXxmm }, 0 },
8360 { "vphaddubd", { XM, EXxmm }, 0 },
8361 { "vphaddubq", { XM, EXxmm }, 0 },
592d1631
L
8362 { Bad_Opcode },
8363 { Bad_Opcode },
bf890a93
IT
8364 { "vphadduwd", { XM, EXxmm }, 0 },
8365 { "vphadduwq", { XM, EXxmm }, 0 },
5dd85c99 8366 /* d8 */
592d1631
L
8367 { Bad_Opcode },
8368 { Bad_Opcode },
8369 { Bad_Opcode },
bf890a93 8370 { "vphaddudq", { XM, EXxmm }, 0 },
592d1631
L
8371 { Bad_Opcode },
8372 { Bad_Opcode },
8373 { Bad_Opcode },
8374 { Bad_Opcode },
5dd85c99 8375 /* e0 */
592d1631 8376 { Bad_Opcode },
bf890a93
IT
8377 { "vphsubbw", { XM, EXxmm }, 0 },
8378 { "vphsubwd", { XM, EXxmm }, 0 },
8379 { "vphsubdq", { XM, EXxmm }, 0 },
592d1631
L
8380 { Bad_Opcode },
8381 { Bad_Opcode },
8382 { Bad_Opcode },
8383 { Bad_Opcode },
4e7d34a6 8384 /* e8 */
592d1631
L
8385 { Bad_Opcode },
8386 { Bad_Opcode },
8387 { Bad_Opcode },
8388 { Bad_Opcode },
8389 { Bad_Opcode },
8390 { Bad_Opcode },
8391 { Bad_Opcode },
8392 { Bad_Opcode },
4e7d34a6 8393 /* f0 */
592d1631
L
8394 { Bad_Opcode },
8395 { Bad_Opcode },
8396 { Bad_Opcode },
8397 { Bad_Opcode },
8398 { Bad_Opcode },
8399 { Bad_Opcode },
8400 { Bad_Opcode },
8401 { Bad_Opcode },
4e7d34a6 8402 /* f8 */
592d1631
L
8403 { Bad_Opcode },
8404 { Bad_Opcode },
8405 { Bad_Opcode },
8406 { Bad_Opcode },
8407 { Bad_Opcode },
8408 { Bad_Opcode },
8409 { Bad_Opcode },
8410 { Bad_Opcode },
4e7d34a6 8411 },
f88c9eb0 8412 /* XOP_0A */
4e7d34a6
L
8413 {
8414 /* 00 */
592d1631
L
8415 { Bad_Opcode },
8416 { Bad_Opcode },
8417 { Bad_Opcode },
8418 { Bad_Opcode },
8419 { Bad_Opcode },
8420 { Bad_Opcode },
8421 { Bad_Opcode },
8422 { Bad_Opcode },
4e7d34a6 8423 /* 08 */
592d1631
L
8424 { Bad_Opcode },
8425 { Bad_Opcode },
8426 { Bad_Opcode },
8427 { Bad_Opcode },
8428 { Bad_Opcode },
8429 { Bad_Opcode },
8430 { Bad_Opcode },
8431 { Bad_Opcode },
4e7d34a6 8432 /* 10 */
bf890a93 8433 { "bextr", { Gv, Ev, Iq }, 0 },
592d1631 8434 { Bad_Opcode },
f88c9eb0 8435 { REG_TABLE (REG_XOP_LWP) },
592d1631
L
8436 { Bad_Opcode },
8437 { Bad_Opcode },
8438 { Bad_Opcode },
8439 { Bad_Opcode },
8440 { Bad_Opcode },
4e7d34a6 8441 /* 18 */
592d1631
L
8442 { Bad_Opcode },
8443 { Bad_Opcode },
8444 { Bad_Opcode },
8445 { Bad_Opcode },
8446 { Bad_Opcode },
8447 { Bad_Opcode },
8448 { Bad_Opcode },
8449 { Bad_Opcode },
4e7d34a6 8450 /* 20 */
592d1631
L
8451 { Bad_Opcode },
8452 { Bad_Opcode },
8453 { Bad_Opcode },
8454 { Bad_Opcode },
8455 { Bad_Opcode },
8456 { Bad_Opcode },
8457 { Bad_Opcode },
8458 { Bad_Opcode },
4e7d34a6 8459 /* 28 */
592d1631
L
8460 { Bad_Opcode },
8461 { Bad_Opcode },
8462 { Bad_Opcode },
8463 { Bad_Opcode },
8464 { Bad_Opcode },
8465 { Bad_Opcode },
8466 { Bad_Opcode },
8467 { Bad_Opcode },
4e7d34a6 8468 /* 30 */
592d1631
L
8469 { Bad_Opcode },
8470 { Bad_Opcode },
8471 { Bad_Opcode },
8472 { Bad_Opcode },
8473 { Bad_Opcode },
8474 { Bad_Opcode },
8475 { Bad_Opcode },
8476 { Bad_Opcode },
c0f3af97 8477 /* 38 */
592d1631
L
8478 { Bad_Opcode },
8479 { Bad_Opcode },
8480 { Bad_Opcode },
8481 { Bad_Opcode },
8482 { Bad_Opcode },
8483 { Bad_Opcode },
8484 { Bad_Opcode },
8485 { Bad_Opcode },
c0f3af97 8486 /* 40 */
592d1631
L
8487 { Bad_Opcode },
8488 { Bad_Opcode },
8489 { Bad_Opcode },
8490 { Bad_Opcode },
8491 { Bad_Opcode },
8492 { Bad_Opcode },
8493 { Bad_Opcode },
8494 { Bad_Opcode },
c1e679ec 8495 /* 48 */
592d1631
L
8496 { Bad_Opcode },
8497 { Bad_Opcode },
8498 { Bad_Opcode },
8499 { Bad_Opcode },
8500 { Bad_Opcode },
8501 { Bad_Opcode },
8502 { Bad_Opcode },
8503 { Bad_Opcode },
c1e679ec 8504 /* 50 */
592d1631
L
8505 { Bad_Opcode },
8506 { Bad_Opcode },
8507 { Bad_Opcode },
8508 { Bad_Opcode },
8509 { Bad_Opcode },
8510 { Bad_Opcode },
8511 { Bad_Opcode },
8512 { Bad_Opcode },
4e7d34a6 8513 /* 58 */
592d1631
L
8514 { Bad_Opcode },
8515 { Bad_Opcode },
8516 { Bad_Opcode },
8517 { Bad_Opcode },
8518 { Bad_Opcode },
8519 { Bad_Opcode },
8520 { Bad_Opcode },
8521 { Bad_Opcode },
4e7d34a6 8522 /* 60 */
592d1631
L
8523 { Bad_Opcode },
8524 { Bad_Opcode },
8525 { Bad_Opcode },
8526 { Bad_Opcode },
8527 { Bad_Opcode },
8528 { Bad_Opcode },
8529 { Bad_Opcode },
8530 { Bad_Opcode },
4e7d34a6 8531 /* 68 */
592d1631
L
8532 { Bad_Opcode },
8533 { Bad_Opcode },
8534 { Bad_Opcode },
8535 { Bad_Opcode },
8536 { Bad_Opcode },
8537 { Bad_Opcode },
8538 { Bad_Opcode },
8539 { Bad_Opcode },
4e7d34a6 8540 /* 70 */
592d1631
L
8541 { Bad_Opcode },
8542 { Bad_Opcode },
8543 { Bad_Opcode },
8544 { Bad_Opcode },
8545 { Bad_Opcode },
8546 { Bad_Opcode },
8547 { Bad_Opcode },
8548 { Bad_Opcode },
4e7d34a6 8549 /* 78 */
592d1631
L
8550 { Bad_Opcode },
8551 { Bad_Opcode },
8552 { Bad_Opcode },
8553 { Bad_Opcode },
8554 { Bad_Opcode },
8555 { Bad_Opcode },
8556 { Bad_Opcode },
8557 { Bad_Opcode },
4e7d34a6 8558 /* 80 */
592d1631
L
8559 { Bad_Opcode },
8560 { Bad_Opcode },
8561 { Bad_Opcode },
8562 { Bad_Opcode },
8563 { Bad_Opcode },
8564 { Bad_Opcode },
8565 { Bad_Opcode },
8566 { Bad_Opcode },
4e7d34a6 8567 /* 88 */
592d1631
L
8568 { Bad_Opcode },
8569 { Bad_Opcode },
8570 { Bad_Opcode },
8571 { Bad_Opcode },
8572 { Bad_Opcode },
8573 { Bad_Opcode },
8574 { Bad_Opcode },
8575 { Bad_Opcode },
4e7d34a6 8576 /* 90 */
592d1631
L
8577 { Bad_Opcode },
8578 { Bad_Opcode },
8579 { Bad_Opcode },
8580 { Bad_Opcode },
8581 { Bad_Opcode },
8582 { Bad_Opcode },
8583 { Bad_Opcode },
8584 { Bad_Opcode },
4e7d34a6 8585 /* 98 */
592d1631
L
8586 { Bad_Opcode },
8587 { Bad_Opcode },
8588 { Bad_Opcode },
8589 { Bad_Opcode },
8590 { Bad_Opcode },
8591 { Bad_Opcode },
8592 { Bad_Opcode },
8593 { Bad_Opcode },
4e7d34a6 8594 /* a0 */
592d1631
L
8595 { Bad_Opcode },
8596 { Bad_Opcode },
8597 { Bad_Opcode },
8598 { Bad_Opcode },
8599 { Bad_Opcode },
8600 { Bad_Opcode },
8601 { Bad_Opcode },
8602 { Bad_Opcode },
4e7d34a6 8603 /* a8 */
592d1631
L
8604 { Bad_Opcode },
8605 { Bad_Opcode },
8606 { Bad_Opcode },
8607 { Bad_Opcode },
8608 { Bad_Opcode },
8609 { Bad_Opcode },
8610 { Bad_Opcode },
8611 { Bad_Opcode },
d5d7db8e 8612 /* b0 */
592d1631
L
8613 { Bad_Opcode },
8614 { Bad_Opcode },
8615 { Bad_Opcode },
8616 { Bad_Opcode },
8617 { Bad_Opcode },
8618 { Bad_Opcode },
8619 { Bad_Opcode },
8620 { Bad_Opcode },
85f10a01 8621 /* b8 */
592d1631
L
8622 { Bad_Opcode },
8623 { Bad_Opcode },
8624 { Bad_Opcode },
8625 { Bad_Opcode },
8626 { Bad_Opcode },
8627 { Bad_Opcode },
8628 { Bad_Opcode },
8629 { Bad_Opcode },
85f10a01 8630 /* c0 */
592d1631
L
8631 { Bad_Opcode },
8632 { Bad_Opcode },
8633 { Bad_Opcode },
8634 { Bad_Opcode },
8635 { Bad_Opcode },
8636 { Bad_Opcode },
8637 { Bad_Opcode },
8638 { Bad_Opcode },
85f10a01 8639 /* c8 */
592d1631
L
8640 { Bad_Opcode },
8641 { Bad_Opcode },
8642 { Bad_Opcode },
8643 { Bad_Opcode },
8644 { Bad_Opcode },
8645 { Bad_Opcode },
8646 { Bad_Opcode },
8647 { Bad_Opcode },
85f10a01 8648 /* d0 */
592d1631
L
8649 { Bad_Opcode },
8650 { Bad_Opcode },
8651 { Bad_Opcode },
8652 { Bad_Opcode },
8653 { Bad_Opcode },
8654 { Bad_Opcode },
8655 { Bad_Opcode },
8656 { Bad_Opcode },
85f10a01 8657 /* d8 */
592d1631
L
8658 { Bad_Opcode },
8659 { Bad_Opcode },
8660 { Bad_Opcode },
8661 { Bad_Opcode },
8662 { Bad_Opcode },
8663 { Bad_Opcode },
8664 { Bad_Opcode },
8665 { Bad_Opcode },
85f10a01 8666 /* e0 */
592d1631
L
8667 { Bad_Opcode },
8668 { Bad_Opcode },
8669 { Bad_Opcode },
8670 { Bad_Opcode },
8671 { Bad_Opcode },
8672 { Bad_Opcode },
8673 { Bad_Opcode },
8674 { Bad_Opcode },
85f10a01 8675 /* e8 */
592d1631
L
8676 { Bad_Opcode },
8677 { Bad_Opcode },
8678 { Bad_Opcode },
8679 { Bad_Opcode },
8680 { Bad_Opcode },
8681 { Bad_Opcode },
8682 { Bad_Opcode },
8683 { Bad_Opcode },
85f10a01 8684 /* f0 */
592d1631
L
8685 { Bad_Opcode },
8686 { Bad_Opcode },
8687 { Bad_Opcode },
8688 { Bad_Opcode },
8689 { Bad_Opcode },
8690 { Bad_Opcode },
8691 { Bad_Opcode },
8692 { Bad_Opcode },
85f10a01 8693 /* f8 */
592d1631
L
8694 { Bad_Opcode },
8695 { Bad_Opcode },
8696 { Bad_Opcode },
8697 { Bad_Opcode },
8698 { Bad_Opcode },
8699 { Bad_Opcode },
8700 { Bad_Opcode },
8701 { Bad_Opcode },
85f10a01 8702 },
c0f3af97
L
8703};
8704
8705static const struct dis386 vex_table[][256] = {
8706 /* VEX_0F */
85f10a01
MM
8707 {
8708 /* 00 */
592d1631
L
8709 { Bad_Opcode },
8710 { Bad_Opcode },
8711 { Bad_Opcode },
8712 { Bad_Opcode },
8713 { Bad_Opcode },
8714 { Bad_Opcode },
8715 { Bad_Opcode },
8716 { Bad_Opcode },
85f10a01 8717 /* 08 */
592d1631
L
8718 { Bad_Opcode },
8719 { Bad_Opcode },
8720 { Bad_Opcode },
8721 { Bad_Opcode },
8722 { Bad_Opcode },
8723 { Bad_Opcode },
8724 { Bad_Opcode },
8725 { Bad_Opcode },
c0f3af97 8726 /* 10 */
592a252b
L
8727 { PREFIX_TABLE (PREFIX_VEX_0F10) },
8728 { PREFIX_TABLE (PREFIX_VEX_0F11) },
8729 { PREFIX_TABLE (PREFIX_VEX_0F12) },
8730 { MOD_TABLE (MOD_VEX_0F13) },
8731 { VEX_W_TABLE (VEX_W_0F14) },
8732 { VEX_W_TABLE (VEX_W_0F15) },
8733 { PREFIX_TABLE (PREFIX_VEX_0F16) },
8734 { MOD_TABLE (MOD_VEX_0F17) },
c0f3af97 8735 /* 18 */
592d1631
L
8736 { Bad_Opcode },
8737 { Bad_Opcode },
8738 { Bad_Opcode },
8739 { Bad_Opcode },
8740 { Bad_Opcode },
8741 { Bad_Opcode },
8742 { Bad_Opcode },
8743 { Bad_Opcode },
c0f3af97 8744 /* 20 */
592d1631
L
8745 { Bad_Opcode },
8746 { Bad_Opcode },
8747 { Bad_Opcode },
8748 { Bad_Opcode },
8749 { Bad_Opcode },
8750 { Bad_Opcode },
8751 { Bad_Opcode },
8752 { Bad_Opcode },
c0f3af97 8753 /* 28 */
592a252b
L
8754 { VEX_W_TABLE (VEX_W_0F28) },
8755 { VEX_W_TABLE (VEX_W_0F29) },
8756 { PREFIX_TABLE (PREFIX_VEX_0F2A) },
8757 { MOD_TABLE (MOD_VEX_0F2B) },
8758 { PREFIX_TABLE (PREFIX_VEX_0F2C) },
8759 { PREFIX_TABLE (PREFIX_VEX_0F2D) },
8760 { PREFIX_TABLE (PREFIX_VEX_0F2E) },
8761 { PREFIX_TABLE (PREFIX_VEX_0F2F) },
85f10a01 8762 /* 30 */
592d1631
L
8763 { Bad_Opcode },
8764 { Bad_Opcode },
8765 { Bad_Opcode },
8766 { Bad_Opcode },
8767 { Bad_Opcode },
8768 { Bad_Opcode },
8769 { Bad_Opcode },
8770 { Bad_Opcode },
4e7d34a6 8771 /* 38 */
592d1631
L
8772 { Bad_Opcode },
8773 { Bad_Opcode },
8774 { Bad_Opcode },
8775 { Bad_Opcode },
8776 { Bad_Opcode },
8777 { Bad_Opcode },
8778 { Bad_Opcode },
8779 { Bad_Opcode },
d5d7db8e 8780 /* 40 */
592d1631 8781 { Bad_Opcode },
43234a1e
L
8782 { PREFIX_TABLE (PREFIX_VEX_0F41) },
8783 { PREFIX_TABLE (PREFIX_VEX_0F42) },
592d1631 8784 { Bad_Opcode },
43234a1e
L
8785 { PREFIX_TABLE (PREFIX_VEX_0F44) },
8786 { PREFIX_TABLE (PREFIX_VEX_0F45) },
8787 { PREFIX_TABLE (PREFIX_VEX_0F46) },
8788 { PREFIX_TABLE (PREFIX_VEX_0F47) },
85f10a01 8789 /* 48 */
592d1631
L
8790 { Bad_Opcode },
8791 { Bad_Opcode },
1ba585e8 8792 { PREFIX_TABLE (PREFIX_VEX_0F4A) },
43234a1e 8793 { PREFIX_TABLE (PREFIX_VEX_0F4B) },
592d1631
L
8794 { Bad_Opcode },
8795 { Bad_Opcode },
8796 { Bad_Opcode },
8797 { Bad_Opcode },
d5d7db8e 8798 /* 50 */
592a252b
L
8799 { MOD_TABLE (MOD_VEX_0F50) },
8800 { PREFIX_TABLE (PREFIX_VEX_0F51) },
8801 { PREFIX_TABLE (PREFIX_VEX_0F52) },
8802 { PREFIX_TABLE (PREFIX_VEX_0F53) },
bf890a93
IT
8803 { "vandpX", { XM, Vex, EXx }, 0 },
8804 { "vandnpX", { XM, Vex, EXx }, 0 },
8805 { "vorpX", { XM, Vex, EXx }, 0 },
8806 { "vxorpX", { XM, Vex, EXx }, 0 },
c0f3af97 8807 /* 58 */
592a252b
L
8808 { PREFIX_TABLE (PREFIX_VEX_0F58) },
8809 { PREFIX_TABLE (PREFIX_VEX_0F59) },
8810 { PREFIX_TABLE (PREFIX_VEX_0F5A) },
8811 { PREFIX_TABLE (PREFIX_VEX_0F5B) },
8812 { PREFIX_TABLE (PREFIX_VEX_0F5C) },
8813 { PREFIX_TABLE (PREFIX_VEX_0F5D) },
8814 { PREFIX_TABLE (PREFIX_VEX_0F5E) },
8815 { PREFIX_TABLE (PREFIX_VEX_0F5F) },
c0f3af97 8816 /* 60 */
592a252b
L
8817 { PREFIX_TABLE (PREFIX_VEX_0F60) },
8818 { PREFIX_TABLE (PREFIX_VEX_0F61) },
8819 { PREFIX_TABLE (PREFIX_VEX_0F62) },
8820 { PREFIX_TABLE (PREFIX_VEX_0F63) },
8821 { PREFIX_TABLE (PREFIX_VEX_0F64) },
8822 { PREFIX_TABLE (PREFIX_VEX_0F65) },
8823 { PREFIX_TABLE (PREFIX_VEX_0F66) },
8824 { PREFIX_TABLE (PREFIX_VEX_0F67) },
c0f3af97 8825 /* 68 */
592a252b
L
8826 { PREFIX_TABLE (PREFIX_VEX_0F68) },
8827 { PREFIX_TABLE (PREFIX_VEX_0F69) },
8828 { PREFIX_TABLE (PREFIX_VEX_0F6A) },
8829 { PREFIX_TABLE (PREFIX_VEX_0F6B) },
8830 { PREFIX_TABLE (PREFIX_VEX_0F6C) },
8831 { PREFIX_TABLE (PREFIX_VEX_0F6D) },
8832 { PREFIX_TABLE (PREFIX_VEX_0F6E) },
8833 { PREFIX_TABLE (PREFIX_VEX_0F6F) },
c0f3af97 8834 /* 70 */
592a252b
L
8835 { PREFIX_TABLE (PREFIX_VEX_0F70) },
8836 { REG_TABLE (REG_VEX_0F71) },
8837 { REG_TABLE (REG_VEX_0F72) },
8838 { REG_TABLE (REG_VEX_0F73) },
8839 { PREFIX_TABLE (PREFIX_VEX_0F74) },
8840 { PREFIX_TABLE (PREFIX_VEX_0F75) },
8841 { PREFIX_TABLE (PREFIX_VEX_0F76) },
8842 { PREFIX_TABLE (PREFIX_VEX_0F77) },
c0f3af97 8843 /* 78 */
592d1631
L
8844 { Bad_Opcode },
8845 { Bad_Opcode },
8846 { Bad_Opcode },
8847 { Bad_Opcode },
592a252b
L
8848 { PREFIX_TABLE (PREFIX_VEX_0F7C) },
8849 { PREFIX_TABLE (PREFIX_VEX_0F7D) },
8850 { PREFIX_TABLE (PREFIX_VEX_0F7E) },
8851 { PREFIX_TABLE (PREFIX_VEX_0F7F) },
c0f3af97 8852 /* 80 */
592d1631
L
8853 { Bad_Opcode },
8854 { Bad_Opcode },
8855 { Bad_Opcode },
8856 { Bad_Opcode },
8857 { Bad_Opcode },
8858 { Bad_Opcode },
8859 { Bad_Opcode },
8860 { Bad_Opcode },
c0f3af97 8861 /* 88 */
592d1631
L
8862 { Bad_Opcode },
8863 { Bad_Opcode },
8864 { Bad_Opcode },
8865 { Bad_Opcode },
8866 { Bad_Opcode },
8867 { Bad_Opcode },
8868 { Bad_Opcode },
8869 { Bad_Opcode },
c0f3af97 8870 /* 90 */
43234a1e
L
8871 { PREFIX_TABLE (PREFIX_VEX_0F90) },
8872 { PREFIX_TABLE (PREFIX_VEX_0F91) },
8873 { PREFIX_TABLE (PREFIX_VEX_0F92) },
8874 { PREFIX_TABLE (PREFIX_VEX_0F93) },
592d1631
L
8875 { Bad_Opcode },
8876 { Bad_Opcode },
8877 { Bad_Opcode },
8878 { Bad_Opcode },
c0f3af97 8879 /* 98 */
43234a1e 8880 { PREFIX_TABLE (PREFIX_VEX_0F98) },
1ba585e8 8881 { PREFIX_TABLE (PREFIX_VEX_0F99) },
592d1631
L
8882 { Bad_Opcode },
8883 { Bad_Opcode },
8884 { Bad_Opcode },
8885 { Bad_Opcode },
8886 { Bad_Opcode },
8887 { Bad_Opcode },
c0f3af97 8888 /* a0 */
592d1631
L
8889 { Bad_Opcode },
8890 { Bad_Opcode },
8891 { Bad_Opcode },
8892 { Bad_Opcode },
8893 { Bad_Opcode },
8894 { Bad_Opcode },
8895 { Bad_Opcode },
8896 { Bad_Opcode },
c0f3af97 8897 /* a8 */
592d1631
L
8898 { Bad_Opcode },
8899 { Bad_Opcode },
8900 { Bad_Opcode },
8901 { Bad_Opcode },
8902 { Bad_Opcode },
8903 { Bad_Opcode },
592a252b 8904 { REG_TABLE (REG_VEX_0FAE) },
592d1631 8905 { Bad_Opcode },
c0f3af97 8906 /* b0 */
592d1631
L
8907 { Bad_Opcode },
8908 { Bad_Opcode },
8909 { Bad_Opcode },
8910 { Bad_Opcode },
8911 { Bad_Opcode },
8912 { Bad_Opcode },
8913 { Bad_Opcode },
8914 { Bad_Opcode },
c0f3af97 8915 /* b8 */
592d1631
L
8916 { Bad_Opcode },
8917 { Bad_Opcode },
8918 { Bad_Opcode },
8919 { Bad_Opcode },
8920 { Bad_Opcode },
8921 { Bad_Opcode },
8922 { Bad_Opcode },
8923 { Bad_Opcode },
c0f3af97 8924 /* c0 */
592d1631
L
8925 { Bad_Opcode },
8926 { Bad_Opcode },
592a252b 8927 { PREFIX_TABLE (PREFIX_VEX_0FC2) },
592d1631 8928 { Bad_Opcode },
592a252b
L
8929 { PREFIX_TABLE (PREFIX_VEX_0FC4) },
8930 { PREFIX_TABLE (PREFIX_VEX_0FC5) },
bf890a93 8931 { "vshufpX", { XM, Vex, EXx, Ib }, 0 },
592d1631 8932 { Bad_Opcode },
c0f3af97 8933 /* c8 */
592d1631
L
8934 { Bad_Opcode },
8935 { Bad_Opcode },
8936 { Bad_Opcode },
8937 { Bad_Opcode },
8938 { Bad_Opcode },
8939 { Bad_Opcode },
8940 { Bad_Opcode },
8941 { Bad_Opcode },
c0f3af97 8942 /* d0 */
592a252b
L
8943 { PREFIX_TABLE (PREFIX_VEX_0FD0) },
8944 { PREFIX_TABLE (PREFIX_VEX_0FD1) },
8945 { PREFIX_TABLE (PREFIX_VEX_0FD2) },
8946 { PREFIX_TABLE (PREFIX_VEX_0FD3) },
8947 { PREFIX_TABLE (PREFIX_VEX_0FD4) },
8948 { PREFIX_TABLE (PREFIX_VEX_0FD5) },
8949 { PREFIX_TABLE (PREFIX_VEX_0FD6) },
8950 { PREFIX_TABLE (PREFIX_VEX_0FD7) },
c0f3af97 8951 /* d8 */
592a252b
L
8952 { PREFIX_TABLE (PREFIX_VEX_0FD8) },
8953 { PREFIX_TABLE (PREFIX_VEX_0FD9) },
8954 { PREFIX_TABLE (PREFIX_VEX_0FDA) },
8955 { PREFIX_TABLE (PREFIX_VEX_0FDB) },
8956 { PREFIX_TABLE (PREFIX_VEX_0FDC) },
8957 { PREFIX_TABLE (PREFIX_VEX_0FDD) },
8958 { PREFIX_TABLE (PREFIX_VEX_0FDE) },
8959 { PREFIX_TABLE (PREFIX_VEX_0FDF) },
c0f3af97 8960 /* e0 */
592a252b
L
8961 { PREFIX_TABLE (PREFIX_VEX_0FE0) },
8962 { PREFIX_TABLE (PREFIX_VEX_0FE1) },
8963 { PREFIX_TABLE (PREFIX_VEX_0FE2) },
8964 { PREFIX_TABLE (PREFIX_VEX_0FE3) },
8965 { PREFIX_TABLE (PREFIX_VEX_0FE4) },
8966 { PREFIX_TABLE (PREFIX_VEX_0FE5) },
8967 { PREFIX_TABLE (PREFIX_VEX_0FE6) },
8968 { PREFIX_TABLE (PREFIX_VEX_0FE7) },
c0f3af97 8969 /* e8 */
592a252b
L
8970 { PREFIX_TABLE (PREFIX_VEX_0FE8) },
8971 { PREFIX_TABLE (PREFIX_VEX_0FE9) },
8972 { PREFIX_TABLE (PREFIX_VEX_0FEA) },
8973 { PREFIX_TABLE (PREFIX_VEX_0FEB) },
8974 { PREFIX_TABLE (PREFIX_VEX_0FEC) },
8975 { PREFIX_TABLE (PREFIX_VEX_0FED) },
8976 { PREFIX_TABLE (PREFIX_VEX_0FEE) },
8977 { PREFIX_TABLE (PREFIX_VEX_0FEF) },
c0f3af97 8978 /* f0 */
592a252b
L
8979 { PREFIX_TABLE (PREFIX_VEX_0FF0) },
8980 { PREFIX_TABLE (PREFIX_VEX_0FF1) },
8981 { PREFIX_TABLE (PREFIX_VEX_0FF2) },
8982 { PREFIX_TABLE (PREFIX_VEX_0FF3) },
8983 { PREFIX_TABLE (PREFIX_VEX_0FF4) },
8984 { PREFIX_TABLE (PREFIX_VEX_0FF5) },
8985 { PREFIX_TABLE (PREFIX_VEX_0FF6) },
8986 { PREFIX_TABLE (PREFIX_VEX_0FF7) },
c0f3af97 8987 /* f8 */
592a252b
L
8988 { PREFIX_TABLE (PREFIX_VEX_0FF8) },
8989 { PREFIX_TABLE (PREFIX_VEX_0FF9) },
8990 { PREFIX_TABLE (PREFIX_VEX_0FFA) },
8991 { PREFIX_TABLE (PREFIX_VEX_0FFB) },
8992 { PREFIX_TABLE (PREFIX_VEX_0FFC) },
8993 { PREFIX_TABLE (PREFIX_VEX_0FFD) },
8994 { PREFIX_TABLE (PREFIX_VEX_0FFE) },
592d1631 8995 { Bad_Opcode },
c0f3af97
L
8996 },
8997 /* VEX_0F38 */
8998 {
8999 /* 00 */
592a252b
L
9000 { PREFIX_TABLE (PREFIX_VEX_0F3800) },
9001 { PREFIX_TABLE (PREFIX_VEX_0F3801) },
9002 { PREFIX_TABLE (PREFIX_VEX_0F3802) },
9003 { PREFIX_TABLE (PREFIX_VEX_0F3803) },
9004 { PREFIX_TABLE (PREFIX_VEX_0F3804) },
9005 { PREFIX_TABLE (PREFIX_VEX_0F3805) },
9006 { PREFIX_TABLE (PREFIX_VEX_0F3806) },
9007 { PREFIX_TABLE (PREFIX_VEX_0F3807) },
c0f3af97 9008 /* 08 */
592a252b
L
9009 { PREFIX_TABLE (PREFIX_VEX_0F3808) },
9010 { PREFIX_TABLE (PREFIX_VEX_0F3809) },
9011 { PREFIX_TABLE (PREFIX_VEX_0F380A) },
9012 { PREFIX_TABLE (PREFIX_VEX_0F380B) },
9013 { PREFIX_TABLE (PREFIX_VEX_0F380C) },
9014 { PREFIX_TABLE (PREFIX_VEX_0F380D) },
9015 { PREFIX_TABLE (PREFIX_VEX_0F380E) },
9016 { PREFIX_TABLE (PREFIX_VEX_0F380F) },
c0f3af97 9017 /* 10 */
592d1631
L
9018 { Bad_Opcode },
9019 { Bad_Opcode },
9020 { Bad_Opcode },
592a252b 9021 { PREFIX_TABLE (PREFIX_VEX_0F3813) },
592d1631
L
9022 { Bad_Opcode },
9023 { Bad_Opcode },
6c30d220 9024 { PREFIX_TABLE (PREFIX_VEX_0F3816) },
592a252b 9025 { PREFIX_TABLE (PREFIX_VEX_0F3817) },
c0f3af97 9026 /* 18 */
592a252b
L
9027 { PREFIX_TABLE (PREFIX_VEX_0F3818) },
9028 { PREFIX_TABLE (PREFIX_VEX_0F3819) },
9029 { PREFIX_TABLE (PREFIX_VEX_0F381A) },
592d1631 9030 { Bad_Opcode },
592a252b
L
9031 { PREFIX_TABLE (PREFIX_VEX_0F381C) },
9032 { PREFIX_TABLE (PREFIX_VEX_0F381D) },
9033 { PREFIX_TABLE (PREFIX_VEX_0F381E) },
592d1631 9034 { Bad_Opcode },
c0f3af97 9035 /* 20 */
592a252b
L
9036 { PREFIX_TABLE (PREFIX_VEX_0F3820) },
9037 { PREFIX_TABLE (PREFIX_VEX_0F3821) },
9038 { PREFIX_TABLE (PREFIX_VEX_0F3822) },
9039 { PREFIX_TABLE (PREFIX_VEX_0F3823) },
9040 { PREFIX_TABLE (PREFIX_VEX_0F3824) },
9041 { PREFIX_TABLE (PREFIX_VEX_0F3825) },
592d1631
L
9042 { Bad_Opcode },
9043 { Bad_Opcode },
c0f3af97 9044 /* 28 */
592a252b
L
9045 { PREFIX_TABLE (PREFIX_VEX_0F3828) },
9046 { PREFIX_TABLE (PREFIX_VEX_0F3829) },
9047 { PREFIX_TABLE (PREFIX_VEX_0F382A) },
9048 { PREFIX_TABLE (PREFIX_VEX_0F382B) },
9049 { PREFIX_TABLE (PREFIX_VEX_0F382C) },
9050 { PREFIX_TABLE (PREFIX_VEX_0F382D) },
9051 { PREFIX_TABLE (PREFIX_VEX_0F382E) },
9052 { PREFIX_TABLE (PREFIX_VEX_0F382F) },
c0f3af97 9053 /* 30 */
592a252b
L
9054 { PREFIX_TABLE (PREFIX_VEX_0F3830) },
9055 { PREFIX_TABLE (PREFIX_VEX_0F3831) },
9056 { PREFIX_TABLE (PREFIX_VEX_0F3832) },
9057 { PREFIX_TABLE (PREFIX_VEX_0F3833) },
9058 { PREFIX_TABLE (PREFIX_VEX_0F3834) },
9059 { PREFIX_TABLE (PREFIX_VEX_0F3835) },
6c30d220 9060 { PREFIX_TABLE (PREFIX_VEX_0F3836) },
592a252b 9061 { PREFIX_TABLE (PREFIX_VEX_0F3837) },
c0f3af97 9062 /* 38 */
592a252b
L
9063 { PREFIX_TABLE (PREFIX_VEX_0F3838) },
9064 { PREFIX_TABLE (PREFIX_VEX_0F3839) },
9065 { PREFIX_TABLE (PREFIX_VEX_0F383A) },
9066 { PREFIX_TABLE (PREFIX_VEX_0F383B) },
9067 { PREFIX_TABLE (PREFIX_VEX_0F383C) },
9068 { PREFIX_TABLE (PREFIX_VEX_0F383D) },
9069 { PREFIX_TABLE (PREFIX_VEX_0F383E) },
9070 { PREFIX_TABLE (PREFIX_VEX_0F383F) },
c0f3af97 9071 /* 40 */
592a252b
L
9072 { PREFIX_TABLE (PREFIX_VEX_0F3840) },
9073 { PREFIX_TABLE (PREFIX_VEX_0F3841) },
592d1631
L
9074 { Bad_Opcode },
9075 { Bad_Opcode },
9076 { Bad_Opcode },
6c30d220
L
9077 { PREFIX_TABLE (PREFIX_VEX_0F3845) },
9078 { PREFIX_TABLE (PREFIX_VEX_0F3846) },
9079 { PREFIX_TABLE (PREFIX_VEX_0F3847) },
c0f3af97 9080 /* 48 */
592d1631
L
9081 { Bad_Opcode },
9082 { Bad_Opcode },
9083 { Bad_Opcode },
9084 { Bad_Opcode },
9085 { Bad_Opcode },
9086 { Bad_Opcode },
9087 { Bad_Opcode },
9088 { Bad_Opcode },
c0f3af97 9089 /* 50 */
592d1631
L
9090 { Bad_Opcode },
9091 { Bad_Opcode },
9092 { Bad_Opcode },
9093 { Bad_Opcode },
9094 { Bad_Opcode },
9095 { Bad_Opcode },
9096 { Bad_Opcode },
9097 { Bad_Opcode },
c0f3af97 9098 /* 58 */
6c30d220
L
9099 { PREFIX_TABLE (PREFIX_VEX_0F3858) },
9100 { PREFIX_TABLE (PREFIX_VEX_0F3859) },
9101 { PREFIX_TABLE (PREFIX_VEX_0F385A) },
592d1631
L
9102 { Bad_Opcode },
9103 { Bad_Opcode },
9104 { Bad_Opcode },
9105 { Bad_Opcode },
9106 { Bad_Opcode },
c0f3af97 9107 /* 60 */
592d1631
L
9108 { Bad_Opcode },
9109 { Bad_Opcode },
9110 { Bad_Opcode },
9111 { Bad_Opcode },
9112 { Bad_Opcode },
9113 { Bad_Opcode },
9114 { Bad_Opcode },
9115 { Bad_Opcode },
c0f3af97 9116 /* 68 */
592d1631
L
9117 { Bad_Opcode },
9118 { Bad_Opcode },
9119 { Bad_Opcode },
9120 { Bad_Opcode },
9121 { Bad_Opcode },
9122 { Bad_Opcode },
9123 { Bad_Opcode },
9124 { Bad_Opcode },
c0f3af97 9125 /* 70 */
592d1631
L
9126 { Bad_Opcode },
9127 { Bad_Opcode },
9128 { Bad_Opcode },
9129 { Bad_Opcode },
9130 { Bad_Opcode },
9131 { Bad_Opcode },
9132 { Bad_Opcode },
9133 { Bad_Opcode },
c0f3af97 9134 /* 78 */
6c30d220
L
9135 { PREFIX_TABLE (PREFIX_VEX_0F3878) },
9136 { PREFIX_TABLE (PREFIX_VEX_0F3879) },
592d1631
L
9137 { Bad_Opcode },
9138 { Bad_Opcode },
9139 { Bad_Opcode },
9140 { Bad_Opcode },
9141 { Bad_Opcode },
9142 { Bad_Opcode },
c0f3af97 9143 /* 80 */
592d1631
L
9144 { Bad_Opcode },
9145 { Bad_Opcode },
9146 { Bad_Opcode },
9147 { Bad_Opcode },
9148 { Bad_Opcode },
9149 { Bad_Opcode },
9150 { Bad_Opcode },
9151 { Bad_Opcode },
c0f3af97 9152 /* 88 */
592d1631
L
9153 { Bad_Opcode },
9154 { Bad_Opcode },
9155 { Bad_Opcode },
9156 { Bad_Opcode },
6c30d220 9157 { PREFIX_TABLE (PREFIX_VEX_0F388C) },
592d1631 9158 { Bad_Opcode },
6c30d220 9159 { PREFIX_TABLE (PREFIX_VEX_0F388E) },
592d1631 9160 { Bad_Opcode },
c0f3af97 9161 /* 90 */
6c30d220
L
9162 { PREFIX_TABLE (PREFIX_VEX_0F3890) },
9163 { PREFIX_TABLE (PREFIX_VEX_0F3891) },
9164 { PREFIX_TABLE (PREFIX_VEX_0F3892) },
9165 { PREFIX_TABLE (PREFIX_VEX_0F3893) },
592d1631
L
9166 { Bad_Opcode },
9167 { Bad_Opcode },
592a252b
L
9168 { PREFIX_TABLE (PREFIX_VEX_0F3896) },
9169 { PREFIX_TABLE (PREFIX_VEX_0F3897) },
c0f3af97 9170 /* 98 */
592a252b
L
9171 { PREFIX_TABLE (PREFIX_VEX_0F3898) },
9172 { PREFIX_TABLE (PREFIX_VEX_0F3899) },
9173 { PREFIX_TABLE (PREFIX_VEX_0F389A) },
9174 { PREFIX_TABLE (PREFIX_VEX_0F389B) },
9175 { PREFIX_TABLE (PREFIX_VEX_0F389C) },
9176 { PREFIX_TABLE (PREFIX_VEX_0F389D) },
9177 { PREFIX_TABLE (PREFIX_VEX_0F389E) },
9178 { PREFIX_TABLE (PREFIX_VEX_0F389F) },
c0f3af97 9179 /* a0 */
592d1631
L
9180 { Bad_Opcode },
9181 { Bad_Opcode },
9182 { Bad_Opcode },
9183 { Bad_Opcode },
9184 { Bad_Opcode },
9185 { Bad_Opcode },
592a252b
L
9186 { PREFIX_TABLE (PREFIX_VEX_0F38A6) },
9187 { PREFIX_TABLE (PREFIX_VEX_0F38A7) },
c0f3af97 9188 /* a8 */
592a252b
L
9189 { PREFIX_TABLE (PREFIX_VEX_0F38A8) },
9190 { PREFIX_TABLE (PREFIX_VEX_0F38A9) },
9191 { PREFIX_TABLE (PREFIX_VEX_0F38AA) },
9192 { PREFIX_TABLE (PREFIX_VEX_0F38AB) },
9193 { PREFIX_TABLE (PREFIX_VEX_0F38AC) },
9194 { PREFIX_TABLE (PREFIX_VEX_0F38AD) },
9195 { PREFIX_TABLE (PREFIX_VEX_0F38AE) },
9196 { PREFIX_TABLE (PREFIX_VEX_0F38AF) },
c0f3af97 9197 /* b0 */
592d1631
L
9198 { Bad_Opcode },
9199 { Bad_Opcode },
9200 { Bad_Opcode },
9201 { Bad_Opcode },
9202 { Bad_Opcode },
9203 { Bad_Opcode },
592a252b
L
9204 { PREFIX_TABLE (PREFIX_VEX_0F38B6) },
9205 { PREFIX_TABLE (PREFIX_VEX_0F38B7) },
c0f3af97 9206 /* b8 */
592a252b
L
9207 { PREFIX_TABLE (PREFIX_VEX_0F38B8) },
9208 { PREFIX_TABLE (PREFIX_VEX_0F38B9) },
9209 { PREFIX_TABLE (PREFIX_VEX_0F38BA) },
9210 { PREFIX_TABLE (PREFIX_VEX_0F38BB) },
9211 { PREFIX_TABLE (PREFIX_VEX_0F38BC) },
9212 { PREFIX_TABLE (PREFIX_VEX_0F38BD) },
9213 { PREFIX_TABLE (PREFIX_VEX_0F38BE) },
9214 { PREFIX_TABLE (PREFIX_VEX_0F38BF) },
c0f3af97 9215 /* c0 */
592d1631
L
9216 { Bad_Opcode },
9217 { Bad_Opcode },
9218 { Bad_Opcode },
9219 { Bad_Opcode },
9220 { Bad_Opcode },
9221 { Bad_Opcode },
9222 { Bad_Opcode },
9223 { Bad_Opcode },
c0f3af97 9224 /* c8 */
592d1631
L
9225 { Bad_Opcode },
9226 { Bad_Opcode },
9227 { Bad_Opcode },
9228 { Bad_Opcode },
9229 { Bad_Opcode },
9230 { Bad_Opcode },
9231 { Bad_Opcode },
9232 { Bad_Opcode },
c0f3af97 9233 /* d0 */
592d1631
L
9234 { Bad_Opcode },
9235 { Bad_Opcode },
9236 { Bad_Opcode },
9237 { Bad_Opcode },
9238 { Bad_Opcode },
9239 { Bad_Opcode },
9240 { Bad_Opcode },
9241 { Bad_Opcode },
c0f3af97 9242 /* d8 */
592d1631
L
9243 { Bad_Opcode },
9244 { Bad_Opcode },
9245 { Bad_Opcode },
592a252b
L
9246 { PREFIX_TABLE (PREFIX_VEX_0F38DB) },
9247 { PREFIX_TABLE (PREFIX_VEX_0F38DC) },
9248 { PREFIX_TABLE (PREFIX_VEX_0F38DD) },
9249 { PREFIX_TABLE (PREFIX_VEX_0F38DE) },
9250 { PREFIX_TABLE (PREFIX_VEX_0F38DF) },
c0f3af97 9251 /* e0 */
592d1631
L
9252 { Bad_Opcode },
9253 { Bad_Opcode },
9254 { Bad_Opcode },
9255 { Bad_Opcode },
9256 { Bad_Opcode },
9257 { Bad_Opcode },
9258 { Bad_Opcode },
9259 { Bad_Opcode },
c0f3af97 9260 /* e8 */
592d1631
L
9261 { Bad_Opcode },
9262 { Bad_Opcode },
9263 { Bad_Opcode },
9264 { Bad_Opcode },
9265 { Bad_Opcode },
9266 { Bad_Opcode },
9267 { Bad_Opcode },
9268 { Bad_Opcode },
c0f3af97 9269 /* f0 */
592d1631
L
9270 { Bad_Opcode },
9271 { Bad_Opcode },
f12dc422
L
9272 { PREFIX_TABLE (PREFIX_VEX_0F38F2) },
9273 { REG_TABLE (REG_VEX_0F38F3) },
592d1631 9274 { Bad_Opcode },
6c30d220
L
9275 { PREFIX_TABLE (PREFIX_VEX_0F38F5) },
9276 { PREFIX_TABLE (PREFIX_VEX_0F38F6) },
f12dc422 9277 { PREFIX_TABLE (PREFIX_VEX_0F38F7) },
c0f3af97 9278 /* f8 */
592d1631
L
9279 { Bad_Opcode },
9280 { Bad_Opcode },
9281 { Bad_Opcode },
9282 { Bad_Opcode },
9283 { Bad_Opcode },
9284 { Bad_Opcode },
9285 { Bad_Opcode },
9286 { Bad_Opcode },
c0f3af97
L
9287 },
9288 /* VEX_0F3A */
9289 {
9290 /* 00 */
6c30d220
L
9291 { PREFIX_TABLE (PREFIX_VEX_0F3A00) },
9292 { PREFIX_TABLE (PREFIX_VEX_0F3A01) },
9293 { PREFIX_TABLE (PREFIX_VEX_0F3A02) },
592d1631 9294 { Bad_Opcode },
592a252b
L
9295 { PREFIX_TABLE (PREFIX_VEX_0F3A04) },
9296 { PREFIX_TABLE (PREFIX_VEX_0F3A05) },
9297 { PREFIX_TABLE (PREFIX_VEX_0F3A06) },
592d1631 9298 { Bad_Opcode },
c0f3af97 9299 /* 08 */
592a252b
L
9300 { PREFIX_TABLE (PREFIX_VEX_0F3A08) },
9301 { PREFIX_TABLE (PREFIX_VEX_0F3A09) },
9302 { PREFIX_TABLE (PREFIX_VEX_0F3A0A) },
9303 { PREFIX_TABLE (PREFIX_VEX_0F3A0B) },
9304 { PREFIX_TABLE (PREFIX_VEX_0F3A0C) },
9305 { PREFIX_TABLE (PREFIX_VEX_0F3A0D) },
9306 { PREFIX_TABLE (PREFIX_VEX_0F3A0E) },
9307 { PREFIX_TABLE (PREFIX_VEX_0F3A0F) },
c0f3af97 9308 /* 10 */
592d1631
L
9309 { Bad_Opcode },
9310 { Bad_Opcode },
9311 { Bad_Opcode },
9312 { Bad_Opcode },
592a252b
L
9313 { PREFIX_TABLE (PREFIX_VEX_0F3A14) },
9314 { PREFIX_TABLE (PREFIX_VEX_0F3A15) },
9315 { PREFIX_TABLE (PREFIX_VEX_0F3A16) },
9316 { PREFIX_TABLE (PREFIX_VEX_0F3A17) },
c0f3af97 9317 /* 18 */
592a252b
L
9318 { PREFIX_TABLE (PREFIX_VEX_0F3A18) },
9319 { PREFIX_TABLE (PREFIX_VEX_0F3A19) },
592d1631
L
9320 { Bad_Opcode },
9321 { Bad_Opcode },
9322 { Bad_Opcode },
592a252b 9323 { PREFIX_TABLE (PREFIX_VEX_0F3A1D) },
592d1631
L
9324 { Bad_Opcode },
9325 { Bad_Opcode },
c0f3af97 9326 /* 20 */
592a252b
L
9327 { PREFIX_TABLE (PREFIX_VEX_0F3A20) },
9328 { PREFIX_TABLE (PREFIX_VEX_0F3A21) },
9329 { PREFIX_TABLE (PREFIX_VEX_0F3A22) },
592d1631
L
9330 { Bad_Opcode },
9331 { Bad_Opcode },
9332 { Bad_Opcode },
9333 { Bad_Opcode },
9334 { Bad_Opcode },
c0f3af97 9335 /* 28 */
592d1631
L
9336 { Bad_Opcode },
9337 { Bad_Opcode },
9338 { Bad_Opcode },
9339 { Bad_Opcode },
9340 { Bad_Opcode },
9341 { Bad_Opcode },
9342 { Bad_Opcode },
9343 { Bad_Opcode },
c0f3af97 9344 /* 30 */
43234a1e 9345 { PREFIX_TABLE (PREFIX_VEX_0F3A30) },
1ba585e8 9346 { PREFIX_TABLE (PREFIX_VEX_0F3A31) },
43234a1e 9347 { PREFIX_TABLE (PREFIX_VEX_0F3A32) },
1ba585e8 9348 { PREFIX_TABLE (PREFIX_VEX_0F3A33) },
592d1631
L
9349 { Bad_Opcode },
9350 { Bad_Opcode },
9351 { Bad_Opcode },
9352 { Bad_Opcode },
c0f3af97 9353 /* 38 */
6c30d220
L
9354 { PREFIX_TABLE (PREFIX_VEX_0F3A38) },
9355 { PREFIX_TABLE (PREFIX_VEX_0F3A39) },
592d1631
L
9356 { Bad_Opcode },
9357 { Bad_Opcode },
9358 { Bad_Opcode },
9359 { Bad_Opcode },
9360 { Bad_Opcode },
9361 { Bad_Opcode },
c0f3af97 9362 /* 40 */
592a252b
L
9363 { PREFIX_TABLE (PREFIX_VEX_0F3A40) },
9364 { PREFIX_TABLE (PREFIX_VEX_0F3A41) },
9365 { PREFIX_TABLE (PREFIX_VEX_0F3A42) },
592d1631 9366 { Bad_Opcode },
592a252b 9367 { PREFIX_TABLE (PREFIX_VEX_0F3A44) },
592d1631 9368 { Bad_Opcode },
6c30d220 9369 { PREFIX_TABLE (PREFIX_VEX_0F3A46) },
592d1631 9370 { Bad_Opcode },
c0f3af97 9371 /* 48 */
592a252b
L
9372 { PREFIX_TABLE (PREFIX_VEX_0F3A48) },
9373 { PREFIX_TABLE (PREFIX_VEX_0F3A49) },
9374 { PREFIX_TABLE (PREFIX_VEX_0F3A4A) },
9375 { PREFIX_TABLE (PREFIX_VEX_0F3A4B) },
9376 { PREFIX_TABLE (PREFIX_VEX_0F3A4C) },
592d1631
L
9377 { Bad_Opcode },
9378 { Bad_Opcode },
9379 { Bad_Opcode },
c0f3af97 9380 /* 50 */
592d1631
L
9381 { Bad_Opcode },
9382 { Bad_Opcode },
9383 { Bad_Opcode },
9384 { Bad_Opcode },
9385 { Bad_Opcode },
9386 { Bad_Opcode },
9387 { Bad_Opcode },
9388 { Bad_Opcode },
c0f3af97 9389 /* 58 */
592d1631
L
9390 { Bad_Opcode },
9391 { Bad_Opcode },
9392 { Bad_Opcode },
9393 { Bad_Opcode },
592a252b
L
9394 { PREFIX_TABLE (PREFIX_VEX_0F3A5C) },
9395 { PREFIX_TABLE (PREFIX_VEX_0F3A5D) },
9396 { PREFIX_TABLE (PREFIX_VEX_0F3A5E) },
9397 { PREFIX_TABLE (PREFIX_VEX_0F3A5F) },
c0f3af97 9398 /* 60 */
592a252b
L
9399 { PREFIX_TABLE (PREFIX_VEX_0F3A60) },
9400 { PREFIX_TABLE (PREFIX_VEX_0F3A61) },
9401 { PREFIX_TABLE (PREFIX_VEX_0F3A62) },
9402 { PREFIX_TABLE (PREFIX_VEX_0F3A63) },
592d1631
L
9403 { Bad_Opcode },
9404 { Bad_Opcode },
9405 { Bad_Opcode },
9406 { Bad_Opcode },
c0f3af97 9407 /* 68 */
592a252b
L
9408 { PREFIX_TABLE (PREFIX_VEX_0F3A68) },
9409 { PREFIX_TABLE (PREFIX_VEX_0F3A69) },
9410 { PREFIX_TABLE (PREFIX_VEX_0F3A6A) },
9411 { PREFIX_TABLE (PREFIX_VEX_0F3A6B) },
9412 { PREFIX_TABLE (PREFIX_VEX_0F3A6C) },
9413 { PREFIX_TABLE (PREFIX_VEX_0F3A6D) },
9414 { PREFIX_TABLE (PREFIX_VEX_0F3A6E) },
9415 { PREFIX_TABLE (PREFIX_VEX_0F3A6F) },
c0f3af97 9416 /* 70 */
592d1631
L
9417 { Bad_Opcode },
9418 { Bad_Opcode },
9419 { Bad_Opcode },
9420 { Bad_Opcode },
9421 { Bad_Opcode },
9422 { Bad_Opcode },
9423 { Bad_Opcode },
9424 { Bad_Opcode },
c0f3af97 9425 /* 78 */
592a252b
L
9426 { PREFIX_TABLE (PREFIX_VEX_0F3A78) },
9427 { PREFIX_TABLE (PREFIX_VEX_0F3A79) },
9428 { PREFIX_TABLE (PREFIX_VEX_0F3A7A) },
9429 { PREFIX_TABLE (PREFIX_VEX_0F3A7B) },
9430 { PREFIX_TABLE (PREFIX_VEX_0F3A7C) },
9431 { PREFIX_TABLE (PREFIX_VEX_0F3A7D) },
9432 { PREFIX_TABLE (PREFIX_VEX_0F3A7E) },
9433 { PREFIX_TABLE (PREFIX_VEX_0F3A7F) },
c0f3af97 9434 /* 80 */
592d1631
L
9435 { Bad_Opcode },
9436 { Bad_Opcode },
9437 { Bad_Opcode },
9438 { Bad_Opcode },
9439 { Bad_Opcode },
9440 { Bad_Opcode },
9441 { Bad_Opcode },
9442 { Bad_Opcode },
c0f3af97 9443 /* 88 */
592d1631
L
9444 { Bad_Opcode },
9445 { Bad_Opcode },
9446 { Bad_Opcode },
9447 { Bad_Opcode },
9448 { Bad_Opcode },
9449 { Bad_Opcode },
9450 { Bad_Opcode },
9451 { Bad_Opcode },
c0f3af97 9452 /* 90 */
592d1631
L
9453 { Bad_Opcode },
9454 { Bad_Opcode },
9455 { Bad_Opcode },
9456 { Bad_Opcode },
9457 { Bad_Opcode },
9458 { Bad_Opcode },
9459 { Bad_Opcode },
9460 { Bad_Opcode },
c0f3af97 9461 /* 98 */
592d1631
L
9462 { Bad_Opcode },
9463 { Bad_Opcode },
9464 { Bad_Opcode },
9465 { Bad_Opcode },
9466 { Bad_Opcode },
9467 { Bad_Opcode },
9468 { Bad_Opcode },
9469 { Bad_Opcode },
c0f3af97 9470 /* a0 */
592d1631
L
9471 { Bad_Opcode },
9472 { Bad_Opcode },
9473 { Bad_Opcode },
9474 { Bad_Opcode },
9475 { Bad_Opcode },
9476 { Bad_Opcode },
9477 { Bad_Opcode },
9478 { Bad_Opcode },
c0f3af97 9479 /* a8 */
592d1631
L
9480 { Bad_Opcode },
9481 { Bad_Opcode },
9482 { Bad_Opcode },
9483 { Bad_Opcode },
9484 { Bad_Opcode },
9485 { Bad_Opcode },
9486 { Bad_Opcode },
9487 { Bad_Opcode },
c0f3af97 9488 /* b0 */
592d1631
L
9489 { Bad_Opcode },
9490 { Bad_Opcode },
9491 { Bad_Opcode },
9492 { Bad_Opcode },
9493 { Bad_Opcode },
9494 { Bad_Opcode },
9495 { Bad_Opcode },
9496 { Bad_Opcode },
c0f3af97 9497 /* b8 */
592d1631
L
9498 { Bad_Opcode },
9499 { Bad_Opcode },
9500 { Bad_Opcode },
9501 { Bad_Opcode },
9502 { Bad_Opcode },
9503 { Bad_Opcode },
9504 { Bad_Opcode },
9505 { Bad_Opcode },
c0f3af97 9506 /* c0 */
592d1631
L
9507 { Bad_Opcode },
9508 { Bad_Opcode },
9509 { Bad_Opcode },
9510 { Bad_Opcode },
9511 { Bad_Opcode },
9512 { Bad_Opcode },
9513 { Bad_Opcode },
9514 { Bad_Opcode },
c0f3af97 9515 /* c8 */
592d1631
L
9516 { Bad_Opcode },
9517 { Bad_Opcode },
9518 { Bad_Opcode },
9519 { Bad_Opcode },
9520 { Bad_Opcode },
9521 { Bad_Opcode },
9522 { Bad_Opcode },
9523 { Bad_Opcode },
c0f3af97 9524 /* d0 */
592d1631
L
9525 { Bad_Opcode },
9526 { Bad_Opcode },
9527 { Bad_Opcode },
9528 { Bad_Opcode },
9529 { Bad_Opcode },
9530 { Bad_Opcode },
9531 { Bad_Opcode },
9532 { Bad_Opcode },
c0f3af97 9533 /* d8 */
592d1631
L
9534 { Bad_Opcode },
9535 { Bad_Opcode },
9536 { Bad_Opcode },
9537 { Bad_Opcode },
9538 { Bad_Opcode },
9539 { Bad_Opcode },
9540 { Bad_Opcode },
592a252b 9541 { PREFIX_TABLE (PREFIX_VEX_0F3ADF) },
c0f3af97 9542 /* e0 */
592d1631
L
9543 { Bad_Opcode },
9544 { Bad_Opcode },
9545 { Bad_Opcode },
9546 { Bad_Opcode },
9547 { Bad_Opcode },
9548 { Bad_Opcode },
9549 { Bad_Opcode },
9550 { Bad_Opcode },
c0f3af97 9551 /* e8 */
592d1631
L
9552 { Bad_Opcode },
9553 { Bad_Opcode },
9554 { Bad_Opcode },
9555 { Bad_Opcode },
9556 { Bad_Opcode },
9557 { Bad_Opcode },
9558 { Bad_Opcode },
9559 { Bad_Opcode },
c0f3af97 9560 /* f0 */
6c30d220 9561 { PREFIX_TABLE (PREFIX_VEX_0F3AF0) },
592d1631
L
9562 { Bad_Opcode },
9563 { Bad_Opcode },
9564 { Bad_Opcode },
9565 { Bad_Opcode },
9566 { Bad_Opcode },
9567 { Bad_Opcode },
9568 { Bad_Opcode },
c0f3af97 9569 /* f8 */
592d1631
L
9570 { Bad_Opcode },
9571 { Bad_Opcode },
9572 { Bad_Opcode },
9573 { Bad_Opcode },
9574 { Bad_Opcode },
9575 { Bad_Opcode },
9576 { Bad_Opcode },
9577 { Bad_Opcode },
c0f3af97
L
9578 },
9579};
9580
43234a1e
L
9581#define NEED_OPCODE_TABLE
9582#include "i386-dis-evex.h"
9583#undef NEED_OPCODE_TABLE
c0f3af97 9584static const struct dis386 vex_len_table[][2] = {
592a252b 9585 /* VEX_LEN_0F10_P_1 */
c0f3af97 9586 {
592a252b
L
9587 { VEX_W_TABLE (VEX_W_0F10_P_1) },
9588 { VEX_W_TABLE (VEX_W_0F10_P_1) },
c0f3af97
L
9589 },
9590
592a252b 9591 /* VEX_LEN_0F10_P_3 */
c0f3af97 9592 {
592a252b
L
9593 { VEX_W_TABLE (VEX_W_0F10_P_3) },
9594 { VEX_W_TABLE (VEX_W_0F10_P_3) },
c0f3af97
L
9595 },
9596
592a252b 9597 /* VEX_LEN_0F11_P_1 */
c0f3af97 9598 {
592a252b
L
9599 { VEX_W_TABLE (VEX_W_0F11_P_1) },
9600 { VEX_W_TABLE (VEX_W_0F11_P_1) },
c0f3af97
L
9601 },
9602
592a252b 9603 /* VEX_LEN_0F11_P_3 */
c0f3af97 9604 {
592a252b
L
9605 { VEX_W_TABLE (VEX_W_0F11_P_3) },
9606 { VEX_W_TABLE (VEX_W_0F11_P_3) },
c0f3af97
L
9607 },
9608
592a252b 9609 /* VEX_LEN_0F12_P_0_M_0 */
c0f3af97 9610 {
592a252b 9611 { VEX_W_TABLE (VEX_W_0F12_P_0_M_0) },
c0f3af97
L
9612 },
9613
592a252b 9614 /* VEX_LEN_0F12_P_0_M_1 */
c0f3af97 9615 {
592a252b 9616 { VEX_W_TABLE (VEX_W_0F12_P_0_M_1) },
c0f3af97
L
9617 },
9618
592a252b 9619 /* VEX_LEN_0F12_P_2 */
c0f3af97 9620 {
592a252b 9621 { VEX_W_TABLE (VEX_W_0F12_P_2) },
c0f3af97
L
9622 },
9623
592a252b 9624 /* VEX_LEN_0F13_M_0 */
c0f3af97 9625 {
592a252b 9626 { VEX_W_TABLE (VEX_W_0F13_M_0) },
c0f3af97
L
9627 },
9628
592a252b 9629 /* VEX_LEN_0F16_P_0_M_0 */
c0f3af97 9630 {
592a252b 9631 { VEX_W_TABLE (VEX_W_0F16_P_0_M_0) },
c0f3af97
L
9632 },
9633
592a252b 9634 /* VEX_LEN_0F16_P_0_M_1 */
c0f3af97 9635 {
592a252b 9636 { VEX_W_TABLE (VEX_W_0F16_P_0_M_1) },
c0f3af97
L
9637 },
9638
592a252b 9639 /* VEX_LEN_0F16_P_2 */
c0f3af97 9640 {
592a252b 9641 { VEX_W_TABLE (VEX_W_0F16_P_2) },
c0f3af97
L
9642 },
9643
592a252b 9644 /* VEX_LEN_0F17_M_0 */
c0f3af97 9645 {
592a252b 9646 { VEX_W_TABLE (VEX_W_0F17_M_0) },
c0f3af97
L
9647 },
9648
592a252b 9649 /* VEX_LEN_0F2A_P_1 */
c0f3af97 9650 {
bf890a93
IT
9651 { "vcvtsi2ss%LQ", { XMScalar, VexScalar, Ev }, 0 },
9652 { "vcvtsi2ss%LQ", { XMScalar, VexScalar, Ev }, 0 },
c0f3af97
L
9653 },
9654
592a252b 9655 /* VEX_LEN_0F2A_P_3 */
c0f3af97 9656 {
bf890a93
IT
9657 { "vcvtsi2sd%LQ", { XMScalar, VexScalar, Ev }, 0 },
9658 { "vcvtsi2sd%LQ", { XMScalar, VexScalar, Ev }, 0 },
c0f3af97
L
9659 },
9660
592a252b 9661 /* VEX_LEN_0F2C_P_1 */
c0f3af97 9662 {
bf890a93
IT
9663 { "vcvttss2siY", { Gv, EXdScalar }, 0 },
9664 { "vcvttss2siY", { Gv, EXdScalar }, 0 },
c0f3af97
L
9665 },
9666
592a252b 9667 /* VEX_LEN_0F2C_P_3 */
c0f3af97 9668 {
bf890a93
IT
9669 { "vcvttsd2siY", { Gv, EXqScalar }, 0 },
9670 { "vcvttsd2siY", { Gv, EXqScalar }, 0 },
c0f3af97
L
9671 },
9672
592a252b 9673 /* VEX_LEN_0F2D_P_1 */
c0f3af97 9674 {
bf890a93
IT
9675 { "vcvtss2siY", { Gv, EXdScalar }, 0 },
9676 { "vcvtss2siY", { Gv, EXdScalar }, 0 },
c0f3af97
L
9677 },
9678
592a252b 9679 /* VEX_LEN_0F2D_P_3 */
c0f3af97 9680 {
bf890a93
IT
9681 { "vcvtsd2siY", { Gv, EXqScalar }, 0 },
9682 { "vcvtsd2siY", { Gv, EXqScalar }, 0 },
c0f3af97
L
9683 },
9684
592a252b 9685 /* VEX_LEN_0F2E_P_0 */
c0f3af97 9686 {
592a252b
L
9687 { VEX_W_TABLE (VEX_W_0F2E_P_0) },
9688 { VEX_W_TABLE (VEX_W_0F2E_P_0) },
c0f3af97
L
9689 },
9690
592a252b 9691 /* VEX_LEN_0F2E_P_2 */
c0f3af97 9692 {
592a252b
L
9693 { VEX_W_TABLE (VEX_W_0F2E_P_2) },
9694 { VEX_W_TABLE (VEX_W_0F2E_P_2) },
c0f3af97
L
9695 },
9696
592a252b 9697 /* VEX_LEN_0F2F_P_0 */
c0f3af97 9698 {
592a252b
L
9699 { VEX_W_TABLE (VEX_W_0F2F_P_0) },
9700 { VEX_W_TABLE (VEX_W_0F2F_P_0) },
c0f3af97
L
9701 },
9702
592a252b 9703 /* VEX_LEN_0F2F_P_2 */
c0f3af97 9704 {
592a252b
L
9705 { VEX_W_TABLE (VEX_W_0F2F_P_2) },
9706 { VEX_W_TABLE (VEX_W_0F2F_P_2) },
c0f3af97
L
9707 },
9708
43234a1e
L
9709 /* VEX_LEN_0F41_P_0 */
9710 {
9711 { Bad_Opcode },
9712 { VEX_W_TABLE (VEX_W_0F41_P_0_LEN_1) },
9713 },
1ba585e8
IT
9714 /* VEX_LEN_0F41_P_2 */
9715 {
9716 { Bad_Opcode },
9717 { VEX_W_TABLE (VEX_W_0F41_P_2_LEN_1) },
9718 },
43234a1e
L
9719 /* VEX_LEN_0F42_P_0 */
9720 {
9721 { Bad_Opcode },
9722 { VEX_W_TABLE (VEX_W_0F42_P_0_LEN_1) },
9723 },
1ba585e8
IT
9724 /* VEX_LEN_0F42_P_2 */
9725 {
9726 { Bad_Opcode },
9727 { VEX_W_TABLE (VEX_W_0F42_P_2_LEN_1) },
9728 },
43234a1e
L
9729 /* VEX_LEN_0F44_P_0 */
9730 {
9731 { VEX_W_TABLE (VEX_W_0F44_P_0_LEN_0) },
9732 },
1ba585e8
IT
9733 /* VEX_LEN_0F44_P_2 */
9734 {
9735 { VEX_W_TABLE (VEX_W_0F44_P_2_LEN_0) },
9736 },
43234a1e
L
9737 /* VEX_LEN_0F45_P_0 */
9738 {
9739 { Bad_Opcode },
9740 { VEX_W_TABLE (VEX_W_0F45_P_0_LEN_1) },
9741 },
1ba585e8
IT
9742 /* VEX_LEN_0F45_P_2 */
9743 {
9744 { Bad_Opcode },
9745 { VEX_W_TABLE (VEX_W_0F45_P_2_LEN_1) },
9746 },
43234a1e
L
9747 /* VEX_LEN_0F46_P_0 */
9748 {
9749 { Bad_Opcode },
9750 { VEX_W_TABLE (VEX_W_0F46_P_0_LEN_1) },
9751 },
1ba585e8
IT
9752 /* VEX_LEN_0F46_P_2 */
9753 {
9754 { Bad_Opcode },
9755 { VEX_W_TABLE (VEX_W_0F46_P_2_LEN_1) },
9756 },
43234a1e
L
9757 /* VEX_LEN_0F47_P_0 */
9758 {
9759 { Bad_Opcode },
9760 { VEX_W_TABLE (VEX_W_0F47_P_0_LEN_1) },
9761 },
1ba585e8
IT
9762 /* VEX_LEN_0F47_P_2 */
9763 {
9764 { Bad_Opcode },
9765 { VEX_W_TABLE (VEX_W_0F47_P_2_LEN_1) },
9766 },
9767 /* VEX_LEN_0F4A_P_0 */
9768 {
9769 { Bad_Opcode },
9770 { VEX_W_TABLE (VEX_W_0F4A_P_0_LEN_1) },
9771 },
9772 /* VEX_LEN_0F4A_P_2 */
9773 {
9774 { Bad_Opcode },
9775 { VEX_W_TABLE (VEX_W_0F4A_P_2_LEN_1) },
9776 },
9777 /* VEX_LEN_0F4B_P_0 */
9778 {
9779 { Bad_Opcode },
9780 { VEX_W_TABLE (VEX_W_0F4B_P_0_LEN_1) },
9781 },
43234a1e
L
9782 /* VEX_LEN_0F4B_P_2 */
9783 {
9784 { Bad_Opcode },
9785 { VEX_W_TABLE (VEX_W_0F4B_P_2_LEN_1) },
9786 },
9787
592a252b 9788 /* VEX_LEN_0F51_P_1 */
c0f3af97 9789 {
592a252b
L
9790 { VEX_W_TABLE (VEX_W_0F51_P_1) },
9791 { VEX_W_TABLE (VEX_W_0F51_P_1) },
c0f3af97
L
9792 },
9793
592a252b 9794 /* VEX_LEN_0F51_P_3 */
c0f3af97 9795 {
592a252b
L
9796 { VEX_W_TABLE (VEX_W_0F51_P_3) },
9797 { VEX_W_TABLE (VEX_W_0F51_P_3) },
c0f3af97
L
9798 },
9799
592a252b 9800 /* VEX_LEN_0F52_P_1 */
c0f3af97 9801 {
592a252b
L
9802 { VEX_W_TABLE (VEX_W_0F52_P_1) },
9803 { VEX_W_TABLE (VEX_W_0F52_P_1) },
c0f3af97
L
9804 },
9805
592a252b 9806 /* VEX_LEN_0F53_P_1 */
c0f3af97 9807 {
592a252b
L
9808 { VEX_W_TABLE (VEX_W_0F53_P_1) },
9809 { VEX_W_TABLE (VEX_W_0F53_P_1) },
c0f3af97
L
9810 },
9811
592a252b 9812 /* VEX_LEN_0F58_P_1 */
c0f3af97 9813 {
592a252b
L
9814 { VEX_W_TABLE (VEX_W_0F58_P_1) },
9815 { VEX_W_TABLE (VEX_W_0F58_P_1) },
c0f3af97
L
9816 },
9817
592a252b 9818 /* VEX_LEN_0F58_P_3 */
c0f3af97 9819 {
592a252b
L
9820 { VEX_W_TABLE (VEX_W_0F58_P_3) },
9821 { VEX_W_TABLE (VEX_W_0F58_P_3) },
c0f3af97
L
9822 },
9823
592a252b 9824 /* VEX_LEN_0F59_P_1 */
c0f3af97 9825 {
592a252b
L
9826 { VEX_W_TABLE (VEX_W_0F59_P_1) },
9827 { VEX_W_TABLE (VEX_W_0F59_P_1) },
c0f3af97
L
9828 },
9829
592a252b 9830 /* VEX_LEN_0F59_P_3 */
c0f3af97 9831 {
592a252b
L
9832 { VEX_W_TABLE (VEX_W_0F59_P_3) },
9833 { VEX_W_TABLE (VEX_W_0F59_P_3) },
c0f3af97
L
9834 },
9835
592a252b 9836 /* VEX_LEN_0F5A_P_1 */
c0f3af97 9837 {
592a252b
L
9838 { VEX_W_TABLE (VEX_W_0F5A_P_1) },
9839 { VEX_W_TABLE (VEX_W_0F5A_P_1) },
c0f3af97
L
9840 },
9841
592a252b 9842 /* VEX_LEN_0F5A_P_3 */
c0f3af97 9843 {
592a252b
L
9844 { VEX_W_TABLE (VEX_W_0F5A_P_3) },
9845 { VEX_W_TABLE (VEX_W_0F5A_P_3) },
c0f3af97
L
9846 },
9847
592a252b 9848 /* VEX_LEN_0F5C_P_1 */
c0f3af97 9849 {
592a252b
L
9850 { VEX_W_TABLE (VEX_W_0F5C_P_1) },
9851 { VEX_W_TABLE (VEX_W_0F5C_P_1) },
c0f3af97
L
9852 },
9853
592a252b 9854 /* VEX_LEN_0F5C_P_3 */
c0f3af97 9855 {
592a252b
L
9856 { VEX_W_TABLE (VEX_W_0F5C_P_3) },
9857 { VEX_W_TABLE (VEX_W_0F5C_P_3) },
c0f3af97
L
9858 },
9859
592a252b 9860 /* VEX_LEN_0F5D_P_1 */
c0f3af97 9861 {
592a252b
L
9862 { VEX_W_TABLE (VEX_W_0F5D_P_1) },
9863 { VEX_W_TABLE (VEX_W_0F5D_P_1) },
c0f3af97
L
9864 },
9865
592a252b 9866 /* VEX_LEN_0F5D_P_3 */
c0f3af97 9867 {
592a252b
L
9868 { VEX_W_TABLE (VEX_W_0F5D_P_3) },
9869 { VEX_W_TABLE (VEX_W_0F5D_P_3) },
c0f3af97
L
9870 },
9871
592a252b 9872 /* VEX_LEN_0F5E_P_1 */
c0f3af97 9873 {
592a252b
L
9874 { VEX_W_TABLE (VEX_W_0F5E_P_1) },
9875 { VEX_W_TABLE (VEX_W_0F5E_P_1) },
c0f3af97
L
9876 },
9877
592a252b 9878 /* VEX_LEN_0F5E_P_3 */
c0f3af97 9879 {
592a252b
L
9880 { VEX_W_TABLE (VEX_W_0F5E_P_3) },
9881 { VEX_W_TABLE (VEX_W_0F5E_P_3) },
c0f3af97
L
9882 },
9883
592a252b 9884 /* VEX_LEN_0F5F_P_1 */
c0f3af97 9885 {
592a252b
L
9886 { VEX_W_TABLE (VEX_W_0F5F_P_1) },
9887 { VEX_W_TABLE (VEX_W_0F5F_P_1) },
c0f3af97
L
9888 },
9889
592a252b 9890 /* VEX_LEN_0F5F_P_3 */
c0f3af97 9891 {
592a252b
L
9892 { VEX_W_TABLE (VEX_W_0F5F_P_3) },
9893 { VEX_W_TABLE (VEX_W_0F5F_P_3) },
c0f3af97
L
9894 },
9895
592a252b 9896 /* VEX_LEN_0F6E_P_2 */
c0f3af97 9897 {
bf890a93
IT
9898 { "vmovK", { XMScalar, Edq }, 0 },
9899 { "vmovK", { XMScalar, Edq }, 0 },
c0f3af97
L
9900 },
9901
592a252b 9902 /* VEX_LEN_0F7E_P_1 */
c0f3af97 9903 {
592a252b
L
9904 { VEX_W_TABLE (VEX_W_0F7E_P_1) },
9905 { VEX_W_TABLE (VEX_W_0F7E_P_1) },
c0f3af97
L
9906 },
9907
592a252b 9908 /* VEX_LEN_0F7E_P_2 */
c0f3af97 9909 {
bf890a93
IT
9910 { "vmovK", { Edq, XMScalar }, 0 },
9911 { "vmovK", { Edq, XMScalar }, 0 },
c0f3af97
L
9912 },
9913
43234a1e
L
9914 /* VEX_LEN_0F90_P_0 */
9915 {
9916 { VEX_W_TABLE (VEX_W_0F90_P_0_LEN_0) },
9917 },
9918
1ba585e8
IT
9919 /* VEX_LEN_0F90_P_2 */
9920 {
9921 { VEX_W_TABLE (VEX_W_0F90_P_2_LEN_0) },
9922 },
9923
43234a1e
L
9924 /* VEX_LEN_0F91_P_0 */
9925 {
9926 { VEX_W_TABLE (VEX_W_0F91_P_0_LEN_0) },
9927 },
9928
1ba585e8
IT
9929 /* VEX_LEN_0F91_P_2 */
9930 {
9931 { VEX_W_TABLE (VEX_W_0F91_P_2_LEN_0) },
9932 },
9933
43234a1e
L
9934 /* VEX_LEN_0F92_P_0 */
9935 {
9936 { VEX_W_TABLE (VEX_W_0F92_P_0_LEN_0) },
9937 },
9938
90a915bf
IT
9939 /* VEX_LEN_0F92_P_2 */
9940 {
9941 { VEX_W_TABLE (VEX_W_0F92_P_2_LEN_0) },
9942 },
9943
1ba585e8
IT
9944 /* VEX_LEN_0F92_P_3 */
9945 {
9946 { VEX_W_TABLE (VEX_W_0F92_P_3_LEN_0) },
9947 },
9948
43234a1e
L
9949 /* VEX_LEN_0F93_P_0 */
9950 {
9951 { VEX_W_TABLE (VEX_W_0F93_P_0_LEN_0) },
9952 },
9953
90a915bf
IT
9954 /* VEX_LEN_0F93_P_2 */
9955 {
9956 { VEX_W_TABLE (VEX_W_0F93_P_2_LEN_0) },
9957 },
9958
1ba585e8
IT
9959 /* VEX_LEN_0F93_P_3 */
9960 {
9961 { VEX_W_TABLE (VEX_W_0F93_P_3_LEN_0) },
9962 },
9963
43234a1e
L
9964 /* VEX_LEN_0F98_P_0 */
9965 {
9966 { VEX_W_TABLE (VEX_W_0F98_P_0_LEN_0) },
9967 },
9968
1ba585e8
IT
9969 /* VEX_LEN_0F98_P_2 */
9970 {
9971 { VEX_W_TABLE (VEX_W_0F98_P_2_LEN_0) },
9972 },
9973
9974 /* VEX_LEN_0F99_P_0 */
9975 {
9976 { VEX_W_TABLE (VEX_W_0F99_P_0_LEN_0) },
9977 },
9978
9979 /* VEX_LEN_0F99_P_2 */
9980 {
9981 { VEX_W_TABLE (VEX_W_0F99_P_2_LEN_0) },
9982 },
9983
6c30d220 9984 /* VEX_LEN_0FAE_R_2_M_0 */
c0f3af97 9985 {
6c30d220 9986 { VEX_W_TABLE (VEX_W_0FAE_R_2_M_0) },
c0f3af97
L
9987 },
9988
6c30d220 9989 /* VEX_LEN_0FAE_R_3_M_0 */
c0f3af97 9990 {
6c30d220 9991 { VEX_W_TABLE (VEX_W_0FAE_R_3_M_0) },
c0f3af97
L
9992 },
9993
6c30d220 9994 /* VEX_LEN_0FC2_P_1 */
c0f3af97 9995 {
6c30d220
L
9996 { VEX_W_TABLE (VEX_W_0FC2_P_1) },
9997 { VEX_W_TABLE (VEX_W_0FC2_P_1) },
c0f3af97
L
9998 },
9999
6c30d220 10000 /* VEX_LEN_0FC2_P_3 */
c0f3af97 10001 {
6c30d220
L
10002 { VEX_W_TABLE (VEX_W_0FC2_P_3) },
10003 { VEX_W_TABLE (VEX_W_0FC2_P_3) },
c0f3af97
L
10004 },
10005
6c30d220 10006 /* VEX_LEN_0FC4_P_2 */
c0f3af97 10007 {
6c30d220 10008 { VEX_W_TABLE (VEX_W_0FC4_P_2) },
c0f3af97
L
10009 },
10010
6c30d220 10011 /* VEX_LEN_0FC5_P_2 */
c0f3af97 10012 {
6c30d220 10013 { VEX_W_TABLE (VEX_W_0FC5_P_2) },
c0f3af97
L
10014 },
10015
6c30d220 10016 /* VEX_LEN_0FD6_P_2 */
c0f3af97 10017 {
6c30d220
L
10018 { VEX_W_TABLE (VEX_W_0FD6_P_2) },
10019 { VEX_W_TABLE (VEX_W_0FD6_P_2) },
c0f3af97
L
10020 },
10021
6c30d220 10022 /* VEX_LEN_0FF7_P_2 */
c0f3af97 10023 {
6c30d220 10024 { VEX_W_TABLE (VEX_W_0FF7_P_2) },
c0f3af97
L
10025 },
10026
6c30d220 10027 /* VEX_LEN_0F3816_P_2 */
c0f3af97 10028 {
6c30d220
L
10029 { Bad_Opcode },
10030 { VEX_W_TABLE (VEX_W_0F3816_P_2) },
c0f3af97
L
10031 },
10032
6c30d220 10033 /* VEX_LEN_0F3819_P_2 */
c0f3af97 10034 {
6c30d220
L
10035 { Bad_Opcode },
10036 { VEX_W_TABLE (VEX_W_0F3819_P_2) },
c0f3af97
L
10037 },
10038
6c30d220 10039 /* VEX_LEN_0F381A_P_2_M_0 */
c0f3af97 10040 {
6c30d220
L
10041 { Bad_Opcode },
10042 { VEX_W_TABLE (VEX_W_0F381A_P_2_M_0) },
c0f3af97
L
10043 },
10044
6c30d220 10045 /* VEX_LEN_0F3836_P_2 */
c0f3af97 10046 {
6c30d220
L
10047 { Bad_Opcode },
10048 { VEX_W_TABLE (VEX_W_0F3836_P_2) },
c0f3af97
L
10049 },
10050
592a252b 10051 /* VEX_LEN_0F3841_P_2 */
c0f3af97 10052 {
592a252b 10053 { VEX_W_TABLE (VEX_W_0F3841_P_2) },
c0f3af97
L
10054 },
10055
6c30d220
L
10056 /* VEX_LEN_0F385A_P_2_M_0 */
10057 {
10058 { Bad_Opcode },
10059 { VEX_W_TABLE (VEX_W_0F385A_P_2_M_0) },
10060 },
10061
592a252b 10062 /* VEX_LEN_0F38DB_P_2 */
a5ff0eb2 10063 {
592a252b 10064 { VEX_W_TABLE (VEX_W_0F38DB_P_2) },
a5ff0eb2
L
10065 },
10066
592a252b 10067 /* VEX_LEN_0F38DC_P_2 */
a5ff0eb2 10068 {
592a252b 10069 { VEX_W_TABLE (VEX_W_0F38DC_P_2) },
a5ff0eb2
L
10070 },
10071
592a252b 10072 /* VEX_LEN_0F38DD_P_2 */
a5ff0eb2 10073 {
592a252b 10074 { VEX_W_TABLE (VEX_W_0F38DD_P_2) },
a5ff0eb2
L
10075 },
10076
592a252b 10077 /* VEX_LEN_0F38DE_P_2 */
a5ff0eb2 10078 {
592a252b 10079 { VEX_W_TABLE (VEX_W_0F38DE_P_2) },
a5ff0eb2
L
10080 },
10081
592a252b 10082 /* VEX_LEN_0F38DF_P_2 */
a5ff0eb2 10083 {
592a252b 10084 { VEX_W_TABLE (VEX_W_0F38DF_P_2) },
a5ff0eb2
L
10085 },
10086
f12dc422
L
10087 /* VEX_LEN_0F38F2_P_0 */
10088 {
bf890a93 10089 { "andnS", { Gdq, VexGdq, Edq }, 0 },
f12dc422
L
10090 },
10091
10092 /* VEX_LEN_0F38F3_R_1_P_0 */
10093 {
bf890a93 10094 { "blsrS", { VexGdq, Edq }, 0 },
f12dc422
L
10095 },
10096
10097 /* VEX_LEN_0F38F3_R_2_P_0 */
10098 {
bf890a93 10099 { "blsmskS", { VexGdq, Edq }, 0 },
f12dc422
L
10100 },
10101
10102 /* VEX_LEN_0F38F3_R_3_P_0 */
10103 {
bf890a93 10104 { "blsiS", { VexGdq, Edq }, 0 },
f12dc422
L
10105 },
10106
6c30d220
L
10107 /* VEX_LEN_0F38F5_P_0 */
10108 {
bf890a93 10109 { "bzhiS", { Gdq, Edq, VexGdq }, 0 },
6c30d220
L
10110 },
10111
10112 /* VEX_LEN_0F38F5_P_1 */
10113 {
bf890a93 10114 { "pextS", { Gdq, VexGdq, Edq }, 0 },
6c30d220
L
10115 },
10116
10117 /* VEX_LEN_0F38F5_P_3 */
10118 {
bf890a93 10119 { "pdepS", { Gdq, VexGdq, Edq }, 0 },
6c30d220
L
10120 },
10121
10122 /* VEX_LEN_0F38F6_P_3 */
10123 {
bf890a93 10124 { "mulxS", { Gdq, VexGdq, Edq }, 0 },
6c30d220
L
10125 },
10126
f12dc422
L
10127 /* VEX_LEN_0F38F7_P_0 */
10128 {
bf890a93 10129 { "bextrS", { Gdq, Edq, VexGdq }, 0 },
f12dc422
L
10130 },
10131
6c30d220
L
10132 /* VEX_LEN_0F38F7_P_1 */
10133 {
bf890a93 10134 { "sarxS", { Gdq, Edq, VexGdq }, 0 },
6c30d220
L
10135 },
10136
10137 /* VEX_LEN_0F38F7_P_2 */
10138 {
bf890a93 10139 { "shlxS", { Gdq, Edq, VexGdq }, 0 },
6c30d220
L
10140 },
10141
10142 /* VEX_LEN_0F38F7_P_3 */
10143 {
bf890a93 10144 { "shrxS", { Gdq, Edq, VexGdq }, 0 },
6c30d220
L
10145 },
10146
10147 /* VEX_LEN_0F3A00_P_2 */
10148 {
10149 { Bad_Opcode },
10150 { VEX_W_TABLE (VEX_W_0F3A00_P_2) },
10151 },
10152
10153 /* VEX_LEN_0F3A01_P_2 */
10154 {
10155 { Bad_Opcode },
10156 { VEX_W_TABLE (VEX_W_0F3A01_P_2) },
10157 },
10158
592a252b 10159 /* VEX_LEN_0F3A06_P_2 */
c0f3af97 10160 {
592d1631 10161 { Bad_Opcode },
592a252b 10162 { VEX_W_TABLE (VEX_W_0F3A06_P_2) },
c0f3af97
L
10163 },
10164
592a252b 10165 /* VEX_LEN_0F3A0A_P_2 */
c0f3af97 10166 {
592a252b
L
10167 { VEX_W_TABLE (VEX_W_0F3A0A_P_2) },
10168 { VEX_W_TABLE (VEX_W_0F3A0A_P_2) },
c0f3af97
L
10169 },
10170
592a252b 10171 /* VEX_LEN_0F3A0B_P_2 */
c0f3af97 10172 {
592a252b
L
10173 { VEX_W_TABLE (VEX_W_0F3A0B_P_2) },
10174 { VEX_W_TABLE (VEX_W_0F3A0B_P_2) },
c0f3af97
L
10175 },
10176
592a252b 10177 /* VEX_LEN_0F3A14_P_2 */
c0f3af97 10178 {
592a252b 10179 { VEX_W_TABLE (VEX_W_0F3A14_P_2) },
c0f3af97
L
10180 },
10181
592a252b 10182 /* VEX_LEN_0F3A15_P_2 */
c0f3af97 10183 {
592a252b 10184 { VEX_W_TABLE (VEX_W_0F3A15_P_2) },
c0f3af97
L
10185 },
10186
592a252b 10187 /* VEX_LEN_0F3A16_P_2 */
c0f3af97 10188 {
bf890a93 10189 { "vpextrK", { Edq, XM, Ib }, 0 },
c0f3af97
L
10190 },
10191
592a252b 10192 /* VEX_LEN_0F3A17_P_2 */
c0f3af97 10193 {
bf890a93 10194 { "vextractps", { Edqd, XM, Ib }, 0 },
c0f3af97
L
10195 },
10196
592a252b 10197 /* VEX_LEN_0F3A18_P_2 */
c0f3af97 10198 {
592d1631 10199 { Bad_Opcode },
592a252b 10200 { VEX_W_TABLE (VEX_W_0F3A18_P_2) },
c0f3af97
L
10201 },
10202
592a252b 10203 /* VEX_LEN_0F3A19_P_2 */
c0f3af97 10204 {
592d1631 10205 { Bad_Opcode },
592a252b 10206 { VEX_W_TABLE (VEX_W_0F3A19_P_2) },
c0f3af97
L
10207 },
10208
592a252b 10209 /* VEX_LEN_0F3A20_P_2 */
c0f3af97 10210 {
592a252b 10211 { VEX_W_TABLE (VEX_W_0F3A20_P_2) },
c0f3af97
L
10212 },
10213
592a252b 10214 /* VEX_LEN_0F3A21_P_2 */
c0f3af97 10215 {
592a252b 10216 { VEX_W_TABLE (VEX_W_0F3A21_P_2) },
c0f3af97
L
10217 },
10218
592a252b 10219 /* VEX_LEN_0F3A22_P_2 */
c0f3af97 10220 {
bf890a93 10221 { "vpinsrK", { XM, Vex128, Edq, Ib }, 0 },
c0f3af97
L
10222 },
10223
43234a1e
L
10224 /* VEX_LEN_0F3A30_P_2 */
10225 {
10226 { VEX_W_TABLE (VEX_W_0F3A30_P_2_LEN_0) },
10227 },
10228
1ba585e8
IT
10229 /* VEX_LEN_0F3A31_P_2 */
10230 {
10231 { VEX_W_TABLE (VEX_W_0F3A31_P_2_LEN_0) },
10232 },
10233
43234a1e
L
10234 /* VEX_LEN_0F3A32_P_2 */
10235 {
10236 { VEX_W_TABLE (VEX_W_0F3A32_P_2_LEN_0) },
10237 },
10238
1ba585e8
IT
10239 /* VEX_LEN_0F3A33_P_2 */
10240 {
10241 { VEX_W_TABLE (VEX_W_0F3A33_P_2_LEN_0) },
10242 },
10243
6c30d220 10244 /* VEX_LEN_0F3A38_P_2 */
c0f3af97 10245 {
6c30d220
L
10246 { Bad_Opcode },
10247 { VEX_W_TABLE (VEX_W_0F3A38_P_2) },
c0f3af97
L
10248 },
10249
6c30d220 10250 /* VEX_LEN_0F3A39_P_2 */
c0f3af97 10251 {
6c30d220
L
10252 { Bad_Opcode },
10253 { VEX_W_TABLE (VEX_W_0F3A39_P_2) },
10254 },
10255
10256 /* VEX_LEN_0F3A41_P_2 */
10257 {
10258 { VEX_W_TABLE (VEX_W_0F3A41_P_2) },
c0f3af97
L
10259 },
10260
592a252b 10261 /* VEX_LEN_0F3A44_P_2 */
ce2f5b3c 10262 {
592a252b 10263 { VEX_W_TABLE (VEX_W_0F3A44_P_2) },
ce2f5b3c
L
10264 },
10265
6c30d220 10266 /* VEX_LEN_0F3A46_P_2 */
c0f3af97 10267 {
6c30d220
L
10268 { Bad_Opcode },
10269 { VEX_W_TABLE (VEX_W_0F3A46_P_2) },
c0f3af97
L
10270 },
10271
592a252b 10272 /* VEX_LEN_0F3A60_P_2 */
c0f3af97 10273 {
592a252b 10274 { VEX_W_TABLE (VEX_W_0F3A60_P_2) },
c0f3af97
L
10275 },
10276
592a252b 10277 /* VEX_LEN_0F3A61_P_2 */
c0f3af97 10278 {
592a252b 10279 { VEX_W_TABLE (VEX_W_0F3A61_P_2) },
c0f3af97
L
10280 },
10281
592a252b 10282 /* VEX_LEN_0F3A62_P_2 */
c0f3af97 10283 {
592a252b 10284 { VEX_W_TABLE (VEX_W_0F3A62_P_2) },
c0f3af97
L
10285 },
10286
592a252b 10287 /* VEX_LEN_0F3A63_P_2 */
c0f3af97 10288 {
592a252b 10289 { VEX_W_TABLE (VEX_W_0F3A63_P_2) },
c0f3af97
L
10290 },
10291
592a252b 10292 /* VEX_LEN_0F3A6A_P_2 */
922d8de8 10293 {
bf890a93 10294 { "vfmaddss", { XMVexW, Vex128, EXdVexW, EXdVexW, VexI4 }, 0 },
922d8de8
DR
10295 },
10296
592a252b 10297 /* VEX_LEN_0F3A6B_P_2 */
922d8de8 10298 {
bf890a93 10299 { "vfmaddsd", { XMVexW, Vex128, EXqVexW, EXqVexW, VexI4 }, 0 },
922d8de8
DR
10300 },
10301
592a252b 10302 /* VEX_LEN_0F3A6E_P_2 */
922d8de8 10303 {
bf890a93 10304 { "vfmsubss", { XMVexW, Vex128, EXdVexW, EXdVexW, VexI4 }, 0 },
922d8de8
DR
10305 },
10306
592a252b 10307 /* VEX_LEN_0F3A6F_P_2 */
922d8de8 10308 {
bf890a93 10309 { "vfmsubsd", { XMVexW, Vex128, EXqVexW, EXqVexW, VexI4 }, 0 },
922d8de8
DR
10310 },
10311
592a252b 10312 /* VEX_LEN_0F3A7A_P_2 */
922d8de8 10313 {
bf890a93 10314 { "vfnmaddss", { XMVexW, Vex128, EXdVexW, EXdVexW, VexI4 }, 0 },
922d8de8
DR
10315 },
10316
592a252b 10317 /* VEX_LEN_0F3A7B_P_2 */
922d8de8 10318 {
bf890a93 10319 { "vfnmaddsd", { XMVexW, Vex128, EXqVexW, EXqVexW, VexI4 }, 0 },
922d8de8
DR
10320 },
10321
592a252b 10322 /* VEX_LEN_0F3A7E_P_2 */
922d8de8 10323 {
bf890a93 10324 { "vfnmsubss", { XMVexW, Vex128, EXdVexW, EXdVexW, VexI4 }, 0 },
922d8de8
DR
10325 },
10326
592a252b 10327 /* VEX_LEN_0F3A7F_P_2 */
922d8de8 10328 {
bf890a93 10329 { "vfnmsubsd", { XMVexW, Vex128, EXqVexW, EXqVexW, VexI4 }, 0 },
922d8de8
DR
10330 },
10331
592a252b 10332 /* VEX_LEN_0F3ADF_P_2 */
a5ff0eb2 10333 {
592a252b 10334 { VEX_W_TABLE (VEX_W_0F3ADF_P_2) },
a5ff0eb2 10335 },
4c807e72 10336
6c30d220
L
10337 /* VEX_LEN_0F3AF0_P_3 */
10338 {
bf890a93 10339 { "rorxS", { Gdq, Edq, Ib }, 0 },
6c30d220
L
10340 },
10341
ff688e1f
L
10342 /* VEX_LEN_0FXOP_08_CC */
10343 {
bf890a93 10344 { "vpcomb", { XM, Vex128, EXx, Ib }, 0 },
ff688e1f
L
10345 },
10346
10347 /* VEX_LEN_0FXOP_08_CD */
10348 {
bf890a93 10349 { "vpcomw", { XM, Vex128, EXx, Ib }, 0 },
ff688e1f
L
10350 },
10351
10352 /* VEX_LEN_0FXOP_08_CE */
10353 {
bf890a93 10354 { "vpcomd", { XM, Vex128, EXx, Ib }, 0 },
ff688e1f
L
10355 },
10356
10357 /* VEX_LEN_0FXOP_08_CF */
10358 {
bf890a93 10359 { "vpcomq", { XM, Vex128, EXx, Ib }, 0 },
ff688e1f
L
10360 },
10361
10362 /* VEX_LEN_0FXOP_08_EC */
10363 {
bf890a93 10364 { "vpcomub", { XM, Vex128, EXx, Ib }, 0 },
ff688e1f
L
10365 },
10366
10367 /* VEX_LEN_0FXOP_08_ED */
10368 {
bf890a93 10369 { "vpcomuw", { XM, Vex128, EXx, Ib }, 0 },
ff688e1f
L
10370 },
10371
10372 /* VEX_LEN_0FXOP_08_EE */
10373 {
bf890a93 10374 { "vpcomud", { XM, Vex128, EXx, Ib }, 0 },
ff688e1f
L
10375 },
10376
10377 /* VEX_LEN_0FXOP_08_EF */
10378 {
bf890a93 10379 { "vpcomuq", { XM, Vex128, EXx, Ib }, 0 },
ff688e1f
L
10380 },
10381
592a252b 10382 /* VEX_LEN_0FXOP_09_80 */
5dd85c99 10383 {
bf890a93
IT
10384 { "vfrczps", { XM, EXxmm }, 0 },
10385 { "vfrczps", { XM, EXymmq }, 0 },
5dd85c99 10386 },
4c807e72 10387
592a252b 10388 /* VEX_LEN_0FXOP_09_81 */
5dd85c99 10389 {
bf890a93
IT
10390 { "vfrczpd", { XM, EXxmm }, 0 },
10391 { "vfrczpd", { XM, EXymmq }, 0 },
5dd85c99 10392 },
331d2d0d
L
10393};
10394
9e30b8e0 10395static const struct dis386 vex_w_table[][2] = {
b844680a 10396 {
592a252b 10397 /* VEX_W_0F10_P_0 */
bf890a93 10398 { "vmovups", { XM, EXx }, 0 },
d8faab4e
L
10399 },
10400 {
592a252b 10401 /* VEX_W_0F10_P_1 */
bf890a93 10402 { "vmovss", { XMVexScalar, VexScalar, EXdScalar }, 0 },
d8faab4e
L
10403 },
10404 {
592a252b 10405 /* VEX_W_0F10_P_2 */
bf890a93 10406 { "vmovupd", { XM, EXx }, 0 },
d8faab4e
L
10407 },
10408 {
592a252b 10409 /* VEX_W_0F10_P_3 */
bf890a93 10410 { "vmovsd", { XMVexScalar, VexScalar, EXqScalar }, 0 },
d8faab4e
L
10411 },
10412 {
592a252b 10413 /* VEX_W_0F11_P_0 */
bf890a93 10414 { "vmovups", { EXxS, XM }, 0 },
d8faab4e
L
10415 },
10416 {
592a252b 10417 /* VEX_W_0F11_P_1 */
bf890a93 10418 { "vmovss", { EXdVexScalarS, VexScalar, XMScalar }, 0 },
b844680a
L
10419 },
10420 {
592a252b 10421 /* VEX_W_0F11_P_2 */
bf890a93 10422 { "vmovupd", { EXxS, XM }, 0 },
b844680a
L
10423 },
10424 {
592a252b 10425 /* VEX_W_0F11_P_3 */
bf890a93 10426 { "vmovsd", { EXqVexScalarS, VexScalar, XMScalar }, 0 },
d8faab4e
L
10427 },
10428 {
592a252b 10429 /* VEX_W_0F12_P_0_M_0 */
bf890a93 10430 { "vmovlps", { XM, Vex128, EXq }, 0 },
b844680a
L
10431 },
10432 {
592a252b 10433 /* VEX_W_0F12_P_0_M_1 */
bf890a93 10434 { "vmovhlps", { XM, Vex128, EXq }, 0 },
b844680a
L
10435 },
10436 {
592a252b 10437 /* VEX_W_0F12_P_1 */
bf890a93 10438 { "vmovsldup", { XM, EXx }, 0 },
b844680a
L
10439 },
10440 {
592a252b 10441 /* VEX_W_0F12_P_2 */
bf890a93 10442 { "vmovlpd", { XM, Vex128, EXq }, 0 },
b844680a
L
10443 },
10444 {
592a252b 10445 /* VEX_W_0F12_P_3 */
bf890a93 10446 { "vmovddup", { XM, EXymmq }, 0 },
b844680a
L
10447 },
10448 {
592a252b 10449 /* VEX_W_0F13_M_0 */
bf890a93 10450 { "vmovlpX", { EXq, XM }, 0 },
b844680a
L
10451 },
10452 {
592a252b 10453 /* VEX_W_0F14 */
bf890a93 10454 { "vunpcklpX", { XM, Vex, EXx }, 0 },
b844680a
L
10455 },
10456 {
592a252b 10457 /* VEX_W_0F15 */
bf890a93 10458 { "vunpckhpX", { XM, Vex, EXx }, 0 },
b844680a
L
10459 },
10460 {
592a252b 10461 /* VEX_W_0F16_P_0_M_0 */
bf890a93 10462 { "vmovhps", { XM, Vex128, EXq }, 0 },
9e30b8e0
L
10463 },
10464 {
592a252b 10465 /* VEX_W_0F16_P_0_M_1 */
bf890a93 10466 { "vmovlhps", { XM, Vex128, EXq }, 0 },
9e30b8e0
L
10467 },
10468 {
592a252b 10469 /* VEX_W_0F16_P_1 */
bf890a93 10470 { "vmovshdup", { XM, EXx }, 0 },
9e30b8e0
L
10471 },
10472 {
592a252b 10473 /* VEX_W_0F16_P_2 */
bf890a93 10474 { "vmovhpd", { XM, Vex128, EXq }, 0 },
9e30b8e0
L
10475 },
10476 {
592a252b 10477 /* VEX_W_0F17_M_0 */
bf890a93 10478 { "vmovhpX", { EXq, XM }, 0 },
9e30b8e0
L
10479 },
10480 {
592a252b 10481 /* VEX_W_0F28 */
bf890a93 10482 { "vmovapX", { XM, EXx }, 0 },
9e30b8e0
L
10483 },
10484 {
592a252b 10485 /* VEX_W_0F29 */
bf890a93 10486 { "vmovapX", { EXxS, XM }, 0 },
9e30b8e0
L
10487 },
10488 {
592a252b 10489 /* VEX_W_0F2B_M_0 */
bf890a93 10490 { "vmovntpX", { Mx, XM }, 0 },
9e30b8e0
L
10491 },
10492 {
592a252b 10493 /* VEX_W_0F2E_P_0 */
bf890a93 10494 { "vucomiss", { XMScalar, EXdScalar }, 0 },
9e30b8e0
L
10495 },
10496 {
592a252b 10497 /* VEX_W_0F2E_P_2 */
bf890a93 10498 { "vucomisd", { XMScalar, EXqScalar }, 0 },
9e30b8e0
L
10499 },
10500 {
592a252b 10501 /* VEX_W_0F2F_P_0 */
bf890a93 10502 { "vcomiss", { XMScalar, EXdScalar }, 0 },
9e30b8e0
L
10503 },
10504 {
592a252b 10505 /* VEX_W_0F2F_P_2 */
bf890a93 10506 { "vcomisd", { XMScalar, EXqScalar }, 0 },
9e30b8e0 10507 },
43234a1e
L
10508 {
10509 /* VEX_W_0F41_P_0_LEN_1 */
ab4e4ed5
AF
10510 { MOD_TABLE (MOD_VEX_W_0_0F41_P_0_LEN_1) },
10511 { MOD_TABLE (MOD_VEX_W_1_0F41_P_0_LEN_1) },
1ba585e8
IT
10512 },
10513 {
10514 /* VEX_W_0F41_P_2_LEN_1 */
ab4e4ed5
AF
10515 { MOD_TABLE (MOD_VEX_W_0_0F41_P_2_LEN_1) },
10516 { MOD_TABLE (MOD_VEX_W_1_0F41_P_2_LEN_1) }
43234a1e
L
10517 },
10518 {
10519 /* VEX_W_0F42_P_0_LEN_1 */
ab4e4ed5
AF
10520 { MOD_TABLE (MOD_VEX_W_0_0F42_P_0_LEN_1) },
10521 { MOD_TABLE (MOD_VEX_W_1_0F42_P_0_LEN_1) },
1ba585e8
IT
10522 },
10523 {
10524 /* VEX_W_0F42_P_2_LEN_1 */
ab4e4ed5
AF
10525 { MOD_TABLE (MOD_VEX_W_0_0F42_P_2_LEN_1) },
10526 { MOD_TABLE (MOD_VEX_W_1_0F42_P_2_LEN_1) },
43234a1e
L
10527 },
10528 {
10529 /* VEX_W_0F44_P_0_LEN_0 */
ab4e4ed5
AF
10530 { MOD_TABLE (MOD_VEX_W_0_0F44_P_0_LEN_1) },
10531 { MOD_TABLE (MOD_VEX_W_1_0F44_P_0_LEN_1) },
1ba585e8
IT
10532 },
10533 {
10534 /* VEX_W_0F44_P_2_LEN_0 */
ab4e4ed5
AF
10535 { MOD_TABLE (MOD_VEX_W_0_0F44_P_2_LEN_1) },
10536 { MOD_TABLE (MOD_VEX_W_1_0F44_P_2_LEN_1) },
43234a1e
L
10537 },
10538 {
10539 /* VEX_W_0F45_P_0_LEN_1 */
ab4e4ed5
AF
10540 { MOD_TABLE (MOD_VEX_W_0_0F45_P_0_LEN_1) },
10541 { MOD_TABLE (MOD_VEX_W_1_0F45_P_0_LEN_1) },
1ba585e8
IT
10542 },
10543 {
10544 /* VEX_W_0F45_P_2_LEN_1 */
ab4e4ed5
AF
10545 { MOD_TABLE (MOD_VEX_W_0_0F45_P_2_LEN_1) },
10546 { MOD_TABLE (MOD_VEX_W_1_0F45_P_2_LEN_1) },
43234a1e
L
10547 },
10548 {
10549 /* VEX_W_0F46_P_0_LEN_1 */
ab4e4ed5
AF
10550 { MOD_TABLE (MOD_VEX_W_0_0F46_P_0_LEN_1) },
10551 { MOD_TABLE (MOD_VEX_W_1_0F46_P_0_LEN_1) },
1ba585e8
IT
10552 },
10553 {
10554 /* VEX_W_0F46_P_2_LEN_1 */
ab4e4ed5
AF
10555 { MOD_TABLE (MOD_VEX_W_0_0F46_P_2_LEN_1) },
10556 { MOD_TABLE (MOD_VEX_W_1_0F46_P_2_LEN_1) },
43234a1e
L
10557 },
10558 {
10559 /* VEX_W_0F47_P_0_LEN_1 */
ab4e4ed5
AF
10560 { MOD_TABLE (MOD_VEX_W_0_0F47_P_0_LEN_1) },
10561 { MOD_TABLE (MOD_VEX_W_1_0F47_P_0_LEN_1) },
1ba585e8
IT
10562 },
10563 {
10564 /* VEX_W_0F47_P_2_LEN_1 */
ab4e4ed5
AF
10565 { MOD_TABLE (MOD_VEX_W_0_0F47_P_2_LEN_1) },
10566 { MOD_TABLE (MOD_VEX_W_1_0F47_P_2_LEN_1) },
1ba585e8
IT
10567 },
10568 {
10569 /* VEX_W_0F4A_P_0_LEN_1 */
ab4e4ed5
AF
10570 { MOD_TABLE (MOD_VEX_W_0_0F4A_P_0_LEN_1) },
10571 { MOD_TABLE (MOD_VEX_W_1_0F4A_P_0_LEN_1) },
1ba585e8
IT
10572 },
10573 {
10574 /* VEX_W_0F4A_P_2_LEN_1 */
ab4e4ed5
AF
10575 { MOD_TABLE (MOD_VEX_W_0_0F4A_P_2_LEN_1) },
10576 { MOD_TABLE (MOD_VEX_W_1_0F4A_P_2_LEN_1) },
1ba585e8
IT
10577 },
10578 {
10579 /* VEX_W_0F4B_P_0_LEN_1 */
ab4e4ed5
AF
10580 { MOD_TABLE (MOD_VEX_W_0_0F4B_P_0_LEN_1) },
10581 { MOD_TABLE (MOD_VEX_W_1_0F4B_P_0_LEN_1) },
43234a1e
L
10582 },
10583 {
10584 /* VEX_W_0F4B_P_2_LEN_1 */
ab4e4ed5 10585 { MOD_TABLE (MOD_VEX_W_0_0F4B_P_2_LEN_1) },
43234a1e 10586 },
9e30b8e0 10587 {
592a252b 10588 /* VEX_W_0F50_M_0 */
bf890a93 10589 { "vmovmskpX", { Gdq, XS }, 0 },
9e30b8e0
L
10590 },
10591 {
592a252b 10592 /* VEX_W_0F51_P_0 */
bf890a93 10593 { "vsqrtps", { XM, EXx }, 0 },
9e30b8e0
L
10594 },
10595 {
592a252b 10596 /* VEX_W_0F51_P_1 */
bf890a93 10597 { "vsqrtss", { XMScalar, VexScalar, EXdScalar }, 0 },
9e30b8e0
L
10598 },
10599 {
592a252b 10600 /* VEX_W_0F51_P_2 */
bf890a93 10601 { "vsqrtpd", { XM, EXx }, 0 },
9e30b8e0
L
10602 },
10603 {
592a252b 10604 /* VEX_W_0F51_P_3 */
bf890a93 10605 { "vsqrtsd", { XMScalar, VexScalar, EXqScalar }, 0 },
9e30b8e0
L
10606 },
10607 {
592a252b 10608 /* VEX_W_0F52_P_0 */
bf890a93 10609 { "vrsqrtps", { XM, EXx }, 0 },
9e30b8e0
L
10610 },
10611 {
592a252b 10612 /* VEX_W_0F52_P_1 */
bf890a93 10613 { "vrsqrtss", { XMScalar, VexScalar, EXdScalar }, 0 },
9e30b8e0
L
10614 },
10615 {
592a252b 10616 /* VEX_W_0F53_P_0 */
bf890a93 10617 { "vrcpps", { XM, EXx }, 0 },
9e30b8e0
L
10618 },
10619 {
592a252b 10620 /* VEX_W_0F53_P_1 */
bf890a93 10621 { "vrcpss", { XMScalar, VexScalar, EXdScalar }, 0 },
9e30b8e0
L
10622 },
10623 {
592a252b 10624 /* VEX_W_0F58_P_0 */
bf890a93 10625 { "vaddps", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10626 },
10627 {
592a252b 10628 /* VEX_W_0F58_P_1 */
bf890a93 10629 { "vaddss", { XMScalar, VexScalar, EXdScalar }, 0 },
9e30b8e0
L
10630 },
10631 {
592a252b 10632 /* VEX_W_0F58_P_2 */
bf890a93 10633 { "vaddpd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10634 },
10635 {
592a252b 10636 /* VEX_W_0F58_P_3 */
bf890a93 10637 { "vaddsd", { XMScalar, VexScalar, EXqScalar }, 0 },
9e30b8e0
L
10638 },
10639 {
592a252b 10640 /* VEX_W_0F59_P_0 */
bf890a93 10641 { "vmulps", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10642 },
10643 {
592a252b 10644 /* VEX_W_0F59_P_1 */
bf890a93 10645 { "vmulss", { XMScalar, VexScalar, EXdScalar }, 0 },
9e30b8e0
L
10646 },
10647 {
592a252b 10648 /* VEX_W_0F59_P_2 */
bf890a93 10649 { "vmulpd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10650 },
10651 {
592a252b 10652 /* VEX_W_0F59_P_3 */
bf890a93 10653 { "vmulsd", { XMScalar, VexScalar, EXqScalar }, 0 },
9e30b8e0
L
10654 },
10655 {
592a252b 10656 /* VEX_W_0F5A_P_0 */
bf890a93 10657 { "vcvtps2pd", { XM, EXxmmq }, 0 },
9e30b8e0
L
10658 },
10659 {
592a252b 10660 /* VEX_W_0F5A_P_1 */
bf890a93 10661 { "vcvtss2sd", { XMScalar, VexScalar, EXdScalar }, 0 },
9e30b8e0
L
10662 },
10663 {
592a252b 10664 /* VEX_W_0F5A_P_3 */
bf890a93 10665 { "vcvtsd2ss", { XMScalar, VexScalar, EXqScalar }, 0 },
9e30b8e0
L
10666 },
10667 {
592a252b 10668 /* VEX_W_0F5B_P_0 */
bf890a93 10669 { "vcvtdq2ps", { XM, EXx }, 0 },
9e30b8e0
L
10670 },
10671 {
592a252b 10672 /* VEX_W_0F5B_P_1 */
bf890a93 10673 { "vcvttps2dq", { XM, EXx }, 0 },
9e30b8e0
L
10674 },
10675 {
592a252b 10676 /* VEX_W_0F5B_P_2 */
bf890a93 10677 { "vcvtps2dq", { XM, EXx }, 0 },
9e30b8e0
L
10678 },
10679 {
592a252b 10680 /* VEX_W_0F5C_P_0 */
bf890a93 10681 { "vsubps", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10682 },
10683 {
592a252b 10684 /* VEX_W_0F5C_P_1 */
bf890a93 10685 { "vsubss", { XMScalar, VexScalar, EXdScalar }, 0 },
9e30b8e0
L
10686 },
10687 {
592a252b 10688 /* VEX_W_0F5C_P_2 */
bf890a93 10689 { "vsubpd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10690 },
10691 {
592a252b 10692 /* VEX_W_0F5C_P_3 */
bf890a93 10693 { "vsubsd", { XMScalar, VexScalar, EXqScalar }, 0 },
9e30b8e0
L
10694 },
10695 {
592a252b 10696 /* VEX_W_0F5D_P_0 */
bf890a93 10697 { "vminps", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10698 },
10699 {
592a252b 10700 /* VEX_W_0F5D_P_1 */
bf890a93 10701 { "vminss", { XMScalar, VexScalar, EXdScalar }, 0 },
9e30b8e0
L
10702 },
10703 {
592a252b 10704 /* VEX_W_0F5D_P_2 */
bf890a93 10705 { "vminpd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10706 },
10707 {
592a252b 10708 /* VEX_W_0F5D_P_3 */
bf890a93 10709 { "vminsd", { XMScalar, VexScalar, EXqScalar }, 0 },
9e30b8e0
L
10710 },
10711 {
592a252b 10712 /* VEX_W_0F5E_P_0 */
bf890a93 10713 { "vdivps", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10714 },
10715 {
592a252b 10716 /* VEX_W_0F5E_P_1 */
bf890a93 10717 { "vdivss", { XMScalar, VexScalar, EXdScalar }, 0 },
9e30b8e0
L
10718 },
10719 {
592a252b 10720 /* VEX_W_0F5E_P_2 */
bf890a93 10721 { "vdivpd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10722 },
10723 {
592a252b 10724 /* VEX_W_0F5E_P_3 */
bf890a93 10725 { "vdivsd", { XMScalar, VexScalar, EXqScalar }, 0 },
9e30b8e0
L
10726 },
10727 {
592a252b 10728 /* VEX_W_0F5F_P_0 */
bf890a93 10729 { "vmaxps", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10730 },
10731 {
592a252b 10732 /* VEX_W_0F5F_P_1 */
bf890a93 10733 { "vmaxss", { XMScalar, VexScalar, EXdScalar }, 0 },
9e30b8e0
L
10734 },
10735 {
592a252b 10736 /* VEX_W_0F5F_P_2 */
bf890a93 10737 { "vmaxpd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10738 },
10739 {
592a252b 10740 /* VEX_W_0F5F_P_3 */
bf890a93 10741 { "vmaxsd", { XMScalar, VexScalar, EXqScalar }, 0 },
9e30b8e0
L
10742 },
10743 {
592a252b 10744 /* VEX_W_0F60_P_2 */
bf890a93 10745 { "vpunpcklbw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10746 },
10747 {
592a252b 10748 /* VEX_W_0F61_P_2 */
bf890a93 10749 { "vpunpcklwd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10750 },
10751 {
592a252b 10752 /* VEX_W_0F62_P_2 */
bf890a93 10753 { "vpunpckldq", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10754 },
10755 {
592a252b 10756 /* VEX_W_0F63_P_2 */
bf890a93 10757 { "vpacksswb", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10758 },
10759 {
592a252b 10760 /* VEX_W_0F64_P_2 */
bf890a93 10761 { "vpcmpgtb", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10762 },
10763 {
592a252b 10764 /* VEX_W_0F65_P_2 */
bf890a93 10765 { "vpcmpgtw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10766 },
10767 {
592a252b 10768 /* VEX_W_0F66_P_2 */
bf890a93 10769 { "vpcmpgtd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10770 },
10771 {
592a252b 10772 /* VEX_W_0F67_P_2 */
bf890a93 10773 { "vpackuswb", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10774 },
10775 {
592a252b 10776 /* VEX_W_0F68_P_2 */
bf890a93 10777 { "vpunpckhbw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10778 },
10779 {
592a252b 10780 /* VEX_W_0F69_P_2 */
bf890a93 10781 { "vpunpckhwd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10782 },
10783 {
592a252b 10784 /* VEX_W_0F6A_P_2 */
bf890a93 10785 { "vpunpckhdq", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10786 },
10787 {
592a252b 10788 /* VEX_W_0F6B_P_2 */
bf890a93 10789 { "vpackssdw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10790 },
10791 {
592a252b 10792 /* VEX_W_0F6C_P_2 */
bf890a93 10793 { "vpunpcklqdq", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10794 },
10795 {
592a252b 10796 /* VEX_W_0F6D_P_2 */
bf890a93 10797 { "vpunpckhqdq", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10798 },
10799 {
592a252b 10800 /* VEX_W_0F6F_P_1 */
bf890a93 10801 { "vmovdqu", { XM, EXx }, 0 },
9e30b8e0
L
10802 },
10803 {
592a252b 10804 /* VEX_W_0F6F_P_2 */
bf890a93 10805 { "vmovdqa", { XM, EXx }, 0 },
9e30b8e0
L
10806 },
10807 {
592a252b 10808 /* VEX_W_0F70_P_1 */
bf890a93 10809 { "vpshufhw", { XM, EXx, Ib }, 0 },
9e30b8e0
L
10810 },
10811 {
592a252b 10812 /* VEX_W_0F70_P_2 */
bf890a93 10813 { "vpshufd", { XM, EXx, Ib }, 0 },
9e30b8e0
L
10814 },
10815 {
592a252b 10816 /* VEX_W_0F70_P_3 */
bf890a93 10817 { "vpshuflw", { XM, EXx, Ib }, 0 },
9e30b8e0
L
10818 },
10819 {
592a252b 10820 /* VEX_W_0F71_R_2_P_2 */
bf890a93 10821 { "vpsrlw", { Vex, XS, Ib }, 0 },
9e30b8e0
L
10822 },
10823 {
592a252b 10824 /* VEX_W_0F71_R_4_P_2 */
bf890a93 10825 { "vpsraw", { Vex, XS, Ib }, 0 },
9e30b8e0
L
10826 },
10827 {
592a252b 10828 /* VEX_W_0F71_R_6_P_2 */
bf890a93 10829 { "vpsllw", { Vex, XS, Ib }, 0 },
9e30b8e0
L
10830 },
10831 {
592a252b 10832 /* VEX_W_0F72_R_2_P_2 */
bf890a93 10833 { "vpsrld", { Vex, XS, Ib }, 0 },
9e30b8e0
L
10834 },
10835 {
592a252b 10836 /* VEX_W_0F72_R_4_P_2 */
bf890a93 10837 { "vpsrad", { Vex, XS, Ib }, 0 },
9e30b8e0
L
10838 },
10839 {
592a252b 10840 /* VEX_W_0F72_R_6_P_2 */
bf890a93 10841 { "vpslld", { Vex, XS, Ib }, 0 },
9e30b8e0
L
10842 },
10843 {
592a252b 10844 /* VEX_W_0F73_R_2_P_2 */
bf890a93 10845 { "vpsrlq", { Vex, XS, Ib }, 0 },
9e30b8e0
L
10846 },
10847 {
592a252b 10848 /* VEX_W_0F73_R_3_P_2 */
bf890a93 10849 { "vpsrldq", { Vex, XS, Ib }, 0 },
9e30b8e0
L
10850 },
10851 {
592a252b 10852 /* VEX_W_0F73_R_6_P_2 */
bf890a93 10853 { "vpsllq", { Vex, XS, Ib }, 0 },
9e30b8e0
L
10854 },
10855 {
592a252b 10856 /* VEX_W_0F73_R_7_P_2 */
bf890a93 10857 { "vpslldq", { Vex, XS, Ib }, 0 },
9e30b8e0
L
10858 },
10859 {
592a252b 10860 /* VEX_W_0F74_P_2 */
bf890a93 10861 { "vpcmpeqb", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10862 },
10863 {
592a252b 10864 /* VEX_W_0F75_P_2 */
bf890a93 10865 { "vpcmpeqw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10866 },
10867 {
592a252b 10868 /* VEX_W_0F76_P_2 */
bf890a93 10869 { "vpcmpeqd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10870 },
10871 {
592a252b 10872 /* VEX_W_0F77_P_0 */
bf890a93 10873 { "", { VZERO }, 0 },
9e30b8e0
L
10874 },
10875 {
592a252b 10876 /* VEX_W_0F7C_P_2 */
bf890a93 10877 { "vhaddpd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10878 },
10879 {
592a252b 10880 /* VEX_W_0F7C_P_3 */
bf890a93 10881 { "vhaddps", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10882 },
10883 {
592a252b 10884 /* VEX_W_0F7D_P_2 */
bf890a93 10885 { "vhsubpd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10886 },
10887 {
592a252b 10888 /* VEX_W_0F7D_P_3 */
bf890a93 10889 { "vhsubps", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10890 },
10891 {
592a252b 10892 /* VEX_W_0F7E_P_1 */
bf890a93 10893 { "vmovq", { XMScalar, EXqScalar }, 0 },
9e30b8e0
L
10894 },
10895 {
592a252b 10896 /* VEX_W_0F7F_P_1 */
bf890a93 10897 { "vmovdqu", { EXxS, XM }, 0 },
9e30b8e0
L
10898 },
10899 {
592a252b 10900 /* VEX_W_0F7F_P_2 */
bf890a93 10901 { "vmovdqa", { EXxS, XM }, 0 },
9e30b8e0 10902 },
43234a1e
L
10903 {
10904 /* VEX_W_0F90_P_0_LEN_0 */
bf890a93
IT
10905 { "kmovw", { MaskG, MaskE }, 0 },
10906 { "kmovq", { MaskG, MaskE }, 0 },
1ba585e8
IT
10907 },
10908 {
10909 /* VEX_W_0F90_P_2_LEN_0 */
bf890a93
IT
10910 { "kmovb", { MaskG, MaskBDE }, 0 },
10911 { "kmovd", { MaskG, MaskBDE }, 0 },
43234a1e
L
10912 },
10913 {
10914 /* VEX_W_0F91_P_0_LEN_0 */
ab4e4ed5
AF
10915 { MOD_TABLE (MOD_VEX_W_0_0F91_P_0_LEN_0) },
10916 { MOD_TABLE (MOD_VEX_W_1_0F91_P_0_LEN_0) },
1ba585e8
IT
10917 },
10918 {
10919 /* VEX_W_0F91_P_2_LEN_0 */
ab4e4ed5
AF
10920 { MOD_TABLE (MOD_VEX_W_0_0F91_P_2_LEN_0) },
10921 { MOD_TABLE (MOD_VEX_W_1_0F91_P_2_LEN_0) },
43234a1e
L
10922 },
10923 {
10924 /* VEX_W_0F92_P_0_LEN_0 */
ab4e4ed5 10925 { MOD_TABLE (MOD_VEX_W_0_0F92_P_0_LEN_0) },
43234a1e 10926 },
90a915bf
IT
10927 {
10928 /* VEX_W_0F92_P_2_LEN_0 */
ab4e4ed5 10929 { MOD_TABLE (MOD_VEX_W_0_0F92_P_2_LEN_0) },
90a915bf 10930 },
1ba585e8
IT
10931 {
10932 /* VEX_W_0F92_P_3_LEN_0 */
ab4e4ed5
AF
10933 { MOD_TABLE (MOD_VEX_W_0_0F92_P_3_LEN_0) },
10934 { MOD_TABLE (MOD_VEX_W_1_0F92_P_3_LEN_0) },
1ba585e8 10935 },
43234a1e
L
10936 {
10937 /* VEX_W_0F93_P_0_LEN_0 */
ab4e4ed5 10938 { MOD_TABLE (MOD_VEX_W_0_0F93_P_0_LEN_0) },
43234a1e 10939 },
90a915bf
IT
10940 {
10941 /* VEX_W_0F93_P_2_LEN_0 */
ab4e4ed5 10942 { MOD_TABLE (MOD_VEX_W_0_0F93_P_2_LEN_0) },
90a915bf 10943 },
1ba585e8
IT
10944 {
10945 /* VEX_W_0F93_P_3_LEN_0 */
ab4e4ed5
AF
10946 { MOD_TABLE (MOD_VEX_W_0_0F93_P_3_LEN_0) },
10947 { MOD_TABLE (MOD_VEX_W_1_0F93_P_3_LEN_0) },
1ba585e8 10948 },
43234a1e
L
10949 {
10950 /* VEX_W_0F98_P_0_LEN_0 */
ab4e4ed5
AF
10951 { MOD_TABLE (MOD_VEX_W_0_0F98_P_0_LEN_0) },
10952 { MOD_TABLE (MOD_VEX_W_1_0F98_P_0_LEN_0) },
1ba585e8
IT
10953 },
10954 {
10955 /* VEX_W_0F98_P_2_LEN_0 */
ab4e4ed5
AF
10956 { MOD_TABLE (MOD_VEX_W_0_0F98_P_2_LEN_0) },
10957 { MOD_TABLE (MOD_VEX_W_1_0F98_P_2_LEN_0) },
1ba585e8
IT
10958 },
10959 {
10960 /* VEX_W_0F99_P_0_LEN_0 */
ab4e4ed5
AF
10961 { MOD_TABLE (MOD_VEX_W_0_0F99_P_0_LEN_0) },
10962 { MOD_TABLE (MOD_VEX_W_1_0F99_P_0_LEN_0) },
1ba585e8
IT
10963 },
10964 {
10965 /* VEX_W_0F99_P_2_LEN_0 */
ab4e4ed5
AF
10966 { MOD_TABLE (MOD_VEX_W_0_0F99_P_2_LEN_0) },
10967 { MOD_TABLE (MOD_VEX_W_1_0F99_P_2_LEN_0) },
43234a1e 10968 },
9e30b8e0 10969 {
592a252b 10970 /* VEX_W_0FAE_R_2_M_0 */
bf890a93 10971 { "vldmxcsr", { Md }, 0 },
9e30b8e0
L
10972 },
10973 {
592a252b 10974 /* VEX_W_0FAE_R_3_M_0 */
bf890a93 10975 { "vstmxcsr", { Md }, 0 },
9e30b8e0
L
10976 },
10977 {
592a252b 10978 /* VEX_W_0FC2_P_0 */
bf890a93 10979 { "vcmpps", { XM, Vex, EXx, VCMP }, 0 },
9e30b8e0
L
10980 },
10981 {
592a252b 10982 /* VEX_W_0FC2_P_1 */
bf890a93 10983 { "vcmpss", { XMScalar, VexScalar, EXdScalar, VCMP }, 0 },
9e30b8e0
L
10984 },
10985 {
592a252b 10986 /* VEX_W_0FC2_P_2 */
bf890a93 10987 { "vcmppd", { XM, Vex, EXx, VCMP }, 0 },
9e30b8e0
L
10988 },
10989 {
592a252b 10990 /* VEX_W_0FC2_P_3 */
bf890a93 10991 { "vcmpsd", { XMScalar, VexScalar, EXqScalar, VCMP }, 0 },
9e30b8e0
L
10992 },
10993 {
592a252b 10994 /* VEX_W_0FC4_P_2 */
bf890a93 10995 { "vpinsrw", { XM, Vex128, Edqw, Ib }, 0 },
9e30b8e0
L
10996 },
10997 {
592a252b 10998 /* VEX_W_0FC5_P_2 */
bf890a93 10999 { "vpextrw", { Gdq, XS, Ib }, 0 },
9e30b8e0
L
11000 },
11001 {
592a252b 11002 /* VEX_W_0FD0_P_2 */
bf890a93 11003 { "vaddsubpd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11004 },
11005 {
592a252b 11006 /* VEX_W_0FD0_P_3 */
bf890a93 11007 { "vaddsubps", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11008 },
11009 {
592a252b 11010 /* VEX_W_0FD1_P_2 */
bf890a93 11011 { "vpsrlw", { XM, Vex, EXxmm }, 0 },
9e30b8e0
L
11012 },
11013 {
592a252b 11014 /* VEX_W_0FD2_P_2 */
bf890a93 11015 { "vpsrld", { XM, Vex, EXxmm }, 0 },
9e30b8e0
L
11016 },
11017 {
592a252b 11018 /* VEX_W_0FD3_P_2 */
bf890a93 11019 { "vpsrlq", { XM, Vex, EXxmm }, 0 },
9e30b8e0
L
11020 },
11021 {
592a252b 11022 /* VEX_W_0FD4_P_2 */
bf890a93 11023 { "vpaddq", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11024 },
11025 {
592a252b 11026 /* VEX_W_0FD5_P_2 */
bf890a93 11027 { "vpmullw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11028 },
11029 {
592a252b 11030 /* VEX_W_0FD6_P_2 */
bf890a93 11031 { "vmovq", { EXqScalarS, XMScalar }, 0 },
9e30b8e0
L
11032 },
11033 {
592a252b 11034 /* VEX_W_0FD7_P_2_M_1 */
bf890a93 11035 { "vpmovmskb", { Gdq, XS }, 0 },
9e30b8e0
L
11036 },
11037 {
592a252b 11038 /* VEX_W_0FD8_P_2 */
bf890a93 11039 { "vpsubusb", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11040 },
11041 {
592a252b 11042 /* VEX_W_0FD9_P_2 */
bf890a93 11043 { "vpsubusw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11044 },
11045 {
592a252b 11046 /* VEX_W_0FDA_P_2 */
bf890a93 11047 { "vpminub", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11048 },
11049 {
592a252b 11050 /* VEX_W_0FDB_P_2 */
bf890a93 11051 { "vpand", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11052 },
11053 {
592a252b 11054 /* VEX_W_0FDC_P_2 */
bf890a93 11055 { "vpaddusb", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11056 },
11057 {
592a252b 11058 /* VEX_W_0FDD_P_2 */
bf890a93 11059 { "vpaddusw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11060 },
11061 {
592a252b 11062 /* VEX_W_0FDE_P_2 */
bf890a93 11063 { "vpmaxub", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11064 },
11065 {
592a252b 11066 /* VEX_W_0FDF_P_2 */
bf890a93 11067 { "vpandn", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11068 },
11069 {
592a252b 11070 /* VEX_W_0FE0_P_2 */
bf890a93 11071 { "vpavgb", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11072 },
11073 {
592a252b 11074 /* VEX_W_0FE1_P_2 */
bf890a93 11075 { "vpsraw", { XM, Vex, EXxmm }, 0 },
9e30b8e0
L
11076 },
11077 {
592a252b 11078 /* VEX_W_0FE2_P_2 */
bf890a93 11079 { "vpsrad", { XM, Vex, EXxmm }, 0 },
9e30b8e0
L
11080 },
11081 {
592a252b 11082 /* VEX_W_0FE3_P_2 */
bf890a93 11083 { "vpavgw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11084 },
11085 {
592a252b 11086 /* VEX_W_0FE4_P_2 */
bf890a93 11087 { "vpmulhuw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11088 },
11089 {
592a252b 11090 /* VEX_W_0FE5_P_2 */
bf890a93 11091 { "vpmulhw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11092 },
11093 {
592a252b 11094 /* VEX_W_0FE6_P_1 */
bf890a93 11095 { "vcvtdq2pd", { XM, EXxmmq }, 0 },
9e30b8e0
L
11096 },
11097 {
592a252b 11098 /* VEX_W_0FE6_P_2 */
bf890a93 11099 { "vcvttpd2dq%XY", { XMM, EXx }, 0 },
9e30b8e0
L
11100 },
11101 {
592a252b 11102 /* VEX_W_0FE6_P_3 */
bf890a93 11103 { "vcvtpd2dq%XY", { XMM, EXx }, 0 },
9e30b8e0
L
11104 },
11105 {
592a252b 11106 /* VEX_W_0FE7_P_2_M_0 */
bf890a93 11107 { "vmovntdq", { Mx, XM }, 0 },
9e30b8e0
L
11108 },
11109 {
592a252b 11110 /* VEX_W_0FE8_P_2 */
bf890a93 11111 { "vpsubsb", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11112 },
11113 {
592a252b 11114 /* VEX_W_0FE9_P_2 */
bf890a93 11115 { "vpsubsw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11116 },
11117 {
592a252b 11118 /* VEX_W_0FEA_P_2 */
bf890a93 11119 { "vpminsw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11120 },
11121 {
592a252b 11122 /* VEX_W_0FEB_P_2 */
bf890a93 11123 { "vpor", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11124 },
11125 {
592a252b 11126 /* VEX_W_0FEC_P_2 */
bf890a93 11127 { "vpaddsb", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11128 },
11129 {
592a252b 11130 /* VEX_W_0FED_P_2 */
bf890a93 11131 { "vpaddsw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11132 },
11133 {
592a252b 11134 /* VEX_W_0FEE_P_2 */
bf890a93 11135 { "vpmaxsw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11136 },
11137 {
592a252b 11138 /* VEX_W_0FEF_P_2 */
bf890a93 11139 { "vpxor", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11140 },
11141 {
592a252b 11142 /* VEX_W_0FF0_P_3_M_0 */
bf890a93 11143 { "vlddqu", { XM, M }, 0 },
9e30b8e0
L
11144 },
11145 {
592a252b 11146 /* VEX_W_0FF1_P_2 */
bf890a93 11147 { "vpsllw", { XM, Vex, EXxmm }, 0 },
9e30b8e0
L
11148 },
11149 {
592a252b 11150 /* VEX_W_0FF2_P_2 */
bf890a93 11151 { "vpslld", { XM, Vex, EXxmm }, 0 },
9e30b8e0
L
11152 },
11153 {
592a252b 11154 /* VEX_W_0FF3_P_2 */
bf890a93 11155 { "vpsllq", { XM, Vex, EXxmm }, 0 },
9e30b8e0
L
11156 },
11157 {
592a252b 11158 /* VEX_W_0FF4_P_2 */
bf890a93 11159 { "vpmuludq", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11160 },
11161 {
592a252b 11162 /* VEX_W_0FF5_P_2 */
bf890a93 11163 { "vpmaddwd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11164 },
11165 {
592a252b 11166 /* VEX_W_0FF6_P_2 */
bf890a93 11167 { "vpsadbw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11168 },
11169 {
592a252b 11170 /* VEX_W_0FF7_P_2 */
bf890a93 11171 { "vmaskmovdqu", { XM, XS }, 0 },
9e30b8e0
L
11172 },
11173 {
592a252b 11174 /* VEX_W_0FF8_P_2 */
bf890a93 11175 { "vpsubb", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11176 },
11177 {
592a252b 11178 /* VEX_W_0FF9_P_2 */
bf890a93 11179 { "vpsubw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11180 },
11181 {
592a252b 11182 /* VEX_W_0FFA_P_2 */
bf890a93 11183 { "vpsubd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11184 },
11185 {
592a252b 11186 /* VEX_W_0FFB_P_2 */
bf890a93 11187 { "vpsubq", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11188 },
11189 {
592a252b 11190 /* VEX_W_0FFC_P_2 */
bf890a93 11191 { "vpaddb", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11192 },
11193 {
592a252b 11194 /* VEX_W_0FFD_P_2 */
bf890a93 11195 { "vpaddw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11196 },
11197 {
592a252b 11198 /* VEX_W_0FFE_P_2 */
bf890a93 11199 { "vpaddd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11200 },
11201 {
592a252b 11202 /* VEX_W_0F3800_P_2 */
bf890a93 11203 { "vpshufb", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11204 },
11205 {
592a252b 11206 /* VEX_W_0F3801_P_2 */
bf890a93 11207 { "vphaddw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11208 },
11209 {
592a252b 11210 /* VEX_W_0F3802_P_2 */
bf890a93 11211 { "vphaddd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11212 },
11213 {
592a252b 11214 /* VEX_W_0F3803_P_2 */
bf890a93 11215 { "vphaddsw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11216 },
11217 {
592a252b 11218 /* VEX_W_0F3804_P_2 */
bf890a93 11219 { "vpmaddubsw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11220 },
11221 {
592a252b 11222 /* VEX_W_0F3805_P_2 */
bf890a93 11223 { "vphsubw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11224 },
11225 {
592a252b 11226 /* VEX_W_0F3806_P_2 */
bf890a93 11227 { "vphsubd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11228 },
11229 {
592a252b 11230 /* VEX_W_0F3807_P_2 */
bf890a93 11231 { "vphsubsw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11232 },
11233 {
592a252b 11234 /* VEX_W_0F3808_P_2 */
bf890a93 11235 { "vpsignb", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11236 },
11237 {
592a252b 11238 /* VEX_W_0F3809_P_2 */
bf890a93 11239 { "vpsignw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11240 },
11241 {
592a252b 11242 /* VEX_W_0F380A_P_2 */
bf890a93 11243 { "vpsignd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11244 },
11245 {
592a252b 11246 /* VEX_W_0F380B_P_2 */
bf890a93 11247 { "vpmulhrsw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11248 },
11249 {
592a252b 11250 /* VEX_W_0F380C_P_2 */
bf890a93 11251 { "vpermilps", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11252 },
11253 {
592a252b 11254 /* VEX_W_0F380D_P_2 */
bf890a93 11255 { "vpermilpd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11256 },
11257 {
592a252b 11258 /* VEX_W_0F380E_P_2 */
bf890a93 11259 { "vtestps", { XM, EXx }, 0 },
9e30b8e0
L
11260 },
11261 {
592a252b 11262 /* VEX_W_0F380F_P_2 */
bf890a93 11263 { "vtestpd", { XM, EXx }, 0 },
9e30b8e0 11264 },
6c30d220
L
11265 {
11266 /* VEX_W_0F3816_P_2 */
bf890a93 11267 { "vpermps", { XM, Vex, EXx }, 0 },
6c30d220 11268 },
9e30b8e0 11269 {
592a252b 11270 /* VEX_W_0F3817_P_2 */
bf890a93 11271 { "vptest", { XM, EXx }, 0 },
9e30b8e0 11272 },
bcf2684f 11273 {
6c30d220 11274 /* VEX_W_0F3818_P_2 */
bf890a93 11275 { "vbroadcastss", { XM, EXxmm_md }, 0 },
bcf2684f 11276 },
9e30b8e0 11277 {
6c30d220 11278 /* VEX_W_0F3819_P_2 */
bf890a93 11279 { "vbroadcastsd", { XM, EXxmm_mq }, 0 },
9e30b8e0
L
11280 },
11281 {
592a252b 11282 /* VEX_W_0F381A_P_2_M_0 */
bf890a93 11283 { "vbroadcastf128", { XM, Mxmm }, 0 },
9e30b8e0
L
11284 },
11285 {
592a252b 11286 /* VEX_W_0F381C_P_2 */
bf890a93 11287 { "vpabsb", { XM, EXx }, 0 },
9e30b8e0
L
11288 },
11289 {
592a252b 11290 /* VEX_W_0F381D_P_2 */
bf890a93 11291 { "vpabsw", { XM, EXx }, 0 },
9e30b8e0
L
11292 },
11293 {
592a252b 11294 /* VEX_W_0F381E_P_2 */
bf890a93 11295 { "vpabsd", { XM, EXx }, 0 },
9e30b8e0
L
11296 },
11297 {
592a252b 11298 /* VEX_W_0F3820_P_2 */
bf890a93 11299 { "vpmovsxbw", { XM, EXxmmq }, 0 },
9e30b8e0
L
11300 },
11301 {
592a252b 11302 /* VEX_W_0F3821_P_2 */
bf890a93 11303 { "vpmovsxbd", { XM, EXxmmqd }, 0 },
9e30b8e0
L
11304 },
11305 {
592a252b 11306 /* VEX_W_0F3822_P_2 */
bf890a93 11307 { "vpmovsxbq", { XM, EXxmmdw }, 0 },
9e30b8e0
L
11308 },
11309 {
592a252b 11310 /* VEX_W_0F3823_P_2 */
bf890a93 11311 { "vpmovsxwd", { XM, EXxmmq }, 0 },
9e30b8e0
L
11312 },
11313 {
592a252b 11314 /* VEX_W_0F3824_P_2 */
bf890a93 11315 { "vpmovsxwq", { XM, EXxmmqd }, 0 },
9e30b8e0
L
11316 },
11317 {
592a252b 11318 /* VEX_W_0F3825_P_2 */
bf890a93 11319 { "vpmovsxdq", { XM, EXxmmq }, 0 },
9e30b8e0
L
11320 },
11321 {
592a252b 11322 /* VEX_W_0F3828_P_2 */
bf890a93 11323 { "vpmuldq", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11324 },
11325 {
592a252b 11326 /* VEX_W_0F3829_P_2 */
bf890a93 11327 { "vpcmpeqq", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11328 },
11329 {
592a252b 11330 /* VEX_W_0F382A_P_2_M_0 */
bf890a93 11331 { "vmovntdqa", { XM, Mx }, 0 },
9e30b8e0
L
11332 },
11333 {
592a252b 11334 /* VEX_W_0F382B_P_2 */
bf890a93 11335 { "vpackusdw", { XM, Vex, EXx }, 0 },
9e30b8e0 11336 },
53aa04a0 11337 {
592a252b 11338 /* VEX_W_0F382C_P_2_M_0 */
bf890a93 11339 { "vmaskmovps", { XM, Vex, Mx }, 0 },
53aa04a0
L
11340 },
11341 {
592a252b 11342 /* VEX_W_0F382D_P_2_M_0 */
bf890a93 11343 { "vmaskmovpd", { XM, Vex, Mx }, 0 },
53aa04a0
L
11344 },
11345 {
592a252b 11346 /* VEX_W_0F382E_P_2_M_0 */
bf890a93 11347 { "vmaskmovps", { Mx, Vex, XM }, 0 },
53aa04a0
L
11348 },
11349 {
592a252b 11350 /* VEX_W_0F382F_P_2_M_0 */
bf890a93 11351 { "vmaskmovpd", { Mx, Vex, XM }, 0 },
53aa04a0 11352 },
9e30b8e0 11353 {
592a252b 11354 /* VEX_W_0F3830_P_2 */
bf890a93 11355 { "vpmovzxbw", { XM, EXxmmq }, 0 },
9e30b8e0
L
11356 },
11357 {
592a252b 11358 /* VEX_W_0F3831_P_2 */
bf890a93 11359 { "vpmovzxbd", { XM, EXxmmqd }, 0 },
9e30b8e0
L
11360 },
11361 {
592a252b 11362 /* VEX_W_0F3832_P_2 */
bf890a93 11363 { "vpmovzxbq", { XM, EXxmmdw }, 0 },
9e30b8e0
L
11364 },
11365 {
592a252b 11366 /* VEX_W_0F3833_P_2 */
bf890a93 11367 { "vpmovzxwd", { XM, EXxmmq }, 0 },
9e30b8e0
L
11368 },
11369 {
592a252b 11370 /* VEX_W_0F3834_P_2 */
bf890a93 11371 { "vpmovzxwq", { XM, EXxmmqd }, 0 },
9e30b8e0
L
11372 },
11373 {
592a252b 11374 /* VEX_W_0F3835_P_2 */
bf890a93 11375 { "vpmovzxdq", { XM, EXxmmq }, 0 },
6c30d220
L
11376 },
11377 {
11378 /* VEX_W_0F3836_P_2 */
bf890a93 11379 { "vpermd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11380 },
11381 {
592a252b 11382 /* VEX_W_0F3837_P_2 */
bf890a93 11383 { "vpcmpgtq", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11384 },
11385 {
592a252b 11386 /* VEX_W_0F3838_P_2 */
bf890a93 11387 { "vpminsb", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11388 },
11389 {
592a252b 11390 /* VEX_W_0F3839_P_2 */
bf890a93 11391 { "vpminsd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11392 },
11393 {
592a252b 11394 /* VEX_W_0F383A_P_2 */
bf890a93 11395 { "vpminuw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11396 },
11397 {
592a252b 11398 /* VEX_W_0F383B_P_2 */
bf890a93 11399 { "vpminud", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11400 },
11401 {
592a252b 11402 /* VEX_W_0F383C_P_2 */
bf890a93 11403 { "vpmaxsb", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11404 },
11405 {
592a252b 11406 /* VEX_W_0F383D_P_2 */
bf890a93 11407 { "vpmaxsd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11408 },
11409 {
592a252b 11410 /* VEX_W_0F383E_P_2 */
bf890a93 11411 { "vpmaxuw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11412 },
11413 {
592a252b 11414 /* VEX_W_0F383F_P_2 */
bf890a93 11415 { "vpmaxud", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11416 },
11417 {
592a252b 11418 /* VEX_W_0F3840_P_2 */
bf890a93 11419 { "vpmulld", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11420 },
11421 {
592a252b 11422 /* VEX_W_0F3841_P_2 */
bf890a93 11423 { "vphminposuw", { XM, EXx }, 0 },
9e30b8e0 11424 },
6c30d220
L
11425 {
11426 /* VEX_W_0F3846_P_2 */
bf890a93 11427 { "vpsravd", { XM, Vex, EXx }, 0 },
6c30d220
L
11428 },
11429 {
11430 /* VEX_W_0F3858_P_2 */
bf890a93 11431 { "vpbroadcastd", { XM, EXxmm_md }, 0 },
6c30d220
L
11432 },
11433 {
11434 /* VEX_W_0F3859_P_2 */
bf890a93 11435 { "vpbroadcastq", { XM, EXxmm_mq }, 0 },
6c30d220
L
11436 },
11437 {
11438 /* VEX_W_0F385A_P_2_M_0 */
bf890a93 11439 { "vbroadcasti128", { XM, Mxmm }, 0 },
6c30d220
L
11440 },
11441 {
11442 /* VEX_W_0F3878_P_2 */
bf890a93 11443 { "vpbroadcastb", { XM, EXxmm_mb }, 0 },
6c30d220
L
11444 },
11445 {
11446 /* VEX_W_0F3879_P_2 */
bf890a93 11447 { "vpbroadcastw", { XM, EXxmm_mw }, 0 },
6c30d220 11448 },
9e30b8e0 11449 {
592a252b 11450 /* VEX_W_0F38DB_P_2 */
bf890a93 11451 { "vaesimc", { XM, EXx }, 0 },
9e30b8e0
L
11452 },
11453 {
592a252b 11454 /* VEX_W_0F38DC_P_2 */
bf890a93 11455 { "vaesenc", { XM, Vex128, EXx }, 0 },
9e30b8e0
L
11456 },
11457 {
592a252b 11458 /* VEX_W_0F38DD_P_2 */
bf890a93 11459 { "vaesenclast", { XM, Vex128, EXx }, 0 },
9e30b8e0
L
11460 },
11461 {
592a252b 11462 /* VEX_W_0F38DE_P_2 */
bf890a93 11463 { "vaesdec", { XM, Vex128, EXx }, 0 },
9e30b8e0
L
11464 },
11465 {
592a252b 11466 /* VEX_W_0F38DF_P_2 */
bf890a93 11467 { "vaesdeclast", { XM, Vex128, EXx }, 0 },
9e30b8e0 11468 },
6c30d220
L
11469 {
11470 /* VEX_W_0F3A00_P_2 */
11471 { Bad_Opcode },
bf890a93 11472 { "vpermq", { XM, EXx, Ib }, 0 },
6c30d220
L
11473 },
11474 {
11475 /* VEX_W_0F3A01_P_2 */
11476 { Bad_Opcode },
bf890a93 11477 { "vpermpd", { XM, EXx, Ib }, 0 },
6c30d220
L
11478 },
11479 {
11480 /* VEX_W_0F3A02_P_2 */
bf890a93 11481 { "vpblendd", { XM, Vex, EXx, Ib }, 0 },
6c30d220 11482 },
9e30b8e0 11483 {
592a252b 11484 /* VEX_W_0F3A04_P_2 */
bf890a93 11485 { "vpermilps", { XM, EXx, Ib }, 0 },
9e30b8e0
L
11486 },
11487 {
592a252b 11488 /* VEX_W_0F3A05_P_2 */
bf890a93 11489 { "vpermilpd", { XM, EXx, Ib }, 0 },
9e30b8e0
L
11490 },
11491 {
592a252b 11492 /* VEX_W_0F3A06_P_2 */
bf890a93 11493 { "vperm2f128", { XM, Vex256, EXx, Ib }, 0 },
9e30b8e0
L
11494 },
11495 {
592a252b 11496 /* VEX_W_0F3A08_P_2 */
bf890a93 11497 { "vroundps", { XM, EXx, Ib }, 0 },
9e30b8e0
L
11498 },
11499 {
592a252b 11500 /* VEX_W_0F3A09_P_2 */
bf890a93 11501 { "vroundpd", { XM, EXx, Ib }, 0 },
9e30b8e0
L
11502 },
11503 {
592a252b 11504 /* VEX_W_0F3A0A_P_2 */
bf890a93 11505 { "vroundss", { XMScalar, VexScalar, EXdScalar, Ib }, 0 },
9e30b8e0
L
11506 },
11507 {
592a252b 11508 /* VEX_W_0F3A0B_P_2 */
bf890a93 11509 { "vroundsd", { XMScalar, VexScalar, EXqScalar, Ib }, 0 },
9e30b8e0
L
11510 },
11511 {
592a252b 11512 /* VEX_W_0F3A0C_P_2 */
bf890a93 11513 { "vblendps", { XM, Vex, EXx, Ib }, 0 },
9e30b8e0
L
11514 },
11515 {
592a252b 11516 /* VEX_W_0F3A0D_P_2 */
bf890a93 11517 { "vblendpd", { XM, Vex, EXx, Ib }, 0 },
9e30b8e0
L
11518 },
11519 {
592a252b 11520 /* VEX_W_0F3A0E_P_2 */
bf890a93 11521 { "vpblendw", { XM, Vex, EXx, Ib }, 0 },
9e30b8e0
L
11522 },
11523 {
592a252b 11524 /* VEX_W_0F3A0F_P_2 */
bf890a93 11525 { "vpalignr", { XM, Vex, EXx, Ib }, 0 },
9e30b8e0
L
11526 },
11527 {
592a252b 11528 /* VEX_W_0F3A14_P_2 */
bf890a93 11529 { "vpextrb", { Edqb, XM, Ib }, 0 },
9e30b8e0
L
11530 },
11531 {
592a252b 11532 /* VEX_W_0F3A15_P_2 */
bf890a93 11533 { "vpextrw", { Edqw, XM, Ib }, 0 },
9e30b8e0
L
11534 },
11535 {
592a252b 11536 /* VEX_W_0F3A18_P_2 */
bf890a93 11537 { "vinsertf128", { XM, Vex256, EXxmm, Ib }, 0 },
9e30b8e0
L
11538 },
11539 {
592a252b 11540 /* VEX_W_0F3A19_P_2 */
bf890a93 11541 { "vextractf128", { EXxmm, XM, Ib }, 0 },
9e30b8e0
L
11542 },
11543 {
592a252b 11544 /* VEX_W_0F3A20_P_2 */
bf890a93 11545 { "vpinsrb", { XM, Vex128, Edqb, Ib }, 0 },
9e30b8e0
L
11546 },
11547 {
592a252b 11548 /* VEX_W_0F3A21_P_2 */
bf890a93 11549 { "vinsertps", { XM, Vex128, EXd, Ib }, 0 },
9e30b8e0 11550 },
43234a1e 11551 {
1ba585e8 11552 /* VEX_W_0F3A30_P_2_LEN_0 */
ab4e4ed5
AF
11553 { MOD_TABLE (MOD_VEX_W_0_0F3A30_P_2_LEN_0) },
11554 { MOD_TABLE (MOD_VEX_W_1_0F3A30_P_2_LEN_0) },
43234a1e
L
11555 },
11556 {
1ba585e8 11557 /* VEX_W_0F3A31_P_2_LEN_0 */
ab4e4ed5
AF
11558 { MOD_TABLE (MOD_VEX_W_0_0F3A31_P_2_LEN_0) },
11559 { MOD_TABLE (MOD_VEX_W_1_0F3A31_P_2_LEN_0) },
1ba585e8
IT
11560 },
11561 {
11562 /* VEX_W_0F3A32_P_2_LEN_0 */
ab4e4ed5
AF
11563 { MOD_TABLE (MOD_VEX_W_0_0F3A32_P_2_LEN_0) },
11564 { MOD_TABLE (MOD_VEX_W_1_0F3A32_P_2_LEN_0) },
43234a1e 11565 },
1ba585e8
IT
11566 {
11567 /* VEX_W_0F3A33_P_2_LEN_0 */
ab4e4ed5
AF
11568 { MOD_TABLE (MOD_VEX_W_0_0F3A33_P_2_LEN_0) },
11569 { MOD_TABLE (MOD_VEX_W_1_0F3A33_P_2_LEN_0) },
1ba585e8 11570 },
6c30d220
L
11571 {
11572 /* VEX_W_0F3A38_P_2 */
bf890a93 11573 { "vinserti128", { XM, Vex256, EXxmm, Ib }, 0 },
6c30d220
L
11574 },
11575 {
11576 /* VEX_W_0F3A39_P_2 */
bf890a93 11577 { "vextracti128", { EXxmm, XM, Ib }, 0 },
6c30d220 11578 },
9e30b8e0 11579 {
592a252b 11580 /* VEX_W_0F3A40_P_2 */
bf890a93 11581 { "vdpps", { XM, Vex, EXx, Ib }, 0 },
9e30b8e0
L
11582 },
11583 {
592a252b 11584 /* VEX_W_0F3A41_P_2 */
bf890a93 11585 { "vdppd", { XM, Vex128, EXx, Ib }, 0 },
9e30b8e0
L
11586 },
11587 {
592a252b 11588 /* VEX_W_0F3A42_P_2 */
bf890a93 11589 { "vmpsadbw", { XM, Vex, EXx, Ib }, 0 },
9e30b8e0
L
11590 },
11591 {
592a252b 11592 /* VEX_W_0F3A44_P_2 */
bf890a93 11593 { "vpclmulqdq", { XM, Vex128, EXx, PCLMUL }, 0 },
9e30b8e0 11594 },
6c30d220
L
11595 {
11596 /* VEX_W_0F3A46_P_2 */
bf890a93 11597 { "vperm2i128", { XM, Vex256, EXx, Ib }, 0 },
6c30d220 11598 },
a683cc34 11599 {
592a252b 11600 /* VEX_W_0F3A48_P_2 */
bf890a93
IT
11601 { "vpermil2ps", { XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW }, 0 },
11602 { "vpermil2ps", { XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW }, 0 },
a683cc34
SP
11603 },
11604 {
592a252b 11605 /* VEX_W_0F3A49_P_2 */
bf890a93
IT
11606 { "vpermil2pd", { XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW }, 0 },
11607 { "vpermil2pd", { XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW }, 0 },
a683cc34 11608 },
9e30b8e0 11609 {
592a252b 11610 /* VEX_W_0F3A4A_P_2 */
bf890a93 11611 { "vblendvps", { XM, Vex, EXx, XMVexI4 }, 0 },
9e30b8e0
L
11612 },
11613 {
592a252b 11614 /* VEX_W_0F3A4B_P_2 */
bf890a93 11615 { "vblendvpd", { XM, Vex, EXx, XMVexI4 }, 0 },
9e30b8e0
L
11616 },
11617 {
592a252b 11618 /* VEX_W_0F3A4C_P_2 */
bf890a93 11619 { "vpblendvb", { XM, Vex, EXx, XMVexI4 }, 0 },
9e30b8e0
L
11620 },
11621 {
592a252b 11622 /* VEX_W_0F3A60_P_2 */
bf890a93 11623 { "vpcmpestrm", { XM, EXx, Ib }, 0 },
9e30b8e0
L
11624 },
11625 {
592a252b 11626 /* VEX_W_0F3A61_P_2 */
bf890a93 11627 { "vpcmpestri", { XM, EXx, Ib }, 0 },
9e30b8e0
L
11628 },
11629 {
592a252b 11630 /* VEX_W_0F3A62_P_2 */
bf890a93 11631 { "vpcmpistrm", { XM, EXx, Ib }, 0 },
9e30b8e0
L
11632 },
11633 {
592a252b 11634 /* VEX_W_0F3A63_P_2 */
bf890a93 11635 { "vpcmpistri", { XM, EXx, Ib }, 0 },
9e30b8e0
L
11636 },
11637 {
592a252b 11638 /* VEX_W_0F3ADF_P_2 */
bf890a93 11639 { "vaeskeygenassist", { XM, EXx, Ib }, 0 },
9e30b8e0 11640 },
43234a1e
L
11641#define NEED_VEX_W_TABLE
11642#include "i386-dis-evex.h"
11643#undef NEED_VEX_W_TABLE
9e30b8e0
L
11644};
11645
11646static const struct dis386 mod_table[][2] = {
11647 {
11648 /* MOD_8D */
bf890a93 11649 { "leaS", { Gv, M }, 0 },
9e30b8e0 11650 },
42164a71
L
11651 {
11652 /* MOD_C6_REG_7 */
11653 { Bad_Opcode },
11654 { RM_TABLE (RM_C6_REG_7) },
11655 },
11656 {
11657 /* MOD_C7_REG_7 */
11658 { Bad_Opcode },
11659 { RM_TABLE (RM_C7_REG_7) },
11660 },
4a357820
MZ
11661 {
11662 /* MOD_FF_REG_3 */
a72d2af2 11663 { "Jcall^", { indirEp }, 0 },
4a357820
MZ
11664 },
11665 {
11666 /* MOD_FF_REG_5 */
a72d2af2 11667 { "Jjmp^", { indirEp }, 0 },
4a357820 11668 },
9e30b8e0
L
11669 {
11670 /* MOD_0F01_REG_0 */
11671 { X86_64_TABLE (X86_64_0F01_REG_0) },
11672 { RM_TABLE (RM_0F01_REG_0) },
11673 },
11674 {
11675 /* MOD_0F01_REG_1 */
11676 { X86_64_TABLE (X86_64_0F01_REG_1) },
11677 { RM_TABLE (RM_0F01_REG_1) },
11678 },
11679 {
11680 /* MOD_0F01_REG_2 */
11681 { X86_64_TABLE (X86_64_0F01_REG_2) },
11682 { RM_TABLE (RM_0F01_REG_2) },
11683 },
11684 {
11685 /* MOD_0F01_REG_3 */
11686 { X86_64_TABLE (X86_64_0F01_REG_3) },
11687 { RM_TABLE (RM_0F01_REG_3) },
11688 },
8eab4136
L
11689 {
11690 /* MOD_0F01_REG_5 */
11691 { Bad_Opcode },
11692 { RM_TABLE (RM_0F01_REG_5) },
11693 },
9e30b8e0
L
11694 {
11695 /* MOD_0F01_REG_7 */
bf890a93 11696 { "invlpg", { Mb }, 0 },
9e30b8e0
L
11697 { RM_TABLE (RM_0F01_REG_7) },
11698 },
11699 {
11700 /* MOD_0F12_PREFIX_0 */
507bd325
L
11701 { "movlps", { XM, EXq }, PREFIX_OPCODE },
11702 { "movhlps", { XM, EXq }, PREFIX_OPCODE },
9e30b8e0
L
11703 },
11704 {
11705 /* MOD_0F13 */
507bd325 11706 { "movlpX", { EXq, XM }, PREFIX_OPCODE },
9e30b8e0
L
11707 },
11708 {
11709 /* MOD_0F16_PREFIX_0 */
bf890a93
IT
11710 { "movhps", { XM, EXq }, 0 },
11711 { "movlhps", { XM, EXq }, 0 },
9e30b8e0
L
11712 },
11713 {
11714 /* MOD_0F17 */
507bd325 11715 { "movhpX", { EXq, XM }, PREFIX_OPCODE },
9e30b8e0
L
11716 },
11717 {
11718 /* MOD_0F18_REG_0 */
bf890a93 11719 { "prefetchnta", { Mb }, 0 },
9e30b8e0
L
11720 },
11721 {
11722 /* MOD_0F18_REG_1 */
bf890a93 11723 { "prefetcht0", { Mb }, 0 },
9e30b8e0
L
11724 },
11725 {
11726 /* MOD_0F18_REG_2 */
bf890a93 11727 { "prefetcht1", { Mb }, 0 },
9e30b8e0
L
11728 },
11729 {
11730 /* MOD_0F18_REG_3 */
bf890a93 11731 { "prefetcht2", { Mb }, 0 },
9e30b8e0 11732 },
d7189fa5
RM
11733 {
11734 /* MOD_0F18_REG_4 */
bf890a93 11735 { "nop/reserved", { Mb }, 0 },
d7189fa5
RM
11736 },
11737 {
11738 /* MOD_0F18_REG_5 */
bf890a93 11739 { "nop/reserved", { Mb }, 0 },
d7189fa5
RM
11740 },
11741 {
11742 /* MOD_0F18_REG_6 */
bf890a93 11743 { "nop/reserved", { Mb }, 0 },
d7189fa5
RM
11744 },
11745 {
11746 /* MOD_0F18_REG_7 */
bf890a93 11747 { "nop/reserved", { Mb }, 0 },
d7189fa5 11748 },
7e8b059b
L
11749 {
11750 /* MOD_0F1A_PREFIX_0 */
bf890a93
IT
11751 { "bndldx", { Gbnd, Ev_bnd }, 0 },
11752 { "nopQ", { Ev }, 0 },
7e8b059b
L
11753 },
11754 {
11755 /* MOD_0F1B_PREFIX_0 */
bf890a93
IT
11756 { "bndstx", { Ev_bnd, Gbnd }, 0 },
11757 { "nopQ", { Ev }, 0 },
7e8b059b
L
11758 },
11759 {
11760 /* MOD_0F1B_PREFIX_1 */
bf890a93
IT
11761 { "bndmk", { Gbnd, Ev_bnd }, 0 },
11762 { "nopQ", { Ev }, 0 },
7e8b059b 11763 },
b844680a 11764 {
92fddf8e 11765 /* MOD_0F24 */
7bb15c6f 11766 { Bad_Opcode },
bf890a93 11767 { "movL", { Rd, Td }, 0 },
b844680a
L
11768 },
11769 {
92fddf8e 11770 /* MOD_0F26 */
592d1631 11771 { Bad_Opcode },
bf890a93 11772 { "movL", { Td, Rd }, 0 },
b844680a 11773 },
75c135a8
L
11774 {
11775 /* MOD_0F2B_PREFIX_0 */
507bd325 11776 {"movntps", { Mx, XM }, PREFIX_OPCODE },
75c135a8
L
11777 },
11778 {
11779 /* MOD_0F2B_PREFIX_1 */
507bd325 11780 {"movntss", { Md, XM }, PREFIX_OPCODE },
75c135a8
L
11781 },
11782 {
11783 /* MOD_0F2B_PREFIX_2 */
507bd325 11784 {"movntpd", { Mx, XM }, PREFIX_OPCODE },
75c135a8
L
11785 },
11786 {
11787 /* MOD_0F2B_PREFIX_3 */
507bd325 11788 {"movntsd", { Mq, XM }, PREFIX_OPCODE },
75c135a8
L
11789 },
11790 {
11791 /* MOD_0F51 */
592d1631 11792 { Bad_Opcode },
507bd325 11793 { "movmskpX", { Gdq, XS }, PREFIX_OPCODE },
75c135a8 11794 },
b844680a 11795 {
1ceb70f8 11796 /* MOD_0F71_REG_2 */
592d1631 11797 { Bad_Opcode },
bf890a93 11798 { "psrlw", { MS, Ib }, 0 },
b844680a
L
11799 },
11800 {
1ceb70f8 11801 /* MOD_0F71_REG_4 */
592d1631 11802 { Bad_Opcode },
bf890a93 11803 { "psraw", { MS, Ib }, 0 },
b844680a
L
11804 },
11805 {
1ceb70f8 11806 /* MOD_0F71_REG_6 */
592d1631 11807 { Bad_Opcode },
bf890a93 11808 { "psllw", { MS, Ib }, 0 },
b844680a
L
11809 },
11810 {
1ceb70f8 11811 /* MOD_0F72_REG_2 */
592d1631 11812 { Bad_Opcode },
bf890a93 11813 { "psrld", { MS, Ib }, 0 },
b844680a
L
11814 },
11815 {
1ceb70f8 11816 /* MOD_0F72_REG_4 */
592d1631 11817 { Bad_Opcode },
bf890a93 11818 { "psrad", { MS, Ib }, 0 },
b844680a
L
11819 },
11820 {
1ceb70f8 11821 /* MOD_0F72_REG_6 */
592d1631 11822 { Bad_Opcode },
bf890a93 11823 { "pslld", { MS, Ib }, 0 },
b844680a
L
11824 },
11825 {
1ceb70f8 11826 /* MOD_0F73_REG_2 */
592d1631 11827 { Bad_Opcode },
bf890a93 11828 { "psrlq", { MS, Ib }, 0 },
b844680a
L
11829 },
11830 {
1ceb70f8 11831 /* MOD_0F73_REG_3 */
592d1631 11832 { Bad_Opcode },
c0f3af97
L
11833 { PREFIX_TABLE (PREFIX_0F73_REG_3) },
11834 },
11835 {
11836 /* MOD_0F73_REG_6 */
592d1631 11837 { Bad_Opcode },
bf890a93 11838 { "psllq", { MS, Ib }, 0 },
c0f3af97
L
11839 },
11840 {
11841 /* MOD_0F73_REG_7 */
592d1631 11842 { Bad_Opcode },
c0f3af97
L
11843 { PREFIX_TABLE (PREFIX_0F73_REG_7) },
11844 },
11845 {
11846 /* MOD_0FAE_REG_0 */
bf890a93 11847 { "fxsave", { FXSAVE }, 0 },
c7b8aa3a 11848 { PREFIX_TABLE (PREFIX_0FAE_REG_0) },
c0f3af97
L
11849 },
11850 {
11851 /* MOD_0FAE_REG_1 */
bf890a93 11852 { "fxrstor", { FXSAVE }, 0 },
c7b8aa3a 11853 { PREFIX_TABLE (PREFIX_0FAE_REG_1) },
c0f3af97
L
11854 },
11855 {
11856 /* MOD_0FAE_REG_2 */
bf890a93 11857 { "ldmxcsr", { Md }, 0 },
c7b8aa3a 11858 { PREFIX_TABLE (PREFIX_0FAE_REG_2) },
c0f3af97
L
11859 },
11860 {
11861 /* MOD_0FAE_REG_3 */
bf890a93 11862 { "stmxcsr", { Md }, 0 },
c7b8aa3a 11863 { PREFIX_TABLE (PREFIX_0FAE_REG_3) },
c0f3af97
L
11864 },
11865 {
11866 /* MOD_0FAE_REG_4 */
bf890a93 11867 { "xsave", { FXSAVE }, 0 },
c0f3af97
L
11868 },
11869 {
11870 /* MOD_0FAE_REG_5 */
bf890a93 11871 { "xrstor", { FXSAVE }, 0 },
c0f3af97
L
11872 { RM_TABLE (RM_0FAE_REG_5) },
11873 },
11874 {
11875 /* MOD_0FAE_REG_6 */
c5e7287a 11876 { PREFIX_TABLE (PREFIX_0FAE_REG_6) },
c0f3af97
L
11877 { RM_TABLE (RM_0FAE_REG_6) },
11878 },
11879 {
11880 /* MOD_0FAE_REG_7 */
963f3586 11881 { PREFIX_TABLE (PREFIX_0FAE_REG_7) },
c0f3af97
L
11882 { RM_TABLE (RM_0FAE_REG_7) },
11883 },
11884 {
11885 /* MOD_0FB2 */
bf890a93 11886 { "lssS", { Gv, Mp }, 0 },
c0f3af97
L
11887 },
11888 {
11889 /* MOD_0FB4 */
bf890a93 11890 { "lfsS", { Gv, Mp }, 0 },
c0f3af97
L
11891 },
11892 {
11893 /* MOD_0FB5 */
bf890a93 11894 { "lgsS", { Gv, Mp }, 0 },
c0f3af97 11895 },
a8484f96
L
11896 {
11897 /* MOD_0FC3 */
11898 { PREFIX_TABLE (PREFIX_MOD_0_0FC3) },
11899 },
963f3586
IT
11900 {
11901 /* MOD_0FC7_REG_3 */
a8484f96 11902 { "xrstors", { FXSAVE }, 0 },
963f3586
IT
11903 },
11904 {
11905 /* MOD_0FC7_REG_4 */
bf890a93 11906 { "xsavec", { FXSAVE }, 0 },
963f3586
IT
11907 },
11908 {
11909 /* MOD_0FC7_REG_5 */
bf890a93 11910 { "xsaves", { FXSAVE }, 0 },
963f3586 11911 },
c0f3af97
L
11912 {
11913 /* MOD_0FC7_REG_6 */
f24bcbaa
L
11914 { PREFIX_TABLE (PREFIX_MOD_0_0FC7_REG_6) },
11915 { PREFIX_TABLE (PREFIX_MOD_3_0FC7_REG_6) }
c0f3af97
L
11916 },
11917 {
11918 /* MOD_0FC7_REG_7 */
bf890a93 11919 { "vmptrst", { Mq }, 0 },
f24bcbaa 11920 { PREFIX_TABLE (PREFIX_MOD_3_0FC7_REG_7) }
c0f3af97
L
11921 },
11922 {
11923 /* MOD_0FD7 */
592d1631 11924 { Bad_Opcode },
bf890a93 11925 { "pmovmskb", { Gdq, MS }, 0 },
c0f3af97
L
11926 },
11927 {
11928 /* MOD_0FE7_PREFIX_2 */
bf890a93 11929 { "movntdq", { Mx, XM }, 0 },
c0f3af97
L
11930 },
11931 {
11932 /* MOD_0FF0_PREFIX_3 */
bf890a93 11933 { "lddqu", { XM, M }, 0 },
c0f3af97
L
11934 },
11935 {
11936 /* MOD_0F382A_PREFIX_2 */
bf890a93 11937 { "movntdqa", { XM, Mx }, 0 },
c0f3af97
L
11938 },
11939 {
11940 /* MOD_62_32BIT */
bf890a93 11941 { "bound{S|}", { Gv, Ma }, 0 },
43234a1e 11942 { EVEX_TABLE (EVEX_0F) },
c0f3af97
L
11943 },
11944 {
11945 /* MOD_C4_32BIT */
bf890a93 11946 { "lesS", { Gv, Mp }, 0 },
c0f3af97
L
11947 { VEX_C4_TABLE (VEX_0F) },
11948 },
11949 {
11950 /* MOD_C5_32BIT */
bf890a93 11951 { "ldsS", { Gv, Mp }, 0 },
c0f3af97
L
11952 { VEX_C5_TABLE (VEX_0F) },
11953 },
11954 {
592a252b
L
11955 /* MOD_VEX_0F12_PREFIX_0 */
11956 { VEX_LEN_TABLE (VEX_LEN_0F12_P_0_M_0) },
11957 { VEX_LEN_TABLE (VEX_LEN_0F12_P_0_M_1) },
c0f3af97
L
11958 },
11959 {
592a252b
L
11960 /* MOD_VEX_0F13 */
11961 { VEX_LEN_TABLE (VEX_LEN_0F13_M_0) },
c0f3af97
L
11962 },
11963 {
592a252b
L
11964 /* MOD_VEX_0F16_PREFIX_0 */
11965 { VEX_LEN_TABLE (VEX_LEN_0F16_P_0_M_0) },
11966 { VEX_LEN_TABLE (VEX_LEN_0F16_P_0_M_1) },
c0f3af97
L
11967 },
11968 {
592a252b
L
11969 /* MOD_VEX_0F17 */
11970 { VEX_LEN_TABLE (VEX_LEN_0F17_M_0) },
c0f3af97
L
11971 },
11972 {
592a252b
L
11973 /* MOD_VEX_0F2B */
11974 { VEX_W_TABLE (VEX_W_0F2B_M_0) },
c0f3af97 11975 },
ab4e4ed5
AF
11976 {
11977 /* MOD_VEX_W_0_0F41_P_0_LEN_1 */
11978 { Bad_Opcode },
11979 { "kandw", { MaskG, MaskVex, MaskR }, 0 },
11980 },
11981 {
11982 /* MOD_VEX_W_1_0F41_P_0_LEN_1 */
11983 { Bad_Opcode },
11984 { "kandq", { MaskG, MaskVex, MaskR }, 0 },
11985 },
11986 {
11987 /* MOD_VEX_W_0_0F41_P_2_LEN_1 */
11988 { Bad_Opcode },
11989 { "kandb", { MaskG, MaskVex, MaskR }, 0 },
11990 },
11991 {
11992 /* MOD_VEX_W_1_0F41_P_2_LEN_1 */
11993 { Bad_Opcode },
11994 { "kandd", { MaskG, MaskVex, MaskR }, 0 },
11995 },
11996 {
11997 /* MOD_VEX_W_0_0F42_P_0_LEN_1 */
11998 { Bad_Opcode },
11999 { "kandnw", { MaskG, MaskVex, MaskR }, 0 },
12000 },
12001 {
12002 /* MOD_VEX_W_1_0F42_P_0_LEN_1 */
12003 { Bad_Opcode },
12004 { "kandnq", { MaskG, MaskVex, MaskR }, 0 },
12005 },
12006 {
12007 /* MOD_VEX_W_0_0F42_P_2_LEN_1 */
12008 { Bad_Opcode },
12009 { "kandnb", { MaskG, MaskVex, MaskR }, 0 },
12010 },
12011 {
12012 /* MOD_VEX_W_1_0F42_P_2_LEN_1 */
12013 { Bad_Opcode },
12014 { "kandnd", { MaskG, MaskVex, MaskR }, 0 },
12015 },
12016 {
12017 /* MOD_VEX_W_0_0F44_P_0_LEN_0 */
12018 { Bad_Opcode },
12019 { "knotw", { MaskG, MaskR }, 0 },
12020 },
12021 {
12022 /* MOD_VEX_W_1_0F44_P_0_LEN_0 */
12023 { Bad_Opcode },
12024 { "knotq", { MaskG, MaskR }, 0 },
12025 },
12026 {
12027 /* MOD_VEX_W_0_0F44_P_2_LEN_0 */
12028 { Bad_Opcode },
12029 { "knotb", { MaskG, MaskR }, 0 },
12030 },
12031 {
12032 /* MOD_VEX_W_1_0F44_P_2_LEN_0 */
12033 { Bad_Opcode },
12034 { "knotd", { MaskG, MaskR }, 0 },
12035 },
12036 {
12037 /* MOD_VEX_W_0_0F45_P_0_LEN_1 */
12038 { Bad_Opcode },
12039 { "korw", { MaskG, MaskVex, MaskR }, 0 },
12040 },
12041 {
12042 /* MOD_VEX_W_1_0F45_P_0_LEN_1 */
12043 { Bad_Opcode },
12044 { "korq", { MaskG, MaskVex, MaskR }, 0 },
12045 },
12046 {
12047 /* MOD_VEX_W_0_0F45_P_2_LEN_1 */
12048 { Bad_Opcode },
12049 { "korb", { MaskG, MaskVex, MaskR }, 0 },
12050 },
12051 {
12052 /* MOD_VEX_W_1_0F45_P_2_LEN_1 */
12053 { Bad_Opcode },
12054 { "kord", { MaskG, MaskVex, MaskR }, 0 },
12055 },
12056 {
12057 /* MOD_VEX_W_0_0F46_P_0_LEN_1 */
12058 { Bad_Opcode },
12059 { "kxnorw", { MaskG, MaskVex, MaskR }, 0 },
12060 },
12061 {
12062 /* MOD_VEX_W_1_0F46_P_0_LEN_1 */
12063 { Bad_Opcode },
12064 { "kxnorq", { MaskG, MaskVex, MaskR }, 0 },
12065 },
12066 {
12067 /* MOD_VEX_W_0_0F46_P_2_LEN_1 */
12068 { Bad_Opcode },
12069 { "kxnorb", { MaskG, MaskVex, MaskR }, 0 },
12070 },
12071 {
12072 /* MOD_VEX_W_1_0F46_P_2_LEN_1 */
12073 { Bad_Opcode },
12074 { "kxnord", { MaskG, MaskVex, MaskR }, 0 },
12075 },
12076 {
12077 /* MOD_VEX_W_0_0F47_P_0_LEN_1 */
12078 { Bad_Opcode },
12079 { "kxorw", { MaskG, MaskVex, MaskR }, 0 },
12080 },
12081 {
12082 /* MOD_VEX_W_1_0F47_P_0_LEN_1 */
12083 { Bad_Opcode },
12084 { "kxorq", { MaskG, MaskVex, MaskR }, 0 },
12085 },
12086 {
12087 /* MOD_VEX_W_0_0F47_P_2_LEN_1 */
12088 { Bad_Opcode },
12089 { "kxorb", { MaskG, MaskVex, MaskR }, 0 },
12090 },
12091 {
12092 /* MOD_VEX_W_1_0F47_P_2_LEN_1 */
12093 { Bad_Opcode },
12094 { "kxord", { MaskG, MaskVex, MaskR }, 0 },
12095 },
12096 {
12097 /* MOD_VEX_W_0_0F4A_P_0_LEN_1 */
12098 { Bad_Opcode },
12099 { "kaddw", { MaskG, MaskVex, MaskR }, 0 },
12100 },
12101 {
12102 /* MOD_VEX_W_1_0F4A_P_0_LEN_1 */
12103 { Bad_Opcode },
12104 { "kaddq", { MaskG, MaskVex, MaskR }, 0 },
12105 },
12106 {
12107 /* MOD_VEX_W_0_0F4A_P_2_LEN_1 */
12108 { Bad_Opcode },
12109 { "kaddb", { MaskG, MaskVex, MaskR }, 0 },
12110 },
12111 {
12112 /* MOD_VEX_W_1_0F4A_P_2_LEN_1 */
12113 { Bad_Opcode },
12114 { "kaddd", { MaskG, MaskVex, MaskR }, 0 },
12115 },
12116 {
12117 /* MOD_VEX_W_0_0F4B_P_0_LEN_1 */
12118 { Bad_Opcode },
12119 { "kunpckwd", { MaskG, MaskVex, MaskR }, 0 },
12120 },
12121 {
12122 /* MOD_VEX_W_1_0F4B_P_0_LEN_1 */
12123 { Bad_Opcode },
12124 { "kunpckdq", { MaskG, MaskVex, MaskR }, 0 },
12125 },
12126 {
12127 /* MOD_VEX_W_0_0F4B_P_2_LEN_1 */
12128 { Bad_Opcode },
12129 { "kunpckbw", { MaskG, MaskVex, MaskR }, 0 },
12130 },
c0f3af97 12131 {
592a252b 12132 /* MOD_VEX_0F50 */
592d1631 12133 { Bad_Opcode },
592a252b 12134 { VEX_W_TABLE (VEX_W_0F50_M_0) },
c0f3af97
L
12135 },
12136 {
592a252b 12137 /* MOD_VEX_0F71_REG_2 */
592d1631 12138 { Bad_Opcode },
592a252b 12139 { PREFIX_TABLE (PREFIX_VEX_0F71_REG_2) },
b844680a
L
12140 },
12141 {
592a252b 12142 /* MOD_VEX_0F71_REG_4 */
592d1631 12143 { Bad_Opcode },
592a252b 12144 { PREFIX_TABLE (PREFIX_VEX_0F71_REG_4) },
b844680a
L
12145 },
12146 {
592a252b 12147 /* MOD_VEX_0F71_REG_6 */
592d1631 12148 { Bad_Opcode },
592a252b 12149 { PREFIX_TABLE (PREFIX_VEX_0F71_REG_6) },
b844680a
L
12150 },
12151 {
592a252b 12152 /* MOD_VEX_0F72_REG_2 */
592d1631 12153 { Bad_Opcode },
592a252b 12154 { PREFIX_TABLE (PREFIX_VEX_0F72_REG_2) },
b844680a 12155 },
d8faab4e 12156 {
592a252b 12157 /* MOD_VEX_0F72_REG_4 */
592d1631 12158 { Bad_Opcode },
592a252b 12159 { PREFIX_TABLE (PREFIX_VEX_0F72_REG_4) },
d8faab4e
L
12160 },
12161 {
592a252b 12162 /* MOD_VEX_0F72_REG_6 */
592d1631 12163 { Bad_Opcode },
592a252b 12164 { PREFIX_TABLE (PREFIX_VEX_0F72_REG_6) },
d8faab4e 12165 },
876d4bfa 12166 {
592a252b 12167 /* MOD_VEX_0F73_REG_2 */
592d1631 12168 { Bad_Opcode },
592a252b 12169 { PREFIX_TABLE (PREFIX_VEX_0F73_REG_2) },
876d4bfa
L
12170 },
12171 {
592a252b 12172 /* MOD_VEX_0F73_REG_3 */
592d1631 12173 { Bad_Opcode },
592a252b 12174 { PREFIX_TABLE (PREFIX_VEX_0F73_REG_3) },
475a2301
L
12175 },
12176 {
592a252b 12177 /* MOD_VEX_0F73_REG_6 */
592d1631 12178 { Bad_Opcode },
592a252b 12179 { PREFIX_TABLE (PREFIX_VEX_0F73_REG_6) },
876d4bfa
L
12180 },
12181 {
592a252b 12182 /* MOD_VEX_0F73_REG_7 */
592d1631 12183 { Bad_Opcode },
592a252b 12184 { PREFIX_TABLE (PREFIX_VEX_0F73_REG_7) },
876d4bfa 12185 },
ab4e4ed5
AF
12186 {
12187 /* MOD_VEX_W_0_0F91_P_0_LEN_0 */
12188 { "kmovw", { Ew, MaskG }, 0 },
12189 { Bad_Opcode },
12190 },
12191 {
12192 /* MOD_VEX_W_0_0F91_P_0_LEN_0 */
12193 { "kmovq", { Eq, MaskG }, 0 },
12194 { Bad_Opcode },
12195 },
12196 {
12197 /* MOD_VEX_W_0_0F91_P_2_LEN_0 */
12198 { "kmovb", { Eb, MaskG }, 0 },
12199 { Bad_Opcode },
12200 },
12201 {
12202 /* MOD_VEX_W_0_0F91_P_2_LEN_0 */
12203 { "kmovd", { Ed, MaskG }, 0 },
12204 { Bad_Opcode },
12205 },
12206 {
12207 /* MOD_VEX_W_0_0F92_P_0_LEN_0 */
12208 { Bad_Opcode },
12209 { "kmovw", { MaskG, Rdq }, 0 },
12210 },
12211 {
12212 /* MOD_VEX_W_0_0F92_P_2_LEN_0 */
12213 { Bad_Opcode },
12214 { "kmovb", { MaskG, Rdq }, 0 },
12215 },
12216 {
12217 /* MOD_VEX_W_0_0F92_P_3_LEN_0 */
12218 { Bad_Opcode },
12219 { "kmovd", { MaskG, Rdq }, 0 },
12220 },
12221 {
12222 /* MOD_VEX_W_1_0F92_P_3_LEN_0 */
12223 { Bad_Opcode },
12224 { "kmovq", { MaskG, Rdq }, 0 },
12225 },
12226 {
12227 /* MOD_VEX_W_0_0F93_P_0_LEN_0 */
12228 { Bad_Opcode },
12229 { "kmovw", { Gdq, MaskR }, 0 },
12230 },
12231 {
12232 /* MOD_VEX_W_0_0F93_P_2_LEN_0 */
12233 { Bad_Opcode },
12234 { "kmovb", { Gdq, MaskR }, 0 },
12235 },
12236 {
12237 /* MOD_VEX_W_0_0F93_P_3_LEN_0 */
12238 { Bad_Opcode },
12239 { "kmovd", { Gdq, MaskR }, 0 },
12240 },
12241 {
12242 /* MOD_VEX_W_1_0F93_P_3_LEN_0 */
12243 { Bad_Opcode },
12244 { "kmovq", { Gdq, MaskR }, 0 },
12245 },
12246 {
12247 /* MOD_VEX_W_0_0F98_P_0_LEN_0 */
12248 { Bad_Opcode },
12249 { "kortestw", { MaskG, MaskR }, 0 },
12250 },
12251 {
12252 /* MOD_VEX_W_1_0F98_P_0_LEN_0 */
12253 { Bad_Opcode },
12254 { "kortestq", { MaskG, MaskR }, 0 },
12255 },
12256 {
12257 /* MOD_VEX_W_0_0F98_P_2_LEN_0 */
12258 { Bad_Opcode },
12259 { "kortestb", { MaskG, MaskR }, 0 },
12260 },
12261 {
12262 /* MOD_VEX_W_1_0F98_P_2_LEN_0 */
12263 { Bad_Opcode },
12264 { "kortestd", { MaskG, MaskR }, 0 },
12265 },
12266 {
12267 /* MOD_VEX_W_0_0F99_P_0_LEN_0 */
12268 { Bad_Opcode },
12269 { "ktestw", { MaskG, MaskR }, 0 },
12270 },
12271 {
12272 /* MOD_VEX_W_1_0F99_P_0_LEN_0 */
12273 { Bad_Opcode },
12274 { "ktestq", { MaskG, MaskR }, 0 },
12275 },
12276 {
12277 /* MOD_VEX_W_0_0F99_P_2_LEN_0 */
12278 { Bad_Opcode },
12279 { "ktestb", { MaskG, MaskR }, 0 },
12280 },
12281 {
12282 /* MOD_VEX_W_1_0F99_P_2_LEN_0 */
12283 { Bad_Opcode },
12284 { "ktestd", { MaskG, MaskR }, 0 },
12285 },
876d4bfa 12286 {
592a252b
L
12287 /* MOD_VEX_0FAE_REG_2 */
12288 { VEX_LEN_TABLE (VEX_LEN_0FAE_R_2_M_0) },
876d4bfa 12289 },
bbedc832 12290 {
592a252b
L
12291 /* MOD_VEX_0FAE_REG_3 */
12292 { VEX_LEN_TABLE (VEX_LEN_0FAE_R_3_M_0) },
bbedc832 12293 },
144c41d9 12294 {
592a252b 12295 /* MOD_VEX_0FD7_PREFIX_2 */
592d1631 12296 { Bad_Opcode },
6c30d220 12297 { VEX_W_TABLE (VEX_W_0FD7_P_2_M_1) },
144c41d9 12298 },
1afd85e3 12299 {
592a252b
L
12300 /* MOD_VEX_0FE7_PREFIX_2 */
12301 { VEX_W_TABLE (VEX_W_0FE7_P_2_M_0) },
1afd85e3
L
12302 },
12303 {
592a252b
L
12304 /* MOD_VEX_0FF0_PREFIX_3 */
12305 { VEX_W_TABLE (VEX_W_0FF0_P_3_M_0) },
92fddf8e 12306 },
75c135a8 12307 {
592a252b
L
12308 /* MOD_VEX_0F381A_PREFIX_2 */
12309 { VEX_LEN_TABLE (VEX_LEN_0F381A_P_2_M_0) },
75c135a8 12310 },
1afd85e3 12311 {
592a252b 12312 /* MOD_VEX_0F382A_PREFIX_2 */
6c30d220 12313 { VEX_W_TABLE (VEX_W_0F382A_P_2_M_0) },
1afd85e3 12314 },
75c135a8 12315 {
592a252b
L
12316 /* MOD_VEX_0F382C_PREFIX_2 */
12317 { VEX_W_TABLE (VEX_W_0F382C_P_2_M_0) },
75c135a8 12318 },
1afd85e3 12319 {
592a252b
L
12320 /* MOD_VEX_0F382D_PREFIX_2 */
12321 { VEX_W_TABLE (VEX_W_0F382D_P_2_M_0) },
1afd85e3
L
12322 },
12323 {
592a252b
L
12324 /* MOD_VEX_0F382E_PREFIX_2 */
12325 { VEX_W_TABLE (VEX_W_0F382E_P_2_M_0) },
1afd85e3
L
12326 },
12327 {
592a252b
L
12328 /* MOD_VEX_0F382F_PREFIX_2 */
12329 { VEX_W_TABLE (VEX_W_0F382F_P_2_M_0) },
1afd85e3 12330 },
6c30d220
L
12331 {
12332 /* MOD_VEX_0F385A_PREFIX_2 */
12333 { VEX_LEN_TABLE (VEX_LEN_0F385A_P_2_M_0) },
12334 },
12335 {
12336 /* MOD_VEX_0F388C_PREFIX_2 */
bf890a93 12337 { "vpmaskmov%LW", { XM, Vex, Mx }, 0 },
6c30d220
L
12338 },
12339 {
12340 /* MOD_VEX_0F388E_PREFIX_2 */
bf890a93 12341 { "vpmaskmov%LW", { Mx, Vex, XM }, 0 },
6c30d220 12342 },
ab4e4ed5
AF
12343 {
12344 /* MOD_VEX_W_0_0F3A30_P_2_LEN_0 */
12345 { Bad_Opcode },
12346 { "kshiftrb", { MaskG, MaskR, Ib }, 0 },
12347 },
12348 {
12349 /* MOD_VEX_W_1_0F3A30_P_2_LEN_0 */
12350 { Bad_Opcode },
12351 { "kshiftrw", { MaskG, MaskR, Ib }, 0 },
12352 },
12353 {
12354 /* MOD_VEX_W_0_0F3A31_P_2_LEN_0 */
12355 { Bad_Opcode },
12356 { "kshiftrd", { MaskG, MaskR, Ib }, 0 },
12357 },
12358 {
12359 /* MOD_VEX_W_1_0F3A31_P_2_LEN_0 */
12360 { Bad_Opcode },
12361 { "kshiftrq", { MaskG, MaskR, Ib }, 0 },
12362 },
12363 {
12364 /* MOD_VEX_W_0_0F3A32_P_2_LEN_0 */
12365 { Bad_Opcode },
12366 { "kshiftlb", { MaskG, MaskR, Ib }, 0 },
12367 },
12368 {
12369 /* MOD_VEX_W_1_0F3A32_P_2_LEN_0 */
12370 { Bad_Opcode },
12371 { "kshiftlw", { MaskG, MaskR, Ib }, 0 },
12372 },
12373 {
12374 /* MOD_VEX_W_0_0F3A33_P_2_LEN_0 */
12375 { Bad_Opcode },
12376 { "kshiftld", { MaskG, MaskR, Ib }, 0 },
12377 },
12378 {
12379 /* MOD_VEX_W_1_0F3A33_P_2_LEN_0 */
12380 { Bad_Opcode },
12381 { "kshiftlq", { MaskG, MaskR, Ib }, 0 },
12382 },
43234a1e
L
12383#define NEED_MOD_TABLE
12384#include "i386-dis-evex.h"
12385#undef NEED_MOD_TABLE
b844680a
L
12386};
12387
1ceb70f8 12388static const struct dis386 rm_table[][8] = {
42164a71
L
12389 {
12390 /* RM_C6_REG_7 */
bf890a93 12391 { "xabort", { Skip_MODRM, Ib }, 0 },
42164a71
L
12392 },
12393 {
12394 /* RM_C7_REG_7 */
bf890a93 12395 { "xbeginT", { Skip_MODRM, Jv }, 0 },
42164a71 12396 },
b844680a 12397 {
1ceb70f8 12398 /* RM_0F01_REG_0 */
592d1631 12399 { Bad_Opcode },
bf890a93
IT
12400 { "vmcall", { Skip_MODRM }, 0 },
12401 { "vmlaunch", { Skip_MODRM }, 0 },
12402 { "vmresume", { Skip_MODRM }, 0 },
12403 { "vmxoff", { Skip_MODRM }, 0 },
b844680a
L
12404 },
12405 {
1ceb70f8 12406 /* RM_0F01_REG_1 */
bf890a93
IT
12407 { "monitor", { { OP_Monitor, 0 } }, 0 },
12408 { "mwait", { { OP_Mwait, 0 } }, 0 },
12409 { "clac", { Skip_MODRM }, 0 },
12410 { "stac", { Skip_MODRM }, 0 },
2cf200a4
IT
12411 { Bad_Opcode },
12412 { Bad_Opcode },
12413 { Bad_Opcode },
bf890a93 12414 { "encls", { Skip_MODRM }, 0 },
b844680a 12415 },
475a2301
L
12416 {
12417 /* RM_0F01_REG_2 */
bf890a93
IT
12418 { "xgetbv", { Skip_MODRM }, 0 },
12419 { "xsetbv", { Skip_MODRM }, 0 },
8729a6f6
L
12420 { Bad_Opcode },
12421 { Bad_Opcode },
bf890a93
IT
12422 { "vmfunc", { Skip_MODRM }, 0 },
12423 { "xend", { Skip_MODRM }, 0 },
12424 { "xtest", { Skip_MODRM }, 0 },
12425 { "enclu", { Skip_MODRM }, 0 },
475a2301 12426 },
b844680a 12427 {
1ceb70f8 12428 /* RM_0F01_REG_3 */
bf890a93
IT
12429 { "vmrun", { Skip_MODRM }, 0 },
12430 { "vmmcall", { Skip_MODRM }, 0 },
12431 { "vmload", { Skip_MODRM }, 0 },
12432 { "vmsave", { Skip_MODRM }, 0 },
12433 { "stgi", { Skip_MODRM }, 0 },
12434 { "clgi", { Skip_MODRM }, 0 },
12435 { "skinit", { Skip_MODRM }, 0 },
12436 { "invlpga", { Skip_MODRM }, 0 },
4e7d34a6 12437 },
8eab4136
L
12438 {
12439 /* RM_0F01_REG_5 */
12440 { Bad_Opcode },
12441 { Bad_Opcode },
12442 { Bad_Opcode },
12443 { Bad_Opcode },
12444 { Bad_Opcode },
12445 { Bad_Opcode },
12446 { "rdpkru", { Skip_MODRM }, 0 },
12447 { "wrpkru", { Skip_MODRM }, 0 },
12448 },
4e7d34a6 12449 {
1ceb70f8 12450 /* RM_0F01_REG_7 */
bf890a93
IT
12451 { "swapgs", { Skip_MODRM }, 0 },
12452 { "rdtscp", { Skip_MODRM }, 0 },
9916071f
AP
12453 { "monitorx", { { OP_Monitor, 0 } }, 0 },
12454 { "mwaitx", { { OP_Mwaitx, 0 } }, 0 },
bf890a93 12455 { "clzero", { Skip_MODRM }, 0 },
b844680a
L
12456 },
12457 {
1ceb70f8 12458 /* RM_0FAE_REG_5 */
bf890a93 12459 { "lfence", { Skip_MODRM }, 0 },
b844680a
L
12460 },
12461 {
1ceb70f8 12462 /* RM_0FAE_REG_6 */
bf890a93 12463 { "mfence", { Skip_MODRM }, 0 },
b844680a 12464 },
bbedc832 12465 {
1ceb70f8 12466 /* RM_0FAE_REG_7 */
9d8596f0 12467 { PREFIX_TABLE (PREFIX_RM_0_0FAE_REG_7) },
144c41d9 12468 },
b844680a
L
12469};
12470
c608c12e
AM
12471#define INTERNAL_DISASSEMBLER_ERROR _("<internal disassembler error>")
12472
f16cd0d5
L
12473/* We use the high bit to indicate different name for the same
12474 prefix. */
f16cd0d5 12475#define REP_PREFIX (0xf3 | 0x100)
42164a71
L
12476#define XACQUIRE_PREFIX (0xf2 | 0x200)
12477#define XRELEASE_PREFIX (0xf3 | 0x400)
7e8b059b 12478#define BND_PREFIX (0xf2 | 0x400)
f16cd0d5
L
12479
12480static int
26ca5450 12481ckprefix (void)
252b5132 12482{
f16cd0d5 12483 int newrex, i, length;
52b15da3 12484 rex = 0;
c0f3af97 12485 rex_ignored = 0;
252b5132 12486 prefixes = 0;
7d421014 12487 used_prefixes = 0;
52b15da3 12488 rex_used = 0;
f16cd0d5
L
12489 last_lock_prefix = -1;
12490 last_repz_prefix = -1;
12491 last_repnz_prefix = -1;
12492 last_data_prefix = -1;
12493 last_addr_prefix = -1;
12494 last_rex_prefix = -1;
12495 last_seg_prefix = -1;
d9949a36 12496 fwait_prefix = -1;
285ca992 12497 active_seg_prefix = 0;
f310f33d
L
12498 for (i = 0; i < (int) ARRAY_SIZE (all_prefixes); i++)
12499 all_prefixes[i] = 0;
12500 i = 0;
f16cd0d5
L
12501 length = 0;
12502 /* The maximum instruction length is 15bytes. */
12503 while (length < MAX_CODE_LENGTH - 1)
252b5132
RH
12504 {
12505 FETCH_DATA (the_info, codep + 1);
52b15da3 12506 newrex = 0;
252b5132
RH
12507 switch (*codep)
12508 {
52b15da3
JH
12509 /* REX prefixes family. */
12510 case 0x40:
12511 case 0x41:
12512 case 0x42:
12513 case 0x43:
12514 case 0x44:
12515 case 0x45:
12516 case 0x46:
12517 case 0x47:
12518 case 0x48:
12519 case 0x49:
12520 case 0x4a:
12521 case 0x4b:
12522 case 0x4c:
12523 case 0x4d:
12524 case 0x4e:
12525 case 0x4f:
f16cd0d5
L
12526 if (address_mode == mode_64bit)
12527 newrex = *codep;
12528 else
12529 return 1;
12530 last_rex_prefix = i;
52b15da3 12531 break;
252b5132
RH
12532 case 0xf3:
12533 prefixes |= PREFIX_REPZ;
f16cd0d5 12534 last_repz_prefix = i;
252b5132
RH
12535 break;
12536 case 0xf2:
12537 prefixes |= PREFIX_REPNZ;
f16cd0d5 12538 last_repnz_prefix = i;
252b5132
RH
12539 break;
12540 case 0xf0:
12541 prefixes |= PREFIX_LOCK;
f16cd0d5 12542 last_lock_prefix = i;
252b5132
RH
12543 break;
12544 case 0x2e:
12545 prefixes |= PREFIX_CS;
f16cd0d5 12546 last_seg_prefix = i;
285ca992 12547 active_seg_prefix = PREFIX_CS;
252b5132
RH
12548 break;
12549 case 0x36:
12550 prefixes |= PREFIX_SS;
f16cd0d5 12551 last_seg_prefix = i;
285ca992 12552 active_seg_prefix = PREFIX_SS;
252b5132
RH
12553 break;
12554 case 0x3e:
12555 prefixes |= PREFIX_DS;
f16cd0d5 12556 last_seg_prefix = i;
285ca992 12557 active_seg_prefix = PREFIX_DS;
252b5132
RH
12558 break;
12559 case 0x26:
12560 prefixes |= PREFIX_ES;
f16cd0d5 12561 last_seg_prefix = i;
285ca992 12562 active_seg_prefix = PREFIX_ES;
252b5132
RH
12563 break;
12564 case 0x64:
12565 prefixes |= PREFIX_FS;
f16cd0d5 12566 last_seg_prefix = i;
285ca992 12567 active_seg_prefix = PREFIX_FS;
252b5132
RH
12568 break;
12569 case 0x65:
12570 prefixes |= PREFIX_GS;
f16cd0d5 12571 last_seg_prefix = i;
285ca992 12572 active_seg_prefix = PREFIX_GS;
252b5132
RH
12573 break;
12574 case 0x66:
12575 prefixes |= PREFIX_DATA;
f16cd0d5 12576 last_data_prefix = i;
252b5132
RH
12577 break;
12578 case 0x67:
12579 prefixes |= PREFIX_ADDR;
f16cd0d5 12580 last_addr_prefix = i;
252b5132 12581 break;
5076851f 12582 case FWAIT_OPCODE:
252b5132
RH
12583 /* fwait is really an instruction. If there are prefixes
12584 before the fwait, they belong to the fwait, *not* to the
12585 following instruction. */
d9949a36 12586 fwait_prefix = i;
3e7d61b2 12587 if (prefixes || rex)
252b5132
RH
12588 {
12589 prefixes |= PREFIX_FWAIT;
12590 codep++;
6c067bbb
RM
12591 /* This ensures that the previous REX prefixes are noticed
12592 as unused prefixes, as in the return case below. */
12593 rex_used = rex;
f16cd0d5 12594 return 1;
252b5132
RH
12595 }
12596 prefixes = PREFIX_FWAIT;
12597 break;
12598 default:
f16cd0d5 12599 return 1;
252b5132 12600 }
52b15da3
JH
12601 /* Rex is ignored when followed by another prefix. */
12602 if (rex)
12603 {
3e7d61b2 12604 rex_used = rex;
f16cd0d5 12605 return 1;
52b15da3 12606 }
f16cd0d5
L
12607 if (*codep != FWAIT_OPCODE)
12608 all_prefixes[i++] = *codep;
52b15da3 12609 rex = newrex;
252b5132 12610 codep++;
f16cd0d5
L
12611 length++;
12612 }
12613 return 0;
12614}
12615
7d421014
ILT
12616/* Return the name of the prefix byte PREF, or NULL if PREF is not a
12617 prefix byte. */
12618
12619static const char *
26ca5450 12620prefix_name (int pref, int sizeflag)
7d421014 12621{
0003779b
L
12622 static const char *rexes [16] =
12623 {
12624 "rex", /* 0x40 */
12625 "rex.B", /* 0x41 */
12626 "rex.X", /* 0x42 */
12627 "rex.XB", /* 0x43 */
12628 "rex.R", /* 0x44 */
12629 "rex.RB", /* 0x45 */
12630 "rex.RX", /* 0x46 */
12631 "rex.RXB", /* 0x47 */
12632 "rex.W", /* 0x48 */
12633 "rex.WB", /* 0x49 */
12634 "rex.WX", /* 0x4a */
12635 "rex.WXB", /* 0x4b */
12636 "rex.WR", /* 0x4c */
12637 "rex.WRB", /* 0x4d */
12638 "rex.WRX", /* 0x4e */
12639 "rex.WRXB", /* 0x4f */
12640 };
12641
7d421014
ILT
12642 switch (pref)
12643 {
52b15da3
JH
12644 /* REX prefixes family. */
12645 case 0x40:
52b15da3 12646 case 0x41:
52b15da3 12647 case 0x42:
52b15da3 12648 case 0x43:
52b15da3 12649 case 0x44:
52b15da3 12650 case 0x45:
52b15da3 12651 case 0x46:
52b15da3 12652 case 0x47:
52b15da3 12653 case 0x48:
52b15da3 12654 case 0x49:
52b15da3 12655 case 0x4a:
52b15da3 12656 case 0x4b:
52b15da3 12657 case 0x4c:
52b15da3 12658 case 0x4d:
52b15da3 12659 case 0x4e:
52b15da3 12660 case 0x4f:
0003779b 12661 return rexes [pref - 0x40];
7d421014
ILT
12662 case 0xf3:
12663 return "repz";
12664 case 0xf2:
12665 return "repnz";
12666 case 0xf0:
12667 return "lock";
12668 case 0x2e:
12669 return "cs";
12670 case 0x36:
12671 return "ss";
12672 case 0x3e:
12673 return "ds";
12674 case 0x26:
12675 return "es";
12676 case 0x64:
12677 return "fs";
12678 case 0x65:
12679 return "gs";
12680 case 0x66:
12681 return (sizeflag & DFLAG) ? "data16" : "data32";
12682 case 0x67:
cb712a9e 12683 if (address_mode == mode_64bit)
db6eb5be 12684 return (sizeflag & AFLAG) ? "addr32" : "addr64";
c1a64871 12685 else
2888cb7a 12686 return (sizeflag & AFLAG) ? "addr16" : "addr32";
7d421014
ILT
12687 case FWAIT_OPCODE:
12688 return "fwait";
f16cd0d5
L
12689 case REP_PREFIX:
12690 return "rep";
42164a71
L
12691 case XACQUIRE_PREFIX:
12692 return "xacquire";
12693 case XRELEASE_PREFIX:
12694 return "xrelease";
7e8b059b
L
12695 case BND_PREFIX:
12696 return "bnd";
7d421014
ILT
12697 default:
12698 return NULL;
12699 }
12700}
12701
ce518a5f
L
12702static char op_out[MAX_OPERANDS][100];
12703static int op_ad, op_index[MAX_OPERANDS];
1d9f512f 12704static int two_source_ops;
ce518a5f
L
12705static bfd_vma op_address[MAX_OPERANDS];
12706static bfd_vma op_riprel[MAX_OPERANDS];
52b15da3 12707static bfd_vma start_pc;
ce518a5f 12708
252b5132
RH
12709/*
12710 * On the 386's of 1988, the maximum length of an instruction is 15 bytes.
12711 * (see topic "Redundant prefixes" in the "Differences from 8086"
12712 * section of the "Virtual 8086 Mode" chapter.)
12713 * 'pc' should be the address of this instruction, it will
12714 * be used to print the target address if this is a relative jump or call
12715 * The function returns the length of this instruction in bytes.
12716 */
12717
252b5132 12718static char intel_syntax;
9d141669 12719static char intel_mnemonic = !SYSV386_COMPAT;
252b5132
RH
12720static char open_char;
12721static char close_char;
12722static char separator_char;
12723static char scale_char;
12724
5db04b09
L
12725enum x86_64_isa
12726{
12727 amd64 = 0,
12728 intel64
12729};
12730
12731static enum x86_64_isa isa64;
12732
e396998b
AM
12733/* Here for backwards compatibility. When gdb stops using
12734 print_insn_i386_att and print_insn_i386_intel these functions can
12735 disappear, and print_insn_i386 be merged into print_insn. */
252b5132 12736int
26ca5450 12737print_insn_i386_att (bfd_vma pc, disassemble_info *info)
252b5132
RH
12738{
12739 intel_syntax = 0;
e396998b
AM
12740
12741 return print_insn (pc, info);
252b5132
RH
12742}
12743
12744int
26ca5450 12745print_insn_i386_intel (bfd_vma pc, disassemble_info *info)
252b5132
RH
12746{
12747 intel_syntax = 1;
e396998b
AM
12748
12749 return print_insn (pc, info);
252b5132
RH
12750}
12751
e396998b 12752int
26ca5450 12753print_insn_i386 (bfd_vma pc, disassemble_info *info)
e396998b
AM
12754{
12755 intel_syntax = -1;
12756
12757 return print_insn (pc, info);
12758}
12759
f59a29b9
L
12760void
12761print_i386_disassembler_options (FILE *stream)
12762{
12763 fprintf (stream, _("\n\
12764The following i386/x86-64 specific disassembler options are supported for use\n\
12765with the -M switch (multiple options should be separated by commas):\n"));
12766
12767 fprintf (stream, _(" x86-64 Disassemble in 64bit mode\n"));
12768 fprintf (stream, _(" i386 Disassemble in 32bit mode\n"));
12769 fprintf (stream, _(" i8086 Disassemble in 16bit mode\n"));
12770 fprintf (stream, _(" att Display instruction in AT&T syntax\n"));
12771 fprintf (stream, _(" intel Display instruction in Intel syntax\n"));
9d141669
L
12772 fprintf (stream, _(" att-mnemonic\n"
12773 " Display instruction in AT&T mnemonic\n"));
12774 fprintf (stream, _(" intel-mnemonic\n"
12775 " Display instruction in Intel mnemonic\n"));
f59a29b9
L
12776 fprintf (stream, _(" addr64 Assume 64bit address size\n"));
12777 fprintf (stream, _(" addr32 Assume 32bit address size\n"));
12778 fprintf (stream, _(" addr16 Assume 16bit address size\n"));
12779 fprintf (stream, _(" data32 Assume 32bit data size\n"));
12780 fprintf (stream, _(" data16 Assume 16bit data size\n"));
12781 fprintf (stream, _(" suffix Always display instruction suffix in AT&T syntax\n"));
5db04b09
L
12782 fprintf (stream, _(" amd64 Display instruction in AMD64 ISA\n"));
12783 fprintf (stream, _(" intel64 Display instruction in Intel64 ISA\n"));
f59a29b9
L
12784}
12785
592d1631 12786/* Bad opcode. */
bf890a93 12787static const struct dis386 bad_opcode = { "(bad)", { XX }, 0 };
592d1631 12788
b844680a
L
12789/* Get a pointer to struct dis386 with a valid name. */
12790
12791static const struct dis386 *
8bb15339 12792get_valid_dis386 (const struct dis386 *dp, disassemble_info *info)
b844680a 12793{
91d6fa6a 12794 int vindex, vex_table_index;
b844680a
L
12795
12796 if (dp->name != NULL)
12797 return dp;
12798
12799 switch (dp->op[0].bytemode)
12800 {
1ceb70f8
L
12801 case USE_REG_TABLE:
12802 dp = &reg_table[dp->op[1].bytemode][modrm.reg];
12803 break;
12804
12805 case USE_MOD_TABLE:
91d6fa6a
NC
12806 vindex = modrm.mod == 0x3 ? 1 : 0;
12807 dp = &mod_table[dp->op[1].bytemode][vindex];
1ceb70f8
L
12808 break;
12809
12810 case USE_RM_TABLE:
12811 dp = &rm_table[dp->op[1].bytemode][modrm.rm];
b844680a
L
12812 break;
12813
4e7d34a6 12814 case USE_PREFIX_TABLE:
c0f3af97 12815 if (need_vex)
b844680a 12816 {
c0f3af97
L
12817 /* The prefix in VEX is implicit. */
12818 switch (vex.prefix)
12819 {
12820 case 0:
91d6fa6a 12821 vindex = 0;
c0f3af97
L
12822 break;
12823 case REPE_PREFIX_OPCODE:
91d6fa6a 12824 vindex = 1;
c0f3af97
L
12825 break;
12826 case DATA_PREFIX_OPCODE:
91d6fa6a 12827 vindex = 2;
c0f3af97
L
12828 break;
12829 case REPNE_PREFIX_OPCODE:
91d6fa6a 12830 vindex = 3;
c0f3af97
L
12831 break;
12832 default:
12833 abort ();
12834 break;
12835 }
b844680a 12836 }
7bb15c6f 12837 else
b844680a 12838 {
285ca992
L
12839 int last_prefix = -1;
12840 int prefix = 0;
91d6fa6a 12841 vindex = 0;
285ca992
L
12842 /* We check PREFIX_REPNZ and PREFIX_REPZ before PREFIX_DATA.
12843 When there are multiple PREFIX_REPNZ and PREFIX_REPZ, the
12844 last one wins. */
12845 if ((prefixes & (PREFIX_REPZ | PREFIX_REPNZ)) != 0)
b844680a 12846 {
285ca992 12847 if (last_repz_prefix > last_repnz_prefix)
c0f3af97 12848 {
285ca992
L
12849 vindex = 1;
12850 prefix = PREFIX_REPZ;
12851 last_prefix = last_repz_prefix;
c0f3af97
L
12852 }
12853 else
b844680a 12854 {
285ca992
L
12855 vindex = 3;
12856 prefix = PREFIX_REPNZ;
12857 last_prefix = last_repnz_prefix;
b844680a 12858 }
285ca992 12859
507bd325
L
12860 /* Check if prefix should be ignored. */
12861 if ((((prefix_table[dp->op[1].bytemode][vindex].prefix_requirement
12862 & PREFIX_IGNORED) >> PREFIX_IGNORED_SHIFT)
12863 & prefix) != 0)
285ca992
L
12864 vindex = 0;
12865 }
12866
12867 if (vindex == 0 && (prefixes & PREFIX_DATA) != 0)
12868 {
12869 vindex = 2;
12870 prefix = PREFIX_DATA;
12871 last_prefix = last_data_prefix;
12872 }
12873
12874 if (vindex != 0)
12875 {
12876 used_prefixes |= prefix;
12877 all_prefixes[last_prefix] = 0;
b844680a
L
12878 }
12879 }
91d6fa6a 12880 dp = &prefix_table[dp->op[1].bytemode][vindex];
b844680a
L
12881 break;
12882
4e7d34a6 12883 case USE_X86_64_TABLE:
91d6fa6a
NC
12884 vindex = address_mode == mode_64bit ? 1 : 0;
12885 dp = &x86_64_table[dp->op[1].bytemode][vindex];
b844680a
L
12886 break;
12887
4e7d34a6 12888 case USE_3BYTE_TABLE:
8bb15339 12889 FETCH_DATA (info, codep + 2);
91d6fa6a
NC
12890 vindex = *codep++;
12891 dp = &three_byte_table[dp->op[1].bytemode][vindex];
285ca992 12892 end_codep = codep;
8bb15339
L
12893 modrm.mod = (*codep >> 6) & 3;
12894 modrm.reg = (*codep >> 3) & 7;
12895 modrm.rm = *codep & 7;
12896 break;
12897
c0f3af97
L
12898 case USE_VEX_LEN_TABLE:
12899 if (!need_vex)
12900 abort ();
12901
12902 switch (vex.length)
12903 {
12904 case 128:
91d6fa6a 12905 vindex = 0;
c0f3af97
L
12906 break;
12907 case 256:
91d6fa6a 12908 vindex = 1;
c0f3af97
L
12909 break;
12910 default:
12911 abort ();
12912 break;
12913 }
12914
91d6fa6a 12915 dp = &vex_len_table[dp->op[1].bytemode][vindex];
c0f3af97
L
12916 break;
12917
f88c9eb0
SP
12918 case USE_XOP_8F_TABLE:
12919 FETCH_DATA (info, codep + 3);
12920 /* All bits in the REX prefix are ignored. */
12921 rex_ignored = rex;
12922 rex = ~(*codep >> 5) & 0x7;
12923
12924 /* VEX_TABLE_INDEX is the mmmmm part of the XOP byte 1 "RCB.mmmmm". */
12925 switch ((*codep & 0x1f))
12926 {
12927 default:
f07af43e
L
12928 dp = &bad_opcode;
12929 return dp;
5dd85c99
SP
12930 case 0x8:
12931 vex_table_index = XOP_08;
12932 break;
f88c9eb0
SP
12933 case 0x9:
12934 vex_table_index = XOP_09;
12935 break;
12936 case 0xa:
12937 vex_table_index = XOP_0A;
12938 break;
12939 }
12940 codep++;
12941 vex.w = *codep & 0x80;
12942 if (vex.w && address_mode == mode_64bit)
12943 rex |= REX_W;
12944
12945 vex.register_specifier = (~(*codep >> 3)) & 0xf;
12946 if (address_mode != mode_64bit
12947 && vex.register_specifier > 0x7)
f07af43e
L
12948 {
12949 dp = &bad_opcode;
12950 return dp;
12951 }
f88c9eb0
SP
12952
12953 vex.length = (*codep & 0x4) ? 256 : 128;
12954 switch ((*codep & 0x3))
12955 {
12956 case 0:
12957 vex.prefix = 0;
12958 break;
12959 case 1:
12960 vex.prefix = DATA_PREFIX_OPCODE;
12961 break;
12962 case 2:
12963 vex.prefix = REPE_PREFIX_OPCODE;
12964 break;
12965 case 3:
12966 vex.prefix = REPNE_PREFIX_OPCODE;
12967 break;
12968 }
12969 need_vex = 1;
12970 need_vex_reg = 1;
12971 codep++;
91d6fa6a
NC
12972 vindex = *codep++;
12973 dp = &xop_table[vex_table_index][vindex];
c48244a5 12974
285ca992 12975 end_codep = codep;
c48244a5
SP
12976 FETCH_DATA (info, codep + 1);
12977 modrm.mod = (*codep >> 6) & 3;
12978 modrm.reg = (*codep >> 3) & 7;
12979 modrm.rm = *codep & 7;
f88c9eb0
SP
12980 break;
12981
c0f3af97 12982 case USE_VEX_C4_TABLE:
43234a1e 12983 /* VEX prefix. */
c0f3af97
L
12984 FETCH_DATA (info, codep + 3);
12985 /* All bits in the REX prefix are ignored. */
12986 rex_ignored = rex;
12987 rex = ~(*codep >> 5) & 0x7;
12988 switch ((*codep & 0x1f))
12989 {
12990 default:
f07af43e
L
12991 dp = &bad_opcode;
12992 return dp;
c0f3af97 12993 case 0x1:
f88c9eb0 12994 vex_table_index = VEX_0F;
c0f3af97
L
12995 break;
12996 case 0x2:
f88c9eb0 12997 vex_table_index = VEX_0F38;
c0f3af97
L
12998 break;
12999 case 0x3:
f88c9eb0 13000 vex_table_index = VEX_0F3A;
c0f3af97
L
13001 break;
13002 }
13003 codep++;
13004 vex.w = *codep & 0x80;
13005 if (vex.w && address_mode == mode_64bit)
13006 rex |= REX_W;
13007
13008 vex.register_specifier = (~(*codep >> 3)) & 0xf;
13009 if (address_mode != mode_64bit
13010 && vex.register_specifier > 0x7)
f07af43e
L
13011 {
13012 dp = &bad_opcode;
13013 return dp;
13014 }
c0f3af97
L
13015
13016 vex.length = (*codep & 0x4) ? 256 : 128;
13017 switch ((*codep & 0x3))
13018 {
13019 case 0:
13020 vex.prefix = 0;
13021 break;
13022 case 1:
13023 vex.prefix = DATA_PREFIX_OPCODE;
13024 break;
13025 case 2:
13026 vex.prefix = REPE_PREFIX_OPCODE;
13027 break;
13028 case 3:
13029 vex.prefix = REPNE_PREFIX_OPCODE;
13030 break;
13031 }
13032 need_vex = 1;
13033 need_vex_reg = 1;
13034 codep++;
91d6fa6a
NC
13035 vindex = *codep++;
13036 dp = &vex_table[vex_table_index][vindex];
285ca992 13037 end_codep = codep;
c0f3af97 13038 /* There is no MODRM byte for VEX [82|77]. */
91d6fa6a 13039 if (vindex != 0x77 && vindex != 0x82)
c0f3af97
L
13040 {
13041 FETCH_DATA (info, codep + 1);
13042 modrm.mod = (*codep >> 6) & 3;
13043 modrm.reg = (*codep >> 3) & 7;
13044 modrm.rm = *codep & 7;
13045 }
13046 break;
13047
13048 case USE_VEX_C5_TABLE:
43234a1e 13049 /* VEX prefix. */
c0f3af97
L
13050 FETCH_DATA (info, codep + 2);
13051 /* All bits in the REX prefix are ignored. */
13052 rex_ignored = rex;
13053 rex = (*codep & 0x80) ? 0 : REX_R;
13054
13055 vex.register_specifier = (~(*codep >> 3)) & 0xf;
13056 if (address_mode != mode_64bit
13057 && vex.register_specifier > 0x7)
f07af43e
L
13058 {
13059 dp = &bad_opcode;
13060 return dp;
13061 }
c0f3af97 13062
759a05ce
L
13063 vex.w = 0;
13064
c0f3af97
L
13065 vex.length = (*codep & 0x4) ? 256 : 128;
13066 switch ((*codep & 0x3))
13067 {
13068 case 0:
13069 vex.prefix = 0;
13070 break;
13071 case 1:
13072 vex.prefix = DATA_PREFIX_OPCODE;
13073 break;
13074 case 2:
13075 vex.prefix = REPE_PREFIX_OPCODE;
13076 break;
13077 case 3:
13078 vex.prefix = REPNE_PREFIX_OPCODE;
13079 break;
13080 }
13081 need_vex = 1;
13082 need_vex_reg = 1;
13083 codep++;
91d6fa6a
NC
13084 vindex = *codep++;
13085 dp = &vex_table[dp->op[1].bytemode][vindex];
285ca992 13086 end_codep = codep;
c0f3af97 13087 /* There is no MODRM byte for VEX [82|77]. */
91d6fa6a 13088 if (vindex != 0x77 && vindex != 0x82)
c0f3af97
L
13089 {
13090 FETCH_DATA (info, codep + 1);
13091 modrm.mod = (*codep >> 6) & 3;
13092 modrm.reg = (*codep >> 3) & 7;
13093 modrm.rm = *codep & 7;
13094 }
13095 break;
13096
9e30b8e0
L
13097 case USE_VEX_W_TABLE:
13098 if (!need_vex)
13099 abort ();
13100
13101 dp = &vex_w_table[dp->op[1].bytemode][vex.w ? 1 : 0];
13102 break;
13103
43234a1e
L
13104 case USE_EVEX_TABLE:
13105 two_source_ops = 0;
13106 /* EVEX prefix. */
13107 vex.evex = 1;
13108 FETCH_DATA (info, codep + 4);
13109 /* All bits in the REX prefix are ignored. */
13110 rex_ignored = rex;
13111 /* The first byte after 0x62. */
13112 rex = ~(*codep >> 5) & 0x7;
13113 vex.r = *codep & 0x10;
13114 switch ((*codep & 0xf))
13115 {
13116 default:
13117 return &bad_opcode;
13118 case 0x1:
13119 vex_table_index = EVEX_0F;
13120 break;
13121 case 0x2:
13122 vex_table_index = EVEX_0F38;
13123 break;
13124 case 0x3:
13125 vex_table_index = EVEX_0F3A;
13126 break;
13127 }
13128
13129 /* The second byte after 0x62. */
13130 codep++;
13131 vex.w = *codep & 0x80;
13132 if (vex.w && address_mode == mode_64bit)
13133 rex |= REX_W;
13134
13135 vex.register_specifier = (~(*codep >> 3)) & 0xf;
13136 if (address_mode != mode_64bit)
13137 {
13138 /* In 16/32-bit mode silently ignore following bits. */
13139 rex &= ~REX_B;
13140 vex.r = 1;
13141 vex.v = 1;
13142 vex.register_specifier &= 0x7;
13143 }
13144
13145 /* The U bit. */
13146 if (!(*codep & 0x4))
13147 return &bad_opcode;
13148
13149 switch ((*codep & 0x3))
13150 {
13151 case 0:
13152 vex.prefix = 0;
13153 break;
13154 case 1:
13155 vex.prefix = DATA_PREFIX_OPCODE;
13156 break;
13157 case 2:
13158 vex.prefix = REPE_PREFIX_OPCODE;
13159 break;
13160 case 3:
13161 vex.prefix = REPNE_PREFIX_OPCODE;
13162 break;
13163 }
13164
13165 /* The third byte after 0x62. */
13166 codep++;
13167
13168 /* Remember the static rounding bits. */
13169 vex.ll = (*codep >> 5) & 3;
13170 vex.b = (*codep & 0x10) != 0;
13171
13172 vex.v = *codep & 0x8;
13173 vex.mask_register_specifier = *codep & 0x7;
13174 vex.zeroing = *codep & 0x80;
13175
13176 need_vex = 1;
13177 need_vex_reg = 1;
13178 codep++;
13179 vindex = *codep++;
13180 dp = &evex_table[vex_table_index][vindex];
285ca992 13181 end_codep = codep;
43234a1e
L
13182 FETCH_DATA (info, codep + 1);
13183 modrm.mod = (*codep >> 6) & 3;
13184 modrm.reg = (*codep >> 3) & 7;
13185 modrm.rm = *codep & 7;
13186
13187 /* Set vector length. */
13188 if (modrm.mod == 3 && vex.b)
13189 vex.length = 512;
13190 else
13191 {
13192 switch (vex.ll)
13193 {
13194 case 0x0:
13195 vex.length = 128;
13196 break;
13197 case 0x1:
13198 vex.length = 256;
13199 break;
13200 case 0x2:
13201 vex.length = 512;
13202 break;
13203 default:
13204 return &bad_opcode;
13205 }
13206 }
13207 break;
13208
592d1631
L
13209 case 0:
13210 dp = &bad_opcode;
13211 break;
13212
b844680a 13213 default:
d34b5006 13214 abort ();
b844680a
L
13215 }
13216
13217 if (dp->name != NULL)
13218 return dp;
13219 else
8bb15339 13220 return get_valid_dis386 (dp, info);
b844680a
L
13221}
13222
dfc8cf43 13223static void
55cf16e1 13224get_sib (disassemble_info *info, int sizeflag)
dfc8cf43
L
13225{
13226 /* If modrm.mod == 3, operand must be register. */
13227 if (need_modrm
55cf16e1 13228 && ((sizeflag & AFLAG) || address_mode == mode_64bit)
dfc8cf43
L
13229 && modrm.mod != 3
13230 && modrm.rm == 4)
13231 {
13232 FETCH_DATA (info, codep + 2);
13233 sib.index = (codep [1] >> 3) & 7;
13234 sib.scale = (codep [1] >> 6) & 3;
13235 sib.base = codep [1] & 7;
13236 }
13237}
13238
e396998b 13239static int
26ca5450 13240print_insn (bfd_vma pc, disassemble_info *info)
252b5132 13241{
2da11e11 13242 const struct dis386 *dp;
252b5132 13243 int i;
ce518a5f 13244 char *op_txt[MAX_OPERANDS];
252b5132 13245 int needcomma;
df18fdba 13246 int sizeflag, orig_sizeflag;
e396998b 13247 const char *p;
252b5132 13248 struct dis_private priv;
f16cd0d5 13249 int prefix_length;
252b5132 13250
d7921315
L
13251 priv.orig_sizeflag = AFLAG | DFLAG;
13252 if ((info->mach & bfd_mach_i386_i386) != 0)
cb712a9e 13253 address_mode = mode_32bit;
2da11e11 13254 else if (info->mach == bfd_mach_i386_i8086)
d7921315
L
13255 {
13256 address_mode = mode_16bit;
13257 priv.orig_sizeflag = 0;
13258 }
2da11e11 13259 else
d7921315
L
13260 address_mode = mode_64bit;
13261
13262 if (intel_syntax == (char) -1)
13263 intel_syntax = (info->mach & bfd_mach_i386_intel_syntax) != 0;
e396998b
AM
13264
13265 for (p = info->disassembler_options; p != NULL; )
13266 {
5db04b09
L
13267 if (CONST_STRNEQ (p, "amd64"))
13268 isa64 = amd64;
13269 else if (CONST_STRNEQ (p, "intel64"))
13270 isa64 = intel64;
13271 else if (CONST_STRNEQ (p, "x86-64"))
e396998b 13272 {
cb712a9e 13273 address_mode = mode_64bit;
e396998b
AM
13274 priv.orig_sizeflag = AFLAG | DFLAG;
13275 }
0112cd26 13276 else if (CONST_STRNEQ (p, "i386"))
e396998b 13277 {
cb712a9e 13278 address_mode = mode_32bit;
e396998b
AM
13279 priv.orig_sizeflag = AFLAG | DFLAG;
13280 }
0112cd26 13281 else if (CONST_STRNEQ (p, "i8086"))
e396998b 13282 {
cb712a9e 13283 address_mode = mode_16bit;
e396998b
AM
13284 priv.orig_sizeflag = 0;
13285 }
0112cd26 13286 else if (CONST_STRNEQ (p, "intel"))
e396998b
AM
13287 {
13288 intel_syntax = 1;
9d141669
L
13289 if (CONST_STRNEQ (p + 5, "-mnemonic"))
13290 intel_mnemonic = 1;
e396998b 13291 }
0112cd26 13292 else if (CONST_STRNEQ (p, "att"))
e396998b
AM
13293 {
13294 intel_syntax = 0;
9d141669
L
13295 if (CONST_STRNEQ (p + 3, "-mnemonic"))
13296 intel_mnemonic = 0;
e396998b 13297 }
0112cd26 13298 else if (CONST_STRNEQ (p, "addr"))
e396998b 13299 {
f59a29b9
L
13300 if (address_mode == mode_64bit)
13301 {
13302 if (p[4] == '3' && p[5] == '2')
13303 priv.orig_sizeflag &= ~AFLAG;
13304 else if (p[4] == '6' && p[5] == '4')
13305 priv.orig_sizeflag |= AFLAG;
13306 }
13307 else
13308 {
13309 if (p[4] == '1' && p[5] == '6')
13310 priv.orig_sizeflag &= ~AFLAG;
13311 else if (p[4] == '3' && p[5] == '2')
13312 priv.orig_sizeflag |= AFLAG;
13313 }
e396998b 13314 }
0112cd26 13315 else if (CONST_STRNEQ (p, "data"))
e396998b
AM
13316 {
13317 if (p[4] == '1' && p[5] == '6')
13318 priv.orig_sizeflag &= ~DFLAG;
13319 else if (p[4] == '3' && p[5] == '2')
13320 priv.orig_sizeflag |= DFLAG;
13321 }
0112cd26 13322 else if (CONST_STRNEQ (p, "suffix"))
e396998b
AM
13323 priv.orig_sizeflag |= SUFFIX_ALWAYS;
13324
13325 p = strchr (p, ',');
13326 if (p != NULL)
13327 p++;
13328 }
13329
c0f92bf9
L
13330 if (address_mode == mode_64bit && sizeof (bfd_vma) < 8)
13331 {
13332 (*info->fprintf_func) (info->stream,
13333 _("64-bit address is disabled"));
13334 return -1;
13335 }
13336
e396998b
AM
13337 if (intel_syntax)
13338 {
13339 names64 = intel_names64;
13340 names32 = intel_names32;
13341 names16 = intel_names16;
13342 names8 = intel_names8;
13343 names8rex = intel_names8rex;
13344 names_seg = intel_names_seg;
b9733481 13345 names_mm = intel_names_mm;
7e8b059b 13346 names_bnd = intel_names_bnd;
b9733481
L
13347 names_xmm = intel_names_xmm;
13348 names_ymm = intel_names_ymm;
43234a1e 13349 names_zmm = intel_names_zmm;
db51cc60
L
13350 index64 = intel_index64;
13351 index32 = intel_index32;
43234a1e 13352 names_mask = intel_names_mask;
e396998b
AM
13353 index16 = intel_index16;
13354 open_char = '[';
13355 close_char = ']';
13356 separator_char = '+';
13357 scale_char = '*';
13358 }
13359 else
13360 {
13361 names64 = att_names64;
13362 names32 = att_names32;
13363 names16 = att_names16;
13364 names8 = att_names8;
13365 names8rex = att_names8rex;
13366 names_seg = att_names_seg;
b9733481 13367 names_mm = att_names_mm;
7e8b059b 13368 names_bnd = att_names_bnd;
b9733481
L
13369 names_xmm = att_names_xmm;
13370 names_ymm = att_names_ymm;
43234a1e 13371 names_zmm = att_names_zmm;
db51cc60
L
13372 index64 = att_index64;
13373 index32 = att_index32;
43234a1e 13374 names_mask = att_names_mask;
e396998b
AM
13375 index16 = att_index16;
13376 open_char = '(';
13377 close_char = ')';
13378 separator_char = ',';
13379 scale_char = ',';
13380 }
2da11e11 13381
4fe53c98 13382 /* The output looks better if we put 7 bytes on a line, since that
8a9036a4
L
13383 puts most long word instructions on a single line. Use 8 bytes
13384 for Intel L1OM. */
d7921315 13385 if ((info->mach & bfd_mach_l1om) != 0)
8a9036a4
L
13386 info->bytes_per_line = 8;
13387 else
13388 info->bytes_per_line = 7;
252b5132 13389
26ca5450 13390 info->private_data = &priv;
252b5132
RH
13391 priv.max_fetched = priv.the_buffer;
13392 priv.insn_start = pc;
252b5132
RH
13393
13394 obuf[0] = 0;
ce518a5f
L
13395 for (i = 0; i < MAX_OPERANDS; ++i)
13396 {
13397 op_out[i][0] = 0;
13398 op_index[i] = -1;
13399 }
252b5132
RH
13400
13401 the_info = info;
13402 start_pc = pc;
e396998b
AM
13403 start_codep = priv.the_buffer;
13404 codep = priv.the_buffer;
252b5132 13405
8df14d78 13406 if (OPCODES_SIGSETJMP (priv.bailout) != 0)
5076851f 13407 {
7d421014
ILT
13408 const char *name;
13409
5076851f 13410 /* Getting here means we tried for data but didn't get it. That
e396998b
AM
13411 means we have an incomplete instruction of some sort. Just
13412 print the first byte as a prefix or a .byte pseudo-op. */
13413 if (codep > priv.the_buffer)
5076851f 13414 {
e396998b 13415 name = prefix_name (priv.the_buffer[0], priv.orig_sizeflag);
7d421014
ILT
13416 if (name != NULL)
13417 (*info->fprintf_func) (info->stream, "%s", name);
13418 else
5076851f 13419 {
7d421014
ILT
13420 /* Just print the first byte as a .byte instruction. */
13421 (*info->fprintf_func) (info->stream, ".byte 0x%x",
e396998b 13422 (unsigned int) priv.the_buffer[0]);
5076851f 13423 }
5076851f 13424
7d421014 13425 return 1;
5076851f
ILT
13426 }
13427
13428 return -1;
13429 }
13430
52b15da3 13431 obufp = obuf;
f16cd0d5
L
13432 sizeflag = priv.orig_sizeflag;
13433
13434 if (!ckprefix () || rex_used)
13435 {
13436 /* Too many prefixes or unused REX prefixes. */
13437 for (i = 0;
f6dd4781 13438 i < (int) ARRAY_SIZE (all_prefixes) && all_prefixes[i];
f16cd0d5 13439 i++)
de882298 13440 (*info->fprintf_func) (info->stream, "%s%s",
6c067bbb 13441 i == 0 ? "" : " ",
f16cd0d5 13442 prefix_name (all_prefixes[i], sizeflag));
de882298 13443 return i;
f16cd0d5 13444 }
252b5132
RH
13445
13446 insn_codep = codep;
13447
13448 FETCH_DATA (info, codep + 1);
13449 two_source_ops = (*codep == 0x62) || (*codep == 0xc8);
13450
3e7d61b2 13451 if (((prefixes & PREFIX_FWAIT)
f16cd0d5 13452 && ((*codep < 0xd8) || (*codep > 0xdf))))
252b5132 13453 {
86a80a50 13454 /* Handle prefixes before fwait. */
d9949a36 13455 for (i = 0; i < fwait_prefix && all_prefixes[i];
86a80a50
L
13456 i++)
13457 (*info->fprintf_func) (info->stream, "%s ",
13458 prefix_name (all_prefixes[i], sizeflag));
f16cd0d5 13459 (*info->fprintf_func) (info->stream, "fwait");
86a80a50 13460 return i + 1;
252b5132
RH
13461 }
13462
252b5132
RH
13463 if (*codep == 0x0f)
13464 {
eec0f4ca 13465 unsigned char threebyte;
5f40e14d
JS
13466
13467 codep++;
13468 FETCH_DATA (info, codep + 1);
13469 threebyte = *codep;
eec0f4ca 13470 dp = &dis386_twobyte[threebyte];
252b5132 13471 need_modrm = twobyte_has_modrm[*codep];
eec0f4ca 13472 codep++;
252b5132
RH
13473 }
13474 else
13475 {
6439fc28 13476 dp = &dis386[*codep];
252b5132 13477 need_modrm = onebyte_has_modrm[*codep];
eec0f4ca 13478 codep++;
252b5132 13479 }
246c51aa 13480
df18fdba
L
13481 /* Save sizeflag for printing the extra prefixes later before updating
13482 it for mnemonic and operand processing. The prefix names depend
13483 only on the address mode. */
13484 orig_sizeflag = sizeflag;
c608c12e 13485 if (prefixes & PREFIX_ADDR)
df18fdba 13486 sizeflag ^= AFLAG;
b844680a 13487 if ((prefixes & PREFIX_DATA))
df18fdba 13488 sizeflag ^= DFLAG;
3ffd33cf 13489
285ca992 13490 end_codep = codep;
8bb15339 13491 if (need_modrm)
252b5132
RH
13492 {
13493 FETCH_DATA (info, codep + 1);
7967e09e
L
13494 modrm.mod = (*codep >> 6) & 3;
13495 modrm.reg = (*codep >> 3) & 7;
13496 modrm.rm = *codep & 7;
252b5132
RH
13497 }
13498
42d5f9c6
MS
13499 need_vex = 0;
13500 need_vex_reg = 0;
13501 vex_w_done = 0;
43234a1e 13502 vex.evex = 0;
55b126d4 13503
ce518a5f 13504 if (dp->name == NULL && dp->op[0].bytemode == FLOATCODE)
252b5132 13505 {
55cf16e1 13506 get_sib (info, sizeflag);
252b5132
RH
13507 dofloat (sizeflag);
13508 }
13509 else
13510 {
8bb15339 13511 dp = get_valid_dis386 (dp, info);
b844680a 13512 if (dp != NULL && putop (dp->name, sizeflag) == 0)
6c067bbb 13513 {
55cf16e1 13514 get_sib (info, sizeflag);
ce518a5f
L
13515 for (i = 0; i < MAX_OPERANDS; ++i)
13516 {
246c51aa 13517 obufp = op_out[i];
ce518a5f
L
13518 op_ad = MAX_OPERANDS - 1 - i;
13519 if (dp->op[i].rtn)
13520 (*dp->op[i].rtn) (dp->op[i].bytemode, sizeflag);
43234a1e
L
13521 /* For EVEX instruction after the last operand masking
13522 should be printed. */
13523 if (i == 0 && vex.evex)
13524 {
13525 /* Don't print {%k0}. */
13526 if (vex.mask_register_specifier)
13527 {
13528 oappend ("{");
13529 oappend (names_mask[vex.mask_register_specifier]);
13530 oappend ("}");
13531 }
13532 if (vex.zeroing)
13533 oappend ("{z}");
13534 }
ce518a5f 13535 }
6439fc28 13536 }
252b5132
RH
13537 }
13538
d869730d 13539 /* Check if the REX prefix is used. */
e2e6193d 13540 if (rex_ignored == 0 && (rex ^ rex_used) == 0 && last_rex_prefix >= 0)
f16cd0d5
L
13541 all_prefixes[last_rex_prefix] = 0;
13542
5e6718e4 13543 /* Check if the SEG prefix is used. */
f16cd0d5
L
13544 if ((prefixes & (PREFIX_CS | PREFIX_SS | PREFIX_DS | PREFIX_ES
13545 | PREFIX_FS | PREFIX_GS)) != 0
285ca992 13546 && (used_prefixes & active_seg_prefix) != 0)
f16cd0d5
L
13547 all_prefixes[last_seg_prefix] = 0;
13548
5e6718e4 13549 /* Check if the ADDR prefix is used. */
f16cd0d5
L
13550 if ((prefixes & PREFIX_ADDR) != 0
13551 && (used_prefixes & PREFIX_ADDR) != 0)
13552 all_prefixes[last_addr_prefix] = 0;
13553
df18fdba
L
13554 /* Check if the DATA prefix is used. */
13555 if ((prefixes & PREFIX_DATA) != 0
13556 && (used_prefixes & PREFIX_DATA) != 0)
13557 all_prefixes[last_data_prefix] = 0;
f16cd0d5 13558
df18fdba 13559 /* Print the extra prefixes. */
f16cd0d5 13560 prefix_length = 0;
f310f33d 13561 for (i = 0; i < (int) ARRAY_SIZE (all_prefixes); i++)
f16cd0d5
L
13562 if (all_prefixes[i])
13563 {
13564 const char *name;
df18fdba 13565 name = prefix_name (all_prefixes[i], orig_sizeflag);
f16cd0d5
L
13566 if (name == NULL)
13567 abort ();
13568 prefix_length += strlen (name) + 1;
13569 (*info->fprintf_func) (info->stream, "%s ", name);
13570 }
b844680a 13571
285ca992
L
13572 /* If the mandatory PREFIX_REPZ/PREFIX_REPNZ/PREFIX_DATA prefix is
13573 unused, opcode is invalid. Since the PREFIX_DATA prefix may be
13574 used by putop and MMX/SSE operand and may be overriden by the
13575 PREFIX_REPZ/PREFIX_REPNZ fix, we check the PREFIX_DATA prefix
13576 separately. */
3888916d 13577 if (dp->prefix_requirement == PREFIX_OPCODE
285ca992
L
13578 && dp != &bad_opcode
13579 && (((prefixes
13580 & (PREFIX_REPZ | PREFIX_REPNZ)) != 0
13581 && (used_prefixes
13582 & (PREFIX_REPZ | PREFIX_REPNZ)) == 0)
13583 || ((((prefixes
13584 & (PREFIX_REPZ | PREFIX_REPNZ | PREFIX_DATA))
13585 == PREFIX_DATA)
13586 && (used_prefixes & PREFIX_DATA) == 0))))
13587 {
13588 (*info->fprintf_func) (info->stream, "(bad)");
13589 return end_codep - priv.the_buffer;
13590 }
13591
f16cd0d5
L
13592 /* Check maximum code length. */
13593 if ((codep - start_codep) > MAX_CODE_LENGTH)
13594 {
13595 (*info->fprintf_func) (info->stream, "(bad)");
13596 return MAX_CODE_LENGTH;
13597 }
b844680a 13598
ea397f5b 13599 obufp = mnemonicendp;
f16cd0d5 13600 for (i = strlen (obuf) + prefix_length; i < 6; i++)
252b5132
RH
13601 oappend (" ");
13602 oappend (" ");
13603 (*info->fprintf_func) (info->stream, "%s", obuf);
13604
13605 /* The enter and bound instructions are printed with operands in the same
13606 order as the intel book; everything else is printed in reverse order. */
2da11e11 13607 if (intel_syntax || two_source_ops)
252b5132 13608 {
185b1163
L
13609 bfd_vma riprel;
13610
ce518a5f 13611 for (i = 0; i < MAX_OPERANDS; ++i)
6c067bbb 13612 op_txt[i] = op_out[i];
246c51aa 13613
3a8547d2
JB
13614 if (intel_syntax && dp && dp->op[2].rtn == OP_Rounding
13615 && dp->op[3].rtn == OP_E && dp->op[4].rtn == NULL)
13616 {
13617 op_txt[2] = op_out[3];
13618 op_txt[3] = op_out[2];
13619 }
13620
ce518a5f
L
13621 for (i = 0; i < (MAX_OPERANDS >> 1); ++i)
13622 {
6c067bbb
RM
13623 op_ad = op_index[i];
13624 op_index[i] = op_index[MAX_OPERANDS - 1 - i];
13625 op_index[MAX_OPERANDS - 1 - i] = op_ad;
185b1163
L
13626 riprel = op_riprel[i];
13627 op_riprel[i] = op_riprel [MAX_OPERANDS - 1 - i];
13628 op_riprel[MAX_OPERANDS - 1 - i] = riprel;
ce518a5f 13629 }
252b5132
RH
13630 }
13631 else
13632 {
ce518a5f 13633 for (i = 0; i < MAX_OPERANDS; ++i)
6c067bbb 13634 op_txt[MAX_OPERANDS - 1 - i] = op_out[i];
050dfa73
MM
13635 }
13636
ce518a5f
L
13637 needcomma = 0;
13638 for (i = 0; i < MAX_OPERANDS; ++i)
13639 if (*op_txt[i])
13640 {
13641 if (needcomma)
13642 (*info->fprintf_func) (info->stream, ",");
13643 if (op_index[i] != -1 && !op_riprel[i])
13644 (*info->print_address_func) ((bfd_vma) op_address[op_index[i]], info);
13645 else
13646 (*info->fprintf_func) (info->stream, "%s", op_txt[i]);
13647 needcomma = 1;
13648 }
050dfa73 13649
ce518a5f 13650 for (i = 0; i < MAX_OPERANDS; i++)
52b15da3
JH
13651 if (op_index[i] != -1 && op_riprel[i])
13652 {
13653 (*info->fprintf_func) (info->stream, " # ");
4fd7268a 13654 (*info->print_address_func) ((bfd_vma) (start_pc + (codep - start_codep)
52b15da3 13655 + op_address[op_index[i]]), info);
185b1163 13656 break;
52b15da3 13657 }
e396998b 13658 return codep - priv.the_buffer;
252b5132
RH
13659}
13660
6439fc28 13661static const char *float_mem[] = {
252b5132 13662 /* d8 */
7c52e0e8
L
13663 "fadd{s|}",
13664 "fmul{s|}",
13665 "fcom{s|}",
13666 "fcomp{s|}",
13667 "fsub{s|}",
13668 "fsubr{s|}",
13669 "fdiv{s|}",
13670 "fdivr{s|}",
db6eb5be 13671 /* d9 */
7c52e0e8 13672 "fld{s|}",
252b5132 13673 "(bad)",
7c52e0e8
L
13674 "fst{s|}",
13675 "fstp{s|}",
9306ca4a 13676 "fldenvIC",
252b5132 13677 "fldcw",
9306ca4a 13678 "fNstenvIC",
252b5132
RH
13679 "fNstcw",
13680 /* da */
7c52e0e8
L
13681 "fiadd{l|}",
13682 "fimul{l|}",
13683 "ficom{l|}",
13684 "ficomp{l|}",
13685 "fisub{l|}",
13686 "fisubr{l|}",
13687 "fidiv{l|}",
13688 "fidivr{l|}",
252b5132 13689 /* db */
7c52e0e8
L
13690 "fild{l|}",
13691 "fisttp{l|}",
13692 "fist{l|}",
13693 "fistp{l|}",
252b5132 13694 "(bad)",
6439fc28 13695 "fld{t||t|}",
252b5132 13696 "(bad)",
6439fc28 13697 "fstp{t||t|}",
252b5132 13698 /* dc */
7c52e0e8
L
13699 "fadd{l|}",
13700 "fmul{l|}",
13701 "fcom{l|}",
13702 "fcomp{l|}",
13703 "fsub{l|}",
13704 "fsubr{l|}",
13705 "fdiv{l|}",
13706 "fdivr{l|}",
252b5132 13707 /* dd */
7c52e0e8
L
13708 "fld{l|}",
13709 "fisttp{ll|}",
13710 "fst{l||}",
13711 "fstp{l|}",
9306ca4a 13712 "frstorIC",
252b5132 13713 "(bad)",
9306ca4a 13714 "fNsaveIC",
252b5132
RH
13715 "fNstsw",
13716 /* de */
13717 "fiadd",
13718 "fimul",
13719 "ficom",
13720 "ficomp",
13721 "fisub",
13722 "fisubr",
13723 "fidiv",
13724 "fidivr",
13725 /* df */
13726 "fild",
ca164297 13727 "fisttp",
252b5132
RH
13728 "fist",
13729 "fistp",
13730 "fbld",
7c52e0e8 13731 "fild{ll|}",
252b5132 13732 "fbstp",
7c52e0e8 13733 "fistp{ll|}",
1d9f512f
AM
13734};
13735
13736static const unsigned char float_mem_mode[] = {
13737 /* d8 */
13738 d_mode,
13739 d_mode,
13740 d_mode,
13741 d_mode,
13742 d_mode,
13743 d_mode,
13744 d_mode,
13745 d_mode,
13746 /* d9 */
13747 d_mode,
13748 0,
13749 d_mode,
13750 d_mode,
13751 0,
13752 w_mode,
13753 0,
13754 w_mode,
13755 /* da */
13756 d_mode,
13757 d_mode,
13758 d_mode,
13759 d_mode,
13760 d_mode,
13761 d_mode,
13762 d_mode,
13763 d_mode,
13764 /* db */
13765 d_mode,
13766 d_mode,
13767 d_mode,
13768 d_mode,
13769 0,
9306ca4a 13770 t_mode,
1d9f512f 13771 0,
9306ca4a 13772 t_mode,
1d9f512f
AM
13773 /* dc */
13774 q_mode,
13775 q_mode,
13776 q_mode,
13777 q_mode,
13778 q_mode,
13779 q_mode,
13780 q_mode,
13781 q_mode,
13782 /* dd */
13783 q_mode,
13784 q_mode,
13785 q_mode,
13786 q_mode,
13787 0,
13788 0,
13789 0,
13790 w_mode,
13791 /* de */
13792 w_mode,
13793 w_mode,
13794 w_mode,
13795 w_mode,
13796 w_mode,
13797 w_mode,
13798 w_mode,
13799 w_mode,
13800 /* df */
13801 w_mode,
13802 w_mode,
13803 w_mode,
13804 w_mode,
9306ca4a 13805 t_mode,
1d9f512f 13806 q_mode,
9306ca4a 13807 t_mode,
1d9f512f 13808 q_mode
252b5132
RH
13809};
13810
ce518a5f
L
13811#define ST { OP_ST, 0 }
13812#define STi { OP_STi, 0 }
252b5132 13813
bf890a93
IT
13814#define FGRPd9_2 NULL, { { NULL, 0 } }, 0
13815#define FGRPd9_4 NULL, { { NULL, 1 } }, 0
13816#define FGRPd9_5 NULL, { { NULL, 2 } }, 0
13817#define FGRPd9_6 NULL, { { NULL, 3 } }, 0
13818#define FGRPd9_7 NULL, { { NULL, 4 } }, 0
13819#define FGRPda_5 NULL, { { NULL, 5 } }, 0
13820#define FGRPdb_4 NULL, { { NULL, 6 } }, 0
13821#define FGRPde_3 NULL, { { NULL, 7 } }, 0
13822#define FGRPdf_4 NULL, { { NULL, 8 } }, 0
252b5132 13823
2da11e11 13824static const struct dis386 float_reg[][8] = {
252b5132
RH
13825 /* d8 */
13826 {
bf890a93
IT
13827 { "fadd", { ST, STi }, 0 },
13828 { "fmul", { ST, STi }, 0 },
13829 { "fcom", { STi }, 0 },
13830 { "fcomp", { STi }, 0 },
13831 { "fsub", { ST, STi }, 0 },
13832 { "fsubr", { ST, STi }, 0 },
13833 { "fdiv", { ST, STi }, 0 },
13834 { "fdivr", { ST, STi }, 0 },
252b5132
RH
13835 },
13836 /* d9 */
13837 {
bf890a93
IT
13838 { "fld", { STi }, 0 },
13839 { "fxch", { STi }, 0 },
252b5132 13840 { FGRPd9_2 },
592d1631 13841 { Bad_Opcode },
252b5132
RH
13842 { FGRPd9_4 },
13843 { FGRPd9_5 },
13844 { FGRPd9_6 },
13845 { FGRPd9_7 },
13846 },
13847 /* da */
13848 {
bf890a93
IT
13849 { "fcmovb", { ST, STi }, 0 },
13850 { "fcmove", { ST, STi }, 0 },
13851 { "fcmovbe",{ ST, STi }, 0 },
13852 { "fcmovu", { ST, STi }, 0 },
592d1631 13853 { Bad_Opcode },
252b5132 13854 { FGRPda_5 },
592d1631
L
13855 { Bad_Opcode },
13856 { Bad_Opcode },
252b5132
RH
13857 },
13858 /* db */
13859 {
bf890a93
IT
13860 { "fcmovnb",{ ST, STi }, 0 },
13861 { "fcmovne",{ ST, STi }, 0 },
13862 { "fcmovnbe",{ ST, STi }, 0 },
13863 { "fcmovnu",{ ST, STi }, 0 },
252b5132 13864 { FGRPdb_4 },
bf890a93
IT
13865 { "fucomi", { ST, STi }, 0 },
13866 { "fcomi", { ST, STi }, 0 },
592d1631 13867 { Bad_Opcode },
252b5132
RH
13868 },
13869 /* dc */
13870 {
bf890a93
IT
13871 { "fadd", { STi, ST }, 0 },
13872 { "fmul", { STi, ST }, 0 },
592d1631
L
13873 { Bad_Opcode },
13874 { Bad_Opcode },
bf890a93
IT
13875 { "fsub!M", { STi, ST }, 0 },
13876 { "fsubM", { STi, ST }, 0 },
13877 { "fdiv!M", { STi, ST }, 0 },
13878 { "fdivM", { STi, ST }, 0 },
252b5132
RH
13879 },
13880 /* dd */
13881 {
bf890a93 13882 { "ffree", { STi }, 0 },
592d1631 13883 { Bad_Opcode },
bf890a93
IT
13884 { "fst", { STi }, 0 },
13885 { "fstp", { STi }, 0 },
13886 { "fucom", { STi }, 0 },
13887 { "fucomp", { STi }, 0 },
592d1631
L
13888 { Bad_Opcode },
13889 { Bad_Opcode },
252b5132
RH
13890 },
13891 /* de */
13892 {
bf890a93
IT
13893 { "faddp", { STi, ST }, 0 },
13894 { "fmulp", { STi, ST }, 0 },
592d1631 13895 { Bad_Opcode },
252b5132 13896 { FGRPde_3 },
bf890a93
IT
13897 { "fsub!Mp", { STi, ST }, 0 },
13898 { "fsubMp", { STi, ST }, 0 },
13899 { "fdiv!Mp", { STi, ST }, 0 },
13900 { "fdivMp", { STi, ST }, 0 },
252b5132
RH
13901 },
13902 /* df */
13903 {
bf890a93 13904 { "ffreep", { STi }, 0 },
592d1631
L
13905 { Bad_Opcode },
13906 { Bad_Opcode },
13907 { Bad_Opcode },
252b5132 13908 { FGRPdf_4 },
bf890a93
IT
13909 { "fucomip", { ST, STi }, 0 },
13910 { "fcomip", { ST, STi }, 0 },
592d1631 13911 { Bad_Opcode },
252b5132
RH
13912 },
13913};
13914
252b5132
RH
13915static char *fgrps[][8] = {
13916 /* d9_2 0 */
13917 {
13918 "fnop","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
13919 },
13920
13921 /* d9_4 1 */
13922 {
13923 "fchs","fabs","(bad)","(bad)","ftst","fxam","(bad)","(bad)",
13924 },
13925
13926 /* d9_5 2 */
13927 {
13928 "fld1","fldl2t","fldl2e","fldpi","fldlg2","fldln2","fldz","(bad)",
13929 },
13930
13931 /* d9_6 3 */
13932 {
13933 "f2xm1","fyl2x","fptan","fpatan","fxtract","fprem1","fdecstp","fincstp",
13934 },
13935
13936 /* d9_7 4 */
13937 {
13938 "fprem","fyl2xp1","fsqrt","fsincos","frndint","fscale","fsin","fcos",
13939 },
13940
13941 /* da_5 5 */
13942 {
13943 "(bad)","fucompp","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
13944 },
13945
13946 /* db_4 6 */
13947 {
309d3373
JB
13948 "fNeni(8087 only)","fNdisi(8087 only)","fNclex","fNinit",
13949 "fNsetpm(287 only)","frstpm(287 only)","(bad)","(bad)",
252b5132
RH
13950 },
13951
13952 /* de_3 7 */
13953 {
13954 "(bad)","fcompp","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
13955 },
13956
13957 /* df_4 8 */
13958 {
13959 "fNstsw","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
13960 },
13961};
13962
b6169b20
L
13963static void
13964swap_operand (void)
13965{
13966 mnemonicendp[0] = '.';
13967 mnemonicendp[1] = 's';
13968 mnemonicendp += 2;
13969}
13970
b844680a
L
13971static void
13972OP_Skip_MODRM (int bytemode ATTRIBUTE_UNUSED,
13973 int sizeflag ATTRIBUTE_UNUSED)
13974{
13975 /* Skip mod/rm byte. */
13976 MODRM_CHECK;
13977 codep++;
13978}
13979
252b5132 13980static void
26ca5450 13981dofloat (int sizeflag)
252b5132 13982{
2da11e11 13983 const struct dis386 *dp;
252b5132
RH
13984 unsigned char floatop;
13985
13986 floatop = codep[-1];
13987
7967e09e 13988 if (modrm.mod != 3)
252b5132 13989 {
7967e09e 13990 int fp_indx = (floatop - 0xd8) * 8 + modrm.reg;
1d9f512f
AM
13991
13992 putop (float_mem[fp_indx], sizeflag);
ce518a5f 13993 obufp = op_out[0];
6e50d963 13994 op_ad = 2;
1d9f512f 13995 OP_E (float_mem_mode[fp_indx], sizeflag);
252b5132
RH
13996 return;
13997 }
6608db57 13998 /* Skip mod/rm byte. */
4bba6815 13999 MODRM_CHECK;
252b5132
RH
14000 codep++;
14001
7967e09e 14002 dp = &float_reg[floatop - 0xd8][modrm.reg];
252b5132
RH
14003 if (dp->name == NULL)
14004 {
7967e09e 14005 putop (fgrps[dp->op[0].bytemode][modrm.rm], sizeflag);
252b5132 14006
6608db57 14007 /* Instruction fnstsw is only one with strange arg. */
252b5132 14008 if (floatop == 0xdf && codep[-1] == 0xe0)
ce518a5f 14009 strcpy (op_out[0], names16[0]);
252b5132
RH
14010 }
14011 else
14012 {
14013 putop (dp->name, sizeflag);
14014
ce518a5f 14015 obufp = op_out[0];
6e50d963 14016 op_ad = 2;
ce518a5f
L
14017 if (dp->op[0].rtn)
14018 (*dp->op[0].rtn) (dp->op[0].bytemode, sizeflag);
6e50d963 14019
ce518a5f 14020 obufp = op_out[1];
6e50d963 14021 op_ad = 1;
ce518a5f
L
14022 if (dp->op[1].rtn)
14023 (*dp->op[1].rtn) (dp->op[1].bytemode, sizeflag);
252b5132
RH
14024 }
14025}
14026
9ce09ba2
RM
14027/* Like oappend (below), but S is a string starting with '%'.
14028 In Intel syntax, the '%' is elided. */
14029static void
14030oappend_maybe_intel (const char *s)
14031{
14032 oappend (s + intel_syntax);
14033}
14034
252b5132 14035static void
26ca5450 14036OP_ST (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 14037{
9ce09ba2 14038 oappend_maybe_intel ("%st");
252b5132
RH
14039}
14040
252b5132 14041static void
26ca5450 14042OP_STi (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 14043{
7967e09e 14044 sprintf (scratchbuf, "%%st(%d)", modrm.rm);
9ce09ba2 14045 oappend_maybe_intel (scratchbuf);
252b5132
RH
14046}
14047
6608db57 14048/* Capital letters in template are macros. */
6439fc28 14049static int
d3ce72d0 14050putop (const char *in_template, int sizeflag)
252b5132 14051{
2da11e11 14052 const char *p;
9306ca4a 14053 int alt = 0;
9d141669 14054 int cond = 1;
98b528ac
L
14055 unsigned int l = 0, len = 1;
14056 char last[4];
14057
14058#define SAVE_LAST(c) \
14059 if (l < len && l < sizeof (last)) \
14060 last[l++] = c; \
14061 else \
14062 abort ();
252b5132 14063
d3ce72d0 14064 for (p = in_template; *p; p++)
252b5132
RH
14065 {
14066 switch (*p)
14067 {
14068 default:
14069 *obufp++ = *p;
14070 break;
98b528ac
L
14071 case '%':
14072 len++;
14073 break;
9d141669
L
14074 case '!':
14075 cond = 0;
14076 break;
6439fc28
AM
14077 case '{':
14078 alt = 0;
14079 if (intel_syntax)
6439fc28
AM
14080 {
14081 while (*++p != '|')
7c52e0e8
L
14082 if (*p == '}' || *p == '\0')
14083 abort ();
6439fc28 14084 }
9306ca4a
JB
14085 /* Fall through. */
14086 case 'I':
14087 alt = 1;
14088 continue;
6439fc28
AM
14089 case '|':
14090 while (*++p != '}')
14091 {
14092 if (*p == '\0')
14093 abort ();
14094 }
14095 break;
14096 case '}':
14097 break;
252b5132 14098 case 'A':
db6eb5be
AM
14099 if (intel_syntax)
14100 break;
7967e09e 14101 if (modrm.mod != 3 || (sizeflag & SUFFIX_ALWAYS))
252b5132
RH
14102 *obufp++ = 'b';
14103 break;
14104 case 'B':
4b06377f
L
14105 if (l == 0 && len == 1)
14106 {
14107case_B:
14108 if (intel_syntax)
14109 break;
14110 if (sizeflag & SUFFIX_ALWAYS)
14111 *obufp++ = 'b';
14112 }
14113 else
14114 {
14115 if (l != 1
14116 || len != 2
14117 || last[0] != 'L')
14118 {
14119 SAVE_LAST (*p);
14120 break;
14121 }
14122
14123 if (address_mode == mode_64bit
14124 && !(prefixes & PREFIX_ADDR))
14125 {
14126 *obufp++ = 'a';
14127 *obufp++ = 'b';
14128 *obufp++ = 's';
14129 }
14130
14131 goto case_B;
14132 }
252b5132 14133 break;
9306ca4a
JB
14134 case 'C':
14135 if (intel_syntax && !alt)
14136 break;
14137 if ((prefixes & PREFIX_DATA) || (sizeflag & SUFFIX_ALWAYS))
14138 {
14139 if (sizeflag & DFLAG)
14140 *obufp++ = intel_syntax ? 'd' : 'l';
14141 else
14142 *obufp++ = intel_syntax ? 'w' : 's';
14143 used_prefixes |= (prefixes & PREFIX_DATA);
14144 }
14145 break;
ed7841b3
JB
14146 case 'D':
14147 if (intel_syntax || !(sizeflag & SUFFIX_ALWAYS))
14148 break;
161a04f6 14149 USED_REX (REX_W);
7967e09e 14150 if (modrm.mod == 3)
ed7841b3 14151 {
161a04f6 14152 if (rex & REX_W)
ed7841b3 14153 *obufp++ = 'q';
ed7841b3 14154 else
f16cd0d5
L
14155 {
14156 if (sizeflag & DFLAG)
14157 *obufp++ = intel_syntax ? 'd' : 'l';
14158 else
14159 *obufp++ = 'w';
14160 used_prefixes |= (prefixes & PREFIX_DATA);
14161 }
ed7841b3
JB
14162 }
14163 else
14164 *obufp++ = 'w';
14165 break;
252b5132 14166 case 'E': /* For jcxz/jecxz */
cb712a9e 14167 if (address_mode == mode_64bit)
c1a64871
JH
14168 {
14169 if (sizeflag & AFLAG)
14170 *obufp++ = 'r';
14171 else
14172 *obufp++ = 'e';
14173 }
14174 else
14175 if (sizeflag & AFLAG)
14176 *obufp++ = 'e';
3ffd33cf
AM
14177 used_prefixes |= (prefixes & PREFIX_ADDR);
14178 break;
14179 case 'F':
db6eb5be
AM
14180 if (intel_syntax)
14181 break;
e396998b 14182 if ((prefixes & PREFIX_ADDR) || (sizeflag & SUFFIX_ALWAYS))
3ffd33cf
AM
14183 {
14184 if (sizeflag & AFLAG)
cb712a9e 14185 *obufp++ = address_mode == mode_64bit ? 'q' : 'l';
3ffd33cf 14186 else
cb712a9e 14187 *obufp++ = address_mode == mode_64bit ? 'l' : 'w';
3ffd33cf
AM
14188 used_prefixes |= (prefixes & PREFIX_ADDR);
14189 }
252b5132 14190 break;
52fd6d94
JB
14191 case 'G':
14192 if (intel_syntax || (obufp[-1] != 's' && !(sizeflag & SUFFIX_ALWAYS)))
14193 break;
161a04f6 14194 if ((rex & REX_W) || (sizeflag & DFLAG))
52fd6d94
JB
14195 *obufp++ = 'l';
14196 else
14197 *obufp++ = 'w';
161a04f6 14198 if (!(rex & REX_W))
52fd6d94
JB
14199 used_prefixes |= (prefixes & PREFIX_DATA);
14200 break;
5dd0794d 14201 case 'H':
db6eb5be
AM
14202 if (intel_syntax)
14203 break;
5dd0794d
AM
14204 if ((prefixes & (PREFIX_CS | PREFIX_DS)) == PREFIX_CS
14205 || (prefixes & (PREFIX_CS | PREFIX_DS)) == PREFIX_DS)
14206 {
14207 used_prefixes |= prefixes & (PREFIX_CS | PREFIX_DS);
14208 *obufp++ = ',';
14209 *obufp++ = 'p';
14210 if (prefixes & PREFIX_DS)
14211 *obufp++ = 't';
14212 else
14213 *obufp++ = 'n';
14214 }
14215 break;
9306ca4a
JB
14216 case 'J':
14217 if (intel_syntax)
14218 break;
14219 *obufp++ = 'l';
14220 break;
42903f7f
L
14221 case 'K':
14222 USED_REX (REX_W);
14223 if (rex & REX_W)
14224 *obufp++ = 'q';
14225 else
14226 *obufp++ = 'd';
14227 break;
6dd5059a 14228 case 'Z':
04d824a4
JB
14229 if (l != 0 || len != 1)
14230 {
14231 if (l != 1 || len != 2 || last[0] != 'X')
14232 {
14233 SAVE_LAST (*p);
14234 break;
14235 }
14236 if (!need_vex || !vex.evex)
14237 abort ();
14238 if (intel_syntax
14239 || ((modrm.mod == 3 || vex.b) && !(sizeflag & SUFFIX_ALWAYS)))
14240 break;
14241 switch (vex.length)
14242 {
14243 case 128:
14244 *obufp++ = 'x';
14245 break;
14246 case 256:
14247 *obufp++ = 'y';
14248 break;
14249 case 512:
14250 *obufp++ = 'z';
14251 break;
14252 default:
14253 abort ();
14254 }
14255 break;
14256 }
6dd5059a
L
14257 if (intel_syntax)
14258 break;
14259 if (address_mode == mode_64bit && (sizeflag & SUFFIX_ALWAYS))
14260 {
14261 *obufp++ = 'q';
14262 break;
14263 }
14264 /* Fall through. */
98b528ac 14265 goto case_L;
252b5132 14266 case 'L':
98b528ac
L
14267 if (l != 0 || len != 1)
14268 {
14269 SAVE_LAST (*p);
14270 break;
14271 }
14272case_L:
db6eb5be
AM
14273 if (intel_syntax)
14274 break;
252b5132
RH
14275 if (sizeflag & SUFFIX_ALWAYS)
14276 *obufp++ = 'l';
252b5132 14277 break;
9d141669
L
14278 case 'M':
14279 if (intel_mnemonic != cond)
14280 *obufp++ = 'r';
14281 break;
252b5132
RH
14282 case 'N':
14283 if ((prefixes & PREFIX_FWAIT) == 0)
14284 *obufp++ = 'n';
7d421014
ILT
14285 else
14286 used_prefixes |= PREFIX_FWAIT;
252b5132 14287 break;
52b15da3 14288 case 'O':
161a04f6
L
14289 USED_REX (REX_W);
14290 if (rex & REX_W)
6439fc28 14291 *obufp++ = 'o';
a35ca55a
JB
14292 else if (intel_syntax && (sizeflag & DFLAG))
14293 *obufp++ = 'q';
52b15da3
JH
14294 else
14295 *obufp++ = 'd';
161a04f6 14296 if (!(rex & REX_W))
a35ca55a 14297 used_prefixes |= (prefixes & PREFIX_DATA);
52b15da3 14298 break;
6439fc28 14299 case 'T':
d9e3625e
L
14300 if (!intel_syntax
14301 && address_mode == mode_64bit
7bb15c6f 14302 && ((sizeflag & DFLAG) || (rex & REX_W)))
6439fc28
AM
14303 {
14304 *obufp++ = 'q';
14305 break;
14306 }
6608db57 14307 /* Fall through. */
4b4c407a 14308 goto case_P;
252b5132 14309 case 'P':
4b4c407a 14310 if (l == 0 && len == 1)
d9e3625e 14311 {
4b4c407a
L
14312case_P:
14313 if (intel_syntax)
d9e3625e 14314 {
4b4c407a
L
14315 if ((rex & REX_W) == 0
14316 && (prefixes & PREFIX_DATA))
14317 {
14318 if ((sizeflag & DFLAG) == 0)
14319 *obufp++ = 'w';
14320 used_prefixes |= (prefixes & PREFIX_DATA);
14321 }
14322 break;
14323 }
14324 if ((prefixes & PREFIX_DATA)
14325 || (rex & REX_W)
14326 || (sizeflag & SUFFIX_ALWAYS))
14327 {
14328 USED_REX (REX_W);
14329 if (rex & REX_W)
14330 *obufp++ = 'q';
14331 else
14332 {
14333 if (sizeflag & DFLAG)
14334 *obufp++ = 'l';
14335 else
14336 *obufp++ = 'w';
14337 used_prefixes |= (prefixes & PREFIX_DATA);
14338 }
d9e3625e 14339 }
d9e3625e 14340 }
4b4c407a 14341 else
252b5132 14342 {
4b4c407a
L
14343 if (l != 1 || len != 2 || last[0] != 'L')
14344 {
14345 SAVE_LAST (*p);
14346 break;
14347 }
14348
14349 if ((prefixes & PREFIX_DATA)
14350 || (rex & REX_W)
14351 || (sizeflag & SUFFIX_ALWAYS))
52b15da3 14352 {
4b4c407a
L
14353 USED_REX (REX_W);
14354 if (rex & REX_W)
14355 *obufp++ = 'q';
14356 else
14357 {
14358 if (sizeflag & DFLAG)
14359 *obufp++ = intel_syntax ? 'd' : 'l';
14360 else
14361 *obufp++ = 'w';
14362 used_prefixes |= (prefixes & PREFIX_DATA);
14363 }
52b15da3 14364 }
252b5132
RH
14365 }
14366 break;
6439fc28 14367 case 'U':
db6eb5be
AM
14368 if (intel_syntax)
14369 break;
7bb15c6f 14370 if (address_mode == mode_64bit
6c067bbb 14371 && ((sizeflag & DFLAG) || (rex & REX_W)))
6439fc28 14372 {
7967e09e 14373 if (modrm.mod != 3 || (sizeflag & SUFFIX_ALWAYS))
1a114b12 14374 *obufp++ = 'q';
6439fc28
AM
14375 break;
14376 }
6608db57 14377 /* Fall through. */
98b528ac 14378 goto case_Q;
252b5132 14379 case 'Q':
98b528ac 14380 if (l == 0 && len == 1)
252b5132 14381 {
98b528ac
L
14382case_Q:
14383 if (intel_syntax && !alt)
14384 break;
14385 USED_REX (REX_W);
14386 if (modrm.mod != 3 || (sizeflag & SUFFIX_ALWAYS))
52b15da3 14387 {
98b528ac
L
14388 if (rex & REX_W)
14389 *obufp++ = 'q';
52b15da3 14390 else
98b528ac
L
14391 {
14392 if (sizeflag & DFLAG)
14393 *obufp++ = intel_syntax ? 'd' : 'l';
14394 else
14395 *obufp++ = 'w';
f16cd0d5 14396 used_prefixes |= (prefixes & PREFIX_DATA);
98b528ac 14397 }
52b15da3 14398 }
98b528ac
L
14399 }
14400 else
14401 {
14402 if (l != 1 || len != 2 || last[0] != 'L')
14403 {
14404 SAVE_LAST (*p);
14405 break;
14406 }
14407 if (intel_syntax
14408 || (modrm.mod == 3 && !(sizeflag & SUFFIX_ALWAYS)))
14409 break;
14410 if ((rex & REX_W))
14411 {
14412 USED_REX (REX_W);
14413 *obufp++ = 'q';
14414 }
14415 else
14416 *obufp++ = 'l';
252b5132
RH
14417 }
14418 break;
14419 case 'R':
161a04f6
L
14420 USED_REX (REX_W);
14421 if (rex & REX_W)
a35ca55a
JB
14422 *obufp++ = 'q';
14423 else if (sizeflag & DFLAG)
c608c12e 14424 {
a35ca55a 14425 if (intel_syntax)
c608c12e 14426 *obufp++ = 'd';
c608c12e 14427 else
a35ca55a 14428 *obufp++ = 'l';
c608c12e 14429 }
252b5132 14430 else
a35ca55a
JB
14431 *obufp++ = 'w';
14432 if (intel_syntax && !p[1]
161a04f6 14433 && ((rex & REX_W) || (sizeflag & DFLAG)))
a35ca55a 14434 *obufp++ = 'e';
161a04f6 14435 if (!(rex & REX_W))
52b15da3 14436 used_prefixes |= (prefixes & PREFIX_DATA);
252b5132 14437 break;
1a114b12 14438 case 'V':
4b06377f 14439 if (l == 0 && len == 1)
1a114b12 14440 {
4b06377f
L
14441 if (intel_syntax)
14442 break;
7bb15c6f 14443 if (address_mode == mode_64bit
6c067bbb 14444 && ((sizeflag & DFLAG) || (rex & REX_W)))
4b06377f
L
14445 {
14446 if (sizeflag & SUFFIX_ALWAYS)
14447 *obufp++ = 'q';
14448 break;
14449 }
14450 }
14451 else
14452 {
14453 if (l != 1
14454 || len != 2
14455 || last[0] != 'L')
14456 {
14457 SAVE_LAST (*p);
14458 break;
14459 }
14460
14461 if (rex & REX_W)
14462 {
14463 *obufp++ = 'a';
14464 *obufp++ = 'b';
14465 *obufp++ = 's';
14466 }
1a114b12
JB
14467 }
14468 /* Fall through. */
4b06377f 14469 goto case_S;
252b5132 14470 case 'S':
4b06377f 14471 if (l == 0 && len == 1)
252b5132 14472 {
4b06377f
L
14473case_S:
14474 if (intel_syntax)
14475 break;
14476 if (sizeflag & SUFFIX_ALWAYS)
52b15da3 14477 {
4b06377f
L
14478 if (rex & REX_W)
14479 *obufp++ = 'q';
52b15da3 14480 else
4b06377f
L
14481 {
14482 if (sizeflag & DFLAG)
14483 *obufp++ = 'l';
14484 else
14485 *obufp++ = 'w';
14486 used_prefixes |= (prefixes & PREFIX_DATA);
14487 }
14488 }
14489 }
14490 else
14491 {
14492 if (l != 1
14493 || len != 2
14494 || last[0] != 'L')
14495 {
14496 SAVE_LAST (*p);
14497 break;
52b15da3 14498 }
4b06377f
L
14499
14500 if (address_mode == mode_64bit
14501 && !(prefixes & PREFIX_ADDR))
14502 {
14503 *obufp++ = 'a';
14504 *obufp++ = 'b';
14505 *obufp++ = 's';
14506 }
14507
14508 goto case_S;
252b5132 14509 }
252b5132 14510 break;
041bd2e0 14511 case 'X':
c0f3af97
L
14512 if (l != 0 || len != 1)
14513 {
14514 SAVE_LAST (*p);
14515 break;
14516 }
14517 if (need_vex && vex.prefix)
14518 {
14519 if (vex.prefix == DATA_PREFIX_OPCODE)
14520 *obufp++ = 'd';
14521 else
14522 *obufp++ = 's';
14523 }
041bd2e0 14524 else
f16cd0d5
L
14525 {
14526 if (prefixes & PREFIX_DATA)
14527 *obufp++ = 'd';
14528 else
14529 *obufp++ = 's';
14530 used_prefixes |= (prefixes & PREFIX_DATA);
14531 }
041bd2e0 14532 break;
76f227a5 14533 case 'Y':
c0f3af97 14534 if (l == 0 && len == 1)
76f227a5 14535 {
c0f3af97
L
14536 if (intel_syntax || !(sizeflag & SUFFIX_ALWAYS))
14537 break;
14538 if (rex & REX_W)
14539 {
14540 USED_REX (REX_W);
14541 *obufp++ = 'q';
14542 }
14543 break;
14544 }
14545 else
14546 {
14547 if (l != 1 || len != 2 || last[0] != 'X')
14548 {
14549 SAVE_LAST (*p);
14550 break;
14551 }
14552 if (!need_vex)
14553 abort ();
14554 if (intel_syntax
04d824a4 14555 || ((modrm.mod == 3 || vex.b) && !(sizeflag & SUFFIX_ALWAYS)))
c0f3af97
L
14556 break;
14557 switch (vex.length)
14558 {
14559 case 128:
14560 *obufp++ = 'x';
14561 break;
14562 case 256:
14563 *obufp++ = 'y';
14564 break;
04d824a4
JB
14565 case 512:
14566 if (!vex.evex)
c0f3af97 14567 default:
04d824a4 14568 abort ();
c0f3af97 14569 }
76f227a5
JH
14570 }
14571 break;
252b5132 14572 case 'W':
0bfee649 14573 if (l == 0 && len == 1)
a35ca55a 14574 {
0bfee649
L
14575 /* operand size flag for cwtl, cbtw */
14576 USED_REX (REX_W);
14577 if (rex & REX_W)
14578 {
14579 if (intel_syntax)
14580 *obufp++ = 'd';
14581 else
14582 *obufp++ = 'l';
14583 }
14584 else if (sizeflag & DFLAG)
14585 *obufp++ = 'w';
a35ca55a 14586 else
0bfee649
L
14587 *obufp++ = 'b';
14588 if (!(rex & REX_W))
14589 used_prefixes |= (prefixes & PREFIX_DATA);
a35ca55a 14590 }
252b5132 14591 else
0bfee649 14592 {
6c30d220
L
14593 if (l != 1
14594 || len != 2
14595 || (last[0] != 'X'
14596 && last[0] != 'L'))
0bfee649
L
14597 {
14598 SAVE_LAST (*p);
14599 break;
14600 }
14601 if (!need_vex)
14602 abort ();
6c30d220
L
14603 if (last[0] == 'X')
14604 *obufp++ = vex.w ? 'd': 's';
14605 else
14606 *obufp++ = vex.w ? 'q': 'd';
0bfee649 14607 }
252b5132 14608 break;
a72d2af2
L
14609 case '^':
14610 if (intel_syntax)
14611 break;
14612 if ((prefixes & PREFIX_DATA) || (sizeflag & SUFFIX_ALWAYS))
14613 {
14614 if (sizeflag & DFLAG)
14615 *obufp++ = 'l';
14616 else
14617 *obufp++ = 'w';
14618 used_prefixes |= (prefixes & PREFIX_DATA);
14619 }
14620 break;
5db04b09
L
14621 case '@':
14622 if (intel_syntax)
14623 break;
14624 if (address_mode == mode_64bit
14625 && (isa64 == intel64
14626 || ((sizeflag & DFLAG) || (rex & REX_W))))
14627 *obufp++ = 'q';
14628 else if ((prefixes & PREFIX_DATA))
14629 {
14630 if (!(sizeflag & DFLAG))
14631 *obufp++ = 'w';
14632 used_prefixes |= (prefixes & PREFIX_DATA);
14633 }
14634 break;
252b5132 14635 }
9306ca4a 14636 alt = 0;
252b5132
RH
14637 }
14638 *obufp = 0;
ea397f5b 14639 mnemonicendp = obufp;
6439fc28 14640 return 0;
252b5132
RH
14641}
14642
14643static void
26ca5450 14644oappend (const char *s)
252b5132 14645{
ea397f5b 14646 obufp = stpcpy (obufp, s);
252b5132
RH
14647}
14648
14649static void
26ca5450 14650append_seg (void)
252b5132 14651{
285ca992
L
14652 /* Only print the active segment register. */
14653 if (!active_seg_prefix)
14654 return;
14655
14656 used_prefixes |= active_seg_prefix;
14657 switch (active_seg_prefix)
7d421014 14658 {
285ca992 14659 case PREFIX_CS:
9ce09ba2 14660 oappend_maybe_intel ("%cs:");
285ca992
L
14661 break;
14662 case PREFIX_DS:
9ce09ba2 14663 oappend_maybe_intel ("%ds:");
285ca992
L
14664 break;
14665 case PREFIX_SS:
9ce09ba2 14666 oappend_maybe_intel ("%ss:");
285ca992
L
14667 break;
14668 case PREFIX_ES:
9ce09ba2 14669 oappend_maybe_intel ("%es:");
285ca992
L
14670 break;
14671 case PREFIX_FS:
9ce09ba2 14672 oappend_maybe_intel ("%fs:");
285ca992
L
14673 break;
14674 case PREFIX_GS:
9ce09ba2 14675 oappend_maybe_intel ("%gs:");
285ca992
L
14676 break;
14677 default:
14678 break;
7d421014 14679 }
252b5132
RH
14680}
14681
14682static void
26ca5450 14683OP_indirE (int bytemode, int sizeflag)
252b5132
RH
14684{
14685 if (!intel_syntax)
14686 oappend ("*");
14687 OP_E (bytemode, sizeflag);
14688}
14689
52b15da3 14690static void
26ca5450 14691print_operand_value (char *buf, int hex, bfd_vma disp)
52b15da3 14692{
cb712a9e 14693 if (address_mode == mode_64bit)
52b15da3
JH
14694 {
14695 if (hex)
14696 {
14697 char tmp[30];
14698 int i;
14699 buf[0] = '0';
14700 buf[1] = 'x';
14701 sprintf_vma (tmp, disp);
6608db57 14702 for (i = 0; tmp[i] == '0' && tmp[i + 1]; i++);
52b15da3
JH
14703 strcpy (buf + 2, tmp + i);
14704 }
14705 else
14706 {
14707 bfd_signed_vma v = disp;
14708 char tmp[30];
14709 int i;
14710 if (v < 0)
14711 {
14712 *(buf++) = '-';
14713 v = -disp;
6608db57 14714 /* Check for possible overflow on 0x8000000000000000. */
52b15da3
JH
14715 if (v < 0)
14716 {
14717 strcpy (buf, "9223372036854775808");
14718 return;
14719 }
14720 }
14721 if (!v)
14722 {
14723 strcpy (buf, "0");
14724 return;
14725 }
14726
14727 i = 0;
14728 tmp[29] = 0;
14729 while (v)
14730 {
6608db57 14731 tmp[28 - i] = (v % 10) + '0';
52b15da3
JH
14732 v /= 10;
14733 i++;
14734 }
14735 strcpy (buf, tmp + 29 - i);
14736 }
14737 }
14738 else
14739 {
14740 if (hex)
14741 sprintf (buf, "0x%x", (unsigned int) disp);
14742 else
14743 sprintf (buf, "%d", (int) disp);
14744 }
14745}
14746
5d669648
L
14747/* Put DISP in BUF as signed hex number. */
14748
14749static void
14750print_displacement (char *buf, bfd_vma disp)
14751{
14752 bfd_signed_vma val = disp;
14753 char tmp[30];
14754 int i, j = 0;
14755
14756 if (val < 0)
14757 {
14758 buf[j++] = '-';
14759 val = -disp;
14760
14761 /* Check for possible overflow. */
14762 if (val < 0)
14763 {
14764 switch (address_mode)
14765 {
14766 case mode_64bit:
14767 strcpy (buf + j, "0x8000000000000000");
14768 break;
14769 case mode_32bit:
14770 strcpy (buf + j, "0x80000000");
14771 break;
14772 case mode_16bit:
14773 strcpy (buf + j, "0x8000");
14774 break;
14775 }
14776 return;
14777 }
14778 }
14779
14780 buf[j++] = '0';
14781 buf[j++] = 'x';
14782
0af1713e 14783 sprintf_vma (tmp, (bfd_vma) val);
5d669648
L
14784 for (i = 0; tmp[i] == '0'; i++)
14785 continue;
14786 if (tmp[i] == '\0')
14787 i--;
14788 strcpy (buf + j, tmp + i);
14789}
14790
3f31e633
JB
14791static void
14792intel_operand_size (int bytemode, int sizeflag)
14793{
43234a1e
L
14794 if (vex.evex
14795 && vex.b
14796 && (bytemode == x_mode
14797 || bytemode == evex_half_bcst_xmmq_mode))
14798 {
14799 if (vex.w)
14800 oappend ("QWORD PTR ");
14801 else
14802 oappend ("DWORD PTR ");
14803 return;
14804 }
3f31e633
JB
14805 switch (bytemode)
14806 {
14807 case b_mode:
b6169b20 14808 case b_swap_mode:
42903f7f 14809 case dqb_mode:
1ba585e8 14810 case db_mode:
3f31e633
JB
14811 oappend ("BYTE PTR ");
14812 break;
14813 case w_mode:
1ba585e8 14814 case dw_mode:
3f31e633 14815 case dqw_mode:
1ba585e8 14816 case dqw_swap_mode:
3f31e633
JB
14817 oappend ("WORD PTR ");
14818 break;
1a114b12 14819 case stack_v_mode:
7bb15c6f 14820 if (address_mode == mode_64bit && ((sizeflag & DFLAG) || (rex & REX_W)))
3f31e633
JB
14821 {
14822 oappend ("QWORD PTR ");
3f31e633
JB
14823 break;
14824 }
14825 /* FALLTHRU */
14826 case v_mode:
b6169b20 14827 case v_swap_mode:
3f31e633 14828 case dq_mode:
161a04f6
L
14829 USED_REX (REX_W);
14830 if (rex & REX_W)
3f31e633 14831 oappend ("QWORD PTR ");
3f31e633 14832 else
f16cd0d5
L
14833 {
14834 if ((sizeflag & DFLAG) || bytemode == dq_mode)
14835 oappend ("DWORD PTR ");
14836 else
14837 oappend ("WORD PTR ");
14838 used_prefixes |= (prefixes & PREFIX_DATA);
14839 }
3f31e633 14840 break;
52fd6d94 14841 case z_mode:
161a04f6 14842 if ((rex & REX_W) || (sizeflag & DFLAG))
52fd6d94
JB
14843 *obufp++ = 'D';
14844 oappend ("WORD PTR ");
161a04f6 14845 if (!(rex & REX_W))
52fd6d94
JB
14846 used_prefixes |= (prefixes & PREFIX_DATA);
14847 break;
34b772a6
JB
14848 case a_mode:
14849 if (sizeflag & DFLAG)
14850 oappend ("QWORD PTR ");
14851 else
14852 oappend ("DWORD PTR ");
14853 used_prefixes |= (prefixes & PREFIX_DATA);
14854 break;
3f31e633 14855 case d_mode:
539f890d
L
14856 case d_scalar_mode:
14857 case d_scalar_swap_mode:
fa99fab2 14858 case d_swap_mode:
42903f7f 14859 case dqd_mode:
3f31e633
JB
14860 oappend ("DWORD PTR ");
14861 break;
14862 case q_mode:
539f890d
L
14863 case q_scalar_mode:
14864 case q_scalar_swap_mode:
b6169b20 14865 case q_swap_mode:
3f31e633
JB
14866 oappend ("QWORD PTR ");
14867 break;
14868 case m_mode:
cb712a9e 14869 if (address_mode == mode_64bit)
3f31e633
JB
14870 oappend ("QWORD PTR ");
14871 else
14872 oappend ("DWORD PTR ");
14873 break;
14874 case f_mode:
14875 if (sizeflag & DFLAG)
14876 oappend ("FWORD PTR ");
14877 else
14878 oappend ("DWORD PTR ");
14879 used_prefixes |= (prefixes & PREFIX_DATA);
14880 break;
14881 case t_mode:
14882 oappend ("TBYTE PTR ");
14883 break;
14884 case x_mode:
b6169b20 14885 case x_swap_mode:
43234a1e
L
14886 case evex_x_gscat_mode:
14887 case evex_x_nobcst_mode:
c0f3af97
L
14888 if (need_vex)
14889 {
14890 switch (vex.length)
14891 {
14892 case 128:
14893 oappend ("XMMWORD PTR ");
14894 break;
14895 case 256:
14896 oappend ("YMMWORD PTR ");
14897 break;
43234a1e
L
14898 case 512:
14899 oappend ("ZMMWORD PTR ");
14900 break;
c0f3af97
L
14901 default:
14902 abort ();
14903 }
14904 }
14905 else
14906 oappend ("XMMWORD PTR ");
14907 break;
14908 case xmm_mode:
3f31e633
JB
14909 oappend ("XMMWORD PTR ");
14910 break;
43234a1e
L
14911 case ymm_mode:
14912 oappend ("YMMWORD PTR ");
14913 break;
c0f3af97 14914 case xmmq_mode:
43234a1e 14915 case evex_half_bcst_xmmq_mode:
c0f3af97
L
14916 if (!need_vex)
14917 abort ();
14918
14919 switch (vex.length)
14920 {
14921 case 128:
14922 oappend ("QWORD PTR ");
14923 break;
14924 case 256:
14925 oappend ("XMMWORD PTR ");
14926 break;
43234a1e
L
14927 case 512:
14928 oappend ("YMMWORD PTR ");
14929 break;
c0f3af97
L
14930 default:
14931 abort ();
14932 }
14933 break;
6c30d220
L
14934 case xmm_mb_mode:
14935 if (!need_vex)
14936 abort ();
14937
14938 switch (vex.length)
14939 {
14940 case 128:
14941 case 256:
43234a1e 14942 case 512:
6c30d220
L
14943 oappend ("BYTE PTR ");
14944 break;
14945 default:
14946 abort ();
14947 }
14948 break;
14949 case xmm_mw_mode:
14950 if (!need_vex)
14951 abort ();
14952
14953 switch (vex.length)
14954 {
14955 case 128:
14956 case 256:
43234a1e 14957 case 512:
6c30d220
L
14958 oappend ("WORD PTR ");
14959 break;
14960 default:
14961 abort ();
14962 }
14963 break;
14964 case xmm_md_mode:
14965 if (!need_vex)
14966 abort ();
14967
14968 switch (vex.length)
14969 {
14970 case 128:
14971 case 256:
43234a1e 14972 case 512:
6c30d220
L
14973 oappend ("DWORD PTR ");
14974 break;
14975 default:
14976 abort ();
14977 }
14978 break;
14979 case xmm_mq_mode:
14980 if (!need_vex)
14981 abort ();
14982
14983 switch (vex.length)
14984 {
14985 case 128:
14986 case 256:
43234a1e 14987 case 512:
6c30d220
L
14988 oappend ("QWORD PTR ");
14989 break;
14990 default:
14991 abort ();
14992 }
14993 break;
14994 case xmmdw_mode:
14995 if (!need_vex)
14996 abort ();
14997
14998 switch (vex.length)
14999 {
15000 case 128:
15001 oappend ("WORD PTR ");
15002 break;
15003 case 256:
15004 oappend ("DWORD PTR ");
15005 break;
43234a1e
L
15006 case 512:
15007 oappend ("QWORD PTR ");
15008 break;
6c30d220
L
15009 default:
15010 abort ();
15011 }
15012 break;
15013 case xmmqd_mode:
15014 if (!need_vex)
15015 abort ();
15016
15017 switch (vex.length)
15018 {
15019 case 128:
15020 oappend ("DWORD PTR ");
15021 break;
15022 case 256:
15023 oappend ("QWORD PTR ");
15024 break;
43234a1e
L
15025 case 512:
15026 oappend ("XMMWORD PTR ");
15027 break;
6c30d220
L
15028 default:
15029 abort ();
15030 }
15031 break;
c0f3af97
L
15032 case ymmq_mode:
15033 if (!need_vex)
15034 abort ();
15035
15036 switch (vex.length)
15037 {
15038 case 128:
15039 oappend ("QWORD PTR ");
15040 break;
15041 case 256:
15042 oappend ("YMMWORD PTR ");
15043 break;
43234a1e
L
15044 case 512:
15045 oappend ("ZMMWORD PTR ");
15046 break;
c0f3af97
L
15047 default:
15048 abort ();
15049 }
15050 break;
6c30d220
L
15051 case ymmxmm_mode:
15052 if (!need_vex)
15053 abort ();
15054
15055 switch (vex.length)
15056 {
15057 case 128:
15058 case 256:
15059 oappend ("XMMWORD PTR ");
15060 break;
15061 default:
15062 abort ();
15063 }
15064 break;
fb9c77c7
L
15065 case o_mode:
15066 oappend ("OWORD PTR ");
15067 break;
43234a1e 15068 case xmm_mdq_mode:
0bfee649 15069 case vex_w_dq_mode:
1c480963 15070 case vex_scalar_w_dq_mode:
0bfee649
L
15071 if (!need_vex)
15072 abort ();
15073
15074 if (vex.w)
15075 oappend ("QWORD PTR ");
15076 else
15077 oappend ("DWORD PTR ");
15078 break;
43234a1e
L
15079 case vex_vsib_d_w_dq_mode:
15080 case vex_vsib_q_w_dq_mode:
15081 if (!need_vex)
15082 abort ();
15083
15084 if (!vex.evex)
15085 {
15086 if (vex.w)
15087 oappend ("QWORD PTR ");
15088 else
15089 oappend ("DWORD PTR ");
15090 }
15091 else
15092 {
b28d1bda
IT
15093 switch (vex.length)
15094 {
15095 case 128:
15096 oappend ("XMMWORD PTR ");
15097 break;
15098 case 256:
15099 oappend ("YMMWORD PTR ");
15100 break;
15101 case 512:
15102 oappend ("ZMMWORD PTR ");
15103 break;
15104 default:
15105 abort ();
15106 }
43234a1e
L
15107 }
15108 break;
5fc35d96
IT
15109 case vex_vsib_q_w_d_mode:
15110 case vex_vsib_d_w_d_mode:
b28d1bda 15111 if (!need_vex || !vex.evex)
5fc35d96
IT
15112 abort ();
15113
b28d1bda
IT
15114 switch (vex.length)
15115 {
15116 case 128:
15117 oappend ("QWORD PTR ");
15118 break;
15119 case 256:
15120 oappend ("XMMWORD PTR ");
15121 break;
15122 case 512:
15123 oappend ("YMMWORD PTR ");
15124 break;
15125 default:
15126 abort ();
15127 }
5fc35d96
IT
15128
15129 break;
1ba585e8
IT
15130 case mask_bd_mode:
15131 if (!need_vex || vex.length != 128)
15132 abort ();
15133 if (vex.w)
15134 oappend ("DWORD PTR ");
15135 else
15136 oappend ("BYTE PTR ");
15137 break;
43234a1e
L
15138 case mask_mode:
15139 if (!need_vex)
15140 abort ();
1ba585e8
IT
15141 if (vex.w)
15142 oappend ("QWORD PTR ");
15143 else
15144 oappend ("WORD PTR ");
43234a1e 15145 break;
6c75cc62 15146 case v_bnd_mode:
3f31e633
JB
15147 default:
15148 break;
15149 }
15150}
15151
252b5132 15152static void
c0f3af97 15153OP_E_register (int bytemode, int sizeflag)
252b5132 15154{
c0f3af97
L
15155 int reg = modrm.rm;
15156 const char **names;
252b5132 15157
c0f3af97
L
15158 USED_REX (REX_B);
15159 if ((rex & REX_B))
15160 reg += 8;
252b5132 15161
b6169b20 15162 if ((sizeflag & SUFFIX_ALWAYS)
1ba585e8
IT
15163 && (bytemode == b_swap_mode
15164 || bytemode == v_swap_mode
15165 || bytemode == dqw_swap_mode))
b6169b20
L
15166 swap_operand ();
15167
c0f3af97 15168 switch (bytemode)
252b5132 15169 {
c0f3af97 15170 case b_mode:
b6169b20 15171 case b_swap_mode:
c0f3af97
L
15172 USED_REX (0);
15173 if (rex)
15174 names = names8rex;
15175 else
15176 names = names8;
15177 break;
15178 case w_mode:
15179 names = names16;
15180 break;
15181 case d_mode:
1ba585e8
IT
15182 case dw_mode:
15183 case db_mode:
c0f3af97
L
15184 names = names32;
15185 break;
15186 case q_mode:
15187 names = names64;
15188 break;
15189 case m_mode:
6c75cc62 15190 case v_bnd_mode:
c0f3af97
L
15191 names = address_mode == mode_64bit ? names64 : names32;
15192 break;
7e8b059b
L
15193 case bnd_mode:
15194 names = names_bnd;
15195 break;
c0f3af97 15196 case stack_v_mode:
7bb15c6f 15197 if (address_mode == mode_64bit && ((sizeflag & DFLAG) || (rex & REX_W)))
252b5132 15198 {
c0f3af97 15199 names = names64;
252b5132 15200 break;
252b5132 15201 }
c0f3af97
L
15202 bytemode = v_mode;
15203 /* FALLTHRU */
15204 case v_mode:
b6169b20 15205 case v_swap_mode:
c0f3af97
L
15206 case dq_mode:
15207 case dqb_mode:
15208 case dqd_mode:
15209 case dqw_mode:
1ba585e8 15210 case dqw_swap_mode:
c0f3af97
L
15211 USED_REX (REX_W);
15212 if (rex & REX_W)
15213 names = names64;
c0f3af97 15214 else
f16cd0d5 15215 {
7bb15c6f 15216 if ((sizeflag & DFLAG)
f16cd0d5
L
15217 || (bytemode != v_mode
15218 && bytemode != v_swap_mode))
15219 names = names32;
15220 else
15221 names = names16;
15222 used_prefixes |= (prefixes & PREFIX_DATA);
15223 }
c0f3af97 15224 break;
1ba585e8 15225 case mask_bd_mode:
43234a1e
L
15226 case mask_mode:
15227 names = names_mask;
15228 break;
c0f3af97
L
15229 case 0:
15230 return;
15231 default:
15232 oappend (INTERNAL_DISASSEMBLER_ERROR);
252b5132
RH
15233 return;
15234 }
c0f3af97
L
15235 oappend (names[reg]);
15236}
15237
15238static void
c1e679ec 15239OP_E_memory (int bytemode, int sizeflag)
c0f3af97
L
15240{
15241 bfd_vma disp = 0;
15242 int add = (rex & REX_B) ? 8 : 0;
15243 int riprel = 0;
43234a1e
L
15244 int shift;
15245
15246 if (vex.evex)
15247 {
15248 /* In EVEX, if operand doesn't allow broadcast, vex.b should be 0. */
15249 if (vex.b
15250 && bytemode != x_mode
90a915bf 15251 && bytemode != xmmq_mode
43234a1e
L
15252 && bytemode != evex_half_bcst_xmmq_mode)
15253 {
15254 BadOp ();
15255 return;
15256 }
15257 switch (bytemode)
15258 {
1ba585e8
IT
15259 case dqw_mode:
15260 case dw_mode:
15261 case dqw_swap_mode:
15262 shift = 1;
15263 break;
15264 case dqb_mode:
15265 case db_mode:
15266 shift = 0;
15267 break;
43234a1e 15268 case vex_vsib_d_w_dq_mode:
5fc35d96 15269 case vex_vsib_d_w_d_mode:
eaa9d1ad 15270 case vex_vsib_q_w_dq_mode:
5fc35d96 15271 case vex_vsib_q_w_d_mode:
43234a1e
L
15272 case evex_x_gscat_mode:
15273 case xmm_mdq_mode:
15274 shift = vex.w ? 3 : 2;
15275 break;
43234a1e
L
15276 case x_mode:
15277 case evex_half_bcst_xmmq_mode:
90a915bf 15278 case xmmq_mode:
43234a1e
L
15279 if (vex.b)
15280 {
15281 shift = vex.w ? 3 : 2;
15282 break;
15283 }
15284 /* Fall through if vex.b == 0. */
15285 case xmmqd_mode:
15286 case xmmdw_mode:
43234a1e
L
15287 case ymmq_mode:
15288 case evex_x_nobcst_mode:
15289 case x_swap_mode:
15290 switch (vex.length)
15291 {
15292 case 128:
15293 shift = 4;
15294 break;
15295 case 256:
15296 shift = 5;
15297 break;
15298 case 512:
15299 shift = 6;
15300 break;
15301 default:
15302 abort ();
15303 }
15304 break;
15305 case ymm_mode:
15306 shift = 5;
15307 break;
15308 case xmm_mode:
15309 shift = 4;
15310 break;
15311 case xmm_mq_mode:
15312 case q_mode:
15313 case q_scalar_mode:
15314 case q_swap_mode:
15315 case q_scalar_swap_mode:
15316 shift = 3;
15317 break;
15318 case dqd_mode:
15319 case xmm_md_mode:
15320 case d_mode:
15321 case d_scalar_mode:
15322 case d_swap_mode:
15323 case d_scalar_swap_mode:
15324 shift = 2;
15325 break;
15326 case xmm_mw_mode:
15327 shift = 1;
15328 break;
15329 case xmm_mb_mode:
15330 shift = 0;
15331 break;
15332 default:
15333 abort ();
15334 }
15335 /* Make necessary corrections to shift for modes that need it.
15336 For these modes we currently have shift 4, 5 or 6 depending on
15337 vex.length (it corresponds to xmmword, ymmword or zmmword
15338 operand). We might want to make it 3, 4 or 5 (e.g. for
15339 xmmq_mode). In case of broadcast enabled the corrections
15340 aren't needed, as element size is always 32 or 64 bits. */
90a915bf
IT
15341 if (!vex.b
15342 && (bytemode == xmmq_mode
15343 || bytemode == evex_half_bcst_xmmq_mode))
43234a1e
L
15344 shift -= 1;
15345 else if (bytemode == xmmqd_mode)
15346 shift -= 2;
15347 else if (bytemode == xmmdw_mode)
15348 shift -= 3;
b28d1bda
IT
15349 else if (bytemode == ymmq_mode && vex.length == 128)
15350 shift -= 1;
43234a1e
L
15351 }
15352 else
15353 shift = 0;
252b5132 15354
c0f3af97 15355 USED_REX (REX_B);
3f31e633
JB
15356 if (intel_syntax)
15357 intel_operand_size (bytemode, sizeflag);
252b5132
RH
15358 append_seg ();
15359
5d669648 15360 if ((sizeflag & AFLAG) || address_mode == mode_64bit)
252b5132 15361 {
5d669648
L
15362 /* 32/64 bit address mode */
15363 int havedisp;
252b5132
RH
15364 int havesib;
15365 int havebase;
0f7da397 15366 int haveindex;
20afcfb7 15367 int needindex;
82c18208 15368 int base, rbase;
91d6fa6a 15369 int vindex = 0;
252b5132 15370 int scale = 0;
7e8b059b
L
15371 int addr32flag = !((sizeflag & AFLAG)
15372 || bytemode == v_bnd_mode
15373 || bytemode == bnd_mode);
6c30d220
L
15374 const char **indexes64 = names64;
15375 const char **indexes32 = names32;
252b5132
RH
15376
15377 havesib = 0;
15378 havebase = 1;
0f7da397 15379 haveindex = 0;
7967e09e 15380 base = modrm.rm;
252b5132
RH
15381
15382 if (base == 4)
15383 {
15384 havesib = 1;
dfc8cf43 15385 vindex = sib.index;
161a04f6
L
15386 USED_REX (REX_X);
15387 if (rex & REX_X)
91d6fa6a 15388 vindex += 8;
6c30d220
L
15389 switch (bytemode)
15390 {
15391 case vex_vsib_d_w_dq_mode:
5fc35d96 15392 case vex_vsib_d_w_d_mode:
6c30d220 15393 case vex_vsib_q_w_dq_mode:
5fc35d96 15394 case vex_vsib_q_w_d_mode:
6c30d220
L
15395 if (!need_vex)
15396 abort ();
43234a1e
L
15397 if (vex.evex)
15398 {
15399 if (!vex.v)
15400 vindex += 16;
15401 }
6c30d220
L
15402
15403 haveindex = 1;
15404 switch (vex.length)
15405 {
15406 case 128:
7bb15c6f 15407 indexes64 = indexes32 = names_xmm;
6c30d220
L
15408 break;
15409 case 256:
5fc35d96
IT
15410 if (!vex.w
15411 || bytemode == vex_vsib_q_w_dq_mode
15412 || bytemode == vex_vsib_q_w_d_mode)
7bb15c6f 15413 indexes64 = indexes32 = names_ymm;
6c30d220 15414 else
7bb15c6f 15415 indexes64 = indexes32 = names_xmm;
6c30d220 15416 break;
43234a1e 15417 case 512:
5fc35d96
IT
15418 if (!vex.w
15419 || bytemode == vex_vsib_q_w_dq_mode
15420 || bytemode == vex_vsib_q_w_d_mode)
43234a1e
L
15421 indexes64 = indexes32 = names_zmm;
15422 else
15423 indexes64 = indexes32 = names_ymm;
15424 break;
6c30d220
L
15425 default:
15426 abort ();
15427 }
15428 break;
15429 default:
15430 haveindex = vindex != 4;
15431 break;
15432 }
15433 scale = sib.scale;
15434 base = sib.base;
252b5132
RH
15435 codep++;
15436 }
82c18208 15437 rbase = base + add;
252b5132 15438
7967e09e 15439 switch (modrm.mod)
252b5132
RH
15440 {
15441 case 0:
82c18208 15442 if (base == 5)
252b5132
RH
15443 {
15444 havebase = 0;
cb712a9e 15445 if (address_mode == mode_64bit && !havesib)
52b15da3
JH
15446 riprel = 1;
15447 disp = get32s ();
252b5132
RH
15448 }
15449 break;
15450 case 1:
15451 FETCH_DATA (the_info, codep + 1);
15452 disp = *codep++;
15453 if ((disp & 0x80) != 0)
15454 disp -= 0x100;
43234a1e
L
15455 if (vex.evex && shift > 0)
15456 disp <<= shift;
252b5132
RH
15457 break;
15458 case 2:
52b15da3 15459 disp = get32s ();
252b5132
RH
15460 break;
15461 }
15462
20afcfb7
L
15463 /* In 32bit mode, we need index register to tell [offset] from
15464 [eiz*1 + offset]. */
15465 needindex = (havesib
15466 && !havebase
15467 && !haveindex
15468 && address_mode == mode_32bit);
15469 havedisp = (havebase
15470 || needindex
15471 || (havesib && (haveindex || scale != 0)));
5d669648 15472
252b5132 15473 if (!intel_syntax)
82c18208 15474 if (modrm.mod != 0 || base == 5)
db6eb5be 15475 {
5d669648
L
15476 if (havedisp || riprel)
15477 print_displacement (scratchbuf, disp);
15478 else
15479 print_operand_value (scratchbuf, 1, disp);
db6eb5be 15480 oappend (scratchbuf);
52b15da3
JH
15481 if (riprel)
15482 {
15483 set_op (disp, 1);
87767711 15484 oappend (sizeflag & AFLAG ? "(%rip)" : "(%eip)");
52b15da3 15485 }
db6eb5be 15486 }
2da11e11 15487
7e8b059b
L
15488 if ((havebase || haveindex || riprel)
15489 && (bytemode != v_bnd_mode)
15490 && (bytemode != bnd_mode))
87767711
JB
15491 used_prefixes |= PREFIX_ADDR;
15492
5d669648 15493 if (havedisp || (intel_syntax && riprel))
252b5132 15494 {
252b5132 15495 *obufp++ = open_char;
52b15da3 15496 if (intel_syntax && riprel)
185b1163
L
15497 {
15498 set_op (disp, 1);
87767711 15499 oappend (sizeflag & AFLAG ? "rip" : "eip");
185b1163 15500 }
db6eb5be 15501 *obufp = '\0';
252b5132 15502 if (havebase)
7e8b059b 15503 oappend (address_mode == mode_64bit && !addr32flag
82c18208 15504 ? names64[rbase] : names32[rbase]);
252b5132
RH
15505 if (havesib)
15506 {
db51cc60
L
15507 /* ESP/RSP won't allow index. If base isn't ESP/RSP,
15508 print index to tell base + index from base. */
15509 if (scale != 0
20afcfb7 15510 || needindex
db51cc60
L
15511 || haveindex
15512 || (havebase && base != ESP_REG_NUM))
252b5132 15513 {
9306ca4a 15514 if (!intel_syntax || havebase)
db6eb5be 15515 {
9306ca4a
JB
15516 *obufp++ = separator_char;
15517 *obufp = '\0';
db6eb5be 15518 }
db51cc60 15519 if (haveindex)
7e8b059b 15520 oappend (address_mode == mode_64bit && !addr32flag
6c30d220 15521 ? indexes64[vindex] : indexes32[vindex]);
db51cc60 15522 else
7e8b059b 15523 oappend (address_mode == mode_64bit && !addr32flag
db51cc60
L
15524 ? index64 : index32);
15525
db6eb5be
AM
15526 *obufp++ = scale_char;
15527 *obufp = '\0';
15528 sprintf (scratchbuf, "%d", 1 << scale);
15529 oappend (scratchbuf);
15530 }
252b5132 15531 }
185b1163 15532 if (intel_syntax
82c18208 15533 && (disp || modrm.mod != 0 || base == 5))
3d456fa1 15534 {
db51cc60 15535 if (!havedisp || (bfd_signed_vma) disp >= 0)
3d456fa1
JB
15536 {
15537 *obufp++ = '+';
15538 *obufp = '\0';
15539 }
05203043 15540 else if (modrm.mod != 1 && disp != -disp)
3d456fa1
JB
15541 {
15542 *obufp++ = '-';
15543 *obufp = '\0';
15544 disp = - (bfd_signed_vma) disp;
15545 }
15546
db51cc60
L
15547 if (havedisp)
15548 print_displacement (scratchbuf, disp);
15549 else
15550 print_operand_value (scratchbuf, 1, disp);
3d456fa1
JB
15551 oappend (scratchbuf);
15552 }
252b5132
RH
15553
15554 *obufp++ = close_char;
db6eb5be 15555 *obufp = '\0';
252b5132
RH
15556 }
15557 else if (intel_syntax)
db6eb5be 15558 {
82c18208 15559 if (modrm.mod != 0 || base == 5)
db6eb5be 15560 {
285ca992 15561 if (!active_seg_prefix)
252b5132 15562 {
d708bcba 15563 oappend (names_seg[ds_reg - es_reg]);
252b5132
RH
15564 oappend (":");
15565 }
52b15da3 15566 print_operand_value (scratchbuf, 1, disp);
db6eb5be
AM
15567 oappend (scratchbuf);
15568 }
15569 }
252b5132
RH
15570 }
15571 else
f16cd0d5
L
15572 {
15573 /* 16 bit address mode */
15574 used_prefixes |= prefixes & PREFIX_ADDR;
7967e09e 15575 switch (modrm.mod)
252b5132
RH
15576 {
15577 case 0:
7967e09e 15578 if (modrm.rm == 6)
252b5132
RH
15579 {
15580 disp = get16 ();
15581 if ((disp & 0x8000) != 0)
15582 disp -= 0x10000;
15583 }
15584 break;
15585 case 1:
15586 FETCH_DATA (the_info, codep + 1);
15587 disp = *codep++;
15588 if ((disp & 0x80) != 0)
15589 disp -= 0x100;
15590 break;
15591 case 2:
15592 disp = get16 ();
15593 if ((disp & 0x8000) != 0)
15594 disp -= 0x10000;
15595 break;
15596 }
15597
15598 if (!intel_syntax)
7967e09e 15599 if (modrm.mod != 0 || modrm.rm == 6)
db6eb5be 15600 {
5d669648 15601 print_displacement (scratchbuf, disp);
db6eb5be
AM
15602 oappend (scratchbuf);
15603 }
252b5132 15604
7967e09e 15605 if (modrm.mod != 0 || modrm.rm != 6)
252b5132
RH
15606 {
15607 *obufp++ = open_char;
db6eb5be 15608 *obufp = '\0';
7967e09e 15609 oappend (index16[modrm.rm]);
5d669648
L
15610 if (intel_syntax
15611 && (disp || modrm.mod != 0 || modrm.rm == 6))
3d456fa1 15612 {
5d669648 15613 if ((bfd_signed_vma) disp >= 0)
3d456fa1
JB
15614 {
15615 *obufp++ = '+';
15616 *obufp = '\0';
15617 }
7967e09e 15618 else if (modrm.mod != 1)
3d456fa1
JB
15619 {
15620 *obufp++ = '-';
15621 *obufp = '\0';
15622 disp = - (bfd_signed_vma) disp;
15623 }
15624
5d669648 15625 print_displacement (scratchbuf, disp);
3d456fa1
JB
15626 oappend (scratchbuf);
15627 }
15628
db6eb5be
AM
15629 *obufp++ = close_char;
15630 *obufp = '\0';
252b5132 15631 }
3d456fa1
JB
15632 else if (intel_syntax)
15633 {
285ca992 15634 if (!active_seg_prefix)
3d456fa1
JB
15635 {
15636 oappend (names_seg[ds_reg - es_reg]);
15637 oappend (":");
15638 }
15639 print_operand_value (scratchbuf, 1, disp & 0xffff);
15640 oappend (scratchbuf);
15641 }
252b5132 15642 }
43234a1e
L
15643 if (vex.evex && vex.b
15644 && (bytemode == x_mode
90a915bf 15645 || bytemode == xmmq_mode
43234a1e
L
15646 || bytemode == evex_half_bcst_xmmq_mode))
15647 {
90a915bf
IT
15648 if (vex.w
15649 || bytemode == xmmq_mode
15650 || bytemode == evex_half_bcst_xmmq_mode)
b28d1bda
IT
15651 {
15652 switch (vex.length)
15653 {
15654 case 128:
15655 oappend ("{1to2}");
15656 break;
15657 case 256:
15658 oappend ("{1to4}");
15659 break;
15660 case 512:
15661 oappend ("{1to8}");
15662 break;
15663 default:
15664 abort ();
15665 }
15666 }
43234a1e 15667 else
b28d1bda
IT
15668 {
15669 switch (vex.length)
15670 {
15671 case 128:
15672 oappend ("{1to4}");
15673 break;
15674 case 256:
15675 oappend ("{1to8}");
15676 break;
15677 case 512:
15678 oappend ("{1to16}");
15679 break;
15680 default:
15681 abort ();
15682 }
15683 }
43234a1e 15684 }
252b5132
RH
15685}
15686
c0f3af97 15687static void
8b3f93e7 15688OP_E (int bytemode, int sizeflag)
c0f3af97
L
15689{
15690 /* Skip mod/rm byte. */
15691 MODRM_CHECK;
15692 codep++;
15693
15694 if (modrm.mod == 3)
15695 OP_E_register (bytemode, sizeflag);
15696 else
c1e679ec 15697 OP_E_memory (bytemode, sizeflag);
c0f3af97
L
15698}
15699
252b5132 15700static void
26ca5450 15701OP_G (int bytemode, int sizeflag)
252b5132 15702{
52b15da3 15703 int add = 0;
161a04f6
L
15704 USED_REX (REX_R);
15705 if (rex & REX_R)
52b15da3 15706 add += 8;
252b5132
RH
15707 switch (bytemode)
15708 {
15709 case b_mode:
52b15da3
JH
15710 USED_REX (0);
15711 if (rex)
7967e09e 15712 oappend (names8rex[modrm.reg + add]);
52b15da3 15713 else
7967e09e 15714 oappend (names8[modrm.reg + add]);
252b5132
RH
15715 break;
15716 case w_mode:
7967e09e 15717 oappend (names16[modrm.reg + add]);
252b5132
RH
15718 break;
15719 case d_mode:
1ba585e8
IT
15720 case db_mode:
15721 case dw_mode:
7967e09e 15722 oappend (names32[modrm.reg + add]);
52b15da3
JH
15723 break;
15724 case q_mode:
7967e09e 15725 oappend (names64[modrm.reg + add]);
252b5132 15726 break;
7e8b059b
L
15727 case bnd_mode:
15728 oappend (names_bnd[modrm.reg]);
15729 break;
252b5132 15730 case v_mode:
9306ca4a 15731 case dq_mode:
42903f7f
L
15732 case dqb_mode:
15733 case dqd_mode:
9306ca4a 15734 case dqw_mode:
1ba585e8 15735 case dqw_swap_mode:
161a04f6
L
15736 USED_REX (REX_W);
15737 if (rex & REX_W)
7967e09e 15738 oappend (names64[modrm.reg + add]);
252b5132 15739 else
f16cd0d5
L
15740 {
15741 if ((sizeflag & DFLAG) || bytemode != v_mode)
15742 oappend (names32[modrm.reg + add]);
15743 else
15744 oappend (names16[modrm.reg + add]);
15745 used_prefixes |= (prefixes & PREFIX_DATA);
15746 }
252b5132 15747 break;
90700ea2 15748 case m_mode:
cb712a9e 15749 if (address_mode == mode_64bit)
7967e09e 15750 oappend (names64[modrm.reg + add]);
90700ea2 15751 else
7967e09e 15752 oappend (names32[modrm.reg + add]);
90700ea2 15753 break;
1ba585e8 15754 case mask_bd_mode:
43234a1e
L
15755 case mask_mode:
15756 oappend (names_mask[modrm.reg + add]);
15757 break;
252b5132
RH
15758 default:
15759 oappend (INTERNAL_DISASSEMBLER_ERROR);
15760 break;
15761 }
15762}
15763
52b15da3 15764static bfd_vma
26ca5450 15765get64 (void)
52b15da3 15766{
5dd0794d 15767 bfd_vma x;
52b15da3 15768#ifdef BFD64
5dd0794d
AM
15769 unsigned int a;
15770 unsigned int b;
15771
52b15da3
JH
15772 FETCH_DATA (the_info, codep + 8);
15773 a = *codep++ & 0xff;
15774 a |= (*codep++ & 0xff) << 8;
15775 a |= (*codep++ & 0xff) << 16;
070fe95d 15776 a |= (*codep++ & 0xffu) << 24;
5dd0794d 15777 b = *codep++ & 0xff;
52b15da3
JH
15778 b |= (*codep++ & 0xff) << 8;
15779 b |= (*codep++ & 0xff) << 16;
070fe95d 15780 b |= (*codep++ & 0xffu) << 24;
52b15da3
JH
15781 x = a + ((bfd_vma) b << 32);
15782#else
6608db57 15783 abort ();
5dd0794d 15784 x = 0;
52b15da3
JH
15785#endif
15786 return x;
15787}
15788
15789static bfd_signed_vma
26ca5450 15790get32 (void)
252b5132 15791{
52b15da3 15792 bfd_signed_vma x = 0;
252b5132
RH
15793
15794 FETCH_DATA (the_info, codep + 4);
52b15da3
JH
15795 x = *codep++ & (bfd_signed_vma) 0xff;
15796 x |= (*codep++ & (bfd_signed_vma) 0xff) << 8;
15797 x |= (*codep++ & (bfd_signed_vma) 0xff) << 16;
15798 x |= (*codep++ & (bfd_signed_vma) 0xff) << 24;
15799 return x;
15800}
15801
15802static bfd_signed_vma
26ca5450 15803get32s (void)
52b15da3
JH
15804{
15805 bfd_signed_vma x = 0;
15806
15807 FETCH_DATA (the_info, codep + 4);
15808 x = *codep++ & (bfd_signed_vma) 0xff;
15809 x |= (*codep++ & (bfd_signed_vma) 0xff) << 8;
15810 x |= (*codep++ & (bfd_signed_vma) 0xff) << 16;
15811 x |= (*codep++ & (bfd_signed_vma) 0xff) << 24;
15812
15813 x = (x ^ ((bfd_signed_vma) 1 << 31)) - ((bfd_signed_vma) 1 << 31);
15814
252b5132
RH
15815 return x;
15816}
15817
15818static int
26ca5450 15819get16 (void)
252b5132
RH
15820{
15821 int x = 0;
15822
15823 FETCH_DATA (the_info, codep + 2);
15824 x = *codep++ & 0xff;
15825 x |= (*codep++ & 0xff) << 8;
15826 return x;
15827}
15828
15829static void
26ca5450 15830set_op (bfd_vma op, int riprel)
252b5132
RH
15831{
15832 op_index[op_ad] = op_ad;
cb712a9e 15833 if (address_mode == mode_64bit)
7081ff04
AJ
15834 {
15835 op_address[op_ad] = op;
15836 op_riprel[op_ad] = riprel;
15837 }
15838 else
15839 {
15840 /* Mask to get a 32-bit address. */
15841 op_address[op_ad] = op & 0xffffffff;
15842 op_riprel[op_ad] = riprel & 0xffffffff;
15843 }
252b5132
RH
15844}
15845
15846static void
26ca5450 15847OP_REG (int code, int sizeflag)
252b5132 15848{
2da11e11 15849 const char *s;
9b60702d 15850 int add;
de882298
RM
15851
15852 switch (code)
15853 {
15854 case es_reg: case ss_reg: case cs_reg:
15855 case ds_reg: case fs_reg: case gs_reg:
15856 oappend (names_seg[code - es_reg]);
15857 return;
15858 }
15859
161a04f6
L
15860 USED_REX (REX_B);
15861 if (rex & REX_B)
52b15da3 15862 add = 8;
9b60702d
L
15863 else
15864 add = 0;
52b15da3
JH
15865
15866 switch (code)
15867 {
52b15da3
JH
15868 case ax_reg: case cx_reg: case dx_reg: case bx_reg:
15869 case sp_reg: case bp_reg: case si_reg: case di_reg:
15870 s = names16[code - ax_reg + add];
15871 break;
52b15da3
JH
15872 case al_reg: case ah_reg: case cl_reg: case ch_reg:
15873 case dl_reg: case dh_reg: case bl_reg: case bh_reg:
15874 USED_REX (0);
15875 if (rex)
15876 s = names8rex[code - al_reg + add];
15877 else
15878 s = names8[code - al_reg];
15879 break;
6439fc28
AM
15880 case rAX_reg: case rCX_reg: case rDX_reg: case rBX_reg:
15881 case rSP_reg: case rBP_reg: case rSI_reg: case rDI_reg:
7bb15c6f 15882 if (address_mode == mode_64bit
6c067bbb 15883 && ((sizeflag & DFLAG) || (rex & REX_W)))
6439fc28
AM
15884 {
15885 s = names64[code - rAX_reg + add];
15886 break;
15887 }
15888 code += eAX_reg - rAX_reg;
6608db57 15889 /* Fall through. */
52b15da3
JH
15890 case eAX_reg: case eCX_reg: case eDX_reg: case eBX_reg:
15891 case eSP_reg: case eBP_reg: case eSI_reg: case eDI_reg:
161a04f6
L
15892 USED_REX (REX_W);
15893 if (rex & REX_W)
52b15da3 15894 s = names64[code - eAX_reg + add];
52b15da3 15895 else
f16cd0d5
L
15896 {
15897 if (sizeflag & DFLAG)
15898 s = names32[code - eAX_reg + add];
15899 else
15900 s = names16[code - eAX_reg + add];
15901 used_prefixes |= (prefixes & PREFIX_DATA);
15902 }
52b15da3 15903 break;
52b15da3
JH
15904 default:
15905 s = INTERNAL_DISASSEMBLER_ERROR;
15906 break;
15907 }
15908 oappend (s);
15909}
15910
15911static void
26ca5450 15912OP_IMREG (int code, int sizeflag)
52b15da3
JH
15913{
15914 const char *s;
252b5132
RH
15915
15916 switch (code)
15917 {
15918 case indir_dx_reg:
d708bcba 15919 if (intel_syntax)
52fd6d94 15920 s = "dx";
d708bcba 15921 else
db6eb5be 15922 s = "(%dx)";
252b5132
RH
15923 break;
15924 case ax_reg: case cx_reg: case dx_reg: case bx_reg:
15925 case sp_reg: case bp_reg: case si_reg: case di_reg:
15926 s = names16[code - ax_reg];
15927 break;
15928 case es_reg: case ss_reg: case cs_reg:
15929 case ds_reg: case fs_reg: case gs_reg:
15930 s = names_seg[code - es_reg];
15931 break;
15932 case al_reg: case ah_reg: case cl_reg: case ch_reg:
15933 case dl_reg: case dh_reg: case bl_reg: case bh_reg:
52b15da3
JH
15934 USED_REX (0);
15935 if (rex)
15936 s = names8rex[code - al_reg];
15937 else
15938 s = names8[code - al_reg];
252b5132
RH
15939 break;
15940 case eAX_reg: case eCX_reg: case eDX_reg: case eBX_reg:
15941 case eSP_reg: case eBP_reg: case eSI_reg: case eDI_reg:
161a04f6
L
15942 USED_REX (REX_W);
15943 if (rex & REX_W)
52b15da3 15944 s = names64[code - eAX_reg];
252b5132 15945 else
f16cd0d5
L
15946 {
15947 if (sizeflag & DFLAG)
15948 s = names32[code - eAX_reg];
15949 else
15950 s = names16[code - eAX_reg];
15951 used_prefixes |= (prefixes & PREFIX_DATA);
15952 }
252b5132 15953 break;
52fd6d94 15954 case z_mode_ax_reg:
161a04f6 15955 if ((rex & REX_W) || (sizeflag & DFLAG))
52fd6d94
JB
15956 s = *names32;
15957 else
15958 s = *names16;
161a04f6 15959 if (!(rex & REX_W))
52fd6d94
JB
15960 used_prefixes |= (prefixes & PREFIX_DATA);
15961 break;
252b5132
RH
15962 default:
15963 s = INTERNAL_DISASSEMBLER_ERROR;
15964 break;
15965 }
15966 oappend (s);
15967}
15968
15969static void
26ca5450 15970OP_I (int bytemode, int sizeflag)
252b5132 15971{
52b15da3
JH
15972 bfd_signed_vma op;
15973 bfd_signed_vma mask = -1;
252b5132
RH
15974
15975 switch (bytemode)
15976 {
15977 case b_mode:
15978 FETCH_DATA (the_info, codep + 1);
52b15da3
JH
15979 op = *codep++;
15980 mask = 0xff;
15981 break;
15982 case q_mode:
cb712a9e 15983 if (address_mode == mode_64bit)
6439fc28
AM
15984 {
15985 op = get32s ();
15986 break;
15987 }
6608db57 15988 /* Fall through. */
252b5132 15989 case v_mode:
161a04f6
L
15990 USED_REX (REX_W);
15991 if (rex & REX_W)
52b15da3 15992 op = get32s ();
252b5132 15993 else
52b15da3 15994 {
f16cd0d5
L
15995 if (sizeflag & DFLAG)
15996 {
15997 op = get32 ();
15998 mask = 0xffffffff;
15999 }
16000 else
16001 {
16002 op = get16 ();
16003 mask = 0xfffff;
16004 }
16005 used_prefixes |= (prefixes & PREFIX_DATA);
52b15da3 16006 }
252b5132
RH
16007 break;
16008 case w_mode:
52b15da3 16009 mask = 0xfffff;
252b5132
RH
16010 op = get16 ();
16011 break;
9306ca4a
JB
16012 case const_1_mode:
16013 if (intel_syntax)
6c067bbb 16014 oappend ("1");
9306ca4a 16015 return;
252b5132
RH
16016 default:
16017 oappend (INTERNAL_DISASSEMBLER_ERROR);
16018 return;
16019 }
16020
52b15da3
JH
16021 op &= mask;
16022 scratchbuf[0] = '$';
d708bcba 16023 print_operand_value (scratchbuf + 1, 1, op);
9ce09ba2 16024 oappend_maybe_intel (scratchbuf);
52b15da3
JH
16025 scratchbuf[0] = '\0';
16026}
16027
16028static void
26ca5450 16029OP_I64 (int bytemode, int sizeflag)
52b15da3
JH
16030{
16031 bfd_signed_vma op;
16032 bfd_signed_vma mask = -1;
16033
cb712a9e 16034 if (address_mode != mode_64bit)
6439fc28
AM
16035 {
16036 OP_I (bytemode, sizeflag);
16037 return;
16038 }
16039
52b15da3
JH
16040 switch (bytemode)
16041 {
16042 case b_mode:
16043 FETCH_DATA (the_info, codep + 1);
16044 op = *codep++;
16045 mask = 0xff;
16046 break;
16047 case v_mode:
161a04f6
L
16048 USED_REX (REX_W);
16049 if (rex & REX_W)
52b15da3 16050 op = get64 ();
52b15da3
JH
16051 else
16052 {
f16cd0d5
L
16053 if (sizeflag & DFLAG)
16054 {
16055 op = get32 ();
16056 mask = 0xffffffff;
16057 }
16058 else
16059 {
16060 op = get16 ();
16061 mask = 0xfffff;
16062 }
16063 used_prefixes |= (prefixes & PREFIX_DATA);
52b15da3 16064 }
52b15da3
JH
16065 break;
16066 case w_mode:
16067 mask = 0xfffff;
16068 op = get16 ();
16069 break;
16070 default:
16071 oappend (INTERNAL_DISASSEMBLER_ERROR);
16072 return;
16073 }
16074
16075 op &= mask;
16076 scratchbuf[0] = '$';
d708bcba 16077 print_operand_value (scratchbuf + 1, 1, op);
9ce09ba2 16078 oappend_maybe_intel (scratchbuf);
252b5132
RH
16079 scratchbuf[0] = '\0';
16080}
16081
16082static void
26ca5450 16083OP_sI (int bytemode, int sizeflag)
252b5132 16084{
52b15da3 16085 bfd_signed_vma op;
252b5132
RH
16086
16087 switch (bytemode)
16088 {
16089 case b_mode:
e3949f17 16090 case b_T_mode:
252b5132
RH
16091 FETCH_DATA (the_info, codep + 1);
16092 op = *codep++;
16093 if ((op & 0x80) != 0)
16094 op -= 0x100;
e3949f17
L
16095 if (bytemode == b_T_mode)
16096 {
16097 if (address_mode != mode_64bit
7bb15c6f 16098 || !((sizeflag & DFLAG) || (rex & REX_W)))
e3949f17 16099 {
6c067bbb
RM
16100 /* The operand-size prefix is overridden by a REX prefix. */
16101 if ((sizeflag & DFLAG) || (rex & REX_W))
e3949f17
L
16102 op &= 0xffffffff;
16103 else
16104 op &= 0xffff;
16105 }
16106 }
16107 else
16108 {
16109 if (!(rex & REX_W))
16110 {
16111 if (sizeflag & DFLAG)
16112 op &= 0xffffffff;
16113 else
16114 op &= 0xffff;
16115 }
16116 }
252b5132
RH
16117 break;
16118 case v_mode:
7bb15c6f
RM
16119 /* The operand-size prefix is overridden by a REX prefix. */
16120 if ((sizeflag & DFLAG) || (rex & REX_W))
52b15da3 16121 op = get32s ();
252b5132 16122 else
d9e3625e 16123 op = get16 ();
252b5132
RH
16124 break;
16125 default:
16126 oappend (INTERNAL_DISASSEMBLER_ERROR);
16127 return;
16128 }
52b15da3
JH
16129
16130 scratchbuf[0] = '$';
16131 print_operand_value (scratchbuf + 1, 1, op);
9ce09ba2 16132 oappend_maybe_intel (scratchbuf);
252b5132
RH
16133}
16134
16135static void
26ca5450 16136OP_J (int bytemode, int sizeflag)
252b5132 16137{
52b15da3 16138 bfd_vma disp;
7081ff04 16139 bfd_vma mask = -1;
65ca155d 16140 bfd_vma segment = 0;
252b5132
RH
16141
16142 switch (bytemode)
16143 {
16144 case b_mode:
16145 FETCH_DATA (the_info, codep + 1);
16146 disp = *codep++;
16147 if ((disp & 0x80) != 0)
16148 disp -= 0x100;
16149 break;
16150 case v_mode:
5db04b09
L
16151 if (isa64 == amd64)
16152 USED_REX (REX_W);
16153 if ((sizeflag & DFLAG)
16154 || (address_mode == mode_64bit
16155 && (isa64 != amd64 || (rex & REX_W))))
52b15da3 16156 disp = get32s ();
252b5132
RH
16157 else
16158 {
16159 disp = get16 ();
206717e8
L
16160 if ((disp & 0x8000) != 0)
16161 disp -= 0x10000;
65ca155d
L
16162 /* In 16bit mode, address is wrapped around at 64k within
16163 the same segment. Otherwise, a data16 prefix on a jump
16164 instruction means that the pc is masked to 16 bits after
16165 the displacement is added! */
16166 mask = 0xffff;
16167 if ((prefixes & PREFIX_DATA) == 0)
4fd7268a 16168 segment = ((start_pc + (codep - start_codep))
65ca155d 16169 & ~((bfd_vma) 0xffff));
252b5132 16170 }
5db04b09
L
16171 if (address_mode != mode_64bit
16172 || (isa64 == amd64 && !(rex & REX_W)))
f16cd0d5 16173 used_prefixes |= (prefixes & PREFIX_DATA);
252b5132
RH
16174 break;
16175 default:
16176 oappend (INTERNAL_DISASSEMBLER_ERROR);
16177 return;
16178 }
42d5f9c6 16179 disp = ((start_pc + (codep - start_codep) + disp) & mask) | segment;
52b15da3
JH
16180 set_op (disp, 0);
16181 print_operand_value (scratchbuf, 1, disp);
252b5132
RH
16182 oappend (scratchbuf);
16183}
16184
252b5132 16185static void
ed7841b3 16186OP_SEG (int bytemode, int sizeflag)
252b5132 16187{
ed7841b3 16188 if (bytemode == w_mode)
7967e09e 16189 oappend (names_seg[modrm.reg]);
ed7841b3 16190 else
7967e09e 16191 OP_E (modrm.mod == 3 ? bytemode : w_mode, sizeflag);
252b5132
RH
16192}
16193
16194static void
26ca5450 16195OP_DIR (int dummy ATTRIBUTE_UNUSED, int sizeflag)
252b5132
RH
16196{
16197 int seg, offset;
16198
c608c12e 16199 if (sizeflag & DFLAG)
252b5132 16200 {
c608c12e
AM
16201 offset = get32 ();
16202 seg = get16 ();
252b5132 16203 }
c608c12e
AM
16204 else
16205 {
16206 offset = get16 ();
16207 seg = get16 ();
16208 }
7d421014 16209 used_prefixes |= (prefixes & PREFIX_DATA);
d708bcba 16210 if (intel_syntax)
3f31e633 16211 sprintf (scratchbuf, "0x%x:0x%x", seg, offset);
d708bcba
AM
16212 else
16213 sprintf (scratchbuf, "$0x%x,$0x%x", seg, offset);
c608c12e 16214 oappend (scratchbuf);
252b5132
RH
16215}
16216
252b5132 16217static void
3f31e633 16218OP_OFF (int bytemode, int sizeflag)
252b5132 16219{
52b15da3 16220 bfd_vma off;
252b5132 16221
3f31e633
JB
16222 if (intel_syntax && (sizeflag & SUFFIX_ALWAYS))
16223 intel_operand_size (bytemode, sizeflag);
252b5132
RH
16224 append_seg ();
16225
cb712a9e 16226 if ((sizeflag & AFLAG) || address_mode == mode_64bit)
252b5132
RH
16227 off = get32 ();
16228 else
16229 off = get16 ();
16230
16231 if (intel_syntax)
16232 {
285ca992 16233 if (!active_seg_prefix)
252b5132 16234 {
d708bcba 16235 oappend (names_seg[ds_reg - es_reg]);
252b5132
RH
16236 oappend (":");
16237 }
16238 }
52b15da3
JH
16239 print_operand_value (scratchbuf, 1, off);
16240 oappend (scratchbuf);
16241}
6439fc28 16242
52b15da3 16243static void
3f31e633 16244OP_OFF64 (int bytemode, int sizeflag)
52b15da3
JH
16245{
16246 bfd_vma off;
16247
539e75ad
L
16248 if (address_mode != mode_64bit
16249 || (prefixes & PREFIX_ADDR))
6439fc28
AM
16250 {
16251 OP_OFF (bytemode, sizeflag);
16252 return;
16253 }
16254
3f31e633
JB
16255 if (intel_syntax && (sizeflag & SUFFIX_ALWAYS))
16256 intel_operand_size (bytemode, sizeflag);
52b15da3
JH
16257 append_seg ();
16258
6608db57 16259 off = get64 ();
52b15da3
JH
16260
16261 if (intel_syntax)
16262 {
285ca992 16263 if (!active_seg_prefix)
52b15da3 16264 {
d708bcba 16265 oappend (names_seg[ds_reg - es_reg]);
52b15da3
JH
16266 oappend (":");
16267 }
16268 }
16269 print_operand_value (scratchbuf, 1, off);
252b5132
RH
16270 oappend (scratchbuf);
16271}
16272
16273static void
26ca5450 16274ptr_reg (int code, int sizeflag)
252b5132 16275{
2da11e11 16276 const char *s;
d708bcba 16277
1d9f512f 16278 *obufp++ = open_char;
20f0a1fc 16279 used_prefixes |= (prefixes & PREFIX_ADDR);
cb712a9e 16280 if (address_mode == mode_64bit)
c1a64871
JH
16281 {
16282 if (!(sizeflag & AFLAG))
db6eb5be 16283 s = names32[code - eAX_reg];
c1a64871 16284 else
db6eb5be 16285 s = names64[code - eAX_reg];
c1a64871 16286 }
52b15da3 16287 else if (sizeflag & AFLAG)
252b5132
RH
16288 s = names32[code - eAX_reg];
16289 else
16290 s = names16[code - eAX_reg];
16291 oappend (s);
1d9f512f
AM
16292 *obufp++ = close_char;
16293 *obufp = 0;
252b5132
RH
16294}
16295
16296static void
26ca5450 16297OP_ESreg (int code, int sizeflag)
252b5132 16298{
9306ca4a 16299 if (intel_syntax)
52fd6d94
JB
16300 {
16301 switch (codep[-1])
16302 {
16303 case 0x6d: /* insw/insl */
16304 intel_operand_size (z_mode, sizeflag);
16305 break;
16306 case 0xa5: /* movsw/movsl/movsq */
16307 case 0xa7: /* cmpsw/cmpsl/cmpsq */
16308 case 0xab: /* stosw/stosl */
16309 case 0xaf: /* scasw/scasl */
16310 intel_operand_size (v_mode, sizeflag);
16311 break;
16312 default:
16313 intel_operand_size (b_mode, sizeflag);
16314 }
16315 }
9ce09ba2 16316 oappend_maybe_intel ("%es:");
252b5132
RH
16317 ptr_reg (code, sizeflag);
16318}
16319
16320static void
26ca5450 16321OP_DSreg (int code, int sizeflag)
252b5132 16322{
9306ca4a 16323 if (intel_syntax)
52fd6d94
JB
16324 {
16325 switch (codep[-1])
16326 {
16327 case 0x6f: /* outsw/outsl */
16328 intel_operand_size (z_mode, sizeflag);
16329 break;
16330 case 0xa5: /* movsw/movsl/movsq */
16331 case 0xa7: /* cmpsw/cmpsl/cmpsq */
16332 case 0xad: /* lodsw/lodsl/lodsq */
16333 intel_operand_size (v_mode, sizeflag);
16334 break;
16335 default:
16336 intel_operand_size (b_mode, sizeflag);
16337 }
16338 }
285ca992
L
16339 /* Set active_seg_prefix to PREFIX_DS if it is unset so that the
16340 default segment register DS is printed. */
16341 if (!active_seg_prefix)
16342 active_seg_prefix = PREFIX_DS;
6608db57 16343 append_seg ();
252b5132
RH
16344 ptr_reg (code, sizeflag);
16345}
16346
252b5132 16347static void
26ca5450 16348OP_C (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 16349{
9b60702d 16350 int add;
161a04f6 16351 if (rex & REX_R)
c4a530c5 16352 {
161a04f6 16353 USED_REX (REX_R);
c4a530c5
JB
16354 add = 8;
16355 }
cb712a9e 16356 else if (address_mode != mode_64bit && (prefixes & PREFIX_LOCK))
c4a530c5 16357 {
f16cd0d5 16358 all_prefixes[last_lock_prefix] = 0;
c4a530c5
JB
16359 used_prefixes |= PREFIX_LOCK;
16360 add = 8;
16361 }
9b60702d
L
16362 else
16363 add = 0;
7967e09e 16364 sprintf (scratchbuf, "%%cr%d", modrm.reg + add);
9ce09ba2 16365 oappend_maybe_intel (scratchbuf);
252b5132
RH
16366}
16367
252b5132 16368static void
26ca5450 16369OP_D (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 16370{
9b60702d 16371 int add;
161a04f6
L
16372 USED_REX (REX_R);
16373 if (rex & REX_R)
52b15da3 16374 add = 8;
9b60702d
L
16375 else
16376 add = 0;
d708bcba 16377 if (intel_syntax)
7967e09e 16378 sprintf (scratchbuf, "db%d", modrm.reg + add);
d708bcba 16379 else
7967e09e 16380 sprintf (scratchbuf, "%%db%d", modrm.reg + add);
252b5132
RH
16381 oappend (scratchbuf);
16382}
16383
252b5132 16384static void
26ca5450 16385OP_T (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 16386{
7967e09e 16387 sprintf (scratchbuf, "%%tr%d", modrm.reg);
9ce09ba2 16388 oappend_maybe_intel (scratchbuf);
252b5132
RH
16389}
16390
16391static void
6f74c397 16392OP_R (int bytemode, int sizeflag)
252b5132 16393{
68f34464
L
16394 /* Skip mod/rm byte. */
16395 MODRM_CHECK;
16396 codep++;
16397 OP_E_register (bytemode, sizeflag);
252b5132
RH
16398}
16399
16400static void
26ca5450 16401OP_MMX (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 16402{
b9733481
L
16403 int reg = modrm.reg;
16404 const char **names;
16405
041bd2e0
JH
16406 used_prefixes |= (prefixes & PREFIX_DATA);
16407 if (prefixes & PREFIX_DATA)
20f0a1fc 16408 {
b9733481 16409 names = names_xmm;
161a04f6
L
16410 USED_REX (REX_R);
16411 if (rex & REX_R)
b9733481 16412 reg += 8;
20f0a1fc 16413 }
041bd2e0 16414 else
b9733481
L
16415 names = names_mm;
16416 oappend (names[reg]);
252b5132
RH
16417}
16418
c608c12e 16419static void
c0f3af97 16420OP_XMM (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
c608c12e 16421{
b9733481
L
16422 int reg = modrm.reg;
16423 const char **names;
16424
161a04f6
L
16425 USED_REX (REX_R);
16426 if (rex & REX_R)
b9733481 16427 reg += 8;
43234a1e
L
16428 if (vex.evex)
16429 {
16430 if (!vex.r)
16431 reg += 16;
16432 }
16433
539f890d
L
16434 if (need_vex
16435 && bytemode != xmm_mode
43234a1e
L
16436 && bytemode != xmmq_mode
16437 && bytemode != evex_half_bcst_xmmq_mode
16438 && bytemode != ymm_mode
539f890d 16439 && bytemode != scalar_mode)
c0f3af97
L
16440 {
16441 switch (vex.length)
16442 {
16443 case 128:
b9733481 16444 names = names_xmm;
c0f3af97
L
16445 break;
16446 case 256:
5fc35d96
IT
16447 if (vex.w
16448 || (bytemode != vex_vsib_q_w_dq_mode
16449 && bytemode != vex_vsib_q_w_d_mode))
6c30d220
L
16450 names = names_ymm;
16451 else
16452 names = names_xmm;
c0f3af97 16453 break;
43234a1e
L
16454 case 512:
16455 names = names_zmm;
16456 break;
c0f3af97
L
16457 default:
16458 abort ();
16459 }
16460 }
43234a1e
L
16461 else if (bytemode == xmmq_mode
16462 || bytemode == evex_half_bcst_xmmq_mode)
16463 {
16464 switch (vex.length)
16465 {
16466 case 128:
16467 case 256:
16468 names = names_xmm;
16469 break;
16470 case 512:
16471 names = names_ymm;
16472 break;
16473 default:
16474 abort ();
16475 }
16476 }
16477 else if (bytemode == ymm_mode)
16478 names = names_ymm;
c0f3af97 16479 else
b9733481
L
16480 names = names_xmm;
16481 oappend (names[reg]);
c608c12e
AM
16482}
16483
252b5132 16484static void
26ca5450 16485OP_EM (int bytemode, int sizeflag)
252b5132 16486{
b9733481
L
16487 int reg;
16488 const char **names;
16489
7967e09e 16490 if (modrm.mod != 3)
252b5132 16491 {
b6169b20
L
16492 if (intel_syntax
16493 && (bytemode == v_mode || bytemode == v_swap_mode))
9306ca4a
JB
16494 {
16495 bytemode = (prefixes & PREFIX_DATA) ? x_mode : q_mode;
16496 used_prefixes |= (prefixes & PREFIX_DATA);
6c067bbb 16497 }
252b5132
RH
16498 OP_E (bytemode, sizeflag);
16499 return;
16500 }
16501
b6169b20
L
16502 if ((sizeflag & SUFFIX_ALWAYS) && bytemode == v_swap_mode)
16503 swap_operand ();
16504
6608db57 16505 /* Skip mod/rm byte. */
4bba6815 16506 MODRM_CHECK;
252b5132 16507 codep++;
041bd2e0 16508 used_prefixes |= (prefixes & PREFIX_DATA);
b9733481 16509 reg = modrm.rm;
041bd2e0 16510 if (prefixes & PREFIX_DATA)
20f0a1fc 16511 {
b9733481 16512 names = names_xmm;
161a04f6
L
16513 USED_REX (REX_B);
16514 if (rex & REX_B)
b9733481 16515 reg += 8;
20f0a1fc 16516 }
041bd2e0 16517 else
b9733481
L
16518 names = names_mm;
16519 oappend (names[reg]);
252b5132
RH
16520}
16521
246c51aa
L
16522/* cvt* are the only instructions in sse2 which have
16523 both SSE and MMX operands and also have 0x66 prefix
16524 in their opcode. 0x66 was originally used to differentiate
16525 between SSE and MMX instruction(operands). So we have to handle the
4d9567e0
MM
16526 cvt* separately using OP_EMC and OP_MXC */
16527static void
16528OP_EMC (int bytemode, int sizeflag)
16529{
7967e09e 16530 if (modrm.mod != 3)
4d9567e0
MM
16531 {
16532 if (intel_syntax && bytemode == v_mode)
16533 {
16534 bytemode = (prefixes & PREFIX_DATA) ? x_mode : q_mode;
16535 used_prefixes |= (prefixes & PREFIX_DATA);
6c067bbb 16536 }
4d9567e0
MM
16537 OP_E (bytemode, sizeflag);
16538 return;
16539 }
246c51aa 16540
4d9567e0
MM
16541 /* Skip mod/rm byte. */
16542 MODRM_CHECK;
16543 codep++;
16544 used_prefixes |= (prefixes & PREFIX_DATA);
b9733481 16545 oappend (names_mm[modrm.rm]);
4d9567e0
MM
16546}
16547
16548static void
16549OP_MXC (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
16550{
16551 used_prefixes |= (prefixes & PREFIX_DATA);
b9733481 16552 oappend (names_mm[modrm.reg]);
4d9567e0
MM
16553}
16554
c608c12e 16555static void
26ca5450 16556OP_EX (int bytemode, int sizeflag)
c608c12e 16557{
b9733481
L
16558 int reg;
16559 const char **names;
d6f574e0
L
16560
16561 /* Skip mod/rm byte. */
16562 MODRM_CHECK;
16563 codep++;
16564
7967e09e 16565 if (modrm.mod != 3)
c608c12e 16566 {
c1e679ec 16567 OP_E_memory (bytemode, sizeflag);
c608c12e
AM
16568 return;
16569 }
d6f574e0 16570
b9733481 16571 reg = modrm.rm;
161a04f6
L
16572 USED_REX (REX_B);
16573 if (rex & REX_B)
b9733481 16574 reg += 8;
43234a1e
L
16575 if (vex.evex)
16576 {
16577 USED_REX (REX_X);
16578 if ((rex & REX_X))
16579 reg += 16;
16580 }
c608c12e 16581
b6169b20 16582 if ((sizeflag & SUFFIX_ALWAYS)
fa99fab2
L
16583 && (bytemode == x_swap_mode
16584 || bytemode == d_swap_mode
1ba585e8 16585 || bytemode == dqw_swap_mode
7bb15c6f 16586 || bytemode == d_scalar_swap_mode
539f890d
L
16587 || bytemode == q_swap_mode
16588 || bytemode == q_scalar_swap_mode))
b6169b20
L
16589 swap_operand ();
16590
c0f3af97
L
16591 if (need_vex
16592 && bytemode != xmm_mode
6c30d220
L
16593 && bytemode != xmmdw_mode
16594 && bytemode != xmmqd_mode
16595 && bytemode != xmm_mb_mode
16596 && bytemode != xmm_mw_mode
16597 && bytemode != xmm_md_mode
16598 && bytemode != xmm_mq_mode
43234a1e 16599 && bytemode != xmm_mdq_mode
539f890d 16600 && bytemode != xmmq_mode
43234a1e
L
16601 && bytemode != evex_half_bcst_xmmq_mode
16602 && bytemode != ymm_mode
539f890d 16603 && bytemode != d_scalar_mode
7bb15c6f 16604 && bytemode != d_scalar_swap_mode
539f890d 16605 && bytemode != q_scalar_mode
1c480963
L
16606 && bytemode != q_scalar_swap_mode
16607 && bytemode != vex_scalar_w_dq_mode)
c0f3af97
L
16608 {
16609 switch (vex.length)
16610 {
16611 case 128:
b9733481 16612 names = names_xmm;
c0f3af97
L
16613 break;
16614 case 256:
b9733481 16615 names = names_ymm;
c0f3af97 16616 break;
43234a1e
L
16617 case 512:
16618 names = names_zmm;
16619 break;
c0f3af97
L
16620 default:
16621 abort ();
16622 }
16623 }
43234a1e
L
16624 else if (bytemode == xmmq_mode
16625 || bytemode == evex_half_bcst_xmmq_mode)
16626 {
16627 switch (vex.length)
16628 {
16629 case 128:
16630 case 256:
16631 names = names_xmm;
16632 break;
16633 case 512:
16634 names = names_ymm;
16635 break;
16636 default:
16637 abort ();
16638 }
16639 }
16640 else if (bytemode == ymm_mode)
16641 names = names_ymm;
c0f3af97 16642 else
b9733481
L
16643 names = names_xmm;
16644 oappend (names[reg]);
c608c12e
AM
16645}
16646
252b5132 16647static void
26ca5450 16648OP_MS (int bytemode, int sizeflag)
252b5132 16649{
7967e09e 16650 if (modrm.mod == 3)
2da11e11
AM
16651 OP_EM (bytemode, sizeflag);
16652 else
6608db57 16653 BadOp ();
252b5132
RH
16654}
16655
992aaec9 16656static void
26ca5450 16657OP_XS (int bytemode, int sizeflag)
992aaec9 16658{
7967e09e 16659 if (modrm.mod == 3)
992aaec9
AM
16660 OP_EX (bytemode, sizeflag);
16661 else
6608db57 16662 BadOp ();
992aaec9
AM
16663}
16664
cc0ec051
AM
16665static void
16666OP_M (int bytemode, int sizeflag)
16667{
7967e09e 16668 if (modrm.mod == 3)
75413a22
L
16669 /* bad bound,lea,lds,les,lfs,lgs,lss,cmpxchg8b,vmptrst modrm */
16670 BadOp ();
cc0ec051
AM
16671 else
16672 OP_E (bytemode, sizeflag);
16673}
16674
16675static void
16676OP_0f07 (int bytemode, int sizeflag)
16677{
7967e09e 16678 if (modrm.mod != 3 || modrm.rm != 0)
cc0ec051
AM
16679 BadOp ();
16680 else
16681 OP_E (bytemode, sizeflag);
16682}
16683
46e883c5 16684/* NOP is an alias of "xchg %ax,%ax" in 16bit mode, "xchg %eax,%eax" in
246c51aa 16685 32bit mode and "xchg %rax,%rax" in 64bit mode. */
46e883c5 16686
cc0ec051 16687static void
46e883c5 16688NOP_Fixup1 (int bytemode, int sizeflag)
cc0ec051 16689{
8b38ad71
L
16690 if ((prefixes & PREFIX_DATA) != 0
16691 || (rex != 0
16692 && rex != 0x48
16693 && address_mode == mode_64bit))
46e883c5
L
16694 OP_REG (bytemode, sizeflag);
16695 else
16696 strcpy (obuf, "nop");
16697}
16698
16699static void
16700NOP_Fixup2 (int bytemode, int sizeflag)
16701{
8b38ad71
L
16702 if ((prefixes & PREFIX_DATA) != 0
16703 || (rex != 0
16704 && rex != 0x48
16705 && address_mode == mode_64bit))
46e883c5 16706 OP_IMREG (bytemode, sizeflag);
cc0ec051
AM
16707}
16708
84037f8c 16709static const char *const Suffix3DNow[] = {
252b5132
RH
16710/* 00 */ NULL, NULL, NULL, NULL,
16711/* 04 */ NULL, NULL, NULL, NULL,
16712/* 08 */ NULL, NULL, NULL, NULL,
9e525108 16713/* 0C */ "pi2fw", "pi2fd", NULL, NULL,
252b5132
RH
16714/* 10 */ NULL, NULL, NULL, NULL,
16715/* 14 */ NULL, NULL, NULL, NULL,
16716/* 18 */ NULL, NULL, NULL, NULL,
9e525108 16717/* 1C */ "pf2iw", "pf2id", NULL, NULL,
252b5132
RH
16718/* 20 */ NULL, NULL, NULL, NULL,
16719/* 24 */ NULL, NULL, NULL, NULL,
16720/* 28 */ NULL, NULL, NULL, NULL,
16721/* 2C */ NULL, NULL, NULL, NULL,
16722/* 30 */ NULL, NULL, NULL, NULL,
16723/* 34 */ NULL, NULL, NULL, NULL,
16724/* 38 */ NULL, NULL, NULL, NULL,
16725/* 3C */ NULL, NULL, NULL, NULL,
16726/* 40 */ NULL, NULL, NULL, NULL,
16727/* 44 */ NULL, NULL, NULL, NULL,
16728/* 48 */ NULL, NULL, NULL, NULL,
16729/* 4C */ NULL, NULL, NULL, NULL,
16730/* 50 */ NULL, NULL, NULL, NULL,
16731/* 54 */ NULL, NULL, NULL, NULL,
16732/* 58 */ NULL, NULL, NULL, NULL,
16733/* 5C */ NULL, NULL, NULL, NULL,
16734/* 60 */ NULL, NULL, NULL, NULL,
16735/* 64 */ NULL, NULL, NULL, NULL,
16736/* 68 */ NULL, NULL, NULL, NULL,
16737/* 6C */ NULL, NULL, NULL, NULL,
16738/* 70 */ NULL, NULL, NULL, NULL,
16739/* 74 */ NULL, NULL, NULL, NULL,
16740/* 78 */ NULL, NULL, NULL, NULL,
16741/* 7C */ NULL, NULL, NULL, NULL,
16742/* 80 */ NULL, NULL, NULL, NULL,
16743/* 84 */ NULL, NULL, NULL, NULL,
9e525108
AM
16744/* 88 */ NULL, NULL, "pfnacc", NULL,
16745/* 8C */ NULL, NULL, "pfpnacc", NULL,
252b5132
RH
16746/* 90 */ "pfcmpge", NULL, NULL, NULL,
16747/* 94 */ "pfmin", NULL, "pfrcp", "pfrsqrt",
16748/* 98 */ NULL, NULL, "pfsub", NULL,
16749/* 9C */ NULL, NULL, "pfadd", NULL,
16750/* A0 */ "pfcmpgt", NULL, NULL, NULL,
16751/* A4 */ "pfmax", NULL, "pfrcpit1", "pfrsqit1",
16752/* A8 */ NULL, NULL, "pfsubr", NULL,
16753/* AC */ NULL, NULL, "pfacc", NULL,
16754/* B0 */ "pfcmpeq", NULL, NULL, NULL,
9beff690 16755/* B4 */ "pfmul", NULL, "pfrcpit2", "pmulhrw",
9e525108 16756/* B8 */ NULL, NULL, NULL, "pswapd",
252b5132
RH
16757/* BC */ NULL, NULL, NULL, "pavgusb",
16758/* C0 */ NULL, NULL, NULL, NULL,
16759/* C4 */ NULL, NULL, NULL, NULL,
16760/* C8 */ NULL, NULL, NULL, NULL,
16761/* CC */ NULL, NULL, NULL, NULL,
16762/* D0 */ NULL, NULL, NULL, NULL,
16763/* D4 */ NULL, NULL, NULL, NULL,
16764/* D8 */ NULL, NULL, NULL, NULL,
16765/* DC */ NULL, NULL, NULL, NULL,
16766/* E0 */ NULL, NULL, NULL, NULL,
16767/* E4 */ NULL, NULL, NULL, NULL,
16768/* E8 */ NULL, NULL, NULL, NULL,
16769/* EC */ NULL, NULL, NULL, NULL,
16770/* F0 */ NULL, NULL, NULL, NULL,
16771/* F4 */ NULL, NULL, NULL, NULL,
16772/* F8 */ NULL, NULL, NULL, NULL,
16773/* FC */ NULL, NULL, NULL, NULL,
16774};
16775
16776static void
26ca5450 16777OP_3DNowSuffix (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132
RH
16778{
16779 const char *mnemonic;
16780
16781 FETCH_DATA (the_info, codep + 1);
16782 /* AMD 3DNow! instructions are specified by an opcode suffix in the
16783 place where an 8-bit immediate would normally go. ie. the last
16784 byte of the instruction. */
ea397f5b 16785 obufp = mnemonicendp;
c608c12e 16786 mnemonic = Suffix3DNow[*codep++ & 0xff];
252b5132 16787 if (mnemonic)
2da11e11 16788 oappend (mnemonic);
252b5132
RH
16789 else
16790 {
16791 /* Since a variable sized modrm/sib chunk is between the start
16792 of the opcode (0x0f0f) and the opcode suffix, we need to do
16793 all the modrm processing first, and don't know until now that
16794 we have a bad opcode. This necessitates some cleaning up. */
ce518a5f
L
16795 op_out[0][0] = '\0';
16796 op_out[1][0] = '\0';
6608db57 16797 BadOp ();
252b5132 16798 }
ea397f5b 16799 mnemonicendp = obufp;
252b5132 16800}
c608c12e 16801
ea397f5b
L
16802static struct op simd_cmp_op[] =
16803{
16804 { STRING_COMMA_LEN ("eq") },
16805 { STRING_COMMA_LEN ("lt") },
16806 { STRING_COMMA_LEN ("le") },
16807 { STRING_COMMA_LEN ("unord") },
16808 { STRING_COMMA_LEN ("neq") },
16809 { STRING_COMMA_LEN ("nlt") },
16810 { STRING_COMMA_LEN ("nle") },
16811 { STRING_COMMA_LEN ("ord") }
c608c12e
AM
16812};
16813
16814static void
ad19981d 16815CMP_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
c608c12e
AM
16816{
16817 unsigned int cmp_type;
16818
16819 FETCH_DATA (the_info, codep + 1);
16820 cmp_type = *codep++ & 0xff;
c0f3af97 16821 if (cmp_type < ARRAY_SIZE (simd_cmp_op))
c608c12e 16822 {
ad19981d 16823 char suffix [3];
ea397f5b 16824 char *p = mnemonicendp - 2;
ad19981d
L
16825 suffix[0] = p[0];
16826 suffix[1] = p[1];
16827 suffix[2] = '\0';
ea397f5b
L
16828 sprintf (p, "%s%s", simd_cmp_op[cmp_type].name, suffix);
16829 mnemonicendp += simd_cmp_op[cmp_type].len;
c608c12e
AM
16830 }
16831 else
16832 {
ad19981d
L
16833 /* We have a reserved extension byte. Output it directly. */
16834 scratchbuf[0] = '$';
16835 print_operand_value (scratchbuf + 1, 1, cmp_type);
9ce09ba2 16836 oappend_maybe_intel (scratchbuf);
ad19981d 16837 scratchbuf[0] = '\0';
c608c12e
AM
16838 }
16839}
16840
9916071f
AP
16841static void
16842OP_Mwaitx (int bytemode ATTRIBUTE_UNUSED,
16843 int sizeflag ATTRIBUTE_UNUSED)
16844{
16845 /* mwaitx %eax,%ecx,%ebx */
16846 if (!intel_syntax)
16847 {
16848 const char **names = (address_mode == mode_64bit
16849 ? names64 : names32);
16850 strcpy (op_out[0], names[0]);
16851 strcpy (op_out[1], names[1]);
16852 strcpy (op_out[2], names[3]);
16853 two_source_ops = 1;
16854 }
16855 /* Skip mod/rm byte. */
16856 MODRM_CHECK;
16857 codep++;
16858}
16859
ca164297 16860static void
b844680a
L
16861OP_Mwait (int bytemode ATTRIBUTE_UNUSED,
16862 int sizeflag ATTRIBUTE_UNUSED)
16863{
16864 /* mwait %eax,%ecx */
16865 if (!intel_syntax)
16866 {
16867 const char **names = (address_mode == mode_64bit
16868 ? names64 : names32);
16869 strcpy (op_out[0], names[0]);
16870 strcpy (op_out[1], names[1]);
16871 two_source_ops = 1;
16872 }
16873 /* Skip mod/rm byte. */
16874 MODRM_CHECK;
16875 codep++;
16876}
16877
16878static void
16879OP_Monitor (int bytemode ATTRIBUTE_UNUSED,
16880 int sizeflag ATTRIBUTE_UNUSED)
ca164297 16881{
b844680a
L
16882 /* monitor %eax,%ecx,%edx" */
16883 if (!intel_syntax)
ca164297 16884 {
b844680a 16885 const char **op1_names;
cb712a9e
L
16886 const char **names = (address_mode == mode_64bit
16887 ? names64 : names32);
1d9f512f 16888
b844680a
L
16889 if (!(prefixes & PREFIX_ADDR))
16890 op1_names = (address_mode == mode_16bit
16891 ? names16 : names);
ca164297
L
16892 else
16893 {
b844680a 16894 /* Remove "addr16/addr32". */
f16cd0d5 16895 all_prefixes[last_addr_prefix] = 0;
b844680a
L
16896 op1_names = (address_mode != mode_32bit
16897 ? names32 : names16);
16898 used_prefixes |= PREFIX_ADDR;
ca164297 16899 }
b844680a
L
16900 strcpy (op_out[0], op1_names[0]);
16901 strcpy (op_out[1], names[1]);
16902 strcpy (op_out[2], names[2]);
16903 two_source_ops = 1;
ca164297 16904 }
b844680a
L
16905 /* Skip mod/rm byte. */
16906 MODRM_CHECK;
16907 codep++;
30123838
JB
16908}
16909
6608db57
KH
16910static void
16911BadOp (void)
2da11e11 16912{
6608db57
KH
16913 /* Throw away prefixes and 1st. opcode byte. */
16914 codep = insn_codep + 1;
2da11e11
AM
16915 oappend ("(bad)");
16916}
4cc91dba 16917
35c52694
L
16918static void
16919REP_Fixup (int bytemode, int sizeflag)
16920{
16921 /* The 0xf3 prefix should be displayed as "rep" for ins, outs, movs,
16922 lods and stos. */
35c52694 16923 if (prefixes & PREFIX_REPZ)
f16cd0d5 16924 all_prefixes[last_repz_prefix] = REP_PREFIX;
35c52694
L
16925
16926 switch (bytemode)
16927 {
16928 case al_reg:
16929 case eAX_reg:
16930 case indir_dx_reg:
16931 OP_IMREG (bytemode, sizeflag);
16932 break;
16933 case eDI_reg:
16934 OP_ESreg (bytemode, sizeflag);
16935 break;
16936 case eSI_reg:
16937 OP_DSreg (bytemode, sizeflag);
16938 break;
16939 default:
16940 abort ();
16941 break;
16942 }
16943}
f5804c90 16944
7e8b059b
L
16945/* For BND-prefixed instructions 0xF2 prefix should be displayed as
16946 "bnd". */
16947
16948static void
16949BND_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
16950{
16951 if (prefixes & PREFIX_REPNZ)
16952 all_prefixes[last_repnz_prefix] = BND_PREFIX;
16953}
16954
42164a71
L
16955/* Similar to OP_E. But the 0xf2/0xf3 prefixes should be displayed as
16956 "xacquire"/"xrelease" for memory operand if there is a LOCK prefix.
16957 */
16958
16959static void
16960HLE_Fixup1 (int bytemode, int sizeflag)
16961{
16962 if (modrm.mod != 3
16963 && (prefixes & PREFIX_LOCK) != 0)
16964 {
16965 if (prefixes & PREFIX_REPZ)
16966 all_prefixes[last_repz_prefix] = XRELEASE_PREFIX;
16967 if (prefixes & PREFIX_REPNZ)
16968 all_prefixes[last_repnz_prefix] = XACQUIRE_PREFIX;
16969 }
16970
16971 OP_E (bytemode, sizeflag);
16972}
16973
16974/* Similar to OP_E. But the 0xf2/0xf3 prefixes should be displayed as
16975 "xacquire"/"xrelease" for memory operand. No check for LOCK prefix.
16976 */
16977
16978static void
16979HLE_Fixup2 (int bytemode, int sizeflag)
16980{
16981 if (modrm.mod != 3)
16982 {
16983 if (prefixes & PREFIX_REPZ)
16984 all_prefixes[last_repz_prefix] = XRELEASE_PREFIX;
16985 if (prefixes & PREFIX_REPNZ)
16986 all_prefixes[last_repnz_prefix] = XACQUIRE_PREFIX;
16987 }
16988
16989 OP_E (bytemode, sizeflag);
16990}
16991
16992/* Similar to OP_E. But the 0xf3 prefixes should be displayed as
16993 "xrelease" for memory operand. No check for LOCK prefix. */
16994
16995static void
16996HLE_Fixup3 (int bytemode, int sizeflag)
16997{
16998 if (modrm.mod != 3
16999 && last_repz_prefix > last_repnz_prefix
17000 && (prefixes & PREFIX_REPZ) != 0)
17001 all_prefixes[last_repz_prefix] = XRELEASE_PREFIX;
17002
17003 OP_E (bytemode, sizeflag);
17004}
17005
f5804c90
L
17006static void
17007CMPXCHG8B_Fixup (int bytemode, int sizeflag)
17008{
161a04f6
L
17009 USED_REX (REX_W);
17010 if (rex & REX_W)
f5804c90
L
17011 {
17012 /* Change cmpxchg8b to cmpxchg16b. */
ea397f5b
L
17013 char *p = mnemonicendp - 2;
17014 mnemonicendp = stpcpy (p, "16b");
fb9c77c7 17015 bytemode = o_mode;
f5804c90 17016 }
42164a71
L
17017 else if ((prefixes & PREFIX_LOCK) != 0)
17018 {
17019 if (prefixes & PREFIX_REPZ)
17020 all_prefixes[last_repz_prefix] = XRELEASE_PREFIX;
17021 if (prefixes & PREFIX_REPNZ)
17022 all_prefixes[last_repnz_prefix] = XACQUIRE_PREFIX;
17023 }
17024
f5804c90
L
17025 OP_M (bytemode, sizeflag);
17026}
42903f7f
L
17027
17028static void
17029XMM_Fixup (int reg, int sizeflag ATTRIBUTE_UNUSED)
17030{
b9733481
L
17031 const char **names;
17032
c0f3af97
L
17033 if (need_vex)
17034 {
17035 switch (vex.length)
17036 {
17037 case 128:
b9733481 17038 names = names_xmm;
c0f3af97
L
17039 break;
17040 case 256:
b9733481 17041 names = names_ymm;
c0f3af97
L
17042 break;
17043 default:
17044 abort ();
17045 }
17046 }
17047 else
b9733481
L
17048 names = names_xmm;
17049 oappend (names[reg]);
42903f7f 17050}
381d071f
L
17051
17052static void
17053CRC32_Fixup (int bytemode, int sizeflag)
17054{
17055 /* Add proper suffix to "crc32". */
ea397f5b 17056 char *p = mnemonicendp;
381d071f
L
17057
17058 switch (bytemode)
17059 {
17060 case b_mode:
20592a94 17061 if (intel_syntax)
ea397f5b 17062 goto skip;
20592a94 17063
381d071f
L
17064 *p++ = 'b';
17065 break;
17066 case v_mode:
20592a94 17067 if (intel_syntax)
ea397f5b 17068 goto skip;
20592a94 17069
381d071f
L
17070 USED_REX (REX_W);
17071 if (rex & REX_W)
17072 *p++ = 'q';
7bb15c6f 17073 else
f16cd0d5
L
17074 {
17075 if (sizeflag & DFLAG)
17076 *p++ = 'l';
17077 else
17078 *p++ = 'w';
17079 used_prefixes |= (prefixes & PREFIX_DATA);
17080 }
381d071f
L
17081 break;
17082 default:
17083 oappend (INTERNAL_DISASSEMBLER_ERROR);
17084 break;
17085 }
ea397f5b 17086 mnemonicendp = p;
381d071f
L
17087 *p = '\0';
17088
ea397f5b 17089skip:
381d071f
L
17090 if (modrm.mod == 3)
17091 {
17092 int add;
17093
17094 /* Skip mod/rm byte. */
17095 MODRM_CHECK;
17096 codep++;
17097
17098 USED_REX (REX_B);
17099 add = (rex & REX_B) ? 8 : 0;
17100 if (bytemode == b_mode)
17101 {
17102 USED_REX (0);
17103 if (rex)
17104 oappend (names8rex[modrm.rm + add]);
17105 else
17106 oappend (names8[modrm.rm + add]);
17107 }
17108 else
17109 {
17110 USED_REX (REX_W);
17111 if (rex & REX_W)
17112 oappend (names64[modrm.rm + add]);
17113 else if ((prefixes & PREFIX_DATA))
17114 oappend (names16[modrm.rm + add]);
17115 else
17116 oappend (names32[modrm.rm + add]);
17117 }
17118 }
17119 else
9344ff29 17120 OP_E (bytemode, sizeflag);
381d071f 17121}
85f10a01 17122
eacc9c89
L
17123static void
17124FXSAVE_Fixup (int bytemode, int sizeflag)
17125{
17126 /* Add proper suffix to "fxsave" and "fxrstor". */
17127 USED_REX (REX_W);
17128 if (rex & REX_W)
17129 {
17130 char *p = mnemonicendp;
17131 *p++ = '6';
17132 *p++ = '4';
17133 *p = '\0';
17134 mnemonicendp = p;
17135 }
17136 OP_M (bytemode, sizeflag);
17137}
17138
c0f3af97
L
17139/* Display the destination register operand for instructions with
17140 VEX. */
17141
17142static void
17143OP_VEX (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
17144{
539f890d 17145 int reg;
b9733481
L
17146 const char **names;
17147
c0f3af97
L
17148 if (!need_vex)
17149 abort ();
17150
17151 if (!need_vex_reg)
17152 return;
17153
539f890d 17154 reg = vex.register_specifier;
43234a1e
L
17155 if (vex.evex)
17156 {
17157 if (!vex.v)
17158 reg += 16;
17159 }
17160
539f890d
L
17161 if (bytemode == vex_scalar_mode)
17162 {
17163 oappend (names_xmm[reg]);
17164 return;
17165 }
17166
c0f3af97
L
17167 switch (vex.length)
17168 {
17169 case 128:
17170 switch (bytemode)
17171 {
17172 case vex_mode:
17173 case vex128_mode:
6c30d220 17174 case vex_vsib_q_w_dq_mode:
5fc35d96 17175 case vex_vsib_q_w_d_mode:
cb21baef
L
17176 names = names_xmm;
17177 break;
17178 case dq_mode:
17179 if (vex.w)
17180 names = names64;
17181 else
17182 names = names32;
c0f3af97 17183 break;
1ba585e8 17184 case mask_bd_mode:
43234a1e
L
17185 case mask_mode:
17186 names = names_mask;
17187 break;
c0f3af97
L
17188 default:
17189 abort ();
17190 return;
17191 }
c0f3af97
L
17192 break;
17193 case 256:
17194 switch (bytemode)
17195 {
17196 case vex_mode:
17197 case vex256_mode:
6c30d220
L
17198 names = names_ymm;
17199 break;
17200 case vex_vsib_q_w_dq_mode:
5fc35d96 17201 case vex_vsib_q_w_d_mode:
6c30d220 17202 names = vex.w ? names_ymm : names_xmm;
c0f3af97 17203 break;
1ba585e8 17204 case mask_bd_mode:
43234a1e
L
17205 case mask_mode:
17206 names = names_mask;
17207 break;
c0f3af97
L
17208 default:
17209 abort ();
17210 return;
17211 }
c0f3af97 17212 break;
43234a1e
L
17213 case 512:
17214 names = names_zmm;
17215 break;
c0f3af97
L
17216 default:
17217 abort ();
17218 break;
17219 }
539f890d 17220 oappend (names[reg]);
c0f3af97
L
17221}
17222
922d8de8
DR
17223/* Get the VEX immediate byte without moving codep. */
17224
17225static unsigned char
ccc5981b 17226get_vex_imm8 (int sizeflag, int opnum)
922d8de8
DR
17227{
17228 int bytes_before_imm = 0;
17229
922d8de8
DR
17230 if (modrm.mod != 3)
17231 {
17232 /* There are SIB/displacement bytes. */
17233 if ((sizeflag & AFLAG) || address_mode == mode_64bit)
6c067bbb 17234 {
922d8de8 17235 /* 32/64 bit address mode */
6c067bbb 17236 int base = modrm.rm;
922d8de8
DR
17237
17238 /* Check SIB byte. */
6c067bbb
RM
17239 if (base == 4)
17240 {
17241 FETCH_DATA (the_info, codep + 1);
17242 base = *codep & 7;
17243 /* When decoding the third source, don't increase
17244 bytes_before_imm as this has already been incremented
17245 by one in OP_E_memory while decoding the second
17246 source operand. */
17247 if (opnum == 0)
17248 bytes_before_imm++;
17249 }
17250
17251 /* Don't increase bytes_before_imm when decoding the third source,
17252 it has already been incremented by OP_E_memory while decoding
17253 the second source operand. */
17254 if (opnum == 0)
17255 {
17256 switch (modrm.mod)
17257 {
17258 case 0:
17259 /* When modrm.rm == 5 or modrm.rm == 4 and base in
17260 SIB == 5, there is a 4 byte displacement. */
17261 if (base != 5)
17262 /* No displacement. */
17263 break;
17264 case 2:
17265 /* 4 byte displacement. */
17266 bytes_before_imm += 4;
17267 break;
17268 case 1:
17269 /* 1 byte displacement. */
17270 bytes_before_imm++;
17271 break;
17272 }
17273 }
17274 }
922d8de8 17275 else
02e647f9
SP
17276 {
17277 /* 16 bit address mode */
6c067bbb
RM
17278 /* Don't increase bytes_before_imm when decoding the third source,
17279 it has already been incremented by OP_E_memory while decoding
17280 the second source operand. */
17281 if (opnum == 0)
17282 {
02e647f9
SP
17283 switch (modrm.mod)
17284 {
17285 case 0:
17286 /* When modrm.rm == 6, there is a 2 byte displacement. */
17287 if (modrm.rm != 6)
17288 /* No displacement. */
17289 break;
17290 case 2:
17291 /* 2 byte displacement. */
17292 bytes_before_imm += 2;
17293 break;
17294 case 1:
17295 /* 1 byte displacement: when decoding the third source,
17296 don't increase bytes_before_imm as this has already
17297 been incremented by one in OP_E_memory while decoding
17298 the second source operand. */
17299 if (opnum == 0)
17300 bytes_before_imm++;
ccc5981b 17301
02e647f9
SP
17302 break;
17303 }
922d8de8
DR
17304 }
17305 }
17306 }
17307
17308 FETCH_DATA (the_info, codep + bytes_before_imm + 1);
17309 return codep [bytes_before_imm];
17310}
17311
17312static void
17313OP_EX_VexReg (int bytemode, int sizeflag, int reg)
17314{
b9733481
L
17315 const char **names;
17316
922d8de8
DR
17317 if (reg == -1 && modrm.mod != 3)
17318 {
17319 OP_E_memory (bytemode, sizeflag);
17320 return;
17321 }
17322 else
17323 {
17324 if (reg == -1)
17325 {
17326 reg = modrm.rm;
17327 USED_REX (REX_B);
17328 if (rex & REX_B)
17329 reg += 8;
17330 }
17331 else if (reg > 7 && address_mode != mode_64bit)
17332 BadOp ();
17333 }
17334
17335 switch (vex.length)
17336 {
17337 case 128:
b9733481 17338 names = names_xmm;
922d8de8
DR
17339 break;
17340 case 256:
b9733481 17341 names = names_ymm;
922d8de8
DR
17342 break;
17343 default:
17344 abort ();
17345 }
b9733481 17346 oappend (names[reg]);
922d8de8
DR
17347}
17348
a683cc34
SP
17349static void
17350OP_EX_VexImmW (int bytemode, int sizeflag)
17351{
17352 int reg = -1;
17353 static unsigned char vex_imm8;
17354
17355 if (vex_w_done == 0)
17356 {
17357 vex_w_done = 1;
17358
17359 /* Skip mod/rm byte. */
17360 MODRM_CHECK;
17361 codep++;
17362
17363 vex_imm8 = get_vex_imm8 (sizeflag, 0);
17364
17365 if (vex.w)
17366 reg = vex_imm8 >> 4;
17367
17368 OP_EX_VexReg (bytemode, sizeflag, reg);
17369 }
17370 else if (vex_w_done == 1)
17371 {
17372 vex_w_done = 2;
17373
17374 if (!vex.w)
17375 reg = vex_imm8 >> 4;
17376
17377 OP_EX_VexReg (bytemode, sizeflag, reg);
17378 }
17379 else
17380 {
17381 /* Output the imm8 directly. */
17382 scratchbuf[0] = '$';
17383 print_operand_value (scratchbuf + 1, 1, vex_imm8 & 0xf);
9ce09ba2 17384 oappend_maybe_intel (scratchbuf);
a683cc34
SP
17385 scratchbuf[0] = '\0';
17386 codep++;
17387 }
17388}
17389
5dd85c99
SP
17390static void
17391OP_Vex_2src (int bytemode, int sizeflag)
17392{
17393 if (modrm.mod == 3)
17394 {
b9733481 17395 int reg = modrm.rm;
5dd85c99 17396 USED_REX (REX_B);
b9733481
L
17397 if (rex & REX_B)
17398 reg += 8;
17399 oappend (names_xmm[reg]);
5dd85c99
SP
17400 }
17401 else
17402 {
17403 if (intel_syntax
17404 && (bytemode == v_mode || bytemode == v_swap_mode))
17405 {
17406 bytemode = (prefixes & PREFIX_DATA) ? x_mode : q_mode;
17407 used_prefixes |= (prefixes & PREFIX_DATA);
17408 }
17409 OP_E (bytemode, sizeflag);
17410 }
17411}
17412
17413static void
17414OP_Vex_2src_1 (int bytemode, int sizeflag)
17415{
17416 if (modrm.mod == 3)
17417 {
17418 /* Skip mod/rm byte. */
17419 MODRM_CHECK;
17420 codep++;
17421 }
17422
17423 if (vex.w)
b9733481 17424 oappend (names_xmm[vex.register_specifier]);
5dd85c99
SP
17425 else
17426 OP_Vex_2src (bytemode, sizeflag);
17427}
17428
17429static void
17430OP_Vex_2src_2 (int bytemode, int sizeflag)
17431{
17432 if (vex.w)
17433 OP_Vex_2src (bytemode, sizeflag);
17434 else
b9733481 17435 oappend (names_xmm[vex.register_specifier]);
5dd85c99
SP
17436}
17437
922d8de8
DR
17438static void
17439OP_EX_VexW (int bytemode, int sizeflag)
17440{
17441 int reg = -1;
17442
17443 if (!vex_w_done)
17444 {
17445 vex_w_done = 1;
41effecb
SP
17446
17447 /* Skip mod/rm byte. */
17448 MODRM_CHECK;
17449 codep++;
17450
922d8de8 17451 if (vex.w)
ccc5981b 17452 reg = get_vex_imm8 (sizeflag, 0) >> 4;
922d8de8
DR
17453 }
17454 else
17455 {
17456 if (!vex.w)
ccc5981b 17457 reg = get_vex_imm8 (sizeflag, 1) >> 4;
922d8de8
DR
17458 }
17459
17460 OP_EX_VexReg (bytemode, sizeflag, reg);
17461}
17462
922d8de8
DR
17463static void
17464VEXI4_Fixup (int bytemode ATTRIBUTE_UNUSED,
17465 int sizeflag ATTRIBUTE_UNUSED)
17466{
17467 /* Skip the immediate byte and check for invalid bits. */
17468 FETCH_DATA (the_info, codep + 1);
17469 if (*codep++ & 0xf)
17470 BadOp ();
17471}
17472
c0f3af97
L
17473static void
17474OP_REG_VexI4 (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
17475{
17476 int reg;
b9733481
L
17477 const char **names;
17478
c0f3af97
L
17479 FETCH_DATA (the_info, codep + 1);
17480 reg = *codep++;
17481
17482 if (bytemode != x_mode)
17483 abort ();
17484
17485 if (reg & 0xf)
17486 BadOp ();
17487
17488 reg >>= 4;
dae39acc
L
17489 if (reg > 7 && address_mode != mode_64bit)
17490 BadOp ();
17491
c0f3af97
L
17492 switch (vex.length)
17493 {
17494 case 128:
b9733481 17495 names = names_xmm;
c0f3af97
L
17496 break;
17497 case 256:
b9733481 17498 names = names_ymm;
c0f3af97
L
17499 break;
17500 default:
17501 abort ();
17502 }
b9733481 17503 oappend (names[reg]);
c0f3af97
L
17504}
17505
922d8de8
DR
17506static void
17507OP_XMM_VexW (int bytemode, int sizeflag)
17508{
17509 /* Turn off the REX.W bit since it is used for swapping operands
17510 now. */
17511 rex &= ~REX_W;
17512 OP_XMM (bytemode, sizeflag);
17513}
17514
c0f3af97
L
17515static void
17516OP_EX_Vex (int bytemode, int sizeflag)
17517{
17518 if (modrm.mod != 3)
17519 {
17520 if (vex.register_specifier != 0)
17521 BadOp ();
17522 need_vex_reg = 0;
17523 }
17524 OP_EX (bytemode, sizeflag);
17525}
17526
17527static void
17528OP_XMM_Vex (int bytemode, int sizeflag)
17529{
17530 if (modrm.mod != 3)
17531 {
17532 if (vex.register_specifier != 0)
17533 BadOp ();
17534 need_vex_reg = 0;
17535 }
17536 OP_XMM (bytemode, sizeflag);
17537}
17538
17539static void
17540VZERO_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
17541{
17542 switch (vex.length)
17543 {
17544 case 128:
ea397f5b 17545 mnemonicendp = stpcpy (obuf, "vzeroupper");
c0f3af97
L
17546 break;
17547 case 256:
ea397f5b 17548 mnemonicendp = stpcpy (obuf, "vzeroall");
c0f3af97
L
17549 break;
17550 default:
17551 abort ();
17552 }
17553}
17554
ea397f5b
L
17555static struct op vex_cmp_op[] =
17556{
17557 { STRING_COMMA_LEN ("eq") },
17558 { STRING_COMMA_LEN ("lt") },
17559 { STRING_COMMA_LEN ("le") },
17560 { STRING_COMMA_LEN ("unord") },
17561 { STRING_COMMA_LEN ("neq") },
17562 { STRING_COMMA_LEN ("nlt") },
17563 { STRING_COMMA_LEN ("nle") },
17564 { STRING_COMMA_LEN ("ord") },
17565 { STRING_COMMA_LEN ("eq_uq") },
17566 { STRING_COMMA_LEN ("nge") },
17567 { STRING_COMMA_LEN ("ngt") },
17568 { STRING_COMMA_LEN ("false") },
17569 { STRING_COMMA_LEN ("neq_oq") },
17570 { STRING_COMMA_LEN ("ge") },
17571 { STRING_COMMA_LEN ("gt") },
17572 { STRING_COMMA_LEN ("true") },
17573 { STRING_COMMA_LEN ("eq_os") },
17574 { STRING_COMMA_LEN ("lt_oq") },
17575 { STRING_COMMA_LEN ("le_oq") },
17576 { STRING_COMMA_LEN ("unord_s") },
17577 { STRING_COMMA_LEN ("neq_us") },
17578 { STRING_COMMA_LEN ("nlt_uq") },
17579 { STRING_COMMA_LEN ("nle_uq") },
17580 { STRING_COMMA_LEN ("ord_s") },
17581 { STRING_COMMA_LEN ("eq_us") },
17582 { STRING_COMMA_LEN ("nge_uq") },
17583 { STRING_COMMA_LEN ("ngt_uq") },
17584 { STRING_COMMA_LEN ("false_os") },
17585 { STRING_COMMA_LEN ("neq_os") },
17586 { STRING_COMMA_LEN ("ge_oq") },
17587 { STRING_COMMA_LEN ("gt_oq") },
17588 { STRING_COMMA_LEN ("true_us") },
c0f3af97
L
17589};
17590
17591static void
17592VCMP_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
17593{
17594 unsigned int cmp_type;
17595
17596 FETCH_DATA (the_info, codep + 1);
17597 cmp_type = *codep++ & 0xff;
17598 if (cmp_type < ARRAY_SIZE (vex_cmp_op))
17599 {
17600 char suffix [3];
ea397f5b 17601 char *p = mnemonicendp - 2;
c0f3af97
L
17602 suffix[0] = p[0];
17603 suffix[1] = p[1];
17604 suffix[2] = '\0';
ea397f5b
L
17605 sprintf (p, "%s%s", vex_cmp_op[cmp_type].name, suffix);
17606 mnemonicendp += vex_cmp_op[cmp_type].len;
c0f3af97
L
17607 }
17608 else
17609 {
17610 /* We have a reserved extension byte. Output it directly. */
17611 scratchbuf[0] = '$';
17612 print_operand_value (scratchbuf + 1, 1, cmp_type);
9ce09ba2 17613 oappend_maybe_intel (scratchbuf);
c0f3af97
L
17614 scratchbuf[0] = '\0';
17615 }
17616}
17617
43234a1e
L
17618static void
17619VPCMP_Fixup (int bytemode ATTRIBUTE_UNUSED,
17620 int sizeflag ATTRIBUTE_UNUSED)
17621{
17622 unsigned int cmp_type;
17623
17624 if (!vex.evex)
17625 abort ();
17626
17627 FETCH_DATA (the_info, codep + 1);
17628 cmp_type = *codep++ & 0xff;
17629 /* There are aliases for immediates 0, 1, 2, 4, 5, 6.
17630 If it's the case, print suffix, otherwise - print the immediate. */
17631 if (cmp_type < ARRAY_SIZE (simd_cmp_op)
17632 && cmp_type != 3
17633 && cmp_type != 7)
17634 {
17635 char suffix [3];
17636 char *p = mnemonicendp - 2;
17637
17638 /* vpcmp* can have both one- and two-lettered suffix. */
17639 if (p[0] == 'p')
17640 {
17641 p++;
17642 suffix[0] = p[0];
17643 suffix[1] = '\0';
17644 }
17645 else
17646 {
17647 suffix[0] = p[0];
17648 suffix[1] = p[1];
17649 suffix[2] = '\0';
17650 }
17651
17652 sprintf (p, "%s%s", simd_cmp_op[cmp_type].name, suffix);
17653 mnemonicendp += simd_cmp_op[cmp_type].len;
17654 }
17655 else
17656 {
17657 /* We have a reserved extension byte. Output it directly. */
17658 scratchbuf[0] = '$';
17659 print_operand_value (scratchbuf + 1, 1, cmp_type);
9ce09ba2 17660 oappend_maybe_intel (scratchbuf);
43234a1e
L
17661 scratchbuf[0] = '\0';
17662 }
17663}
17664
ea397f5b
L
17665static const struct op pclmul_op[] =
17666{
17667 { STRING_COMMA_LEN ("lql") },
17668 { STRING_COMMA_LEN ("hql") },
17669 { STRING_COMMA_LEN ("lqh") },
17670 { STRING_COMMA_LEN ("hqh") }
c0f3af97
L
17671};
17672
17673static void
17674PCLMUL_Fixup (int bytemode ATTRIBUTE_UNUSED,
17675 int sizeflag ATTRIBUTE_UNUSED)
17676{
17677 unsigned int pclmul_type;
17678
17679 FETCH_DATA (the_info, codep + 1);
17680 pclmul_type = *codep++ & 0xff;
17681 switch (pclmul_type)
17682 {
17683 case 0x10:
17684 pclmul_type = 2;
17685 break;
17686 case 0x11:
17687 pclmul_type = 3;
17688 break;
17689 default:
17690 break;
7bb15c6f 17691 }
c0f3af97
L
17692 if (pclmul_type < ARRAY_SIZE (pclmul_op))
17693 {
17694 char suffix [4];
ea397f5b 17695 char *p = mnemonicendp - 3;
c0f3af97
L
17696 suffix[0] = p[0];
17697 suffix[1] = p[1];
17698 suffix[2] = p[2];
17699 suffix[3] = '\0';
ea397f5b
L
17700 sprintf (p, "%s%s", pclmul_op[pclmul_type].name, suffix);
17701 mnemonicendp += pclmul_op[pclmul_type].len;
c0f3af97
L
17702 }
17703 else
17704 {
17705 /* We have a reserved extension byte. Output it directly. */
17706 scratchbuf[0] = '$';
17707 print_operand_value (scratchbuf + 1, 1, pclmul_type);
9ce09ba2 17708 oappend_maybe_intel (scratchbuf);
c0f3af97
L
17709 scratchbuf[0] = '\0';
17710 }
17711}
17712
f1f8f695
L
17713static void
17714MOVBE_Fixup (int bytemode, int sizeflag)
17715{
17716 /* Add proper suffix to "movbe". */
ea397f5b 17717 char *p = mnemonicendp;
f1f8f695
L
17718
17719 switch (bytemode)
17720 {
17721 case v_mode:
17722 if (intel_syntax)
ea397f5b 17723 goto skip;
f1f8f695
L
17724
17725 USED_REX (REX_W);
17726 if (sizeflag & SUFFIX_ALWAYS)
17727 {
17728 if (rex & REX_W)
17729 *p++ = 'q';
f1f8f695 17730 else
f16cd0d5
L
17731 {
17732 if (sizeflag & DFLAG)
17733 *p++ = 'l';
17734 else
17735 *p++ = 'w';
17736 used_prefixes |= (prefixes & PREFIX_DATA);
17737 }
f1f8f695 17738 }
f1f8f695
L
17739 break;
17740 default:
17741 oappend (INTERNAL_DISASSEMBLER_ERROR);
17742 break;
17743 }
ea397f5b 17744 mnemonicendp = p;
f1f8f695
L
17745 *p = '\0';
17746
ea397f5b 17747skip:
f1f8f695
L
17748 OP_M (bytemode, sizeflag);
17749}
f88c9eb0
SP
17750
17751static void
17752OP_LWPCB_E (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
17753{
17754 int reg;
17755 const char **names;
17756
17757 /* Skip mod/rm byte. */
17758 MODRM_CHECK;
17759 codep++;
17760
17761 if (vex.w)
17762 names = names64;
f88c9eb0 17763 else
ce7d077e 17764 names = names32;
f88c9eb0
SP
17765
17766 reg = modrm.rm;
17767 USED_REX (REX_B);
17768 if (rex & REX_B)
17769 reg += 8;
17770
17771 oappend (names[reg]);
17772}
17773
17774static void
17775OP_LWP_E (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
17776{
17777 const char **names;
17778
17779 if (vex.w)
17780 names = names64;
f88c9eb0 17781 else
ce7d077e 17782 names = names32;
f88c9eb0
SP
17783
17784 oappend (names[vex.register_specifier]);
17785}
43234a1e
L
17786
17787static void
17788OP_Mask (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
17789{
17790 if (!vex.evex
1ba585e8 17791 || (bytemode != mask_mode && bytemode != mask_bd_mode))
43234a1e
L
17792 abort ();
17793
17794 USED_REX (REX_R);
17795 if ((rex & REX_R) != 0 || !vex.r)
17796 {
17797 BadOp ();
17798 return;
17799 }
17800
17801 oappend (names_mask [modrm.reg]);
17802}
17803
17804static void
17805OP_Rounding (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
17806{
17807 if (!vex.evex
17808 || (bytemode != evex_rounding_mode
17809 && bytemode != evex_sae_mode))
17810 abort ();
17811 if (modrm.mod == 3 && vex.b)
17812 switch (bytemode)
17813 {
17814 case evex_rounding_mode:
17815 oappend (names_rounding[vex.ll]);
17816 break;
17817 case evex_sae_mode:
17818 oappend ("{sae}");
17819 break;
17820 default:
17821 break;
17822 }
17823}
This page took 2.032581 seconds and 4 git commands to generate.