opcodes: blackfin: avoid duplicate memory reads
[deliverable/binutils-gdb.git] / opcodes / i386-dis.c
CommitLineData
252b5132 1/* Print i386 instructions for GDB, the GNU debugger.
4b95cf5c 2 Copyright (C) 1988-2014 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);
46e883c5
L
105static void NOP_Fixup1 (int, int);
106static void NOP_Fixup2 (int, int);
26ca5450 107static void OP_3DNowSuffix (int, int);
ad19981d 108static void CMP_Fixup (int, int);
26ca5450 109static void BadOp (void);
35c52694 110static void REP_Fixup (int, int);
7e8b059b 111static void BND_Fixup (int, int);
42164a71
L
112static void HLE_Fixup1 (int, int);
113static void HLE_Fixup2 (int, int);
114static void HLE_Fixup3 (int, int);
f5804c90 115static void CMPXCHG8B_Fixup (int, int);
42903f7f 116static void XMM_Fixup (int, int);
381d071f 117static void CRC32_Fixup (int, int);
eacc9c89 118static void FXSAVE_Fixup (int, int);
f88c9eb0
SP
119static void OP_LWPCB_E (int, int);
120static void OP_LWP_E (int, int);
5dd85c99
SP
121static void OP_Vex_2src_1 (int, int);
122static void OP_Vex_2src_2 (int, int);
c1e679ec 123
f1f8f695 124static void MOVBE_Fixup (int, int);
252b5132 125
43234a1e
L
126static void OP_Mask (int, int);
127
6608db57 128struct dis_private {
252b5132
RH
129 /* Points to first byte not fetched. */
130 bfd_byte *max_fetched;
0b1cf022 131 bfd_byte the_buffer[MAX_MNEM_SIZE];
252b5132 132 bfd_vma insn_start;
e396998b 133 int orig_sizeflag;
8df14d78 134 OPCODES_SIGJMP_BUF bailout;
252b5132
RH
135};
136
cb712a9e
L
137enum address_mode
138{
139 mode_16bit,
140 mode_32bit,
141 mode_64bit
142};
143
144enum address_mode address_mode;
52b15da3 145
5076851f
ILT
146/* Flags for the prefixes for the current instruction. See below. */
147static int prefixes;
148
52b15da3
JH
149/* REX prefix the current instruction. See below. */
150static int rex;
151/* Bits of REX we've already used. */
152static int rex_used;
d869730d 153/* REX bits in original REX prefix ignored. */
c0f3af97 154static int rex_ignored;
52b15da3
JH
155/* Mark parts used in the REX prefix. When we are testing for
156 empty prefix (for 8bit register REX extension), just mask it
157 out. Otherwise test for REX bit is excuse for existence of REX
158 only in case value is nonzero. */
159#define USED_REX(value) \
160 { \
161 if (value) \
161a04f6
L
162 { \
163 if ((rex & value)) \
164 rex_used |= (value) | REX_OPCODE; \
165 } \
52b15da3 166 else \
161a04f6 167 rex_used |= REX_OPCODE; \
52b15da3
JH
168 }
169
7d421014
ILT
170/* Flags for prefixes which we somehow handled when printing the
171 current instruction. */
172static int used_prefixes;
173
5076851f
ILT
174/* Flags stored in PREFIXES. */
175#define PREFIX_REPZ 1
176#define PREFIX_REPNZ 2
177#define PREFIX_LOCK 4
178#define PREFIX_CS 8
179#define PREFIX_SS 0x10
180#define PREFIX_DS 0x20
181#define PREFIX_ES 0x40
182#define PREFIX_FS 0x80
183#define PREFIX_GS 0x100
184#define PREFIX_DATA 0x200
185#define PREFIX_ADDR 0x400
186#define PREFIX_FWAIT 0x800
187
252b5132
RH
188/* Make sure that bytes from INFO->PRIVATE_DATA->BUFFER (inclusive)
189 to ADDR (exclusive) are valid. Returns 1 for success, longjmps
190 on error. */
191#define FETCH_DATA(info, addr) \
6608db57 192 ((addr) <= ((struct dis_private *) (info->private_data))->max_fetched \
252b5132
RH
193 ? 1 : fetch_data ((info), (addr)))
194
195static int
26ca5450 196fetch_data (struct disassemble_info *info, bfd_byte *addr)
252b5132
RH
197{
198 int status;
6608db57 199 struct dis_private *priv = (struct dis_private *) info->private_data;
252b5132
RH
200 bfd_vma start = priv->insn_start + (priv->max_fetched - priv->the_buffer);
201
0b1cf022 202 if (addr <= priv->the_buffer + MAX_MNEM_SIZE)
272c9217
JB
203 status = (*info->read_memory_func) (start,
204 priv->max_fetched,
205 addr - priv->max_fetched,
206 info);
207 else
208 status = -1;
252b5132
RH
209 if (status != 0)
210 {
7d421014 211 /* If we did manage to read at least one byte, then
db6eb5be
AM
212 print_insn_i386 will do something sensible. Otherwise, print
213 an error. We do that here because this is where we know
214 STATUS. */
7d421014 215 if (priv->max_fetched == priv->the_buffer)
5076851f 216 (*info->memory_error_func) (status, start, info);
8df14d78 217 OPCODES_SIGLONGJMP (priv->bailout, 1);
252b5132
RH
218 }
219 else
220 priv->max_fetched = addr;
221 return 1;
222}
223
ce518a5f 224#define XX { NULL, 0 }
592d1631 225#define Bad_Opcode NULL, { { NULL, 0 } }
ce518a5f
L
226
227#define Eb { OP_E, b_mode }
7e8b059b 228#define Ebnd { OP_E, bnd_mode }
b6169b20 229#define EbS { OP_E, b_swap_mode }
ce518a5f 230#define Ev { OP_E, v_mode }
7e8b059b 231#define Ev_bnd { OP_E, v_bnd_mode }
b6169b20 232#define EvS { OP_E, v_swap_mode }
ce518a5f
L
233#define Ed { OP_E, d_mode }
234#define Edq { OP_E, dq_mode }
235#define Edqw { OP_E, dqw_mode }
1ba585e8 236#define EdqwS { OP_E, dqw_swap_mode }
42903f7f 237#define Edqb { OP_E, dqb_mode }
1ba585e8
IT
238#define Edb { OP_E, db_mode }
239#define Edw { OP_E, dw_mode }
42903f7f 240#define Edqd { OP_E, dqd_mode }
09335d05 241#define Eq { OP_E, q_mode }
ce518a5f
L
242#define indirEv { OP_indirE, stack_v_mode }
243#define indirEp { OP_indirE, f_mode }
244#define stackEv { OP_E, stack_v_mode }
245#define Em { OP_E, m_mode }
246#define Ew { OP_E, w_mode }
247#define M { OP_M, 0 } /* lea, lgdt, etc. */
34b772a6 248#define Ma { OP_M, a_mode }
b844680a 249#define Mb { OP_M, b_mode }
d9a5e5e5 250#define Md { OP_M, d_mode }
f1f8f695 251#define Mo { OP_M, o_mode }
ce518a5f
L
252#define Mp { OP_M, f_mode } /* 32 or 48 bit memory operand for LDS, LES etc */
253#define Mq { OP_M, q_mode }
4ee52178 254#define Mx { OP_M, x_mode }
c0f3af97 255#define Mxmm { OP_M, xmm_mode }
ce518a5f 256#define Gb { OP_G, b_mode }
7e8b059b 257#define Gbnd { OP_G, bnd_mode }
ce518a5f
L
258#define Gv { OP_G, v_mode }
259#define Gd { OP_G, d_mode }
260#define Gdq { OP_G, dq_mode }
261#define Gm { OP_G, m_mode }
262#define Gw { OP_G, w_mode }
6f74c397 263#define Rd { OP_R, d_mode }
43234a1e 264#define Rdq { OP_R, dq_mode }
6f74c397 265#define Rm { OP_R, m_mode }
ce518a5f
L
266#define Ib { OP_I, b_mode }
267#define sIb { OP_sI, b_mode } /* sign extened byte */
e3949f17 268#define sIbT { OP_sI, b_T_mode } /* sign extened byte like 'T' */
ce518a5f 269#define Iv { OP_I, v_mode }
7bb15c6f 270#define sIv { OP_sI, v_mode }
ce518a5f
L
271#define Iq { OP_I, q_mode }
272#define Iv64 { OP_I64, v_mode }
273#define Iw { OP_I, w_mode }
274#define I1 { OP_I, const_1_mode }
275#define Jb { OP_J, b_mode }
276#define Jv { OP_J, v_mode }
277#define Cm { OP_C, m_mode }
278#define Dm { OP_D, m_mode }
279#define Td { OP_T, d_mode }
b844680a 280#define Skip_MODRM { OP_Skip_MODRM, 0 }
ce518a5f
L
281
282#define RMeAX { OP_REG, eAX_reg }
283#define RMeBX { OP_REG, eBX_reg }
284#define RMeCX { OP_REG, eCX_reg }
285#define RMeDX { OP_REG, eDX_reg }
286#define RMeSP { OP_REG, eSP_reg }
287#define RMeBP { OP_REG, eBP_reg }
288#define RMeSI { OP_REG, eSI_reg }
289#define RMeDI { OP_REG, eDI_reg }
290#define RMrAX { OP_REG, rAX_reg }
291#define RMrBX { OP_REG, rBX_reg }
292#define RMrCX { OP_REG, rCX_reg }
293#define RMrDX { OP_REG, rDX_reg }
294#define RMrSP { OP_REG, rSP_reg }
295#define RMrBP { OP_REG, rBP_reg }
296#define RMrSI { OP_REG, rSI_reg }
297#define RMrDI { OP_REG, rDI_reg }
298#define RMAL { OP_REG, al_reg }
ce518a5f
L
299#define RMCL { OP_REG, cl_reg }
300#define RMDL { OP_REG, dl_reg }
301#define RMBL { OP_REG, bl_reg }
302#define RMAH { OP_REG, ah_reg }
303#define RMCH { OP_REG, ch_reg }
304#define RMDH { OP_REG, dh_reg }
305#define RMBH { OP_REG, bh_reg }
306#define RMAX { OP_REG, ax_reg }
307#define RMDX { OP_REG, dx_reg }
308
309#define eAX { OP_IMREG, eAX_reg }
310#define eBX { OP_IMREG, eBX_reg }
311#define eCX { OP_IMREG, eCX_reg }
312#define eDX { OP_IMREG, eDX_reg }
313#define eSP { OP_IMREG, eSP_reg }
314#define eBP { OP_IMREG, eBP_reg }
315#define eSI { OP_IMREG, eSI_reg }
316#define eDI { OP_IMREG, eDI_reg }
317#define AL { OP_IMREG, al_reg }
318#define CL { OP_IMREG, cl_reg }
319#define DL { OP_IMREG, dl_reg }
320#define BL { OP_IMREG, bl_reg }
321#define AH { OP_IMREG, ah_reg }
322#define CH { OP_IMREG, ch_reg }
323#define DH { OP_IMREG, dh_reg }
324#define BH { OP_IMREG, bh_reg }
325#define AX { OP_IMREG, ax_reg }
326#define DX { OP_IMREG, dx_reg }
327#define zAX { OP_IMREG, z_mode_ax_reg }
328#define indirDX { OP_IMREG, indir_dx_reg }
329
330#define Sw { OP_SEG, w_mode }
331#define Sv { OP_SEG, v_mode }
332#define Ap { OP_DIR, 0 }
333#define Ob { OP_OFF64, b_mode }
334#define Ov { OP_OFF64, v_mode }
335#define Xb { OP_DSreg, eSI_reg }
336#define Xv { OP_DSreg, eSI_reg }
337#define Xz { OP_DSreg, eSI_reg }
338#define Yb { OP_ESreg, eDI_reg }
339#define Yv { OP_ESreg, eDI_reg }
340#define DSBX { OP_DSreg, eBX_reg }
341
342#define es { OP_REG, es_reg }
343#define ss { OP_REG, ss_reg }
344#define cs { OP_REG, cs_reg }
345#define ds { OP_REG, ds_reg }
346#define fs { OP_REG, fs_reg }
347#define gs { OP_REG, gs_reg }
348
349#define MX { OP_MMX, 0 }
350#define XM { OP_XMM, 0 }
539f890d 351#define XMScalar { OP_XMM, scalar_mode }
6c30d220 352#define XMGatherQ { OP_XMM, vex_vsib_q_w_dq_mode }
c0f3af97 353#define XMM { OP_XMM, xmm_mode }
43234a1e 354#define XMxmmq { OP_XMM, xmmq_mode }
ce518a5f 355#define EM { OP_EM, v_mode }
b6169b20 356#define EMS { OP_EM, v_swap_mode }
09a2c6cf 357#define EMd { OP_EM, d_mode }
14051056 358#define EMx { OP_EM, x_mode }
8976381e 359#define EXw { OP_EX, w_mode }
09a2c6cf 360#define EXd { OP_EX, d_mode }
539f890d 361#define EXdScalar { OP_EX, d_scalar_mode }
fa99fab2 362#define EXdS { OP_EX, d_swap_mode }
43234a1e 363#define EXdScalarS { OP_EX, d_scalar_swap_mode }
09a2c6cf 364#define EXq { OP_EX, q_mode }
539f890d
L
365#define EXqScalar { OP_EX, q_scalar_mode }
366#define EXqScalarS { OP_EX, q_scalar_swap_mode }
b6169b20 367#define EXqS { OP_EX, q_swap_mode }
09a2c6cf 368#define EXx { OP_EX, x_mode }
b6169b20 369#define EXxS { OP_EX, x_swap_mode }
c0f3af97 370#define EXxmm { OP_EX, xmm_mode }
43234a1e 371#define EXymm { OP_EX, ymm_mode }
c0f3af97 372#define EXxmmq { OP_EX, xmmq_mode }
43234a1e 373#define EXEvexHalfBcstXmmq { OP_EX, evex_half_bcst_xmmq_mode }
6c30d220
L
374#define EXxmm_mb { OP_EX, xmm_mb_mode }
375#define EXxmm_mw { OP_EX, xmm_mw_mode }
376#define EXxmm_md { OP_EX, xmm_md_mode }
377#define EXxmm_mq { OP_EX, xmm_mq_mode }
43234a1e 378#define EXxmm_mdq { OP_EX, xmm_mdq_mode }
6c30d220
L
379#define EXxmmdw { OP_EX, xmmdw_mode }
380#define EXxmmqd { OP_EX, xmmqd_mode }
c0f3af97 381#define EXymmq { OP_EX, ymmq_mode }
0bfee649 382#define EXVexWdq { OP_EX, vex_w_dq_mode }
1c480963 383#define EXVexWdqScalar { OP_EX, vex_scalar_w_dq_mode }
43234a1e
L
384#define EXEvexXGscat { OP_EX, evex_x_gscat_mode }
385#define EXEvexXNoBcst { OP_EX, evex_x_nobcst_mode }
ce518a5f
L
386#define MS { OP_MS, v_mode }
387#define XS { OP_XS, v_mode }
09335d05 388#define EMCq { OP_EMC, q_mode }
ce518a5f 389#define MXC { OP_MXC, 0 }
ce518a5f 390#define OPSUF { OP_3DNowSuffix, 0 }
ad19981d 391#define CMP { CMP_Fixup, 0 }
42903f7f 392#define XMM0 { XMM_Fixup, 0 }
eacc9c89 393#define FXSAVE { FXSAVE_Fixup, 0 }
5dd85c99
SP
394#define Vex_2src_1 { OP_Vex_2src_1, 0 }
395#define Vex_2src_2 { OP_Vex_2src_2, 0 }
252b5132 396
c0f3af97 397#define Vex { OP_VEX, vex_mode }
539f890d 398#define VexScalar { OP_VEX, vex_scalar_mode }
6c30d220 399#define VexGatherQ { OP_VEX, vex_vsib_q_w_dq_mode }
c0f3af97
L
400#define Vex128 { OP_VEX, vex128_mode }
401#define Vex256 { OP_VEX, vex256_mode }
cb21baef 402#define VexGdq { OP_VEX, dq_mode }
922d8de8 403#define VexI4 { VEXI4_Fixup, 0}
c0f3af97 404#define EXdVex { OP_EX_Vex, d_mode }
fa99fab2 405#define EXdVexS { OP_EX_Vex, d_swap_mode }
539f890d 406#define EXdVexScalarS { OP_EX_Vex, d_scalar_swap_mode }
c0f3af97 407#define EXqVex { OP_EX_Vex, q_mode }
fa99fab2 408#define EXqVexS { OP_EX_Vex, q_swap_mode }
539f890d 409#define EXqVexScalarS { OP_EX_Vex, q_scalar_swap_mode }
922d8de8
DR
410#define EXVexW { OP_EX_VexW, x_mode }
411#define EXdVexW { OP_EX_VexW, d_mode }
412#define EXqVexW { OP_EX_VexW, q_mode }
a683cc34 413#define EXVexImmW { OP_EX_VexImmW, x_mode }
c0f3af97 414#define XMVex { OP_XMM_Vex, 0 }
539f890d 415#define XMVexScalar { OP_XMM_Vex, scalar_mode }
922d8de8 416#define XMVexW { OP_XMM_VexW, 0 }
c0f3af97
L
417#define XMVexI4 { OP_REG_VexI4, x_mode }
418#define PCLMUL { PCLMUL_Fixup, 0 }
419#define VZERO { VZERO_Fixup, 0 }
420#define VCMP { VCMP_Fixup, 0 }
43234a1e
L
421#define VPCMP { VPCMP_Fixup, 0 }
422
423#define EXxEVexR { OP_Rounding, evex_rounding_mode }
424#define EXxEVexS { OP_Rounding, evex_sae_mode }
425
426#define XMask { OP_Mask, mask_mode }
427#define MaskG { OP_G, mask_mode }
428#define MaskE { OP_E, mask_mode }
1ba585e8 429#define MaskBDE { OP_E, mask_bd_mode }
43234a1e
L
430#define MaskR { OP_R, mask_mode }
431#define MaskVex { OP_VEX, mask_mode }
c0f3af97 432
6c30d220 433#define MVexVSIBDWpX { OP_M, vex_vsib_d_w_dq_mode }
5fc35d96 434#define MVexVSIBDQWpX { OP_M, vex_vsib_d_w_d_mode }
6c30d220 435#define MVexVSIBQWpX { OP_M, vex_vsib_q_w_dq_mode }
5fc35d96 436#define MVexVSIBQDWpX { OP_M, vex_vsib_q_w_d_mode }
6c30d220 437
35c52694 438/* Used handle "rep" prefix for string instructions. */
ce518a5f
L
439#define Xbr { REP_Fixup, eSI_reg }
440#define Xvr { REP_Fixup, eSI_reg }
441#define Ybr { REP_Fixup, eDI_reg }
442#define Yvr { REP_Fixup, eDI_reg }
443#define Yzr { REP_Fixup, eDI_reg }
444#define indirDXr { REP_Fixup, indir_dx_reg }
445#define ALr { REP_Fixup, al_reg }
446#define eAXr { REP_Fixup, eAX_reg }
447
42164a71
L
448/* Used handle HLE prefix for lockable instructions. */
449#define Ebh1 { HLE_Fixup1, b_mode }
450#define Evh1 { HLE_Fixup1, v_mode }
451#define Ebh2 { HLE_Fixup2, b_mode }
452#define Evh2 { HLE_Fixup2, v_mode }
453#define Ebh3 { HLE_Fixup3, b_mode }
454#define Evh3 { HLE_Fixup3, v_mode }
455
7e8b059b
L
456#define BND { BND_Fixup, 0 }
457
ce518a5f
L
458#define cond_jump_flag { NULL, cond_jump_mode }
459#define loop_jcxz_flag { NULL, loop_jcxz_mode }
3ffd33cf 460
252b5132 461/* bits in sizeflag */
252b5132 462#define SUFFIX_ALWAYS 4
252b5132
RH
463#define AFLAG 2
464#define DFLAG 1
465
51e7da1b
L
466enum
467{
468 /* byte operand */
469 b_mode = 1,
470 /* byte operand with operand swapped */
3873ba12 471 b_swap_mode,
e3949f17
L
472 /* byte operand, sign extend like 'T' suffix */
473 b_T_mode,
51e7da1b 474 /* operand size depends on prefixes */
3873ba12 475 v_mode,
51e7da1b 476 /* operand size depends on prefixes with operand swapped */
3873ba12 477 v_swap_mode,
51e7da1b 478 /* word operand */
3873ba12 479 w_mode,
51e7da1b 480 /* double word operand */
3873ba12 481 d_mode,
51e7da1b 482 /* double word operand with operand swapped */
3873ba12 483 d_swap_mode,
51e7da1b 484 /* quad word operand */
3873ba12 485 q_mode,
51e7da1b 486 /* quad word operand with operand swapped */
3873ba12 487 q_swap_mode,
51e7da1b 488 /* ten-byte operand */
3873ba12 489 t_mode,
43234a1e
L
490 /* 16-byte XMM, 32-byte YMM or 64-byte ZMM operand. In EVEX with
491 broadcast enabled. */
3873ba12 492 x_mode,
43234a1e
L
493 /* Similar to x_mode, but with different EVEX mem shifts. */
494 evex_x_gscat_mode,
495 /* Similar to x_mode, but with disabled broadcast. */
496 evex_x_nobcst_mode,
497 /* Similar to x_mode, but with operands swapped and disabled broadcast
498 in EVEX. */
3873ba12 499 x_swap_mode,
51e7da1b 500 /* 16-byte XMM operand */
3873ba12 501 xmm_mode,
43234a1e
L
502 /* XMM, XMM or YMM register operand, or quad word, xmmword or ymmword
503 memory operand (depending on vector length). Broadcast isn't
504 allowed. */
3873ba12 505 xmmq_mode,
43234a1e
L
506 /* Same as xmmq_mode, but broadcast is allowed. */
507 evex_half_bcst_xmmq_mode,
6c30d220
L
508 /* XMM register or byte memory operand */
509 xmm_mb_mode,
510 /* XMM register or word memory operand */
511 xmm_mw_mode,
512 /* XMM register or double word memory operand */
513 xmm_md_mode,
514 /* XMM register or quad word memory operand */
515 xmm_mq_mode,
43234a1e
L
516 /* XMM register or double/quad word memory operand, depending on
517 VEX.W. */
518 xmm_mdq_mode,
519 /* 16-byte XMM, word, double word or quad word operand. */
6c30d220 520 xmmdw_mode,
43234a1e 521 /* 16-byte XMM, double word, quad word operand or xmm word operand. */
6c30d220 522 xmmqd_mode,
43234a1e
L
523 /* 32-byte YMM operand */
524 ymm_mode,
525 /* quad word, ymmword or zmmword memory operand. */
3873ba12 526 ymmq_mode,
6c30d220
L
527 /* 32-byte YMM or 16-byte word operand */
528 ymmxmm_mode,
51e7da1b 529 /* d_mode in 32bit, q_mode in 64bit mode. */
3873ba12 530 m_mode,
51e7da1b 531 /* pair of v_mode operands */
3873ba12
L
532 a_mode,
533 cond_jump_mode,
534 loop_jcxz_mode,
7e8b059b 535 v_bnd_mode,
51e7da1b 536 /* operand size depends on REX prefixes. */
3873ba12 537 dq_mode,
51e7da1b 538 /* registers like dq_mode, memory like w_mode. */
3873ba12 539 dqw_mode,
1ba585e8 540 dqw_swap_mode,
7e8b059b 541 bnd_mode,
51e7da1b 542 /* 4- or 6-byte pointer operand */
3873ba12
L
543 f_mode,
544 const_1_mode,
51e7da1b 545 /* v_mode for stack-related opcodes. */
3873ba12 546 stack_v_mode,
51e7da1b 547 /* non-quad operand size depends on prefixes */
3873ba12 548 z_mode,
51e7da1b 549 /* 16-byte operand */
3873ba12 550 o_mode,
51e7da1b 551 /* registers like dq_mode, memory like b_mode. */
3873ba12 552 dqb_mode,
1ba585e8
IT
553 /* registers like d_mode, memory like b_mode. */
554 db_mode,
555 /* registers like d_mode, memory like w_mode. */
556 dw_mode,
51e7da1b 557 /* registers like dq_mode, memory like d_mode. */
3873ba12 558 dqd_mode,
51e7da1b 559 /* normal vex mode */
3873ba12 560 vex_mode,
51e7da1b 561 /* 128bit vex mode */
3873ba12 562 vex128_mode,
51e7da1b 563 /* 256bit vex mode */
3873ba12 564 vex256_mode,
51e7da1b 565 /* operand size depends on the VEX.W bit. */
3873ba12 566 vex_w_dq_mode,
d55ee72f 567
6c30d220
L
568 /* Similar to vex_w_dq_mode, with VSIB dword indices. */
569 vex_vsib_d_w_dq_mode,
5fc35d96
IT
570 /* Similar to vex_vsib_d_w_dq_mode, with smaller memory. */
571 vex_vsib_d_w_d_mode,
6c30d220
L
572 /* Similar to vex_w_dq_mode, with VSIB qword indices. */
573 vex_vsib_q_w_dq_mode,
5fc35d96
IT
574 /* Similar to vex_vsib_q_w_dq_mode, with smaller memory. */
575 vex_vsib_q_w_d_mode,
6c30d220 576
539f890d
L
577 /* scalar, ignore vector length. */
578 scalar_mode,
579 /* like d_mode, ignore vector length. */
580 d_scalar_mode,
581 /* like d_swap_mode, ignore vector length. */
582 d_scalar_swap_mode,
583 /* like q_mode, ignore vector length. */
584 q_scalar_mode,
585 /* like q_swap_mode, ignore vector length. */
586 q_scalar_swap_mode,
587 /* like vex_mode, ignore vector length. */
588 vex_scalar_mode,
1c480963
L
589 /* like vex_w_dq_mode, ignore vector length. */
590 vex_scalar_w_dq_mode,
539f890d 591
43234a1e
L
592 /* Static rounding. */
593 evex_rounding_mode,
594 /* Supress all exceptions. */
595 evex_sae_mode,
596
597 /* Mask register operand. */
598 mask_mode,
1ba585e8
IT
599 /* Mask register operand. */
600 mask_bd_mode,
43234a1e 601
3873ba12
L
602 es_reg,
603 cs_reg,
604 ss_reg,
605 ds_reg,
606 fs_reg,
607 gs_reg,
d55ee72f 608
3873ba12
L
609 eAX_reg,
610 eCX_reg,
611 eDX_reg,
612 eBX_reg,
613 eSP_reg,
614 eBP_reg,
615 eSI_reg,
616 eDI_reg,
d55ee72f 617
3873ba12
L
618 al_reg,
619 cl_reg,
620 dl_reg,
621 bl_reg,
622 ah_reg,
623 ch_reg,
624 dh_reg,
625 bh_reg,
d55ee72f 626
3873ba12
L
627 ax_reg,
628 cx_reg,
629 dx_reg,
630 bx_reg,
631 sp_reg,
632 bp_reg,
633 si_reg,
634 di_reg,
d55ee72f 635
3873ba12
L
636 rAX_reg,
637 rCX_reg,
638 rDX_reg,
639 rBX_reg,
640 rSP_reg,
641 rBP_reg,
642 rSI_reg,
643 rDI_reg,
d55ee72f 644
3873ba12
L
645 z_mode_ax_reg,
646 indir_dx_reg
51e7da1b 647};
252b5132 648
51e7da1b
L
649enum
650{
651 FLOATCODE = 1,
3873ba12
L
652 USE_REG_TABLE,
653 USE_MOD_TABLE,
654 USE_RM_TABLE,
655 USE_PREFIX_TABLE,
656 USE_X86_64_TABLE,
657 USE_3BYTE_TABLE,
f88c9eb0 658 USE_XOP_8F_TABLE,
3873ba12
L
659 USE_VEX_C4_TABLE,
660 USE_VEX_C5_TABLE,
9e30b8e0 661 USE_VEX_LEN_TABLE,
43234a1e
L
662 USE_VEX_W_TABLE,
663 USE_EVEX_TABLE
51e7da1b 664};
6439fc28 665
1ceb70f8 666#define FLOAT NULL, { { NULL, FLOATCODE } }
4efba78c 667
4e7d34a6 668#define DIS386(T, I) NULL, { { NULL, (T)}, { NULL, (I) } }
1ceb70f8
L
669#define REG_TABLE(I) DIS386 (USE_REG_TABLE, (I))
670#define MOD_TABLE(I) DIS386 (USE_MOD_TABLE, (I))
671#define RM_TABLE(I) DIS386 (USE_RM_TABLE, (I))
672#define PREFIX_TABLE(I) DIS386 (USE_PREFIX_TABLE, (I))
4e7d34a6
L
673#define X86_64_TABLE(I) DIS386 (USE_X86_64_TABLE, (I))
674#define THREE_BYTE_TABLE(I) DIS386 (USE_3BYTE_TABLE, (I))
f88c9eb0 675#define XOP_8F_TABLE(I) DIS386 (USE_XOP_8F_TABLE, (I))
c0f3af97
L
676#define VEX_C4_TABLE(I) DIS386 (USE_VEX_C4_TABLE, (I))
677#define VEX_C5_TABLE(I) DIS386 (USE_VEX_C5_TABLE, (I))
678#define VEX_LEN_TABLE(I) DIS386 (USE_VEX_LEN_TABLE, (I))
9e30b8e0 679#define VEX_W_TABLE(I) DIS386 (USE_VEX_W_TABLE, (I))
43234a1e 680#define EVEX_TABLE(I) DIS386 (USE_EVEX_TABLE, (I))
1ceb70f8 681
51e7da1b
L
682enum
683{
684 REG_80 = 0,
3873ba12
L
685 REG_81,
686 REG_82,
687 REG_8F,
688 REG_C0,
689 REG_C1,
690 REG_C6,
691 REG_C7,
692 REG_D0,
693 REG_D1,
694 REG_D2,
695 REG_D3,
696 REG_F6,
697 REG_F7,
698 REG_FE,
699 REG_FF,
700 REG_0F00,
701 REG_0F01,
702 REG_0F0D,
703 REG_0F18,
704 REG_0F71,
705 REG_0F72,
706 REG_0F73,
707 REG_0FA6,
708 REG_0FA7,
709 REG_0FAE,
710 REG_0FBA,
711 REG_0FC7,
592a252b
L
712 REG_VEX_0F71,
713 REG_VEX_0F72,
714 REG_VEX_0F73,
715 REG_VEX_0FAE,
f12dc422 716 REG_VEX_0F38F3,
f88c9eb0 717 REG_XOP_LWPCB,
2a2a0f38
QN
718 REG_XOP_LWP,
719 REG_XOP_TBM_01,
43234a1e
L
720 REG_XOP_TBM_02,
721
1ba585e8 722 REG_EVEX_0F71,
43234a1e
L
723 REG_EVEX_0F72,
724 REG_EVEX_0F73,
725 REG_EVEX_0F38C6,
726 REG_EVEX_0F38C7
51e7da1b 727};
1ceb70f8 728
51e7da1b
L
729enum
730{
731 MOD_8D = 0,
42164a71
L
732 MOD_C6_REG_7,
733 MOD_C7_REG_7,
4a357820
MZ
734 MOD_FF_REG_3,
735 MOD_FF_REG_5,
3873ba12
L
736 MOD_0F01_REG_0,
737 MOD_0F01_REG_1,
738 MOD_0F01_REG_2,
739 MOD_0F01_REG_3,
740 MOD_0F01_REG_7,
741 MOD_0F12_PREFIX_0,
742 MOD_0F13,
743 MOD_0F16_PREFIX_0,
744 MOD_0F17,
745 MOD_0F18_REG_0,
746 MOD_0F18_REG_1,
747 MOD_0F18_REG_2,
748 MOD_0F18_REG_3,
d7189fa5
RM
749 MOD_0F18_REG_4,
750 MOD_0F18_REG_5,
751 MOD_0F18_REG_6,
752 MOD_0F18_REG_7,
7e8b059b
L
753 MOD_0F1A_PREFIX_0,
754 MOD_0F1B_PREFIX_0,
755 MOD_0F1B_PREFIX_1,
3873ba12
L
756 MOD_0F20,
757 MOD_0F21,
758 MOD_0F22,
759 MOD_0F23,
760 MOD_0F24,
761 MOD_0F26,
762 MOD_0F2B_PREFIX_0,
763 MOD_0F2B_PREFIX_1,
764 MOD_0F2B_PREFIX_2,
765 MOD_0F2B_PREFIX_3,
766 MOD_0F51,
767 MOD_0F71_REG_2,
768 MOD_0F71_REG_4,
769 MOD_0F71_REG_6,
770 MOD_0F72_REG_2,
771 MOD_0F72_REG_4,
772 MOD_0F72_REG_6,
773 MOD_0F73_REG_2,
774 MOD_0F73_REG_3,
775 MOD_0F73_REG_6,
776 MOD_0F73_REG_7,
777 MOD_0FAE_REG_0,
778 MOD_0FAE_REG_1,
779 MOD_0FAE_REG_2,
780 MOD_0FAE_REG_3,
781 MOD_0FAE_REG_4,
782 MOD_0FAE_REG_5,
783 MOD_0FAE_REG_6,
784 MOD_0FAE_REG_7,
785 MOD_0FB2,
786 MOD_0FB4,
787 MOD_0FB5,
963f3586
IT
788 MOD_0FC7_REG_3,
789 MOD_0FC7_REG_4,
790 MOD_0FC7_REG_5,
3873ba12
L
791 MOD_0FC7_REG_6,
792 MOD_0FC7_REG_7,
793 MOD_0FD7,
794 MOD_0FE7_PREFIX_2,
795 MOD_0FF0_PREFIX_3,
796 MOD_0F382A_PREFIX_2,
797 MOD_62_32BIT,
798 MOD_C4_32BIT,
799 MOD_C5_32BIT,
592a252b
L
800 MOD_VEX_0F12_PREFIX_0,
801 MOD_VEX_0F13,
802 MOD_VEX_0F16_PREFIX_0,
803 MOD_VEX_0F17,
804 MOD_VEX_0F2B,
805 MOD_VEX_0F50,
806 MOD_VEX_0F71_REG_2,
807 MOD_VEX_0F71_REG_4,
808 MOD_VEX_0F71_REG_6,
809 MOD_VEX_0F72_REG_2,
810 MOD_VEX_0F72_REG_4,
811 MOD_VEX_0F72_REG_6,
812 MOD_VEX_0F73_REG_2,
813 MOD_VEX_0F73_REG_3,
814 MOD_VEX_0F73_REG_6,
815 MOD_VEX_0F73_REG_7,
816 MOD_VEX_0FAE_REG_2,
817 MOD_VEX_0FAE_REG_3,
818 MOD_VEX_0FD7_PREFIX_2,
819 MOD_VEX_0FE7_PREFIX_2,
820 MOD_VEX_0FF0_PREFIX_3,
592a252b
L
821 MOD_VEX_0F381A_PREFIX_2,
822 MOD_VEX_0F382A_PREFIX_2,
823 MOD_VEX_0F382C_PREFIX_2,
824 MOD_VEX_0F382D_PREFIX_2,
825 MOD_VEX_0F382E_PREFIX_2,
6c30d220
L
826 MOD_VEX_0F382F_PREFIX_2,
827 MOD_VEX_0F385A_PREFIX_2,
828 MOD_VEX_0F388C_PREFIX_2,
829 MOD_VEX_0F388E_PREFIX_2,
43234a1e
L
830
831 MOD_EVEX_0F10_PREFIX_1,
832 MOD_EVEX_0F10_PREFIX_3,
833 MOD_EVEX_0F11_PREFIX_1,
834 MOD_EVEX_0F11_PREFIX_3,
835 MOD_EVEX_0F12_PREFIX_0,
836 MOD_EVEX_0F16_PREFIX_0,
837 MOD_EVEX_0F38C6_REG_1,
838 MOD_EVEX_0F38C6_REG_2,
839 MOD_EVEX_0F38C6_REG_5,
840 MOD_EVEX_0F38C6_REG_6,
841 MOD_EVEX_0F38C7_REG_1,
842 MOD_EVEX_0F38C7_REG_2,
843 MOD_EVEX_0F38C7_REG_5,
844 MOD_EVEX_0F38C7_REG_6
51e7da1b 845};
1ceb70f8 846
51e7da1b
L
847enum
848{
42164a71
L
849 RM_C6_REG_7 = 0,
850 RM_C7_REG_7,
851 RM_0F01_REG_0,
3873ba12
L
852 RM_0F01_REG_1,
853 RM_0F01_REG_2,
854 RM_0F01_REG_3,
855 RM_0F01_REG_7,
856 RM_0FAE_REG_5,
857 RM_0FAE_REG_6,
858 RM_0FAE_REG_7
51e7da1b 859};
1ceb70f8 860
51e7da1b
L
861enum
862{
863 PREFIX_90 = 0,
3873ba12
L
864 PREFIX_0F10,
865 PREFIX_0F11,
866 PREFIX_0F12,
867 PREFIX_0F16,
7e8b059b
L
868 PREFIX_0F1A,
869 PREFIX_0F1B,
3873ba12
L
870 PREFIX_0F2A,
871 PREFIX_0F2B,
872 PREFIX_0F2C,
873 PREFIX_0F2D,
874 PREFIX_0F2E,
875 PREFIX_0F2F,
876 PREFIX_0F51,
877 PREFIX_0F52,
878 PREFIX_0F53,
879 PREFIX_0F58,
880 PREFIX_0F59,
881 PREFIX_0F5A,
882 PREFIX_0F5B,
883 PREFIX_0F5C,
884 PREFIX_0F5D,
885 PREFIX_0F5E,
886 PREFIX_0F5F,
887 PREFIX_0F60,
888 PREFIX_0F61,
889 PREFIX_0F62,
890 PREFIX_0F6C,
891 PREFIX_0F6D,
892 PREFIX_0F6F,
893 PREFIX_0F70,
894 PREFIX_0F73_REG_3,
895 PREFIX_0F73_REG_7,
896 PREFIX_0F78,
897 PREFIX_0F79,
898 PREFIX_0F7C,
899 PREFIX_0F7D,
900 PREFIX_0F7E,
901 PREFIX_0F7F,
c7b8aa3a
L
902 PREFIX_0FAE_REG_0,
903 PREFIX_0FAE_REG_1,
904 PREFIX_0FAE_REG_2,
905 PREFIX_0FAE_REG_3,
963f3586 906 PREFIX_0FAE_REG_7,
3873ba12 907 PREFIX_0FB8,
f12dc422 908 PREFIX_0FBC,
3873ba12
L
909 PREFIX_0FBD,
910 PREFIX_0FC2,
911 PREFIX_0FC3,
912 PREFIX_0FC7_REG_6,
913 PREFIX_0FD0,
914 PREFIX_0FD6,
915 PREFIX_0FE6,
916 PREFIX_0FE7,
917 PREFIX_0FF0,
918 PREFIX_0FF7,
919 PREFIX_0F3810,
920 PREFIX_0F3814,
921 PREFIX_0F3815,
922 PREFIX_0F3817,
923 PREFIX_0F3820,
924 PREFIX_0F3821,
925 PREFIX_0F3822,
926 PREFIX_0F3823,
927 PREFIX_0F3824,
928 PREFIX_0F3825,
929 PREFIX_0F3828,
930 PREFIX_0F3829,
931 PREFIX_0F382A,
932 PREFIX_0F382B,
933 PREFIX_0F3830,
934 PREFIX_0F3831,
935 PREFIX_0F3832,
936 PREFIX_0F3833,
937 PREFIX_0F3834,
938 PREFIX_0F3835,
939 PREFIX_0F3837,
940 PREFIX_0F3838,
941 PREFIX_0F3839,
942 PREFIX_0F383A,
943 PREFIX_0F383B,
944 PREFIX_0F383C,
945 PREFIX_0F383D,
946 PREFIX_0F383E,
947 PREFIX_0F383F,
948 PREFIX_0F3840,
949 PREFIX_0F3841,
950 PREFIX_0F3880,
951 PREFIX_0F3881,
6c30d220 952 PREFIX_0F3882,
a0046408
L
953 PREFIX_0F38C8,
954 PREFIX_0F38C9,
955 PREFIX_0F38CA,
956 PREFIX_0F38CB,
957 PREFIX_0F38CC,
958 PREFIX_0F38CD,
3873ba12
L
959 PREFIX_0F38DB,
960 PREFIX_0F38DC,
961 PREFIX_0F38DD,
962 PREFIX_0F38DE,
963 PREFIX_0F38DF,
964 PREFIX_0F38F0,
965 PREFIX_0F38F1,
e2e1fcde 966 PREFIX_0F38F6,
3873ba12
L
967 PREFIX_0F3A08,
968 PREFIX_0F3A09,
969 PREFIX_0F3A0A,
970 PREFIX_0F3A0B,
971 PREFIX_0F3A0C,
972 PREFIX_0F3A0D,
973 PREFIX_0F3A0E,
974 PREFIX_0F3A14,
975 PREFIX_0F3A15,
976 PREFIX_0F3A16,
977 PREFIX_0F3A17,
978 PREFIX_0F3A20,
979 PREFIX_0F3A21,
980 PREFIX_0F3A22,
981 PREFIX_0F3A40,
982 PREFIX_0F3A41,
983 PREFIX_0F3A42,
984 PREFIX_0F3A44,
985 PREFIX_0F3A60,
986 PREFIX_0F3A61,
987 PREFIX_0F3A62,
988 PREFIX_0F3A63,
a0046408 989 PREFIX_0F3ACC,
3873ba12 990 PREFIX_0F3ADF,
592a252b
L
991 PREFIX_VEX_0F10,
992 PREFIX_VEX_0F11,
993 PREFIX_VEX_0F12,
994 PREFIX_VEX_0F16,
995 PREFIX_VEX_0F2A,
996 PREFIX_VEX_0F2C,
997 PREFIX_VEX_0F2D,
998 PREFIX_VEX_0F2E,
999 PREFIX_VEX_0F2F,
43234a1e
L
1000 PREFIX_VEX_0F41,
1001 PREFIX_VEX_0F42,
1002 PREFIX_VEX_0F44,
1003 PREFIX_VEX_0F45,
1004 PREFIX_VEX_0F46,
1005 PREFIX_VEX_0F47,
1ba585e8 1006 PREFIX_VEX_0F4A,
43234a1e 1007 PREFIX_VEX_0F4B,
592a252b
L
1008 PREFIX_VEX_0F51,
1009 PREFIX_VEX_0F52,
1010 PREFIX_VEX_0F53,
1011 PREFIX_VEX_0F58,
1012 PREFIX_VEX_0F59,
1013 PREFIX_VEX_0F5A,
1014 PREFIX_VEX_0F5B,
1015 PREFIX_VEX_0F5C,
1016 PREFIX_VEX_0F5D,
1017 PREFIX_VEX_0F5E,
1018 PREFIX_VEX_0F5F,
1019 PREFIX_VEX_0F60,
1020 PREFIX_VEX_0F61,
1021 PREFIX_VEX_0F62,
1022 PREFIX_VEX_0F63,
1023 PREFIX_VEX_0F64,
1024 PREFIX_VEX_0F65,
1025 PREFIX_VEX_0F66,
1026 PREFIX_VEX_0F67,
1027 PREFIX_VEX_0F68,
1028 PREFIX_VEX_0F69,
1029 PREFIX_VEX_0F6A,
1030 PREFIX_VEX_0F6B,
1031 PREFIX_VEX_0F6C,
1032 PREFIX_VEX_0F6D,
1033 PREFIX_VEX_0F6E,
1034 PREFIX_VEX_0F6F,
1035 PREFIX_VEX_0F70,
1036 PREFIX_VEX_0F71_REG_2,
1037 PREFIX_VEX_0F71_REG_4,
1038 PREFIX_VEX_0F71_REG_6,
1039 PREFIX_VEX_0F72_REG_2,
1040 PREFIX_VEX_0F72_REG_4,
1041 PREFIX_VEX_0F72_REG_6,
1042 PREFIX_VEX_0F73_REG_2,
1043 PREFIX_VEX_0F73_REG_3,
1044 PREFIX_VEX_0F73_REG_6,
1045 PREFIX_VEX_0F73_REG_7,
1046 PREFIX_VEX_0F74,
1047 PREFIX_VEX_0F75,
1048 PREFIX_VEX_0F76,
1049 PREFIX_VEX_0F77,
1050 PREFIX_VEX_0F7C,
1051 PREFIX_VEX_0F7D,
1052 PREFIX_VEX_0F7E,
1053 PREFIX_VEX_0F7F,
43234a1e
L
1054 PREFIX_VEX_0F90,
1055 PREFIX_VEX_0F91,
1056 PREFIX_VEX_0F92,
1057 PREFIX_VEX_0F93,
1058 PREFIX_VEX_0F98,
1ba585e8 1059 PREFIX_VEX_0F99,
592a252b
L
1060 PREFIX_VEX_0FC2,
1061 PREFIX_VEX_0FC4,
1062 PREFIX_VEX_0FC5,
1063 PREFIX_VEX_0FD0,
1064 PREFIX_VEX_0FD1,
1065 PREFIX_VEX_0FD2,
1066 PREFIX_VEX_0FD3,
1067 PREFIX_VEX_0FD4,
1068 PREFIX_VEX_0FD5,
1069 PREFIX_VEX_0FD6,
1070 PREFIX_VEX_0FD7,
1071 PREFIX_VEX_0FD8,
1072 PREFIX_VEX_0FD9,
1073 PREFIX_VEX_0FDA,
1074 PREFIX_VEX_0FDB,
1075 PREFIX_VEX_0FDC,
1076 PREFIX_VEX_0FDD,
1077 PREFIX_VEX_0FDE,
1078 PREFIX_VEX_0FDF,
1079 PREFIX_VEX_0FE0,
1080 PREFIX_VEX_0FE1,
1081 PREFIX_VEX_0FE2,
1082 PREFIX_VEX_0FE3,
1083 PREFIX_VEX_0FE4,
1084 PREFIX_VEX_0FE5,
1085 PREFIX_VEX_0FE6,
1086 PREFIX_VEX_0FE7,
1087 PREFIX_VEX_0FE8,
1088 PREFIX_VEX_0FE9,
1089 PREFIX_VEX_0FEA,
1090 PREFIX_VEX_0FEB,
1091 PREFIX_VEX_0FEC,
1092 PREFIX_VEX_0FED,
1093 PREFIX_VEX_0FEE,
1094 PREFIX_VEX_0FEF,
1095 PREFIX_VEX_0FF0,
1096 PREFIX_VEX_0FF1,
1097 PREFIX_VEX_0FF2,
1098 PREFIX_VEX_0FF3,
1099 PREFIX_VEX_0FF4,
1100 PREFIX_VEX_0FF5,
1101 PREFIX_VEX_0FF6,
1102 PREFIX_VEX_0FF7,
1103 PREFIX_VEX_0FF8,
1104 PREFIX_VEX_0FF9,
1105 PREFIX_VEX_0FFA,
1106 PREFIX_VEX_0FFB,
1107 PREFIX_VEX_0FFC,
1108 PREFIX_VEX_0FFD,
1109 PREFIX_VEX_0FFE,
1110 PREFIX_VEX_0F3800,
1111 PREFIX_VEX_0F3801,
1112 PREFIX_VEX_0F3802,
1113 PREFIX_VEX_0F3803,
1114 PREFIX_VEX_0F3804,
1115 PREFIX_VEX_0F3805,
1116 PREFIX_VEX_0F3806,
1117 PREFIX_VEX_0F3807,
1118 PREFIX_VEX_0F3808,
1119 PREFIX_VEX_0F3809,
1120 PREFIX_VEX_0F380A,
1121 PREFIX_VEX_0F380B,
1122 PREFIX_VEX_0F380C,
1123 PREFIX_VEX_0F380D,
1124 PREFIX_VEX_0F380E,
1125 PREFIX_VEX_0F380F,
1126 PREFIX_VEX_0F3813,
6c30d220 1127 PREFIX_VEX_0F3816,
592a252b
L
1128 PREFIX_VEX_0F3817,
1129 PREFIX_VEX_0F3818,
1130 PREFIX_VEX_0F3819,
1131 PREFIX_VEX_0F381A,
1132 PREFIX_VEX_0F381C,
1133 PREFIX_VEX_0F381D,
1134 PREFIX_VEX_0F381E,
1135 PREFIX_VEX_0F3820,
1136 PREFIX_VEX_0F3821,
1137 PREFIX_VEX_0F3822,
1138 PREFIX_VEX_0F3823,
1139 PREFIX_VEX_0F3824,
1140 PREFIX_VEX_0F3825,
1141 PREFIX_VEX_0F3828,
1142 PREFIX_VEX_0F3829,
1143 PREFIX_VEX_0F382A,
1144 PREFIX_VEX_0F382B,
1145 PREFIX_VEX_0F382C,
1146 PREFIX_VEX_0F382D,
1147 PREFIX_VEX_0F382E,
1148 PREFIX_VEX_0F382F,
1149 PREFIX_VEX_0F3830,
1150 PREFIX_VEX_0F3831,
1151 PREFIX_VEX_0F3832,
1152 PREFIX_VEX_0F3833,
1153 PREFIX_VEX_0F3834,
1154 PREFIX_VEX_0F3835,
6c30d220 1155 PREFIX_VEX_0F3836,
592a252b
L
1156 PREFIX_VEX_0F3837,
1157 PREFIX_VEX_0F3838,
1158 PREFIX_VEX_0F3839,
1159 PREFIX_VEX_0F383A,
1160 PREFIX_VEX_0F383B,
1161 PREFIX_VEX_0F383C,
1162 PREFIX_VEX_0F383D,
1163 PREFIX_VEX_0F383E,
1164 PREFIX_VEX_0F383F,
1165 PREFIX_VEX_0F3840,
1166 PREFIX_VEX_0F3841,
6c30d220
L
1167 PREFIX_VEX_0F3845,
1168 PREFIX_VEX_0F3846,
1169 PREFIX_VEX_0F3847,
1170 PREFIX_VEX_0F3858,
1171 PREFIX_VEX_0F3859,
1172 PREFIX_VEX_0F385A,
1173 PREFIX_VEX_0F3878,
1174 PREFIX_VEX_0F3879,
1175 PREFIX_VEX_0F388C,
1176 PREFIX_VEX_0F388E,
1177 PREFIX_VEX_0F3890,
1178 PREFIX_VEX_0F3891,
1179 PREFIX_VEX_0F3892,
1180 PREFIX_VEX_0F3893,
592a252b
L
1181 PREFIX_VEX_0F3896,
1182 PREFIX_VEX_0F3897,
1183 PREFIX_VEX_0F3898,
1184 PREFIX_VEX_0F3899,
1185 PREFIX_VEX_0F389A,
1186 PREFIX_VEX_0F389B,
1187 PREFIX_VEX_0F389C,
1188 PREFIX_VEX_0F389D,
1189 PREFIX_VEX_0F389E,
1190 PREFIX_VEX_0F389F,
1191 PREFIX_VEX_0F38A6,
1192 PREFIX_VEX_0F38A7,
1193 PREFIX_VEX_0F38A8,
1194 PREFIX_VEX_0F38A9,
1195 PREFIX_VEX_0F38AA,
1196 PREFIX_VEX_0F38AB,
1197 PREFIX_VEX_0F38AC,
1198 PREFIX_VEX_0F38AD,
1199 PREFIX_VEX_0F38AE,
1200 PREFIX_VEX_0F38AF,
1201 PREFIX_VEX_0F38B6,
1202 PREFIX_VEX_0F38B7,
1203 PREFIX_VEX_0F38B8,
1204 PREFIX_VEX_0F38B9,
1205 PREFIX_VEX_0F38BA,
1206 PREFIX_VEX_0F38BB,
1207 PREFIX_VEX_0F38BC,
1208 PREFIX_VEX_0F38BD,
1209 PREFIX_VEX_0F38BE,
1210 PREFIX_VEX_0F38BF,
1211 PREFIX_VEX_0F38DB,
1212 PREFIX_VEX_0F38DC,
1213 PREFIX_VEX_0F38DD,
1214 PREFIX_VEX_0F38DE,
1215 PREFIX_VEX_0F38DF,
f12dc422
L
1216 PREFIX_VEX_0F38F2,
1217 PREFIX_VEX_0F38F3_REG_1,
1218 PREFIX_VEX_0F38F3_REG_2,
1219 PREFIX_VEX_0F38F3_REG_3,
6c30d220
L
1220 PREFIX_VEX_0F38F5,
1221 PREFIX_VEX_0F38F6,
f12dc422 1222 PREFIX_VEX_0F38F7,
6c30d220
L
1223 PREFIX_VEX_0F3A00,
1224 PREFIX_VEX_0F3A01,
1225 PREFIX_VEX_0F3A02,
592a252b
L
1226 PREFIX_VEX_0F3A04,
1227 PREFIX_VEX_0F3A05,
1228 PREFIX_VEX_0F3A06,
1229 PREFIX_VEX_0F3A08,
1230 PREFIX_VEX_0F3A09,
1231 PREFIX_VEX_0F3A0A,
1232 PREFIX_VEX_0F3A0B,
1233 PREFIX_VEX_0F3A0C,
1234 PREFIX_VEX_0F3A0D,
1235 PREFIX_VEX_0F3A0E,
1236 PREFIX_VEX_0F3A0F,
1237 PREFIX_VEX_0F3A14,
1238 PREFIX_VEX_0F3A15,
1239 PREFIX_VEX_0F3A16,
1240 PREFIX_VEX_0F3A17,
1241 PREFIX_VEX_0F3A18,
1242 PREFIX_VEX_0F3A19,
1243 PREFIX_VEX_0F3A1D,
1244 PREFIX_VEX_0F3A20,
1245 PREFIX_VEX_0F3A21,
1246 PREFIX_VEX_0F3A22,
43234a1e 1247 PREFIX_VEX_0F3A30,
1ba585e8 1248 PREFIX_VEX_0F3A31,
43234a1e 1249 PREFIX_VEX_0F3A32,
1ba585e8 1250 PREFIX_VEX_0F3A33,
6c30d220
L
1251 PREFIX_VEX_0F3A38,
1252 PREFIX_VEX_0F3A39,
592a252b
L
1253 PREFIX_VEX_0F3A40,
1254 PREFIX_VEX_0F3A41,
1255 PREFIX_VEX_0F3A42,
1256 PREFIX_VEX_0F3A44,
6c30d220 1257 PREFIX_VEX_0F3A46,
592a252b
L
1258 PREFIX_VEX_0F3A48,
1259 PREFIX_VEX_0F3A49,
1260 PREFIX_VEX_0F3A4A,
1261 PREFIX_VEX_0F3A4B,
1262 PREFIX_VEX_0F3A4C,
1263 PREFIX_VEX_0F3A5C,
1264 PREFIX_VEX_0F3A5D,
1265 PREFIX_VEX_0F3A5E,
1266 PREFIX_VEX_0F3A5F,
1267 PREFIX_VEX_0F3A60,
1268 PREFIX_VEX_0F3A61,
1269 PREFIX_VEX_0F3A62,
1270 PREFIX_VEX_0F3A63,
1271 PREFIX_VEX_0F3A68,
1272 PREFIX_VEX_0F3A69,
1273 PREFIX_VEX_0F3A6A,
1274 PREFIX_VEX_0F3A6B,
1275 PREFIX_VEX_0F3A6C,
1276 PREFIX_VEX_0F3A6D,
1277 PREFIX_VEX_0F3A6E,
1278 PREFIX_VEX_0F3A6F,
1279 PREFIX_VEX_0F3A78,
1280 PREFIX_VEX_0F3A79,
1281 PREFIX_VEX_0F3A7A,
1282 PREFIX_VEX_0F3A7B,
1283 PREFIX_VEX_0F3A7C,
1284 PREFIX_VEX_0F3A7D,
1285 PREFIX_VEX_0F3A7E,
1286 PREFIX_VEX_0F3A7F,
6c30d220 1287 PREFIX_VEX_0F3ADF,
43234a1e
L
1288 PREFIX_VEX_0F3AF0,
1289
1290 PREFIX_EVEX_0F10,
1291 PREFIX_EVEX_0F11,
1292 PREFIX_EVEX_0F12,
1293 PREFIX_EVEX_0F13,
1294 PREFIX_EVEX_0F14,
1295 PREFIX_EVEX_0F15,
1296 PREFIX_EVEX_0F16,
1297 PREFIX_EVEX_0F17,
1298 PREFIX_EVEX_0F28,
1299 PREFIX_EVEX_0F29,
1300 PREFIX_EVEX_0F2A,
1301 PREFIX_EVEX_0F2B,
1302 PREFIX_EVEX_0F2C,
1303 PREFIX_EVEX_0F2D,
1304 PREFIX_EVEX_0F2E,
1305 PREFIX_EVEX_0F2F,
1306 PREFIX_EVEX_0F51,
90a915bf
IT
1307 PREFIX_EVEX_0F54,
1308 PREFIX_EVEX_0F55,
1309 PREFIX_EVEX_0F56,
1310 PREFIX_EVEX_0F57,
43234a1e
L
1311 PREFIX_EVEX_0F58,
1312 PREFIX_EVEX_0F59,
1313 PREFIX_EVEX_0F5A,
1314 PREFIX_EVEX_0F5B,
1315 PREFIX_EVEX_0F5C,
1316 PREFIX_EVEX_0F5D,
1317 PREFIX_EVEX_0F5E,
1318 PREFIX_EVEX_0F5F,
1ba585e8
IT
1319 PREFIX_EVEX_0F60,
1320 PREFIX_EVEX_0F61,
43234a1e 1321 PREFIX_EVEX_0F62,
1ba585e8
IT
1322 PREFIX_EVEX_0F63,
1323 PREFIX_EVEX_0F64,
1324 PREFIX_EVEX_0F65,
43234a1e 1325 PREFIX_EVEX_0F66,
1ba585e8
IT
1326 PREFIX_EVEX_0F67,
1327 PREFIX_EVEX_0F68,
1328 PREFIX_EVEX_0F69,
43234a1e 1329 PREFIX_EVEX_0F6A,
1ba585e8 1330 PREFIX_EVEX_0F6B,
43234a1e
L
1331 PREFIX_EVEX_0F6C,
1332 PREFIX_EVEX_0F6D,
1333 PREFIX_EVEX_0F6E,
1334 PREFIX_EVEX_0F6F,
1335 PREFIX_EVEX_0F70,
1ba585e8
IT
1336 PREFIX_EVEX_0F71_REG_2,
1337 PREFIX_EVEX_0F71_REG_4,
1338 PREFIX_EVEX_0F71_REG_6,
43234a1e
L
1339 PREFIX_EVEX_0F72_REG_0,
1340 PREFIX_EVEX_0F72_REG_1,
1341 PREFIX_EVEX_0F72_REG_2,
1342 PREFIX_EVEX_0F72_REG_4,
1343 PREFIX_EVEX_0F72_REG_6,
1344 PREFIX_EVEX_0F73_REG_2,
1ba585e8 1345 PREFIX_EVEX_0F73_REG_3,
43234a1e 1346 PREFIX_EVEX_0F73_REG_6,
1ba585e8
IT
1347 PREFIX_EVEX_0F73_REG_7,
1348 PREFIX_EVEX_0F74,
1349 PREFIX_EVEX_0F75,
43234a1e
L
1350 PREFIX_EVEX_0F76,
1351 PREFIX_EVEX_0F78,
1352 PREFIX_EVEX_0F79,
1353 PREFIX_EVEX_0F7A,
1354 PREFIX_EVEX_0F7B,
1355 PREFIX_EVEX_0F7E,
1356 PREFIX_EVEX_0F7F,
1357 PREFIX_EVEX_0FC2,
1ba585e8
IT
1358 PREFIX_EVEX_0FC4,
1359 PREFIX_EVEX_0FC5,
43234a1e 1360 PREFIX_EVEX_0FC6,
1ba585e8 1361 PREFIX_EVEX_0FD1,
43234a1e
L
1362 PREFIX_EVEX_0FD2,
1363 PREFIX_EVEX_0FD3,
1364 PREFIX_EVEX_0FD4,
1ba585e8 1365 PREFIX_EVEX_0FD5,
43234a1e 1366 PREFIX_EVEX_0FD6,
1ba585e8
IT
1367 PREFIX_EVEX_0FD8,
1368 PREFIX_EVEX_0FD9,
1369 PREFIX_EVEX_0FDA,
43234a1e 1370 PREFIX_EVEX_0FDB,
1ba585e8
IT
1371 PREFIX_EVEX_0FDC,
1372 PREFIX_EVEX_0FDD,
1373 PREFIX_EVEX_0FDE,
43234a1e 1374 PREFIX_EVEX_0FDF,
1ba585e8
IT
1375 PREFIX_EVEX_0FE0,
1376 PREFIX_EVEX_0FE1,
43234a1e 1377 PREFIX_EVEX_0FE2,
1ba585e8
IT
1378 PREFIX_EVEX_0FE3,
1379 PREFIX_EVEX_0FE4,
1380 PREFIX_EVEX_0FE5,
43234a1e
L
1381 PREFIX_EVEX_0FE6,
1382 PREFIX_EVEX_0FE7,
1ba585e8
IT
1383 PREFIX_EVEX_0FE8,
1384 PREFIX_EVEX_0FE9,
1385 PREFIX_EVEX_0FEA,
43234a1e 1386 PREFIX_EVEX_0FEB,
1ba585e8
IT
1387 PREFIX_EVEX_0FEC,
1388 PREFIX_EVEX_0FED,
1389 PREFIX_EVEX_0FEE,
43234a1e 1390 PREFIX_EVEX_0FEF,
1ba585e8 1391 PREFIX_EVEX_0FF1,
43234a1e
L
1392 PREFIX_EVEX_0FF2,
1393 PREFIX_EVEX_0FF3,
1394 PREFIX_EVEX_0FF4,
1ba585e8
IT
1395 PREFIX_EVEX_0FF5,
1396 PREFIX_EVEX_0FF6,
1397 PREFIX_EVEX_0FF8,
1398 PREFIX_EVEX_0FF9,
43234a1e
L
1399 PREFIX_EVEX_0FFA,
1400 PREFIX_EVEX_0FFB,
1ba585e8
IT
1401 PREFIX_EVEX_0FFC,
1402 PREFIX_EVEX_0FFD,
43234a1e 1403 PREFIX_EVEX_0FFE,
1ba585e8
IT
1404 PREFIX_EVEX_0F3800,
1405 PREFIX_EVEX_0F3804,
1406 PREFIX_EVEX_0F380B,
43234a1e
L
1407 PREFIX_EVEX_0F380C,
1408 PREFIX_EVEX_0F380D,
1ba585e8 1409 PREFIX_EVEX_0F3810,
43234a1e
L
1410 PREFIX_EVEX_0F3811,
1411 PREFIX_EVEX_0F3812,
1412 PREFIX_EVEX_0F3813,
1413 PREFIX_EVEX_0F3814,
1414 PREFIX_EVEX_0F3815,
1415 PREFIX_EVEX_0F3816,
1416 PREFIX_EVEX_0F3818,
1417 PREFIX_EVEX_0F3819,
1418 PREFIX_EVEX_0F381A,
1419 PREFIX_EVEX_0F381B,
1ba585e8
IT
1420 PREFIX_EVEX_0F381C,
1421 PREFIX_EVEX_0F381D,
43234a1e
L
1422 PREFIX_EVEX_0F381E,
1423 PREFIX_EVEX_0F381F,
1ba585e8 1424 PREFIX_EVEX_0F3820,
43234a1e
L
1425 PREFIX_EVEX_0F3821,
1426 PREFIX_EVEX_0F3822,
1427 PREFIX_EVEX_0F3823,
1428 PREFIX_EVEX_0F3824,
1429 PREFIX_EVEX_0F3825,
1ba585e8 1430 PREFIX_EVEX_0F3826,
43234a1e
L
1431 PREFIX_EVEX_0F3827,
1432 PREFIX_EVEX_0F3828,
1433 PREFIX_EVEX_0F3829,
1434 PREFIX_EVEX_0F382A,
1ba585e8 1435 PREFIX_EVEX_0F382B,
43234a1e
L
1436 PREFIX_EVEX_0F382C,
1437 PREFIX_EVEX_0F382D,
1ba585e8 1438 PREFIX_EVEX_0F3830,
43234a1e
L
1439 PREFIX_EVEX_0F3831,
1440 PREFIX_EVEX_0F3832,
1441 PREFIX_EVEX_0F3833,
1442 PREFIX_EVEX_0F3834,
1443 PREFIX_EVEX_0F3835,
1444 PREFIX_EVEX_0F3836,
1445 PREFIX_EVEX_0F3837,
1ba585e8 1446 PREFIX_EVEX_0F3838,
43234a1e
L
1447 PREFIX_EVEX_0F3839,
1448 PREFIX_EVEX_0F383A,
1449 PREFIX_EVEX_0F383B,
1ba585e8 1450 PREFIX_EVEX_0F383C,
43234a1e 1451 PREFIX_EVEX_0F383D,
1ba585e8 1452 PREFIX_EVEX_0F383E,
43234a1e
L
1453 PREFIX_EVEX_0F383F,
1454 PREFIX_EVEX_0F3840,
1455 PREFIX_EVEX_0F3842,
1456 PREFIX_EVEX_0F3843,
1457 PREFIX_EVEX_0F3844,
1458 PREFIX_EVEX_0F3845,
1459 PREFIX_EVEX_0F3846,
1460 PREFIX_EVEX_0F3847,
1461 PREFIX_EVEX_0F384C,
1462 PREFIX_EVEX_0F384D,
1463 PREFIX_EVEX_0F384E,
1464 PREFIX_EVEX_0F384F,
1465 PREFIX_EVEX_0F3858,
1466 PREFIX_EVEX_0F3859,
1467 PREFIX_EVEX_0F385A,
1468 PREFIX_EVEX_0F385B,
1469 PREFIX_EVEX_0F3864,
1470 PREFIX_EVEX_0F3865,
1ba585e8
IT
1471 PREFIX_EVEX_0F3866,
1472 PREFIX_EVEX_0F3875,
43234a1e
L
1473 PREFIX_EVEX_0F3876,
1474 PREFIX_EVEX_0F3877,
1ba585e8
IT
1475 PREFIX_EVEX_0F3878,
1476 PREFIX_EVEX_0F3879,
1477 PREFIX_EVEX_0F387A,
1478 PREFIX_EVEX_0F387B,
43234a1e 1479 PREFIX_EVEX_0F387C,
1ba585e8 1480 PREFIX_EVEX_0F387D,
43234a1e
L
1481 PREFIX_EVEX_0F387E,
1482 PREFIX_EVEX_0F387F,
1483 PREFIX_EVEX_0F3888,
1484 PREFIX_EVEX_0F3889,
1485 PREFIX_EVEX_0F388A,
1486 PREFIX_EVEX_0F388B,
1ba585e8 1487 PREFIX_EVEX_0F388D,
43234a1e
L
1488 PREFIX_EVEX_0F3890,
1489 PREFIX_EVEX_0F3891,
1490 PREFIX_EVEX_0F3892,
1491 PREFIX_EVEX_0F3893,
1492 PREFIX_EVEX_0F3896,
1493 PREFIX_EVEX_0F3897,
1494 PREFIX_EVEX_0F3898,
1495 PREFIX_EVEX_0F3899,
1496 PREFIX_EVEX_0F389A,
1497 PREFIX_EVEX_0F389B,
1498 PREFIX_EVEX_0F389C,
1499 PREFIX_EVEX_0F389D,
1500 PREFIX_EVEX_0F389E,
1501 PREFIX_EVEX_0F389F,
1502 PREFIX_EVEX_0F38A0,
1503 PREFIX_EVEX_0F38A1,
1504 PREFIX_EVEX_0F38A2,
1505 PREFIX_EVEX_0F38A3,
1506 PREFIX_EVEX_0F38A6,
1507 PREFIX_EVEX_0F38A7,
1508 PREFIX_EVEX_0F38A8,
1509 PREFIX_EVEX_0F38A9,
1510 PREFIX_EVEX_0F38AA,
1511 PREFIX_EVEX_0F38AB,
1512 PREFIX_EVEX_0F38AC,
1513 PREFIX_EVEX_0F38AD,
1514 PREFIX_EVEX_0F38AE,
1515 PREFIX_EVEX_0F38AF,
1516 PREFIX_EVEX_0F38B6,
1517 PREFIX_EVEX_0F38B7,
1518 PREFIX_EVEX_0F38B8,
1519 PREFIX_EVEX_0F38B9,
1520 PREFIX_EVEX_0F38BA,
1521 PREFIX_EVEX_0F38BB,
1522 PREFIX_EVEX_0F38BC,
1523 PREFIX_EVEX_0F38BD,
1524 PREFIX_EVEX_0F38BE,
1525 PREFIX_EVEX_0F38BF,
1526 PREFIX_EVEX_0F38C4,
1527 PREFIX_EVEX_0F38C6_REG_1,
1528 PREFIX_EVEX_0F38C6_REG_2,
1529 PREFIX_EVEX_0F38C6_REG_5,
1530 PREFIX_EVEX_0F38C6_REG_6,
1531 PREFIX_EVEX_0F38C7_REG_1,
1532 PREFIX_EVEX_0F38C7_REG_2,
1533 PREFIX_EVEX_0F38C7_REG_5,
1534 PREFIX_EVEX_0F38C7_REG_6,
1535 PREFIX_EVEX_0F38C8,
1536 PREFIX_EVEX_0F38CA,
1537 PREFIX_EVEX_0F38CB,
1538 PREFIX_EVEX_0F38CC,
1539 PREFIX_EVEX_0F38CD,
1540
1541 PREFIX_EVEX_0F3A00,
1542 PREFIX_EVEX_0F3A01,
1543 PREFIX_EVEX_0F3A03,
1544 PREFIX_EVEX_0F3A04,
1545 PREFIX_EVEX_0F3A05,
1546 PREFIX_EVEX_0F3A08,
1547 PREFIX_EVEX_0F3A09,
1548 PREFIX_EVEX_0F3A0A,
1549 PREFIX_EVEX_0F3A0B,
1ba585e8
IT
1550 PREFIX_EVEX_0F3A0F,
1551 PREFIX_EVEX_0F3A14,
1552 PREFIX_EVEX_0F3A15,
90a915bf 1553 PREFIX_EVEX_0F3A16,
43234a1e
L
1554 PREFIX_EVEX_0F3A17,
1555 PREFIX_EVEX_0F3A18,
1556 PREFIX_EVEX_0F3A19,
1557 PREFIX_EVEX_0F3A1A,
1558 PREFIX_EVEX_0F3A1B,
1559 PREFIX_EVEX_0F3A1D,
1560 PREFIX_EVEX_0F3A1E,
1561 PREFIX_EVEX_0F3A1F,
1ba585e8 1562 PREFIX_EVEX_0F3A20,
43234a1e 1563 PREFIX_EVEX_0F3A21,
90a915bf 1564 PREFIX_EVEX_0F3A22,
43234a1e
L
1565 PREFIX_EVEX_0F3A23,
1566 PREFIX_EVEX_0F3A25,
1567 PREFIX_EVEX_0F3A26,
1568 PREFIX_EVEX_0F3A27,
1569 PREFIX_EVEX_0F3A38,
1570 PREFIX_EVEX_0F3A39,
1571 PREFIX_EVEX_0F3A3A,
1572 PREFIX_EVEX_0F3A3B,
1ba585e8
IT
1573 PREFIX_EVEX_0F3A3E,
1574 PREFIX_EVEX_0F3A3F,
1575 PREFIX_EVEX_0F3A42,
43234a1e 1576 PREFIX_EVEX_0F3A43,
90a915bf
IT
1577 PREFIX_EVEX_0F3A50,
1578 PREFIX_EVEX_0F3A51,
43234a1e 1579 PREFIX_EVEX_0F3A54,
90a915bf
IT
1580 PREFIX_EVEX_0F3A55,
1581 PREFIX_EVEX_0F3A56,
1582 PREFIX_EVEX_0F3A57,
1583 PREFIX_EVEX_0F3A66,
1584 PREFIX_EVEX_0F3A67
51e7da1b 1585};
4e7d34a6 1586
51e7da1b
L
1587enum
1588{
1589 X86_64_06 = 0,
3873ba12
L
1590 X86_64_07,
1591 X86_64_0D,
1592 X86_64_16,
1593 X86_64_17,
1594 X86_64_1E,
1595 X86_64_1F,
1596 X86_64_27,
1597 X86_64_2F,
1598 X86_64_37,
1599 X86_64_3F,
1600 X86_64_60,
1601 X86_64_61,
1602 X86_64_62,
1603 X86_64_63,
1604 X86_64_6D,
1605 X86_64_6F,
1606 X86_64_9A,
1607 X86_64_C4,
1608 X86_64_C5,
1609 X86_64_CE,
1610 X86_64_D4,
1611 X86_64_D5,
1612 X86_64_EA,
1613 X86_64_0F01_REG_0,
1614 X86_64_0F01_REG_1,
1615 X86_64_0F01_REG_2,
1616 X86_64_0F01_REG_3
51e7da1b 1617};
4e7d34a6 1618
51e7da1b
L
1619enum
1620{
1621 THREE_BYTE_0F38 = 0,
3873ba12
L
1622 THREE_BYTE_0F3A,
1623 THREE_BYTE_0F7A
51e7da1b 1624};
4e7d34a6 1625
f88c9eb0
SP
1626enum
1627{
5dd85c99
SP
1628 XOP_08 = 0,
1629 XOP_09,
f88c9eb0
SP
1630 XOP_0A
1631};
1632
51e7da1b
L
1633enum
1634{
1635 VEX_0F = 0,
3873ba12
L
1636 VEX_0F38,
1637 VEX_0F3A
51e7da1b 1638};
c0f3af97 1639
43234a1e
L
1640enum
1641{
1642 EVEX_0F = 0,
1643 EVEX_0F38,
1644 EVEX_0F3A
1645};
1646
51e7da1b
L
1647enum
1648{
592a252b
L
1649 VEX_LEN_0F10_P_1 = 0,
1650 VEX_LEN_0F10_P_3,
1651 VEX_LEN_0F11_P_1,
1652 VEX_LEN_0F11_P_3,
1653 VEX_LEN_0F12_P_0_M_0,
1654 VEX_LEN_0F12_P_0_M_1,
1655 VEX_LEN_0F12_P_2,
1656 VEX_LEN_0F13_M_0,
1657 VEX_LEN_0F16_P_0_M_0,
1658 VEX_LEN_0F16_P_0_M_1,
1659 VEX_LEN_0F16_P_2,
1660 VEX_LEN_0F17_M_0,
1661 VEX_LEN_0F2A_P_1,
1662 VEX_LEN_0F2A_P_3,
1663 VEX_LEN_0F2C_P_1,
1664 VEX_LEN_0F2C_P_3,
1665 VEX_LEN_0F2D_P_1,
1666 VEX_LEN_0F2D_P_3,
1667 VEX_LEN_0F2E_P_0,
1668 VEX_LEN_0F2E_P_2,
1669 VEX_LEN_0F2F_P_0,
1670 VEX_LEN_0F2F_P_2,
43234a1e 1671 VEX_LEN_0F41_P_0,
1ba585e8 1672 VEX_LEN_0F41_P_2,
43234a1e 1673 VEX_LEN_0F42_P_0,
1ba585e8 1674 VEX_LEN_0F42_P_2,
43234a1e 1675 VEX_LEN_0F44_P_0,
1ba585e8 1676 VEX_LEN_0F44_P_2,
43234a1e 1677 VEX_LEN_0F45_P_0,
1ba585e8 1678 VEX_LEN_0F45_P_2,
43234a1e 1679 VEX_LEN_0F46_P_0,
1ba585e8 1680 VEX_LEN_0F46_P_2,
43234a1e 1681 VEX_LEN_0F47_P_0,
1ba585e8
IT
1682 VEX_LEN_0F47_P_2,
1683 VEX_LEN_0F4A_P_0,
1684 VEX_LEN_0F4A_P_2,
1685 VEX_LEN_0F4B_P_0,
43234a1e 1686 VEX_LEN_0F4B_P_2,
592a252b
L
1687 VEX_LEN_0F51_P_1,
1688 VEX_LEN_0F51_P_3,
1689 VEX_LEN_0F52_P_1,
1690 VEX_LEN_0F53_P_1,
1691 VEX_LEN_0F58_P_1,
1692 VEX_LEN_0F58_P_3,
1693 VEX_LEN_0F59_P_1,
1694 VEX_LEN_0F59_P_3,
1695 VEX_LEN_0F5A_P_1,
1696 VEX_LEN_0F5A_P_3,
1697 VEX_LEN_0F5C_P_1,
1698 VEX_LEN_0F5C_P_3,
1699 VEX_LEN_0F5D_P_1,
1700 VEX_LEN_0F5D_P_3,
1701 VEX_LEN_0F5E_P_1,
1702 VEX_LEN_0F5E_P_3,
1703 VEX_LEN_0F5F_P_1,
1704 VEX_LEN_0F5F_P_3,
592a252b 1705 VEX_LEN_0F6E_P_2,
592a252b
L
1706 VEX_LEN_0F7E_P_1,
1707 VEX_LEN_0F7E_P_2,
43234a1e 1708 VEX_LEN_0F90_P_0,
1ba585e8 1709 VEX_LEN_0F90_P_2,
43234a1e 1710 VEX_LEN_0F91_P_0,
1ba585e8 1711 VEX_LEN_0F91_P_2,
43234a1e 1712 VEX_LEN_0F92_P_0,
90a915bf 1713 VEX_LEN_0F92_P_2,
1ba585e8 1714 VEX_LEN_0F92_P_3,
43234a1e 1715 VEX_LEN_0F93_P_0,
90a915bf 1716 VEX_LEN_0F93_P_2,
1ba585e8 1717 VEX_LEN_0F93_P_3,
43234a1e 1718 VEX_LEN_0F98_P_0,
1ba585e8
IT
1719 VEX_LEN_0F98_P_2,
1720 VEX_LEN_0F99_P_0,
1721 VEX_LEN_0F99_P_2,
592a252b
L
1722 VEX_LEN_0FAE_R_2_M_0,
1723 VEX_LEN_0FAE_R_3_M_0,
1724 VEX_LEN_0FC2_P_1,
1725 VEX_LEN_0FC2_P_3,
1726 VEX_LEN_0FC4_P_2,
1727 VEX_LEN_0FC5_P_2,
592a252b 1728 VEX_LEN_0FD6_P_2,
592a252b 1729 VEX_LEN_0FF7_P_2,
6c30d220
L
1730 VEX_LEN_0F3816_P_2,
1731 VEX_LEN_0F3819_P_2,
592a252b 1732 VEX_LEN_0F381A_P_2_M_0,
6c30d220 1733 VEX_LEN_0F3836_P_2,
592a252b 1734 VEX_LEN_0F3841_P_2,
6c30d220 1735 VEX_LEN_0F385A_P_2_M_0,
592a252b
L
1736 VEX_LEN_0F38DB_P_2,
1737 VEX_LEN_0F38DC_P_2,
1738 VEX_LEN_0F38DD_P_2,
1739 VEX_LEN_0F38DE_P_2,
1740 VEX_LEN_0F38DF_P_2,
f12dc422
L
1741 VEX_LEN_0F38F2_P_0,
1742 VEX_LEN_0F38F3_R_1_P_0,
1743 VEX_LEN_0F38F3_R_2_P_0,
1744 VEX_LEN_0F38F3_R_3_P_0,
6c30d220
L
1745 VEX_LEN_0F38F5_P_0,
1746 VEX_LEN_0F38F5_P_1,
1747 VEX_LEN_0F38F5_P_3,
1748 VEX_LEN_0F38F6_P_3,
f12dc422 1749 VEX_LEN_0F38F7_P_0,
6c30d220
L
1750 VEX_LEN_0F38F7_P_1,
1751 VEX_LEN_0F38F7_P_2,
1752 VEX_LEN_0F38F7_P_3,
1753 VEX_LEN_0F3A00_P_2,
1754 VEX_LEN_0F3A01_P_2,
592a252b
L
1755 VEX_LEN_0F3A06_P_2,
1756 VEX_LEN_0F3A0A_P_2,
1757 VEX_LEN_0F3A0B_P_2,
592a252b
L
1758 VEX_LEN_0F3A14_P_2,
1759 VEX_LEN_0F3A15_P_2,
1760 VEX_LEN_0F3A16_P_2,
1761 VEX_LEN_0F3A17_P_2,
1762 VEX_LEN_0F3A18_P_2,
1763 VEX_LEN_0F3A19_P_2,
1764 VEX_LEN_0F3A20_P_2,
1765 VEX_LEN_0F3A21_P_2,
1766 VEX_LEN_0F3A22_P_2,
43234a1e 1767 VEX_LEN_0F3A30_P_2,
1ba585e8 1768 VEX_LEN_0F3A31_P_2,
43234a1e 1769 VEX_LEN_0F3A32_P_2,
1ba585e8 1770 VEX_LEN_0F3A33_P_2,
6c30d220
L
1771 VEX_LEN_0F3A38_P_2,
1772 VEX_LEN_0F3A39_P_2,
592a252b 1773 VEX_LEN_0F3A41_P_2,
592a252b 1774 VEX_LEN_0F3A44_P_2,
6c30d220 1775 VEX_LEN_0F3A46_P_2,
592a252b
L
1776 VEX_LEN_0F3A60_P_2,
1777 VEX_LEN_0F3A61_P_2,
1778 VEX_LEN_0F3A62_P_2,
1779 VEX_LEN_0F3A63_P_2,
1780 VEX_LEN_0F3A6A_P_2,
1781 VEX_LEN_0F3A6B_P_2,
1782 VEX_LEN_0F3A6E_P_2,
1783 VEX_LEN_0F3A6F_P_2,
1784 VEX_LEN_0F3A7A_P_2,
1785 VEX_LEN_0F3A7B_P_2,
1786 VEX_LEN_0F3A7E_P_2,
1787 VEX_LEN_0F3A7F_P_2,
1788 VEX_LEN_0F3ADF_P_2,
6c30d220 1789 VEX_LEN_0F3AF0_P_3,
ff688e1f
L
1790 VEX_LEN_0FXOP_08_CC,
1791 VEX_LEN_0FXOP_08_CD,
1792 VEX_LEN_0FXOP_08_CE,
1793 VEX_LEN_0FXOP_08_CF,
1794 VEX_LEN_0FXOP_08_EC,
1795 VEX_LEN_0FXOP_08_ED,
1796 VEX_LEN_0FXOP_08_EE,
1797 VEX_LEN_0FXOP_08_EF,
592a252b
L
1798 VEX_LEN_0FXOP_09_80,
1799 VEX_LEN_0FXOP_09_81
51e7da1b 1800};
c0f3af97 1801
9e30b8e0
L
1802enum
1803{
592a252b
L
1804 VEX_W_0F10_P_0 = 0,
1805 VEX_W_0F10_P_1,
1806 VEX_W_0F10_P_2,
1807 VEX_W_0F10_P_3,
1808 VEX_W_0F11_P_0,
1809 VEX_W_0F11_P_1,
1810 VEX_W_0F11_P_2,
1811 VEX_W_0F11_P_3,
1812 VEX_W_0F12_P_0_M_0,
1813 VEX_W_0F12_P_0_M_1,
1814 VEX_W_0F12_P_1,
1815 VEX_W_0F12_P_2,
1816 VEX_W_0F12_P_3,
1817 VEX_W_0F13_M_0,
1818 VEX_W_0F14,
1819 VEX_W_0F15,
1820 VEX_W_0F16_P_0_M_0,
1821 VEX_W_0F16_P_0_M_1,
1822 VEX_W_0F16_P_1,
1823 VEX_W_0F16_P_2,
1824 VEX_W_0F17_M_0,
1825 VEX_W_0F28,
1826 VEX_W_0F29,
1827 VEX_W_0F2B_M_0,
1828 VEX_W_0F2E_P_0,
1829 VEX_W_0F2E_P_2,
1830 VEX_W_0F2F_P_0,
1831 VEX_W_0F2F_P_2,
43234a1e 1832 VEX_W_0F41_P_0_LEN_1,
1ba585e8 1833 VEX_W_0F41_P_2_LEN_1,
43234a1e 1834 VEX_W_0F42_P_0_LEN_1,
1ba585e8 1835 VEX_W_0F42_P_2_LEN_1,
43234a1e 1836 VEX_W_0F44_P_0_LEN_0,
1ba585e8 1837 VEX_W_0F44_P_2_LEN_0,
43234a1e 1838 VEX_W_0F45_P_0_LEN_1,
1ba585e8 1839 VEX_W_0F45_P_2_LEN_1,
43234a1e 1840 VEX_W_0F46_P_0_LEN_1,
1ba585e8 1841 VEX_W_0F46_P_2_LEN_1,
43234a1e 1842 VEX_W_0F47_P_0_LEN_1,
1ba585e8
IT
1843 VEX_W_0F47_P_2_LEN_1,
1844 VEX_W_0F4A_P_0_LEN_1,
1845 VEX_W_0F4A_P_2_LEN_1,
1846 VEX_W_0F4B_P_0_LEN_1,
43234a1e 1847 VEX_W_0F4B_P_2_LEN_1,
592a252b
L
1848 VEX_W_0F50_M_0,
1849 VEX_W_0F51_P_0,
1850 VEX_W_0F51_P_1,
1851 VEX_W_0F51_P_2,
1852 VEX_W_0F51_P_3,
1853 VEX_W_0F52_P_0,
1854 VEX_W_0F52_P_1,
1855 VEX_W_0F53_P_0,
1856 VEX_W_0F53_P_1,
1857 VEX_W_0F58_P_0,
1858 VEX_W_0F58_P_1,
1859 VEX_W_0F58_P_2,
1860 VEX_W_0F58_P_3,
1861 VEX_W_0F59_P_0,
1862 VEX_W_0F59_P_1,
1863 VEX_W_0F59_P_2,
1864 VEX_W_0F59_P_3,
1865 VEX_W_0F5A_P_0,
1866 VEX_W_0F5A_P_1,
1867 VEX_W_0F5A_P_3,
1868 VEX_W_0F5B_P_0,
1869 VEX_W_0F5B_P_1,
1870 VEX_W_0F5B_P_2,
1871 VEX_W_0F5C_P_0,
1872 VEX_W_0F5C_P_1,
1873 VEX_W_0F5C_P_2,
1874 VEX_W_0F5C_P_3,
1875 VEX_W_0F5D_P_0,
1876 VEX_W_0F5D_P_1,
1877 VEX_W_0F5D_P_2,
1878 VEX_W_0F5D_P_3,
1879 VEX_W_0F5E_P_0,
1880 VEX_W_0F5E_P_1,
1881 VEX_W_0F5E_P_2,
1882 VEX_W_0F5E_P_3,
1883 VEX_W_0F5F_P_0,
1884 VEX_W_0F5F_P_1,
1885 VEX_W_0F5F_P_2,
1886 VEX_W_0F5F_P_3,
1887 VEX_W_0F60_P_2,
1888 VEX_W_0F61_P_2,
1889 VEX_W_0F62_P_2,
1890 VEX_W_0F63_P_2,
1891 VEX_W_0F64_P_2,
1892 VEX_W_0F65_P_2,
1893 VEX_W_0F66_P_2,
1894 VEX_W_0F67_P_2,
1895 VEX_W_0F68_P_2,
1896 VEX_W_0F69_P_2,
1897 VEX_W_0F6A_P_2,
1898 VEX_W_0F6B_P_2,
1899 VEX_W_0F6C_P_2,
1900 VEX_W_0F6D_P_2,
1901 VEX_W_0F6F_P_1,
1902 VEX_W_0F6F_P_2,
1903 VEX_W_0F70_P_1,
1904 VEX_W_0F70_P_2,
1905 VEX_W_0F70_P_3,
1906 VEX_W_0F71_R_2_P_2,
1907 VEX_W_0F71_R_4_P_2,
1908 VEX_W_0F71_R_6_P_2,
1909 VEX_W_0F72_R_2_P_2,
1910 VEX_W_0F72_R_4_P_2,
1911 VEX_W_0F72_R_6_P_2,
1912 VEX_W_0F73_R_2_P_2,
1913 VEX_W_0F73_R_3_P_2,
1914 VEX_W_0F73_R_6_P_2,
1915 VEX_W_0F73_R_7_P_2,
1916 VEX_W_0F74_P_2,
1917 VEX_W_0F75_P_2,
1918 VEX_W_0F76_P_2,
1919 VEX_W_0F77_P_0,
1920 VEX_W_0F7C_P_2,
1921 VEX_W_0F7C_P_3,
1922 VEX_W_0F7D_P_2,
1923 VEX_W_0F7D_P_3,
1924 VEX_W_0F7E_P_1,
1925 VEX_W_0F7F_P_1,
1926 VEX_W_0F7F_P_2,
43234a1e 1927 VEX_W_0F90_P_0_LEN_0,
1ba585e8 1928 VEX_W_0F90_P_2_LEN_0,
43234a1e 1929 VEX_W_0F91_P_0_LEN_0,
1ba585e8 1930 VEX_W_0F91_P_2_LEN_0,
43234a1e 1931 VEX_W_0F92_P_0_LEN_0,
90a915bf 1932 VEX_W_0F92_P_2_LEN_0,
1ba585e8 1933 VEX_W_0F92_P_3_LEN_0,
43234a1e 1934 VEX_W_0F93_P_0_LEN_0,
90a915bf 1935 VEX_W_0F93_P_2_LEN_0,
1ba585e8 1936 VEX_W_0F93_P_3_LEN_0,
43234a1e 1937 VEX_W_0F98_P_0_LEN_0,
1ba585e8
IT
1938 VEX_W_0F98_P_2_LEN_0,
1939 VEX_W_0F99_P_0_LEN_0,
1940 VEX_W_0F99_P_2_LEN_0,
592a252b
L
1941 VEX_W_0FAE_R_2_M_0,
1942 VEX_W_0FAE_R_3_M_0,
1943 VEX_W_0FC2_P_0,
1944 VEX_W_0FC2_P_1,
1945 VEX_W_0FC2_P_2,
1946 VEX_W_0FC2_P_3,
1947 VEX_W_0FC4_P_2,
1948 VEX_W_0FC5_P_2,
1949 VEX_W_0FD0_P_2,
1950 VEX_W_0FD0_P_3,
1951 VEX_W_0FD1_P_2,
1952 VEX_W_0FD2_P_2,
1953 VEX_W_0FD3_P_2,
1954 VEX_W_0FD4_P_2,
1955 VEX_W_0FD5_P_2,
1956 VEX_W_0FD6_P_2,
1957 VEX_W_0FD7_P_2_M_1,
1958 VEX_W_0FD8_P_2,
1959 VEX_W_0FD9_P_2,
1960 VEX_W_0FDA_P_2,
1961 VEX_W_0FDB_P_2,
1962 VEX_W_0FDC_P_2,
1963 VEX_W_0FDD_P_2,
1964 VEX_W_0FDE_P_2,
1965 VEX_W_0FDF_P_2,
1966 VEX_W_0FE0_P_2,
1967 VEX_W_0FE1_P_2,
1968 VEX_W_0FE2_P_2,
1969 VEX_W_0FE3_P_2,
1970 VEX_W_0FE4_P_2,
1971 VEX_W_0FE5_P_2,
1972 VEX_W_0FE6_P_1,
1973 VEX_W_0FE6_P_2,
1974 VEX_W_0FE6_P_3,
1975 VEX_W_0FE7_P_2_M_0,
1976 VEX_W_0FE8_P_2,
1977 VEX_W_0FE9_P_2,
1978 VEX_W_0FEA_P_2,
1979 VEX_W_0FEB_P_2,
1980 VEX_W_0FEC_P_2,
1981 VEX_W_0FED_P_2,
1982 VEX_W_0FEE_P_2,
1983 VEX_W_0FEF_P_2,
1984 VEX_W_0FF0_P_3_M_0,
1985 VEX_W_0FF1_P_2,
1986 VEX_W_0FF2_P_2,
1987 VEX_W_0FF3_P_2,
1988 VEX_W_0FF4_P_2,
1989 VEX_W_0FF5_P_2,
1990 VEX_W_0FF6_P_2,
1991 VEX_W_0FF7_P_2,
1992 VEX_W_0FF8_P_2,
1993 VEX_W_0FF9_P_2,
1994 VEX_W_0FFA_P_2,
1995 VEX_W_0FFB_P_2,
1996 VEX_W_0FFC_P_2,
1997 VEX_W_0FFD_P_2,
1998 VEX_W_0FFE_P_2,
1999 VEX_W_0F3800_P_2,
2000 VEX_W_0F3801_P_2,
2001 VEX_W_0F3802_P_2,
2002 VEX_W_0F3803_P_2,
2003 VEX_W_0F3804_P_2,
2004 VEX_W_0F3805_P_2,
2005 VEX_W_0F3806_P_2,
2006 VEX_W_0F3807_P_2,
2007 VEX_W_0F3808_P_2,
2008 VEX_W_0F3809_P_2,
2009 VEX_W_0F380A_P_2,
2010 VEX_W_0F380B_P_2,
2011 VEX_W_0F380C_P_2,
2012 VEX_W_0F380D_P_2,
2013 VEX_W_0F380E_P_2,
2014 VEX_W_0F380F_P_2,
6c30d220 2015 VEX_W_0F3816_P_2,
592a252b 2016 VEX_W_0F3817_P_2,
6c30d220
L
2017 VEX_W_0F3818_P_2,
2018 VEX_W_0F3819_P_2,
592a252b
L
2019 VEX_W_0F381A_P_2_M_0,
2020 VEX_W_0F381C_P_2,
2021 VEX_W_0F381D_P_2,
2022 VEX_W_0F381E_P_2,
2023 VEX_W_0F3820_P_2,
2024 VEX_W_0F3821_P_2,
2025 VEX_W_0F3822_P_2,
2026 VEX_W_0F3823_P_2,
2027 VEX_W_0F3824_P_2,
2028 VEX_W_0F3825_P_2,
2029 VEX_W_0F3828_P_2,
2030 VEX_W_0F3829_P_2,
2031 VEX_W_0F382A_P_2_M_0,
2032 VEX_W_0F382B_P_2,
2033 VEX_W_0F382C_P_2_M_0,
2034 VEX_W_0F382D_P_2_M_0,
2035 VEX_W_0F382E_P_2_M_0,
2036 VEX_W_0F382F_P_2_M_0,
2037 VEX_W_0F3830_P_2,
2038 VEX_W_0F3831_P_2,
2039 VEX_W_0F3832_P_2,
2040 VEX_W_0F3833_P_2,
2041 VEX_W_0F3834_P_2,
2042 VEX_W_0F3835_P_2,
6c30d220 2043 VEX_W_0F3836_P_2,
592a252b
L
2044 VEX_W_0F3837_P_2,
2045 VEX_W_0F3838_P_2,
2046 VEX_W_0F3839_P_2,
2047 VEX_W_0F383A_P_2,
2048 VEX_W_0F383B_P_2,
2049 VEX_W_0F383C_P_2,
2050 VEX_W_0F383D_P_2,
2051 VEX_W_0F383E_P_2,
2052 VEX_W_0F383F_P_2,
2053 VEX_W_0F3840_P_2,
2054 VEX_W_0F3841_P_2,
6c30d220
L
2055 VEX_W_0F3846_P_2,
2056 VEX_W_0F3858_P_2,
2057 VEX_W_0F3859_P_2,
2058 VEX_W_0F385A_P_2_M_0,
2059 VEX_W_0F3878_P_2,
2060 VEX_W_0F3879_P_2,
592a252b
L
2061 VEX_W_0F38DB_P_2,
2062 VEX_W_0F38DC_P_2,
2063 VEX_W_0F38DD_P_2,
2064 VEX_W_0F38DE_P_2,
2065 VEX_W_0F38DF_P_2,
6c30d220
L
2066 VEX_W_0F3A00_P_2,
2067 VEX_W_0F3A01_P_2,
2068 VEX_W_0F3A02_P_2,
592a252b
L
2069 VEX_W_0F3A04_P_2,
2070 VEX_W_0F3A05_P_2,
2071 VEX_W_0F3A06_P_2,
2072 VEX_W_0F3A08_P_2,
2073 VEX_W_0F3A09_P_2,
2074 VEX_W_0F3A0A_P_2,
2075 VEX_W_0F3A0B_P_2,
2076 VEX_W_0F3A0C_P_2,
2077 VEX_W_0F3A0D_P_2,
2078 VEX_W_0F3A0E_P_2,
2079 VEX_W_0F3A0F_P_2,
2080 VEX_W_0F3A14_P_2,
2081 VEX_W_0F3A15_P_2,
2082 VEX_W_0F3A18_P_2,
2083 VEX_W_0F3A19_P_2,
2084 VEX_W_0F3A20_P_2,
2085 VEX_W_0F3A21_P_2,
43234a1e 2086 VEX_W_0F3A30_P_2_LEN_0,
1ba585e8 2087 VEX_W_0F3A31_P_2_LEN_0,
43234a1e 2088 VEX_W_0F3A32_P_2_LEN_0,
1ba585e8 2089 VEX_W_0F3A33_P_2_LEN_0,
6c30d220
L
2090 VEX_W_0F3A38_P_2,
2091 VEX_W_0F3A39_P_2,
592a252b
L
2092 VEX_W_0F3A40_P_2,
2093 VEX_W_0F3A41_P_2,
2094 VEX_W_0F3A42_P_2,
2095 VEX_W_0F3A44_P_2,
6c30d220 2096 VEX_W_0F3A46_P_2,
592a252b
L
2097 VEX_W_0F3A48_P_2,
2098 VEX_W_0F3A49_P_2,
2099 VEX_W_0F3A4A_P_2,
2100 VEX_W_0F3A4B_P_2,
2101 VEX_W_0F3A4C_P_2,
2102 VEX_W_0F3A60_P_2,
2103 VEX_W_0F3A61_P_2,
2104 VEX_W_0F3A62_P_2,
2105 VEX_W_0F3A63_P_2,
43234a1e
L
2106 VEX_W_0F3ADF_P_2,
2107
2108 EVEX_W_0F10_P_0,
2109 EVEX_W_0F10_P_1_M_0,
2110 EVEX_W_0F10_P_1_M_1,
2111 EVEX_W_0F10_P_2,
2112 EVEX_W_0F10_P_3_M_0,
2113 EVEX_W_0F10_P_3_M_1,
2114 EVEX_W_0F11_P_0,
2115 EVEX_W_0F11_P_1_M_0,
2116 EVEX_W_0F11_P_1_M_1,
2117 EVEX_W_0F11_P_2,
2118 EVEX_W_0F11_P_3_M_0,
2119 EVEX_W_0F11_P_3_M_1,
2120 EVEX_W_0F12_P_0_M_0,
2121 EVEX_W_0F12_P_0_M_1,
2122 EVEX_W_0F12_P_1,
2123 EVEX_W_0F12_P_2,
2124 EVEX_W_0F12_P_3,
2125 EVEX_W_0F13_P_0,
2126 EVEX_W_0F13_P_2,
2127 EVEX_W_0F14_P_0,
2128 EVEX_W_0F14_P_2,
2129 EVEX_W_0F15_P_0,
2130 EVEX_W_0F15_P_2,
2131 EVEX_W_0F16_P_0_M_0,
2132 EVEX_W_0F16_P_0_M_1,
2133 EVEX_W_0F16_P_1,
2134 EVEX_W_0F16_P_2,
2135 EVEX_W_0F17_P_0,
2136 EVEX_W_0F17_P_2,
2137 EVEX_W_0F28_P_0,
2138 EVEX_W_0F28_P_2,
2139 EVEX_W_0F29_P_0,
2140 EVEX_W_0F29_P_2,
2141 EVEX_W_0F2A_P_1,
2142 EVEX_W_0F2A_P_3,
2143 EVEX_W_0F2B_P_0,
2144 EVEX_W_0F2B_P_2,
2145 EVEX_W_0F2E_P_0,
2146 EVEX_W_0F2E_P_2,
2147 EVEX_W_0F2F_P_0,
2148 EVEX_W_0F2F_P_2,
2149 EVEX_W_0F51_P_0,
2150 EVEX_W_0F51_P_1,
2151 EVEX_W_0F51_P_2,
2152 EVEX_W_0F51_P_3,
90a915bf
IT
2153 EVEX_W_0F54_P_0,
2154 EVEX_W_0F54_P_2,
2155 EVEX_W_0F55_P_0,
2156 EVEX_W_0F55_P_2,
2157 EVEX_W_0F56_P_0,
2158 EVEX_W_0F56_P_2,
2159 EVEX_W_0F57_P_0,
2160 EVEX_W_0F57_P_2,
43234a1e
L
2161 EVEX_W_0F58_P_0,
2162 EVEX_W_0F58_P_1,
2163 EVEX_W_0F58_P_2,
2164 EVEX_W_0F58_P_3,
2165 EVEX_W_0F59_P_0,
2166 EVEX_W_0F59_P_1,
2167 EVEX_W_0F59_P_2,
2168 EVEX_W_0F59_P_3,
2169 EVEX_W_0F5A_P_0,
2170 EVEX_W_0F5A_P_1,
2171 EVEX_W_0F5A_P_2,
2172 EVEX_W_0F5A_P_3,
2173 EVEX_W_0F5B_P_0,
2174 EVEX_W_0F5B_P_1,
2175 EVEX_W_0F5B_P_2,
2176 EVEX_W_0F5C_P_0,
2177 EVEX_W_0F5C_P_1,
2178 EVEX_W_0F5C_P_2,
2179 EVEX_W_0F5C_P_3,
2180 EVEX_W_0F5D_P_0,
2181 EVEX_W_0F5D_P_1,
2182 EVEX_W_0F5D_P_2,
2183 EVEX_W_0F5D_P_3,
2184 EVEX_W_0F5E_P_0,
2185 EVEX_W_0F5E_P_1,
2186 EVEX_W_0F5E_P_2,
2187 EVEX_W_0F5E_P_3,
2188 EVEX_W_0F5F_P_0,
2189 EVEX_W_0F5F_P_1,
2190 EVEX_W_0F5F_P_2,
2191 EVEX_W_0F5F_P_3,
2192 EVEX_W_0F62_P_2,
2193 EVEX_W_0F66_P_2,
2194 EVEX_W_0F6A_P_2,
1ba585e8 2195 EVEX_W_0F6B_P_2,
43234a1e
L
2196 EVEX_W_0F6C_P_2,
2197 EVEX_W_0F6D_P_2,
2198 EVEX_W_0F6E_P_2,
2199 EVEX_W_0F6F_P_1,
2200 EVEX_W_0F6F_P_2,
1ba585e8 2201 EVEX_W_0F6F_P_3,
43234a1e
L
2202 EVEX_W_0F70_P_2,
2203 EVEX_W_0F72_R_2_P_2,
2204 EVEX_W_0F72_R_6_P_2,
2205 EVEX_W_0F73_R_2_P_2,
2206 EVEX_W_0F73_R_6_P_2,
2207 EVEX_W_0F76_P_2,
2208 EVEX_W_0F78_P_0,
90a915bf 2209 EVEX_W_0F78_P_2,
43234a1e 2210 EVEX_W_0F79_P_0,
90a915bf 2211 EVEX_W_0F79_P_2,
43234a1e 2212 EVEX_W_0F7A_P_1,
90a915bf 2213 EVEX_W_0F7A_P_2,
43234a1e
L
2214 EVEX_W_0F7A_P_3,
2215 EVEX_W_0F7B_P_1,
90a915bf 2216 EVEX_W_0F7B_P_2,
43234a1e
L
2217 EVEX_W_0F7B_P_3,
2218 EVEX_W_0F7E_P_1,
2219 EVEX_W_0F7E_P_2,
2220 EVEX_W_0F7F_P_1,
2221 EVEX_W_0F7F_P_2,
1ba585e8 2222 EVEX_W_0F7F_P_3,
43234a1e
L
2223 EVEX_W_0FC2_P_0,
2224 EVEX_W_0FC2_P_1,
2225 EVEX_W_0FC2_P_2,
2226 EVEX_W_0FC2_P_3,
2227 EVEX_W_0FC6_P_0,
2228 EVEX_W_0FC6_P_2,
2229 EVEX_W_0FD2_P_2,
2230 EVEX_W_0FD3_P_2,
2231 EVEX_W_0FD4_P_2,
2232 EVEX_W_0FD6_P_2,
2233 EVEX_W_0FE6_P_1,
2234 EVEX_W_0FE6_P_2,
2235 EVEX_W_0FE6_P_3,
2236 EVEX_W_0FE7_P_2,
2237 EVEX_W_0FF2_P_2,
2238 EVEX_W_0FF3_P_2,
2239 EVEX_W_0FF4_P_2,
2240 EVEX_W_0FFA_P_2,
2241 EVEX_W_0FFB_P_2,
2242 EVEX_W_0FFE_P_2,
2243 EVEX_W_0F380C_P_2,
2244 EVEX_W_0F380D_P_2,
1ba585e8
IT
2245 EVEX_W_0F3810_P_1,
2246 EVEX_W_0F3810_P_2,
43234a1e 2247 EVEX_W_0F3811_P_1,
1ba585e8 2248 EVEX_W_0F3811_P_2,
43234a1e 2249 EVEX_W_0F3812_P_1,
1ba585e8 2250 EVEX_W_0F3812_P_2,
43234a1e
L
2251 EVEX_W_0F3813_P_1,
2252 EVEX_W_0F3813_P_2,
2253 EVEX_W_0F3814_P_1,
2254 EVEX_W_0F3815_P_1,
2255 EVEX_W_0F3818_P_2,
2256 EVEX_W_0F3819_P_2,
2257 EVEX_W_0F381A_P_2,
2258 EVEX_W_0F381B_P_2,
2259 EVEX_W_0F381E_P_2,
2260 EVEX_W_0F381F_P_2,
1ba585e8 2261 EVEX_W_0F3820_P_1,
43234a1e
L
2262 EVEX_W_0F3821_P_1,
2263 EVEX_W_0F3822_P_1,
2264 EVEX_W_0F3823_P_1,
2265 EVEX_W_0F3824_P_1,
2266 EVEX_W_0F3825_P_1,
2267 EVEX_W_0F3825_P_2,
1ba585e8
IT
2268 EVEX_W_0F3826_P_1,
2269 EVEX_W_0F3826_P_2,
2270 EVEX_W_0F3828_P_1,
43234a1e 2271 EVEX_W_0F3828_P_2,
1ba585e8 2272 EVEX_W_0F3829_P_1,
43234a1e
L
2273 EVEX_W_0F3829_P_2,
2274 EVEX_W_0F382A_P_1,
2275 EVEX_W_0F382A_P_2,
1ba585e8
IT
2276 EVEX_W_0F382B_P_2,
2277 EVEX_W_0F3830_P_1,
43234a1e
L
2278 EVEX_W_0F3831_P_1,
2279 EVEX_W_0F3832_P_1,
2280 EVEX_W_0F3833_P_1,
2281 EVEX_W_0F3834_P_1,
2282 EVEX_W_0F3835_P_1,
2283 EVEX_W_0F3835_P_2,
2284 EVEX_W_0F3837_P_2,
90a915bf
IT
2285 EVEX_W_0F3838_P_1,
2286 EVEX_W_0F3839_P_1,
43234a1e
L
2287 EVEX_W_0F383A_P_1,
2288 EVEX_W_0F3840_P_2,
2289 EVEX_W_0F3858_P_2,
2290 EVEX_W_0F3859_P_2,
2291 EVEX_W_0F385A_P_2,
2292 EVEX_W_0F385B_P_2,
1ba585e8
IT
2293 EVEX_W_0F3866_P_2,
2294 EVEX_W_0F3875_P_2,
2295 EVEX_W_0F3878_P_2,
2296 EVEX_W_0F3879_P_2,
2297 EVEX_W_0F387A_P_2,
2298 EVEX_W_0F387B_P_2,
2299 EVEX_W_0F387D_P_2,
2300 EVEX_W_0F388D_P_2,
43234a1e
L
2301 EVEX_W_0F3891_P_2,
2302 EVEX_W_0F3893_P_2,
2303 EVEX_W_0F38A1_P_2,
2304 EVEX_W_0F38A3_P_2,
2305 EVEX_W_0F38C7_R_1_P_2,
2306 EVEX_W_0F38C7_R_2_P_2,
2307 EVEX_W_0F38C7_R_5_P_2,
2308 EVEX_W_0F38C7_R_6_P_2,
2309
2310 EVEX_W_0F3A00_P_2,
2311 EVEX_W_0F3A01_P_2,
2312 EVEX_W_0F3A04_P_2,
2313 EVEX_W_0F3A05_P_2,
2314 EVEX_W_0F3A08_P_2,
2315 EVEX_W_0F3A09_P_2,
2316 EVEX_W_0F3A0A_P_2,
2317 EVEX_W_0F3A0B_P_2,
90a915bf 2318 EVEX_W_0F3A16_P_2,
43234a1e
L
2319 EVEX_W_0F3A18_P_2,
2320 EVEX_W_0F3A19_P_2,
2321 EVEX_W_0F3A1A_P_2,
2322 EVEX_W_0F3A1B_P_2,
2323 EVEX_W_0F3A1D_P_2,
2324 EVEX_W_0F3A21_P_2,
90a915bf 2325 EVEX_W_0F3A22_P_2,
43234a1e
L
2326 EVEX_W_0F3A23_P_2,
2327 EVEX_W_0F3A38_P_2,
2328 EVEX_W_0F3A39_P_2,
2329 EVEX_W_0F3A3A_P_2,
2330 EVEX_W_0F3A3B_P_2,
1ba585e8
IT
2331 EVEX_W_0F3A3E_P_2,
2332 EVEX_W_0F3A3F_P_2,
2333 EVEX_W_0F3A42_P_2,
90a915bf
IT
2334 EVEX_W_0F3A43_P_2,
2335 EVEX_W_0F3A50_P_2,
2336 EVEX_W_0F3A51_P_2,
2337 EVEX_W_0F3A56_P_2,
2338 EVEX_W_0F3A57_P_2,
2339 EVEX_W_0F3A66_P_2,
2340 EVEX_W_0F3A67_P_2
9e30b8e0
L
2341};
2342
26ca5450 2343typedef void (*op_rtn) (int bytemode, int sizeflag);
252b5132
RH
2344
2345struct dis386 {
2da11e11 2346 const char *name;
ce518a5f
L
2347 struct
2348 {
2349 op_rtn rtn;
2350 int bytemode;
2351 } op[MAX_OPERANDS];
252b5132
RH
2352};
2353
2354/* Upper case letters in the instruction names here are macros.
2355 'A' => print 'b' if no register operands or suffix_always is true
2356 'B' => print 'b' if suffix_always is true
9306ca4a 2357 'C' => print 's' or 'l' ('w' or 'd' in Intel mode) depending on operand
98b528ac 2358 size prefix
ed7841b3 2359 'D' => print 'w' if no register operands or 'w', 'l' or 'q', if
98b528ac 2360 suffix_always is true
252b5132 2361 'E' => print 'e' if 32-bit form of jcxz
3ffd33cf 2362 'F' => print 'w' or 'l' depending on address size prefix (loop insns)
52fd6d94 2363 'G' => print 'w' or 'l' depending on operand size prefix (i/o insns)
5dd0794d 2364 'H' => print ",pt" or ",pn" branch hint
9306ca4a 2365 'I' => honor following macro letter even in Intel mode (implemented only
98b528ac 2366 for some of the macro letters)
9306ca4a 2367 'J' => print 'l'
42903f7f 2368 'K' => print 'd' or 'q' if rex prefix is present.
252b5132 2369 'L' => print 'l' if suffix_always is true
9d141669 2370 'M' => print 'r' if intel_mnemonic is false.
252b5132 2371 'N' => print 'n' if instruction has no wait "prefix"
a35ca55a 2372 'O' => print 'd' or 'o' (or 'q' in Intel mode)
52b15da3 2373 'P' => print 'w', 'l' or 'q' if instruction has an operand size prefix,
98b528ac
L
2374 or suffix_always is true. print 'q' if rex prefix is present.
2375 'Q' => print 'w', 'l' or 'q' for memory operand or suffix_always
2376 is true
a35ca55a 2377 'R' => print 'w', 'l' or 'q' ('d' for 'l' and 'e' in Intel mode)
52b15da3 2378 'S' => print 'w', 'l' or 'q' if suffix_always is true
6439fc28
AM
2379 'T' => print 'q' in 64bit mode and behave as 'P' otherwise
2380 'U' => print 'q' in 64bit mode and behave as 'Q' otherwise
1a114b12 2381 'V' => print 'q' in 64bit mode and behave as 'S' otherwise
a35ca55a 2382 'W' => print 'b', 'w' or 'l' ('d' in Intel mode)
9306ca4a 2383 'X' => print 's', 'd' depending on data16 prefix (for XMM)
8a72226a
L
2384 'Y' => 'q' if instruction has an REX 64bit overwrite prefix and
2385 suffix_always is true.
6dd5059a 2386 'Z' => print 'q' in 64bit mode and behave as 'L' otherwise
9d141669 2387 '!' => change condition from true to false or from false to true.
98b528ac
L
2388 '%' => add 1 upper case letter to the macro.
2389
2390 2 upper case letter macros:
c0f3af97
L
2391 "XY" => print 'x' or 'y' if no register operands or suffix_always
2392 is true.
4b06377f
L
2393 "XW" => print 's', 'd' depending on the VEX.W bit (for FMA)
2394 "LQ" => print 'l' ('d' in Intel mode) or 'q' for memory operand
98b528ac 2395 or suffix_always is true
4b06377f
L
2396 "LB" => print "abs" in 64bit mode and behave as 'B' otherwise
2397 "LS" => print "abs" in 64bit mode and behave as 'S' otherwise
2398 "LV" => print "abs" for 64bit operand and behave as 'S' otherwise
6c30d220 2399 "LW" => print 'd', 'q' depending on the VEX.W bit
52b15da3 2400
6439fc28
AM
2401 Many of the above letters print nothing in Intel mode. See "putop"
2402 for the details.
52b15da3 2403
6439fc28 2404 Braces '{' and '}', and vertical bars '|', indicate alternative
7c52e0e8 2405 mnemonic strings for AT&T and Intel. */
252b5132 2406
6439fc28 2407static const struct dis386 dis386[] = {
252b5132 2408 /* 00 */
42164a71
L
2409 { "addB", { Ebh1, Gb } },
2410 { "addS", { Evh1, Gv } },
c7532693
L
2411 { "addB", { Gb, EbS } },
2412 { "addS", { Gv, EvS } },
ce518a5f
L
2413 { "addB", { AL, Ib } },
2414 { "addS", { eAX, Iv } },
4e7d34a6
L
2415 { X86_64_TABLE (X86_64_06) },
2416 { X86_64_TABLE (X86_64_07) },
252b5132 2417 /* 08 */
42164a71
L
2418 { "orB", { Ebh1, Gb } },
2419 { "orS", { Evh1, Gv } },
c7532693
L
2420 { "orB", { Gb, EbS } },
2421 { "orS", { Gv, EvS } },
ce518a5f
L
2422 { "orB", { AL, Ib } },
2423 { "orS", { eAX, Iv } },
4e7d34a6 2424 { X86_64_TABLE (X86_64_0D) },
592d1631 2425 { Bad_Opcode }, /* 0x0f extended opcode escape */
252b5132 2426 /* 10 */
42164a71
L
2427 { "adcB", { Ebh1, Gb } },
2428 { "adcS", { Evh1, Gv } },
c7532693
L
2429 { "adcB", { Gb, EbS } },
2430 { "adcS", { Gv, EvS } },
ce518a5f
L
2431 { "adcB", { AL, Ib } },
2432 { "adcS", { eAX, Iv } },
4e7d34a6
L
2433 { X86_64_TABLE (X86_64_16) },
2434 { X86_64_TABLE (X86_64_17) },
252b5132 2435 /* 18 */
42164a71
L
2436 { "sbbB", { Ebh1, Gb } },
2437 { "sbbS", { Evh1, Gv } },
c7532693
L
2438 { "sbbB", { Gb, EbS } },
2439 { "sbbS", { Gv, EvS } },
ce518a5f
L
2440 { "sbbB", { AL, Ib } },
2441 { "sbbS", { eAX, Iv } },
4e7d34a6
L
2442 { X86_64_TABLE (X86_64_1E) },
2443 { X86_64_TABLE (X86_64_1F) },
252b5132 2444 /* 20 */
42164a71
L
2445 { "andB", { Ebh1, Gb } },
2446 { "andS", { Evh1, Gv } },
c7532693
L
2447 { "andB", { Gb, EbS } },
2448 { "andS", { Gv, EvS } },
ce518a5f
L
2449 { "andB", { AL, Ib } },
2450 { "andS", { eAX, Iv } },
592d1631 2451 { Bad_Opcode }, /* SEG ES prefix */
4e7d34a6 2452 { X86_64_TABLE (X86_64_27) },
252b5132 2453 /* 28 */
42164a71
L
2454 { "subB", { Ebh1, Gb } },
2455 { "subS", { Evh1, Gv } },
c7532693
L
2456 { "subB", { Gb, EbS } },
2457 { "subS", { Gv, EvS } },
ce518a5f
L
2458 { "subB", { AL, Ib } },
2459 { "subS", { eAX, Iv } },
592d1631 2460 { Bad_Opcode }, /* SEG CS prefix */
4e7d34a6 2461 { X86_64_TABLE (X86_64_2F) },
252b5132 2462 /* 30 */
42164a71
L
2463 { "xorB", { Ebh1, Gb } },
2464 { "xorS", { Evh1, Gv } },
c7532693
L
2465 { "xorB", { Gb, EbS } },
2466 { "xorS", { Gv, EvS } },
ce518a5f
L
2467 { "xorB", { AL, Ib } },
2468 { "xorS", { eAX, Iv } },
592d1631 2469 { Bad_Opcode }, /* SEG SS prefix */
4e7d34a6 2470 { X86_64_TABLE (X86_64_37) },
252b5132 2471 /* 38 */
ce518a5f
L
2472 { "cmpB", { Eb, Gb } },
2473 { "cmpS", { Ev, Gv } },
c7532693
L
2474 { "cmpB", { Gb, EbS } },
2475 { "cmpS", { Gv, EvS } },
ce518a5f
L
2476 { "cmpB", { AL, Ib } },
2477 { "cmpS", { eAX, Iv } },
592d1631 2478 { Bad_Opcode }, /* SEG DS prefix */
4e7d34a6 2479 { X86_64_TABLE (X86_64_3F) },
252b5132 2480 /* 40 */
ce518a5f
L
2481 { "inc{S|}", { RMeAX } },
2482 { "inc{S|}", { RMeCX } },
2483 { "inc{S|}", { RMeDX } },
2484 { "inc{S|}", { RMeBX } },
2485 { "inc{S|}", { RMeSP } },
2486 { "inc{S|}", { RMeBP } },
2487 { "inc{S|}", { RMeSI } },
2488 { "inc{S|}", { RMeDI } },
252b5132 2489 /* 48 */
ce518a5f
L
2490 { "dec{S|}", { RMeAX } },
2491 { "dec{S|}", { RMeCX } },
2492 { "dec{S|}", { RMeDX } },
2493 { "dec{S|}", { RMeBX } },
2494 { "dec{S|}", { RMeSP } },
2495 { "dec{S|}", { RMeBP } },
2496 { "dec{S|}", { RMeSI } },
2497 { "dec{S|}", { RMeDI } },
252b5132 2498 /* 50 */
ce518a5f
L
2499 { "pushV", { RMrAX } },
2500 { "pushV", { RMrCX } },
2501 { "pushV", { RMrDX } },
2502 { "pushV", { RMrBX } },
2503 { "pushV", { RMrSP } },
2504 { "pushV", { RMrBP } },
2505 { "pushV", { RMrSI } },
2506 { "pushV", { RMrDI } },
252b5132 2507 /* 58 */
ce518a5f
L
2508 { "popV", { RMrAX } },
2509 { "popV", { RMrCX } },
2510 { "popV", { RMrDX } },
2511 { "popV", { RMrBX } },
2512 { "popV", { RMrSP } },
2513 { "popV", { RMrBP } },
2514 { "popV", { RMrSI } },
2515 { "popV", { RMrDI } },
252b5132 2516 /* 60 */
4e7d34a6
L
2517 { X86_64_TABLE (X86_64_60) },
2518 { X86_64_TABLE (X86_64_61) },
2519 { X86_64_TABLE (X86_64_62) },
2520 { X86_64_TABLE (X86_64_63) },
592d1631
L
2521 { Bad_Opcode }, /* seg fs */
2522 { Bad_Opcode }, /* seg gs */
2523 { Bad_Opcode }, /* op size prefix */
2524 { Bad_Opcode }, /* adr size prefix */
252b5132 2525 /* 68 */
d9e3625e 2526 { "pushT", { sIv } },
ce518a5f 2527 { "imulS", { Gv, Ev, Iv } },
e3949f17 2528 { "pushT", { sIbT } },
ce518a5f 2529 { "imulS", { Gv, Ev, sIb } },
7c52e0e8 2530 { "ins{b|}", { Ybr, indirDX } },
4e7d34a6 2531 { X86_64_TABLE (X86_64_6D) },
7c52e0e8 2532 { "outs{b|}", { indirDXr, Xb } },
4e7d34a6 2533 { X86_64_TABLE (X86_64_6F) },
252b5132 2534 /* 70 */
7e8b059b
L
2535 { "joH", { Jb, BND, cond_jump_flag } },
2536 { "jnoH", { Jb, BND, cond_jump_flag } },
2537 { "jbH", { Jb, BND, cond_jump_flag } },
2538 { "jaeH", { Jb, BND, cond_jump_flag } },
2539 { "jeH", { Jb, BND, cond_jump_flag } },
2540 { "jneH", { Jb, BND, cond_jump_flag } },
2541 { "jbeH", { Jb, BND, cond_jump_flag } },
2542 { "jaH", { Jb, BND, cond_jump_flag } },
252b5132 2543 /* 78 */
7e8b059b
L
2544 { "jsH", { Jb, BND, cond_jump_flag } },
2545 { "jnsH", { Jb, BND, cond_jump_flag } },
2546 { "jpH", { Jb, BND, cond_jump_flag } },
2547 { "jnpH", { Jb, BND, cond_jump_flag } },
2548 { "jlH", { Jb, BND, cond_jump_flag } },
2549 { "jgeH", { Jb, BND, cond_jump_flag } },
2550 { "jleH", { Jb, BND, cond_jump_flag } },
2551 { "jgH", { Jb, BND, cond_jump_flag } },
252b5132 2552 /* 80 */
1ceb70f8
L
2553 { REG_TABLE (REG_80) },
2554 { REG_TABLE (REG_81) },
592d1631 2555 { Bad_Opcode },
1ceb70f8 2556 { REG_TABLE (REG_82) },
ce518a5f
L
2557 { "testB", { Eb, Gb } },
2558 { "testS", { Ev, Gv } },
42164a71
L
2559 { "xchgB", { Ebh2, Gb } },
2560 { "xchgS", { Evh2, Gv } },
252b5132 2561 /* 88 */
42164a71
L
2562 { "movB", { Ebh3, Gb } },
2563 { "movS", { Evh3, Gv } },
b6169b20
L
2564 { "movB", { Gb, EbS } },
2565 { "movS", { Gv, EvS } },
ce518a5f 2566 { "movD", { Sv, Sw } },
1ceb70f8 2567 { MOD_TABLE (MOD_8D) },
ce518a5f 2568 { "movD", { Sw, Sv } },
1ceb70f8 2569 { REG_TABLE (REG_8F) },
252b5132 2570 /* 90 */
1ceb70f8 2571 { PREFIX_TABLE (PREFIX_90) },
ce518a5f
L
2572 { "xchgS", { RMeCX, eAX } },
2573 { "xchgS", { RMeDX, eAX } },
2574 { "xchgS", { RMeBX, eAX } },
2575 { "xchgS", { RMeSP, eAX } },
2576 { "xchgS", { RMeBP, eAX } },
2577 { "xchgS", { RMeSI, eAX } },
2578 { "xchgS", { RMeDI, eAX } },
252b5132 2579 /* 98 */
7c52e0e8
L
2580 { "cW{t|}R", { XX } },
2581 { "cR{t|}O", { XX } },
4e7d34a6 2582 { X86_64_TABLE (X86_64_9A) },
592d1631 2583 { Bad_Opcode }, /* fwait */
ce518a5f
L
2584 { "pushfT", { XX } },
2585 { "popfT", { XX } },
7c52e0e8
L
2586 { "sahf", { XX } },
2587 { "lahf", { XX } },
252b5132 2588 /* a0 */
4b06377f
L
2589 { "mov%LB", { AL, Ob } },
2590 { "mov%LS", { eAX, Ov } },
2591 { "mov%LB", { Ob, AL } },
2592 { "mov%LS", { Ov, eAX } },
7c52e0e8
L
2593 { "movs{b|}", { Ybr, Xb } },
2594 { "movs{R|}", { Yvr, Xv } },
2595 { "cmps{b|}", { Xb, Yb } },
2596 { "cmps{R|}", { Xv, Yv } },
252b5132 2597 /* a8 */
ce518a5f
L
2598 { "testB", { AL, Ib } },
2599 { "testS", { eAX, Iv } },
2600 { "stosB", { Ybr, AL } },
2601 { "stosS", { Yvr, eAX } },
2602 { "lodsB", { ALr, Xb } },
2603 { "lodsS", { eAXr, Xv } },
2604 { "scasB", { AL, Yb } },
2605 { "scasS", { eAX, Yv } },
252b5132 2606 /* b0 */
ce518a5f
L
2607 { "movB", { RMAL, Ib } },
2608 { "movB", { RMCL, Ib } },
2609 { "movB", { RMDL, Ib } },
2610 { "movB", { RMBL, Ib } },
2611 { "movB", { RMAH, Ib } },
2612 { "movB", { RMCH, Ib } },
2613 { "movB", { RMDH, Ib } },
2614 { "movB", { RMBH, Ib } },
252b5132 2615 /* b8 */
4b06377f
L
2616 { "mov%LV", { RMeAX, Iv64 } },
2617 { "mov%LV", { RMeCX, Iv64 } },
2618 { "mov%LV", { RMeDX, Iv64 } },
2619 { "mov%LV", { RMeBX, Iv64 } },
2620 { "mov%LV", { RMeSP, Iv64 } },
2621 { "mov%LV", { RMeBP, Iv64 } },
2622 { "mov%LV", { RMeSI, Iv64 } },
2623 { "mov%LV", { RMeDI, Iv64 } },
252b5132 2624 /* c0 */
1ceb70f8
L
2625 { REG_TABLE (REG_C0) },
2626 { REG_TABLE (REG_C1) },
7e8b059b
L
2627 { "retT", { Iw, BND } },
2628 { "retT", { BND } },
4e7d34a6
L
2629 { X86_64_TABLE (X86_64_C4) },
2630 { X86_64_TABLE (X86_64_C5) },
1ceb70f8
L
2631 { REG_TABLE (REG_C6) },
2632 { REG_TABLE (REG_C7) },
252b5132 2633 /* c8 */
ce518a5f
L
2634 { "enterT", { Iw, Ib } },
2635 { "leaveT", { XX } },
ddab3d59
JB
2636 { "Jret{|f}P", { Iw } },
2637 { "Jret{|f}P", { XX } },
ce518a5f
L
2638 { "int3", { XX } },
2639 { "int", { Ib } },
4e7d34a6 2640 { X86_64_TABLE (X86_64_CE) },
ce518a5f 2641 { "iretP", { XX } },
252b5132 2642 /* d0 */
1ceb70f8
L
2643 { REG_TABLE (REG_D0) },
2644 { REG_TABLE (REG_D1) },
2645 { REG_TABLE (REG_D2) },
2646 { REG_TABLE (REG_D3) },
4e7d34a6
L
2647 { X86_64_TABLE (X86_64_D4) },
2648 { X86_64_TABLE (X86_64_D5) },
592d1631 2649 { Bad_Opcode },
ce518a5f 2650 { "xlat", { DSBX } },
252b5132
RH
2651 /* d8 */
2652 { FLOAT },
2653 { FLOAT },
2654 { FLOAT },
2655 { FLOAT },
2656 { FLOAT },
2657 { FLOAT },
2658 { FLOAT },
2659 { FLOAT },
2660 /* e0 */
ce518a5f
L
2661 { "loopneFH", { Jb, XX, loop_jcxz_flag } },
2662 { "loopeFH", { Jb, XX, loop_jcxz_flag } },
2663 { "loopFH", { Jb, XX, loop_jcxz_flag } },
2664 { "jEcxzH", { Jb, XX, loop_jcxz_flag } },
2665 { "inB", { AL, Ib } },
2666 { "inG", { zAX, Ib } },
2667 { "outB", { Ib, AL } },
2668 { "outG", { Ib, zAX } },
252b5132 2669 /* e8 */
7e8b059b
L
2670 { "callT", { Jv, BND } },
2671 { "jmpT", { Jv, BND } },
4e7d34a6 2672 { X86_64_TABLE (X86_64_EA) },
7e8b059b 2673 { "jmp", { Jb, BND } },
ce518a5f
L
2674 { "inB", { AL, indirDX } },
2675 { "inG", { zAX, indirDX } },
2676 { "outB", { indirDX, AL } },
2677 { "outG", { indirDX, zAX } },
252b5132 2678 /* f0 */
592d1631 2679 { Bad_Opcode }, /* lock prefix */
ce518a5f 2680 { "icebp", { XX } },
592d1631
L
2681 { Bad_Opcode }, /* repne */
2682 { Bad_Opcode }, /* repz */
ce518a5f
L
2683 { "hlt", { XX } },
2684 { "cmc", { XX } },
1ceb70f8
L
2685 { REG_TABLE (REG_F6) },
2686 { REG_TABLE (REG_F7) },
252b5132 2687 /* f8 */
ce518a5f
L
2688 { "clc", { XX } },
2689 { "stc", { XX } },
2690 { "cli", { XX } },
2691 { "sti", { XX } },
2692 { "cld", { XX } },
2693 { "std", { XX } },
1ceb70f8
L
2694 { REG_TABLE (REG_FE) },
2695 { REG_TABLE (REG_FF) },
252b5132
RH
2696};
2697
6439fc28 2698static const struct dis386 dis386_twobyte[] = {
252b5132 2699 /* 00 */
1ceb70f8
L
2700 { REG_TABLE (REG_0F00 ) },
2701 { REG_TABLE (REG_0F01 ) },
ce518a5f
L
2702 { "larS", { Gv, Ew } },
2703 { "lslS", { Gv, Ew } },
592d1631 2704 { Bad_Opcode },
ce518a5f
L
2705 { "syscall", { XX } },
2706 { "clts", { XX } },
2707 { "sysretP", { XX } },
252b5132 2708 /* 08 */
ce518a5f
L
2709 { "invd", { XX } },
2710 { "wbinvd", { XX } },
592d1631 2711 { Bad_Opcode },
b414985b 2712 { "ud2", { XX } },
592d1631 2713 { Bad_Opcode },
b5b1fc4f 2714 { REG_TABLE (REG_0F0D) },
ce518a5f
L
2715 { "femms", { XX } },
2716 { "", { MX, EM, OPSUF } }, /* See OP_3DNowSuffix. */
252b5132 2717 /* 10 */
1ceb70f8
L
2718 { PREFIX_TABLE (PREFIX_0F10) },
2719 { PREFIX_TABLE (PREFIX_0F11) },
2720 { PREFIX_TABLE (PREFIX_0F12) },
2721 { MOD_TABLE (MOD_0F13) },
f2a421c4
L
2722 { "unpcklpX", { XM, EXx } },
2723 { "unpckhpX", { XM, EXx } },
1ceb70f8
L
2724 { PREFIX_TABLE (PREFIX_0F16) },
2725 { MOD_TABLE (MOD_0F17) },
252b5132 2726 /* 18 */
1ceb70f8 2727 { REG_TABLE (REG_0F18) },
b5b1fc4f 2728 { "nopQ", { Ev } },
7e8b059b
L
2729 { PREFIX_TABLE (PREFIX_0F1A) },
2730 { PREFIX_TABLE (PREFIX_0F1B) },
b5b1fc4f
L
2731 { "nopQ", { Ev } },
2732 { "nopQ", { Ev } },
2733 { "nopQ", { Ev } },
ce518a5f 2734 { "nopQ", { Ev } },
252b5132 2735 /* 20 */
1ceb70f8
L
2736 { MOD_TABLE (MOD_0F20) },
2737 { MOD_TABLE (MOD_0F21) },
2738 { MOD_TABLE (MOD_0F22) },
2739 { MOD_TABLE (MOD_0F23) },
2740 { MOD_TABLE (MOD_0F24) },
592d1631 2741 { Bad_Opcode },
1ceb70f8 2742 { MOD_TABLE (MOD_0F26) },
592d1631 2743 { Bad_Opcode },
252b5132 2744 /* 28 */
09a2c6cf 2745 { "movapX", { XM, EXx } },
b6169b20 2746 { "movapX", { EXxS, XM } },
1ceb70f8
L
2747 { PREFIX_TABLE (PREFIX_0F2A) },
2748 { PREFIX_TABLE (PREFIX_0F2B) },
2749 { PREFIX_TABLE (PREFIX_0F2C) },
2750 { PREFIX_TABLE (PREFIX_0F2D) },
2751 { PREFIX_TABLE (PREFIX_0F2E) },
2752 { PREFIX_TABLE (PREFIX_0F2F) },
252b5132 2753 /* 30 */
ce518a5f
L
2754 { "wrmsr", { XX } },
2755 { "rdtsc", { XX } },
2756 { "rdmsr", { XX } },
2757 { "rdpmc", { XX } },
2758 { "sysenter", { XX } },
2759 { "sysexit", { XX } },
592d1631 2760 { Bad_Opcode },
47dd174c 2761 { "getsec", { XX } },
252b5132 2762 /* 38 */
4e7d34a6 2763 { THREE_BYTE_TABLE (THREE_BYTE_0F38) },
592d1631 2764 { Bad_Opcode },
4e7d34a6 2765 { THREE_BYTE_TABLE (THREE_BYTE_0F3A) },
592d1631
L
2766 { Bad_Opcode },
2767 { Bad_Opcode },
2768 { Bad_Opcode },
2769 { Bad_Opcode },
2770 { Bad_Opcode },
252b5132 2771 /* 40 */
b19d5385
JB
2772 { "cmovoS", { Gv, Ev } },
2773 { "cmovnoS", { Gv, Ev } },
2774 { "cmovbS", { Gv, Ev } },
2775 { "cmovaeS", { Gv, Ev } },
2776 { "cmoveS", { Gv, Ev } },
2777 { "cmovneS", { Gv, Ev } },
2778 { "cmovbeS", { Gv, Ev } },
2779 { "cmovaS", { Gv, Ev } },
252b5132 2780 /* 48 */
b19d5385
JB
2781 { "cmovsS", { Gv, Ev } },
2782 { "cmovnsS", { Gv, Ev } },
2783 { "cmovpS", { Gv, Ev } },
2784 { "cmovnpS", { Gv, Ev } },
2785 { "cmovlS", { Gv, Ev } },
2786 { "cmovgeS", { Gv, Ev } },
2787 { "cmovleS", { Gv, Ev } },
2788 { "cmovgS", { Gv, Ev } },
252b5132 2789 /* 50 */
75c135a8 2790 { MOD_TABLE (MOD_0F51) },
1ceb70f8
L
2791 { PREFIX_TABLE (PREFIX_0F51) },
2792 { PREFIX_TABLE (PREFIX_0F52) },
2793 { PREFIX_TABLE (PREFIX_0F53) },
09a2c6cf
L
2794 { "andpX", { XM, EXx } },
2795 { "andnpX", { XM, EXx } },
2796 { "orpX", { XM, EXx } },
2797 { "xorpX", { XM, EXx } },
252b5132 2798 /* 58 */
1ceb70f8
L
2799 { PREFIX_TABLE (PREFIX_0F58) },
2800 { PREFIX_TABLE (PREFIX_0F59) },
2801 { PREFIX_TABLE (PREFIX_0F5A) },
2802 { PREFIX_TABLE (PREFIX_0F5B) },
2803 { PREFIX_TABLE (PREFIX_0F5C) },
2804 { PREFIX_TABLE (PREFIX_0F5D) },
2805 { PREFIX_TABLE (PREFIX_0F5E) },
2806 { PREFIX_TABLE (PREFIX_0F5F) },
252b5132 2807 /* 60 */
1ceb70f8
L
2808 { PREFIX_TABLE (PREFIX_0F60) },
2809 { PREFIX_TABLE (PREFIX_0F61) },
2810 { PREFIX_TABLE (PREFIX_0F62) },
ce518a5f
L
2811 { "packsswb", { MX, EM } },
2812 { "pcmpgtb", { MX, EM } },
2813 { "pcmpgtw", { MX, EM } },
2814 { "pcmpgtd", { MX, EM } },
2815 { "packuswb", { MX, EM } },
252b5132 2816 /* 68 */
ce518a5f
L
2817 { "punpckhbw", { MX, EM } },
2818 { "punpckhwd", { MX, EM } },
2819 { "punpckhdq", { MX, EM } },
2820 { "packssdw", { MX, EM } },
1ceb70f8
L
2821 { PREFIX_TABLE (PREFIX_0F6C) },
2822 { PREFIX_TABLE (PREFIX_0F6D) },
231af070 2823 { "movK", { MX, Edq } },
1ceb70f8 2824 { PREFIX_TABLE (PREFIX_0F6F) },
252b5132 2825 /* 70 */
1ceb70f8
L
2826 { PREFIX_TABLE (PREFIX_0F70) },
2827 { REG_TABLE (REG_0F71) },
2828 { REG_TABLE (REG_0F72) },
2829 { REG_TABLE (REG_0F73) },
ce518a5f
L
2830 { "pcmpeqb", { MX, EM } },
2831 { "pcmpeqw", { MX, EM } },
2832 { "pcmpeqd", { MX, EM } },
2833 { "emms", { XX } },
252b5132 2834 /* 78 */
1ceb70f8
L
2835 { PREFIX_TABLE (PREFIX_0F78) },
2836 { PREFIX_TABLE (PREFIX_0F79) },
4e7d34a6 2837 { THREE_BYTE_TABLE (THREE_BYTE_0F7A) },
592d1631 2838 { Bad_Opcode },
1ceb70f8
L
2839 { PREFIX_TABLE (PREFIX_0F7C) },
2840 { PREFIX_TABLE (PREFIX_0F7D) },
2841 { PREFIX_TABLE (PREFIX_0F7E) },
2842 { PREFIX_TABLE (PREFIX_0F7F) },
252b5132 2843 /* 80 */
7e8b059b
L
2844 { "joH", { Jv, BND, cond_jump_flag } },
2845 { "jnoH", { Jv, BND, cond_jump_flag } },
2846 { "jbH", { Jv, BND, cond_jump_flag } },
2847 { "jaeH", { Jv, BND, cond_jump_flag } },
2848 { "jeH", { Jv, BND, cond_jump_flag } },
2849 { "jneH", { Jv, BND, cond_jump_flag } },
2850 { "jbeH", { Jv, BND, cond_jump_flag } },
2851 { "jaH", { Jv, BND, cond_jump_flag } },
252b5132 2852 /* 88 */
7e8b059b
L
2853 { "jsH", { Jv, BND, cond_jump_flag } },
2854 { "jnsH", { Jv, BND, cond_jump_flag } },
2855 { "jpH", { Jv, BND, cond_jump_flag } },
2856 { "jnpH", { Jv, BND, cond_jump_flag } },
2857 { "jlH", { Jv, BND, cond_jump_flag } },
2858 { "jgeH", { Jv, BND, cond_jump_flag } },
2859 { "jleH", { Jv, BND, cond_jump_flag } },
2860 { "jgH", { Jv, BND, cond_jump_flag } },
252b5132 2861 /* 90 */
ce518a5f
L
2862 { "seto", { Eb } },
2863 { "setno", { Eb } },
2864 { "setb", { Eb } },
2865 { "setae", { Eb } },
2866 { "sete", { Eb } },
2867 { "setne", { Eb } },
2868 { "setbe", { Eb } },
2869 { "seta", { Eb } },
252b5132 2870 /* 98 */
ce518a5f
L
2871 { "sets", { Eb } },
2872 { "setns", { Eb } },
2873 { "setp", { Eb } },
2874 { "setnp", { Eb } },
2875 { "setl", { Eb } },
2876 { "setge", { Eb } },
2877 { "setle", { Eb } },
2878 { "setg", { Eb } },
252b5132 2879 /* a0 */
ce518a5f
L
2880 { "pushT", { fs } },
2881 { "popT", { fs } },
2882 { "cpuid", { XX } },
2883 { "btS", { Ev, Gv } },
2884 { "shldS", { Ev, Gv, Ib } },
2885 { "shldS", { Ev, Gv, CL } },
1ceb70f8
L
2886 { REG_TABLE (REG_0FA6) },
2887 { REG_TABLE (REG_0FA7) },
252b5132 2888 /* a8 */
ce518a5f
L
2889 { "pushT", { gs } },
2890 { "popT", { gs } },
2891 { "rsm", { XX } },
42164a71 2892 { "btsS", { Evh1, Gv } },
ce518a5f
L
2893 { "shrdS", { Ev, Gv, Ib } },
2894 { "shrdS", { Ev, Gv, CL } },
1ceb70f8 2895 { REG_TABLE (REG_0FAE) },
ce518a5f 2896 { "imulS", { Gv, Ev } },
252b5132 2897 /* b0 */
42164a71
L
2898 { "cmpxchgB", { Ebh1, Gb } },
2899 { "cmpxchgS", { Evh1, Gv } },
1ceb70f8 2900 { MOD_TABLE (MOD_0FB2) },
42164a71 2901 { "btrS", { Evh1, Gv } },
1ceb70f8
L
2902 { MOD_TABLE (MOD_0FB4) },
2903 { MOD_TABLE (MOD_0FB5) },
7c52e0e8
L
2904 { "movz{bR|x}", { Gv, Eb } },
2905 { "movz{wR|x}", { Gv, Ew } }, /* yes, there really is movzww ! */
252b5132 2906 /* b8 */
1ceb70f8 2907 { PREFIX_TABLE (PREFIX_0FB8) },
b414985b 2908 { "ud1", { XX } },
1ceb70f8 2909 { REG_TABLE (REG_0FBA) },
42164a71 2910 { "btcS", { Evh1, Gv } },
f12dc422 2911 { PREFIX_TABLE (PREFIX_0FBC) },
1ceb70f8 2912 { PREFIX_TABLE (PREFIX_0FBD) },
7c52e0e8
L
2913 { "movs{bR|x}", { Gv, Eb } },
2914 { "movs{wR|x}", { Gv, Ew } }, /* yes, there really is movsww ! */
252b5132 2915 /* c0 */
42164a71
L
2916 { "xaddB", { Ebh1, Gb } },
2917 { "xaddS", { Evh1, Gv } },
1ceb70f8 2918 { PREFIX_TABLE (PREFIX_0FC2) },
4ee52178 2919 { PREFIX_TABLE (PREFIX_0FC3) },
ce518a5f
L
2920 { "pinsrw", { MX, Edqw, Ib } },
2921 { "pextrw", { Gdq, MS, Ib } },
09a2c6cf 2922 { "shufpX", { XM, EXx, Ib } },
1ceb70f8 2923 { REG_TABLE (REG_0FC7) },
252b5132 2924 /* c8 */
ce518a5f
L
2925 { "bswap", { RMeAX } },
2926 { "bswap", { RMeCX } },
2927 { "bswap", { RMeDX } },
2928 { "bswap", { RMeBX } },
2929 { "bswap", { RMeSP } },
2930 { "bswap", { RMeBP } },
2931 { "bswap", { RMeSI } },
2932 { "bswap", { RMeDI } },
252b5132 2933 /* d0 */
1ceb70f8 2934 { PREFIX_TABLE (PREFIX_0FD0) },
ce518a5f
L
2935 { "psrlw", { MX, EM } },
2936 { "psrld", { MX, EM } },
2937 { "psrlq", { MX, EM } },
2938 { "paddq", { MX, EM } },
2939 { "pmullw", { MX, EM } },
1ceb70f8 2940 { PREFIX_TABLE (PREFIX_0FD6) },
75c135a8 2941 { MOD_TABLE (MOD_0FD7) },
252b5132 2942 /* d8 */
ce518a5f
L
2943 { "psubusb", { MX, EM } },
2944 { "psubusw", { MX, EM } },
2945 { "pminub", { MX, EM } },
2946 { "pand", { MX, EM } },
2947 { "paddusb", { MX, EM } },
2948 { "paddusw", { MX, EM } },
2949 { "pmaxub", { MX, EM } },
2950 { "pandn", { MX, EM } },
252b5132 2951 /* e0 */
ce518a5f
L
2952 { "pavgb", { MX, EM } },
2953 { "psraw", { MX, EM } },
2954 { "psrad", { MX, EM } },
2955 { "pavgw", { MX, EM } },
2956 { "pmulhuw", { MX, EM } },
2957 { "pmulhw", { MX, EM } },
1ceb70f8
L
2958 { PREFIX_TABLE (PREFIX_0FE6) },
2959 { PREFIX_TABLE (PREFIX_0FE7) },
252b5132 2960 /* e8 */
ce518a5f
L
2961 { "psubsb", { MX, EM } },
2962 { "psubsw", { MX, EM } },
2963 { "pminsw", { MX, EM } },
2964 { "por", { MX, EM } },
2965 { "paddsb", { MX, EM } },
2966 { "paddsw", { MX, EM } },
2967 { "pmaxsw", { MX, EM } },
2968 { "pxor", { MX, EM } },
252b5132 2969 /* f0 */
1ceb70f8 2970 { PREFIX_TABLE (PREFIX_0FF0) },
ce518a5f
L
2971 { "psllw", { MX, EM } },
2972 { "pslld", { MX, EM } },
2973 { "psllq", { MX, EM } },
2974 { "pmuludq", { MX, EM } },
2975 { "pmaddwd", { MX, EM } },
2976 { "psadbw", { MX, EM } },
1ceb70f8 2977 { PREFIX_TABLE (PREFIX_0FF7) },
252b5132 2978 /* f8 */
ce518a5f
L
2979 { "psubb", { MX, EM } },
2980 { "psubw", { MX, EM } },
2981 { "psubd", { MX, EM } },
2982 { "psubq", { MX, EM } },
2983 { "paddb", { MX, EM } },
2984 { "paddw", { MX, EM } },
2985 { "paddd", { MX, EM } },
592d1631 2986 { Bad_Opcode },
252b5132
RH
2987};
2988
2989static const unsigned char onebyte_has_modrm[256] = {
c608c12e
AM
2990 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
2991 /* ------------------------------- */
2992 /* 00 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 00 */
2993 /* 10 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 10 */
2994 /* 20 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 20 */
2995 /* 30 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 30 */
2996 /* 40 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 40 */
2997 /* 50 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 50 */
2998 /* 60 */ 0,0,1,1,0,0,0,0,0,1,0,1,0,0,0,0, /* 60 */
2999 /* 70 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 70 */
3000 /* 80 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 80 */
3001 /* 90 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 90 */
3002 /* a0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* a0 */
3003 /* b0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* b0 */
3004 /* c0 */ 1,1,0,0,1,1,1,1,0,0,0,0,0,0,0,0, /* c0 */
3005 /* d0 */ 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1, /* d0 */
3006 /* e0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* e0 */
3007 /* f0 */ 0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1 /* f0 */
3008 /* ------------------------------- */
3009 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
252b5132
RH
3010};
3011
3012static const unsigned char twobyte_has_modrm[256] = {
c608c12e
AM
3013 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
3014 /* ------------------------------- */
252b5132 3015 /* 00 */ 1,1,1,1,0,0,0,0,0,0,0,0,0,1,0,1, /* 0f */
b5b1fc4f 3016 /* 10 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 1f */
85f10a01 3017 /* 20 */ 1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1, /* 2f */
331d2d0d 3018 /* 30 */ 0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0, /* 3f */
252b5132 3019 /* 40 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 4f */
4bba6815
AM
3020 /* 50 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 5f */
3021 /* 60 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 6f */
85f10a01 3022 /* 70 */ 1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1, /* 7f */
252b5132
RH
3023 /* 80 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 8f */
3024 /* 90 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 9f */
30d1c836 3025 /* a0 */ 0,0,0,1,1,1,1,1,0,0,0,1,1,1,1,1, /* af */
050dfa73 3026 /* b0 */ 1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1, /* bf */
252b5132 3027 /* c0 */ 1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0, /* cf */
ca164297 3028 /* d0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* df */
4bba6815 3029 /* e0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* ef */
ca164297 3030 /* f0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0 /* ff */
c608c12e
AM
3031 /* ------------------------------- */
3032 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
3033};
3034
285ca992
L
3035static const unsigned char twobyte_has_mandatory_prefix[256] = {
3036 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
3037 /* ------------------------------- */
3038 /* 00 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 0f */
3039 /* 10 */ 1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0, /* 1f */
3040 /* 20 */ 0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,0, /* 2f */
3041 /* 30 */ 0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0, /* 3f */
3042 /* 40 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 4f */
3043 /* 50 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 5f */
3044 /* 60 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 6f */
3045 /* 70 */ 1,0,0,0,1,1,1,1,0,0,1,1,1,1,1,1, /* 7f */
3046 /* 80 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 8f */
3047 /* 90 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 9f */
3048 /* a0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* af */
3049 /* b0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* bf */
3050 /* c0 */ 0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0, /* cf */
3051 /* d0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* df */
3052 /* e0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* ef */
3053 /* f0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0 /* ff */
3054 /* ------------------------------- */
3055 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
3056};
3057
252b5132
RH
3058static char obuf[100];
3059static char *obufp;
ea397f5b 3060static char *mnemonicendp;
252b5132
RH
3061static char scratchbuf[100];
3062static unsigned char *start_codep;
3063static unsigned char *insn_codep;
3064static unsigned char *codep;
285ca992 3065static unsigned char *end_codep;
f16cd0d5
L
3066static int last_lock_prefix;
3067static int last_repz_prefix;
3068static int last_repnz_prefix;
3069static int last_data_prefix;
3070static int last_addr_prefix;
3071static int last_rex_prefix;
3072static int last_seg_prefix;
d9949a36 3073static int fwait_prefix;
285ca992
L
3074/* The PREFIX_REPZ/PREFIX_REPNZ/PREFIX_DATA prefix is mandatory. */
3075static int mandatory_prefix;
3076/* The active segment register prefix. */
3077static int active_seg_prefix;
f16cd0d5
L
3078#define MAX_CODE_LENGTH 15
3079/* We can up to 14 prefixes since the maximum instruction length is
3080 15bytes. */
3081static int all_prefixes[MAX_CODE_LENGTH - 1];
252b5132 3082static disassemble_info *the_info;
7967e09e
L
3083static struct
3084 {
3085 int mod;
7967e09e 3086 int reg;
484c222e 3087 int rm;
7967e09e
L
3088 }
3089modrm;
4bba6815 3090static unsigned char need_modrm;
dfc8cf43
L
3091static struct
3092 {
3093 int scale;
3094 int index;
3095 int base;
3096 }
3097sib;
c0f3af97
L
3098static struct
3099 {
3100 int register_specifier;
3101 int length;
3102 int prefix;
3103 int w;
43234a1e
L
3104 int evex;
3105 int r;
3106 int v;
3107 int mask_register_specifier;
3108 int zeroing;
3109 int ll;
3110 int b;
c0f3af97
L
3111 }
3112vex;
3113static unsigned char need_vex;
3114static unsigned char need_vex_reg;
dae39acc 3115static unsigned char vex_w_done;
252b5132 3116
ea397f5b
L
3117struct op
3118 {
3119 const char *name;
3120 unsigned int len;
3121 };
3122
4bba6815
AM
3123/* If we are accessing mod/rm/reg without need_modrm set, then the
3124 values are stale. Hitting this abort likely indicates that you
3125 need to update onebyte_has_modrm or twobyte_has_modrm. */
3126#define MODRM_CHECK if (!need_modrm) abort ()
3127
d708bcba
AM
3128static const char **names64;
3129static const char **names32;
3130static const char **names16;
3131static const char **names8;
3132static const char **names8rex;
3133static const char **names_seg;
db51cc60
L
3134static const char *index64;
3135static const char *index32;
d708bcba 3136static const char **index16;
7e8b059b 3137static const char **names_bnd;
d708bcba
AM
3138
3139static const char *intel_names64[] = {
3140 "rax", "rcx", "rdx", "rbx", "rsp", "rbp", "rsi", "rdi",
3141 "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15"
3142};
3143static const char *intel_names32[] = {
3144 "eax", "ecx", "edx", "ebx", "esp", "ebp", "esi", "edi",
3145 "r8d", "r9d", "r10d", "r11d", "r12d", "r13d", "r14d", "r15d"
3146};
3147static const char *intel_names16[] = {
3148 "ax", "cx", "dx", "bx", "sp", "bp", "si", "di",
3149 "r8w", "r9w", "r10w", "r11w", "r12w", "r13w", "r14w", "r15w"
3150};
3151static const char *intel_names8[] = {
3152 "al", "cl", "dl", "bl", "ah", "ch", "dh", "bh",
3153};
3154static const char *intel_names8rex[] = {
3155 "al", "cl", "dl", "bl", "spl", "bpl", "sil", "dil",
3156 "r8b", "r9b", "r10b", "r11b", "r12b", "r13b", "r14b", "r15b"
3157};
3158static const char *intel_names_seg[] = {
3159 "es", "cs", "ss", "ds", "fs", "gs", "?", "?",
3160};
db51cc60
L
3161static const char *intel_index64 = "riz";
3162static const char *intel_index32 = "eiz";
d708bcba
AM
3163static const char *intel_index16[] = {
3164 "bx+si", "bx+di", "bp+si", "bp+di", "si", "di", "bp", "bx"
3165};
3166
3167static const char *att_names64[] = {
3168 "%rax", "%rcx", "%rdx", "%rbx", "%rsp", "%rbp", "%rsi", "%rdi",
52b15da3
JH
3169 "%r8", "%r9", "%r10", "%r11", "%r12", "%r13", "%r14", "%r15"
3170};
d708bcba
AM
3171static const char *att_names32[] = {
3172 "%eax", "%ecx", "%edx", "%ebx", "%esp", "%ebp", "%esi", "%edi",
52b15da3 3173 "%r8d", "%r9d", "%r10d", "%r11d", "%r12d", "%r13d", "%r14d", "%r15d"
252b5132 3174};
d708bcba
AM
3175static const char *att_names16[] = {
3176 "%ax", "%cx", "%dx", "%bx", "%sp", "%bp", "%si", "%di",
52b15da3 3177 "%r8w", "%r9w", "%r10w", "%r11w", "%r12w", "%r13w", "%r14w", "%r15w"
252b5132 3178};
d708bcba
AM
3179static const char *att_names8[] = {
3180 "%al", "%cl", "%dl", "%bl", "%ah", "%ch", "%dh", "%bh",
252b5132 3181};
d708bcba
AM
3182static const char *att_names8rex[] = {
3183 "%al", "%cl", "%dl", "%bl", "%spl", "%bpl", "%sil", "%dil",
52b15da3
JH
3184 "%r8b", "%r9b", "%r10b", "%r11b", "%r12b", "%r13b", "%r14b", "%r15b"
3185};
d708bcba
AM
3186static const char *att_names_seg[] = {
3187 "%es", "%cs", "%ss", "%ds", "%fs", "%gs", "%?", "%?",
252b5132 3188};
db51cc60
L
3189static const char *att_index64 = "%riz";
3190static const char *att_index32 = "%eiz";
d708bcba
AM
3191static const char *att_index16[] = {
3192 "%bx,%si", "%bx,%di", "%bp,%si", "%bp,%di", "%si", "%di", "%bp", "%bx"
252b5132
RH
3193};
3194
b9733481
L
3195static const char **names_mm;
3196static const char *intel_names_mm[] = {
3197 "mm0", "mm1", "mm2", "mm3",
3198 "mm4", "mm5", "mm6", "mm7"
3199};
3200static const char *att_names_mm[] = {
3201 "%mm0", "%mm1", "%mm2", "%mm3",
3202 "%mm4", "%mm5", "%mm6", "%mm7"
3203};
3204
7e8b059b
L
3205static const char *intel_names_bnd[] = {
3206 "bnd0", "bnd1", "bnd2", "bnd3"
3207};
3208
3209static const char *att_names_bnd[] = {
3210 "%bnd0", "%bnd1", "%bnd2", "%bnd3"
3211};
3212
b9733481
L
3213static const char **names_xmm;
3214static const char *intel_names_xmm[] = {
3215 "xmm0", "xmm1", "xmm2", "xmm3",
3216 "xmm4", "xmm5", "xmm6", "xmm7",
3217 "xmm8", "xmm9", "xmm10", "xmm11",
43234a1e
L
3218 "xmm12", "xmm13", "xmm14", "xmm15",
3219 "xmm16", "xmm17", "xmm18", "xmm19",
3220 "xmm20", "xmm21", "xmm22", "xmm23",
3221 "xmm24", "xmm25", "xmm26", "xmm27",
3222 "xmm28", "xmm29", "xmm30", "xmm31"
b9733481
L
3223};
3224static const char *att_names_xmm[] = {
3225 "%xmm0", "%xmm1", "%xmm2", "%xmm3",
3226 "%xmm4", "%xmm5", "%xmm6", "%xmm7",
3227 "%xmm8", "%xmm9", "%xmm10", "%xmm11",
43234a1e
L
3228 "%xmm12", "%xmm13", "%xmm14", "%xmm15",
3229 "%xmm16", "%xmm17", "%xmm18", "%xmm19",
3230 "%xmm20", "%xmm21", "%xmm22", "%xmm23",
3231 "%xmm24", "%xmm25", "%xmm26", "%xmm27",
3232 "%xmm28", "%xmm29", "%xmm30", "%xmm31"
b9733481
L
3233};
3234
3235static const char **names_ymm;
3236static const char *intel_names_ymm[] = {
3237 "ymm0", "ymm1", "ymm2", "ymm3",
3238 "ymm4", "ymm5", "ymm6", "ymm7",
3239 "ymm8", "ymm9", "ymm10", "ymm11",
43234a1e
L
3240 "ymm12", "ymm13", "ymm14", "ymm15",
3241 "ymm16", "ymm17", "ymm18", "ymm19",
3242 "ymm20", "ymm21", "ymm22", "ymm23",
3243 "ymm24", "ymm25", "ymm26", "ymm27",
3244 "ymm28", "ymm29", "ymm30", "ymm31"
b9733481
L
3245};
3246static const char *att_names_ymm[] = {
3247 "%ymm0", "%ymm1", "%ymm2", "%ymm3",
3248 "%ymm4", "%ymm5", "%ymm6", "%ymm7",
3249 "%ymm8", "%ymm9", "%ymm10", "%ymm11",
43234a1e
L
3250 "%ymm12", "%ymm13", "%ymm14", "%ymm15",
3251 "%ymm16", "%ymm17", "%ymm18", "%ymm19",
3252 "%ymm20", "%ymm21", "%ymm22", "%ymm23",
3253 "%ymm24", "%ymm25", "%ymm26", "%ymm27",
3254 "%ymm28", "%ymm29", "%ymm30", "%ymm31"
3255};
3256
3257static const char **names_zmm;
3258static const char *intel_names_zmm[] = {
3259 "zmm0", "zmm1", "zmm2", "zmm3",
3260 "zmm4", "zmm5", "zmm6", "zmm7",
3261 "zmm8", "zmm9", "zmm10", "zmm11",
3262 "zmm12", "zmm13", "zmm14", "zmm15",
3263 "zmm16", "zmm17", "zmm18", "zmm19",
3264 "zmm20", "zmm21", "zmm22", "zmm23",
3265 "zmm24", "zmm25", "zmm26", "zmm27",
3266 "zmm28", "zmm29", "zmm30", "zmm31"
3267};
3268static const char *att_names_zmm[] = {
3269 "%zmm0", "%zmm1", "%zmm2", "%zmm3",
3270 "%zmm4", "%zmm5", "%zmm6", "%zmm7",
3271 "%zmm8", "%zmm9", "%zmm10", "%zmm11",
3272 "%zmm12", "%zmm13", "%zmm14", "%zmm15",
3273 "%zmm16", "%zmm17", "%zmm18", "%zmm19",
3274 "%zmm20", "%zmm21", "%zmm22", "%zmm23",
3275 "%zmm24", "%zmm25", "%zmm26", "%zmm27",
3276 "%zmm28", "%zmm29", "%zmm30", "%zmm31"
3277};
3278
3279static const char **names_mask;
3280static const char *intel_names_mask[] = {
3281 "k0", "k1", "k2", "k3", "k4", "k5", "k6", "k7"
3282};
3283static const char *att_names_mask[] = {
3284 "%k0", "%k1", "%k2", "%k3", "%k4", "%k5", "%k6", "%k7"
3285};
3286
3287static const char *names_rounding[] =
3288{
3289 "{rn-sae}",
3290 "{rd-sae}",
3291 "{ru-sae}",
3292 "{rz-sae}"
b9733481
L
3293};
3294
1ceb70f8
L
3295static const struct dis386 reg_table[][8] = {
3296 /* REG_80 */
252b5132 3297 {
42164a71
L
3298 { "addA", { Ebh1, Ib } },
3299 { "orA", { Ebh1, Ib } },
3300 { "adcA", { Ebh1, Ib } },
3301 { "sbbA", { Ebh1, Ib } },
3302 { "andA", { Ebh1, Ib } },
3303 { "subA", { Ebh1, Ib } },
3304 { "xorA", { Ebh1, Ib } },
ce518a5f 3305 { "cmpA", { Eb, Ib } },
252b5132 3306 },
1ceb70f8 3307 /* REG_81 */
252b5132 3308 {
42164a71
L
3309 { "addQ", { Evh1, Iv } },
3310 { "orQ", { Evh1, Iv } },
3311 { "adcQ", { Evh1, Iv } },
3312 { "sbbQ", { Evh1, Iv } },
3313 { "andQ", { Evh1, Iv } },
3314 { "subQ", { Evh1, Iv } },
3315 { "xorQ", { Evh1, Iv } },
ce518a5f 3316 { "cmpQ", { Ev, Iv } },
252b5132 3317 },
1ceb70f8 3318 /* REG_82 */
252b5132 3319 {
42164a71
L
3320 { "addQ", { Evh1, sIb } },
3321 { "orQ", { Evh1, sIb } },
3322 { "adcQ", { Evh1, sIb } },
3323 { "sbbQ", { Evh1, sIb } },
3324 { "andQ", { Evh1, sIb } },
3325 { "subQ", { Evh1, sIb } },
3326 { "xorQ", { Evh1, sIb } },
ce518a5f 3327 { "cmpQ", { Ev, sIb } },
252b5132 3328 },
1ceb70f8 3329 /* REG_8F */
4e7d34a6
L
3330 {
3331 { "popU", { stackEv } },
c48244a5 3332 { XOP_8F_TABLE (XOP_09) },
592d1631
L
3333 { Bad_Opcode },
3334 { Bad_Opcode },
3335 { Bad_Opcode },
f88c9eb0 3336 { XOP_8F_TABLE (XOP_09) },
4e7d34a6 3337 },
1ceb70f8 3338 /* REG_C0 */
252b5132 3339 {
ce518a5f
L
3340 { "rolA", { Eb, Ib } },
3341 { "rorA", { Eb, Ib } },
3342 { "rclA", { Eb, Ib } },
3343 { "rcrA", { Eb, Ib } },
3344 { "shlA", { Eb, Ib } },
3345 { "shrA", { Eb, Ib } },
592d1631 3346 { Bad_Opcode },
ce518a5f 3347 { "sarA", { Eb, Ib } },
252b5132 3348 },
1ceb70f8 3349 /* REG_C1 */
252b5132 3350 {
ce518a5f
L
3351 { "rolQ", { Ev, Ib } },
3352 { "rorQ", { Ev, Ib } },
3353 { "rclQ", { Ev, Ib } },
3354 { "rcrQ", { Ev, Ib } },
3355 { "shlQ", { Ev, Ib } },
3356 { "shrQ", { Ev, Ib } },
592d1631 3357 { Bad_Opcode },
ce518a5f 3358 { "sarQ", { Ev, Ib } },
252b5132 3359 },
1ceb70f8 3360 /* REG_C6 */
4e7d34a6 3361 {
42164a71
L
3362 { "movA", { Ebh3, Ib } },
3363 { Bad_Opcode },
3364 { Bad_Opcode },
3365 { Bad_Opcode },
3366 { Bad_Opcode },
3367 { Bad_Opcode },
3368 { Bad_Opcode },
3369 { MOD_TABLE (MOD_C6_REG_7) },
4e7d34a6 3370 },
1ceb70f8 3371 /* REG_C7 */
4e7d34a6 3372 {
42164a71
L
3373 { "movQ", { Evh3, Iv } },
3374 { Bad_Opcode },
3375 { Bad_Opcode },
3376 { Bad_Opcode },
3377 { Bad_Opcode },
3378 { Bad_Opcode },
3379 { Bad_Opcode },
3380 { MOD_TABLE (MOD_C7_REG_7) },
4e7d34a6 3381 },
1ceb70f8 3382 /* REG_D0 */
252b5132 3383 {
ce518a5f
L
3384 { "rolA", { Eb, I1 } },
3385 { "rorA", { Eb, I1 } },
3386 { "rclA", { Eb, I1 } },
3387 { "rcrA", { Eb, I1 } },
3388 { "shlA", { Eb, I1 } },
3389 { "shrA", { Eb, I1 } },
592d1631 3390 { Bad_Opcode },
ce518a5f 3391 { "sarA", { Eb, I1 } },
252b5132 3392 },
1ceb70f8 3393 /* REG_D1 */
252b5132 3394 {
ce518a5f
L
3395 { "rolQ", { Ev, I1 } },
3396 { "rorQ", { Ev, I1 } },
3397 { "rclQ", { Ev, I1 } },
3398 { "rcrQ", { Ev, I1 } },
3399 { "shlQ", { Ev, I1 } },
3400 { "shrQ", { Ev, I1 } },
592d1631 3401 { Bad_Opcode },
ce518a5f 3402 { "sarQ", { Ev, I1 } },
252b5132 3403 },
1ceb70f8 3404 /* REG_D2 */
252b5132 3405 {
ce518a5f
L
3406 { "rolA", { Eb, CL } },
3407 { "rorA", { Eb, CL } },
3408 { "rclA", { Eb, CL } },
3409 { "rcrA", { Eb, CL } },
3410 { "shlA", { Eb, CL } },
3411 { "shrA", { Eb, CL } },
592d1631 3412 { Bad_Opcode },
ce518a5f 3413 { "sarA", { Eb, CL } },
252b5132 3414 },
1ceb70f8 3415 /* REG_D3 */
252b5132 3416 {
ce518a5f
L
3417 { "rolQ", { Ev, CL } },
3418 { "rorQ", { Ev, CL } },
3419 { "rclQ", { Ev, CL } },
3420 { "rcrQ", { Ev, CL } },
3421 { "shlQ", { Ev, CL } },
3422 { "shrQ", { Ev, CL } },
592d1631 3423 { Bad_Opcode },
ce518a5f 3424 { "sarQ", { Ev, CL } },
252b5132 3425 },
1ceb70f8 3426 /* REG_F6 */
252b5132 3427 {
ce518a5f 3428 { "testA", { Eb, Ib } },
592d1631 3429 { Bad_Opcode },
42164a71
L
3430 { "notA", { Ebh1 } },
3431 { "negA", { Ebh1 } },
ce518a5f
L
3432 { "mulA", { Eb } }, /* Don't print the implicit %al register, */
3433 { "imulA", { Eb } }, /* to distinguish these opcodes from other */
3434 { "divA", { Eb } }, /* mul/imul opcodes. Do the same for div */
3435 { "idivA", { Eb } }, /* and idiv for consistency. */
252b5132 3436 },
1ceb70f8 3437 /* REG_F7 */
252b5132 3438 {
ce518a5f 3439 { "testQ", { Ev, Iv } },
592d1631 3440 { Bad_Opcode },
42164a71
L
3441 { "notQ", { Evh1 } },
3442 { "negQ", { Evh1 } },
ce518a5f
L
3443 { "mulQ", { Ev } }, /* Don't print the implicit register. */
3444 { "imulQ", { Ev } },
3445 { "divQ", { Ev } },
3446 { "idivQ", { Ev } },
252b5132 3447 },
1ceb70f8 3448 /* REG_FE */
252b5132 3449 {
42164a71
L
3450 { "incA", { Ebh1 } },
3451 { "decA", { Ebh1 } },
252b5132 3452 },
1ceb70f8 3453 /* REG_FF */
252b5132 3454 {
42164a71
L
3455 { "incQ", { Evh1 } },
3456 { "decQ", { Evh1 } },
7e8b059b 3457 { "call{T|}", { indirEv, BND } },
4a357820 3458 { MOD_TABLE (MOD_FF_REG_3) },
7e8b059b 3459 { "jmp{T|}", { indirEv, BND } },
4a357820 3460 { MOD_TABLE (MOD_FF_REG_5) },
ce518a5f 3461 { "pushU", { stackEv } },
592d1631 3462 { Bad_Opcode },
252b5132 3463 },
1ceb70f8 3464 /* REG_0F00 */
252b5132 3465 {
ce518a5f
L
3466 { "sldtD", { Sv } },
3467 { "strD", { Sv } },
3468 { "lldt", { Ew } },
3469 { "ltr", { Ew } },
3470 { "verr", { Ew } },
3471 { "verw", { Ew } },
592d1631
L
3472 { Bad_Opcode },
3473 { Bad_Opcode },
252b5132 3474 },
1ceb70f8 3475 /* REG_0F01 */
252b5132 3476 {
1ceb70f8
L
3477 { MOD_TABLE (MOD_0F01_REG_0) },
3478 { MOD_TABLE (MOD_0F01_REG_1) },
3479 { MOD_TABLE (MOD_0F01_REG_2) },
3480 { MOD_TABLE (MOD_0F01_REG_3) },
ce518a5f 3481 { "smswD", { Sv } },
592d1631 3482 { Bad_Opcode },
ce518a5f 3483 { "lmsw", { Ew } },
1ceb70f8 3484 { MOD_TABLE (MOD_0F01_REG_7) },
252b5132 3485 },
b5b1fc4f 3486 /* REG_0F0D */
252b5132 3487 {
1ab03f4b
L
3488 { "prefetch", { Mb } },
3489 { "prefetchw", { Mb } },
43234a1e 3490 { "prefetchwt1", { Mb } },
d7189fa5
RM
3491 { "prefetch", { Mb } },
3492 { "prefetch", { Mb } },
3493 { "prefetch", { Mb } },
3494 { "prefetch", { Mb } },
3495 { "prefetch", { Mb } },
252b5132 3496 },
1ceb70f8 3497 /* REG_0F18 */
252b5132 3498 {
1ceb70f8
L
3499 { MOD_TABLE (MOD_0F18_REG_0) },
3500 { MOD_TABLE (MOD_0F18_REG_1) },
3501 { MOD_TABLE (MOD_0F18_REG_2) },
3502 { MOD_TABLE (MOD_0F18_REG_3) },
d7189fa5
RM
3503 { MOD_TABLE (MOD_0F18_REG_4) },
3504 { MOD_TABLE (MOD_0F18_REG_5) },
3505 { MOD_TABLE (MOD_0F18_REG_6) },
3506 { MOD_TABLE (MOD_0F18_REG_7) },
252b5132 3507 },
1ceb70f8 3508 /* REG_0F71 */
a6bd098c 3509 {
592d1631
L
3510 { Bad_Opcode },
3511 { Bad_Opcode },
1ceb70f8 3512 { MOD_TABLE (MOD_0F71_REG_2) },
592d1631 3513 { Bad_Opcode },
1ceb70f8 3514 { MOD_TABLE (MOD_0F71_REG_4) },
592d1631 3515 { Bad_Opcode },
1ceb70f8 3516 { MOD_TABLE (MOD_0F71_REG_6) },
a6bd098c 3517 },
1ceb70f8 3518 /* REG_0F72 */
a6bd098c 3519 {
592d1631
L
3520 { Bad_Opcode },
3521 { Bad_Opcode },
1ceb70f8 3522 { MOD_TABLE (MOD_0F72_REG_2) },
592d1631 3523 { Bad_Opcode },
1ceb70f8 3524 { MOD_TABLE (MOD_0F72_REG_4) },
592d1631 3525 { Bad_Opcode },
1ceb70f8 3526 { MOD_TABLE (MOD_0F72_REG_6) },
a6bd098c 3527 },
1ceb70f8 3528 /* REG_0F73 */
252b5132 3529 {
592d1631
L
3530 { Bad_Opcode },
3531 { Bad_Opcode },
1ceb70f8
L
3532 { MOD_TABLE (MOD_0F73_REG_2) },
3533 { MOD_TABLE (MOD_0F73_REG_3) },
592d1631
L
3534 { Bad_Opcode },
3535 { Bad_Opcode },
1ceb70f8
L
3536 { MOD_TABLE (MOD_0F73_REG_6) },
3537 { MOD_TABLE (MOD_0F73_REG_7) },
252b5132 3538 },
1ceb70f8 3539 /* REG_0FA6 */
252b5132 3540 {
4e7d34a6
L
3541 { "montmul", { { OP_0f07, 0 } } },
3542 { "xsha1", { { OP_0f07, 0 } } },
3543 { "xsha256", { { OP_0f07, 0 } } },
4e7d34a6 3544 },
1ceb70f8 3545 /* REG_0FA7 */
4e7d34a6
L
3546 {
3547 { "xstore-rng", { { OP_0f07, 0 } } },
3548 { "xcrypt-ecb", { { OP_0f07, 0 } } },
3549 { "xcrypt-cbc", { { OP_0f07, 0 } } },
3550 { "xcrypt-ctr", { { OP_0f07, 0 } } },
3551 { "xcrypt-cfb", { { OP_0f07, 0 } } },
3552 { "xcrypt-ofb", { { OP_0f07, 0 } } },
4e7d34a6 3553 },
1ceb70f8 3554 /* REG_0FAE */
4e7d34a6 3555 {
1ceb70f8
L
3556 { MOD_TABLE (MOD_0FAE_REG_0) },
3557 { MOD_TABLE (MOD_0FAE_REG_1) },
3558 { MOD_TABLE (MOD_0FAE_REG_2) },
3559 { MOD_TABLE (MOD_0FAE_REG_3) },
475a2301 3560 { MOD_TABLE (MOD_0FAE_REG_4) },
1ceb70f8
L
3561 { MOD_TABLE (MOD_0FAE_REG_5) },
3562 { MOD_TABLE (MOD_0FAE_REG_6) },
3563 { MOD_TABLE (MOD_0FAE_REG_7) },
252b5132 3564 },
1ceb70f8 3565 /* REG_0FBA */
252b5132 3566 {
592d1631
L
3567 { Bad_Opcode },
3568 { Bad_Opcode },
3569 { Bad_Opcode },
3570 { Bad_Opcode },
4e7d34a6 3571 { "btQ", { Ev, Ib } },
42164a71
L
3572 { "btsQ", { Evh1, Ib } },
3573 { "btrQ", { Evh1, Ib } },
3574 { "btcQ", { Evh1, Ib } },
c608c12e 3575 },
1ceb70f8 3576 /* REG_0FC7 */
c608c12e 3577 {
592d1631 3578 { Bad_Opcode },
4e7d34a6 3579 { "cmpxchg8b", { { CMPXCHG8B_Fixup, q_mode } } },
592d1631 3580 { Bad_Opcode },
963f3586
IT
3581 { MOD_TABLE (MOD_0FC7_REG_3) },
3582 { MOD_TABLE (MOD_0FC7_REG_4) },
3583 { MOD_TABLE (MOD_0FC7_REG_5) },
1ceb70f8
L
3584 { MOD_TABLE (MOD_0FC7_REG_6) },
3585 { MOD_TABLE (MOD_0FC7_REG_7) },
252b5132 3586 },
592a252b 3587 /* REG_VEX_0F71 */
c0f3af97 3588 {
592d1631
L
3589 { Bad_Opcode },
3590 { Bad_Opcode },
592a252b 3591 { MOD_TABLE (MOD_VEX_0F71_REG_2) },
592d1631 3592 { Bad_Opcode },
592a252b 3593 { MOD_TABLE (MOD_VEX_0F71_REG_4) },
592d1631 3594 { Bad_Opcode },
592a252b 3595 { MOD_TABLE (MOD_VEX_0F71_REG_6) },
c0f3af97 3596 },
592a252b 3597 /* REG_VEX_0F72 */
c0f3af97 3598 {
592d1631
L
3599 { Bad_Opcode },
3600 { Bad_Opcode },
592a252b 3601 { MOD_TABLE (MOD_VEX_0F72_REG_2) },
592d1631 3602 { Bad_Opcode },
592a252b 3603 { MOD_TABLE (MOD_VEX_0F72_REG_4) },
592d1631 3604 { Bad_Opcode },
592a252b 3605 { MOD_TABLE (MOD_VEX_0F72_REG_6) },
c0f3af97 3606 },
592a252b 3607 /* REG_VEX_0F73 */
c0f3af97 3608 {
592d1631
L
3609 { Bad_Opcode },
3610 { Bad_Opcode },
592a252b
L
3611 { MOD_TABLE (MOD_VEX_0F73_REG_2) },
3612 { MOD_TABLE (MOD_VEX_0F73_REG_3) },
592d1631
L
3613 { Bad_Opcode },
3614 { Bad_Opcode },
592a252b
L
3615 { MOD_TABLE (MOD_VEX_0F73_REG_6) },
3616 { MOD_TABLE (MOD_VEX_0F73_REG_7) },
c0f3af97 3617 },
592a252b 3618 /* REG_VEX_0FAE */
c0f3af97 3619 {
592d1631
L
3620 { Bad_Opcode },
3621 { Bad_Opcode },
592a252b
L
3622 { MOD_TABLE (MOD_VEX_0FAE_REG_2) },
3623 { MOD_TABLE (MOD_VEX_0FAE_REG_3) },
c0f3af97 3624 },
f12dc422
L
3625 /* REG_VEX_0F38F3 */
3626 {
3627 { Bad_Opcode },
3628 { PREFIX_TABLE (PREFIX_VEX_0F38F3_REG_1) },
3629 { PREFIX_TABLE (PREFIX_VEX_0F38F3_REG_2) },
3630 { PREFIX_TABLE (PREFIX_VEX_0F38F3_REG_3) },
3631 },
f88c9eb0
SP
3632 /* REG_XOP_LWPCB */
3633 {
3634 { "llwpcb", { { OP_LWPCB_E, 0 } } },
3635 { "slwpcb", { { OP_LWPCB_E, 0 } } },
f88c9eb0
SP
3636 },
3637 /* REG_XOP_LWP */
3638 {
ce7d077e
SP
3639 { "lwpins", { { OP_LWP_E, 0 }, Ed, Iq } },
3640 { "lwpval", { { OP_LWP_E, 0 }, Ed, Iq } },
f88c9eb0 3641 },
2a2a0f38
QN
3642 /* REG_XOP_TBM_01 */
3643 {
3644 { Bad_Opcode },
3645 { "blcfill", { { OP_LWP_E, 0 }, Ev } },
3646 { "blsfill", { { OP_LWP_E, 0 }, Ev } },
3647 { "blcs", { { OP_LWP_E, 0 }, Ev } },
3648 { "tzmsk", { { OP_LWP_E, 0 }, Ev } },
3649 { "blcic", { { OP_LWP_E, 0 }, Ev } },
3650 { "blsic", { { OP_LWP_E, 0 }, Ev } },
3651 { "t1mskc", { { OP_LWP_E, 0 }, Ev } },
3652 },
3653 /* REG_XOP_TBM_02 */
3654 {
3655 { Bad_Opcode },
3656 { "blcmsk", { { OP_LWP_E, 0 }, Ev } },
3657 { Bad_Opcode },
3658 { Bad_Opcode },
3659 { Bad_Opcode },
3660 { Bad_Opcode },
3661 { "blci", { { OP_LWP_E, 0 }, Ev } },
3662 },
43234a1e
L
3663#define NEED_REG_TABLE
3664#include "i386-dis-evex.h"
3665#undef NEED_REG_TABLE
4e7d34a6
L
3666};
3667
1ceb70f8
L
3668static const struct dis386 prefix_table[][4] = {
3669 /* PREFIX_90 */
252b5132 3670 {
4e7d34a6
L
3671 { "xchgS", { { NOP_Fixup1, eAX_reg }, { NOP_Fixup2, eAX_reg } } },
3672 { "pause", { XX } },
3673 { "xchgS", { { NOP_Fixup1, eAX_reg }, { NOP_Fixup2, eAX_reg } } },
0f10071e 3674 },
4e7d34a6 3675
1ceb70f8 3676 /* PREFIX_0F10 */
cc0ec051 3677 {
4e7d34a6
L
3678 { "movups", { XM, EXx } },
3679 { "movss", { XM, EXd } },
3680 { "movupd", { XM, EXx } },
3681 { "movsd", { XM, EXq } },
30d1c836 3682 },
4e7d34a6 3683
1ceb70f8 3684 /* PREFIX_0F11 */
30d1c836 3685 {
b6169b20 3686 { "movups", { EXxS, XM } },
fa99fab2 3687 { "movss", { EXdS, XM } },
b6169b20 3688 { "movupd", { EXxS, XM } },
fa99fab2 3689 { "movsd", { EXqS, XM } },
4e7d34a6 3690 },
252b5132 3691
1ceb70f8 3692 /* PREFIX_0F12 */
c608c12e 3693 {
1ceb70f8 3694 { MOD_TABLE (MOD_0F12_PREFIX_0) },
4e7d34a6
L
3695 { "movsldup", { XM, EXx } },
3696 { "movlpd", { XM, EXq } },
3697 { "movddup", { XM, EXq } },
c608c12e 3698 },
4e7d34a6 3699
1ceb70f8 3700 /* PREFIX_0F16 */
c608c12e 3701 {
1ceb70f8 3702 { MOD_TABLE (MOD_0F16_PREFIX_0) },
4e7d34a6
L
3703 { "movshdup", { XM, EXx } },
3704 { "movhpd", { XM, EXq } },
c608c12e 3705 },
4e7d34a6 3706
7e8b059b
L
3707 /* PREFIX_0F1A */
3708 {
3709 { MOD_TABLE (MOD_0F1A_PREFIX_0) },
3710 { "bndcl", { Gbnd, Ev_bnd } },
3711 { "bndmov", { Gbnd, Ebnd } },
3712 { "bndcu", { Gbnd, Ev_bnd } },
3713 },
3714
3715 /* PREFIX_0F1B */
3716 {
3717 { MOD_TABLE (MOD_0F1B_PREFIX_0) },
3718 { MOD_TABLE (MOD_0F1B_PREFIX_1) },
3719 { "bndmov", { Ebnd, Gbnd } },
3720 { "bndcn", { Gbnd, Ev_bnd } },
3721 },
3722
1ceb70f8 3723 /* PREFIX_0F2A */
c608c12e 3724 {
09335d05 3725 { "cvtpi2ps", { XM, EMCq } },
98b528ac 3726 { "cvtsi2ss%LQ", { XM, Ev } },
09335d05 3727 { "cvtpi2pd", { XM, EMCq } },
98b528ac 3728 { "cvtsi2sd%LQ", { XM, Ev } },
c608c12e 3729 },
4e7d34a6 3730
1ceb70f8 3731 /* PREFIX_0F2B */
c608c12e 3732 {
75c135a8
L
3733 { MOD_TABLE (MOD_0F2B_PREFIX_0) },
3734 { MOD_TABLE (MOD_0F2B_PREFIX_1) },
3735 { MOD_TABLE (MOD_0F2B_PREFIX_2) },
3736 { MOD_TABLE (MOD_0F2B_PREFIX_3) },
c608c12e 3737 },
4e7d34a6 3738
1ceb70f8 3739 /* PREFIX_0F2C */
c608c12e 3740 {
09335d05
L
3741 { "cvttps2pi", { MXC, EXq } },
3742 { "cvttss2siY", { Gv, EXd } },
09a2c6cf 3743 { "cvttpd2pi", { MXC, EXx } },
09335d05 3744 { "cvttsd2siY", { Gv, EXq } },
c608c12e 3745 },
4e7d34a6 3746
1ceb70f8 3747 /* PREFIX_0F2D */
c608c12e 3748 {
4e7d34a6
L
3749 { "cvtps2pi", { MXC, EXq } },
3750 { "cvtss2siY", { Gv, EXd } },
3751 { "cvtpd2pi", { MXC, EXx } },
3752 { "cvtsd2siY", { Gv, EXq } },
c608c12e 3753 },
4e7d34a6 3754
1ceb70f8 3755 /* PREFIX_0F2E */
c608c12e 3756 {
7bb15c6f 3757 { "ucomiss",{ XM, EXd } },
592d1631 3758 { Bad_Opcode },
7bb15c6f 3759 { "ucomisd",{ XM, EXq } },
c608c12e 3760 },
4e7d34a6 3761
1ceb70f8 3762 /* PREFIX_0F2F */
c608c12e 3763 {
4e7d34a6 3764 { "comiss", { XM, EXd } },
592d1631 3765 { Bad_Opcode },
4e7d34a6 3766 { "comisd", { XM, EXq } },
c608c12e 3767 },
4e7d34a6 3768
1ceb70f8 3769 /* PREFIX_0F51 */
c608c12e 3770 {
4e7d34a6
L
3771 { "sqrtps", { XM, EXx } },
3772 { "sqrtss", { XM, EXd } },
3773 { "sqrtpd", { XM, EXx } },
3774 { "sqrtsd", { XM, EXq } },
c608c12e 3775 },
4e7d34a6 3776
1ceb70f8 3777 /* PREFIX_0F52 */
c608c12e 3778 {
4e7d34a6
L
3779 { "rsqrtps",{ XM, EXx } },
3780 { "rsqrtss",{ XM, EXd } },
c608c12e 3781 },
4e7d34a6 3782
1ceb70f8 3783 /* PREFIX_0F53 */
c608c12e 3784 {
4e7d34a6
L
3785 { "rcpps", { XM, EXx } },
3786 { "rcpss", { XM, EXd } },
c608c12e 3787 },
4e7d34a6 3788
1ceb70f8 3789 /* PREFIX_0F58 */
c608c12e 3790 {
4e7d34a6
L
3791 { "addps", { XM, EXx } },
3792 { "addss", { XM, EXd } },
3793 { "addpd", { XM, EXx } },
3794 { "addsd", { XM, EXq } },
c608c12e 3795 },
4e7d34a6 3796
1ceb70f8 3797 /* PREFIX_0F59 */
c608c12e 3798 {
4e7d34a6
L
3799 { "mulps", { XM, EXx } },
3800 { "mulss", { XM, EXd } },
3801 { "mulpd", { XM, EXx } },
3802 { "mulsd", { XM, EXq } },
041bd2e0 3803 },
4e7d34a6 3804
1ceb70f8 3805 /* PREFIX_0F5A */
041bd2e0 3806 {
4e7d34a6
L
3807 { "cvtps2pd", { XM, EXq } },
3808 { "cvtss2sd", { XM, EXd } },
3809 { "cvtpd2ps", { XM, EXx } },
3810 { "cvtsd2ss", { XM, EXq } },
041bd2e0 3811 },
4e7d34a6 3812
1ceb70f8 3813 /* PREFIX_0F5B */
041bd2e0 3814 {
09a2c6cf
L
3815 { "cvtdq2ps", { XM, EXx } },
3816 { "cvttps2dq", { XM, EXx } },
3817 { "cvtps2dq", { XM, EXx } },
041bd2e0 3818 },
4e7d34a6 3819
1ceb70f8 3820 /* PREFIX_0F5C */
041bd2e0 3821 {
4e7d34a6
L
3822 { "subps", { XM, EXx } },
3823 { "subss", { XM, EXd } },
3824 { "subpd", { XM, EXx } },
3825 { "subsd", { XM, EXq } },
041bd2e0 3826 },
4e7d34a6 3827
1ceb70f8 3828 /* PREFIX_0F5D */
041bd2e0 3829 {
4e7d34a6
L
3830 { "minps", { XM, EXx } },
3831 { "minss", { XM, EXd } },
3832 { "minpd", { XM, EXx } },
3833 { "minsd", { XM, EXq } },
041bd2e0 3834 },
4e7d34a6 3835
1ceb70f8 3836 /* PREFIX_0F5E */
041bd2e0 3837 {
4e7d34a6
L
3838 { "divps", { XM, EXx } },
3839 { "divss", { XM, EXd } },
3840 { "divpd", { XM, EXx } },
3841 { "divsd", { XM, EXq } },
041bd2e0 3842 },
4e7d34a6 3843
1ceb70f8 3844 /* PREFIX_0F5F */
041bd2e0 3845 {
4e7d34a6
L
3846 { "maxps", { XM, EXx } },
3847 { "maxss", { XM, EXd } },
3848 { "maxpd", { XM, EXx } },
3849 { "maxsd", { XM, EXq } },
041bd2e0 3850 },
4e7d34a6 3851
1ceb70f8 3852 /* PREFIX_0F60 */
041bd2e0 3853 {
4e7d34a6 3854 { "punpcklbw",{ MX, EMd } },
592d1631 3855 { Bad_Opcode },
4e7d34a6 3856 { "punpcklbw",{ MX, EMx } },
041bd2e0 3857 },
4e7d34a6 3858
1ceb70f8 3859 /* PREFIX_0F61 */
041bd2e0 3860 {
4e7d34a6 3861 { "punpcklwd",{ MX, EMd } },
592d1631 3862 { Bad_Opcode },
4e7d34a6 3863 { "punpcklwd",{ MX, EMx } },
041bd2e0 3864 },
4e7d34a6 3865
1ceb70f8 3866 /* PREFIX_0F62 */
041bd2e0 3867 {
4e7d34a6 3868 { "punpckldq",{ MX, EMd } },
592d1631 3869 { Bad_Opcode },
4e7d34a6 3870 { "punpckldq",{ MX, EMx } },
041bd2e0 3871 },
4e7d34a6 3872
1ceb70f8 3873 /* PREFIX_0F6C */
041bd2e0 3874 {
592d1631
L
3875 { Bad_Opcode },
3876 { Bad_Opcode },
4e7d34a6 3877 { "punpcklqdq", { XM, EXx } },
0f17484f 3878 },
4e7d34a6 3879
1ceb70f8 3880 /* PREFIX_0F6D */
0f17484f 3881 {
592d1631
L
3882 { Bad_Opcode },
3883 { Bad_Opcode },
4e7d34a6 3884 { "punpckhqdq", { XM, EXx } },
041bd2e0 3885 },
4e7d34a6 3886
1ceb70f8 3887 /* PREFIX_0F6F */
ca164297 3888 {
4e7d34a6
L
3889 { "movq", { MX, EM } },
3890 { "movdqu", { XM, EXx } },
3891 { "movdqa", { XM, EXx } },
ca164297 3892 },
4e7d34a6 3893
1ceb70f8 3894 /* PREFIX_0F70 */
4e7d34a6
L
3895 {
3896 { "pshufw", { MX, EM, Ib } },
3897 { "pshufhw",{ XM, EXx, Ib } },
3898 { "pshufd", { XM, EXx, Ib } },
3899 { "pshuflw",{ XM, EXx, Ib } },
3900 },
3901
92fddf8e
L
3902 /* PREFIX_0F73_REG_3 */
3903 {
592d1631
L
3904 { Bad_Opcode },
3905 { Bad_Opcode },
92fddf8e 3906 { "psrldq", { XS, Ib } },
92fddf8e
L
3907 },
3908
3909 /* PREFIX_0F73_REG_7 */
3910 {
592d1631
L
3911 { Bad_Opcode },
3912 { Bad_Opcode },
92fddf8e 3913 { "pslldq", { XS, Ib } },
92fddf8e
L
3914 },
3915
1ceb70f8 3916 /* PREFIX_0F78 */
4e7d34a6
L
3917 {
3918 {"vmread", { Em, Gm } },
592d1631 3919 { Bad_Opcode },
4e7d34a6
L
3920 {"extrq", { XS, Ib, Ib } },
3921 {"insertq", { XM, XS, Ib, Ib } },
3922 },
3923
1ceb70f8 3924 /* PREFIX_0F79 */
4e7d34a6
L
3925 {
3926 {"vmwrite", { Gm, Em } },
592d1631 3927 { Bad_Opcode },
4e7d34a6
L
3928 {"extrq", { XM, XS } },
3929 {"insertq", { XM, XS } },
3930 },
3931
1ceb70f8 3932 /* PREFIX_0F7C */
ca164297 3933 {
592d1631
L
3934 { Bad_Opcode },
3935 { Bad_Opcode },
09a2c6cf
L
3936 { "haddpd", { XM, EXx } },
3937 { "haddps", { XM, EXx } },
ca164297 3938 },
4e7d34a6 3939
1ceb70f8 3940 /* PREFIX_0F7D */
ca164297 3941 {
592d1631
L
3942 { Bad_Opcode },
3943 { Bad_Opcode },
09a2c6cf
L
3944 { "hsubpd", { XM, EXx } },
3945 { "hsubps", { XM, EXx } },
ca164297 3946 },
4e7d34a6 3947
1ceb70f8 3948 /* PREFIX_0F7E */
ca164297 3949 {
4e7d34a6
L
3950 { "movK", { Edq, MX } },
3951 { "movq", { XM, EXq } },
3952 { "movK", { Edq, XM } },
ca164297 3953 },
4e7d34a6 3954
1ceb70f8 3955 /* PREFIX_0F7F */
ca164297 3956 {
b6169b20
L
3957 { "movq", { EMS, MX } },
3958 { "movdqu", { EXxS, XM } },
3959 { "movdqa", { EXxS, XM } },
ca164297 3960 },
4e7d34a6 3961
c7b8aa3a
L
3962 /* PREFIX_0FAE_REG_0 */
3963 {
3964 { Bad_Opcode },
3965 { "rdfsbase", { Ev } },
3966 },
3967
3968 /* PREFIX_0FAE_REG_1 */
3969 {
3970 { Bad_Opcode },
3971 { "rdgsbase", { Ev } },
3972 },
3973
3974 /* PREFIX_0FAE_REG_2 */
3975 {
3976 { Bad_Opcode },
3977 { "wrfsbase", { Ev } },
3978 },
3979
3980 /* PREFIX_0FAE_REG_3 */
3981 {
3982 { Bad_Opcode },
3983 { "wrgsbase", { Ev } },
3984 },
3985
963f3586
IT
3986 /* PREFIX_0FAE_REG_7 */
3987 {
3988 { "clflush", { Mb } },
3989 { Bad_Opcode },
3990 { "clflushopt", { Mb } },
3991 },
3992
1ceb70f8 3993 /* PREFIX_0FB8 */
ca164297 3994 {
592d1631 3995 { Bad_Opcode },
4e7d34a6 3996 { "popcntS", { Gv, Ev } },
ca164297 3997 },
4e7d34a6 3998
f12dc422
L
3999 /* PREFIX_0FBC */
4000 {
4001 { "bsfS", { Gv, Ev } },
4002 { "tzcntS", { Gv, Ev } },
4003 { "bsfS", { Gv, Ev } },
4004 },
4005
1ceb70f8 4006 /* PREFIX_0FBD */
050dfa73 4007 {
4e7d34a6
L
4008 { "bsrS", { Gv, Ev } },
4009 { "lzcntS", { Gv, Ev } },
4010 { "bsrS", { Gv, Ev } },
050dfa73
MM
4011 },
4012
1ceb70f8 4013 /* PREFIX_0FC2 */
050dfa73 4014 {
ad19981d
L
4015 { "cmpps", { XM, EXx, CMP } },
4016 { "cmpss", { XM, EXd, CMP } },
4017 { "cmppd", { XM, EXx, CMP } },
4018 { "cmpsd", { XM, EXq, CMP } },
050dfa73 4019 },
246c51aa 4020
4ee52178
L
4021 /* PREFIX_0FC3 */
4022 {
4023 { "movntiS", { Ma, Gv } },
4ee52178
L
4024 },
4025
92fddf8e
L
4026 /* PREFIX_0FC7_REG_6 */
4027 {
4028 { "vmptrld",{ Mq } },
4029 { "vmxon", { Mq } },
4030 { "vmclear",{ Mq } },
92fddf8e
L
4031 },
4032
1ceb70f8 4033 /* PREFIX_0FD0 */
050dfa73 4034 {
592d1631
L
4035 { Bad_Opcode },
4036 { Bad_Opcode },
4e7d34a6
L
4037 { "addsubpd", { XM, EXx } },
4038 { "addsubps", { XM, EXx } },
246c51aa 4039 },
050dfa73 4040
1ceb70f8 4041 /* PREFIX_0FD6 */
050dfa73 4042 {
592d1631 4043 { Bad_Opcode },
4e7d34a6 4044 { "movq2dq",{ XM, MS } },
b6169b20 4045 { "movq", { EXqS, XM } },
4e7d34a6 4046 { "movdq2q",{ MX, XS } },
050dfa73
MM
4047 },
4048
1ceb70f8 4049 /* PREFIX_0FE6 */
7918206c 4050 {
592d1631 4051 { Bad_Opcode },
4e7d34a6
L
4052 { "cvtdq2pd", { XM, EXq } },
4053 { "cvttpd2dq", { XM, EXx } },
4054 { "cvtpd2dq", { XM, EXx } },
7918206c 4055 },
8b38ad71 4056
1ceb70f8 4057 /* PREFIX_0FE7 */
8b38ad71 4058 {
4ee52178 4059 { "movntq", { Mq, MX } },
592d1631 4060 { Bad_Opcode },
75c135a8 4061 { MOD_TABLE (MOD_0FE7_PREFIX_2) },
4e7d34a6
L
4062 },
4063
1ceb70f8 4064 /* PREFIX_0FF0 */
4e7d34a6 4065 {
592d1631
L
4066 { Bad_Opcode },
4067 { Bad_Opcode },
4068 { Bad_Opcode },
1ceb70f8 4069 { MOD_TABLE (MOD_0FF0_PREFIX_3) },
4e7d34a6
L
4070 },
4071
1ceb70f8 4072 /* PREFIX_0FF7 */
4e7d34a6
L
4073 {
4074 { "maskmovq", { MX, MS } },
592d1631 4075 { Bad_Opcode },
4e7d34a6 4076 { "maskmovdqu", { XM, XS } },
8b38ad71 4077 },
42903f7f 4078
1ceb70f8 4079 /* PREFIX_0F3810 */
42903f7f 4080 {
592d1631
L
4081 { Bad_Opcode },
4082 { Bad_Opcode },
88a94849 4083 { "pblendvb", { XM, EXx, XMM0 } },
42903f7f
L
4084 },
4085
1ceb70f8 4086 /* PREFIX_0F3814 */
42903f7f 4087 {
592d1631
L
4088 { Bad_Opcode },
4089 { Bad_Opcode },
88a94849 4090 { "blendvps", { XM, EXx, XMM0 } },
42903f7f
L
4091 },
4092
1ceb70f8 4093 /* PREFIX_0F3815 */
42903f7f 4094 {
592d1631
L
4095 { Bad_Opcode },
4096 { Bad_Opcode },
09a2c6cf 4097 { "blendvpd", { XM, EXx, XMM0 } },
42903f7f
L
4098 },
4099
1ceb70f8 4100 /* PREFIX_0F3817 */
42903f7f 4101 {
592d1631
L
4102 { Bad_Opcode },
4103 { Bad_Opcode },
09a2c6cf 4104 { "ptest", { XM, EXx } },
42903f7f
L
4105 },
4106
1ceb70f8 4107 /* PREFIX_0F3820 */
42903f7f 4108 {
592d1631
L
4109 { Bad_Opcode },
4110 { Bad_Opcode },
8976381e 4111 { "pmovsxbw", { XM, EXq } },
42903f7f
L
4112 },
4113
1ceb70f8 4114 /* PREFIX_0F3821 */
42903f7f 4115 {
592d1631
L
4116 { Bad_Opcode },
4117 { Bad_Opcode },
8976381e 4118 { "pmovsxbd", { XM, EXd } },
42903f7f
L
4119 },
4120
1ceb70f8 4121 /* PREFIX_0F3822 */
42903f7f 4122 {
592d1631
L
4123 { Bad_Opcode },
4124 { Bad_Opcode },
8976381e 4125 { "pmovsxbq", { XM, EXw } },
42903f7f
L
4126 },
4127
1ceb70f8 4128 /* PREFIX_0F3823 */
42903f7f 4129 {
592d1631
L
4130 { Bad_Opcode },
4131 { Bad_Opcode },
8976381e 4132 { "pmovsxwd", { XM, EXq } },
42903f7f
L
4133 },
4134
1ceb70f8 4135 /* PREFIX_0F3824 */
42903f7f 4136 {
592d1631
L
4137 { Bad_Opcode },
4138 { Bad_Opcode },
8976381e 4139 { "pmovsxwq", { XM, EXd } },
42903f7f
L
4140 },
4141
1ceb70f8 4142 /* PREFIX_0F3825 */
42903f7f 4143 {
592d1631
L
4144 { Bad_Opcode },
4145 { Bad_Opcode },
8976381e 4146 { "pmovsxdq", { XM, EXq } },
42903f7f
L
4147 },
4148
1ceb70f8 4149 /* PREFIX_0F3828 */
42903f7f 4150 {
592d1631
L
4151 { Bad_Opcode },
4152 { Bad_Opcode },
09a2c6cf 4153 { "pmuldq", { XM, EXx } },
42903f7f
L
4154 },
4155
1ceb70f8 4156 /* PREFIX_0F3829 */
42903f7f 4157 {
592d1631
L
4158 { Bad_Opcode },
4159 { Bad_Opcode },
09a2c6cf 4160 { "pcmpeqq", { XM, EXx } },
42903f7f
L
4161 },
4162
1ceb70f8 4163 /* PREFIX_0F382A */
42903f7f 4164 {
592d1631
L
4165 { Bad_Opcode },
4166 { Bad_Opcode },
75c135a8 4167 { MOD_TABLE (MOD_0F382A_PREFIX_2) },
42903f7f
L
4168 },
4169
1ceb70f8 4170 /* PREFIX_0F382B */
42903f7f 4171 {
592d1631
L
4172 { Bad_Opcode },
4173 { Bad_Opcode },
09a2c6cf 4174 { "packusdw", { XM, EXx } },
42903f7f
L
4175 },
4176
1ceb70f8 4177 /* PREFIX_0F3830 */
42903f7f 4178 {
592d1631
L
4179 { Bad_Opcode },
4180 { Bad_Opcode },
8976381e 4181 { "pmovzxbw", { XM, EXq } },
42903f7f
L
4182 },
4183
1ceb70f8 4184 /* PREFIX_0F3831 */
42903f7f 4185 {
592d1631
L
4186 { Bad_Opcode },
4187 { Bad_Opcode },
8976381e 4188 { "pmovzxbd", { XM, EXd } },
42903f7f
L
4189 },
4190
1ceb70f8 4191 /* PREFIX_0F3832 */
42903f7f 4192 {
592d1631
L
4193 { Bad_Opcode },
4194 { Bad_Opcode },
8976381e 4195 { "pmovzxbq", { XM, EXw } },
42903f7f
L
4196 },
4197
1ceb70f8 4198 /* PREFIX_0F3833 */
42903f7f 4199 {
592d1631
L
4200 { Bad_Opcode },
4201 { Bad_Opcode },
8976381e 4202 { "pmovzxwd", { XM, EXq } },
42903f7f
L
4203 },
4204
1ceb70f8 4205 /* PREFIX_0F3834 */
42903f7f 4206 {
592d1631
L
4207 { Bad_Opcode },
4208 { Bad_Opcode },
8976381e 4209 { "pmovzxwq", { XM, EXd } },
42903f7f
L
4210 },
4211
1ceb70f8 4212 /* PREFIX_0F3835 */
42903f7f 4213 {
592d1631
L
4214 { Bad_Opcode },
4215 { Bad_Opcode },
8976381e 4216 { "pmovzxdq", { XM, EXq } },
42903f7f
L
4217 },
4218
1ceb70f8 4219 /* PREFIX_0F3837 */
4e7d34a6 4220 {
592d1631
L
4221 { Bad_Opcode },
4222 { Bad_Opcode },
4e7d34a6 4223 { "pcmpgtq", { XM, EXx } },
4e7d34a6
L
4224 },
4225
1ceb70f8 4226 /* PREFIX_0F3838 */
42903f7f 4227 {
592d1631
L
4228 { Bad_Opcode },
4229 { Bad_Opcode },
09a2c6cf 4230 { "pminsb", { XM, EXx } },
42903f7f
L
4231 },
4232
1ceb70f8 4233 /* PREFIX_0F3839 */
42903f7f 4234 {
592d1631
L
4235 { Bad_Opcode },
4236 { Bad_Opcode },
09a2c6cf 4237 { "pminsd", { XM, EXx } },
42903f7f
L
4238 },
4239
1ceb70f8 4240 /* PREFIX_0F383A */
42903f7f 4241 {
592d1631
L
4242 { Bad_Opcode },
4243 { Bad_Opcode },
09a2c6cf 4244 { "pminuw", { XM, EXx } },
42903f7f
L
4245 },
4246
1ceb70f8 4247 /* PREFIX_0F383B */
42903f7f 4248 {
592d1631
L
4249 { Bad_Opcode },
4250 { Bad_Opcode },
09a2c6cf 4251 { "pminud", { XM, EXx } },
42903f7f
L
4252 },
4253
1ceb70f8 4254 /* PREFIX_0F383C */
42903f7f 4255 {
592d1631
L
4256 { Bad_Opcode },
4257 { Bad_Opcode },
09a2c6cf 4258 { "pmaxsb", { XM, EXx } },
42903f7f
L
4259 },
4260
1ceb70f8 4261 /* PREFIX_0F383D */
42903f7f 4262 {
592d1631
L
4263 { Bad_Opcode },
4264 { Bad_Opcode },
09a2c6cf 4265 { "pmaxsd", { XM, EXx } },
42903f7f
L
4266 },
4267
1ceb70f8 4268 /* PREFIX_0F383E */
42903f7f 4269 {
592d1631
L
4270 { Bad_Opcode },
4271 { Bad_Opcode },
09a2c6cf 4272 { "pmaxuw", { XM, EXx } },
42903f7f
L
4273 },
4274
1ceb70f8 4275 /* PREFIX_0F383F */
42903f7f 4276 {
592d1631
L
4277 { Bad_Opcode },
4278 { Bad_Opcode },
09a2c6cf 4279 { "pmaxud", { XM, EXx } },
42903f7f
L
4280 },
4281
1ceb70f8 4282 /* PREFIX_0F3840 */
42903f7f 4283 {
592d1631
L
4284 { Bad_Opcode },
4285 { Bad_Opcode },
09a2c6cf 4286 { "pmulld", { XM, EXx } },
42903f7f
L
4287 },
4288
1ceb70f8 4289 /* PREFIX_0F3841 */
42903f7f 4290 {
592d1631
L
4291 { Bad_Opcode },
4292 { Bad_Opcode },
09a2c6cf 4293 { "phminposuw", { XM, EXx } },
42903f7f
L
4294 },
4295
f1f8f695
L
4296 /* PREFIX_0F3880 */
4297 {
592d1631
L
4298 { Bad_Opcode },
4299 { Bad_Opcode },
f1f8f695 4300 { "invept", { Gm, Mo } },
f1f8f695
L
4301 },
4302
4303 /* PREFIX_0F3881 */
4304 {
592d1631
L
4305 { Bad_Opcode },
4306 { Bad_Opcode },
f1f8f695 4307 { "invvpid", { Gm, Mo } },
f1f8f695
L
4308 },
4309
6c30d220
L
4310 /* PREFIX_0F3882 */
4311 {
4312 { Bad_Opcode },
4313 { Bad_Opcode },
4314 { "invpcid", { Gm, M } },
4315 },
4316
a0046408
L
4317 /* PREFIX_0F38C8 */
4318 {
4319 { "sha1nexte", { XM, EXxmm } },
4320 },
4321
4322 /* PREFIX_0F38C9 */
4323 {
4324 { "sha1msg1", { XM, EXxmm } },
4325 },
4326
4327 /* PREFIX_0F38CA */
4328 {
4329 { "sha1msg2", { XM, EXxmm } },
4330 },
4331
4332 /* PREFIX_0F38CB */
4333 {
4334 { "sha256rnds2", { XM, EXxmm, XMM0 } },
4335 },
4336
4337 /* PREFIX_0F38CC */
4338 {
4339 { "sha256msg1", { XM, EXxmm } },
4340 },
4341
4342 /* PREFIX_0F38CD */
4343 {
4344 { "sha256msg2", { XM, EXxmm } },
4345 },
4346
c0f3af97
L
4347 /* PREFIX_0F38DB */
4348 {
592d1631
L
4349 { Bad_Opcode },
4350 { Bad_Opcode },
c0f3af97 4351 { "aesimc", { XM, EXx } },
c0f3af97
L
4352 },
4353
4354 /* PREFIX_0F38DC */
4355 {
592d1631
L
4356 { Bad_Opcode },
4357 { Bad_Opcode },
c0f3af97 4358 { "aesenc", { XM, EXx } },
c0f3af97
L
4359 },
4360
4361 /* PREFIX_0F38DD */
4362 {
592d1631
L
4363 { Bad_Opcode },
4364 { Bad_Opcode },
c0f3af97 4365 { "aesenclast", { XM, EXx } },
c0f3af97
L
4366 },
4367
4368 /* PREFIX_0F38DE */
4369 {
592d1631
L
4370 { Bad_Opcode },
4371 { Bad_Opcode },
c0f3af97 4372 { "aesdec", { XM, EXx } },
c0f3af97
L
4373 },
4374
4375 /* PREFIX_0F38DF */
4376 {
592d1631
L
4377 { Bad_Opcode },
4378 { Bad_Opcode },
c0f3af97 4379 { "aesdeclast", { XM, EXx } },
c0f3af97
L
4380 },
4381
1ceb70f8 4382 /* PREFIX_0F38F0 */
4e7d34a6 4383 {
f1f8f695 4384 { "movbeS", { Gv, { MOVBE_Fixup, v_mode } } },
592d1631 4385 { Bad_Opcode },
f1f8f695 4386 { "movbeS", { Gv, { MOVBE_Fixup, v_mode } } },
7bb15c6f 4387 { "crc32", { Gdq, { CRC32_Fixup, b_mode } } },
4e7d34a6
L
4388 },
4389
1ceb70f8 4390 /* PREFIX_0F38F1 */
4e7d34a6 4391 {
f1f8f695 4392 { "movbeS", { { MOVBE_Fixup, v_mode }, Gv } },
592d1631 4393 { Bad_Opcode },
f1f8f695 4394 { "movbeS", { { MOVBE_Fixup, v_mode }, Gv } },
7bb15c6f 4395 { "crc32", { Gdq, { CRC32_Fixup, v_mode } } },
4e7d34a6
L
4396 },
4397
e2e1fcde
L
4398 /* PREFIX_0F38F6 */
4399 {
4400 { Bad_Opcode },
4401 { "adoxS", { Gdq, Edq} },
4402 { "adcxS", { Gdq, Edq} },
4403 { Bad_Opcode },
4404 },
4405
1ceb70f8 4406 /* PREFIX_0F3A08 */
42903f7f 4407 {
592d1631
L
4408 { Bad_Opcode },
4409 { Bad_Opcode },
09a2c6cf 4410 { "roundps", { XM, EXx, Ib } },
42903f7f
L
4411 },
4412
1ceb70f8 4413 /* PREFIX_0F3A09 */
42903f7f 4414 {
592d1631
L
4415 { Bad_Opcode },
4416 { Bad_Opcode },
09a2c6cf 4417 { "roundpd", { XM, EXx, Ib } },
42903f7f
L
4418 },
4419
1ceb70f8 4420 /* PREFIX_0F3A0A */
42903f7f 4421 {
592d1631
L
4422 { Bad_Opcode },
4423 { Bad_Opcode },
09335d05 4424 { "roundss", { XM, EXd, Ib } },
42903f7f
L
4425 },
4426
1ceb70f8 4427 /* PREFIX_0F3A0B */
42903f7f 4428 {
592d1631
L
4429 { Bad_Opcode },
4430 { Bad_Opcode },
09335d05 4431 { "roundsd", { XM, EXq, Ib } },
42903f7f
L
4432 },
4433
1ceb70f8 4434 /* PREFIX_0F3A0C */
42903f7f 4435 {
592d1631
L
4436 { Bad_Opcode },
4437 { Bad_Opcode },
09a2c6cf 4438 { "blendps", { XM, EXx, Ib } },
42903f7f
L
4439 },
4440
1ceb70f8 4441 /* PREFIX_0F3A0D */
42903f7f 4442 {
592d1631
L
4443 { Bad_Opcode },
4444 { Bad_Opcode },
09a2c6cf 4445 { "blendpd", { XM, EXx, Ib } },
42903f7f
L
4446 },
4447
1ceb70f8 4448 /* PREFIX_0F3A0E */
42903f7f 4449 {
592d1631
L
4450 { Bad_Opcode },
4451 { Bad_Opcode },
09a2c6cf 4452 { "pblendw", { XM, EXx, Ib } },
42903f7f
L
4453 },
4454
1ceb70f8 4455 /* PREFIX_0F3A14 */
42903f7f 4456 {
592d1631
L
4457 { Bad_Opcode },
4458 { Bad_Opcode },
42903f7f 4459 { "pextrb", { Edqb, XM, Ib } },
42903f7f
L
4460 },
4461
1ceb70f8 4462 /* PREFIX_0F3A15 */
42903f7f 4463 {
592d1631
L
4464 { Bad_Opcode },
4465 { Bad_Opcode },
42903f7f 4466 { "pextrw", { Edqw, XM, Ib } },
42903f7f
L
4467 },
4468
1ceb70f8 4469 /* PREFIX_0F3A16 */
42903f7f 4470 {
592d1631
L
4471 { Bad_Opcode },
4472 { Bad_Opcode },
42903f7f 4473 { "pextrK", { Edq, XM, Ib } },
42903f7f
L
4474 },
4475
1ceb70f8 4476 /* PREFIX_0F3A17 */
42903f7f 4477 {
592d1631
L
4478 { Bad_Opcode },
4479 { Bad_Opcode },
42903f7f 4480 { "extractps", { Edqd, XM, Ib } },
42903f7f
L
4481 },
4482
1ceb70f8 4483 /* PREFIX_0F3A20 */
42903f7f 4484 {
592d1631
L
4485 { Bad_Opcode },
4486 { Bad_Opcode },
42903f7f 4487 { "pinsrb", { XM, Edqb, Ib } },
42903f7f
L
4488 },
4489
1ceb70f8 4490 /* PREFIX_0F3A21 */
42903f7f 4491 {
592d1631
L
4492 { Bad_Opcode },
4493 { Bad_Opcode },
8976381e 4494 { "insertps", { XM, EXd, Ib } },
42903f7f
L
4495 },
4496
1ceb70f8 4497 /* PREFIX_0F3A22 */
42903f7f 4498 {
592d1631
L
4499 { Bad_Opcode },
4500 { Bad_Opcode },
42903f7f 4501 { "pinsrK", { XM, Edq, Ib } },
42903f7f
L
4502 },
4503
1ceb70f8 4504 /* PREFIX_0F3A40 */
42903f7f 4505 {
592d1631
L
4506 { Bad_Opcode },
4507 { Bad_Opcode },
09a2c6cf 4508 { "dpps", { XM, EXx, Ib } },
42903f7f
L
4509 },
4510
1ceb70f8 4511 /* PREFIX_0F3A41 */
42903f7f 4512 {
592d1631
L
4513 { Bad_Opcode },
4514 { Bad_Opcode },
09a2c6cf 4515 { "dppd", { XM, EXx, Ib } },
42903f7f
L
4516 },
4517
1ceb70f8 4518 /* PREFIX_0F3A42 */
42903f7f 4519 {
592d1631
L
4520 { Bad_Opcode },
4521 { Bad_Opcode },
09a2c6cf 4522 { "mpsadbw", { XM, EXx, Ib } },
42903f7f 4523 },
381d071f 4524
c0f3af97
L
4525 /* PREFIX_0F3A44 */
4526 {
592d1631
L
4527 { Bad_Opcode },
4528 { Bad_Opcode },
c0f3af97 4529 { "pclmulqdq", { XM, EXx, PCLMUL } },
c0f3af97
L
4530 },
4531
1ceb70f8 4532 /* PREFIX_0F3A60 */
381d071f 4533 {
592d1631
L
4534 { Bad_Opcode },
4535 { Bad_Opcode },
4e7d34a6 4536 { "pcmpestrm", { XM, EXx, Ib } },
381d071f
L
4537 },
4538
1ceb70f8 4539 /* PREFIX_0F3A61 */
381d071f 4540 {
592d1631
L
4541 { Bad_Opcode },
4542 { Bad_Opcode },
4e7d34a6 4543 { "pcmpestri", { XM, EXx, Ib } },
381d071f
L
4544 },
4545
1ceb70f8 4546 /* PREFIX_0F3A62 */
381d071f 4547 {
592d1631
L
4548 { Bad_Opcode },
4549 { Bad_Opcode },
4e7d34a6 4550 { "pcmpistrm", { XM, EXx, Ib } },
381d071f
L
4551 },
4552
1ceb70f8 4553 /* PREFIX_0F3A63 */
381d071f 4554 {
592d1631
L
4555 { Bad_Opcode },
4556 { Bad_Opcode },
4e7d34a6 4557 { "pcmpistri", { XM, EXx, Ib } },
381d071f 4558 },
09a2c6cf 4559
a0046408
L
4560 /* PREFIX_0F3ACC */
4561 {
4562 { "sha1rnds4", { XM, EXxmm, Ib } },
4563 },
4564
c0f3af97 4565 /* PREFIX_0F3ADF */
09a2c6cf 4566 {
592d1631
L
4567 { Bad_Opcode },
4568 { Bad_Opcode },
c0f3af97 4569 { "aeskeygenassist", { XM, EXx, Ib } },
09a2c6cf
L
4570 },
4571
592a252b 4572 /* PREFIX_VEX_0F10 */
09a2c6cf 4573 {
592a252b
L
4574 { VEX_W_TABLE (VEX_W_0F10_P_0) },
4575 { VEX_LEN_TABLE (VEX_LEN_0F10_P_1) },
4576 { VEX_W_TABLE (VEX_W_0F10_P_2) },
4577 { VEX_LEN_TABLE (VEX_LEN_0F10_P_3) },
09a2c6cf
L
4578 },
4579
592a252b 4580 /* PREFIX_VEX_0F11 */
09a2c6cf 4581 {
592a252b
L
4582 { VEX_W_TABLE (VEX_W_0F11_P_0) },
4583 { VEX_LEN_TABLE (VEX_LEN_0F11_P_1) },
4584 { VEX_W_TABLE (VEX_W_0F11_P_2) },
4585 { VEX_LEN_TABLE (VEX_LEN_0F11_P_3) },
09a2c6cf
L
4586 },
4587
592a252b 4588 /* PREFIX_VEX_0F12 */
09a2c6cf 4589 {
592a252b
L
4590 { MOD_TABLE (MOD_VEX_0F12_PREFIX_0) },
4591 { VEX_W_TABLE (VEX_W_0F12_P_1) },
4592 { VEX_LEN_TABLE (VEX_LEN_0F12_P_2) },
4593 { VEX_W_TABLE (VEX_W_0F12_P_3) },
09a2c6cf
L
4594 },
4595
592a252b 4596 /* PREFIX_VEX_0F16 */
09a2c6cf 4597 {
592a252b
L
4598 { MOD_TABLE (MOD_VEX_0F16_PREFIX_0) },
4599 { VEX_W_TABLE (VEX_W_0F16_P_1) },
4600 { VEX_LEN_TABLE (VEX_LEN_0F16_P_2) },
5f754f58 4601 },
7c52e0e8 4602
592a252b 4603 /* PREFIX_VEX_0F2A */
5f754f58 4604 {
592d1631 4605 { Bad_Opcode },
592a252b 4606 { VEX_LEN_TABLE (VEX_LEN_0F2A_P_1) },
592d1631 4607 { Bad_Opcode },
592a252b 4608 { VEX_LEN_TABLE (VEX_LEN_0F2A_P_3) },
5f754f58 4609 },
7c52e0e8 4610
592a252b 4611 /* PREFIX_VEX_0F2C */
5f754f58 4612 {
592d1631 4613 { Bad_Opcode },
592a252b 4614 { VEX_LEN_TABLE (VEX_LEN_0F2C_P_1) },
592d1631 4615 { Bad_Opcode },
592a252b 4616 { VEX_LEN_TABLE (VEX_LEN_0F2C_P_3) },
5f754f58 4617 },
7c52e0e8 4618
592a252b 4619 /* PREFIX_VEX_0F2D */
7c52e0e8 4620 {
592d1631 4621 { Bad_Opcode },
592a252b 4622 { VEX_LEN_TABLE (VEX_LEN_0F2D_P_1) },
592d1631 4623 { Bad_Opcode },
592a252b 4624 { VEX_LEN_TABLE (VEX_LEN_0F2D_P_3) },
7c52e0e8
L
4625 },
4626
592a252b 4627 /* PREFIX_VEX_0F2E */
7c52e0e8 4628 {
592a252b 4629 { VEX_LEN_TABLE (VEX_LEN_0F2E_P_0) },
592d1631 4630 { Bad_Opcode },
592a252b 4631 { VEX_LEN_TABLE (VEX_LEN_0F2E_P_2) },
7c52e0e8
L
4632 },
4633
592a252b 4634 /* PREFIX_VEX_0F2F */
7c52e0e8 4635 {
592a252b 4636 { VEX_LEN_TABLE (VEX_LEN_0F2F_P_0) },
592d1631 4637 { Bad_Opcode },
592a252b 4638 { VEX_LEN_TABLE (VEX_LEN_0F2F_P_2) },
7c52e0e8
L
4639 },
4640
43234a1e
L
4641 /* PREFIX_VEX_0F41 */
4642 {
4643 { VEX_LEN_TABLE (VEX_LEN_0F41_P_0) },
1ba585e8
IT
4644 { Bad_Opcode },
4645 { VEX_LEN_TABLE (VEX_LEN_0F41_P_2) },
43234a1e
L
4646 },
4647
4648 /* PREFIX_VEX_0F42 */
4649 {
4650 { VEX_LEN_TABLE (VEX_LEN_0F42_P_0) },
1ba585e8
IT
4651 { Bad_Opcode },
4652 { VEX_LEN_TABLE (VEX_LEN_0F42_P_2) },
43234a1e
L
4653 },
4654
4655 /* PREFIX_VEX_0F44 */
4656 {
4657 { VEX_LEN_TABLE (VEX_LEN_0F44_P_0) },
1ba585e8
IT
4658 { Bad_Opcode },
4659 { VEX_LEN_TABLE (VEX_LEN_0F44_P_2) },
43234a1e
L
4660 },
4661
4662 /* PREFIX_VEX_0F45 */
4663 {
4664 { VEX_LEN_TABLE (VEX_LEN_0F45_P_0) },
1ba585e8
IT
4665 { Bad_Opcode },
4666 { VEX_LEN_TABLE (VEX_LEN_0F45_P_2) },
43234a1e
L
4667 },
4668
4669 /* PREFIX_VEX_0F46 */
4670 {
4671 { VEX_LEN_TABLE (VEX_LEN_0F46_P_0) },
1ba585e8
IT
4672 { Bad_Opcode },
4673 { VEX_LEN_TABLE (VEX_LEN_0F46_P_2) },
43234a1e
L
4674 },
4675
4676 /* PREFIX_VEX_0F47 */
4677 {
4678 { VEX_LEN_TABLE (VEX_LEN_0F47_P_0) },
1ba585e8
IT
4679 { Bad_Opcode },
4680 { VEX_LEN_TABLE (VEX_LEN_0F47_P_2) },
43234a1e
L
4681 },
4682
1ba585e8 4683 /* PREFIX_VEX_0F4A */
43234a1e 4684 {
1ba585e8 4685 { VEX_LEN_TABLE (VEX_LEN_0F4A_P_0) },
43234a1e 4686 { Bad_Opcode },
1ba585e8
IT
4687 { VEX_LEN_TABLE (VEX_LEN_0F4A_P_2) },
4688 },
4689
4690 /* PREFIX_VEX_0F4B */
4691 {
4692 { VEX_LEN_TABLE (VEX_LEN_0F4B_P_0) },
43234a1e
L
4693 { Bad_Opcode },
4694 { VEX_LEN_TABLE (VEX_LEN_0F4B_P_2) },
4695 },
4696
592a252b 4697 /* PREFIX_VEX_0F51 */
7c52e0e8 4698 {
592a252b
L
4699 { VEX_W_TABLE (VEX_W_0F51_P_0) },
4700 { VEX_LEN_TABLE (VEX_LEN_0F51_P_1) },
4701 { VEX_W_TABLE (VEX_W_0F51_P_2) },
4702 { VEX_LEN_TABLE (VEX_LEN_0F51_P_3) },
7c52e0e8
L
4703 },
4704
592a252b 4705 /* PREFIX_VEX_0F52 */
7c52e0e8 4706 {
592a252b
L
4707 { VEX_W_TABLE (VEX_W_0F52_P_0) },
4708 { VEX_LEN_TABLE (VEX_LEN_0F52_P_1) },
7c52e0e8
L
4709 },
4710
592a252b 4711 /* PREFIX_VEX_0F53 */
7c52e0e8 4712 {
592a252b
L
4713 { VEX_W_TABLE (VEX_W_0F53_P_0) },
4714 { VEX_LEN_TABLE (VEX_LEN_0F53_P_1) },
7c52e0e8
L
4715 },
4716
592a252b 4717 /* PREFIX_VEX_0F58 */
7c52e0e8 4718 {
592a252b
L
4719 { VEX_W_TABLE (VEX_W_0F58_P_0) },
4720 { VEX_LEN_TABLE (VEX_LEN_0F58_P_1) },
4721 { VEX_W_TABLE (VEX_W_0F58_P_2) },
4722 { VEX_LEN_TABLE (VEX_LEN_0F58_P_3) },
7c52e0e8
L
4723 },
4724
592a252b 4725 /* PREFIX_VEX_0F59 */
7c52e0e8 4726 {
592a252b
L
4727 { VEX_W_TABLE (VEX_W_0F59_P_0) },
4728 { VEX_LEN_TABLE (VEX_LEN_0F59_P_1) },
4729 { VEX_W_TABLE (VEX_W_0F59_P_2) },
4730 { VEX_LEN_TABLE (VEX_LEN_0F59_P_3) },
7c52e0e8
L
4731 },
4732
592a252b 4733 /* PREFIX_VEX_0F5A */
7c52e0e8 4734 {
592a252b
L
4735 { VEX_W_TABLE (VEX_W_0F5A_P_0) },
4736 { VEX_LEN_TABLE (VEX_LEN_0F5A_P_1) },
c0f3af97 4737 { "vcvtpd2ps%XY", { XMM, EXx } },
592a252b 4738 { VEX_LEN_TABLE (VEX_LEN_0F5A_P_3) },
7c52e0e8
L
4739 },
4740
592a252b 4741 /* PREFIX_VEX_0F5B */
7c52e0e8 4742 {
592a252b
L
4743 { VEX_W_TABLE (VEX_W_0F5B_P_0) },
4744 { VEX_W_TABLE (VEX_W_0F5B_P_1) },
4745 { VEX_W_TABLE (VEX_W_0F5B_P_2) },
7c52e0e8
L
4746 },
4747
592a252b 4748 /* PREFIX_VEX_0F5C */
7c52e0e8 4749 {
592a252b
L
4750 { VEX_W_TABLE (VEX_W_0F5C_P_0) },
4751 { VEX_LEN_TABLE (VEX_LEN_0F5C_P_1) },
4752 { VEX_W_TABLE (VEX_W_0F5C_P_2) },
4753 { VEX_LEN_TABLE (VEX_LEN_0F5C_P_3) },
7c52e0e8
L
4754 },
4755
592a252b 4756 /* PREFIX_VEX_0F5D */
7c52e0e8 4757 {
592a252b
L
4758 { VEX_W_TABLE (VEX_W_0F5D_P_0) },
4759 { VEX_LEN_TABLE (VEX_LEN_0F5D_P_1) },
4760 { VEX_W_TABLE (VEX_W_0F5D_P_2) },
4761 { VEX_LEN_TABLE (VEX_LEN_0F5D_P_3) },
7c52e0e8
L
4762 },
4763
592a252b 4764 /* PREFIX_VEX_0F5E */
7c52e0e8 4765 {
592a252b
L
4766 { VEX_W_TABLE (VEX_W_0F5E_P_0) },
4767 { VEX_LEN_TABLE (VEX_LEN_0F5E_P_1) },
4768 { VEX_W_TABLE (VEX_W_0F5E_P_2) },
4769 { VEX_LEN_TABLE (VEX_LEN_0F5E_P_3) },
7c52e0e8
L
4770 },
4771
592a252b 4772 /* PREFIX_VEX_0F5F */
7c52e0e8 4773 {
592a252b
L
4774 { VEX_W_TABLE (VEX_W_0F5F_P_0) },
4775 { VEX_LEN_TABLE (VEX_LEN_0F5F_P_1) },
4776 { VEX_W_TABLE (VEX_W_0F5F_P_2) },
4777 { VEX_LEN_TABLE (VEX_LEN_0F5F_P_3) },
7c52e0e8
L
4778 },
4779
592a252b 4780 /* PREFIX_VEX_0F60 */
7c52e0e8 4781 {
592d1631
L
4782 { Bad_Opcode },
4783 { Bad_Opcode },
6c30d220 4784 { VEX_W_TABLE (VEX_W_0F60_P_2) },
7c52e0e8
L
4785 },
4786
592a252b 4787 /* PREFIX_VEX_0F61 */
7c52e0e8 4788 {
592d1631
L
4789 { Bad_Opcode },
4790 { Bad_Opcode },
6c30d220 4791 { VEX_W_TABLE (VEX_W_0F61_P_2) },
7c52e0e8
L
4792 },
4793
592a252b 4794 /* PREFIX_VEX_0F62 */
7c52e0e8 4795 {
592d1631
L
4796 { Bad_Opcode },
4797 { Bad_Opcode },
6c30d220 4798 { VEX_W_TABLE (VEX_W_0F62_P_2) },
7c52e0e8
L
4799 },
4800
592a252b 4801 /* PREFIX_VEX_0F63 */
7c52e0e8 4802 {
592d1631
L
4803 { Bad_Opcode },
4804 { Bad_Opcode },
6c30d220 4805 { VEX_W_TABLE (VEX_W_0F63_P_2) },
7c52e0e8
L
4806 },
4807
592a252b 4808 /* PREFIX_VEX_0F64 */
7c52e0e8 4809 {
592d1631
L
4810 { Bad_Opcode },
4811 { Bad_Opcode },
6c30d220 4812 { VEX_W_TABLE (VEX_W_0F64_P_2) },
7c52e0e8
L
4813 },
4814
592a252b 4815 /* PREFIX_VEX_0F65 */
7c52e0e8 4816 {
592d1631
L
4817 { Bad_Opcode },
4818 { Bad_Opcode },
6c30d220 4819 { VEX_W_TABLE (VEX_W_0F65_P_2) },
7c52e0e8
L
4820 },
4821
592a252b 4822 /* PREFIX_VEX_0F66 */
7c52e0e8 4823 {
592d1631
L
4824 { Bad_Opcode },
4825 { Bad_Opcode },
6c30d220 4826 { VEX_W_TABLE (VEX_W_0F66_P_2) },
7c52e0e8 4827 },
6439fc28 4828
592a252b 4829 /* PREFIX_VEX_0F67 */
331d2d0d 4830 {
592d1631
L
4831 { Bad_Opcode },
4832 { Bad_Opcode },
6c30d220 4833 { VEX_W_TABLE (VEX_W_0F67_P_2) },
c0f3af97
L
4834 },
4835
592a252b 4836 /* PREFIX_VEX_0F68 */
c0f3af97 4837 {
592d1631
L
4838 { Bad_Opcode },
4839 { Bad_Opcode },
6c30d220 4840 { VEX_W_TABLE (VEX_W_0F68_P_2) },
c0f3af97
L
4841 },
4842
592a252b 4843 /* PREFIX_VEX_0F69 */
c0f3af97 4844 {
592d1631
L
4845 { Bad_Opcode },
4846 { Bad_Opcode },
6c30d220 4847 { VEX_W_TABLE (VEX_W_0F69_P_2) },
c0f3af97
L
4848 },
4849
592a252b 4850 /* PREFIX_VEX_0F6A */
c0f3af97 4851 {
592d1631
L
4852 { Bad_Opcode },
4853 { Bad_Opcode },
6c30d220 4854 { VEX_W_TABLE (VEX_W_0F6A_P_2) },
c0f3af97
L
4855 },
4856
592a252b 4857 /* PREFIX_VEX_0F6B */
c0f3af97 4858 {
592d1631
L
4859 { Bad_Opcode },
4860 { Bad_Opcode },
6c30d220 4861 { VEX_W_TABLE (VEX_W_0F6B_P_2) },
c0f3af97
L
4862 },
4863
592a252b 4864 /* PREFIX_VEX_0F6C */
c0f3af97 4865 {
592d1631
L
4866 { Bad_Opcode },
4867 { Bad_Opcode },
6c30d220 4868 { VEX_W_TABLE (VEX_W_0F6C_P_2) },
c0f3af97
L
4869 },
4870
592a252b 4871 /* PREFIX_VEX_0F6D */
c0f3af97 4872 {
592d1631
L
4873 { Bad_Opcode },
4874 { Bad_Opcode },
6c30d220 4875 { VEX_W_TABLE (VEX_W_0F6D_P_2) },
c0f3af97
L
4876 },
4877
592a252b 4878 /* PREFIX_VEX_0F6E */
c0f3af97 4879 {
592d1631
L
4880 { Bad_Opcode },
4881 { Bad_Opcode },
592a252b 4882 { VEX_LEN_TABLE (VEX_LEN_0F6E_P_2) },
c0f3af97
L
4883 },
4884
592a252b 4885 /* PREFIX_VEX_0F6F */
c0f3af97 4886 {
592d1631 4887 { Bad_Opcode },
592a252b
L
4888 { VEX_W_TABLE (VEX_W_0F6F_P_1) },
4889 { VEX_W_TABLE (VEX_W_0F6F_P_2) },
c0f3af97
L
4890 },
4891
592a252b 4892 /* PREFIX_VEX_0F70 */
c0f3af97 4893 {
592d1631 4894 { Bad_Opcode },
6c30d220
L
4895 { VEX_W_TABLE (VEX_W_0F70_P_1) },
4896 { VEX_W_TABLE (VEX_W_0F70_P_2) },
4897 { VEX_W_TABLE (VEX_W_0F70_P_3) },
c0f3af97
L
4898 },
4899
592a252b 4900 /* PREFIX_VEX_0F71_REG_2 */
c0f3af97 4901 {
592d1631
L
4902 { Bad_Opcode },
4903 { Bad_Opcode },
6c30d220 4904 { VEX_W_TABLE (VEX_W_0F71_R_2_P_2) },
c0f3af97
L
4905 },
4906
592a252b 4907 /* PREFIX_VEX_0F71_REG_4 */
c0f3af97 4908 {
592d1631
L
4909 { Bad_Opcode },
4910 { Bad_Opcode },
6c30d220 4911 { VEX_W_TABLE (VEX_W_0F71_R_4_P_2) },
c0f3af97
L
4912 },
4913
592a252b 4914 /* PREFIX_VEX_0F71_REG_6 */
c0f3af97 4915 {
592d1631
L
4916 { Bad_Opcode },
4917 { Bad_Opcode },
6c30d220 4918 { VEX_W_TABLE (VEX_W_0F71_R_6_P_2) },
c0f3af97
L
4919 },
4920
592a252b 4921 /* PREFIX_VEX_0F72_REG_2 */
c0f3af97 4922 {
592d1631
L
4923 { Bad_Opcode },
4924 { Bad_Opcode },
6c30d220 4925 { VEX_W_TABLE (VEX_W_0F72_R_2_P_2) },
c0f3af97
L
4926 },
4927
592a252b 4928 /* PREFIX_VEX_0F72_REG_4 */
c0f3af97 4929 {
592d1631
L
4930 { Bad_Opcode },
4931 { Bad_Opcode },
6c30d220 4932 { VEX_W_TABLE (VEX_W_0F72_R_4_P_2) },
c0f3af97
L
4933 },
4934
592a252b 4935 /* PREFIX_VEX_0F72_REG_6 */
c0f3af97 4936 {
592d1631
L
4937 { Bad_Opcode },
4938 { Bad_Opcode },
6c30d220 4939 { VEX_W_TABLE (VEX_W_0F72_R_6_P_2) },
c0f3af97
L
4940 },
4941
592a252b 4942 /* PREFIX_VEX_0F73_REG_2 */
c0f3af97 4943 {
592d1631
L
4944 { Bad_Opcode },
4945 { Bad_Opcode },
6c30d220 4946 { VEX_W_TABLE (VEX_W_0F73_R_2_P_2) },
c0f3af97
L
4947 },
4948
592a252b 4949 /* PREFIX_VEX_0F73_REG_3 */
c0f3af97 4950 {
592d1631
L
4951 { Bad_Opcode },
4952 { Bad_Opcode },
6c30d220 4953 { VEX_W_TABLE (VEX_W_0F73_R_3_P_2) },
c0f3af97
L
4954 },
4955
592a252b 4956 /* PREFIX_VEX_0F73_REG_6 */
c0f3af97 4957 {
592d1631
L
4958 { Bad_Opcode },
4959 { Bad_Opcode },
6c30d220 4960 { VEX_W_TABLE (VEX_W_0F73_R_6_P_2) },
c0f3af97
L
4961 },
4962
592a252b 4963 /* PREFIX_VEX_0F73_REG_7 */
c0f3af97 4964 {
592d1631
L
4965 { Bad_Opcode },
4966 { Bad_Opcode },
6c30d220 4967 { VEX_W_TABLE (VEX_W_0F73_R_7_P_2) },
c0f3af97
L
4968 },
4969
592a252b 4970 /* PREFIX_VEX_0F74 */
c0f3af97 4971 {
592d1631
L
4972 { Bad_Opcode },
4973 { Bad_Opcode },
6c30d220 4974 { VEX_W_TABLE (VEX_W_0F74_P_2) },
c0f3af97
L
4975 },
4976
592a252b 4977 /* PREFIX_VEX_0F75 */
c0f3af97 4978 {
592d1631
L
4979 { Bad_Opcode },
4980 { Bad_Opcode },
6c30d220 4981 { VEX_W_TABLE (VEX_W_0F75_P_2) },
c0f3af97
L
4982 },
4983
592a252b 4984 /* PREFIX_VEX_0F76 */
c0f3af97 4985 {
592d1631
L
4986 { Bad_Opcode },
4987 { Bad_Opcode },
6c30d220 4988 { VEX_W_TABLE (VEX_W_0F76_P_2) },
c0f3af97
L
4989 },
4990
592a252b 4991 /* PREFIX_VEX_0F77 */
c0f3af97 4992 {
592a252b 4993 { VEX_W_TABLE (VEX_W_0F77_P_0) },
c0f3af97
L
4994 },
4995
592a252b 4996 /* PREFIX_VEX_0F7C */
c0f3af97 4997 {
592d1631
L
4998 { Bad_Opcode },
4999 { Bad_Opcode },
592a252b
L
5000 { VEX_W_TABLE (VEX_W_0F7C_P_2) },
5001 { VEX_W_TABLE (VEX_W_0F7C_P_3) },
c0f3af97
L
5002 },
5003
592a252b 5004 /* PREFIX_VEX_0F7D */
c0f3af97 5005 {
592d1631
L
5006 { Bad_Opcode },
5007 { Bad_Opcode },
592a252b
L
5008 { VEX_W_TABLE (VEX_W_0F7D_P_2) },
5009 { VEX_W_TABLE (VEX_W_0F7D_P_3) },
c0f3af97
L
5010 },
5011
592a252b 5012 /* PREFIX_VEX_0F7E */
c0f3af97 5013 {
592d1631 5014 { Bad_Opcode },
592a252b
L
5015 { VEX_LEN_TABLE (VEX_LEN_0F7E_P_1) },
5016 { VEX_LEN_TABLE (VEX_LEN_0F7E_P_2) },
c0f3af97
L
5017 },
5018
592a252b 5019 /* PREFIX_VEX_0F7F */
c0f3af97 5020 {
592d1631 5021 { Bad_Opcode },
592a252b
L
5022 { VEX_W_TABLE (VEX_W_0F7F_P_1) },
5023 { VEX_W_TABLE (VEX_W_0F7F_P_2) },
c0f3af97
L
5024 },
5025
43234a1e
L
5026 /* PREFIX_VEX_0F90 */
5027 {
5028 { VEX_LEN_TABLE (VEX_LEN_0F90_P_0) },
1ba585e8
IT
5029 { Bad_Opcode },
5030 { VEX_LEN_TABLE (VEX_LEN_0F90_P_2) },
43234a1e
L
5031 },
5032
5033 /* PREFIX_VEX_0F91 */
5034 {
5035 { VEX_LEN_TABLE (VEX_LEN_0F91_P_0) },
1ba585e8
IT
5036 { Bad_Opcode },
5037 { VEX_LEN_TABLE (VEX_LEN_0F91_P_2) },
43234a1e
L
5038 },
5039
5040 /* PREFIX_VEX_0F92 */
5041 {
5042 { VEX_LEN_TABLE (VEX_LEN_0F92_P_0) },
1ba585e8 5043 { Bad_Opcode },
90a915bf 5044 { VEX_LEN_TABLE (VEX_LEN_0F92_P_2) },
1ba585e8 5045 { VEX_LEN_TABLE (VEX_LEN_0F92_P_3) },
43234a1e
L
5046 },
5047
5048 /* PREFIX_VEX_0F93 */
5049 {
5050 { VEX_LEN_TABLE (VEX_LEN_0F93_P_0) },
1ba585e8 5051 { Bad_Opcode },
90a915bf 5052 { VEX_LEN_TABLE (VEX_LEN_0F93_P_2) },
1ba585e8 5053 { VEX_LEN_TABLE (VEX_LEN_0F93_P_3) },
43234a1e
L
5054 },
5055
5056 /* PREFIX_VEX_0F98 */
5057 {
5058 { VEX_LEN_TABLE (VEX_LEN_0F98_P_0) },
1ba585e8
IT
5059 { Bad_Opcode },
5060 { VEX_LEN_TABLE (VEX_LEN_0F98_P_2) },
5061 },
5062
5063 /* PREFIX_VEX_0F99 */
5064 {
5065 { VEX_LEN_TABLE (VEX_LEN_0F99_P_0) },
5066 { Bad_Opcode },
5067 { VEX_LEN_TABLE (VEX_LEN_0F99_P_2) },
43234a1e
L
5068 },
5069
592a252b 5070 /* PREFIX_VEX_0FC2 */
c0f3af97 5071 {
592a252b
L
5072 { VEX_W_TABLE (VEX_W_0FC2_P_0) },
5073 { VEX_LEN_TABLE (VEX_LEN_0FC2_P_1) },
5074 { VEX_W_TABLE (VEX_W_0FC2_P_2) },
5075 { VEX_LEN_TABLE (VEX_LEN_0FC2_P_3) },
c0f3af97
L
5076 },
5077
592a252b 5078 /* PREFIX_VEX_0FC4 */
c0f3af97 5079 {
592d1631
L
5080 { Bad_Opcode },
5081 { Bad_Opcode },
592a252b 5082 { VEX_LEN_TABLE (VEX_LEN_0FC4_P_2) },
c0f3af97
L
5083 },
5084
592a252b 5085 /* PREFIX_VEX_0FC5 */
c0f3af97 5086 {
592d1631
L
5087 { Bad_Opcode },
5088 { Bad_Opcode },
592a252b 5089 { VEX_LEN_TABLE (VEX_LEN_0FC5_P_2) },
c0f3af97
L
5090 },
5091
592a252b 5092 /* PREFIX_VEX_0FD0 */
c0f3af97 5093 {
592d1631
L
5094 { Bad_Opcode },
5095 { Bad_Opcode },
592a252b
L
5096 { VEX_W_TABLE (VEX_W_0FD0_P_2) },
5097 { VEX_W_TABLE (VEX_W_0FD0_P_3) },
c0f3af97
L
5098 },
5099
592a252b 5100 /* PREFIX_VEX_0FD1 */
c0f3af97 5101 {
592d1631
L
5102 { Bad_Opcode },
5103 { Bad_Opcode },
6c30d220 5104 { VEX_W_TABLE (VEX_W_0FD1_P_2) },
c0f3af97
L
5105 },
5106
592a252b 5107 /* PREFIX_VEX_0FD2 */
c0f3af97 5108 {
592d1631
L
5109 { Bad_Opcode },
5110 { Bad_Opcode },
6c30d220 5111 { VEX_W_TABLE (VEX_W_0FD2_P_2) },
c0f3af97
L
5112 },
5113
592a252b 5114 /* PREFIX_VEX_0FD3 */
c0f3af97 5115 {
592d1631
L
5116 { Bad_Opcode },
5117 { Bad_Opcode },
6c30d220 5118 { VEX_W_TABLE (VEX_W_0FD3_P_2) },
c0f3af97
L
5119 },
5120
592a252b 5121 /* PREFIX_VEX_0FD4 */
c0f3af97 5122 {
592d1631
L
5123 { Bad_Opcode },
5124 { Bad_Opcode },
6c30d220 5125 { VEX_W_TABLE (VEX_W_0FD4_P_2) },
c0f3af97
L
5126 },
5127
592a252b 5128 /* PREFIX_VEX_0FD5 */
c0f3af97 5129 {
592d1631
L
5130 { Bad_Opcode },
5131 { Bad_Opcode },
6c30d220 5132 { VEX_W_TABLE (VEX_W_0FD5_P_2) },
c0f3af97
L
5133 },
5134
592a252b 5135 /* PREFIX_VEX_0FD6 */
c0f3af97 5136 {
592d1631
L
5137 { Bad_Opcode },
5138 { Bad_Opcode },
592a252b 5139 { VEX_LEN_TABLE (VEX_LEN_0FD6_P_2) },
c0f3af97
L
5140 },
5141
592a252b 5142 /* PREFIX_VEX_0FD7 */
c0f3af97 5143 {
592d1631
L
5144 { Bad_Opcode },
5145 { Bad_Opcode },
592a252b 5146 { MOD_TABLE (MOD_VEX_0FD7_PREFIX_2) },
c0f3af97
L
5147 },
5148
592a252b 5149 /* PREFIX_VEX_0FD8 */
c0f3af97 5150 {
592d1631
L
5151 { Bad_Opcode },
5152 { Bad_Opcode },
6c30d220 5153 { VEX_W_TABLE (VEX_W_0FD8_P_2) },
c0f3af97
L
5154 },
5155
592a252b 5156 /* PREFIX_VEX_0FD9 */
c0f3af97 5157 {
592d1631
L
5158 { Bad_Opcode },
5159 { Bad_Opcode },
6c30d220 5160 { VEX_W_TABLE (VEX_W_0FD9_P_2) },
c0f3af97
L
5161 },
5162
592a252b 5163 /* PREFIX_VEX_0FDA */
c0f3af97 5164 {
592d1631
L
5165 { Bad_Opcode },
5166 { Bad_Opcode },
6c30d220 5167 { VEX_W_TABLE (VEX_W_0FDA_P_2) },
c0f3af97
L
5168 },
5169
592a252b 5170 /* PREFIX_VEX_0FDB */
c0f3af97 5171 {
592d1631
L
5172 { Bad_Opcode },
5173 { Bad_Opcode },
6c30d220 5174 { VEX_W_TABLE (VEX_W_0FDB_P_2) },
c0f3af97
L
5175 },
5176
592a252b 5177 /* PREFIX_VEX_0FDC */
c0f3af97 5178 {
592d1631
L
5179 { Bad_Opcode },
5180 { Bad_Opcode },
6c30d220 5181 { VEX_W_TABLE (VEX_W_0FDC_P_2) },
c0f3af97
L
5182 },
5183
592a252b 5184 /* PREFIX_VEX_0FDD */
c0f3af97 5185 {
592d1631
L
5186 { Bad_Opcode },
5187 { Bad_Opcode },
6c30d220 5188 { VEX_W_TABLE (VEX_W_0FDD_P_2) },
c0f3af97
L
5189 },
5190
592a252b 5191 /* PREFIX_VEX_0FDE */
c0f3af97 5192 {
592d1631
L
5193 { Bad_Opcode },
5194 { Bad_Opcode },
6c30d220 5195 { VEX_W_TABLE (VEX_W_0FDE_P_2) },
c0f3af97
L
5196 },
5197
592a252b 5198 /* PREFIX_VEX_0FDF */
c0f3af97 5199 {
592d1631
L
5200 { Bad_Opcode },
5201 { Bad_Opcode },
6c30d220 5202 { VEX_W_TABLE (VEX_W_0FDF_P_2) },
c0f3af97
L
5203 },
5204
592a252b 5205 /* PREFIX_VEX_0FE0 */
c0f3af97 5206 {
592d1631
L
5207 { Bad_Opcode },
5208 { Bad_Opcode },
6c30d220 5209 { VEX_W_TABLE (VEX_W_0FE0_P_2) },
c0f3af97
L
5210 },
5211
592a252b 5212 /* PREFIX_VEX_0FE1 */
c0f3af97 5213 {
592d1631
L
5214 { Bad_Opcode },
5215 { Bad_Opcode },
6c30d220 5216 { VEX_W_TABLE (VEX_W_0FE1_P_2) },
c0f3af97
L
5217 },
5218
592a252b 5219 /* PREFIX_VEX_0FE2 */
c0f3af97 5220 {
592d1631
L
5221 { Bad_Opcode },
5222 { Bad_Opcode },
6c30d220 5223 { VEX_W_TABLE (VEX_W_0FE2_P_2) },
c0f3af97
L
5224 },
5225
592a252b 5226 /* PREFIX_VEX_0FE3 */
c0f3af97 5227 {
592d1631
L
5228 { Bad_Opcode },
5229 { Bad_Opcode },
6c30d220 5230 { VEX_W_TABLE (VEX_W_0FE3_P_2) },
c0f3af97
L
5231 },
5232
592a252b 5233 /* PREFIX_VEX_0FE4 */
c0f3af97 5234 {
592d1631
L
5235 { Bad_Opcode },
5236 { Bad_Opcode },
6c30d220 5237 { VEX_W_TABLE (VEX_W_0FE4_P_2) },
c0f3af97
L
5238 },
5239
592a252b 5240 /* PREFIX_VEX_0FE5 */
c0f3af97 5241 {
592d1631
L
5242 { Bad_Opcode },
5243 { Bad_Opcode },
6c30d220 5244 { VEX_W_TABLE (VEX_W_0FE5_P_2) },
c0f3af97
L
5245 },
5246
592a252b 5247 /* PREFIX_VEX_0FE6 */
c0f3af97 5248 {
592d1631 5249 { Bad_Opcode },
592a252b
L
5250 { VEX_W_TABLE (VEX_W_0FE6_P_1) },
5251 { VEX_W_TABLE (VEX_W_0FE6_P_2) },
5252 { VEX_W_TABLE (VEX_W_0FE6_P_3) },
c0f3af97
L
5253 },
5254
592a252b 5255 /* PREFIX_VEX_0FE7 */
c0f3af97 5256 {
592d1631
L
5257 { Bad_Opcode },
5258 { Bad_Opcode },
592a252b 5259 { MOD_TABLE (MOD_VEX_0FE7_PREFIX_2) },
c0f3af97
L
5260 },
5261
592a252b 5262 /* PREFIX_VEX_0FE8 */
c0f3af97 5263 {
592d1631
L
5264 { Bad_Opcode },
5265 { Bad_Opcode },
6c30d220 5266 { VEX_W_TABLE (VEX_W_0FE8_P_2) },
c0f3af97
L
5267 },
5268
592a252b 5269 /* PREFIX_VEX_0FE9 */
c0f3af97 5270 {
592d1631
L
5271 { Bad_Opcode },
5272 { Bad_Opcode },
6c30d220 5273 { VEX_W_TABLE (VEX_W_0FE9_P_2) },
c0f3af97
L
5274 },
5275
592a252b 5276 /* PREFIX_VEX_0FEA */
c0f3af97 5277 {
592d1631
L
5278 { Bad_Opcode },
5279 { Bad_Opcode },
6c30d220 5280 { VEX_W_TABLE (VEX_W_0FEA_P_2) },
c0f3af97
L
5281 },
5282
592a252b 5283 /* PREFIX_VEX_0FEB */
c0f3af97 5284 {
592d1631
L
5285 { Bad_Opcode },
5286 { Bad_Opcode },
6c30d220 5287 { VEX_W_TABLE (VEX_W_0FEB_P_2) },
c0f3af97
L
5288 },
5289
592a252b 5290 /* PREFIX_VEX_0FEC */
c0f3af97 5291 {
592d1631
L
5292 { Bad_Opcode },
5293 { Bad_Opcode },
6c30d220 5294 { VEX_W_TABLE (VEX_W_0FEC_P_2) },
c0f3af97
L
5295 },
5296
592a252b 5297 /* PREFIX_VEX_0FED */
c0f3af97 5298 {
592d1631
L
5299 { Bad_Opcode },
5300 { Bad_Opcode },
6c30d220 5301 { VEX_W_TABLE (VEX_W_0FED_P_2) },
c0f3af97
L
5302 },
5303
592a252b 5304 /* PREFIX_VEX_0FEE */
c0f3af97 5305 {
592d1631
L
5306 { Bad_Opcode },
5307 { Bad_Opcode },
6c30d220 5308 { VEX_W_TABLE (VEX_W_0FEE_P_2) },
c0f3af97
L
5309 },
5310
592a252b 5311 /* PREFIX_VEX_0FEF */
c0f3af97 5312 {
592d1631
L
5313 { Bad_Opcode },
5314 { Bad_Opcode },
6c30d220 5315 { VEX_W_TABLE (VEX_W_0FEF_P_2) },
c0f3af97
L
5316 },
5317
592a252b 5318 /* PREFIX_VEX_0FF0 */
c0f3af97 5319 {
592d1631
L
5320 { Bad_Opcode },
5321 { Bad_Opcode },
5322 { Bad_Opcode },
592a252b 5323 { MOD_TABLE (MOD_VEX_0FF0_PREFIX_3) },
c0f3af97
L
5324 },
5325
592a252b 5326 /* PREFIX_VEX_0FF1 */
c0f3af97 5327 {
592d1631
L
5328 { Bad_Opcode },
5329 { Bad_Opcode },
6c30d220 5330 { VEX_W_TABLE (VEX_W_0FF1_P_2) },
c0f3af97
L
5331 },
5332
592a252b 5333 /* PREFIX_VEX_0FF2 */
c0f3af97 5334 {
592d1631
L
5335 { Bad_Opcode },
5336 { Bad_Opcode },
6c30d220 5337 { VEX_W_TABLE (VEX_W_0FF2_P_2) },
c0f3af97
L
5338 },
5339
592a252b 5340 /* PREFIX_VEX_0FF3 */
c0f3af97 5341 {
592d1631
L
5342 { Bad_Opcode },
5343 { Bad_Opcode },
6c30d220 5344 { VEX_W_TABLE (VEX_W_0FF3_P_2) },
c0f3af97
L
5345 },
5346
592a252b 5347 /* PREFIX_VEX_0FF4 */
c0f3af97 5348 {
592d1631
L
5349 { Bad_Opcode },
5350 { Bad_Opcode },
6c30d220 5351 { VEX_W_TABLE (VEX_W_0FF4_P_2) },
c0f3af97
L
5352 },
5353
592a252b 5354 /* PREFIX_VEX_0FF5 */
c0f3af97 5355 {
592d1631
L
5356 { Bad_Opcode },
5357 { Bad_Opcode },
6c30d220 5358 { VEX_W_TABLE (VEX_W_0FF5_P_2) },
c0f3af97
L
5359 },
5360
592a252b 5361 /* PREFIX_VEX_0FF6 */
c0f3af97 5362 {
592d1631
L
5363 { Bad_Opcode },
5364 { Bad_Opcode },
6c30d220 5365 { VEX_W_TABLE (VEX_W_0FF6_P_2) },
c0f3af97
L
5366 },
5367
592a252b 5368 /* PREFIX_VEX_0FF7 */
c0f3af97 5369 {
592d1631
L
5370 { Bad_Opcode },
5371 { Bad_Opcode },
592a252b 5372 { VEX_LEN_TABLE (VEX_LEN_0FF7_P_2) },
c0f3af97
L
5373 },
5374
592a252b 5375 /* PREFIX_VEX_0FF8 */
c0f3af97 5376 {
592d1631
L
5377 { Bad_Opcode },
5378 { Bad_Opcode },
6c30d220 5379 { VEX_W_TABLE (VEX_W_0FF8_P_2) },
c0f3af97
L
5380 },
5381
592a252b 5382 /* PREFIX_VEX_0FF9 */
c0f3af97 5383 {
592d1631
L
5384 { Bad_Opcode },
5385 { Bad_Opcode },
6c30d220 5386 { VEX_W_TABLE (VEX_W_0FF9_P_2) },
c0f3af97
L
5387 },
5388
592a252b 5389 /* PREFIX_VEX_0FFA */
c0f3af97 5390 {
592d1631
L
5391 { Bad_Opcode },
5392 { Bad_Opcode },
6c30d220 5393 { VEX_W_TABLE (VEX_W_0FFA_P_2) },
c0f3af97
L
5394 },
5395
592a252b 5396 /* PREFIX_VEX_0FFB */
c0f3af97 5397 {
592d1631
L
5398 { Bad_Opcode },
5399 { Bad_Opcode },
6c30d220 5400 { VEX_W_TABLE (VEX_W_0FFB_P_2) },
c0f3af97
L
5401 },
5402
592a252b 5403 /* PREFIX_VEX_0FFC */
c0f3af97 5404 {
592d1631
L
5405 { Bad_Opcode },
5406 { Bad_Opcode },
6c30d220 5407 { VEX_W_TABLE (VEX_W_0FFC_P_2) },
c0f3af97
L
5408 },
5409
592a252b 5410 /* PREFIX_VEX_0FFD */
c0f3af97 5411 {
592d1631
L
5412 { Bad_Opcode },
5413 { Bad_Opcode },
6c30d220 5414 { VEX_W_TABLE (VEX_W_0FFD_P_2) },
c0f3af97
L
5415 },
5416
592a252b 5417 /* PREFIX_VEX_0FFE */
c0f3af97 5418 {
592d1631
L
5419 { Bad_Opcode },
5420 { Bad_Opcode },
6c30d220 5421 { VEX_W_TABLE (VEX_W_0FFE_P_2) },
c0f3af97
L
5422 },
5423
592a252b 5424 /* PREFIX_VEX_0F3800 */
c0f3af97 5425 {
592d1631
L
5426 { Bad_Opcode },
5427 { Bad_Opcode },
6c30d220 5428 { VEX_W_TABLE (VEX_W_0F3800_P_2) },
c0f3af97
L
5429 },
5430
592a252b 5431 /* PREFIX_VEX_0F3801 */
c0f3af97 5432 {
592d1631
L
5433 { Bad_Opcode },
5434 { Bad_Opcode },
6c30d220 5435 { VEX_W_TABLE (VEX_W_0F3801_P_2) },
c0f3af97
L
5436 },
5437
592a252b 5438 /* PREFIX_VEX_0F3802 */
c0f3af97 5439 {
592d1631
L
5440 { Bad_Opcode },
5441 { Bad_Opcode },
6c30d220 5442 { VEX_W_TABLE (VEX_W_0F3802_P_2) },
c0f3af97
L
5443 },
5444
592a252b 5445 /* PREFIX_VEX_0F3803 */
c0f3af97 5446 {
592d1631
L
5447 { Bad_Opcode },
5448 { Bad_Opcode },
6c30d220 5449 { VEX_W_TABLE (VEX_W_0F3803_P_2) },
c0f3af97
L
5450 },
5451
592a252b 5452 /* PREFIX_VEX_0F3804 */
c0f3af97 5453 {
592d1631
L
5454 { Bad_Opcode },
5455 { Bad_Opcode },
6c30d220 5456 { VEX_W_TABLE (VEX_W_0F3804_P_2) },
c0f3af97
L
5457 },
5458
592a252b 5459 /* PREFIX_VEX_0F3805 */
c0f3af97 5460 {
592d1631
L
5461 { Bad_Opcode },
5462 { Bad_Opcode },
6c30d220 5463 { VEX_W_TABLE (VEX_W_0F3805_P_2) },
c0f3af97
L
5464 },
5465
592a252b 5466 /* PREFIX_VEX_0F3806 */
c0f3af97 5467 {
592d1631
L
5468 { Bad_Opcode },
5469 { Bad_Opcode },
6c30d220 5470 { VEX_W_TABLE (VEX_W_0F3806_P_2) },
c0f3af97
L
5471 },
5472
592a252b 5473 /* PREFIX_VEX_0F3807 */
c0f3af97 5474 {
592d1631
L
5475 { Bad_Opcode },
5476 { Bad_Opcode },
6c30d220 5477 { VEX_W_TABLE (VEX_W_0F3807_P_2) },
c0f3af97
L
5478 },
5479
592a252b 5480 /* PREFIX_VEX_0F3808 */
c0f3af97 5481 {
592d1631
L
5482 { Bad_Opcode },
5483 { Bad_Opcode },
6c30d220 5484 { VEX_W_TABLE (VEX_W_0F3808_P_2) },
c0f3af97
L
5485 },
5486
592a252b 5487 /* PREFIX_VEX_0F3809 */
c0f3af97 5488 {
592d1631
L
5489 { Bad_Opcode },
5490 { Bad_Opcode },
6c30d220 5491 { VEX_W_TABLE (VEX_W_0F3809_P_2) },
c0f3af97
L
5492 },
5493
592a252b 5494 /* PREFIX_VEX_0F380A */
c0f3af97 5495 {
592d1631
L
5496 { Bad_Opcode },
5497 { Bad_Opcode },
6c30d220 5498 { VEX_W_TABLE (VEX_W_0F380A_P_2) },
c0f3af97
L
5499 },
5500
592a252b 5501 /* PREFIX_VEX_0F380B */
c0f3af97 5502 {
592d1631
L
5503 { Bad_Opcode },
5504 { Bad_Opcode },
6c30d220 5505 { VEX_W_TABLE (VEX_W_0F380B_P_2) },
c0f3af97
L
5506 },
5507
592a252b 5508 /* PREFIX_VEX_0F380C */
c0f3af97 5509 {
592d1631
L
5510 { Bad_Opcode },
5511 { Bad_Opcode },
592a252b 5512 { VEX_W_TABLE (VEX_W_0F380C_P_2) },
c0f3af97
L
5513 },
5514
592a252b 5515 /* PREFIX_VEX_0F380D */
c0f3af97 5516 {
592d1631
L
5517 { Bad_Opcode },
5518 { Bad_Opcode },
592a252b 5519 { VEX_W_TABLE (VEX_W_0F380D_P_2) },
c0f3af97
L
5520 },
5521
592a252b 5522 /* PREFIX_VEX_0F380E */
c0f3af97 5523 {
592d1631
L
5524 { Bad_Opcode },
5525 { Bad_Opcode },
592a252b 5526 { VEX_W_TABLE (VEX_W_0F380E_P_2) },
c0f3af97
L
5527 },
5528
592a252b 5529 /* PREFIX_VEX_0F380F */
c0f3af97 5530 {
592d1631
L
5531 { Bad_Opcode },
5532 { Bad_Opcode },
592a252b 5533 { VEX_W_TABLE (VEX_W_0F380F_P_2) },
c0f3af97
L
5534 },
5535
592a252b 5536 /* PREFIX_VEX_0F3813 */
c7b8aa3a
L
5537 {
5538 { Bad_Opcode },
5539 { Bad_Opcode },
5540 { "vcvtph2ps", { XM, EXxmmq } },
5541 },
5542
6c30d220
L
5543 /* PREFIX_VEX_0F3816 */
5544 {
5545 { Bad_Opcode },
5546 { Bad_Opcode },
5547 { VEX_LEN_TABLE (VEX_LEN_0F3816_P_2) },
5548 },
5549
592a252b 5550 /* PREFIX_VEX_0F3817 */
c0f3af97 5551 {
592d1631
L
5552 { Bad_Opcode },
5553 { Bad_Opcode },
592a252b 5554 { VEX_W_TABLE (VEX_W_0F3817_P_2) },
c0f3af97
L
5555 },
5556
592a252b 5557 /* PREFIX_VEX_0F3818 */
c0f3af97 5558 {
592d1631
L
5559 { Bad_Opcode },
5560 { Bad_Opcode },
6c30d220 5561 { VEX_W_TABLE (VEX_W_0F3818_P_2) },
c0f3af97
L
5562 },
5563
592a252b 5564 /* PREFIX_VEX_0F3819 */
c0f3af97 5565 {
592d1631
L
5566 { Bad_Opcode },
5567 { Bad_Opcode },
6c30d220 5568 { VEX_LEN_TABLE (VEX_LEN_0F3819_P_2) },
c0f3af97
L
5569 },
5570
592a252b 5571 /* PREFIX_VEX_0F381A */
c0f3af97 5572 {
592d1631
L
5573 { Bad_Opcode },
5574 { Bad_Opcode },
592a252b 5575 { MOD_TABLE (MOD_VEX_0F381A_PREFIX_2) },
c0f3af97
L
5576 },
5577
592a252b 5578 /* PREFIX_VEX_0F381C */
c0f3af97 5579 {
592d1631
L
5580 { Bad_Opcode },
5581 { Bad_Opcode },
6c30d220 5582 { VEX_W_TABLE (VEX_W_0F381C_P_2) },
c0f3af97
L
5583 },
5584
592a252b 5585 /* PREFIX_VEX_0F381D */
c0f3af97 5586 {
592d1631
L
5587 { Bad_Opcode },
5588 { Bad_Opcode },
6c30d220 5589 { VEX_W_TABLE (VEX_W_0F381D_P_2) },
c0f3af97
L
5590 },
5591
592a252b 5592 /* PREFIX_VEX_0F381E */
c0f3af97 5593 {
592d1631
L
5594 { Bad_Opcode },
5595 { Bad_Opcode },
6c30d220 5596 { VEX_W_TABLE (VEX_W_0F381E_P_2) },
c0f3af97
L
5597 },
5598
592a252b 5599 /* PREFIX_VEX_0F3820 */
c0f3af97 5600 {
592d1631
L
5601 { Bad_Opcode },
5602 { Bad_Opcode },
6c30d220 5603 { VEX_W_TABLE (VEX_W_0F3820_P_2) },
c0f3af97
L
5604 },
5605
592a252b 5606 /* PREFIX_VEX_0F3821 */
c0f3af97 5607 {
592d1631
L
5608 { Bad_Opcode },
5609 { Bad_Opcode },
6c30d220 5610 { VEX_W_TABLE (VEX_W_0F3821_P_2) },
c0f3af97
L
5611 },
5612
592a252b 5613 /* PREFIX_VEX_0F3822 */
c0f3af97 5614 {
592d1631
L
5615 { Bad_Opcode },
5616 { Bad_Opcode },
6c30d220 5617 { VEX_W_TABLE (VEX_W_0F3822_P_2) },
c0f3af97
L
5618 },
5619
592a252b 5620 /* PREFIX_VEX_0F3823 */
c0f3af97 5621 {
592d1631
L
5622 { Bad_Opcode },
5623 { Bad_Opcode },
6c30d220 5624 { VEX_W_TABLE (VEX_W_0F3823_P_2) },
c0f3af97
L
5625 },
5626
592a252b 5627 /* PREFIX_VEX_0F3824 */
c0f3af97 5628 {
592d1631
L
5629 { Bad_Opcode },
5630 { Bad_Opcode },
6c30d220 5631 { VEX_W_TABLE (VEX_W_0F3824_P_2) },
c0f3af97
L
5632 },
5633
592a252b 5634 /* PREFIX_VEX_0F3825 */
c0f3af97 5635 {
592d1631
L
5636 { Bad_Opcode },
5637 { Bad_Opcode },
6c30d220 5638 { VEX_W_TABLE (VEX_W_0F3825_P_2) },
c0f3af97
L
5639 },
5640
592a252b 5641 /* PREFIX_VEX_0F3828 */
c0f3af97 5642 {
592d1631
L
5643 { Bad_Opcode },
5644 { Bad_Opcode },
6c30d220 5645 { VEX_W_TABLE (VEX_W_0F3828_P_2) },
c0f3af97
L
5646 },
5647
592a252b 5648 /* PREFIX_VEX_0F3829 */
c0f3af97 5649 {
592d1631
L
5650 { Bad_Opcode },
5651 { Bad_Opcode },
6c30d220 5652 { VEX_W_TABLE (VEX_W_0F3829_P_2) },
c0f3af97
L
5653 },
5654
592a252b 5655 /* PREFIX_VEX_0F382A */
c0f3af97 5656 {
592d1631
L
5657 { Bad_Opcode },
5658 { Bad_Opcode },
592a252b 5659 { MOD_TABLE (MOD_VEX_0F382A_PREFIX_2) },
c0f3af97
L
5660 },
5661
592a252b 5662 /* PREFIX_VEX_0F382B */
c0f3af97 5663 {
592d1631
L
5664 { Bad_Opcode },
5665 { Bad_Opcode },
6c30d220 5666 { VEX_W_TABLE (VEX_W_0F382B_P_2) },
c0f3af97
L
5667 },
5668
592a252b 5669 /* PREFIX_VEX_0F382C */
c0f3af97 5670 {
592d1631
L
5671 { Bad_Opcode },
5672 { Bad_Opcode },
592a252b 5673 { MOD_TABLE (MOD_VEX_0F382C_PREFIX_2) },
c0f3af97
L
5674 },
5675
592a252b 5676 /* PREFIX_VEX_0F382D */
c0f3af97 5677 {
592d1631
L
5678 { Bad_Opcode },
5679 { Bad_Opcode },
592a252b 5680 { MOD_TABLE (MOD_VEX_0F382D_PREFIX_2) },
c0f3af97
L
5681 },
5682
592a252b 5683 /* PREFIX_VEX_0F382E */
c0f3af97 5684 {
592d1631
L
5685 { Bad_Opcode },
5686 { Bad_Opcode },
592a252b 5687 { MOD_TABLE (MOD_VEX_0F382E_PREFIX_2) },
c0f3af97
L
5688 },
5689
592a252b 5690 /* PREFIX_VEX_0F382F */
c0f3af97 5691 {
592d1631
L
5692 { Bad_Opcode },
5693 { Bad_Opcode },
592a252b 5694 { MOD_TABLE (MOD_VEX_0F382F_PREFIX_2) },
c0f3af97
L
5695 },
5696
592a252b 5697 /* PREFIX_VEX_0F3830 */
c0f3af97 5698 {
592d1631
L
5699 { Bad_Opcode },
5700 { Bad_Opcode },
6c30d220 5701 { VEX_W_TABLE (VEX_W_0F3830_P_2) },
c0f3af97
L
5702 },
5703
592a252b 5704 /* PREFIX_VEX_0F3831 */
c0f3af97 5705 {
592d1631
L
5706 { Bad_Opcode },
5707 { Bad_Opcode },
6c30d220 5708 { VEX_W_TABLE (VEX_W_0F3831_P_2) },
c0f3af97
L
5709 },
5710
592a252b 5711 /* PREFIX_VEX_0F3832 */
c0f3af97 5712 {
592d1631
L
5713 { Bad_Opcode },
5714 { Bad_Opcode },
6c30d220 5715 { VEX_W_TABLE (VEX_W_0F3832_P_2) },
c0f3af97
L
5716 },
5717
592a252b 5718 /* PREFIX_VEX_0F3833 */
c0f3af97 5719 {
592d1631
L
5720 { Bad_Opcode },
5721 { Bad_Opcode },
6c30d220 5722 { VEX_W_TABLE (VEX_W_0F3833_P_2) },
c0f3af97
L
5723 },
5724
592a252b 5725 /* PREFIX_VEX_0F3834 */
c0f3af97 5726 {
592d1631
L
5727 { Bad_Opcode },
5728 { Bad_Opcode },
6c30d220 5729 { VEX_W_TABLE (VEX_W_0F3834_P_2) },
c0f3af97
L
5730 },
5731
592a252b 5732 /* PREFIX_VEX_0F3835 */
c0f3af97 5733 {
592d1631
L
5734 { Bad_Opcode },
5735 { Bad_Opcode },
6c30d220
L
5736 { VEX_W_TABLE (VEX_W_0F3835_P_2) },
5737 },
5738
5739 /* PREFIX_VEX_0F3836 */
5740 {
5741 { Bad_Opcode },
5742 { Bad_Opcode },
5743 { VEX_LEN_TABLE (VEX_LEN_0F3836_P_2) },
c0f3af97
L
5744 },
5745
592a252b 5746 /* PREFIX_VEX_0F3837 */
c0f3af97 5747 {
592d1631
L
5748 { Bad_Opcode },
5749 { Bad_Opcode },
6c30d220 5750 { VEX_W_TABLE (VEX_W_0F3837_P_2) },
c0f3af97
L
5751 },
5752
592a252b 5753 /* PREFIX_VEX_0F3838 */
c0f3af97 5754 {
592d1631
L
5755 { Bad_Opcode },
5756 { Bad_Opcode },
6c30d220 5757 { VEX_W_TABLE (VEX_W_0F3838_P_2) },
c0f3af97
L
5758 },
5759
592a252b 5760 /* PREFIX_VEX_0F3839 */
c0f3af97 5761 {
592d1631
L
5762 { Bad_Opcode },
5763 { Bad_Opcode },
6c30d220 5764 { VEX_W_TABLE (VEX_W_0F3839_P_2) },
c0f3af97
L
5765 },
5766
592a252b 5767 /* PREFIX_VEX_0F383A */
c0f3af97 5768 {
592d1631
L
5769 { Bad_Opcode },
5770 { Bad_Opcode },
6c30d220 5771 { VEX_W_TABLE (VEX_W_0F383A_P_2) },
c0f3af97
L
5772 },
5773
592a252b 5774 /* PREFIX_VEX_0F383B */
c0f3af97 5775 {
592d1631
L
5776 { Bad_Opcode },
5777 { Bad_Opcode },
6c30d220 5778 { VEX_W_TABLE (VEX_W_0F383B_P_2) },
c0f3af97
L
5779 },
5780
592a252b 5781 /* PREFIX_VEX_0F383C */
c0f3af97 5782 {
592d1631
L
5783 { Bad_Opcode },
5784 { Bad_Opcode },
6c30d220 5785 { VEX_W_TABLE (VEX_W_0F383C_P_2) },
c0f3af97
L
5786 },
5787
592a252b 5788 /* PREFIX_VEX_0F383D */
c0f3af97 5789 {
592d1631
L
5790 { Bad_Opcode },
5791 { Bad_Opcode },
6c30d220 5792 { VEX_W_TABLE (VEX_W_0F383D_P_2) },
c0f3af97
L
5793 },
5794
592a252b 5795 /* PREFIX_VEX_0F383E */
c0f3af97 5796 {
592d1631
L
5797 { Bad_Opcode },
5798 { Bad_Opcode },
6c30d220 5799 { VEX_W_TABLE (VEX_W_0F383E_P_2) },
c0f3af97
L
5800 },
5801
592a252b 5802 /* PREFIX_VEX_0F383F */
c0f3af97 5803 {
592d1631
L
5804 { Bad_Opcode },
5805 { Bad_Opcode },
6c30d220 5806 { VEX_W_TABLE (VEX_W_0F383F_P_2) },
c0f3af97
L
5807 },
5808
592a252b 5809 /* PREFIX_VEX_0F3840 */
c0f3af97 5810 {
592d1631
L
5811 { Bad_Opcode },
5812 { Bad_Opcode },
6c30d220 5813 { VEX_W_TABLE (VEX_W_0F3840_P_2) },
c0f3af97
L
5814 },
5815
592a252b 5816 /* PREFIX_VEX_0F3841 */
c0f3af97 5817 {
592d1631
L
5818 { Bad_Opcode },
5819 { Bad_Opcode },
592a252b 5820 { VEX_LEN_TABLE (VEX_LEN_0F3841_P_2) },
c0f3af97
L
5821 },
5822
6c30d220
L
5823 /* PREFIX_VEX_0F3845 */
5824 {
5825 { Bad_Opcode },
5826 { Bad_Opcode },
5827 { "vpsrlv%LW", { XM, Vex, EXx } },
5828 },
5829
5830 /* PREFIX_VEX_0F3846 */
5831 {
5832 { Bad_Opcode },
5833 { Bad_Opcode },
5834 { VEX_W_TABLE (VEX_W_0F3846_P_2) },
5835 },
5836
5837 /* PREFIX_VEX_0F3847 */
5838 {
5839 { Bad_Opcode },
5840 { Bad_Opcode },
5841 { "vpsllv%LW", { XM, Vex, EXx } },
5842 },
5843
5844 /* PREFIX_VEX_0F3858 */
5845 {
5846 { Bad_Opcode },
5847 { Bad_Opcode },
5848 { VEX_W_TABLE (VEX_W_0F3858_P_2) },
5849 },
5850
5851 /* PREFIX_VEX_0F3859 */
5852 {
5853 { Bad_Opcode },
5854 { Bad_Opcode },
5855 { VEX_W_TABLE (VEX_W_0F3859_P_2) },
5856 },
5857
5858 /* PREFIX_VEX_0F385A */
5859 {
5860 { Bad_Opcode },
5861 { Bad_Opcode },
5862 { MOD_TABLE (MOD_VEX_0F385A_PREFIX_2) },
5863 },
5864
5865 /* PREFIX_VEX_0F3878 */
5866 {
5867 { Bad_Opcode },
5868 { Bad_Opcode },
5869 { VEX_W_TABLE (VEX_W_0F3878_P_2) },
5870 },
5871
5872 /* PREFIX_VEX_0F3879 */
5873 {
5874 { Bad_Opcode },
5875 { Bad_Opcode },
5876 { VEX_W_TABLE (VEX_W_0F3879_P_2) },
5877 },
5878
5879 /* PREFIX_VEX_0F388C */
5880 {
5881 { Bad_Opcode },
5882 { Bad_Opcode },
f7002f42 5883 { MOD_TABLE (MOD_VEX_0F388C_PREFIX_2) },
6c30d220
L
5884 },
5885
5886 /* PREFIX_VEX_0F388E */
5887 {
5888 { Bad_Opcode },
5889 { Bad_Opcode },
f7002f42 5890 { MOD_TABLE (MOD_VEX_0F388E_PREFIX_2) },
6c30d220
L
5891 },
5892
5893 /* PREFIX_VEX_0F3890 */
5894 {
5895 { Bad_Opcode },
5896 { Bad_Opcode },
5897 { "vpgatherd%LW", { XM, MVexVSIBDWpX, Vex } },
5898 },
5899
5900 /* PREFIX_VEX_0F3891 */
5901 {
5902 { Bad_Opcode },
5903 { Bad_Opcode },
5904 { "vpgatherq%LW", { XMGatherQ, MVexVSIBQWpX, VexGatherQ } },
5905 },
5906
5907 /* PREFIX_VEX_0F3892 */
5908 {
5909 { Bad_Opcode },
5910 { Bad_Opcode },
5911 { "vgatherdp%XW", { XM, MVexVSIBDWpX, Vex } },
5912 },
5913
5914 /* PREFIX_VEX_0F3893 */
5915 {
5916 { Bad_Opcode },
5917 { Bad_Opcode },
5918 { "vgatherqp%XW", { XMGatherQ, MVexVSIBQWpX, VexGatherQ } },
5919 },
5920
592a252b 5921 /* PREFIX_VEX_0F3896 */
a5ff0eb2 5922 {
592d1631
L
5923 { Bad_Opcode },
5924 { Bad_Opcode },
0bfee649 5925 { "vfmaddsub132p%XW", { XM, Vex, EXx } },
a5ff0eb2
L
5926 },
5927
592a252b 5928 /* PREFIX_VEX_0F3897 */
a5ff0eb2 5929 {
592d1631
L
5930 { Bad_Opcode },
5931 { Bad_Opcode },
0bfee649 5932 { "vfmsubadd132p%XW", { XM, Vex, EXx } },
a5ff0eb2
L
5933 },
5934
592a252b 5935 /* PREFIX_VEX_0F3898 */
a5ff0eb2 5936 {
592d1631
L
5937 { Bad_Opcode },
5938 { Bad_Opcode },
0bfee649 5939 { "vfmadd132p%XW", { XM, Vex, EXx } },
a5ff0eb2
L
5940 },
5941
592a252b 5942 /* PREFIX_VEX_0F3899 */
a5ff0eb2 5943 {
592d1631
L
5944 { Bad_Opcode },
5945 { Bad_Opcode },
1c480963 5946 { "vfmadd132s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
a5ff0eb2
L
5947 },
5948
592a252b 5949 /* PREFIX_VEX_0F389A */
a5ff0eb2 5950 {
592d1631
L
5951 { Bad_Opcode },
5952 { Bad_Opcode },
0bfee649 5953 { "vfmsub132p%XW", { XM, Vex, EXx } },
a5ff0eb2
L
5954 },
5955
592a252b 5956 /* PREFIX_VEX_0F389B */
c0f3af97 5957 {
592d1631
L
5958 { Bad_Opcode },
5959 { Bad_Opcode },
1c480963 5960 { "vfmsub132s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
c0f3af97
L
5961 },
5962
592a252b 5963 /* PREFIX_VEX_0F389C */
c0f3af97 5964 {
592d1631
L
5965 { Bad_Opcode },
5966 { Bad_Opcode },
0bfee649 5967 { "vfnmadd132p%XW", { XM, Vex, EXx } },
c0f3af97
L
5968 },
5969
592a252b 5970 /* PREFIX_VEX_0F389D */
c0f3af97 5971 {
592d1631
L
5972 { Bad_Opcode },
5973 { Bad_Opcode },
1c480963 5974 { "vfnmadd132s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
c0f3af97
L
5975 },
5976
592a252b 5977 /* PREFIX_VEX_0F389E */
c0f3af97 5978 {
592d1631
L
5979 { Bad_Opcode },
5980 { Bad_Opcode },
0bfee649 5981 { "vfnmsub132p%XW", { XM, Vex, EXx } },
c0f3af97
L
5982 },
5983
592a252b 5984 /* PREFIX_VEX_0F389F */
c0f3af97 5985 {
592d1631
L
5986 { Bad_Opcode },
5987 { Bad_Opcode },
1c480963 5988 { "vfnmsub132s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
c0f3af97
L
5989 },
5990
592a252b 5991 /* PREFIX_VEX_0F38A6 */
c0f3af97 5992 {
592d1631
L
5993 { Bad_Opcode },
5994 { Bad_Opcode },
0bfee649 5995 { "vfmaddsub213p%XW", { XM, Vex, EXx } },
592d1631 5996 { Bad_Opcode },
c0f3af97
L
5997 },
5998
592a252b 5999 /* PREFIX_VEX_0F38A7 */
c0f3af97 6000 {
592d1631
L
6001 { Bad_Opcode },
6002 { Bad_Opcode },
0bfee649 6003 { "vfmsubadd213p%XW", { XM, Vex, EXx } },
c0f3af97
L
6004 },
6005
592a252b 6006 /* PREFIX_VEX_0F38A8 */
c0f3af97 6007 {
592d1631
L
6008 { Bad_Opcode },
6009 { Bad_Opcode },
0bfee649 6010 { "vfmadd213p%XW", { XM, Vex, EXx } },
c0f3af97
L
6011 },
6012
592a252b 6013 /* PREFIX_VEX_0F38A9 */
c0f3af97 6014 {
592d1631
L
6015 { Bad_Opcode },
6016 { Bad_Opcode },
1c480963 6017 { "vfmadd213s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
c0f3af97
L
6018 },
6019
592a252b 6020 /* PREFIX_VEX_0F38AA */
c0f3af97 6021 {
592d1631
L
6022 { Bad_Opcode },
6023 { Bad_Opcode },
0bfee649 6024 { "vfmsub213p%XW", { XM, Vex, EXx } },
c0f3af97
L
6025 },
6026
592a252b 6027 /* PREFIX_VEX_0F38AB */
c0f3af97 6028 {
592d1631
L
6029 { Bad_Opcode },
6030 { Bad_Opcode },
1c480963 6031 { "vfmsub213s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
c0f3af97
L
6032 },
6033
592a252b 6034 /* PREFIX_VEX_0F38AC */
c0f3af97 6035 {
592d1631
L
6036 { Bad_Opcode },
6037 { Bad_Opcode },
0bfee649 6038 { "vfnmadd213p%XW", { XM, Vex, EXx } },
c0f3af97
L
6039 },
6040
592a252b 6041 /* PREFIX_VEX_0F38AD */
c0f3af97 6042 {
592d1631
L
6043 { Bad_Opcode },
6044 { Bad_Opcode },
1c480963 6045 { "vfnmadd213s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
c0f3af97
L
6046 },
6047
592a252b 6048 /* PREFIX_VEX_0F38AE */
c0f3af97 6049 {
592d1631
L
6050 { Bad_Opcode },
6051 { Bad_Opcode },
0bfee649 6052 { "vfnmsub213p%XW", { XM, Vex, EXx } },
c0f3af97
L
6053 },
6054
592a252b 6055 /* PREFIX_VEX_0F38AF */
c0f3af97 6056 {
592d1631
L
6057 { Bad_Opcode },
6058 { Bad_Opcode },
1c480963 6059 { "vfnmsub213s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
c0f3af97
L
6060 },
6061
592a252b 6062 /* PREFIX_VEX_0F38B6 */
c0f3af97 6063 {
592d1631
L
6064 { Bad_Opcode },
6065 { Bad_Opcode },
0bfee649 6066 { "vfmaddsub231p%XW", { XM, Vex, EXx } },
c0f3af97
L
6067 },
6068
592a252b 6069 /* PREFIX_VEX_0F38B7 */
c0f3af97 6070 {
592d1631
L
6071 { Bad_Opcode },
6072 { Bad_Opcode },
0bfee649 6073 { "vfmsubadd231p%XW", { XM, Vex, EXx } },
c0f3af97
L
6074 },
6075
592a252b 6076 /* PREFIX_VEX_0F38B8 */
c0f3af97 6077 {
592d1631
L
6078 { Bad_Opcode },
6079 { Bad_Opcode },
0bfee649 6080 { "vfmadd231p%XW", { XM, Vex, EXx } },
c0f3af97
L
6081 },
6082
592a252b 6083 /* PREFIX_VEX_0F38B9 */
c0f3af97 6084 {
592d1631
L
6085 { Bad_Opcode },
6086 { Bad_Opcode },
1c480963 6087 { "vfmadd231s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
c0f3af97
L
6088 },
6089
592a252b 6090 /* PREFIX_VEX_0F38BA */
c0f3af97 6091 {
592d1631
L
6092 { Bad_Opcode },
6093 { Bad_Opcode },
0bfee649 6094 { "vfmsub231p%XW", { XM, Vex, EXx } },
c0f3af97
L
6095 },
6096
592a252b 6097 /* PREFIX_VEX_0F38BB */
c0f3af97 6098 {
592d1631
L
6099 { Bad_Opcode },
6100 { Bad_Opcode },
1c480963 6101 { "vfmsub231s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
c0f3af97
L
6102 },
6103
592a252b 6104 /* PREFIX_VEX_0F38BC */
c0f3af97 6105 {
592d1631
L
6106 { Bad_Opcode },
6107 { Bad_Opcode },
0bfee649 6108 { "vfnmadd231p%XW", { XM, Vex, EXx } },
c0f3af97
L
6109 },
6110
592a252b 6111 /* PREFIX_VEX_0F38BD */
c0f3af97 6112 {
592d1631
L
6113 { Bad_Opcode },
6114 { Bad_Opcode },
1c480963 6115 { "vfnmadd231s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
c0f3af97
L
6116 },
6117
592a252b 6118 /* PREFIX_VEX_0F38BE */
c0f3af97 6119 {
592d1631
L
6120 { Bad_Opcode },
6121 { Bad_Opcode },
0bfee649 6122 { "vfnmsub231p%XW", { XM, Vex, EXx } },
c0f3af97
L
6123 },
6124
592a252b 6125 /* PREFIX_VEX_0F38BF */
c0f3af97 6126 {
592d1631
L
6127 { Bad_Opcode },
6128 { Bad_Opcode },
1c480963 6129 { "vfnmsub231s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
c0f3af97
L
6130 },
6131
592a252b 6132 /* PREFIX_VEX_0F38DB */
c0f3af97 6133 {
592d1631
L
6134 { Bad_Opcode },
6135 { Bad_Opcode },
592a252b 6136 { VEX_LEN_TABLE (VEX_LEN_0F38DB_P_2) },
c0f3af97
L
6137 },
6138
592a252b 6139 /* PREFIX_VEX_0F38DC */
c0f3af97 6140 {
592d1631
L
6141 { Bad_Opcode },
6142 { Bad_Opcode },
592a252b 6143 { VEX_LEN_TABLE (VEX_LEN_0F38DC_P_2) },
c0f3af97
L
6144 },
6145
592a252b 6146 /* PREFIX_VEX_0F38DD */
c0f3af97 6147 {
592d1631
L
6148 { Bad_Opcode },
6149 { Bad_Opcode },
592a252b 6150 { VEX_LEN_TABLE (VEX_LEN_0F38DD_P_2) },
c0f3af97
L
6151 },
6152
592a252b 6153 /* PREFIX_VEX_0F38DE */
c0f3af97 6154 {
592d1631
L
6155 { Bad_Opcode },
6156 { Bad_Opcode },
592a252b 6157 { VEX_LEN_TABLE (VEX_LEN_0F38DE_P_2) },
c0f3af97
L
6158 },
6159
592a252b 6160 /* PREFIX_VEX_0F38DF */
c0f3af97 6161 {
592d1631
L
6162 { Bad_Opcode },
6163 { Bad_Opcode },
592a252b 6164 { VEX_LEN_TABLE (VEX_LEN_0F38DF_P_2) },
c0f3af97
L
6165 },
6166
f12dc422
L
6167 /* PREFIX_VEX_0F38F2 */
6168 {
6169 { VEX_LEN_TABLE (VEX_LEN_0F38F2_P_0) },
6170 },
6171
6172 /* PREFIX_VEX_0F38F3_REG_1 */
6173 {
6174 { VEX_LEN_TABLE (VEX_LEN_0F38F3_R_1_P_0) },
6175 },
6176
6177 /* PREFIX_VEX_0F38F3_REG_2 */
6178 {
6179 { VEX_LEN_TABLE (VEX_LEN_0F38F3_R_2_P_0) },
6180 },
6181
6182 /* PREFIX_VEX_0F38F3_REG_3 */
6183 {
6184 { VEX_LEN_TABLE (VEX_LEN_0F38F3_R_3_P_0) },
6185 },
6186
6c30d220
L
6187 /* PREFIX_VEX_0F38F5 */
6188 {
6189 { VEX_LEN_TABLE (VEX_LEN_0F38F5_P_0) },
6190 { VEX_LEN_TABLE (VEX_LEN_0F38F5_P_1) },
6191 { Bad_Opcode },
6192 { VEX_LEN_TABLE (VEX_LEN_0F38F5_P_3) },
6193 },
6194
6195 /* PREFIX_VEX_0F38F6 */
6196 {
6197 { Bad_Opcode },
6198 { Bad_Opcode },
6199 { Bad_Opcode },
6200 { VEX_LEN_TABLE (VEX_LEN_0F38F6_P_3) },
6201 },
6202
f12dc422
L
6203 /* PREFIX_VEX_0F38F7 */
6204 {
6205 { VEX_LEN_TABLE (VEX_LEN_0F38F7_P_0) },
6c30d220
L
6206 { VEX_LEN_TABLE (VEX_LEN_0F38F7_P_1) },
6207 { VEX_LEN_TABLE (VEX_LEN_0F38F7_P_2) },
6208 { VEX_LEN_TABLE (VEX_LEN_0F38F7_P_3) },
6209 },
6210
6211 /* PREFIX_VEX_0F3A00 */
6212 {
6213 { Bad_Opcode },
6214 { Bad_Opcode },
6215 { VEX_LEN_TABLE (VEX_LEN_0F3A00_P_2) },
6216 },
6217
6218 /* PREFIX_VEX_0F3A01 */
6219 {
6220 { Bad_Opcode },
6221 { Bad_Opcode },
6222 { VEX_LEN_TABLE (VEX_LEN_0F3A01_P_2) },
6223 },
6224
6225 /* PREFIX_VEX_0F3A02 */
6226 {
6227 { Bad_Opcode },
6228 { Bad_Opcode },
6229 { VEX_W_TABLE (VEX_W_0F3A02_P_2) },
f12dc422
L
6230 },
6231
592a252b 6232 /* PREFIX_VEX_0F3A04 */
c0f3af97 6233 {
592d1631
L
6234 { Bad_Opcode },
6235 { Bad_Opcode },
592a252b 6236 { VEX_W_TABLE (VEX_W_0F3A04_P_2) },
c0f3af97
L
6237 },
6238
592a252b 6239 /* PREFIX_VEX_0F3A05 */
c0f3af97 6240 {
592d1631
L
6241 { Bad_Opcode },
6242 { Bad_Opcode },
592a252b 6243 { VEX_W_TABLE (VEX_W_0F3A05_P_2) },
c0f3af97
L
6244 },
6245
592a252b 6246 /* PREFIX_VEX_0F3A06 */
c0f3af97 6247 {
592d1631
L
6248 { Bad_Opcode },
6249 { Bad_Opcode },
592a252b 6250 { VEX_LEN_TABLE (VEX_LEN_0F3A06_P_2) },
c0f3af97
L
6251 },
6252
592a252b 6253 /* PREFIX_VEX_0F3A08 */
c0f3af97 6254 {
592d1631
L
6255 { Bad_Opcode },
6256 { Bad_Opcode },
592a252b 6257 { VEX_W_TABLE (VEX_W_0F3A08_P_2) },
c0f3af97
L
6258 },
6259
592a252b 6260 /* PREFIX_VEX_0F3A09 */
c0f3af97 6261 {
592d1631
L
6262 { Bad_Opcode },
6263 { Bad_Opcode },
592a252b 6264 { VEX_W_TABLE (VEX_W_0F3A09_P_2) },
c0f3af97
L
6265 },
6266
592a252b 6267 /* PREFIX_VEX_0F3A0A */
c0f3af97 6268 {
592d1631
L
6269 { Bad_Opcode },
6270 { Bad_Opcode },
592a252b 6271 { VEX_LEN_TABLE (VEX_LEN_0F3A0A_P_2) },
0bfee649
L
6272 },
6273
592a252b 6274 /* PREFIX_VEX_0F3A0B */
0bfee649 6275 {
592d1631
L
6276 { Bad_Opcode },
6277 { Bad_Opcode },
592a252b 6278 { VEX_LEN_TABLE (VEX_LEN_0F3A0B_P_2) },
0bfee649
L
6279 },
6280
592a252b 6281 /* PREFIX_VEX_0F3A0C */
0bfee649 6282 {
592d1631
L
6283 { Bad_Opcode },
6284 { Bad_Opcode },
592a252b 6285 { VEX_W_TABLE (VEX_W_0F3A0C_P_2) },
0bfee649
L
6286 },
6287
592a252b 6288 /* PREFIX_VEX_0F3A0D */
0bfee649 6289 {
592d1631
L
6290 { Bad_Opcode },
6291 { Bad_Opcode },
592a252b 6292 { VEX_W_TABLE (VEX_W_0F3A0D_P_2) },
c0f3af97
L
6293 },
6294
592a252b 6295 /* PREFIX_VEX_0F3A0E */
0bfee649 6296 {
592d1631
L
6297 { Bad_Opcode },
6298 { Bad_Opcode },
6c30d220 6299 { VEX_W_TABLE (VEX_W_0F3A0E_P_2) },
0bfee649
L
6300 },
6301
592a252b 6302 /* PREFIX_VEX_0F3A0F */
0bfee649 6303 {
592d1631
L
6304 { Bad_Opcode },
6305 { Bad_Opcode },
6c30d220 6306 { VEX_W_TABLE (VEX_W_0F3A0F_P_2) },
0bfee649
L
6307 },
6308
592a252b 6309 /* PREFIX_VEX_0F3A14 */
0bfee649 6310 {
592d1631
L
6311 { Bad_Opcode },
6312 { Bad_Opcode },
592a252b 6313 { VEX_LEN_TABLE (VEX_LEN_0F3A14_P_2) },
0bfee649
L
6314 },
6315
592a252b 6316 /* PREFIX_VEX_0F3A15 */
0bfee649 6317 {
592d1631
L
6318 { Bad_Opcode },
6319 { Bad_Opcode },
592a252b 6320 { VEX_LEN_TABLE (VEX_LEN_0F3A15_P_2) },
0bfee649
L
6321 },
6322
592a252b 6323 /* PREFIX_VEX_0F3A16 */
c0f3af97 6324 {
592d1631
L
6325 { Bad_Opcode },
6326 { Bad_Opcode },
592a252b 6327 { VEX_LEN_TABLE (VEX_LEN_0F3A16_P_2) },
c0f3af97
L
6328 },
6329
592a252b 6330 /* PREFIX_VEX_0F3A17 */
c0f3af97 6331 {
592d1631
L
6332 { Bad_Opcode },
6333 { Bad_Opcode },
592a252b 6334 { VEX_LEN_TABLE (VEX_LEN_0F3A17_P_2) },
c0f3af97
L
6335 },
6336
592a252b 6337 /* PREFIX_VEX_0F3A18 */
c0f3af97 6338 {
592d1631
L
6339 { Bad_Opcode },
6340 { Bad_Opcode },
592a252b 6341 { VEX_LEN_TABLE (VEX_LEN_0F3A18_P_2) },
c0f3af97
L
6342 },
6343
592a252b 6344 /* PREFIX_VEX_0F3A19 */
c0f3af97 6345 {
592d1631
L
6346 { Bad_Opcode },
6347 { Bad_Opcode },
592a252b 6348 { VEX_LEN_TABLE (VEX_LEN_0F3A19_P_2) },
c0f3af97
L
6349 },
6350
592a252b 6351 /* PREFIX_VEX_0F3A1D */
c7b8aa3a
L
6352 {
6353 { Bad_Opcode },
6354 { Bad_Opcode },
6355 { "vcvtps2ph", { EXxmmq, XM, Ib } },
6356 },
6357
592a252b 6358 /* PREFIX_VEX_0F3A20 */
c0f3af97 6359 {
592d1631
L
6360 { Bad_Opcode },
6361 { Bad_Opcode },
592a252b 6362 { VEX_LEN_TABLE (VEX_LEN_0F3A20_P_2) },
c0f3af97
L
6363 },
6364
592a252b 6365 /* PREFIX_VEX_0F3A21 */
c0f3af97 6366 {
592d1631
L
6367 { Bad_Opcode },
6368 { Bad_Opcode },
592a252b 6369 { VEX_LEN_TABLE (VEX_LEN_0F3A21_P_2) },
c0f3af97
L
6370 },
6371
592a252b 6372 /* PREFIX_VEX_0F3A22 */
0bfee649 6373 {
592d1631
L
6374 { Bad_Opcode },
6375 { Bad_Opcode },
592a252b 6376 { VEX_LEN_TABLE (VEX_LEN_0F3A22_P_2) },
0bfee649
L
6377 },
6378
43234a1e
L
6379 /* PREFIX_VEX_0F3A30 */
6380 {
6381 { Bad_Opcode },
6382 { Bad_Opcode },
6383 { VEX_LEN_TABLE (VEX_LEN_0F3A30_P_2) },
6384 },
6385
1ba585e8
IT
6386 /* PREFIX_VEX_0F3A31 */
6387 {
6388 { Bad_Opcode },
6389 { Bad_Opcode },
6390 { VEX_LEN_TABLE (VEX_LEN_0F3A31_P_2) },
6391 },
6392
43234a1e
L
6393 /* PREFIX_VEX_0F3A32 */
6394 {
6395 { Bad_Opcode },
6396 { Bad_Opcode },
6397 { VEX_LEN_TABLE (VEX_LEN_0F3A32_P_2) },
6398 },
6399
1ba585e8
IT
6400 /* PREFIX_VEX_0F3A33 */
6401 {
6402 { Bad_Opcode },
6403 { Bad_Opcode },
6404 { VEX_LEN_TABLE (VEX_LEN_0F3A33_P_2) },
6405 },
6406
6c30d220
L
6407 /* PREFIX_VEX_0F3A38 */
6408 {
6409 { Bad_Opcode },
6410 { Bad_Opcode },
6411 { VEX_LEN_TABLE (VEX_LEN_0F3A38_P_2) },
6412 },
6413
6414 /* PREFIX_VEX_0F3A39 */
6415 {
6416 { Bad_Opcode },
6417 { Bad_Opcode },
6418 { VEX_LEN_TABLE (VEX_LEN_0F3A39_P_2) },
6419 },
6420
592a252b 6421 /* PREFIX_VEX_0F3A40 */
c0f3af97 6422 {
592d1631
L
6423 { Bad_Opcode },
6424 { Bad_Opcode },
592a252b 6425 { VEX_W_TABLE (VEX_W_0F3A40_P_2) },
c0f3af97
L
6426 },
6427
592a252b 6428 /* PREFIX_VEX_0F3A41 */
c0f3af97 6429 {
592d1631
L
6430 { Bad_Opcode },
6431 { Bad_Opcode },
592a252b 6432 { VEX_LEN_TABLE (VEX_LEN_0F3A41_P_2) },
c0f3af97
L
6433 },
6434
592a252b 6435 /* PREFIX_VEX_0F3A42 */
c0f3af97 6436 {
592d1631
L
6437 { Bad_Opcode },
6438 { Bad_Opcode },
6c30d220 6439 { VEX_W_TABLE (VEX_W_0F3A42_P_2) },
c0f3af97
L
6440 },
6441
592a252b 6442 /* PREFIX_VEX_0F3A44 */
ce2f5b3c 6443 {
592d1631
L
6444 { Bad_Opcode },
6445 { Bad_Opcode },
592a252b 6446 { VEX_LEN_TABLE (VEX_LEN_0F3A44_P_2) },
ce2f5b3c
L
6447 },
6448
6c30d220
L
6449 /* PREFIX_VEX_0F3A46 */
6450 {
6451 { Bad_Opcode },
6452 { Bad_Opcode },
6453 { VEX_LEN_TABLE (VEX_LEN_0F3A46_P_2) },
6454 },
6455
592a252b 6456 /* PREFIX_VEX_0F3A48 */
a683cc34
SP
6457 {
6458 { Bad_Opcode },
6459 { Bad_Opcode },
592a252b 6460 { VEX_W_TABLE (VEX_W_0F3A48_P_2) },
a683cc34
SP
6461 },
6462
592a252b 6463 /* PREFIX_VEX_0F3A49 */
a683cc34
SP
6464 {
6465 { Bad_Opcode },
6466 { Bad_Opcode },
592a252b 6467 { VEX_W_TABLE (VEX_W_0F3A49_P_2) },
a683cc34
SP
6468 },
6469
592a252b 6470 /* PREFIX_VEX_0F3A4A */
c0f3af97 6471 {
592d1631
L
6472 { Bad_Opcode },
6473 { Bad_Opcode },
592a252b 6474 { VEX_W_TABLE (VEX_W_0F3A4A_P_2) },
c0f3af97
L
6475 },
6476
592a252b 6477 /* PREFIX_VEX_0F3A4B */
c0f3af97 6478 {
592d1631
L
6479 { Bad_Opcode },
6480 { Bad_Opcode },
592a252b 6481 { VEX_W_TABLE (VEX_W_0F3A4B_P_2) },
c0f3af97
L
6482 },
6483
592a252b 6484 /* PREFIX_VEX_0F3A4C */
c0f3af97 6485 {
592d1631
L
6486 { Bad_Opcode },
6487 { Bad_Opcode },
6c30d220 6488 { VEX_W_TABLE (VEX_W_0F3A4C_P_2) },
c0f3af97
L
6489 },
6490
592a252b 6491 /* PREFIX_VEX_0F3A5C */
922d8de8 6492 {
592d1631
L
6493 { Bad_Opcode },
6494 { Bad_Opcode },
206c2556 6495 { "vfmaddsubps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
922d8de8
DR
6496 },
6497
592a252b 6498 /* PREFIX_VEX_0F3A5D */
922d8de8 6499 {
592d1631
L
6500 { Bad_Opcode },
6501 { Bad_Opcode },
206c2556 6502 { "vfmaddsubpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
922d8de8
DR
6503 },
6504
592a252b 6505 /* PREFIX_VEX_0F3A5E */
922d8de8 6506 {
592d1631
L
6507 { Bad_Opcode },
6508 { Bad_Opcode },
206c2556 6509 { "vfmsubaddps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
922d8de8
DR
6510 },
6511
592a252b 6512 /* PREFIX_VEX_0F3A5F */
922d8de8 6513 {
592d1631
L
6514 { Bad_Opcode },
6515 { Bad_Opcode },
206c2556 6516 { "vfmsubaddpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
922d8de8
DR
6517 },
6518
592a252b 6519 /* PREFIX_VEX_0F3A60 */
c0f3af97 6520 {
592d1631
L
6521 { Bad_Opcode },
6522 { Bad_Opcode },
592a252b 6523 { VEX_LEN_TABLE (VEX_LEN_0F3A60_P_2) },
592d1631 6524 { Bad_Opcode },
c0f3af97
L
6525 },
6526
592a252b 6527 /* PREFIX_VEX_0F3A61 */
c0f3af97 6528 {
592d1631
L
6529 { Bad_Opcode },
6530 { Bad_Opcode },
592a252b 6531 { VEX_LEN_TABLE (VEX_LEN_0F3A61_P_2) },
c0f3af97
L
6532 },
6533
592a252b 6534 /* PREFIX_VEX_0F3A62 */
c0f3af97 6535 {
592d1631
L
6536 { Bad_Opcode },
6537 { Bad_Opcode },
592a252b 6538 { VEX_LEN_TABLE (VEX_LEN_0F3A62_P_2) },
c0f3af97
L
6539 },
6540
592a252b 6541 /* PREFIX_VEX_0F3A63 */
c0f3af97 6542 {
592d1631
L
6543 { Bad_Opcode },
6544 { Bad_Opcode },
592a252b 6545 { VEX_LEN_TABLE (VEX_LEN_0F3A63_P_2) },
c0f3af97 6546 },
a5ff0eb2 6547
592a252b 6548 /* PREFIX_VEX_0F3A68 */
922d8de8 6549 {
592d1631
L
6550 { Bad_Opcode },
6551 { Bad_Opcode },
206c2556 6552 { "vfmaddps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
922d8de8
DR
6553 },
6554
592a252b 6555 /* PREFIX_VEX_0F3A69 */
922d8de8 6556 {
592d1631
L
6557 { Bad_Opcode },
6558 { Bad_Opcode },
206c2556 6559 { "vfmaddpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
922d8de8
DR
6560 },
6561
592a252b 6562 /* PREFIX_VEX_0F3A6A */
922d8de8 6563 {
592d1631
L
6564 { Bad_Opcode },
6565 { Bad_Opcode },
592a252b 6566 { VEX_LEN_TABLE (VEX_LEN_0F3A6A_P_2) },
922d8de8
DR
6567 },
6568
592a252b 6569 /* PREFIX_VEX_0F3A6B */
922d8de8 6570 {
592d1631
L
6571 { Bad_Opcode },
6572 { Bad_Opcode },
592a252b 6573 { VEX_LEN_TABLE (VEX_LEN_0F3A6B_P_2) },
922d8de8
DR
6574 },
6575
592a252b 6576 /* PREFIX_VEX_0F3A6C */
922d8de8 6577 {
592d1631
L
6578 { Bad_Opcode },
6579 { Bad_Opcode },
206c2556 6580 { "vfmsubps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
922d8de8
DR
6581 },
6582
592a252b 6583 /* PREFIX_VEX_0F3A6D */
922d8de8 6584 {
592d1631
L
6585 { Bad_Opcode },
6586 { Bad_Opcode },
206c2556 6587 { "vfmsubpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
922d8de8
DR
6588 },
6589
592a252b 6590 /* PREFIX_VEX_0F3A6E */
922d8de8 6591 {
592d1631
L
6592 { Bad_Opcode },
6593 { Bad_Opcode },
592a252b 6594 { VEX_LEN_TABLE (VEX_LEN_0F3A6E_P_2) },
922d8de8
DR
6595 },
6596
592a252b 6597 /* PREFIX_VEX_0F3A6F */
922d8de8 6598 {
592d1631
L
6599 { Bad_Opcode },
6600 { Bad_Opcode },
592a252b 6601 { VEX_LEN_TABLE (VEX_LEN_0F3A6F_P_2) },
922d8de8
DR
6602 },
6603
592a252b 6604 /* PREFIX_VEX_0F3A78 */
922d8de8 6605 {
592d1631
L
6606 { Bad_Opcode },
6607 { Bad_Opcode },
206c2556 6608 { "vfnmaddps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
922d8de8
DR
6609 },
6610
592a252b 6611 /* PREFIX_VEX_0F3A79 */
922d8de8 6612 {
592d1631
L
6613 { Bad_Opcode },
6614 { Bad_Opcode },
206c2556 6615 { "vfnmaddpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
922d8de8
DR
6616 },
6617
592a252b 6618 /* PREFIX_VEX_0F3A7A */
922d8de8 6619 {
592d1631
L
6620 { Bad_Opcode },
6621 { Bad_Opcode },
592a252b 6622 { VEX_LEN_TABLE (VEX_LEN_0F3A7A_P_2) },
922d8de8
DR
6623 },
6624
592a252b 6625 /* PREFIX_VEX_0F3A7B */
922d8de8 6626 {
592d1631
L
6627 { Bad_Opcode },
6628 { Bad_Opcode },
592a252b 6629 { VEX_LEN_TABLE (VEX_LEN_0F3A7B_P_2) },
922d8de8
DR
6630 },
6631
592a252b 6632 /* PREFIX_VEX_0F3A7C */
922d8de8 6633 {
592d1631
L
6634 { Bad_Opcode },
6635 { Bad_Opcode },
206c2556 6636 { "vfnmsubps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
592d1631 6637 { Bad_Opcode },
922d8de8
DR
6638 },
6639
592a252b 6640 /* PREFIX_VEX_0F3A7D */
922d8de8 6641 {
592d1631
L
6642 { Bad_Opcode },
6643 { Bad_Opcode },
206c2556 6644 { "vfnmsubpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
922d8de8
DR
6645 },
6646
592a252b 6647 /* PREFIX_VEX_0F3A7E */
922d8de8 6648 {
592d1631
L
6649 { Bad_Opcode },
6650 { Bad_Opcode },
592a252b 6651 { VEX_LEN_TABLE (VEX_LEN_0F3A7E_P_2) },
922d8de8
DR
6652 },
6653
592a252b 6654 /* PREFIX_VEX_0F3A7F */
922d8de8 6655 {
592d1631
L
6656 { Bad_Opcode },
6657 { Bad_Opcode },
592a252b 6658 { VEX_LEN_TABLE (VEX_LEN_0F3A7F_P_2) },
922d8de8
DR
6659 },
6660
592a252b 6661 /* PREFIX_VEX_0F3ADF */
a5ff0eb2 6662 {
592d1631
L
6663 { Bad_Opcode },
6664 { Bad_Opcode },
592a252b 6665 { VEX_LEN_TABLE (VEX_LEN_0F3ADF_P_2) },
a5ff0eb2 6666 },
6c30d220
L
6667
6668 /* PREFIX_VEX_0F3AF0 */
6669 {
6670 { Bad_Opcode },
6671 { Bad_Opcode },
6672 { Bad_Opcode },
6673 { VEX_LEN_TABLE (VEX_LEN_0F3AF0_P_3) },
6674 },
43234a1e
L
6675
6676#define NEED_PREFIX_TABLE
6677#include "i386-dis-evex.h"
6678#undef NEED_PREFIX_TABLE
c0f3af97
L
6679};
6680
6681static const struct dis386 x86_64_table[][2] = {
6682 /* X86_64_06 */
6683 {
d9e3625e 6684 { "pushP", { es } },
c0f3af97
L
6685 },
6686
6687 /* X86_64_07 */
6688 {
d9e3625e 6689 { "popP", { es } },
c0f3af97
L
6690 },
6691
6692 /* X86_64_0D */
6693 {
d9e3625e 6694 { "pushP", { cs } },
c0f3af97
L
6695 },
6696
6697 /* X86_64_16 */
6698 {
d9e3625e 6699 { "pushP", { ss } },
c0f3af97
L
6700 },
6701
6702 /* X86_64_17 */
6703 {
d9e3625e 6704 { "popP", { ss } },
c0f3af97
L
6705 },
6706
6707 /* X86_64_1E */
6708 {
d9e3625e 6709 { "pushP", { ds } },
c0f3af97
L
6710 },
6711
6712 /* X86_64_1F */
6713 {
d9e3625e 6714 { "popP", { ds } },
c0f3af97
L
6715 },
6716
6717 /* X86_64_27 */
6718 {
6719 { "daa", { XX } },
c0f3af97
L
6720 },
6721
6722 /* X86_64_2F */
6723 {
6724 { "das", { XX } },
c0f3af97
L
6725 },
6726
6727 /* X86_64_37 */
6728 {
6729 { "aaa", { XX } },
c0f3af97
L
6730 },
6731
6732 /* X86_64_3F */
6733 {
6734 { "aas", { XX } },
c0f3af97
L
6735 },
6736
6737 /* X86_64_60 */
6738 {
d9e3625e 6739 { "pushaP", { XX } },
c0f3af97
L
6740 },
6741
6742 /* X86_64_61 */
6743 {
d9e3625e 6744 { "popaP", { XX } },
c0f3af97
L
6745 },
6746
6747 /* X86_64_62 */
6748 {
6749 { MOD_TABLE (MOD_62_32BIT) },
43234a1e 6750 { EVEX_TABLE (EVEX_0F) },
c0f3af97
L
6751 },
6752
6753 /* X86_64_63 */
6754 {
6755 { "arpl", { Ew, Gw } },
6756 { "movs{lq|xd}", { Gv, Ed } },
6757 },
6758
6759 /* X86_64_6D */
6760 {
6761 { "ins{R|}", { Yzr, indirDX } },
6762 { "ins{G|}", { Yzr, indirDX } },
6763 },
6764
6765 /* X86_64_6F */
6766 {
6767 { "outs{R|}", { indirDXr, Xz } },
6768 { "outs{G|}", { indirDXr, Xz } },
6769 },
6770
6771 /* X86_64_9A */
6772 {
6773 { "Jcall{T|}", { Ap } },
c0f3af97
L
6774 },
6775
6776 /* X86_64_C4 */
6777 {
6778 { MOD_TABLE (MOD_C4_32BIT) },
6779 { VEX_C4_TABLE (VEX_0F) },
6780 },
6781
6782 /* X86_64_C5 */
6783 {
6784 { MOD_TABLE (MOD_C5_32BIT) },
6785 { VEX_C5_TABLE (VEX_0F) },
6786 },
6787
6788 /* X86_64_CE */
6789 {
6790 { "into", { XX } },
c0f3af97
L
6791 },
6792
6793 /* X86_64_D4 */
6794 {
e3949f17 6795 { "aam", { Ib } },
c0f3af97
L
6796 },
6797
6798 /* X86_64_D5 */
6799 {
e3949f17 6800 { "aad", { Ib } },
c0f3af97
L
6801 },
6802
6803 /* X86_64_EA */
6804 {
6805 { "Jjmp{T|}", { Ap } },
c0f3af97
L
6806 },
6807
6808 /* X86_64_0F01_REG_0 */
6809 {
6810 { "sgdt{Q|IQ}", { M } },
6811 { "sgdt", { M } },
6812 },
6813
6814 /* X86_64_0F01_REG_1 */
6815 {
6816 { "sidt{Q|IQ}", { M } },
6817 { "sidt", { M } },
6818 },
6819
6820 /* X86_64_0F01_REG_2 */
6821 {
6822 { "lgdt{Q|Q}", { M } },
6823 { "lgdt", { M } },
6824 },
6825
6826 /* X86_64_0F01_REG_3 */
6827 {
6828 { "lidt{Q|Q}", { M } },
6829 { "lidt", { M } },
6830 },
6831};
6832
6833static const struct dis386 three_byte_table[][256] = {
c1e679ec
DR
6834
6835 /* THREE_BYTE_0F38 */
c0f3af97
L
6836 {
6837 /* 00 */
c1e679ec
DR
6838 { "pshufb", { MX, EM } },
6839 { "phaddw", { MX, EM } },
6840 { "phaddd", { MX, EM } },
6841 { "phaddsw", { MX, EM } },
6842 { "pmaddubsw", { MX, EM } },
6843 { "phsubw", { MX, EM } },
6844 { "phsubd", { MX, EM } },
6845 { "phsubsw", { MX, EM } },
c0f3af97 6846 /* 08 */
c1e679ec
DR
6847 { "psignb", { MX, EM } },
6848 { "psignw", { MX, EM } },
6849 { "psignd", { MX, EM } },
6850 { "pmulhrsw", { MX, EM } },
592d1631
L
6851 { Bad_Opcode },
6852 { Bad_Opcode },
6853 { Bad_Opcode },
6854 { Bad_Opcode },
f88c9eb0
SP
6855 /* 10 */
6856 { PREFIX_TABLE (PREFIX_0F3810) },
592d1631
L
6857 { Bad_Opcode },
6858 { Bad_Opcode },
6859 { Bad_Opcode },
f88c9eb0
SP
6860 { PREFIX_TABLE (PREFIX_0F3814) },
6861 { PREFIX_TABLE (PREFIX_0F3815) },
592d1631 6862 { Bad_Opcode },
f88c9eb0
SP
6863 { PREFIX_TABLE (PREFIX_0F3817) },
6864 /* 18 */
592d1631
L
6865 { Bad_Opcode },
6866 { Bad_Opcode },
6867 { Bad_Opcode },
6868 { Bad_Opcode },
f88c9eb0
SP
6869 { "pabsb", { MX, EM } },
6870 { "pabsw", { MX, EM } },
6871 { "pabsd", { MX, EM } },
592d1631 6872 { Bad_Opcode },
f88c9eb0
SP
6873 /* 20 */
6874 { PREFIX_TABLE (PREFIX_0F3820) },
6875 { PREFIX_TABLE (PREFIX_0F3821) },
6876 { PREFIX_TABLE (PREFIX_0F3822) },
6877 { PREFIX_TABLE (PREFIX_0F3823) },
6878 { PREFIX_TABLE (PREFIX_0F3824) },
6879 { PREFIX_TABLE (PREFIX_0F3825) },
592d1631
L
6880 { Bad_Opcode },
6881 { Bad_Opcode },
f88c9eb0
SP
6882 /* 28 */
6883 { PREFIX_TABLE (PREFIX_0F3828) },
6884 { PREFIX_TABLE (PREFIX_0F3829) },
6885 { PREFIX_TABLE (PREFIX_0F382A) },
6886 { PREFIX_TABLE (PREFIX_0F382B) },
592d1631
L
6887 { Bad_Opcode },
6888 { Bad_Opcode },
6889 { Bad_Opcode },
6890 { Bad_Opcode },
f88c9eb0
SP
6891 /* 30 */
6892 { PREFIX_TABLE (PREFIX_0F3830) },
6893 { PREFIX_TABLE (PREFIX_0F3831) },
6894 { PREFIX_TABLE (PREFIX_0F3832) },
6895 { PREFIX_TABLE (PREFIX_0F3833) },
6896 { PREFIX_TABLE (PREFIX_0F3834) },
6897 { PREFIX_TABLE (PREFIX_0F3835) },
592d1631 6898 { Bad_Opcode },
f88c9eb0
SP
6899 { PREFIX_TABLE (PREFIX_0F3837) },
6900 /* 38 */
6901 { PREFIX_TABLE (PREFIX_0F3838) },
6902 { PREFIX_TABLE (PREFIX_0F3839) },
6903 { PREFIX_TABLE (PREFIX_0F383A) },
6904 { PREFIX_TABLE (PREFIX_0F383B) },
6905 { PREFIX_TABLE (PREFIX_0F383C) },
6906 { PREFIX_TABLE (PREFIX_0F383D) },
6907 { PREFIX_TABLE (PREFIX_0F383E) },
6908 { PREFIX_TABLE (PREFIX_0F383F) },
6909 /* 40 */
6910 { PREFIX_TABLE (PREFIX_0F3840) },
6911 { PREFIX_TABLE (PREFIX_0F3841) },
592d1631
L
6912 { Bad_Opcode },
6913 { Bad_Opcode },
6914 { Bad_Opcode },
6915 { Bad_Opcode },
6916 { Bad_Opcode },
6917 { Bad_Opcode },
f88c9eb0 6918 /* 48 */
592d1631
L
6919 { Bad_Opcode },
6920 { Bad_Opcode },
6921 { Bad_Opcode },
6922 { Bad_Opcode },
6923 { Bad_Opcode },
6924 { Bad_Opcode },
6925 { Bad_Opcode },
6926 { Bad_Opcode },
f88c9eb0 6927 /* 50 */
592d1631
L
6928 { Bad_Opcode },
6929 { Bad_Opcode },
6930 { Bad_Opcode },
6931 { Bad_Opcode },
6932 { Bad_Opcode },
6933 { Bad_Opcode },
6934 { Bad_Opcode },
6935 { Bad_Opcode },
f88c9eb0 6936 /* 58 */
592d1631
L
6937 { Bad_Opcode },
6938 { Bad_Opcode },
6939 { Bad_Opcode },
6940 { Bad_Opcode },
6941 { Bad_Opcode },
6942 { Bad_Opcode },
6943 { Bad_Opcode },
6944 { Bad_Opcode },
f88c9eb0 6945 /* 60 */
592d1631
L
6946 { Bad_Opcode },
6947 { Bad_Opcode },
6948 { Bad_Opcode },
6949 { Bad_Opcode },
6950 { Bad_Opcode },
6951 { Bad_Opcode },
6952 { Bad_Opcode },
6953 { Bad_Opcode },
f88c9eb0 6954 /* 68 */
592d1631
L
6955 { Bad_Opcode },
6956 { Bad_Opcode },
6957 { Bad_Opcode },
6958 { Bad_Opcode },
6959 { Bad_Opcode },
6960 { Bad_Opcode },
6961 { Bad_Opcode },
6962 { Bad_Opcode },
f88c9eb0 6963 /* 70 */
592d1631
L
6964 { Bad_Opcode },
6965 { Bad_Opcode },
6966 { Bad_Opcode },
6967 { Bad_Opcode },
6968 { Bad_Opcode },
6969 { Bad_Opcode },
6970 { Bad_Opcode },
6971 { Bad_Opcode },
f88c9eb0 6972 /* 78 */
592d1631
L
6973 { Bad_Opcode },
6974 { Bad_Opcode },
6975 { Bad_Opcode },
6976 { Bad_Opcode },
6977 { Bad_Opcode },
6978 { Bad_Opcode },
6979 { Bad_Opcode },
6980 { Bad_Opcode },
f88c9eb0
SP
6981 /* 80 */
6982 { PREFIX_TABLE (PREFIX_0F3880) },
6983 { PREFIX_TABLE (PREFIX_0F3881) },
6c30d220 6984 { PREFIX_TABLE (PREFIX_0F3882) },
592d1631
L
6985 { Bad_Opcode },
6986 { Bad_Opcode },
6987 { Bad_Opcode },
6988 { Bad_Opcode },
6989 { Bad_Opcode },
f88c9eb0 6990 /* 88 */
592d1631
L
6991 { Bad_Opcode },
6992 { Bad_Opcode },
6993 { Bad_Opcode },
6994 { Bad_Opcode },
6995 { Bad_Opcode },
6996 { Bad_Opcode },
6997 { Bad_Opcode },
6998 { Bad_Opcode },
f88c9eb0 6999 /* 90 */
592d1631
L
7000 { Bad_Opcode },
7001 { Bad_Opcode },
7002 { Bad_Opcode },
7003 { Bad_Opcode },
7004 { Bad_Opcode },
7005 { Bad_Opcode },
7006 { Bad_Opcode },
7007 { Bad_Opcode },
f88c9eb0 7008 /* 98 */
592d1631
L
7009 { Bad_Opcode },
7010 { Bad_Opcode },
7011 { Bad_Opcode },
7012 { Bad_Opcode },
7013 { Bad_Opcode },
7014 { Bad_Opcode },
7015 { Bad_Opcode },
7016 { Bad_Opcode },
f88c9eb0 7017 /* a0 */
592d1631
L
7018 { Bad_Opcode },
7019 { Bad_Opcode },
7020 { Bad_Opcode },
7021 { Bad_Opcode },
7022 { Bad_Opcode },
7023 { Bad_Opcode },
7024 { Bad_Opcode },
7025 { Bad_Opcode },
f88c9eb0 7026 /* a8 */
592d1631
L
7027 { Bad_Opcode },
7028 { Bad_Opcode },
7029 { Bad_Opcode },
7030 { Bad_Opcode },
7031 { Bad_Opcode },
7032 { Bad_Opcode },
7033 { Bad_Opcode },
7034 { Bad_Opcode },
f88c9eb0 7035 /* b0 */
592d1631
L
7036 { Bad_Opcode },
7037 { Bad_Opcode },
7038 { Bad_Opcode },
7039 { Bad_Opcode },
7040 { Bad_Opcode },
7041 { Bad_Opcode },
7042 { Bad_Opcode },
7043 { Bad_Opcode },
f88c9eb0 7044 /* b8 */
592d1631
L
7045 { Bad_Opcode },
7046 { Bad_Opcode },
7047 { Bad_Opcode },
7048 { Bad_Opcode },
7049 { Bad_Opcode },
7050 { Bad_Opcode },
7051 { Bad_Opcode },
7052 { Bad_Opcode },
f88c9eb0 7053 /* c0 */
592d1631
L
7054 { Bad_Opcode },
7055 { Bad_Opcode },
7056 { Bad_Opcode },
7057 { Bad_Opcode },
7058 { Bad_Opcode },
7059 { Bad_Opcode },
7060 { Bad_Opcode },
7061 { Bad_Opcode },
f88c9eb0 7062 /* c8 */
a0046408
L
7063 { PREFIX_TABLE (PREFIX_0F38C8) },
7064 { PREFIX_TABLE (PREFIX_0F38C9) },
7065 { PREFIX_TABLE (PREFIX_0F38CA) },
7066 { PREFIX_TABLE (PREFIX_0F38CB) },
7067 { PREFIX_TABLE (PREFIX_0F38CC) },
7068 { PREFIX_TABLE (PREFIX_0F38CD) },
592d1631
L
7069 { Bad_Opcode },
7070 { Bad_Opcode },
f88c9eb0 7071 /* d0 */
592d1631
L
7072 { Bad_Opcode },
7073 { Bad_Opcode },
7074 { Bad_Opcode },
7075 { Bad_Opcode },
7076 { Bad_Opcode },
7077 { Bad_Opcode },
7078 { Bad_Opcode },
7079 { Bad_Opcode },
f88c9eb0 7080 /* d8 */
592d1631
L
7081 { Bad_Opcode },
7082 { Bad_Opcode },
7083 { Bad_Opcode },
f88c9eb0
SP
7084 { PREFIX_TABLE (PREFIX_0F38DB) },
7085 { PREFIX_TABLE (PREFIX_0F38DC) },
7086 { PREFIX_TABLE (PREFIX_0F38DD) },
7087 { PREFIX_TABLE (PREFIX_0F38DE) },
7088 { PREFIX_TABLE (PREFIX_0F38DF) },
7089 /* e0 */
592d1631
L
7090 { Bad_Opcode },
7091 { Bad_Opcode },
7092 { Bad_Opcode },
7093 { Bad_Opcode },
7094 { Bad_Opcode },
7095 { Bad_Opcode },
7096 { Bad_Opcode },
7097 { Bad_Opcode },
f88c9eb0 7098 /* e8 */
592d1631
L
7099 { Bad_Opcode },
7100 { Bad_Opcode },
7101 { Bad_Opcode },
7102 { Bad_Opcode },
7103 { Bad_Opcode },
7104 { Bad_Opcode },
7105 { Bad_Opcode },
7106 { Bad_Opcode },
f88c9eb0
SP
7107 /* f0 */
7108 { PREFIX_TABLE (PREFIX_0F38F0) },
7109 { PREFIX_TABLE (PREFIX_0F38F1) },
592d1631
L
7110 { Bad_Opcode },
7111 { Bad_Opcode },
7112 { Bad_Opcode },
7113 { Bad_Opcode },
e2e1fcde 7114 { PREFIX_TABLE (PREFIX_0F38F6) },
592d1631 7115 { Bad_Opcode },
f88c9eb0 7116 /* f8 */
592d1631
L
7117 { Bad_Opcode },
7118 { Bad_Opcode },
7119 { Bad_Opcode },
7120 { Bad_Opcode },
7121 { Bad_Opcode },
7122 { Bad_Opcode },
7123 { Bad_Opcode },
7124 { Bad_Opcode },
f88c9eb0
SP
7125 },
7126 /* THREE_BYTE_0F3A */
7127 {
7128 /* 00 */
592d1631
L
7129 { Bad_Opcode },
7130 { Bad_Opcode },
7131 { Bad_Opcode },
7132 { Bad_Opcode },
7133 { Bad_Opcode },
7134 { Bad_Opcode },
7135 { Bad_Opcode },
7136 { Bad_Opcode },
f88c9eb0
SP
7137 /* 08 */
7138 { PREFIX_TABLE (PREFIX_0F3A08) },
7139 { PREFIX_TABLE (PREFIX_0F3A09) },
7140 { PREFIX_TABLE (PREFIX_0F3A0A) },
7141 { PREFIX_TABLE (PREFIX_0F3A0B) },
7142 { PREFIX_TABLE (PREFIX_0F3A0C) },
7143 { PREFIX_TABLE (PREFIX_0F3A0D) },
7144 { PREFIX_TABLE (PREFIX_0F3A0E) },
7145 { "palignr", { MX, EM, Ib } },
7146 /* 10 */
592d1631
L
7147 { Bad_Opcode },
7148 { Bad_Opcode },
7149 { Bad_Opcode },
7150 { Bad_Opcode },
f88c9eb0
SP
7151 { PREFIX_TABLE (PREFIX_0F3A14) },
7152 { PREFIX_TABLE (PREFIX_0F3A15) },
7153 { PREFIX_TABLE (PREFIX_0F3A16) },
7154 { PREFIX_TABLE (PREFIX_0F3A17) },
7155 /* 18 */
592d1631
L
7156 { Bad_Opcode },
7157 { Bad_Opcode },
7158 { Bad_Opcode },
7159 { Bad_Opcode },
7160 { Bad_Opcode },
7161 { Bad_Opcode },
7162 { Bad_Opcode },
7163 { Bad_Opcode },
f88c9eb0
SP
7164 /* 20 */
7165 { PREFIX_TABLE (PREFIX_0F3A20) },
7166 { PREFIX_TABLE (PREFIX_0F3A21) },
7167 { PREFIX_TABLE (PREFIX_0F3A22) },
592d1631
L
7168 { Bad_Opcode },
7169 { Bad_Opcode },
7170 { Bad_Opcode },
7171 { Bad_Opcode },
7172 { Bad_Opcode },
f88c9eb0 7173 /* 28 */
592d1631
L
7174 { Bad_Opcode },
7175 { Bad_Opcode },
7176 { Bad_Opcode },
7177 { Bad_Opcode },
7178 { Bad_Opcode },
7179 { Bad_Opcode },
7180 { Bad_Opcode },
7181 { Bad_Opcode },
f88c9eb0 7182 /* 30 */
592d1631
L
7183 { Bad_Opcode },
7184 { Bad_Opcode },
7185 { Bad_Opcode },
7186 { Bad_Opcode },
7187 { Bad_Opcode },
7188 { Bad_Opcode },
7189 { Bad_Opcode },
7190 { Bad_Opcode },
f88c9eb0 7191 /* 38 */
592d1631
L
7192 { Bad_Opcode },
7193 { Bad_Opcode },
7194 { Bad_Opcode },
7195 { Bad_Opcode },
7196 { Bad_Opcode },
7197 { Bad_Opcode },
7198 { Bad_Opcode },
7199 { Bad_Opcode },
f88c9eb0
SP
7200 /* 40 */
7201 { PREFIX_TABLE (PREFIX_0F3A40) },
7202 { PREFIX_TABLE (PREFIX_0F3A41) },
7203 { PREFIX_TABLE (PREFIX_0F3A42) },
592d1631 7204 { Bad_Opcode },
f88c9eb0 7205 { PREFIX_TABLE (PREFIX_0F3A44) },
592d1631
L
7206 { Bad_Opcode },
7207 { Bad_Opcode },
7208 { Bad_Opcode },
f88c9eb0 7209 /* 48 */
592d1631
L
7210 { Bad_Opcode },
7211 { Bad_Opcode },
7212 { Bad_Opcode },
7213 { Bad_Opcode },
7214 { Bad_Opcode },
7215 { Bad_Opcode },
7216 { Bad_Opcode },
7217 { Bad_Opcode },
f88c9eb0 7218 /* 50 */
592d1631
L
7219 { Bad_Opcode },
7220 { Bad_Opcode },
7221 { Bad_Opcode },
7222 { Bad_Opcode },
7223 { Bad_Opcode },
7224 { Bad_Opcode },
7225 { Bad_Opcode },
7226 { Bad_Opcode },
f88c9eb0 7227 /* 58 */
592d1631
L
7228 { Bad_Opcode },
7229 { Bad_Opcode },
7230 { Bad_Opcode },
7231 { Bad_Opcode },
7232 { Bad_Opcode },
7233 { Bad_Opcode },
7234 { Bad_Opcode },
7235 { Bad_Opcode },
f88c9eb0
SP
7236 /* 60 */
7237 { PREFIX_TABLE (PREFIX_0F3A60) },
7238 { PREFIX_TABLE (PREFIX_0F3A61) },
7239 { PREFIX_TABLE (PREFIX_0F3A62) },
7240 { PREFIX_TABLE (PREFIX_0F3A63) },
592d1631
L
7241 { Bad_Opcode },
7242 { Bad_Opcode },
7243 { Bad_Opcode },
7244 { Bad_Opcode },
f88c9eb0 7245 /* 68 */
592d1631
L
7246 { Bad_Opcode },
7247 { Bad_Opcode },
7248 { Bad_Opcode },
7249 { Bad_Opcode },
7250 { Bad_Opcode },
7251 { Bad_Opcode },
7252 { Bad_Opcode },
7253 { Bad_Opcode },
f88c9eb0 7254 /* 70 */
592d1631
L
7255 { Bad_Opcode },
7256 { Bad_Opcode },
7257 { Bad_Opcode },
7258 { Bad_Opcode },
7259 { Bad_Opcode },
7260 { Bad_Opcode },
7261 { Bad_Opcode },
7262 { Bad_Opcode },
f88c9eb0 7263 /* 78 */
592d1631
L
7264 { Bad_Opcode },
7265 { Bad_Opcode },
7266 { Bad_Opcode },
7267 { Bad_Opcode },
7268 { Bad_Opcode },
7269 { Bad_Opcode },
7270 { Bad_Opcode },
7271 { Bad_Opcode },
f88c9eb0 7272 /* 80 */
592d1631
L
7273 { Bad_Opcode },
7274 { Bad_Opcode },
7275 { Bad_Opcode },
7276 { Bad_Opcode },
7277 { Bad_Opcode },
7278 { Bad_Opcode },
7279 { Bad_Opcode },
7280 { Bad_Opcode },
f88c9eb0 7281 /* 88 */
592d1631
L
7282 { Bad_Opcode },
7283 { Bad_Opcode },
7284 { Bad_Opcode },
7285 { Bad_Opcode },
7286 { Bad_Opcode },
7287 { Bad_Opcode },
7288 { Bad_Opcode },
7289 { Bad_Opcode },
f88c9eb0 7290 /* 90 */
592d1631
L
7291 { Bad_Opcode },
7292 { Bad_Opcode },
7293 { Bad_Opcode },
7294 { Bad_Opcode },
7295 { Bad_Opcode },
7296 { Bad_Opcode },
7297 { Bad_Opcode },
7298 { Bad_Opcode },
f88c9eb0 7299 /* 98 */
592d1631
L
7300 { Bad_Opcode },
7301 { Bad_Opcode },
7302 { Bad_Opcode },
7303 { Bad_Opcode },
7304 { Bad_Opcode },
7305 { Bad_Opcode },
7306 { Bad_Opcode },
7307 { Bad_Opcode },
f88c9eb0 7308 /* a0 */
592d1631
L
7309 { Bad_Opcode },
7310 { Bad_Opcode },
7311 { Bad_Opcode },
7312 { Bad_Opcode },
7313 { Bad_Opcode },
7314 { Bad_Opcode },
7315 { Bad_Opcode },
7316 { Bad_Opcode },
f88c9eb0 7317 /* a8 */
592d1631
L
7318 { Bad_Opcode },
7319 { Bad_Opcode },
7320 { Bad_Opcode },
7321 { Bad_Opcode },
7322 { Bad_Opcode },
7323 { Bad_Opcode },
7324 { Bad_Opcode },
7325 { Bad_Opcode },
f88c9eb0 7326 /* b0 */
592d1631
L
7327 { Bad_Opcode },
7328 { Bad_Opcode },
7329 { Bad_Opcode },
7330 { Bad_Opcode },
7331 { Bad_Opcode },
7332 { Bad_Opcode },
7333 { Bad_Opcode },
7334 { Bad_Opcode },
f88c9eb0 7335 /* b8 */
592d1631
L
7336 { Bad_Opcode },
7337 { Bad_Opcode },
7338 { Bad_Opcode },
7339 { Bad_Opcode },
7340 { Bad_Opcode },
7341 { Bad_Opcode },
7342 { Bad_Opcode },
7343 { Bad_Opcode },
f88c9eb0 7344 /* c0 */
592d1631
L
7345 { Bad_Opcode },
7346 { Bad_Opcode },
7347 { Bad_Opcode },
7348 { Bad_Opcode },
7349 { Bad_Opcode },
7350 { Bad_Opcode },
7351 { Bad_Opcode },
7352 { Bad_Opcode },
f88c9eb0 7353 /* c8 */
592d1631
L
7354 { Bad_Opcode },
7355 { Bad_Opcode },
7356 { Bad_Opcode },
7357 { Bad_Opcode },
a0046408 7358 { PREFIX_TABLE (PREFIX_0F3ACC) },
592d1631
L
7359 { Bad_Opcode },
7360 { Bad_Opcode },
7361 { Bad_Opcode },
f88c9eb0 7362 /* d0 */
592d1631
L
7363 { Bad_Opcode },
7364 { Bad_Opcode },
7365 { Bad_Opcode },
7366 { Bad_Opcode },
7367 { Bad_Opcode },
7368 { Bad_Opcode },
7369 { Bad_Opcode },
7370 { Bad_Opcode },
f88c9eb0 7371 /* d8 */
592d1631
L
7372 { Bad_Opcode },
7373 { Bad_Opcode },
7374 { Bad_Opcode },
7375 { Bad_Opcode },
7376 { Bad_Opcode },
7377 { Bad_Opcode },
7378 { Bad_Opcode },
f88c9eb0
SP
7379 { PREFIX_TABLE (PREFIX_0F3ADF) },
7380 /* e0 */
592d1631
L
7381 { Bad_Opcode },
7382 { Bad_Opcode },
7383 { Bad_Opcode },
7384 { Bad_Opcode },
7385 { Bad_Opcode },
7386 { Bad_Opcode },
7387 { Bad_Opcode },
7388 { Bad_Opcode },
f88c9eb0 7389 /* e8 */
592d1631
L
7390 { Bad_Opcode },
7391 { Bad_Opcode },
7392 { Bad_Opcode },
7393 { Bad_Opcode },
7394 { Bad_Opcode },
7395 { Bad_Opcode },
7396 { Bad_Opcode },
7397 { Bad_Opcode },
f88c9eb0 7398 /* f0 */
592d1631
L
7399 { Bad_Opcode },
7400 { Bad_Opcode },
7401 { Bad_Opcode },
7402 { Bad_Opcode },
7403 { Bad_Opcode },
7404 { Bad_Opcode },
7405 { Bad_Opcode },
7406 { Bad_Opcode },
f88c9eb0 7407 /* f8 */
592d1631
L
7408 { Bad_Opcode },
7409 { Bad_Opcode },
7410 { Bad_Opcode },
7411 { Bad_Opcode },
7412 { Bad_Opcode },
7413 { Bad_Opcode },
7414 { Bad_Opcode },
7415 { Bad_Opcode },
f88c9eb0
SP
7416 },
7417
7418 /* THREE_BYTE_0F7A */
7419 {
7420 /* 00 */
592d1631
L
7421 { Bad_Opcode },
7422 { Bad_Opcode },
7423 { Bad_Opcode },
7424 { Bad_Opcode },
7425 { Bad_Opcode },
7426 { Bad_Opcode },
7427 { Bad_Opcode },
7428 { Bad_Opcode },
f88c9eb0 7429 /* 08 */
592d1631
L
7430 { Bad_Opcode },
7431 { Bad_Opcode },
7432 { Bad_Opcode },
7433 { Bad_Opcode },
7434 { Bad_Opcode },
7435 { Bad_Opcode },
7436 { Bad_Opcode },
7437 { Bad_Opcode },
f88c9eb0 7438 /* 10 */
592d1631
L
7439 { Bad_Opcode },
7440 { Bad_Opcode },
7441 { Bad_Opcode },
7442 { Bad_Opcode },
7443 { Bad_Opcode },
7444 { Bad_Opcode },
7445 { Bad_Opcode },
7446 { Bad_Opcode },
f88c9eb0 7447 /* 18 */
592d1631
L
7448 { Bad_Opcode },
7449 { Bad_Opcode },
7450 { Bad_Opcode },
7451 { Bad_Opcode },
7452 { Bad_Opcode },
7453 { Bad_Opcode },
7454 { Bad_Opcode },
7455 { Bad_Opcode },
f88c9eb0
SP
7456 /* 20 */
7457 { "ptest", { XX } },
592d1631
L
7458 { Bad_Opcode },
7459 { Bad_Opcode },
7460 { Bad_Opcode },
7461 { Bad_Opcode },
7462 { Bad_Opcode },
7463 { Bad_Opcode },
7464 { Bad_Opcode },
f88c9eb0 7465 /* 28 */
592d1631
L
7466 { Bad_Opcode },
7467 { Bad_Opcode },
7468 { Bad_Opcode },
7469 { Bad_Opcode },
7470 { Bad_Opcode },
7471 { Bad_Opcode },
7472 { Bad_Opcode },
7473 { Bad_Opcode },
f88c9eb0 7474 /* 30 */
592d1631
L
7475 { Bad_Opcode },
7476 { Bad_Opcode },
7477 { Bad_Opcode },
7478 { Bad_Opcode },
7479 { Bad_Opcode },
7480 { Bad_Opcode },
7481 { Bad_Opcode },
7482 { Bad_Opcode },
f88c9eb0 7483 /* 38 */
592d1631
L
7484 { Bad_Opcode },
7485 { Bad_Opcode },
7486 { Bad_Opcode },
7487 { Bad_Opcode },
7488 { Bad_Opcode },
7489 { Bad_Opcode },
7490 { Bad_Opcode },
7491 { Bad_Opcode },
f88c9eb0 7492 /* 40 */
592d1631 7493 { Bad_Opcode },
f88c9eb0
SP
7494 { "phaddbw", { XM, EXq } },
7495 { "phaddbd", { XM, EXq } },
7496 { "phaddbq", { XM, EXq } },
592d1631
L
7497 { Bad_Opcode },
7498 { Bad_Opcode },
f88c9eb0
SP
7499 { "phaddwd", { XM, EXq } },
7500 { "phaddwq", { XM, EXq } },
7501 /* 48 */
592d1631
L
7502 { Bad_Opcode },
7503 { Bad_Opcode },
7504 { Bad_Opcode },
f88c9eb0 7505 { "phadddq", { XM, EXq } },
592d1631
L
7506 { Bad_Opcode },
7507 { Bad_Opcode },
7508 { Bad_Opcode },
7509 { Bad_Opcode },
f88c9eb0 7510 /* 50 */
592d1631 7511 { Bad_Opcode },
f88c9eb0
SP
7512 { "phaddubw", { XM, EXq } },
7513 { "phaddubd", { XM, EXq } },
7514 { "phaddubq", { XM, EXq } },
592d1631
L
7515 { Bad_Opcode },
7516 { Bad_Opcode },
f88c9eb0
SP
7517 { "phadduwd", { XM, EXq } },
7518 { "phadduwq", { XM, EXq } },
7519 /* 58 */
592d1631
L
7520 { Bad_Opcode },
7521 { Bad_Opcode },
7522 { Bad_Opcode },
f88c9eb0 7523 { "phaddudq", { XM, EXq } },
592d1631
L
7524 { Bad_Opcode },
7525 { Bad_Opcode },
7526 { Bad_Opcode },
7527 { Bad_Opcode },
f88c9eb0 7528 /* 60 */
592d1631 7529 { Bad_Opcode },
f88c9eb0
SP
7530 { "phsubbw", { XM, EXq } },
7531 { "phsubbd", { XM, EXq } },
7532 { "phsubbq", { XM, EXq } },
592d1631
L
7533 { Bad_Opcode },
7534 { Bad_Opcode },
7535 { Bad_Opcode },
7536 { Bad_Opcode },
4e7d34a6 7537 /* 68 */
592d1631
L
7538 { Bad_Opcode },
7539 { Bad_Opcode },
7540 { Bad_Opcode },
7541 { Bad_Opcode },
7542 { Bad_Opcode },
7543 { Bad_Opcode },
7544 { Bad_Opcode },
7545 { Bad_Opcode },
85f10a01 7546 /* 70 */
592d1631
L
7547 { Bad_Opcode },
7548 { Bad_Opcode },
7549 { Bad_Opcode },
7550 { Bad_Opcode },
7551 { Bad_Opcode },
7552 { Bad_Opcode },
7553 { Bad_Opcode },
7554 { Bad_Opcode },
85f10a01 7555 /* 78 */
592d1631
L
7556 { Bad_Opcode },
7557 { Bad_Opcode },
7558 { Bad_Opcode },
7559 { Bad_Opcode },
7560 { Bad_Opcode },
7561 { Bad_Opcode },
7562 { Bad_Opcode },
7563 { Bad_Opcode },
85f10a01 7564 /* 80 */
592d1631
L
7565 { Bad_Opcode },
7566 { Bad_Opcode },
7567 { Bad_Opcode },
7568 { Bad_Opcode },
7569 { Bad_Opcode },
7570 { Bad_Opcode },
7571 { Bad_Opcode },
7572 { Bad_Opcode },
85f10a01 7573 /* 88 */
592d1631
L
7574 { Bad_Opcode },
7575 { Bad_Opcode },
7576 { Bad_Opcode },
7577 { Bad_Opcode },
7578 { Bad_Opcode },
7579 { Bad_Opcode },
7580 { Bad_Opcode },
7581 { Bad_Opcode },
85f10a01 7582 /* 90 */
592d1631
L
7583 { Bad_Opcode },
7584 { Bad_Opcode },
7585 { Bad_Opcode },
7586 { Bad_Opcode },
7587 { Bad_Opcode },
7588 { Bad_Opcode },
7589 { Bad_Opcode },
7590 { Bad_Opcode },
85f10a01 7591 /* 98 */
592d1631
L
7592 { Bad_Opcode },
7593 { Bad_Opcode },
7594 { Bad_Opcode },
7595 { Bad_Opcode },
7596 { Bad_Opcode },
7597 { Bad_Opcode },
7598 { Bad_Opcode },
7599 { Bad_Opcode },
85f10a01 7600 /* a0 */
592d1631
L
7601 { Bad_Opcode },
7602 { Bad_Opcode },
7603 { Bad_Opcode },
7604 { Bad_Opcode },
7605 { Bad_Opcode },
7606 { Bad_Opcode },
7607 { Bad_Opcode },
7608 { Bad_Opcode },
85f10a01 7609 /* a8 */
592d1631
L
7610 { Bad_Opcode },
7611 { Bad_Opcode },
7612 { Bad_Opcode },
7613 { Bad_Opcode },
7614 { Bad_Opcode },
7615 { Bad_Opcode },
7616 { Bad_Opcode },
7617 { Bad_Opcode },
85f10a01 7618 /* b0 */
592d1631
L
7619 { Bad_Opcode },
7620 { Bad_Opcode },
7621 { Bad_Opcode },
7622 { Bad_Opcode },
7623 { Bad_Opcode },
7624 { Bad_Opcode },
7625 { Bad_Opcode },
7626 { Bad_Opcode },
85f10a01 7627 /* b8 */
592d1631
L
7628 { Bad_Opcode },
7629 { Bad_Opcode },
7630 { Bad_Opcode },
7631 { Bad_Opcode },
7632 { Bad_Opcode },
7633 { Bad_Opcode },
7634 { Bad_Opcode },
7635 { Bad_Opcode },
85f10a01 7636 /* c0 */
592d1631
L
7637 { Bad_Opcode },
7638 { Bad_Opcode },
7639 { Bad_Opcode },
7640 { Bad_Opcode },
7641 { Bad_Opcode },
7642 { Bad_Opcode },
7643 { Bad_Opcode },
7644 { Bad_Opcode },
85f10a01 7645 /* c8 */
592d1631
L
7646 { Bad_Opcode },
7647 { Bad_Opcode },
7648 { Bad_Opcode },
7649 { Bad_Opcode },
7650 { Bad_Opcode },
7651 { Bad_Opcode },
7652 { Bad_Opcode },
7653 { Bad_Opcode },
85f10a01 7654 /* d0 */
592d1631
L
7655 { Bad_Opcode },
7656 { Bad_Opcode },
7657 { Bad_Opcode },
7658 { Bad_Opcode },
7659 { Bad_Opcode },
7660 { Bad_Opcode },
7661 { Bad_Opcode },
7662 { Bad_Opcode },
85f10a01 7663 /* d8 */
592d1631
L
7664 { Bad_Opcode },
7665 { Bad_Opcode },
7666 { Bad_Opcode },
7667 { Bad_Opcode },
7668 { Bad_Opcode },
7669 { Bad_Opcode },
7670 { Bad_Opcode },
7671 { Bad_Opcode },
85f10a01 7672 /* e0 */
592d1631
L
7673 { Bad_Opcode },
7674 { Bad_Opcode },
7675 { Bad_Opcode },
7676 { Bad_Opcode },
7677 { Bad_Opcode },
7678 { Bad_Opcode },
7679 { Bad_Opcode },
7680 { Bad_Opcode },
85f10a01 7681 /* e8 */
592d1631
L
7682 { Bad_Opcode },
7683 { Bad_Opcode },
7684 { Bad_Opcode },
7685 { Bad_Opcode },
7686 { Bad_Opcode },
7687 { Bad_Opcode },
7688 { Bad_Opcode },
7689 { Bad_Opcode },
85f10a01 7690 /* f0 */
592d1631
L
7691 { Bad_Opcode },
7692 { Bad_Opcode },
7693 { Bad_Opcode },
7694 { Bad_Opcode },
7695 { Bad_Opcode },
7696 { Bad_Opcode },
7697 { Bad_Opcode },
7698 { Bad_Opcode },
85f10a01 7699 /* f8 */
592d1631
L
7700 { Bad_Opcode },
7701 { Bad_Opcode },
7702 { Bad_Opcode },
7703 { Bad_Opcode },
7704 { Bad_Opcode },
7705 { Bad_Opcode },
7706 { Bad_Opcode },
7707 { Bad_Opcode },
85f10a01 7708 },
f88c9eb0
SP
7709};
7710
7711static const struct dis386 xop_table[][256] = {
5dd85c99 7712 /* XOP_08 */
85f10a01
MM
7713 {
7714 /* 00 */
592d1631
L
7715 { Bad_Opcode },
7716 { Bad_Opcode },
7717 { Bad_Opcode },
7718 { Bad_Opcode },
7719 { Bad_Opcode },
7720 { Bad_Opcode },
7721 { Bad_Opcode },
7722 { Bad_Opcode },
85f10a01 7723 /* 08 */
592d1631
L
7724 { Bad_Opcode },
7725 { Bad_Opcode },
7726 { Bad_Opcode },
7727 { Bad_Opcode },
7728 { Bad_Opcode },
7729 { Bad_Opcode },
7730 { Bad_Opcode },
7731 { Bad_Opcode },
85f10a01 7732 /* 10 */
3929df09 7733 { Bad_Opcode },
592d1631
L
7734 { Bad_Opcode },
7735 { Bad_Opcode },
7736 { Bad_Opcode },
7737 { Bad_Opcode },
7738 { Bad_Opcode },
7739 { Bad_Opcode },
7740 { Bad_Opcode },
85f10a01 7741 /* 18 */
592d1631
L
7742 { Bad_Opcode },
7743 { Bad_Opcode },
7744 { Bad_Opcode },
7745 { Bad_Opcode },
7746 { Bad_Opcode },
7747 { Bad_Opcode },
7748 { Bad_Opcode },
7749 { Bad_Opcode },
85f10a01 7750 /* 20 */
592d1631
L
7751 { Bad_Opcode },
7752 { Bad_Opcode },
7753 { Bad_Opcode },
7754 { Bad_Opcode },
7755 { Bad_Opcode },
7756 { Bad_Opcode },
7757 { Bad_Opcode },
7758 { Bad_Opcode },
85f10a01 7759 /* 28 */
592d1631
L
7760 { Bad_Opcode },
7761 { Bad_Opcode },
7762 { Bad_Opcode },
7763 { Bad_Opcode },
7764 { Bad_Opcode },
7765 { Bad_Opcode },
7766 { Bad_Opcode },
7767 { Bad_Opcode },
c0f3af97 7768 /* 30 */
592d1631
L
7769 { Bad_Opcode },
7770 { Bad_Opcode },
7771 { Bad_Opcode },
7772 { Bad_Opcode },
7773 { Bad_Opcode },
7774 { Bad_Opcode },
7775 { Bad_Opcode },
7776 { Bad_Opcode },
c0f3af97 7777 /* 38 */
592d1631
L
7778 { Bad_Opcode },
7779 { Bad_Opcode },
7780 { Bad_Opcode },
7781 { Bad_Opcode },
7782 { Bad_Opcode },
7783 { Bad_Opcode },
7784 { Bad_Opcode },
7785 { Bad_Opcode },
c0f3af97 7786 /* 40 */
592d1631
L
7787 { Bad_Opcode },
7788 { Bad_Opcode },
7789 { Bad_Opcode },
7790 { Bad_Opcode },
7791 { Bad_Opcode },
7792 { Bad_Opcode },
7793 { Bad_Opcode },
7794 { Bad_Opcode },
85f10a01 7795 /* 48 */
592d1631
L
7796 { Bad_Opcode },
7797 { Bad_Opcode },
7798 { Bad_Opcode },
7799 { Bad_Opcode },
7800 { Bad_Opcode },
7801 { Bad_Opcode },
7802 { Bad_Opcode },
7803 { Bad_Opcode },
c0f3af97 7804 /* 50 */
592d1631
L
7805 { Bad_Opcode },
7806 { Bad_Opcode },
7807 { Bad_Opcode },
7808 { Bad_Opcode },
7809 { Bad_Opcode },
7810 { Bad_Opcode },
7811 { Bad_Opcode },
7812 { Bad_Opcode },
85f10a01 7813 /* 58 */
592d1631
L
7814 { Bad_Opcode },
7815 { Bad_Opcode },
7816 { Bad_Opcode },
7817 { Bad_Opcode },
7818 { Bad_Opcode },
7819 { Bad_Opcode },
7820 { Bad_Opcode },
7821 { Bad_Opcode },
c1e679ec 7822 /* 60 */
592d1631
L
7823 { Bad_Opcode },
7824 { Bad_Opcode },
7825 { Bad_Opcode },
7826 { Bad_Opcode },
7827 { Bad_Opcode },
7828 { Bad_Opcode },
7829 { Bad_Opcode },
7830 { Bad_Opcode },
c0f3af97 7831 /* 68 */
592d1631
L
7832 { Bad_Opcode },
7833 { Bad_Opcode },
7834 { Bad_Opcode },
7835 { Bad_Opcode },
7836 { Bad_Opcode },
7837 { Bad_Opcode },
7838 { Bad_Opcode },
7839 { Bad_Opcode },
85f10a01 7840 /* 70 */
592d1631
L
7841 { Bad_Opcode },
7842 { Bad_Opcode },
7843 { Bad_Opcode },
7844 { Bad_Opcode },
7845 { Bad_Opcode },
7846 { Bad_Opcode },
7847 { Bad_Opcode },
7848 { Bad_Opcode },
85f10a01 7849 /* 78 */
592d1631
L
7850 { Bad_Opcode },
7851 { Bad_Opcode },
7852 { Bad_Opcode },
7853 { Bad_Opcode },
7854 { Bad_Opcode },
7855 { Bad_Opcode },
7856 { Bad_Opcode },
7857 { Bad_Opcode },
85f10a01 7858 /* 80 */
592d1631
L
7859 { Bad_Opcode },
7860 { Bad_Opcode },
7861 { Bad_Opcode },
7862 { Bad_Opcode },
7863 { Bad_Opcode },
5dd85c99
SP
7864 { "vpmacssww", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
7865 { "vpmacsswd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
7866 { "vpmacssdql", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
7867 /* 88 */
592d1631
L
7868 { Bad_Opcode },
7869 { Bad_Opcode },
7870 { Bad_Opcode },
7871 { Bad_Opcode },
7872 { Bad_Opcode },
7873 { Bad_Opcode },
5dd85c99
SP
7874 { "vpmacssdd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
7875 { "vpmacssdqh", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
7876 /* 90 */
592d1631
L
7877 { Bad_Opcode },
7878 { Bad_Opcode },
7879 { Bad_Opcode },
7880 { Bad_Opcode },
7881 { Bad_Opcode },
5dd85c99
SP
7882 { "vpmacsww", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
7883 { "vpmacswd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
7884 { "vpmacsdql", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
7885 /* 98 */
592d1631
L
7886 { Bad_Opcode },
7887 { Bad_Opcode },
7888 { Bad_Opcode },
7889 { Bad_Opcode },
7890 { Bad_Opcode },
7891 { Bad_Opcode },
5dd85c99
SP
7892 { "vpmacsdd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
7893 { "vpmacsdqh", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
7894 /* a0 */
592d1631
L
7895 { Bad_Opcode },
7896 { Bad_Opcode },
5dd85c99
SP
7897 { "vpcmov", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
7898 { "vpperm", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
592d1631
L
7899 { Bad_Opcode },
7900 { Bad_Opcode },
5dd85c99 7901 { "vpmadcsswd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
592d1631 7902 { Bad_Opcode },
5dd85c99 7903 /* a8 */
592d1631
L
7904 { Bad_Opcode },
7905 { Bad_Opcode },
7906 { Bad_Opcode },
7907 { Bad_Opcode },
7908 { Bad_Opcode },
7909 { Bad_Opcode },
7910 { Bad_Opcode },
7911 { Bad_Opcode },
5dd85c99 7912 /* b0 */
592d1631
L
7913 { Bad_Opcode },
7914 { Bad_Opcode },
7915 { Bad_Opcode },
7916 { Bad_Opcode },
7917 { Bad_Opcode },
7918 { Bad_Opcode },
5dd85c99 7919 { "vpmadcswd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
592d1631 7920 { Bad_Opcode },
5dd85c99 7921 /* b8 */
592d1631
L
7922 { Bad_Opcode },
7923 { Bad_Opcode },
7924 { Bad_Opcode },
7925 { Bad_Opcode },
7926 { Bad_Opcode },
7927 { Bad_Opcode },
7928 { Bad_Opcode },
7929 { Bad_Opcode },
5dd85c99
SP
7930 /* c0 */
7931 { "vprotb", { XM, Vex_2src_1, Ib } },
7932 { "vprotw", { XM, Vex_2src_1, Ib } },
7933 { "vprotd", { XM, Vex_2src_1, Ib } },
7934 { "vprotq", { XM, Vex_2src_1, Ib } },
592d1631
L
7935 { Bad_Opcode },
7936 { Bad_Opcode },
7937 { Bad_Opcode },
7938 { Bad_Opcode },
5dd85c99 7939 /* c8 */
592d1631
L
7940 { Bad_Opcode },
7941 { Bad_Opcode },
7942 { Bad_Opcode },
7943 { Bad_Opcode },
ff688e1f
L
7944 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_CC) },
7945 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_CD) },
7946 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_CE) },
7947 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_CF) },
5dd85c99 7948 /* d0 */
592d1631
L
7949 { Bad_Opcode },
7950 { Bad_Opcode },
7951 { Bad_Opcode },
7952 { Bad_Opcode },
7953 { Bad_Opcode },
7954 { Bad_Opcode },
7955 { Bad_Opcode },
7956 { Bad_Opcode },
5dd85c99 7957 /* d8 */
592d1631
L
7958 { Bad_Opcode },
7959 { Bad_Opcode },
7960 { Bad_Opcode },
7961 { Bad_Opcode },
7962 { Bad_Opcode },
7963 { Bad_Opcode },
7964 { Bad_Opcode },
7965 { Bad_Opcode },
5dd85c99 7966 /* e0 */
592d1631
L
7967 { Bad_Opcode },
7968 { Bad_Opcode },
7969 { Bad_Opcode },
7970 { Bad_Opcode },
7971 { Bad_Opcode },
7972 { Bad_Opcode },
7973 { Bad_Opcode },
7974 { Bad_Opcode },
5dd85c99 7975 /* e8 */
592d1631
L
7976 { Bad_Opcode },
7977 { Bad_Opcode },
7978 { Bad_Opcode },
7979 { Bad_Opcode },
ff688e1f
L
7980 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_EC) },
7981 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_ED) },
7982 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_EE) },
7983 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_EF) },
5dd85c99 7984 /* f0 */
592d1631
L
7985 { Bad_Opcode },
7986 { Bad_Opcode },
7987 { Bad_Opcode },
7988 { Bad_Opcode },
7989 { Bad_Opcode },
7990 { Bad_Opcode },
7991 { Bad_Opcode },
7992 { Bad_Opcode },
5dd85c99 7993 /* f8 */
592d1631
L
7994 { Bad_Opcode },
7995 { Bad_Opcode },
7996 { Bad_Opcode },
7997 { Bad_Opcode },
7998 { Bad_Opcode },
7999 { Bad_Opcode },
8000 { Bad_Opcode },
8001 { Bad_Opcode },
5dd85c99
SP
8002 },
8003 /* XOP_09 */
8004 {
8005 /* 00 */
592d1631 8006 { Bad_Opcode },
2a2a0f38
QN
8007 { REG_TABLE (REG_XOP_TBM_01) },
8008 { REG_TABLE (REG_XOP_TBM_02) },
592d1631
L
8009 { Bad_Opcode },
8010 { Bad_Opcode },
8011 { Bad_Opcode },
8012 { Bad_Opcode },
8013 { Bad_Opcode },
5dd85c99 8014 /* 08 */
592d1631
L
8015 { Bad_Opcode },
8016 { Bad_Opcode },
8017 { Bad_Opcode },
8018 { Bad_Opcode },
8019 { Bad_Opcode },
8020 { Bad_Opcode },
8021 { Bad_Opcode },
8022 { Bad_Opcode },
5dd85c99 8023 /* 10 */
592d1631
L
8024 { Bad_Opcode },
8025 { Bad_Opcode },
5dd85c99 8026 { REG_TABLE (REG_XOP_LWPCB) },
592d1631
L
8027 { Bad_Opcode },
8028 { Bad_Opcode },
8029 { Bad_Opcode },
8030 { Bad_Opcode },
8031 { Bad_Opcode },
5dd85c99 8032 /* 18 */
592d1631
L
8033 { Bad_Opcode },
8034 { Bad_Opcode },
8035 { Bad_Opcode },
8036 { Bad_Opcode },
8037 { Bad_Opcode },
8038 { Bad_Opcode },
8039 { Bad_Opcode },
8040 { Bad_Opcode },
5dd85c99 8041 /* 20 */
592d1631
L
8042 { Bad_Opcode },
8043 { Bad_Opcode },
8044 { Bad_Opcode },
8045 { Bad_Opcode },
8046 { Bad_Opcode },
8047 { Bad_Opcode },
8048 { Bad_Opcode },
8049 { Bad_Opcode },
5dd85c99 8050 /* 28 */
592d1631
L
8051 { Bad_Opcode },
8052 { Bad_Opcode },
8053 { Bad_Opcode },
8054 { Bad_Opcode },
8055 { Bad_Opcode },
8056 { Bad_Opcode },
8057 { Bad_Opcode },
8058 { Bad_Opcode },
5dd85c99 8059 /* 30 */
592d1631
L
8060 { Bad_Opcode },
8061 { Bad_Opcode },
8062 { Bad_Opcode },
8063 { Bad_Opcode },
8064 { Bad_Opcode },
8065 { Bad_Opcode },
8066 { Bad_Opcode },
8067 { Bad_Opcode },
5dd85c99 8068 /* 38 */
592d1631
L
8069 { Bad_Opcode },
8070 { Bad_Opcode },
8071 { Bad_Opcode },
8072 { Bad_Opcode },
8073 { Bad_Opcode },
8074 { Bad_Opcode },
8075 { Bad_Opcode },
8076 { Bad_Opcode },
5dd85c99 8077 /* 40 */
592d1631
L
8078 { Bad_Opcode },
8079 { Bad_Opcode },
8080 { Bad_Opcode },
8081 { Bad_Opcode },
8082 { Bad_Opcode },
8083 { Bad_Opcode },
8084 { Bad_Opcode },
8085 { Bad_Opcode },
5dd85c99 8086 /* 48 */
592d1631
L
8087 { Bad_Opcode },
8088 { Bad_Opcode },
8089 { Bad_Opcode },
8090 { Bad_Opcode },
8091 { Bad_Opcode },
8092 { Bad_Opcode },
8093 { Bad_Opcode },
8094 { Bad_Opcode },
5dd85c99 8095 /* 50 */
592d1631
L
8096 { Bad_Opcode },
8097 { Bad_Opcode },
8098 { Bad_Opcode },
8099 { Bad_Opcode },
8100 { Bad_Opcode },
8101 { Bad_Opcode },
8102 { Bad_Opcode },
8103 { Bad_Opcode },
5dd85c99 8104 /* 58 */
592d1631
L
8105 { Bad_Opcode },
8106 { Bad_Opcode },
8107 { Bad_Opcode },
8108 { Bad_Opcode },
8109 { Bad_Opcode },
8110 { Bad_Opcode },
8111 { Bad_Opcode },
8112 { Bad_Opcode },
5dd85c99 8113 /* 60 */
592d1631
L
8114 { Bad_Opcode },
8115 { Bad_Opcode },
8116 { Bad_Opcode },
8117 { Bad_Opcode },
8118 { Bad_Opcode },
8119 { Bad_Opcode },
8120 { Bad_Opcode },
8121 { Bad_Opcode },
5dd85c99 8122 /* 68 */
592d1631
L
8123 { Bad_Opcode },
8124 { Bad_Opcode },
8125 { Bad_Opcode },
8126 { Bad_Opcode },
8127 { Bad_Opcode },
8128 { Bad_Opcode },
8129 { Bad_Opcode },
8130 { Bad_Opcode },
5dd85c99 8131 /* 70 */
592d1631
L
8132 { Bad_Opcode },
8133 { Bad_Opcode },
8134 { Bad_Opcode },
8135 { Bad_Opcode },
8136 { Bad_Opcode },
8137 { Bad_Opcode },
8138 { Bad_Opcode },
8139 { Bad_Opcode },
5dd85c99 8140 /* 78 */
592d1631
L
8141 { Bad_Opcode },
8142 { Bad_Opcode },
8143 { Bad_Opcode },
8144 { Bad_Opcode },
8145 { Bad_Opcode },
8146 { Bad_Opcode },
8147 { Bad_Opcode },
8148 { Bad_Opcode },
5dd85c99 8149 /* 80 */
592a252b
L
8150 { VEX_LEN_TABLE (VEX_LEN_0FXOP_09_80) },
8151 { VEX_LEN_TABLE (VEX_LEN_0FXOP_09_81) },
5dd85c99
SP
8152 { "vfrczss", { XM, EXd } },
8153 { "vfrczsd", { XM, EXq } },
592d1631
L
8154 { Bad_Opcode },
8155 { Bad_Opcode },
8156 { Bad_Opcode },
8157 { Bad_Opcode },
5dd85c99 8158 /* 88 */
592d1631
L
8159 { Bad_Opcode },
8160 { Bad_Opcode },
8161 { Bad_Opcode },
8162 { Bad_Opcode },
8163 { Bad_Opcode },
8164 { Bad_Opcode },
8165 { Bad_Opcode },
8166 { Bad_Opcode },
5dd85c99
SP
8167 /* 90 */
8168 { "vprotb", { XM, Vex_2src_1, Vex_2src_2 } },
8169 { "vprotw", { XM, Vex_2src_1, Vex_2src_2 } },
8170 { "vprotd", { XM, Vex_2src_1, Vex_2src_2 } },
8171 { "vprotq", { XM, Vex_2src_1, Vex_2src_2 } },
8172 { "vpshlb", { XM, Vex_2src_1, Vex_2src_2 } },
8173 { "vpshlw", { XM, Vex_2src_1, Vex_2src_2 } },
8174 { "vpshld", { XM, Vex_2src_1, Vex_2src_2 } },
8175 { "vpshlq", { XM, Vex_2src_1, Vex_2src_2 } },
8176 /* 98 */
8177 { "vpshab", { XM, Vex_2src_1, Vex_2src_2 } },
8178 { "vpshaw", { XM, Vex_2src_1, Vex_2src_2 } },
8179 { "vpshad", { XM, Vex_2src_1, Vex_2src_2 } },
8180 { "vpshaq", { XM, Vex_2src_1, Vex_2src_2 } },
592d1631
L
8181 { Bad_Opcode },
8182 { Bad_Opcode },
8183 { Bad_Opcode },
8184 { Bad_Opcode },
5dd85c99 8185 /* a0 */
592d1631
L
8186 { Bad_Opcode },
8187 { Bad_Opcode },
8188 { Bad_Opcode },
8189 { Bad_Opcode },
8190 { Bad_Opcode },
8191 { Bad_Opcode },
8192 { Bad_Opcode },
8193 { Bad_Opcode },
5dd85c99 8194 /* a8 */
592d1631
L
8195 { Bad_Opcode },
8196 { Bad_Opcode },
8197 { Bad_Opcode },
8198 { Bad_Opcode },
8199 { Bad_Opcode },
8200 { Bad_Opcode },
8201 { Bad_Opcode },
8202 { Bad_Opcode },
5dd85c99 8203 /* b0 */
592d1631
L
8204 { Bad_Opcode },
8205 { Bad_Opcode },
8206 { Bad_Opcode },
8207 { Bad_Opcode },
8208 { Bad_Opcode },
8209 { Bad_Opcode },
8210 { Bad_Opcode },
8211 { Bad_Opcode },
5dd85c99 8212 /* b8 */
592d1631
L
8213 { Bad_Opcode },
8214 { Bad_Opcode },
8215 { Bad_Opcode },
8216 { Bad_Opcode },
8217 { Bad_Opcode },
8218 { Bad_Opcode },
8219 { Bad_Opcode },
8220 { Bad_Opcode },
5dd85c99 8221 /* c0 */
592d1631 8222 { Bad_Opcode },
5dd85c99
SP
8223 { "vphaddbw", { XM, EXxmm } },
8224 { "vphaddbd", { XM, EXxmm } },
8225 { "vphaddbq", { XM, EXxmm } },
592d1631
L
8226 { Bad_Opcode },
8227 { Bad_Opcode },
5dd85c99
SP
8228 { "vphaddwd", { XM, EXxmm } },
8229 { "vphaddwq", { XM, EXxmm } },
8230 /* c8 */
592d1631
L
8231 { Bad_Opcode },
8232 { Bad_Opcode },
8233 { Bad_Opcode },
5dd85c99 8234 { "vphadddq", { XM, EXxmm } },
592d1631
L
8235 { Bad_Opcode },
8236 { Bad_Opcode },
8237 { Bad_Opcode },
8238 { Bad_Opcode },
5dd85c99 8239 /* d0 */
592d1631 8240 { Bad_Opcode },
5dd85c99
SP
8241 { "vphaddubw", { XM, EXxmm } },
8242 { "vphaddubd", { XM, EXxmm } },
8243 { "vphaddubq", { XM, EXxmm } },
592d1631
L
8244 { Bad_Opcode },
8245 { Bad_Opcode },
5dd85c99
SP
8246 { "vphadduwd", { XM, EXxmm } },
8247 { "vphadduwq", { XM, EXxmm } },
8248 /* d8 */
592d1631
L
8249 { Bad_Opcode },
8250 { Bad_Opcode },
8251 { Bad_Opcode },
5dd85c99 8252 { "vphaddudq", { XM, EXxmm } },
592d1631
L
8253 { Bad_Opcode },
8254 { Bad_Opcode },
8255 { Bad_Opcode },
8256 { Bad_Opcode },
5dd85c99 8257 /* e0 */
592d1631 8258 { Bad_Opcode },
5dd85c99
SP
8259 { "vphsubbw", { XM, EXxmm } },
8260 { "vphsubwd", { XM, EXxmm } },
8261 { "vphsubdq", { XM, EXxmm } },
592d1631
L
8262 { Bad_Opcode },
8263 { Bad_Opcode },
8264 { Bad_Opcode },
8265 { Bad_Opcode },
4e7d34a6 8266 /* e8 */
592d1631
L
8267 { Bad_Opcode },
8268 { Bad_Opcode },
8269 { Bad_Opcode },
8270 { Bad_Opcode },
8271 { Bad_Opcode },
8272 { Bad_Opcode },
8273 { Bad_Opcode },
8274 { Bad_Opcode },
4e7d34a6 8275 /* f0 */
592d1631
L
8276 { Bad_Opcode },
8277 { Bad_Opcode },
8278 { Bad_Opcode },
8279 { Bad_Opcode },
8280 { Bad_Opcode },
8281 { Bad_Opcode },
8282 { Bad_Opcode },
8283 { Bad_Opcode },
4e7d34a6 8284 /* f8 */
592d1631
L
8285 { Bad_Opcode },
8286 { Bad_Opcode },
8287 { Bad_Opcode },
8288 { Bad_Opcode },
8289 { Bad_Opcode },
8290 { Bad_Opcode },
8291 { Bad_Opcode },
8292 { Bad_Opcode },
4e7d34a6 8293 },
f88c9eb0 8294 /* XOP_0A */
4e7d34a6
L
8295 {
8296 /* 00 */
592d1631
L
8297 { Bad_Opcode },
8298 { Bad_Opcode },
8299 { Bad_Opcode },
8300 { Bad_Opcode },
8301 { Bad_Opcode },
8302 { Bad_Opcode },
8303 { Bad_Opcode },
8304 { Bad_Opcode },
4e7d34a6 8305 /* 08 */
592d1631
L
8306 { Bad_Opcode },
8307 { Bad_Opcode },
8308 { Bad_Opcode },
8309 { Bad_Opcode },
8310 { Bad_Opcode },
8311 { Bad_Opcode },
8312 { Bad_Opcode },
8313 { Bad_Opcode },
4e7d34a6 8314 /* 10 */
2a2a0f38 8315 { "bextr", { Gv, Ev, Iq } },
592d1631 8316 { Bad_Opcode },
f88c9eb0 8317 { REG_TABLE (REG_XOP_LWP) },
592d1631
L
8318 { Bad_Opcode },
8319 { Bad_Opcode },
8320 { Bad_Opcode },
8321 { Bad_Opcode },
8322 { Bad_Opcode },
4e7d34a6 8323 /* 18 */
592d1631
L
8324 { Bad_Opcode },
8325 { Bad_Opcode },
8326 { Bad_Opcode },
8327 { Bad_Opcode },
8328 { Bad_Opcode },
8329 { Bad_Opcode },
8330 { Bad_Opcode },
8331 { Bad_Opcode },
4e7d34a6 8332 /* 20 */
592d1631
L
8333 { Bad_Opcode },
8334 { Bad_Opcode },
8335 { Bad_Opcode },
8336 { Bad_Opcode },
8337 { Bad_Opcode },
8338 { Bad_Opcode },
8339 { Bad_Opcode },
8340 { Bad_Opcode },
4e7d34a6 8341 /* 28 */
592d1631
L
8342 { Bad_Opcode },
8343 { Bad_Opcode },
8344 { Bad_Opcode },
8345 { Bad_Opcode },
8346 { Bad_Opcode },
8347 { Bad_Opcode },
8348 { Bad_Opcode },
8349 { Bad_Opcode },
4e7d34a6 8350 /* 30 */
592d1631
L
8351 { Bad_Opcode },
8352 { Bad_Opcode },
8353 { Bad_Opcode },
8354 { Bad_Opcode },
8355 { Bad_Opcode },
8356 { Bad_Opcode },
8357 { Bad_Opcode },
8358 { Bad_Opcode },
c0f3af97 8359 /* 38 */
592d1631
L
8360 { Bad_Opcode },
8361 { Bad_Opcode },
8362 { Bad_Opcode },
8363 { Bad_Opcode },
8364 { Bad_Opcode },
8365 { Bad_Opcode },
8366 { Bad_Opcode },
8367 { Bad_Opcode },
c0f3af97 8368 /* 40 */
592d1631
L
8369 { Bad_Opcode },
8370 { Bad_Opcode },
8371 { Bad_Opcode },
8372 { Bad_Opcode },
8373 { Bad_Opcode },
8374 { Bad_Opcode },
8375 { Bad_Opcode },
8376 { Bad_Opcode },
c1e679ec 8377 /* 48 */
592d1631
L
8378 { Bad_Opcode },
8379 { Bad_Opcode },
8380 { Bad_Opcode },
8381 { Bad_Opcode },
8382 { Bad_Opcode },
8383 { Bad_Opcode },
8384 { Bad_Opcode },
8385 { Bad_Opcode },
c1e679ec 8386 /* 50 */
592d1631
L
8387 { Bad_Opcode },
8388 { Bad_Opcode },
8389 { Bad_Opcode },
8390 { Bad_Opcode },
8391 { Bad_Opcode },
8392 { Bad_Opcode },
8393 { Bad_Opcode },
8394 { Bad_Opcode },
4e7d34a6 8395 /* 58 */
592d1631
L
8396 { Bad_Opcode },
8397 { Bad_Opcode },
8398 { Bad_Opcode },
8399 { Bad_Opcode },
8400 { Bad_Opcode },
8401 { Bad_Opcode },
8402 { Bad_Opcode },
8403 { Bad_Opcode },
4e7d34a6 8404 /* 60 */
592d1631
L
8405 { Bad_Opcode },
8406 { Bad_Opcode },
8407 { Bad_Opcode },
8408 { Bad_Opcode },
8409 { Bad_Opcode },
8410 { Bad_Opcode },
8411 { Bad_Opcode },
8412 { Bad_Opcode },
4e7d34a6 8413 /* 68 */
592d1631
L
8414 { Bad_Opcode },
8415 { Bad_Opcode },
8416 { Bad_Opcode },
8417 { Bad_Opcode },
8418 { Bad_Opcode },
8419 { Bad_Opcode },
8420 { Bad_Opcode },
8421 { Bad_Opcode },
4e7d34a6 8422 /* 70 */
592d1631
L
8423 { Bad_Opcode },
8424 { Bad_Opcode },
8425 { Bad_Opcode },
8426 { Bad_Opcode },
8427 { Bad_Opcode },
8428 { Bad_Opcode },
8429 { Bad_Opcode },
8430 { Bad_Opcode },
4e7d34a6 8431 /* 78 */
592d1631
L
8432 { Bad_Opcode },
8433 { Bad_Opcode },
8434 { Bad_Opcode },
8435 { Bad_Opcode },
8436 { Bad_Opcode },
8437 { Bad_Opcode },
8438 { Bad_Opcode },
8439 { Bad_Opcode },
4e7d34a6 8440 /* 80 */
592d1631
L
8441 { Bad_Opcode },
8442 { Bad_Opcode },
8443 { Bad_Opcode },
8444 { Bad_Opcode },
8445 { Bad_Opcode },
8446 { Bad_Opcode },
8447 { Bad_Opcode },
8448 { Bad_Opcode },
4e7d34a6 8449 /* 88 */
592d1631
L
8450 { Bad_Opcode },
8451 { Bad_Opcode },
8452 { Bad_Opcode },
8453 { Bad_Opcode },
8454 { Bad_Opcode },
8455 { Bad_Opcode },
8456 { Bad_Opcode },
8457 { Bad_Opcode },
4e7d34a6 8458 /* 90 */
592d1631
L
8459 { Bad_Opcode },
8460 { Bad_Opcode },
8461 { Bad_Opcode },
8462 { Bad_Opcode },
8463 { Bad_Opcode },
8464 { Bad_Opcode },
8465 { Bad_Opcode },
8466 { Bad_Opcode },
4e7d34a6 8467 /* 98 */
592d1631
L
8468 { Bad_Opcode },
8469 { Bad_Opcode },
8470 { Bad_Opcode },
8471 { Bad_Opcode },
8472 { Bad_Opcode },
8473 { Bad_Opcode },
8474 { Bad_Opcode },
8475 { Bad_Opcode },
4e7d34a6 8476 /* a0 */
592d1631
L
8477 { Bad_Opcode },
8478 { Bad_Opcode },
8479 { Bad_Opcode },
8480 { Bad_Opcode },
8481 { Bad_Opcode },
8482 { Bad_Opcode },
8483 { Bad_Opcode },
8484 { Bad_Opcode },
4e7d34a6 8485 /* a8 */
592d1631
L
8486 { Bad_Opcode },
8487 { Bad_Opcode },
8488 { Bad_Opcode },
8489 { Bad_Opcode },
8490 { Bad_Opcode },
8491 { Bad_Opcode },
8492 { Bad_Opcode },
8493 { Bad_Opcode },
d5d7db8e 8494 /* b0 */
592d1631
L
8495 { Bad_Opcode },
8496 { Bad_Opcode },
8497 { Bad_Opcode },
8498 { Bad_Opcode },
8499 { Bad_Opcode },
8500 { Bad_Opcode },
8501 { Bad_Opcode },
8502 { Bad_Opcode },
85f10a01 8503 /* b8 */
592d1631
L
8504 { Bad_Opcode },
8505 { Bad_Opcode },
8506 { Bad_Opcode },
8507 { Bad_Opcode },
8508 { Bad_Opcode },
8509 { Bad_Opcode },
8510 { Bad_Opcode },
8511 { Bad_Opcode },
85f10a01 8512 /* c0 */
592d1631
L
8513 { Bad_Opcode },
8514 { Bad_Opcode },
8515 { Bad_Opcode },
8516 { Bad_Opcode },
8517 { Bad_Opcode },
8518 { Bad_Opcode },
8519 { Bad_Opcode },
8520 { Bad_Opcode },
85f10a01 8521 /* c8 */
592d1631
L
8522 { Bad_Opcode },
8523 { Bad_Opcode },
8524 { Bad_Opcode },
8525 { Bad_Opcode },
8526 { Bad_Opcode },
8527 { Bad_Opcode },
8528 { Bad_Opcode },
8529 { Bad_Opcode },
85f10a01 8530 /* d0 */
592d1631
L
8531 { Bad_Opcode },
8532 { Bad_Opcode },
8533 { Bad_Opcode },
8534 { Bad_Opcode },
8535 { Bad_Opcode },
8536 { Bad_Opcode },
8537 { Bad_Opcode },
8538 { Bad_Opcode },
85f10a01 8539 /* d8 */
592d1631
L
8540 { Bad_Opcode },
8541 { Bad_Opcode },
8542 { Bad_Opcode },
8543 { Bad_Opcode },
8544 { Bad_Opcode },
8545 { Bad_Opcode },
8546 { Bad_Opcode },
8547 { Bad_Opcode },
85f10a01 8548 /* e0 */
592d1631
L
8549 { Bad_Opcode },
8550 { Bad_Opcode },
8551 { Bad_Opcode },
8552 { Bad_Opcode },
8553 { Bad_Opcode },
8554 { Bad_Opcode },
8555 { Bad_Opcode },
8556 { Bad_Opcode },
85f10a01 8557 /* e8 */
592d1631
L
8558 { Bad_Opcode },
8559 { Bad_Opcode },
8560 { Bad_Opcode },
8561 { Bad_Opcode },
8562 { Bad_Opcode },
8563 { Bad_Opcode },
8564 { Bad_Opcode },
8565 { Bad_Opcode },
85f10a01 8566 /* f0 */
592d1631
L
8567 { Bad_Opcode },
8568 { Bad_Opcode },
8569 { Bad_Opcode },
8570 { Bad_Opcode },
8571 { Bad_Opcode },
8572 { Bad_Opcode },
8573 { Bad_Opcode },
8574 { Bad_Opcode },
85f10a01 8575 /* f8 */
592d1631
L
8576 { Bad_Opcode },
8577 { Bad_Opcode },
8578 { Bad_Opcode },
8579 { Bad_Opcode },
8580 { Bad_Opcode },
8581 { Bad_Opcode },
8582 { Bad_Opcode },
8583 { Bad_Opcode },
85f10a01 8584 },
c0f3af97
L
8585};
8586
8587static const struct dis386 vex_table[][256] = {
8588 /* VEX_0F */
85f10a01
MM
8589 {
8590 /* 00 */
592d1631
L
8591 { Bad_Opcode },
8592 { Bad_Opcode },
8593 { Bad_Opcode },
8594 { Bad_Opcode },
8595 { Bad_Opcode },
8596 { Bad_Opcode },
8597 { Bad_Opcode },
8598 { Bad_Opcode },
85f10a01 8599 /* 08 */
592d1631
L
8600 { Bad_Opcode },
8601 { Bad_Opcode },
8602 { Bad_Opcode },
8603 { Bad_Opcode },
8604 { Bad_Opcode },
8605 { Bad_Opcode },
8606 { Bad_Opcode },
8607 { Bad_Opcode },
c0f3af97 8608 /* 10 */
592a252b
L
8609 { PREFIX_TABLE (PREFIX_VEX_0F10) },
8610 { PREFIX_TABLE (PREFIX_VEX_0F11) },
8611 { PREFIX_TABLE (PREFIX_VEX_0F12) },
8612 { MOD_TABLE (MOD_VEX_0F13) },
8613 { VEX_W_TABLE (VEX_W_0F14) },
8614 { VEX_W_TABLE (VEX_W_0F15) },
8615 { PREFIX_TABLE (PREFIX_VEX_0F16) },
8616 { MOD_TABLE (MOD_VEX_0F17) },
c0f3af97 8617 /* 18 */
592d1631
L
8618 { Bad_Opcode },
8619 { Bad_Opcode },
8620 { Bad_Opcode },
8621 { Bad_Opcode },
8622 { Bad_Opcode },
8623 { Bad_Opcode },
8624 { Bad_Opcode },
8625 { Bad_Opcode },
c0f3af97 8626 /* 20 */
592d1631
L
8627 { Bad_Opcode },
8628 { Bad_Opcode },
8629 { Bad_Opcode },
8630 { Bad_Opcode },
8631 { Bad_Opcode },
8632 { Bad_Opcode },
8633 { Bad_Opcode },
8634 { Bad_Opcode },
c0f3af97 8635 /* 28 */
592a252b
L
8636 { VEX_W_TABLE (VEX_W_0F28) },
8637 { VEX_W_TABLE (VEX_W_0F29) },
8638 { PREFIX_TABLE (PREFIX_VEX_0F2A) },
8639 { MOD_TABLE (MOD_VEX_0F2B) },
8640 { PREFIX_TABLE (PREFIX_VEX_0F2C) },
8641 { PREFIX_TABLE (PREFIX_VEX_0F2D) },
8642 { PREFIX_TABLE (PREFIX_VEX_0F2E) },
8643 { PREFIX_TABLE (PREFIX_VEX_0F2F) },
85f10a01 8644 /* 30 */
592d1631
L
8645 { Bad_Opcode },
8646 { Bad_Opcode },
8647 { Bad_Opcode },
8648 { Bad_Opcode },
8649 { Bad_Opcode },
8650 { Bad_Opcode },
8651 { Bad_Opcode },
8652 { Bad_Opcode },
4e7d34a6 8653 /* 38 */
592d1631
L
8654 { Bad_Opcode },
8655 { Bad_Opcode },
8656 { Bad_Opcode },
8657 { Bad_Opcode },
8658 { Bad_Opcode },
8659 { Bad_Opcode },
8660 { Bad_Opcode },
8661 { Bad_Opcode },
d5d7db8e 8662 /* 40 */
592d1631 8663 { Bad_Opcode },
43234a1e
L
8664 { PREFIX_TABLE (PREFIX_VEX_0F41) },
8665 { PREFIX_TABLE (PREFIX_VEX_0F42) },
592d1631 8666 { Bad_Opcode },
43234a1e
L
8667 { PREFIX_TABLE (PREFIX_VEX_0F44) },
8668 { PREFIX_TABLE (PREFIX_VEX_0F45) },
8669 { PREFIX_TABLE (PREFIX_VEX_0F46) },
8670 { PREFIX_TABLE (PREFIX_VEX_0F47) },
85f10a01 8671 /* 48 */
592d1631
L
8672 { Bad_Opcode },
8673 { Bad_Opcode },
1ba585e8 8674 { PREFIX_TABLE (PREFIX_VEX_0F4A) },
43234a1e 8675 { PREFIX_TABLE (PREFIX_VEX_0F4B) },
592d1631
L
8676 { Bad_Opcode },
8677 { Bad_Opcode },
8678 { Bad_Opcode },
8679 { Bad_Opcode },
d5d7db8e 8680 /* 50 */
592a252b
L
8681 { MOD_TABLE (MOD_VEX_0F50) },
8682 { PREFIX_TABLE (PREFIX_VEX_0F51) },
8683 { PREFIX_TABLE (PREFIX_VEX_0F52) },
8684 { PREFIX_TABLE (PREFIX_VEX_0F53) },
c0f3af97
L
8685 { "vandpX", { XM, Vex, EXx } },
8686 { "vandnpX", { XM, Vex, EXx } },
8687 { "vorpX", { XM, Vex, EXx } },
8688 { "vxorpX", { XM, Vex, EXx } },
8689 /* 58 */
592a252b
L
8690 { PREFIX_TABLE (PREFIX_VEX_0F58) },
8691 { PREFIX_TABLE (PREFIX_VEX_0F59) },
8692 { PREFIX_TABLE (PREFIX_VEX_0F5A) },
8693 { PREFIX_TABLE (PREFIX_VEX_0F5B) },
8694 { PREFIX_TABLE (PREFIX_VEX_0F5C) },
8695 { PREFIX_TABLE (PREFIX_VEX_0F5D) },
8696 { PREFIX_TABLE (PREFIX_VEX_0F5E) },
8697 { PREFIX_TABLE (PREFIX_VEX_0F5F) },
c0f3af97 8698 /* 60 */
592a252b
L
8699 { PREFIX_TABLE (PREFIX_VEX_0F60) },
8700 { PREFIX_TABLE (PREFIX_VEX_0F61) },
8701 { PREFIX_TABLE (PREFIX_VEX_0F62) },
8702 { PREFIX_TABLE (PREFIX_VEX_0F63) },
8703 { PREFIX_TABLE (PREFIX_VEX_0F64) },
8704 { PREFIX_TABLE (PREFIX_VEX_0F65) },
8705 { PREFIX_TABLE (PREFIX_VEX_0F66) },
8706 { PREFIX_TABLE (PREFIX_VEX_0F67) },
c0f3af97 8707 /* 68 */
592a252b
L
8708 { PREFIX_TABLE (PREFIX_VEX_0F68) },
8709 { PREFIX_TABLE (PREFIX_VEX_0F69) },
8710 { PREFIX_TABLE (PREFIX_VEX_0F6A) },
8711 { PREFIX_TABLE (PREFIX_VEX_0F6B) },
8712 { PREFIX_TABLE (PREFIX_VEX_0F6C) },
8713 { PREFIX_TABLE (PREFIX_VEX_0F6D) },
8714 { PREFIX_TABLE (PREFIX_VEX_0F6E) },
8715 { PREFIX_TABLE (PREFIX_VEX_0F6F) },
c0f3af97 8716 /* 70 */
592a252b
L
8717 { PREFIX_TABLE (PREFIX_VEX_0F70) },
8718 { REG_TABLE (REG_VEX_0F71) },
8719 { REG_TABLE (REG_VEX_0F72) },
8720 { REG_TABLE (REG_VEX_0F73) },
8721 { PREFIX_TABLE (PREFIX_VEX_0F74) },
8722 { PREFIX_TABLE (PREFIX_VEX_0F75) },
8723 { PREFIX_TABLE (PREFIX_VEX_0F76) },
8724 { PREFIX_TABLE (PREFIX_VEX_0F77) },
c0f3af97 8725 /* 78 */
592d1631
L
8726 { Bad_Opcode },
8727 { Bad_Opcode },
8728 { Bad_Opcode },
8729 { Bad_Opcode },
592a252b
L
8730 { PREFIX_TABLE (PREFIX_VEX_0F7C) },
8731 { PREFIX_TABLE (PREFIX_VEX_0F7D) },
8732 { PREFIX_TABLE (PREFIX_VEX_0F7E) },
8733 { PREFIX_TABLE (PREFIX_VEX_0F7F) },
c0f3af97 8734 /* 80 */
592d1631
L
8735 { Bad_Opcode },
8736 { Bad_Opcode },
8737 { Bad_Opcode },
8738 { Bad_Opcode },
8739 { Bad_Opcode },
8740 { Bad_Opcode },
8741 { Bad_Opcode },
8742 { Bad_Opcode },
c0f3af97 8743 /* 88 */
592d1631
L
8744 { Bad_Opcode },
8745 { Bad_Opcode },
8746 { Bad_Opcode },
8747 { Bad_Opcode },
8748 { Bad_Opcode },
8749 { Bad_Opcode },
8750 { Bad_Opcode },
8751 { Bad_Opcode },
c0f3af97 8752 /* 90 */
43234a1e
L
8753 { PREFIX_TABLE (PREFIX_VEX_0F90) },
8754 { PREFIX_TABLE (PREFIX_VEX_0F91) },
8755 { PREFIX_TABLE (PREFIX_VEX_0F92) },
8756 { PREFIX_TABLE (PREFIX_VEX_0F93) },
592d1631
L
8757 { Bad_Opcode },
8758 { Bad_Opcode },
8759 { Bad_Opcode },
8760 { Bad_Opcode },
c0f3af97 8761 /* 98 */
43234a1e 8762 { PREFIX_TABLE (PREFIX_VEX_0F98) },
1ba585e8 8763 { PREFIX_TABLE (PREFIX_VEX_0F99) },
592d1631
L
8764 { Bad_Opcode },
8765 { Bad_Opcode },
8766 { Bad_Opcode },
8767 { Bad_Opcode },
8768 { Bad_Opcode },
8769 { Bad_Opcode },
c0f3af97 8770 /* a0 */
592d1631
L
8771 { Bad_Opcode },
8772 { Bad_Opcode },
8773 { Bad_Opcode },
8774 { Bad_Opcode },
8775 { Bad_Opcode },
8776 { Bad_Opcode },
8777 { Bad_Opcode },
8778 { Bad_Opcode },
c0f3af97 8779 /* a8 */
592d1631
L
8780 { Bad_Opcode },
8781 { Bad_Opcode },
8782 { Bad_Opcode },
8783 { Bad_Opcode },
8784 { Bad_Opcode },
8785 { Bad_Opcode },
592a252b 8786 { REG_TABLE (REG_VEX_0FAE) },
592d1631 8787 { Bad_Opcode },
c0f3af97 8788 /* b0 */
592d1631
L
8789 { Bad_Opcode },
8790 { Bad_Opcode },
8791 { Bad_Opcode },
8792 { Bad_Opcode },
8793 { Bad_Opcode },
8794 { Bad_Opcode },
8795 { Bad_Opcode },
8796 { Bad_Opcode },
c0f3af97 8797 /* b8 */
592d1631
L
8798 { Bad_Opcode },
8799 { Bad_Opcode },
8800 { Bad_Opcode },
8801 { Bad_Opcode },
8802 { Bad_Opcode },
8803 { Bad_Opcode },
8804 { Bad_Opcode },
8805 { Bad_Opcode },
c0f3af97 8806 /* c0 */
592d1631
L
8807 { Bad_Opcode },
8808 { Bad_Opcode },
592a252b 8809 { PREFIX_TABLE (PREFIX_VEX_0FC2) },
592d1631 8810 { Bad_Opcode },
592a252b
L
8811 { PREFIX_TABLE (PREFIX_VEX_0FC4) },
8812 { PREFIX_TABLE (PREFIX_VEX_0FC5) },
c0f3af97 8813 { "vshufpX", { XM, Vex, EXx, Ib } },
592d1631 8814 { Bad_Opcode },
c0f3af97 8815 /* c8 */
592d1631
L
8816 { Bad_Opcode },
8817 { Bad_Opcode },
8818 { Bad_Opcode },
8819 { Bad_Opcode },
8820 { Bad_Opcode },
8821 { Bad_Opcode },
8822 { Bad_Opcode },
8823 { Bad_Opcode },
c0f3af97 8824 /* d0 */
592a252b
L
8825 { PREFIX_TABLE (PREFIX_VEX_0FD0) },
8826 { PREFIX_TABLE (PREFIX_VEX_0FD1) },
8827 { PREFIX_TABLE (PREFIX_VEX_0FD2) },
8828 { PREFIX_TABLE (PREFIX_VEX_0FD3) },
8829 { PREFIX_TABLE (PREFIX_VEX_0FD4) },
8830 { PREFIX_TABLE (PREFIX_VEX_0FD5) },
8831 { PREFIX_TABLE (PREFIX_VEX_0FD6) },
8832 { PREFIX_TABLE (PREFIX_VEX_0FD7) },
c0f3af97 8833 /* d8 */
592a252b
L
8834 { PREFIX_TABLE (PREFIX_VEX_0FD8) },
8835 { PREFIX_TABLE (PREFIX_VEX_0FD9) },
8836 { PREFIX_TABLE (PREFIX_VEX_0FDA) },
8837 { PREFIX_TABLE (PREFIX_VEX_0FDB) },
8838 { PREFIX_TABLE (PREFIX_VEX_0FDC) },
8839 { PREFIX_TABLE (PREFIX_VEX_0FDD) },
8840 { PREFIX_TABLE (PREFIX_VEX_0FDE) },
8841 { PREFIX_TABLE (PREFIX_VEX_0FDF) },
c0f3af97 8842 /* e0 */
592a252b
L
8843 { PREFIX_TABLE (PREFIX_VEX_0FE0) },
8844 { PREFIX_TABLE (PREFIX_VEX_0FE1) },
8845 { PREFIX_TABLE (PREFIX_VEX_0FE2) },
8846 { PREFIX_TABLE (PREFIX_VEX_0FE3) },
8847 { PREFIX_TABLE (PREFIX_VEX_0FE4) },
8848 { PREFIX_TABLE (PREFIX_VEX_0FE5) },
8849 { PREFIX_TABLE (PREFIX_VEX_0FE6) },
8850 { PREFIX_TABLE (PREFIX_VEX_0FE7) },
c0f3af97 8851 /* e8 */
592a252b
L
8852 { PREFIX_TABLE (PREFIX_VEX_0FE8) },
8853 { PREFIX_TABLE (PREFIX_VEX_0FE9) },
8854 { PREFIX_TABLE (PREFIX_VEX_0FEA) },
8855 { PREFIX_TABLE (PREFIX_VEX_0FEB) },
8856 { PREFIX_TABLE (PREFIX_VEX_0FEC) },
8857 { PREFIX_TABLE (PREFIX_VEX_0FED) },
8858 { PREFIX_TABLE (PREFIX_VEX_0FEE) },
8859 { PREFIX_TABLE (PREFIX_VEX_0FEF) },
c0f3af97 8860 /* f0 */
592a252b
L
8861 { PREFIX_TABLE (PREFIX_VEX_0FF0) },
8862 { PREFIX_TABLE (PREFIX_VEX_0FF1) },
8863 { PREFIX_TABLE (PREFIX_VEX_0FF2) },
8864 { PREFIX_TABLE (PREFIX_VEX_0FF3) },
8865 { PREFIX_TABLE (PREFIX_VEX_0FF4) },
8866 { PREFIX_TABLE (PREFIX_VEX_0FF5) },
8867 { PREFIX_TABLE (PREFIX_VEX_0FF6) },
8868 { PREFIX_TABLE (PREFIX_VEX_0FF7) },
c0f3af97 8869 /* f8 */
592a252b
L
8870 { PREFIX_TABLE (PREFIX_VEX_0FF8) },
8871 { PREFIX_TABLE (PREFIX_VEX_0FF9) },
8872 { PREFIX_TABLE (PREFIX_VEX_0FFA) },
8873 { PREFIX_TABLE (PREFIX_VEX_0FFB) },
8874 { PREFIX_TABLE (PREFIX_VEX_0FFC) },
8875 { PREFIX_TABLE (PREFIX_VEX_0FFD) },
8876 { PREFIX_TABLE (PREFIX_VEX_0FFE) },
592d1631 8877 { Bad_Opcode },
c0f3af97
L
8878 },
8879 /* VEX_0F38 */
8880 {
8881 /* 00 */
592a252b
L
8882 { PREFIX_TABLE (PREFIX_VEX_0F3800) },
8883 { PREFIX_TABLE (PREFIX_VEX_0F3801) },
8884 { PREFIX_TABLE (PREFIX_VEX_0F3802) },
8885 { PREFIX_TABLE (PREFIX_VEX_0F3803) },
8886 { PREFIX_TABLE (PREFIX_VEX_0F3804) },
8887 { PREFIX_TABLE (PREFIX_VEX_0F3805) },
8888 { PREFIX_TABLE (PREFIX_VEX_0F3806) },
8889 { PREFIX_TABLE (PREFIX_VEX_0F3807) },
c0f3af97 8890 /* 08 */
592a252b
L
8891 { PREFIX_TABLE (PREFIX_VEX_0F3808) },
8892 { PREFIX_TABLE (PREFIX_VEX_0F3809) },
8893 { PREFIX_TABLE (PREFIX_VEX_0F380A) },
8894 { PREFIX_TABLE (PREFIX_VEX_0F380B) },
8895 { PREFIX_TABLE (PREFIX_VEX_0F380C) },
8896 { PREFIX_TABLE (PREFIX_VEX_0F380D) },
8897 { PREFIX_TABLE (PREFIX_VEX_0F380E) },
8898 { PREFIX_TABLE (PREFIX_VEX_0F380F) },
c0f3af97 8899 /* 10 */
592d1631
L
8900 { Bad_Opcode },
8901 { Bad_Opcode },
8902 { Bad_Opcode },
592a252b 8903 { PREFIX_TABLE (PREFIX_VEX_0F3813) },
592d1631
L
8904 { Bad_Opcode },
8905 { Bad_Opcode },
6c30d220 8906 { PREFIX_TABLE (PREFIX_VEX_0F3816) },
592a252b 8907 { PREFIX_TABLE (PREFIX_VEX_0F3817) },
c0f3af97 8908 /* 18 */
592a252b
L
8909 { PREFIX_TABLE (PREFIX_VEX_0F3818) },
8910 { PREFIX_TABLE (PREFIX_VEX_0F3819) },
8911 { PREFIX_TABLE (PREFIX_VEX_0F381A) },
592d1631 8912 { Bad_Opcode },
592a252b
L
8913 { PREFIX_TABLE (PREFIX_VEX_0F381C) },
8914 { PREFIX_TABLE (PREFIX_VEX_0F381D) },
8915 { PREFIX_TABLE (PREFIX_VEX_0F381E) },
592d1631 8916 { Bad_Opcode },
c0f3af97 8917 /* 20 */
592a252b
L
8918 { PREFIX_TABLE (PREFIX_VEX_0F3820) },
8919 { PREFIX_TABLE (PREFIX_VEX_0F3821) },
8920 { PREFIX_TABLE (PREFIX_VEX_0F3822) },
8921 { PREFIX_TABLE (PREFIX_VEX_0F3823) },
8922 { PREFIX_TABLE (PREFIX_VEX_0F3824) },
8923 { PREFIX_TABLE (PREFIX_VEX_0F3825) },
592d1631
L
8924 { Bad_Opcode },
8925 { Bad_Opcode },
c0f3af97 8926 /* 28 */
592a252b
L
8927 { PREFIX_TABLE (PREFIX_VEX_0F3828) },
8928 { PREFIX_TABLE (PREFIX_VEX_0F3829) },
8929 { PREFIX_TABLE (PREFIX_VEX_0F382A) },
8930 { PREFIX_TABLE (PREFIX_VEX_0F382B) },
8931 { PREFIX_TABLE (PREFIX_VEX_0F382C) },
8932 { PREFIX_TABLE (PREFIX_VEX_0F382D) },
8933 { PREFIX_TABLE (PREFIX_VEX_0F382E) },
8934 { PREFIX_TABLE (PREFIX_VEX_0F382F) },
c0f3af97 8935 /* 30 */
592a252b
L
8936 { PREFIX_TABLE (PREFIX_VEX_0F3830) },
8937 { PREFIX_TABLE (PREFIX_VEX_0F3831) },
8938 { PREFIX_TABLE (PREFIX_VEX_0F3832) },
8939 { PREFIX_TABLE (PREFIX_VEX_0F3833) },
8940 { PREFIX_TABLE (PREFIX_VEX_0F3834) },
8941 { PREFIX_TABLE (PREFIX_VEX_0F3835) },
6c30d220 8942 { PREFIX_TABLE (PREFIX_VEX_0F3836) },
592a252b 8943 { PREFIX_TABLE (PREFIX_VEX_0F3837) },
c0f3af97 8944 /* 38 */
592a252b
L
8945 { PREFIX_TABLE (PREFIX_VEX_0F3838) },
8946 { PREFIX_TABLE (PREFIX_VEX_0F3839) },
8947 { PREFIX_TABLE (PREFIX_VEX_0F383A) },
8948 { PREFIX_TABLE (PREFIX_VEX_0F383B) },
8949 { PREFIX_TABLE (PREFIX_VEX_0F383C) },
8950 { PREFIX_TABLE (PREFIX_VEX_0F383D) },
8951 { PREFIX_TABLE (PREFIX_VEX_0F383E) },
8952 { PREFIX_TABLE (PREFIX_VEX_0F383F) },
c0f3af97 8953 /* 40 */
592a252b
L
8954 { PREFIX_TABLE (PREFIX_VEX_0F3840) },
8955 { PREFIX_TABLE (PREFIX_VEX_0F3841) },
592d1631
L
8956 { Bad_Opcode },
8957 { Bad_Opcode },
8958 { Bad_Opcode },
6c30d220
L
8959 { PREFIX_TABLE (PREFIX_VEX_0F3845) },
8960 { PREFIX_TABLE (PREFIX_VEX_0F3846) },
8961 { PREFIX_TABLE (PREFIX_VEX_0F3847) },
c0f3af97 8962 /* 48 */
592d1631
L
8963 { Bad_Opcode },
8964 { Bad_Opcode },
8965 { Bad_Opcode },
8966 { Bad_Opcode },
8967 { Bad_Opcode },
8968 { Bad_Opcode },
8969 { Bad_Opcode },
8970 { Bad_Opcode },
c0f3af97 8971 /* 50 */
592d1631
L
8972 { Bad_Opcode },
8973 { Bad_Opcode },
8974 { Bad_Opcode },
8975 { Bad_Opcode },
8976 { Bad_Opcode },
8977 { Bad_Opcode },
8978 { Bad_Opcode },
8979 { Bad_Opcode },
c0f3af97 8980 /* 58 */
6c30d220
L
8981 { PREFIX_TABLE (PREFIX_VEX_0F3858) },
8982 { PREFIX_TABLE (PREFIX_VEX_0F3859) },
8983 { PREFIX_TABLE (PREFIX_VEX_0F385A) },
592d1631
L
8984 { Bad_Opcode },
8985 { Bad_Opcode },
8986 { Bad_Opcode },
8987 { Bad_Opcode },
8988 { Bad_Opcode },
c0f3af97 8989 /* 60 */
592d1631
L
8990 { Bad_Opcode },
8991 { Bad_Opcode },
8992 { Bad_Opcode },
8993 { Bad_Opcode },
8994 { Bad_Opcode },
8995 { Bad_Opcode },
8996 { Bad_Opcode },
8997 { Bad_Opcode },
c0f3af97 8998 /* 68 */
592d1631
L
8999 { Bad_Opcode },
9000 { Bad_Opcode },
9001 { Bad_Opcode },
9002 { Bad_Opcode },
9003 { Bad_Opcode },
9004 { Bad_Opcode },
9005 { Bad_Opcode },
9006 { Bad_Opcode },
c0f3af97 9007 /* 70 */
592d1631
L
9008 { Bad_Opcode },
9009 { Bad_Opcode },
9010 { Bad_Opcode },
9011 { Bad_Opcode },
9012 { Bad_Opcode },
9013 { Bad_Opcode },
9014 { Bad_Opcode },
9015 { Bad_Opcode },
c0f3af97 9016 /* 78 */
6c30d220
L
9017 { PREFIX_TABLE (PREFIX_VEX_0F3878) },
9018 { PREFIX_TABLE (PREFIX_VEX_0F3879) },
592d1631
L
9019 { Bad_Opcode },
9020 { Bad_Opcode },
9021 { Bad_Opcode },
9022 { Bad_Opcode },
9023 { Bad_Opcode },
9024 { Bad_Opcode },
c0f3af97 9025 /* 80 */
592d1631
L
9026 { Bad_Opcode },
9027 { Bad_Opcode },
9028 { Bad_Opcode },
9029 { Bad_Opcode },
9030 { Bad_Opcode },
9031 { Bad_Opcode },
9032 { Bad_Opcode },
9033 { Bad_Opcode },
c0f3af97 9034 /* 88 */
592d1631
L
9035 { Bad_Opcode },
9036 { Bad_Opcode },
9037 { Bad_Opcode },
9038 { Bad_Opcode },
6c30d220 9039 { PREFIX_TABLE (PREFIX_VEX_0F388C) },
592d1631 9040 { Bad_Opcode },
6c30d220 9041 { PREFIX_TABLE (PREFIX_VEX_0F388E) },
592d1631 9042 { Bad_Opcode },
c0f3af97 9043 /* 90 */
6c30d220
L
9044 { PREFIX_TABLE (PREFIX_VEX_0F3890) },
9045 { PREFIX_TABLE (PREFIX_VEX_0F3891) },
9046 { PREFIX_TABLE (PREFIX_VEX_0F3892) },
9047 { PREFIX_TABLE (PREFIX_VEX_0F3893) },
592d1631
L
9048 { Bad_Opcode },
9049 { Bad_Opcode },
592a252b
L
9050 { PREFIX_TABLE (PREFIX_VEX_0F3896) },
9051 { PREFIX_TABLE (PREFIX_VEX_0F3897) },
c0f3af97 9052 /* 98 */
592a252b
L
9053 { PREFIX_TABLE (PREFIX_VEX_0F3898) },
9054 { PREFIX_TABLE (PREFIX_VEX_0F3899) },
9055 { PREFIX_TABLE (PREFIX_VEX_0F389A) },
9056 { PREFIX_TABLE (PREFIX_VEX_0F389B) },
9057 { PREFIX_TABLE (PREFIX_VEX_0F389C) },
9058 { PREFIX_TABLE (PREFIX_VEX_0F389D) },
9059 { PREFIX_TABLE (PREFIX_VEX_0F389E) },
9060 { PREFIX_TABLE (PREFIX_VEX_0F389F) },
c0f3af97 9061 /* a0 */
592d1631
L
9062 { Bad_Opcode },
9063 { Bad_Opcode },
9064 { Bad_Opcode },
9065 { Bad_Opcode },
9066 { Bad_Opcode },
9067 { Bad_Opcode },
592a252b
L
9068 { PREFIX_TABLE (PREFIX_VEX_0F38A6) },
9069 { PREFIX_TABLE (PREFIX_VEX_0F38A7) },
c0f3af97 9070 /* a8 */
592a252b
L
9071 { PREFIX_TABLE (PREFIX_VEX_0F38A8) },
9072 { PREFIX_TABLE (PREFIX_VEX_0F38A9) },
9073 { PREFIX_TABLE (PREFIX_VEX_0F38AA) },
9074 { PREFIX_TABLE (PREFIX_VEX_0F38AB) },
9075 { PREFIX_TABLE (PREFIX_VEX_0F38AC) },
9076 { PREFIX_TABLE (PREFIX_VEX_0F38AD) },
9077 { PREFIX_TABLE (PREFIX_VEX_0F38AE) },
9078 { PREFIX_TABLE (PREFIX_VEX_0F38AF) },
c0f3af97 9079 /* b0 */
592d1631
L
9080 { Bad_Opcode },
9081 { Bad_Opcode },
9082 { Bad_Opcode },
9083 { Bad_Opcode },
9084 { Bad_Opcode },
9085 { Bad_Opcode },
592a252b
L
9086 { PREFIX_TABLE (PREFIX_VEX_0F38B6) },
9087 { PREFIX_TABLE (PREFIX_VEX_0F38B7) },
c0f3af97 9088 /* b8 */
592a252b
L
9089 { PREFIX_TABLE (PREFIX_VEX_0F38B8) },
9090 { PREFIX_TABLE (PREFIX_VEX_0F38B9) },
9091 { PREFIX_TABLE (PREFIX_VEX_0F38BA) },
9092 { PREFIX_TABLE (PREFIX_VEX_0F38BB) },
9093 { PREFIX_TABLE (PREFIX_VEX_0F38BC) },
9094 { PREFIX_TABLE (PREFIX_VEX_0F38BD) },
9095 { PREFIX_TABLE (PREFIX_VEX_0F38BE) },
9096 { PREFIX_TABLE (PREFIX_VEX_0F38BF) },
c0f3af97 9097 /* c0 */
592d1631
L
9098 { Bad_Opcode },
9099 { Bad_Opcode },
9100 { Bad_Opcode },
9101 { Bad_Opcode },
9102 { Bad_Opcode },
9103 { Bad_Opcode },
9104 { Bad_Opcode },
9105 { Bad_Opcode },
c0f3af97 9106 /* c8 */
592d1631
L
9107 { Bad_Opcode },
9108 { Bad_Opcode },
9109 { Bad_Opcode },
9110 { Bad_Opcode },
9111 { Bad_Opcode },
9112 { Bad_Opcode },
9113 { Bad_Opcode },
9114 { Bad_Opcode },
c0f3af97 9115 /* d0 */
592d1631
L
9116 { Bad_Opcode },
9117 { Bad_Opcode },
9118 { Bad_Opcode },
9119 { Bad_Opcode },
9120 { Bad_Opcode },
9121 { Bad_Opcode },
9122 { Bad_Opcode },
9123 { Bad_Opcode },
c0f3af97 9124 /* d8 */
592d1631
L
9125 { Bad_Opcode },
9126 { Bad_Opcode },
9127 { Bad_Opcode },
592a252b
L
9128 { PREFIX_TABLE (PREFIX_VEX_0F38DB) },
9129 { PREFIX_TABLE (PREFIX_VEX_0F38DC) },
9130 { PREFIX_TABLE (PREFIX_VEX_0F38DD) },
9131 { PREFIX_TABLE (PREFIX_VEX_0F38DE) },
9132 { PREFIX_TABLE (PREFIX_VEX_0F38DF) },
c0f3af97 9133 /* e0 */
592d1631
L
9134 { Bad_Opcode },
9135 { Bad_Opcode },
9136 { Bad_Opcode },
9137 { Bad_Opcode },
9138 { Bad_Opcode },
9139 { Bad_Opcode },
9140 { Bad_Opcode },
9141 { Bad_Opcode },
c0f3af97 9142 /* e8 */
592d1631
L
9143 { Bad_Opcode },
9144 { Bad_Opcode },
9145 { Bad_Opcode },
9146 { Bad_Opcode },
9147 { Bad_Opcode },
9148 { Bad_Opcode },
9149 { Bad_Opcode },
9150 { Bad_Opcode },
c0f3af97 9151 /* f0 */
592d1631
L
9152 { Bad_Opcode },
9153 { Bad_Opcode },
f12dc422
L
9154 { PREFIX_TABLE (PREFIX_VEX_0F38F2) },
9155 { REG_TABLE (REG_VEX_0F38F3) },
592d1631 9156 { Bad_Opcode },
6c30d220
L
9157 { PREFIX_TABLE (PREFIX_VEX_0F38F5) },
9158 { PREFIX_TABLE (PREFIX_VEX_0F38F6) },
f12dc422 9159 { PREFIX_TABLE (PREFIX_VEX_0F38F7) },
c0f3af97 9160 /* f8 */
592d1631
L
9161 { Bad_Opcode },
9162 { Bad_Opcode },
9163 { Bad_Opcode },
9164 { Bad_Opcode },
9165 { Bad_Opcode },
9166 { Bad_Opcode },
9167 { Bad_Opcode },
9168 { Bad_Opcode },
c0f3af97
L
9169 },
9170 /* VEX_0F3A */
9171 {
9172 /* 00 */
6c30d220
L
9173 { PREFIX_TABLE (PREFIX_VEX_0F3A00) },
9174 { PREFIX_TABLE (PREFIX_VEX_0F3A01) },
9175 { PREFIX_TABLE (PREFIX_VEX_0F3A02) },
592d1631 9176 { Bad_Opcode },
592a252b
L
9177 { PREFIX_TABLE (PREFIX_VEX_0F3A04) },
9178 { PREFIX_TABLE (PREFIX_VEX_0F3A05) },
9179 { PREFIX_TABLE (PREFIX_VEX_0F3A06) },
592d1631 9180 { Bad_Opcode },
c0f3af97 9181 /* 08 */
592a252b
L
9182 { PREFIX_TABLE (PREFIX_VEX_0F3A08) },
9183 { PREFIX_TABLE (PREFIX_VEX_0F3A09) },
9184 { PREFIX_TABLE (PREFIX_VEX_0F3A0A) },
9185 { PREFIX_TABLE (PREFIX_VEX_0F3A0B) },
9186 { PREFIX_TABLE (PREFIX_VEX_0F3A0C) },
9187 { PREFIX_TABLE (PREFIX_VEX_0F3A0D) },
9188 { PREFIX_TABLE (PREFIX_VEX_0F3A0E) },
9189 { PREFIX_TABLE (PREFIX_VEX_0F3A0F) },
c0f3af97 9190 /* 10 */
592d1631
L
9191 { Bad_Opcode },
9192 { Bad_Opcode },
9193 { Bad_Opcode },
9194 { Bad_Opcode },
592a252b
L
9195 { PREFIX_TABLE (PREFIX_VEX_0F3A14) },
9196 { PREFIX_TABLE (PREFIX_VEX_0F3A15) },
9197 { PREFIX_TABLE (PREFIX_VEX_0F3A16) },
9198 { PREFIX_TABLE (PREFIX_VEX_0F3A17) },
c0f3af97 9199 /* 18 */
592a252b
L
9200 { PREFIX_TABLE (PREFIX_VEX_0F3A18) },
9201 { PREFIX_TABLE (PREFIX_VEX_0F3A19) },
592d1631
L
9202 { Bad_Opcode },
9203 { Bad_Opcode },
9204 { Bad_Opcode },
592a252b 9205 { PREFIX_TABLE (PREFIX_VEX_0F3A1D) },
592d1631
L
9206 { Bad_Opcode },
9207 { Bad_Opcode },
c0f3af97 9208 /* 20 */
592a252b
L
9209 { PREFIX_TABLE (PREFIX_VEX_0F3A20) },
9210 { PREFIX_TABLE (PREFIX_VEX_0F3A21) },
9211 { PREFIX_TABLE (PREFIX_VEX_0F3A22) },
592d1631
L
9212 { Bad_Opcode },
9213 { Bad_Opcode },
9214 { Bad_Opcode },
9215 { Bad_Opcode },
9216 { Bad_Opcode },
c0f3af97 9217 /* 28 */
592d1631
L
9218 { Bad_Opcode },
9219 { Bad_Opcode },
9220 { Bad_Opcode },
9221 { Bad_Opcode },
9222 { Bad_Opcode },
9223 { Bad_Opcode },
9224 { Bad_Opcode },
9225 { Bad_Opcode },
c0f3af97 9226 /* 30 */
43234a1e 9227 { PREFIX_TABLE (PREFIX_VEX_0F3A30) },
1ba585e8 9228 { PREFIX_TABLE (PREFIX_VEX_0F3A31) },
43234a1e 9229 { PREFIX_TABLE (PREFIX_VEX_0F3A32) },
1ba585e8 9230 { PREFIX_TABLE (PREFIX_VEX_0F3A33) },
592d1631
L
9231 { Bad_Opcode },
9232 { Bad_Opcode },
9233 { Bad_Opcode },
9234 { Bad_Opcode },
c0f3af97 9235 /* 38 */
6c30d220
L
9236 { PREFIX_TABLE (PREFIX_VEX_0F3A38) },
9237 { PREFIX_TABLE (PREFIX_VEX_0F3A39) },
592d1631
L
9238 { Bad_Opcode },
9239 { Bad_Opcode },
9240 { Bad_Opcode },
9241 { Bad_Opcode },
9242 { Bad_Opcode },
9243 { Bad_Opcode },
c0f3af97 9244 /* 40 */
592a252b
L
9245 { PREFIX_TABLE (PREFIX_VEX_0F3A40) },
9246 { PREFIX_TABLE (PREFIX_VEX_0F3A41) },
9247 { PREFIX_TABLE (PREFIX_VEX_0F3A42) },
592d1631 9248 { Bad_Opcode },
592a252b 9249 { PREFIX_TABLE (PREFIX_VEX_0F3A44) },
592d1631 9250 { Bad_Opcode },
6c30d220 9251 { PREFIX_TABLE (PREFIX_VEX_0F3A46) },
592d1631 9252 { Bad_Opcode },
c0f3af97 9253 /* 48 */
592a252b
L
9254 { PREFIX_TABLE (PREFIX_VEX_0F3A48) },
9255 { PREFIX_TABLE (PREFIX_VEX_0F3A49) },
9256 { PREFIX_TABLE (PREFIX_VEX_0F3A4A) },
9257 { PREFIX_TABLE (PREFIX_VEX_0F3A4B) },
9258 { PREFIX_TABLE (PREFIX_VEX_0F3A4C) },
592d1631
L
9259 { Bad_Opcode },
9260 { Bad_Opcode },
9261 { Bad_Opcode },
c0f3af97 9262 /* 50 */
592d1631
L
9263 { Bad_Opcode },
9264 { Bad_Opcode },
9265 { Bad_Opcode },
9266 { Bad_Opcode },
9267 { Bad_Opcode },
9268 { Bad_Opcode },
9269 { Bad_Opcode },
9270 { Bad_Opcode },
c0f3af97 9271 /* 58 */
592d1631
L
9272 { Bad_Opcode },
9273 { Bad_Opcode },
9274 { Bad_Opcode },
9275 { Bad_Opcode },
592a252b
L
9276 { PREFIX_TABLE (PREFIX_VEX_0F3A5C) },
9277 { PREFIX_TABLE (PREFIX_VEX_0F3A5D) },
9278 { PREFIX_TABLE (PREFIX_VEX_0F3A5E) },
9279 { PREFIX_TABLE (PREFIX_VEX_0F3A5F) },
c0f3af97 9280 /* 60 */
592a252b
L
9281 { PREFIX_TABLE (PREFIX_VEX_0F3A60) },
9282 { PREFIX_TABLE (PREFIX_VEX_0F3A61) },
9283 { PREFIX_TABLE (PREFIX_VEX_0F3A62) },
9284 { PREFIX_TABLE (PREFIX_VEX_0F3A63) },
592d1631
L
9285 { Bad_Opcode },
9286 { Bad_Opcode },
9287 { Bad_Opcode },
9288 { Bad_Opcode },
c0f3af97 9289 /* 68 */
592a252b
L
9290 { PREFIX_TABLE (PREFIX_VEX_0F3A68) },
9291 { PREFIX_TABLE (PREFIX_VEX_0F3A69) },
9292 { PREFIX_TABLE (PREFIX_VEX_0F3A6A) },
9293 { PREFIX_TABLE (PREFIX_VEX_0F3A6B) },
9294 { PREFIX_TABLE (PREFIX_VEX_0F3A6C) },
9295 { PREFIX_TABLE (PREFIX_VEX_0F3A6D) },
9296 { PREFIX_TABLE (PREFIX_VEX_0F3A6E) },
9297 { PREFIX_TABLE (PREFIX_VEX_0F3A6F) },
c0f3af97 9298 /* 70 */
592d1631
L
9299 { Bad_Opcode },
9300 { Bad_Opcode },
9301 { Bad_Opcode },
9302 { Bad_Opcode },
9303 { Bad_Opcode },
9304 { Bad_Opcode },
9305 { Bad_Opcode },
9306 { Bad_Opcode },
c0f3af97 9307 /* 78 */
592a252b
L
9308 { PREFIX_TABLE (PREFIX_VEX_0F3A78) },
9309 { PREFIX_TABLE (PREFIX_VEX_0F3A79) },
9310 { PREFIX_TABLE (PREFIX_VEX_0F3A7A) },
9311 { PREFIX_TABLE (PREFIX_VEX_0F3A7B) },
9312 { PREFIX_TABLE (PREFIX_VEX_0F3A7C) },
9313 { PREFIX_TABLE (PREFIX_VEX_0F3A7D) },
9314 { PREFIX_TABLE (PREFIX_VEX_0F3A7E) },
9315 { PREFIX_TABLE (PREFIX_VEX_0F3A7F) },
c0f3af97 9316 /* 80 */
592d1631
L
9317 { Bad_Opcode },
9318 { Bad_Opcode },
9319 { Bad_Opcode },
9320 { Bad_Opcode },
9321 { Bad_Opcode },
9322 { Bad_Opcode },
9323 { Bad_Opcode },
9324 { Bad_Opcode },
c0f3af97 9325 /* 88 */
592d1631
L
9326 { Bad_Opcode },
9327 { Bad_Opcode },
9328 { Bad_Opcode },
9329 { Bad_Opcode },
9330 { Bad_Opcode },
9331 { Bad_Opcode },
9332 { Bad_Opcode },
9333 { Bad_Opcode },
c0f3af97 9334 /* 90 */
592d1631
L
9335 { Bad_Opcode },
9336 { Bad_Opcode },
9337 { Bad_Opcode },
9338 { Bad_Opcode },
9339 { Bad_Opcode },
9340 { Bad_Opcode },
9341 { Bad_Opcode },
9342 { Bad_Opcode },
c0f3af97 9343 /* 98 */
592d1631
L
9344 { Bad_Opcode },
9345 { Bad_Opcode },
9346 { Bad_Opcode },
9347 { Bad_Opcode },
9348 { Bad_Opcode },
9349 { Bad_Opcode },
9350 { Bad_Opcode },
9351 { Bad_Opcode },
c0f3af97 9352 /* a0 */
592d1631
L
9353 { Bad_Opcode },
9354 { Bad_Opcode },
9355 { Bad_Opcode },
9356 { Bad_Opcode },
9357 { Bad_Opcode },
9358 { Bad_Opcode },
9359 { Bad_Opcode },
9360 { Bad_Opcode },
c0f3af97 9361 /* a8 */
592d1631
L
9362 { Bad_Opcode },
9363 { Bad_Opcode },
9364 { Bad_Opcode },
9365 { Bad_Opcode },
9366 { Bad_Opcode },
9367 { Bad_Opcode },
9368 { Bad_Opcode },
9369 { Bad_Opcode },
c0f3af97 9370 /* b0 */
592d1631
L
9371 { Bad_Opcode },
9372 { Bad_Opcode },
9373 { Bad_Opcode },
9374 { Bad_Opcode },
9375 { Bad_Opcode },
9376 { Bad_Opcode },
9377 { Bad_Opcode },
9378 { Bad_Opcode },
c0f3af97 9379 /* b8 */
592d1631
L
9380 { Bad_Opcode },
9381 { Bad_Opcode },
9382 { Bad_Opcode },
9383 { Bad_Opcode },
9384 { Bad_Opcode },
9385 { Bad_Opcode },
9386 { Bad_Opcode },
9387 { Bad_Opcode },
c0f3af97 9388 /* c0 */
592d1631
L
9389 { Bad_Opcode },
9390 { Bad_Opcode },
9391 { Bad_Opcode },
9392 { Bad_Opcode },
9393 { Bad_Opcode },
9394 { Bad_Opcode },
9395 { Bad_Opcode },
9396 { Bad_Opcode },
c0f3af97 9397 /* c8 */
592d1631
L
9398 { Bad_Opcode },
9399 { Bad_Opcode },
9400 { Bad_Opcode },
9401 { Bad_Opcode },
9402 { Bad_Opcode },
9403 { Bad_Opcode },
9404 { Bad_Opcode },
9405 { Bad_Opcode },
c0f3af97 9406 /* d0 */
592d1631
L
9407 { Bad_Opcode },
9408 { Bad_Opcode },
9409 { Bad_Opcode },
9410 { Bad_Opcode },
9411 { Bad_Opcode },
9412 { Bad_Opcode },
9413 { Bad_Opcode },
9414 { Bad_Opcode },
c0f3af97 9415 /* d8 */
592d1631
L
9416 { Bad_Opcode },
9417 { Bad_Opcode },
9418 { Bad_Opcode },
9419 { Bad_Opcode },
9420 { Bad_Opcode },
9421 { Bad_Opcode },
9422 { Bad_Opcode },
592a252b 9423 { PREFIX_TABLE (PREFIX_VEX_0F3ADF) },
c0f3af97 9424 /* e0 */
592d1631
L
9425 { Bad_Opcode },
9426 { Bad_Opcode },
9427 { Bad_Opcode },
9428 { Bad_Opcode },
9429 { Bad_Opcode },
9430 { Bad_Opcode },
9431 { Bad_Opcode },
9432 { Bad_Opcode },
c0f3af97 9433 /* e8 */
592d1631
L
9434 { Bad_Opcode },
9435 { Bad_Opcode },
9436 { Bad_Opcode },
9437 { Bad_Opcode },
9438 { Bad_Opcode },
9439 { Bad_Opcode },
9440 { Bad_Opcode },
9441 { Bad_Opcode },
c0f3af97 9442 /* f0 */
6c30d220 9443 { PREFIX_TABLE (PREFIX_VEX_0F3AF0) },
592d1631
L
9444 { Bad_Opcode },
9445 { Bad_Opcode },
9446 { Bad_Opcode },
9447 { Bad_Opcode },
9448 { Bad_Opcode },
9449 { Bad_Opcode },
9450 { Bad_Opcode },
c0f3af97 9451 /* f8 */
592d1631
L
9452 { Bad_Opcode },
9453 { Bad_Opcode },
9454 { Bad_Opcode },
9455 { Bad_Opcode },
9456 { Bad_Opcode },
9457 { Bad_Opcode },
9458 { Bad_Opcode },
9459 { Bad_Opcode },
c0f3af97
L
9460 },
9461};
9462
43234a1e
L
9463#define NEED_OPCODE_TABLE
9464#include "i386-dis-evex.h"
9465#undef NEED_OPCODE_TABLE
c0f3af97 9466static const struct dis386 vex_len_table[][2] = {
592a252b 9467 /* VEX_LEN_0F10_P_1 */
c0f3af97 9468 {
592a252b
L
9469 { VEX_W_TABLE (VEX_W_0F10_P_1) },
9470 { VEX_W_TABLE (VEX_W_0F10_P_1) },
c0f3af97
L
9471 },
9472
592a252b 9473 /* VEX_LEN_0F10_P_3 */
c0f3af97 9474 {
592a252b
L
9475 { VEX_W_TABLE (VEX_W_0F10_P_3) },
9476 { VEX_W_TABLE (VEX_W_0F10_P_3) },
c0f3af97
L
9477 },
9478
592a252b 9479 /* VEX_LEN_0F11_P_1 */
c0f3af97 9480 {
592a252b
L
9481 { VEX_W_TABLE (VEX_W_0F11_P_1) },
9482 { VEX_W_TABLE (VEX_W_0F11_P_1) },
c0f3af97
L
9483 },
9484
592a252b 9485 /* VEX_LEN_0F11_P_3 */
c0f3af97 9486 {
592a252b
L
9487 { VEX_W_TABLE (VEX_W_0F11_P_3) },
9488 { VEX_W_TABLE (VEX_W_0F11_P_3) },
c0f3af97
L
9489 },
9490
592a252b 9491 /* VEX_LEN_0F12_P_0_M_0 */
c0f3af97 9492 {
592a252b 9493 { VEX_W_TABLE (VEX_W_0F12_P_0_M_0) },
c0f3af97
L
9494 },
9495
592a252b 9496 /* VEX_LEN_0F12_P_0_M_1 */
c0f3af97 9497 {
592a252b 9498 { VEX_W_TABLE (VEX_W_0F12_P_0_M_1) },
c0f3af97
L
9499 },
9500
592a252b 9501 /* VEX_LEN_0F12_P_2 */
c0f3af97 9502 {
592a252b 9503 { VEX_W_TABLE (VEX_W_0F12_P_2) },
c0f3af97
L
9504 },
9505
592a252b 9506 /* VEX_LEN_0F13_M_0 */
c0f3af97 9507 {
592a252b 9508 { VEX_W_TABLE (VEX_W_0F13_M_0) },
c0f3af97
L
9509 },
9510
592a252b 9511 /* VEX_LEN_0F16_P_0_M_0 */
c0f3af97 9512 {
592a252b 9513 { VEX_W_TABLE (VEX_W_0F16_P_0_M_0) },
c0f3af97
L
9514 },
9515
592a252b 9516 /* VEX_LEN_0F16_P_0_M_1 */
c0f3af97 9517 {
592a252b 9518 { VEX_W_TABLE (VEX_W_0F16_P_0_M_1) },
c0f3af97
L
9519 },
9520
592a252b 9521 /* VEX_LEN_0F16_P_2 */
c0f3af97 9522 {
592a252b 9523 { VEX_W_TABLE (VEX_W_0F16_P_2) },
c0f3af97
L
9524 },
9525
592a252b 9526 /* VEX_LEN_0F17_M_0 */
c0f3af97 9527 {
592a252b 9528 { VEX_W_TABLE (VEX_W_0F17_M_0) },
c0f3af97
L
9529 },
9530
592a252b 9531 /* VEX_LEN_0F2A_P_1 */
c0f3af97 9532 {
539f890d
L
9533 { "vcvtsi2ss%LQ", { XMScalar, VexScalar, Ev } },
9534 { "vcvtsi2ss%LQ", { XMScalar, VexScalar, Ev } },
c0f3af97
L
9535 },
9536
592a252b 9537 /* VEX_LEN_0F2A_P_3 */
c0f3af97 9538 {
539f890d
L
9539 { "vcvtsi2sd%LQ", { XMScalar, VexScalar, Ev } },
9540 { "vcvtsi2sd%LQ", { XMScalar, VexScalar, Ev } },
c0f3af97
L
9541 },
9542
592a252b 9543 /* VEX_LEN_0F2C_P_1 */
c0f3af97 9544 {
539f890d
L
9545 { "vcvttss2siY", { Gv, EXdScalar } },
9546 { "vcvttss2siY", { Gv, EXdScalar } },
c0f3af97
L
9547 },
9548
592a252b 9549 /* VEX_LEN_0F2C_P_3 */
c0f3af97 9550 {
539f890d
L
9551 { "vcvttsd2siY", { Gv, EXqScalar } },
9552 { "vcvttsd2siY", { Gv, EXqScalar } },
c0f3af97
L
9553 },
9554
592a252b 9555 /* VEX_LEN_0F2D_P_1 */
c0f3af97 9556 {
539f890d
L
9557 { "vcvtss2siY", { Gv, EXdScalar } },
9558 { "vcvtss2siY", { Gv, EXdScalar } },
c0f3af97
L
9559 },
9560
592a252b 9561 /* VEX_LEN_0F2D_P_3 */
c0f3af97 9562 {
539f890d
L
9563 { "vcvtsd2siY", { Gv, EXqScalar } },
9564 { "vcvtsd2siY", { Gv, EXqScalar } },
c0f3af97
L
9565 },
9566
592a252b 9567 /* VEX_LEN_0F2E_P_0 */
c0f3af97 9568 {
592a252b
L
9569 { VEX_W_TABLE (VEX_W_0F2E_P_0) },
9570 { VEX_W_TABLE (VEX_W_0F2E_P_0) },
c0f3af97
L
9571 },
9572
592a252b 9573 /* VEX_LEN_0F2E_P_2 */
c0f3af97 9574 {
592a252b
L
9575 { VEX_W_TABLE (VEX_W_0F2E_P_2) },
9576 { VEX_W_TABLE (VEX_W_0F2E_P_2) },
c0f3af97
L
9577 },
9578
592a252b 9579 /* VEX_LEN_0F2F_P_0 */
c0f3af97 9580 {
592a252b
L
9581 { VEX_W_TABLE (VEX_W_0F2F_P_0) },
9582 { VEX_W_TABLE (VEX_W_0F2F_P_0) },
c0f3af97
L
9583 },
9584
592a252b 9585 /* VEX_LEN_0F2F_P_2 */
c0f3af97 9586 {
592a252b
L
9587 { VEX_W_TABLE (VEX_W_0F2F_P_2) },
9588 { VEX_W_TABLE (VEX_W_0F2F_P_2) },
c0f3af97
L
9589 },
9590
43234a1e
L
9591 /* VEX_LEN_0F41_P_0 */
9592 {
9593 { Bad_Opcode },
9594 { VEX_W_TABLE (VEX_W_0F41_P_0_LEN_1) },
9595 },
1ba585e8
IT
9596 /* VEX_LEN_0F41_P_2 */
9597 {
9598 { Bad_Opcode },
9599 { VEX_W_TABLE (VEX_W_0F41_P_2_LEN_1) },
9600 },
43234a1e
L
9601 /* VEX_LEN_0F42_P_0 */
9602 {
9603 { Bad_Opcode },
9604 { VEX_W_TABLE (VEX_W_0F42_P_0_LEN_1) },
9605 },
1ba585e8
IT
9606 /* VEX_LEN_0F42_P_2 */
9607 {
9608 { Bad_Opcode },
9609 { VEX_W_TABLE (VEX_W_0F42_P_2_LEN_1) },
9610 },
43234a1e
L
9611 /* VEX_LEN_0F44_P_0 */
9612 {
9613 { VEX_W_TABLE (VEX_W_0F44_P_0_LEN_0) },
9614 },
1ba585e8
IT
9615 /* VEX_LEN_0F44_P_2 */
9616 {
9617 { VEX_W_TABLE (VEX_W_0F44_P_2_LEN_0) },
9618 },
43234a1e
L
9619 /* VEX_LEN_0F45_P_0 */
9620 {
9621 { Bad_Opcode },
9622 { VEX_W_TABLE (VEX_W_0F45_P_0_LEN_1) },
9623 },
1ba585e8
IT
9624 /* VEX_LEN_0F45_P_2 */
9625 {
9626 { Bad_Opcode },
9627 { VEX_W_TABLE (VEX_W_0F45_P_2_LEN_1) },
9628 },
43234a1e
L
9629 /* VEX_LEN_0F46_P_0 */
9630 {
9631 { Bad_Opcode },
9632 { VEX_W_TABLE (VEX_W_0F46_P_0_LEN_1) },
9633 },
1ba585e8
IT
9634 /* VEX_LEN_0F46_P_2 */
9635 {
9636 { Bad_Opcode },
9637 { VEX_W_TABLE (VEX_W_0F46_P_2_LEN_1) },
9638 },
43234a1e
L
9639 /* VEX_LEN_0F47_P_0 */
9640 {
9641 { Bad_Opcode },
9642 { VEX_W_TABLE (VEX_W_0F47_P_0_LEN_1) },
9643 },
1ba585e8
IT
9644 /* VEX_LEN_0F47_P_2 */
9645 {
9646 { Bad_Opcode },
9647 { VEX_W_TABLE (VEX_W_0F47_P_2_LEN_1) },
9648 },
9649 /* VEX_LEN_0F4A_P_0 */
9650 {
9651 { Bad_Opcode },
9652 { VEX_W_TABLE (VEX_W_0F4A_P_0_LEN_1) },
9653 },
9654 /* VEX_LEN_0F4A_P_2 */
9655 {
9656 { Bad_Opcode },
9657 { VEX_W_TABLE (VEX_W_0F4A_P_2_LEN_1) },
9658 },
9659 /* VEX_LEN_0F4B_P_0 */
9660 {
9661 { Bad_Opcode },
9662 { VEX_W_TABLE (VEX_W_0F4B_P_0_LEN_1) },
9663 },
43234a1e
L
9664 /* VEX_LEN_0F4B_P_2 */
9665 {
9666 { Bad_Opcode },
9667 { VEX_W_TABLE (VEX_W_0F4B_P_2_LEN_1) },
9668 },
9669
592a252b 9670 /* VEX_LEN_0F51_P_1 */
c0f3af97 9671 {
592a252b
L
9672 { VEX_W_TABLE (VEX_W_0F51_P_1) },
9673 { VEX_W_TABLE (VEX_W_0F51_P_1) },
c0f3af97
L
9674 },
9675
592a252b 9676 /* VEX_LEN_0F51_P_3 */
c0f3af97 9677 {
592a252b
L
9678 { VEX_W_TABLE (VEX_W_0F51_P_3) },
9679 { VEX_W_TABLE (VEX_W_0F51_P_3) },
c0f3af97
L
9680 },
9681
592a252b 9682 /* VEX_LEN_0F52_P_1 */
c0f3af97 9683 {
592a252b
L
9684 { VEX_W_TABLE (VEX_W_0F52_P_1) },
9685 { VEX_W_TABLE (VEX_W_0F52_P_1) },
c0f3af97
L
9686 },
9687
592a252b 9688 /* VEX_LEN_0F53_P_1 */
c0f3af97 9689 {
592a252b
L
9690 { VEX_W_TABLE (VEX_W_0F53_P_1) },
9691 { VEX_W_TABLE (VEX_W_0F53_P_1) },
c0f3af97
L
9692 },
9693
592a252b 9694 /* VEX_LEN_0F58_P_1 */
c0f3af97 9695 {
592a252b
L
9696 { VEX_W_TABLE (VEX_W_0F58_P_1) },
9697 { VEX_W_TABLE (VEX_W_0F58_P_1) },
c0f3af97
L
9698 },
9699
592a252b 9700 /* VEX_LEN_0F58_P_3 */
c0f3af97 9701 {
592a252b
L
9702 { VEX_W_TABLE (VEX_W_0F58_P_3) },
9703 { VEX_W_TABLE (VEX_W_0F58_P_3) },
c0f3af97
L
9704 },
9705
592a252b 9706 /* VEX_LEN_0F59_P_1 */
c0f3af97 9707 {
592a252b
L
9708 { VEX_W_TABLE (VEX_W_0F59_P_1) },
9709 { VEX_W_TABLE (VEX_W_0F59_P_1) },
c0f3af97
L
9710 },
9711
592a252b 9712 /* VEX_LEN_0F59_P_3 */
c0f3af97 9713 {
592a252b
L
9714 { VEX_W_TABLE (VEX_W_0F59_P_3) },
9715 { VEX_W_TABLE (VEX_W_0F59_P_3) },
c0f3af97
L
9716 },
9717
592a252b 9718 /* VEX_LEN_0F5A_P_1 */
c0f3af97 9719 {
592a252b
L
9720 { VEX_W_TABLE (VEX_W_0F5A_P_1) },
9721 { VEX_W_TABLE (VEX_W_0F5A_P_1) },
c0f3af97
L
9722 },
9723
592a252b 9724 /* VEX_LEN_0F5A_P_3 */
c0f3af97 9725 {
592a252b
L
9726 { VEX_W_TABLE (VEX_W_0F5A_P_3) },
9727 { VEX_W_TABLE (VEX_W_0F5A_P_3) },
c0f3af97
L
9728 },
9729
592a252b 9730 /* VEX_LEN_0F5C_P_1 */
c0f3af97 9731 {
592a252b
L
9732 { VEX_W_TABLE (VEX_W_0F5C_P_1) },
9733 { VEX_W_TABLE (VEX_W_0F5C_P_1) },
c0f3af97
L
9734 },
9735
592a252b 9736 /* VEX_LEN_0F5C_P_3 */
c0f3af97 9737 {
592a252b
L
9738 { VEX_W_TABLE (VEX_W_0F5C_P_3) },
9739 { VEX_W_TABLE (VEX_W_0F5C_P_3) },
c0f3af97
L
9740 },
9741
592a252b 9742 /* VEX_LEN_0F5D_P_1 */
c0f3af97 9743 {
592a252b
L
9744 { VEX_W_TABLE (VEX_W_0F5D_P_1) },
9745 { VEX_W_TABLE (VEX_W_0F5D_P_1) },
c0f3af97
L
9746 },
9747
592a252b 9748 /* VEX_LEN_0F5D_P_3 */
c0f3af97 9749 {
592a252b
L
9750 { VEX_W_TABLE (VEX_W_0F5D_P_3) },
9751 { VEX_W_TABLE (VEX_W_0F5D_P_3) },
c0f3af97
L
9752 },
9753
592a252b 9754 /* VEX_LEN_0F5E_P_1 */
c0f3af97 9755 {
592a252b
L
9756 { VEX_W_TABLE (VEX_W_0F5E_P_1) },
9757 { VEX_W_TABLE (VEX_W_0F5E_P_1) },
c0f3af97
L
9758 },
9759
592a252b 9760 /* VEX_LEN_0F5E_P_3 */
c0f3af97 9761 {
592a252b
L
9762 { VEX_W_TABLE (VEX_W_0F5E_P_3) },
9763 { VEX_W_TABLE (VEX_W_0F5E_P_3) },
c0f3af97
L
9764 },
9765
592a252b 9766 /* VEX_LEN_0F5F_P_1 */
c0f3af97 9767 {
592a252b
L
9768 { VEX_W_TABLE (VEX_W_0F5F_P_1) },
9769 { VEX_W_TABLE (VEX_W_0F5F_P_1) },
c0f3af97
L
9770 },
9771
592a252b 9772 /* VEX_LEN_0F5F_P_3 */
c0f3af97 9773 {
592a252b
L
9774 { VEX_W_TABLE (VEX_W_0F5F_P_3) },
9775 { VEX_W_TABLE (VEX_W_0F5F_P_3) },
c0f3af97
L
9776 },
9777
592a252b 9778 /* VEX_LEN_0F6E_P_2 */
c0f3af97 9779 {
539f890d
L
9780 { "vmovK", { XMScalar, Edq } },
9781 { "vmovK", { XMScalar, Edq } },
c0f3af97
L
9782 },
9783
592a252b 9784 /* VEX_LEN_0F7E_P_1 */
c0f3af97 9785 {
592a252b
L
9786 { VEX_W_TABLE (VEX_W_0F7E_P_1) },
9787 { VEX_W_TABLE (VEX_W_0F7E_P_1) },
c0f3af97
L
9788 },
9789
592a252b 9790 /* VEX_LEN_0F7E_P_2 */
c0f3af97 9791 {
539f890d 9792 { "vmovK", { Edq, XMScalar } },
6c30d220 9793 { "vmovK", { Edq, XMScalar } },
c0f3af97
L
9794 },
9795
43234a1e
L
9796 /* VEX_LEN_0F90_P_0 */
9797 {
9798 { VEX_W_TABLE (VEX_W_0F90_P_0_LEN_0) },
9799 },
9800
1ba585e8
IT
9801 /* VEX_LEN_0F90_P_2 */
9802 {
9803 { VEX_W_TABLE (VEX_W_0F90_P_2_LEN_0) },
9804 },
9805
43234a1e
L
9806 /* VEX_LEN_0F91_P_0 */
9807 {
9808 { VEX_W_TABLE (VEX_W_0F91_P_0_LEN_0) },
9809 },
9810
1ba585e8
IT
9811 /* VEX_LEN_0F91_P_2 */
9812 {
9813 { VEX_W_TABLE (VEX_W_0F91_P_2_LEN_0) },
9814 },
9815
43234a1e
L
9816 /* VEX_LEN_0F92_P_0 */
9817 {
9818 { VEX_W_TABLE (VEX_W_0F92_P_0_LEN_0) },
9819 },
9820
90a915bf
IT
9821 /* VEX_LEN_0F92_P_2 */
9822 {
9823 { VEX_W_TABLE (VEX_W_0F92_P_2_LEN_0) },
9824 },
9825
1ba585e8
IT
9826 /* VEX_LEN_0F92_P_3 */
9827 {
9828 { VEX_W_TABLE (VEX_W_0F92_P_3_LEN_0) },
9829 },
9830
43234a1e
L
9831 /* VEX_LEN_0F93_P_0 */
9832 {
9833 { VEX_W_TABLE (VEX_W_0F93_P_0_LEN_0) },
9834 },
9835
90a915bf
IT
9836 /* VEX_LEN_0F93_P_2 */
9837 {
9838 { VEX_W_TABLE (VEX_W_0F93_P_2_LEN_0) },
9839 },
9840
1ba585e8
IT
9841 /* VEX_LEN_0F93_P_3 */
9842 {
9843 { VEX_W_TABLE (VEX_W_0F93_P_3_LEN_0) },
9844 },
9845
43234a1e
L
9846 /* VEX_LEN_0F98_P_0 */
9847 {
9848 { VEX_W_TABLE (VEX_W_0F98_P_0_LEN_0) },
9849 },
9850
1ba585e8
IT
9851 /* VEX_LEN_0F98_P_2 */
9852 {
9853 { VEX_W_TABLE (VEX_W_0F98_P_2_LEN_0) },
9854 },
9855
9856 /* VEX_LEN_0F99_P_0 */
9857 {
9858 { VEX_W_TABLE (VEX_W_0F99_P_0_LEN_0) },
9859 },
9860
9861 /* VEX_LEN_0F99_P_2 */
9862 {
9863 { VEX_W_TABLE (VEX_W_0F99_P_2_LEN_0) },
9864 },
9865
6c30d220 9866 /* VEX_LEN_0FAE_R_2_M_0 */
c0f3af97 9867 {
6c30d220 9868 { VEX_W_TABLE (VEX_W_0FAE_R_2_M_0) },
c0f3af97
L
9869 },
9870
6c30d220 9871 /* VEX_LEN_0FAE_R_3_M_0 */
c0f3af97 9872 {
6c30d220 9873 { VEX_W_TABLE (VEX_W_0FAE_R_3_M_0) },
c0f3af97
L
9874 },
9875
6c30d220 9876 /* VEX_LEN_0FC2_P_1 */
c0f3af97 9877 {
6c30d220
L
9878 { VEX_W_TABLE (VEX_W_0FC2_P_1) },
9879 { VEX_W_TABLE (VEX_W_0FC2_P_1) },
c0f3af97
L
9880 },
9881
6c30d220 9882 /* VEX_LEN_0FC2_P_3 */
c0f3af97 9883 {
6c30d220
L
9884 { VEX_W_TABLE (VEX_W_0FC2_P_3) },
9885 { VEX_W_TABLE (VEX_W_0FC2_P_3) },
c0f3af97
L
9886 },
9887
6c30d220 9888 /* VEX_LEN_0FC4_P_2 */
c0f3af97 9889 {
6c30d220 9890 { VEX_W_TABLE (VEX_W_0FC4_P_2) },
c0f3af97
L
9891 },
9892
6c30d220 9893 /* VEX_LEN_0FC5_P_2 */
c0f3af97 9894 {
6c30d220 9895 { VEX_W_TABLE (VEX_W_0FC5_P_2) },
c0f3af97
L
9896 },
9897
6c30d220 9898 /* VEX_LEN_0FD6_P_2 */
c0f3af97 9899 {
6c30d220
L
9900 { VEX_W_TABLE (VEX_W_0FD6_P_2) },
9901 { VEX_W_TABLE (VEX_W_0FD6_P_2) },
c0f3af97
L
9902 },
9903
6c30d220 9904 /* VEX_LEN_0FF7_P_2 */
c0f3af97 9905 {
6c30d220 9906 { VEX_W_TABLE (VEX_W_0FF7_P_2) },
c0f3af97
L
9907 },
9908
6c30d220 9909 /* VEX_LEN_0F3816_P_2 */
c0f3af97 9910 {
6c30d220
L
9911 { Bad_Opcode },
9912 { VEX_W_TABLE (VEX_W_0F3816_P_2) },
c0f3af97
L
9913 },
9914
6c30d220 9915 /* VEX_LEN_0F3819_P_2 */
c0f3af97 9916 {
6c30d220
L
9917 { Bad_Opcode },
9918 { VEX_W_TABLE (VEX_W_0F3819_P_2) },
c0f3af97
L
9919 },
9920
6c30d220 9921 /* VEX_LEN_0F381A_P_2_M_0 */
c0f3af97 9922 {
6c30d220
L
9923 { Bad_Opcode },
9924 { VEX_W_TABLE (VEX_W_0F381A_P_2_M_0) },
c0f3af97
L
9925 },
9926
6c30d220 9927 /* VEX_LEN_0F3836_P_2 */
c0f3af97 9928 {
6c30d220
L
9929 { Bad_Opcode },
9930 { VEX_W_TABLE (VEX_W_0F3836_P_2) },
c0f3af97
L
9931 },
9932
592a252b 9933 /* VEX_LEN_0F3841_P_2 */
c0f3af97 9934 {
592a252b 9935 { VEX_W_TABLE (VEX_W_0F3841_P_2) },
c0f3af97
L
9936 },
9937
6c30d220
L
9938 /* VEX_LEN_0F385A_P_2_M_0 */
9939 {
9940 { Bad_Opcode },
9941 { VEX_W_TABLE (VEX_W_0F385A_P_2_M_0) },
9942 },
9943
592a252b 9944 /* VEX_LEN_0F38DB_P_2 */
a5ff0eb2 9945 {
592a252b 9946 { VEX_W_TABLE (VEX_W_0F38DB_P_2) },
a5ff0eb2
L
9947 },
9948
592a252b 9949 /* VEX_LEN_0F38DC_P_2 */
a5ff0eb2 9950 {
592a252b 9951 { VEX_W_TABLE (VEX_W_0F38DC_P_2) },
a5ff0eb2
L
9952 },
9953
592a252b 9954 /* VEX_LEN_0F38DD_P_2 */
a5ff0eb2 9955 {
592a252b 9956 { VEX_W_TABLE (VEX_W_0F38DD_P_2) },
a5ff0eb2
L
9957 },
9958
592a252b 9959 /* VEX_LEN_0F38DE_P_2 */
a5ff0eb2 9960 {
592a252b 9961 { VEX_W_TABLE (VEX_W_0F38DE_P_2) },
a5ff0eb2
L
9962 },
9963
592a252b 9964 /* VEX_LEN_0F38DF_P_2 */
a5ff0eb2 9965 {
592a252b 9966 { VEX_W_TABLE (VEX_W_0F38DF_P_2) },
a5ff0eb2
L
9967 },
9968
f12dc422
L
9969 /* VEX_LEN_0F38F2_P_0 */
9970 {
9971 { "andnS", { Gdq, VexGdq, Edq } },
9972 },
9973
9974 /* VEX_LEN_0F38F3_R_1_P_0 */
9975 {
9976 { "blsrS", { VexGdq, Edq } },
9977 },
9978
9979 /* VEX_LEN_0F38F3_R_2_P_0 */
9980 {
9981 { "blsmskS", { VexGdq, Edq } },
9982 },
9983
9984 /* VEX_LEN_0F38F3_R_3_P_0 */
9985 {
9986 { "blsiS", { VexGdq, Edq } },
9987 },
9988
6c30d220
L
9989 /* VEX_LEN_0F38F5_P_0 */
9990 {
9991 { "bzhiS", { Gdq, Edq, VexGdq } },
9992 },
9993
9994 /* VEX_LEN_0F38F5_P_1 */
9995 {
9996 { "pextS", { Gdq, VexGdq, Edq } },
9997 },
9998
9999 /* VEX_LEN_0F38F5_P_3 */
10000 {
10001 { "pdepS", { Gdq, VexGdq, Edq } },
10002 },
10003
10004 /* VEX_LEN_0F38F6_P_3 */
10005 {
10006 { "mulxS", { Gdq, VexGdq, Edq } },
10007 },
10008
f12dc422
L
10009 /* VEX_LEN_0F38F7_P_0 */
10010 {
10011 { "bextrS", { Gdq, Edq, VexGdq } },
10012 },
10013
6c30d220
L
10014 /* VEX_LEN_0F38F7_P_1 */
10015 {
10016 { "sarxS", { Gdq, Edq, VexGdq } },
10017 },
10018
10019 /* VEX_LEN_0F38F7_P_2 */
10020 {
10021 { "shlxS", { Gdq, Edq, VexGdq } },
10022 },
10023
10024 /* VEX_LEN_0F38F7_P_3 */
10025 {
10026 { "shrxS", { Gdq, Edq, VexGdq } },
10027 },
10028
10029 /* VEX_LEN_0F3A00_P_2 */
10030 {
10031 { Bad_Opcode },
10032 { VEX_W_TABLE (VEX_W_0F3A00_P_2) },
10033 },
10034
10035 /* VEX_LEN_0F3A01_P_2 */
10036 {
10037 { Bad_Opcode },
10038 { VEX_W_TABLE (VEX_W_0F3A01_P_2) },
10039 },
10040
592a252b 10041 /* VEX_LEN_0F3A06_P_2 */
c0f3af97 10042 {
592d1631 10043 { Bad_Opcode },
592a252b 10044 { VEX_W_TABLE (VEX_W_0F3A06_P_2) },
c0f3af97
L
10045 },
10046
592a252b 10047 /* VEX_LEN_0F3A0A_P_2 */
c0f3af97 10048 {
592a252b
L
10049 { VEX_W_TABLE (VEX_W_0F3A0A_P_2) },
10050 { VEX_W_TABLE (VEX_W_0F3A0A_P_2) },
c0f3af97
L
10051 },
10052
592a252b 10053 /* VEX_LEN_0F3A0B_P_2 */
c0f3af97 10054 {
592a252b
L
10055 { VEX_W_TABLE (VEX_W_0F3A0B_P_2) },
10056 { VEX_W_TABLE (VEX_W_0F3A0B_P_2) },
c0f3af97
L
10057 },
10058
592a252b 10059 /* VEX_LEN_0F3A14_P_2 */
c0f3af97 10060 {
592a252b 10061 { VEX_W_TABLE (VEX_W_0F3A14_P_2) },
c0f3af97
L
10062 },
10063
592a252b 10064 /* VEX_LEN_0F3A15_P_2 */
c0f3af97 10065 {
592a252b 10066 { VEX_W_TABLE (VEX_W_0F3A15_P_2) },
c0f3af97
L
10067 },
10068
592a252b 10069 /* VEX_LEN_0F3A16_P_2 */
c0f3af97
L
10070 {
10071 { "vpextrK", { Edq, XM, Ib } },
c0f3af97
L
10072 },
10073
592a252b 10074 /* VEX_LEN_0F3A17_P_2 */
c0f3af97
L
10075 {
10076 { "vextractps", { Edqd, XM, Ib } },
c0f3af97
L
10077 },
10078
592a252b 10079 /* VEX_LEN_0F3A18_P_2 */
c0f3af97 10080 {
592d1631 10081 { Bad_Opcode },
592a252b 10082 { VEX_W_TABLE (VEX_W_0F3A18_P_2) },
c0f3af97
L
10083 },
10084
592a252b 10085 /* VEX_LEN_0F3A19_P_2 */
c0f3af97 10086 {
592d1631 10087 { Bad_Opcode },
592a252b 10088 { VEX_W_TABLE (VEX_W_0F3A19_P_2) },
c0f3af97
L
10089 },
10090
592a252b 10091 /* VEX_LEN_0F3A20_P_2 */
c0f3af97 10092 {
592a252b 10093 { VEX_W_TABLE (VEX_W_0F3A20_P_2) },
c0f3af97
L
10094 },
10095
592a252b 10096 /* VEX_LEN_0F3A21_P_2 */
c0f3af97 10097 {
592a252b 10098 { VEX_W_TABLE (VEX_W_0F3A21_P_2) },
c0f3af97
L
10099 },
10100
592a252b 10101 /* VEX_LEN_0F3A22_P_2 */
c0f3af97
L
10102 {
10103 { "vpinsrK", { XM, Vex128, Edq, Ib } },
c0f3af97
L
10104 },
10105
43234a1e
L
10106 /* VEX_LEN_0F3A30_P_2 */
10107 {
10108 { VEX_W_TABLE (VEX_W_0F3A30_P_2_LEN_0) },
10109 },
10110
1ba585e8
IT
10111 /* VEX_LEN_0F3A31_P_2 */
10112 {
10113 { VEX_W_TABLE (VEX_W_0F3A31_P_2_LEN_0) },
10114 },
10115
43234a1e
L
10116 /* VEX_LEN_0F3A32_P_2 */
10117 {
10118 { VEX_W_TABLE (VEX_W_0F3A32_P_2_LEN_0) },
10119 },
10120
1ba585e8
IT
10121 /* VEX_LEN_0F3A33_P_2 */
10122 {
10123 { VEX_W_TABLE (VEX_W_0F3A33_P_2_LEN_0) },
10124 },
10125
6c30d220 10126 /* VEX_LEN_0F3A38_P_2 */
c0f3af97 10127 {
6c30d220
L
10128 { Bad_Opcode },
10129 { VEX_W_TABLE (VEX_W_0F3A38_P_2) },
c0f3af97
L
10130 },
10131
6c30d220 10132 /* VEX_LEN_0F3A39_P_2 */
c0f3af97 10133 {
6c30d220
L
10134 { Bad_Opcode },
10135 { VEX_W_TABLE (VEX_W_0F3A39_P_2) },
10136 },
10137
10138 /* VEX_LEN_0F3A41_P_2 */
10139 {
10140 { VEX_W_TABLE (VEX_W_0F3A41_P_2) },
c0f3af97
L
10141 },
10142
592a252b 10143 /* VEX_LEN_0F3A44_P_2 */
ce2f5b3c 10144 {
592a252b 10145 { VEX_W_TABLE (VEX_W_0F3A44_P_2) },
ce2f5b3c
L
10146 },
10147
6c30d220 10148 /* VEX_LEN_0F3A46_P_2 */
c0f3af97 10149 {
6c30d220
L
10150 { Bad_Opcode },
10151 { VEX_W_TABLE (VEX_W_0F3A46_P_2) },
c0f3af97
L
10152 },
10153
592a252b 10154 /* VEX_LEN_0F3A60_P_2 */
c0f3af97 10155 {
592a252b 10156 { VEX_W_TABLE (VEX_W_0F3A60_P_2) },
c0f3af97
L
10157 },
10158
592a252b 10159 /* VEX_LEN_0F3A61_P_2 */
c0f3af97 10160 {
592a252b 10161 { VEX_W_TABLE (VEX_W_0F3A61_P_2) },
c0f3af97
L
10162 },
10163
592a252b 10164 /* VEX_LEN_0F3A62_P_2 */
c0f3af97 10165 {
592a252b 10166 { VEX_W_TABLE (VEX_W_0F3A62_P_2) },
c0f3af97
L
10167 },
10168
592a252b 10169 /* VEX_LEN_0F3A63_P_2 */
c0f3af97 10170 {
592a252b 10171 { VEX_W_TABLE (VEX_W_0F3A63_P_2) },
c0f3af97
L
10172 },
10173
592a252b 10174 /* VEX_LEN_0F3A6A_P_2 */
922d8de8 10175 {
206c2556 10176 { "vfmaddss", { XMVexW, Vex128, EXdVexW, EXdVexW, VexI4 } },
922d8de8
DR
10177 },
10178
592a252b 10179 /* VEX_LEN_0F3A6B_P_2 */
922d8de8 10180 {
206c2556 10181 { "vfmaddsd", { XMVexW, Vex128, EXqVexW, EXqVexW, VexI4 } },
922d8de8
DR
10182 },
10183
592a252b 10184 /* VEX_LEN_0F3A6E_P_2 */
922d8de8 10185 {
206c2556 10186 { "vfmsubss", { XMVexW, Vex128, EXdVexW, EXdVexW, VexI4 } },
922d8de8
DR
10187 },
10188
592a252b 10189 /* VEX_LEN_0F3A6F_P_2 */
922d8de8 10190 {
206c2556 10191 { "vfmsubsd", { XMVexW, Vex128, EXqVexW, EXqVexW, VexI4 } },
922d8de8
DR
10192 },
10193
592a252b 10194 /* VEX_LEN_0F3A7A_P_2 */
922d8de8 10195 {
206c2556 10196 { "vfnmaddss", { XMVexW, Vex128, EXdVexW, EXdVexW, VexI4 } },
922d8de8
DR
10197 },
10198
592a252b 10199 /* VEX_LEN_0F3A7B_P_2 */
922d8de8 10200 {
206c2556 10201 { "vfnmaddsd", { XMVexW, Vex128, EXqVexW, EXqVexW, VexI4 } },
922d8de8
DR
10202 },
10203
592a252b 10204 /* VEX_LEN_0F3A7E_P_2 */
922d8de8 10205 {
206c2556 10206 { "vfnmsubss", { XMVexW, Vex128, EXdVexW, EXdVexW, VexI4 } },
922d8de8
DR
10207 },
10208
592a252b 10209 /* VEX_LEN_0F3A7F_P_2 */
922d8de8 10210 {
206c2556 10211 { "vfnmsubsd", { XMVexW, Vex128, EXqVexW, EXqVexW, VexI4 } },
922d8de8
DR
10212 },
10213
592a252b 10214 /* VEX_LEN_0F3ADF_P_2 */
a5ff0eb2 10215 {
592a252b 10216 { VEX_W_TABLE (VEX_W_0F3ADF_P_2) },
a5ff0eb2 10217 },
4c807e72 10218
6c30d220
L
10219 /* VEX_LEN_0F3AF0_P_3 */
10220 {
182ae480 10221 { "rorxS", { Gdq, Edq, Ib } },
6c30d220
L
10222 },
10223
ff688e1f
L
10224 /* VEX_LEN_0FXOP_08_CC */
10225 {
10226 { "vpcomb", { XM, Vex128, EXx, Ib } },
10227 },
10228
10229 /* VEX_LEN_0FXOP_08_CD */
10230 {
10231 { "vpcomw", { XM, Vex128, EXx, Ib } },
10232 },
10233
10234 /* VEX_LEN_0FXOP_08_CE */
10235 {
10236 { "vpcomd", { XM, Vex128, EXx, Ib } },
10237 },
10238
10239 /* VEX_LEN_0FXOP_08_CF */
10240 {
10241 { "vpcomq", { XM, Vex128, EXx, Ib } },
10242 },
10243
10244 /* VEX_LEN_0FXOP_08_EC */
10245 {
10246 { "vpcomub", { XM, Vex128, EXx, Ib } },
10247 },
10248
10249 /* VEX_LEN_0FXOP_08_ED */
10250 {
10251 { "vpcomuw", { XM, Vex128, EXx, Ib } },
10252 },
10253
10254 /* VEX_LEN_0FXOP_08_EE */
10255 {
10256 { "vpcomud", { XM, Vex128, EXx, Ib } },
10257 },
10258
10259 /* VEX_LEN_0FXOP_08_EF */
10260 {
10261 { "vpcomuq", { XM, Vex128, EXx, Ib } },
10262 },
10263
592a252b 10264 /* VEX_LEN_0FXOP_09_80 */
5dd85c99 10265 {
4c807e72
L
10266 { "vfrczps", { XM, EXxmm } },
10267 { "vfrczps", { XM, EXymmq } },
5dd85c99 10268 },
4c807e72 10269
592a252b 10270 /* VEX_LEN_0FXOP_09_81 */
5dd85c99 10271 {
4c807e72
L
10272 { "vfrczpd", { XM, EXxmm } },
10273 { "vfrczpd", { XM, EXymmq } },
5dd85c99 10274 },
331d2d0d
L
10275};
10276
9e30b8e0 10277static const struct dis386 vex_w_table[][2] = {
b844680a 10278 {
592a252b 10279 /* VEX_W_0F10_P_0 */
9e30b8e0 10280 { "vmovups", { XM, EXx } },
d8faab4e
L
10281 },
10282 {
592a252b 10283 /* VEX_W_0F10_P_1 */
539f890d 10284 { "vmovss", { XMVexScalar, VexScalar, EXdScalar } },
d8faab4e
L
10285 },
10286 {
592a252b 10287 /* VEX_W_0F10_P_2 */
9e30b8e0 10288 { "vmovupd", { XM, EXx } },
d8faab4e
L
10289 },
10290 {
592a252b 10291 /* VEX_W_0F10_P_3 */
539f890d 10292 { "vmovsd", { XMVexScalar, VexScalar, EXqScalar } },
d8faab4e
L
10293 },
10294 {
592a252b 10295 /* VEX_W_0F11_P_0 */
9e30b8e0 10296 { "vmovups", { EXxS, XM } },
d8faab4e
L
10297 },
10298 {
592a252b 10299 /* VEX_W_0F11_P_1 */
539f890d 10300 { "vmovss", { EXdVexScalarS, VexScalar, XMScalar } },
b844680a
L
10301 },
10302 {
592a252b 10303 /* VEX_W_0F11_P_2 */
9e30b8e0 10304 { "vmovupd", { EXxS, XM } },
b844680a
L
10305 },
10306 {
592a252b 10307 /* VEX_W_0F11_P_3 */
539f890d 10308 { "vmovsd", { EXqVexScalarS, VexScalar, XMScalar } },
d8faab4e
L
10309 },
10310 {
592a252b 10311 /* VEX_W_0F12_P_0_M_0 */
9e30b8e0 10312 { "vmovlps", { XM, Vex128, EXq } },
b844680a
L
10313 },
10314 {
592a252b 10315 /* VEX_W_0F12_P_0_M_1 */
9e30b8e0 10316 { "vmovhlps", { XM, Vex128, EXq } },
b844680a
L
10317 },
10318 {
592a252b 10319 /* VEX_W_0F12_P_1 */
9e30b8e0 10320 { "vmovsldup", { XM, EXx } },
b844680a
L
10321 },
10322 {
592a252b 10323 /* VEX_W_0F12_P_2 */
9e30b8e0 10324 { "vmovlpd", { XM, Vex128, EXq } },
b844680a
L
10325 },
10326 {
592a252b 10327 /* VEX_W_0F12_P_3 */
9e30b8e0 10328 { "vmovddup", { XM, EXymmq } },
b844680a
L
10329 },
10330 {
592a252b 10331 /* VEX_W_0F13_M_0 */
9e30b8e0 10332 { "vmovlpX", { EXq, XM } },
b844680a
L
10333 },
10334 {
592a252b 10335 /* VEX_W_0F14 */
9e30b8e0 10336 { "vunpcklpX", { XM, Vex, EXx } },
b844680a
L
10337 },
10338 {
592a252b 10339 /* VEX_W_0F15 */
9e30b8e0 10340 { "vunpckhpX", { XM, Vex, EXx } },
b844680a
L
10341 },
10342 {
592a252b 10343 /* VEX_W_0F16_P_0_M_0 */
9e30b8e0 10344 { "vmovhps", { XM, Vex128, EXq } },
9e30b8e0
L
10345 },
10346 {
592a252b 10347 /* VEX_W_0F16_P_0_M_1 */
9e30b8e0 10348 { "vmovlhps", { XM, Vex128, EXq } },
9e30b8e0
L
10349 },
10350 {
592a252b 10351 /* VEX_W_0F16_P_1 */
9e30b8e0 10352 { "vmovshdup", { XM, EXx } },
9e30b8e0
L
10353 },
10354 {
592a252b 10355 /* VEX_W_0F16_P_2 */
9e30b8e0 10356 { "vmovhpd", { XM, Vex128, EXq } },
9e30b8e0
L
10357 },
10358 {
592a252b 10359 /* VEX_W_0F17_M_0 */
9e30b8e0 10360 { "vmovhpX", { EXq, XM } },
9e30b8e0
L
10361 },
10362 {
592a252b 10363 /* VEX_W_0F28 */
9e30b8e0 10364 { "vmovapX", { XM, EXx } },
9e30b8e0
L
10365 },
10366 {
592a252b 10367 /* VEX_W_0F29 */
9e30b8e0 10368 { "vmovapX", { EXxS, XM } },
9e30b8e0
L
10369 },
10370 {
592a252b 10371 /* VEX_W_0F2B_M_0 */
9e30b8e0 10372 { "vmovntpX", { Mx, XM } },
9e30b8e0
L
10373 },
10374 {
592a252b 10375 /* VEX_W_0F2E_P_0 */
7bb15c6f 10376 { "vucomiss", { XMScalar, EXdScalar } },
9e30b8e0
L
10377 },
10378 {
592a252b 10379 /* VEX_W_0F2E_P_2 */
7bb15c6f 10380 { "vucomisd", { XMScalar, EXqScalar } },
9e30b8e0
L
10381 },
10382 {
592a252b 10383 /* VEX_W_0F2F_P_0 */
539f890d 10384 { "vcomiss", { XMScalar, EXdScalar } },
9e30b8e0
L
10385 },
10386 {
592a252b 10387 /* VEX_W_0F2F_P_2 */
539f890d 10388 { "vcomisd", { XMScalar, EXqScalar } },
9e30b8e0 10389 },
43234a1e
L
10390 {
10391 /* VEX_W_0F41_P_0_LEN_1 */
10392 { "kandw", { MaskG, MaskVex, MaskR } },
1ba585e8
IT
10393 { "kandq", { MaskG, MaskVex, MaskR } },
10394 },
10395 {
10396 /* VEX_W_0F41_P_2_LEN_1 */
90a915bf 10397 { "kandb", { MaskG, MaskVex, MaskR } },
1ba585e8 10398 { "kandd", { MaskG, MaskVex, MaskR } },
43234a1e
L
10399 },
10400 {
10401 /* VEX_W_0F42_P_0_LEN_1 */
10402 { "kandnw", { MaskG, MaskVex, MaskR } },
1ba585e8
IT
10403 { "kandnq", { MaskG, MaskVex, MaskR } },
10404 },
10405 {
10406 /* VEX_W_0F42_P_2_LEN_1 */
90a915bf 10407 { "kandnb", { MaskG, MaskVex, MaskR } },
1ba585e8 10408 { "kandnd", { MaskG, MaskVex, MaskR } },
43234a1e
L
10409 },
10410 {
10411 /* VEX_W_0F44_P_0_LEN_0 */
10412 { "knotw", { MaskG, MaskR } },
1ba585e8
IT
10413 { "knotq", { MaskG, MaskR } },
10414 },
10415 {
10416 /* VEX_W_0F44_P_2_LEN_0 */
90a915bf 10417 { "knotb", { MaskG, MaskR } },
1ba585e8 10418 { "knotd", { MaskG, MaskR } },
43234a1e
L
10419 },
10420 {
10421 /* VEX_W_0F45_P_0_LEN_1 */
10422 { "korw", { MaskG, MaskVex, MaskR } },
1ba585e8
IT
10423 { "korq", { MaskG, MaskVex, MaskR } },
10424 },
10425 {
10426 /* VEX_W_0F45_P_2_LEN_1 */
90a915bf 10427 { "korb", { MaskG, MaskVex, MaskR } },
1ba585e8 10428 { "kord", { MaskG, MaskVex, MaskR } },
43234a1e
L
10429 },
10430 {
10431 /* VEX_W_0F46_P_0_LEN_1 */
10432 { "kxnorw", { MaskG, MaskVex, MaskR } },
1ba585e8
IT
10433 { "kxnorq", { MaskG, MaskVex, MaskR } },
10434 },
10435 {
10436 /* VEX_W_0F46_P_2_LEN_1 */
90a915bf 10437 { "kxnorb", { MaskG, MaskVex, MaskR } },
1ba585e8 10438 { "kxnord", { MaskG, MaskVex, MaskR } },
43234a1e
L
10439 },
10440 {
10441 /* VEX_W_0F47_P_0_LEN_1 */
10442 { "kxorw", { MaskG, MaskVex, MaskR } },
1ba585e8
IT
10443 { "kxorq", { MaskG, MaskVex, MaskR } },
10444 },
10445 {
10446 /* VEX_W_0F47_P_2_LEN_1 */
90a915bf 10447 { "kxorb", { MaskG, MaskVex, MaskR } },
1ba585e8
IT
10448 { "kxord", { MaskG, MaskVex, MaskR } },
10449 },
10450 {
10451 /* VEX_W_0F4A_P_0_LEN_1 */
10452 { "kaddw", { MaskG, MaskVex, MaskR } },
10453 { "kaddq", { MaskG, MaskVex, MaskR } },
10454 },
10455 {
10456 /* VEX_W_0F4A_P_2_LEN_1 */
90a915bf 10457 { "kaddb", { MaskG, MaskVex, MaskR } },
1ba585e8
IT
10458 { "kaddd", { MaskG, MaskVex, MaskR } },
10459 },
10460 {
10461 /* VEX_W_0F4B_P_0_LEN_1 */
10462 { "kunpckwd", { MaskG, MaskVex, MaskR } },
10463 { "kunpckdq", { MaskG, MaskVex, MaskR } },
43234a1e
L
10464 },
10465 {
10466 /* VEX_W_0F4B_P_2_LEN_1 */
10467 { "kunpckbw", { MaskG, MaskVex, MaskR } },
10468 },
9e30b8e0 10469 {
592a252b 10470 /* VEX_W_0F50_M_0 */
9e30b8e0 10471 { "vmovmskpX", { Gdq, XS } },
9e30b8e0
L
10472 },
10473 {
592a252b 10474 /* VEX_W_0F51_P_0 */
9e30b8e0 10475 { "vsqrtps", { XM, EXx } },
9e30b8e0
L
10476 },
10477 {
592a252b 10478 /* VEX_W_0F51_P_1 */
539f890d 10479 { "vsqrtss", { XMScalar, VexScalar, EXdScalar } },
9e30b8e0
L
10480 },
10481 {
592a252b 10482 /* VEX_W_0F51_P_2 */
9e30b8e0 10483 { "vsqrtpd", { XM, EXx } },
9e30b8e0
L
10484 },
10485 {
592a252b 10486 /* VEX_W_0F51_P_3 */
539f890d 10487 { "vsqrtsd", { XMScalar, VexScalar, EXqScalar } },
9e30b8e0
L
10488 },
10489 {
592a252b 10490 /* VEX_W_0F52_P_0 */
9e30b8e0 10491 { "vrsqrtps", { XM, EXx } },
9e30b8e0
L
10492 },
10493 {
592a252b 10494 /* VEX_W_0F52_P_1 */
539f890d 10495 { "vrsqrtss", { XMScalar, VexScalar, EXdScalar } },
9e30b8e0
L
10496 },
10497 {
592a252b 10498 /* VEX_W_0F53_P_0 */
9e30b8e0 10499 { "vrcpps", { XM, EXx } },
9e30b8e0
L
10500 },
10501 {
592a252b 10502 /* VEX_W_0F53_P_1 */
539f890d 10503 { "vrcpss", { XMScalar, VexScalar, EXdScalar } },
9e30b8e0
L
10504 },
10505 {
592a252b 10506 /* VEX_W_0F58_P_0 */
9e30b8e0 10507 { "vaddps", { XM, Vex, EXx } },
9e30b8e0
L
10508 },
10509 {
592a252b 10510 /* VEX_W_0F58_P_1 */
539f890d 10511 { "vaddss", { XMScalar, VexScalar, EXdScalar } },
9e30b8e0
L
10512 },
10513 {
592a252b 10514 /* VEX_W_0F58_P_2 */
9e30b8e0 10515 { "vaddpd", { XM, Vex, EXx } },
9e30b8e0
L
10516 },
10517 {
592a252b 10518 /* VEX_W_0F58_P_3 */
539f890d 10519 { "vaddsd", { XMScalar, VexScalar, EXqScalar } },
9e30b8e0
L
10520 },
10521 {
592a252b 10522 /* VEX_W_0F59_P_0 */
9e30b8e0 10523 { "vmulps", { XM, Vex, EXx } },
9e30b8e0
L
10524 },
10525 {
592a252b 10526 /* VEX_W_0F59_P_1 */
539f890d 10527 { "vmulss", { XMScalar, VexScalar, EXdScalar } },
9e30b8e0
L
10528 },
10529 {
592a252b 10530 /* VEX_W_0F59_P_2 */
9e30b8e0 10531 { "vmulpd", { XM, Vex, EXx } },
9e30b8e0
L
10532 },
10533 {
592a252b 10534 /* VEX_W_0F59_P_3 */
539f890d 10535 { "vmulsd", { XMScalar, VexScalar, EXqScalar } },
9e30b8e0
L
10536 },
10537 {
592a252b 10538 /* VEX_W_0F5A_P_0 */
9e30b8e0 10539 { "vcvtps2pd", { XM, EXxmmq } },
9e30b8e0
L
10540 },
10541 {
592a252b 10542 /* VEX_W_0F5A_P_1 */
539f890d 10543 { "vcvtss2sd", { XMScalar, VexScalar, EXdScalar } },
9e30b8e0
L
10544 },
10545 {
592a252b 10546 /* VEX_W_0F5A_P_3 */
539f890d 10547 { "vcvtsd2ss", { XMScalar, VexScalar, EXqScalar } },
9e30b8e0
L
10548 },
10549 {
592a252b 10550 /* VEX_W_0F5B_P_0 */
9e30b8e0 10551 { "vcvtdq2ps", { XM, EXx } },
9e30b8e0
L
10552 },
10553 {
592a252b 10554 /* VEX_W_0F5B_P_1 */
9e30b8e0 10555 { "vcvttps2dq", { XM, EXx } },
9e30b8e0
L
10556 },
10557 {
592a252b 10558 /* VEX_W_0F5B_P_2 */
9e30b8e0 10559 { "vcvtps2dq", { XM, EXx } },
9e30b8e0
L
10560 },
10561 {
592a252b 10562 /* VEX_W_0F5C_P_0 */
9e30b8e0 10563 { "vsubps", { XM, Vex, EXx } },
9e30b8e0
L
10564 },
10565 {
592a252b 10566 /* VEX_W_0F5C_P_1 */
539f890d 10567 { "vsubss", { XMScalar, VexScalar, EXdScalar } },
9e30b8e0
L
10568 },
10569 {
592a252b 10570 /* VEX_W_0F5C_P_2 */
9e30b8e0 10571 { "vsubpd", { XM, Vex, EXx } },
9e30b8e0
L
10572 },
10573 {
592a252b 10574 /* VEX_W_0F5C_P_3 */
539f890d 10575 { "vsubsd", { XMScalar, VexScalar, EXqScalar } },
9e30b8e0
L
10576 },
10577 {
592a252b 10578 /* VEX_W_0F5D_P_0 */
9e30b8e0 10579 { "vminps", { XM, Vex, EXx } },
9e30b8e0
L
10580 },
10581 {
592a252b 10582 /* VEX_W_0F5D_P_1 */
539f890d 10583 { "vminss", { XMScalar, VexScalar, EXdScalar } },
9e30b8e0
L
10584 },
10585 {
592a252b 10586 /* VEX_W_0F5D_P_2 */
9e30b8e0 10587 { "vminpd", { XM, Vex, EXx } },
9e30b8e0
L
10588 },
10589 {
592a252b 10590 /* VEX_W_0F5D_P_3 */
539f890d 10591 { "vminsd", { XMScalar, VexScalar, EXqScalar } },
9e30b8e0
L
10592 },
10593 {
592a252b 10594 /* VEX_W_0F5E_P_0 */
9e30b8e0 10595 { "vdivps", { XM, Vex, EXx } },
9e30b8e0
L
10596 },
10597 {
592a252b 10598 /* VEX_W_0F5E_P_1 */
539f890d 10599 { "vdivss", { XMScalar, VexScalar, EXdScalar } },
9e30b8e0
L
10600 },
10601 {
592a252b 10602 /* VEX_W_0F5E_P_2 */
9e30b8e0 10603 { "vdivpd", { XM, Vex, EXx } },
9e30b8e0
L
10604 },
10605 {
592a252b 10606 /* VEX_W_0F5E_P_3 */
539f890d 10607 { "vdivsd", { XMScalar, VexScalar, EXqScalar } },
9e30b8e0
L
10608 },
10609 {
592a252b 10610 /* VEX_W_0F5F_P_0 */
9e30b8e0 10611 { "vmaxps", { XM, Vex, EXx } },
9e30b8e0
L
10612 },
10613 {
592a252b 10614 /* VEX_W_0F5F_P_1 */
539f890d 10615 { "vmaxss", { XMScalar, VexScalar, EXdScalar } },
9e30b8e0
L
10616 },
10617 {
592a252b 10618 /* VEX_W_0F5F_P_2 */
9e30b8e0 10619 { "vmaxpd", { XM, Vex, EXx } },
9e30b8e0
L
10620 },
10621 {
592a252b 10622 /* VEX_W_0F5F_P_3 */
539f890d 10623 { "vmaxsd", { XMScalar, VexScalar, EXqScalar } },
9e30b8e0
L
10624 },
10625 {
592a252b 10626 /* VEX_W_0F60_P_2 */
6c30d220 10627 { "vpunpcklbw", { XM, Vex, EXx } },
9e30b8e0
L
10628 },
10629 {
592a252b 10630 /* VEX_W_0F61_P_2 */
6c30d220 10631 { "vpunpcklwd", { XM, Vex, EXx } },
9e30b8e0
L
10632 },
10633 {
592a252b 10634 /* VEX_W_0F62_P_2 */
6c30d220 10635 { "vpunpckldq", { XM, Vex, EXx } },
9e30b8e0
L
10636 },
10637 {
592a252b 10638 /* VEX_W_0F63_P_2 */
6c30d220 10639 { "vpacksswb", { XM, Vex, EXx } },
9e30b8e0
L
10640 },
10641 {
592a252b 10642 /* VEX_W_0F64_P_2 */
6c30d220 10643 { "vpcmpgtb", { XM, Vex, EXx } },
9e30b8e0
L
10644 },
10645 {
592a252b 10646 /* VEX_W_0F65_P_2 */
6c30d220 10647 { "vpcmpgtw", { XM, Vex, EXx } },
9e30b8e0
L
10648 },
10649 {
592a252b 10650 /* VEX_W_0F66_P_2 */
6c30d220 10651 { "vpcmpgtd", { XM, Vex, EXx } },
9e30b8e0
L
10652 },
10653 {
592a252b 10654 /* VEX_W_0F67_P_2 */
6c30d220 10655 { "vpackuswb", { XM, Vex, EXx } },
9e30b8e0
L
10656 },
10657 {
592a252b 10658 /* VEX_W_0F68_P_2 */
6c30d220 10659 { "vpunpckhbw", { XM, Vex, EXx } },
9e30b8e0
L
10660 },
10661 {
592a252b 10662 /* VEX_W_0F69_P_2 */
6c30d220 10663 { "vpunpckhwd", { XM, Vex, EXx } },
9e30b8e0
L
10664 },
10665 {
592a252b 10666 /* VEX_W_0F6A_P_2 */
6c30d220 10667 { "vpunpckhdq", { XM, Vex, EXx } },
9e30b8e0
L
10668 },
10669 {
592a252b 10670 /* VEX_W_0F6B_P_2 */
6c30d220 10671 { "vpackssdw", { XM, Vex, EXx } },
9e30b8e0
L
10672 },
10673 {
592a252b 10674 /* VEX_W_0F6C_P_2 */
6c30d220 10675 { "vpunpcklqdq", { XM, Vex, EXx } },
9e30b8e0
L
10676 },
10677 {
592a252b 10678 /* VEX_W_0F6D_P_2 */
6c30d220 10679 { "vpunpckhqdq", { XM, Vex, EXx } },
9e30b8e0
L
10680 },
10681 {
592a252b 10682 /* VEX_W_0F6F_P_1 */
efdb52b7 10683 { "vmovdqu", { XM, EXx } },
9e30b8e0
L
10684 },
10685 {
592a252b 10686 /* VEX_W_0F6F_P_2 */
efdb52b7 10687 { "vmovdqa", { XM, EXx } },
9e30b8e0
L
10688 },
10689 {
592a252b 10690 /* VEX_W_0F70_P_1 */
9e30b8e0 10691 { "vpshufhw", { XM, EXx, Ib } },
9e30b8e0
L
10692 },
10693 {
592a252b 10694 /* VEX_W_0F70_P_2 */
9e30b8e0 10695 { "vpshufd", { XM, EXx, Ib } },
9e30b8e0
L
10696 },
10697 {
592a252b 10698 /* VEX_W_0F70_P_3 */
9e30b8e0 10699 { "vpshuflw", { XM, EXx, Ib } },
9e30b8e0
L
10700 },
10701 {
592a252b 10702 /* VEX_W_0F71_R_2_P_2 */
6c30d220 10703 { "vpsrlw", { Vex, XS, Ib } },
9e30b8e0
L
10704 },
10705 {
592a252b 10706 /* VEX_W_0F71_R_4_P_2 */
6c30d220 10707 { "vpsraw", { Vex, XS, Ib } },
9e30b8e0
L
10708 },
10709 {
592a252b 10710 /* VEX_W_0F71_R_6_P_2 */
6c30d220 10711 { "vpsllw", { Vex, XS, Ib } },
9e30b8e0
L
10712 },
10713 {
592a252b 10714 /* VEX_W_0F72_R_2_P_2 */
6c30d220 10715 { "vpsrld", { Vex, XS, Ib } },
9e30b8e0
L
10716 },
10717 {
592a252b 10718 /* VEX_W_0F72_R_4_P_2 */
6c30d220 10719 { "vpsrad", { Vex, XS, Ib } },
9e30b8e0
L
10720 },
10721 {
592a252b 10722 /* VEX_W_0F72_R_6_P_2 */
6c30d220 10723 { "vpslld", { Vex, XS, Ib } },
9e30b8e0
L
10724 },
10725 {
592a252b 10726 /* VEX_W_0F73_R_2_P_2 */
6c30d220 10727 { "vpsrlq", { Vex, XS, Ib } },
9e30b8e0
L
10728 },
10729 {
592a252b 10730 /* VEX_W_0F73_R_3_P_2 */
6c30d220 10731 { "vpsrldq", { Vex, XS, Ib } },
9e30b8e0
L
10732 },
10733 {
592a252b 10734 /* VEX_W_0F73_R_6_P_2 */
6c30d220 10735 { "vpsllq", { Vex, XS, Ib } },
9e30b8e0
L
10736 },
10737 {
592a252b 10738 /* VEX_W_0F73_R_7_P_2 */
6c30d220 10739 { "vpslldq", { Vex, XS, Ib } },
9e30b8e0
L
10740 },
10741 {
592a252b 10742 /* VEX_W_0F74_P_2 */
6c30d220 10743 { "vpcmpeqb", { XM, Vex, EXx } },
9e30b8e0
L
10744 },
10745 {
592a252b 10746 /* VEX_W_0F75_P_2 */
6c30d220 10747 { "vpcmpeqw", { XM, Vex, EXx } },
9e30b8e0
L
10748 },
10749 {
592a252b 10750 /* VEX_W_0F76_P_2 */
6c30d220 10751 { "vpcmpeqd", { XM, Vex, EXx } },
9e30b8e0
L
10752 },
10753 {
592a252b 10754 /* VEX_W_0F77_P_0 */
9e30b8e0 10755 { "", { VZERO } },
9e30b8e0
L
10756 },
10757 {
592a252b 10758 /* VEX_W_0F7C_P_2 */
9e30b8e0 10759 { "vhaddpd", { XM, Vex, EXx } },
9e30b8e0
L
10760 },
10761 {
592a252b 10762 /* VEX_W_0F7C_P_3 */
9e30b8e0 10763 { "vhaddps", { XM, Vex, EXx } },
9e30b8e0
L
10764 },
10765 {
592a252b 10766 /* VEX_W_0F7D_P_2 */
9e30b8e0 10767 { "vhsubpd", { XM, Vex, EXx } },
9e30b8e0
L
10768 },
10769 {
592a252b 10770 /* VEX_W_0F7D_P_3 */
9e30b8e0 10771 { "vhsubps", { XM, Vex, EXx } },
9e30b8e0
L
10772 },
10773 {
592a252b 10774 /* VEX_W_0F7E_P_1 */
539f890d 10775 { "vmovq", { XMScalar, EXqScalar } },
9e30b8e0
L
10776 },
10777 {
592a252b 10778 /* VEX_W_0F7F_P_1 */
9e30b8e0 10779 { "vmovdqu", { EXxS, XM } },
9e30b8e0
L
10780 },
10781 {
592a252b 10782 /* VEX_W_0F7F_P_2 */
9e30b8e0 10783 { "vmovdqa", { EXxS, XM } },
9e30b8e0 10784 },
43234a1e
L
10785 {
10786 /* VEX_W_0F90_P_0_LEN_0 */
10787 { "kmovw", { MaskG, MaskE } },
1ba585e8
IT
10788 { "kmovq", { MaskG, MaskE } },
10789 },
10790 {
10791 /* VEX_W_0F90_P_2_LEN_0 */
90a915bf 10792 { "kmovb", { MaskG, MaskBDE } },
1ba585e8 10793 { "kmovd", { MaskG, MaskBDE } },
43234a1e
L
10794 },
10795 {
10796 /* VEX_W_0F91_P_0_LEN_0 */
10797 { "kmovw", { Ew, MaskG } },
1ba585e8
IT
10798 { "kmovq", { Eq, MaskG } },
10799 },
10800 {
10801 /* VEX_W_0F91_P_2_LEN_0 */
90a915bf 10802 { "kmovb", { Eb, MaskG } },
1ba585e8 10803 { "kmovd", { Ed, MaskG } },
43234a1e
L
10804 },
10805 {
10806 /* VEX_W_0F92_P_0_LEN_0 */
10807 { "kmovw", { MaskG, Rdq } },
10808 },
90a915bf
IT
10809 {
10810 /* VEX_W_0F92_P_2_LEN_0 */
10811 { "kmovb", { MaskG, Rdq } },
10812 },
1ba585e8
IT
10813 {
10814 /* VEX_W_0F92_P_3_LEN_0 */
10815 { "kmovd", { MaskG, Rdq } },
10816 { "kmovq", { MaskG, Rdq } },
10817 },
43234a1e
L
10818 {
10819 /* VEX_W_0F93_P_0_LEN_0 */
10820 { "kmovw", { Gdq, MaskR } },
10821 },
90a915bf
IT
10822 {
10823 /* VEX_W_0F93_P_2_LEN_0 */
10824 { "kmovb", { Gdq, MaskR } },
10825 },
1ba585e8
IT
10826 {
10827 /* VEX_W_0F93_P_3_LEN_0 */
10828 { "kmovd", { Gdq, MaskR } },
10829 { "kmovq", { Gdq, MaskR } },
10830 },
43234a1e
L
10831 {
10832 /* VEX_W_0F98_P_0_LEN_0 */
10833 { "kortestw", { MaskG, MaskR } },
1ba585e8
IT
10834 { "kortestq", { MaskG, MaskR } },
10835 },
10836 {
10837 /* VEX_W_0F98_P_2_LEN_0 */
10838 { "kortestb", { MaskG, MaskR } },
10839 { "kortestd", { MaskG, MaskR } },
10840 },
10841 {
10842 /* VEX_W_0F99_P_0_LEN_0 */
10843 { "ktestw", { MaskG, MaskR } },
10844 { "ktestq", { MaskG, MaskR } },
10845 },
10846 {
10847 /* VEX_W_0F99_P_2_LEN_0 */
90a915bf 10848 { "ktestb", { MaskG, MaskR } },
1ba585e8 10849 { "ktestd", { MaskG, MaskR } },
43234a1e 10850 },
9e30b8e0 10851 {
592a252b 10852 /* VEX_W_0FAE_R_2_M_0 */
9e30b8e0 10853 { "vldmxcsr", { Md } },
9e30b8e0
L
10854 },
10855 {
592a252b 10856 /* VEX_W_0FAE_R_3_M_0 */
9e30b8e0 10857 { "vstmxcsr", { Md } },
9e30b8e0
L
10858 },
10859 {
592a252b 10860 /* VEX_W_0FC2_P_0 */
9e30b8e0 10861 { "vcmpps", { XM, Vex, EXx, VCMP } },
9e30b8e0
L
10862 },
10863 {
592a252b 10864 /* VEX_W_0FC2_P_1 */
539f890d 10865 { "vcmpss", { XMScalar, VexScalar, EXdScalar, VCMP } },
9e30b8e0
L
10866 },
10867 {
592a252b 10868 /* VEX_W_0FC2_P_2 */
9e30b8e0 10869 { "vcmppd", { XM, Vex, EXx, VCMP } },
9e30b8e0
L
10870 },
10871 {
592a252b 10872 /* VEX_W_0FC2_P_3 */
539f890d 10873 { "vcmpsd", { XMScalar, VexScalar, EXqScalar, VCMP } },
9e30b8e0
L
10874 },
10875 {
592a252b 10876 /* VEX_W_0FC4_P_2 */
9e30b8e0 10877 { "vpinsrw", { XM, Vex128, Edqw, Ib } },
9e30b8e0
L
10878 },
10879 {
592a252b 10880 /* VEX_W_0FC5_P_2 */
9e30b8e0 10881 { "vpextrw", { Gdq, XS, Ib } },
9e30b8e0
L
10882 },
10883 {
592a252b 10884 /* VEX_W_0FD0_P_2 */
9e30b8e0 10885 { "vaddsubpd", { XM, Vex, EXx } },
9e30b8e0
L
10886 },
10887 {
592a252b 10888 /* VEX_W_0FD0_P_3 */
9e30b8e0 10889 { "vaddsubps", { XM, Vex, EXx } },
9e30b8e0
L
10890 },
10891 {
592a252b 10892 /* VEX_W_0FD1_P_2 */
6c30d220 10893 { "vpsrlw", { XM, Vex, EXxmm } },
9e30b8e0
L
10894 },
10895 {
592a252b 10896 /* VEX_W_0FD2_P_2 */
6c30d220 10897 { "vpsrld", { XM, Vex, EXxmm } },
9e30b8e0
L
10898 },
10899 {
592a252b 10900 /* VEX_W_0FD3_P_2 */
6c30d220 10901 { "vpsrlq", { XM, Vex, EXxmm } },
9e30b8e0
L
10902 },
10903 {
592a252b 10904 /* VEX_W_0FD4_P_2 */
6c30d220 10905 { "vpaddq", { XM, Vex, EXx } },
9e30b8e0
L
10906 },
10907 {
592a252b 10908 /* VEX_W_0FD5_P_2 */
6c30d220 10909 { "vpmullw", { XM, Vex, EXx } },
9e30b8e0
L
10910 },
10911 {
592a252b 10912 /* VEX_W_0FD6_P_2 */
539f890d 10913 { "vmovq", { EXqScalarS, XMScalar } },
9e30b8e0
L
10914 },
10915 {
592a252b 10916 /* VEX_W_0FD7_P_2_M_1 */
9e30b8e0 10917 { "vpmovmskb", { Gdq, XS } },
9e30b8e0
L
10918 },
10919 {
592a252b 10920 /* VEX_W_0FD8_P_2 */
6c30d220 10921 { "vpsubusb", { XM, Vex, EXx } },
9e30b8e0
L
10922 },
10923 {
592a252b 10924 /* VEX_W_0FD9_P_2 */
6c30d220 10925 { "vpsubusw", { XM, Vex, EXx } },
9e30b8e0
L
10926 },
10927 {
592a252b 10928 /* VEX_W_0FDA_P_2 */
6c30d220 10929 { "vpminub", { XM, Vex, EXx } },
9e30b8e0
L
10930 },
10931 {
592a252b 10932 /* VEX_W_0FDB_P_2 */
6c30d220 10933 { "vpand", { XM, Vex, EXx } },
9e30b8e0
L
10934 },
10935 {
592a252b 10936 /* VEX_W_0FDC_P_2 */
6c30d220 10937 { "vpaddusb", { XM, Vex, EXx } },
9e30b8e0
L
10938 },
10939 {
592a252b 10940 /* VEX_W_0FDD_P_2 */
6c30d220 10941 { "vpaddusw", { XM, Vex, EXx } },
9e30b8e0
L
10942 },
10943 {
592a252b 10944 /* VEX_W_0FDE_P_2 */
6c30d220 10945 { "vpmaxub", { XM, Vex, EXx } },
9e30b8e0
L
10946 },
10947 {
592a252b 10948 /* VEX_W_0FDF_P_2 */
6c30d220 10949 { "vpandn", { XM, Vex, EXx } },
9e30b8e0
L
10950 },
10951 {
592a252b 10952 /* VEX_W_0FE0_P_2 */
6c30d220 10953 { "vpavgb", { XM, Vex, EXx } },
9e30b8e0
L
10954 },
10955 {
592a252b 10956 /* VEX_W_0FE1_P_2 */
6c30d220 10957 { "vpsraw", { XM, Vex, EXxmm } },
9e30b8e0
L
10958 },
10959 {
592a252b 10960 /* VEX_W_0FE2_P_2 */
6c30d220 10961 { "vpsrad", { XM, Vex, EXxmm } },
9e30b8e0
L
10962 },
10963 {
592a252b 10964 /* VEX_W_0FE3_P_2 */
6c30d220 10965 { "vpavgw", { XM, Vex, EXx } },
9e30b8e0
L
10966 },
10967 {
592a252b 10968 /* VEX_W_0FE4_P_2 */
6c30d220 10969 { "vpmulhuw", { XM, Vex, EXx } },
9e30b8e0
L
10970 },
10971 {
592a252b 10972 /* VEX_W_0FE5_P_2 */
6c30d220 10973 { "vpmulhw", { XM, Vex, EXx } },
9e30b8e0
L
10974 },
10975 {
592a252b 10976 /* VEX_W_0FE6_P_1 */
efdb52b7 10977 { "vcvtdq2pd", { XM, EXxmmq } },
9e30b8e0
L
10978 },
10979 {
592a252b 10980 /* VEX_W_0FE6_P_2 */
a179a9fd 10981 { "vcvttpd2dq%XY", { XMM, EXx } },
9e30b8e0
L
10982 },
10983 {
592a252b 10984 /* VEX_W_0FE6_P_3 */
a179a9fd 10985 { "vcvtpd2dq%XY", { XMM, EXx } },
9e30b8e0
L
10986 },
10987 {
592a252b 10988 /* VEX_W_0FE7_P_2_M_0 */
9e30b8e0 10989 { "vmovntdq", { Mx, XM } },
9e30b8e0
L
10990 },
10991 {
592a252b 10992 /* VEX_W_0FE8_P_2 */
6c30d220 10993 { "vpsubsb", { XM, Vex, EXx } },
9e30b8e0
L
10994 },
10995 {
592a252b 10996 /* VEX_W_0FE9_P_2 */
6c30d220 10997 { "vpsubsw", { XM, Vex, EXx } },
9e30b8e0
L
10998 },
10999 {
592a252b 11000 /* VEX_W_0FEA_P_2 */
6c30d220 11001 { "vpminsw", { XM, Vex, EXx } },
9e30b8e0
L
11002 },
11003 {
592a252b 11004 /* VEX_W_0FEB_P_2 */
6c30d220 11005 { "vpor", { XM, Vex, EXx } },
9e30b8e0
L
11006 },
11007 {
592a252b 11008 /* VEX_W_0FEC_P_2 */
6c30d220 11009 { "vpaddsb", { XM, Vex, EXx } },
9e30b8e0
L
11010 },
11011 {
592a252b 11012 /* VEX_W_0FED_P_2 */
6c30d220 11013 { "vpaddsw", { XM, Vex, EXx } },
9e30b8e0
L
11014 },
11015 {
592a252b 11016 /* VEX_W_0FEE_P_2 */
6c30d220 11017 { "vpmaxsw", { XM, Vex, EXx } },
9e30b8e0
L
11018 },
11019 {
592a252b 11020 /* VEX_W_0FEF_P_2 */
6c30d220 11021 { "vpxor", { XM, Vex, EXx } },
9e30b8e0
L
11022 },
11023 {
592a252b 11024 /* VEX_W_0FF0_P_3_M_0 */
9e30b8e0 11025 { "vlddqu", { XM, M } },
9e30b8e0
L
11026 },
11027 {
592a252b 11028 /* VEX_W_0FF1_P_2 */
6c30d220 11029 { "vpsllw", { XM, Vex, EXxmm } },
9e30b8e0
L
11030 },
11031 {
592a252b 11032 /* VEX_W_0FF2_P_2 */
6c30d220 11033 { "vpslld", { XM, Vex, EXxmm } },
9e30b8e0
L
11034 },
11035 {
592a252b 11036 /* VEX_W_0FF3_P_2 */
6c30d220 11037 { "vpsllq", { XM, Vex, EXxmm } },
9e30b8e0
L
11038 },
11039 {
592a252b 11040 /* VEX_W_0FF4_P_2 */
6c30d220 11041 { "vpmuludq", { XM, Vex, EXx } },
9e30b8e0
L
11042 },
11043 {
592a252b 11044 /* VEX_W_0FF5_P_2 */
6c30d220 11045 { "vpmaddwd", { XM, Vex, EXx } },
9e30b8e0
L
11046 },
11047 {
592a252b 11048 /* VEX_W_0FF6_P_2 */
6c30d220 11049 { "vpsadbw", { XM, Vex, EXx } },
9e30b8e0
L
11050 },
11051 {
592a252b 11052 /* VEX_W_0FF7_P_2 */
9e30b8e0 11053 { "vmaskmovdqu", { XM, XS } },
9e30b8e0
L
11054 },
11055 {
592a252b 11056 /* VEX_W_0FF8_P_2 */
6c30d220 11057 { "vpsubb", { XM, Vex, EXx } },
9e30b8e0
L
11058 },
11059 {
592a252b 11060 /* VEX_W_0FF9_P_2 */
6c30d220 11061 { "vpsubw", { XM, Vex, EXx } },
9e30b8e0
L
11062 },
11063 {
592a252b 11064 /* VEX_W_0FFA_P_2 */
6c30d220 11065 { "vpsubd", { XM, Vex, EXx } },
9e30b8e0
L
11066 },
11067 {
592a252b 11068 /* VEX_W_0FFB_P_2 */
6c30d220 11069 { "vpsubq", { XM, Vex, EXx } },
9e30b8e0
L
11070 },
11071 {
592a252b 11072 /* VEX_W_0FFC_P_2 */
6c30d220 11073 { "vpaddb", { XM, Vex, EXx } },
9e30b8e0
L
11074 },
11075 {
592a252b 11076 /* VEX_W_0FFD_P_2 */
6c30d220 11077 { "vpaddw", { XM, Vex, EXx } },
9e30b8e0
L
11078 },
11079 {
592a252b 11080 /* VEX_W_0FFE_P_2 */
6c30d220 11081 { "vpaddd", { XM, Vex, EXx } },
9e30b8e0
L
11082 },
11083 {
592a252b 11084 /* VEX_W_0F3800_P_2 */
6c30d220 11085 { "vpshufb", { XM, Vex, EXx } },
9e30b8e0
L
11086 },
11087 {
592a252b 11088 /* VEX_W_0F3801_P_2 */
6c30d220 11089 { "vphaddw", { XM, Vex, EXx } },
9e30b8e0
L
11090 },
11091 {
592a252b 11092 /* VEX_W_0F3802_P_2 */
6c30d220 11093 { "vphaddd", { XM, Vex, EXx } },
9e30b8e0
L
11094 },
11095 {
592a252b 11096 /* VEX_W_0F3803_P_2 */
6c30d220 11097 { "vphaddsw", { XM, Vex, EXx } },
9e30b8e0
L
11098 },
11099 {
592a252b 11100 /* VEX_W_0F3804_P_2 */
6c30d220 11101 { "vpmaddubsw", { XM, Vex, EXx } },
9e30b8e0
L
11102 },
11103 {
592a252b 11104 /* VEX_W_0F3805_P_2 */
6c30d220 11105 { "vphsubw", { XM, Vex, EXx } },
9e30b8e0
L
11106 },
11107 {
592a252b 11108 /* VEX_W_0F3806_P_2 */
6c30d220 11109 { "vphsubd", { XM, Vex, EXx } },
9e30b8e0
L
11110 },
11111 {
592a252b 11112 /* VEX_W_0F3807_P_2 */
6c30d220 11113 { "vphsubsw", { XM, Vex, EXx } },
9e30b8e0
L
11114 },
11115 {
592a252b 11116 /* VEX_W_0F3808_P_2 */
6c30d220 11117 { "vpsignb", { XM, Vex, EXx } },
9e30b8e0
L
11118 },
11119 {
592a252b 11120 /* VEX_W_0F3809_P_2 */
6c30d220 11121 { "vpsignw", { XM, Vex, EXx } },
9e30b8e0
L
11122 },
11123 {
592a252b 11124 /* VEX_W_0F380A_P_2 */
6c30d220 11125 { "vpsignd", { XM, Vex, EXx } },
9e30b8e0
L
11126 },
11127 {
592a252b 11128 /* VEX_W_0F380B_P_2 */
6c30d220 11129 { "vpmulhrsw", { XM, Vex, EXx } },
9e30b8e0
L
11130 },
11131 {
592a252b 11132 /* VEX_W_0F380C_P_2 */
9e30b8e0 11133 { "vpermilps", { XM, Vex, EXx } },
9e30b8e0
L
11134 },
11135 {
592a252b 11136 /* VEX_W_0F380D_P_2 */
9e30b8e0 11137 { "vpermilpd", { XM, Vex, EXx } },
9e30b8e0
L
11138 },
11139 {
592a252b 11140 /* VEX_W_0F380E_P_2 */
9e30b8e0 11141 { "vtestps", { XM, EXx } },
9e30b8e0
L
11142 },
11143 {
592a252b 11144 /* VEX_W_0F380F_P_2 */
9e30b8e0 11145 { "vtestpd", { XM, EXx } },
9e30b8e0 11146 },
6c30d220
L
11147 {
11148 /* VEX_W_0F3816_P_2 */
11149 { "vpermps", { XM, Vex, EXx } },
11150 },
9e30b8e0 11151 {
592a252b 11152 /* VEX_W_0F3817_P_2 */
9e30b8e0 11153 { "vptest", { XM, EXx } },
9e30b8e0 11154 },
bcf2684f 11155 {
6c30d220
L
11156 /* VEX_W_0F3818_P_2 */
11157 { "vbroadcastss", { XM, EXxmm_md } },
bcf2684f 11158 },
9e30b8e0 11159 {
6c30d220
L
11160 /* VEX_W_0F3819_P_2 */
11161 { "vbroadcastsd", { XM, EXxmm_mq } },
9e30b8e0
L
11162 },
11163 {
592a252b 11164 /* VEX_W_0F381A_P_2_M_0 */
9e30b8e0 11165 { "vbroadcastf128", { XM, Mxmm } },
9e30b8e0
L
11166 },
11167 {
592a252b 11168 /* VEX_W_0F381C_P_2 */
9e30b8e0 11169 { "vpabsb", { XM, EXx } },
9e30b8e0
L
11170 },
11171 {
592a252b 11172 /* VEX_W_0F381D_P_2 */
9e30b8e0 11173 { "vpabsw", { XM, EXx } },
9e30b8e0
L
11174 },
11175 {
592a252b 11176 /* VEX_W_0F381E_P_2 */
9e30b8e0 11177 { "vpabsd", { XM, EXx } },
9e30b8e0
L
11178 },
11179 {
592a252b 11180 /* VEX_W_0F3820_P_2 */
6c30d220 11181 { "vpmovsxbw", { XM, EXxmmq } },
9e30b8e0
L
11182 },
11183 {
592a252b 11184 /* VEX_W_0F3821_P_2 */
6c30d220 11185 { "vpmovsxbd", { XM, EXxmmqd } },
9e30b8e0
L
11186 },
11187 {
592a252b 11188 /* VEX_W_0F3822_P_2 */
6c30d220 11189 { "vpmovsxbq", { XM, EXxmmdw } },
9e30b8e0
L
11190 },
11191 {
592a252b 11192 /* VEX_W_0F3823_P_2 */
6c30d220 11193 { "vpmovsxwd", { XM, EXxmmq } },
9e30b8e0
L
11194 },
11195 {
592a252b 11196 /* VEX_W_0F3824_P_2 */
6c30d220 11197 { "vpmovsxwq", { XM, EXxmmqd } },
9e30b8e0
L
11198 },
11199 {
592a252b 11200 /* VEX_W_0F3825_P_2 */
6c30d220 11201 { "vpmovsxdq", { XM, EXxmmq } },
9e30b8e0
L
11202 },
11203 {
592a252b 11204 /* VEX_W_0F3828_P_2 */
6c30d220 11205 { "vpmuldq", { XM, Vex, EXx } },
9e30b8e0
L
11206 },
11207 {
592a252b 11208 /* VEX_W_0F3829_P_2 */
6c30d220 11209 { "vpcmpeqq", { XM, Vex, EXx } },
9e30b8e0
L
11210 },
11211 {
592a252b 11212 /* VEX_W_0F382A_P_2_M_0 */
9e30b8e0 11213 { "vmovntdqa", { XM, Mx } },
9e30b8e0
L
11214 },
11215 {
592a252b 11216 /* VEX_W_0F382B_P_2 */
6c30d220 11217 { "vpackusdw", { XM, Vex, EXx } },
9e30b8e0 11218 },
53aa04a0 11219 {
592a252b 11220 /* VEX_W_0F382C_P_2_M_0 */
53aa04a0 11221 { "vmaskmovps", { XM, Vex, Mx } },
53aa04a0
L
11222 },
11223 {
592a252b 11224 /* VEX_W_0F382D_P_2_M_0 */
53aa04a0 11225 { "vmaskmovpd", { XM, Vex, Mx } },
53aa04a0
L
11226 },
11227 {
592a252b 11228 /* VEX_W_0F382E_P_2_M_0 */
53aa04a0 11229 { "vmaskmovps", { Mx, Vex, XM } },
53aa04a0
L
11230 },
11231 {
592a252b 11232 /* VEX_W_0F382F_P_2_M_0 */
53aa04a0 11233 { "vmaskmovpd", { Mx, Vex, XM } },
53aa04a0 11234 },
9e30b8e0 11235 {
592a252b 11236 /* VEX_W_0F3830_P_2 */
6c30d220 11237 { "vpmovzxbw", { XM, EXxmmq } },
9e30b8e0
L
11238 },
11239 {
592a252b 11240 /* VEX_W_0F3831_P_2 */
6c30d220 11241 { "vpmovzxbd", { XM, EXxmmqd } },
9e30b8e0
L
11242 },
11243 {
592a252b 11244 /* VEX_W_0F3832_P_2 */
6c30d220 11245 { "vpmovzxbq", { XM, EXxmmdw } },
9e30b8e0
L
11246 },
11247 {
592a252b 11248 /* VEX_W_0F3833_P_2 */
6c30d220 11249 { "vpmovzxwd", { XM, EXxmmq } },
9e30b8e0
L
11250 },
11251 {
592a252b 11252 /* VEX_W_0F3834_P_2 */
6c30d220 11253 { "vpmovzxwq", { XM, EXxmmqd } },
9e30b8e0
L
11254 },
11255 {
592a252b 11256 /* VEX_W_0F3835_P_2 */
6c30d220
L
11257 { "vpmovzxdq", { XM, EXxmmq } },
11258 },
11259 {
11260 /* VEX_W_0F3836_P_2 */
11261 { "vpermd", { XM, Vex, EXx } },
9e30b8e0
L
11262 },
11263 {
592a252b 11264 /* VEX_W_0F3837_P_2 */
6c30d220 11265 { "vpcmpgtq", { XM, Vex, EXx } },
9e30b8e0
L
11266 },
11267 {
592a252b 11268 /* VEX_W_0F3838_P_2 */
6c30d220 11269 { "vpminsb", { XM, Vex, EXx } },
9e30b8e0
L
11270 },
11271 {
592a252b 11272 /* VEX_W_0F3839_P_2 */
6c30d220 11273 { "vpminsd", { XM, Vex, EXx } },
9e30b8e0
L
11274 },
11275 {
592a252b 11276 /* VEX_W_0F383A_P_2 */
6c30d220 11277 { "vpminuw", { XM, Vex, EXx } },
9e30b8e0
L
11278 },
11279 {
592a252b 11280 /* VEX_W_0F383B_P_2 */
6c30d220 11281 { "vpminud", { XM, Vex, EXx } },
9e30b8e0
L
11282 },
11283 {
592a252b 11284 /* VEX_W_0F383C_P_2 */
6c30d220 11285 { "vpmaxsb", { XM, Vex, EXx } },
9e30b8e0
L
11286 },
11287 {
592a252b 11288 /* VEX_W_0F383D_P_2 */
6c30d220 11289 { "vpmaxsd", { XM, Vex, EXx } },
9e30b8e0
L
11290 },
11291 {
592a252b 11292 /* VEX_W_0F383E_P_2 */
6c30d220 11293 { "vpmaxuw", { XM, Vex, EXx } },
9e30b8e0
L
11294 },
11295 {
592a252b 11296 /* VEX_W_0F383F_P_2 */
6c30d220 11297 { "vpmaxud", { XM, Vex, EXx } },
9e30b8e0
L
11298 },
11299 {
592a252b 11300 /* VEX_W_0F3840_P_2 */
6c30d220 11301 { "vpmulld", { XM, Vex, EXx } },
9e30b8e0
L
11302 },
11303 {
592a252b 11304 /* VEX_W_0F3841_P_2 */
9e30b8e0 11305 { "vphminposuw", { XM, EXx } },
9e30b8e0 11306 },
6c30d220
L
11307 {
11308 /* VEX_W_0F3846_P_2 */
11309 { "vpsravd", { XM, Vex, EXx } },
11310 },
11311 {
11312 /* VEX_W_0F3858_P_2 */
11313 { "vpbroadcastd", { XM, EXxmm_md } },
11314 },
11315 {
11316 /* VEX_W_0F3859_P_2 */
11317 { "vpbroadcastq", { XM, EXxmm_mq } },
11318 },
11319 {
11320 /* VEX_W_0F385A_P_2_M_0 */
11321 { "vbroadcasti128", { XM, Mxmm } },
11322 },
11323 {
11324 /* VEX_W_0F3878_P_2 */
11325 { "vpbroadcastb", { XM, EXxmm_mb } },
11326 },
11327 {
11328 /* VEX_W_0F3879_P_2 */
11329 { "vpbroadcastw", { XM, EXxmm_mw } },
11330 },
9e30b8e0 11331 {
592a252b 11332 /* VEX_W_0F38DB_P_2 */
9e30b8e0 11333 { "vaesimc", { XM, EXx } },
9e30b8e0
L
11334 },
11335 {
592a252b 11336 /* VEX_W_0F38DC_P_2 */
9e30b8e0 11337 { "vaesenc", { XM, Vex128, EXx } },
9e30b8e0
L
11338 },
11339 {
592a252b 11340 /* VEX_W_0F38DD_P_2 */
9e30b8e0 11341 { "vaesenclast", { XM, Vex128, EXx } },
9e30b8e0
L
11342 },
11343 {
592a252b 11344 /* VEX_W_0F38DE_P_2 */
9e30b8e0 11345 { "vaesdec", { XM, Vex128, EXx } },
9e30b8e0
L
11346 },
11347 {
592a252b 11348 /* VEX_W_0F38DF_P_2 */
9e30b8e0 11349 { "vaesdeclast", { XM, Vex128, EXx } },
9e30b8e0 11350 },
6c30d220
L
11351 {
11352 /* VEX_W_0F3A00_P_2 */
11353 { Bad_Opcode },
11354 { "vpermq", { XM, EXx, Ib } },
11355 },
11356 {
11357 /* VEX_W_0F3A01_P_2 */
11358 { Bad_Opcode },
11359 { "vpermpd", { XM, EXx, Ib } },
11360 },
11361 {
11362 /* VEX_W_0F3A02_P_2 */
11363 { "vpblendd", { XM, Vex, EXx, Ib } },
11364 },
9e30b8e0 11365 {
592a252b 11366 /* VEX_W_0F3A04_P_2 */
9e30b8e0 11367 { "vpermilps", { XM, EXx, Ib } },
9e30b8e0
L
11368 },
11369 {
592a252b 11370 /* VEX_W_0F3A05_P_2 */
9e30b8e0 11371 { "vpermilpd", { XM, EXx, Ib } },
9e30b8e0
L
11372 },
11373 {
592a252b 11374 /* VEX_W_0F3A06_P_2 */
9e30b8e0 11375 { "vperm2f128", { XM, Vex256, EXx, Ib } },
9e30b8e0
L
11376 },
11377 {
592a252b 11378 /* VEX_W_0F3A08_P_2 */
9e30b8e0 11379 { "vroundps", { XM, EXx, Ib } },
9e30b8e0
L
11380 },
11381 {
592a252b 11382 /* VEX_W_0F3A09_P_2 */
9e30b8e0 11383 { "vroundpd", { XM, EXx, Ib } },
9e30b8e0
L
11384 },
11385 {
592a252b 11386 /* VEX_W_0F3A0A_P_2 */
539f890d 11387 { "vroundss", { XMScalar, VexScalar, EXdScalar, Ib } },
9e30b8e0
L
11388 },
11389 {
592a252b 11390 /* VEX_W_0F3A0B_P_2 */
539f890d 11391 { "vroundsd", { XMScalar, VexScalar, EXqScalar, Ib } },
9e30b8e0
L
11392 },
11393 {
592a252b 11394 /* VEX_W_0F3A0C_P_2 */
9e30b8e0 11395 { "vblendps", { XM, Vex, EXx, Ib } },
9e30b8e0
L
11396 },
11397 {
592a252b 11398 /* VEX_W_0F3A0D_P_2 */
9e30b8e0 11399 { "vblendpd", { XM, Vex, EXx, Ib } },
9e30b8e0
L
11400 },
11401 {
592a252b 11402 /* VEX_W_0F3A0E_P_2 */
6c30d220 11403 { "vpblendw", { XM, Vex, EXx, Ib } },
9e30b8e0
L
11404 },
11405 {
592a252b 11406 /* VEX_W_0F3A0F_P_2 */
6c30d220 11407 { "vpalignr", { XM, Vex, EXx, Ib } },
9e30b8e0
L
11408 },
11409 {
592a252b 11410 /* VEX_W_0F3A14_P_2 */
9e30b8e0 11411 { "vpextrb", { Edqb, XM, Ib } },
9e30b8e0
L
11412 },
11413 {
592a252b 11414 /* VEX_W_0F3A15_P_2 */
9e30b8e0 11415 { "vpextrw", { Edqw, XM, Ib } },
9e30b8e0
L
11416 },
11417 {
592a252b 11418 /* VEX_W_0F3A18_P_2 */
9e30b8e0 11419 { "vinsertf128", { XM, Vex256, EXxmm, Ib } },
9e30b8e0
L
11420 },
11421 {
592a252b 11422 /* VEX_W_0F3A19_P_2 */
9e30b8e0 11423 { "vextractf128", { EXxmm, XM, Ib } },
9e30b8e0
L
11424 },
11425 {
592a252b 11426 /* VEX_W_0F3A20_P_2 */
9e30b8e0 11427 { "vpinsrb", { XM, Vex128, Edqb, Ib } },
9e30b8e0
L
11428 },
11429 {
592a252b 11430 /* VEX_W_0F3A21_P_2 */
9e30b8e0 11431 { "vinsertps", { XM, Vex128, EXd, Ib } },
9e30b8e0 11432 },
43234a1e 11433 {
1ba585e8 11434 /* VEX_W_0F3A30_P_2_LEN_0 */
90a915bf 11435 { "kshiftrb", { MaskG, MaskR, Ib } },
43234a1e
L
11436 { "kshiftrw", { MaskG, MaskR, Ib } },
11437 },
11438 {
1ba585e8
IT
11439 /* VEX_W_0F3A31_P_2_LEN_0 */
11440 { "kshiftrd", { MaskG, MaskR, Ib } },
11441 { "kshiftrq", { MaskG, MaskR, Ib } },
11442 },
11443 {
11444 /* VEX_W_0F3A32_P_2_LEN_0 */
90a915bf 11445 { "kshiftlb", { MaskG, MaskR, Ib } },
43234a1e
L
11446 { "kshiftlw", { MaskG, MaskR, Ib } },
11447 },
1ba585e8
IT
11448 {
11449 /* VEX_W_0F3A33_P_2_LEN_0 */
11450 { "kshiftld", { MaskG, MaskR, Ib } },
11451 { "kshiftlq", { MaskG, MaskR, Ib } },
11452 },
6c30d220
L
11453 {
11454 /* VEX_W_0F3A38_P_2 */
11455 { "vinserti128", { XM, Vex256, EXxmm, Ib } },
11456 },
11457 {
11458 /* VEX_W_0F3A39_P_2 */
11459 { "vextracti128", { EXxmm, XM, Ib } },
11460 },
9e30b8e0 11461 {
592a252b 11462 /* VEX_W_0F3A40_P_2 */
9e30b8e0 11463 { "vdpps", { XM, Vex, EXx, Ib } },
9e30b8e0
L
11464 },
11465 {
592a252b 11466 /* VEX_W_0F3A41_P_2 */
9e30b8e0 11467 { "vdppd", { XM, Vex128, EXx, Ib } },
9e30b8e0
L
11468 },
11469 {
592a252b 11470 /* VEX_W_0F3A42_P_2 */
6c30d220 11471 { "vmpsadbw", { XM, Vex, EXx, Ib } },
9e30b8e0
L
11472 },
11473 {
592a252b 11474 /* VEX_W_0F3A44_P_2 */
9e30b8e0 11475 { "vpclmulqdq", { XM, Vex128, EXx, PCLMUL } },
9e30b8e0 11476 },
6c30d220
L
11477 {
11478 /* VEX_W_0F3A46_P_2 */
11479 { "vperm2i128", { XM, Vex256, EXx, Ib } },
11480 },
a683cc34 11481 {
592a252b 11482 /* VEX_W_0F3A48_P_2 */
a683cc34
SP
11483 { "vpermil2ps", { XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW } },
11484 { "vpermil2ps", { XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW } },
11485 },
11486 {
592a252b 11487 /* VEX_W_0F3A49_P_2 */
a683cc34
SP
11488 { "vpermil2pd", { XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW } },
11489 { "vpermil2pd", { XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW } },
11490 },
9e30b8e0 11491 {
592a252b 11492 /* VEX_W_0F3A4A_P_2 */
9e30b8e0 11493 { "vblendvps", { XM, Vex, EXx, XMVexI4 } },
9e30b8e0
L
11494 },
11495 {
592a252b 11496 /* VEX_W_0F3A4B_P_2 */
9e30b8e0 11497 { "vblendvpd", { XM, Vex, EXx, XMVexI4 } },
9e30b8e0
L
11498 },
11499 {
592a252b 11500 /* VEX_W_0F3A4C_P_2 */
6c30d220 11501 { "vpblendvb", { XM, Vex, EXx, XMVexI4 } },
9e30b8e0
L
11502 },
11503 {
592a252b 11504 /* VEX_W_0F3A60_P_2 */
9e30b8e0 11505 { "vpcmpestrm", { XM, EXx, Ib } },
9e30b8e0
L
11506 },
11507 {
592a252b 11508 /* VEX_W_0F3A61_P_2 */
9e30b8e0 11509 { "vpcmpestri", { XM, EXx, Ib } },
9e30b8e0
L
11510 },
11511 {
592a252b 11512 /* VEX_W_0F3A62_P_2 */
9e30b8e0 11513 { "vpcmpistrm", { XM, EXx, Ib } },
9e30b8e0
L
11514 },
11515 {
592a252b 11516 /* VEX_W_0F3A63_P_2 */
9e30b8e0 11517 { "vpcmpistri", { XM, EXx, Ib } },
9e30b8e0
L
11518 },
11519 {
592a252b 11520 /* VEX_W_0F3ADF_P_2 */
9e30b8e0 11521 { "vaeskeygenassist", { XM, EXx, Ib } },
9e30b8e0 11522 },
43234a1e
L
11523#define NEED_VEX_W_TABLE
11524#include "i386-dis-evex.h"
11525#undef NEED_VEX_W_TABLE
9e30b8e0
L
11526};
11527
11528static const struct dis386 mod_table[][2] = {
11529 {
11530 /* MOD_8D */
11531 { "leaS", { Gv, M } },
9e30b8e0 11532 },
42164a71
L
11533 {
11534 /* MOD_C6_REG_7 */
11535 { Bad_Opcode },
11536 { RM_TABLE (RM_C6_REG_7) },
11537 },
11538 {
11539 /* MOD_C7_REG_7 */
11540 { Bad_Opcode },
11541 { RM_TABLE (RM_C7_REG_7) },
11542 },
4a357820
MZ
11543 {
11544 /* MOD_FF_REG_3 */
11545 { "Jcall{T|}", { indirEp } },
11546 },
11547 {
11548 /* MOD_FF_REG_5 */
11549 { "Jjmp{T|}", { indirEp } },
11550 },
9e30b8e0
L
11551 {
11552 /* MOD_0F01_REG_0 */
11553 { X86_64_TABLE (X86_64_0F01_REG_0) },
11554 { RM_TABLE (RM_0F01_REG_0) },
11555 },
11556 {
11557 /* MOD_0F01_REG_1 */
11558 { X86_64_TABLE (X86_64_0F01_REG_1) },
11559 { RM_TABLE (RM_0F01_REG_1) },
11560 },
11561 {
11562 /* MOD_0F01_REG_2 */
11563 { X86_64_TABLE (X86_64_0F01_REG_2) },
11564 { RM_TABLE (RM_0F01_REG_2) },
11565 },
11566 {
11567 /* MOD_0F01_REG_3 */
11568 { X86_64_TABLE (X86_64_0F01_REG_3) },
11569 { RM_TABLE (RM_0F01_REG_3) },
11570 },
11571 {
11572 /* MOD_0F01_REG_7 */
11573 { "invlpg", { Mb } },
11574 { RM_TABLE (RM_0F01_REG_7) },
11575 },
11576 {
11577 /* MOD_0F12_PREFIX_0 */
11578 { "movlps", { XM, EXq } },
11579 { "movhlps", { XM, EXq } },
11580 },
11581 {
11582 /* MOD_0F13 */
11583 { "movlpX", { EXq, XM } },
9e30b8e0
L
11584 },
11585 {
11586 /* MOD_0F16_PREFIX_0 */
11587 { "movhps", { XM, EXq } },
11588 { "movlhps", { XM, EXq } },
11589 },
11590 {
11591 /* MOD_0F17 */
11592 { "movhpX", { EXq, XM } },
9e30b8e0
L
11593 },
11594 {
11595 /* MOD_0F18_REG_0 */
11596 { "prefetchnta", { Mb } },
9e30b8e0
L
11597 },
11598 {
11599 /* MOD_0F18_REG_1 */
11600 { "prefetcht0", { Mb } },
9e30b8e0
L
11601 },
11602 {
11603 /* MOD_0F18_REG_2 */
11604 { "prefetcht1", { Mb } },
9e30b8e0
L
11605 },
11606 {
11607 /* MOD_0F18_REG_3 */
11608 { "prefetcht2", { Mb } },
9e30b8e0 11609 },
d7189fa5
RM
11610 {
11611 /* MOD_0F18_REG_4 */
11612 { "nop/reserved", { Mb } },
11613 },
11614 {
11615 /* MOD_0F18_REG_5 */
11616 { "nop/reserved", { Mb } },
11617 },
11618 {
11619 /* MOD_0F18_REG_6 */
11620 { "nop/reserved", { Mb } },
11621 },
11622 {
11623 /* MOD_0F18_REG_7 */
11624 { "nop/reserved", { Mb } },
11625 },
7e8b059b
L
11626 {
11627 /* MOD_0F1A_PREFIX_0 */
11628 { "bndldx", { Gbnd, Ev_bnd } },
11629 { "nopQ", { Ev } },
11630 },
11631 {
11632 /* MOD_0F1B_PREFIX_0 */
11633 { "bndstx", { Ev_bnd, Gbnd } },
11634 { "nopQ", { Ev } },
11635 },
11636 {
11637 /* MOD_0F1B_PREFIX_1 */
11638 { "bndmk", { Gbnd, Ev_bnd } },
11639 { "nopQ", { Ev } },
11640 },
9e30b8e0
L
11641 {
11642 /* MOD_0F20 */
592d1631 11643 { Bad_Opcode },
9e30b8e0
L
11644 { "movZ", { Rm, Cm } },
11645 },
11646 {
11647 /* MOD_0F21 */
592d1631 11648 { Bad_Opcode },
9e30b8e0
L
11649 { "movZ", { Rm, Dm } },
11650 },
11651 {
11652 /* MOD_0F22 */
592d1631 11653 { Bad_Opcode },
9e30b8e0 11654 { "movZ", { Cm, Rm } },
b844680a
L
11655 },
11656 {
92fddf8e 11657 /* MOD_0F23 */
592d1631 11658 { Bad_Opcode },
92fddf8e 11659 { "movZ", { Dm, Rm } },
b844680a
L
11660 },
11661 {
92fddf8e 11662 /* MOD_0F24 */
7bb15c6f 11663 { Bad_Opcode },
92fddf8e 11664 { "movL", { Rd, Td } },
b844680a
L
11665 },
11666 {
92fddf8e 11667 /* MOD_0F26 */
592d1631 11668 { Bad_Opcode },
92fddf8e 11669 { "movL", { Td, Rd } },
b844680a 11670 },
75c135a8
L
11671 {
11672 /* MOD_0F2B_PREFIX_0 */
4ee52178 11673 {"movntps", { Mx, XM } },
75c135a8
L
11674 },
11675 {
11676 /* MOD_0F2B_PREFIX_1 */
4ee52178 11677 {"movntss", { Md, XM } },
75c135a8
L
11678 },
11679 {
11680 /* MOD_0F2B_PREFIX_2 */
4ee52178 11681 {"movntpd", { Mx, XM } },
75c135a8
L
11682 },
11683 {
11684 /* MOD_0F2B_PREFIX_3 */
4ee52178 11685 {"movntsd", { Mq, XM } },
75c135a8
L
11686 },
11687 {
11688 /* MOD_0F51 */
592d1631 11689 { Bad_Opcode },
75c135a8
L
11690 { "movmskpX", { Gdq, XS } },
11691 },
b844680a 11692 {
1ceb70f8 11693 /* MOD_0F71_REG_2 */
592d1631 11694 { Bad_Opcode },
4e7d34a6 11695 { "psrlw", { MS, Ib } },
b844680a
L
11696 },
11697 {
1ceb70f8 11698 /* MOD_0F71_REG_4 */
592d1631 11699 { Bad_Opcode },
4e7d34a6 11700 { "psraw", { MS, Ib } },
b844680a
L
11701 },
11702 {
1ceb70f8 11703 /* MOD_0F71_REG_6 */
592d1631 11704 { Bad_Opcode },
4e7d34a6 11705 { "psllw", { MS, Ib } },
b844680a
L
11706 },
11707 {
1ceb70f8 11708 /* MOD_0F72_REG_2 */
592d1631 11709 { Bad_Opcode },
4e7d34a6 11710 { "psrld", { MS, Ib } },
b844680a
L
11711 },
11712 {
1ceb70f8 11713 /* MOD_0F72_REG_4 */
592d1631 11714 { Bad_Opcode },
4e7d34a6 11715 { "psrad", { MS, Ib } },
b844680a
L
11716 },
11717 {
1ceb70f8 11718 /* MOD_0F72_REG_6 */
592d1631 11719 { Bad_Opcode },
4e7d34a6 11720 { "pslld", { MS, Ib } },
b844680a
L
11721 },
11722 {
1ceb70f8 11723 /* MOD_0F73_REG_2 */
592d1631 11724 { Bad_Opcode },
4e7d34a6 11725 { "psrlq", { MS, Ib } },
b844680a
L
11726 },
11727 {
1ceb70f8 11728 /* MOD_0F73_REG_3 */
592d1631 11729 { Bad_Opcode },
c0f3af97
L
11730 { PREFIX_TABLE (PREFIX_0F73_REG_3) },
11731 },
11732 {
11733 /* MOD_0F73_REG_6 */
592d1631 11734 { Bad_Opcode },
c0f3af97
L
11735 { "psllq", { MS, Ib } },
11736 },
11737 {
11738 /* MOD_0F73_REG_7 */
592d1631 11739 { Bad_Opcode },
c0f3af97
L
11740 { PREFIX_TABLE (PREFIX_0F73_REG_7) },
11741 },
11742 {
11743 /* MOD_0FAE_REG_0 */
eacc9c89 11744 { "fxsave", { FXSAVE } },
c7b8aa3a 11745 { PREFIX_TABLE (PREFIX_0FAE_REG_0) },
c0f3af97
L
11746 },
11747 {
11748 /* MOD_0FAE_REG_1 */
eacc9c89 11749 { "fxrstor", { FXSAVE } },
c7b8aa3a 11750 { PREFIX_TABLE (PREFIX_0FAE_REG_1) },
c0f3af97
L
11751 },
11752 {
11753 /* MOD_0FAE_REG_2 */
11754 { "ldmxcsr", { Md } },
c7b8aa3a 11755 { PREFIX_TABLE (PREFIX_0FAE_REG_2) },
c0f3af97
L
11756 },
11757 {
11758 /* MOD_0FAE_REG_3 */
11759 { "stmxcsr", { Md } },
c7b8aa3a 11760 { PREFIX_TABLE (PREFIX_0FAE_REG_3) },
c0f3af97
L
11761 },
11762 {
11763 /* MOD_0FAE_REG_4 */
73bb6729 11764 { "xsave", { FXSAVE } },
c0f3af97
L
11765 },
11766 {
11767 /* MOD_0FAE_REG_5 */
73bb6729 11768 { "xrstor", { FXSAVE } },
c0f3af97
L
11769 { RM_TABLE (RM_0FAE_REG_5) },
11770 },
11771 {
11772 /* MOD_0FAE_REG_6 */
c7b8aa3a 11773 { "xsaveopt", { FXSAVE } },
c0f3af97
L
11774 { RM_TABLE (RM_0FAE_REG_6) },
11775 },
11776 {
11777 /* MOD_0FAE_REG_7 */
963f3586 11778 { PREFIX_TABLE (PREFIX_0FAE_REG_7) },
c0f3af97
L
11779 { RM_TABLE (RM_0FAE_REG_7) },
11780 },
11781 {
11782 /* MOD_0FB2 */
11783 { "lssS", { Gv, Mp } },
c0f3af97
L
11784 },
11785 {
11786 /* MOD_0FB4 */
11787 { "lfsS", { Gv, Mp } },
c0f3af97
L
11788 },
11789 {
11790 /* MOD_0FB5 */
11791 { "lgsS", { Gv, Mp } },
c0f3af97 11792 },
963f3586
IT
11793 {
11794 /* MOD_0FC7_REG_3 */
11795 { "xrstors", { FXSAVE } },
11796 },
11797 {
11798 /* MOD_0FC7_REG_4 */
11799 { "xsavec", { FXSAVE } },
11800 },
11801 {
11802 /* MOD_0FC7_REG_5 */
11803 { "xsaves", { FXSAVE } },
11804 },
c0f3af97
L
11805 {
11806 /* MOD_0FC7_REG_6 */
11807 { PREFIX_TABLE (PREFIX_0FC7_REG_6) },
d7d9a9f8 11808 { "rdrand", { Ev } },
c0f3af97
L
11809 },
11810 {
11811 /* MOD_0FC7_REG_7 */
11812 { "vmptrst", { Mq } },
e2e1fcde 11813 { "rdseed", { Ev } },
c0f3af97
L
11814 },
11815 {
11816 /* MOD_0FD7 */
592d1631 11817 { Bad_Opcode },
c0f3af97
L
11818 { "pmovmskb", { Gdq, MS } },
11819 },
11820 {
11821 /* MOD_0FE7_PREFIX_2 */
11822 { "movntdq", { Mx, XM } },
c0f3af97
L
11823 },
11824 {
11825 /* MOD_0FF0_PREFIX_3 */
11826 { "lddqu", { XM, M } },
c0f3af97
L
11827 },
11828 {
11829 /* MOD_0F382A_PREFIX_2 */
11830 { "movntdqa", { XM, Mx } },
c0f3af97
L
11831 },
11832 {
11833 /* MOD_62_32BIT */
11834 { "bound{S|}", { Gv, Ma } },
43234a1e 11835 { EVEX_TABLE (EVEX_0F) },
c0f3af97
L
11836 },
11837 {
11838 /* MOD_C4_32BIT */
11839 { "lesS", { Gv, Mp } },
11840 { VEX_C4_TABLE (VEX_0F) },
11841 },
11842 {
11843 /* MOD_C5_32BIT */
11844 { "ldsS", { Gv, Mp } },
11845 { VEX_C5_TABLE (VEX_0F) },
11846 },
11847 {
592a252b
L
11848 /* MOD_VEX_0F12_PREFIX_0 */
11849 { VEX_LEN_TABLE (VEX_LEN_0F12_P_0_M_0) },
11850 { VEX_LEN_TABLE (VEX_LEN_0F12_P_0_M_1) },
c0f3af97
L
11851 },
11852 {
592a252b
L
11853 /* MOD_VEX_0F13 */
11854 { VEX_LEN_TABLE (VEX_LEN_0F13_M_0) },
c0f3af97
L
11855 },
11856 {
592a252b
L
11857 /* MOD_VEX_0F16_PREFIX_0 */
11858 { VEX_LEN_TABLE (VEX_LEN_0F16_P_0_M_0) },
11859 { VEX_LEN_TABLE (VEX_LEN_0F16_P_0_M_1) },
c0f3af97
L
11860 },
11861 {
592a252b
L
11862 /* MOD_VEX_0F17 */
11863 { VEX_LEN_TABLE (VEX_LEN_0F17_M_0) },
c0f3af97
L
11864 },
11865 {
592a252b
L
11866 /* MOD_VEX_0F2B */
11867 { VEX_W_TABLE (VEX_W_0F2B_M_0) },
c0f3af97
L
11868 },
11869 {
592a252b 11870 /* MOD_VEX_0F50 */
592d1631 11871 { Bad_Opcode },
592a252b 11872 { VEX_W_TABLE (VEX_W_0F50_M_0) },
c0f3af97
L
11873 },
11874 {
592a252b 11875 /* MOD_VEX_0F71_REG_2 */
592d1631 11876 { Bad_Opcode },
592a252b 11877 { PREFIX_TABLE (PREFIX_VEX_0F71_REG_2) },
b844680a
L
11878 },
11879 {
592a252b 11880 /* MOD_VEX_0F71_REG_4 */
592d1631 11881 { Bad_Opcode },
592a252b 11882 { PREFIX_TABLE (PREFIX_VEX_0F71_REG_4) },
b844680a
L
11883 },
11884 {
592a252b 11885 /* MOD_VEX_0F71_REG_6 */
592d1631 11886 { Bad_Opcode },
592a252b 11887 { PREFIX_TABLE (PREFIX_VEX_0F71_REG_6) },
b844680a
L
11888 },
11889 {
592a252b 11890 /* MOD_VEX_0F72_REG_2 */
592d1631 11891 { Bad_Opcode },
592a252b 11892 { PREFIX_TABLE (PREFIX_VEX_0F72_REG_2) },
b844680a 11893 },
d8faab4e 11894 {
592a252b 11895 /* MOD_VEX_0F72_REG_4 */
592d1631 11896 { Bad_Opcode },
592a252b 11897 { PREFIX_TABLE (PREFIX_VEX_0F72_REG_4) },
d8faab4e
L
11898 },
11899 {
592a252b 11900 /* MOD_VEX_0F72_REG_6 */
592d1631 11901 { Bad_Opcode },
592a252b 11902 { PREFIX_TABLE (PREFIX_VEX_0F72_REG_6) },
d8faab4e 11903 },
876d4bfa 11904 {
592a252b 11905 /* MOD_VEX_0F73_REG_2 */
592d1631 11906 { Bad_Opcode },
592a252b 11907 { PREFIX_TABLE (PREFIX_VEX_0F73_REG_2) },
876d4bfa
L
11908 },
11909 {
592a252b 11910 /* MOD_VEX_0F73_REG_3 */
592d1631 11911 { Bad_Opcode },
592a252b 11912 { PREFIX_TABLE (PREFIX_VEX_0F73_REG_3) },
475a2301
L
11913 },
11914 {
592a252b 11915 /* MOD_VEX_0F73_REG_6 */
592d1631 11916 { Bad_Opcode },
592a252b 11917 { PREFIX_TABLE (PREFIX_VEX_0F73_REG_6) },
876d4bfa
L
11918 },
11919 {
592a252b 11920 /* MOD_VEX_0F73_REG_7 */
592d1631 11921 { Bad_Opcode },
592a252b 11922 { PREFIX_TABLE (PREFIX_VEX_0F73_REG_7) },
876d4bfa
L
11923 },
11924 {
592a252b
L
11925 /* MOD_VEX_0FAE_REG_2 */
11926 { VEX_LEN_TABLE (VEX_LEN_0FAE_R_2_M_0) },
876d4bfa 11927 },
bbedc832 11928 {
592a252b
L
11929 /* MOD_VEX_0FAE_REG_3 */
11930 { VEX_LEN_TABLE (VEX_LEN_0FAE_R_3_M_0) },
bbedc832 11931 },
144c41d9 11932 {
592a252b 11933 /* MOD_VEX_0FD7_PREFIX_2 */
592d1631 11934 { Bad_Opcode },
6c30d220 11935 { VEX_W_TABLE (VEX_W_0FD7_P_2_M_1) },
144c41d9 11936 },
1afd85e3 11937 {
592a252b
L
11938 /* MOD_VEX_0FE7_PREFIX_2 */
11939 { VEX_W_TABLE (VEX_W_0FE7_P_2_M_0) },
1afd85e3
L
11940 },
11941 {
592a252b
L
11942 /* MOD_VEX_0FF0_PREFIX_3 */
11943 { VEX_W_TABLE (VEX_W_0FF0_P_3_M_0) },
92fddf8e 11944 },
75c135a8 11945 {
592a252b
L
11946 /* MOD_VEX_0F381A_PREFIX_2 */
11947 { VEX_LEN_TABLE (VEX_LEN_0F381A_P_2_M_0) },
75c135a8 11948 },
1afd85e3 11949 {
592a252b 11950 /* MOD_VEX_0F382A_PREFIX_2 */
6c30d220 11951 { VEX_W_TABLE (VEX_W_0F382A_P_2_M_0) },
1afd85e3 11952 },
75c135a8 11953 {
592a252b
L
11954 /* MOD_VEX_0F382C_PREFIX_2 */
11955 { VEX_W_TABLE (VEX_W_0F382C_P_2_M_0) },
75c135a8 11956 },
1afd85e3 11957 {
592a252b
L
11958 /* MOD_VEX_0F382D_PREFIX_2 */
11959 { VEX_W_TABLE (VEX_W_0F382D_P_2_M_0) },
1afd85e3
L
11960 },
11961 {
592a252b
L
11962 /* MOD_VEX_0F382E_PREFIX_2 */
11963 { VEX_W_TABLE (VEX_W_0F382E_P_2_M_0) },
1afd85e3
L
11964 },
11965 {
592a252b
L
11966 /* MOD_VEX_0F382F_PREFIX_2 */
11967 { VEX_W_TABLE (VEX_W_0F382F_P_2_M_0) },
1afd85e3 11968 },
6c30d220
L
11969 {
11970 /* MOD_VEX_0F385A_PREFIX_2 */
11971 { VEX_LEN_TABLE (VEX_LEN_0F385A_P_2_M_0) },
11972 },
11973 {
11974 /* MOD_VEX_0F388C_PREFIX_2 */
11975 { "vpmaskmov%LW", { XM, Vex, Mx } },
11976 },
11977 {
11978 /* MOD_VEX_0F388E_PREFIX_2 */
11979 { "vpmaskmov%LW", { Mx, Vex, XM } },
11980 },
43234a1e
L
11981#define NEED_MOD_TABLE
11982#include "i386-dis-evex.h"
11983#undef NEED_MOD_TABLE
b844680a
L
11984};
11985
1ceb70f8 11986static const struct dis386 rm_table[][8] = {
42164a71
L
11987 {
11988 /* RM_C6_REG_7 */
11989 { "xabort", { Skip_MODRM, Ib } },
11990 },
11991 {
11992 /* RM_C7_REG_7 */
11993 { "xbeginT", { Skip_MODRM, Jv } },
11994 },
b844680a 11995 {
1ceb70f8 11996 /* RM_0F01_REG_0 */
592d1631 11997 { Bad_Opcode },
b844680a
L
11998 { "vmcall", { Skip_MODRM } },
11999 { "vmlaunch", { Skip_MODRM } },
12000 { "vmresume", { Skip_MODRM } },
12001 { "vmxoff", { Skip_MODRM } },
b844680a
L
12002 },
12003 {
1ceb70f8 12004 /* RM_0F01_REG_1 */
b844680a
L
12005 { "monitor", { { OP_Monitor, 0 } } },
12006 { "mwait", { { OP_Mwait, 0 } } },
5c111e37
L
12007 { "clac", { Skip_MODRM } },
12008 { "stac", { Skip_MODRM } },
2cf200a4
IT
12009 { Bad_Opcode },
12010 { Bad_Opcode },
12011 { Bad_Opcode },
12012 { "encls", { Skip_MODRM } },
b844680a 12013 },
475a2301
L
12014 {
12015 /* RM_0F01_REG_2 */
12016 { "xgetbv", { Skip_MODRM } },
12017 { "xsetbv", { Skip_MODRM } },
8729a6f6
L
12018 { Bad_Opcode },
12019 { Bad_Opcode },
12020 { "vmfunc", { Skip_MODRM } },
42164a71
L
12021 { "xend", { Skip_MODRM } },
12022 { "xtest", { Skip_MODRM } },
2cf200a4 12023 { "enclu", { Skip_MODRM } },
475a2301 12024 },
b844680a 12025 {
1ceb70f8 12026 /* RM_0F01_REG_3 */
4e7d34a6
L
12027 { "vmrun", { Skip_MODRM } },
12028 { "vmmcall", { Skip_MODRM } },
12029 { "vmload", { Skip_MODRM } },
12030 { "vmsave", { Skip_MODRM } },
12031 { "stgi", { Skip_MODRM } },
12032 { "clgi", { Skip_MODRM } },
12033 { "skinit", { Skip_MODRM } },
12034 { "invlpga", { Skip_MODRM } },
12035 },
12036 {
1ceb70f8 12037 /* RM_0F01_REG_7 */
4e7d34a6
L
12038 { "swapgs", { Skip_MODRM } },
12039 { "rdtscp", { Skip_MODRM } },
b844680a
L
12040 },
12041 {
1ceb70f8 12042 /* RM_0FAE_REG_5 */
4e7d34a6 12043 { "lfence", { Skip_MODRM } },
b844680a
L
12044 },
12045 {
1ceb70f8 12046 /* RM_0FAE_REG_6 */
4e7d34a6 12047 { "mfence", { Skip_MODRM } },
b844680a 12048 },
bbedc832 12049 {
1ceb70f8 12050 /* RM_0FAE_REG_7 */
4e7d34a6 12051 { "sfence", { Skip_MODRM } },
144c41d9 12052 },
b844680a
L
12053};
12054
c608c12e
AM
12055#define INTERNAL_DISASSEMBLER_ERROR _("<internal disassembler error>")
12056
f16cd0d5
L
12057/* We use the high bit to indicate different name for the same
12058 prefix. */
f16cd0d5 12059#define REP_PREFIX (0xf3 | 0x100)
42164a71
L
12060#define XACQUIRE_PREFIX (0xf2 | 0x200)
12061#define XRELEASE_PREFIX (0xf3 | 0x400)
7e8b059b 12062#define BND_PREFIX (0xf2 | 0x400)
f16cd0d5
L
12063
12064static int
26ca5450 12065ckprefix (void)
252b5132 12066{
f16cd0d5 12067 int newrex, i, length;
52b15da3 12068 rex = 0;
c0f3af97 12069 rex_ignored = 0;
252b5132 12070 prefixes = 0;
7d421014 12071 used_prefixes = 0;
52b15da3 12072 rex_used = 0;
f16cd0d5
L
12073 last_lock_prefix = -1;
12074 last_repz_prefix = -1;
12075 last_repnz_prefix = -1;
12076 last_data_prefix = -1;
12077 last_addr_prefix = -1;
12078 last_rex_prefix = -1;
12079 last_seg_prefix = -1;
d9949a36 12080 fwait_prefix = -1;
285ca992 12081 active_seg_prefix = 0;
f310f33d
L
12082 for (i = 0; i < (int) ARRAY_SIZE (all_prefixes); i++)
12083 all_prefixes[i] = 0;
12084 i = 0;
f16cd0d5
L
12085 length = 0;
12086 /* The maximum instruction length is 15bytes. */
12087 while (length < MAX_CODE_LENGTH - 1)
252b5132
RH
12088 {
12089 FETCH_DATA (the_info, codep + 1);
52b15da3 12090 newrex = 0;
252b5132
RH
12091 switch (*codep)
12092 {
52b15da3
JH
12093 /* REX prefixes family. */
12094 case 0x40:
12095 case 0x41:
12096 case 0x42:
12097 case 0x43:
12098 case 0x44:
12099 case 0x45:
12100 case 0x46:
12101 case 0x47:
12102 case 0x48:
12103 case 0x49:
12104 case 0x4a:
12105 case 0x4b:
12106 case 0x4c:
12107 case 0x4d:
12108 case 0x4e:
12109 case 0x4f:
f16cd0d5
L
12110 if (address_mode == mode_64bit)
12111 newrex = *codep;
12112 else
12113 return 1;
12114 last_rex_prefix = i;
52b15da3 12115 break;
252b5132
RH
12116 case 0xf3:
12117 prefixes |= PREFIX_REPZ;
f16cd0d5 12118 last_repz_prefix = i;
252b5132
RH
12119 break;
12120 case 0xf2:
12121 prefixes |= PREFIX_REPNZ;
f16cd0d5 12122 last_repnz_prefix = i;
252b5132
RH
12123 break;
12124 case 0xf0:
12125 prefixes |= PREFIX_LOCK;
f16cd0d5 12126 last_lock_prefix = i;
252b5132
RH
12127 break;
12128 case 0x2e:
12129 prefixes |= PREFIX_CS;
f16cd0d5 12130 last_seg_prefix = i;
285ca992 12131 active_seg_prefix = PREFIX_CS;
252b5132
RH
12132 break;
12133 case 0x36:
12134 prefixes |= PREFIX_SS;
f16cd0d5 12135 last_seg_prefix = i;
285ca992 12136 active_seg_prefix = PREFIX_SS;
252b5132
RH
12137 break;
12138 case 0x3e:
12139 prefixes |= PREFIX_DS;
f16cd0d5 12140 last_seg_prefix = i;
285ca992 12141 active_seg_prefix = PREFIX_DS;
252b5132
RH
12142 break;
12143 case 0x26:
12144 prefixes |= PREFIX_ES;
f16cd0d5 12145 last_seg_prefix = i;
285ca992 12146 active_seg_prefix = PREFIX_ES;
252b5132
RH
12147 break;
12148 case 0x64:
12149 prefixes |= PREFIX_FS;
f16cd0d5 12150 last_seg_prefix = i;
285ca992 12151 active_seg_prefix = PREFIX_FS;
252b5132
RH
12152 break;
12153 case 0x65:
12154 prefixes |= PREFIX_GS;
f16cd0d5 12155 last_seg_prefix = i;
285ca992 12156 active_seg_prefix = PREFIX_GS;
252b5132
RH
12157 break;
12158 case 0x66:
12159 prefixes |= PREFIX_DATA;
f16cd0d5 12160 last_data_prefix = i;
252b5132
RH
12161 break;
12162 case 0x67:
12163 prefixes |= PREFIX_ADDR;
f16cd0d5 12164 last_addr_prefix = i;
252b5132 12165 break;
5076851f 12166 case FWAIT_OPCODE:
252b5132
RH
12167 /* fwait is really an instruction. If there are prefixes
12168 before the fwait, they belong to the fwait, *not* to the
12169 following instruction. */
d9949a36 12170 fwait_prefix = i;
3e7d61b2 12171 if (prefixes || rex)
252b5132
RH
12172 {
12173 prefixes |= PREFIX_FWAIT;
12174 codep++;
6c067bbb
RM
12175 /* This ensures that the previous REX prefixes are noticed
12176 as unused prefixes, as in the return case below. */
12177 rex_used = rex;
f16cd0d5 12178 return 1;
252b5132
RH
12179 }
12180 prefixes = PREFIX_FWAIT;
12181 break;
12182 default:
f16cd0d5 12183 return 1;
252b5132 12184 }
52b15da3
JH
12185 /* Rex is ignored when followed by another prefix. */
12186 if (rex)
12187 {
3e7d61b2 12188 rex_used = rex;
f16cd0d5 12189 return 1;
52b15da3 12190 }
f16cd0d5
L
12191 if (*codep != FWAIT_OPCODE)
12192 all_prefixes[i++] = *codep;
52b15da3 12193 rex = newrex;
252b5132 12194 codep++;
f16cd0d5
L
12195 length++;
12196 }
12197 return 0;
12198}
12199
7d421014
ILT
12200/* Return the name of the prefix byte PREF, or NULL if PREF is not a
12201 prefix byte. */
12202
12203static const char *
26ca5450 12204prefix_name (int pref, int sizeflag)
7d421014 12205{
0003779b
L
12206 static const char *rexes [16] =
12207 {
12208 "rex", /* 0x40 */
12209 "rex.B", /* 0x41 */
12210 "rex.X", /* 0x42 */
12211 "rex.XB", /* 0x43 */
12212 "rex.R", /* 0x44 */
12213 "rex.RB", /* 0x45 */
12214 "rex.RX", /* 0x46 */
12215 "rex.RXB", /* 0x47 */
12216 "rex.W", /* 0x48 */
12217 "rex.WB", /* 0x49 */
12218 "rex.WX", /* 0x4a */
12219 "rex.WXB", /* 0x4b */
12220 "rex.WR", /* 0x4c */
12221 "rex.WRB", /* 0x4d */
12222 "rex.WRX", /* 0x4e */
12223 "rex.WRXB", /* 0x4f */
12224 };
12225
7d421014
ILT
12226 switch (pref)
12227 {
52b15da3
JH
12228 /* REX prefixes family. */
12229 case 0x40:
52b15da3 12230 case 0x41:
52b15da3 12231 case 0x42:
52b15da3 12232 case 0x43:
52b15da3 12233 case 0x44:
52b15da3 12234 case 0x45:
52b15da3 12235 case 0x46:
52b15da3 12236 case 0x47:
52b15da3 12237 case 0x48:
52b15da3 12238 case 0x49:
52b15da3 12239 case 0x4a:
52b15da3 12240 case 0x4b:
52b15da3 12241 case 0x4c:
52b15da3 12242 case 0x4d:
52b15da3 12243 case 0x4e:
52b15da3 12244 case 0x4f:
0003779b 12245 return rexes [pref - 0x40];
7d421014
ILT
12246 case 0xf3:
12247 return "repz";
12248 case 0xf2:
12249 return "repnz";
12250 case 0xf0:
12251 return "lock";
12252 case 0x2e:
12253 return "cs";
12254 case 0x36:
12255 return "ss";
12256 case 0x3e:
12257 return "ds";
12258 case 0x26:
12259 return "es";
12260 case 0x64:
12261 return "fs";
12262 case 0x65:
12263 return "gs";
12264 case 0x66:
12265 return (sizeflag & DFLAG) ? "data16" : "data32";
12266 case 0x67:
cb712a9e 12267 if (address_mode == mode_64bit)
db6eb5be 12268 return (sizeflag & AFLAG) ? "addr32" : "addr64";
c1a64871 12269 else
2888cb7a 12270 return (sizeflag & AFLAG) ? "addr16" : "addr32";
7d421014
ILT
12271 case FWAIT_OPCODE:
12272 return "fwait";
f16cd0d5
L
12273 case REP_PREFIX:
12274 return "rep";
42164a71
L
12275 case XACQUIRE_PREFIX:
12276 return "xacquire";
12277 case XRELEASE_PREFIX:
12278 return "xrelease";
7e8b059b
L
12279 case BND_PREFIX:
12280 return "bnd";
7d421014
ILT
12281 default:
12282 return NULL;
12283 }
12284}
12285
ce518a5f
L
12286static char op_out[MAX_OPERANDS][100];
12287static int op_ad, op_index[MAX_OPERANDS];
1d9f512f 12288static int two_source_ops;
ce518a5f
L
12289static bfd_vma op_address[MAX_OPERANDS];
12290static bfd_vma op_riprel[MAX_OPERANDS];
52b15da3 12291static bfd_vma start_pc;
ce518a5f 12292
252b5132
RH
12293/*
12294 * On the 386's of 1988, the maximum length of an instruction is 15 bytes.
12295 * (see topic "Redundant prefixes" in the "Differences from 8086"
12296 * section of the "Virtual 8086 Mode" chapter.)
12297 * 'pc' should be the address of this instruction, it will
12298 * be used to print the target address if this is a relative jump or call
12299 * The function returns the length of this instruction in bytes.
12300 */
12301
252b5132 12302static char intel_syntax;
9d141669 12303static char intel_mnemonic = !SYSV386_COMPAT;
252b5132
RH
12304static char open_char;
12305static char close_char;
12306static char separator_char;
12307static char scale_char;
12308
e396998b
AM
12309/* Here for backwards compatibility. When gdb stops using
12310 print_insn_i386_att and print_insn_i386_intel these functions can
12311 disappear, and print_insn_i386 be merged into print_insn. */
252b5132 12312int
26ca5450 12313print_insn_i386_att (bfd_vma pc, disassemble_info *info)
252b5132
RH
12314{
12315 intel_syntax = 0;
e396998b
AM
12316
12317 return print_insn (pc, info);
252b5132
RH
12318}
12319
12320int
26ca5450 12321print_insn_i386_intel (bfd_vma pc, disassemble_info *info)
252b5132
RH
12322{
12323 intel_syntax = 1;
e396998b
AM
12324
12325 return print_insn (pc, info);
252b5132
RH
12326}
12327
e396998b 12328int
26ca5450 12329print_insn_i386 (bfd_vma pc, disassemble_info *info)
e396998b
AM
12330{
12331 intel_syntax = -1;
12332
12333 return print_insn (pc, info);
12334}
12335
f59a29b9
L
12336void
12337print_i386_disassembler_options (FILE *stream)
12338{
12339 fprintf (stream, _("\n\
12340The following i386/x86-64 specific disassembler options are supported for use\n\
12341with the -M switch (multiple options should be separated by commas):\n"));
12342
12343 fprintf (stream, _(" x86-64 Disassemble in 64bit mode\n"));
12344 fprintf (stream, _(" i386 Disassemble in 32bit mode\n"));
12345 fprintf (stream, _(" i8086 Disassemble in 16bit mode\n"));
12346 fprintf (stream, _(" att Display instruction in AT&T syntax\n"));
12347 fprintf (stream, _(" intel Display instruction in Intel syntax\n"));
9d141669
L
12348 fprintf (stream, _(" att-mnemonic\n"
12349 " Display instruction in AT&T mnemonic\n"));
12350 fprintf (stream, _(" intel-mnemonic\n"
12351 " Display instruction in Intel mnemonic\n"));
f59a29b9
L
12352 fprintf (stream, _(" addr64 Assume 64bit address size\n"));
12353 fprintf (stream, _(" addr32 Assume 32bit address size\n"));
12354 fprintf (stream, _(" addr16 Assume 16bit address size\n"));
12355 fprintf (stream, _(" data32 Assume 32bit data size\n"));
12356 fprintf (stream, _(" data16 Assume 16bit data size\n"));
12357 fprintf (stream, _(" suffix Always display instruction suffix in AT&T syntax\n"));
12358}
12359
592d1631
L
12360/* Bad opcode. */
12361static const struct dis386 bad_opcode = { "(bad)", { XX } };
12362
b844680a
L
12363/* Get a pointer to struct dis386 with a valid name. */
12364
12365static const struct dis386 *
8bb15339 12366get_valid_dis386 (const struct dis386 *dp, disassemble_info *info)
b844680a 12367{
91d6fa6a 12368 int vindex, vex_table_index;
b844680a
L
12369
12370 if (dp->name != NULL)
12371 return dp;
12372
12373 switch (dp->op[0].bytemode)
12374 {
1ceb70f8
L
12375 case USE_REG_TABLE:
12376 dp = &reg_table[dp->op[1].bytemode][modrm.reg];
12377 break;
12378
12379 case USE_MOD_TABLE:
91d6fa6a
NC
12380 vindex = modrm.mod == 0x3 ? 1 : 0;
12381 dp = &mod_table[dp->op[1].bytemode][vindex];
1ceb70f8
L
12382 break;
12383
12384 case USE_RM_TABLE:
12385 dp = &rm_table[dp->op[1].bytemode][modrm.rm];
b844680a
L
12386 break;
12387
4e7d34a6 12388 case USE_PREFIX_TABLE:
c0f3af97 12389 if (need_vex)
b844680a 12390 {
c0f3af97
L
12391 /* The prefix in VEX is implicit. */
12392 switch (vex.prefix)
12393 {
12394 case 0:
91d6fa6a 12395 vindex = 0;
c0f3af97
L
12396 break;
12397 case REPE_PREFIX_OPCODE:
91d6fa6a 12398 vindex = 1;
c0f3af97
L
12399 break;
12400 case DATA_PREFIX_OPCODE:
91d6fa6a 12401 vindex = 2;
c0f3af97
L
12402 break;
12403 case REPNE_PREFIX_OPCODE:
91d6fa6a 12404 vindex = 3;
c0f3af97
L
12405 break;
12406 default:
12407 abort ();
12408 break;
12409 }
b844680a 12410 }
7bb15c6f 12411 else
b844680a 12412 {
285ca992
L
12413 int last_prefix = -1;
12414 int prefix = 0;
91d6fa6a 12415 vindex = 0;
285ca992
L
12416 /* We check PREFIX_REPNZ and PREFIX_REPZ before PREFIX_DATA.
12417 When there are multiple PREFIX_REPNZ and PREFIX_REPZ, the
12418 last one wins. */
12419 if ((prefixes & (PREFIX_REPZ | PREFIX_REPNZ)) != 0)
b844680a 12420 {
285ca992 12421 if (last_repz_prefix > last_repnz_prefix)
c0f3af97 12422 {
285ca992
L
12423 vindex = 1;
12424 prefix = PREFIX_REPZ;
12425 last_prefix = last_repz_prefix;
c0f3af97
L
12426 }
12427 else
b844680a 12428 {
285ca992
L
12429 vindex = 3;
12430 prefix = PREFIX_REPNZ;
12431 last_prefix = last_repnz_prefix;
b844680a 12432 }
285ca992
L
12433
12434 /* Ignore the invalid index if it isn't mandatory. */
12435 if (!mandatory_prefix
12436 && (prefix_table[dp->op[1].bytemode][vindex].name
12437 == NULL)
12438 && (prefix_table[dp->op[1].bytemode][vindex].op[0].bytemode
12439 == 0))
12440 vindex = 0;
12441 }
12442
12443 if (vindex == 0 && (prefixes & PREFIX_DATA) != 0)
12444 {
12445 vindex = 2;
12446 prefix = PREFIX_DATA;
12447 last_prefix = last_data_prefix;
12448 }
12449
12450 if (vindex != 0)
12451 {
12452 used_prefixes |= prefix;
12453 all_prefixes[last_prefix] = 0;
b844680a
L
12454 }
12455 }
91d6fa6a 12456 dp = &prefix_table[dp->op[1].bytemode][vindex];
b844680a
L
12457 break;
12458
4e7d34a6 12459 case USE_X86_64_TABLE:
91d6fa6a
NC
12460 vindex = address_mode == mode_64bit ? 1 : 0;
12461 dp = &x86_64_table[dp->op[1].bytemode][vindex];
b844680a
L
12462 break;
12463
4e7d34a6 12464 case USE_3BYTE_TABLE:
8bb15339 12465 FETCH_DATA (info, codep + 2);
91d6fa6a
NC
12466 vindex = *codep++;
12467 dp = &three_byte_table[dp->op[1].bytemode][vindex];
285ca992 12468 end_codep = codep;
8bb15339
L
12469 modrm.mod = (*codep >> 6) & 3;
12470 modrm.reg = (*codep >> 3) & 7;
12471 modrm.rm = *codep & 7;
12472 break;
12473
c0f3af97
L
12474 case USE_VEX_LEN_TABLE:
12475 if (!need_vex)
12476 abort ();
12477
12478 switch (vex.length)
12479 {
12480 case 128:
91d6fa6a 12481 vindex = 0;
c0f3af97
L
12482 break;
12483 case 256:
91d6fa6a 12484 vindex = 1;
c0f3af97
L
12485 break;
12486 default:
12487 abort ();
12488 break;
12489 }
12490
91d6fa6a 12491 dp = &vex_len_table[dp->op[1].bytemode][vindex];
c0f3af97
L
12492 break;
12493
f88c9eb0
SP
12494 case USE_XOP_8F_TABLE:
12495 FETCH_DATA (info, codep + 3);
12496 /* All bits in the REX prefix are ignored. */
12497 rex_ignored = rex;
12498 rex = ~(*codep >> 5) & 0x7;
12499
12500 /* VEX_TABLE_INDEX is the mmmmm part of the XOP byte 1 "RCB.mmmmm". */
12501 switch ((*codep & 0x1f))
12502 {
12503 default:
f07af43e
L
12504 dp = &bad_opcode;
12505 return dp;
5dd85c99
SP
12506 case 0x8:
12507 vex_table_index = XOP_08;
12508 break;
f88c9eb0
SP
12509 case 0x9:
12510 vex_table_index = XOP_09;
12511 break;
12512 case 0xa:
12513 vex_table_index = XOP_0A;
12514 break;
12515 }
12516 codep++;
12517 vex.w = *codep & 0x80;
12518 if (vex.w && address_mode == mode_64bit)
12519 rex |= REX_W;
12520
12521 vex.register_specifier = (~(*codep >> 3)) & 0xf;
12522 if (address_mode != mode_64bit
12523 && vex.register_specifier > 0x7)
f07af43e
L
12524 {
12525 dp = &bad_opcode;
12526 return dp;
12527 }
f88c9eb0
SP
12528
12529 vex.length = (*codep & 0x4) ? 256 : 128;
12530 switch ((*codep & 0x3))
12531 {
12532 case 0:
12533 vex.prefix = 0;
12534 break;
12535 case 1:
12536 vex.prefix = DATA_PREFIX_OPCODE;
12537 break;
12538 case 2:
12539 vex.prefix = REPE_PREFIX_OPCODE;
12540 break;
12541 case 3:
12542 vex.prefix = REPNE_PREFIX_OPCODE;
12543 break;
12544 }
12545 need_vex = 1;
12546 need_vex_reg = 1;
12547 codep++;
91d6fa6a
NC
12548 vindex = *codep++;
12549 dp = &xop_table[vex_table_index][vindex];
c48244a5 12550
285ca992 12551 end_codep = codep;
c48244a5
SP
12552 FETCH_DATA (info, codep + 1);
12553 modrm.mod = (*codep >> 6) & 3;
12554 modrm.reg = (*codep >> 3) & 7;
12555 modrm.rm = *codep & 7;
f88c9eb0
SP
12556 break;
12557
c0f3af97 12558 case USE_VEX_C4_TABLE:
43234a1e 12559 /* VEX prefix. */
c0f3af97
L
12560 FETCH_DATA (info, codep + 3);
12561 /* All bits in the REX prefix are ignored. */
12562 rex_ignored = rex;
12563 rex = ~(*codep >> 5) & 0x7;
12564 switch ((*codep & 0x1f))
12565 {
12566 default:
f07af43e
L
12567 dp = &bad_opcode;
12568 return dp;
c0f3af97 12569 case 0x1:
f88c9eb0 12570 vex_table_index = VEX_0F;
c0f3af97
L
12571 break;
12572 case 0x2:
f88c9eb0 12573 vex_table_index = VEX_0F38;
c0f3af97
L
12574 break;
12575 case 0x3:
f88c9eb0 12576 vex_table_index = VEX_0F3A;
c0f3af97
L
12577 break;
12578 }
12579 codep++;
12580 vex.w = *codep & 0x80;
12581 if (vex.w && address_mode == mode_64bit)
12582 rex |= REX_W;
12583
12584 vex.register_specifier = (~(*codep >> 3)) & 0xf;
12585 if (address_mode != mode_64bit
12586 && vex.register_specifier > 0x7)
f07af43e
L
12587 {
12588 dp = &bad_opcode;
12589 return dp;
12590 }
c0f3af97
L
12591
12592 vex.length = (*codep & 0x4) ? 256 : 128;
12593 switch ((*codep & 0x3))
12594 {
12595 case 0:
12596 vex.prefix = 0;
12597 break;
12598 case 1:
12599 vex.prefix = DATA_PREFIX_OPCODE;
12600 break;
12601 case 2:
12602 vex.prefix = REPE_PREFIX_OPCODE;
12603 break;
12604 case 3:
12605 vex.prefix = REPNE_PREFIX_OPCODE;
12606 break;
12607 }
12608 need_vex = 1;
12609 need_vex_reg = 1;
12610 codep++;
91d6fa6a
NC
12611 vindex = *codep++;
12612 dp = &vex_table[vex_table_index][vindex];
285ca992 12613 end_codep = codep;
c0f3af97 12614 /* There is no MODRM byte for VEX [82|77]. */
91d6fa6a 12615 if (vindex != 0x77 && vindex != 0x82)
c0f3af97
L
12616 {
12617 FETCH_DATA (info, codep + 1);
12618 modrm.mod = (*codep >> 6) & 3;
12619 modrm.reg = (*codep >> 3) & 7;
12620 modrm.rm = *codep & 7;
12621 }
12622 break;
12623
12624 case USE_VEX_C5_TABLE:
43234a1e 12625 /* VEX prefix. */
c0f3af97
L
12626 FETCH_DATA (info, codep + 2);
12627 /* All bits in the REX prefix are ignored. */
12628 rex_ignored = rex;
12629 rex = (*codep & 0x80) ? 0 : REX_R;
12630
12631 vex.register_specifier = (~(*codep >> 3)) & 0xf;
12632 if (address_mode != mode_64bit
12633 && vex.register_specifier > 0x7)
f07af43e
L
12634 {
12635 dp = &bad_opcode;
12636 return dp;
12637 }
c0f3af97 12638
759a05ce
L
12639 vex.w = 0;
12640
c0f3af97
L
12641 vex.length = (*codep & 0x4) ? 256 : 128;
12642 switch ((*codep & 0x3))
12643 {
12644 case 0:
12645 vex.prefix = 0;
12646 break;
12647 case 1:
12648 vex.prefix = DATA_PREFIX_OPCODE;
12649 break;
12650 case 2:
12651 vex.prefix = REPE_PREFIX_OPCODE;
12652 break;
12653 case 3:
12654 vex.prefix = REPNE_PREFIX_OPCODE;
12655 break;
12656 }
12657 need_vex = 1;
12658 need_vex_reg = 1;
12659 codep++;
91d6fa6a
NC
12660 vindex = *codep++;
12661 dp = &vex_table[dp->op[1].bytemode][vindex];
285ca992 12662 end_codep = codep;
c0f3af97 12663 /* There is no MODRM byte for VEX [82|77]. */
91d6fa6a 12664 if (vindex != 0x77 && vindex != 0x82)
c0f3af97
L
12665 {
12666 FETCH_DATA (info, codep + 1);
12667 modrm.mod = (*codep >> 6) & 3;
12668 modrm.reg = (*codep >> 3) & 7;
12669 modrm.rm = *codep & 7;
12670 }
12671 break;
12672
9e30b8e0
L
12673 case USE_VEX_W_TABLE:
12674 if (!need_vex)
12675 abort ();
12676
12677 dp = &vex_w_table[dp->op[1].bytemode][vex.w ? 1 : 0];
12678 break;
12679
43234a1e
L
12680 case USE_EVEX_TABLE:
12681 two_source_ops = 0;
12682 /* EVEX prefix. */
12683 vex.evex = 1;
12684 FETCH_DATA (info, codep + 4);
12685 /* All bits in the REX prefix are ignored. */
12686 rex_ignored = rex;
12687 /* The first byte after 0x62. */
12688 rex = ~(*codep >> 5) & 0x7;
12689 vex.r = *codep & 0x10;
12690 switch ((*codep & 0xf))
12691 {
12692 default:
12693 return &bad_opcode;
12694 case 0x1:
12695 vex_table_index = EVEX_0F;
12696 break;
12697 case 0x2:
12698 vex_table_index = EVEX_0F38;
12699 break;
12700 case 0x3:
12701 vex_table_index = EVEX_0F3A;
12702 break;
12703 }
12704
12705 /* The second byte after 0x62. */
12706 codep++;
12707 vex.w = *codep & 0x80;
12708 if (vex.w && address_mode == mode_64bit)
12709 rex |= REX_W;
12710
12711 vex.register_specifier = (~(*codep >> 3)) & 0xf;
12712 if (address_mode != mode_64bit)
12713 {
12714 /* In 16/32-bit mode silently ignore following bits. */
12715 rex &= ~REX_B;
12716 vex.r = 1;
12717 vex.v = 1;
12718 vex.register_specifier &= 0x7;
12719 }
12720
12721 /* The U bit. */
12722 if (!(*codep & 0x4))
12723 return &bad_opcode;
12724
12725 switch ((*codep & 0x3))
12726 {
12727 case 0:
12728 vex.prefix = 0;
12729 break;
12730 case 1:
12731 vex.prefix = DATA_PREFIX_OPCODE;
12732 break;
12733 case 2:
12734 vex.prefix = REPE_PREFIX_OPCODE;
12735 break;
12736 case 3:
12737 vex.prefix = REPNE_PREFIX_OPCODE;
12738 break;
12739 }
12740
12741 /* The third byte after 0x62. */
12742 codep++;
12743
12744 /* Remember the static rounding bits. */
12745 vex.ll = (*codep >> 5) & 3;
12746 vex.b = (*codep & 0x10) != 0;
12747
12748 vex.v = *codep & 0x8;
12749 vex.mask_register_specifier = *codep & 0x7;
12750 vex.zeroing = *codep & 0x80;
12751
12752 need_vex = 1;
12753 need_vex_reg = 1;
12754 codep++;
12755 vindex = *codep++;
12756 dp = &evex_table[vex_table_index][vindex];
285ca992 12757 end_codep = codep;
43234a1e
L
12758 FETCH_DATA (info, codep + 1);
12759 modrm.mod = (*codep >> 6) & 3;
12760 modrm.reg = (*codep >> 3) & 7;
12761 modrm.rm = *codep & 7;
12762
12763 /* Set vector length. */
12764 if (modrm.mod == 3 && vex.b)
12765 vex.length = 512;
12766 else
12767 {
12768 switch (vex.ll)
12769 {
12770 case 0x0:
12771 vex.length = 128;
12772 break;
12773 case 0x1:
12774 vex.length = 256;
12775 break;
12776 case 0x2:
12777 vex.length = 512;
12778 break;
12779 default:
12780 return &bad_opcode;
12781 }
12782 }
12783 break;
12784
592d1631
L
12785 case 0:
12786 dp = &bad_opcode;
12787 break;
12788
b844680a 12789 default:
d34b5006 12790 abort ();
b844680a
L
12791 }
12792
12793 if (dp->name != NULL)
12794 return dp;
12795 else
8bb15339 12796 return get_valid_dis386 (dp, info);
b844680a
L
12797}
12798
dfc8cf43 12799static void
55cf16e1 12800get_sib (disassemble_info *info, int sizeflag)
dfc8cf43
L
12801{
12802 /* If modrm.mod == 3, operand must be register. */
12803 if (need_modrm
55cf16e1 12804 && ((sizeflag & AFLAG) || address_mode == mode_64bit)
dfc8cf43
L
12805 && modrm.mod != 3
12806 && modrm.rm == 4)
12807 {
12808 FETCH_DATA (info, codep + 2);
12809 sib.index = (codep [1] >> 3) & 7;
12810 sib.scale = (codep [1] >> 6) & 3;
12811 sib.base = codep [1] & 7;
12812 }
12813}
12814
e396998b 12815static int
26ca5450 12816print_insn (bfd_vma pc, disassemble_info *info)
252b5132 12817{
2da11e11 12818 const struct dis386 *dp;
252b5132 12819 int i;
ce518a5f 12820 char *op_txt[MAX_OPERANDS];
252b5132 12821 int needcomma;
df18fdba 12822 int sizeflag, orig_sizeflag;
e396998b 12823 const char *p;
252b5132 12824 struct dis_private priv;
f16cd0d5 12825 int prefix_length;
252b5132 12826
d7921315
L
12827 priv.orig_sizeflag = AFLAG | DFLAG;
12828 if ((info->mach & bfd_mach_i386_i386) != 0)
cb712a9e 12829 address_mode = mode_32bit;
2da11e11 12830 else if (info->mach == bfd_mach_i386_i8086)
d7921315
L
12831 {
12832 address_mode = mode_16bit;
12833 priv.orig_sizeflag = 0;
12834 }
2da11e11 12835 else
d7921315
L
12836 address_mode = mode_64bit;
12837
12838 if (intel_syntax == (char) -1)
12839 intel_syntax = (info->mach & bfd_mach_i386_intel_syntax) != 0;
e396998b
AM
12840
12841 for (p = info->disassembler_options; p != NULL; )
12842 {
0112cd26 12843 if (CONST_STRNEQ (p, "x86-64"))
e396998b 12844 {
cb712a9e 12845 address_mode = mode_64bit;
e396998b
AM
12846 priv.orig_sizeflag = AFLAG | DFLAG;
12847 }
0112cd26 12848 else if (CONST_STRNEQ (p, "i386"))
e396998b 12849 {
cb712a9e 12850 address_mode = mode_32bit;
e396998b
AM
12851 priv.orig_sizeflag = AFLAG | DFLAG;
12852 }
0112cd26 12853 else if (CONST_STRNEQ (p, "i8086"))
e396998b 12854 {
cb712a9e 12855 address_mode = mode_16bit;
e396998b
AM
12856 priv.orig_sizeflag = 0;
12857 }
0112cd26 12858 else if (CONST_STRNEQ (p, "intel"))
e396998b
AM
12859 {
12860 intel_syntax = 1;
9d141669
L
12861 if (CONST_STRNEQ (p + 5, "-mnemonic"))
12862 intel_mnemonic = 1;
e396998b 12863 }
0112cd26 12864 else if (CONST_STRNEQ (p, "att"))
e396998b
AM
12865 {
12866 intel_syntax = 0;
9d141669
L
12867 if (CONST_STRNEQ (p + 3, "-mnemonic"))
12868 intel_mnemonic = 0;
e396998b 12869 }
0112cd26 12870 else if (CONST_STRNEQ (p, "addr"))
e396998b 12871 {
f59a29b9
L
12872 if (address_mode == mode_64bit)
12873 {
12874 if (p[4] == '3' && p[5] == '2')
12875 priv.orig_sizeflag &= ~AFLAG;
12876 else if (p[4] == '6' && p[5] == '4')
12877 priv.orig_sizeflag |= AFLAG;
12878 }
12879 else
12880 {
12881 if (p[4] == '1' && p[5] == '6')
12882 priv.orig_sizeflag &= ~AFLAG;
12883 else if (p[4] == '3' && p[5] == '2')
12884 priv.orig_sizeflag |= AFLAG;
12885 }
e396998b 12886 }
0112cd26 12887 else if (CONST_STRNEQ (p, "data"))
e396998b
AM
12888 {
12889 if (p[4] == '1' && p[5] == '6')
12890 priv.orig_sizeflag &= ~DFLAG;
12891 else if (p[4] == '3' && p[5] == '2')
12892 priv.orig_sizeflag |= DFLAG;
12893 }
0112cd26 12894 else if (CONST_STRNEQ (p, "suffix"))
e396998b
AM
12895 priv.orig_sizeflag |= SUFFIX_ALWAYS;
12896
12897 p = strchr (p, ',');
12898 if (p != NULL)
12899 p++;
12900 }
12901
12902 if (intel_syntax)
12903 {
12904 names64 = intel_names64;
12905 names32 = intel_names32;
12906 names16 = intel_names16;
12907 names8 = intel_names8;
12908 names8rex = intel_names8rex;
12909 names_seg = intel_names_seg;
b9733481 12910 names_mm = intel_names_mm;
7e8b059b 12911 names_bnd = intel_names_bnd;
b9733481
L
12912 names_xmm = intel_names_xmm;
12913 names_ymm = intel_names_ymm;
43234a1e 12914 names_zmm = intel_names_zmm;
db51cc60
L
12915 index64 = intel_index64;
12916 index32 = intel_index32;
43234a1e 12917 names_mask = intel_names_mask;
e396998b
AM
12918 index16 = intel_index16;
12919 open_char = '[';
12920 close_char = ']';
12921 separator_char = '+';
12922 scale_char = '*';
12923 }
12924 else
12925 {
12926 names64 = att_names64;
12927 names32 = att_names32;
12928 names16 = att_names16;
12929 names8 = att_names8;
12930 names8rex = att_names8rex;
12931 names_seg = att_names_seg;
b9733481 12932 names_mm = att_names_mm;
7e8b059b 12933 names_bnd = att_names_bnd;
b9733481
L
12934 names_xmm = att_names_xmm;
12935 names_ymm = att_names_ymm;
43234a1e 12936 names_zmm = att_names_zmm;
db51cc60
L
12937 index64 = att_index64;
12938 index32 = att_index32;
43234a1e 12939 names_mask = att_names_mask;
e396998b
AM
12940 index16 = att_index16;
12941 open_char = '(';
12942 close_char = ')';
12943 separator_char = ',';
12944 scale_char = ',';
12945 }
2da11e11 12946
4fe53c98 12947 /* The output looks better if we put 7 bytes on a line, since that
8a9036a4
L
12948 puts most long word instructions on a single line. Use 8 bytes
12949 for Intel L1OM. */
d7921315 12950 if ((info->mach & bfd_mach_l1om) != 0)
8a9036a4
L
12951 info->bytes_per_line = 8;
12952 else
12953 info->bytes_per_line = 7;
252b5132 12954
26ca5450 12955 info->private_data = &priv;
252b5132
RH
12956 priv.max_fetched = priv.the_buffer;
12957 priv.insn_start = pc;
252b5132
RH
12958
12959 obuf[0] = 0;
ce518a5f
L
12960 for (i = 0; i < MAX_OPERANDS; ++i)
12961 {
12962 op_out[i][0] = 0;
12963 op_index[i] = -1;
12964 }
252b5132
RH
12965
12966 the_info = info;
12967 start_pc = pc;
e396998b
AM
12968 start_codep = priv.the_buffer;
12969 codep = priv.the_buffer;
252b5132 12970
8df14d78 12971 if (OPCODES_SIGSETJMP (priv.bailout) != 0)
5076851f 12972 {
7d421014
ILT
12973 const char *name;
12974
5076851f 12975 /* Getting here means we tried for data but didn't get it. That
e396998b
AM
12976 means we have an incomplete instruction of some sort. Just
12977 print the first byte as a prefix or a .byte pseudo-op. */
12978 if (codep > priv.the_buffer)
5076851f 12979 {
e396998b 12980 name = prefix_name (priv.the_buffer[0], priv.orig_sizeflag);
7d421014
ILT
12981 if (name != NULL)
12982 (*info->fprintf_func) (info->stream, "%s", name);
12983 else
5076851f 12984 {
7d421014
ILT
12985 /* Just print the first byte as a .byte instruction. */
12986 (*info->fprintf_func) (info->stream, ".byte 0x%x",
e396998b 12987 (unsigned int) priv.the_buffer[0]);
5076851f 12988 }
5076851f 12989
7d421014 12990 return 1;
5076851f
ILT
12991 }
12992
12993 return -1;
12994 }
12995
52b15da3 12996 obufp = obuf;
f16cd0d5
L
12997 sizeflag = priv.orig_sizeflag;
12998
12999 if (!ckprefix () || rex_used)
13000 {
13001 /* Too many prefixes or unused REX prefixes. */
13002 for (i = 0;
f6dd4781 13003 i < (int) ARRAY_SIZE (all_prefixes) && all_prefixes[i];
f16cd0d5 13004 i++)
de882298 13005 (*info->fprintf_func) (info->stream, "%s%s",
6c067bbb 13006 i == 0 ? "" : " ",
f16cd0d5 13007 prefix_name (all_prefixes[i], sizeflag));
de882298 13008 return i;
f16cd0d5 13009 }
252b5132
RH
13010
13011 insn_codep = codep;
13012
13013 FETCH_DATA (info, codep + 1);
13014 two_source_ops = (*codep == 0x62) || (*codep == 0xc8);
13015
3e7d61b2 13016 if (((prefixes & PREFIX_FWAIT)
f16cd0d5 13017 && ((*codep < 0xd8) || (*codep > 0xdf))))
252b5132 13018 {
86a80a50 13019 /* Handle prefixes before fwait. */
d9949a36 13020 for (i = 0; i < fwait_prefix && all_prefixes[i];
86a80a50
L
13021 i++)
13022 (*info->fprintf_func) (info->stream, "%s ",
13023 prefix_name (all_prefixes[i], sizeflag));
f16cd0d5 13024 (*info->fprintf_func) (info->stream, "fwait");
86a80a50 13025 return i + 1;
252b5132
RH
13026 }
13027
252b5132
RH
13028 if (*codep == 0x0f)
13029 {
eec0f4ca 13030 unsigned char threebyte;
252b5132 13031 FETCH_DATA (info, codep + 2);
eec0f4ca
L
13032 threebyte = *++codep;
13033 dp = &dis386_twobyte[threebyte];
252b5132 13034 need_modrm = twobyte_has_modrm[*codep];
285ca992 13035 mandatory_prefix = twobyte_has_mandatory_prefix[*codep];
eec0f4ca 13036 codep++;
252b5132
RH
13037 }
13038 else
13039 {
6439fc28 13040 dp = &dis386[*codep];
252b5132 13041 need_modrm = onebyte_has_modrm[*codep];
285ca992 13042 mandatory_prefix = 0;
eec0f4ca 13043 codep++;
252b5132 13044 }
246c51aa 13045
df18fdba
L
13046 /* Save sizeflag for printing the extra prefixes later before updating
13047 it for mnemonic and operand processing. The prefix names depend
13048 only on the address mode. */
13049 orig_sizeflag = sizeflag;
c608c12e 13050 if (prefixes & PREFIX_ADDR)
df18fdba 13051 sizeflag ^= AFLAG;
b844680a 13052 if ((prefixes & PREFIX_DATA))
df18fdba 13053 sizeflag ^= DFLAG;
3ffd33cf 13054
285ca992 13055 end_codep = codep;
8bb15339 13056 if (need_modrm)
252b5132
RH
13057 {
13058 FETCH_DATA (info, codep + 1);
7967e09e
L
13059 modrm.mod = (*codep >> 6) & 3;
13060 modrm.reg = (*codep >> 3) & 7;
13061 modrm.rm = *codep & 7;
252b5132
RH
13062 }
13063
42d5f9c6
MS
13064 need_vex = 0;
13065 need_vex_reg = 0;
13066 vex_w_done = 0;
43234a1e 13067 vex.evex = 0;
55b126d4 13068
ce518a5f 13069 if (dp->name == NULL && dp->op[0].bytemode == FLOATCODE)
252b5132 13070 {
55cf16e1 13071 get_sib (info, sizeflag);
252b5132
RH
13072 dofloat (sizeflag);
13073 }
13074 else
13075 {
8bb15339 13076 dp = get_valid_dis386 (dp, info);
b844680a 13077 if (dp != NULL && putop (dp->name, sizeflag) == 0)
6c067bbb 13078 {
55cf16e1 13079 get_sib (info, sizeflag);
ce518a5f
L
13080 for (i = 0; i < MAX_OPERANDS; ++i)
13081 {
246c51aa 13082 obufp = op_out[i];
ce518a5f
L
13083 op_ad = MAX_OPERANDS - 1 - i;
13084 if (dp->op[i].rtn)
13085 (*dp->op[i].rtn) (dp->op[i].bytemode, sizeflag);
43234a1e
L
13086 /* For EVEX instruction after the last operand masking
13087 should be printed. */
13088 if (i == 0 && vex.evex)
13089 {
13090 /* Don't print {%k0}. */
13091 if (vex.mask_register_specifier)
13092 {
13093 oappend ("{");
13094 oappend (names_mask[vex.mask_register_specifier]);
13095 oappend ("}");
13096 }
13097 if (vex.zeroing)
13098 oappend ("{z}");
13099 }
ce518a5f 13100 }
6439fc28 13101 }
252b5132
RH
13102 }
13103
d869730d 13104 /* Check if the REX prefix is used. */
e2e6193d 13105 if (rex_ignored == 0 && (rex ^ rex_used) == 0 && last_rex_prefix >= 0)
f16cd0d5
L
13106 all_prefixes[last_rex_prefix] = 0;
13107
5e6718e4 13108 /* Check if the SEG prefix is used. */
f16cd0d5
L
13109 if ((prefixes & (PREFIX_CS | PREFIX_SS | PREFIX_DS | PREFIX_ES
13110 | PREFIX_FS | PREFIX_GS)) != 0
285ca992 13111 && (used_prefixes & active_seg_prefix) != 0)
f16cd0d5
L
13112 all_prefixes[last_seg_prefix] = 0;
13113
5e6718e4 13114 /* Check if the ADDR prefix is used. */
f16cd0d5
L
13115 if ((prefixes & PREFIX_ADDR) != 0
13116 && (used_prefixes & PREFIX_ADDR) != 0)
13117 all_prefixes[last_addr_prefix] = 0;
13118
df18fdba
L
13119 /* Check if the DATA prefix is used. */
13120 if ((prefixes & PREFIX_DATA) != 0
13121 && (used_prefixes & PREFIX_DATA) != 0)
13122 all_prefixes[last_data_prefix] = 0;
f16cd0d5 13123
df18fdba 13124 /* Print the extra prefixes. */
f16cd0d5 13125 prefix_length = 0;
f310f33d 13126 for (i = 0; i < (int) ARRAY_SIZE (all_prefixes); i++)
f16cd0d5
L
13127 if (all_prefixes[i])
13128 {
13129 const char *name;
df18fdba 13130 name = prefix_name (all_prefixes[i], orig_sizeflag);
f16cd0d5
L
13131 if (name == NULL)
13132 abort ();
13133 prefix_length += strlen (name) + 1;
13134 (*info->fprintf_func) (info->stream, "%s ", name);
13135 }
b844680a 13136
285ca992
L
13137 /* If the mandatory PREFIX_REPZ/PREFIX_REPNZ/PREFIX_DATA prefix is
13138 unused, opcode is invalid. Since the PREFIX_DATA prefix may be
13139 used by putop and MMX/SSE operand and may be overriden by the
13140 PREFIX_REPZ/PREFIX_REPNZ fix, we check the PREFIX_DATA prefix
13141 separately. */
13142 if (mandatory_prefix
13143 && dp != &bad_opcode
13144 && (((prefixes
13145 & (PREFIX_REPZ | PREFIX_REPNZ)) != 0
13146 && (used_prefixes
13147 & (PREFIX_REPZ | PREFIX_REPNZ)) == 0)
13148 || ((((prefixes
13149 & (PREFIX_REPZ | PREFIX_REPNZ | PREFIX_DATA))
13150 == PREFIX_DATA)
13151 && (used_prefixes & PREFIX_DATA) == 0))))
13152 {
13153 (*info->fprintf_func) (info->stream, "(bad)");
13154 return end_codep - priv.the_buffer;
13155 }
13156
f16cd0d5
L
13157 /* Check maximum code length. */
13158 if ((codep - start_codep) > MAX_CODE_LENGTH)
13159 {
13160 (*info->fprintf_func) (info->stream, "(bad)");
13161 return MAX_CODE_LENGTH;
13162 }
b844680a 13163
ea397f5b 13164 obufp = mnemonicendp;
f16cd0d5 13165 for (i = strlen (obuf) + prefix_length; i < 6; i++)
252b5132
RH
13166 oappend (" ");
13167 oappend (" ");
13168 (*info->fprintf_func) (info->stream, "%s", obuf);
13169
13170 /* The enter and bound instructions are printed with operands in the same
13171 order as the intel book; everything else is printed in reverse order. */
2da11e11 13172 if (intel_syntax || two_source_ops)
252b5132 13173 {
185b1163
L
13174 bfd_vma riprel;
13175
ce518a5f 13176 for (i = 0; i < MAX_OPERANDS; ++i)
6c067bbb 13177 op_txt[i] = op_out[i];
246c51aa 13178
ce518a5f
L
13179 for (i = 0; i < (MAX_OPERANDS >> 1); ++i)
13180 {
6c067bbb
RM
13181 op_ad = op_index[i];
13182 op_index[i] = op_index[MAX_OPERANDS - 1 - i];
13183 op_index[MAX_OPERANDS - 1 - i] = op_ad;
185b1163
L
13184 riprel = op_riprel[i];
13185 op_riprel[i] = op_riprel [MAX_OPERANDS - 1 - i];
13186 op_riprel[MAX_OPERANDS - 1 - i] = riprel;
ce518a5f 13187 }
252b5132
RH
13188 }
13189 else
13190 {
ce518a5f 13191 for (i = 0; i < MAX_OPERANDS; ++i)
6c067bbb 13192 op_txt[MAX_OPERANDS - 1 - i] = op_out[i];
050dfa73
MM
13193 }
13194
ce518a5f
L
13195 needcomma = 0;
13196 for (i = 0; i < MAX_OPERANDS; ++i)
13197 if (*op_txt[i])
13198 {
13199 if (needcomma)
13200 (*info->fprintf_func) (info->stream, ",");
13201 if (op_index[i] != -1 && !op_riprel[i])
13202 (*info->print_address_func) ((bfd_vma) op_address[op_index[i]], info);
13203 else
13204 (*info->fprintf_func) (info->stream, "%s", op_txt[i]);
13205 needcomma = 1;
13206 }
050dfa73 13207
ce518a5f 13208 for (i = 0; i < MAX_OPERANDS; i++)
52b15da3
JH
13209 if (op_index[i] != -1 && op_riprel[i])
13210 {
13211 (*info->fprintf_func) (info->stream, " # ");
13212 (*info->print_address_func) ((bfd_vma) (start_pc + codep - start_codep
13213 + op_address[op_index[i]]), info);
185b1163 13214 break;
52b15da3 13215 }
e396998b 13216 return codep - priv.the_buffer;
252b5132
RH
13217}
13218
6439fc28 13219static const char *float_mem[] = {
252b5132 13220 /* d8 */
7c52e0e8
L
13221 "fadd{s|}",
13222 "fmul{s|}",
13223 "fcom{s|}",
13224 "fcomp{s|}",
13225 "fsub{s|}",
13226 "fsubr{s|}",
13227 "fdiv{s|}",
13228 "fdivr{s|}",
db6eb5be 13229 /* d9 */
7c52e0e8 13230 "fld{s|}",
252b5132 13231 "(bad)",
7c52e0e8
L
13232 "fst{s|}",
13233 "fstp{s|}",
9306ca4a 13234 "fldenvIC",
252b5132 13235 "fldcw",
9306ca4a 13236 "fNstenvIC",
252b5132
RH
13237 "fNstcw",
13238 /* da */
7c52e0e8
L
13239 "fiadd{l|}",
13240 "fimul{l|}",
13241 "ficom{l|}",
13242 "ficomp{l|}",
13243 "fisub{l|}",
13244 "fisubr{l|}",
13245 "fidiv{l|}",
13246 "fidivr{l|}",
252b5132 13247 /* db */
7c52e0e8
L
13248 "fild{l|}",
13249 "fisttp{l|}",
13250 "fist{l|}",
13251 "fistp{l|}",
252b5132 13252 "(bad)",
6439fc28 13253 "fld{t||t|}",
252b5132 13254 "(bad)",
6439fc28 13255 "fstp{t||t|}",
252b5132 13256 /* dc */
7c52e0e8
L
13257 "fadd{l|}",
13258 "fmul{l|}",
13259 "fcom{l|}",
13260 "fcomp{l|}",
13261 "fsub{l|}",
13262 "fsubr{l|}",
13263 "fdiv{l|}",
13264 "fdivr{l|}",
252b5132 13265 /* dd */
7c52e0e8
L
13266 "fld{l|}",
13267 "fisttp{ll|}",
13268 "fst{l||}",
13269 "fstp{l|}",
9306ca4a 13270 "frstorIC",
252b5132 13271 "(bad)",
9306ca4a 13272 "fNsaveIC",
252b5132
RH
13273 "fNstsw",
13274 /* de */
13275 "fiadd",
13276 "fimul",
13277 "ficom",
13278 "ficomp",
13279 "fisub",
13280 "fisubr",
13281 "fidiv",
13282 "fidivr",
13283 /* df */
13284 "fild",
ca164297 13285 "fisttp",
252b5132
RH
13286 "fist",
13287 "fistp",
13288 "fbld",
7c52e0e8 13289 "fild{ll|}",
252b5132 13290 "fbstp",
7c52e0e8 13291 "fistp{ll|}",
1d9f512f
AM
13292};
13293
13294static const unsigned char float_mem_mode[] = {
13295 /* d8 */
13296 d_mode,
13297 d_mode,
13298 d_mode,
13299 d_mode,
13300 d_mode,
13301 d_mode,
13302 d_mode,
13303 d_mode,
13304 /* d9 */
13305 d_mode,
13306 0,
13307 d_mode,
13308 d_mode,
13309 0,
13310 w_mode,
13311 0,
13312 w_mode,
13313 /* da */
13314 d_mode,
13315 d_mode,
13316 d_mode,
13317 d_mode,
13318 d_mode,
13319 d_mode,
13320 d_mode,
13321 d_mode,
13322 /* db */
13323 d_mode,
13324 d_mode,
13325 d_mode,
13326 d_mode,
13327 0,
9306ca4a 13328 t_mode,
1d9f512f 13329 0,
9306ca4a 13330 t_mode,
1d9f512f
AM
13331 /* dc */
13332 q_mode,
13333 q_mode,
13334 q_mode,
13335 q_mode,
13336 q_mode,
13337 q_mode,
13338 q_mode,
13339 q_mode,
13340 /* dd */
13341 q_mode,
13342 q_mode,
13343 q_mode,
13344 q_mode,
13345 0,
13346 0,
13347 0,
13348 w_mode,
13349 /* de */
13350 w_mode,
13351 w_mode,
13352 w_mode,
13353 w_mode,
13354 w_mode,
13355 w_mode,
13356 w_mode,
13357 w_mode,
13358 /* df */
13359 w_mode,
13360 w_mode,
13361 w_mode,
13362 w_mode,
9306ca4a 13363 t_mode,
1d9f512f 13364 q_mode,
9306ca4a 13365 t_mode,
1d9f512f 13366 q_mode
252b5132
RH
13367};
13368
ce518a5f
L
13369#define ST { OP_ST, 0 }
13370#define STi { OP_STi, 0 }
252b5132 13371
4efba78c
L
13372#define FGRPd9_2 NULL, { { NULL, 0 } }
13373#define FGRPd9_4 NULL, { { NULL, 1 } }
13374#define FGRPd9_5 NULL, { { NULL, 2 } }
13375#define FGRPd9_6 NULL, { { NULL, 3 } }
13376#define FGRPd9_7 NULL, { { NULL, 4 } }
13377#define FGRPda_5 NULL, { { NULL, 5 } }
13378#define FGRPdb_4 NULL, { { NULL, 6 } }
13379#define FGRPde_3 NULL, { { NULL, 7 } }
13380#define FGRPdf_4 NULL, { { NULL, 8 } }
252b5132 13381
2da11e11 13382static const struct dis386 float_reg[][8] = {
252b5132
RH
13383 /* d8 */
13384 {
ce518a5f
L
13385 { "fadd", { ST, STi } },
13386 { "fmul", { ST, STi } },
13387 { "fcom", { STi } },
13388 { "fcomp", { STi } },
13389 { "fsub", { ST, STi } },
13390 { "fsubr", { ST, STi } },
13391 { "fdiv", { ST, STi } },
13392 { "fdivr", { ST, STi } },
252b5132
RH
13393 },
13394 /* d9 */
13395 {
ce518a5f
L
13396 { "fld", { STi } },
13397 { "fxch", { STi } },
252b5132 13398 { FGRPd9_2 },
592d1631 13399 { Bad_Opcode },
252b5132
RH
13400 { FGRPd9_4 },
13401 { FGRPd9_5 },
13402 { FGRPd9_6 },
13403 { FGRPd9_7 },
13404 },
13405 /* da */
13406 {
ce518a5f
L
13407 { "fcmovb", { ST, STi } },
13408 { "fcmove", { ST, STi } },
13409 { "fcmovbe",{ ST, STi } },
13410 { "fcmovu", { ST, STi } },
592d1631 13411 { Bad_Opcode },
252b5132 13412 { FGRPda_5 },
592d1631
L
13413 { Bad_Opcode },
13414 { Bad_Opcode },
252b5132
RH
13415 },
13416 /* db */
13417 {
ce518a5f
L
13418 { "fcmovnb",{ ST, STi } },
13419 { "fcmovne",{ ST, STi } },
13420 { "fcmovnbe",{ ST, STi } },
13421 { "fcmovnu",{ ST, STi } },
252b5132 13422 { FGRPdb_4 },
ce518a5f
L
13423 { "fucomi", { ST, STi } },
13424 { "fcomi", { ST, STi } },
592d1631 13425 { Bad_Opcode },
252b5132
RH
13426 },
13427 /* dc */
13428 {
ce518a5f
L
13429 { "fadd", { STi, ST } },
13430 { "fmul", { STi, ST } },
592d1631
L
13431 { Bad_Opcode },
13432 { Bad_Opcode },
9d141669
L
13433 { "fsub!M", { STi, ST } },
13434 { "fsubM", { STi, ST } },
13435 { "fdiv!M", { STi, ST } },
13436 { "fdivM", { STi, ST } },
252b5132
RH
13437 },
13438 /* dd */
13439 {
ce518a5f 13440 { "ffree", { STi } },
592d1631 13441 { Bad_Opcode },
ce518a5f
L
13442 { "fst", { STi } },
13443 { "fstp", { STi } },
13444 { "fucom", { STi } },
13445 { "fucomp", { STi } },
592d1631
L
13446 { Bad_Opcode },
13447 { Bad_Opcode },
252b5132
RH
13448 },
13449 /* de */
13450 {
ce518a5f
L
13451 { "faddp", { STi, ST } },
13452 { "fmulp", { STi, ST } },
592d1631 13453 { Bad_Opcode },
252b5132 13454 { FGRPde_3 },
9d141669
L
13455 { "fsub!Mp", { STi, ST } },
13456 { "fsubMp", { STi, ST } },
13457 { "fdiv!Mp", { STi, ST } },
13458 { "fdivMp", { STi, ST } },
252b5132
RH
13459 },
13460 /* df */
13461 {
ce518a5f 13462 { "ffreep", { STi } },
592d1631
L
13463 { Bad_Opcode },
13464 { Bad_Opcode },
13465 { Bad_Opcode },
252b5132 13466 { FGRPdf_4 },
ce518a5f
L
13467 { "fucomip", { ST, STi } },
13468 { "fcomip", { ST, STi } },
592d1631 13469 { Bad_Opcode },
252b5132
RH
13470 },
13471};
13472
252b5132
RH
13473static char *fgrps[][8] = {
13474 /* d9_2 0 */
13475 {
13476 "fnop","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
13477 },
13478
13479 /* d9_4 1 */
13480 {
13481 "fchs","fabs","(bad)","(bad)","ftst","fxam","(bad)","(bad)",
13482 },
13483
13484 /* d9_5 2 */
13485 {
13486 "fld1","fldl2t","fldl2e","fldpi","fldlg2","fldln2","fldz","(bad)",
13487 },
13488
13489 /* d9_6 3 */
13490 {
13491 "f2xm1","fyl2x","fptan","fpatan","fxtract","fprem1","fdecstp","fincstp",
13492 },
13493
13494 /* d9_7 4 */
13495 {
13496 "fprem","fyl2xp1","fsqrt","fsincos","frndint","fscale","fsin","fcos",
13497 },
13498
13499 /* da_5 5 */
13500 {
13501 "(bad)","fucompp","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
13502 },
13503
13504 /* db_4 6 */
13505 {
309d3373
JB
13506 "fNeni(8087 only)","fNdisi(8087 only)","fNclex","fNinit",
13507 "fNsetpm(287 only)","frstpm(287 only)","(bad)","(bad)",
252b5132
RH
13508 },
13509
13510 /* de_3 7 */
13511 {
13512 "(bad)","fcompp","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
13513 },
13514
13515 /* df_4 8 */
13516 {
13517 "fNstsw","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
13518 },
13519};
13520
b6169b20
L
13521static void
13522swap_operand (void)
13523{
13524 mnemonicendp[0] = '.';
13525 mnemonicendp[1] = 's';
13526 mnemonicendp += 2;
13527}
13528
b844680a
L
13529static void
13530OP_Skip_MODRM (int bytemode ATTRIBUTE_UNUSED,
13531 int sizeflag ATTRIBUTE_UNUSED)
13532{
13533 /* Skip mod/rm byte. */
13534 MODRM_CHECK;
13535 codep++;
13536}
13537
252b5132 13538static void
26ca5450 13539dofloat (int sizeflag)
252b5132 13540{
2da11e11 13541 const struct dis386 *dp;
252b5132
RH
13542 unsigned char floatop;
13543
13544 floatop = codep[-1];
13545
7967e09e 13546 if (modrm.mod != 3)
252b5132 13547 {
7967e09e 13548 int fp_indx = (floatop - 0xd8) * 8 + modrm.reg;
1d9f512f
AM
13549
13550 putop (float_mem[fp_indx], sizeflag);
ce518a5f 13551 obufp = op_out[0];
6e50d963 13552 op_ad = 2;
1d9f512f 13553 OP_E (float_mem_mode[fp_indx], sizeflag);
252b5132
RH
13554 return;
13555 }
6608db57 13556 /* Skip mod/rm byte. */
4bba6815 13557 MODRM_CHECK;
252b5132
RH
13558 codep++;
13559
7967e09e 13560 dp = &float_reg[floatop - 0xd8][modrm.reg];
252b5132
RH
13561 if (dp->name == NULL)
13562 {
7967e09e 13563 putop (fgrps[dp->op[0].bytemode][modrm.rm], sizeflag);
252b5132 13564
6608db57 13565 /* Instruction fnstsw is only one with strange arg. */
252b5132 13566 if (floatop == 0xdf && codep[-1] == 0xe0)
ce518a5f 13567 strcpy (op_out[0], names16[0]);
252b5132
RH
13568 }
13569 else
13570 {
13571 putop (dp->name, sizeflag);
13572
ce518a5f 13573 obufp = op_out[0];
6e50d963 13574 op_ad = 2;
ce518a5f
L
13575 if (dp->op[0].rtn)
13576 (*dp->op[0].rtn) (dp->op[0].bytemode, sizeflag);
6e50d963 13577
ce518a5f 13578 obufp = op_out[1];
6e50d963 13579 op_ad = 1;
ce518a5f
L
13580 if (dp->op[1].rtn)
13581 (*dp->op[1].rtn) (dp->op[1].bytemode, sizeflag);
252b5132
RH
13582 }
13583}
13584
9ce09ba2
RM
13585/* Like oappend (below), but S is a string starting with '%'.
13586 In Intel syntax, the '%' is elided. */
13587static void
13588oappend_maybe_intel (const char *s)
13589{
13590 oappend (s + intel_syntax);
13591}
13592
252b5132 13593static void
26ca5450 13594OP_ST (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 13595{
9ce09ba2 13596 oappend_maybe_intel ("%st");
252b5132
RH
13597}
13598
252b5132 13599static void
26ca5450 13600OP_STi (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 13601{
7967e09e 13602 sprintf (scratchbuf, "%%st(%d)", modrm.rm);
9ce09ba2 13603 oappend_maybe_intel (scratchbuf);
252b5132
RH
13604}
13605
6608db57 13606/* Capital letters in template are macros. */
6439fc28 13607static int
d3ce72d0 13608putop (const char *in_template, int sizeflag)
252b5132 13609{
2da11e11 13610 const char *p;
9306ca4a 13611 int alt = 0;
9d141669 13612 int cond = 1;
98b528ac
L
13613 unsigned int l = 0, len = 1;
13614 char last[4];
13615
13616#define SAVE_LAST(c) \
13617 if (l < len && l < sizeof (last)) \
13618 last[l++] = c; \
13619 else \
13620 abort ();
252b5132 13621
d3ce72d0 13622 for (p = in_template; *p; p++)
252b5132
RH
13623 {
13624 switch (*p)
13625 {
13626 default:
13627 *obufp++ = *p;
13628 break;
98b528ac
L
13629 case '%':
13630 len++;
13631 break;
9d141669
L
13632 case '!':
13633 cond = 0;
13634 break;
6439fc28
AM
13635 case '{':
13636 alt = 0;
13637 if (intel_syntax)
6439fc28
AM
13638 {
13639 while (*++p != '|')
7c52e0e8
L
13640 if (*p == '}' || *p == '\0')
13641 abort ();
6439fc28 13642 }
9306ca4a
JB
13643 /* Fall through. */
13644 case 'I':
13645 alt = 1;
13646 continue;
6439fc28
AM
13647 case '|':
13648 while (*++p != '}')
13649 {
13650 if (*p == '\0')
13651 abort ();
13652 }
13653 break;
13654 case '}':
13655 break;
252b5132 13656 case 'A':
db6eb5be
AM
13657 if (intel_syntax)
13658 break;
7967e09e 13659 if (modrm.mod != 3 || (sizeflag & SUFFIX_ALWAYS))
252b5132
RH
13660 *obufp++ = 'b';
13661 break;
13662 case 'B':
4b06377f
L
13663 if (l == 0 && len == 1)
13664 {
13665case_B:
13666 if (intel_syntax)
13667 break;
13668 if (sizeflag & SUFFIX_ALWAYS)
13669 *obufp++ = 'b';
13670 }
13671 else
13672 {
13673 if (l != 1
13674 || len != 2
13675 || last[0] != 'L')
13676 {
13677 SAVE_LAST (*p);
13678 break;
13679 }
13680
13681 if (address_mode == mode_64bit
13682 && !(prefixes & PREFIX_ADDR))
13683 {
13684 *obufp++ = 'a';
13685 *obufp++ = 'b';
13686 *obufp++ = 's';
13687 }
13688
13689 goto case_B;
13690 }
252b5132 13691 break;
9306ca4a
JB
13692 case 'C':
13693 if (intel_syntax && !alt)
13694 break;
13695 if ((prefixes & PREFIX_DATA) || (sizeflag & SUFFIX_ALWAYS))
13696 {
13697 if (sizeflag & DFLAG)
13698 *obufp++ = intel_syntax ? 'd' : 'l';
13699 else
13700 *obufp++ = intel_syntax ? 'w' : 's';
13701 used_prefixes |= (prefixes & PREFIX_DATA);
13702 }
13703 break;
ed7841b3
JB
13704 case 'D':
13705 if (intel_syntax || !(sizeflag & SUFFIX_ALWAYS))
13706 break;
161a04f6 13707 USED_REX (REX_W);
7967e09e 13708 if (modrm.mod == 3)
ed7841b3 13709 {
161a04f6 13710 if (rex & REX_W)
ed7841b3 13711 *obufp++ = 'q';
ed7841b3 13712 else
f16cd0d5
L
13713 {
13714 if (sizeflag & DFLAG)
13715 *obufp++ = intel_syntax ? 'd' : 'l';
13716 else
13717 *obufp++ = 'w';
13718 used_prefixes |= (prefixes & PREFIX_DATA);
13719 }
ed7841b3
JB
13720 }
13721 else
13722 *obufp++ = 'w';
13723 break;
252b5132 13724 case 'E': /* For jcxz/jecxz */
cb712a9e 13725 if (address_mode == mode_64bit)
c1a64871
JH
13726 {
13727 if (sizeflag & AFLAG)
13728 *obufp++ = 'r';
13729 else
13730 *obufp++ = 'e';
13731 }
13732 else
13733 if (sizeflag & AFLAG)
13734 *obufp++ = 'e';
3ffd33cf
AM
13735 used_prefixes |= (prefixes & PREFIX_ADDR);
13736 break;
13737 case 'F':
db6eb5be
AM
13738 if (intel_syntax)
13739 break;
e396998b 13740 if ((prefixes & PREFIX_ADDR) || (sizeflag & SUFFIX_ALWAYS))
3ffd33cf
AM
13741 {
13742 if (sizeflag & AFLAG)
cb712a9e 13743 *obufp++ = address_mode == mode_64bit ? 'q' : 'l';
3ffd33cf 13744 else
cb712a9e 13745 *obufp++ = address_mode == mode_64bit ? 'l' : 'w';
3ffd33cf
AM
13746 used_prefixes |= (prefixes & PREFIX_ADDR);
13747 }
252b5132 13748 break;
52fd6d94
JB
13749 case 'G':
13750 if (intel_syntax || (obufp[-1] != 's' && !(sizeflag & SUFFIX_ALWAYS)))
13751 break;
161a04f6 13752 if ((rex & REX_W) || (sizeflag & DFLAG))
52fd6d94
JB
13753 *obufp++ = 'l';
13754 else
13755 *obufp++ = 'w';
161a04f6 13756 if (!(rex & REX_W))
52fd6d94
JB
13757 used_prefixes |= (prefixes & PREFIX_DATA);
13758 break;
5dd0794d 13759 case 'H':
db6eb5be
AM
13760 if (intel_syntax)
13761 break;
5dd0794d
AM
13762 if ((prefixes & (PREFIX_CS | PREFIX_DS)) == PREFIX_CS
13763 || (prefixes & (PREFIX_CS | PREFIX_DS)) == PREFIX_DS)
13764 {
13765 used_prefixes |= prefixes & (PREFIX_CS | PREFIX_DS);
13766 *obufp++ = ',';
13767 *obufp++ = 'p';
13768 if (prefixes & PREFIX_DS)
13769 *obufp++ = 't';
13770 else
13771 *obufp++ = 'n';
13772 }
13773 break;
9306ca4a
JB
13774 case 'J':
13775 if (intel_syntax)
13776 break;
13777 *obufp++ = 'l';
13778 break;
42903f7f
L
13779 case 'K':
13780 USED_REX (REX_W);
13781 if (rex & REX_W)
13782 *obufp++ = 'q';
13783 else
13784 *obufp++ = 'd';
13785 break;
6dd5059a
L
13786 case 'Z':
13787 if (intel_syntax)
13788 break;
13789 if (address_mode == mode_64bit && (sizeflag & SUFFIX_ALWAYS))
13790 {
13791 *obufp++ = 'q';
13792 break;
13793 }
13794 /* Fall through. */
98b528ac 13795 goto case_L;
252b5132 13796 case 'L':
98b528ac
L
13797 if (l != 0 || len != 1)
13798 {
13799 SAVE_LAST (*p);
13800 break;
13801 }
13802case_L:
db6eb5be
AM
13803 if (intel_syntax)
13804 break;
252b5132
RH
13805 if (sizeflag & SUFFIX_ALWAYS)
13806 *obufp++ = 'l';
252b5132 13807 break;
9d141669
L
13808 case 'M':
13809 if (intel_mnemonic != cond)
13810 *obufp++ = 'r';
13811 break;
252b5132
RH
13812 case 'N':
13813 if ((prefixes & PREFIX_FWAIT) == 0)
13814 *obufp++ = 'n';
7d421014
ILT
13815 else
13816 used_prefixes |= PREFIX_FWAIT;
252b5132 13817 break;
52b15da3 13818 case 'O':
161a04f6
L
13819 USED_REX (REX_W);
13820 if (rex & REX_W)
6439fc28 13821 *obufp++ = 'o';
a35ca55a
JB
13822 else if (intel_syntax && (sizeflag & DFLAG))
13823 *obufp++ = 'q';
52b15da3
JH
13824 else
13825 *obufp++ = 'd';
161a04f6 13826 if (!(rex & REX_W))
a35ca55a 13827 used_prefixes |= (prefixes & PREFIX_DATA);
52b15da3 13828 break;
6439fc28 13829 case 'T':
d9e3625e
L
13830 if (!intel_syntax
13831 && address_mode == mode_64bit
7bb15c6f 13832 && ((sizeflag & DFLAG) || (rex & REX_W)))
6439fc28
AM
13833 {
13834 *obufp++ = 'q';
13835 break;
13836 }
6608db57 13837 /* Fall through. */
252b5132 13838 case 'P':
db6eb5be 13839 if (intel_syntax)
d9e3625e
L
13840 {
13841 if ((rex & REX_W) == 0
13842 && (prefixes & PREFIX_DATA))
13843 {
13844 if ((sizeflag & DFLAG) == 0)
13845 *obufp++ = 'w';
13846 used_prefixes |= (prefixes & PREFIX_DATA);
13847 }
13848 break;
13849 }
252b5132 13850 if ((prefixes & PREFIX_DATA)
161a04f6 13851 || (rex & REX_W)
e396998b 13852 || (sizeflag & SUFFIX_ALWAYS))
252b5132 13853 {
161a04f6
L
13854 USED_REX (REX_W);
13855 if (rex & REX_W)
52b15da3 13856 *obufp++ = 'q';
c2419411 13857 else
52b15da3
JH
13858 {
13859 if (sizeflag & DFLAG)
13860 *obufp++ = 'l';
13861 else
13862 *obufp++ = 'w';
f16cd0d5 13863 used_prefixes |= (prefixes & PREFIX_DATA);
52b15da3 13864 }
252b5132
RH
13865 }
13866 break;
6439fc28 13867 case 'U':
db6eb5be
AM
13868 if (intel_syntax)
13869 break;
7bb15c6f 13870 if (address_mode == mode_64bit
6c067bbb 13871 && ((sizeflag & DFLAG) || (rex & REX_W)))
6439fc28 13872 {
7967e09e 13873 if (modrm.mod != 3 || (sizeflag & SUFFIX_ALWAYS))
1a114b12 13874 *obufp++ = 'q';
6439fc28
AM
13875 break;
13876 }
6608db57 13877 /* Fall through. */
98b528ac 13878 goto case_Q;
252b5132 13879 case 'Q':
98b528ac 13880 if (l == 0 && len == 1)
252b5132 13881 {
98b528ac
L
13882case_Q:
13883 if (intel_syntax && !alt)
13884 break;
13885 USED_REX (REX_W);
13886 if (modrm.mod != 3 || (sizeflag & SUFFIX_ALWAYS))
52b15da3 13887 {
98b528ac
L
13888 if (rex & REX_W)
13889 *obufp++ = 'q';
52b15da3 13890 else
98b528ac
L
13891 {
13892 if (sizeflag & DFLAG)
13893 *obufp++ = intel_syntax ? 'd' : 'l';
13894 else
13895 *obufp++ = 'w';
f16cd0d5 13896 used_prefixes |= (prefixes & PREFIX_DATA);
98b528ac 13897 }
52b15da3 13898 }
98b528ac
L
13899 }
13900 else
13901 {
13902 if (l != 1 || len != 2 || last[0] != 'L')
13903 {
13904 SAVE_LAST (*p);
13905 break;
13906 }
13907 if (intel_syntax
13908 || (modrm.mod == 3 && !(sizeflag & SUFFIX_ALWAYS)))
13909 break;
13910 if ((rex & REX_W))
13911 {
13912 USED_REX (REX_W);
13913 *obufp++ = 'q';
13914 }
13915 else
13916 *obufp++ = 'l';
252b5132
RH
13917 }
13918 break;
13919 case 'R':
161a04f6
L
13920 USED_REX (REX_W);
13921 if (rex & REX_W)
a35ca55a
JB
13922 *obufp++ = 'q';
13923 else if (sizeflag & DFLAG)
c608c12e 13924 {
a35ca55a 13925 if (intel_syntax)
c608c12e 13926 *obufp++ = 'd';
c608c12e 13927 else
a35ca55a 13928 *obufp++ = 'l';
c608c12e 13929 }
252b5132 13930 else
a35ca55a
JB
13931 *obufp++ = 'w';
13932 if (intel_syntax && !p[1]
161a04f6 13933 && ((rex & REX_W) || (sizeflag & DFLAG)))
a35ca55a 13934 *obufp++ = 'e';
161a04f6 13935 if (!(rex & REX_W))
52b15da3 13936 used_prefixes |= (prefixes & PREFIX_DATA);
252b5132 13937 break;
1a114b12 13938 case 'V':
4b06377f 13939 if (l == 0 && len == 1)
1a114b12 13940 {
4b06377f
L
13941 if (intel_syntax)
13942 break;
7bb15c6f 13943 if (address_mode == mode_64bit
6c067bbb 13944 && ((sizeflag & DFLAG) || (rex & REX_W)))
4b06377f
L
13945 {
13946 if (sizeflag & SUFFIX_ALWAYS)
13947 *obufp++ = 'q';
13948 break;
13949 }
13950 }
13951 else
13952 {
13953 if (l != 1
13954 || len != 2
13955 || last[0] != 'L')
13956 {
13957 SAVE_LAST (*p);
13958 break;
13959 }
13960
13961 if (rex & REX_W)
13962 {
13963 *obufp++ = 'a';
13964 *obufp++ = 'b';
13965 *obufp++ = 's';
13966 }
1a114b12
JB
13967 }
13968 /* Fall through. */
4b06377f 13969 goto case_S;
252b5132 13970 case 'S':
4b06377f 13971 if (l == 0 && len == 1)
252b5132 13972 {
4b06377f
L
13973case_S:
13974 if (intel_syntax)
13975 break;
13976 if (sizeflag & SUFFIX_ALWAYS)
52b15da3 13977 {
4b06377f
L
13978 if (rex & REX_W)
13979 *obufp++ = 'q';
52b15da3 13980 else
4b06377f
L
13981 {
13982 if (sizeflag & DFLAG)
13983 *obufp++ = 'l';
13984 else
13985 *obufp++ = 'w';
13986 used_prefixes |= (prefixes & PREFIX_DATA);
13987 }
13988 }
13989 }
13990 else
13991 {
13992 if (l != 1
13993 || len != 2
13994 || last[0] != 'L')
13995 {
13996 SAVE_LAST (*p);
13997 break;
52b15da3 13998 }
4b06377f
L
13999
14000 if (address_mode == mode_64bit
14001 && !(prefixes & PREFIX_ADDR))
14002 {
14003 *obufp++ = 'a';
14004 *obufp++ = 'b';
14005 *obufp++ = 's';
14006 }
14007
14008 goto case_S;
252b5132 14009 }
252b5132 14010 break;
041bd2e0 14011 case 'X':
c0f3af97
L
14012 if (l != 0 || len != 1)
14013 {
14014 SAVE_LAST (*p);
14015 break;
14016 }
14017 if (need_vex && vex.prefix)
14018 {
14019 if (vex.prefix == DATA_PREFIX_OPCODE)
14020 *obufp++ = 'd';
14021 else
14022 *obufp++ = 's';
14023 }
041bd2e0 14024 else
f16cd0d5
L
14025 {
14026 if (prefixes & PREFIX_DATA)
14027 *obufp++ = 'd';
14028 else
14029 *obufp++ = 's';
14030 used_prefixes |= (prefixes & PREFIX_DATA);
14031 }
041bd2e0 14032 break;
76f227a5 14033 case 'Y':
c0f3af97 14034 if (l == 0 && len == 1)
76f227a5 14035 {
c0f3af97
L
14036 if (intel_syntax || !(sizeflag & SUFFIX_ALWAYS))
14037 break;
14038 if (rex & REX_W)
14039 {
14040 USED_REX (REX_W);
14041 *obufp++ = 'q';
14042 }
14043 break;
14044 }
14045 else
14046 {
14047 if (l != 1 || len != 2 || last[0] != 'X')
14048 {
14049 SAVE_LAST (*p);
14050 break;
14051 }
14052 if (!need_vex)
14053 abort ();
14054 if (intel_syntax
14055 || (modrm.mod == 3 && !(sizeflag & SUFFIX_ALWAYS)))
14056 break;
14057 switch (vex.length)
14058 {
14059 case 128:
14060 *obufp++ = 'x';
14061 break;
14062 case 256:
14063 *obufp++ = 'y';
14064 break;
14065 default:
14066 abort ();
14067 }
76f227a5
JH
14068 }
14069 break;
252b5132 14070 case 'W':
0bfee649 14071 if (l == 0 && len == 1)
a35ca55a 14072 {
0bfee649
L
14073 /* operand size flag for cwtl, cbtw */
14074 USED_REX (REX_W);
14075 if (rex & REX_W)
14076 {
14077 if (intel_syntax)
14078 *obufp++ = 'd';
14079 else
14080 *obufp++ = 'l';
14081 }
14082 else if (sizeflag & DFLAG)
14083 *obufp++ = 'w';
a35ca55a 14084 else
0bfee649
L
14085 *obufp++ = 'b';
14086 if (!(rex & REX_W))
14087 used_prefixes |= (prefixes & PREFIX_DATA);
a35ca55a 14088 }
252b5132 14089 else
0bfee649 14090 {
6c30d220
L
14091 if (l != 1
14092 || len != 2
14093 || (last[0] != 'X'
14094 && last[0] != 'L'))
0bfee649
L
14095 {
14096 SAVE_LAST (*p);
14097 break;
14098 }
14099 if (!need_vex)
14100 abort ();
6c30d220
L
14101 if (last[0] == 'X')
14102 *obufp++ = vex.w ? 'd': 's';
14103 else
14104 *obufp++ = vex.w ? 'q': 'd';
0bfee649 14105 }
252b5132
RH
14106 break;
14107 }
9306ca4a 14108 alt = 0;
252b5132
RH
14109 }
14110 *obufp = 0;
ea397f5b 14111 mnemonicendp = obufp;
6439fc28 14112 return 0;
252b5132
RH
14113}
14114
14115static void
26ca5450 14116oappend (const char *s)
252b5132 14117{
ea397f5b 14118 obufp = stpcpy (obufp, s);
252b5132
RH
14119}
14120
14121static void
26ca5450 14122append_seg (void)
252b5132 14123{
285ca992
L
14124 /* Only print the active segment register. */
14125 if (!active_seg_prefix)
14126 return;
14127
14128 used_prefixes |= active_seg_prefix;
14129 switch (active_seg_prefix)
7d421014 14130 {
285ca992 14131 case PREFIX_CS:
9ce09ba2 14132 oappend_maybe_intel ("%cs:");
285ca992
L
14133 break;
14134 case PREFIX_DS:
9ce09ba2 14135 oappend_maybe_intel ("%ds:");
285ca992
L
14136 break;
14137 case PREFIX_SS:
9ce09ba2 14138 oappend_maybe_intel ("%ss:");
285ca992
L
14139 break;
14140 case PREFIX_ES:
9ce09ba2 14141 oappend_maybe_intel ("%es:");
285ca992
L
14142 break;
14143 case PREFIX_FS:
9ce09ba2 14144 oappend_maybe_intel ("%fs:");
285ca992
L
14145 break;
14146 case PREFIX_GS:
9ce09ba2 14147 oappend_maybe_intel ("%gs:");
285ca992
L
14148 break;
14149 default:
14150 break;
7d421014 14151 }
252b5132
RH
14152}
14153
14154static void
26ca5450 14155OP_indirE (int bytemode, int sizeflag)
252b5132
RH
14156{
14157 if (!intel_syntax)
14158 oappend ("*");
14159 OP_E (bytemode, sizeflag);
14160}
14161
52b15da3 14162static void
26ca5450 14163print_operand_value (char *buf, int hex, bfd_vma disp)
52b15da3 14164{
cb712a9e 14165 if (address_mode == mode_64bit)
52b15da3
JH
14166 {
14167 if (hex)
14168 {
14169 char tmp[30];
14170 int i;
14171 buf[0] = '0';
14172 buf[1] = 'x';
14173 sprintf_vma (tmp, disp);
6608db57 14174 for (i = 0; tmp[i] == '0' && tmp[i + 1]; i++);
52b15da3
JH
14175 strcpy (buf + 2, tmp + i);
14176 }
14177 else
14178 {
14179 bfd_signed_vma v = disp;
14180 char tmp[30];
14181 int i;
14182 if (v < 0)
14183 {
14184 *(buf++) = '-';
14185 v = -disp;
6608db57 14186 /* Check for possible overflow on 0x8000000000000000. */
52b15da3
JH
14187 if (v < 0)
14188 {
14189 strcpy (buf, "9223372036854775808");
14190 return;
14191 }
14192 }
14193 if (!v)
14194 {
14195 strcpy (buf, "0");
14196 return;
14197 }
14198
14199 i = 0;
14200 tmp[29] = 0;
14201 while (v)
14202 {
6608db57 14203 tmp[28 - i] = (v % 10) + '0';
52b15da3
JH
14204 v /= 10;
14205 i++;
14206 }
14207 strcpy (buf, tmp + 29 - i);
14208 }
14209 }
14210 else
14211 {
14212 if (hex)
14213 sprintf (buf, "0x%x", (unsigned int) disp);
14214 else
14215 sprintf (buf, "%d", (int) disp);
14216 }
14217}
14218
5d669648
L
14219/* Put DISP in BUF as signed hex number. */
14220
14221static void
14222print_displacement (char *buf, bfd_vma disp)
14223{
14224 bfd_signed_vma val = disp;
14225 char tmp[30];
14226 int i, j = 0;
14227
14228 if (val < 0)
14229 {
14230 buf[j++] = '-';
14231 val = -disp;
14232
14233 /* Check for possible overflow. */
14234 if (val < 0)
14235 {
14236 switch (address_mode)
14237 {
14238 case mode_64bit:
14239 strcpy (buf + j, "0x8000000000000000");
14240 break;
14241 case mode_32bit:
14242 strcpy (buf + j, "0x80000000");
14243 break;
14244 case mode_16bit:
14245 strcpy (buf + j, "0x8000");
14246 break;
14247 }
14248 return;
14249 }
14250 }
14251
14252 buf[j++] = '0';
14253 buf[j++] = 'x';
14254
0af1713e 14255 sprintf_vma (tmp, (bfd_vma) val);
5d669648
L
14256 for (i = 0; tmp[i] == '0'; i++)
14257 continue;
14258 if (tmp[i] == '\0')
14259 i--;
14260 strcpy (buf + j, tmp + i);
14261}
14262
3f31e633
JB
14263static void
14264intel_operand_size (int bytemode, int sizeflag)
14265{
43234a1e
L
14266 if (vex.evex
14267 && vex.b
14268 && (bytemode == x_mode
14269 || bytemode == evex_half_bcst_xmmq_mode))
14270 {
14271 if (vex.w)
14272 oappend ("QWORD PTR ");
14273 else
14274 oappend ("DWORD PTR ");
14275 return;
14276 }
3f31e633
JB
14277 switch (bytemode)
14278 {
14279 case b_mode:
b6169b20 14280 case b_swap_mode:
42903f7f 14281 case dqb_mode:
1ba585e8 14282 case db_mode:
3f31e633
JB
14283 oappend ("BYTE PTR ");
14284 break;
14285 case w_mode:
1ba585e8 14286 case dw_mode:
3f31e633 14287 case dqw_mode:
1ba585e8 14288 case dqw_swap_mode:
3f31e633
JB
14289 oappend ("WORD PTR ");
14290 break;
1a114b12 14291 case stack_v_mode:
7bb15c6f 14292 if (address_mode == mode_64bit && ((sizeflag & DFLAG) || (rex & REX_W)))
3f31e633
JB
14293 {
14294 oappend ("QWORD PTR ");
3f31e633
JB
14295 break;
14296 }
14297 /* FALLTHRU */
14298 case v_mode:
b6169b20 14299 case v_swap_mode:
3f31e633 14300 case dq_mode:
161a04f6
L
14301 USED_REX (REX_W);
14302 if (rex & REX_W)
3f31e633 14303 oappend ("QWORD PTR ");
3f31e633 14304 else
f16cd0d5
L
14305 {
14306 if ((sizeflag & DFLAG) || bytemode == dq_mode)
14307 oappend ("DWORD PTR ");
14308 else
14309 oappend ("WORD PTR ");
14310 used_prefixes |= (prefixes & PREFIX_DATA);
14311 }
3f31e633 14312 break;
52fd6d94 14313 case z_mode:
161a04f6 14314 if ((rex & REX_W) || (sizeflag & DFLAG))
52fd6d94
JB
14315 *obufp++ = 'D';
14316 oappend ("WORD PTR ");
161a04f6 14317 if (!(rex & REX_W))
52fd6d94
JB
14318 used_prefixes |= (prefixes & PREFIX_DATA);
14319 break;
34b772a6
JB
14320 case a_mode:
14321 if (sizeflag & DFLAG)
14322 oappend ("QWORD PTR ");
14323 else
14324 oappend ("DWORD PTR ");
14325 used_prefixes |= (prefixes & PREFIX_DATA);
14326 break;
3f31e633 14327 case d_mode:
539f890d
L
14328 case d_scalar_mode:
14329 case d_scalar_swap_mode:
fa99fab2 14330 case d_swap_mode:
42903f7f 14331 case dqd_mode:
3f31e633
JB
14332 oappend ("DWORD PTR ");
14333 break;
14334 case q_mode:
539f890d
L
14335 case q_scalar_mode:
14336 case q_scalar_swap_mode:
b6169b20 14337 case q_swap_mode:
3f31e633
JB
14338 oappend ("QWORD PTR ");
14339 break;
14340 case m_mode:
cb712a9e 14341 if (address_mode == mode_64bit)
3f31e633
JB
14342 oappend ("QWORD PTR ");
14343 else
14344 oappend ("DWORD PTR ");
14345 break;
14346 case f_mode:
14347 if (sizeflag & DFLAG)
14348 oappend ("FWORD PTR ");
14349 else
14350 oappend ("DWORD PTR ");
14351 used_prefixes |= (prefixes & PREFIX_DATA);
14352 break;
14353 case t_mode:
14354 oappend ("TBYTE PTR ");
14355 break;
14356 case x_mode:
b6169b20 14357 case x_swap_mode:
43234a1e
L
14358 case evex_x_gscat_mode:
14359 case evex_x_nobcst_mode:
c0f3af97
L
14360 if (need_vex)
14361 {
14362 switch (vex.length)
14363 {
14364 case 128:
14365 oappend ("XMMWORD PTR ");
14366 break;
14367 case 256:
14368 oappend ("YMMWORD PTR ");
14369 break;
43234a1e
L
14370 case 512:
14371 oappend ("ZMMWORD PTR ");
14372 break;
c0f3af97
L
14373 default:
14374 abort ();
14375 }
14376 }
14377 else
14378 oappend ("XMMWORD PTR ");
14379 break;
14380 case xmm_mode:
3f31e633
JB
14381 oappend ("XMMWORD PTR ");
14382 break;
43234a1e
L
14383 case ymm_mode:
14384 oappend ("YMMWORD PTR ");
14385 break;
c0f3af97 14386 case xmmq_mode:
43234a1e 14387 case evex_half_bcst_xmmq_mode:
c0f3af97
L
14388 if (!need_vex)
14389 abort ();
14390
14391 switch (vex.length)
14392 {
14393 case 128:
14394 oappend ("QWORD PTR ");
14395 break;
14396 case 256:
14397 oappend ("XMMWORD PTR ");
14398 break;
43234a1e
L
14399 case 512:
14400 oappend ("YMMWORD PTR ");
14401 break;
c0f3af97
L
14402 default:
14403 abort ();
14404 }
14405 break;
6c30d220
L
14406 case xmm_mb_mode:
14407 if (!need_vex)
14408 abort ();
14409
14410 switch (vex.length)
14411 {
14412 case 128:
14413 case 256:
43234a1e 14414 case 512:
6c30d220
L
14415 oappend ("BYTE PTR ");
14416 break;
14417 default:
14418 abort ();
14419 }
14420 break;
14421 case xmm_mw_mode:
14422 if (!need_vex)
14423 abort ();
14424
14425 switch (vex.length)
14426 {
14427 case 128:
14428 case 256:
43234a1e 14429 case 512:
6c30d220
L
14430 oappend ("WORD PTR ");
14431 break;
14432 default:
14433 abort ();
14434 }
14435 break;
14436 case xmm_md_mode:
14437 if (!need_vex)
14438 abort ();
14439
14440 switch (vex.length)
14441 {
14442 case 128:
14443 case 256:
43234a1e 14444 case 512:
6c30d220
L
14445 oappend ("DWORD PTR ");
14446 break;
14447 default:
14448 abort ();
14449 }
14450 break;
14451 case xmm_mq_mode:
14452 if (!need_vex)
14453 abort ();
14454
14455 switch (vex.length)
14456 {
14457 case 128:
14458 case 256:
43234a1e 14459 case 512:
6c30d220
L
14460 oappend ("QWORD PTR ");
14461 break;
14462 default:
14463 abort ();
14464 }
14465 break;
14466 case xmmdw_mode:
14467 if (!need_vex)
14468 abort ();
14469
14470 switch (vex.length)
14471 {
14472 case 128:
14473 oappend ("WORD PTR ");
14474 break;
14475 case 256:
14476 oappend ("DWORD PTR ");
14477 break;
43234a1e
L
14478 case 512:
14479 oappend ("QWORD PTR ");
14480 break;
6c30d220
L
14481 default:
14482 abort ();
14483 }
14484 break;
14485 case xmmqd_mode:
14486 if (!need_vex)
14487 abort ();
14488
14489 switch (vex.length)
14490 {
14491 case 128:
14492 oappend ("DWORD PTR ");
14493 break;
14494 case 256:
14495 oappend ("QWORD PTR ");
14496 break;
43234a1e
L
14497 case 512:
14498 oappend ("XMMWORD PTR ");
14499 break;
6c30d220
L
14500 default:
14501 abort ();
14502 }
14503 break;
c0f3af97
L
14504 case ymmq_mode:
14505 if (!need_vex)
14506 abort ();
14507
14508 switch (vex.length)
14509 {
14510 case 128:
14511 oappend ("QWORD PTR ");
14512 break;
14513 case 256:
14514 oappend ("YMMWORD PTR ");
14515 break;
43234a1e
L
14516 case 512:
14517 oappend ("ZMMWORD PTR ");
14518 break;
c0f3af97
L
14519 default:
14520 abort ();
14521 }
14522 break;
6c30d220
L
14523 case ymmxmm_mode:
14524 if (!need_vex)
14525 abort ();
14526
14527 switch (vex.length)
14528 {
14529 case 128:
14530 case 256:
14531 oappend ("XMMWORD PTR ");
14532 break;
14533 default:
14534 abort ();
14535 }
14536 break;
fb9c77c7
L
14537 case o_mode:
14538 oappend ("OWORD PTR ");
14539 break;
43234a1e 14540 case xmm_mdq_mode:
0bfee649 14541 case vex_w_dq_mode:
1c480963 14542 case vex_scalar_w_dq_mode:
0bfee649
L
14543 if (!need_vex)
14544 abort ();
14545
14546 if (vex.w)
14547 oappend ("QWORD PTR ");
14548 else
14549 oappend ("DWORD PTR ");
14550 break;
43234a1e
L
14551 case vex_vsib_d_w_dq_mode:
14552 case vex_vsib_q_w_dq_mode:
14553 if (!need_vex)
14554 abort ();
14555
14556 if (!vex.evex)
14557 {
14558 if (vex.w)
14559 oappend ("QWORD PTR ");
14560 else
14561 oappend ("DWORD PTR ");
14562 }
14563 else
14564 {
b28d1bda
IT
14565 switch (vex.length)
14566 {
14567 case 128:
14568 oappend ("XMMWORD PTR ");
14569 break;
14570 case 256:
14571 oappend ("YMMWORD PTR ");
14572 break;
14573 case 512:
14574 oappend ("ZMMWORD PTR ");
14575 break;
14576 default:
14577 abort ();
14578 }
43234a1e
L
14579 }
14580 break;
5fc35d96
IT
14581 case vex_vsib_q_w_d_mode:
14582 case vex_vsib_d_w_d_mode:
b28d1bda 14583 if (!need_vex || !vex.evex)
5fc35d96
IT
14584 abort ();
14585
b28d1bda
IT
14586 switch (vex.length)
14587 {
14588 case 128:
14589 oappend ("QWORD PTR ");
14590 break;
14591 case 256:
14592 oappend ("XMMWORD PTR ");
14593 break;
14594 case 512:
14595 oappend ("YMMWORD PTR ");
14596 break;
14597 default:
14598 abort ();
14599 }
5fc35d96
IT
14600
14601 break;
1ba585e8
IT
14602 case mask_bd_mode:
14603 if (!need_vex || vex.length != 128)
14604 abort ();
14605 if (vex.w)
14606 oappend ("DWORD PTR ");
14607 else
14608 oappend ("BYTE PTR ");
14609 break;
43234a1e
L
14610 case mask_mode:
14611 if (!need_vex)
14612 abort ();
1ba585e8
IT
14613 if (vex.w)
14614 oappend ("QWORD PTR ");
14615 else
14616 oappend ("WORD PTR ");
43234a1e 14617 break;
6c75cc62 14618 case v_bnd_mode:
3f31e633
JB
14619 default:
14620 break;
14621 }
14622}
14623
252b5132 14624static void
c0f3af97 14625OP_E_register (int bytemode, int sizeflag)
252b5132 14626{
c0f3af97
L
14627 int reg = modrm.rm;
14628 const char **names;
252b5132 14629
c0f3af97
L
14630 USED_REX (REX_B);
14631 if ((rex & REX_B))
14632 reg += 8;
252b5132 14633
b6169b20 14634 if ((sizeflag & SUFFIX_ALWAYS)
1ba585e8
IT
14635 && (bytemode == b_swap_mode
14636 || bytemode == v_swap_mode
14637 || bytemode == dqw_swap_mode))
b6169b20
L
14638 swap_operand ();
14639
c0f3af97 14640 switch (bytemode)
252b5132 14641 {
c0f3af97 14642 case b_mode:
b6169b20 14643 case b_swap_mode:
c0f3af97
L
14644 USED_REX (0);
14645 if (rex)
14646 names = names8rex;
14647 else
14648 names = names8;
14649 break;
14650 case w_mode:
14651 names = names16;
14652 break;
14653 case d_mode:
1ba585e8
IT
14654 case dw_mode:
14655 case db_mode:
c0f3af97
L
14656 names = names32;
14657 break;
14658 case q_mode:
14659 names = names64;
14660 break;
14661 case m_mode:
6c75cc62 14662 case v_bnd_mode:
c0f3af97
L
14663 names = address_mode == mode_64bit ? names64 : names32;
14664 break;
7e8b059b
L
14665 case bnd_mode:
14666 names = names_bnd;
14667 break;
c0f3af97 14668 case stack_v_mode:
7bb15c6f 14669 if (address_mode == mode_64bit && ((sizeflag & DFLAG) || (rex & REX_W)))
252b5132 14670 {
c0f3af97 14671 names = names64;
252b5132 14672 break;
252b5132 14673 }
c0f3af97
L
14674 bytemode = v_mode;
14675 /* FALLTHRU */
14676 case v_mode:
b6169b20 14677 case v_swap_mode:
c0f3af97
L
14678 case dq_mode:
14679 case dqb_mode:
14680 case dqd_mode:
14681 case dqw_mode:
1ba585e8 14682 case dqw_swap_mode:
c0f3af97
L
14683 USED_REX (REX_W);
14684 if (rex & REX_W)
14685 names = names64;
c0f3af97 14686 else
f16cd0d5 14687 {
7bb15c6f 14688 if ((sizeflag & DFLAG)
f16cd0d5
L
14689 || (bytemode != v_mode
14690 && bytemode != v_swap_mode))
14691 names = names32;
14692 else
14693 names = names16;
14694 used_prefixes |= (prefixes & PREFIX_DATA);
14695 }
c0f3af97 14696 break;
1ba585e8 14697 case mask_bd_mode:
43234a1e
L
14698 case mask_mode:
14699 names = names_mask;
14700 break;
c0f3af97
L
14701 case 0:
14702 return;
14703 default:
14704 oappend (INTERNAL_DISASSEMBLER_ERROR);
252b5132
RH
14705 return;
14706 }
c0f3af97
L
14707 oappend (names[reg]);
14708}
14709
14710static void
c1e679ec 14711OP_E_memory (int bytemode, int sizeflag)
c0f3af97
L
14712{
14713 bfd_vma disp = 0;
14714 int add = (rex & REX_B) ? 8 : 0;
14715 int riprel = 0;
43234a1e
L
14716 int shift;
14717
14718 if (vex.evex)
14719 {
14720 /* In EVEX, if operand doesn't allow broadcast, vex.b should be 0. */
14721 if (vex.b
14722 && bytemode != x_mode
90a915bf 14723 && bytemode != xmmq_mode
43234a1e
L
14724 && bytemode != evex_half_bcst_xmmq_mode)
14725 {
14726 BadOp ();
14727 return;
14728 }
14729 switch (bytemode)
14730 {
1ba585e8
IT
14731 case dqw_mode:
14732 case dw_mode:
14733 case dqw_swap_mode:
14734 shift = 1;
14735 break;
14736 case dqb_mode:
14737 case db_mode:
14738 shift = 0;
14739 break;
43234a1e 14740 case vex_vsib_d_w_dq_mode:
5fc35d96 14741 case vex_vsib_d_w_d_mode:
eaa9d1ad 14742 case vex_vsib_q_w_dq_mode:
5fc35d96 14743 case vex_vsib_q_w_d_mode:
43234a1e
L
14744 case evex_x_gscat_mode:
14745 case xmm_mdq_mode:
14746 shift = vex.w ? 3 : 2;
14747 break;
43234a1e
L
14748 case x_mode:
14749 case evex_half_bcst_xmmq_mode:
90a915bf 14750 case xmmq_mode:
43234a1e
L
14751 if (vex.b)
14752 {
14753 shift = vex.w ? 3 : 2;
14754 break;
14755 }
14756 /* Fall through if vex.b == 0. */
14757 case xmmqd_mode:
14758 case xmmdw_mode:
43234a1e
L
14759 case ymmq_mode:
14760 case evex_x_nobcst_mode:
14761 case x_swap_mode:
14762 switch (vex.length)
14763 {
14764 case 128:
14765 shift = 4;
14766 break;
14767 case 256:
14768 shift = 5;
14769 break;
14770 case 512:
14771 shift = 6;
14772 break;
14773 default:
14774 abort ();
14775 }
14776 break;
14777 case ymm_mode:
14778 shift = 5;
14779 break;
14780 case xmm_mode:
14781 shift = 4;
14782 break;
14783 case xmm_mq_mode:
14784 case q_mode:
14785 case q_scalar_mode:
14786 case q_swap_mode:
14787 case q_scalar_swap_mode:
14788 shift = 3;
14789 break;
14790 case dqd_mode:
14791 case xmm_md_mode:
14792 case d_mode:
14793 case d_scalar_mode:
14794 case d_swap_mode:
14795 case d_scalar_swap_mode:
14796 shift = 2;
14797 break;
14798 case xmm_mw_mode:
14799 shift = 1;
14800 break;
14801 case xmm_mb_mode:
14802 shift = 0;
14803 break;
14804 default:
14805 abort ();
14806 }
14807 /* Make necessary corrections to shift for modes that need it.
14808 For these modes we currently have shift 4, 5 or 6 depending on
14809 vex.length (it corresponds to xmmword, ymmword or zmmword
14810 operand). We might want to make it 3, 4 or 5 (e.g. for
14811 xmmq_mode). In case of broadcast enabled the corrections
14812 aren't needed, as element size is always 32 or 64 bits. */
90a915bf
IT
14813 if (!vex.b
14814 && (bytemode == xmmq_mode
14815 || bytemode == evex_half_bcst_xmmq_mode))
43234a1e
L
14816 shift -= 1;
14817 else if (bytemode == xmmqd_mode)
14818 shift -= 2;
14819 else if (bytemode == xmmdw_mode)
14820 shift -= 3;
b28d1bda
IT
14821 else if (bytemode == ymmq_mode && vex.length == 128)
14822 shift -= 1;
43234a1e
L
14823 }
14824 else
14825 shift = 0;
252b5132 14826
c0f3af97 14827 USED_REX (REX_B);
3f31e633
JB
14828 if (intel_syntax)
14829 intel_operand_size (bytemode, sizeflag);
252b5132
RH
14830 append_seg ();
14831
5d669648 14832 if ((sizeflag & AFLAG) || address_mode == mode_64bit)
252b5132 14833 {
5d669648
L
14834 /* 32/64 bit address mode */
14835 int havedisp;
252b5132
RH
14836 int havesib;
14837 int havebase;
0f7da397 14838 int haveindex;
20afcfb7 14839 int needindex;
82c18208 14840 int base, rbase;
91d6fa6a 14841 int vindex = 0;
252b5132 14842 int scale = 0;
7e8b059b
L
14843 int addr32flag = !((sizeflag & AFLAG)
14844 || bytemode == v_bnd_mode
14845 || bytemode == bnd_mode);
6c30d220
L
14846 const char **indexes64 = names64;
14847 const char **indexes32 = names32;
252b5132
RH
14848
14849 havesib = 0;
14850 havebase = 1;
0f7da397 14851 haveindex = 0;
7967e09e 14852 base = modrm.rm;
252b5132
RH
14853
14854 if (base == 4)
14855 {
14856 havesib = 1;
dfc8cf43 14857 vindex = sib.index;
161a04f6
L
14858 USED_REX (REX_X);
14859 if (rex & REX_X)
91d6fa6a 14860 vindex += 8;
6c30d220
L
14861 switch (bytemode)
14862 {
14863 case vex_vsib_d_w_dq_mode:
5fc35d96 14864 case vex_vsib_d_w_d_mode:
6c30d220 14865 case vex_vsib_q_w_dq_mode:
5fc35d96 14866 case vex_vsib_q_w_d_mode:
6c30d220
L
14867 if (!need_vex)
14868 abort ();
43234a1e
L
14869 if (vex.evex)
14870 {
14871 if (!vex.v)
14872 vindex += 16;
14873 }
6c30d220
L
14874
14875 haveindex = 1;
14876 switch (vex.length)
14877 {
14878 case 128:
7bb15c6f 14879 indexes64 = indexes32 = names_xmm;
6c30d220
L
14880 break;
14881 case 256:
5fc35d96
IT
14882 if (!vex.w
14883 || bytemode == vex_vsib_q_w_dq_mode
14884 || bytemode == vex_vsib_q_w_d_mode)
7bb15c6f 14885 indexes64 = indexes32 = names_ymm;
6c30d220 14886 else
7bb15c6f 14887 indexes64 = indexes32 = names_xmm;
6c30d220 14888 break;
43234a1e 14889 case 512:
5fc35d96
IT
14890 if (!vex.w
14891 || bytemode == vex_vsib_q_w_dq_mode
14892 || bytemode == vex_vsib_q_w_d_mode)
43234a1e
L
14893 indexes64 = indexes32 = names_zmm;
14894 else
14895 indexes64 = indexes32 = names_ymm;
14896 break;
6c30d220
L
14897 default:
14898 abort ();
14899 }
14900 break;
14901 default:
14902 haveindex = vindex != 4;
14903 break;
14904 }
14905 scale = sib.scale;
14906 base = sib.base;
252b5132
RH
14907 codep++;
14908 }
82c18208 14909 rbase = base + add;
252b5132 14910
7967e09e 14911 switch (modrm.mod)
252b5132
RH
14912 {
14913 case 0:
82c18208 14914 if (base == 5)
252b5132
RH
14915 {
14916 havebase = 0;
cb712a9e 14917 if (address_mode == mode_64bit && !havesib)
52b15da3
JH
14918 riprel = 1;
14919 disp = get32s ();
252b5132
RH
14920 }
14921 break;
14922 case 1:
14923 FETCH_DATA (the_info, codep + 1);
14924 disp = *codep++;
14925 if ((disp & 0x80) != 0)
14926 disp -= 0x100;
43234a1e
L
14927 if (vex.evex && shift > 0)
14928 disp <<= shift;
252b5132
RH
14929 break;
14930 case 2:
52b15da3 14931 disp = get32s ();
252b5132
RH
14932 break;
14933 }
14934
20afcfb7
L
14935 /* In 32bit mode, we need index register to tell [offset] from
14936 [eiz*1 + offset]. */
14937 needindex = (havesib
14938 && !havebase
14939 && !haveindex
14940 && address_mode == mode_32bit);
14941 havedisp = (havebase
14942 || needindex
14943 || (havesib && (haveindex || scale != 0)));
5d669648 14944
252b5132 14945 if (!intel_syntax)
82c18208 14946 if (modrm.mod != 0 || base == 5)
db6eb5be 14947 {
5d669648
L
14948 if (havedisp || riprel)
14949 print_displacement (scratchbuf, disp);
14950 else
14951 print_operand_value (scratchbuf, 1, disp);
db6eb5be 14952 oappend (scratchbuf);
52b15da3
JH
14953 if (riprel)
14954 {
14955 set_op (disp, 1);
87767711 14956 oappend (sizeflag & AFLAG ? "(%rip)" : "(%eip)");
52b15da3 14957 }
db6eb5be 14958 }
2da11e11 14959
7e8b059b
L
14960 if ((havebase || haveindex || riprel)
14961 && (bytemode != v_bnd_mode)
14962 && (bytemode != bnd_mode))
87767711
JB
14963 used_prefixes |= PREFIX_ADDR;
14964
5d669648 14965 if (havedisp || (intel_syntax && riprel))
252b5132 14966 {
252b5132 14967 *obufp++ = open_char;
52b15da3 14968 if (intel_syntax && riprel)
185b1163
L
14969 {
14970 set_op (disp, 1);
87767711 14971 oappend (sizeflag & AFLAG ? "rip" : "eip");
185b1163 14972 }
db6eb5be 14973 *obufp = '\0';
252b5132 14974 if (havebase)
7e8b059b 14975 oappend (address_mode == mode_64bit && !addr32flag
82c18208 14976 ? names64[rbase] : names32[rbase]);
252b5132
RH
14977 if (havesib)
14978 {
db51cc60
L
14979 /* ESP/RSP won't allow index. If base isn't ESP/RSP,
14980 print index to tell base + index from base. */
14981 if (scale != 0
20afcfb7 14982 || needindex
db51cc60
L
14983 || haveindex
14984 || (havebase && base != ESP_REG_NUM))
252b5132 14985 {
9306ca4a 14986 if (!intel_syntax || havebase)
db6eb5be 14987 {
9306ca4a
JB
14988 *obufp++ = separator_char;
14989 *obufp = '\0';
db6eb5be 14990 }
db51cc60 14991 if (haveindex)
7e8b059b 14992 oappend (address_mode == mode_64bit && !addr32flag
6c30d220 14993 ? indexes64[vindex] : indexes32[vindex]);
db51cc60 14994 else
7e8b059b 14995 oappend (address_mode == mode_64bit && !addr32flag
db51cc60
L
14996 ? index64 : index32);
14997
db6eb5be
AM
14998 *obufp++ = scale_char;
14999 *obufp = '\0';
15000 sprintf (scratchbuf, "%d", 1 << scale);
15001 oappend (scratchbuf);
15002 }
252b5132 15003 }
185b1163 15004 if (intel_syntax
82c18208 15005 && (disp || modrm.mod != 0 || base == 5))
3d456fa1 15006 {
db51cc60 15007 if (!havedisp || (bfd_signed_vma) disp >= 0)
3d456fa1
JB
15008 {
15009 *obufp++ = '+';
15010 *obufp = '\0';
15011 }
05203043 15012 else if (modrm.mod != 1 && disp != -disp)
3d456fa1
JB
15013 {
15014 *obufp++ = '-';
15015 *obufp = '\0';
15016 disp = - (bfd_signed_vma) disp;
15017 }
15018
db51cc60
L
15019 if (havedisp)
15020 print_displacement (scratchbuf, disp);
15021 else
15022 print_operand_value (scratchbuf, 1, disp);
3d456fa1
JB
15023 oappend (scratchbuf);
15024 }
252b5132
RH
15025
15026 *obufp++ = close_char;
db6eb5be 15027 *obufp = '\0';
252b5132
RH
15028 }
15029 else if (intel_syntax)
db6eb5be 15030 {
82c18208 15031 if (modrm.mod != 0 || base == 5)
db6eb5be 15032 {
285ca992 15033 if (!active_seg_prefix)
252b5132 15034 {
d708bcba 15035 oappend (names_seg[ds_reg - es_reg]);
252b5132
RH
15036 oappend (":");
15037 }
52b15da3 15038 print_operand_value (scratchbuf, 1, disp);
db6eb5be
AM
15039 oappend (scratchbuf);
15040 }
15041 }
252b5132
RH
15042 }
15043 else
f16cd0d5
L
15044 {
15045 /* 16 bit address mode */
15046 used_prefixes |= prefixes & PREFIX_ADDR;
7967e09e 15047 switch (modrm.mod)
252b5132
RH
15048 {
15049 case 0:
7967e09e 15050 if (modrm.rm == 6)
252b5132
RH
15051 {
15052 disp = get16 ();
15053 if ((disp & 0x8000) != 0)
15054 disp -= 0x10000;
15055 }
15056 break;
15057 case 1:
15058 FETCH_DATA (the_info, codep + 1);
15059 disp = *codep++;
15060 if ((disp & 0x80) != 0)
15061 disp -= 0x100;
15062 break;
15063 case 2:
15064 disp = get16 ();
15065 if ((disp & 0x8000) != 0)
15066 disp -= 0x10000;
15067 break;
15068 }
15069
15070 if (!intel_syntax)
7967e09e 15071 if (modrm.mod != 0 || modrm.rm == 6)
db6eb5be 15072 {
5d669648 15073 print_displacement (scratchbuf, disp);
db6eb5be
AM
15074 oappend (scratchbuf);
15075 }
252b5132 15076
7967e09e 15077 if (modrm.mod != 0 || modrm.rm != 6)
252b5132
RH
15078 {
15079 *obufp++ = open_char;
db6eb5be 15080 *obufp = '\0';
7967e09e 15081 oappend (index16[modrm.rm]);
5d669648
L
15082 if (intel_syntax
15083 && (disp || modrm.mod != 0 || modrm.rm == 6))
3d456fa1 15084 {
5d669648 15085 if ((bfd_signed_vma) disp >= 0)
3d456fa1
JB
15086 {
15087 *obufp++ = '+';
15088 *obufp = '\0';
15089 }
7967e09e 15090 else if (modrm.mod != 1)
3d456fa1
JB
15091 {
15092 *obufp++ = '-';
15093 *obufp = '\0';
15094 disp = - (bfd_signed_vma) disp;
15095 }
15096
5d669648 15097 print_displacement (scratchbuf, disp);
3d456fa1
JB
15098 oappend (scratchbuf);
15099 }
15100
db6eb5be
AM
15101 *obufp++ = close_char;
15102 *obufp = '\0';
252b5132 15103 }
3d456fa1
JB
15104 else if (intel_syntax)
15105 {
285ca992 15106 if (!active_seg_prefix)
3d456fa1
JB
15107 {
15108 oappend (names_seg[ds_reg - es_reg]);
15109 oappend (":");
15110 }
15111 print_operand_value (scratchbuf, 1, disp & 0xffff);
15112 oappend (scratchbuf);
15113 }
252b5132 15114 }
43234a1e
L
15115 if (vex.evex && vex.b
15116 && (bytemode == x_mode
90a915bf 15117 || bytemode == xmmq_mode
43234a1e
L
15118 || bytemode == evex_half_bcst_xmmq_mode))
15119 {
90a915bf
IT
15120 if (vex.w
15121 || bytemode == xmmq_mode
15122 || bytemode == evex_half_bcst_xmmq_mode)
b28d1bda
IT
15123 {
15124 switch (vex.length)
15125 {
15126 case 128:
15127 oappend ("{1to2}");
15128 break;
15129 case 256:
15130 oappend ("{1to4}");
15131 break;
15132 case 512:
15133 oappend ("{1to8}");
15134 break;
15135 default:
15136 abort ();
15137 }
15138 }
43234a1e 15139 else
b28d1bda
IT
15140 {
15141 switch (vex.length)
15142 {
15143 case 128:
15144 oappend ("{1to4}");
15145 break;
15146 case 256:
15147 oappend ("{1to8}");
15148 break;
15149 case 512:
15150 oappend ("{1to16}");
15151 break;
15152 default:
15153 abort ();
15154 }
15155 }
43234a1e 15156 }
252b5132
RH
15157}
15158
c0f3af97 15159static void
8b3f93e7 15160OP_E (int bytemode, int sizeflag)
c0f3af97
L
15161{
15162 /* Skip mod/rm byte. */
15163 MODRM_CHECK;
15164 codep++;
15165
15166 if (modrm.mod == 3)
15167 OP_E_register (bytemode, sizeflag);
15168 else
c1e679ec 15169 OP_E_memory (bytemode, sizeflag);
c0f3af97
L
15170}
15171
252b5132 15172static void
26ca5450 15173OP_G (int bytemode, int sizeflag)
252b5132 15174{
52b15da3 15175 int add = 0;
161a04f6
L
15176 USED_REX (REX_R);
15177 if (rex & REX_R)
52b15da3 15178 add += 8;
252b5132
RH
15179 switch (bytemode)
15180 {
15181 case b_mode:
52b15da3
JH
15182 USED_REX (0);
15183 if (rex)
7967e09e 15184 oappend (names8rex[modrm.reg + add]);
52b15da3 15185 else
7967e09e 15186 oappend (names8[modrm.reg + add]);
252b5132
RH
15187 break;
15188 case w_mode:
7967e09e 15189 oappend (names16[modrm.reg + add]);
252b5132
RH
15190 break;
15191 case d_mode:
1ba585e8
IT
15192 case db_mode:
15193 case dw_mode:
7967e09e 15194 oappend (names32[modrm.reg + add]);
52b15da3
JH
15195 break;
15196 case q_mode:
7967e09e 15197 oappend (names64[modrm.reg + add]);
252b5132 15198 break;
7e8b059b
L
15199 case bnd_mode:
15200 oappend (names_bnd[modrm.reg]);
15201 break;
252b5132 15202 case v_mode:
9306ca4a 15203 case dq_mode:
42903f7f
L
15204 case dqb_mode:
15205 case dqd_mode:
9306ca4a 15206 case dqw_mode:
1ba585e8 15207 case dqw_swap_mode:
161a04f6
L
15208 USED_REX (REX_W);
15209 if (rex & REX_W)
7967e09e 15210 oappend (names64[modrm.reg + add]);
252b5132 15211 else
f16cd0d5
L
15212 {
15213 if ((sizeflag & DFLAG) || bytemode != v_mode)
15214 oappend (names32[modrm.reg + add]);
15215 else
15216 oappend (names16[modrm.reg + add]);
15217 used_prefixes |= (prefixes & PREFIX_DATA);
15218 }
252b5132 15219 break;
90700ea2 15220 case m_mode:
cb712a9e 15221 if (address_mode == mode_64bit)
7967e09e 15222 oappend (names64[modrm.reg + add]);
90700ea2 15223 else
7967e09e 15224 oappend (names32[modrm.reg + add]);
90700ea2 15225 break;
1ba585e8 15226 case mask_bd_mode:
43234a1e
L
15227 case mask_mode:
15228 oappend (names_mask[modrm.reg + add]);
15229 break;
252b5132
RH
15230 default:
15231 oappend (INTERNAL_DISASSEMBLER_ERROR);
15232 break;
15233 }
15234}
15235
52b15da3 15236static bfd_vma
26ca5450 15237get64 (void)
52b15da3 15238{
5dd0794d 15239 bfd_vma x;
52b15da3 15240#ifdef BFD64
5dd0794d
AM
15241 unsigned int a;
15242 unsigned int b;
15243
52b15da3
JH
15244 FETCH_DATA (the_info, codep + 8);
15245 a = *codep++ & 0xff;
15246 a |= (*codep++ & 0xff) << 8;
15247 a |= (*codep++ & 0xff) << 16;
15248 a |= (*codep++ & 0xff) << 24;
5dd0794d 15249 b = *codep++ & 0xff;
52b15da3
JH
15250 b |= (*codep++ & 0xff) << 8;
15251 b |= (*codep++ & 0xff) << 16;
15252 b |= (*codep++ & 0xff) << 24;
15253 x = a + ((bfd_vma) b << 32);
15254#else
6608db57 15255 abort ();
5dd0794d 15256 x = 0;
52b15da3
JH
15257#endif
15258 return x;
15259}
15260
15261static bfd_signed_vma
26ca5450 15262get32 (void)
252b5132 15263{
52b15da3 15264 bfd_signed_vma x = 0;
252b5132
RH
15265
15266 FETCH_DATA (the_info, codep + 4);
52b15da3
JH
15267 x = *codep++ & (bfd_signed_vma) 0xff;
15268 x |= (*codep++ & (bfd_signed_vma) 0xff) << 8;
15269 x |= (*codep++ & (bfd_signed_vma) 0xff) << 16;
15270 x |= (*codep++ & (bfd_signed_vma) 0xff) << 24;
15271 return x;
15272}
15273
15274static bfd_signed_vma
26ca5450 15275get32s (void)
52b15da3
JH
15276{
15277 bfd_signed_vma x = 0;
15278
15279 FETCH_DATA (the_info, codep + 4);
15280 x = *codep++ & (bfd_signed_vma) 0xff;
15281 x |= (*codep++ & (bfd_signed_vma) 0xff) << 8;
15282 x |= (*codep++ & (bfd_signed_vma) 0xff) << 16;
15283 x |= (*codep++ & (bfd_signed_vma) 0xff) << 24;
15284
15285 x = (x ^ ((bfd_signed_vma) 1 << 31)) - ((bfd_signed_vma) 1 << 31);
15286
252b5132
RH
15287 return x;
15288}
15289
15290static int
26ca5450 15291get16 (void)
252b5132
RH
15292{
15293 int x = 0;
15294
15295 FETCH_DATA (the_info, codep + 2);
15296 x = *codep++ & 0xff;
15297 x |= (*codep++ & 0xff) << 8;
15298 return x;
15299}
15300
15301static void
26ca5450 15302set_op (bfd_vma op, int riprel)
252b5132
RH
15303{
15304 op_index[op_ad] = op_ad;
cb712a9e 15305 if (address_mode == mode_64bit)
7081ff04
AJ
15306 {
15307 op_address[op_ad] = op;
15308 op_riprel[op_ad] = riprel;
15309 }
15310 else
15311 {
15312 /* Mask to get a 32-bit address. */
15313 op_address[op_ad] = op & 0xffffffff;
15314 op_riprel[op_ad] = riprel & 0xffffffff;
15315 }
252b5132
RH
15316}
15317
15318static void
26ca5450 15319OP_REG (int code, int sizeflag)
252b5132 15320{
2da11e11 15321 const char *s;
9b60702d 15322 int add;
de882298
RM
15323
15324 switch (code)
15325 {
15326 case es_reg: case ss_reg: case cs_reg:
15327 case ds_reg: case fs_reg: case gs_reg:
15328 oappend (names_seg[code - es_reg]);
15329 return;
15330 }
15331
161a04f6
L
15332 USED_REX (REX_B);
15333 if (rex & REX_B)
52b15da3 15334 add = 8;
9b60702d
L
15335 else
15336 add = 0;
52b15da3
JH
15337
15338 switch (code)
15339 {
52b15da3
JH
15340 case ax_reg: case cx_reg: case dx_reg: case bx_reg:
15341 case sp_reg: case bp_reg: case si_reg: case di_reg:
15342 s = names16[code - ax_reg + add];
15343 break;
52b15da3
JH
15344 case al_reg: case ah_reg: case cl_reg: case ch_reg:
15345 case dl_reg: case dh_reg: case bl_reg: case bh_reg:
15346 USED_REX (0);
15347 if (rex)
15348 s = names8rex[code - al_reg + add];
15349 else
15350 s = names8[code - al_reg];
15351 break;
6439fc28
AM
15352 case rAX_reg: case rCX_reg: case rDX_reg: case rBX_reg:
15353 case rSP_reg: case rBP_reg: case rSI_reg: case rDI_reg:
7bb15c6f 15354 if (address_mode == mode_64bit
6c067bbb 15355 && ((sizeflag & DFLAG) || (rex & REX_W)))
6439fc28
AM
15356 {
15357 s = names64[code - rAX_reg + add];
15358 break;
15359 }
15360 code += eAX_reg - rAX_reg;
6608db57 15361 /* Fall through. */
52b15da3
JH
15362 case eAX_reg: case eCX_reg: case eDX_reg: case eBX_reg:
15363 case eSP_reg: case eBP_reg: case eSI_reg: case eDI_reg:
161a04f6
L
15364 USED_REX (REX_W);
15365 if (rex & REX_W)
52b15da3 15366 s = names64[code - eAX_reg + add];
52b15da3 15367 else
f16cd0d5
L
15368 {
15369 if (sizeflag & DFLAG)
15370 s = names32[code - eAX_reg + add];
15371 else
15372 s = names16[code - eAX_reg + add];
15373 used_prefixes |= (prefixes & PREFIX_DATA);
15374 }
52b15da3 15375 break;
52b15da3
JH
15376 default:
15377 s = INTERNAL_DISASSEMBLER_ERROR;
15378 break;
15379 }
15380 oappend (s);
15381}
15382
15383static void
26ca5450 15384OP_IMREG (int code, int sizeflag)
52b15da3
JH
15385{
15386 const char *s;
252b5132
RH
15387
15388 switch (code)
15389 {
15390 case indir_dx_reg:
d708bcba 15391 if (intel_syntax)
52fd6d94 15392 s = "dx";
d708bcba 15393 else
db6eb5be 15394 s = "(%dx)";
252b5132
RH
15395 break;
15396 case ax_reg: case cx_reg: case dx_reg: case bx_reg:
15397 case sp_reg: case bp_reg: case si_reg: case di_reg:
15398 s = names16[code - ax_reg];
15399 break;
15400 case es_reg: case ss_reg: case cs_reg:
15401 case ds_reg: case fs_reg: case gs_reg:
15402 s = names_seg[code - es_reg];
15403 break;
15404 case al_reg: case ah_reg: case cl_reg: case ch_reg:
15405 case dl_reg: case dh_reg: case bl_reg: case bh_reg:
52b15da3
JH
15406 USED_REX (0);
15407 if (rex)
15408 s = names8rex[code - al_reg];
15409 else
15410 s = names8[code - al_reg];
252b5132
RH
15411 break;
15412 case eAX_reg: case eCX_reg: case eDX_reg: case eBX_reg:
15413 case eSP_reg: case eBP_reg: case eSI_reg: case eDI_reg:
161a04f6
L
15414 USED_REX (REX_W);
15415 if (rex & REX_W)
52b15da3 15416 s = names64[code - eAX_reg];
252b5132 15417 else
f16cd0d5
L
15418 {
15419 if (sizeflag & DFLAG)
15420 s = names32[code - eAX_reg];
15421 else
15422 s = names16[code - eAX_reg];
15423 used_prefixes |= (prefixes & PREFIX_DATA);
15424 }
252b5132 15425 break;
52fd6d94 15426 case z_mode_ax_reg:
161a04f6 15427 if ((rex & REX_W) || (sizeflag & DFLAG))
52fd6d94
JB
15428 s = *names32;
15429 else
15430 s = *names16;
161a04f6 15431 if (!(rex & REX_W))
52fd6d94
JB
15432 used_prefixes |= (prefixes & PREFIX_DATA);
15433 break;
252b5132
RH
15434 default:
15435 s = INTERNAL_DISASSEMBLER_ERROR;
15436 break;
15437 }
15438 oappend (s);
15439}
15440
15441static void
26ca5450 15442OP_I (int bytemode, int sizeflag)
252b5132 15443{
52b15da3
JH
15444 bfd_signed_vma op;
15445 bfd_signed_vma mask = -1;
252b5132
RH
15446
15447 switch (bytemode)
15448 {
15449 case b_mode:
15450 FETCH_DATA (the_info, codep + 1);
52b15da3
JH
15451 op = *codep++;
15452 mask = 0xff;
15453 break;
15454 case q_mode:
cb712a9e 15455 if (address_mode == mode_64bit)
6439fc28
AM
15456 {
15457 op = get32s ();
15458 break;
15459 }
6608db57 15460 /* Fall through. */
252b5132 15461 case v_mode:
161a04f6
L
15462 USED_REX (REX_W);
15463 if (rex & REX_W)
52b15da3 15464 op = get32s ();
252b5132 15465 else
52b15da3 15466 {
f16cd0d5
L
15467 if (sizeflag & DFLAG)
15468 {
15469 op = get32 ();
15470 mask = 0xffffffff;
15471 }
15472 else
15473 {
15474 op = get16 ();
15475 mask = 0xfffff;
15476 }
15477 used_prefixes |= (prefixes & PREFIX_DATA);
52b15da3 15478 }
252b5132
RH
15479 break;
15480 case w_mode:
52b15da3 15481 mask = 0xfffff;
252b5132
RH
15482 op = get16 ();
15483 break;
9306ca4a
JB
15484 case const_1_mode:
15485 if (intel_syntax)
6c067bbb 15486 oappend ("1");
9306ca4a 15487 return;
252b5132
RH
15488 default:
15489 oappend (INTERNAL_DISASSEMBLER_ERROR);
15490 return;
15491 }
15492
52b15da3
JH
15493 op &= mask;
15494 scratchbuf[0] = '$';
d708bcba 15495 print_operand_value (scratchbuf + 1, 1, op);
9ce09ba2 15496 oappend_maybe_intel (scratchbuf);
52b15da3
JH
15497 scratchbuf[0] = '\0';
15498}
15499
15500static void
26ca5450 15501OP_I64 (int bytemode, int sizeflag)
52b15da3
JH
15502{
15503 bfd_signed_vma op;
15504 bfd_signed_vma mask = -1;
15505
cb712a9e 15506 if (address_mode != mode_64bit)
6439fc28
AM
15507 {
15508 OP_I (bytemode, sizeflag);
15509 return;
15510 }
15511
52b15da3
JH
15512 switch (bytemode)
15513 {
15514 case b_mode:
15515 FETCH_DATA (the_info, codep + 1);
15516 op = *codep++;
15517 mask = 0xff;
15518 break;
15519 case v_mode:
161a04f6
L
15520 USED_REX (REX_W);
15521 if (rex & REX_W)
52b15da3 15522 op = get64 ();
52b15da3
JH
15523 else
15524 {
f16cd0d5
L
15525 if (sizeflag & DFLAG)
15526 {
15527 op = get32 ();
15528 mask = 0xffffffff;
15529 }
15530 else
15531 {
15532 op = get16 ();
15533 mask = 0xfffff;
15534 }
15535 used_prefixes |= (prefixes & PREFIX_DATA);
52b15da3 15536 }
52b15da3
JH
15537 break;
15538 case w_mode:
15539 mask = 0xfffff;
15540 op = get16 ();
15541 break;
15542 default:
15543 oappend (INTERNAL_DISASSEMBLER_ERROR);
15544 return;
15545 }
15546
15547 op &= mask;
15548 scratchbuf[0] = '$';
d708bcba 15549 print_operand_value (scratchbuf + 1, 1, op);
9ce09ba2 15550 oappend_maybe_intel (scratchbuf);
252b5132
RH
15551 scratchbuf[0] = '\0';
15552}
15553
15554static void
26ca5450 15555OP_sI (int bytemode, int sizeflag)
252b5132 15556{
52b15da3 15557 bfd_signed_vma op;
252b5132
RH
15558
15559 switch (bytemode)
15560 {
15561 case b_mode:
e3949f17 15562 case b_T_mode:
252b5132
RH
15563 FETCH_DATA (the_info, codep + 1);
15564 op = *codep++;
15565 if ((op & 0x80) != 0)
15566 op -= 0x100;
e3949f17
L
15567 if (bytemode == b_T_mode)
15568 {
15569 if (address_mode != mode_64bit
7bb15c6f 15570 || !((sizeflag & DFLAG) || (rex & REX_W)))
e3949f17 15571 {
6c067bbb
RM
15572 /* The operand-size prefix is overridden by a REX prefix. */
15573 if ((sizeflag & DFLAG) || (rex & REX_W))
e3949f17
L
15574 op &= 0xffffffff;
15575 else
15576 op &= 0xffff;
15577 }
15578 }
15579 else
15580 {
15581 if (!(rex & REX_W))
15582 {
15583 if (sizeflag & DFLAG)
15584 op &= 0xffffffff;
15585 else
15586 op &= 0xffff;
15587 }
15588 }
252b5132
RH
15589 break;
15590 case v_mode:
7bb15c6f
RM
15591 /* The operand-size prefix is overridden by a REX prefix. */
15592 if ((sizeflag & DFLAG) || (rex & REX_W))
52b15da3 15593 op = get32s ();
252b5132 15594 else
d9e3625e 15595 op = get16 ();
252b5132
RH
15596 break;
15597 default:
15598 oappend (INTERNAL_DISASSEMBLER_ERROR);
15599 return;
15600 }
52b15da3
JH
15601
15602 scratchbuf[0] = '$';
15603 print_operand_value (scratchbuf + 1, 1, op);
9ce09ba2 15604 oappend_maybe_intel (scratchbuf);
252b5132
RH
15605}
15606
15607static void
26ca5450 15608OP_J (int bytemode, int sizeflag)
252b5132 15609{
52b15da3 15610 bfd_vma disp;
7081ff04 15611 bfd_vma mask = -1;
65ca155d 15612 bfd_vma segment = 0;
252b5132
RH
15613
15614 switch (bytemode)
15615 {
15616 case b_mode:
15617 FETCH_DATA (the_info, codep + 1);
15618 disp = *codep++;
15619 if ((disp & 0x80) != 0)
15620 disp -= 0x100;
15621 break;
15622 case v_mode:
f16cd0d5 15623 USED_REX (REX_W);
161a04f6 15624 if ((sizeflag & DFLAG) || (rex & REX_W))
52b15da3 15625 disp = get32s ();
252b5132
RH
15626 else
15627 {
15628 disp = get16 ();
206717e8
L
15629 if ((disp & 0x8000) != 0)
15630 disp -= 0x10000;
65ca155d
L
15631 /* In 16bit mode, address is wrapped around at 64k within
15632 the same segment. Otherwise, a data16 prefix on a jump
15633 instruction means that the pc is masked to 16 bits after
15634 the displacement is added! */
15635 mask = 0xffff;
15636 if ((prefixes & PREFIX_DATA) == 0)
15637 segment = ((start_pc + codep - start_codep)
15638 & ~((bfd_vma) 0xffff));
252b5132 15639 }
f16cd0d5
L
15640 if (!(rex & REX_W))
15641 used_prefixes |= (prefixes & PREFIX_DATA);
252b5132
RH
15642 break;
15643 default:
15644 oappend (INTERNAL_DISASSEMBLER_ERROR);
15645 return;
15646 }
42d5f9c6 15647 disp = ((start_pc + (codep - start_codep) + disp) & mask) | segment;
52b15da3
JH
15648 set_op (disp, 0);
15649 print_operand_value (scratchbuf, 1, disp);
252b5132
RH
15650 oappend (scratchbuf);
15651}
15652
252b5132 15653static void
ed7841b3 15654OP_SEG (int bytemode, int sizeflag)
252b5132 15655{
ed7841b3 15656 if (bytemode == w_mode)
7967e09e 15657 oappend (names_seg[modrm.reg]);
ed7841b3 15658 else
7967e09e 15659 OP_E (modrm.mod == 3 ? bytemode : w_mode, sizeflag);
252b5132
RH
15660}
15661
15662static void
26ca5450 15663OP_DIR (int dummy ATTRIBUTE_UNUSED, int sizeflag)
252b5132
RH
15664{
15665 int seg, offset;
15666
c608c12e 15667 if (sizeflag & DFLAG)
252b5132 15668 {
c608c12e
AM
15669 offset = get32 ();
15670 seg = get16 ();
252b5132 15671 }
c608c12e
AM
15672 else
15673 {
15674 offset = get16 ();
15675 seg = get16 ();
15676 }
7d421014 15677 used_prefixes |= (prefixes & PREFIX_DATA);
d708bcba 15678 if (intel_syntax)
3f31e633 15679 sprintf (scratchbuf, "0x%x:0x%x", seg, offset);
d708bcba
AM
15680 else
15681 sprintf (scratchbuf, "$0x%x,$0x%x", seg, offset);
c608c12e 15682 oappend (scratchbuf);
252b5132
RH
15683}
15684
252b5132 15685static void
3f31e633 15686OP_OFF (int bytemode, int sizeflag)
252b5132 15687{
52b15da3 15688 bfd_vma off;
252b5132 15689
3f31e633
JB
15690 if (intel_syntax && (sizeflag & SUFFIX_ALWAYS))
15691 intel_operand_size (bytemode, sizeflag);
252b5132
RH
15692 append_seg ();
15693
cb712a9e 15694 if ((sizeflag & AFLAG) || address_mode == mode_64bit)
252b5132
RH
15695 off = get32 ();
15696 else
15697 off = get16 ();
15698
15699 if (intel_syntax)
15700 {
285ca992 15701 if (!active_seg_prefix)
252b5132 15702 {
d708bcba 15703 oappend (names_seg[ds_reg - es_reg]);
252b5132
RH
15704 oappend (":");
15705 }
15706 }
52b15da3
JH
15707 print_operand_value (scratchbuf, 1, off);
15708 oappend (scratchbuf);
15709}
6439fc28 15710
52b15da3 15711static void
3f31e633 15712OP_OFF64 (int bytemode, int sizeflag)
52b15da3
JH
15713{
15714 bfd_vma off;
15715
539e75ad
L
15716 if (address_mode != mode_64bit
15717 || (prefixes & PREFIX_ADDR))
6439fc28
AM
15718 {
15719 OP_OFF (bytemode, sizeflag);
15720 return;
15721 }
15722
3f31e633
JB
15723 if (intel_syntax && (sizeflag & SUFFIX_ALWAYS))
15724 intel_operand_size (bytemode, sizeflag);
52b15da3
JH
15725 append_seg ();
15726
6608db57 15727 off = get64 ();
52b15da3
JH
15728
15729 if (intel_syntax)
15730 {
285ca992 15731 if (!active_seg_prefix)
52b15da3 15732 {
d708bcba 15733 oappend (names_seg[ds_reg - es_reg]);
52b15da3
JH
15734 oappend (":");
15735 }
15736 }
15737 print_operand_value (scratchbuf, 1, off);
252b5132
RH
15738 oappend (scratchbuf);
15739}
15740
15741static void
26ca5450 15742ptr_reg (int code, int sizeflag)
252b5132 15743{
2da11e11 15744 const char *s;
d708bcba 15745
1d9f512f 15746 *obufp++ = open_char;
20f0a1fc 15747 used_prefixes |= (prefixes & PREFIX_ADDR);
cb712a9e 15748 if (address_mode == mode_64bit)
c1a64871
JH
15749 {
15750 if (!(sizeflag & AFLAG))
db6eb5be 15751 s = names32[code - eAX_reg];
c1a64871 15752 else
db6eb5be 15753 s = names64[code - eAX_reg];
c1a64871 15754 }
52b15da3 15755 else if (sizeflag & AFLAG)
252b5132
RH
15756 s = names32[code - eAX_reg];
15757 else
15758 s = names16[code - eAX_reg];
15759 oappend (s);
1d9f512f
AM
15760 *obufp++ = close_char;
15761 *obufp = 0;
252b5132
RH
15762}
15763
15764static void
26ca5450 15765OP_ESreg (int code, int sizeflag)
252b5132 15766{
9306ca4a 15767 if (intel_syntax)
52fd6d94
JB
15768 {
15769 switch (codep[-1])
15770 {
15771 case 0x6d: /* insw/insl */
15772 intel_operand_size (z_mode, sizeflag);
15773 break;
15774 case 0xa5: /* movsw/movsl/movsq */
15775 case 0xa7: /* cmpsw/cmpsl/cmpsq */
15776 case 0xab: /* stosw/stosl */
15777 case 0xaf: /* scasw/scasl */
15778 intel_operand_size (v_mode, sizeflag);
15779 break;
15780 default:
15781 intel_operand_size (b_mode, sizeflag);
15782 }
15783 }
9ce09ba2 15784 oappend_maybe_intel ("%es:");
252b5132
RH
15785 ptr_reg (code, sizeflag);
15786}
15787
15788static void
26ca5450 15789OP_DSreg (int code, int sizeflag)
252b5132 15790{
9306ca4a 15791 if (intel_syntax)
52fd6d94
JB
15792 {
15793 switch (codep[-1])
15794 {
15795 case 0x6f: /* outsw/outsl */
15796 intel_operand_size (z_mode, sizeflag);
15797 break;
15798 case 0xa5: /* movsw/movsl/movsq */
15799 case 0xa7: /* cmpsw/cmpsl/cmpsq */
15800 case 0xad: /* lodsw/lodsl/lodsq */
15801 intel_operand_size (v_mode, sizeflag);
15802 break;
15803 default:
15804 intel_operand_size (b_mode, sizeflag);
15805 }
15806 }
285ca992
L
15807 /* Set active_seg_prefix to PREFIX_DS if it is unset so that the
15808 default segment register DS is printed. */
15809 if (!active_seg_prefix)
15810 active_seg_prefix = PREFIX_DS;
6608db57 15811 append_seg ();
252b5132
RH
15812 ptr_reg (code, sizeflag);
15813}
15814
252b5132 15815static void
26ca5450 15816OP_C (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 15817{
9b60702d 15818 int add;
161a04f6 15819 if (rex & REX_R)
c4a530c5 15820 {
161a04f6 15821 USED_REX (REX_R);
c4a530c5
JB
15822 add = 8;
15823 }
cb712a9e 15824 else if (address_mode != mode_64bit && (prefixes & PREFIX_LOCK))
c4a530c5 15825 {
f16cd0d5 15826 all_prefixes[last_lock_prefix] = 0;
c4a530c5
JB
15827 used_prefixes |= PREFIX_LOCK;
15828 add = 8;
15829 }
9b60702d
L
15830 else
15831 add = 0;
7967e09e 15832 sprintf (scratchbuf, "%%cr%d", modrm.reg + add);
9ce09ba2 15833 oappend_maybe_intel (scratchbuf);
252b5132
RH
15834}
15835
252b5132 15836static void
26ca5450 15837OP_D (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 15838{
9b60702d 15839 int add;
161a04f6
L
15840 USED_REX (REX_R);
15841 if (rex & REX_R)
52b15da3 15842 add = 8;
9b60702d
L
15843 else
15844 add = 0;
d708bcba 15845 if (intel_syntax)
7967e09e 15846 sprintf (scratchbuf, "db%d", modrm.reg + add);
d708bcba 15847 else
7967e09e 15848 sprintf (scratchbuf, "%%db%d", modrm.reg + add);
252b5132
RH
15849 oappend (scratchbuf);
15850}
15851
252b5132 15852static void
26ca5450 15853OP_T (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 15854{
7967e09e 15855 sprintf (scratchbuf, "%%tr%d", modrm.reg);
9ce09ba2 15856 oappend_maybe_intel (scratchbuf);
252b5132
RH
15857}
15858
15859static void
6f74c397 15860OP_R (int bytemode, int sizeflag)
252b5132 15861{
7967e09e 15862 if (modrm.mod == 3)
2da11e11
AM
15863 OP_E (bytemode, sizeflag);
15864 else
6608db57 15865 BadOp ();
252b5132
RH
15866}
15867
15868static void
26ca5450 15869OP_MMX (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 15870{
b9733481
L
15871 int reg = modrm.reg;
15872 const char **names;
15873
041bd2e0
JH
15874 used_prefixes |= (prefixes & PREFIX_DATA);
15875 if (prefixes & PREFIX_DATA)
20f0a1fc 15876 {
b9733481 15877 names = names_xmm;
161a04f6
L
15878 USED_REX (REX_R);
15879 if (rex & REX_R)
b9733481 15880 reg += 8;
20f0a1fc 15881 }
041bd2e0 15882 else
b9733481
L
15883 names = names_mm;
15884 oappend (names[reg]);
252b5132
RH
15885}
15886
c608c12e 15887static void
c0f3af97 15888OP_XMM (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
c608c12e 15889{
b9733481
L
15890 int reg = modrm.reg;
15891 const char **names;
15892
161a04f6
L
15893 USED_REX (REX_R);
15894 if (rex & REX_R)
b9733481 15895 reg += 8;
43234a1e
L
15896 if (vex.evex)
15897 {
15898 if (!vex.r)
15899 reg += 16;
15900 }
15901
539f890d
L
15902 if (need_vex
15903 && bytemode != xmm_mode
43234a1e
L
15904 && bytemode != xmmq_mode
15905 && bytemode != evex_half_bcst_xmmq_mode
15906 && bytemode != ymm_mode
539f890d 15907 && bytemode != scalar_mode)
c0f3af97
L
15908 {
15909 switch (vex.length)
15910 {
15911 case 128:
b9733481 15912 names = names_xmm;
c0f3af97
L
15913 break;
15914 case 256:
5fc35d96
IT
15915 if (vex.w
15916 || (bytemode != vex_vsib_q_w_dq_mode
15917 && bytemode != vex_vsib_q_w_d_mode))
6c30d220
L
15918 names = names_ymm;
15919 else
15920 names = names_xmm;
c0f3af97 15921 break;
43234a1e
L
15922 case 512:
15923 names = names_zmm;
15924 break;
c0f3af97
L
15925 default:
15926 abort ();
15927 }
15928 }
43234a1e
L
15929 else if (bytemode == xmmq_mode
15930 || bytemode == evex_half_bcst_xmmq_mode)
15931 {
15932 switch (vex.length)
15933 {
15934 case 128:
15935 case 256:
15936 names = names_xmm;
15937 break;
15938 case 512:
15939 names = names_ymm;
15940 break;
15941 default:
15942 abort ();
15943 }
15944 }
15945 else if (bytemode == ymm_mode)
15946 names = names_ymm;
c0f3af97 15947 else
b9733481
L
15948 names = names_xmm;
15949 oappend (names[reg]);
c608c12e
AM
15950}
15951
252b5132 15952static void
26ca5450 15953OP_EM (int bytemode, int sizeflag)
252b5132 15954{
b9733481
L
15955 int reg;
15956 const char **names;
15957
7967e09e 15958 if (modrm.mod != 3)
252b5132 15959 {
b6169b20
L
15960 if (intel_syntax
15961 && (bytemode == v_mode || bytemode == v_swap_mode))
9306ca4a
JB
15962 {
15963 bytemode = (prefixes & PREFIX_DATA) ? x_mode : q_mode;
15964 used_prefixes |= (prefixes & PREFIX_DATA);
6c067bbb 15965 }
252b5132
RH
15966 OP_E (bytemode, sizeflag);
15967 return;
15968 }
15969
b6169b20
L
15970 if ((sizeflag & SUFFIX_ALWAYS) && bytemode == v_swap_mode)
15971 swap_operand ();
15972
6608db57 15973 /* Skip mod/rm byte. */
4bba6815 15974 MODRM_CHECK;
252b5132 15975 codep++;
041bd2e0 15976 used_prefixes |= (prefixes & PREFIX_DATA);
b9733481 15977 reg = modrm.rm;
041bd2e0 15978 if (prefixes & PREFIX_DATA)
20f0a1fc 15979 {
b9733481 15980 names = names_xmm;
161a04f6
L
15981 USED_REX (REX_B);
15982 if (rex & REX_B)
b9733481 15983 reg += 8;
20f0a1fc 15984 }
041bd2e0 15985 else
b9733481
L
15986 names = names_mm;
15987 oappend (names[reg]);
252b5132
RH
15988}
15989
246c51aa
L
15990/* cvt* are the only instructions in sse2 which have
15991 both SSE and MMX operands and also have 0x66 prefix
15992 in their opcode. 0x66 was originally used to differentiate
15993 between SSE and MMX instruction(operands). So we have to handle the
4d9567e0
MM
15994 cvt* separately using OP_EMC and OP_MXC */
15995static void
15996OP_EMC (int bytemode, int sizeflag)
15997{
7967e09e 15998 if (modrm.mod != 3)
4d9567e0
MM
15999 {
16000 if (intel_syntax && bytemode == v_mode)
16001 {
16002 bytemode = (prefixes & PREFIX_DATA) ? x_mode : q_mode;
16003 used_prefixes |= (prefixes & PREFIX_DATA);
6c067bbb 16004 }
4d9567e0
MM
16005 OP_E (bytemode, sizeflag);
16006 return;
16007 }
246c51aa 16008
4d9567e0
MM
16009 /* Skip mod/rm byte. */
16010 MODRM_CHECK;
16011 codep++;
16012 used_prefixes |= (prefixes & PREFIX_DATA);
b9733481 16013 oappend (names_mm[modrm.rm]);
4d9567e0
MM
16014}
16015
16016static void
16017OP_MXC (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
16018{
16019 used_prefixes |= (prefixes & PREFIX_DATA);
b9733481 16020 oappend (names_mm[modrm.reg]);
4d9567e0
MM
16021}
16022
c608c12e 16023static void
26ca5450 16024OP_EX (int bytemode, int sizeflag)
c608c12e 16025{
b9733481
L
16026 int reg;
16027 const char **names;
d6f574e0
L
16028
16029 /* Skip mod/rm byte. */
16030 MODRM_CHECK;
16031 codep++;
16032
7967e09e 16033 if (modrm.mod != 3)
c608c12e 16034 {
c1e679ec 16035 OP_E_memory (bytemode, sizeflag);
c608c12e
AM
16036 return;
16037 }
d6f574e0 16038
b9733481 16039 reg = modrm.rm;
161a04f6
L
16040 USED_REX (REX_B);
16041 if (rex & REX_B)
b9733481 16042 reg += 8;
43234a1e
L
16043 if (vex.evex)
16044 {
16045 USED_REX (REX_X);
16046 if ((rex & REX_X))
16047 reg += 16;
16048 }
c608c12e 16049
b6169b20 16050 if ((sizeflag & SUFFIX_ALWAYS)
fa99fab2
L
16051 && (bytemode == x_swap_mode
16052 || bytemode == d_swap_mode
1ba585e8 16053 || bytemode == dqw_swap_mode
7bb15c6f 16054 || bytemode == d_scalar_swap_mode
539f890d
L
16055 || bytemode == q_swap_mode
16056 || bytemode == q_scalar_swap_mode))
b6169b20
L
16057 swap_operand ();
16058
c0f3af97
L
16059 if (need_vex
16060 && bytemode != xmm_mode
6c30d220
L
16061 && bytemode != xmmdw_mode
16062 && bytemode != xmmqd_mode
16063 && bytemode != xmm_mb_mode
16064 && bytemode != xmm_mw_mode
16065 && bytemode != xmm_md_mode
16066 && bytemode != xmm_mq_mode
43234a1e 16067 && bytemode != xmm_mdq_mode
539f890d 16068 && bytemode != xmmq_mode
43234a1e
L
16069 && bytemode != evex_half_bcst_xmmq_mode
16070 && bytemode != ymm_mode
539f890d 16071 && bytemode != d_scalar_mode
7bb15c6f 16072 && bytemode != d_scalar_swap_mode
539f890d 16073 && bytemode != q_scalar_mode
1c480963
L
16074 && bytemode != q_scalar_swap_mode
16075 && bytemode != vex_scalar_w_dq_mode)
c0f3af97
L
16076 {
16077 switch (vex.length)
16078 {
16079 case 128:
b9733481 16080 names = names_xmm;
c0f3af97
L
16081 break;
16082 case 256:
b9733481 16083 names = names_ymm;
c0f3af97 16084 break;
43234a1e
L
16085 case 512:
16086 names = names_zmm;
16087 break;
c0f3af97
L
16088 default:
16089 abort ();
16090 }
16091 }
43234a1e
L
16092 else if (bytemode == xmmq_mode
16093 || bytemode == evex_half_bcst_xmmq_mode)
16094 {
16095 switch (vex.length)
16096 {
16097 case 128:
16098 case 256:
16099 names = names_xmm;
16100 break;
16101 case 512:
16102 names = names_ymm;
16103 break;
16104 default:
16105 abort ();
16106 }
16107 }
16108 else if (bytemode == ymm_mode)
16109 names = names_ymm;
c0f3af97 16110 else
b9733481
L
16111 names = names_xmm;
16112 oappend (names[reg]);
c608c12e
AM
16113}
16114
252b5132 16115static void
26ca5450 16116OP_MS (int bytemode, int sizeflag)
252b5132 16117{
7967e09e 16118 if (modrm.mod == 3)
2da11e11
AM
16119 OP_EM (bytemode, sizeflag);
16120 else
6608db57 16121 BadOp ();
252b5132
RH
16122}
16123
992aaec9 16124static void
26ca5450 16125OP_XS (int bytemode, int sizeflag)
992aaec9 16126{
7967e09e 16127 if (modrm.mod == 3)
992aaec9
AM
16128 OP_EX (bytemode, sizeflag);
16129 else
6608db57 16130 BadOp ();
992aaec9
AM
16131}
16132
cc0ec051
AM
16133static void
16134OP_M (int bytemode, int sizeflag)
16135{
7967e09e 16136 if (modrm.mod == 3)
75413a22
L
16137 /* bad bound,lea,lds,les,lfs,lgs,lss,cmpxchg8b,vmptrst modrm */
16138 BadOp ();
cc0ec051
AM
16139 else
16140 OP_E (bytemode, sizeflag);
16141}
16142
16143static void
16144OP_0f07 (int bytemode, int sizeflag)
16145{
7967e09e 16146 if (modrm.mod != 3 || modrm.rm != 0)
cc0ec051
AM
16147 BadOp ();
16148 else
16149 OP_E (bytemode, sizeflag);
16150}
16151
46e883c5 16152/* NOP is an alias of "xchg %ax,%ax" in 16bit mode, "xchg %eax,%eax" in
246c51aa 16153 32bit mode and "xchg %rax,%rax" in 64bit mode. */
46e883c5 16154
cc0ec051 16155static void
46e883c5 16156NOP_Fixup1 (int bytemode, int sizeflag)
cc0ec051 16157{
8b38ad71
L
16158 if ((prefixes & PREFIX_DATA) != 0
16159 || (rex != 0
16160 && rex != 0x48
16161 && address_mode == mode_64bit))
46e883c5
L
16162 OP_REG (bytemode, sizeflag);
16163 else
16164 strcpy (obuf, "nop");
16165}
16166
16167static void
16168NOP_Fixup2 (int bytemode, int sizeflag)
16169{
8b38ad71
L
16170 if ((prefixes & PREFIX_DATA) != 0
16171 || (rex != 0
16172 && rex != 0x48
16173 && address_mode == mode_64bit))
46e883c5 16174 OP_IMREG (bytemode, sizeflag);
cc0ec051
AM
16175}
16176
84037f8c 16177static const char *const Suffix3DNow[] = {
252b5132
RH
16178/* 00 */ NULL, NULL, NULL, NULL,
16179/* 04 */ NULL, NULL, NULL, NULL,
16180/* 08 */ NULL, NULL, NULL, NULL,
9e525108 16181/* 0C */ "pi2fw", "pi2fd", NULL, NULL,
252b5132
RH
16182/* 10 */ NULL, NULL, NULL, NULL,
16183/* 14 */ NULL, NULL, NULL, NULL,
16184/* 18 */ NULL, NULL, NULL, NULL,
9e525108 16185/* 1C */ "pf2iw", "pf2id", NULL, NULL,
252b5132
RH
16186/* 20 */ NULL, NULL, NULL, NULL,
16187/* 24 */ NULL, NULL, NULL, NULL,
16188/* 28 */ NULL, NULL, NULL, NULL,
16189/* 2C */ NULL, NULL, NULL, NULL,
16190/* 30 */ NULL, NULL, NULL, NULL,
16191/* 34 */ NULL, NULL, NULL, NULL,
16192/* 38 */ NULL, NULL, NULL, NULL,
16193/* 3C */ NULL, NULL, NULL, NULL,
16194/* 40 */ NULL, NULL, NULL, NULL,
16195/* 44 */ NULL, NULL, NULL, NULL,
16196/* 48 */ NULL, NULL, NULL, NULL,
16197/* 4C */ NULL, NULL, NULL, NULL,
16198/* 50 */ NULL, NULL, NULL, NULL,
16199/* 54 */ NULL, NULL, NULL, NULL,
16200/* 58 */ NULL, NULL, NULL, NULL,
16201/* 5C */ NULL, NULL, NULL, NULL,
16202/* 60 */ NULL, NULL, NULL, NULL,
16203/* 64 */ NULL, NULL, NULL, NULL,
16204/* 68 */ NULL, NULL, NULL, NULL,
16205/* 6C */ NULL, NULL, NULL, NULL,
16206/* 70 */ NULL, NULL, NULL, NULL,
16207/* 74 */ NULL, NULL, NULL, NULL,
16208/* 78 */ NULL, NULL, NULL, NULL,
16209/* 7C */ NULL, NULL, NULL, NULL,
16210/* 80 */ NULL, NULL, NULL, NULL,
16211/* 84 */ NULL, NULL, NULL, NULL,
9e525108
AM
16212/* 88 */ NULL, NULL, "pfnacc", NULL,
16213/* 8C */ NULL, NULL, "pfpnacc", NULL,
252b5132
RH
16214/* 90 */ "pfcmpge", NULL, NULL, NULL,
16215/* 94 */ "pfmin", NULL, "pfrcp", "pfrsqrt",
16216/* 98 */ NULL, NULL, "pfsub", NULL,
16217/* 9C */ NULL, NULL, "pfadd", NULL,
16218/* A0 */ "pfcmpgt", NULL, NULL, NULL,
16219/* A4 */ "pfmax", NULL, "pfrcpit1", "pfrsqit1",
16220/* A8 */ NULL, NULL, "pfsubr", NULL,
16221/* AC */ NULL, NULL, "pfacc", NULL,
16222/* B0 */ "pfcmpeq", NULL, NULL, NULL,
9beff690 16223/* B4 */ "pfmul", NULL, "pfrcpit2", "pmulhrw",
9e525108 16224/* B8 */ NULL, NULL, NULL, "pswapd",
252b5132
RH
16225/* BC */ NULL, NULL, NULL, "pavgusb",
16226/* C0 */ NULL, NULL, NULL, NULL,
16227/* C4 */ NULL, NULL, NULL, NULL,
16228/* C8 */ NULL, NULL, NULL, NULL,
16229/* CC */ NULL, NULL, NULL, NULL,
16230/* D0 */ NULL, NULL, NULL, NULL,
16231/* D4 */ NULL, NULL, NULL, NULL,
16232/* D8 */ NULL, NULL, NULL, NULL,
16233/* DC */ NULL, NULL, NULL, NULL,
16234/* E0 */ NULL, NULL, NULL, NULL,
16235/* E4 */ NULL, NULL, NULL, NULL,
16236/* E8 */ NULL, NULL, NULL, NULL,
16237/* EC */ NULL, NULL, NULL, NULL,
16238/* F0 */ NULL, NULL, NULL, NULL,
16239/* F4 */ NULL, NULL, NULL, NULL,
16240/* F8 */ NULL, NULL, NULL, NULL,
16241/* FC */ NULL, NULL, NULL, NULL,
16242};
16243
16244static void
26ca5450 16245OP_3DNowSuffix (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132
RH
16246{
16247 const char *mnemonic;
16248
16249 FETCH_DATA (the_info, codep + 1);
16250 /* AMD 3DNow! instructions are specified by an opcode suffix in the
16251 place where an 8-bit immediate would normally go. ie. the last
16252 byte of the instruction. */
ea397f5b 16253 obufp = mnemonicendp;
c608c12e 16254 mnemonic = Suffix3DNow[*codep++ & 0xff];
252b5132 16255 if (mnemonic)
2da11e11 16256 oappend (mnemonic);
252b5132
RH
16257 else
16258 {
16259 /* Since a variable sized modrm/sib chunk is between the start
16260 of the opcode (0x0f0f) and the opcode suffix, we need to do
16261 all the modrm processing first, and don't know until now that
16262 we have a bad opcode. This necessitates some cleaning up. */
ce518a5f
L
16263 op_out[0][0] = '\0';
16264 op_out[1][0] = '\0';
6608db57 16265 BadOp ();
252b5132 16266 }
ea397f5b 16267 mnemonicendp = obufp;
252b5132 16268}
c608c12e 16269
ea397f5b
L
16270static struct op simd_cmp_op[] =
16271{
16272 { STRING_COMMA_LEN ("eq") },
16273 { STRING_COMMA_LEN ("lt") },
16274 { STRING_COMMA_LEN ("le") },
16275 { STRING_COMMA_LEN ("unord") },
16276 { STRING_COMMA_LEN ("neq") },
16277 { STRING_COMMA_LEN ("nlt") },
16278 { STRING_COMMA_LEN ("nle") },
16279 { STRING_COMMA_LEN ("ord") }
c608c12e
AM
16280};
16281
16282static void
ad19981d 16283CMP_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
c608c12e
AM
16284{
16285 unsigned int cmp_type;
16286
16287 FETCH_DATA (the_info, codep + 1);
16288 cmp_type = *codep++ & 0xff;
c0f3af97 16289 if (cmp_type < ARRAY_SIZE (simd_cmp_op))
c608c12e 16290 {
ad19981d 16291 char suffix [3];
ea397f5b 16292 char *p = mnemonicendp - 2;
ad19981d
L
16293 suffix[0] = p[0];
16294 suffix[1] = p[1];
16295 suffix[2] = '\0';
ea397f5b
L
16296 sprintf (p, "%s%s", simd_cmp_op[cmp_type].name, suffix);
16297 mnemonicendp += simd_cmp_op[cmp_type].len;
c608c12e
AM
16298 }
16299 else
16300 {
ad19981d
L
16301 /* We have a reserved extension byte. Output it directly. */
16302 scratchbuf[0] = '$';
16303 print_operand_value (scratchbuf + 1, 1, cmp_type);
9ce09ba2 16304 oappend_maybe_intel (scratchbuf);
ad19981d 16305 scratchbuf[0] = '\0';
c608c12e
AM
16306 }
16307}
16308
ca164297 16309static void
b844680a
L
16310OP_Mwait (int bytemode ATTRIBUTE_UNUSED,
16311 int sizeflag ATTRIBUTE_UNUSED)
16312{
16313 /* mwait %eax,%ecx */
16314 if (!intel_syntax)
16315 {
16316 const char **names = (address_mode == mode_64bit
16317 ? names64 : names32);
16318 strcpy (op_out[0], names[0]);
16319 strcpy (op_out[1], names[1]);
16320 two_source_ops = 1;
16321 }
16322 /* Skip mod/rm byte. */
16323 MODRM_CHECK;
16324 codep++;
16325}
16326
16327static void
16328OP_Monitor (int bytemode ATTRIBUTE_UNUSED,
16329 int sizeflag ATTRIBUTE_UNUSED)
ca164297 16330{
b844680a
L
16331 /* monitor %eax,%ecx,%edx" */
16332 if (!intel_syntax)
ca164297 16333 {
b844680a 16334 const char **op1_names;
cb712a9e
L
16335 const char **names = (address_mode == mode_64bit
16336 ? names64 : names32);
1d9f512f 16337
b844680a
L
16338 if (!(prefixes & PREFIX_ADDR))
16339 op1_names = (address_mode == mode_16bit
16340 ? names16 : names);
ca164297
L
16341 else
16342 {
b844680a 16343 /* Remove "addr16/addr32". */
f16cd0d5 16344 all_prefixes[last_addr_prefix] = 0;
b844680a
L
16345 op1_names = (address_mode != mode_32bit
16346 ? names32 : names16);
16347 used_prefixes |= PREFIX_ADDR;
ca164297 16348 }
b844680a
L
16349 strcpy (op_out[0], op1_names[0]);
16350 strcpy (op_out[1], names[1]);
16351 strcpy (op_out[2], names[2]);
16352 two_source_ops = 1;
ca164297 16353 }
b844680a
L
16354 /* Skip mod/rm byte. */
16355 MODRM_CHECK;
16356 codep++;
30123838
JB
16357}
16358
6608db57
KH
16359static void
16360BadOp (void)
2da11e11 16361{
6608db57
KH
16362 /* Throw away prefixes and 1st. opcode byte. */
16363 codep = insn_codep + 1;
2da11e11
AM
16364 oappend ("(bad)");
16365}
4cc91dba 16366
35c52694
L
16367static void
16368REP_Fixup (int bytemode, int sizeflag)
16369{
16370 /* The 0xf3 prefix should be displayed as "rep" for ins, outs, movs,
16371 lods and stos. */
35c52694 16372 if (prefixes & PREFIX_REPZ)
f16cd0d5 16373 all_prefixes[last_repz_prefix] = REP_PREFIX;
35c52694
L
16374
16375 switch (bytemode)
16376 {
16377 case al_reg:
16378 case eAX_reg:
16379 case indir_dx_reg:
16380 OP_IMREG (bytemode, sizeflag);
16381 break;
16382 case eDI_reg:
16383 OP_ESreg (bytemode, sizeflag);
16384 break;
16385 case eSI_reg:
16386 OP_DSreg (bytemode, sizeflag);
16387 break;
16388 default:
16389 abort ();
16390 break;
16391 }
16392}
f5804c90 16393
7e8b059b
L
16394/* For BND-prefixed instructions 0xF2 prefix should be displayed as
16395 "bnd". */
16396
16397static void
16398BND_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
16399{
16400 if (prefixes & PREFIX_REPNZ)
16401 all_prefixes[last_repnz_prefix] = BND_PREFIX;
16402}
16403
42164a71
L
16404/* Similar to OP_E. But the 0xf2/0xf3 prefixes should be displayed as
16405 "xacquire"/"xrelease" for memory operand if there is a LOCK prefix.
16406 */
16407
16408static void
16409HLE_Fixup1 (int bytemode, int sizeflag)
16410{
16411 if (modrm.mod != 3
16412 && (prefixes & PREFIX_LOCK) != 0)
16413 {
16414 if (prefixes & PREFIX_REPZ)
16415 all_prefixes[last_repz_prefix] = XRELEASE_PREFIX;
16416 if (prefixes & PREFIX_REPNZ)
16417 all_prefixes[last_repnz_prefix] = XACQUIRE_PREFIX;
16418 }
16419
16420 OP_E (bytemode, sizeflag);
16421}
16422
16423/* Similar to OP_E. But the 0xf2/0xf3 prefixes should be displayed as
16424 "xacquire"/"xrelease" for memory operand. No check for LOCK prefix.
16425 */
16426
16427static void
16428HLE_Fixup2 (int bytemode, int sizeflag)
16429{
16430 if (modrm.mod != 3)
16431 {
16432 if (prefixes & PREFIX_REPZ)
16433 all_prefixes[last_repz_prefix] = XRELEASE_PREFIX;
16434 if (prefixes & PREFIX_REPNZ)
16435 all_prefixes[last_repnz_prefix] = XACQUIRE_PREFIX;
16436 }
16437
16438 OP_E (bytemode, sizeflag);
16439}
16440
16441/* Similar to OP_E. But the 0xf3 prefixes should be displayed as
16442 "xrelease" for memory operand. No check for LOCK prefix. */
16443
16444static void
16445HLE_Fixup3 (int bytemode, int sizeflag)
16446{
16447 if (modrm.mod != 3
16448 && last_repz_prefix > last_repnz_prefix
16449 && (prefixes & PREFIX_REPZ) != 0)
16450 all_prefixes[last_repz_prefix] = XRELEASE_PREFIX;
16451
16452 OP_E (bytemode, sizeflag);
16453}
16454
f5804c90
L
16455static void
16456CMPXCHG8B_Fixup (int bytemode, int sizeflag)
16457{
161a04f6
L
16458 USED_REX (REX_W);
16459 if (rex & REX_W)
f5804c90
L
16460 {
16461 /* Change cmpxchg8b to cmpxchg16b. */
ea397f5b
L
16462 char *p = mnemonicendp - 2;
16463 mnemonicendp = stpcpy (p, "16b");
fb9c77c7 16464 bytemode = o_mode;
f5804c90 16465 }
42164a71
L
16466 else if ((prefixes & PREFIX_LOCK) != 0)
16467 {
16468 if (prefixes & PREFIX_REPZ)
16469 all_prefixes[last_repz_prefix] = XRELEASE_PREFIX;
16470 if (prefixes & PREFIX_REPNZ)
16471 all_prefixes[last_repnz_prefix] = XACQUIRE_PREFIX;
16472 }
16473
f5804c90
L
16474 OP_M (bytemode, sizeflag);
16475}
42903f7f
L
16476
16477static void
16478XMM_Fixup (int reg, int sizeflag ATTRIBUTE_UNUSED)
16479{
b9733481
L
16480 const char **names;
16481
c0f3af97
L
16482 if (need_vex)
16483 {
16484 switch (vex.length)
16485 {
16486 case 128:
b9733481 16487 names = names_xmm;
c0f3af97
L
16488 break;
16489 case 256:
b9733481 16490 names = names_ymm;
c0f3af97
L
16491 break;
16492 default:
16493 abort ();
16494 }
16495 }
16496 else
b9733481
L
16497 names = names_xmm;
16498 oappend (names[reg]);
42903f7f 16499}
381d071f
L
16500
16501static void
16502CRC32_Fixup (int bytemode, int sizeflag)
16503{
16504 /* Add proper suffix to "crc32". */
ea397f5b 16505 char *p = mnemonicendp;
381d071f
L
16506
16507 switch (bytemode)
16508 {
16509 case b_mode:
20592a94 16510 if (intel_syntax)
ea397f5b 16511 goto skip;
20592a94 16512
381d071f
L
16513 *p++ = 'b';
16514 break;
16515 case v_mode:
20592a94 16516 if (intel_syntax)
ea397f5b 16517 goto skip;
20592a94 16518
381d071f
L
16519 USED_REX (REX_W);
16520 if (rex & REX_W)
16521 *p++ = 'q';
7bb15c6f 16522 else
f16cd0d5
L
16523 {
16524 if (sizeflag & DFLAG)
16525 *p++ = 'l';
16526 else
16527 *p++ = 'w';
16528 used_prefixes |= (prefixes & PREFIX_DATA);
16529 }
381d071f
L
16530 break;
16531 default:
16532 oappend (INTERNAL_DISASSEMBLER_ERROR);
16533 break;
16534 }
ea397f5b 16535 mnemonicendp = p;
381d071f
L
16536 *p = '\0';
16537
ea397f5b 16538skip:
381d071f
L
16539 if (modrm.mod == 3)
16540 {
16541 int add;
16542
16543 /* Skip mod/rm byte. */
16544 MODRM_CHECK;
16545 codep++;
16546
16547 USED_REX (REX_B);
16548 add = (rex & REX_B) ? 8 : 0;
16549 if (bytemode == b_mode)
16550 {
16551 USED_REX (0);
16552 if (rex)
16553 oappend (names8rex[modrm.rm + add]);
16554 else
16555 oappend (names8[modrm.rm + add]);
16556 }
16557 else
16558 {
16559 USED_REX (REX_W);
16560 if (rex & REX_W)
16561 oappend (names64[modrm.rm + add]);
16562 else if ((prefixes & PREFIX_DATA))
16563 oappend (names16[modrm.rm + add]);
16564 else
16565 oappend (names32[modrm.rm + add]);
16566 }
16567 }
16568 else
9344ff29 16569 OP_E (bytemode, sizeflag);
381d071f 16570}
85f10a01 16571
eacc9c89
L
16572static void
16573FXSAVE_Fixup (int bytemode, int sizeflag)
16574{
16575 /* Add proper suffix to "fxsave" and "fxrstor". */
16576 USED_REX (REX_W);
16577 if (rex & REX_W)
16578 {
16579 char *p = mnemonicendp;
16580 *p++ = '6';
16581 *p++ = '4';
16582 *p = '\0';
16583 mnemonicendp = p;
16584 }
16585 OP_M (bytemode, sizeflag);
16586}
16587
c0f3af97
L
16588/* Display the destination register operand for instructions with
16589 VEX. */
16590
16591static void
16592OP_VEX (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
16593{
539f890d 16594 int reg;
b9733481
L
16595 const char **names;
16596
c0f3af97
L
16597 if (!need_vex)
16598 abort ();
16599
16600 if (!need_vex_reg)
16601 return;
16602
539f890d 16603 reg = vex.register_specifier;
43234a1e
L
16604 if (vex.evex)
16605 {
16606 if (!vex.v)
16607 reg += 16;
16608 }
16609
539f890d
L
16610 if (bytemode == vex_scalar_mode)
16611 {
16612 oappend (names_xmm[reg]);
16613 return;
16614 }
16615
c0f3af97
L
16616 switch (vex.length)
16617 {
16618 case 128:
16619 switch (bytemode)
16620 {
16621 case vex_mode:
16622 case vex128_mode:
6c30d220 16623 case vex_vsib_q_w_dq_mode:
5fc35d96 16624 case vex_vsib_q_w_d_mode:
cb21baef
L
16625 names = names_xmm;
16626 break;
16627 case dq_mode:
16628 if (vex.w)
16629 names = names64;
16630 else
16631 names = names32;
c0f3af97 16632 break;
1ba585e8 16633 case mask_bd_mode:
43234a1e
L
16634 case mask_mode:
16635 names = names_mask;
16636 break;
c0f3af97
L
16637 default:
16638 abort ();
16639 return;
16640 }
c0f3af97
L
16641 break;
16642 case 256:
16643 switch (bytemode)
16644 {
16645 case vex_mode:
16646 case vex256_mode:
6c30d220
L
16647 names = names_ymm;
16648 break;
16649 case vex_vsib_q_w_dq_mode:
5fc35d96 16650 case vex_vsib_q_w_d_mode:
6c30d220 16651 names = vex.w ? names_ymm : names_xmm;
c0f3af97 16652 break;
1ba585e8 16653 case mask_bd_mode:
43234a1e
L
16654 case mask_mode:
16655 names = names_mask;
16656 break;
c0f3af97
L
16657 default:
16658 abort ();
16659 return;
16660 }
c0f3af97 16661 break;
43234a1e
L
16662 case 512:
16663 names = names_zmm;
16664 break;
c0f3af97
L
16665 default:
16666 abort ();
16667 break;
16668 }
539f890d 16669 oappend (names[reg]);
c0f3af97
L
16670}
16671
922d8de8
DR
16672/* Get the VEX immediate byte without moving codep. */
16673
16674static unsigned char
ccc5981b 16675get_vex_imm8 (int sizeflag, int opnum)
922d8de8
DR
16676{
16677 int bytes_before_imm = 0;
16678
922d8de8
DR
16679 if (modrm.mod != 3)
16680 {
16681 /* There are SIB/displacement bytes. */
16682 if ((sizeflag & AFLAG) || address_mode == mode_64bit)
6c067bbb 16683 {
922d8de8 16684 /* 32/64 bit address mode */
6c067bbb 16685 int base = modrm.rm;
922d8de8
DR
16686
16687 /* Check SIB byte. */
6c067bbb
RM
16688 if (base == 4)
16689 {
16690 FETCH_DATA (the_info, codep + 1);
16691 base = *codep & 7;
16692 /* When decoding the third source, don't increase
16693 bytes_before_imm as this has already been incremented
16694 by one in OP_E_memory while decoding the second
16695 source operand. */
16696 if (opnum == 0)
16697 bytes_before_imm++;
16698 }
16699
16700 /* Don't increase bytes_before_imm when decoding the third source,
16701 it has already been incremented by OP_E_memory while decoding
16702 the second source operand. */
16703 if (opnum == 0)
16704 {
16705 switch (modrm.mod)
16706 {
16707 case 0:
16708 /* When modrm.rm == 5 or modrm.rm == 4 and base in
16709 SIB == 5, there is a 4 byte displacement. */
16710 if (base != 5)
16711 /* No displacement. */
16712 break;
16713 case 2:
16714 /* 4 byte displacement. */
16715 bytes_before_imm += 4;
16716 break;
16717 case 1:
16718 /* 1 byte displacement. */
16719 bytes_before_imm++;
16720 break;
16721 }
16722 }
16723 }
922d8de8 16724 else
02e647f9
SP
16725 {
16726 /* 16 bit address mode */
6c067bbb
RM
16727 /* Don't increase bytes_before_imm when decoding the third source,
16728 it has already been incremented by OP_E_memory while decoding
16729 the second source operand. */
16730 if (opnum == 0)
16731 {
02e647f9
SP
16732 switch (modrm.mod)
16733 {
16734 case 0:
16735 /* When modrm.rm == 6, there is a 2 byte displacement. */
16736 if (modrm.rm != 6)
16737 /* No displacement. */
16738 break;
16739 case 2:
16740 /* 2 byte displacement. */
16741 bytes_before_imm += 2;
16742 break;
16743 case 1:
16744 /* 1 byte displacement: when decoding the third source,
16745 don't increase bytes_before_imm as this has already
16746 been incremented by one in OP_E_memory while decoding
16747 the second source operand. */
16748 if (opnum == 0)
16749 bytes_before_imm++;
ccc5981b 16750
02e647f9
SP
16751 break;
16752 }
922d8de8
DR
16753 }
16754 }
16755 }
16756
16757 FETCH_DATA (the_info, codep + bytes_before_imm + 1);
16758 return codep [bytes_before_imm];
16759}
16760
16761static void
16762OP_EX_VexReg (int bytemode, int sizeflag, int reg)
16763{
b9733481
L
16764 const char **names;
16765
922d8de8
DR
16766 if (reg == -1 && modrm.mod != 3)
16767 {
16768 OP_E_memory (bytemode, sizeflag);
16769 return;
16770 }
16771 else
16772 {
16773 if (reg == -1)
16774 {
16775 reg = modrm.rm;
16776 USED_REX (REX_B);
16777 if (rex & REX_B)
16778 reg += 8;
16779 }
16780 else if (reg > 7 && address_mode != mode_64bit)
16781 BadOp ();
16782 }
16783
16784 switch (vex.length)
16785 {
16786 case 128:
b9733481 16787 names = names_xmm;
922d8de8
DR
16788 break;
16789 case 256:
b9733481 16790 names = names_ymm;
922d8de8
DR
16791 break;
16792 default:
16793 abort ();
16794 }
b9733481 16795 oappend (names[reg]);
922d8de8
DR
16796}
16797
a683cc34
SP
16798static void
16799OP_EX_VexImmW (int bytemode, int sizeflag)
16800{
16801 int reg = -1;
16802 static unsigned char vex_imm8;
16803
16804 if (vex_w_done == 0)
16805 {
16806 vex_w_done = 1;
16807
16808 /* Skip mod/rm byte. */
16809 MODRM_CHECK;
16810 codep++;
16811
16812 vex_imm8 = get_vex_imm8 (sizeflag, 0);
16813
16814 if (vex.w)
16815 reg = vex_imm8 >> 4;
16816
16817 OP_EX_VexReg (bytemode, sizeflag, reg);
16818 }
16819 else if (vex_w_done == 1)
16820 {
16821 vex_w_done = 2;
16822
16823 if (!vex.w)
16824 reg = vex_imm8 >> 4;
16825
16826 OP_EX_VexReg (bytemode, sizeflag, reg);
16827 }
16828 else
16829 {
16830 /* Output the imm8 directly. */
16831 scratchbuf[0] = '$';
16832 print_operand_value (scratchbuf + 1, 1, vex_imm8 & 0xf);
9ce09ba2 16833 oappend_maybe_intel (scratchbuf);
a683cc34
SP
16834 scratchbuf[0] = '\0';
16835 codep++;
16836 }
16837}
16838
5dd85c99
SP
16839static void
16840OP_Vex_2src (int bytemode, int sizeflag)
16841{
16842 if (modrm.mod == 3)
16843 {
b9733481 16844 int reg = modrm.rm;
5dd85c99 16845 USED_REX (REX_B);
b9733481
L
16846 if (rex & REX_B)
16847 reg += 8;
16848 oappend (names_xmm[reg]);
5dd85c99
SP
16849 }
16850 else
16851 {
16852 if (intel_syntax
16853 && (bytemode == v_mode || bytemode == v_swap_mode))
16854 {
16855 bytemode = (prefixes & PREFIX_DATA) ? x_mode : q_mode;
16856 used_prefixes |= (prefixes & PREFIX_DATA);
16857 }
16858 OP_E (bytemode, sizeflag);
16859 }
16860}
16861
16862static void
16863OP_Vex_2src_1 (int bytemode, int sizeflag)
16864{
16865 if (modrm.mod == 3)
16866 {
16867 /* Skip mod/rm byte. */
16868 MODRM_CHECK;
16869 codep++;
16870 }
16871
16872 if (vex.w)
b9733481 16873 oappend (names_xmm[vex.register_specifier]);
5dd85c99
SP
16874 else
16875 OP_Vex_2src (bytemode, sizeflag);
16876}
16877
16878static void
16879OP_Vex_2src_2 (int bytemode, int sizeflag)
16880{
16881 if (vex.w)
16882 OP_Vex_2src (bytemode, sizeflag);
16883 else
b9733481 16884 oappend (names_xmm[vex.register_specifier]);
5dd85c99
SP
16885}
16886
922d8de8
DR
16887static void
16888OP_EX_VexW (int bytemode, int sizeflag)
16889{
16890 int reg = -1;
16891
16892 if (!vex_w_done)
16893 {
16894 vex_w_done = 1;
41effecb
SP
16895
16896 /* Skip mod/rm byte. */
16897 MODRM_CHECK;
16898 codep++;
16899
922d8de8 16900 if (vex.w)
ccc5981b 16901 reg = get_vex_imm8 (sizeflag, 0) >> 4;
922d8de8
DR
16902 }
16903 else
16904 {
16905 if (!vex.w)
ccc5981b 16906 reg = get_vex_imm8 (sizeflag, 1) >> 4;
922d8de8
DR
16907 }
16908
16909 OP_EX_VexReg (bytemode, sizeflag, reg);
16910}
16911
922d8de8
DR
16912static void
16913VEXI4_Fixup (int bytemode ATTRIBUTE_UNUSED,
16914 int sizeflag ATTRIBUTE_UNUSED)
16915{
16916 /* Skip the immediate byte and check for invalid bits. */
16917 FETCH_DATA (the_info, codep + 1);
16918 if (*codep++ & 0xf)
16919 BadOp ();
16920}
16921
c0f3af97
L
16922static void
16923OP_REG_VexI4 (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
16924{
16925 int reg;
b9733481
L
16926 const char **names;
16927
c0f3af97
L
16928 FETCH_DATA (the_info, codep + 1);
16929 reg = *codep++;
16930
16931 if (bytemode != x_mode)
16932 abort ();
16933
16934 if (reg & 0xf)
16935 BadOp ();
16936
16937 reg >>= 4;
dae39acc
L
16938 if (reg > 7 && address_mode != mode_64bit)
16939 BadOp ();
16940
c0f3af97
L
16941 switch (vex.length)
16942 {
16943 case 128:
b9733481 16944 names = names_xmm;
c0f3af97
L
16945 break;
16946 case 256:
b9733481 16947 names = names_ymm;
c0f3af97
L
16948 break;
16949 default:
16950 abort ();
16951 }
b9733481 16952 oappend (names[reg]);
c0f3af97
L
16953}
16954
922d8de8
DR
16955static void
16956OP_XMM_VexW (int bytemode, int sizeflag)
16957{
16958 /* Turn off the REX.W bit since it is used for swapping operands
16959 now. */
16960 rex &= ~REX_W;
16961 OP_XMM (bytemode, sizeflag);
16962}
16963
c0f3af97
L
16964static void
16965OP_EX_Vex (int bytemode, int sizeflag)
16966{
16967 if (modrm.mod != 3)
16968 {
16969 if (vex.register_specifier != 0)
16970 BadOp ();
16971 need_vex_reg = 0;
16972 }
16973 OP_EX (bytemode, sizeflag);
16974}
16975
16976static void
16977OP_XMM_Vex (int bytemode, int sizeflag)
16978{
16979 if (modrm.mod != 3)
16980 {
16981 if (vex.register_specifier != 0)
16982 BadOp ();
16983 need_vex_reg = 0;
16984 }
16985 OP_XMM (bytemode, sizeflag);
16986}
16987
16988static void
16989VZERO_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
16990{
16991 switch (vex.length)
16992 {
16993 case 128:
ea397f5b 16994 mnemonicendp = stpcpy (obuf, "vzeroupper");
c0f3af97
L
16995 break;
16996 case 256:
ea397f5b 16997 mnemonicendp = stpcpy (obuf, "vzeroall");
c0f3af97
L
16998 break;
16999 default:
17000 abort ();
17001 }
17002}
17003
ea397f5b
L
17004static struct op vex_cmp_op[] =
17005{
17006 { STRING_COMMA_LEN ("eq") },
17007 { STRING_COMMA_LEN ("lt") },
17008 { STRING_COMMA_LEN ("le") },
17009 { STRING_COMMA_LEN ("unord") },
17010 { STRING_COMMA_LEN ("neq") },
17011 { STRING_COMMA_LEN ("nlt") },
17012 { STRING_COMMA_LEN ("nle") },
17013 { STRING_COMMA_LEN ("ord") },
17014 { STRING_COMMA_LEN ("eq_uq") },
17015 { STRING_COMMA_LEN ("nge") },
17016 { STRING_COMMA_LEN ("ngt") },
17017 { STRING_COMMA_LEN ("false") },
17018 { STRING_COMMA_LEN ("neq_oq") },
17019 { STRING_COMMA_LEN ("ge") },
17020 { STRING_COMMA_LEN ("gt") },
17021 { STRING_COMMA_LEN ("true") },
17022 { STRING_COMMA_LEN ("eq_os") },
17023 { STRING_COMMA_LEN ("lt_oq") },
17024 { STRING_COMMA_LEN ("le_oq") },
17025 { STRING_COMMA_LEN ("unord_s") },
17026 { STRING_COMMA_LEN ("neq_us") },
17027 { STRING_COMMA_LEN ("nlt_uq") },
17028 { STRING_COMMA_LEN ("nle_uq") },
17029 { STRING_COMMA_LEN ("ord_s") },
17030 { STRING_COMMA_LEN ("eq_us") },
17031 { STRING_COMMA_LEN ("nge_uq") },
17032 { STRING_COMMA_LEN ("ngt_uq") },
17033 { STRING_COMMA_LEN ("false_os") },
17034 { STRING_COMMA_LEN ("neq_os") },
17035 { STRING_COMMA_LEN ("ge_oq") },
17036 { STRING_COMMA_LEN ("gt_oq") },
17037 { STRING_COMMA_LEN ("true_us") },
c0f3af97
L
17038};
17039
17040static void
17041VCMP_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
17042{
17043 unsigned int cmp_type;
17044
17045 FETCH_DATA (the_info, codep + 1);
17046 cmp_type = *codep++ & 0xff;
17047 if (cmp_type < ARRAY_SIZE (vex_cmp_op))
17048 {
17049 char suffix [3];
ea397f5b 17050 char *p = mnemonicendp - 2;
c0f3af97
L
17051 suffix[0] = p[0];
17052 suffix[1] = p[1];
17053 suffix[2] = '\0';
ea397f5b
L
17054 sprintf (p, "%s%s", vex_cmp_op[cmp_type].name, suffix);
17055 mnemonicendp += vex_cmp_op[cmp_type].len;
c0f3af97
L
17056 }
17057 else
17058 {
17059 /* We have a reserved extension byte. Output it directly. */
17060 scratchbuf[0] = '$';
17061 print_operand_value (scratchbuf + 1, 1, cmp_type);
9ce09ba2 17062 oappend_maybe_intel (scratchbuf);
c0f3af97
L
17063 scratchbuf[0] = '\0';
17064 }
17065}
17066
43234a1e
L
17067static void
17068VPCMP_Fixup (int bytemode ATTRIBUTE_UNUSED,
17069 int sizeflag ATTRIBUTE_UNUSED)
17070{
17071 unsigned int cmp_type;
17072
17073 if (!vex.evex)
17074 abort ();
17075
17076 FETCH_DATA (the_info, codep + 1);
17077 cmp_type = *codep++ & 0xff;
17078 /* There are aliases for immediates 0, 1, 2, 4, 5, 6.
17079 If it's the case, print suffix, otherwise - print the immediate. */
17080 if (cmp_type < ARRAY_SIZE (simd_cmp_op)
17081 && cmp_type != 3
17082 && cmp_type != 7)
17083 {
17084 char suffix [3];
17085 char *p = mnemonicendp - 2;
17086
17087 /* vpcmp* can have both one- and two-lettered suffix. */
17088 if (p[0] == 'p')
17089 {
17090 p++;
17091 suffix[0] = p[0];
17092 suffix[1] = '\0';
17093 }
17094 else
17095 {
17096 suffix[0] = p[0];
17097 suffix[1] = p[1];
17098 suffix[2] = '\0';
17099 }
17100
17101 sprintf (p, "%s%s", simd_cmp_op[cmp_type].name, suffix);
17102 mnemonicendp += simd_cmp_op[cmp_type].len;
17103 }
17104 else
17105 {
17106 /* We have a reserved extension byte. Output it directly. */
17107 scratchbuf[0] = '$';
17108 print_operand_value (scratchbuf + 1, 1, cmp_type);
9ce09ba2 17109 oappend_maybe_intel (scratchbuf);
43234a1e
L
17110 scratchbuf[0] = '\0';
17111 }
17112}
17113
ea397f5b
L
17114static const struct op pclmul_op[] =
17115{
17116 { STRING_COMMA_LEN ("lql") },
17117 { STRING_COMMA_LEN ("hql") },
17118 { STRING_COMMA_LEN ("lqh") },
17119 { STRING_COMMA_LEN ("hqh") }
c0f3af97
L
17120};
17121
17122static void
17123PCLMUL_Fixup (int bytemode ATTRIBUTE_UNUSED,
17124 int sizeflag ATTRIBUTE_UNUSED)
17125{
17126 unsigned int pclmul_type;
17127
17128 FETCH_DATA (the_info, codep + 1);
17129 pclmul_type = *codep++ & 0xff;
17130 switch (pclmul_type)
17131 {
17132 case 0x10:
17133 pclmul_type = 2;
17134 break;
17135 case 0x11:
17136 pclmul_type = 3;
17137 break;
17138 default:
17139 break;
7bb15c6f 17140 }
c0f3af97
L
17141 if (pclmul_type < ARRAY_SIZE (pclmul_op))
17142 {
17143 char suffix [4];
ea397f5b 17144 char *p = mnemonicendp - 3;
c0f3af97
L
17145 suffix[0] = p[0];
17146 suffix[1] = p[1];
17147 suffix[2] = p[2];
17148 suffix[3] = '\0';
ea397f5b
L
17149 sprintf (p, "%s%s", pclmul_op[pclmul_type].name, suffix);
17150 mnemonicendp += pclmul_op[pclmul_type].len;
c0f3af97
L
17151 }
17152 else
17153 {
17154 /* We have a reserved extension byte. Output it directly. */
17155 scratchbuf[0] = '$';
17156 print_operand_value (scratchbuf + 1, 1, pclmul_type);
9ce09ba2 17157 oappend_maybe_intel (scratchbuf);
c0f3af97
L
17158 scratchbuf[0] = '\0';
17159 }
17160}
17161
f1f8f695
L
17162static void
17163MOVBE_Fixup (int bytemode, int sizeflag)
17164{
17165 /* Add proper suffix to "movbe". */
ea397f5b 17166 char *p = mnemonicendp;
f1f8f695
L
17167
17168 switch (bytemode)
17169 {
17170 case v_mode:
17171 if (intel_syntax)
ea397f5b 17172 goto skip;
f1f8f695
L
17173
17174 USED_REX (REX_W);
17175 if (sizeflag & SUFFIX_ALWAYS)
17176 {
17177 if (rex & REX_W)
17178 *p++ = 'q';
f1f8f695 17179 else
f16cd0d5
L
17180 {
17181 if (sizeflag & DFLAG)
17182 *p++ = 'l';
17183 else
17184 *p++ = 'w';
17185 used_prefixes |= (prefixes & PREFIX_DATA);
17186 }
f1f8f695 17187 }
f1f8f695
L
17188 break;
17189 default:
17190 oappend (INTERNAL_DISASSEMBLER_ERROR);
17191 break;
17192 }
ea397f5b 17193 mnemonicendp = p;
f1f8f695
L
17194 *p = '\0';
17195
ea397f5b 17196skip:
f1f8f695
L
17197 OP_M (bytemode, sizeflag);
17198}
f88c9eb0
SP
17199
17200static void
17201OP_LWPCB_E (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
17202{
17203 int reg;
17204 const char **names;
17205
17206 /* Skip mod/rm byte. */
17207 MODRM_CHECK;
17208 codep++;
17209
17210 if (vex.w)
17211 names = names64;
f88c9eb0 17212 else
ce7d077e 17213 names = names32;
f88c9eb0
SP
17214
17215 reg = modrm.rm;
17216 USED_REX (REX_B);
17217 if (rex & REX_B)
17218 reg += 8;
17219
17220 oappend (names[reg]);
17221}
17222
17223static void
17224OP_LWP_E (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
17225{
17226 const char **names;
17227
17228 if (vex.w)
17229 names = names64;
f88c9eb0 17230 else
ce7d077e 17231 names = names32;
f88c9eb0
SP
17232
17233 oappend (names[vex.register_specifier]);
17234}
43234a1e
L
17235
17236static void
17237OP_Mask (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
17238{
17239 if (!vex.evex
1ba585e8 17240 || (bytemode != mask_mode && bytemode != mask_bd_mode))
43234a1e
L
17241 abort ();
17242
17243 USED_REX (REX_R);
17244 if ((rex & REX_R) != 0 || !vex.r)
17245 {
17246 BadOp ();
17247 return;
17248 }
17249
17250 oappend (names_mask [modrm.reg]);
17251}
17252
17253static void
17254OP_Rounding (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
17255{
17256 if (!vex.evex
17257 || (bytemode != evex_rounding_mode
17258 && bytemode != evex_sae_mode))
17259 abort ();
17260 if (modrm.mod == 3 && vex.b)
17261 switch (bytemode)
17262 {
17263 case evex_rounding_mode:
17264 oappend (names_rounding[vex.ll]);
17265 break;
17266 case evex_sae_mode:
17267 oappend ("{sae}");
17268 break;
17269 default:
17270 break;
17271 }
17272}
This page took 1.82985 seconds and 4 git commands to generate.