Add support for AVX512BW instructions and their AVX512VL versions.
[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,
1307 PREFIX_EVEX_0F58,
1308 PREFIX_EVEX_0F59,
1309 PREFIX_EVEX_0F5A,
1310 PREFIX_EVEX_0F5B,
1311 PREFIX_EVEX_0F5C,
1312 PREFIX_EVEX_0F5D,
1313 PREFIX_EVEX_0F5E,
1314 PREFIX_EVEX_0F5F,
1ba585e8
IT
1315 PREFIX_EVEX_0F60,
1316 PREFIX_EVEX_0F61,
43234a1e 1317 PREFIX_EVEX_0F62,
1ba585e8
IT
1318 PREFIX_EVEX_0F63,
1319 PREFIX_EVEX_0F64,
1320 PREFIX_EVEX_0F65,
43234a1e 1321 PREFIX_EVEX_0F66,
1ba585e8
IT
1322 PREFIX_EVEX_0F67,
1323 PREFIX_EVEX_0F68,
1324 PREFIX_EVEX_0F69,
43234a1e 1325 PREFIX_EVEX_0F6A,
1ba585e8 1326 PREFIX_EVEX_0F6B,
43234a1e
L
1327 PREFIX_EVEX_0F6C,
1328 PREFIX_EVEX_0F6D,
1329 PREFIX_EVEX_0F6E,
1330 PREFIX_EVEX_0F6F,
1331 PREFIX_EVEX_0F70,
1ba585e8
IT
1332 PREFIX_EVEX_0F71_REG_2,
1333 PREFIX_EVEX_0F71_REG_4,
1334 PREFIX_EVEX_0F71_REG_6,
43234a1e
L
1335 PREFIX_EVEX_0F72_REG_0,
1336 PREFIX_EVEX_0F72_REG_1,
1337 PREFIX_EVEX_0F72_REG_2,
1338 PREFIX_EVEX_0F72_REG_4,
1339 PREFIX_EVEX_0F72_REG_6,
1340 PREFIX_EVEX_0F73_REG_2,
1ba585e8 1341 PREFIX_EVEX_0F73_REG_3,
43234a1e 1342 PREFIX_EVEX_0F73_REG_6,
1ba585e8
IT
1343 PREFIX_EVEX_0F73_REG_7,
1344 PREFIX_EVEX_0F74,
1345 PREFIX_EVEX_0F75,
43234a1e
L
1346 PREFIX_EVEX_0F76,
1347 PREFIX_EVEX_0F78,
1348 PREFIX_EVEX_0F79,
1349 PREFIX_EVEX_0F7A,
1350 PREFIX_EVEX_0F7B,
1351 PREFIX_EVEX_0F7E,
1352 PREFIX_EVEX_0F7F,
1353 PREFIX_EVEX_0FC2,
1ba585e8
IT
1354 PREFIX_EVEX_0FC4,
1355 PREFIX_EVEX_0FC5,
43234a1e 1356 PREFIX_EVEX_0FC6,
1ba585e8 1357 PREFIX_EVEX_0FD1,
43234a1e
L
1358 PREFIX_EVEX_0FD2,
1359 PREFIX_EVEX_0FD3,
1360 PREFIX_EVEX_0FD4,
1ba585e8 1361 PREFIX_EVEX_0FD5,
43234a1e 1362 PREFIX_EVEX_0FD6,
1ba585e8
IT
1363 PREFIX_EVEX_0FD8,
1364 PREFIX_EVEX_0FD9,
1365 PREFIX_EVEX_0FDA,
43234a1e 1366 PREFIX_EVEX_0FDB,
1ba585e8
IT
1367 PREFIX_EVEX_0FDC,
1368 PREFIX_EVEX_0FDD,
1369 PREFIX_EVEX_0FDE,
43234a1e 1370 PREFIX_EVEX_0FDF,
1ba585e8
IT
1371 PREFIX_EVEX_0FE0,
1372 PREFIX_EVEX_0FE1,
43234a1e 1373 PREFIX_EVEX_0FE2,
1ba585e8
IT
1374 PREFIX_EVEX_0FE3,
1375 PREFIX_EVEX_0FE4,
1376 PREFIX_EVEX_0FE5,
43234a1e
L
1377 PREFIX_EVEX_0FE6,
1378 PREFIX_EVEX_0FE7,
1ba585e8
IT
1379 PREFIX_EVEX_0FE8,
1380 PREFIX_EVEX_0FE9,
1381 PREFIX_EVEX_0FEA,
43234a1e 1382 PREFIX_EVEX_0FEB,
1ba585e8
IT
1383 PREFIX_EVEX_0FEC,
1384 PREFIX_EVEX_0FED,
1385 PREFIX_EVEX_0FEE,
43234a1e 1386 PREFIX_EVEX_0FEF,
1ba585e8 1387 PREFIX_EVEX_0FF1,
43234a1e
L
1388 PREFIX_EVEX_0FF2,
1389 PREFIX_EVEX_0FF3,
1390 PREFIX_EVEX_0FF4,
1ba585e8
IT
1391 PREFIX_EVEX_0FF5,
1392 PREFIX_EVEX_0FF6,
1393 PREFIX_EVEX_0FF8,
1394 PREFIX_EVEX_0FF9,
43234a1e
L
1395 PREFIX_EVEX_0FFA,
1396 PREFIX_EVEX_0FFB,
1ba585e8
IT
1397 PREFIX_EVEX_0FFC,
1398 PREFIX_EVEX_0FFD,
43234a1e 1399 PREFIX_EVEX_0FFE,
1ba585e8
IT
1400 PREFIX_EVEX_0F3800,
1401 PREFIX_EVEX_0F3804,
1402 PREFIX_EVEX_0F380B,
43234a1e
L
1403 PREFIX_EVEX_0F380C,
1404 PREFIX_EVEX_0F380D,
1ba585e8 1405 PREFIX_EVEX_0F3810,
43234a1e
L
1406 PREFIX_EVEX_0F3811,
1407 PREFIX_EVEX_0F3812,
1408 PREFIX_EVEX_0F3813,
1409 PREFIX_EVEX_0F3814,
1410 PREFIX_EVEX_0F3815,
1411 PREFIX_EVEX_0F3816,
1412 PREFIX_EVEX_0F3818,
1413 PREFIX_EVEX_0F3819,
1414 PREFIX_EVEX_0F381A,
1415 PREFIX_EVEX_0F381B,
1ba585e8
IT
1416 PREFIX_EVEX_0F381C,
1417 PREFIX_EVEX_0F381D,
43234a1e
L
1418 PREFIX_EVEX_0F381E,
1419 PREFIX_EVEX_0F381F,
1ba585e8 1420 PREFIX_EVEX_0F3820,
43234a1e
L
1421 PREFIX_EVEX_0F3821,
1422 PREFIX_EVEX_0F3822,
1423 PREFIX_EVEX_0F3823,
1424 PREFIX_EVEX_0F3824,
1425 PREFIX_EVEX_0F3825,
1ba585e8 1426 PREFIX_EVEX_0F3826,
43234a1e
L
1427 PREFIX_EVEX_0F3827,
1428 PREFIX_EVEX_0F3828,
1429 PREFIX_EVEX_0F3829,
1430 PREFIX_EVEX_0F382A,
1ba585e8 1431 PREFIX_EVEX_0F382B,
43234a1e
L
1432 PREFIX_EVEX_0F382C,
1433 PREFIX_EVEX_0F382D,
1ba585e8 1434 PREFIX_EVEX_0F3830,
43234a1e
L
1435 PREFIX_EVEX_0F3831,
1436 PREFIX_EVEX_0F3832,
1437 PREFIX_EVEX_0F3833,
1438 PREFIX_EVEX_0F3834,
1439 PREFIX_EVEX_0F3835,
1440 PREFIX_EVEX_0F3836,
1441 PREFIX_EVEX_0F3837,
1ba585e8 1442 PREFIX_EVEX_0F3838,
43234a1e
L
1443 PREFIX_EVEX_0F3839,
1444 PREFIX_EVEX_0F383A,
1445 PREFIX_EVEX_0F383B,
1ba585e8 1446 PREFIX_EVEX_0F383C,
43234a1e 1447 PREFIX_EVEX_0F383D,
1ba585e8 1448 PREFIX_EVEX_0F383E,
43234a1e
L
1449 PREFIX_EVEX_0F383F,
1450 PREFIX_EVEX_0F3840,
1451 PREFIX_EVEX_0F3842,
1452 PREFIX_EVEX_0F3843,
1453 PREFIX_EVEX_0F3844,
1454 PREFIX_EVEX_0F3845,
1455 PREFIX_EVEX_0F3846,
1456 PREFIX_EVEX_0F3847,
1457 PREFIX_EVEX_0F384C,
1458 PREFIX_EVEX_0F384D,
1459 PREFIX_EVEX_0F384E,
1460 PREFIX_EVEX_0F384F,
1461 PREFIX_EVEX_0F3858,
1462 PREFIX_EVEX_0F3859,
1463 PREFIX_EVEX_0F385A,
1464 PREFIX_EVEX_0F385B,
1465 PREFIX_EVEX_0F3864,
1466 PREFIX_EVEX_0F3865,
1ba585e8
IT
1467 PREFIX_EVEX_0F3866,
1468 PREFIX_EVEX_0F3875,
43234a1e
L
1469 PREFIX_EVEX_0F3876,
1470 PREFIX_EVEX_0F3877,
1ba585e8
IT
1471 PREFIX_EVEX_0F3878,
1472 PREFIX_EVEX_0F3879,
1473 PREFIX_EVEX_0F387A,
1474 PREFIX_EVEX_0F387B,
43234a1e 1475 PREFIX_EVEX_0F387C,
1ba585e8 1476 PREFIX_EVEX_0F387D,
43234a1e
L
1477 PREFIX_EVEX_0F387E,
1478 PREFIX_EVEX_0F387F,
1479 PREFIX_EVEX_0F3888,
1480 PREFIX_EVEX_0F3889,
1481 PREFIX_EVEX_0F388A,
1482 PREFIX_EVEX_0F388B,
1ba585e8 1483 PREFIX_EVEX_0F388D,
43234a1e
L
1484 PREFIX_EVEX_0F3890,
1485 PREFIX_EVEX_0F3891,
1486 PREFIX_EVEX_0F3892,
1487 PREFIX_EVEX_0F3893,
1488 PREFIX_EVEX_0F3896,
1489 PREFIX_EVEX_0F3897,
1490 PREFIX_EVEX_0F3898,
1491 PREFIX_EVEX_0F3899,
1492 PREFIX_EVEX_0F389A,
1493 PREFIX_EVEX_0F389B,
1494 PREFIX_EVEX_0F389C,
1495 PREFIX_EVEX_0F389D,
1496 PREFIX_EVEX_0F389E,
1497 PREFIX_EVEX_0F389F,
1498 PREFIX_EVEX_0F38A0,
1499 PREFIX_EVEX_0F38A1,
1500 PREFIX_EVEX_0F38A2,
1501 PREFIX_EVEX_0F38A3,
1502 PREFIX_EVEX_0F38A6,
1503 PREFIX_EVEX_0F38A7,
1504 PREFIX_EVEX_0F38A8,
1505 PREFIX_EVEX_0F38A9,
1506 PREFIX_EVEX_0F38AA,
1507 PREFIX_EVEX_0F38AB,
1508 PREFIX_EVEX_0F38AC,
1509 PREFIX_EVEX_0F38AD,
1510 PREFIX_EVEX_0F38AE,
1511 PREFIX_EVEX_0F38AF,
1512 PREFIX_EVEX_0F38B6,
1513 PREFIX_EVEX_0F38B7,
1514 PREFIX_EVEX_0F38B8,
1515 PREFIX_EVEX_0F38B9,
1516 PREFIX_EVEX_0F38BA,
1517 PREFIX_EVEX_0F38BB,
1518 PREFIX_EVEX_0F38BC,
1519 PREFIX_EVEX_0F38BD,
1520 PREFIX_EVEX_0F38BE,
1521 PREFIX_EVEX_0F38BF,
1522 PREFIX_EVEX_0F38C4,
1523 PREFIX_EVEX_0F38C6_REG_1,
1524 PREFIX_EVEX_0F38C6_REG_2,
1525 PREFIX_EVEX_0F38C6_REG_5,
1526 PREFIX_EVEX_0F38C6_REG_6,
1527 PREFIX_EVEX_0F38C7_REG_1,
1528 PREFIX_EVEX_0F38C7_REG_2,
1529 PREFIX_EVEX_0F38C7_REG_5,
1530 PREFIX_EVEX_0F38C7_REG_6,
1531 PREFIX_EVEX_0F38C8,
1532 PREFIX_EVEX_0F38CA,
1533 PREFIX_EVEX_0F38CB,
1534 PREFIX_EVEX_0F38CC,
1535 PREFIX_EVEX_0F38CD,
1536
1537 PREFIX_EVEX_0F3A00,
1538 PREFIX_EVEX_0F3A01,
1539 PREFIX_EVEX_0F3A03,
1540 PREFIX_EVEX_0F3A04,
1541 PREFIX_EVEX_0F3A05,
1542 PREFIX_EVEX_0F3A08,
1543 PREFIX_EVEX_0F3A09,
1544 PREFIX_EVEX_0F3A0A,
1545 PREFIX_EVEX_0F3A0B,
1ba585e8
IT
1546 PREFIX_EVEX_0F3A0F,
1547 PREFIX_EVEX_0F3A14,
1548 PREFIX_EVEX_0F3A15,
43234a1e
L
1549 PREFIX_EVEX_0F3A17,
1550 PREFIX_EVEX_0F3A18,
1551 PREFIX_EVEX_0F3A19,
1552 PREFIX_EVEX_0F3A1A,
1553 PREFIX_EVEX_0F3A1B,
1554 PREFIX_EVEX_0F3A1D,
1555 PREFIX_EVEX_0F3A1E,
1556 PREFIX_EVEX_0F3A1F,
1ba585e8 1557 PREFIX_EVEX_0F3A20,
43234a1e
L
1558 PREFIX_EVEX_0F3A21,
1559 PREFIX_EVEX_0F3A23,
1560 PREFIX_EVEX_0F3A25,
1561 PREFIX_EVEX_0F3A26,
1562 PREFIX_EVEX_0F3A27,
1563 PREFIX_EVEX_0F3A38,
1564 PREFIX_EVEX_0F3A39,
1565 PREFIX_EVEX_0F3A3A,
1566 PREFIX_EVEX_0F3A3B,
1ba585e8
IT
1567 PREFIX_EVEX_0F3A3E,
1568 PREFIX_EVEX_0F3A3F,
1569 PREFIX_EVEX_0F3A42,
43234a1e
L
1570 PREFIX_EVEX_0F3A43,
1571 PREFIX_EVEX_0F3A54,
1ba585e8 1572 PREFIX_EVEX_0F3A55
51e7da1b 1573};
4e7d34a6 1574
51e7da1b
L
1575enum
1576{
1577 X86_64_06 = 0,
3873ba12
L
1578 X86_64_07,
1579 X86_64_0D,
1580 X86_64_16,
1581 X86_64_17,
1582 X86_64_1E,
1583 X86_64_1F,
1584 X86_64_27,
1585 X86_64_2F,
1586 X86_64_37,
1587 X86_64_3F,
1588 X86_64_60,
1589 X86_64_61,
1590 X86_64_62,
1591 X86_64_63,
1592 X86_64_6D,
1593 X86_64_6F,
1594 X86_64_9A,
1595 X86_64_C4,
1596 X86_64_C5,
1597 X86_64_CE,
1598 X86_64_D4,
1599 X86_64_D5,
1600 X86_64_EA,
1601 X86_64_0F01_REG_0,
1602 X86_64_0F01_REG_1,
1603 X86_64_0F01_REG_2,
1604 X86_64_0F01_REG_3
51e7da1b 1605};
4e7d34a6 1606
51e7da1b
L
1607enum
1608{
1609 THREE_BYTE_0F38 = 0,
3873ba12
L
1610 THREE_BYTE_0F3A,
1611 THREE_BYTE_0F7A
51e7da1b 1612};
4e7d34a6 1613
f88c9eb0
SP
1614enum
1615{
5dd85c99
SP
1616 XOP_08 = 0,
1617 XOP_09,
f88c9eb0
SP
1618 XOP_0A
1619};
1620
51e7da1b
L
1621enum
1622{
1623 VEX_0F = 0,
3873ba12
L
1624 VEX_0F38,
1625 VEX_0F3A
51e7da1b 1626};
c0f3af97 1627
43234a1e
L
1628enum
1629{
1630 EVEX_0F = 0,
1631 EVEX_0F38,
1632 EVEX_0F3A
1633};
1634
51e7da1b
L
1635enum
1636{
592a252b
L
1637 VEX_LEN_0F10_P_1 = 0,
1638 VEX_LEN_0F10_P_3,
1639 VEX_LEN_0F11_P_1,
1640 VEX_LEN_0F11_P_3,
1641 VEX_LEN_0F12_P_0_M_0,
1642 VEX_LEN_0F12_P_0_M_1,
1643 VEX_LEN_0F12_P_2,
1644 VEX_LEN_0F13_M_0,
1645 VEX_LEN_0F16_P_0_M_0,
1646 VEX_LEN_0F16_P_0_M_1,
1647 VEX_LEN_0F16_P_2,
1648 VEX_LEN_0F17_M_0,
1649 VEX_LEN_0F2A_P_1,
1650 VEX_LEN_0F2A_P_3,
1651 VEX_LEN_0F2C_P_1,
1652 VEX_LEN_0F2C_P_3,
1653 VEX_LEN_0F2D_P_1,
1654 VEX_LEN_0F2D_P_3,
1655 VEX_LEN_0F2E_P_0,
1656 VEX_LEN_0F2E_P_2,
1657 VEX_LEN_0F2F_P_0,
1658 VEX_LEN_0F2F_P_2,
43234a1e 1659 VEX_LEN_0F41_P_0,
1ba585e8 1660 VEX_LEN_0F41_P_2,
43234a1e 1661 VEX_LEN_0F42_P_0,
1ba585e8 1662 VEX_LEN_0F42_P_2,
43234a1e 1663 VEX_LEN_0F44_P_0,
1ba585e8 1664 VEX_LEN_0F44_P_2,
43234a1e 1665 VEX_LEN_0F45_P_0,
1ba585e8 1666 VEX_LEN_0F45_P_2,
43234a1e 1667 VEX_LEN_0F46_P_0,
1ba585e8 1668 VEX_LEN_0F46_P_2,
43234a1e 1669 VEX_LEN_0F47_P_0,
1ba585e8
IT
1670 VEX_LEN_0F47_P_2,
1671 VEX_LEN_0F4A_P_0,
1672 VEX_LEN_0F4A_P_2,
1673 VEX_LEN_0F4B_P_0,
43234a1e 1674 VEX_LEN_0F4B_P_2,
592a252b
L
1675 VEX_LEN_0F51_P_1,
1676 VEX_LEN_0F51_P_3,
1677 VEX_LEN_0F52_P_1,
1678 VEX_LEN_0F53_P_1,
1679 VEX_LEN_0F58_P_1,
1680 VEX_LEN_0F58_P_3,
1681 VEX_LEN_0F59_P_1,
1682 VEX_LEN_0F59_P_3,
1683 VEX_LEN_0F5A_P_1,
1684 VEX_LEN_0F5A_P_3,
1685 VEX_LEN_0F5C_P_1,
1686 VEX_LEN_0F5C_P_3,
1687 VEX_LEN_0F5D_P_1,
1688 VEX_LEN_0F5D_P_3,
1689 VEX_LEN_0F5E_P_1,
1690 VEX_LEN_0F5E_P_3,
1691 VEX_LEN_0F5F_P_1,
1692 VEX_LEN_0F5F_P_3,
592a252b 1693 VEX_LEN_0F6E_P_2,
592a252b
L
1694 VEX_LEN_0F7E_P_1,
1695 VEX_LEN_0F7E_P_2,
43234a1e 1696 VEX_LEN_0F90_P_0,
1ba585e8 1697 VEX_LEN_0F90_P_2,
43234a1e 1698 VEX_LEN_0F91_P_0,
1ba585e8 1699 VEX_LEN_0F91_P_2,
43234a1e 1700 VEX_LEN_0F92_P_0,
1ba585e8 1701 VEX_LEN_0F92_P_3,
43234a1e 1702 VEX_LEN_0F93_P_0,
1ba585e8 1703 VEX_LEN_0F93_P_3,
43234a1e 1704 VEX_LEN_0F98_P_0,
1ba585e8
IT
1705 VEX_LEN_0F98_P_2,
1706 VEX_LEN_0F99_P_0,
1707 VEX_LEN_0F99_P_2,
592a252b
L
1708 VEX_LEN_0FAE_R_2_M_0,
1709 VEX_LEN_0FAE_R_3_M_0,
1710 VEX_LEN_0FC2_P_1,
1711 VEX_LEN_0FC2_P_3,
1712 VEX_LEN_0FC4_P_2,
1713 VEX_LEN_0FC5_P_2,
592a252b 1714 VEX_LEN_0FD6_P_2,
592a252b 1715 VEX_LEN_0FF7_P_2,
6c30d220
L
1716 VEX_LEN_0F3816_P_2,
1717 VEX_LEN_0F3819_P_2,
592a252b 1718 VEX_LEN_0F381A_P_2_M_0,
6c30d220 1719 VEX_LEN_0F3836_P_2,
592a252b 1720 VEX_LEN_0F3841_P_2,
6c30d220 1721 VEX_LEN_0F385A_P_2_M_0,
592a252b
L
1722 VEX_LEN_0F38DB_P_2,
1723 VEX_LEN_0F38DC_P_2,
1724 VEX_LEN_0F38DD_P_2,
1725 VEX_LEN_0F38DE_P_2,
1726 VEX_LEN_0F38DF_P_2,
f12dc422
L
1727 VEX_LEN_0F38F2_P_0,
1728 VEX_LEN_0F38F3_R_1_P_0,
1729 VEX_LEN_0F38F3_R_2_P_0,
1730 VEX_LEN_0F38F3_R_3_P_0,
6c30d220
L
1731 VEX_LEN_0F38F5_P_0,
1732 VEX_LEN_0F38F5_P_1,
1733 VEX_LEN_0F38F5_P_3,
1734 VEX_LEN_0F38F6_P_3,
f12dc422 1735 VEX_LEN_0F38F7_P_0,
6c30d220
L
1736 VEX_LEN_0F38F7_P_1,
1737 VEX_LEN_0F38F7_P_2,
1738 VEX_LEN_0F38F7_P_3,
1739 VEX_LEN_0F3A00_P_2,
1740 VEX_LEN_0F3A01_P_2,
592a252b
L
1741 VEX_LEN_0F3A06_P_2,
1742 VEX_LEN_0F3A0A_P_2,
1743 VEX_LEN_0F3A0B_P_2,
592a252b
L
1744 VEX_LEN_0F3A14_P_2,
1745 VEX_LEN_0F3A15_P_2,
1746 VEX_LEN_0F3A16_P_2,
1747 VEX_LEN_0F3A17_P_2,
1748 VEX_LEN_0F3A18_P_2,
1749 VEX_LEN_0F3A19_P_2,
1750 VEX_LEN_0F3A20_P_2,
1751 VEX_LEN_0F3A21_P_2,
1752 VEX_LEN_0F3A22_P_2,
43234a1e 1753 VEX_LEN_0F3A30_P_2,
1ba585e8 1754 VEX_LEN_0F3A31_P_2,
43234a1e 1755 VEX_LEN_0F3A32_P_2,
1ba585e8 1756 VEX_LEN_0F3A33_P_2,
6c30d220
L
1757 VEX_LEN_0F3A38_P_2,
1758 VEX_LEN_0F3A39_P_2,
592a252b 1759 VEX_LEN_0F3A41_P_2,
592a252b 1760 VEX_LEN_0F3A44_P_2,
6c30d220 1761 VEX_LEN_0F3A46_P_2,
592a252b
L
1762 VEX_LEN_0F3A60_P_2,
1763 VEX_LEN_0F3A61_P_2,
1764 VEX_LEN_0F3A62_P_2,
1765 VEX_LEN_0F3A63_P_2,
1766 VEX_LEN_0F3A6A_P_2,
1767 VEX_LEN_0F3A6B_P_2,
1768 VEX_LEN_0F3A6E_P_2,
1769 VEX_LEN_0F3A6F_P_2,
1770 VEX_LEN_0F3A7A_P_2,
1771 VEX_LEN_0F3A7B_P_2,
1772 VEX_LEN_0F3A7E_P_2,
1773 VEX_LEN_0F3A7F_P_2,
1774 VEX_LEN_0F3ADF_P_2,
6c30d220 1775 VEX_LEN_0F3AF0_P_3,
ff688e1f
L
1776 VEX_LEN_0FXOP_08_CC,
1777 VEX_LEN_0FXOP_08_CD,
1778 VEX_LEN_0FXOP_08_CE,
1779 VEX_LEN_0FXOP_08_CF,
1780 VEX_LEN_0FXOP_08_EC,
1781 VEX_LEN_0FXOP_08_ED,
1782 VEX_LEN_0FXOP_08_EE,
1783 VEX_LEN_0FXOP_08_EF,
592a252b
L
1784 VEX_LEN_0FXOP_09_80,
1785 VEX_LEN_0FXOP_09_81
51e7da1b 1786};
c0f3af97 1787
9e30b8e0
L
1788enum
1789{
592a252b
L
1790 VEX_W_0F10_P_0 = 0,
1791 VEX_W_0F10_P_1,
1792 VEX_W_0F10_P_2,
1793 VEX_W_0F10_P_3,
1794 VEX_W_0F11_P_0,
1795 VEX_W_0F11_P_1,
1796 VEX_W_0F11_P_2,
1797 VEX_W_0F11_P_3,
1798 VEX_W_0F12_P_0_M_0,
1799 VEX_W_0F12_P_0_M_1,
1800 VEX_W_0F12_P_1,
1801 VEX_W_0F12_P_2,
1802 VEX_W_0F12_P_3,
1803 VEX_W_0F13_M_0,
1804 VEX_W_0F14,
1805 VEX_W_0F15,
1806 VEX_W_0F16_P_0_M_0,
1807 VEX_W_0F16_P_0_M_1,
1808 VEX_W_0F16_P_1,
1809 VEX_W_0F16_P_2,
1810 VEX_W_0F17_M_0,
1811 VEX_W_0F28,
1812 VEX_W_0F29,
1813 VEX_W_0F2B_M_0,
1814 VEX_W_0F2E_P_0,
1815 VEX_W_0F2E_P_2,
1816 VEX_W_0F2F_P_0,
1817 VEX_W_0F2F_P_2,
43234a1e 1818 VEX_W_0F41_P_0_LEN_1,
1ba585e8 1819 VEX_W_0F41_P_2_LEN_1,
43234a1e 1820 VEX_W_0F42_P_0_LEN_1,
1ba585e8 1821 VEX_W_0F42_P_2_LEN_1,
43234a1e 1822 VEX_W_0F44_P_0_LEN_0,
1ba585e8 1823 VEX_W_0F44_P_2_LEN_0,
43234a1e 1824 VEX_W_0F45_P_0_LEN_1,
1ba585e8 1825 VEX_W_0F45_P_2_LEN_1,
43234a1e 1826 VEX_W_0F46_P_0_LEN_1,
1ba585e8 1827 VEX_W_0F46_P_2_LEN_1,
43234a1e 1828 VEX_W_0F47_P_0_LEN_1,
1ba585e8
IT
1829 VEX_W_0F47_P_2_LEN_1,
1830 VEX_W_0F4A_P_0_LEN_1,
1831 VEX_W_0F4A_P_2_LEN_1,
1832 VEX_W_0F4B_P_0_LEN_1,
43234a1e 1833 VEX_W_0F4B_P_2_LEN_1,
592a252b
L
1834 VEX_W_0F50_M_0,
1835 VEX_W_0F51_P_0,
1836 VEX_W_0F51_P_1,
1837 VEX_W_0F51_P_2,
1838 VEX_W_0F51_P_3,
1839 VEX_W_0F52_P_0,
1840 VEX_W_0F52_P_1,
1841 VEX_W_0F53_P_0,
1842 VEX_W_0F53_P_1,
1843 VEX_W_0F58_P_0,
1844 VEX_W_0F58_P_1,
1845 VEX_W_0F58_P_2,
1846 VEX_W_0F58_P_3,
1847 VEX_W_0F59_P_0,
1848 VEX_W_0F59_P_1,
1849 VEX_W_0F59_P_2,
1850 VEX_W_0F59_P_3,
1851 VEX_W_0F5A_P_0,
1852 VEX_W_0F5A_P_1,
1853 VEX_W_0F5A_P_3,
1854 VEX_W_0F5B_P_0,
1855 VEX_W_0F5B_P_1,
1856 VEX_W_0F5B_P_2,
1857 VEX_W_0F5C_P_0,
1858 VEX_W_0F5C_P_1,
1859 VEX_W_0F5C_P_2,
1860 VEX_W_0F5C_P_3,
1861 VEX_W_0F5D_P_0,
1862 VEX_W_0F5D_P_1,
1863 VEX_W_0F5D_P_2,
1864 VEX_W_0F5D_P_3,
1865 VEX_W_0F5E_P_0,
1866 VEX_W_0F5E_P_1,
1867 VEX_W_0F5E_P_2,
1868 VEX_W_0F5E_P_3,
1869 VEX_W_0F5F_P_0,
1870 VEX_W_0F5F_P_1,
1871 VEX_W_0F5F_P_2,
1872 VEX_W_0F5F_P_3,
1873 VEX_W_0F60_P_2,
1874 VEX_W_0F61_P_2,
1875 VEX_W_0F62_P_2,
1876 VEX_W_0F63_P_2,
1877 VEX_W_0F64_P_2,
1878 VEX_W_0F65_P_2,
1879 VEX_W_0F66_P_2,
1880 VEX_W_0F67_P_2,
1881 VEX_W_0F68_P_2,
1882 VEX_W_0F69_P_2,
1883 VEX_W_0F6A_P_2,
1884 VEX_W_0F6B_P_2,
1885 VEX_W_0F6C_P_2,
1886 VEX_W_0F6D_P_2,
1887 VEX_W_0F6F_P_1,
1888 VEX_W_0F6F_P_2,
1889 VEX_W_0F70_P_1,
1890 VEX_W_0F70_P_2,
1891 VEX_W_0F70_P_3,
1892 VEX_W_0F71_R_2_P_2,
1893 VEX_W_0F71_R_4_P_2,
1894 VEX_W_0F71_R_6_P_2,
1895 VEX_W_0F72_R_2_P_2,
1896 VEX_W_0F72_R_4_P_2,
1897 VEX_W_0F72_R_6_P_2,
1898 VEX_W_0F73_R_2_P_2,
1899 VEX_W_0F73_R_3_P_2,
1900 VEX_W_0F73_R_6_P_2,
1901 VEX_W_0F73_R_7_P_2,
1902 VEX_W_0F74_P_2,
1903 VEX_W_0F75_P_2,
1904 VEX_W_0F76_P_2,
1905 VEX_W_0F77_P_0,
1906 VEX_W_0F7C_P_2,
1907 VEX_W_0F7C_P_3,
1908 VEX_W_0F7D_P_2,
1909 VEX_W_0F7D_P_3,
1910 VEX_W_0F7E_P_1,
1911 VEX_W_0F7F_P_1,
1912 VEX_W_0F7F_P_2,
43234a1e 1913 VEX_W_0F90_P_0_LEN_0,
1ba585e8 1914 VEX_W_0F90_P_2_LEN_0,
43234a1e 1915 VEX_W_0F91_P_0_LEN_0,
1ba585e8 1916 VEX_W_0F91_P_2_LEN_0,
43234a1e 1917 VEX_W_0F92_P_0_LEN_0,
1ba585e8 1918 VEX_W_0F92_P_3_LEN_0,
43234a1e 1919 VEX_W_0F93_P_0_LEN_0,
1ba585e8 1920 VEX_W_0F93_P_3_LEN_0,
43234a1e 1921 VEX_W_0F98_P_0_LEN_0,
1ba585e8
IT
1922 VEX_W_0F98_P_2_LEN_0,
1923 VEX_W_0F99_P_0_LEN_0,
1924 VEX_W_0F99_P_2_LEN_0,
592a252b
L
1925 VEX_W_0FAE_R_2_M_0,
1926 VEX_W_0FAE_R_3_M_0,
1927 VEX_W_0FC2_P_0,
1928 VEX_W_0FC2_P_1,
1929 VEX_W_0FC2_P_2,
1930 VEX_W_0FC2_P_3,
1931 VEX_W_0FC4_P_2,
1932 VEX_W_0FC5_P_2,
1933 VEX_W_0FD0_P_2,
1934 VEX_W_0FD0_P_3,
1935 VEX_W_0FD1_P_2,
1936 VEX_W_0FD2_P_2,
1937 VEX_W_0FD3_P_2,
1938 VEX_W_0FD4_P_2,
1939 VEX_W_0FD5_P_2,
1940 VEX_W_0FD6_P_2,
1941 VEX_W_0FD7_P_2_M_1,
1942 VEX_W_0FD8_P_2,
1943 VEX_W_0FD9_P_2,
1944 VEX_W_0FDA_P_2,
1945 VEX_W_0FDB_P_2,
1946 VEX_W_0FDC_P_2,
1947 VEX_W_0FDD_P_2,
1948 VEX_W_0FDE_P_2,
1949 VEX_W_0FDF_P_2,
1950 VEX_W_0FE0_P_2,
1951 VEX_W_0FE1_P_2,
1952 VEX_W_0FE2_P_2,
1953 VEX_W_0FE3_P_2,
1954 VEX_W_0FE4_P_2,
1955 VEX_W_0FE5_P_2,
1956 VEX_W_0FE6_P_1,
1957 VEX_W_0FE6_P_2,
1958 VEX_W_0FE6_P_3,
1959 VEX_W_0FE7_P_2_M_0,
1960 VEX_W_0FE8_P_2,
1961 VEX_W_0FE9_P_2,
1962 VEX_W_0FEA_P_2,
1963 VEX_W_0FEB_P_2,
1964 VEX_W_0FEC_P_2,
1965 VEX_W_0FED_P_2,
1966 VEX_W_0FEE_P_2,
1967 VEX_W_0FEF_P_2,
1968 VEX_W_0FF0_P_3_M_0,
1969 VEX_W_0FF1_P_2,
1970 VEX_W_0FF2_P_2,
1971 VEX_W_0FF3_P_2,
1972 VEX_W_0FF4_P_2,
1973 VEX_W_0FF5_P_2,
1974 VEX_W_0FF6_P_2,
1975 VEX_W_0FF7_P_2,
1976 VEX_W_0FF8_P_2,
1977 VEX_W_0FF9_P_2,
1978 VEX_W_0FFA_P_2,
1979 VEX_W_0FFB_P_2,
1980 VEX_W_0FFC_P_2,
1981 VEX_W_0FFD_P_2,
1982 VEX_W_0FFE_P_2,
1983 VEX_W_0F3800_P_2,
1984 VEX_W_0F3801_P_2,
1985 VEX_W_0F3802_P_2,
1986 VEX_W_0F3803_P_2,
1987 VEX_W_0F3804_P_2,
1988 VEX_W_0F3805_P_2,
1989 VEX_W_0F3806_P_2,
1990 VEX_W_0F3807_P_2,
1991 VEX_W_0F3808_P_2,
1992 VEX_W_0F3809_P_2,
1993 VEX_W_0F380A_P_2,
1994 VEX_W_0F380B_P_2,
1995 VEX_W_0F380C_P_2,
1996 VEX_W_0F380D_P_2,
1997 VEX_W_0F380E_P_2,
1998 VEX_W_0F380F_P_2,
6c30d220 1999 VEX_W_0F3816_P_2,
592a252b 2000 VEX_W_0F3817_P_2,
6c30d220
L
2001 VEX_W_0F3818_P_2,
2002 VEX_W_0F3819_P_2,
592a252b
L
2003 VEX_W_0F381A_P_2_M_0,
2004 VEX_W_0F381C_P_2,
2005 VEX_W_0F381D_P_2,
2006 VEX_W_0F381E_P_2,
2007 VEX_W_0F3820_P_2,
2008 VEX_W_0F3821_P_2,
2009 VEX_W_0F3822_P_2,
2010 VEX_W_0F3823_P_2,
2011 VEX_W_0F3824_P_2,
2012 VEX_W_0F3825_P_2,
2013 VEX_W_0F3828_P_2,
2014 VEX_W_0F3829_P_2,
2015 VEX_W_0F382A_P_2_M_0,
2016 VEX_W_0F382B_P_2,
2017 VEX_W_0F382C_P_2_M_0,
2018 VEX_W_0F382D_P_2_M_0,
2019 VEX_W_0F382E_P_2_M_0,
2020 VEX_W_0F382F_P_2_M_0,
2021 VEX_W_0F3830_P_2,
2022 VEX_W_0F3831_P_2,
2023 VEX_W_0F3832_P_2,
2024 VEX_W_0F3833_P_2,
2025 VEX_W_0F3834_P_2,
2026 VEX_W_0F3835_P_2,
6c30d220 2027 VEX_W_0F3836_P_2,
592a252b
L
2028 VEX_W_0F3837_P_2,
2029 VEX_W_0F3838_P_2,
2030 VEX_W_0F3839_P_2,
2031 VEX_W_0F383A_P_2,
2032 VEX_W_0F383B_P_2,
2033 VEX_W_0F383C_P_2,
2034 VEX_W_0F383D_P_2,
2035 VEX_W_0F383E_P_2,
2036 VEX_W_0F383F_P_2,
2037 VEX_W_0F3840_P_2,
2038 VEX_W_0F3841_P_2,
6c30d220
L
2039 VEX_W_0F3846_P_2,
2040 VEX_W_0F3858_P_2,
2041 VEX_W_0F3859_P_2,
2042 VEX_W_0F385A_P_2_M_0,
2043 VEX_W_0F3878_P_2,
2044 VEX_W_0F3879_P_2,
592a252b
L
2045 VEX_W_0F38DB_P_2,
2046 VEX_W_0F38DC_P_2,
2047 VEX_W_0F38DD_P_2,
2048 VEX_W_0F38DE_P_2,
2049 VEX_W_0F38DF_P_2,
6c30d220
L
2050 VEX_W_0F3A00_P_2,
2051 VEX_W_0F3A01_P_2,
2052 VEX_W_0F3A02_P_2,
592a252b
L
2053 VEX_W_0F3A04_P_2,
2054 VEX_W_0F3A05_P_2,
2055 VEX_W_0F3A06_P_2,
2056 VEX_W_0F3A08_P_2,
2057 VEX_W_0F3A09_P_2,
2058 VEX_W_0F3A0A_P_2,
2059 VEX_W_0F3A0B_P_2,
2060 VEX_W_0F3A0C_P_2,
2061 VEX_W_0F3A0D_P_2,
2062 VEX_W_0F3A0E_P_2,
2063 VEX_W_0F3A0F_P_2,
2064 VEX_W_0F3A14_P_2,
2065 VEX_W_0F3A15_P_2,
2066 VEX_W_0F3A18_P_2,
2067 VEX_W_0F3A19_P_2,
2068 VEX_W_0F3A20_P_2,
2069 VEX_W_0F3A21_P_2,
43234a1e 2070 VEX_W_0F3A30_P_2_LEN_0,
1ba585e8 2071 VEX_W_0F3A31_P_2_LEN_0,
43234a1e 2072 VEX_W_0F3A32_P_2_LEN_0,
1ba585e8 2073 VEX_W_0F3A33_P_2_LEN_0,
6c30d220
L
2074 VEX_W_0F3A38_P_2,
2075 VEX_W_0F3A39_P_2,
592a252b
L
2076 VEX_W_0F3A40_P_2,
2077 VEX_W_0F3A41_P_2,
2078 VEX_W_0F3A42_P_2,
2079 VEX_W_0F3A44_P_2,
6c30d220 2080 VEX_W_0F3A46_P_2,
592a252b
L
2081 VEX_W_0F3A48_P_2,
2082 VEX_W_0F3A49_P_2,
2083 VEX_W_0F3A4A_P_2,
2084 VEX_W_0F3A4B_P_2,
2085 VEX_W_0F3A4C_P_2,
2086 VEX_W_0F3A60_P_2,
2087 VEX_W_0F3A61_P_2,
2088 VEX_W_0F3A62_P_2,
2089 VEX_W_0F3A63_P_2,
43234a1e
L
2090 VEX_W_0F3ADF_P_2,
2091
2092 EVEX_W_0F10_P_0,
2093 EVEX_W_0F10_P_1_M_0,
2094 EVEX_W_0F10_P_1_M_1,
2095 EVEX_W_0F10_P_2,
2096 EVEX_W_0F10_P_3_M_0,
2097 EVEX_W_0F10_P_3_M_1,
2098 EVEX_W_0F11_P_0,
2099 EVEX_W_0F11_P_1_M_0,
2100 EVEX_W_0F11_P_1_M_1,
2101 EVEX_W_0F11_P_2,
2102 EVEX_W_0F11_P_3_M_0,
2103 EVEX_W_0F11_P_3_M_1,
2104 EVEX_W_0F12_P_0_M_0,
2105 EVEX_W_0F12_P_0_M_1,
2106 EVEX_W_0F12_P_1,
2107 EVEX_W_0F12_P_2,
2108 EVEX_W_0F12_P_3,
2109 EVEX_W_0F13_P_0,
2110 EVEX_W_0F13_P_2,
2111 EVEX_W_0F14_P_0,
2112 EVEX_W_0F14_P_2,
2113 EVEX_W_0F15_P_0,
2114 EVEX_W_0F15_P_2,
2115 EVEX_W_0F16_P_0_M_0,
2116 EVEX_W_0F16_P_0_M_1,
2117 EVEX_W_0F16_P_1,
2118 EVEX_W_0F16_P_2,
2119 EVEX_W_0F17_P_0,
2120 EVEX_W_0F17_P_2,
2121 EVEX_W_0F28_P_0,
2122 EVEX_W_0F28_P_2,
2123 EVEX_W_0F29_P_0,
2124 EVEX_W_0F29_P_2,
2125 EVEX_W_0F2A_P_1,
2126 EVEX_W_0F2A_P_3,
2127 EVEX_W_0F2B_P_0,
2128 EVEX_W_0F2B_P_2,
2129 EVEX_W_0F2E_P_0,
2130 EVEX_W_0F2E_P_2,
2131 EVEX_W_0F2F_P_0,
2132 EVEX_W_0F2F_P_2,
2133 EVEX_W_0F51_P_0,
2134 EVEX_W_0F51_P_1,
2135 EVEX_W_0F51_P_2,
2136 EVEX_W_0F51_P_3,
2137 EVEX_W_0F58_P_0,
2138 EVEX_W_0F58_P_1,
2139 EVEX_W_0F58_P_2,
2140 EVEX_W_0F58_P_3,
2141 EVEX_W_0F59_P_0,
2142 EVEX_W_0F59_P_1,
2143 EVEX_W_0F59_P_2,
2144 EVEX_W_0F59_P_3,
2145 EVEX_W_0F5A_P_0,
2146 EVEX_W_0F5A_P_1,
2147 EVEX_W_0F5A_P_2,
2148 EVEX_W_0F5A_P_3,
2149 EVEX_W_0F5B_P_0,
2150 EVEX_W_0F5B_P_1,
2151 EVEX_W_0F5B_P_2,
2152 EVEX_W_0F5C_P_0,
2153 EVEX_W_0F5C_P_1,
2154 EVEX_W_0F5C_P_2,
2155 EVEX_W_0F5C_P_3,
2156 EVEX_W_0F5D_P_0,
2157 EVEX_W_0F5D_P_1,
2158 EVEX_W_0F5D_P_2,
2159 EVEX_W_0F5D_P_3,
2160 EVEX_W_0F5E_P_0,
2161 EVEX_W_0F5E_P_1,
2162 EVEX_W_0F5E_P_2,
2163 EVEX_W_0F5E_P_3,
2164 EVEX_W_0F5F_P_0,
2165 EVEX_W_0F5F_P_1,
2166 EVEX_W_0F5F_P_2,
2167 EVEX_W_0F5F_P_3,
2168 EVEX_W_0F62_P_2,
2169 EVEX_W_0F66_P_2,
2170 EVEX_W_0F6A_P_2,
1ba585e8 2171 EVEX_W_0F6B_P_2,
43234a1e
L
2172 EVEX_W_0F6C_P_2,
2173 EVEX_W_0F6D_P_2,
2174 EVEX_W_0F6E_P_2,
2175 EVEX_W_0F6F_P_1,
2176 EVEX_W_0F6F_P_2,
1ba585e8 2177 EVEX_W_0F6F_P_3,
43234a1e
L
2178 EVEX_W_0F70_P_2,
2179 EVEX_W_0F72_R_2_P_2,
2180 EVEX_W_0F72_R_6_P_2,
2181 EVEX_W_0F73_R_2_P_2,
2182 EVEX_W_0F73_R_6_P_2,
2183 EVEX_W_0F76_P_2,
2184 EVEX_W_0F78_P_0,
2185 EVEX_W_0F79_P_0,
2186 EVEX_W_0F7A_P_1,
2187 EVEX_W_0F7A_P_3,
2188 EVEX_W_0F7B_P_1,
2189 EVEX_W_0F7B_P_3,
2190 EVEX_W_0F7E_P_1,
2191 EVEX_W_0F7E_P_2,
2192 EVEX_W_0F7F_P_1,
2193 EVEX_W_0F7F_P_2,
1ba585e8 2194 EVEX_W_0F7F_P_3,
43234a1e
L
2195 EVEX_W_0FC2_P_0,
2196 EVEX_W_0FC2_P_1,
2197 EVEX_W_0FC2_P_2,
2198 EVEX_W_0FC2_P_3,
2199 EVEX_W_0FC6_P_0,
2200 EVEX_W_0FC6_P_2,
2201 EVEX_W_0FD2_P_2,
2202 EVEX_W_0FD3_P_2,
2203 EVEX_W_0FD4_P_2,
2204 EVEX_W_0FD6_P_2,
2205 EVEX_W_0FE6_P_1,
2206 EVEX_W_0FE6_P_2,
2207 EVEX_W_0FE6_P_3,
2208 EVEX_W_0FE7_P_2,
2209 EVEX_W_0FF2_P_2,
2210 EVEX_W_0FF3_P_2,
2211 EVEX_W_0FF4_P_2,
2212 EVEX_W_0FFA_P_2,
2213 EVEX_W_0FFB_P_2,
2214 EVEX_W_0FFE_P_2,
2215 EVEX_W_0F380C_P_2,
2216 EVEX_W_0F380D_P_2,
1ba585e8
IT
2217 EVEX_W_0F3810_P_1,
2218 EVEX_W_0F3810_P_2,
43234a1e 2219 EVEX_W_0F3811_P_1,
1ba585e8 2220 EVEX_W_0F3811_P_2,
43234a1e 2221 EVEX_W_0F3812_P_1,
1ba585e8 2222 EVEX_W_0F3812_P_2,
43234a1e
L
2223 EVEX_W_0F3813_P_1,
2224 EVEX_W_0F3813_P_2,
2225 EVEX_W_0F3814_P_1,
2226 EVEX_W_0F3815_P_1,
2227 EVEX_W_0F3818_P_2,
2228 EVEX_W_0F3819_P_2,
2229 EVEX_W_0F381A_P_2,
2230 EVEX_W_0F381B_P_2,
2231 EVEX_W_0F381E_P_2,
2232 EVEX_W_0F381F_P_2,
1ba585e8 2233 EVEX_W_0F3820_P_1,
43234a1e
L
2234 EVEX_W_0F3821_P_1,
2235 EVEX_W_0F3822_P_1,
2236 EVEX_W_0F3823_P_1,
2237 EVEX_W_0F3824_P_1,
2238 EVEX_W_0F3825_P_1,
2239 EVEX_W_0F3825_P_2,
1ba585e8
IT
2240 EVEX_W_0F3826_P_1,
2241 EVEX_W_0F3826_P_2,
2242 EVEX_W_0F3828_P_1,
43234a1e 2243 EVEX_W_0F3828_P_2,
1ba585e8 2244 EVEX_W_0F3829_P_1,
43234a1e
L
2245 EVEX_W_0F3829_P_2,
2246 EVEX_W_0F382A_P_1,
2247 EVEX_W_0F382A_P_2,
1ba585e8
IT
2248 EVEX_W_0F382B_P_2,
2249 EVEX_W_0F3830_P_1,
43234a1e
L
2250 EVEX_W_0F3831_P_1,
2251 EVEX_W_0F3832_P_1,
2252 EVEX_W_0F3833_P_1,
2253 EVEX_W_0F3834_P_1,
2254 EVEX_W_0F3835_P_1,
2255 EVEX_W_0F3835_P_2,
2256 EVEX_W_0F3837_P_2,
2257 EVEX_W_0F383A_P_1,
2258 EVEX_W_0F3840_P_2,
2259 EVEX_W_0F3858_P_2,
2260 EVEX_W_0F3859_P_2,
2261 EVEX_W_0F385A_P_2,
2262 EVEX_W_0F385B_P_2,
1ba585e8
IT
2263 EVEX_W_0F3866_P_2,
2264 EVEX_W_0F3875_P_2,
2265 EVEX_W_0F3878_P_2,
2266 EVEX_W_0F3879_P_2,
2267 EVEX_W_0F387A_P_2,
2268 EVEX_W_0F387B_P_2,
2269 EVEX_W_0F387D_P_2,
2270 EVEX_W_0F388D_P_2,
43234a1e
L
2271 EVEX_W_0F3891_P_2,
2272 EVEX_W_0F3893_P_2,
2273 EVEX_W_0F38A1_P_2,
2274 EVEX_W_0F38A3_P_2,
2275 EVEX_W_0F38C7_R_1_P_2,
2276 EVEX_W_0F38C7_R_2_P_2,
2277 EVEX_W_0F38C7_R_5_P_2,
2278 EVEX_W_0F38C7_R_6_P_2,
2279
2280 EVEX_W_0F3A00_P_2,
2281 EVEX_W_0F3A01_P_2,
2282 EVEX_W_0F3A04_P_2,
2283 EVEX_W_0F3A05_P_2,
2284 EVEX_W_0F3A08_P_2,
2285 EVEX_W_0F3A09_P_2,
2286 EVEX_W_0F3A0A_P_2,
2287 EVEX_W_0F3A0B_P_2,
2288 EVEX_W_0F3A18_P_2,
2289 EVEX_W_0F3A19_P_2,
2290 EVEX_W_0F3A1A_P_2,
2291 EVEX_W_0F3A1B_P_2,
2292 EVEX_W_0F3A1D_P_2,
2293 EVEX_W_0F3A21_P_2,
2294 EVEX_W_0F3A23_P_2,
2295 EVEX_W_0F3A38_P_2,
2296 EVEX_W_0F3A39_P_2,
2297 EVEX_W_0F3A3A_P_2,
2298 EVEX_W_0F3A3B_P_2,
1ba585e8
IT
2299 EVEX_W_0F3A3E_P_2,
2300 EVEX_W_0F3A3F_P_2,
2301 EVEX_W_0F3A42_P_2,
2302 EVEX_W_0F3A43_P_2
9e30b8e0
L
2303};
2304
26ca5450 2305typedef void (*op_rtn) (int bytemode, int sizeflag);
252b5132
RH
2306
2307struct dis386 {
2da11e11 2308 const char *name;
ce518a5f
L
2309 struct
2310 {
2311 op_rtn rtn;
2312 int bytemode;
2313 } op[MAX_OPERANDS];
252b5132
RH
2314};
2315
2316/* Upper case letters in the instruction names here are macros.
2317 'A' => print 'b' if no register operands or suffix_always is true
2318 'B' => print 'b' if suffix_always is true
9306ca4a 2319 'C' => print 's' or 'l' ('w' or 'd' in Intel mode) depending on operand
98b528ac 2320 size prefix
ed7841b3 2321 'D' => print 'w' if no register operands or 'w', 'l' or 'q', if
98b528ac 2322 suffix_always is true
252b5132 2323 'E' => print 'e' if 32-bit form of jcxz
3ffd33cf 2324 'F' => print 'w' or 'l' depending on address size prefix (loop insns)
52fd6d94 2325 'G' => print 'w' or 'l' depending on operand size prefix (i/o insns)
5dd0794d 2326 'H' => print ",pt" or ",pn" branch hint
9306ca4a 2327 'I' => honor following macro letter even in Intel mode (implemented only
98b528ac 2328 for some of the macro letters)
9306ca4a 2329 'J' => print 'l'
42903f7f 2330 'K' => print 'd' or 'q' if rex prefix is present.
252b5132 2331 'L' => print 'l' if suffix_always is true
9d141669 2332 'M' => print 'r' if intel_mnemonic is false.
252b5132 2333 'N' => print 'n' if instruction has no wait "prefix"
a35ca55a 2334 'O' => print 'd' or 'o' (or 'q' in Intel mode)
52b15da3 2335 'P' => print 'w', 'l' or 'q' if instruction has an operand size prefix,
98b528ac
L
2336 or suffix_always is true. print 'q' if rex prefix is present.
2337 'Q' => print 'w', 'l' or 'q' for memory operand or suffix_always
2338 is true
a35ca55a 2339 'R' => print 'w', 'l' or 'q' ('d' for 'l' and 'e' in Intel mode)
52b15da3 2340 'S' => print 'w', 'l' or 'q' if suffix_always is true
6439fc28
AM
2341 'T' => print 'q' in 64bit mode and behave as 'P' otherwise
2342 'U' => print 'q' in 64bit mode and behave as 'Q' otherwise
1a114b12 2343 'V' => print 'q' in 64bit mode and behave as 'S' otherwise
a35ca55a 2344 'W' => print 'b', 'w' or 'l' ('d' in Intel mode)
9306ca4a 2345 'X' => print 's', 'd' depending on data16 prefix (for XMM)
8a72226a
L
2346 'Y' => 'q' if instruction has an REX 64bit overwrite prefix and
2347 suffix_always is true.
6dd5059a 2348 'Z' => print 'q' in 64bit mode and behave as 'L' otherwise
9d141669 2349 '!' => change condition from true to false or from false to true.
98b528ac
L
2350 '%' => add 1 upper case letter to the macro.
2351
2352 2 upper case letter macros:
c0f3af97
L
2353 "XY" => print 'x' or 'y' if no register operands or suffix_always
2354 is true.
4b06377f
L
2355 "XW" => print 's', 'd' depending on the VEX.W bit (for FMA)
2356 "LQ" => print 'l' ('d' in Intel mode) or 'q' for memory operand
98b528ac 2357 or suffix_always is true
4b06377f
L
2358 "LB" => print "abs" in 64bit mode and behave as 'B' otherwise
2359 "LS" => print "abs" in 64bit mode and behave as 'S' otherwise
2360 "LV" => print "abs" for 64bit operand and behave as 'S' otherwise
6c30d220 2361 "LW" => print 'd', 'q' depending on the VEX.W bit
52b15da3 2362
6439fc28
AM
2363 Many of the above letters print nothing in Intel mode. See "putop"
2364 for the details.
52b15da3 2365
6439fc28 2366 Braces '{' and '}', and vertical bars '|', indicate alternative
7c52e0e8 2367 mnemonic strings for AT&T and Intel. */
252b5132 2368
6439fc28 2369static const struct dis386 dis386[] = {
252b5132 2370 /* 00 */
42164a71
L
2371 { "addB", { Ebh1, Gb } },
2372 { "addS", { Evh1, Gv } },
c7532693
L
2373 { "addB", { Gb, EbS } },
2374 { "addS", { Gv, EvS } },
ce518a5f
L
2375 { "addB", { AL, Ib } },
2376 { "addS", { eAX, Iv } },
4e7d34a6
L
2377 { X86_64_TABLE (X86_64_06) },
2378 { X86_64_TABLE (X86_64_07) },
252b5132 2379 /* 08 */
42164a71
L
2380 { "orB", { Ebh1, Gb } },
2381 { "orS", { Evh1, Gv } },
c7532693
L
2382 { "orB", { Gb, EbS } },
2383 { "orS", { Gv, EvS } },
ce518a5f
L
2384 { "orB", { AL, Ib } },
2385 { "orS", { eAX, Iv } },
4e7d34a6 2386 { X86_64_TABLE (X86_64_0D) },
592d1631 2387 { Bad_Opcode }, /* 0x0f extended opcode escape */
252b5132 2388 /* 10 */
42164a71
L
2389 { "adcB", { Ebh1, Gb } },
2390 { "adcS", { Evh1, Gv } },
c7532693
L
2391 { "adcB", { Gb, EbS } },
2392 { "adcS", { Gv, EvS } },
ce518a5f
L
2393 { "adcB", { AL, Ib } },
2394 { "adcS", { eAX, Iv } },
4e7d34a6
L
2395 { X86_64_TABLE (X86_64_16) },
2396 { X86_64_TABLE (X86_64_17) },
252b5132 2397 /* 18 */
42164a71
L
2398 { "sbbB", { Ebh1, Gb } },
2399 { "sbbS", { Evh1, Gv } },
c7532693
L
2400 { "sbbB", { Gb, EbS } },
2401 { "sbbS", { Gv, EvS } },
ce518a5f
L
2402 { "sbbB", { AL, Ib } },
2403 { "sbbS", { eAX, Iv } },
4e7d34a6
L
2404 { X86_64_TABLE (X86_64_1E) },
2405 { X86_64_TABLE (X86_64_1F) },
252b5132 2406 /* 20 */
42164a71
L
2407 { "andB", { Ebh1, Gb } },
2408 { "andS", { Evh1, Gv } },
c7532693
L
2409 { "andB", { Gb, EbS } },
2410 { "andS", { Gv, EvS } },
ce518a5f
L
2411 { "andB", { AL, Ib } },
2412 { "andS", { eAX, Iv } },
592d1631 2413 { Bad_Opcode }, /* SEG ES prefix */
4e7d34a6 2414 { X86_64_TABLE (X86_64_27) },
252b5132 2415 /* 28 */
42164a71
L
2416 { "subB", { Ebh1, Gb } },
2417 { "subS", { Evh1, Gv } },
c7532693
L
2418 { "subB", { Gb, EbS } },
2419 { "subS", { Gv, EvS } },
ce518a5f
L
2420 { "subB", { AL, Ib } },
2421 { "subS", { eAX, Iv } },
592d1631 2422 { Bad_Opcode }, /* SEG CS prefix */
4e7d34a6 2423 { X86_64_TABLE (X86_64_2F) },
252b5132 2424 /* 30 */
42164a71
L
2425 { "xorB", { Ebh1, Gb } },
2426 { "xorS", { Evh1, Gv } },
c7532693
L
2427 { "xorB", { Gb, EbS } },
2428 { "xorS", { Gv, EvS } },
ce518a5f
L
2429 { "xorB", { AL, Ib } },
2430 { "xorS", { eAX, Iv } },
592d1631 2431 { Bad_Opcode }, /* SEG SS prefix */
4e7d34a6 2432 { X86_64_TABLE (X86_64_37) },
252b5132 2433 /* 38 */
ce518a5f
L
2434 { "cmpB", { Eb, Gb } },
2435 { "cmpS", { Ev, Gv } },
c7532693
L
2436 { "cmpB", { Gb, EbS } },
2437 { "cmpS", { Gv, EvS } },
ce518a5f
L
2438 { "cmpB", { AL, Ib } },
2439 { "cmpS", { eAX, Iv } },
592d1631 2440 { Bad_Opcode }, /* SEG DS prefix */
4e7d34a6 2441 { X86_64_TABLE (X86_64_3F) },
252b5132 2442 /* 40 */
ce518a5f
L
2443 { "inc{S|}", { RMeAX } },
2444 { "inc{S|}", { RMeCX } },
2445 { "inc{S|}", { RMeDX } },
2446 { "inc{S|}", { RMeBX } },
2447 { "inc{S|}", { RMeSP } },
2448 { "inc{S|}", { RMeBP } },
2449 { "inc{S|}", { RMeSI } },
2450 { "inc{S|}", { RMeDI } },
252b5132 2451 /* 48 */
ce518a5f
L
2452 { "dec{S|}", { RMeAX } },
2453 { "dec{S|}", { RMeCX } },
2454 { "dec{S|}", { RMeDX } },
2455 { "dec{S|}", { RMeBX } },
2456 { "dec{S|}", { RMeSP } },
2457 { "dec{S|}", { RMeBP } },
2458 { "dec{S|}", { RMeSI } },
2459 { "dec{S|}", { RMeDI } },
252b5132 2460 /* 50 */
ce518a5f
L
2461 { "pushV", { RMrAX } },
2462 { "pushV", { RMrCX } },
2463 { "pushV", { RMrDX } },
2464 { "pushV", { RMrBX } },
2465 { "pushV", { RMrSP } },
2466 { "pushV", { RMrBP } },
2467 { "pushV", { RMrSI } },
2468 { "pushV", { RMrDI } },
252b5132 2469 /* 58 */
ce518a5f
L
2470 { "popV", { RMrAX } },
2471 { "popV", { RMrCX } },
2472 { "popV", { RMrDX } },
2473 { "popV", { RMrBX } },
2474 { "popV", { RMrSP } },
2475 { "popV", { RMrBP } },
2476 { "popV", { RMrSI } },
2477 { "popV", { RMrDI } },
252b5132 2478 /* 60 */
4e7d34a6
L
2479 { X86_64_TABLE (X86_64_60) },
2480 { X86_64_TABLE (X86_64_61) },
2481 { X86_64_TABLE (X86_64_62) },
2482 { X86_64_TABLE (X86_64_63) },
592d1631
L
2483 { Bad_Opcode }, /* seg fs */
2484 { Bad_Opcode }, /* seg gs */
2485 { Bad_Opcode }, /* op size prefix */
2486 { Bad_Opcode }, /* adr size prefix */
252b5132 2487 /* 68 */
d9e3625e 2488 { "pushT", { sIv } },
ce518a5f 2489 { "imulS", { Gv, Ev, Iv } },
e3949f17 2490 { "pushT", { sIbT } },
ce518a5f 2491 { "imulS", { Gv, Ev, sIb } },
7c52e0e8 2492 { "ins{b|}", { Ybr, indirDX } },
4e7d34a6 2493 { X86_64_TABLE (X86_64_6D) },
7c52e0e8 2494 { "outs{b|}", { indirDXr, Xb } },
4e7d34a6 2495 { X86_64_TABLE (X86_64_6F) },
252b5132 2496 /* 70 */
7e8b059b
L
2497 { "joH", { Jb, BND, cond_jump_flag } },
2498 { "jnoH", { Jb, BND, cond_jump_flag } },
2499 { "jbH", { Jb, BND, cond_jump_flag } },
2500 { "jaeH", { Jb, BND, cond_jump_flag } },
2501 { "jeH", { Jb, BND, cond_jump_flag } },
2502 { "jneH", { Jb, BND, cond_jump_flag } },
2503 { "jbeH", { Jb, BND, cond_jump_flag } },
2504 { "jaH", { Jb, BND, cond_jump_flag } },
252b5132 2505 /* 78 */
7e8b059b
L
2506 { "jsH", { Jb, BND, cond_jump_flag } },
2507 { "jnsH", { Jb, BND, cond_jump_flag } },
2508 { "jpH", { Jb, BND, cond_jump_flag } },
2509 { "jnpH", { Jb, BND, cond_jump_flag } },
2510 { "jlH", { Jb, BND, cond_jump_flag } },
2511 { "jgeH", { Jb, BND, cond_jump_flag } },
2512 { "jleH", { Jb, BND, cond_jump_flag } },
2513 { "jgH", { Jb, BND, cond_jump_flag } },
252b5132 2514 /* 80 */
1ceb70f8
L
2515 { REG_TABLE (REG_80) },
2516 { REG_TABLE (REG_81) },
592d1631 2517 { Bad_Opcode },
1ceb70f8 2518 { REG_TABLE (REG_82) },
ce518a5f
L
2519 { "testB", { Eb, Gb } },
2520 { "testS", { Ev, Gv } },
42164a71
L
2521 { "xchgB", { Ebh2, Gb } },
2522 { "xchgS", { Evh2, Gv } },
252b5132 2523 /* 88 */
42164a71
L
2524 { "movB", { Ebh3, Gb } },
2525 { "movS", { Evh3, Gv } },
b6169b20
L
2526 { "movB", { Gb, EbS } },
2527 { "movS", { Gv, EvS } },
ce518a5f 2528 { "movD", { Sv, Sw } },
1ceb70f8 2529 { MOD_TABLE (MOD_8D) },
ce518a5f 2530 { "movD", { Sw, Sv } },
1ceb70f8 2531 { REG_TABLE (REG_8F) },
252b5132 2532 /* 90 */
1ceb70f8 2533 { PREFIX_TABLE (PREFIX_90) },
ce518a5f
L
2534 { "xchgS", { RMeCX, eAX } },
2535 { "xchgS", { RMeDX, eAX } },
2536 { "xchgS", { RMeBX, eAX } },
2537 { "xchgS", { RMeSP, eAX } },
2538 { "xchgS", { RMeBP, eAX } },
2539 { "xchgS", { RMeSI, eAX } },
2540 { "xchgS", { RMeDI, eAX } },
252b5132 2541 /* 98 */
7c52e0e8
L
2542 { "cW{t|}R", { XX } },
2543 { "cR{t|}O", { XX } },
4e7d34a6 2544 { X86_64_TABLE (X86_64_9A) },
592d1631 2545 { Bad_Opcode }, /* fwait */
ce518a5f
L
2546 { "pushfT", { XX } },
2547 { "popfT", { XX } },
7c52e0e8
L
2548 { "sahf", { XX } },
2549 { "lahf", { XX } },
252b5132 2550 /* a0 */
4b06377f
L
2551 { "mov%LB", { AL, Ob } },
2552 { "mov%LS", { eAX, Ov } },
2553 { "mov%LB", { Ob, AL } },
2554 { "mov%LS", { Ov, eAX } },
7c52e0e8
L
2555 { "movs{b|}", { Ybr, Xb } },
2556 { "movs{R|}", { Yvr, Xv } },
2557 { "cmps{b|}", { Xb, Yb } },
2558 { "cmps{R|}", { Xv, Yv } },
252b5132 2559 /* a8 */
ce518a5f
L
2560 { "testB", { AL, Ib } },
2561 { "testS", { eAX, Iv } },
2562 { "stosB", { Ybr, AL } },
2563 { "stosS", { Yvr, eAX } },
2564 { "lodsB", { ALr, Xb } },
2565 { "lodsS", { eAXr, Xv } },
2566 { "scasB", { AL, Yb } },
2567 { "scasS", { eAX, Yv } },
252b5132 2568 /* b0 */
ce518a5f
L
2569 { "movB", { RMAL, Ib } },
2570 { "movB", { RMCL, Ib } },
2571 { "movB", { RMDL, Ib } },
2572 { "movB", { RMBL, Ib } },
2573 { "movB", { RMAH, Ib } },
2574 { "movB", { RMCH, Ib } },
2575 { "movB", { RMDH, Ib } },
2576 { "movB", { RMBH, Ib } },
252b5132 2577 /* b8 */
4b06377f
L
2578 { "mov%LV", { RMeAX, Iv64 } },
2579 { "mov%LV", { RMeCX, Iv64 } },
2580 { "mov%LV", { RMeDX, Iv64 } },
2581 { "mov%LV", { RMeBX, Iv64 } },
2582 { "mov%LV", { RMeSP, Iv64 } },
2583 { "mov%LV", { RMeBP, Iv64 } },
2584 { "mov%LV", { RMeSI, Iv64 } },
2585 { "mov%LV", { RMeDI, Iv64 } },
252b5132 2586 /* c0 */
1ceb70f8
L
2587 { REG_TABLE (REG_C0) },
2588 { REG_TABLE (REG_C1) },
7e8b059b
L
2589 { "retT", { Iw, BND } },
2590 { "retT", { BND } },
4e7d34a6
L
2591 { X86_64_TABLE (X86_64_C4) },
2592 { X86_64_TABLE (X86_64_C5) },
1ceb70f8
L
2593 { REG_TABLE (REG_C6) },
2594 { REG_TABLE (REG_C7) },
252b5132 2595 /* c8 */
ce518a5f
L
2596 { "enterT", { Iw, Ib } },
2597 { "leaveT", { XX } },
ddab3d59
JB
2598 { "Jret{|f}P", { Iw } },
2599 { "Jret{|f}P", { XX } },
ce518a5f
L
2600 { "int3", { XX } },
2601 { "int", { Ib } },
4e7d34a6 2602 { X86_64_TABLE (X86_64_CE) },
ce518a5f 2603 { "iretP", { XX } },
252b5132 2604 /* d0 */
1ceb70f8
L
2605 { REG_TABLE (REG_D0) },
2606 { REG_TABLE (REG_D1) },
2607 { REG_TABLE (REG_D2) },
2608 { REG_TABLE (REG_D3) },
4e7d34a6
L
2609 { X86_64_TABLE (X86_64_D4) },
2610 { X86_64_TABLE (X86_64_D5) },
592d1631 2611 { Bad_Opcode },
ce518a5f 2612 { "xlat", { DSBX } },
252b5132
RH
2613 /* d8 */
2614 { FLOAT },
2615 { FLOAT },
2616 { FLOAT },
2617 { FLOAT },
2618 { FLOAT },
2619 { FLOAT },
2620 { FLOAT },
2621 { FLOAT },
2622 /* e0 */
ce518a5f
L
2623 { "loopneFH", { Jb, XX, loop_jcxz_flag } },
2624 { "loopeFH", { Jb, XX, loop_jcxz_flag } },
2625 { "loopFH", { Jb, XX, loop_jcxz_flag } },
2626 { "jEcxzH", { Jb, XX, loop_jcxz_flag } },
2627 { "inB", { AL, Ib } },
2628 { "inG", { zAX, Ib } },
2629 { "outB", { Ib, AL } },
2630 { "outG", { Ib, zAX } },
252b5132 2631 /* e8 */
7e8b059b
L
2632 { "callT", { Jv, BND } },
2633 { "jmpT", { Jv, BND } },
4e7d34a6 2634 { X86_64_TABLE (X86_64_EA) },
7e8b059b 2635 { "jmp", { Jb, BND } },
ce518a5f
L
2636 { "inB", { AL, indirDX } },
2637 { "inG", { zAX, indirDX } },
2638 { "outB", { indirDX, AL } },
2639 { "outG", { indirDX, zAX } },
252b5132 2640 /* f0 */
592d1631 2641 { Bad_Opcode }, /* lock prefix */
ce518a5f 2642 { "icebp", { XX } },
592d1631
L
2643 { Bad_Opcode }, /* repne */
2644 { Bad_Opcode }, /* repz */
ce518a5f
L
2645 { "hlt", { XX } },
2646 { "cmc", { XX } },
1ceb70f8
L
2647 { REG_TABLE (REG_F6) },
2648 { REG_TABLE (REG_F7) },
252b5132 2649 /* f8 */
ce518a5f
L
2650 { "clc", { XX } },
2651 { "stc", { XX } },
2652 { "cli", { XX } },
2653 { "sti", { XX } },
2654 { "cld", { XX } },
2655 { "std", { XX } },
1ceb70f8
L
2656 { REG_TABLE (REG_FE) },
2657 { REG_TABLE (REG_FF) },
252b5132
RH
2658};
2659
6439fc28 2660static const struct dis386 dis386_twobyte[] = {
252b5132 2661 /* 00 */
1ceb70f8
L
2662 { REG_TABLE (REG_0F00 ) },
2663 { REG_TABLE (REG_0F01 ) },
ce518a5f
L
2664 { "larS", { Gv, Ew } },
2665 { "lslS", { Gv, Ew } },
592d1631 2666 { Bad_Opcode },
ce518a5f
L
2667 { "syscall", { XX } },
2668 { "clts", { XX } },
2669 { "sysretP", { XX } },
252b5132 2670 /* 08 */
ce518a5f
L
2671 { "invd", { XX } },
2672 { "wbinvd", { XX } },
592d1631 2673 { Bad_Opcode },
b414985b 2674 { "ud2", { XX } },
592d1631 2675 { Bad_Opcode },
b5b1fc4f 2676 { REG_TABLE (REG_0F0D) },
ce518a5f
L
2677 { "femms", { XX } },
2678 { "", { MX, EM, OPSUF } }, /* See OP_3DNowSuffix. */
252b5132 2679 /* 10 */
1ceb70f8
L
2680 { PREFIX_TABLE (PREFIX_0F10) },
2681 { PREFIX_TABLE (PREFIX_0F11) },
2682 { PREFIX_TABLE (PREFIX_0F12) },
2683 { MOD_TABLE (MOD_0F13) },
f2a421c4
L
2684 { "unpcklpX", { XM, EXx } },
2685 { "unpckhpX", { XM, EXx } },
1ceb70f8
L
2686 { PREFIX_TABLE (PREFIX_0F16) },
2687 { MOD_TABLE (MOD_0F17) },
252b5132 2688 /* 18 */
1ceb70f8 2689 { REG_TABLE (REG_0F18) },
b5b1fc4f 2690 { "nopQ", { Ev } },
7e8b059b
L
2691 { PREFIX_TABLE (PREFIX_0F1A) },
2692 { PREFIX_TABLE (PREFIX_0F1B) },
b5b1fc4f
L
2693 { "nopQ", { Ev } },
2694 { "nopQ", { Ev } },
2695 { "nopQ", { Ev } },
ce518a5f 2696 { "nopQ", { Ev } },
252b5132 2697 /* 20 */
1ceb70f8
L
2698 { MOD_TABLE (MOD_0F20) },
2699 { MOD_TABLE (MOD_0F21) },
2700 { MOD_TABLE (MOD_0F22) },
2701 { MOD_TABLE (MOD_0F23) },
2702 { MOD_TABLE (MOD_0F24) },
592d1631 2703 { Bad_Opcode },
1ceb70f8 2704 { MOD_TABLE (MOD_0F26) },
592d1631 2705 { Bad_Opcode },
252b5132 2706 /* 28 */
09a2c6cf 2707 { "movapX", { XM, EXx } },
b6169b20 2708 { "movapX", { EXxS, XM } },
1ceb70f8
L
2709 { PREFIX_TABLE (PREFIX_0F2A) },
2710 { PREFIX_TABLE (PREFIX_0F2B) },
2711 { PREFIX_TABLE (PREFIX_0F2C) },
2712 { PREFIX_TABLE (PREFIX_0F2D) },
2713 { PREFIX_TABLE (PREFIX_0F2E) },
2714 { PREFIX_TABLE (PREFIX_0F2F) },
252b5132 2715 /* 30 */
ce518a5f
L
2716 { "wrmsr", { XX } },
2717 { "rdtsc", { XX } },
2718 { "rdmsr", { XX } },
2719 { "rdpmc", { XX } },
2720 { "sysenter", { XX } },
2721 { "sysexit", { XX } },
592d1631 2722 { Bad_Opcode },
47dd174c 2723 { "getsec", { XX } },
252b5132 2724 /* 38 */
4e7d34a6 2725 { THREE_BYTE_TABLE (THREE_BYTE_0F38) },
592d1631 2726 { Bad_Opcode },
4e7d34a6 2727 { THREE_BYTE_TABLE (THREE_BYTE_0F3A) },
592d1631
L
2728 { Bad_Opcode },
2729 { Bad_Opcode },
2730 { Bad_Opcode },
2731 { Bad_Opcode },
2732 { Bad_Opcode },
252b5132 2733 /* 40 */
b19d5385
JB
2734 { "cmovoS", { Gv, Ev } },
2735 { "cmovnoS", { Gv, Ev } },
2736 { "cmovbS", { Gv, Ev } },
2737 { "cmovaeS", { Gv, Ev } },
2738 { "cmoveS", { Gv, Ev } },
2739 { "cmovneS", { Gv, Ev } },
2740 { "cmovbeS", { Gv, Ev } },
2741 { "cmovaS", { Gv, Ev } },
252b5132 2742 /* 48 */
b19d5385
JB
2743 { "cmovsS", { Gv, Ev } },
2744 { "cmovnsS", { Gv, Ev } },
2745 { "cmovpS", { Gv, Ev } },
2746 { "cmovnpS", { Gv, Ev } },
2747 { "cmovlS", { Gv, Ev } },
2748 { "cmovgeS", { Gv, Ev } },
2749 { "cmovleS", { Gv, Ev } },
2750 { "cmovgS", { Gv, Ev } },
252b5132 2751 /* 50 */
75c135a8 2752 { MOD_TABLE (MOD_0F51) },
1ceb70f8
L
2753 { PREFIX_TABLE (PREFIX_0F51) },
2754 { PREFIX_TABLE (PREFIX_0F52) },
2755 { PREFIX_TABLE (PREFIX_0F53) },
09a2c6cf
L
2756 { "andpX", { XM, EXx } },
2757 { "andnpX", { XM, EXx } },
2758 { "orpX", { XM, EXx } },
2759 { "xorpX", { XM, EXx } },
252b5132 2760 /* 58 */
1ceb70f8
L
2761 { PREFIX_TABLE (PREFIX_0F58) },
2762 { PREFIX_TABLE (PREFIX_0F59) },
2763 { PREFIX_TABLE (PREFIX_0F5A) },
2764 { PREFIX_TABLE (PREFIX_0F5B) },
2765 { PREFIX_TABLE (PREFIX_0F5C) },
2766 { PREFIX_TABLE (PREFIX_0F5D) },
2767 { PREFIX_TABLE (PREFIX_0F5E) },
2768 { PREFIX_TABLE (PREFIX_0F5F) },
252b5132 2769 /* 60 */
1ceb70f8
L
2770 { PREFIX_TABLE (PREFIX_0F60) },
2771 { PREFIX_TABLE (PREFIX_0F61) },
2772 { PREFIX_TABLE (PREFIX_0F62) },
ce518a5f
L
2773 { "packsswb", { MX, EM } },
2774 { "pcmpgtb", { MX, EM } },
2775 { "pcmpgtw", { MX, EM } },
2776 { "pcmpgtd", { MX, EM } },
2777 { "packuswb", { MX, EM } },
252b5132 2778 /* 68 */
ce518a5f
L
2779 { "punpckhbw", { MX, EM } },
2780 { "punpckhwd", { MX, EM } },
2781 { "punpckhdq", { MX, EM } },
2782 { "packssdw", { MX, EM } },
1ceb70f8
L
2783 { PREFIX_TABLE (PREFIX_0F6C) },
2784 { PREFIX_TABLE (PREFIX_0F6D) },
231af070 2785 { "movK", { MX, Edq } },
1ceb70f8 2786 { PREFIX_TABLE (PREFIX_0F6F) },
252b5132 2787 /* 70 */
1ceb70f8
L
2788 { PREFIX_TABLE (PREFIX_0F70) },
2789 { REG_TABLE (REG_0F71) },
2790 { REG_TABLE (REG_0F72) },
2791 { REG_TABLE (REG_0F73) },
ce518a5f
L
2792 { "pcmpeqb", { MX, EM } },
2793 { "pcmpeqw", { MX, EM } },
2794 { "pcmpeqd", { MX, EM } },
2795 { "emms", { XX } },
252b5132 2796 /* 78 */
1ceb70f8
L
2797 { PREFIX_TABLE (PREFIX_0F78) },
2798 { PREFIX_TABLE (PREFIX_0F79) },
4e7d34a6 2799 { THREE_BYTE_TABLE (THREE_BYTE_0F7A) },
592d1631 2800 { Bad_Opcode },
1ceb70f8
L
2801 { PREFIX_TABLE (PREFIX_0F7C) },
2802 { PREFIX_TABLE (PREFIX_0F7D) },
2803 { PREFIX_TABLE (PREFIX_0F7E) },
2804 { PREFIX_TABLE (PREFIX_0F7F) },
252b5132 2805 /* 80 */
7e8b059b
L
2806 { "joH", { Jv, BND, cond_jump_flag } },
2807 { "jnoH", { Jv, BND, cond_jump_flag } },
2808 { "jbH", { Jv, BND, cond_jump_flag } },
2809 { "jaeH", { Jv, BND, cond_jump_flag } },
2810 { "jeH", { Jv, BND, cond_jump_flag } },
2811 { "jneH", { Jv, BND, cond_jump_flag } },
2812 { "jbeH", { Jv, BND, cond_jump_flag } },
2813 { "jaH", { Jv, BND, cond_jump_flag } },
252b5132 2814 /* 88 */
7e8b059b
L
2815 { "jsH", { Jv, BND, cond_jump_flag } },
2816 { "jnsH", { Jv, BND, cond_jump_flag } },
2817 { "jpH", { Jv, BND, cond_jump_flag } },
2818 { "jnpH", { Jv, BND, cond_jump_flag } },
2819 { "jlH", { Jv, BND, cond_jump_flag } },
2820 { "jgeH", { Jv, BND, cond_jump_flag } },
2821 { "jleH", { Jv, BND, cond_jump_flag } },
2822 { "jgH", { Jv, BND, cond_jump_flag } },
252b5132 2823 /* 90 */
ce518a5f
L
2824 { "seto", { Eb } },
2825 { "setno", { Eb } },
2826 { "setb", { Eb } },
2827 { "setae", { Eb } },
2828 { "sete", { Eb } },
2829 { "setne", { Eb } },
2830 { "setbe", { Eb } },
2831 { "seta", { Eb } },
252b5132 2832 /* 98 */
ce518a5f
L
2833 { "sets", { Eb } },
2834 { "setns", { Eb } },
2835 { "setp", { Eb } },
2836 { "setnp", { Eb } },
2837 { "setl", { Eb } },
2838 { "setge", { Eb } },
2839 { "setle", { Eb } },
2840 { "setg", { Eb } },
252b5132 2841 /* a0 */
ce518a5f
L
2842 { "pushT", { fs } },
2843 { "popT", { fs } },
2844 { "cpuid", { XX } },
2845 { "btS", { Ev, Gv } },
2846 { "shldS", { Ev, Gv, Ib } },
2847 { "shldS", { Ev, Gv, CL } },
1ceb70f8
L
2848 { REG_TABLE (REG_0FA6) },
2849 { REG_TABLE (REG_0FA7) },
252b5132 2850 /* a8 */
ce518a5f
L
2851 { "pushT", { gs } },
2852 { "popT", { gs } },
2853 { "rsm", { XX } },
42164a71 2854 { "btsS", { Evh1, Gv } },
ce518a5f
L
2855 { "shrdS", { Ev, Gv, Ib } },
2856 { "shrdS", { Ev, Gv, CL } },
1ceb70f8 2857 { REG_TABLE (REG_0FAE) },
ce518a5f 2858 { "imulS", { Gv, Ev } },
252b5132 2859 /* b0 */
42164a71
L
2860 { "cmpxchgB", { Ebh1, Gb } },
2861 { "cmpxchgS", { Evh1, Gv } },
1ceb70f8 2862 { MOD_TABLE (MOD_0FB2) },
42164a71 2863 { "btrS", { Evh1, Gv } },
1ceb70f8
L
2864 { MOD_TABLE (MOD_0FB4) },
2865 { MOD_TABLE (MOD_0FB5) },
7c52e0e8
L
2866 { "movz{bR|x}", { Gv, Eb } },
2867 { "movz{wR|x}", { Gv, Ew } }, /* yes, there really is movzww ! */
252b5132 2868 /* b8 */
1ceb70f8 2869 { PREFIX_TABLE (PREFIX_0FB8) },
b414985b 2870 { "ud1", { XX } },
1ceb70f8 2871 { REG_TABLE (REG_0FBA) },
42164a71 2872 { "btcS", { Evh1, Gv } },
f12dc422 2873 { PREFIX_TABLE (PREFIX_0FBC) },
1ceb70f8 2874 { PREFIX_TABLE (PREFIX_0FBD) },
7c52e0e8
L
2875 { "movs{bR|x}", { Gv, Eb } },
2876 { "movs{wR|x}", { Gv, Ew } }, /* yes, there really is movsww ! */
252b5132 2877 /* c0 */
42164a71
L
2878 { "xaddB", { Ebh1, Gb } },
2879 { "xaddS", { Evh1, Gv } },
1ceb70f8 2880 { PREFIX_TABLE (PREFIX_0FC2) },
4ee52178 2881 { PREFIX_TABLE (PREFIX_0FC3) },
ce518a5f
L
2882 { "pinsrw", { MX, Edqw, Ib } },
2883 { "pextrw", { Gdq, MS, Ib } },
09a2c6cf 2884 { "shufpX", { XM, EXx, Ib } },
1ceb70f8 2885 { REG_TABLE (REG_0FC7) },
252b5132 2886 /* c8 */
ce518a5f
L
2887 { "bswap", { RMeAX } },
2888 { "bswap", { RMeCX } },
2889 { "bswap", { RMeDX } },
2890 { "bswap", { RMeBX } },
2891 { "bswap", { RMeSP } },
2892 { "bswap", { RMeBP } },
2893 { "bswap", { RMeSI } },
2894 { "bswap", { RMeDI } },
252b5132 2895 /* d0 */
1ceb70f8 2896 { PREFIX_TABLE (PREFIX_0FD0) },
ce518a5f
L
2897 { "psrlw", { MX, EM } },
2898 { "psrld", { MX, EM } },
2899 { "psrlq", { MX, EM } },
2900 { "paddq", { MX, EM } },
2901 { "pmullw", { MX, EM } },
1ceb70f8 2902 { PREFIX_TABLE (PREFIX_0FD6) },
75c135a8 2903 { MOD_TABLE (MOD_0FD7) },
252b5132 2904 /* d8 */
ce518a5f
L
2905 { "psubusb", { MX, EM } },
2906 { "psubusw", { MX, EM } },
2907 { "pminub", { MX, EM } },
2908 { "pand", { MX, EM } },
2909 { "paddusb", { MX, EM } },
2910 { "paddusw", { MX, EM } },
2911 { "pmaxub", { MX, EM } },
2912 { "pandn", { MX, EM } },
252b5132 2913 /* e0 */
ce518a5f
L
2914 { "pavgb", { MX, EM } },
2915 { "psraw", { MX, EM } },
2916 { "psrad", { MX, EM } },
2917 { "pavgw", { MX, EM } },
2918 { "pmulhuw", { MX, EM } },
2919 { "pmulhw", { MX, EM } },
1ceb70f8
L
2920 { PREFIX_TABLE (PREFIX_0FE6) },
2921 { PREFIX_TABLE (PREFIX_0FE7) },
252b5132 2922 /* e8 */
ce518a5f
L
2923 { "psubsb", { MX, EM } },
2924 { "psubsw", { MX, EM } },
2925 { "pminsw", { MX, EM } },
2926 { "por", { MX, EM } },
2927 { "paddsb", { MX, EM } },
2928 { "paddsw", { MX, EM } },
2929 { "pmaxsw", { MX, EM } },
2930 { "pxor", { MX, EM } },
252b5132 2931 /* f0 */
1ceb70f8 2932 { PREFIX_TABLE (PREFIX_0FF0) },
ce518a5f
L
2933 { "psllw", { MX, EM } },
2934 { "pslld", { MX, EM } },
2935 { "psllq", { MX, EM } },
2936 { "pmuludq", { MX, EM } },
2937 { "pmaddwd", { MX, EM } },
2938 { "psadbw", { MX, EM } },
1ceb70f8 2939 { PREFIX_TABLE (PREFIX_0FF7) },
252b5132 2940 /* f8 */
ce518a5f
L
2941 { "psubb", { MX, EM } },
2942 { "psubw", { MX, EM } },
2943 { "psubd", { MX, EM } },
2944 { "psubq", { MX, EM } },
2945 { "paddb", { MX, EM } },
2946 { "paddw", { MX, EM } },
2947 { "paddd", { MX, EM } },
592d1631 2948 { Bad_Opcode },
252b5132
RH
2949};
2950
2951static const unsigned char onebyte_has_modrm[256] = {
c608c12e
AM
2952 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
2953 /* ------------------------------- */
2954 /* 00 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 00 */
2955 /* 10 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 10 */
2956 /* 20 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 20 */
2957 /* 30 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 30 */
2958 /* 40 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 40 */
2959 /* 50 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 50 */
2960 /* 60 */ 0,0,1,1,0,0,0,0,0,1,0,1,0,0,0,0, /* 60 */
2961 /* 70 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 70 */
2962 /* 80 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 80 */
2963 /* 90 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 90 */
2964 /* a0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* a0 */
2965 /* b0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* b0 */
2966 /* c0 */ 1,1,0,0,1,1,1,1,0,0,0,0,0,0,0,0, /* c0 */
2967 /* d0 */ 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1, /* d0 */
2968 /* e0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* e0 */
2969 /* f0 */ 0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1 /* f0 */
2970 /* ------------------------------- */
2971 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
252b5132
RH
2972};
2973
2974static const unsigned char twobyte_has_modrm[256] = {
c608c12e
AM
2975 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
2976 /* ------------------------------- */
252b5132 2977 /* 00 */ 1,1,1,1,0,0,0,0,0,0,0,0,0,1,0,1, /* 0f */
b5b1fc4f 2978 /* 10 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 1f */
85f10a01 2979 /* 20 */ 1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1, /* 2f */
331d2d0d 2980 /* 30 */ 0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0, /* 3f */
252b5132 2981 /* 40 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 4f */
4bba6815
AM
2982 /* 50 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 5f */
2983 /* 60 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 6f */
85f10a01 2984 /* 70 */ 1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1, /* 7f */
252b5132
RH
2985 /* 80 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 8f */
2986 /* 90 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 9f */
30d1c836 2987 /* a0 */ 0,0,0,1,1,1,1,1,0,0,0,1,1,1,1,1, /* af */
050dfa73 2988 /* b0 */ 1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1, /* bf */
252b5132 2989 /* c0 */ 1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0, /* cf */
ca164297 2990 /* d0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* df */
4bba6815 2991 /* e0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* ef */
ca164297 2992 /* f0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0 /* ff */
c608c12e
AM
2993 /* ------------------------------- */
2994 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
2995};
2996
285ca992
L
2997static const unsigned char twobyte_has_mandatory_prefix[256] = {
2998 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
2999 /* ------------------------------- */
3000 /* 00 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 0f */
3001 /* 10 */ 1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0, /* 1f */
3002 /* 20 */ 0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,0, /* 2f */
3003 /* 30 */ 0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0, /* 3f */
3004 /* 40 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 4f */
3005 /* 50 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 5f */
3006 /* 60 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 6f */
3007 /* 70 */ 1,0,0,0,1,1,1,1,0,0,1,1,1,1,1,1, /* 7f */
3008 /* 80 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 8f */
3009 /* 90 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 9f */
3010 /* a0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* af */
3011 /* b0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* bf */
3012 /* c0 */ 0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0, /* cf */
3013 /* d0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* df */
3014 /* e0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* ef */
3015 /* f0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0 /* ff */
3016 /* ------------------------------- */
3017 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
3018};
3019
252b5132
RH
3020static char obuf[100];
3021static char *obufp;
ea397f5b 3022static char *mnemonicendp;
252b5132
RH
3023static char scratchbuf[100];
3024static unsigned char *start_codep;
3025static unsigned char *insn_codep;
3026static unsigned char *codep;
285ca992 3027static unsigned char *end_codep;
f16cd0d5
L
3028static int last_lock_prefix;
3029static int last_repz_prefix;
3030static int last_repnz_prefix;
3031static int last_data_prefix;
3032static int last_addr_prefix;
3033static int last_rex_prefix;
3034static int last_seg_prefix;
d9949a36 3035static int fwait_prefix;
285ca992
L
3036/* The PREFIX_REPZ/PREFIX_REPNZ/PREFIX_DATA prefix is mandatory. */
3037static int mandatory_prefix;
3038/* The active segment register prefix. */
3039static int active_seg_prefix;
f16cd0d5
L
3040#define MAX_CODE_LENGTH 15
3041/* We can up to 14 prefixes since the maximum instruction length is
3042 15bytes. */
3043static int all_prefixes[MAX_CODE_LENGTH - 1];
252b5132 3044static disassemble_info *the_info;
7967e09e
L
3045static struct
3046 {
3047 int mod;
7967e09e 3048 int reg;
484c222e 3049 int rm;
7967e09e
L
3050 }
3051modrm;
4bba6815 3052static unsigned char need_modrm;
dfc8cf43
L
3053static struct
3054 {
3055 int scale;
3056 int index;
3057 int base;
3058 }
3059sib;
c0f3af97
L
3060static struct
3061 {
3062 int register_specifier;
3063 int length;
3064 int prefix;
3065 int w;
43234a1e
L
3066 int evex;
3067 int r;
3068 int v;
3069 int mask_register_specifier;
3070 int zeroing;
3071 int ll;
3072 int b;
c0f3af97
L
3073 }
3074vex;
3075static unsigned char need_vex;
3076static unsigned char need_vex_reg;
dae39acc 3077static unsigned char vex_w_done;
252b5132 3078
ea397f5b
L
3079struct op
3080 {
3081 const char *name;
3082 unsigned int len;
3083 };
3084
4bba6815
AM
3085/* If we are accessing mod/rm/reg without need_modrm set, then the
3086 values are stale. Hitting this abort likely indicates that you
3087 need to update onebyte_has_modrm or twobyte_has_modrm. */
3088#define MODRM_CHECK if (!need_modrm) abort ()
3089
d708bcba
AM
3090static const char **names64;
3091static const char **names32;
3092static const char **names16;
3093static const char **names8;
3094static const char **names8rex;
3095static const char **names_seg;
db51cc60
L
3096static const char *index64;
3097static const char *index32;
d708bcba 3098static const char **index16;
7e8b059b 3099static const char **names_bnd;
d708bcba
AM
3100
3101static const char *intel_names64[] = {
3102 "rax", "rcx", "rdx", "rbx", "rsp", "rbp", "rsi", "rdi",
3103 "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15"
3104};
3105static const char *intel_names32[] = {
3106 "eax", "ecx", "edx", "ebx", "esp", "ebp", "esi", "edi",
3107 "r8d", "r9d", "r10d", "r11d", "r12d", "r13d", "r14d", "r15d"
3108};
3109static const char *intel_names16[] = {
3110 "ax", "cx", "dx", "bx", "sp", "bp", "si", "di",
3111 "r8w", "r9w", "r10w", "r11w", "r12w", "r13w", "r14w", "r15w"
3112};
3113static const char *intel_names8[] = {
3114 "al", "cl", "dl", "bl", "ah", "ch", "dh", "bh",
3115};
3116static const char *intel_names8rex[] = {
3117 "al", "cl", "dl", "bl", "spl", "bpl", "sil", "dil",
3118 "r8b", "r9b", "r10b", "r11b", "r12b", "r13b", "r14b", "r15b"
3119};
3120static const char *intel_names_seg[] = {
3121 "es", "cs", "ss", "ds", "fs", "gs", "?", "?",
3122};
db51cc60
L
3123static const char *intel_index64 = "riz";
3124static const char *intel_index32 = "eiz";
d708bcba
AM
3125static const char *intel_index16[] = {
3126 "bx+si", "bx+di", "bp+si", "bp+di", "si", "di", "bp", "bx"
3127};
3128
3129static const char *att_names64[] = {
3130 "%rax", "%rcx", "%rdx", "%rbx", "%rsp", "%rbp", "%rsi", "%rdi",
52b15da3
JH
3131 "%r8", "%r9", "%r10", "%r11", "%r12", "%r13", "%r14", "%r15"
3132};
d708bcba
AM
3133static const char *att_names32[] = {
3134 "%eax", "%ecx", "%edx", "%ebx", "%esp", "%ebp", "%esi", "%edi",
52b15da3 3135 "%r8d", "%r9d", "%r10d", "%r11d", "%r12d", "%r13d", "%r14d", "%r15d"
252b5132 3136};
d708bcba
AM
3137static const char *att_names16[] = {
3138 "%ax", "%cx", "%dx", "%bx", "%sp", "%bp", "%si", "%di",
52b15da3 3139 "%r8w", "%r9w", "%r10w", "%r11w", "%r12w", "%r13w", "%r14w", "%r15w"
252b5132 3140};
d708bcba
AM
3141static const char *att_names8[] = {
3142 "%al", "%cl", "%dl", "%bl", "%ah", "%ch", "%dh", "%bh",
252b5132 3143};
d708bcba
AM
3144static const char *att_names8rex[] = {
3145 "%al", "%cl", "%dl", "%bl", "%spl", "%bpl", "%sil", "%dil",
52b15da3
JH
3146 "%r8b", "%r9b", "%r10b", "%r11b", "%r12b", "%r13b", "%r14b", "%r15b"
3147};
d708bcba
AM
3148static const char *att_names_seg[] = {
3149 "%es", "%cs", "%ss", "%ds", "%fs", "%gs", "%?", "%?",
252b5132 3150};
db51cc60
L
3151static const char *att_index64 = "%riz";
3152static const char *att_index32 = "%eiz";
d708bcba
AM
3153static const char *att_index16[] = {
3154 "%bx,%si", "%bx,%di", "%bp,%si", "%bp,%di", "%si", "%di", "%bp", "%bx"
252b5132
RH
3155};
3156
b9733481
L
3157static const char **names_mm;
3158static const char *intel_names_mm[] = {
3159 "mm0", "mm1", "mm2", "mm3",
3160 "mm4", "mm5", "mm6", "mm7"
3161};
3162static const char *att_names_mm[] = {
3163 "%mm0", "%mm1", "%mm2", "%mm3",
3164 "%mm4", "%mm5", "%mm6", "%mm7"
3165};
3166
7e8b059b
L
3167static const char *intel_names_bnd[] = {
3168 "bnd0", "bnd1", "bnd2", "bnd3"
3169};
3170
3171static const char *att_names_bnd[] = {
3172 "%bnd0", "%bnd1", "%bnd2", "%bnd3"
3173};
3174
b9733481
L
3175static const char **names_xmm;
3176static const char *intel_names_xmm[] = {
3177 "xmm0", "xmm1", "xmm2", "xmm3",
3178 "xmm4", "xmm5", "xmm6", "xmm7",
3179 "xmm8", "xmm9", "xmm10", "xmm11",
43234a1e
L
3180 "xmm12", "xmm13", "xmm14", "xmm15",
3181 "xmm16", "xmm17", "xmm18", "xmm19",
3182 "xmm20", "xmm21", "xmm22", "xmm23",
3183 "xmm24", "xmm25", "xmm26", "xmm27",
3184 "xmm28", "xmm29", "xmm30", "xmm31"
b9733481
L
3185};
3186static const char *att_names_xmm[] = {
3187 "%xmm0", "%xmm1", "%xmm2", "%xmm3",
3188 "%xmm4", "%xmm5", "%xmm6", "%xmm7",
3189 "%xmm8", "%xmm9", "%xmm10", "%xmm11",
43234a1e
L
3190 "%xmm12", "%xmm13", "%xmm14", "%xmm15",
3191 "%xmm16", "%xmm17", "%xmm18", "%xmm19",
3192 "%xmm20", "%xmm21", "%xmm22", "%xmm23",
3193 "%xmm24", "%xmm25", "%xmm26", "%xmm27",
3194 "%xmm28", "%xmm29", "%xmm30", "%xmm31"
b9733481
L
3195};
3196
3197static const char **names_ymm;
3198static const char *intel_names_ymm[] = {
3199 "ymm0", "ymm1", "ymm2", "ymm3",
3200 "ymm4", "ymm5", "ymm6", "ymm7",
3201 "ymm8", "ymm9", "ymm10", "ymm11",
43234a1e
L
3202 "ymm12", "ymm13", "ymm14", "ymm15",
3203 "ymm16", "ymm17", "ymm18", "ymm19",
3204 "ymm20", "ymm21", "ymm22", "ymm23",
3205 "ymm24", "ymm25", "ymm26", "ymm27",
3206 "ymm28", "ymm29", "ymm30", "ymm31"
b9733481
L
3207};
3208static const char *att_names_ymm[] = {
3209 "%ymm0", "%ymm1", "%ymm2", "%ymm3",
3210 "%ymm4", "%ymm5", "%ymm6", "%ymm7",
3211 "%ymm8", "%ymm9", "%ymm10", "%ymm11",
43234a1e
L
3212 "%ymm12", "%ymm13", "%ymm14", "%ymm15",
3213 "%ymm16", "%ymm17", "%ymm18", "%ymm19",
3214 "%ymm20", "%ymm21", "%ymm22", "%ymm23",
3215 "%ymm24", "%ymm25", "%ymm26", "%ymm27",
3216 "%ymm28", "%ymm29", "%ymm30", "%ymm31"
3217};
3218
3219static const char **names_zmm;
3220static const char *intel_names_zmm[] = {
3221 "zmm0", "zmm1", "zmm2", "zmm3",
3222 "zmm4", "zmm5", "zmm6", "zmm7",
3223 "zmm8", "zmm9", "zmm10", "zmm11",
3224 "zmm12", "zmm13", "zmm14", "zmm15",
3225 "zmm16", "zmm17", "zmm18", "zmm19",
3226 "zmm20", "zmm21", "zmm22", "zmm23",
3227 "zmm24", "zmm25", "zmm26", "zmm27",
3228 "zmm28", "zmm29", "zmm30", "zmm31"
3229};
3230static const char *att_names_zmm[] = {
3231 "%zmm0", "%zmm1", "%zmm2", "%zmm3",
3232 "%zmm4", "%zmm5", "%zmm6", "%zmm7",
3233 "%zmm8", "%zmm9", "%zmm10", "%zmm11",
3234 "%zmm12", "%zmm13", "%zmm14", "%zmm15",
3235 "%zmm16", "%zmm17", "%zmm18", "%zmm19",
3236 "%zmm20", "%zmm21", "%zmm22", "%zmm23",
3237 "%zmm24", "%zmm25", "%zmm26", "%zmm27",
3238 "%zmm28", "%zmm29", "%zmm30", "%zmm31"
3239};
3240
3241static const char **names_mask;
3242static const char *intel_names_mask[] = {
3243 "k0", "k1", "k2", "k3", "k4", "k5", "k6", "k7"
3244};
3245static const char *att_names_mask[] = {
3246 "%k0", "%k1", "%k2", "%k3", "%k4", "%k5", "%k6", "%k7"
3247};
3248
3249static const char *names_rounding[] =
3250{
3251 "{rn-sae}",
3252 "{rd-sae}",
3253 "{ru-sae}",
3254 "{rz-sae}"
b9733481
L
3255};
3256
1ceb70f8
L
3257static const struct dis386 reg_table[][8] = {
3258 /* REG_80 */
252b5132 3259 {
42164a71
L
3260 { "addA", { Ebh1, Ib } },
3261 { "orA", { Ebh1, Ib } },
3262 { "adcA", { Ebh1, Ib } },
3263 { "sbbA", { Ebh1, Ib } },
3264 { "andA", { Ebh1, Ib } },
3265 { "subA", { Ebh1, Ib } },
3266 { "xorA", { Ebh1, Ib } },
ce518a5f 3267 { "cmpA", { Eb, Ib } },
252b5132 3268 },
1ceb70f8 3269 /* REG_81 */
252b5132 3270 {
42164a71
L
3271 { "addQ", { Evh1, Iv } },
3272 { "orQ", { Evh1, Iv } },
3273 { "adcQ", { Evh1, Iv } },
3274 { "sbbQ", { Evh1, Iv } },
3275 { "andQ", { Evh1, Iv } },
3276 { "subQ", { Evh1, Iv } },
3277 { "xorQ", { Evh1, Iv } },
ce518a5f 3278 { "cmpQ", { Ev, Iv } },
252b5132 3279 },
1ceb70f8 3280 /* REG_82 */
252b5132 3281 {
42164a71
L
3282 { "addQ", { Evh1, sIb } },
3283 { "orQ", { Evh1, sIb } },
3284 { "adcQ", { Evh1, sIb } },
3285 { "sbbQ", { Evh1, sIb } },
3286 { "andQ", { Evh1, sIb } },
3287 { "subQ", { Evh1, sIb } },
3288 { "xorQ", { Evh1, sIb } },
ce518a5f 3289 { "cmpQ", { Ev, sIb } },
252b5132 3290 },
1ceb70f8 3291 /* REG_8F */
4e7d34a6
L
3292 {
3293 { "popU", { stackEv } },
c48244a5 3294 { XOP_8F_TABLE (XOP_09) },
592d1631
L
3295 { Bad_Opcode },
3296 { Bad_Opcode },
3297 { Bad_Opcode },
f88c9eb0 3298 { XOP_8F_TABLE (XOP_09) },
4e7d34a6 3299 },
1ceb70f8 3300 /* REG_C0 */
252b5132 3301 {
ce518a5f
L
3302 { "rolA", { Eb, Ib } },
3303 { "rorA", { Eb, Ib } },
3304 { "rclA", { Eb, Ib } },
3305 { "rcrA", { Eb, Ib } },
3306 { "shlA", { Eb, Ib } },
3307 { "shrA", { Eb, Ib } },
592d1631 3308 { Bad_Opcode },
ce518a5f 3309 { "sarA", { Eb, Ib } },
252b5132 3310 },
1ceb70f8 3311 /* REG_C1 */
252b5132 3312 {
ce518a5f
L
3313 { "rolQ", { Ev, Ib } },
3314 { "rorQ", { Ev, Ib } },
3315 { "rclQ", { Ev, Ib } },
3316 { "rcrQ", { Ev, Ib } },
3317 { "shlQ", { Ev, Ib } },
3318 { "shrQ", { Ev, Ib } },
592d1631 3319 { Bad_Opcode },
ce518a5f 3320 { "sarQ", { Ev, Ib } },
252b5132 3321 },
1ceb70f8 3322 /* REG_C6 */
4e7d34a6 3323 {
42164a71
L
3324 { "movA", { Ebh3, Ib } },
3325 { Bad_Opcode },
3326 { Bad_Opcode },
3327 { Bad_Opcode },
3328 { Bad_Opcode },
3329 { Bad_Opcode },
3330 { Bad_Opcode },
3331 { MOD_TABLE (MOD_C6_REG_7) },
4e7d34a6 3332 },
1ceb70f8 3333 /* REG_C7 */
4e7d34a6 3334 {
42164a71
L
3335 { "movQ", { Evh3, Iv } },
3336 { Bad_Opcode },
3337 { Bad_Opcode },
3338 { Bad_Opcode },
3339 { Bad_Opcode },
3340 { Bad_Opcode },
3341 { Bad_Opcode },
3342 { MOD_TABLE (MOD_C7_REG_7) },
4e7d34a6 3343 },
1ceb70f8 3344 /* REG_D0 */
252b5132 3345 {
ce518a5f
L
3346 { "rolA", { Eb, I1 } },
3347 { "rorA", { Eb, I1 } },
3348 { "rclA", { Eb, I1 } },
3349 { "rcrA", { Eb, I1 } },
3350 { "shlA", { Eb, I1 } },
3351 { "shrA", { Eb, I1 } },
592d1631 3352 { Bad_Opcode },
ce518a5f 3353 { "sarA", { Eb, I1 } },
252b5132 3354 },
1ceb70f8 3355 /* REG_D1 */
252b5132 3356 {
ce518a5f
L
3357 { "rolQ", { Ev, I1 } },
3358 { "rorQ", { Ev, I1 } },
3359 { "rclQ", { Ev, I1 } },
3360 { "rcrQ", { Ev, I1 } },
3361 { "shlQ", { Ev, I1 } },
3362 { "shrQ", { Ev, I1 } },
592d1631 3363 { Bad_Opcode },
ce518a5f 3364 { "sarQ", { Ev, I1 } },
252b5132 3365 },
1ceb70f8 3366 /* REG_D2 */
252b5132 3367 {
ce518a5f
L
3368 { "rolA", { Eb, CL } },
3369 { "rorA", { Eb, CL } },
3370 { "rclA", { Eb, CL } },
3371 { "rcrA", { Eb, CL } },
3372 { "shlA", { Eb, CL } },
3373 { "shrA", { Eb, CL } },
592d1631 3374 { Bad_Opcode },
ce518a5f 3375 { "sarA", { Eb, CL } },
252b5132 3376 },
1ceb70f8 3377 /* REG_D3 */
252b5132 3378 {
ce518a5f
L
3379 { "rolQ", { Ev, CL } },
3380 { "rorQ", { Ev, CL } },
3381 { "rclQ", { Ev, CL } },
3382 { "rcrQ", { Ev, CL } },
3383 { "shlQ", { Ev, CL } },
3384 { "shrQ", { Ev, CL } },
592d1631 3385 { Bad_Opcode },
ce518a5f 3386 { "sarQ", { Ev, CL } },
252b5132 3387 },
1ceb70f8 3388 /* REG_F6 */
252b5132 3389 {
ce518a5f 3390 { "testA", { Eb, Ib } },
592d1631 3391 { Bad_Opcode },
42164a71
L
3392 { "notA", { Ebh1 } },
3393 { "negA", { Ebh1 } },
ce518a5f
L
3394 { "mulA", { Eb } }, /* Don't print the implicit %al register, */
3395 { "imulA", { Eb } }, /* to distinguish these opcodes from other */
3396 { "divA", { Eb } }, /* mul/imul opcodes. Do the same for div */
3397 { "idivA", { Eb } }, /* and idiv for consistency. */
252b5132 3398 },
1ceb70f8 3399 /* REG_F7 */
252b5132 3400 {
ce518a5f 3401 { "testQ", { Ev, Iv } },
592d1631 3402 { Bad_Opcode },
42164a71
L
3403 { "notQ", { Evh1 } },
3404 { "negQ", { Evh1 } },
ce518a5f
L
3405 { "mulQ", { Ev } }, /* Don't print the implicit register. */
3406 { "imulQ", { Ev } },
3407 { "divQ", { Ev } },
3408 { "idivQ", { Ev } },
252b5132 3409 },
1ceb70f8 3410 /* REG_FE */
252b5132 3411 {
42164a71
L
3412 { "incA", { Ebh1 } },
3413 { "decA", { Ebh1 } },
252b5132 3414 },
1ceb70f8 3415 /* REG_FF */
252b5132 3416 {
42164a71
L
3417 { "incQ", { Evh1 } },
3418 { "decQ", { Evh1 } },
7e8b059b 3419 { "call{T|}", { indirEv, BND } },
4a357820 3420 { MOD_TABLE (MOD_FF_REG_3) },
7e8b059b 3421 { "jmp{T|}", { indirEv, BND } },
4a357820 3422 { MOD_TABLE (MOD_FF_REG_5) },
ce518a5f 3423 { "pushU", { stackEv } },
592d1631 3424 { Bad_Opcode },
252b5132 3425 },
1ceb70f8 3426 /* REG_0F00 */
252b5132 3427 {
ce518a5f
L
3428 { "sldtD", { Sv } },
3429 { "strD", { Sv } },
3430 { "lldt", { Ew } },
3431 { "ltr", { Ew } },
3432 { "verr", { Ew } },
3433 { "verw", { Ew } },
592d1631
L
3434 { Bad_Opcode },
3435 { Bad_Opcode },
252b5132 3436 },
1ceb70f8 3437 /* REG_0F01 */
252b5132 3438 {
1ceb70f8
L
3439 { MOD_TABLE (MOD_0F01_REG_0) },
3440 { MOD_TABLE (MOD_0F01_REG_1) },
3441 { MOD_TABLE (MOD_0F01_REG_2) },
3442 { MOD_TABLE (MOD_0F01_REG_3) },
ce518a5f 3443 { "smswD", { Sv } },
592d1631 3444 { Bad_Opcode },
ce518a5f 3445 { "lmsw", { Ew } },
1ceb70f8 3446 { MOD_TABLE (MOD_0F01_REG_7) },
252b5132 3447 },
b5b1fc4f 3448 /* REG_0F0D */
252b5132 3449 {
1ab03f4b
L
3450 { "prefetch", { Mb } },
3451 { "prefetchw", { Mb } },
43234a1e 3452 { "prefetchwt1", { Mb } },
d7189fa5
RM
3453 { "prefetch", { Mb } },
3454 { "prefetch", { Mb } },
3455 { "prefetch", { Mb } },
3456 { "prefetch", { Mb } },
3457 { "prefetch", { Mb } },
252b5132 3458 },
1ceb70f8 3459 /* REG_0F18 */
252b5132 3460 {
1ceb70f8
L
3461 { MOD_TABLE (MOD_0F18_REG_0) },
3462 { MOD_TABLE (MOD_0F18_REG_1) },
3463 { MOD_TABLE (MOD_0F18_REG_2) },
3464 { MOD_TABLE (MOD_0F18_REG_3) },
d7189fa5
RM
3465 { MOD_TABLE (MOD_0F18_REG_4) },
3466 { MOD_TABLE (MOD_0F18_REG_5) },
3467 { MOD_TABLE (MOD_0F18_REG_6) },
3468 { MOD_TABLE (MOD_0F18_REG_7) },
252b5132 3469 },
1ceb70f8 3470 /* REG_0F71 */
a6bd098c 3471 {
592d1631
L
3472 { Bad_Opcode },
3473 { Bad_Opcode },
1ceb70f8 3474 { MOD_TABLE (MOD_0F71_REG_2) },
592d1631 3475 { Bad_Opcode },
1ceb70f8 3476 { MOD_TABLE (MOD_0F71_REG_4) },
592d1631 3477 { Bad_Opcode },
1ceb70f8 3478 { MOD_TABLE (MOD_0F71_REG_6) },
a6bd098c 3479 },
1ceb70f8 3480 /* REG_0F72 */
a6bd098c 3481 {
592d1631
L
3482 { Bad_Opcode },
3483 { Bad_Opcode },
1ceb70f8 3484 { MOD_TABLE (MOD_0F72_REG_2) },
592d1631 3485 { Bad_Opcode },
1ceb70f8 3486 { MOD_TABLE (MOD_0F72_REG_4) },
592d1631 3487 { Bad_Opcode },
1ceb70f8 3488 { MOD_TABLE (MOD_0F72_REG_6) },
a6bd098c 3489 },
1ceb70f8 3490 /* REG_0F73 */
252b5132 3491 {
592d1631
L
3492 { Bad_Opcode },
3493 { Bad_Opcode },
1ceb70f8
L
3494 { MOD_TABLE (MOD_0F73_REG_2) },
3495 { MOD_TABLE (MOD_0F73_REG_3) },
592d1631
L
3496 { Bad_Opcode },
3497 { Bad_Opcode },
1ceb70f8
L
3498 { MOD_TABLE (MOD_0F73_REG_6) },
3499 { MOD_TABLE (MOD_0F73_REG_7) },
252b5132 3500 },
1ceb70f8 3501 /* REG_0FA6 */
252b5132 3502 {
4e7d34a6
L
3503 { "montmul", { { OP_0f07, 0 } } },
3504 { "xsha1", { { OP_0f07, 0 } } },
3505 { "xsha256", { { OP_0f07, 0 } } },
4e7d34a6 3506 },
1ceb70f8 3507 /* REG_0FA7 */
4e7d34a6
L
3508 {
3509 { "xstore-rng", { { OP_0f07, 0 } } },
3510 { "xcrypt-ecb", { { OP_0f07, 0 } } },
3511 { "xcrypt-cbc", { { OP_0f07, 0 } } },
3512 { "xcrypt-ctr", { { OP_0f07, 0 } } },
3513 { "xcrypt-cfb", { { OP_0f07, 0 } } },
3514 { "xcrypt-ofb", { { OP_0f07, 0 } } },
4e7d34a6 3515 },
1ceb70f8 3516 /* REG_0FAE */
4e7d34a6 3517 {
1ceb70f8
L
3518 { MOD_TABLE (MOD_0FAE_REG_0) },
3519 { MOD_TABLE (MOD_0FAE_REG_1) },
3520 { MOD_TABLE (MOD_0FAE_REG_2) },
3521 { MOD_TABLE (MOD_0FAE_REG_3) },
475a2301 3522 { MOD_TABLE (MOD_0FAE_REG_4) },
1ceb70f8
L
3523 { MOD_TABLE (MOD_0FAE_REG_5) },
3524 { MOD_TABLE (MOD_0FAE_REG_6) },
3525 { MOD_TABLE (MOD_0FAE_REG_7) },
252b5132 3526 },
1ceb70f8 3527 /* REG_0FBA */
252b5132 3528 {
592d1631
L
3529 { Bad_Opcode },
3530 { Bad_Opcode },
3531 { Bad_Opcode },
3532 { Bad_Opcode },
4e7d34a6 3533 { "btQ", { Ev, Ib } },
42164a71
L
3534 { "btsQ", { Evh1, Ib } },
3535 { "btrQ", { Evh1, Ib } },
3536 { "btcQ", { Evh1, Ib } },
c608c12e 3537 },
1ceb70f8 3538 /* REG_0FC7 */
c608c12e 3539 {
592d1631 3540 { Bad_Opcode },
4e7d34a6 3541 { "cmpxchg8b", { { CMPXCHG8B_Fixup, q_mode } } },
592d1631 3542 { Bad_Opcode },
963f3586
IT
3543 { MOD_TABLE (MOD_0FC7_REG_3) },
3544 { MOD_TABLE (MOD_0FC7_REG_4) },
3545 { MOD_TABLE (MOD_0FC7_REG_5) },
1ceb70f8
L
3546 { MOD_TABLE (MOD_0FC7_REG_6) },
3547 { MOD_TABLE (MOD_0FC7_REG_7) },
252b5132 3548 },
592a252b 3549 /* REG_VEX_0F71 */
c0f3af97 3550 {
592d1631
L
3551 { Bad_Opcode },
3552 { Bad_Opcode },
592a252b 3553 { MOD_TABLE (MOD_VEX_0F71_REG_2) },
592d1631 3554 { Bad_Opcode },
592a252b 3555 { MOD_TABLE (MOD_VEX_0F71_REG_4) },
592d1631 3556 { Bad_Opcode },
592a252b 3557 { MOD_TABLE (MOD_VEX_0F71_REG_6) },
c0f3af97 3558 },
592a252b 3559 /* REG_VEX_0F72 */
c0f3af97 3560 {
592d1631
L
3561 { Bad_Opcode },
3562 { Bad_Opcode },
592a252b 3563 { MOD_TABLE (MOD_VEX_0F72_REG_2) },
592d1631 3564 { Bad_Opcode },
592a252b 3565 { MOD_TABLE (MOD_VEX_0F72_REG_4) },
592d1631 3566 { Bad_Opcode },
592a252b 3567 { MOD_TABLE (MOD_VEX_0F72_REG_6) },
c0f3af97 3568 },
592a252b 3569 /* REG_VEX_0F73 */
c0f3af97 3570 {
592d1631
L
3571 { Bad_Opcode },
3572 { Bad_Opcode },
592a252b
L
3573 { MOD_TABLE (MOD_VEX_0F73_REG_2) },
3574 { MOD_TABLE (MOD_VEX_0F73_REG_3) },
592d1631
L
3575 { Bad_Opcode },
3576 { Bad_Opcode },
592a252b
L
3577 { MOD_TABLE (MOD_VEX_0F73_REG_6) },
3578 { MOD_TABLE (MOD_VEX_0F73_REG_7) },
c0f3af97 3579 },
592a252b 3580 /* REG_VEX_0FAE */
c0f3af97 3581 {
592d1631
L
3582 { Bad_Opcode },
3583 { Bad_Opcode },
592a252b
L
3584 { MOD_TABLE (MOD_VEX_0FAE_REG_2) },
3585 { MOD_TABLE (MOD_VEX_0FAE_REG_3) },
c0f3af97 3586 },
f12dc422
L
3587 /* REG_VEX_0F38F3 */
3588 {
3589 { Bad_Opcode },
3590 { PREFIX_TABLE (PREFIX_VEX_0F38F3_REG_1) },
3591 { PREFIX_TABLE (PREFIX_VEX_0F38F3_REG_2) },
3592 { PREFIX_TABLE (PREFIX_VEX_0F38F3_REG_3) },
3593 },
f88c9eb0
SP
3594 /* REG_XOP_LWPCB */
3595 {
3596 { "llwpcb", { { OP_LWPCB_E, 0 } } },
3597 { "slwpcb", { { OP_LWPCB_E, 0 } } },
f88c9eb0
SP
3598 },
3599 /* REG_XOP_LWP */
3600 {
ce7d077e
SP
3601 { "lwpins", { { OP_LWP_E, 0 }, Ed, Iq } },
3602 { "lwpval", { { OP_LWP_E, 0 }, Ed, Iq } },
f88c9eb0 3603 },
2a2a0f38
QN
3604 /* REG_XOP_TBM_01 */
3605 {
3606 { Bad_Opcode },
3607 { "blcfill", { { OP_LWP_E, 0 }, Ev } },
3608 { "blsfill", { { OP_LWP_E, 0 }, Ev } },
3609 { "blcs", { { OP_LWP_E, 0 }, Ev } },
3610 { "tzmsk", { { OP_LWP_E, 0 }, Ev } },
3611 { "blcic", { { OP_LWP_E, 0 }, Ev } },
3612 { "blsic", { { OP_LWP_E, 0 }, Ev } },
3613 { "t1mskc", { { OP_LWP_E, 0 }, Ev } },
3614 },
3615 /* REG_XOP_TBM_02 */
3616 {
3617 { Bad_Opcode },
3618 { "blcmsk", { { OP_LWP_E, 0 }, Ev } },
3619 { Bad_Opcode },
3620 { Bad_Opcode },
3621 { Bad_Opcode },
3622 { Bad_Opcode },
3623 { "blci", { { OP_LWP_E, 0 }, Ev } },
3624 },
43234a1e
L
3625#define NEED_REG_TABLE
3626#include "i386-dis-evex.h"
3627#undef NEED_REG_TABLE
4e7d34a6
L
3628};
3629
1ceb70f8
L
3630static const struct dis386 prefix_table[][4] = {
3631 /* PREFIX_90 */
252b5132 3632 {
4e7d34a6
L
3633 { "xchgS", { { NOP_Fixup1, eAX_reg }, { NOP_Fixup2, eAX_reg } } },
3634 { "pause", { XX } },
3635 { "xchgS", { { NOP_Fixup1, eAX_reg }, { NOP_Fixup2, eAX_reg } } },
0f10071e 3636 },
4e7d34a6 3637
1ceb70f8 3638 /* PREFIX_0F10 */
cc0ec051 3639 {
4e7d34a6
L
3640 { "movups", { XM, EXx } },
3641 { "movss", { XM, EXd } },
3642 { "movupd", { XM, EXx } },
3643 { "movsd", { XM, EXq } },
30d1c836 3644 },
4e7d34a6 3645
1ceb70f8 3646 /* PREFIX_0F11 */
30d1c836 3647 {
b6169b20 3648 { "movups", { EXxS, XM } },
fa99fab2 3649 { "movss", { EXdS, XM } },
b6169b20 3650 { "movupd", { EXxS, XM } },
fa99fab2 3651 { "movsd", { EXqS, XM } },
4e7d34a6 3652 },
252b5132 3653
1ceb70f8 3654 /* PREFIX_0F12 */
c608c12e 3655 {
1ceb70f8 3656 { MOD_TABLE (MOD_0F12_PREFIX_0) },
4e7d34a6
L
3657 { "movsldup", { XM, EXx } },
3658 { "movlpd", { XM, EXq } },
3659 { "movddup", { XM, EXq } },
c608c12e 3660 },
4e7d34a6 3661
1ceb70f8 3662 /* PREFIX_0F16 */
c608c12e 3663 {
1ceb70f8 3664 { MOD_TABLE (MOD_0F16_PREFIX_0) },
4e7d34a6
L
3665 { "movshdup", { XM, EXx } },
3666 { "movhpd", { XM, EXq } },
c608c12e 3667 },
4e7d34a6 3668
7e8b059b
L
3669 /* PREFIX_0F1A */
3670 {
3671 { MOD_TABLE (MOD_0F1A_PREFIX_0) },
3672 { "bndcl", { Gbnd, Ev_bnd } },
3673 { "bndmov", { Gbnd, Ebnd } },
3674 { "bndcu", { Gbnd, Ev_bnd } },
3675 },
3676
3677 /* PREFIX_0F1B */
3678 {
3679 { MOD_TABLE (MOD_0F1B_PREFIX_0) },
3680 { MOD_TABLE (MOD_0F1B_PREFIX_1) },
3681 { "bndmov", { Ebnd, Gbnd } },
3682 { "bndcn", { Gbnd, Ev_bnd } },
3683 },
3684
1ceb70f8 3685 /* PREFIX_0F2A */
c608c12e 3686 {
09335d05 3687 { "cvtpi2ps", { XM, EMCq } },
98b528ac 3688 { "cvtsi2ss%LQ", { XM, Ev } },
09335d05 3689 { "cvtpi2pd", { XM, EMCq } },
98b528ac 3690 { "cvtsi2sd%LQ", { XM, Ev } },
c608c12e 3691 },
4e7d34a6 3692
1ceb70f8 3693 /* PREFIX_0F2B */
c608c12e 3694 {
75c135a8
L
3695 { MOD_TABLE (MOD_0F2B_PREFIX_0) },
3696 { MOD_TABLE (MOD_0F2B_PREFIX_1) },
3697 { MOD_TABLE (MOD_0F2B_PREFIX_2) },
3698 { MOD_TABLE (MOD_0F2B_PREFIX_3) },
c608c12e 3699 },
4e7d34a6 3700
1ceb70f8 3701 /* PREFIX_0F2C */
c608c12e 3702 {
09335d05
L
3703 { "cvttps2pi", { MXC, EXq } },
3704 { "cvttss2siY", { Gv, EXd } },
09a2c6cf 3705 { "cvttpd2pi", { MXC, EXx } },
09335d05 3706 { "cvttsd2siY", { Gv, EXq } },
c608c12e 3707 },
4e7d34a6 3708
1ceb70f8 3709 /* PREFIX_0F2D */
c608c12e 3710 {
4e7d34a6
L
3711 { "cvtps2pi", { MXC, EXq } },
3712 { "cvtss2siY", { Gv, EXd } },
3713 { "cvtpd2pi", { MXC, EXx } },
3714 { "cvtsd2siY", { Gv, EXq } },
c608c12e 3715 },
4e7d34a6 3716
1ceb70f8 3717 /* PREFIX_0F2E */
c608c12e 3718 {
7bb15c6f 3719 { "ucomiss",{ XM, EXd } },
592d1631 3720 { Bad_Opcode },
7bb15c6f 3721 { "ucomisd",{ XM, EXq } },
c608c12e 3722 },
4e7d34a6 3723
1ceb70f8 3724 /* PREFIX_0F2F */
c608c12e 3725 {
4e7d34a6 3726 { "comiss", { XM, EXd } },
592d1631 3727 { Bad_Opcode },
4e7d34a6 3728 { "comisd", { XM, EXq } },
c608c12e 3729 },
4e7d34a6 3730
1ceb70f8 3731 /* PREFIX_0F51 */
c608c12e 3732 {
4e7d34a6
L
3733 { "sqrtps", { XM, EXx } },
3734 { "sqrtss", { XM, EXd } },
3735 { "sqrtpd", { XM, EXx } },
3736 { "sqrtsd", { XM, EXq } },
c608c12e 3737 },
4e7d34a6 3738
1ceb70f8 3739 /* PREFIX_0F52 */
c608c12e 3740 {
4e7d34a6
L
3741 { "rsqrtps",{ XM, EXx } },
3742 { "rsqrtss",{ XM, EXd } },
c608c12e 3743 },
4e7d34a6 3744
1ceb70f8 3745 /* PREFIX_0F53 */
c608c12e 3746 {
4e7d34a6
L
3747 { "rcpps", { XM, EXx } },
3748 { "rcpss", { XM, EXd } },
c608c12e 3749 },
4e7d34a6 3750
1ceb70f8 3751 /* PREFIX_0F58 */
c608c12e 3752 {
4e7d34a6
L
3753 { "addps", { XM, EXx } },
3754 { "addss", { XM, EXd } },
3755 { "addpd", { XM, EXx } },
3756 { "addsd", { XM, EXq } },
c608c12e 3757 },
4e7d34a6 3758
1ceb70f8 3759 /* PREFIX_0F59 */
c608c12e 3760 {
4e7d34a6
L
3761 { "mulps", { XM, EXx } },
3762 { "mulss", { XM, EXd } },
3763 { "mulpd", { XM, EXx } },
3764 { "mulsd", { XM, EXq } },
041bd2e0 3765 },
4e7d34a6 3766
1ceb70f8 3767 /* PREFIX_0F5A */
041bd2e0 3768 {
4e7d34a6
L
3769 { "cvtps2pd", { XM, EXq } },
3770 { "cvtss2sd", { XM, EXd } },
3771 { "cvtpd2ps", { XM, EXx } },
3772 { "cvtsd2ss", { XM, EXq } },
041bd2e0 3773 },
4e7d34a6 3774
1ceb70f8 3775 /* PREFIX_0F5B */
041bd2e0 3776 {
09a2c6cf
L
3777 { "cvtdq2ps", { XM, EXx } },
3778 { "cvttps2dq", { XM, EXx } },
3779 { "cvtps2dq", { XM, EXx } },
041bd2e0 3780 },
4e7d34a6 3781
1ceb70f8 3782 /* PREFIX_0F5C */
041bd2e0 3783 {
4e7d34a6
L
3784 { "subps", { XM, EXx } },
3785 { "subss", { XM, EXd } },
3786 { "subpd", { XM, EXx } },
3787 { "subsd", { XM, EXq } },
041bd2e0 3788 },
4e7d34a6 3789
1ceb70f8 3790 /* PREFIX_0F5D */
041bd2e0 3791 {
4e7d34a6
L
3792 { "minps", { XM, EXx } },
3793 { "minss", { XM, EXd } },
3794 { "minpd", { XM, EXx } },
3795 { "minsd", { XM, EXq } },
041bd2e0 3796 },
4e7d34a6 3797
1ceb70f8 3798 /* PREFIX_0F5E */
041bd2e0 3799 {
4e7d34a6
L
3800 { "divps", { XM, EXx } },
3801 { "divss", { XM, EXd } },
3802 { "divpd", { XM, EXx } },
3803 { "divsd", { XM, EXq } },
041bd2e0 3804 },
4e7d34a6 3805
1ceb70f8 3806 /* PREFIX_0F5F */
041bd2e0 3807 {
4e7d34a6
L
3808 { "maxps", { XM, EXx } },
3809 { "maxss", { XM, EXd } },
3810 { "maxpd", { XM, EXx } },
3811 { "maxsd", { XM, EXq } },
041bd2e0 3812 },
4e7d34a6 3813
1ceb70f8 3814 /* PREFIX_0F60 */
041bd2e0 3815 {
4e7d34a6 3816 { "punpcklbw",{ MX, EMd } },
592d1631 3817 { Bad_Opcode },
4e7d34a6 3818 { "punpcklbw",{ MX, EMx } },
041bd2e0 3819 },
4e7d34a6 3820
1ceb70f8 3821 /* PREFIX_0F61 */
041bd2e0 3822 {
4e7d34a6 3823 { "punpcklwd",{ MX, EMd } },
592d1631 3824 { Bad_Opcode },
4e7d34a6 3825 { "punpcklwd",{ MX, EMx } },
041bd2e0 3826 },
4e7d34a6 3827
1ceb70f8 3828 /* PREFIX_0F62 */
041bd2e0 3829 {
4e7d34a6 3830 { "punpckldq",{ MX, EMd } },
592d1631 3831 { Bad_Opcode },
4e7d34a6 3832 { "punpckldq",{ MX, EMx } },
041bd2e0 3833 },
4e7d34a6 3834
1ceb70f8 3835 /* PREFIX_0F6C */
041bd2e0 3836 {
592d1631
L
3837 { Bad_Opcode },
3838 { Bad_Opcode },
4e7d34a6 3839 { "punpcklqdq", { XM, EXx } },
0f17484f 3840 },
4e7d34a6 3841
1ceb70f8 3842 /* PREFIX_0F6D */
0f17484f 3843 {
592d1631
L
3844 { Bad_Opcode },
3845 { Bad_Opcode },
4e7d34a6 3846 { "punpckhqdq", { XM, EXx } },
041bd2e0 3847 },
4e7d34a6 3848
1ceb70f8 3849 /* PREFIX_0F6F */
ca164297 3850 {
4e7d34a6
L
3851 { "movq", { MX, EM } },
3852 { "movdqu", { XM, EXx } },
3853 { "movdqa", { XM, EXx } },
ca164297 3854 },
4e7d34a6 3855
1ceb70f8 3856 /* PREFIX_0F70 */
4e7d34a6
L
3857 {
3858 { "pshufw", { MX, EM, Ib } },
3859 { "pshufhw",{ XM, EXx, Ib } },
3860 { "pshufd", { XM, EXx, Ib } },
3861 { "pshuflw",{ XM, EXx, Ib } },
3862 },
3863
92fddf8e
L
3864 /* PREFIX_0F73_REG_3 */
3865 {
592d1631
L
3866 { Bad_Opcode },
3867 { Bad_Opcode },
92fddf8e 3868 { "psrldq", { XS, Ib } },
92fddf8e
L
3869 },
3870
3871 /* PREFIX_0F73_REG_7 */
3872 {
592d1631
L
3873 { Bad_Opcode },
3874 { Bad_Opcode },
92fddf8e 3875 { "pslldq", { XS, Ib } },
92fddf8e
L
3876 },
3877
1ceb70f8 3878 /* PREFIX_0F78 */
4e7d34a6
L
3879 {
3880 {"vmread", { Em, Gm } },
592d1631 3881 { Bad_Opcode },
4e7d34a6
L
3882 {"extrq", { XS, Ib, Ib } },
3883 {"insertq", { XM, XS, Ib, Ib } },
3884 },
3885
1ceb70f8 3886 /* PREFIX_0F79 */
4e7d34a6
L
3887 {
3888 {"vmwrite", { Gm, Em } },
592d1631 3889 { Bad_Opcode },
4e7d34a6
L
3890 {"extrq", { XM, XS } },
3891 {"insertq", { XM, XS } },
3892 },
3893
1ceb70f8 3894 /* PREFIX_0F7C */
ca164297 3895 {
592d1631
L
3896 { Bad_Opcode },
3897 { Bad_Opcode },
09a2c6cf
L
3898 { "haddpd", { XM, EXx } },
3899 { "haddps", { XM, EXx } },
ca164297 3900 },
4e7d34a6 3901
1ceb70f8 3902 /* PREFIX_0F7D */
ca164297 3903 {
592d1631
L
3904 { Bad_Opcode },
3905 { Bad_Opcode },
09a2c6cf
L
3906 { "hsubpd", { XM, EXx } },
3907 { "hsubps", { XM, EXx } },
ca164297 3908 },
4e7d34a6 3909
1ceb70f8 3910 /* PREFIX_0F7E */
ca164297 3911 {
4e7d34a6
L
3912 { "movK", { Edq, MX } },
3913 { "movq", { XM, EXq } },
3914 { "movK", { Edq, XM } },
ca164297 3915 },
4e7d34a6 3916
1ceb70f8 3917 /* PREFIX_0F7F */
ca164297 3918 {
b6169b20
L
3919 { "movq", { EMS, MX } },
3920 { "movdqu", { EXxS, XM } },
3921 { "movdqa", { EXxS, XM } },
ca164297 3922 },
4e7d34a6 3923
c7b8aa3a
L
3924 /* PREFIX_0FAE_REG_0 */
3925 {
3926 { Bad_Opcode },
3927 { "rdfsbase", { Ev } },
3928 },
3929
3930 /* PREFIX_0FAE_REG_1 */
3931 {
3932 { Bad_Opcode },
3933 { "rdgsbase", { Ev } },
3934 },
3935
3936 /* PREFIX_0FAE_REG_2 */
3937 {
3938 { Bad_Opcode },
3939 { "wrfsbase", { Ev } },
3940 },
3941
3942 /* PREFIX_0FAE_REG_3 */
3943 {
3944 { Bad_Opcode },
3945 { "wrgsbase", { Ev } },
3946 },
3947
963f3586
IT
3948 /* PREFIX_0FAE_REG_7 */
3949 {
3950 { "clflush", { Mb } },
3951 { Bad_Opcode },
3952 { "clflushopt", { Mb } },
3953 },
3954
1ceb70f8 3955 /* PREFIX_0FB8 */
ca164297 3956 {
592d1631 3957 { Bad_Opcode },
4e7d34a6 3958 { "popcntS", { Gv, Ev } },
ca164297 3959 },
4e7d34a6 3960
f12dc422
L
3961 /* PREFIX_0FBC */
3962 {
3963 { "bsfS", { Gv, Ev } },
3964 { "tzcntS", { Gv, Ev } },
3965 { "bsfS", { Gv, Ev } },
3966 },
3967
1ceb70f8 3968 /* PREFIX_0FBD */
050dfa73 3969 {
4e7d34a6
L
3970 { "bsrS", { Gv, Ev } },
3971 { "lzcntS", { Gv, Ev } },
3972 { "bsrS", { Gv, Ev } },
050dfa73
MM
3973 },
3974
1ceb70f8 3975 /* PREFIX_0FC2 */
050dfa73 3976 {
ad19981d
L
3977 { "cmpps", { XM, EXx, CMP } },
3978 { "cmpss", { XM, EXd, CMP } },
3979 { "cmppd", { XM, EXx, CMP } },
3980 { "cmpsd", { XM, EXq, CMP } },
050dfa73 3981 },
246c51aa 3982
4ee52178
L
3983 /* PREFIX_0FC3 */
3984 {
3985 { "movntiS", { Ma, Gv } },
4ee52178
L
3986 },
3987
92fddf8e
L
3988 /* PREFIX_0FC7_REG_6 */
3989 {
3990 { "vmptrld",{ Mq } },
3991 { "vmxon", { Mq } },
3992 { "vmclear",{ Mq } },
92fddf8e
L
3993 },
3994
1ceb70f8 3995 /* PREFIX_0FD0 */
050dfa73 3996 {
592d1631
L
3997 { Bad_Opcode },
3998 { Bad_Opcode },
4e7d34a6
L
3999 { "addsubpd", { XM, EXx } },
4000 { "addsubps", { XM, EXx } },
246c51aa 4001 },
050dfa73 4002
1ceb70f8 4003 /* PREFIX_0FD6 */
050dfa73 4004 {
592d1631 4005 { Bad_Opcode },
4e7d34a6 4006 { "movq2dq",{ XM, MS } },
b6169b20 4007 { "movq", { EXqS, XM } },
4e7d34a6 4008 { "movdq2q",{ MX, XS } },
050dfa73
MM
4009 },
4010
1ceb70f8 4011 /* PREFIX_0FE6 */
7918206c 4012 {
592d1631 4013 { Bad_Opcode },
4e7d34a6
L
4014 { "cvtdq2pd", { XM, EXq } },
4015 { "cvttpd2dq", { XM, EXx } },
4016 { "cvtpd2dq", { XM, EXx } },
7918206c 4017 },
8b38ad71 4018
1ceb70f8 4019 /* PREFIX_0FE7 */
8b38ad71 4020 {
4ee52178 4021 { "movntq", { Mq, MX } },
592d1631 4022 { Bad_Opcode },
75c135a8 4023 { MOD_TABLE (MOD_0FE7_PREFIX_2) },
4e7d34a6
L
4024 },
4025
1ceb70f8 4026 /* PREFIX_0FF0 */
4e7d34a6 4027 {
592d1631
L
4028 { Bad_Opcode },
4029 { Bad_Opcode },
4030 { Bad_Opcode },
1ceb70f8 4031 { MOD_TABLE (MOD_0FF0_PREFIX_3) },
4e7d34a6
L
4032 },
4033
1ceb70f8 4034 /* PREFIX_0FF7 */
4e7d34a6
L
4035 {
4036 { "maskmovq", { MX, MS } },
592d1631 4037 { Bad_Opcode },
4e7d34a6 4038 { "maskmovdqu", { XM, XS } },
8b38ad71 4039 },
42903f7f 4040
1ceb70f8 4041 /* PREFIX_0F3810 */
42903f7f 4042 {
592d1631
L
4043 { Bad_Opcode },
4044 { Bad_Opcode },
88a94849 4045 { "pblendvb", { XM, EXx, XMM0 } },
42903f7f
L
4046 },
4047
1ceb70f8 4048 /* PREFIX_0F3814 */
42903f7f 4049 {
592d1631
L
4050 { Bad_Opcode },
4051 { Bad_Opcode },
88a94849 4052 { "blendvps", { XM, EXx, XMM0 } },
42903f7f
L
4053 },
4054
1ceb70f8 4055 /* PREFIX_0F3815 */
42903f7f 4056 {
592d1631
L
4057 { Bad_Opcode },
4058 { Bad_Opcode },
09a2c6cf 4059 { "blendvpd", { XM, EXx, XMM0 } },
42903f7f
L
4060 },
4061
1ceb70f8 4062 /* PREFIX_0F3817 */
42903f7f 4063 {
592d1631
L
4064 { Bad_Opcode },
4065 { Bad_Opcode },
09a2c6cf 4066 { "ptest", { XM, EXx } },
42903f7f
L
4067 },
4068
1ceb70f8 4069 /* PREFIX_0F3820 */
42903f7f 4070 {
592d1631
L
4071 { Bad_Opcode },
4072 { Bad_Opcode },
8976381e 4073 { "pmovsxbw", { XM, EXq } },
42903f7f
L
4074 },
4075
1ceb70f8 4076 /* PREFIX_0F3821 */
42903f7f 4077 {
592d1631
L
4078 { Bad_Opcode },
4079 { Bad_Opcode },
8976381e 4080 { "pmovsxbd", { XM, EXd } },
42903f7f
L
4081 },
4082
1ceb70f8 4083 /* PREFIX_0F3822 */
42903f7f 4084 {
592d1631
L
4085 { Bad_Opcode },
4086 { Bad_Opcode },
8976381e 4087 { "pmovsxbq", { XM, EXw } },
42903f7f
L
4088 },
4089
1ceb70f8 4090 /* PREFIX_0F3823 */
42903f7f 4091 {
592d1631
L
4092 { Bad_Opcode },
4093 { Bad_Opcode },
8976381e 4094 { "pmovsxwd", { XM, EXq } },
42903f7f
L
4095 },
4096
1ceb70f8 4097 /* PREFIX_0F3824 */
42903f7f 4098 {
592d1631
L
4099 { Bad_Opcode },
4100 { Bad_Opcode },
8976381e 4101 { "pmovsxwq", { XM, EXd } },
42903f7f
L
4102 },
4103
1ceb70f8 4104 /* PREFIX_0F3825 */
42903f7f 4105 {
592d1631
L
4106 { Bad_Opcode },
4107 { Bad_Opcode },
8976381e 4108 { "pmovsxdq", { XM, EXq } },
42903f7f
L
4109 },
4110
1ceb70f8 4111 /* PREFIX_0F3828 */
42903f7f 4112 {
592d1631
L
4113 { Bad_Opcode },
4114 { Bad_Opcode },
09a2c6cf 4115 { "pmuldq", { XM, EXx } },
42903f7f
L
4116 },
4117
1ceb70f8 4118 /* PREFIX_0F3829 */
42903f7f 4119 {
592d1631
L
4120 { Bad_Opcode },
4121 { Bad_Opcode },
09a2c6cf 4122 { "pcmpeqq", { XM, EXx } },
42903f7f
L
4123 },
4124
1ceb70f8 4125 /* PREFIX_0F382A */
42903f7f 4126 {
592d1631
L
4127 { Bad_Opcode },
4128 { Bad_Opcode },
75c135a8 4129 { MOD_TABLE (MOD_0F382A_PREFIX_2) },
42903f7f
L
4130 },
4131
1ceb70f8 4132 /* PREFIX_0F382B */
42903f7f 4133 {
592d1631
L
4134 { Bad_Opcode },
4135 { Bad_Opcode },
09a2c6cf 4136 { "packusdw", { XM, EXx } },
42903f7f
L
4137 },
4138
1ceb70f8 4139 /* PREFIX_0F3830 */
42903f7f 4140 {
592d1631
L
4141 { Bad_Opcode },
4142 { Bad_Opcode },
8976381e 4143 { "pmovzxbw", { XM, EXq } },
42903f7f
L
4144 },
4145
1ceb70f8 4146 /* PREFIX_0F3831 */
42903f7f 4147 {
592d1631
L
4148 { Bad_Opcode },
4149 { Bad_Opcode },
8976381e 4150 { "pmovzxbd", { XM, EXd } },
42903f7f
L
4151 },
4152
1ceb70f8 4153 /* PREFIX_0F3832 */
42903f7f 4154 {
592d1631
L
4155 { Bad_Opcode },
4156 { Bad_Opcode },
8976381e 4157 { "pmovzxbq", { XM, EXw } },
42903f7f
L
4158 },
4159
1ceb70f8 4160 /* PREFIX_0F3833 */
42903f7f 4161 {
592d1631
L
4162 { Bad_Opcode },
4163 { Bad_Opcode },
8976381e 4164 { "pmovzxwd", { XM, EXq } },
42903f7f
L
4165 },
4166
1ceb70f8 4167 /* PREFIX_0F3834 */
42903f7f 4168 {
592d1631
L
4169 { Bad_Opcode },
4170 { Bad_Opcode },
8976381e 4171 { "pmovzxwq", { XM, EXd } },
42903f7f
L
4172 },
4173
1ceb70f8 4174 /* PREFIX_0F3835 */
42903f7f 4175 {
592d1631
L
4176 { Bad_Opcode },
4177 { Bad_Opcode },
8976381e 4178 { "pmovzxdq", { XM, EXq } },
42903f7f
L
4179 },
4180
1ceb70f8 4181 /* PREFIX_0F3837 */
4e7d34a6 4182 {
592d1631
L
4183 { Bad_Opcode },
4184 { Bad_Opcode },
4e7d34a6 4185 { "pcmpgtq", { XM, EXx } },
4e7d34a6
L
4186 },
4187
1ceb70f8 4188 /* PREFIX_0F3838 */
42903f7f 4189 {
592d1631
L
4190 { Bad_Opcode },
4191 { Bad_Opcode },
09a2c6cf 4192 { "pminsb", { XM, EXx } },
42903f7f
L
4193 },
4194
1ceb70f8 4195 /* PREFIX_0F3839 */
42903f7f 4196 {
592d1631
L
4197 { Bad_Opcode },
4198 { Bad_Opcode },
09a2c6cf 4199 { "pminsd", { XM, EXx } },
42903f7f
L
4200 },
4201
1ceb70f8 4202 /* PREFIX_0F383A */
42903f7f 4203 {
592d1631
L
4204 { Bad_Opcode },
4205 { Bad_Opcode },
09a2c6cf 4206 { "pminuw", { XM, EXx } },
42903f7f
L
4207 },
4208
1ceb70f8 4209 /* PREFIX_0F383B */
42903f7f 4210 {
592d1631
L
4211 { Bad_Opcode },
4212 { Bad_Opcode },
09a2c6cf 4213 { "pminud", { XM, EXx } },
42903f7f
L
4214 },
4215
1ceb70f8 4216 /* PREFIX_0F383C */
42903f7f 4217 {
592d1631
L
4218 { Bad_Opcode },
4219 { Bad_Opcode },
09a2c6cf 4220 { "pmaxsb", { XM, EXx } },
42903f7f
L
4221 },
4222
1ceb70f8 4223 /* PREFIX_0F383D */
42903f7f 4224 {
592d1631
L
4225 { Bad_Opcode },
4226 { Bad_Opcode },
09a2c6cf 4227 { "pmaxsd", { XM, EXx } },
42903f7f
L
4228 },
4229
1ceb70f8 4230 /* PREFIX_0F383E */
42903f7f 4231 {
592d1631
L
4232 { Bad_Opcode },
4233 { Bad_Opcode },
09a2c6cf 4234 { "pmaxuw", { XM, EXx } },
42903f7f
L
4235 },
4236
1ceb70f8 4237 /* PREFIX_0F383F */
42903f7f 4238 {
592d1631
L
4239 { Bad_Opcode },
4240 { Bad_Opcode },
09a2c6cf 4241 { "pmaxud", { XM, EXx } },
42903f7f
L
4242 },
4243
1ceb70f8 4244 /* PREFIX_0F3840 */
42903f7f 4245 {
592d1631
L
4246 { Bad_Opcode },
4247 { Bad_Opcode },
09a2c6cf 4248 { "pmulld", { XM, EXx } },
42903f7f
L
4249 },
4250
1ceb70f8 4251 /* PREFIX_0F3841 */
42903f7f 4252 {
592d1631
L
4253 { Bad_Opcode },
4254 { Bad_Opcode },
09a2c6cf 4255 { "phminposuw", { XM, EXx } },
42903f7f
L
4256 },
4257
f1f8f695
L
4258 /* PREFIX_0F3880 */
4259 {
592d1631
L
4260 { Bad_Opcode },
4261 { Bad_Opcode },
f1f8f695 4262 { "invept", { Gm, Mo } },
f1f8f695
L
4263 },
4264
4265 /* PREFIX_0F3881 */
4266 {
592d1631
L
4267 { Bad_Opcode },
4268 { Bad_Opcode },
f1f8f695 4269 { "invvpid", { Gm, Mo } },
f1f8f695
L
4270 },
4271
6c30d220
L
4272 /* PREFIX_0F3882 */
4273 {
4274 { Bad_Opcode },
4275 { Bad_Opcode },
4276 { "invpcid", { Gm, M } },
4277 },
4278
a0046408
L
4279 /* PREFIX_0F38C8 */
4280 {
4281 { "sha1nexte", { XM, EXxmm } },
4282 },
4283
4284 /* PREFIX_0F38C9 */
4285 {
4286 { "sha1msg1", { XM, EXxmm } },
4287 },
4288
4289 /* PREFIX_0F38CA */
4290 {
4291 { "sha1msg2", { XM, EXxmm } },
4292 },
4293
4294 /* PREFIX_0F38CB */
4295 {
4296 { "sha256rnds2", { XM, EXxmm, XMM0 } },
4297 },
4298
4299 /* PREFIX_0F38CC */
4300 {
4301 { "sha256msg1", { XM, EXxmm } },
4302 },
4303
4304 /* PREFIX_0F38CD */
4305 {
4306 { "sha256msg2", { XM, EXxmm } },
4307 },
4308
c0f3af97
L
4309 /* PREFIX_0F38DB */
4310 {
592d1631
L
4311 { Bad_Opcode },
4312 { Bad_Opcode },
c0f3af97 4313 { "aesimc", { XM, EXx } },
c0f3af97
L
4314 },
4315
4316 /* PREFIX_0F38DC */
4317 {
592d1631
L
4318 { Bad_Opcode },
4319 { Bad_Opcode },
c0f3af97 4320 { "aesenc", { XM, EXx } },
c0f3af97
L
4321 },
4322
4323 /* PREFIX_0F38DD */
4324 {
592d1631
L
4325 { Bad_Opcode },
4326 { Bad_Opcode },
c0f3af97 4327 { "aesenclast", { XM, EXx } },
c0f3af97
L
4328 },
4329
4330 /* PREFIX_0F38DE */
4331 {
592d1631
L
4332 { Bad_Opcode },
4333 { Bad_Opcode },
c0f3af97 4334 { "aesdec", { XM, EXx } },
c0f3af97
L
4335 },
4336
4337 /* PREFIX_0F38DF */
4338 {
592d1631
L
4339 { Bad_Opcode },
4340 { Bad_Opcode },
c0f3af97 4341 { "aesdeclast", { XM, EXx } },
c0f3af97
L
4342 },
4343
1ceb70f8 4344 /* PREFIX_0F38F0 */
4e7d34a6 4345 {
f1f8f695 4346 { "movbeS", { Gv, { MOVBE_Fixup, v_mode } } },
592d1631 4347 { Bad_Opcode },
f1f8f695 4348 { "movbeS", { Gv, { MOVBE_Fixup, v_mode } } },
7bb15c6f 4349 { "crc32", { Gdq, { CRC32_Fixup, b_mode } } },
4e7d34a6
L
4350 },
4351
1ceb70f8 4352 /* PREFIX_0F38F1 */
4e7d34a6 4353 {
f1f8f695 4354 { "movbeS", { { MOVBE_Fixup, v_mode }, Gv } },
592d1631 4355 { Bad_Opcode },
f1f8f695 4356 { "movbeS", { { MOVBE_Fixup, v_mode }, Gv } },
7bb15c6f 4357 { "crc32", { Gdq, { CRC32_Fixup, v_mode } } },
4e7d34a6
L
4358 },
4359
e2e1fcde
L
4360 /* PREFIX_0F38F6 */
4361 {
4362 { Bad_Opcode },
4363 { "adoxS", { Gdq, Edq} },
4364 { "adcxS", { Gdq, Edq} },
4365 { Bad_Opcode },
4366 },
4367
1ceb70f8 4368 /* PREFIX_0F3A08 */
42903f7f 4369 {
592d1631
L
4370 { Bad_Opcode },
4371 { Bad_Opcode },
09a2c6cf 4372 { "roundps", { XM, EXx, Ib } },
42903f7f
L
4373 },
4374
1ceb70f8 4375 /* PREFIX_0F3A09 */
42903f7f 4376 {
592d1631
L
4377 { Bad_Opcode },
4378 { Bad_Opcode },
09a2c6cf 4379 { "roundpd", { XM, EXx, Ib } },
42903f7f
L
4380 },
4381
1ceb70f8 4382 /* PREFIX_0F3A0A */
42903f7f 4383 {
592d1631
L
4384 { Bad_Opcode },
4385 { Bad_Opcode },
09335d05 4386 { "roundss", { XM, EXd, Ib } },
42903f7f
L
4387 },
4388
1ceb70f8 4389 /* PREFIX_0F3A0B */
42903f7f 4390 {
592d1631
L
4391 { Bad_Opcode },
4392 { Bad_Opcode },
09335d05 4393 { "roundsd", { XM, EXq, Ib } },
42903f7f
L
4394 },
4395
1ceb70f8 4396 /* PREFIX_0F3A0C */
42903f7f 4397 {
592d1631
L
4398 { Bad_Opcode },
4399 { Bad_Opcode },
09a2c6cf 4400 { "blendps", { XM, EXx, Ib } },
42903f7f
L
4401 },
4402
1ceb70f8 4403 /* PREFIX_0F3A0D */
42903f7f 4404 {
592d1631
L
4405 { Bad_Opcode },
4406 { Bad_Opcode },
09a2c6cf 4407 { "blendpd", { XM, EXx, Ib } },
42903f7f
L
4408 },
4409
1ceb70f8 4410 /* PREFIX_0F3A0E */
42903f7f 4411 {
592d1631
L
4412 { Bad_Opcode },
4413 { Bad_Opcode },
09a2c6cf 4414 { "pblendw", { XM, EXx, Ib } },
42903f7f
L
4415 },
4416
1ceb70f8 4417 /* PREFIX_0F3A14 */
42903f7f 4418 {
592d1631
L
4419 { Bad_Opcode },
4420 { Bad_Opcode },
42903f7f 4421 { "pextrb", { Edqb, XM, Ib } },
42903f7f
L
4422 },
4423
1ceb70f8 4424 /* PREFIX_0F3A15 */
42903f7f 4425 {
592d1631
L
4426 { Bad_Opcode },
4427 { Bad_Opcode },
42903f7f 4428 { "pextrw", { Edqw, XM, Ib } },
42903f7f
L
4429 },
4430
1ceb70f8 4431 /* PREFIX_0F3A16 */
42903f7f 4432 {
592d1631
L
4433 { Bad_Opcode },
4434 { Bad_Opcode },
42903f7f 4435 { "pextrK", { Edq, XM, Ib } },
42903f7f
L
4436 },
4437
1ceb70f8 4438 /* PREFIX_0F3A17 */
42903f7f 4439 {
592d1631
L
4440 { Bad_Opcode },
4441 { Bad_Opcode },
42903f7f 4442 { "extractps", { Edqd, XM, Ib } },
42903f7f
L
4443 },
4444
1ceb70f8 4445 /* PREFIX_0F3A20 */
42903f7f 4446 {
592d1631
L
4447 { Bad_Opcode },
4448 { Bad_Opcode },
42903f7f 4449 { "pinsrb", { XM, Edqb, Ib } },
42903f7f
L
4450 },
4451
1ceb70f8 4452 /* PREFIX_0F3A21 */
42903f7f 4453 {
592d1631
L
4454 { Bad_Opcode },
4455 { Bad_Opcode },
8976381e 4456 { "insertps", { XM, EXd, Ib } },
42903f7f
L
4457 },
4458
1ceb70f8 4459 /* PREFIX_0F3A22 */
42903f7f 4460 {
592d1631
L
4461 { Bad_Opcode },
4462 { Bad_Opcode },
42903f7f 4463 { "pinsrK", { XM, Edq, Ib } },
42903f7f
L
4464 },
4465
1ceb70f8 4466 /* PREFIX_0F3A40 */
42903f7f 4467 {
592d1631
L
4468 { Bad_Opcode },
4469 { Bad_Opcode },
09a2c6cf 4470 { "dpps", { XM, EXx, Ib } },
42903f7f
L
4471 },
4472
1ceb70f8 4473 /* PREFIX_0F3A41 */
42903f7f 4474 {
592d1631
L
4475 { Bad_Opcode },
4476 { Bad_Opcode },
09a2c6cf 4477 { "dppd", { XM, EXx, Ib } },
42903f7f
L
4478 },
4479
1ceb70f8 4480 /* PREFIX_0F3A42 */
42903f7f 4481 {
592d1631
L
4482 { Bad_Opcode },
4483 { Bad_Opcode },
09a2c6cf 4484 { "mpsadbw", { XM, EXx, Ib } },
42903f7f 4485 },
381d071f 4486
c0f3af97
L
4487 /* PREFIX_0F3A44 */
4488 {
592d1631
L
4489 { Bad_Opcode },
4490 { Bad_Opcode },
c0f3af97 4491 { "pclmulqdq", { XM, EXx, PCLMUL } },
c0f3af97
L
4492 },
4493
1ceb70f8 4494 /* PREFIX_0F3A60 */
381d071f 4495 {
592d1631
L
4496 { Bad_Opcode },
4497 { Bad_Opcode },
4e7d34a6 4498 { "pcmpestrm", { XM, EXx, Ib } },
381d071f
L
4499 },
4500
1ceb70f8 4501 /* PREFIX_0F3A61 */
381d071f 4502 {
592d1631
L
4503 { Bad_Opcode },
4504 { Bad_Opcode },
4e7d34a6 4505 { "pcmpestri", { XM, EXx, Ib } },
381d071f
L
4506 },
4507
1ceb70f8 4508 /* PREFIX_0F3A62 */
381d071f 4509 {
592d1631
L
4510 { Bad_Opcode },
4511 { Bad_Opcode },
4e7d34a6 4512 { "pcmpistrm", { XM, EXx, Ib } },
381d071f
L
4513 },
4514
1ceb70f8 4515 /* PREFIX_0F3A63 */
381d071f 4516 {
592d1631
L
4517 { Bad_Opcode },
4518 { Bad_Opcode },
4e7d34a6 4519 { "pcmpistri", { XM, EXx, Ib } },
381d071f 4520 },
09a2c6cf 4521
a0046408
L
4522 /* PREFIX_0F3ACC */
4523 {
4524 { "sha1rnds4", { XM, EXxmm, Ib } },
4525 },
4526
c0f3af97 4527 /* PREFIX_0F3ADF */
09a2c6cf 4528 {
592d1631
L
4529 { Bad_Opcode },
4530 { Bad_Opcode },
c0f3af97 4531 { "aeskeygenassist", { XM, EXx, Ib } },
09a2c6cf
L
4532 },
4533
592a252b 4534 /* PREFIX_VEX_0F10 */
09a2c6cf 4535 {
592a252b
L
4536 { VEX_W_TABLE (VEX_W_0F10_P_0) },
4537 { VEX_LEN_TABLE (VEX_LEN_0F10_P_1) },
4538 { VEX_W_TABLE (VEX_W_0F10_P_2) },
4539 { VEX_LEN_TABLE (VEX_LEN_0F10_P_3) },
09a2c6cf
L
4540 },
4541
592a252b 4542 /* PREFIX_VEX_0F11 */
09a2c6cf 4543 {
592a252b
L
4544 { VEX_W_TABLE (VEX_W_0F11_P_0) },
4545 { VEX_LEN_TABLE (VEX_LEN_0F11_P_1) },
4546 { VEX_W_TABLE (VEX_W_0F11_P_2) },
4547 { VEX_LEN_TABLE (VEX_LEN_0F11_P_3) },
09a2c6cf
L
4548 },
4549
592a252b 4550 /* PREFIX_VEX_0F12 */
09a2c6cf 4551 {
592a252b
L
4552 { MOD_TABLE (MOD_VEX_0F12_PREFIX_0) },
4553 { VEX_W_TABLE (VEX_W_0F12_P_1) },
4554 { VEX_LEN_TABLE (VEX_LEN_0F12_P_2) },
4555 { VEX_W_TABLE (VEX_W_0F12_P_3) },
09a2c6cf
L
4556 },
4557
592a252b 4558 /* PREFIX_VEX_0F16 */
09a2c6cf 4559 {
592a252b
L
4560 { MOD_TABLE (MOD_VEX_0F16_PREFIX_0) },
4561 { VEX_W_TABLE (VEX_W_0F16_P_1) },
4562 { VEX_LEN_TABLE (VEX_LEN_0F16_P_2) },
5f754f58 4563 },
7c52e0e8 4564
592a252b 4565 /* PREFIX_VEX_0F2A */
5f754f58 4566 {
592d1631 4567 { Bad_Opcode },
592a252b 4568 { VEX_LEN_TABLE (VEX_LEN_0F2A_P_1) },
592d1631 4569 { Bad_Opcode },
592a252b 4570 { VEX_LEN_TABLE (VEX_LEN_0F2A_P_3) },
5f754f58 4571 },
7c52e0e8 4572
592a252b 4573 /* PREFIX_VEX_0F2C */
5f754f58 4574 {
592d1631 4575 { Bad_Opcode },
592a252b 4576 { VEX_LEN_TABLE (VEX_LEN_0F2C_P_1) },
592d1631 4577 { Bad_Opcode },
592a252b 4578 { VEX_LEN_TABLE (VEX_LEN_0F2C_P_3) },
5f754f58 4579 },
7c52e0e8 4580
592a252b 4581 /* PREFIX_VEX_0F2D */
7c52e0e8 4582 {
592d1631 4583 { Bad_Opcode },
592a252b 4584 { VEX_LEN_TABLE (VEX_LEN_0F2D_P_1) },
592d1631 4585 { Bad_Opcode },
592a252b 4586 { VEX_LEN_TABLE (VEX_LEN_0F2D_P_3) },
7c52e0e8
L
4587 },
4588
592a252b 4589 /* PREFIX_VEX_0F2E */
7c52e0e8 4590 {
592a252b 4591 { VEX_LEN_TABLE (VEX_LEN_0F2E_P_0) },
592d1631 4592 { Bad_Opcode },
592a252b 4593 { VEX_LEN_TABLE (VEX_LEN_0F2E_P_2) },
7c52e0e8
L
4594 },
4595
592a252b 4596 /* PREFIX_VEX_0F2F */
7c52e0e8 4597 {
592a252b 4598 { VEX_LEN_TABLE (VEX_LEN_0F2F_P_0) },
592d1631 4599 { Bad_Opcode },
592a252b 4600 { VEX_LEN_TABLE (VEX_LEN_0F2F_P_2) },
7c52e0e8
L
4601 },
4602
43234a1e
L
4603 /* PREFIX_VEX_0F41 */
4604 {
4605 { VEX_LEN_TABLE (VEX_LEN_0F41_P_0) },
1ba585e8
IT
4606 { Bad_Opcode },
4607 { VEX_LEN_TABLE (VEX_LEN_0F41_P_2) },
43234a1e
L
4608 },
4609
4610 /* PREFIX_VEX_0F42 */
4611 {
4612 { VEX_LEN_TABLE (VEX_LEN_0F42_P_0) },
1ba585e8
IT
4613 { Bad_Opcode },
4614 { VEX_LEN_TABLE (VEX_LEN_0F42_P_2) },
43234a1e
L
4615 },
4616
4617 /* PREFIX_VEX_0F44 */
4618 {
4619 { VEX_LEN_TABLE (VEX_LEN_0F44_P_0) },
1ba585e8
IT
4620 { Bad_Opcode },
4621 { VEX_LEN_TABLE (VEX_LEN_0F44_P_2) },
43234a1e
L
4622 },
4623
4624 /* PREFIX_VEX_0F45 */
4625 {
4626 { VEX_LEN_TABLE (VEX_LEN_0F45_P_0) },
1ba585e8
IT
4627 { Bad_Opcode },
4628 { VEX_LEN_TABLE (VEX_LEN_0F45_P_2) },
43234a1e
L
4629 },
4630
4631 /* PREFIX_VEX_0F46 */
4632 {
4633 { VEX_LEN_TABLE (VEX_LEN_0F46_P_0) },
1ba585e8
IT
4634 { Bad_Opcode },
4635 { VEX_LEN_TABLE (VEX_LEN_0F46_P_2) },
43234a1e
L
4636 },
4637
4638 /* PREFIX_VEX_0F47 */
4639 {
4640 { VEX_LEN_TABLE (VEX_LEN_0F47_P_0) },
1ba585e8
IT
4641 { Bad_Opcode },
4642 { VEX_LEN_TABLE (VEX_LEN_0F47_P_2) },
43234a1e
L
4643 },
4644
1ba585e8 4645 /* PREFIX_VEX_0F4A */
43234a1e 4646 {
1ba585e8 4647 { VEX_LEN_TABLE (VEX_LEN_0F4A_P_0) },
43234a1e 4648 { Bad_Opcode },
1ba585e8
IT
4649 { VEX_LEN_TABLE (VEX_LEN_0F4A_P_2) },
4650 },
4651
4652 /* PREFIX_VEX_0F4B */
4653 {
4654 { VEX_LEN_TABLE (VEX_LEN_0F4B_P_0) },
43234a1e
L
4655 { Bad_Opcode },
4656 { VEX_LEN_TABLE (VEX_LEN_0F4B_P_2) },
4657 },
4658
592a252b 4659 /* PREFIX_VEX_0F51 */
7c52e0e8 4660 {
592a252b
L
4661 { VEX_W_TABLE (VEX_W_0F51_P_0) },
4662 { VEX_LEN_TABLE (VEX_LEN_0F51_P_1) },
4663 { VEX_W_TABLE (VEX_W_0F51_P_2) },
4664 { VEX_LEN_TABLE (VEX_LEN_0F51_P_3) },
7c52e0e8
L
4665 },
4666
592a252b 4667 /* PREFIX_VEX_0F52 */
7c52e0e8 4668 {
592a252b
L
4669 { VEX_W_TABLE (VEX_W_0F52_P_0) },
4670 { VEX_LEN_TABLE (VEX_LEN_0F52_P_1) },
7c52e0e8
L
4671 },
4672
592a252b 4673 /* PREFIX_VEX_0F53 */
7c52e0e8 4674 {
592a252b
L
4675 { VEX_W_TABLE (VEX_W_0F53_P_0) },
4676 { VEX_LEN_TABLE (VEX_LEN_0F53_P_1) },
7c52e0e8
L
4677 },
4678
592a252b 4679 /* PREFIX_VEX_0F58 */
7c52e0e8 4680 {
592a252b
L
4681 { VEX_W_TABLE (VEX_W_0F58_P_0) },
4682 { VEX_LEN_TABLE (VEX_LEN_0F58_P_1) },
4683 { VEX_W_TABLE (VEX_W_0F58_P_2) },
4684 { VEX_LEN_TABLE (VEX_LEN_0F58_P_3) },
7c52e0e8
L
4685 },
4686
592a252b 4687 /* PREFIX_VEX_0F59 */
7c52e0e8 4688 {
592a252b
L
4689 { VEX_W_TABLE (VEX_W_0F59_P_0) },
4690 { VEX_LEN_TABLE (VEX_LEN_0F59_P_1) },
4691 { VEX_W_TABLE (VEX_W_0F59_P_2) },
4692 { VEX_LEN_TABLE (VEX_LEN_0F59_P_3) },
7c52e0e8
L
4693 },
4694
592a252b 4695 /* PREFIX_VEX_0F5A */
7c52e0e8 4696 {
592a252b
L
4697 { VEX_W_TABLE (VEX_W_0F5A_P_0) },
4698 { VEX_LEN_TABLE (VEX_LEN_0F5A_P_1) },
c0f3af97 4699 { "vcvtpd2ps%XY", { XMM, EXx } },
592a252b 4700 { VEX_LEN_TABLE (VEX_LEN_0F5A_P_3) },
7c52e0e8
L
4701 },
4702
592a252b 4703 /* PREFIX_VEX_0F5B */
7c52e0e8 4704 {
592a252b
L
4705 { VEX_W_TABLE (VEX_W_0F5B_P_0) },
4706 { VEX_W_TABLE (VEX_W_0F5B_P_1) },
4707 { VEX_W_TABLE (VEX_W_0F5B_P_2) },
7c52e0e8
L
4708 },
4709
592a252b 4710 /* PREFIX_VEX_0F5C */
7c52e0e8 4711 {
592a252b
L
4712 { VEX_W_TABLE (VEX_W_0F5C_P_0) },
4713 { VEX_LEN_TABLE (VEX_LEN_0F5C_P_1) },
4714 { VEX_W_TABLE (VEX_W_0F5C_P_2) },
4715 { VEX_LEN_TABLE (VEX_LEN_0F5C_P_3) },
7c52e0e8
L
4716 },
4717
592a252b 4718 /* PREFIX_VEX_0F5D */
7c52e0e8 4719 {
592a252b
L
4720 { VEX_W_TABLE (VEX_W_0F5D_P_0) },
4721 { VEX_LEN_TABLE (VEX_LEN_0F5D_P_1) },
4722 { VEX_W_TABLE (VEX_W_0F5D_P_2) },
4723 { VEX_LEN_TABLE (VEX_LEN_0F5D_P_3) },
7c52e0e8
L
4724 },
4725
592a252b 4726 /* PREFIX_VEX_0F5E */
7c52e0e8 4727 {
592a252b
L
4728 { VEX_W_TABLE (VEX_W_0F5E_P_0) },
4729 { VEX_LEN_TABLE (VEX_LEN_0F5E_P_1) },
4730 { VEX_W_TABLE (VEX_W_0F5E_P_2) },
4731 { VEX_LEN_TABLE (VEX_LEN_0F5E_P_3) },
7c52e0e8
L
4732 },
4733
592a252b 4734 /* PREFIX_VEX_0F5F */
7c52e0e8 4735 {
592a252b
L
4736 { VEX_W_TABLE (VEX_W_0F5F_P_0) },
4737 { VEX_LEN_TABLE (VEX_LEN_0F5F_P_1) },
4738 { VEX_W_TABLE (VEX_W_0F5F_P_2) },
4739 { VEX_LEN_TABLE (VEX_LEN_0F5F_P_3) },
7c52e0e8
L
4740 },
4741
592a252b 4742 /* PREFIX_VEX_0F60 */
7c52e0e8 4743 {
592d1631
L
4744 { Bad_Opcode },
4745 { Bad_Opcode },
6c30d220 4746 { VEX_W_TABLE (VEX_W_0F60_P_2) },
7c52e0e8
L
4747 },
4748
592a252b 4749 /* PREFIX_VEX_0F61 */
7c52e0e8 4750 {
592d1631
L
4751 { Bad_Opcode },
4752 { Bad_Opcode },
6c30d220 4753 { VEX_W_TABLE (VEX_W_0F61_P_2) },
7c52e0e8
L
4754 },
4755
592a252b 4756 /* PREFIX_VEX_0F62 */
7c52e0e8 4757 {
592d1631
L
4758 { Bad_Opcode },
4759 { Bad_Opcode },
6c30d220 4760 { VEX_W_TABLE (VEX_W_0F62_P_2) },
7c52e0e8
L
4761 },
4762
592a252b 4763 /* PREFIX_VEX_0F63 */
7c52e0e8 4764 {
592d1631
L
4765 { Bad_Opcode },
4766 { Bad_Opcode },
6c30d220 4767 { VEX_W_TABLE (VEX_W_0F63_P_2) },
7c52e0e8
L
4768 },
4769
592a252b 4770 /* PREFIX_VEX_0F64 */
7c52e0e8 4771 {
592d1631
L
4772 { Bad_Opcode },
4773 { Bad_Opcode },
6c30d220 4774 { VEX_W_TABLE (VEX_W_0F64_P_2) },
7c52e0e8
L
4775 },
4776
592a252b 4777 /* PREFIX_VEX_0F65 */
7c52e0e8 4778 {
592d1631
L
4779 { Bad_Opcode },
4780 { Bad_Opcode },
6c30d220 4781 { VEX_W_TABLE (VEX_W_0F65_P_2) },
7c52e0e8
L
4782 },
4783
592a252b 4784 /* PREFIX_VEX_0F66 */
7c52e0e8 4785 {
592d1631
L
4786 { Bad_Opcode },
4787 { Bad_Opcode },
6c30d220 4788 { VEX_W_TABLE (VEX_W_0F66_P_2) },
7c52e0e8 4789 },
6439fc28 4790
592a252b 4791 /* PREFIX_VEX_0F67 */
331d2d0d 4792 {
592d1631
L
4793 { Bad_Opcode },
4794 { Bad_Opcode },
6c30d220 4795 { VEX_W_TABLE (VEX_W_0F67_P_2) },
c0f3af97
L
4796 },
4797
592a252b 4798 /* PREFIX_VEX_0F68 */
c0f3af97 4799 {
592d1631
L
4800 { Bad_Opcode },
4801 { Bad_Opcode },
6c30d220 4802 { VEX_W_TABLE (VEX_W_0F68_P_2) },
c0f3af97
L
4803 },
4804
592a252b 4805 /* PREFIX_VEX_0F69 */
c0f3af97 4806 {
592d1631
L
4807 { Bad_Opcode },
4808 { Bad_Opcode },
6c30d220 4809 { VEX_W_TABLE (VEX_W_0F69_P_2) },
c0f3af97
L
4810 },
4811
592a252b 4812 /* PREFIX_VEX_0F6A */
c0f3af97 4813 {
592d1631
L
4814 { Bad_Opcode },
4815 { Bad_Opcode },
6c30d220 4816 { VEX_W_TABLE (VEX_W_0F6A_P_2) },
c0f3af97
L
4817 },
4818
592a252b 4819 /* PREFIX_VEX_0F6B */
c0f3af97 4820 {
592d1631
L
4821 { Bad_Opcode },
4822 { Bad_Opcode },
6c30d220 4823 { VEX_W_TABLE (VEX_W_0F6B_P_2) },
c0f3af97
L
4824 },
4825
592a252b 4826 /* PREFIX_VEX_0F6C */
c0f3af97 4827 {
592d1631
L
4828 { Bad_Opcode },
4829 { Bad_Opcode },
6c30d220 4830 { VEX_W_TABLE (VEX_W_0F6C_P_2) },
c0f3af97
L
4831 },
4832
592a252b 4833 /* PREFIX_VEX_0F6D */
c0f3af97 4834 {
592d1631
L
4835 { Bad_Opcode },
4836 { Bad_Opcode },
6c30d220 4837 { VEX_W_TABLE (VEX_W_0F6D_P_2) },
c0f3af97
L
4838 },
4839
592a252b 4840 /* PREFIX_VEX_0F6E */
c0f3af97 4841 {
592d1631
L
4842 { Bad_Opcode },
4843 { Bad_Opcode },
592a252b 4844 { VEX_LEN_TABLE (VEX_LEN_0F6E_P_2) },
c0f3af97
L
4845 },
4846
592a252b 4847 /* PREFIX_VEX_0F6F */
c0f3af97 4848 {
592d1631 4849 { Bad_Opcode },
592a252b
L
4850 { VEX_W_TABLE (VEX_W_0F6F_P_1) },
4851 { VEX_W_TABLE (VEX_W_0F6F_P_2) },
c0f3af97
L
4852 },
4853
592a252b 4854 /* PREFIX_VEX_0F70 */
c0f3af97 4855 {
592d1631 4856 { Bad_Opcode },
6c30d220
L
4857 { VEX_W_TABLE (VEX_W_0F70_P_1) },
4858 { VEX_W_TABLE (VEX_W_0F70_P_2) },
4859 { VEX_W_TABLE (VEX_W_0F70_P_3) },
c0f3af97
L
4860 },
4861
592a252b 4862 /* PREFIX_VEX_0F71_REG_2 */
c0f3af97 4863 {
592d1631
L
4864 { Bad_Opcode },
4865 { Bad_Opcode },
6c30d220 4866 { VEX_W_TABLE (VEX_W_0F71_R_2_P_2) },
c0f3af97
L
4867 },
4868
592a252b 4869 /* PREFIX_VEX_0F71_REG_4 */
c0f3af97 4870 {
592d1631
L
4871 { Bad_Opcode },
4872 { Bad_Opcode },
6c30d220 4873 { VEX_W_TABLE (VEX_W_0F71_R_4_P_2) },
c0f3af97
L
4874 },
4875
592a252b 4876 /* PREFIX_VEX_0F71_REG_6 */
c0f3af97 4877 {
592d1631
L
4878 { Bad_Opcode },
4879 { Bad_Opcode },
6c30d220 4880 { VEX_W_TABLE (VEX_W_0F71_R_6_P_2) },
c0f3af97
L
4881 },
4882
592a252b 4883 /* PREFIX_VEX_0F72_REG_2 */
c0f3af97 4884 {
592d1631
L
4885 { Bad_Opcode },
4886 { Bad_Opcode },
6c30d220 4887 { VEX_W_TABLE (VEX_W_0F72_R_2_P_2) },
c0f3af97
L
4888 },
4889
592a252b 4890 /* PREFIX_VEX_0F72_REG_4 */
c0f3af97 4891 {
592d1631
L
4892 { Bad_Opcode },
4893 { Bad_Opcode },
6c30d220 4894 { VEX_W_TABLE (VEX_W_0F72_R_4_P_2) },
c0f3af97
L
4895 },
4896
592a252b 4897 /* PREFIX_VEX_0F72_REG_6 */
c0f3af97 4898 {
592d1631
L
4899 { Bad_Opcode },
4900 { Bad_Opcode },
6c30d220 4901 { VEX_W_TABLE (VEX_W_0F72_R_6_P_2) },
c0f3af97
L
4902 },
4903
592a252b 4904 /* PREFIX_VEX_0F73_REG_2 */
c0f3af97 4905 {
592d1631
L
4906 { Bad_Opcode },
4907 { Bad_Opcode },
6c30d220 4908 { VEX_W_TABLE (VEX_W_0F73_R_2_P_2) },
c0f3af97
L
4909 },
4910
592a252b 4911 /* PREFIX_VEX_0F73_REG_3 */
c0f3af97 4912 {
592d1631
L
4913 { Bad_Opcode },
4914 { Bad_Opcode },
6c30d220 4915 { VEX_W_TABLE (VEX_W_0F73_R_3_P_2) },
c0f3af97
L
4916 },
4917
592a252b 4918 /* PREFIX_VEX_0F73_REG_6 */
c0f3af97 4919 {
592d1631
L
4920 { Bad_Opcode },
4921 { Bad_Opcode },
6c30d220 4922 { VEX_W_TABLE (VEX_W_0F73_R_6_P_2) },
c0f3af97
L
4923 },
4924
592a252b 4925 /* PREFIX_VEX_0F73_REG_7 */
c0f3af97 4926 {
592d1631
L
4927 { Bad_Opcode },
4928 { Bad_Opcode },
6c30d220 4929 { VEX_W_TABLE (VEX_W_0F73_R_7_P_2) },
c0f3af97
L
4930 },
4931
592a252b 4932 /* PREFIX_VEX_0F74 */
c0f3af97 4933 {
592d1631
L
4934 { Bad_Opcode },
4935 { Bad_Opcode },
6c30d220 4936 { VEX_W_TABLE (VEX_W_0F74_P_2) },
c0f3af97
L
4937 },
4938
592a252b 4939 /* PREFIX_VEX_0F75 */
c0f3af97 4940 {
592d1631
L
4941 { Bad_Opcode },
4942 { Bad_Opcode },
6c30d220 4943 { VEX_W_TABLE (VEX_W_0F75_P_2) },
c0f3af97
L
4944 },
4945
592a252b 4946 /* PREFIX_VEX_0F76 */
c0f3af97 4947 {
592d1631
L
4948 { Bad_Opcode },
4949 { Bad_Opcode },
6c30d220 4950 { VEX_W_TABLE (VEX_W_0F76_P_2) },
c0f3af97
L
4951 },
4952
592a252b 4953 /* PREFIX_VEX_0F77 */
c0f3af97 4954 {
592a252b 4955 { VEX_W_TABLE (VEX_W_0F77_P_0) },
c0f3af97
L
4956 },
4957
592a252b 4958 /* PREFIX_VEX_0F7C */
c0f3af97 4959 {
592d1631
L
4960 { Bad_Opcode },
4961 { Bad_Opcode },
592a252b
L
4962 { VEX_W_TABLE (VEX_W_0F7C_P_2) },
4963 { VEX_W_TABLE (VEX_W_0F7C_P_3) },
c0f3af97
L
4964 },
4965
592a252b 4966 /* PREFIX_VEX_0F7D */
c0f3af97 4967 {
592d1631
L
4968 { Bad_Opcode },
4969 { Bad_Opcode },
592a252b
L
4970 { VEX_W_TABLE (VEX_W_0F7D_P_2) },
4971 { VEX_W_TABLE (VEX_W_0F7D_P_3) },
c0f3af97
L
4972 },
4973
592a252b 4974 /* PREFIX_VEX_0F7E */
c0f3af97 4975 {
592d1631 4976 { Bad_Opcode },
592a252b
L
4977 { VEX_LEN_TABLE (VEX_LEN_0F7E_P_1) },
4978 { VEX_LEN_TABLE (VEX_LEN_0F7E_P_2) },
c0f3af97
L
4979 },
4980
592a252b 4981 /* PREFIX_VEX_0F7F */
c0f3af97 4982 {
592d1631 4983 { Bad_Opcode },
592a252b
L
4984 { VEX_W_TABLE (VEX_W_0F7F_P_1) },
4985 { VEX_W_TABLE (VEX_W_0F7F_P_2) },
c0f3af97
L
4986 },
4987
43234a1e
L
4988 /* PREFIX_VEX_0F90 */
4989 {
4990 { VEX_LEN_TABLE (VEX_LEN_0F90_P_0) },
1ba585e8
IT
4991 { Bad_Opcode },
4992 { VEX_LEN_TABLE (VEX_LEN_0F90_P_2) },
43234a1e
L
4993 },
4994
4995 /* PREFIX_VEX_0F91 */
4996 {
4997 { VEX_LEN_TABLE (VEX_LEN_0F91_P_0) },
1ba585e8
IT
4998 { Bad_Opcode },
4999 { VEX_LEN_TABLE (VEX_LEN_0F91_P_2) },
43234a1e
L
5000 },
5001
5002 /* PREFIX_VEX_0F92 */
5003 {
5004 { VEX_LEN_TABLE (VEX_LEN_0F92_P_0) },
1ba585e8
IT
5005 { Bad_Opcode },
5006 { Bad_Opcode },
5007 { VEX_LEN_TABLE (VEX_LEN_0F92_P_3) },
43234a1e
L
5008 },
5009
5010 /* PREFIX_VEX_0F93 */
5011 {
5012 { VEX_LEN_TABLE (VEX_LEN_0F93_P_0) },
1ba585e8
IT
5013 { Bad_Opcode },
5014 { Bad_Opcode },
5015 { VEX_LEN_TABLE (VEX_LEN_0F93_P_3) },
43234a1e
L
5016 },
5017
5018 /* PREFIX_VEX_0F98 */
5019 {
5020 { VEX_LEN_TABLE (VEX_LEN_0F98_P_0) },
1ba585e8
IT
5021 { Bad_Opcode },
5022 { VEX_LEN_TABLE (VEX_LEN_0F98_P_2) },
5023 },
5024
5025 /* PREFIX_VEX_0F99 */
5026 {
5027 { VEX_LEN_TABLE (VEX_LEN_0F99_P_0) },
5028 { Bad_Opcode },
5029 { VEX_LEN_TABLE (VEX_LEN_0F99_P_2) },
43234a1e
L
5030 },
5031
592a252b 5032 /* PREFIX_VEX_0FC2 */
c0f3af97 5033 {
592a252b
L
5034 { VEX_W_TABLE (VEX_W_0FC2_P_0) },
5035 { VEX_LEN_TABLE (VEX_LEN_0FC2_P_1) },
5036 { VEX_W_TABLE (VEX_W_0FC2_P_2) },
5037 { VEX_LEN_TABLE (VEX_LEN_0FC2_P_3) },
c0f3af97
L
5038 },
5039
592a252b 5040 /* PREFIX_VEX_0FC4 */
c0f3af97 5041 {
592d1631
L
5042 { Bad_Opcode },
5043 { Bad_Opcode },
592a252b 5044 { VEX_LEN_TABLE (VEX_LEN_0FC4_P_2) },
c0f3af97
L
5045 },
5046
592a252b 5047 /* PREFIX_VEX_0FC5 */
c0f3af97 5048 {
592d1631
L
5049 { Bad_Opcode },
5050 { Bad_Opcode },
592a252b 5051 { VEX_LEN_TABLE (VEX_LEN_0FC5_P_2) },
c0f3af97
L
5052 },
5053
592a252b 5054 /* PREFIX_VEX_0FD0 */
c0f3af97 5055 {
592d1631
L
5056 { Bad_Opcode },
5057 { Bad_Opcode },
592a252b
L
5058 { VEX_W_TABLE (VEX_W_0FD0_P_2) },
5059 { VEX_W_TABLE (VEX_W_0FD0_P_3) },
c0f3af97
L
5060 },
5061
592a252b 5062 /* PREFIX_VEX_0FD1 */
c0f3af97 5063 {
592d1631
L
5064 { Bad_Opcode },
5065 { Bad_Opcode },
6c30d220 5066 { VEX_W_TABLE (VEX_W_0FD1_P_2) },
c0f3af97
L
5067 },
5068
592a252b 5069 /* PREFIX_VEX_0FD2 */
c0f3af97 5070 {
592d1631
L
5071 { Bad_Opcode },
5072 { Bad_Opcode },
6c30d220 5073 { VEX_W_TABLE (VEX_W_0FD2_P_2) },
c0f3af97
L
5074 },
5075
592a252b 5076 /* PREFIX_VEX_0FD3 */
c0f3af97 5077 {
592d1631
L
5078 { Bad_Opcode },
5079 { Bad_Opcode },
6c30d220 5080 { VEX_W_TABLE (VEX_W_0FD3_P_2) },
c0f3af97
L
5081 },
5082
592a252b 5083 /* PREFIX_VEX_0FD4 */
c0f3af97 5084 {
592d1631
L
5085 { Bad_Opcode },
5086 { Bad_Opcode },
6c30d220 5087 { VEX_W_TABLE (VEX_W_0FD4_P_2) },
c0f3af97
L
5088 },
5089
592a252b 5090 /* PREFIX_VEX_0FD5 */
c0f3af97 5091 {
592d1631
L
5092 { Bad_Opcode },
5093 { Bad_Opcode },
6c30d220 5094 { VEX_W_TABLE (VEX_W_0FD5_P_2) },
c0f3af97
L
5095 },
5096
592a252b 5097 /* PREFIX_VEX_0FD6 */
c0f3af97 5098 {
592d1631
L
5099 { Bad_Opcode },
5100 { Bad_Opcode },
592a252b 5101 { VEX_LEN_TABLE (VEX_LEN_0FD6_P_2) },
c0f3af97
L
5102 },
5103
592a252b 5104 /* PREFIX_VEX_0FD7 */
c0f3af97 5105 {
592d1631
L
5106 { Bad_Opcode },
5107 { Bad_Opcode },
592a252b 5108 { MOD_TABLE (MOD_VEX_0FD7_PREFIX_2) },
c0f3af97
L
5109 },
5110
592a252b 5111 /* PREFIX_VEX_0FD8 */
c0f3af97 5112 {
592d1631
L
5113 { Bad_Opcode },
5114 { Bad_Opcode },
6c30d220 5115 { VEX_W_TABLE (VEX_W_0FD8_P_2) },
c0f3af97
L
5116 },
5117
592a252b 5118 /* PREFIX_VEX_0FD9 */
c0f3af97 5119 {
592d1631
L
5120 { Bad_Opcode },
5121 { Bad_Opcode },
6c30d220 5122 { VEX_W_TABLE (VEX_W_0FD9_P_2) },
c0f3af97
L
5123 },
5124
592a252b 5125 /* PREFIX_VEX_0FDA */
c0f3af97 5126 {
592d1631
L
5127 { Bad_Opcode },
5128 { Bad_Opcode },
6c30d220 5129 { VEX_W_TABLE (VEX_W_0FDA_P_2) },
c0f3af97
L
5130 },
5131
592a252b 5132 /* PREFIX_VEX_0FDB */
c0f3af97 5133 {
592d1631
L
5134 { Bad_Opcode },
5135 { Bad_Opcode },
6c30d220 5136 { VEX_W_TABLE (VEX_W_0FDB_P_2) },
c0f3af97
L
5137 },
5138
592a252b 5139 /* PREFIX_VEX_0FDC */
c0f3af97 5140 {
592d1631
L
5141 { Bad_Opcode },
5142 { Bad_Opcode },
6c30d220 5143 { VEX_W_TABLE (VEX_W_0FDC_P_2) },
c0f3af97
L
5144 },
5145
592a252b 5146 /* PREFIX_VEX_0FDD */
c0f3af97 5147 {
592d1631
L
5148 { Bad_Opcode },
5149 { Bad_Opcode },
6c30d220 5150 { VEX_W_TABLE (VEX_W_0FDD_P_2) },
c0f3af97
L
5151 },
5152
592a252b 5153 /* PREFIX_VEX_0FDE */
c0f3af97 5154 {
592d1631
L
5155 { Bad_Opcode },
5156 { Bad_Opcode },
6c30d220 5157 { VEX_W_TABLE (VEX_W_0FDE_P_2) },
c0f3af97
L
5158 },
5159
592a252b 5160 /* PREFIX_VEX_0FDF */
c0f3af97 5161 {
592d1631
L
5162 { Bad_Opcode },
5163 { Bad_Opcode },
6c30d220 5164 { VEX_W_TABLE (VEX_W_0FDF_P_2) },
c0f3af97
L
5165 },
5166
592a252b 5167 /* PREFIX_VEX_0FE0 */
c0f3af97 5168 {
592d1631
L
5169 { Bad_Opcode },
5170 { Bad_Opcode },
6c30d220 5171 { VEX_W_TABLE (VEX_W_0FE0_P_2) },
c0f3af97
L
5172 },
5173
592a252b 5174 /* PREFIX_VEX_0FE1 */
c0f3af97 5175 {
592d1631
L
5176 { Bad_Opcode },
5177 { Bad_Opcode },
6c30d220 5178 { VEX_W_TABLE (VEX_W_0FE1_P_2) },
c0f3af97
L
5179 },
5180
592a252b 5181 /* PREFIX_VEX_0FE2 */
c0f3af97 5182 {
592d1631
L
5183 { Bad_Opcode },
5184 { Bad_Opcode },
6c30d220 5185 { VEX_W_TABLE (VEX_W_0FE2_P_2) },
c0f3af97
L
5186 },
5187
592a252b 5188 /* PREFIX_VEX_0FE3 */
c0f3af97 5189 {
592d1631
L
5190 { Bad_Opcode },
5191 { Bad_Opcode },
6c30d220 5192 { VEX_W_TABLE (VEX_W_0FE3_P_2) },
c0f3af97
L
5193 },
5194
592a252b 5195 /* PREFIX_VEX_0FE4 */
c0f3af97 5196 {
592d1631
L
5197 { Bad_Opcode },
5198 { Bad_Opcode },
6c30d220 5199 { VEX_W_TABLE (VEX_W_0FE4_P_2) },
c0f3af97
L
5200 },
5201
592a252b 5202 /* PREFIX_VEX_0FE5 */
c0f3af97 5203 {
592d1631
L
5204 { Bad_Opcode },
5205 { Bad_Opcode },
6c30d220 5206 { VEX_W_TABLE (VEX_W_0FE5_P_2) },
c0f3af97
L
5207 },
5208
592a252b 5209 /* PREFIX_VEX_0FE6 */
c0f3af97 5210 {
592d1631 5211 { Bad_Opcode },
592a252b
L
5212 { VEX_W_TABLE (VEX_W_0FE6_P_1) },
5213 { VEX_W_TABLE (VEX_W_0FE6_P_2) },
5214 { VEX_W_TABLE (VEX_W_0FE6_P_3) },
c0f3af97
L
5215 },
5216
592a252b 5217 /* PREFIX_VEX_0FE7 */
c0f3af97 5218 {
592d1631
L
5219 { Bad_Opcode },
5220 { Bad_Opcode },
592a252b 5221 { MOD_TABLE (MOD_VEX_0FE7_PREFIX_2) },
c0f3af97
L
5222 },
5223
592a252b 5224 /* PREFIX_VEX_0FE8 */
c0f3af97 5225 {
592d1631
L
5226 { Bad_Opcode },
5227 { Bad_Opcode },
6c30d220 5228 { VEX_W_TABLE (VEX_W_0FE8_P_2) },
c0f3af97
L
5229 },
5230
592a252b 5231 /* PREFIX_VEX_0FE9 */
c0f3af97 5232 {
592d1631
L
5233 { Bad_Opcode },
5234 { Bad_Opcode },
6c30d220 5235 { VEX_W_TABLE (VEX_W_0FE9_P_2) },
c0f3af97
L
5236 },
5237
592a252b 5238 /* PREFIX_VEX_0FEA */
c0f3af97 5239 {
592d1631
L
5240 { Bad_Opcode },
5241 { Bad_Opcode },
6c30d220 5242 { VEX_W_TABLE (VEX_W_0FEA_P_2) },
c0f3af97
L
5243 },
5244
592a252b 5245 /* PREFIX_VEX_0FEB */
c0f3af97 5246 {
592d1631
L
5247 { Bad_Opcode },
5248 { Bad_Opcode },
6c30d220 5249 { VEX_W_TABLE (VEX_W_0FEB_P_2) },
c0f3af97
L
5250 },
5251
592a252b 5252 /* PREFIX_VEX_0FEC */
c0f3af97 5253 {
592d1631
L
5254 { Bad_Opcode },
5255 { Bad_Opcode },
6c30d220 5256 { VEX_W_TABLE (VEX_W_0FEC_P_2) },
c0f3af97
L
5257 },
5258
592a252b 5259 /* PREFIX_VEX_0FED */
c0f3af97 5260 {
592d1631
L
5261 { Bad_Opcode },
5262 { Bad_Opcode },
6c30d220 5263 { VEX_W_TABLE (VEX_W_0FED_P_2) },
c0f3af97
L
5264 },
5265
592a252b 5266 /* PREFIX_VEX_0FEE */
c0f3af97 5267 {
592d1631
L
5268 { Bad_Opcode },
5269 { Bad_Opcode },
6c30d220 5270 { VEX_W_TABLE (VEX_W_0FEE_P_2) },
c0f3af97
L
5271 },
5272
592a252b 5273 /* PREFIX_VEX_0FEF */
c0f3af97 5274 {
592d1631
L
5275 { Bad_Opcode },
5276 { Bad_Opcode },
6c30d220 5277 { VEX_W_TABLE (VEX_W_0FEF_P_2) },
c0f3af97
L
5278 },
5279
592a252b 5280 /* PREFIX_VEX_0FF0 */
c0f3af97 5281 {
592d1631
L
5282 { Bad_Opcode },
5283 { Bad_Opcode },
5284 { Bad_Opcode },
592a252b 5285 { MOD_TABLE (MOD_VEX_0FF0_PREFIX_3) },
c0f3af97
L
5286 },
5287
592a252b 5288 /* PREFIX_VEX_0FF1 */
c0f3af97 5289 {
592d1631
L
5290 { Bad_Opcode },
5291 { Bad_Opcode },
6c30d220 5292 { VEX_W_TABLE (VEX_W_0FF1_P_2) },
c0f3af97
L
5293 },
5294
592a252b 5295 /* PREFIX_VEX_0FF2 */
c0f3af97 5296 {
592d1631
L
5297 { Bad_Opcode },
5298 { Bad_Opcode },
6c30d220 5299 { VEX_W_TABLE (VEX_W_0FF2_P_2) },
c0f3af97
L
5300 },
5301
592a252b 5302 /* PREFIX_VEX_0FF3 */
c0f3af97 5303 {
592d1631
L
5304 { Bad_Opcode },
5305 { Bad_Opcode },
6c30d220 5306 { VEX_W_TABLE (VEX_W_0FF3_P_2) },
c0f3af97
L
5307 },
5308
592a252b 5309 /* PREFIX_VEX_0FF4 */
c0f3af97 5310 {
592d1631
L
5311 { Bad_Opcode },
5312 { Bad_Opcode },
6c30d220 5313 { VEX_W_TABLE (VEX_W_0FF4_P_2) },
c0f3af97
L
5314 },
5315
592a252b 5316 /* PREFIX_VEX_0FF5 */
c0f3af97 5317 {
592d1631
L
5318 { Bad_Opcode },
5319 { Bad_Opcode },
6c30d220 5320 { VEX_W_TABLE (VEX_W_0FF5_P_2) },
c0f3af97
L
5321 },
5322
592a252b 5323 /* PREFIX_VEX_0FF6 */
c0f3af97 5324 {
592d1631
L
5325 { Bad_Opcode },
5326 { Bad_Opcode },
6c30d220 5327 { VEX_W_TABLE (VEX_W_0FF6_P_2) },
c0f3af97
L
5328 },
5329
592a252b 5330 /* PREFIX_VEX_0FF7 */
c0f3af97 5331 {
592d1631
L
5332 { Bad_Opcode },
5333 { Bad_Opcode },
592a252b 5334 { VEX_LEN_TABLE (VEX_LEN_0FF7_P_2) },
c0f3af97
L
5335 },
5336
592a252b 5337 /* PREFIX_VEX_0FF8 */
c0f3af97 5338 {
592d1631
L
5339 { Bad_Opcode },
5340 { Bad_Opcode },
6c30d220 5341 { VEX_W_TABLE (VEX_W_0FF8_P_2) },
c0f3af97
L
5342 },
5343
592a252b 5344 /* PREFIX_VEX_0FF9 */
c0f3af97 5345 {
592d1631
L
5346 { Bad_Opcode },
5347 { Bad_Opcode },
6c30d220 5348 { VEX_W_TABLE (VEX_W_0FF9_P_2) },
c0f3af97
L
5349 },
5350
592a252b 5351 /* PREFIX_VEX_0FFA */
c0f3af97 5352 {
592d1631
L
5353 { Bad_Opcode },
5354 { Bad_Opcode },
6c30d220 5355 { VEX_W_TABLE (VEX_W_0FFA_P_2) },
c0f3af97
L
5356 },
5357
592a252b 5358 /* PREFIX_VEX_0FFB */
c0f3af97 5359 {
592d1631
L
5360 { Bad_Opcode },
5361 { Bad_Opcode },
6c30d220 5362 { VEX_W_TABLE (VEX_W_0FFB_P_2) },
c0f3af97
L
5363 },
5364
592a252b 5365 /* PREFIX_VEX_0FFC */
c0f3af97 5366 {
592d1631
L
5367 { Bad_Opcode },
5368 { Bad_Opcode },
6c30d220 5369 { VEX_W_TABLE (VEX_W_0FFC_P_2) },
c0f3af97
L
5370 },
5371
592a252b 5372 /* PREFIX_VEX_0FFD */
c0f3af97 5373 {
592d1631
L
5374 { Bad_Opcode },
5375 { Bad_Opcode },
6c30d220 5376 { VEX_W_TABLE (VEX_W_0FFD_P_2) },
c0f3af97
L
5377 },
5378
592a252b 5379 /* PREFIX_VEX_0FFE */
c0f3af97 5380 {
592d1631
L
5381 { Bad_Opcode },
5382 { Bad_Opcode },
6c30d220 5383 { VEX_W_TABLE (VEX_W_0FFE_P_2) },
c0f3af97
L
5384 },
5385
592a252b 5386 /* PREFIX_VEX_0F3800 */
c0f3af97 5387 {
592d1631
L
5388 { Bad_Opcode },
5389 { Bad_Opcode },
6c30d220 5390 { VEX_W_TABLE (VEX_W_0F3800_P_2) },
c0f3af97
L
5391 },
5392
592a252b 5393 /* PREFIX_VEX_0F3801 */
c0f3af97 5394 {
592d1631
L
5395 { Bad_Opcode },
5396 { Bad_Opcode },
6c30d220 5397 { VEX_W_TABLE (VEX_W_0F3801_P_2) },
c0f3af97
L
5398 },
5399
592a252b 5400 /* PREFIX_VEX_0F3802 */
c0f3af97 5401 {
592d1631
L
5402 { Bad_Opcode },
5403 { Bad_Opcode },
6c30d220 5404 { VEX_W_TABLE (VEX_W_0F3802_P_2) },
c0f3af97
L
5405 },
5406
592a252b 5407 /* PREFIX_VEX_0F3803 */
c0f3af97 5408 {
592d1631
L
5409 { Bad_Opcode },
5410 { Bad_Opcode },
6c30d220 5411 { VEX_W_TABLE (VEX_W_0F3803_P_2) },
c0f3af97
L
5412 },
5413
592a252b 5414 /* PREFIX_VEX_0F3804 */
c0f3af97 5415 {
592d1631
L
5416 { Bad_Opcode },
5417 { Bad_Opcode },
6c30d220 5418 { VEX_W_TABLE (VEX_W_0F3804_P_2) },
c0f3af97
L
5419 },
5420
592a252b 5421 /* PREFIX_VEX_0F3805 */
c0f3af97 5422 {
592d1631
L
5423 { Bad_Opcode },
5424 { Bad_Opcode },
6c30d220 5425 { VEX_W_TABLE (VEX_W_0F3805_P_2) },
c0f3af97
L
5426 },
5427
592a252b 5428 /* PREFIX_VEX_0F3806 */
c0f3af97 5429 {
592d1631
L
5430 { Bad_Opcode },
5431 { Bad_Opcode },
6c30d220 5432 { VEX_W_TABLE (VEX_W_0F3806_P_2) },
c0f3af97
L
5433 },
5434
592a252b 5435 /* PREFIX_VEX_0F3807 */
c0f3af97 5436 {
592d1631
L
5437 { Bad_Opcode },
5438 { Bad_Opcode },
6c30d220 5439 { VEX_W_TABLE (VEX_W_0F3807_P_2) },
c0f3af97
L
5440 },
5441
592a252b 5442 /* PREFIX_VEX_0F3808 */
c0f3af97 5443 {
592d1631
L
5444 { Bad_Opcode },
5445 { Bad_Opcode },
6c30d220 5446 { VEX_W_TABLE (VEX_W_0F3808_P_2) },
c0f3af97
L
5447 },
5448
592a252b 5449 /* PREFIX_VEX_0F3809 */
c0f3af97 5450 {
592d1631
L
5451 { Bad_Opcode },
5452 { Bad_Opcode },
6c30d220 5453 { VEX_W_TABLE (VEX_W_0F3809_P_2) },
c0f3af97
L
5454 },
5455
592a252b 5456 /* PREFIX_VEX_0F380A */
c0f3af97 5457 {
592d1631
L
5458 { Bad_Opcode },
5459 { Bad_Opcode },
6c30d220 5460 { VEX_W_TABLE (VEX_W_0F380A_P_2) },
c0f3af97
L
5461 },
5462
592a252b 5463 /* PREFIX_VEX_0F380B */
c0f3af97 5464 {
592d1631
L
5465 { Bad_Opcode },
5466 { Bad_Opcode },
6c30d220 5467 { VEX_W_TABLE (VEX_W_0F380B_P_2) },
c0f3af97
L
5468 },
5469
592a252b 5470 /* PREFIX_VEX_0F380C */
c0f3af97 5471 {
592d1631
L
5472 { Bad_Opcode },
5473 { Bad_Opcode },
592a252b 5474 { VEX_W_TABLE (VEX_W_0F380C_P_2) },
c0f3af97
L
5475 },
5476
592a252b 5477 /* PREFIX_VEX_0F380D */
c0f3af97 5478 {
592d1631
L
5479 { Bad_Opcode },
5480 { Bad_Opcode },
592a252b 5481 { VEX_W_TABLE (VEX_W_0F380D_P_2) },
c0f3af97
L
5482 },
5483
592a252b 5484 /* PREFIX_VEX_0F380E */
c0f3af97 5485 {
592d1631
L
5486 { Bad_Opcode },
5487 { Bad_Opcode },
592a252b 5488 { VEX_W_TABLE (VEX_W_0F380E_P_2) },
c0f3af97
L
5489 },
5490
592a252b 5491 /* PREFIX_VEX_0F380F */
c0f3af97 5492 {
592d1631
L
5493 { Bad_Opcode },
5494 { Bad_Opcode },
592a252b 5495 { VEX_W_TABLE (VEX_W_0F380F_P_2) },
c0f3af97
L
5496 },
5497
592a252b 5498 /* PREFIX_VEX_0F3813 */
c7b8aa3a
L
5499 {
5500 { Bad_Opcode },
5501 { Bad_Opcode },
5502 { "vcvtph2ps", { XM, EXxmmq } },
5503 },
5504
6c30d220
L
5505 /* PREFIX_VEX_0F3816 */
5506 {
5507 { Bad_Opcode },
5508 { Bad_Opcode },
5509 { VEX_LEN_TABLE (VEX_LEN_0F3816_P_2) },
5510 },
5511
592a252b 5512 /* PREFIX_VEX_0F3817 */
c0f3af97 5513 {
592d1631
L
5514 { Bad_Opcode },
5515 { Bad_Opcode },
592a252b 5516 { VEX_W_TABLE (VEX_W_0F3817_P_2) },
c0f3af97
L
5517 },
5518
592a252b 5519 /* PREFIX_VEX_0F3818 */
c0f3af97 5520 {
592d1631
L
5521 { Bad_Opcode },
5522 { Bad_Opcode },
6c30d220 5523 { VEX_W_TABLE (VEX_W_0F3818_P_2) },
c0f3af97
L
5524 },
5525
592a252b 5526 /* PREFIX_VEX_0F3819 */
c0f3af97 5527 {
592d1631
L
5528 { Bad_Opcode },
5529 { Bad_Opcode },
6c30d220 5530 { VEX_LEN_TABLE (VEX_LEN_0F3819_P_2) },
c0f3af97
L
5531 },
5532
592a252b 5533 /* PREFIX_VEX_0F381A */
c0f3af97 5534 {
592d1631
L
5535 { Bad_Opcode },
5536 { Bad_Opcode },
592a252b 5537 { MOD_TABLE (MOD_VEX_0F381A_PREFIX_2) },
c0f3af97
L
5538 },
5539
592a252b 5540 /* PREFIX_VEX_0F381C */
c0f3af97 5541 {
592d1631
L
5542 { Bad_Opcode },
5543 { Bad_Opcode },
6c30d220 5544 { VEX_W_TABLE (VEX_W_0F381C_P_2) },
c0f3af97
L
5545 },
5546
592a252b 5547 /* PREFIX_VEX_0F381D */
c0f3af97 5548 {
592d1631
L
5549 { Bad_Opcode },
5550 { Bad_Opcode },
6c30d220 5551 { VEX_W_TABLE (VEX_W_0F381D_P_2) },
c0f3af97
L
5552 },
5553
592a252b 5554 /* PREFIX_VEX_0F381E */
c0f3af97 5555 {
592d1631
L
5556 { Bad_Opcode },
5557 { Bad_Opcode },
6c30d220 5558 { VEX_W_TABLE (VEX_W_0F381E_P_2) },
c0f3af97
L
5559 },
5560
592a252b 5561 /* PREFIX_VEX_0F3820 */
c0f3af97 5562 {
592d1631
L
5563 { Bad_Opcode },
5564 { Bad_Opcode },
6c30d220 5565 { VEX_W_TABLE (VEX_W_0F3820_P_2) },
c0f3af97
L
5566 },
5567
592a252b 5568 /* PREFIX_VEX_0F3821 */
c0f3af97 5569 {
592d1631
L
5570 { Bad_Opcode },
5571 { Bad_Opcode },
6c30d220 5572 { VEX_W_TABLE (VEX_W_0F3821_P_2) },
c0f3af97
L
5573 },
5574
592a252b 5575 /* PREFIX_VEX_0F3822 */
c0f3af97 5576 {
592d1631
L
5577 { Bad_Opcode },
5578 { Bad_Opcode },
6c30d220 5579 { VEX_W_TABLE (VEX_W_0F3822_P_2) },
c0f3af97
L
5580 },
5581
592a252b 5582 /* PREFIX_VEX_0F3823 */
c0f3af97 5583 {
592d1631
L
5584 { Bad_Opcode },
5585 { Bad_Opcode },
6c30d220 5586 { VEX_W_TABLE (VEX_W_0F3823_P_2) },
c0f3af97
L
5587 },
5588
592a252b 5589 /* PREFIX_VEX_0F3824 */
c0f3af97 5590 {
592d1631
L
5591 { Bad_Opcode },
5592 { Bad_Opcode },
6c30d220 5593 { VEX_W_TABLE (VEX_W_0F3824_P_2) },
c0f3af97
L
5594 },
5595
592a252b 5596 /* PREFIX_VEX_0F3825 */
c0f3af97 5597 {
592d1631
L
5598 { Bad_Opcode },
5599 { Bad_Opcode },
6c30d220 5600 { VEX_W_TABLE (VEX_W_0F3825_P_2) },
c0f3af97
L
5601 },
5602
592a252b 5603 /* PREFIX_VEX_0F3828 */
c0f3af97 5604 {
592d1631
L
5605 { Bad_Opcode },
5606 { Bad_Opcode },
6c30d220 5607 { VEX_W_TABLE (VEX_W_0F3828_P_2) },
c0f3af97
L
5608 },
5609
592a252b 5610 /* PREFIX_VEX_0F3829 */
c0f3af97 5611 {
592d1631
L
5612 { Bad_Opcode },
5613 { Bad_Opcode },
6c30d220 5614 { VEX_W_TABLE (VEX_W_0F3829_P_2) },
c0f3af97
L
5615 },
5616
592a252b 5617 /* PREFIX_VEX_0F382A */
c0f3af97 5618 {
592d1631
L
5619 { Bad_Opcode },
5620 { Bad_Opcode },
592a252b 5621 { MOD_TABLE (MOD_VEX_0F382A_PREFIX_2) },
c0f3af97
L
5622 },
5623
592a252b 5624 /* PREFIX_VEX_0F382B */
c0f3af97 5625 {
592d1631
L
5626 { Bad_Opcode },
5627 { Bad_Opcode },
6c30d220 5628 { VEX_W_TABLE (VEX_W_0F382B_P_2) },
c0f3af97
L
5629 },
5630
592a252b 5631 /* PREFIX_VEX_0F382C */
c0f3af97 5632 {
592d1631
L
5633 { Bad_Opcode },
5634 { Bad_Opcode },
592a252b 5635 { MOD_TABLE (MOD_VEX_0F382C_PREFIX_2) },
c0f3af97
L
5636 },
5637
592a252b 5638 /* PREFIX_VEX_0F382D */
c0f3af97 5639 {
592d1631
L
5640 { Bad_Opcode },
5641 { Bad_Opcode },
592a252b 5642 { MOD_TABLE (MOD_VEX_0F382D_PREFIX_2) },
c0f3af97
L
5643 },
5644
592a252b 5645 /* PREFIX_VEX_0F382E */
c0f3af97 5646 {
592d1631
L
5647 { Bad_Opcode },
5648 { Bad_Opcode },
592a252b 5649 { MOD_TABLE (MOD_VEX_0F382E_PREFIX_2) },
c0f3af97
L
5650 },
5651
592a252b 5652 /* PREFIX_VEX_0F382F */
c0f3af97 5653 {
592d1631
L
5654 { Bad_Opcode },
5655 { Bad_Opcode },
592a252b 5656 { MOD_TABLE (MOD_VEX_0F382F_PREFIX_2) },
c0f3af97
L
5657 },
5658
592a252b 5659 /* PREFIX_VEX_0F3830 */
c0f3af97 5660 {
592d1631
L
5661 { Bad_Opcode },
5662 { Bad_Opcode },
6c30d220 5663 { VEX_W_TABLE (VEX_W_0F3830_P_2) },
c0f3af97
L
5664 },
5665
592a252b 5666 /* PREFIX_VEX_0F3831 */
c0f3af97 5667 {
592d1631
L
5668 { Bad_Opcode },
5669 { Bad_Opcode },
6c30d220 5670 { VEX_W_TABLE (VEX_W_0F3831_P_2) },
c0f3af97
L
5671 },
5672
592a252b 5673 /* PREFIX_VEX_0F3832 */
c0f3af97 5674 {
592d1631
L
5675 { Bad_Opcode },
5676 { Bad_Opcode },
6c30d220 5677 { VEX_W_TABLE (VEX_W_0F3832_P_2) },
c0f3af97
L
5678 },
5679
592a252b 5680 /* PREFIX_VEX_0F3833 */
c0f3af97 5681 {
592d1631
L
5682 { Bad_Opcode },
5683 { Bad_Opcode },
6c30d220 5684 { VEX_W_TABLE (VEX_W_0F3833_P_2) },
c0f3af97
L
5685 },
5686
592a252b 5687 /* PREFIX_VEX_0F3834 */
c0f3af97 5688 {
592d1631
L
5689 { Bad_Opcode },
5690 { Bad_Opcode },
6c30d220 5691 { VEX_W_TABLE (VEX_W_0F3834_P_2) },
c0f3af97
L
5692 },
5693
592a252b 5694 /* PREFIX_VEX_0F3835 */
c0f3af97 5695 {
592d1631
L
5696 { Bad_Opcode },
5697 { Bad_Opcode },
6c30d220
L
5698 { VEX_W_TABLE (VEX_W_0F3835_P_2) },
5699 },
5700
5701 /* PREFIX_VEX_0F3836 */
5702 {
5703 { Bad_Opcode },
5704 { Bad_Opcode },
5705 { VEX_LEN_TABLE (VEX_LEN_0F3836_P_2) },
c0f3af97
L
5706 },
5707
592a252b 5708 /* PREFIX_VEX_0F3837 */
c0f3af97 5709 {
592d1631
L
5710 { Bad_Opcode },
5711 { Bad_Opcode },
6c30d220 5712 { VEX_W_TABLE (VEX_W_0F3837_P_2) },
c0f3af97
L
5713 },
5714
592a252b 5715 /* PREFIX_VEX_0F3838 */
c0f3af97 5716 {
592d1631
L
5717 { Bad_Opcode },
5718 { Bad_Opcode },
6c30d220 5719 { VEX_W_TABLE (VEX_W_0F3838_P_2) },
c0f3af97
L
5720 },
5721
592a252b 5722 /* PREFIX_VEX_0F3839 */
c0f3af97 5723 {
592d1631
L
5724 { Bad_Opcode },
5725 { Bad_Opcode },
6c30d220 5726 { VEX_W_TABLE (VEX_W_0F3839_P_2) },
c0f3af97
L
5727 },
5728
592a252b 5729 /* PREFIX_VEX_0F383A */
c0f3af97 5730 {
592d1631
L
5731 { Bad_Opcode },
5732 { Bad_Opcode },
6c30d220 5733 { VEX_W_TABLE (VEX_W_0F383A_P_2) },
c0f3af97
L
5734 },
5735
592a252b 5736 /* PREFIX_VEX_0F383B */
c0f3af97 5737 {
592d1631
L
5738 { Bad_Opcode },
5739 { Bad_Opcode },
6c30d220 5740 { VEX_W_TABLE (VEX_W_0F383B_P_2) },
c0f3af97
L
5741 },
5742
592a252b 5743 /* PREFIX_VEX_0F383C */
c0f3af97 5744 {
592d1631
L
5745 { Bad_Opcode },
5746 { Bad_Opcode },
6c30d220 5747 { VEX_W_TABLE (VEX_W_0F383C_P_2) },
c0f3af97
L
5748 },
5749
592a252b 5750 /* PREFIX_VEX_0F383D */
c0f3af97 5751 {
592d1631
L
5752 { Bad_Opcode },
5753 { Bad_Opcode },
6c30d220 5754 { VEX_W_TABLE (VEX_W_0F383D_P_2) },
c0f3af97
L
5755 },
5756
592a252b 5757 /* PREFIX_VEX_0F383E */
c0f3af97 5758 {
592d1631
L
5759 { Bad_Opcode },
5760 { Bad_Opcode },
6c30d220 5761 { VEX_W_TABLE (VEX_W_0F383E_P_2) },
c0f3af97
L
5762 },
5763
592a252b 5764 /* PREFIX_VEX_0F383F */
c0f3af97 5765 {
592d1631
L
5766 { Bad_Opcode },
5767 { Bad_Opcode },
6c30d220 5768 { VEX_W_TABLE (VEX_W_0F383F_P_2) },
c0f3af97
L
5769 },
5770
592a252b 5771 /* PREFIX_VEX_0F3840 */
c0f3af97 5772 {
592d1631
L
5773 { Bad_Opcode },
5774 { Bad_Opcode },
6c30d220 5775 { VEX_W_TABLE (VEX_W_0F3840_P_2) },
c0f3af97
L
5776 },
5777
592a252b 5778 /* PREFIX_VEX_0F3841 */
c0f3af97 5779 {
592d1631
L
5780 { Bad_Opcode },
5781 { Bad_Opcode },
592a252b 5782 { VEX_LEN_TABLE (VEX_LEN_0F3841_P_2) },
c0f3af97
L
5783 },
5784
6c30d220
L
5785 /* PREFIX_VEX_0F3845 */
5786 {
5787 { Bad_Opcode },
5788 { Bad_Opcode },
5789 { "vpsrlv%LW", { XM, Vex, EXx } },
5790 },
5791
5792 /* PREFIX_VEX_0F3846 */
5793 {
5794 { Bad_Opcode },
5795 { Bad_Opcode },
5796 { VEX_W_TABLE (VEX_W_0F3846_P_2) },
5797 },
5798
5799 /* PREFIX_VEX_0F3847 */
5800 {
5801 { Bad_Opcode },
5802 { Bad_Opcode },
5803 { "vpsllv%LW", { XM, Vex, EXx } },
5804 },
5805
5806 /* PREFIX_VEX_0F3858 */
5807 {
5808 { Bad_Opcode },
5809 { Bad_Opcode },
5810 { VEX_W_TABLE (VEX_W_0F3858_P_2) },
5811 },
5812
5813 /* PREFIX_VEX_0F3859 */
5814 {
5815 { Bad_Opcode },
5816 { Bad_Opcode },
5817 { VEX_W_TABLE (VEX_W_0F3859_P_2) },
5818 },
5819
5820 /* PREFIX_VEX_0F385A */
5821 {
5822 { Bad_Opcode },
5823 { Bad_Opcode },
5824 { MOD_TABLE (MOD_VEX_0F385A_PREFIX_2) },
5825 },
5826
5827 /* PREFIX_VEX_0F3878 */
5828 {
5829 { Bad_Opcode },
5830 { Bad_Opcode },
5831 { VEX_W_TABLE (VEX_W_0F3878_P_2) },
5832 },
5833
5834 /* PREFIX_VEX_0F3879 */
5835 {
5836 { Bad_Opcode },
5837 { Bad_Opcode },
5838 { VEX_W_TABLE (VEX_W_0F3879_P_2) },
5839 },
5840
5841 /* PREFIX_VEX_0F388C */
5842 {
5843 { Bad_Opcode },
5844 { Bad_Opcode },
f7002f42 5845 { MOD_TABLE (MOD_VEX_0F388C_PREFIX_2) },
6c30d220
L
5846 },
5847
5848 /* PREFIX_VEX_0F388E */
5849 {
5850 { Bad_Opcode },
5851 { Bad_Opcode },
f7002f42 5852 { MOD_TABLE (MOD_VEX_0F388E_PREFIX_2) },
6c30d220
L
5853 },
5854
5855 /* PREFIX_VEX_0F3890 */
5856 {
5857 { Bad_Opcode },
5858 { Bad_Opcode },
5859 { "vpgatherd%LW", { XM, MVexVSIBDWpX, Vex } },
5860 },
5861
5862 /* PREFIX_VEX_0F3891 */
5863 {
5864 { Bad_Opcode },
5865 { Bad_Opcode },
5866 { "vpgatherq%LW", { XMGatherQ, MVexVSIBQWpX, VexGatherQ } },
5867 },
5868
5869 /* PREFIX_VEX_0F3892 */
5870 {
5871 { Bad_Opcode },
5872 { Bad_Opcode },
5873 { "vgatherdp%XW", { XM, MVexVSIBDWpX, Vex } },
5874 },
5875
5876 /* PREFIX_VEX_0F3893 */
5877 {
5878 { Bad_Opcode },
5879 { Bad_Opcode },
5880 { "vgatherqp%XW", { XMGatherQ, MVexVSIBQWpX, VexGatherQ } },
5881 },
5882
592a252b 5883 /* PREFIX_VEX_0F3896 */
a5ff0eb2 5884 {
592d1631
L
5885 { Bad_Opcode },
5886 { Bad_Opcode },
0bfee649 5887 { "vfmaddsub132p%XW", { XM, Vex, EXx } },
a5ff0eb2
L
5888 },
5889
592a252b 5890 /* PREFIX_VEX_0F3897 */
a5ff0eb2 5891 {
592d1631
L
5892 { Bad_Opcode },
5893 { Bad_Opcode },
0bfee649 5894 { "vfmsubadd132p%XW", { XM, Vex, EXx } },
a5ff0eb2
L
5895 },
5896
592a252b 5897 /* PREFIX_VEX_0F3898 */
a5ff0eb2 5898 {
592d1631
L
5899 { Bad_Opcode },
5900 { Bad_Opcode },
0bfee649 5901 { "vfmadd132p%XW", { XM, Vex, EXx } },
a5ff0eb2
L
5902 },
5903
592a252b 5904 /* PREFIX_VEX_0F3899 */
a5ff0eb2 5905 {
592d1631
L
5906 { Bad_Opcode },
5907 { Bad_Opcode },
1c480963 5908 { "vfmadd132s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
a5ff0eb2
L
5909 },
5910
592a252b 5911 /* PREFIX_VEX_0F389A */
a5ff0eb2 5912 {
592d1631
L
5913 { Bad_Opcode },
5914 { Bad_Opcode },
0bfee649 5915 { "vfmsub132p%XW", { XM, Vex, EXx } },
a5ff0eb2
L
5916 },
5917
592a252b 5918 /* PREFIX_VEX_0F389B */
c0f3af97 5919 {
592d1631
L
5920 { Bad_Opcode },
5921 { Bad_Opcode },
1c480963 5922 { "vfmsub132s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
c0f3af97
L
5923 },
5924
592a252b 5925 /* PREFIX_VEX_0F389C */
c0f3af97 5926 {
592d1631
L
5927 { Bad_Opcode },
5928 { Bad_Opcode },
0bfee649 5929 { "vfnmadd132p%XW", { XM, Vex, EXx } },
c0f3af97
L
5930 },
5931
592a252b 5932 /* PREFIX_VEX_0F389D */
c0f3af97 5933 {
592d1631
L
5934 { Bad_Opcode },
5935 { Bad_Opcode },
1c480963 5936 { "vfnmadd132s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
c0f3af97
L
5937 },
5938
592a252b 5939 /* PREFIX_VEX_0F389E */
c0f3af97 5940 {
592d1631
L
5941 { Bad_Opcode },
5942 { Bad_Opcode },
0bfee649 5943 { "vfnmsub132p%XW", { XM, Vex, EXx } },
c0f3af97
L
5944 },
5945
592a252b 5946 /* PREFIX_VEX_0F389F */
c0f3af97 5947 {
592d1631
L
5948 { Bad_Opcode },
5949 { Bad_Opcode },
1c480963 5950 { "vfnmsub132s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
c0f3af97
L
5951 },
5952
592a252b 5953 /* PREFIX_VEX_0F38A6 */
c0f3af97 5954 {
592d1631
L
5955 { Bad_Opcode },
5956 { Bad_Opcode },
0bfee649 5957 { "vfmaddsub213p%XW", { XM, Vex, EXx } },
592d1631 5958 { Bad_Opcode },
c0f3af97
L
5959 },
5960
592a252b 5961 /* PREFIX_VEX_0F38A7 */
c0f3af97 5962 {
592d1631
L
5963 { Bad_Opcode },
5964 { Bad_Opcode },
0bfee649 5965 { "vfmsubadd213p%XW", { XM, Vex, EXx } },
c0f3af97
L
5966 },
5967
592a252b 5968 /* PREFIX_VEX_0F38A8 */
c0f3af97 5969 {
592d1631
L
5970 { Bad_Opcode },
5971 { Bad_Opcode },
0bfee649 5972 { "vfmadd213p%XW", { XM, Vex, EXx } },
c0f3af97
L
5973 },
5974
592a252b 5975 /* PREFIX_VEX_0F38A9 */
c0f3af97 5976 {
592d1631
L
5977 { Bad_Opcode },
5978 { Bad_Opcode },
1c480963 5979 { "vfmadd213s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
c0f3af97
L
5980 },
5981
592a252b 5982 /* PREFIX_VEX_0F38AA */
c0f3af97 5983 {
592d1631
L
5984 { Bad_Opcode },
5985 { Bad_Opcode },
0bfee649 5986 { "vfmsub213p%XW", { XM, Vex, EXx } },
c0f3af97
L
5987 },
5988
592a252b 5989 /* PREFIX_VEX_0F38AB */
c0f3af97 5990 {
592d1631
L
5991 { Bad_Opcode },
5992 { Bad_Opcode },
1c480963 5993 { "vfmsub213s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
c0f3af97
L
5994 },
5995
592a252b 5996 /* PREFIX_VEX_0F38AC */
c0f3af97 5997 {
592d1631
L
5998 { Bad_Opcode },
5999 { Bad_Opcode },
0bfee649 6000 { "vfnmadd213p%XW", { XM, Vex, EXx } },
c0f3af97
L
6001 },
6002
592a252b 6003 /* PREFIX_VEX_0F38AD */
c0f3af97 6004 {
592d1631
L
6005 { Bad_Opcode },
6006 { Bad_Opcode },
1c480963 6007 { "vfnmadd213s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
c0f3af97
L
6008 },
6009
592a252b 6010 /* PREFIX_VEX_0F38AE */
c0f3af97 6011 {
592d1631
L
6012 { Bad_Opcode },
6013 { Bad_Opcode },
0bfee649 6014 { "vfnmsub213p%XW", { XM, Vex, EXx } },
c0f3af97
L
6015 },
6016
592a252b 6017 /* PREFIX_VEX_0F38AF */
c0f3af97 6018 {
592d1631
L
6019 { Bad_Opcode },
6020 { Bad_Opcode },
1c480963 6021 { "vfnmsub213s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
c0f3af97
L
6022 },
6023
592a252b 6024 /* PREFIX_VEX_0F38B6 */
c0f3af97 6025 {
592d1631
L
6026 { Bad_Opcode },
6027 { Bad_Opcode },
0bfee649 6028 { "vfmaddsub231p%XW", { XM, Vex, EXx } },
c0f3af97
L
6029 },
6030
592a252b 6031 /* PREFIX_VEX_0F38B7 */
c0f3af97 6032 {
592d1631
L
6033 { Bad_Opcode },
6034 { Bad_Opcode },
0bfee649 6035 { "vfmsubadd231p%XW", { XM, Vex, EXx } },
c0f3af97
L
6036 },
6037
592a252b 6038 /* PREFIX_VEX_0F38B8 */
c0f3af97 6039 {
592d1631
L
6040 { Bad_Opcode },
6041 { Bad_Opcode },
0bfee649 6042 { "vfmadd231p%XW", { XM, Vex, EXx } },
c0f3af97
L
6043 },
6044
592a252b 6045 /* PREFIX_VEX_0F38B9 */
c0f3af97 6046 {
592d1631
L
6047 { Bad_Opcode },
6048 { Bad_Opcode },
1c480963 6049 { "vfmadd231s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
c0f3af97
L
6050 },
6051
592a252b 6052 /* PREFIX_VEX_0F38BA */
c0f3af97 6053 {
592d1631
L
6054 { Bad_Opcode },
6055 { Bad_Opcode },
0bfee649 6056 { "vfmsub231p%XW", { XM, Vex, EXx } },
c0f3af97
L
6057 },
6058
592a252b 6059 /* PREFIX_VEX_0F38BB */
c0f3af97 6060 {
592d1631
L
6061 { Bad_Opcode },
6062 { Bad_Opcode },
1c480963 6063 { "vfmsub231s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
c0f3af97
L
6064 },
6065
592a252b 6066 /* PREFIX_VEX_0F38BC */
c0f3af97 6067 {
592d1631
L
6068 { Bad_Opcode },
6069 { Bad_Opcode },
0bfee649 6070 { "vfnmadd231p%XW", { XM, Vex, EXx } },
c0f3af97
L
6071 },
6072
592a252b 6073 /* PREFIX_VEX_0F38BD */
c0f3af97 6074 {
592d1631
L
6075 { Bad_Opcode },
6076 { Bad_Opcode },
1c480963 6077 { "vfnmadd231s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
c0f3af97
L
6078 },
6079
592a252b 6080 /* PREFIX_VEX_0F38BE */
c0f3af97 6081 {
592d1631
L
6082 { Bad_Opcode },
6083 { Bad_Opcode },
0bfee649 6084 { "vfnmsub231p%XW", { XM, Vex, EXx } },
c0f3af97
L
6085 },
6086
592a252b 6087 /* PREFIX_VEX_0F38BF */
c0f3af97 6088 {
592d1631
L
6089 { Bad_Opcode },
6090 { Bad_Opcode },
1c480963 6091 { "vfnmsub231s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
c0f3af97
L
6092 },
6093
592a252b 6094 /* PREFIX_VEX_0F38DB */
c0f3af97 6095 {
592d1631
L
6096 { Bad_Opcode },
6097 { Bad_Opcode },
592a252b 6098 { VEX_LEN_TABLE (VEX_LEN_0F38DB_P_2) },
c0f3af97
L
6099 },
6100
592a252b 6101 /* PREFIX_VEX_0F38DC */
c0f3af97 6102 {
592d1631
L
6103 { Bad_Opcode },
6104 { Bad_Opcode },
592a252b 6105 { VEX_LEN_TABLE (VEX_LEN_0F38DC_P_2) },
c0f3af97
L
6106 },
6107
592a252b 6108 /* PREFIX_VEX_0F38DD */
c0f3af97 6109 {
592d1631
L
6110 { Bad_Opcode },
6111 { Bad_Opcode },
592a252b 6112 { VEX_LEN_TABLE (VEX_LEN_0F38DD_P_2) },
c0f3af97
L
6113 },
6114
592a252b 6115 /* PREFIX_VEX_0F38DE */
c0f3af97 6116 {
592d1631
L
6117 { Bad_Opcode },
6118 { Bad_Opcode },
592a252b 6119 { VEX_LEN_TABLE (VEX_LEN_0F38DE_P_2) },
c0f3af97
L
6120 },
6121
592a252b 6122 /* PREFIX_VEX_0F38DF */
c0f3af97 6123 {
592d1631
L
6124 { Bad_Opcode },
6125 { Bad_Opcode },
592a252b 6126 { VEX_LEN_TABLE (VEX_LEN_0F38DF_P_2) },
c0f3af97
L
6127 },
6128
f12dc422
L
6129 /* PREFIX_VEX_0F38F2 */
6130 {
6131 { VEX_LEN_TABLE (VEX_LEN_0F38F2_P_0) },
6132 },
6133
6134 /* PREFIX_VEX_0F38F3_REG_1 */
6135 {
6136 { VEX_LEN_TABLE (VEX_LEN_0F38F3_R_1_P_0) },
6137 },
6138
6139 /* PREFIX_VEX_0F38F3_REG_2 */
6140 {
6141 { VEX_LEN_TABLE (VEX_LEN_0F38F3_R_2_P_0) },
6142 },
6143
6144 /* PREFIX_VEX_0F38F3_REG_3 */
6145 {
6146 { VEX_LEN_TABLE (VEX_LEN_0F38F3_R_3_P_0) },
6147 },
6148
6c30d220
L
6149 /* PREFIX_VEX_0F38F5 */
6150 {
6151 { VEX_LEN_TABLE (VEX_LEN_0F38F5_P_0) },
6152 { VEX_LEN_TABLE (VEX_LEN_0F38F5_P_1) },
6153 { Bad_Opcode },
6154 { VEX_LEN_TABLE (VEX_LEN_0F38F5_P_3) },
6155 },
6156
6157 /* PREFIX_VEX_0F38F6 */
6158 {
6159 { Bad_Opcode },
6160 { Bad_Opcode },
6161 { Bad_Opcode },
6162 { VEX_LEN_TABLE (VEX_LEN_0F38F6_P_3) },
6163 },
6164
f12dc422
L
6165 /* PREFIX_VEX_0F38F7 */
6166 {
6167 { VEX_LEN_TABLE (VEX_LEN_0F38F7_P_0) },
6c30d220
L
6168 { VEX_LEN_TABLE (VEX_LEN_0F38F7_P_1) },
6169 { VEX_LEN_TABLE (VEX_LEN_0F38F7_P_2) },
6170 { VEX_LEN_TABLE (VEX_LEN_0F38F7_P_3) },
6171 },
6172
6173 /* PREFIX_VEX_0F3A00 */
6174 {
6175 { Bad_Opcode },
6176 { Bad_Opcode },
6177 { VEX_LEN_TABLE (VEX_LEN_0F3A00_P_2) },
6178 },
6179
6180 /* PREFIX_VEX_0F3A01 */
6181 {
6182 { Bad_Opcode },
6183 { Bad_Opcode },
6184 { VEX_LEN_TABLE (VEX_LEN_0F3A01_P_2) },
6185 },
6186
6187 /* PREFIX_VEX_0F3A02 */
6188 {
6189 { Bad_Opcode },
6190 { Bad_Opcode },
6191 { VEX_W_TABLE (VEX_W_0F3A02_P_2) },
f12dc422
L
6192 },
6193
592a252b 6194 /* PREFIX_VEX_0F3A04 */
c0f3af97 6195 {
592d1631
L
6196 { Bad_Opcode },
6197 { Bad_Opcode },
592a252b 6198 { VEX_W_TABLE (VEX_W_0F3A04_P_2) },
c0f3af97
L
6199 },
6200
592a252b 6201 /* PREFIX_VEX_0F3A05 */
c0f3af97 6202 {
592d1631
L
6203 { Bad_Opcode },
6204 { Bad_Opcode },
592a252b 6205 { VEX_W_TABLE (VEX_W_0F3A05_P_2) },
c0f3af97
L
6206 },
6207
592a252b 6208 /* PREFIX_VEX_0F3A06 */
c0f3af97 6209 {
592d1631
L
6210 { Bad_Opcode },
6211 { Bad_Opcode },
592a252b 6212 { VEX_LEN_TABLE (VEX_LEN_0F3A06_P_2) },
c0f3af97
L
6213 },
6214
592a252b 6215 /* PREFIX_VEX_0F3A08 */
c0f3af97 6216 {
592d1631
L
6217 { Bad_Opcode },
6218 { Bad_Opcode },
592a252b 6219 { VEX_W_TABLE (VEX_W_0F3A08_P_2) },
c0f3af97
L
6220 },
6221
592a252b 6222 /* PREFIX_VEX_0F3A09 */
c0f3af97 6223 {
592d1631
L
6224 { Bad_Opcode },
6225 { Bad_Opcode },
592a252b 6226 { VEX_W_TABLE (VEX_W_0F3A09_P_2) },
c0f3af97
L
6227 },
6228
592a252b 6229 /* PREFIX_VEX_0F3A0A */
c0f3af97 6230 {
592d1631
L
6231 { Bad_Opcode },
6232 { Bad_Opcode },
592a252b 6233 { VEX_LEN_TABLE (VEX_LEN_0F3A0A_P_2) },
0bfee649
L
6234 },
6235
592a252b 6236 /* PREFIX_VEX_0F3A0B */
0bfee649 6237 {
592d1631
L
6238 { Bad_Opcode },
6239 { Bad_Opcode },
592a252b 6240 { VEX_LEN_TABLE (VEX_LEN_0F3A0B_P_2) },
0bfee649
L
6241 },
6242
592a252b 6243 /* PREFIX_VEX_0F3A0C */
0bfee649 6244 {
592d1631
L
6245 { Bad_Opcode },
6246 { Bad_Opcode },
592a252b 6247 { VEX_W_TABLE (VEX_W_0F3A0C_P_2) },
0bfee649
L
6248 },
6249
592a252b 6250 /* PREFIX_VEX_0F3A0D */
0bfee649 6251 {
592d1631
L
6252 { Bad_Opcode },
6253 { Bad_Opcode },
592a252b 6254 { VEX_W_TABLE (VEX_W_0F3A0D_P_2) },
c0f3af97
L
6255 },
6256
592a252b 6257 /* PREFIX_VEX_0F3A0E */
0bfee649 6258 {
592d1631
L
6259 { Bad_Opcode },
6260 { Bad_Opcode },
6c30d220 6261 { VEX_W_TABLE (VEX_W_0F3A0E_P_2) },
0bfee649
L
6262 },
6263
592a252b 6264 /* PREFIX_VEX_0F3A0F */
0bfee649 6265 {
592d1631
L
6266 { Bad_Opcode },
6267 { Bad_Opcode },
6c30d220 6268 { VEX_W_TABLE (VEX_W_0F3A0F_P_2) },
0bfee649
L
6269 },
6270
592a252b 6271 /* PREFIX_VEX_0F3A14 */
0bfee649 6272 {
592d1631
L
6273 { Bad_Opcode },
6274 { Bad_Opcode },
592a252b 6275 { VEX_LEN_TABLE (VEX_LEN_0F3A14_P_2) },
0bfee649
L
6276 },
6277
592a252b 6278 /* PREFIX_VEX_0F3A15 */
0bfee649 6279 {
592d1631
L
6280 { Bad_Opcode },
6281 { Bad_Opcode },
592a252b 6282 { VEX_LEN_TABLE (VEX_LEN_0F3A15_P_2) },
0bfee649
L
6283 },
6284
592a252b 6285 /* PREFIX_VEX_0F3A16 */
c0f3af97 6286 {
592d1631
L
6287 { Bad_Opcode },
6288 { Bad_Opcode },
592a252b 6289 { VEX_LEN_TABLE (VEX_LEN_0F3A16_P_2) },
c0f3af97
L
6290 },
6291
592a252b 6292 /* PREFIX_VEX_0F3A17 */
c0f3af97 6293 {
592d1631
L
6294 { Bad_Opcode },
6295 { Bad_Opcode },
592a252b 6296 { VEX_LEN_TABLE (VEX_LEN_0F3A17_P_2) },
c0f3af97
L
6297 },
6298
592a252b 6299 /* PREFIX_VEX_0F3A18 */
c0f3af97 6300 {
592d1631
L
6301 { Bad_Opcode },
6302 { Bad_Opcode },
592a252b 6303 { VEX_LEN_TABLE (VEX_LEN_0F3A18_P_2) },
c0f3af97
L
6304 },
6305
592a252b 6306 /* PREFIX_VEX_0F3A19 */
c0f3af97 6307 {
592d1631
L
6308 { Bad_Opcode },
6309 { Bad_Opcode },
592a252b 6310 { VEX_LEN_TABLE (VEX_LEN_0F3A19_P_2) },
c0f3af97
L
6311 },
6312
592a252b 6313 /* PREFIX_VEX_0F3A1D */
c7b8aa3a
L
6314 {
6315 { Bad_Opcode },
6316 { Bad_Opcode },
6317 { "vcvtps2ph", { EXxmmq, XM, Ib } },
6318 },
6319
592a252b 6320 /* PREFIX_VEX_0F3A20 */
c0f3af97 6321 {
592d1631
L
6322 { Bad_Opcode },
6323 { Bad_Opcode },
592a252b 6324 { VEX_LEN_TABLE (VEX_LEN_0F3A20_P_2) },
c0f3af97
L
6325 },
6326
592a252b 6327 /* PREFIX_VEX_0F3A21 */
c0f3af97 6328 {
592d1631
L
6329 { Bad_Opcode },
6330 { Bad_Opcode },
592a252b 6331 { VEX_LEN_TABLE (VEX_LEN_0F3A21_P_2) },
c0f3af97
L
6332 },
6333
592a252b 6334 /* PREFIX_VEX_0F3A22 */
0bfee649 6335 {
592d1631
L
6336 { Bad_Opcode },
6337 { Bad_Opcode },
592a252b 6338 { VEX_LEN_TABLE (VEX_LEN_0F3A22_P_2) },
0bfee649
L
6339 },
6340
43234a1e
L
6341 /* PREFIX_VEX_0F3A30 */
6342 {
6343 { Bad_Opcode },
6344 { Bad_Opcode },
6345 { VEX_LEN_TABLE (VEX_LEN_0F3A30_P_2) },
6346 },
6347
1ba585e8
IT
6348 /* PREFIX_VEX_0F3A31 */
6349 {
6350 { Bad_Opcode },
6351 { Bad_Opcode },
6352 { VEX_LEN_TABLE (VEX_LEN_0F3A31_P_2) },
6353 },
6354
43234a1e
L
6355 /* PREFIX_VEX_0F3A32 */
6356 {
6357 { Bad_Opcode },
6358 { Bad_Opcode },
6359 { VEX_LEN_TABLE (VEX_LEN_0F3A32_P_2) },
6360 },
6361
1ba585e8
IT
6362 /* PREFIX_VEX_0F3A33 */
6363 {
6364 { Bad_Opcode },
6365 { Bad_Opcode },
6366 { VEX_LEN_TABLE (VEX_LEN_0F3A33_P_2) },
6367 },
6368
6c30d220
L
6369 /* PREFIX_VEX_0F3A38 */
6370 {
6371 { Bad_Opcode },
6372 { Bad_Opcode },
6373 { VEX_LEN_TABLE (VEX_LEN_0F3A38_P_2) },
6374 },
6375
6376 /* PREFIX_VEX_0F3A39 */
6377 {
6378 { Bad_Opcode },
6379 { Bad_Opcode },
6380 { VEX_LEN_TABLE (VEX_LEN_0F3A39_P_2) },
6381 },
6382
592a252b 6383 /* PREFIX_VEX_0F3A40 */
c0f3af97 6384 {
592d1631
L
6385 { Bad_Opcode },
6386 { Bad_Opcode },
592a252b 6387 { VEX_W_TABLE (VEX_W_0F3A40_P_2) },
c0f3af97
L
6388 },
6389
592a252b 6390 /* PREFIX_VEX_0F3A41 */
c0f3af97 6391 {
592d1631
L
6392 { Bad_Opcode },
6393 { Bad_Opcode },
592a252b 6394 { VEX_LEN_TABLE (VEX_LEN_0F3A41_P_2) },
c0f3af97
L
6395 },
6396
592a252b 6397 /* PREFIX_VEX_0F3A42 */
c0f3af97 6398 {
592d1631
L
6399 { Bad_Opcode },
6400 { Bad_Opcode },
6c30d220 6401 { VEX_W_TABLE (VEX_W_0F3A42_P_2) },
c0f3af97
L
6402 },
6403
592a252b 6404 /* PREFIX_VEX_0F3A44 */
ce2f5b3c 6405 {
592d1631
L
6406 { Bad_Opcode },
6407 { Bad_Opcode },
592a252b 6408 { VEX_LEN_TABLE (VEX_LEN_0F3A44_P_2) },
ce2f5b3c
L
6409 },
6410
6c30d220
L
6411 /* PREFIX_VEX_0F3A46 */
6412 {
6413 { Bad_Opcode },
6414 { Bad_Opcode },
6415 { VEX_LEN_TABLE (VEX_LEN_0F3A46_P_2) },
6416 },
6417
592a252b 6418 /* PREFIX_VEX_0F3A48 */
a683cc34
SP
6419 {
6420 { Bad_Opcode },
6421 { Bad_Opcode },
592a252b 6422 { VEX_W_TABLE (VEX_W_0F3A48_P_2) },
a683cc34
SP
6423 },
6424
592a252b 6425 /* PREFIX_VEX_0F3A49 */
a683cc34
SP
6426 {
6427 { Bad_Opcode },
6428 { Bad_Opcode },
592a252b 6429 { VEX_W_TABLE (VEX_W_0F3A49_P_2) },
a683cc34
SP
6430 },
6431
592a252b 6432 /* PREFIX_VEX_0F3A4A */
c0f3af97 6433 {
592d1631
L
6434 { Bad_Opcode },
6435 { Bad_Opcode },
592a252b 6436 { VEX_W_TABLE (VEX_W_0F3A4A_P_2) },
c0f3af97
L
6437 },
6438
592a252b 6439 /* PREFIX_VEX_0F3A4B */
c0f3af97 6440 {
592d1631
L
6441 { Bad_Opcode },
6442 { Bad_Opcode },
592a252b 6443 { VEX_W_TABLE (VEX_W_0F3A4B_P_2) },
c0f3af97
L
6444 },
6445
592a252b 6446 /* PREFIX_VEX_0F3A4C */
c0f3af97 6447 {
592d1631
L
6448 { Bad_Opcode },
6449 { Bad_Opcode },
6c30d220 6450 { VEX_W_TABLE (VEX_W_0F3A4C_P_2) },
c0f3af97
L
6451 },
6452
592a252b 6453 /* PREFIX_VEX_0F3A5C */
922d8de8 6454 {
592d1631
L
6455 { Bad_Opcode },
6456 { Bad_Opcode },
206c2556 6457 { "vfmaddsubps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
922d8de8
DR
6458 },
6459
592a252b 6460 /* PREFIX_VEX_0F3A5D */
922d8de8 6461 {
592d1631
L
6462 { Bad_Opcode },
6463 { Bad_Opcode },
206c2556 6464 { "vfmaddsubpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
922d8de8
DR
6465 },
6466
592a252b 6467 /* PREFIX_VEX_0F3A5E */
922d8de8 6468 {
592d1631
L
6469 { Bad_Opcode },
6470 { Bad_Opcode },
206c2556 6471 { "vfmsubaddps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
922d8de8
DR
6472 },
6473
592a252b 6474 /* PREFIX_VEX_0F3A5F */
922d8de8 6475 {
592d1631
L
6476 { Bad_Opcode },
6477 { Bad_Opcode },
206c2556 6478 { "vfmsubaddpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
922d8de8
DR
6479 },
6480
592a252b 6481 /* PREFIX_VEX_0F3A60 */
c0f3af97 6482 {
592d1631
L
6483 { Bad_Opcode },
6484 { Bad_Opcode },
592a252b 6485 { VEX_LEN_TABLE (VEX_LEN_0F3A60_P_2) },
592d1631 6486 { Bad_Opcode },
c0f3af97
L
6487 },
6488
592a252b 6489 /* PREFIX_VEX_0F3A61 */
c0f3af97 6490 {
592d1631
L
6491 { Bad_Opcode },
6492 { Bad_Opcode },
592a252b 6493 { VEX_LEN_TABLE (VEX_LEN_0F3A61_P_2) },
c0f3af97
L
6494 },
6495
592a252b 6496 /* PREFIX_VEX_0F3A62 */
c0f3af97 6497 {
592d1631
L
6498 { Bad_Opcode },
6499 { Bad_Opcode },
592a252b 6500 { VEX_LEN_TABLE (VEX_LEN_0F3A62_P_2) },
c0f3af97
L
6501 },
6502
592a252b 6503 /* PREFIX_VEX_0F3A63 */
c0f3af97 6504 {
592d1631
L
6505 { Bad_Opcode },
6506 { Bad_Opcode },
592a252b 6507 { VEX_LEN_TABLE (VEX_LEN_0F3A63_P_2) },
c0f3af97 6508 },
a5ff0eb2 6509
592a252b 6510 /* PREFIX_VEX_0F3A68 */
922d8de8 6511 {
592d1631
L
6512 { Bad_Opcode },
6513 { Bad_Opcode },
206c2556 6514 { "vfmaddps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
922d8de8
DR
6515 },
6516
592a252b 6517 /* PREFIX_VEX_0F3A69 */
922d8de8 6518 {
592d1631
L
6519 { Bad_Opcode },
6520 { Bad_Opcode },
206c2556 6521 { "vfmaddpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
922d8de8
DR
6522 },
6523
592a252b 6524 /* PREFIX_VEX_0F3A6A */
922d8de8 6525 {
592d1631
L
6526 { Bad_Opcode },
6527 { Bad_Opcode },
592a252b 6528 { VEX_LEN_TABLE (VEX_LEN_0F3A6A_P_2) },
922d8de8
DR
6529 },
6530
592a252b 6531 /* PREFIX_VEX_0F3A6B */
922d8de8 6532 {
592d1631
L
6533 { Bad_Opcode },
6534 { Bad_Opcode },
592a252b 6535 { VEX_LEN_TABLE (VEX_LEN_0F3A6B_P_2) },
922d8de8
DR
6536 },
6537
592a252b 6538 /* PREFIX_VEX_0F3A6C */
922d8de8 6539 {
592d1631
L
6540 { Bad_Opcode },
6541 { Bad_Opcode },
206c2556 6542 { "vfmsubps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
922d8de8
DR
6543 },
6544
592a252b 6545 /* PREFIX_VEX_0F3A6D */
922d8de8 6546 {
592d1631
L
6547 { Bad_Opcode },
6548 { Bad_Opcode },
206c2556 6549 { "vfmsubpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
922d8de8
DR
6550 },
6551
592a252b 6552 /* PREFIX_VEX_0F3A6E */
922d8de8 6553 {
592d1631
L
6554 { Bad_Opcode },
6555 { Bad_Opcode },
592a252b 6556 { VEX_LEN_TABLE (VEX_LEN_0F3A6E_P_2) },
922d8de8
DR
6557 },
6558
592a252b 6559 /* PREFIX_VEX_0F3A6F */
922d8de8 6560 {
592d1631
L
6561 { Bad_Opcode },
6562 { Bad_Opcode },
592a252b 6563 { VEX_LEN_TABLE (VEX_LEN_0F3A6F_P_2) },
922d8de8
DR
6564 },
6565
592a252b 6566 /* PREFIX_VEX_0F3A78 */
922d8de8 6567 {
592d1631
L
6568 { Bad_Opcode },
6569 { Bad_Opcode },
206c2556 6570 { "vfnmaddps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
922d8de8
DR
6571 },
6572
592a252b 6573 /* PREFIX_VEX_0F3A79 */
922d8de8 6574 {
592d1631
L
6575 { Bad_Opcode },
6576 { Bad_Opcode },
206c2556 6577 { "vfnmaddpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
922d8de8
DR
6578 },
6579
592a252b 6580 /* PREFIX_VEX_0F3A7A */
922d8de8 6581 {
592d1631
L
6582 { Bad_Opcode },
6583 { Bad_Opcode },
592a252b 6584 { VEX_LEN_TABLE (VEX_LEN_0F3A7A_P_2) },
922d8de8
DR
6585 },
6586
592a252b 6587 /* PREFIX_VEX_0F3A7B */
922d8de8 6588 {
592d1631
L
6589 { Bad_Opcode },
6590 { Bad_Opcode },
592a252b 6591 { VEX_LEN_TABLE (VEX_LEN_0F3A7B_P_2) },
922d8de8
DR
6592 },
6593
592a252b 6594 /* PREFIX_VEX_0F3A7C */
922d8de8 6595 {
592d1631
L
6596 { Bad_Opcode },
6597 { Bad_Opcode },
206c2556 6598 { "vfnmsubps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
592d1631 6599 { Bad_Opcode },
922d8de8
DR
6600 },
6601
592a252b 6602 /* PREFIX_VEX_0F3A7D */
922d8de8 6603 {
592d1631
L
6604 { Bad_Opcode },
6605 { Bad_Opcode },
206c2556 6606 { "vfnmsubpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
922d8de8
DR
6607 },
6608
592a252b 6609 /* PREFIX_VEX_0F3A7E */
922d8de8 6610 {
592d1631
L
6611 { Bad_Opcode },
6612 { Bad_Opcode },
592a252b 6613 { VEX_LEN_TABLE (VEX_LEN_0F3A7E_P_2) },
922d8de8
DR
6614 },
6615
592a252b 6616 /* PREFIX_VEX_0F3A7F */
922d8de8 6617 {
592d1631
L
6618 { Bad_Opcode },
6619 { Bad_Opcode },
592a252b 6620 { VEX_LEN_TABLE (VEX_LEN_0F3A7F_P_2) },
922d8de8
DR
6621 },
6622
592a252b 6623 /* PREFIX_VEX_0F3ADF */
a5ff0eb2 6624 {
592d1631
L
6625 { Bad_Opcode },
6626 { Bad_Opcode },
592a252b 6627 { VEX_LEN_TABLE (VEX_LEN_0F3ADF_P_2) },
a5ff0eb2 6628 },
6c30d220
L
6629
6630 /* PREFIX_VEX_0F3AF0 */
6631 {
6632 { Bad_Opcode },
6633 { Bad_Opcode },
6634 { Bad_Opcode },
6635 { VEX_LEN_TABLE (VEX_LEN_0F3AF0_P_3) },
6636 },
43234a1e
L
6637
6638#define NEED_PREFIX_TABLE
6639#include "i386-dis-evex.h"
6640#undef NEED_PREFIX_TABLE
c0f3af97
L
6641};
6642
6643static const struct dis386 x86_64_table[][2] = {
6644 /* X86_64_06 */
6645 {
d9e3625e 6646 { "pushP", { es } },
c0f3af97
L
6647 },
6648
6649 /* X86_64_07 */
6650 {
d9e3625e 6651 { "popP", { es } },
c0f3af97
L
6652 },
6653
6654 /* X86_64_0D */
6655 {
d9e3625e 6656 { "pushP", { cs } },
c0f3af97
L
6657 },
6658
6659 /* X86_64_16 */
6660 {
d9e3625e 6661 { "pushP", { ss } },
c0f3af97
L
6662 },
6663
6664 /* X86_64_17 */
6665 {
d9e3625e 6666 { "popP", { ss } },
c0f3af97
L
6667 },
6668
6669 /* X86_64_1E */
6670 {
d9e3625e 6671 { "pushP", { ds } },
c0f3af97
L
6672 },
6673
6674 /* X86_64_1F */
6675 {
d9e3625e 6676 { "popP", { ds } },
c0f3af97
L
6677 },
6678
6679 /* X86_64_27 */
6680 {
6681 { "daa", { XX } },
c0f3af97
L
6682 },
6683
6684 /* X86_64_2F */
6685 {
6686 { "das", { XX } },
c0f3af97
L
6687 },
6688
6689 /* X86_64_37 */
6690 {
6691 { "aaa", { XX } },
c0f3af97
L
6692 },
6693
6694 /* X86_64_3F */
6695 {
6696 { "aas", { XX } },
c0f3af97
L
6697 },
6698
6699 /* X86_64_60 */
6700 {
d9e3625e 6701 { "pushaP", { XX } },
c0f3af97
L
6702 },
6703
6704 /* X86_64_61 */
6705 {
d9e3625e 6706 { "popaP", { XX } },
c0f3af97
L
6707 },
6708
6709 /* X86_64_62 */
6710 {
6711 { MOD_TABLE (MOD_62_32BIT) },
43234a1e 6712 { EVEX_TABLE (EVEX_0F) },
c0f3af97
L
6713 },
6714
6715 /* X86_64_63 */
6716 {
6717 { "arpl", { Ew, Gw } },
6718 { "movs{lq|xd}", { Gv, Ed } },
6719 },
6720
6721 /* X86_64_6D */
6722 {
6723 { "ins{R|}", { Yzr, indirDX } },
6724 { "ins{G|}", { Yzr, indirDX } },
6725 },
6726
6727 /* X86_64_6F */
6728 {
6729 { "outs{R|}", { indirDXr, Xz } },
6730 { "outs{G|}", { indirDXr, Xz } },
6731 },
6732
6733 /* X86_64_9A */
6734 {
6735 { "Jcall{T|}", { Ap } },
c0f3af97
L
6736 },
6737
6738 /* X86_64_C4 */
6739 {
6740 { MOD_TABLE (MOD_C4_32BIT) },
6741 { VEX_C4_TABLE (VEX_0F) },
6742 },
6743
6744 /* X86_64_C5 */
6745 {
6746 { MOD_TABLE (MOD_C5_32BIT) },
6747 { VEX_C5_TABLE (VEX_0F) },
6748 },
6749
6750 /* X86_64_CE */
6751 {
6752 { "into", { XX } },
c0f3af97
L
6753 },
6754
6755 /* X86_64_D4 */
6756 {
e3949f17 6757 { "aam", { Ib } },
c0f3af97
L
6758 },
6759
6760 /* X86_64_D5 */
6761 {
e3949f17 6762 { "aad", { Ib } },
c0f3af97
L
6763 },
6764
6765 /* X86_64_EA */
6766 {
6767 { "Jjmp{T|}", { Ap } },
c0f3af97
L
6768 },
6769
6770 /* X86_64_0F01_REG_0 */
6771 {
6772 { "sgdt{Q|IQ}", { M } },
6773 { "sgdt", { M } },
6774 },
6775
6776 /* X86_64_0F01_REG_1 */
6777 {
6778 { "sidt{Q|IQ}", { M } },
6779 { "sidt", { M } },
6780 },
6781
6782 /* X86_64_0F01_REG_2 */
6783 {
6784 { "lgdt{Q|Q}", { M } },
6785 { "lgdt", { M } },
6786 },
6787
6788 /* X86_64_0F01_REG_3 */
6789 {
6790 { "lidt{Q|Q}", { M } },
6791 { "lidt", { M } },
6792 },
6793};
6794
6795static const struct dis386 three_byte_table[][256] = {
c1e679ec
DR
6796
6797 /* THREE_BYTE_0F38 */
c0f3af97
L
6798 {
6799 /* 00 */
c1e679ec
DR
6800 { "pshufb", { MX, EM } },
6801 { "phaddw", { MX, EM } },
6802 { "phaddd", { MX, EM } },
6803 { "phaddsw", { MX, EM } },
6804 { "pmaddubsw", { MX, EM } },
6805 { "phsubw", { MX, EM } },
6806 { "phsubd", { MX, EM } },
6807 { "phsubsw", { MX, EM } },
c0f3af97 6808 /* 08 */
c1e679ec
DR
6809 { "psignb", { MX, EM } },
6810 { "psignw", { MX, EM } },
6811 { "psignd", { MX, EM } },
6812 { "pmulhrsw", { MX, EM } },
592d1631
L
6813 { Bad_Opcode },
6814 { Bad_Opcode },
6815 { Bad_Opcode },
6816 { Bad_Opcode },
f88c9eb0
SP
6817 /* 10 */
6818 { PREFIX_TABLE (PREFIX_0F3810) },
592d1631
L
6819 { Bad_Opcode },
6820 { Bad_Opcode },
6821 { Bad_Opcode },
f88c9eb0
SP
6822 { PREFIX_TABLE (PREFIX_0F3814) },
6823 { PREFIX_TABLE (PREFIX_0F3815) },
592d1631 6824 { Bad_Opcode },
f88c9eb0
SP
6825 { PREFIX_TABLE (PREFIX_0F3817) },
6826 /* 18 */
592d1631
L
6827 { Bad_Opcode },
6828 { Bad_Opcode },
6829 { Bad_Opcode },
6830 { Bad_Opcode },
f88c9eb0
SP
6831 { "pabsb", { MX, EM } },
6832 { "pabsw", { MX, EM } },
6833 { "pabsd", { MX, EM } },
592d1631 6834 { Bad_Opcode },
f88c9eb0
SP
6835 /* 20 */
6836 { PREFIX_TABLE (PREFIX_0F3820) },
6837 { PREFIX_TABLE (PREFIX_0F3821) },
6838 { PREFIX_TABLE (PREFIX_0F3822) },
6839 { PREFIX_TABLE (PREFIX_0F3823) },
6840 { PREFIX_TABLE (PREFIX_0F3824) },
6841 { PREFIX_TABLE (PREFIX_0F3825) },
592d1631
L
6842 { Bad_Opcode },
6843 { Bad_Opcode },
f88c9eb0
SP
6844 /* 28 */
6845 { PREFIX_TABLE (PREFIX_0F3828) },
6846 { PREFIX_TABLE (PREFIX_0F3829) },
6847 { PREFIX_TABLE (PREFIX_0F382A) },
6848 { PREFIX_TABLE (PREFIX_0F382B) },
592d1631
L
6849 { Bad_Opcode },
6850 { Bad_Opcode },
6851 { Bad_Opcode },
6852 { Bad_Opcode },
f88c9eb0
SP
6853 /* 30 */
6854 { PREFIX_TABLE (PREFIX_0F3830) },
6855 { PREFIX_TABLE (PREFIX_0F3831) },
6856 { PREFIX_TABLE (PREFIX_0F3832) },
6857 { PREFIX_TABLE (PREFIX_0F3833) },
6858 { PREFIX_TABLE (PREFIX_0F3834) },
6859 { PREFIX_TABLE (PREFIX_0F3835) },
592d1631 6860 { Bad_Opcode },
f88c9eb0
SP
6861 { PREFIX_TABLE (PREFIX_0F3837) },
6862 /* 38 */
6863 { PREFIX_TABLE (PREFIX_0F3838) },
6864 { PREFIX_TABLE (PREFIX_0F3839) },
6865 { PREFIX_TABLE (PREFIX_0F383A) },
6866 { PREFIX_TABLE (PREFIX_0F383B) },
6867 { PREFIX_TABLE (PREFIX_0F383C) },
6868 { PREFIX_TABLE (PREFIX_0F383D) },
6869 { PREFIX_TABLE (PREFIX_0F383E) },
6870 { PREFIX_TABLE (PREFIX_0F383F) },
6871 /* 40 */
6872 { PREFIX_TABLE (PREFIX_0F3840) },
6873 { PREFIX_TABLE (PREFIX_0F3841) },
592d1631
L
6874 { Bad_Opcode },
6875 { Bad_Opcode },
6876 { Bad_Opcode },
6877 { Bad_Opcode },
6878 { Bad_Opcode },
6879 { Bad_Opcode },
f88c9eb0 6880 /* 48 */
592d1631
L
6881 { Bad_Opcode },
6882 { Bad_Opcode },
6883 { Bad_Opcode },
6884 { Bad_Opcode },
6885 { Bad_Opcode },
6886 { Bad_Opcode },
6887 { Bad_Opcode },
6888 { Bad_Opcode },
f88c9eb0 6889 /* 50 */
592d1631
L
6890 { Bad_Opcode },
6891 { Bad_Opcode },
6892 { Bad_Opcode },
6893 { Bad_Opcode },
6894 { Bad_Opcode },
6895 { Bad_Opcode },
6896 { Bad_Opcode },
6897 { Bad_Opcode },
f88c9eb0 6898 /* 58 */
592d1631
L
6899 { Bad_Opcode },
6900 { Bad_Opcode },
6901 { Bad_Opcode },
6902 { Bad_Opcode },
6903 { Bad_Opcode },
6904 { Bad_Opcode },
6905 { Bad_Opcode },
6906 { Bad_Opcode },
f88c9eb0 6907 /* 60 */
592d1631
L
6908 { Bad_Opcode },
6909 { Bad_Opcode },
6910 { Bad_Opcode },
6911 { Bad_Opcode },
6912 { Bad_Opcode },
6913 { Bad_Opcode },
6914 { Bad_Opcode },
6915 { Bad_Opcode },
f88c9eb0 6916 /* 68 */
592d1631
L
6917 { Bad_Opcode },
6918 { Bad_Opcode },
6919 { Bad_Opcode },
6920 { Bad_Opcode },
6921 { Bad_Opcode },
6922 { Bad_Opcode },
6923 { Bad_Opcode },
6924 { Bad_Opcode },
f88c9eb0 6925 /* 70 */
592d1631
L
6926 { Bad_Opcode },
6927 { Bad_Opcode },
6928 { Bad_Opcode },
6929 { Bad_Opcode },
6930 { Bad_Opcode },
6931 { Bad_Opcode },
6932 { Bad_Opcode },
6933 { Bad_Opcode },
f88c9eb0 6934 /* 78 */
592d1631
L
6935 { Bad_Opcode },
6936 { Bad_Opcode },
6937 { Bad_Opcode },
6938 { Bad_Opcode },
6939 { Bad_Opcode },
6940 { Bad_Opcode },
6941 { Bad_Opcode },
6942 { Bad_Opcode },
f88c9eb0
SP
6943 /* 80 */
6944 { PREFIX_TABLE (PREFIX_0F3880) },
6945 { PREFIX_TABLE (PREFIX_0F3881) },
6c30d220 6946 { PREFIX_TABLE (PREFIX_0F3882) },
592d1631
L
6947 { Bad_Opcode },
6948 { Bad_Opcode },
6949 { Bad_Opcode },
6950 { Bad_Opcode },
6951 { Bad_Opcode },
f88c9eb0 6952 /* 88 */
592d1631
L
6953 { Bad_Opcode },
6954 { Bad_Opcode },
6955 { Bad_Opcode },
6956 { Bad_Opcode },
6957 { Bad_Opcode },
6958 { Bad_Opcode },
6959 { Bad_Opcode },
6960 { Bad_Opcode },
f88c9eb0 6961 /* 90 */
592d1631
L
6962 { Bad_Opcode },
6963 { Bad_Opcode },
6964 { Bad_Opcode },
6965 { Bad_Opcode },
6966 { Bad_Opcode },
6967 { Bad_Opcode },
6968 { Bad_Opcode },
6969 { Bad_Opcode },
f88c9eb0 6970 /* 98 */
592d1631
L
6971 { Bad_Opcode },
6972 { Bad_Opcode },
6973 { Bad_Opcode },
6974 { Bad_Opcode },
6975 { Bad_Opcode },
6976 { Bad_Opcode },
6977 { Bad_Opcode },
6978 { Bad_Opcode },
f88c9eb0 6979 /* a0 */
592d1631
L
6980 { Bad_Opcode },
6981 { Bad_Opcode },
6982 { Bad_Opcode },
6983 { Bad_Opcode },
6984 { Bad_Opcode },
6985 { Bad_Opcode },
6986 { Bad_Opcode },
6987 { Bad_Opcode },
f88c9eb0 6988 /* a8 */
592d1631
L
6989 { Bad_Opcode },
6990 { Bad_Opcode },
6991 { Bad_Opcode },
6992 { Bad_Opcode },
6993 { Bad_Opcode },
6994 { Bad_Opcode },
6995 { Bad_Opcode },
6996 { Bad_Opcode },
f88c9eb0 6997 /* b0 */
592d1631
L
6998 { Bad_Opcode },
6999 { Bad_Opcode },
7000 { Bad_Opcode },
7001 { Bad_Opcode },
7002 { Bad_Opcode },
7003 { Bad_Opcode },
7004 { Bad_Opcode },
7005 { Bad_Opcode },
f88c9eb0 7006 /* b8 */
592d1631
L
7007 { Bad_Opcode },
7008 { Bad_Opcode },
7009 { Bad_Opcode },
7010 { Bad_Opcode },
7011 { Bad_Opcode },
7012 { Bad_Opcode },
7013 { Bad_Opcode },
7014 { Bad_Opcode },
f88c9eb0 7015 /* c0 */
592d1631
L
7016 { Bad_Opcode },
7017 { Bad_Opcode },
7018 { Bad_Opcode },
7019 { Bad_Opcode },
7020 { Bad_Opcode },
7021 { Bad_Opcode },
7022 { Bad_Opcode },
7023 { Bad_Opcode },
f88c9eb0 7024 /* c8 */
a0046408
L
7025 { PREFIX_TABLE (PREFIX_0F38C8) },
7026 { PREFIX_TABLE (PREFIX_0F38C9) },
7027 { PREFIX_TABLE (PREFIX_0F38CA) },
7028 { PREFIX_TABLE (PREFIX_0F38CB) },
7029 { PREFIX_TABLE (PREFIX_0F38CC) },
7030 { PREFIX_TABLE (PREFIX_0F38CD) },
592d1631
L
7031 { Bad_Opcode },
7032 { Bad_Opcode },
f88c9eb0 7033 /* d0 */
592d1631
L
7034 { Bad_Opcode },
7035 { Bad_Opcode },
7036 { Bad_Opcode },
7037 { Bad_Opcode },
7038 { Bad_Opcode },
7039 { Bad_Opcode },
7040 { Bad_Opcode },
7041 { Bad_Opcode },
f88c9eb0 7042 /* d8 */
592d1631
L
7043 { Bad_Opcode },
7044 { Bad_Opcode },
7045 { Bad_Opcode },
f88c9eb0
SP
7046 { PREFIX_TABLE (PREFIX_0F38DB) },
7047 { PREFIX_TABLE (PREFIX_0F38DC) },
7048 { PREFIX_TABLE (PREFIX_0F38DD) },
7049 { PREFIX_TABLE (PREFIX_0F38DE) },
7050 { PREFIX_TABLE (PREFIX_0F38DF) },
7051 /* e0 */
592d1631
L
7052 { Bad_Opcode },
7053 { Bad_Opcode },
7054 { Bad_Opcode },
7055 { Bad_Opcode },
7056 { Bad_Opcode },
7057 { Bad_Opcode },
7058 { Bad_Opcode },
7059 { Bad_Opcode },
f88c9eb0 7060 /* e8 */
592d1631
L
7061 { Bad_Opcode },
7062 { Bad_Opcode },
7063 { Bad_Opcode },
7064 { Bad_Opcode },
7065 { Bad_Opcode },
7066 { Bad_Opcode },
7067 { Bad_Opcode },
7068 { Bad_Opcode },
f88c9eb0
SP
7069 /* f0 */
7070 { PREFIX_TABLE (PREFIX_0F38F0) },
7071 { PREFIX_TABLE (PREFIX_0F38F1) },
592d1631
L
7072 { Bad_Opcode },
7073 { Bad_Opcode },
7074 { Bad_Opcode },
7075 { Bad_Opcode },
e2e1fcde 7076 { PREFIX_TABLE (PREFIX_0F38F6) },
592d1631 7077 { Bad_Opcode },
f88c9eb0 7078 /* f8 */
592d1631
L
7079 { Bad_Opcode },
7080 { Bad_Opcode },
7081 { Bad_Opcode },
7082 { Bad_Opcode },
7083 { Bad_Opcode },
7084 { Bad_Opcode },
7085 { Bad_Opcode },
7086 { Bad_Opcode },
f88c9eb0
SP
7087 },
7088 /* THREE_BYTE_0F3A */
7089 {
7090 /* 00 */
592d1631
L
7091 { Bad_Opcode },
7092 { Bad_Opcode },
7093 { Bad_Opcode },
7094 { Bad_Opcode },
7095 { Bad_Opcode },
7096 { Bad_Opcode },
7097 { Bad_Opcode },
7098 { Bad_Opcode },
f88c9eb0
SP
7099 /* 08 */
7100 { PREFIX_TABLE (PREFIX_0F3A08) },
7101 { PREFIX_TABLE (PREFIX_0F3A09) },
7102 { PREFIX_TABLE (PREFIX_0F3A0A) },
7103 { PREFIX_TABLE (PREFIX_0F3A0B) },
7104 { PREFIX_TABLE (PREFIX_0F3A0C) },
7105 { PREFIX_TABLE (PREFIX_0F3A0D) },
7106 { PREFIX_TABLE (PREFIX_0F3A0E) },
7107 { "palignr", { MX, EM, Ib } },
7108 /* 10 */
592d1631
L
7109 { Bad_Opcode },
7110 { Bad_Opcode },
7111 { Bad_Opcode },
7112 { Bad_Opcode },
f88c9eb0
SP
7113 { PREFIX_TABLE (PREFIX_0F3A14) },
7114 { PREFIX_TABLE (PREFIX_0F3A15) },
7115 { PREFIX_TABLE (PREFIX_0F3A16) },
7116 { PREFIX_TABLE (PREFIX_0F3A17) },
7117 /* 18 */
592d1631
L
7118 { Bad_Opcode },
7119 { Bad_Opcode },
7120 { Bad_Opcode },
7121 { Bad_Opcode },
7122 { Bad_Opcode },
7123 { Bad_Opcode },
7124 { Bad_Opcode },
7125 { Bad_Opcode },
f88c9eb0
SP
7126 /* 20 */
7127 { PREFIX_TABLE (PREFIX_0F3A20) },
7128 { PREFIX_TABLE (PREFIX_0F3A21) },
7129 { PREFIX_TABLE (PREFIX_0F3A22) },
592d1631
L
7130 { Bad_Opcode },
7131 { Bad_Opcode },
7132 { Bad_Opcode },
7133 { Bad_Opcode },
7134 { Bad_Opcode },
f88c9eb0 7135 /* 28 */
592d1631
L
7136 { Bad_Opcode },
7137 { Bad_Opcode },
7138 { Bad_Opcode },
7139 { Bad_Opcode },
7140 { Bad_Opcode },
7141 { Bad_Opcode },
7142 { Bad_Opcode },
7143 { Bad_Opcode },
f88c9eb0 7144 /* 30 */
592d1631
L
7145 { Bad_Opcode },
7146 { Bad_Opcode },
7147 { Bad_Opcode },
7148 { Bad_Opcode },
7149 { Bad_Opcode },
7150 { Bad_Opcode },
7151 { Bad_Opcode },
7152 { Bad_Opcode },
f88c9eb0 7153 /* 38 */
592d1631
L
7154 { Bad_Opcode },
7155 { Bad_Opcode },
7156 { Bad_Opcode },
7157 { Bad_Opcode },
7158 { Bad_Opcode },
7159 { Bad_Opcode },
7160 { Bad_Opcode },
7161 { Bad_Opcode },
f88c9eb0
SP
7162 /* 40 */
7163 { PREFIX_TABLE (PREFIX_0F3A40) },
7164 { PREFIX_TABLE (PREFIX_0F3A41) },
7165 { PREFIX_TABLE (PREFIX_0F3A42) },
592d1631 7166 { Bad_Opcode },
f88c9eb0 7167 { PREFIX_TABLE (PREFIX_0F3A44) },
592d1631
L
7168 { Bad_Opcode },
7169 { Bad_Opcode },
7170 { Bad_Opcode },
f88c9eb0 7171 /* 48 */
592d1631
L
7172 { Bad_Opcode },
7173 { Bad_Opcode },
7174 { Bad_Opcode },
7175 { Bad_Opcode },
7176 { Bad_Opcode },
7177 { Bad_Opcode },
7178 { Bad_Opcode },
7179 { Bad_Opcode },
f88c9eb0 7180 /* 50 */
592d1631
L
7181 { Bad_Opcode },
7182 { Bad_Opcode },
7183 { Bad_Opcode },
7184 { Bad_Opcode },
7185 { Bad_Opcode },
7186 { Bad_Opcode },
7187 { Bad_Opcode },
7188 { Bad_Opcode },
f88c9eb0 7189 /* 58 */
592d1631
L
7190 { Bad_Opcode },
7191 { Bad_Opcode },
7192 { Bad_Opcode },
7193 { Bad_Opcode },
7194 { Bad_Opcode },
7195 { Bad_Opcode },
7196 { Bad_Opcode },
7197 { Bad_Opcode },
f88c9eb0
SP
7198 /* 60 */
7199 { PREFIX_TABLE (PREFIX_0F3A60) },
7200 { PREFIX_TABLE (PREFIX_0F3A61) },
7201 { PREFIX_TABLE (PREFIX_0F3A62) },
7202 { PREFIX_TABLE (PREFIX_0F3A63) },
592d1631
L
7203 { Bad_Opcode },
7204 { Bad_Opcode },
7205 { Bad_Opcode },
7206 { Bad_Opcode },
f88c9eb0 7207 /* 68 */
592d1631
L
7208 { Bad_Opcode },
7209 { Bad_Opcode },
7210 { Bad_Opcode },
7211 { Bad_Opcode },
7212 { Bad_Opcode },
7213 { Bad_Opcode },
7214 { Bad_Opcode },
7215 { Bad_Opcode },
f88c9eb0 7216 /* 70 */
592d1631
L
7217 { Bad_Opcode },
7218 { Bad_Opcode },
7219 { Bad_Opcode },
7220 { Bad_Opcode },
7221 { Bad_Opcode },
7222 { Bad_Opcode },
7223 { Bad_Opcode },
7224 { Bad_Opcode },
f88c9eb0 7225 /* 78 */
592d1631
L
7226 { Bad_Opcode },
7227 { Bad_Opcode },
7228 { Bad_Opcode },
7229 { Bad_Opcode },
7230 { Bad_Opcode },
7231 { Bad_Opcode },
7232 { Bad_Opcode },
7233 { Bad_Opcode },
f88c9eb0 7234 /* 80 */
592d1631
L
7235 { Bad_Opcode },
7236 { Bad_Opcode },
7237 { Bad_Opcode },
7238 { Bad_Opcode },
7239 { Bad_Opcode },
7240 { Bad_Opcode },
7241 { Bad_Opcode },
7242 { Bad_Opcode },
f88c9eb0 7243 /* 88 */
592d1631
L
7244 { Bad_Opcode },
7245 { Bad_Opcode },
7246 { Bad_Opcode },
7247 { Bad_Opcode },
7248 { Bad_Opcode },
7249 { Bad_Opcode },
7250 { Bad_Opcode },
7251 { Bad_Opcode },
f88c9eb0 7252 /* 90 */
592d1631
L
7253 { Bad_Opcode },
7254 { Bad_Opcode },
7255 { Bad_Opcode },
7256 { Bad_Opcode },
7257 { Bad_Opcode },
7258 { Bad_Opcode },
7259 { Bad_Opcode },
7260 { Bad_Opcode },
f88c9eb0 7261 /* 98 */
592d1631
L
7262 { Bad_Opcode },
7263 { Bad_Opcode },
7264 { Bad_Opcode },
7265 { Bad_Opcode },
7266 { Bad_Opcode },
7267 { Bad_Opcode },
7268 { Bad_Opcode },
7269 { Bad_Opcode },
f88c9eb0 7270 /* a0 */
592d1631
L
7271 { Bad_Opcode },
7272 { Bad_Opcode },
7273 { Bad_Opcode },
7274 { Bad_Opcode },
7275 { Bad_Opcode },
7276 { Bad_Opcode },
7277 { Bad_Opcode },
7278 { Bad_Opcode },
f88c9eb0 7279 /* a8 */
592d1631
L
7280 { Bad_Opcode },
7281 { Bad_Opcode },
7282 { Bad_Opcode },
7283 { Bad_Opcode },
7284 { Bad_Opcode },
7285 { Bad_Opcode },
7286 { Bad_Opcode },
7287 { Bad_Opcode },
f88c9eb0 7288 /* b0 */
592d1631
L
7289 { Bad_Opcode },
7290 { Bad_Opcode },
7291 { Bad_Opcode },
7292 { Bad_Opcode },
7293 { Bad_Opcode },
7294 { Bad_Opcode },
7295 { Bad_Opcode },
7296 { Bad_Opcode },
f88c9eb0 7297 /* b8 */
592d1631
L
7298 { Bad_Opcode },
7299 { Bad_Opcode },
7300 { Bad_Opcode },
7301 { Bad_Opcode },
7302 { Bad_Opcode },
7303 { Bad_Opcode },
7304 { Bad_Opcode },
7305 { Bad_Opcode },
f88c9eb0 7306 /* c0 */
592d1631
L
7307 { Bad_Opcode },
7308 { Bad_Opcode },
7309 { Bad_Opcode },
7310 { Bad_Opcode },
7311 { Bad_Opcode },
7312 { Bad_Opcode },
7313 { Bad_Opcode },
7314 { Bad_Opcode },
f88c9eb0 7315 /* c8 */
592d1631
L
7316 { Bad_Opcode },
7317 { Bad_Opcode },
7318 { Bad_Opcode },
7319 { Bad_Opcode },
a0046408 7320 { PREFIX_TABLE (PREFIX_0F3ACC) },
592d1631
L
7321 { Bad_Opcode },
7322 { Bad_Opcode },
7323 { Bad_Opcode },
f88c9eb0 7324 /* d0 */
592d1631
L
7325 { Bad_Opcode },
7326 { Bad_Opcode },
7327 { Bad_Opcode },
7328 { Bad_Opcode },
7329 { Bad_Opcode },
7330 { Bad_Opcode },
7331 { Bad_Opcode },
7332 { Bad_Opcode },
f88c9eb0 7333 /* d8 */
592d1631
L
7334 { Bad_Opcode },
7335 { Bad_Opcode },
7336 { Bad_Opcode },
7337 { Bad_Opcode },
7338 { Bad_Opcode },
7339 { Bad_Opcode },
7340 { Bad_Opcode },
f88c9eb0
SP
7341 { PREFIX_TABLE (PREFIX_0F3ADF) },
7342 /* e0 */
592d1631
L
7343 { Bad_Opcode },
7344 { Bad_Opcode },
7345 { Bad_Opcode },
7346 { Bad_Opcode },
7347 { Bad_Opcode },
7348 { Bad_Opcode },
7349 { Bad_Opcode },
7350 { Bad_Opcode },
f88c9eb0 7351 /* e8 */
592d1631
L
7352 { Bad_Opcode },
7353 { Bad_Opcode },
7354 { Bad_Opcode },
7355 { Bad_Opcode },
7356 { Bad_Opcode },
7357 { Bad_Opcode },
7358 { Bad_Opcode },
7359 { Bad_Opcode },
f88c9eb0 7360 /* f0 */
592d1631
L
7361 { Bad_Opcode },
7362 { Bad_Opcode },
7363 { Bad_Opcode },
7364 { Bad_Opcode },
7365 { Bad_Opcode },
7366 { Bad_Opcode },
7367 { Bad_Opcode },
7368 { Bad_Opcode },
f88c9eb0 7369 /* f8 */
592d1631
L
7370 { Bad_Opcode },
7371 { Bad_Opcode },
7372 { Bad_Opcode },
7373 { Bad_Opcode },
7374 { Bad_Opcode },
7375 { Bad_Opcode },
7376 { Bad_Opcode },
7377 { Bad_Opcode },
f88c9eb0
SP
7378 },
7379
7380 /* THREE_BYTE_0F7A */
7381 {
7382 /* 00 */
592d1631
L
7383 { Bad_Opcode },
7384 { Bad_Opcode },
7385 { Bad_Opcode },
7386 { Bad_Opcode },
7387 { Bad_Opcode },
7388 { Bad_Opcode },
7389 { Bad_Opcode },
7390 { Bad_Opcode },
f88c9eb0 7391 /* 08 */
592d1631
L
7392 { Bad_Opcode },
7393 { Bad_Opcode },
7394 { Bad_Opcode },
7395 { Bad_Opcode },
7396 { Bad_Opcode },
7397 { Bad_Opcode },
7398 { Bad_Opcode },
7399 { Bad_Opcode },
f88c9eb0 7400 /* 10 */
592d1631
L
7401 { Bad_Opcode },
7402 { Bad_Opcode },
7403 { Bad_Opcode },
7404 { Bad_Opcode },
7405 { Bad_Opcode },
7406 { Bad_Opcode },
7407 { Bad_Opcode },
7408 { Bad_Opcode },
f88c9eb0 7409 /* 18 */
592d1631
L
7410 { Bad_Opcode },
7411 { Bad_Opcode },
7412 { Bad_Opcode },
7413 { Bad_Opcode },
7414 { Bad_Opcode },
7415 { Bad_Opcode },
7416 { Bad_Opcode },
7417 { Bad_Opcode },
f88c9eb0
SP
7418 /* 20 */
7419 { "ptest", { XX } },
592d1631
L
7420 { Bad_Opcode },
7421 { Bad_Opcode },
7422 { Bad_Opcode },
7423 { Bad_Opcode },
7424 { Bad_Opcode },
7425 { Bad_Opcode },
7426 { Bad_Opcode },
f88c9eb0 7427 /* 28 */
592d1631
L
7428 { Bad_Opcode },
7429 { Bad_Opcode },
7430 { Bad_Opcode },
7431 { Bad_Opcode },
7432 { Bad_Opcode },
7433 { Bad_Opcode },
7434 { Bad_Opcode },
7435 { Bad_Opcode },
f88c9eb0 7436 /* 30 */
592d1631
L
7437 { Bad_Opcode },
7438 { Bad_Opcode },
7439 { Bad_Opcode },
7440 { Bad_Opcode },
7441 { Bad_Opcode },
7442 { Bad_Opcode },
7443 { Bad_Opcode },
7444 { Bad_Opcode },
f88c9eb0 7445 /* 38 */
592d1631
L
7446 { Bad_Opcode },
7447 { Bad_Opcode },
7448 { Bad_Opcode },
7449 { Bad_Opcode },
7450 { Bad_Opcode },
7451 { Bad_Opcode },
7452 { Bad_Opcode },
7453 { Bad_Opcode },
f88c9eb0 7454 /* 40 */
592d1631 7455 { Bad_Opcode },
f88c9eb0
SP
7456 { "phaddbw", { XM, EXq } },
7457 { "phaddbd", { XM, EXq } },
7458 { "phaddbq", { XM, EXq } },
592d1631
L
7459 { Bad_Opcode },
7460 { Bad_Opcode },
f88c9eb0
SP
7461 { "phaddwd", { XM, EXq } },
7462 { "phaddwq", { XM, EXq } },
7463 /* 48 */
592d1631
L
7464 { Bad_Opcode },
7465 { Bad_Opcode },
7466 { Bad_Opcode },
f88c9eb0 7467 { "phadddq", { XM, EXq } },
592d1631
L
7468 { Bad_Opcode },
7469 { Bad_Opcode },
7470 { Bad_Opcode },
7471 { Bad_Opcode },
f88c9eb0 7472 /* 50 */
592d1631 7473 { Bad_Opcode },
f88c9eb0
SP
7474 { "phaddubw", { XM, EXq } },
7475 { "phaddubd", { XM, EXq } },
7476 { "phaddubq", { XM, EXq } },
592d1631
L
7477 { Bad_Opcode },
7478 { Bad_Opcode },
f88c9eb0
SP
7479 { "phadduwd", { XM, EXq } },
7480 { "phadduwq", { XM, EXq } },
7481 /* 58 */
592d1631
L
7482 { Bad_Opcode },
7483 { Bad_Opcode },
7484 { Bad_Opcode },
f88c9eb0 7485 { "phaddudq", { XM, EXq } },
592d1631
L
7486 { Bad_Opcode },
7487 { Bad_Opcode },
7488 { Bad_Opcode },
7489 { Bad_Opcode },
f88c9eb0 7490 /* 60 */
592d1631 7491 { Bad_Opcode },
f88c9eb0
SP
7492 { "phsubbw", { XM, EXq } },
7493 { "phsubbd", { XM, EXq } },
7494 { "phsubbq", { XM, EXq } },
592d1631
L
7495 { Bad_Opcode },
7496 { Bad_Opcode },
7497 { Bad_Opcode },
7498 { Bad_Opcode },
4e7d34a6 7499 /* 68 */
592d1631
L
7500 { Bad_Opcode },
7501 { Bad_Opcode },
7502 { Bad_Opcode },
7503 { Bad_Opcode },
7504 { Bad_Opcode },
7505 { Bad_Opcode },
7506 { Bad_Opcode },
7507 { Bad_Opcode },
85f10a01 7508 /* 70 */
592d1631
L
7509 { Bad_Opcode },
7510 { Bad_Opcode },
7511 { Bad_Opcode },
7512 { Bad_Opcode },
7513 { Bad_Opcode },
7514 { Bad_Opcode },
7515 { Bad_Opcode },
7516 { Bad_Opcode },
85f10a01 7517 /* 78 */
592d1631
L
7518 { Bad_Opcode },
7519 { Bad_Opcode },
7520 { Bad_Opcode },
7521 { Bad_Opcode },
7522 { Bad_Opcode },
7523 { Bad_Opcode },
7524 { Bad_Opcode },
7525 { Bad_Opcode },
85f10a01 7526 /* 80 */
592d1631
L
7527 { Bad_Opcode },
7528 { Bad_Opcode },
7529 { Bad_Opcode },
7530 { Bad_Opcode },
7531 { Bad_Opcode },
7532 { Bad_Opcode },
7533 { Bad_Opcode },
7534 { Bad_Opcode },
85f10a01 7535 /* 88 */
592d1631
L
7536 { Bad_Opcode },
7537 { Bad_Opcode },
7538 { Bad_Opcode },
7539 { Bad_Opcode },
7540 { Bad_Opcode },
7541 { Bad_Opcode },
7542 { Bad_Opcode },
7543 { Bad_Opcode },
85f10a01 7544 /* 90 */
592d1631
L
7545 { Bad_Opcode },
7546 { Bad_Opcode },
7547 { Bad_Opcode },
7548 { Bad_Opcode },
7549 { Bad_Opcode },
7550 { Bad_Opcode },
7551 { Bad_Opcode },
7552 { Bad_Opcode },
85f10a01 7553 /* 98 */
592d1631
L
7554 { Bad_Opcode },
7555 { Bad_Opcode },
7556 { Bad_Opcode },
7557 { Bad_Opcode },
7558 { Bad_Opcode },
7559 { Bad_Opcode },
7560 { Bad_Opcode },
7561 { Bad_Opcode },
85f10a01 7562 /* a0 */
592d1631
L
7563 { Bad_Opcode },
7564 { Bad_Opcode },
7565 { Bad_Opcode },
7566 { Bad_Opcode },
7567 { Bad_Opcode },
7568 { Bad_Opcode },
7569 { Bad_Opcode },
7570 { Bad_Opcode },
85f10a01 7571 /* a8 */
592d1631
L
7572 { Bad_Opcode },
7573 { Bad_Opcode },
7574 { Bad_Opcode },
7575 { Bad_Opcode },
7576 { Bad_Opcode },
7577 { Bad_Opcode },
7578 { Bad_Opcode },
7579 { Bad_Opcode },
85f10a01 7580 /* b0 */
592d1631
L
7581 { Bad_Opcode },
7582 { Bad_Opcode },
7583 { Bad_Opcode },
7584 { Bad_Opcode },
7585 { Bad_Opcode },
7586 { Bad_Opcode },
7587 { Bad_Opcode },
7588 { Bad_Opcode },
85f10a01 7589 /* b8 */
592d1631
L
7590 { Bad_Opcode },
7591 { Bad_Opcode },
7592 { Bad_Opcode },
7593 { Bad_Opcode },
7594 { Bad_Opcode },
7595 { Bad_Opcode },
7596 { Bad_Opcode },
7597 { Bad_Opcode },
85f10a01 7598 /* c0 */
592d1631
L
7599 { Bad_Opcode },
7600 { Bad_Opcode },
7601 { Bad_Opcode },
7602 { Bad_Opcode },
7603 { Bad_Opcode },
7604 { Bad_Opcode },
7605 { Bad_Opcode },
7606 { Bad_Opcode },
85f10a01 7607 /* c8 */
592d1631
L
7608 { Bad_Opcode },
7609 { Bad_Opcode },
7610 { Bad_Opcode },
7611 { Bad_Opcode },
7612 { Bad_Opcode },
7613 { Bad_Opcode },
7614 { Bad_Opcode },
7615 { Bad_Opcode },
85f10a01 7616 /* d0 */
592d1631
L
7617 { Bad_Opcode },
7618 { Bad_Opcode },
7619 { Bad_Opcode },
7620 { Bad_Opcode },
7621 { Bad_Opcode },
7622 { Bad_Opcode },
7623 { Bad_Opcode },
7624 { Bad_Opcode },
85f10a01 7625 /* d8 */
592d1631
L
7626 { Bad_Opcode },
7627 { Bad_Opcode },
7628 { Bad_Opcode },
7629 { Bad_Opcode },
7630 { Bad_Opcode },
7631 { Bad_Opcode },
7632 { Bad_Opcode },
7633 { Bad_Opcode },
85f10a01 7634 /* e0 */
592d1631
L
7635 { Bad_Opcode },
7636 { Bad_Opcode },
7637 { Bad_Opcode },
7638 { Bad_Opcode },
7639 { Bad_Opcode },
7640 { Bad_Opcode },
7641 { Bad_Opcode },
7642 { Bad_Opcode },
85f10a01 7643 /* e8 */
592d1631
L
7644 { Bad_Opcode },
7645 { Bad_Opcode },
7646 { Bad_Opcode },
7647 { Bad_Opcode },
7648 { Bad_Opcode },
7649 { Bad_Opcode },
7650 { Bad_Opcode },
7651 { Bad_Opcode },
85f10a01 7652 /* f0 */
592d1631
L
7653 { Bad_Opcode },
7654 { Bad_Opcode },
7655 { Bad_Opcode },
7656 { Bad_Opcode },
7657 { Bad_Opcode },
7658 { Bad_Opcode },
7659 { Bad_Opcode },
7660 { Bad_Opcode },
85f10a01 7661 /* f8 */
592d1631
L
7662 { Bad_Opcode },
7663 { Bad_Opcode },
7664 { Bad_Opcode },
7665 { Bad_Opcode },
7666 { Bad_Opcode },
7667 { Bad_Opcode },
7668 { Bad_Opcode },
7669 { Bad_Opcode },
85f10a01 7670 },
f88c9eb0
SP
7671};
7672
7673static const struct dis386 xop_table[][256] = {
5dd85c99 7674 /* XOP_08 */
85f10a01
MM
7675 {
7676 /* 00 */
592d1631
L
7677 { Bad_Opcode },
7678 { Bad_Opcode },
7679 { Bad_Opcode },
7680 { Bad_Opcode },
7681 { Bad_Opcode },
7682 { Bad_Opcode },
7683 { Bad_Opcode },
7684 { Bad_Opcode },
85f10a01 7685 /* 08 */
592d1631
L
7686 { Bad_Opcode },
7687 { Bad_Opcode },
7688 { Bad_Opcode },
7689 { Bad_Opcode },
7690 { Bad_Opcode },
7691 { Bad_Opcode },
7692 { Bad_Opcode },
7693 { Bad_Opcode },
85f10a01 7694 /* 10 */
3929df09 7695 { Bad_Opcode },
592d1631
L
7696 { Bad_Opcode },
7697 { Bad_Opcode },
7698 { Bad_Opcode },
7699 { Bad_Opcode },
7700 { Bad_Opcode },
7701 { Bad_Opcode },
7702 { Bad_Opcode },
85f10a01 7703 /* 18 */
592d1631
L
7704 { Bad_Opcode },
7705 { Bad_Opcode },
7706 { Bad_Opcode },
7707 { Bad_Opcode },
7708 { Bad_Opcode },
7709 { Bad_Opcode },
7710 { Bad_Opcode },
7711 { Bad_Opcode },
85f10a01 7712 /* 20 */
592d1631
L
7713 { Bad_Opcode },
7714 { Bad_Opcode },
7715 { Bad_Opcode },
7716 { Bad_Opcode },
7717 { Bad_Opcode },
7718 { Bad_Opcode },
7719 { Bad_Opcode },
7720 { Bad_Opcode },
85f10a01 7721 /* 28 */
592d1631
L
7722 { Bad_Opcode },
7723 { Bad_Opcode },
7724 { Bad_Opcode },
7725 { Bad_Opcode },
7726 { Bad_Opcode },
7727 { Bad_Opcode },
7728 { Bad_Opcode },
7729 { Bad_Opcode },
c0f3af97 7730 /* 30 */
592d1631
L
7731 { Bad_Opcode },
7732 { Bad_Opcode },
7733 { Bad_Opcode },
7734 { Bad_Opcode },
7735 { Bad_Opcode },
7736 { Bad_Opcode },
7737 { Bad_Opcode },
7738 { Bad_Opcode },
c0f3af97 7739 /* 38 */
592d1631
L
7740 { Bad_Opcode },
7741 { Bad_Opcode },
7742 { Bad_Opcode },
7743 { Bad_Opcode },
7744 { Bad_Opcode },
7745 { Bad_Opcode },
7746 { Bad_Opcode },
7747 { Bad_Opcode },
c0f3af97 7748 /* 40 */
592d1631
L
7749 { Bad_Opcode },
7750 { Bad_Opcode },
7751 { Bad_Opcode },
7752 { Bad_Opcode },
7753 { Bad_Opcode },
7754 { Bad_Opcode },
7755 { Bad_Opcode },
7756 { Bad_Opcode },
85f10a01 7757 /* 48 */
592d1631
L
7758 { Bad_Opcode },
7759 { Bad_Opcode },
7760 { Bad_Opcode },
7761 { Bad_Opcode },
7762 { Bad_Opcode },
7763 { Bad_Opcode },
7764 { Bad_Opcode },
7765 { Bad_Opcode },
c0f3af97 7766 /* 50 */
592d1631
L
7767 { Bad_Opcode },
7768 { Bad_Opcode },
7769 { Bad_Opcode },
7770 { Bad_Opcode },
7771 { Bad_Opcode },
7772 { Bad_Opcode },
7773 { Bad_Opcode },
7774 { Bad_Opcode },
85f10a01 7775 /* 58 */
592d1631
L
7776 { Bad_Opcode },
7777 { Bad_Opcode },
7778 { Bad_Opcode },
7779 { Bad_Opcode },
7780 { Bad_Opcode },
7781 { Bad_Opcode },
7782 { Bad_Opcode },
7783 { Bad_Opcode },
c1e679ec 7784 /* 60 */
592d1631
L
7785 { Bad_Opcode },
7786 { Bad_Opcode },
7787 { Bad_Opcode },
7788 { Bad_Opcode },
7789 { Bad_Opcode },
7790 { Bad_Opcode },
7791 { Bad_Opcode },
7792 { Bad_Opcode },
c0f3af97 7793 /* 68 */
592d1631
L
7794 { Bad_Opcode },
7795 { Bad_Opcode },
7796 { Bad_Opcode },
7797 { Bad_Opcode },
7798 { Bad_Opcode },
7799 { Bad_Opcode },
7800 { Bad_Opcode },
7801 { Bad_Opcode },
85f10a01 7802 /* 70 */
592d1631
L
7803 { Bad_Opcode },
7804 { Bad_Opcode },
7805 { Bad_Opcode },
7806 { Bad_Opcode },
7807 { Bad_Opcode },
7808 { Bad_Opcode },
7809 { Bad_Opcode },
7810 { Bad_Opcode },
85f10a01 7811 /* 78 */
592d1631
L
7812 { Bad_Opcode },
7813 { Bad_Opcode },
7814 { Bad_Opcode },
7815 { Bad_Opcode },
7816 { Bad_Opcode },
7817 { Bad_Opcode },
7818 { Bad_Opcode },
7819 { Bad_Opcode },
85f10a01 7820 /* 80 */
592d1631
L
7821 { Bad_Opcode },
7822 { Bad_Opcode },
7823 { Bad_Opcode },
7824 { Bad_Opcode },
7825 { Bad_Opcode },
5dd85c99
SP
7826 { "vpmacssww", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
7827 { "vpmacsswd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
7828 { "vpmacssdql", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
7829 /* 88 */
592d1631
L
7830 { Bad_Opcode },
7831 { Bad_Opcode },
7832 { Bad_Opcode },
7833 { Bad_Opcode },
7834 { Bad_Opcode },
7835 { Bad_Opcode },
5dd85c99
SP
7836 { "vpmacssdd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
7837 { "vpmacssdqh", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
7838 /* 90 */
592d1631
L
7839 { Bad_Opcode },
7840 { Bad_Opcode },
7841 { Bad_Opcode },
7842 { Bad_Opcode },
7843 { Bad_Opcode },
5dd85c99
SP
7844 { "vpmacsww", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
7845 { "vpmacswd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
7846 { "vpmacsdql", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
7847 /* 98 */
592d1631
L
7848 { Bad_Opcode },
7849 { Bad_Opcode },
7850 { Bad_Opcode },
7851 { Bad_Opcode },
7852 { Bad_Opcode },
7853 { Bad_Opcode },
5dd85c99
SP
7854 { "vpmacsdd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
7855 { "vpmacsdqh", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
7856 /* a0 */
592d1631
L
7857 { Bad_Opcode },
7858 { Bad_Opcode },
5dd85c99
SP
7859 { "vpcmov", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
7860 { "vpperm", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
592d1631
L
7861 { Bad_Opcode },
7862 { Bad_Opcode },
5dd85c99 7863 { "vpmadcsswd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
592d1631 7864 { Bad_Opcode },
5dd85c99 7865 /* a8 */
592d1631
L
7866 { Bad_Opcode },
7867 { Bad_Opcode },
7868 { Bad_Opcode },
7869 { Bad_Opcode },
7870 { Bad_Opcode },
7871 { Bad_Opcode },
7872 { Bad_Opcode },
7873 { Bad_Opcode },
5dd85c99 7874 /* b0 */
592d1631
L
7875 { Bad_Opcode },
7876 { Bad_Opcode },
7877 { Bad_Opcode },
7878 { Bad_Opcode },
7879 { Bad_Opcode },
7880 { Bad_Opcode },
5dd85c99 7881 { "vpmadcswd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
592d1631 7882 { Bad_Opcode },
5dd85c99 7883 /* b8 */
592d1631
L
7884 { Bad_Opcode },
7885 { Bad_Opcode },
7886 { Bad_Opcode },
7887 { Bad_Opcode },
7888 { Bad_Opcode },
7889 { Bad_Opcode },
7890 { Bad_Opcode },
7891 { Bad_Opcode },
5dd85c99
SP
7892 /* c0 */
7893 { "vprotb", { XM, Vex_2src_1, Ib } },
7894 { "vprotw", { XM, Vex_2src_1, Ib } },
7895 { "vprotd", { XM, Vex_2src_1, Ib } },
7896 { "vprotq", { XM, Vex_2src_1, Ib } },
592d1631
L
7897 { Bad_Opcode },
7898 { Bad_Opcode },
7899 { Bad_Opcode },
7900 { Bad_Opcode },
5dd85c99 7901 /* c8 */
592d1631
L
7902 { Bad_Opcode },
7903 { Bad_Opcode },
7904 { Bad_Opcode },
7905 { Bad_Opcode },
ff688e1f
L
7906 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_CC) },
7907 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_CD) },
7908 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_CE) },
7909 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_CF) },
5dd85c99 7910 /* d0 */
592d1631
L
7911 { Bad_Opcode },
7912 { Bad_Opcode },
7913 { Bad_Opcode },
7914 { Bad_Opcode },
7915 { Bad_Opcode },
7916 { Bad_Opcode },
7917 { Bad_Opcode },
7918 { Bad_Opcode },
5dd85c99 7919 /* d8 */
592d1631
L
7920 { Bad_Opcode },
7921 { Bad_Opcode },
7922 { Bad_Opcode },
7923 { Bad_Opcode },
7924 { Bad_Opcode },
7925 { Bad_Opcode },
7926 { Bad_Opcode },
7927 { Bad_Opcode },
5dd85c99 7928 /* e0 */
592d1631
L
7929 { Bad_Opcode },
7930 { Bad_Opcode },
7931 { Bad_Opcode },
7932 { Bad_Opcode },
7933 { Bad_Opcode },
7934 { Bad_Opcode },
7935 { Bad_Opcode },
7936 { Bad_Opcode },
5dd85c99 7937 /* e8 */
592d1631
L
7938 { Bad_Opcode },
7939 { Bad_Opcode },
7940 { Bad_Opcode },
7941 { Bad_Opcode },
ff688e1f
L
7942 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_EC) },
7943 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_ED) },
7944 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_EE) },
7945 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_EF) },
5dd85c99 7946 /* f0 */
592d1631
L
7947 { Bad_Opcode },
7948 { Bad_Opcode },
7949 { Bad_Opcode },
7950 { Bad_Opcode },
7951 { Bad_Opcode },
7952 { Bad_Opcode },
7953 { Bad_Opcode },
7954 { Bad_Opcode },
5dd85c99 7955 /* f8 */
592d1631
L
7956 { Bad_Opcode },
7957 { Bad_Opcode },
7958 { Bad_Opcode },
7959 { Bad_Opcode },
7960 { Bad_Opcode },
7961 { Bad_Opcode },
7962 { Bad_Opcode },
7963 { Bad_Opcode },
5dd85c99
SP
7964 },
7965 /* XOP_09 */
7966 {
7967 /* 00 */
592d1631 7968 { Bad_Opcode },
2a2a0f38
QN
7969 { REG_TABLE (REG_XOP_TBM_01) },
7970 { REG_TABLE (REG_XOP_TBM_02) },
592d1631
L
7971 { Bad_Opcode },
7972 { Bad_Opcode },
7973 { Bad_Opcode },
7974 { Bad_Opcode },
7975 { Bad_Opcode },
5dd85c99 7976 /* 08 */
592d1631
L
7977 { Bad_Opcode },
7978 { Bad_Opcode },
7979 { Bad_Opcode },
7980 { Bad_Opcode },
7981 { Bad_Opcode },
7982 { Bad_Opcode },
7983 { Bad_Opcode },
7984 { Bad_Opcode },
5dd85c99 7985 /* 10 */
592d1631
L
7986 { Bad_Opcode },
7987 { Bad_Opcode },
5dd85c99 7988 { REG_TABLE (REG_XOP_LWPCB) },
592d1631
L
7989 { Bad_Opcode },
7990 { Bad_Opcode },
7991 { Bad_Opcode },
7992 { Bad_Opcode },
7993 { Bad_Opcode },
5dd85c99 7994 /* 18 */
592d1631
L
7995 { Bad_Opcode },
7996 { Bad_Opcode },
7997 { Bad_Opcode },
7998 { Bad_Opcode },
7999 { Bad_Opcode },
8000 { Bad_Opcode },
8001 { Bad_Opcode },
8002 { Bad_Opcode },
5dd85c99 8003 /* 20 */
592d1631
L
8004 { Bad_Opcode },
8005 { Bad_Opcode },
8006 { Bad_Opcode },
8007 { Bad_Opcode },
8008 { Bad_Opcode },
8009 { Bad_Opcode },
8010 { Bad_Opcode },
8011 { Bad_Opcode },
5dd85c99 8012 /* 28 */
592d1631
L
8013 { Bad_Opcode },
8014 { Bad_Opcode },
8015 { Bad_Opcode },
8016 { Bad_Opcode },
8017 { Bad_Opcode },
8018 { Bad_Opcode },
8019 { Bad_Opcode },
8020 { Bad_Opcode },
5dd85c99 8021 /* 30 */
592d1631
L
8022 { Bad_Opcode },
8023 { Bad_Opcode },
8024 { Bad_Opcode },
8025 { Bad_Opcode },
8026 { Bad_Opcode },
8027 { Bad_Opcode },
8028 { Bad_Opcode },
8029 { Bad_Opcode },
5dd85c99 8030 /* 38 */
592d1631
L
8031 { Bad_Opcode },
8032 { Bad_Opcode },
8033 { Bad_Opcode },
8034 { Bad_Opcode },
8035 { Bad_Opcode },
8036 { Bad_Opcode },
8037 { Bad_Opcode },
8038 { Bad_Opcode },
5dd85c99 8039 /* 40 */
592d1631
L
8040 { Bad_Opcode },
8041 { Bad_Opcode },
8042 { Bad_Opcode },
8043 { Bad_Opcode },
8044 { Bad_Opcode },
8045 { Bad_Opcode },
8046 { Bad_Opcode },
8047 { Bad_Opcode },
5dd85c99 8048 /* 48 */
592d1631
L
8049 { Bad_Opcode },
8050 { Bad_Opcode },
8051 { Bad_Opcode },
8052 { Bad_Opcode },
8053 { Bad_Opcode },
8054 { Bad_Opcode },
8055 { Bad_Opcode },
8056 { Bad_Opcode },
5dd85c99 8057 /* 50 */
592d1631
L
8058 { Bad_Opcode },
8059 { Bad_Opcode },
8060 { Bad_Opcode },
8061 { Bad_Opcode },
8062 { Bad_Opcode },
8063 { Bad_Opcode },
8064 { Bad_Opcode },
8065 { Bad_Opcode },
5dd85c99 8066 /* 58 */
592d1631
L
8067 { Bad_Opcode },
8068 { Bad_Opcode },
8069 { Bad_Opcode },
8070 { Bad_Opcode },
8071 { Bad_Opcode },
8072 { Bad_Opcode },
8073 { Bad_Opcode },
8074 { Bad_Opcode },
5dd85c99 8075 /* 60 */
592d1631
L
8076 { Bad_Opcode },
8077 { Bad_Opcode },
8078 { Bad_Opcode },
8079 { Bad_Opcode },
8080 { Bad_Opcode },
8081 { Bad_Opcode },
8082 { Bad_Opcode },
8083 { Bad_Opcode },
5dd85c99 8084 /* 68 */
592d1631
L
8085 { Bad_Opcode },
8086 { Bad_Opcode },
8087 { Bad_Opcode },
8088 { Bad_Opcode },
8089 { Bad_Opcode },
8090 { Bad_Opcode },
8091 { Bad_Opcode },
8092 { Bad_Opcode },
5dd85c99 8093 /* 70 */
592d1631
L
8094 { Bad_Opcode },
8095 { Bad_Opcode },
8096 { Bad_Opcode },
8097 { Bad_Opcode },
8098 { Bad_Opcode },
8099 { Bad_Opcode },
8100 { Bad_Opcode },
8101 { Bad_Opcode },
5dd85c99 8102 /* 78 */
592d1631
L
8103 { Bad_Opcode },
8104 { Bad_Opcode },
8105 { Bad_Opcode },
8106 { Bad_Opcode },
8107 { Bad_Opcode },
8108 { Bad_Opcode },
8109 { Bad_Opcode },
8110 { Bad_Opcode },
5dd85c99 8111 /* 80 */
592a252b
L
8112 { VEX_LEN_TABLE (VEX_LEN_0FXOP_09_80) },
8113 { VEX_LEN_TABLE (VEX_LEN_0FXOP_09_81) },
5dd85c99
SP
8114 { "vfrczss", { XM, EXd } },
8115 { "vfrczsd", { XM, EXq } },
592d1631
L
8116 { Bad_Opcode },
8117 { Bad_Opcode },
8118 { Bad_Opcode },
8119 { Bad_Opcode },
5dd85c99 8120 /* 88 */
592d1631
L
8121 { Bad_Opcode },
8122 { Bad_Opcode },
8123 { Bad_Opcode },
8124 { Bad_Opcode },
8125 { Bad_Opcode },
8126 { Bad_Opcode },
8127 { Bad_Opcode },
8128 { Bad_Opcode },
5dd85c99
SP
8129 /* 90 */
8130 { "vprotb", { XM, Vex_2src_1, Vex_2src_2 } },
8131 { "vprotw", { XM, Vex_2src_1, Vex_2src_2 } },
8132 { "vprotd", { XM, Vex_2src_1, Vex_2src_2 } },
8133 { "vprotq", { XM, Vex_2src_1, Vex_2src_2 } },
8134 { "vpshlb", { XM, Vex_2src_1, Vex_2src_2 } },
8135 { "vpshlw", { XM, Vex_2src_1, Vex_2src_2 } },
8136 { "vpshld", { XM, Vex_2src_1, Vex_2src_2 } },
8137 { "vpshlq", { XM, Vex_2src_1, Vex_2src_2 } },
8138 /* 98 */
8139 { "vpshab", { XM, Vex_2src_1, Vex_2src_2 } },
8140 { "vpshaw", { XM, Vex_2src_1, Vex_2src_2 } },
8141 { "vpshad", { XM, Vex_2src_1, Vex_2src_2 } },
8142 { "vpshaq", { XM, Vex_2src_1, Vex_2src_2 } },
592d1631
L
8143 { Bad_Opcode },
8144 { Bad_Opcode },
8145 { Bad_Opcode },
8146 { Bad_Opcode },
5dd85c99 8147 /* a0 */
592d1631
L
8148 { Bad_Opcode },
8149 { Bad_Opcode },
8150 { Bad_Opcode },
8151 { Bad_Opcode },
8152 { Bad_Opcode },
8153 { Bad_Opcode },
8154 { Bad_Opcode },
8155 { Bad_Opcode },
5dd85c99 8156 /* a8 */
592d1631
L
8157 { Bad_Opcode },
8158 { Bad_Opcode },
8159 { Bad_Opcode },
8160 { Bad_Opcode },
8161 { Bad_Opcode },
8162 { Bad_Opcode },
8163 { Bad_Opcode },
8164 { Bad_Opcode },
5dd85c99 8165 /* b0 */
592d1631
L
8166 { Bad_Opcode },
8167 { Bad_Opcode },
8168 { Bad_Opcode },
8169 { Bad_Opcode },
8170 { Bad_Opcode },
8171 { Bad_Opcode },
8172 { Bad_Opcode },
8173 { Bad_Opcode },
5dd85c99 8174 /* b8 */
592d1631
L
8175 { Bad_Opcode },
8176 { Bad_Opcode },
8177 { Bad_Opcode },
8178 { Bad_Opcode },
8179 { Bad_Opcode },
8180 { Bad_Opcode },
8181 { Bad_Opcode },
8182 { Bad_Opcode },
5dd85c99 8183 /* c0 */
592d1631 8184 { Bad_Opcode },
5dd85c99
SP
8185 { "vphaddbw", { XM, EXxmm } },
8186 { "vphaddbd", { XM, EXxmm } },
8187 { "vphaddbq", { XM, EXxmm } },
592d1631
L
8188 { Bad_Opcode },
8189 { Bad_Opcode },
5dd85c99
SP
8190 { "vphaddwd", { XM, EXxmm } },
8191 { "vphaddwq", { XM, EXxmm } },
8192 /* c8 */
592d1631
L
8193 { Bad_Opcode },
8194 { Bad_Opcode },
8195 { Bad_Opcode },
5dd85c99 8196 { "vphadddq", { XM, EXxmm } },
592d1631
L
8197 { Bad_Opcode },
8198 { Bad_Opcode },
8199 { Bad_Opcode },
8200 { Bad_Opcode },
5dd85c99 8201 /* d0 */
592d1631 8202 { Bad_Opcode },
5dd85c99
SP
8203 { "vphaddubw", { XM, EXxmm } },
8204 { "vphaddubd", { XM, EXxmm } },
8205 { "vphaddubq", { XM, EXxmm } },
592d1631
L
8206 { Bad_Opcode },
8207 { Bad_Opcode },
5dd85c99
SP
8208 { "vphadduwd", { XM, EXxmm } },
8209 { "vphadduwq", { XM, EXxmm } },
8210 /* d8 */
592d1631
L
8211 { Bad_Opcode },
8212 { Bad_Opcode },
8213 { Bad_Opcode },
5dd85c99 8214 { "vphaddudq", { XM, EXxmm } },
592d1631
L
8215 { Bad_Opcode },
8216 { Bad_Opcode },
8217 { Bad_Opcode },
8218 { Bad_Opcode },
5dd85c99 8219 /* e0 */
592d1631 8220 { Bad_Opcode },
5dd85c99
SP
8221 { "vphsubbw", { XM, EXxmm } },
8222 { "vphsubwd", { XM, EXxmm } },
8223 { "vphsubdq", { XM, EXxmm } },
592d1631
L
8224 { Bad_Opcode },
8225 { Bad_Opcode },
8226 { Bad_Opcode },
8227 { Bad_Opcode },
4e7d34a6 8228 /* e8 */
592d1631
L
8229 { Bad_Opcode },
8230 { Bad_Opcode },
8231 { Bad_Opcode },
8232 { Bad_Opcode },
8233 { Bad_Opcode },
8234 { Bad_Opcode },
8235 { Bad_Opcode },
8236 { Bad_Opcode },
4e7d34a6 8237 /* f0 */
592d1631
L
8238 { Bad_Opcode },
8239 { Bad_Opcode },
8240 { Bad_Opcode },
8241 { Bad_Opcode },
8242 { Bad_Opcode },
8243 { Bad_Opcode },
8244 { Bad_Opcode },
8245 { Bad_Opcode },
4e7d34a6 8246 /* f8 */
592d1631
L
8247 { Bad_Opcode },
8248 { Bad_Opcode },
8249 { Bad_Opcode },
8250 { Bad_Opcode },
8251 { Bad_Opcode },
8252 { Bad_Opcode },
8253 { Bad_Opcode },
8254 { Bad_Opcode },
4e7d34a6 8255 },
f88c9eb0 8256 /* XOP_0A */
4e7d34a6
L
8257 {
8258 /* 00 */
592d1631
L
8259 { Bad_Opcode },
8260 { Bad_Opcode },
8261 { Bad_Opcode },
8262 { Bad_Opcode },
8263 { Bad_Opcode },
8264 { Bad_Opcode },
8265 { Bad_Opcode },
8266 { Bad_Opcode },
4e7d34a6 8267 /* 08 */
592d1631
L
8268 { Bad_Opcode },
8269 { Bad_Opcode },
8270 { Bad_Opcode },
8271 { Bad_Opcode },
8272 { Bad_Opcode },
8273 { Bad_Opcode },
8274 { Bad_Opcode },
8275 { Bad_Opcode },
4e7d34a6 8276 /* 10 */
2a2a0f38 8277 { "bextr", { Gv, Ev, Iq } },
592d1631 8278 { Bad_Opcode },
f88c9eb0 8279 { REG_TABLE (REG_XOP_LWP) },
592d1631
L
8280 { Bad_Opcode },
8281 { Bad_Opcode },
8282 { Bad_Opcode },
8283 { Bad_Opcode },
8284 { Bad_Opcode },
4e7d34a6 8285 /* 18 */
592d1631
L
8286 { Bad_Opcode },
8287 { Bad_Opcode },
8288 { Bad_Opcode },
8289 { Bad_Opcode },
8290 { Bad_Opcode },
8291 { Bad_Opcode },
8292 { Bad_Opcode },
8293 { Bad_Opcode },
4e7d34a6 8294 /* 20 */
592d1631
L
8295 { Bad_Opcode },
8296 { Bad_Opcode },
8297 { Bad_Opcode },
8298 { Bad_Opcode },
8299 { Bad_Opcode },
8300 { Bad_Opcode },
8301 { Bad_Opcode },
8302 { Bad_Opcode },
4e7d34a6 8303 /* 28 */
592d1631
L
8304 { Bad_Opcode },
8305 { Bad_Opcode },
8306 { Bad_Opcode },
8307 { Bad_Opcode },
8308 { Bad_Opcode },
8309 { Bad_Opcode },
8310 { Bad_Opcode },
8311 { Bad_Opcode },
4e7d34a6 8312 /* 30 */
592d1631
L
8313 { Bad_Opcode },
8314 { Bad_Opcode },
8315 { Bad_Opcode },
8316 { Bad_Opcode },
8317 { Bad_Opcode },
8318 { Bad_Opcode },
8319 { Bad_Opcode },
8320 { Bad_Opcode },
c0f3af97 8321 /* 38 */
592d1631
L
8322 { Bad_Opcode },
8323 { Bad_Opcode },
8324 { Bad_Opcode },
8325 { Bad_Opcode },
8326 { Bad_Opcode },
8327 { Bad_Opcode },
8328 { Bad_Opcode },
8329 { Bad_Opcode },
c0f3af97 8330 /* 40 */
592d1631
L
8331 { Bad_Opcode },
8332 { Bad_Opcode },
8333 { Bad_Opcode },
8334 { Bad_Opcode },
8335 { Bad_Opcode },
8336 { Bad_Opcode },
8337 { Bad_Opcode },
8338 { Bad_Opcode },
c1e679ec 8339 /* 48 */
592d1631
L
8340 { Bad_Opcode },
8341 { Bad_Opcode },
8342 { Bad_Opcode },
8343 { Bad_Opcode },
8344 { Bad_Opcode },
8345 { Bad_Opcode },
8346 { Bad_Opcode },
8347 { Bad_Opcode },
c1e679ec 8348 /* 50 */
592d1631
L
8349 { Bad_Opcode },
8350 { Bad_Opcode },
8351 { Bad_Opcode },
8352 { Bad_Opcode },
8353 { Bad_Opcode },
8354 { Bad_Opcode },
8355 { Bad_Opcode },
8356 { Bad_Opcode },
4e7d34a6 8357 /* 58 */
592d1631
L
8358 { Bad_Opcode },
8359 { Bad_Opcode },
8360 { Bad_Opcode },
8361 { Bad_Opcode },
8362 { Bad_Opcode },
8363 { Bad_Opcode },
8364 { Bad_Opcode },
8365 { Bad_Opcode },
4e7d34a6 8366 /* 60 */
592d1631
L
8367 { Bad_Opcode },
8368 { Bad_Opcode },
8369 { Bad_Opcode },
8370 { Bad_Opcode },
8371 { Bad_Opcode },
8372 { Bad_Opcode },
8373 { Bad_Opcode },
8374 { Bad_Opcode },
4e7d34a6 8375 /* 68 */
592d1631
L
8376 { Bad_Opcode },
8377 { Bad_Opcode },
8378 { Bad_Opcode },
8379 { Bad_Opcode },
8380 { Bad_Opcode },
8381 { Bad_Opcode },
8382 { Bad_Opcode },
8383 { Bad_Opcode },
4e7d34a6 8384 /* 70 */
592d1631
L
8385 { Bad_Opcode },
8386 { Bad_Opcode },
8387 { Bad_Opcode },
8388 { Bad_Opcode },
8389 { Bad_Opcode },
8390 { Bad_Opcode },
8391 { Bad_Opcode },
8392 { Bad_Opcode },
4e7d34a6 8393 /* 78 */
592d1631
L
8394 { Bad_Opcode },
8395 { Bad_Opcode },
8396 { Bad_Opcode },
8397 { Bad_Opcode },
8398 { Bad_Opcode },
8399 { Bad_Opcode },
8400 { Bad_Opcode },
8401 { Bad_Opcode },
4e7d34a6 8402 /* 80 */
592d1631
L
8403 { Bad_Opcode },
8404 { Bad_Opcode },
8405 { Bad_Opcode },
8406 { Bad_Opcode },
8407 { Bad_Opcode },
8408 { Bad_Opcode },
8409 { Bad_Opcode },
8410 { Bad_Opcode },
4e7d34a6 8411 /* 88 */
592d1631
L
8412 { Bad_Opcode },
8413 { Bad_Opcode },
8414 { Bad_Opcode },
8415 { Bad_Opcode },
8416 { Bad_Opcode },
8417 { Bad_Opcode },
8418 { Bad_Opcode },
8419 { Bad_Opcode },
4e7d34a6 8420 /* 90 */
592d1631
L
8421 { Bad_Opcode },
8422 { Bad_Opcode },
8423 { Bad_Opcode },
8424 { Bad_Opcode },
8425 { Bad_Opcode },
8426 { Bad_Opcode },
8427 { Bad_Opcode },
8428 { Bad_Opcode },
4e7d34a6 8429 /* 98 */
592d1631
L
8430 { Bad_Opcode },
8431 { Bad_Opcode },
8432 { Bad_Opcode },
8433 { Bad_Opcode },
8434 { Bad_Opcode },
8435 { Bad_Opcode },
8436 { Bad_Opcode },
8437 { Bad_Opcode },
4e7d34a6 8438 /* a0 */
592d1631
L
8439 { Bad_Opcode },
8440 { Bad_Opcode },
8441 { Bad_Opcode },
8442 { Bad_Opcode },
8443 { Bad_Opcode },
8444 { Bad_Opcode },
8445 { Bad_Opcode },
8446 { Bad_Opcode },
4e7d34a6 8447 /* a8 */
592d1631
L
8448 { Bad_Opcode },
8449 { Bad_Opcode },
8450 { Bad_Opcode },
8451 { Bad_Opcode },
8452 { Bad_Opcode },
8453 { Bad_Opcode },
8454 { Bad_Opcode },
8455 { Bad_Opcode },
d5d7db8e 8456 /* b0 */
592d1631
L
8457 { Bad_Opcode },
8458 { Bad_Opcode },
8459 { Bad_Opcode },
8460 { Bad_Opcode },
8461 { Bad_Opcode },
8462 { Bad_Opcode },
8463 { Bad_Opcode },
8464 { Bad_Opcode },
85f10a01 8465 /* b8 */
592d1631
L
8466 { Bad_Opcode },
8467 { Bad_Opcode },
8468 { Bad_Opcode },
8469 { Bad_Opcode },
8470 { Bad_Opcode },
8471 { Bad_Opcode },
8472 { Bad_Opcode },
8473 { Bad_Opcode },
85f10a01 8474 /* c0 */
592d1631
L
8475 { Bad_Opcode },
8476 { Bad_Opcode },
8477 { Bad_Opcode },
8478 { Bad_Opcode },
8479 { Bad_Opcode },
8480 { Bad_Opcode },
8481 { Bad_Opcode },
8482 { Bad_Opcode },
85f10a01 8483 /* c8 */
592d1631
L
8484 { Bad_Opcode },
8485 { Bad_Opcode },
8486 { Bad_Opcode },
8487 { Bad_Opcode },
8488 { Bad_Opcode },
8489 { Bad_Opcode },
8490 { Bad_Opcode },
8491 { Bad_Opcode },
85f10a01 8492 /* d0 */
592d1631
L
8493 { Bad_Opcode },
8494 { Bad_Opcode },
8495 { Bad_Opcode },
8496 { Bad_Opcode },
8497 { Bad_Opcode },
8498 { Bad_Opcode },
8499 { Bad_Opcode },
8500 { Bad_Opcode },
85f10a01 8501 /* d8 */
592d1631
L
8502 { Bad_Opcode },
8503 { Bad_Opcode },
8504 { Bad_Opcode },
8505 { Bad_Opcode },
8506 { Bad_Opcode },
8507 { Bad_Opcode },
8508 { Bad_Opcode },
8509 { Bad_Opcode },
85f10a01 8510 /* e0 */
592d1631
L
8511 { Bad_Opcode },
8512 { Bad_Opcode },
8513 { Bad_Opcode },
8514 { Bad_Opcode },
8515 { Bad_Opcode },
8516 { Bad_Opcode },
8517 { Bad_Opcode },
8518 { Bad_Opcode },
85f10a01 8519 /* e8 */
592d1631
L
8520 { Bad_Opcode },
8521 { Bad_Opcode },
8522 { Bad_Opcode },
8523 { Bad_Opcode },
8524 { Bad_Opcode },
8525 { Bad_Opcode },
8526 { Bad_Opcode },
8527 { Bad_Opcode },
85f10a01 8528 /* f0 */
592d1631
L
8529 { Bad_Opcode },
8530 { Bad_Opcode },
8531 { Bad_Opcode },
8532 { Bad_Opcode },
8533 { Bad_Opcode },
8534 { Bad_Opcode },
8535 { Bad_Opcode },
8536 { Bad_Opcode },
85f10a01 8537 /* f8 */
592d1631
L
8538 { Bad_Opcode },
8539 { Bad_Opcode },
8540 { Bad_Opcode },
8541 { Bad_Opcode },
8542 { Bad_Opcode },
8543 { Bad_Opcode },
8544 { Bad_Opcode },
8545 { Bad_Opcode },
85f10a01 8546 },
c0f3af97
L
8547};
8548
8549static const struct dis386 vex_table[][256] = {
8550 /* VEX_0F */
85f10a01
MM
8551 {
8552 /* 00 */
592d1631
L
8553 { Bad_Opcode },
8554 { Bad_Opcode },
8555 { Bad_Opcode },
8556 { Bad_Opcode },
8557 { Bad_Opcode },
8558 { Bad_Opcode },
8559 { Bad_Opcode },
8560 { Bad_Opcode },
85f10a01 8561 /* 08 */
592d1631
L
8562 { Bad_Opcode },
8563 { Bad_Opcode },
8564 { Bad_Opcode },
8565 { Bad_Opcode },
8566 { Bad_Opcode },
8567 { Bad_Opcode },
8568 { Bad_Opcode },
8569 { Bad_Opcode },
c0f3af97 8570 /* 10 */
592a252b
L
8571 { PREFIX_TABLE (PREFIX_VEX_0F10) },
8572 { PREFIX_TABLE (PREFIX_VEX_0F11) },
8573 { PREFIX_TABLE (PREFIX_VEX_0F12) },
8574 { MOD_TABLE (MOD_VEX_0F13) },
8575 { VEX_W_TABLE (VEX_W_0F14) },
8576 { VEX_W_TABLE (VEX_W_0F15) },
8577 { PREFIX_TABLE (PREFIX_VEX_0F16) },
8578 { MOD_TABLE (MOD_VEX_0F17) },
c0f3af97 8579 /* 18 */
592d1631
L
8580 { Bad_Opcode },
8581 { Bad_Opcode },
8582 { Bad_Opcode },
8583 { Bad_Opcode },
8584 { Bad_Opcode },
8585 { Bad_Opcode },
8586 { Bad_Opcode },
8587 { Bad_Opcode },
c0f3af97 8588 /* 20 */
592d1631
L
8589 { Bad_Opcode },
8590 { Bad_Opcode },
8591 { Bad_Opcode },
8592 { Bad_Opcode },
8593 { Bad_Opcode },
8594 { Bad_Opcode },
8595 { Bad_Opcode },
8596 { Bad_Opcode },
c0f3af97 8597 /* 28 */
592a252b
L
8598 { VEX_W_TABLE (VEX_W_0F28) },
8599 { VEX_W_TABLE (VEX_W_0F29) },
8600 { PREFIX_TABLE (PREFIX_VEX_0F2A) },
8601 { MOD_TABLE (MOD_VEX_0F2B) },
8602 { PREFIX_TABLE (PREFIX_VEX_0F2C) },
8603 { PREFIX_TABLE (PREFIX_VEX_0F2D) },
8604 { PREFIX_TABLE (PREFIX_VEX_0F2E) },
8605 { PREFIX_TABLE (PREFIX_VEX_0F2F) },
85f10a01 8606 /* 30 */
592d1631
L
8607 { Bad_Opcode },
8608 { Bad_Opcode },
8609 { Bad_Opcode },
8610 { Bad_Opcode },
8611 { Bad_Opcode },
8612 { Bad_Opcode },
8613 { Bad_Opcode },
8614 { Bad_Opcode },
4e7d34a6 8615 /* 38 */
592d1631
L
8616 { Bad_Opcode },
8617 { Bad_Opcode },
8618 { Bad_Opcode },
8619 { Bad_Opcode },
8620 { Bad_Opcode },
8621 { Bad_Opcode },
8622 { Bad_Opcode },
8623 { Bad_Opcode },
d5d7db8e 8624 /* 40 */
592d1631 8625 { Bad_Opcode },
43234a1e
L
8626 { PREFIX_TABLE (PREFIX_VEX_0F41) },
8627 { PREFIX_TABLE (PREFIX_VEX_0F42) },
592d1631 8628 { Bad_Opcode },
43234a1e
L
8629 { PREFIX_TABLE (PREFIX_VEX_0F44) },
8630 { PREFIX_TABLE (PREFIX_VEX_0F45) },
8631 { PREFIX_TABLE (PREFIX_VEX_0F46) },
8632 { PREFIX_TABLE (PREFIX_VEX_0F47) },
85f10a01 8633 /* 48 */
592d1631
L
8634 { Bad_Opcode },
8635 { Bad_Opcode },
1ba585e8 8636 { PREFIX_TABLE (PREFIX_VEX_0F4A) },
43234a1e 8637 { PREFIX_TABLE (PREFIX_VEX_0F4B) },
592d1631
L
8638 { Bad_Opcode },
8639 { Bad_Opcode },
8640 { Bad_Opcode },
8641 { Bad_Opcode },
d5d7db8e 8642 /* 50 */
592a252b
L
8643 { MOD_TABLE (MOD_VEX_0F50) },
8644 { PREFIX_TABLE (PREFIX_VEX_0F51) },
8645 { PREFIX_TABLE (PREFIX_VEX_0F52) },
8646 { PREFIX_TABLE (PREFIX_VEX_0F53) },
c0f3af97
L
8647 { "vandpX", { XM, Vex, EXx } },
8648 { "vandnpX", { XM, Vex, EXx } },
8649 { "vorpX", { XM, Vex, EXx } },
8650 { "vxorpX", { XM, Vex, EXx } },
8651 /* 58 */
592a252b
L
8652 { PREFIX_TABLE (PREFIX_VEX_0F58) },
8653 { PREFIX_TABLE (PREFIX_VEX_0F59) },
8654 { PREFIX_TABLE (PREFIX_VEX_0F5A) },
8655 { PREFIX_TABLE (PREFIX_VEX_0F5B) },
8656 { PREFIX_TABLE (PREFIX_VEX_0F5C) },
8657 { PREFIX_TABLE (PREFIX_VEX_0F5D) },
8658 { PREFIX_TABLE (PREFIX_VEX_0F5E) },
8659 { PREFIX_TABLE (PREFIX_VEX_0F5F) },
c0f3af97 8660 /* 60 */
592a252b
L
8661 { PREFIX_TABLE (PREFIX_VEX_0F60) },
8662 { PREFIX_TABLE (PREFIX_VEX_0F61) },
8663 { PREFIX_TABLE (PREFIX_VEX_0F62) },
8664 { PREFIX_TABLE (PREFIX_VEX_0F63) },
8665 { PREFIX_TABLE (PREFIX_VEX_0F64) },
8666 { PREFIX_TABLE (PREFIX_VEX_0F65) },
8667 { PREFIX_TABLE (PREFIX_VEX_0F66) },
8668 { PREFIX_TABLE (PREFIX_VEX_0F67) },
c0f3af97 8669 /* 68 */
592a252b
L
8670 { PREFIX_TABLE (PREFIX_VEX_0F68) },
8671 { PREFIX_TABLE (PREFIX_VEX_0F69) },
8672 { PREFIX_TABLE (PREFIX_VEX_0F6A) },
8673 { PREFIX_TABLE (PREFIX_VEX_0F6B) },
8674 { PREFIX_TABLE (PREFIX_VEX_0F6C) },
8675 { PREFIX_TABLE (PREFIX_VEX_0F6D) },
8676 { PREFIX_TABLE (PREFIX_VEX_0F6E) },
8677 { PREFIX_TABLE (PREFIX_VEX_0F6F) },
c0f3af97 8678 /* 70 */
592a252b
L
8679 { PREFIX_TABLE (PREFIX_VEX_0F70) },
8680 { REG_TABLE (REG_VEX_0F71) },
8681 { REG_TABLE (REG_VEX_0F72) },
8682 { REG_TABLE (REG_VEX_0F73) },
8683 { PREFIX_TABLE (PREFIX_VEX_0F74) },
8684 { PREFIX_TABLE (PREFIX_VEX_0F75) },
8685 { PREFIX_TABLE (PREFIX_VEX_0F76) },
8686 { PREFIX_TABLE (PREFIX_VEX_0F77) },
c0f3af97 8687 /* 78 */
592d1631
L
8688 { Bad_Opcode },
8689 { Bad_Opcode },
8690 { Bad_Opcode },
8691 { Bad_Opcode },
592a252b
L
8692 { PREFIX_TABLE (PREFIX_VEX_0F7C) },
8693 { PREFIX_TABLE (PREFIX_VEX_0F7D) },
8694 { PREFIX_TABLE (PREFIX_VEX_0F7E) },
8695 { PREFIX_TABLE (PREFIX_VEX_0F7F) },
c0f3af97 8696 /* 80 */
592d1631
L
8697 { Bad_Opcode },
8698 { Bad_Opcode },
8699 { Bad_Opcode },
8700 { Bad_Opcode },
8701 { Bad_Opcode },
8702 { Bad_Opcode },
8703 { Bad_Opcode },
8704 { Bad_Opcode },
c0f3af97 8705 /* 88 */
592d1631
L
8706 { Bad_Opcode },
8707 { Bad_Opcode },
8708 { Bad_Opcode },
8709 { Bad_Opcode },
8710 { Bad_Opcode },
8711 { Bad_Opcode },
8712 { Bad_Opcode },
8713 { Bad_Opcode },
c0f3af97 8714 /* 90 */
43234a1e
L
8715 { PREFIX_TABLE (PREFIX_VEX_0F90) },
8716 { PREFIX_TABLE (PREFIX_VEX_0F91) },
8717 { PREFIX_TABLE (PREFIX_VEX_0F92) },
8718 { PREFIX_TABLE (PREFIX_VEX_0F93) },
592d1631
L
8719 { Bad_Opcode },
8720 { Bad_Opcode },
8721 { Bad_Opcode },
8722 { Bad_Opcode },
c0f3af97 8723 /* 98 */
43234a1e 8724 { PREFIX_TABLE (PREFIX_VEX_0F98) },
1ba585e8 8725 { PREFIX_TABLE (PREFIX_VEX_0F99) },
592d1631
L
8726 { Bad_Opcode },
8727 { Bad_Opcode },
8728 { Bad_Opcode },
8729 { Bad_Opcode },
8730 { Bad_Opcode },
8731 { Bad_Opcode },
c0f3af97 8732 /* a0 */
592d1631
L
8733 { Bad_Opcode },
8734 { Bad_Opcode },
8735 { Bad_Opcode },
8736 { Bad_Opcode },
8737 { Bad_Opcode },
8738 { Bad_Opcode },
8739 { Bad_Opcode },
8740 { Bad_Opcode },
c0f3af97 8741 /* a8 */
592d1631
L
8742 { Bad_Opcode },
8743 { Bad_Opcode },
8744 { Bad_Opcode },
8745 { Bad_Opcode },
8746 { Bad_Opcode },
8747 { Bad_Opcode },
592a252b 8748 { REG_TABLE (REG_VEX_0FAE) },
592d1631 8749 { Bad_Opcode },
c0f3af97 8750 /* b0 */
592d1631
L
8751 { Bad_Opcode },
8752 { Bad_Opcode },
8753 { Bad_Opcode },
8754 { Bad_Opcode },
8755 { Bad_Opcode },
8756 { Bad_Opcode },
8757 { Bad_Opcode },
8758 { Bad_Opcode },
c0f3af97 8759 /* b8 */
592d1631
L
8760 { Bad_Opcode },
8761 { Bad_Opcode },
8762 { Bad_Opcode },
8763 { Bad_Opcode },
8764 { Bad_Opcode },
8765 { Bad_Opcode },
8766 { Bad_Opcode },
8767 { Bad_Opcode },
c0f3af97 8768 /* c0 */
592d1631
L
8769 { Bad_Opcode },
8770 { Bad_Opcode },
592a252b 8771 { PREFIX_TABLE (PREFIX_VEX_0FC2) },
592d1631 8772 { Bad_Opcode },
592a252b
L
8773 { PREFIX_TABLE (PREFIX_VEX_0FC4) },
8774 { PREFIX_TABLE (PREFIX_VEX_0FC5) },
c0f3af97 8775 { "vshufpX", { XM, Vex, EXx, Ib } },
592d1631 8776 { Bad_Opcode },
c0f3af97 8777 /* c8 */
592d1631
L
8778 { Bad_Opcode },
8779 { Bad_Opcode },
8780 { Bad_Opcode },
8781 { Bad_Opcode },
8782 { Bad_Opcode },
8783 { Bad_Opcode },
8784 { Bad_Opcode },
8785 { Bad_Opcode },
c0f3af97 8786 /* d0 */
592a252b
L
8787 { PREFIX_TABLE (PREFIX_VEX_0FD0) },
8788 { PREFIX_TABLE (PREFIX_VEX_0FD1) },
8789 { PREFIX_TABLE (PREFIX_VEX_0FD2) },
8790 { PREFIX_TABLE (PREFIX_VEX_0FD3) },
8791 { PREFIX_TABLE (PREFIX_VEX_0FD4) },
8792 { PREFIX_TABLE (PREFIX_VEX_0FD5) },
8793 { PREFIX_TABLE (PREFIX_VEX_0FD6) },
8794 { PREFIX_TABLE (PREFIX_VEX_0FD7) },
c0f3af97 8795 /* d8 */
592a252b
L
8796 { PREFIX_TABLE (PREFIX_VEX_0FD8) },
8797 { PREFIX_TABLE (PREFIX_VEX_0FD9) },
8798 { PREFIX_TABLE (PREFIX_VEX_0FDA) },
8799 { PREFIX_TABLE (PREFIX_VEX_0FDB) },
8800 { PREFIX_TABLE (PREFIX_VEX_0FDC) },
8801 { PREFIX_TABLE (PREFIX_VEX_0FDD) },
8802 { PREFIX_TABLE (PREFIX_VEX_0FDE) },
8803 { PREFIX_TABLE (PREFIX_VEX_0FDF) },
c0f3af97 8804 /* e0 */
592a252b
L
8805 { PREFIX_TABLE (PREFIX_VEX_0FE0) },
8806 { PREFIX_TABLE (PREFIX_VEX_0FE1) },
8807 { PREFIX_TABLE (PREFIX_VEX_0FE2) },
8808 { PREFIX_TABLE (PREFIX_VEX_0FE3) },
8809 { PREFIX_TABLE (PREFIX_VEX_0FE4) },
8810 { PREFIX_TABLE (PREFIX_VEX_0FE5) },
8811 { PREFIX_TABLE (PREFIX_VEX_0FE6) },
8812 { PREFIX_TABLE (PREFIX_VEX_0FE7) },
c0f3af97 8813 /* e8 */
592a252b
L
8814 { PREFIX_TABLE (PREFIX_VEX_0FE8) },
8815 { PREFIX_TABLE (PREFIX_VEX_0FE9) },
8816 { PREFIX_TABLE (PREFIX_VEX_0FEA) },
8817 { PREFIX_TABLE (PREFIX_VEX_0FEB) },
8818 { PREFIX_TABLE (PREFIX_VEX_0FEC) },
8819 { PREFIX_TABLE (PREFIX_VEX_0FED) },
8820 { PREFIX_TABLE (PREFIX_VEX_0FEE) },
8821 { PREFIX_TABLE (PREFIX_VEX_0FEF) },
c0f3af97 8822 /* f0 */
592a252b
L
8823 { PREFIX_TABLE (PREFIX_VEX_0FF0) },
8824 { PREFIX_TABLE (PREFIX_VEX_0FF1) },
8825 { PREFIX_TABLE (PREFIX_VEX_0FF2) },
8826 { PREFIX_TABLE (PREFIX_VEX_0FF3) },
8827 { PREFIX_TABLE (PREFIX_VEX_0FF4) },
8828 { PREFIX_TABLE (PREFIX_VEX_0FF5) },
8829 { PREFIX_TABLE (PREFIX_VEX_0FF6) },
8830 { PREFIX_TABLE (PREFIX_VEX_0FF7) },
c0f3af97 8831 /* f8 */
592a252b
L
8832 { PREFIX_TABLE (PREFIX_VEX_0FF8) },
8833 { PREFIX_TABLE (PREFIX_VEX_0FF9) },
8834 { PREFIX_TABLE (PREFIX_VEX_0FFA) },
8835 { PREFIX_TABLE (PREFIX_VEX_0FFB) },
8836 { PREFIX_TABLE (PREFIX_VEX_0FFC) },
8837 { PREFIX_TABLE (PREFIX_VEX_0FFD) },
8838 { PREFIX_TABLE (PREFIX_VEX_0FFE) },
592d1631 8839 { Bad_Opcode },
c0f3af97
L
8840 },
8841 /* VEX_0F38 */
8842 {
8843 /* 00 */
592a252b
L
8844 { PREFIX_TABLE (PREFIX_VEX_0F3800) },
8845 { PREFIX_TABLE (PREFIX_VEX_0F3801) },
8846 { PREFIX_TABLE (PREFIX_VEX_0F3802) },
8847 { PREFIX_TABLE (PREFIX_VEX_0F3803) },
8848 { PREFIX_TABLE (PREFIX_VEX_0F3804) },
8849 { PREFIX_TABLE (PREFIX_VEX_0F3805) },
8850 { PREFIX_TABLE (PREFIX_VEX_0F3806) },
8851 { PREFIX_TABLE (PREFIX_VEX_0F3807) },
c0f3af97 8852 /* 08 */
592a252b
L
8853 { PREFIX_TABLE (PREFIX_VEX_0F3808) },
8854 { PREFIX_TABLE (PREFIX_VEX_0F3809) },
8855 { PREFIX_TABLE (PREFIX_VEX_0F380A) },
8856 { PREFIX_TABLE (PREFIX_VEX_0F380B) },
8857 { PREFIX_TABLE (PREFIX_VEX_0F380C) },
8858 { PREFIX_TABLE (PREFIX_VEX_0F380D) },
8859 { PREFIX_TABLE (PREFIX_VEX_0F380E) },
8860 { PREFIX_TABLE (PREFIX_VEX_0F380F) },
c0f3af97 8861 /* 10 */
592d1631
L
8862 { Bad_Opcode },
8863 { Bad_Opcode },
8864 { Bad_Opcode },
592a252b 8865 { PREFIX_TABLE (PREFIX_VEX_0F3813) },
592d1631
L
8866 { Bad_Opcode },
8867 { Bad_Opcode },
6c30d220 8868 { PREFIX_TABLE (PREFIX_VEX_0F3816) },
592a252b 8869 { PREFIX_TABLE (PREFIX_VEX_0F3817) },
c0f3af97 8870 /* 18 */
592a252b
L
8871 { PREFIX_TABLE (PREFIX_VEX_0F3818) },
8872 { PREFIX_TABLE (PREFIX_VEX_0F3819) },
8873 { PREFIX_TABLE (PREFIX_VEX_0F381A) },
592d1631 8874 { Bad_Opcode },
592a252b
L
8875 { PREFIX_TABLE (PREFIX_VEX_0F381C) },
8876 { PREFIX_TABLE (PREFIX_VEX_0F381D) },
8877 { PREFIX_TABLE (PREFIX_VEX_0F381E) },
592d1631 8878 { Bad_Opcode },
c0f3af97 8879 /* 20 */
592a252b
L
8880 { PREFIX_TABLE (PREFIX_VEX_0F3820) },
8881 { PREFIX_TABLE (PREFIX_VEX_0F3821) },
8882 { PREFIX_TABLE (PREFIX_VEX_0F3822) },
8883 { PREFIX_TABLE (PREFIX_VEX_0F3823) },
8884 { PREFIX_TABLE (PREFIX_VEX_0F3824) },
8885 { PREFIX_TABLE (PREFIX_VEX_0F3825) },
592d1631
L
8886 { Bad_Opcode },
8887 { Bad_Opcode },
c0f3af97 8888 /* 28 */
592a252b
L
8889 { PREFIX_TABLE (PREFIX_VEX_0F3828) },
8890 { PREFIX_TABLE (PREFIX_VEX_0F3829) },
8891 { PREFIX_TABLE (PREFIX_VEX_0F382A) },
8892 { PREFIX_TABLE (PREFIX_VEX_0F382B) },
8893 { PREFIX_TABLE (PREFIX_VEX_0F382C) },
8894 { PREFIX_TABLE (PREFIX_VEX_0F382D) },
8895 { PREFIX_TABLE (PREFIX_VEX_0F382E) },
8896 { PREFIX_TABLE (PREFIX_VEX_0F382F) },
c0f3af97 8897 /* 30 */
592a252b
L
8898 { PREFIX_TABLE (PREFIX_VEX_0F3830) },
8899 { PREFIX_TABLE (PREFIX_VEX_0F3831) },
8900 { PREFIX_TABLE (PREFIX_VEX_0F3832) },
8901 { PREFIX_TABLE (PREFIX_VEX_0F3833) },
8902 { PREFIX_TABLE (PREFIX_VEX_0F3834) },
8903 { PREFIX_TABLE (PREFIX_VEX_0F3835) },
6c30d220 8904 { PREFIX_TABLE (PREFIX_VEX_0F3836) },
592a252b 8905 { PREFIX_TABLE (PREFIX_VEX_0F3837) },
c0f3af97 8906 /* 38 */
592a252b
L
8907 { PREFIX_TABLE (PREFIX_VEX_0F3838) },
8908 { PREFIX_TABLE (PREFIX_VEX_0F3839) },
8909 { PREFIX_TABLE (PREFIX_VEX_0F383A) },
8910 { PREFIX_TABLE (PREFIX_VEX_0F383B) },
8911 { PREFIX_TABLE (PREFIX_VEX_0F383C) },
8912 { PREFIX_TABLE (PREFIX_VEX_0F383D) },
8913 { PREFIX_TABLE (PREFIX_VEX_0F383E) },
8914 { PREFIX_TABLE (PREFIX_VEX_0F383F) },
c0f3af97 8915 /* 40 */
592a252b
L
8916 { PREFIX_TABLE (PREFIX_VEX_0F3840) },
8917 { PREFIX_TABLE (PREFIX_VEX_0F3841) },
592d1631
L
8918 { Bad_Opcode },
8919 { Bad_Opcode },
8920 { Bad_Opcode },
6c30d220
L
8921 { PREFIX_TABLE (PREFIX_VEX_0F3845) },
8922 { PREFIX_TABLE (PREFIX_VEX_0F3846) },
8923 { PREFIX_TABLE (PREFIX_VEX_0F3847) },
c0f3af97 8924 /* 48 */
592d1631
L
8925 { Bad_Opcode },
8926 { Bad_Opcode },
8927 { Bad_Opcode },
8928 { Bad_Opcode },
8929 { Bad_Opcode },
8930 { Bad_Opcode },
8931 { Bad_Opcode },
8932 { Bad_Opcode },
c0f3af97 8933 /* 50 */
592d1631
L
8934 { Bad_Opcode },
8935 { Bad_Opcode },
8936 { Bad_Opcode },
8937 { Bad_Opcode },
8938 { Bad_Opcode },
8939 { Bad_Opcode },
8940 { Bad_Opcode },
8941 { Bad_Opcode },
c0f3af97 8942 /* 58 */
6c30d220
L
8943 { PREFIX_TABLE (PREFIX_VEX_0F3858) },
8944 { PREFIX_TABLE (PREFIX_VEX_0F3859) },
8945 { PREFIX_TABLE (PREFIX_VEX_0F385A) },
592d1631
L
8946 { Bad_Opcode },
8947 { Bad_Opcode },
8948 { Bad_Opcode },
8949 { Bad_Opcode },
8950 { Bad_Opcode },
c0f3af97 8951 /* 60 */
592d1631
L
8952 { Bad_Opcode },
8953 { Bad_Opcode },
8954 { Bad_Opcode },
8955 { Bad_Opcode },
8956 { Bad_Opcode },
8957 { Bad_Opcode },
8958 { Bad_Opcode },
8959 { Bad_Opcode },
c0f3af97 8960 /* 68 */
592d1631
L
8961 { Bad_Opcode },
8962 { Bad_Opcode },
8963 { Bad_Opcode },
8964 { Bad_Opcode },
8965 { Bad_Opcode },
8966 { Bad_Opcode },
8967 { Bad_Opcode },
8968 { Bad_Opcode },
c0f3af97 8969 /* 70 */
592d1631
L
8970 { Bad_Opcode },
8971 { Bad_Opcode },
8972 { Bad_Opcode },
8973 { Bad_Opcode },
8974 { Bad_Opcode },
8975 { Bad_Opcode },
8976 { Bad_Opcode },
8977 { Bad_Opcode },
c0f3af97 8978 /* 78 */
6c30d220
L
8979 { PREFIX_TABLE (PREFIX_VEX_0F3878) },
8980 { PREFIX_TABLE (PREFIX_VEX_0F3879) },
592d1631
L
8981 { Bad_Opcode },
8982 { Bad_Opcode },
8983 { Bad_Opcode },
8984 { Bad_Opcode },
8985 { Bad_Opcode },
8986 { Bad_Opcode },
c0f3af97 8987 /* 80 */
592d1631
L
8988 { Bad_Opcode },
8989 { Bad_Opcode },
8990 { Bad_Opcode },
8991 { Bad_Opcode },
8992 { Bad_Opcode },
8993 { Bad_Opcode },
8994 { Bad_Opcode },
8995 { Bad_Opcode },
c0f3af97 8996 /* 88 */
592d1631
L
8997 { Bad_Opcode },
8998 { Bad_Opcode },
8999 { Bad_Opcode },
9000 { Bad_Opcode },
6c30d220 9001 { PREFIX_TABLE (PREFIX_VEX_0F388C) },
592d1631 9002 { Bad_Opcode },
6c30d220 9003 { PREFIX_TABLE (PREFIX_VEX_0F388E) },
592d1631 9004 { Bad_Opcode },
c0f3af97 9005 /* 90 */
6c30d220
L
9006 { PREFIX_TABLE (PREFIX_VEX_0F3890) },
9007 { PREFIX_TABLE (PREFIX_VEX_0F3891) },
9008 { PREFIX_TABLE (PREFIX_VEX_0F3892) },
9009 { PREFIX_TABLE (PREFIX_VEX_0F3893) },
592d1631
L
9010 { Bad_Opcode },
9011 { Bad_Opcode },
592a252b
L
9012 { PREFIX_TABLE (PREFIX_VEX_0F3896) },
9013 { PREFIX_TABLE (PREFIX_VEX_0F3897) },
c0f3af97 9014 /* 98 */
592a252b
L
9015 { PREFIX_TABLE (PREFIX_VEX_0F3898) },
9016 { PREFIX_TABLE (PREFIX_VEX_0F3899) },
9017 { PREFIX_TABLE (PREFIX_VEX_0F389A) },
9018 { PREFIX_TABLE (PREFIX_VEX_0F389B) },
9019 { PREFIX_TABLE (PREFIX_VEX_0F389C) },
9020 { PREFIX_TABLE (PREFIX_VEX_0F389D) },
9021 { PREFIX_TABLE (PREFIX_VEX_0F389E) },
9022 { PREFIX_TABLE (PREFIX_VEX_0F389F) },
c0f3af97 9023 /* a0 */
592d1631
L
9024 { Bad_Opcode },
9025 { Bad_Opcode },
9026 { Bad_Opcode },
9027 { Bad_Opcode },
9028 { Bad_Opcode },
9029 { Bad_Opcode },
592a252b
L
9030 { PREFIX_TABLE (PREFIX_VEX_0F38A6) },
9031 { PREFIX_TABLE (PREFIX_VEX_0F38A7) },
c0f3af97 9032 /* a8 */
592a252b
L
9033 { PREFIX_TABLE (PREFIX_VEX_0F38A8) },
9034 { PREFIX_TABLE (PREFIX_VEX_0F38A9) },
9035 { PREFIX_TABLE (PREFIX_VEX_0F38AA) },
9036 { PREFIX_TABLE (PREFIX_VEX_0F38AB) },
9037 { PREFIX_TABLE (PREFIX_VEX_0F38AC) },
9038 { PREFIX_TABLE (PREFIX_VEX_0F38AD) },
9039 { PREFIX_TABLE (PREFIX_VEX_0F38AE) },
9040 { PREFIX_TABLE (PREFIX_VEX_0F38AF) },
c0f3af97 9041 /* b0 */
592d1631
L
9042 { Bad_Opcode },
9043 { Bad_Opcode },
9044 { Bad_Opcode },
9045 { Bad_Opcode },
9046 { Bad_Opcode },
9047 { Bad_Opcode },
592a252b
L
9048 { PREFIX_TABLE (PREFIX_VEX_0F38B6) },
9049 { PREFIX_TABLE (PREFIX_VEX_0F38B7) },
c0f3af97 9050 /* b8 */
592a252b
L
9051 { PREFIX_TABLE (PREFIX_VEX_0F38B8) },
9052 { PREFIX_TABLE (PREFIX_VEX_0F38B9) },
9053 { PREFIX_TABLE (PREFIX_VEX_0F38BA) },
9054 { PREFIX_TABLE (PREFIX_VEX_0F38BB) },
9055 { PREFIX_TABLE (PREFIX_VEX_0F38BC) },
9056 { PREFIX_TABLE (PREFIX_VEX_0F38BD) },
9057 { PREFIX_TABLE (PREFIX_VEX_0F38BE) },
9058 { PREFIX_TABLE (PREFIX_VEX_0F38BF) },
c0f3af97 9059 /* c0 */
592d1631
L
9060 { Bad_Opcode },
9061 { Bad_Opcode },
9062 { Bad_Opcode },
9063 { Bad_Opcode },
9064 { Bad_Opcode },
9065 { Bad_Opcode },
9066 { Bad_Opcode },
9067 { Bad_Opcode },
c0f3af97 9068 /* c8 */
592d1631
L
9069 { Bad_Opcode },
9070 { Bad_Opcode },
9071 { Bad_Opcode },
9072 { Bad_Opcode },
9073 { Bad_Opcode },
9074 { Bad_Opcode },
9075 { Bad_Opcode },
9076 { Bad_Opcode },
c0f3af97 9077 /* d0 */
592d1631
L
9078 { Bad_Opcode },
9079 { Bad_Opcode },
9080 { Bad_Opcode },
9081 { Bad_Opcode },
9082 { Bad_Opcode },
9083 { Bad_Opcode },
9084 { Bad_Opcode },
9085 { Bad_Opcode },
c0f3af97 9086 /* d8 */
592d1631
L
9087 { Bad_Opcode },
9088 { Bad_Opcode },
9089 { Bad_Opcode },
592a252b
L
9090 { PREFIX_TABLE (PREFIX_VEX_0F38DB) },
9091 { PREFIX_TABLE (PREFIX_VEX_0F38DC) },
9092 { PREFIX_TABLE (PREFIX_VEX_0F38DD) },
9093 { PREFIX_TABLE (PREFIX_VEX_0F38DE) },
9094 { PREFIX_TABLE (PREFIX_VEX_0F38DF) },
c0f3af97 9095 /* e0 */
592d1631
L
9096 { Bad_Opcode },
9097 { Bad_Opcode },
9098 { Bad_Opcode },
9099 { Bad_Opcode },
9100 { Bad_Opcode },
9101 { Bad_Opcode },
9102 { Bad_Opcode },
9103 { Bad_Opcode },
c0f3af97 9104 /* e8 */
592d1631
L
9105 { Bad_Opcode },
9106 { Bad_Opcode },
9107 { Bad_Opcode },
9108 { Bad_Opcode },
9109 { Bad_Opcode },
9110 { Bad_Opcode },
9111 { Bad_Opcode },
9112 { Bad_Opcode },
c0f3af97 9113 /* f0 */
592d1631
L
9114 { Bad_Opcode },
9115 { Bad_Opcode },
f12dc422
L
9116 { PREFIX_TABLE (PREFIX_VEX_0F38F2) },
9117 { REG_TABLE (REG_VEX_0F38F3) },
592d1631 9118 { Bad_Opcode },
6c30d220
L
9119 { PREFIX_TABLE (PREFIX_VEX_0F38F5) },
9120 { PREFIX_TABLE (PREFIX_VEX_0F38F6) },
f12dc422 9121 { PREFIX_TABLE (PREFIX_VEX_0F38F7) },
c0f3af97 9122 /* f8 */
592d1631
L
9123 { Bad_Opcode },
9124 { Bad_Opcode },
9125 { Bad_Opcode },
9126 { Bad_Opcode },
9127 { Bad_Opcode },
9128 { Bad_Opcode },
9129 { Bad_Opcode },
9130 { Bad_Opcode },
c0f3af97
L
9131 },
9132 /* VEX_0F3A */
9133 {
9134 /* 00 */
6c30d220
L
9135 { PREFIX_TABLE (PREFIX_VEX_0F3A00) },
9136 { PREFIX_TABLE (PREFIX_VEX_0F3A01) },
9137 { PREFIX_TABLE (PREFIX_VEX_0F3A02) },
592d1631 9138 { Bad_Opcode },
592a252b
L
9139 { PREFIX_TABLE (PREFIX_VEX_0F3A04) },
9140 { PREFIX_TABLE (PREFIX_VEX_0F3A05) },
9141 { PREFIX_TABLE (PREFIX_VEX_0F3A06) },
592d1631 9142 { Bad_Opcode },
c0f3af97 9143 /* 08 */
592a252b
L
9144 { PREFIX_TABLE (PREFIX_VEX_0F3A08) },
9145 { PREFIX_TABLE (PREFIX_VEX_0F3A09) },
9146 { PREFIX_TABLE (PREFIX_VEX_0F3A0A) },
9147 { PREFIX_TABLE (PREFIX_VEX_0F3A0B) },
9148 { PREFIX_TABLE (PREFIX_VEX_0F3A0C) },
9149 { PREFIX_TABLE (PREFIX_VEX_0F3A0D) },
9150 { PREFIX_TABLE (PREFIX_VEX_0F3A0E) },
9151 { PREFIX_TABLE (PREFIX_VEX_0F3A0F) },
c0f3af97 9152 /* 10 */
592d1631
L
9153 { Bad_Opcode },
9154 { Bad_Opcode },
9155 { Bad_Opcode },
9156 { Bad_Opcode },
592a252b
L
9157 { PREFIX_TABLE (PREFIX_VEX_0F3A14) },
9158 { PREFIX_TABLE (PREFIX_VEX_0F3A15) },
9159 { PREFIX_TABLE (PREFIX_VEX_0F3A16) },
9160 { PREFIX_TABLE (PREFIX_VEX_0F3A17) },
c0f3af97 9161 /* 18 */
592a252b
L
9162 { PREFIX_TABLE (PREFIX_VEX_0F3A18) },
9163 { PREFIX_TABLE (PREFIX_VEX_0F3A19) },
592d1631
L
9164 { Bad_Opcode },
9165 { Bad_Opcode },
9166 { Bad_Opcode },
592a252b 9167 { PREFIX_TABLE (PREFIX_VEX_0F3A1D) },
592d1631
L
9168 { Bad_Opcode },
9169 { Bad_Opcode },
c0f3af97 9170 /* 20 */
592a252b
L
9171 { PREFIX_TABLE (PREFIX_VEX_0F3A20) },
9172 { PREFIX_TABLE (PREFIX_VEX_0F3A21) },
9173 { PREFIX_TABLE (PREFIX_VEX_0F3A22) },
592d1631
L
9174 { Bad_Opcode },
9175 { Bad_Opcode },
9176 { Bad_Opcode },
9177 { Bad_Opcode },
9178 { Bad_Opcode },
c0f3af97 9179 /* 28 */
592d1631
L
9180 { Bad_Opcode },
9181 { Bad_Opcode },
9182 { Bad_Opcode },
9183 { Bad_Opcode },
9184 { Bad_Opcode },
9185 { Bad_Opcode },
9186 { Bad_Opcode },
9187 { Bad_Opcode },
c0f3af97 9188 /* 30 */
43234a1e 9189 { PREFIX_TABLE (PREFIX_VEX_0F3A30) },
1ba585e8 9190 { PREFIX_TABLE (PREFIX_VEX_0F3A31) },
43234a1e 9191 { PREFIX_TABLE (PREFIX_VEX_0F3A32) },
1ba585e8 9192 { PREFIX_TABLE (PREFIX_VEX_0F3A33) },
592d1631
L
9193 { Bad_Opcode },
9194 { Bad_Opcode },
9195 { Bad_Opcode },
9196 { Bad_Opcode },
c0f3af97 9197 /* 38 */
6c30d220
L
9198 { PREFIX_TABLE (PREFIX_VEX_0F3A38) },
9199 { PREFIX_TABLE (PREFIX_VEX_0F3A39) },
592d1631
L
9200 { Bad_Opcode },
9201 { Bad_Opcode },
9202 { Bad_Opcode },
9203 { Bad_Opcode },
9204 { Bad_Opcode },
9205 { Bad_Opcode },
c0f3af97 9206 /* 40 */
592a252b
L
9207 { PREFIX_TABLE (PREFIX_VEX_0F3A40) },
9208 { PREFIX_TABLE (PREFIX_VEX_0F3A41) },
9209 { PREFIX_TABLE (PREFIX_VEX_0F3A42) },
592d1631 9210 { Bad_Opcode },
592a252b 9211 { PREFIX_TABLE (PREFIX_VEX_0F3A44) },
592d1631 9212 { Bad_Opcode },
6c30d220 9213 { PREFIX_TABLE (PREFIX_VEX_0F3A46) },
592d1631 9214 { Bad_Opcode },
c0f3af97 9215 /* 48 */
592a252b
L
9216 { PREFIX_TABLE (PREFIX_VEX_0F3A48) },
9217 { PREFIX_TABLE (PREFIX_VEX_0F3A49) },
9218 { PREFIX_TABLE (PREFIX_VEX_0F3A4A) },
9219 { PREFIX_TABLE (PREFIX_VEX_0F3A4B) },
9220 { PREFIX_TABLE (PREFIX_VEX_0F3A4C) },
592d1631
L
9221 { Bad_Opcode },
9222 { Bad_Opcode },
9223 { Bad_Opcode },
c0f3af97 9224 /* 50 */
592d1631
L
9225 { Bad_Opcode },
9226 { Bad_Opcode },
9227 { Bad_Opcode },
9228 { Bad_Opcode },
9229 { Bad_Opcode },
9230 { Bad_Opcode },
9231 { Bad_Opcode },
9232 { Bad_Opcode },
c0f3af97 9233 /* 58 */
592d1631
L
9234 { Bad_Opcode },
9235 { Bad_Opcode },
9236 { Bad_Opcode },
9237 { Bad_Opcode },
592a252b
L
9238 { PREFIX_TABLE (PREFIX_VEX_0F3A5C) },
9239 { PREFIX_TABLE (PREFIX_VEX_0F3A5D) },
9240 { PREFIX_TABLE (PREFIX_VEX_0F3A5E) },
9241 { PREFIX_TABLE (PREFIX_VEX_0F3A5F) },
c0f3af97 9242 /* 60 */
592a252b
L
9243 { PREFIX_TABLE (PREFIX_VEX_0F3A60) },
9244 { PREFIX_TABLE (PREFIX_VEX_0F3A61) },
9245 { PREFIX_TABLE (PREFIX_VEX_0F3A62) },
9246 { PREFIX_TABLE (PREFIX_VEX_0F3A63) },
592d1631
L
9247 { Bad_Opcode },
9248 { Bad_Opcode },
9249 { Bad_Opcode },
9250 { Bad_Opcode },
c0f3af97 9251 /* 68 */
592a252b
L
9252 { PREFIX_TABLE (PREFIX_VEX_0F3A68) },
9253 { PREFIX_TABLE (PREFIX_VEX_0F3A69) },
9254 { PREFIX_TABLE (PREFIX_VEX_0F3A6A) },
9255 { PREFIX_TABLE (PREFIX_VEX_0F3A6B) },
9256 { PREFIX_TABLE (PREFIX_VEX_0F3A6C) },
9257 { PREFIX_TABLE (PREFIX_VEX_0F3A6D) },
9258 { PREFIX_TABLE (PREFIX_VEX_0F3A6E) },
9259 { PREFIX_TABLE (PREFIX_VEX_0F3A6F) },
c0f3af97 9260 /* 70 */
592d1631
L
9261 { Bad_Opcode },
9262 { Bad_Opcode },
9263 { Bad_Opcode },
9264 { Bad_Opcode },
9265 { Bad_Opcode },
9266 { Bad_Opcode },
9267 { Bad_Opcode },
9268 { Bad_Opcode },
c0f3af97 9269 /* 78 */
592a252b
L
9270 { PREFIX_TABLE (PREFIX_VEX_0F3A78) },
9271 { PREFIX_TABLE (PREFIX_VEX_0F3A79) },
9272 { PREFIX_TABLE (PREFIX_VEX_0F3A7A) },
9273 { PREFIX_TABLE (PREFIX_VEX_0F3A7B) },
9274 { PREFIX_TABLE (PREFIX_VEX_0F3A7C) },
9275 { PREFIX_TABLE (PREFIX_VEX_0F3A7D) },
9276 { PREFIX_TABLE (PREFIX_VEX_0F3A7E) },
9277 { PREFIX_TABLE (PREFIX_VEX_0F3A7F) },
c0f3af97 9278 /* 80 */
592d1631
L
9279 { Bad_Opcode },
9280 { Bad_Opcode },
9281 { Bad_Opcode },
9282 { Bad_Opcode },
9283 { Bad_Opcode },
9284 { Bad_Opcode },
9285 { Bad_Opcode },
9286 { Bad_Opcode },
c0f3af97 9287 /* 88 */
592d1631
L
9288 { Bad_Opcode },
9289 { Bad_Opcode },
9290 { Bad_Opcode },
9291 { Bad_Opcode },
9292 { Bad_Opcode },
9293 { Bad_Opcode },
9294 { Bad_Opcode },
9295 { Bad_Opcode },
c0f3af97 9296 /* 90 */
592d1631
L
9297 { Bad_Opcode },
9298 { Bad_Opcode },
9299 { Bad_Opcode },
9300 { Bad_Opcode },
9301 { Bad_Opcode },
9302 { Bad_Opcode },
9303 { Bad_Opcode },
9304 { Bad_Opcode },
c0f3af97 9305 /* 98 */
592d1631
L
9306 { Bad_Opcode },
9307 { Bad_Opcode },
9308 { Bad_Opcode },
9309 { Bad_Opcode },
9310 { Bad_Opcode },
9311 { Bad_Opcode },
9312 { Bad_Opcode },
9313 { Bad_Opcode },
c0f3af97 9314 /* a0 */
592d1631
L
9315 { Bad_Opcode },
9316 { Bad_Opcode },
9317 { Bad_Opcode },
9318 { Bad_Opcode },
9319 { Bad_Opcode },
9320 { Bad_Opcode },
9321 { Bad_Opcode },
9322 { Bad_Opcode },
c0f3af97 9323 /* a8 */
592d1631
L
9324 { Bad_Opcode },
9325 { Bad_Opcode },
9326 { Bad_Opcode },
9327 { Bad_Opcode },
9328 { Bad_Opcode },
9329 { Bad_Opcode },
9330 { Bad_Opcode },
9331 { Bad_Opcode },
c0f3af97 9332 /* b0 */
592d1631
L
9333 { Bad_Opcode },
9334 { Bad_Opcode },
9335 { Bad_Opcode },
9336 { Bad_Opcode },
9337 { Bad_Opcode },
9338 { Bad_Opcode },
9339 { Bad_Opcode },
9340 { Bad_Opcode },
c0f3af97 9341 /* b8 */
592d1631
L
9342 { Bad_Opcode },
9343 { Bad_Opcode },
9344 { Bad_Opcode },
9345 { Bad_Opcode },
9346 { Bad_Opcode },
9347 { Bad_Opcode },
9348 { Bad_Opcode },
9349 { Bad_Opcode },
c0f3af97 9350 /* c0 */
592d1631
L
9351 { Bad_Opcode },
9352 { Bad_Opcode },
9353 { Bad_Opcode },
9354 { Bad_Opcode },
9355 { Bad_Opcode },
9356 { Bad_Opcode },
9357 { Bad_Opcode },
9358 { Bad_Opcode },
c0f3af97 9359 /* c8 */
592d1631
L
9360 { Bad_Opcode },
9361 { Bad_Opcode },
9362 { Bad_Opcode },
9363 { Bad_Opcode },
9364 { Bad_Opcode },
9365 { Bad_Opcode },
9366 { Bad_Opcode },
9367 { Bad_Opcode },
c0f3af97 9368 /* d0 */
592d1631
L
9369 { Bad_Opcode },
9370 { Bad_Opcode },
9371 { Bad_Opcode },
9372 { Bad_Opcode },
9373 { Bad_Opcode },
9374 { Bad_Opcode },
9375 { Bad_Opcode },
9376 { Bad_Opcode },
c0f3af97 9377 /* d8 */
592d1631
L
9378 { Bad_Opcode },
9379 { Bad_Opcode },
9380 { Bad_Opcode },
9381 { Bad_Opcode },
9382 { Bad_Opcode },
9383 { Bad_Opcode },
9384 { Bad_Opcode },
592a252b 9385 { PREFIX_TABLE (PREFIX_VEX_0F3ADF) },
c0f3af97 9386 /* e0 */
592d1631
L
9387 { Bad_Opcode },
9388 { Bad_Opcode },
9389 { Bad_Opcode },
9390 { Bad_Opcode },
9391 { Bad_Opcode },
9392 { Bad_Opcode },
9393 { Bad_Opcode },
9394 { Bad_Opcode },
c0f3af97 9395 /* e8 */
592d1631
L
9396 { Bad_Opcode },
9397 { Bad_Opcode },
9398 { Bad_Opcode },
9399 { Bad_Opcode },
9400 { Bad_Opcode },
9401 { Bad_Opcode },
9402 { Bad_Opcode },
9403 { Bad_Opcode },
c0f3af97 9404 /* f0 */
6c30d220 9405 { PREFIX_TABLE (PREFIX_VEX_0F3AF0) },
592d1631
L
9406 { Bad_Opcode },
9407 { Bad_Opcode },
9408 { Bad_Opcode },
9409 { Bad_Opcode },
9410 { Bad_Opcode },
9411 { Bad_Opcode },
9412 { Bad_Opcode },
c0f3af97 9413 /* f8 */
592d1631
L
9414 { Bad_Opcode },
9415 { Bad_Opcode },
9416 { Bad_Opcode },
9417 { Bad_Opcode },
9418 { Bad_Opcode },
9419 { Bad_Opcode },
9420 { Bad_Opcode },
9421 { Bad_Opcode },
c0f3af97
L
9422 },
9423};
9424
43234a1e
L
9425#define NEED_OPCODE_TABLE
9426#include "i386-dis-evex.h"
9427#undef NEED_OPCODE_TABLE
c0f3af97 9428static const struct dis386 vex_len_table[][2] = {
592a252b 9429 /* VEX_LEN_0F10_P_1 */
c0f3af97 9430 {
592a252b
L
9431 { VEX_W_TABLE (VEX_W_0F10_P_1) },
9432 { VEX_W_TABLE (VEX_W_0F10_P_1) },
c0f3af97
L
9433 },
9434
592a252b 9435 /* VEX_LEN_0F10_P_3 */
c0f3af97 9436 {
592a252b
L
9437 { VEX_W_TABLE (VEX_W_0F10_P_3) },
9438 { VEX_W_TABLE (VEX_W_0F10_P_3) },
c0f3af97
L
9439 },
9440
592a252b 9441 /* VEX_LEN_0F11_P_1 */
c0f3af97 9442 {
592a252b
L
9443 { VEX_W_TABLE (VEX_W_0F11_P_1) },
9444 { VEX_W_TABLE (VEX_W_0F11_P_1) },
c0f3af97
L
9445 },
9446
592a252b 9447 /* VEX_LEN_0F11_P_3 */
c0f3af97 9448 {
592a252b
L
9449 { VEX_W_TABLE (VEX_W_0F11_P_3) },
9450 { VEX_W_TABLE (VEX_W_0F11_P_3) },
c0f3af97
L
9451 },
9452
592a252b 9453 /* VEX_LEN_0F12_P_0_M_0 */
c0f3af97 9454 {
592a252b 9455 { VEX_W_TABLE (VEX_W_0F12_P_0_M_0) },
c0f3af97
L
9456 },
9457
592a252b 9458 /* VEX_LEN_0F12_P_0_M_1 */
c0f3af97 9459 {
592a252b 9460 { VEX_W_TABLE (VEX_W_0F12_P_0_M_1) },
c0f3af97
L
9461 },
9462
592a252b 9463 /* VEX_LEN_0F12_P_2 */
c0f3af97 9464 {
592a252b 9465 { VEX_W_TABLE (VEX_W_0F12_P_2) },
c0f3af97
L
9466 },
9467
592a252b 9468 /* VEX_LEN_0F13_M_0 */
c0f3af97 9469 {
592a252b 9470 { VEX_W_TABLE (VEX_W_0F13_M_0) },
c0f3af97
L
9471 },
9472
592a252b 9473 /* VEX_LEN_0F16_P_0_M_0 */
c0f3af97 9474 {
592a252b 9475 { VEX_W_TABLE (VEX_W_0F16_P_0_M_0) },
c0f3af97
L
9476 },
9477
592a252b 9478 /* VEX_LEN_0F16_P_0_M_1 */
c0f3af97 9479 {
592a252b 9480 { VEX_W_TABLE (VEX_W_0F16_P_0_M_1) },
c0f3af97
L
9481 },
9482
592a252b 9483 /* VEX_LEN_0F16_P_2 */
c0f3af97 9484 {
592a252b 9485 { VEX_W_TABLE (VEX_W_0F16_P_2) },
c0f3af97
L
9486 },
9487
592a252b 9488 /* VEX_LEN_0F17_M_0 */
c0f3af97 9489 {
592a252b 9490 { VEX_W_TABLE (VEX_W_0F17_M_0) },
c0f3af97
L
9491 },
9492
592a252b 9493 /* VEX_LEN_0F2A_P_1 */
c0f3af97 9494 {
539f890d
L
9495 { "vcvtsi2ss%LQ", { XMScalar, VexScalar, Ev } },
9496 { "vcvtsi2ss%LQ", { XMScalar, VexScalar, Ev } },
c0f3af97
L
9497 },
9498
592a252b 9499 /* VEX_LEN_0F2A_P_3 */
c0f3af97 9500 {
539f890d
L
9501 { "vcvtsi2sd%LQ", { XMScalar, VexScalar, Ev } },
9502 { "vcvtsi2sd%LQ", { XMScalar, VexScalar, Ev } },
c0f3af97
L
9503 },
9504
592a252b 9505 /* VEX_LEN_0F2C_P_1 */
c0f3af97 9506 {
539f890d
L
9507 { "vcvttss2siY", { Gv, EXdScalar } },
9508 { "vcvttss2siY", { Gv, EXdScalar } },
c0f3af97
L
9509 },
9510
592a252b 9511 /* VEX_LEN_0F2C_P_3 */
c0f3af97 9512 {
539f890d
L
9513 { "vcvttsd2siY", { Gv, EXqScalar } },
9514 { "vcvttsd2siY", { Gv, EXqScalar } },
c0f3af97
L
9515 },
9516
592a252b 9517 /* VEX_LEN_0F2D_P_1 */
c0f3af97 9518 {
539f890d
L
9519 { "vcvtss2siY", { Gv, EXdScalar } },
9520 { "vcvtss2siY", { Gv, EXdScalar } },
c0f3af97
L
9521 },
9522
592a252b 9523 /* VEX_LEN_0F2D_P_3 */
c0f3af97 9524 {
539f890d
L
9525 { "vcvtsd2siY", { Gv, EXqScalar } },
9526 { "vcvtsd2siY", { Gv, EXqScalar } },
c0f3af97
L
9527 },
9528
592a252b 9529 /* VEX_LEN_0F2E_P_0 */
c0f3af97 9530 {
592a252b
L
9531 { VEX_W_TABLE (VEX_W_0F2E_P_0) },
9532 { VEX_W_TABLE (VEX_W_0F2E_P_0) },
c0f3af97
L
9533 },
9534
592a252b 9535 /* VEX_LEN_0F2E_P_2 */
c0f3af97 9536 {
592a252b
L
9537 { VEX_W_TABLE (VEX_W_0F2E_P_2) },
9538 { VEX_W_TABLE (VEX_W_0F2E_P_2) },
c0f3af97
L
9539 },
9540
592a252b 9541 /* VEX_LEN_0F2F_P_0 */
c0f3af97 9542 {
592a252b
L
9543 { VEX_W_TABLE (VEX_W_0F2F_P_0) },
9544 { VEX_W_TABLE (VEX_W_0F2F_P_0) },
c0f3af97
L
9545 },
9546
592a252b 9547 /* VEX_LEN_0F2F_P_2 */
c0f3af97 9548 {
592a252b
L
9549 { VEX_W_TABLE (VEX_W_0F2F_P_2) },
9550 { VEX_W_TABLE (VEX_W_0F2F_P_2) },
c0f3af97
L
9551 },
9552
43234a1e
L
9553 /* VEX_LEN_0F41_P_0 */
9554 {
9555 { Bad_Opcode },
9556 { VEX_W_TABLE (VEX_W_0F41_P_0_LEN_1) },
9557 },
1ba585e8
IT
9558 /* VEX_LEN_0F41_P_2 */
9559 {
9560 { Bad_Opcode },
9561 { VEX_W_TABLE (VEX_W_0F41_P_2_LEN_1) },
9562 },
43234a1e
L
9563 /* VEX_LEN_0F42_P_0 */
9564 {
9565 { Bad_Opcode },
9566 { VEX_W_TABLE (VEX_W_0F42_P_0_LEN_1) },
9567 },
1ba585e8
IT
9568 /* VEX_LEN_0F42_P_2 */
9569 {
9570 { Bad_Opcode },
9571 { VEX_W_TABLE (VEX_W_0F42_P_2_LEN_1) },
9572 },
43234a1e
L
9573 /* VEX_LEN_0F44_P_0 */
9574 {
9575 { VEX_W_TABLE (VEX_W_0F44_P_0_LEN_0) },
9576 },
1ba585e8
IT
9577 /* VEX_LEN_0F44_P_2 */
9578 {
9579 { VEX_W_TABLE (VEX_W_0F44_P_2_LEN_0) },
9580 },
43234a1e
L
9581 /* VEX_LEN_0F45_P_0 */
9582 {
9583 { Bad_Opcode },
9584 { VEX_W_TABLE (VEX_W_0F45_P_0_LEN_1) },
9585 },
1ba585e8
IT
9586 /* VEX_LEN_0F45_P_2 */
9587 {
9588 { Bad_Opcode },
9589 { VEX_W_TABLE (VEX_W_0F45_P_2_LEN_1) },
9590 },
43234a1e
L
9591 /* VEX_LEN_0F46_P_0 */
9592 {
9593 { Bad_Opcode },
9594 { VEX_W_TABLE (VEX_W_0F46_P_0_LEN_1) },
9595 },
1ba585e8
IT
9596 /* VEX_LEN_0F46_P_2 */
9597 {
9598 { Bad_Opcode },
9599 { VEX_W_TABLE (VEX_W_0F46_P_2_LEN_1) },
9600 },
43234a1e
L
9601 /* VEX_LEN_0F47_P_0 */
9602 {
9603 { Bad_Opcode },
9604 { VEX_W_TABLE (VEX_W_0F47_P_0_LEN_1) },
9605 },
1ba585e8
IT
9606 /* VEX_LEN_0F47_P_2 */
9607 {
9608 { Bad_Opcode },
9609 { VEX_W_TABLE (VEX_W_0F47_P_2_LEN_1) },
9610 },
9611 /* VEX_LEN_0F4A_P_0 */
9612 {
9613 { Bad_Opcode },
9614 { VEX_W_TABLE (VEX_W_0F4A_P_0_LEN_1) },
9615 },
9616 /* VEX_LEN_0F4A_P_2 */
9617 {
9618 { Bad_Opcode },
9619 { VEX_W_TABLE (VEX_W_0F4A_P_2_LEN_1) },
9620 },
9621 /* VEX_LEN_0F4B_P_0 */
9622 {
9623 { Bad_Opcode },
9624 { VEX_W_TABLE (VEX_W_0F4B_P_0_LEN_1) },
9625 },
43234a1e
L
9626 /* VEX_LEN_0F4B_P_2 */
9627 {
9628 { Bad_Opcode },
9629 { VEX_W_TABLE (VEX_W_0F4B_P_2_LEN_1) },
9630 },
9631
592a252b 9632 /* VEX_LEN_0F51_P_1 */
c0f3af97 9633 {
592a252b
L
9634 { VEX_W_TABLE (VEX_W_0F51_P_1) },
9635 { VEX_W_TABLE (VEX_W_0F51_P_1) },
c0f3af97
L
9636 },
9637
592a252b 9638 /* VEX_LEN_0F51_P_3 */
c0f3af97 9639 {
592a252b
L
9640 { VEX_W_TABLE (VEX_W_0F51_P_3) },
9641 { VEX_W_TABLE (VEX_W_0F51_P_3) },
c0f3af97
L
9642 },
9643
592a252b 9644 /* VEX_LEN_0F52_P_1 */
c0f3af97 9645 {
592a252b
L
9646 { VEX_W_TABLE (VEX_W_0F52_P_1) },
9647 { VEX_W_TABLE (VEX_W_0F52_P_1) },
c0f3af97
L
9648 },
9649
592a252b 9650 /* VEX_LEN_0F53_P_1 */
c0f3af97 9651 {
592a252b
L
9652 { VEX_W_TABLE (VEX_W_0F53_P_1) },
9653 { VEX_W_TABLE (VEX_W_0F53_P_1) },
c0f3af97
L
9654 },
9655
592a252b 9656 /* VEX_LEN_0F58_P_1 */
c0f3af97 9657 {
592a252b
L
9658 { VEX_W_TABLE (VEX_W_0F58_P_1) },
9659 { VEX_W_TABLE (VEX_W_0F58_P_1) },
c0f3af97
L
9660 },
9661
592a252b 9662 /* VEX_LEN_0F58_P_3 */
c0f3af97 9663 {
592a252b
L
9664 { VEX_W_TABLE (VEX_W_0F58_P_3) },
9665 { VEX_W_TABLE (VEX_W_0F58_P_3) },
c0f3af97
L
9666 },
9667
592a252b 9668 /* VEX_LEN_0F59_P_1 */
c0f3af97 9669 {
592a252b
L
9670 { VEX_W_TABLE (VEX_W_0F59_P_1) },
9671 { VEX_W_TABLE (VEX_W_0F59_P_1) },
c0f3af97
L
9672 },
9673
592a252b 9674 /* VEX_LEN_0F59_P_3 */
c0f3af97 9675 {
592a252b
L
9676 { VEX_W_TABLE (VEX_W_0F59_P_3) },
9677 { VEX_W_TABLE (VEX_W_0F59_P_3) },
c0f3af97
L
9678 },
9679
592a252b 9680 /* VEX_LEN_0F5A_P_1 */
c0f3af97 9681 {
592a252b
L
9682 { VEX_W_TABLE (VEX_W_0F5A_P_1) },
9683 { VEX_W_TABLE (VEX_W_0F5A_P_1) },
c0f3af97
L
9684 },
9685
592a252b 9686 /* VEX_LEN_0F5A_P_3 */
c0f3af97 9687 {
592a252b
L
9688 { VEX_W_TABLE (VEX_W_0F5A_P_3) },
9689 { VEX_W_TABLE (VEX_W_0F5A_P_3) },
c0f3af97
L
9690 },
9691
592a252b 9692 /* VEX_LEN_0F5C_P_1 */
c0f3af97 9693 {
592a252b
L
9694 { VEX_W_TABLE (VEX_W_0F5C_P_1) },
9695 { VEX_W_TABLE (VEX_W_0F5C_P_1) },
c0f3af97
L
9696 },
9697
592a252b 9698 /* VEX_LEN_0F5C_P_3 */
c0f3af97 9699 {
592a252b
L
9700 { VEX_W_TABLE (VEX_W_0F5C_P_3) },
9701 { VEX_W_TABLE (VEX_W_0F5C_P_3) },
c0f3af97
L
9702 },
9703
592a252b 9704 /* VEX_LEN_0F5D_P_1 */
c0f3af97 9705 {
592a252b
L
9706 { VEX_W_TABLE (VEX_W_0F5D_P_1) },
9707 { VEX_W_TABLE (VEX_W_0F5D_P_1) },
c0f3af97
L
9708 },
9709
592a252b 9710 /* VEX_LEN_0F5D_P_3 */
c0f3af97 9711 {
592a252b
L
9712 { VEX_W_TABLE (VEX_W_0F5D_P_3) },
9713 { VEX_W_TABLE (VEX_W_0F5D_P_3) },
c0f3af97
L
9714 },
9715
592a252b 9716 /* VEX_LEN_0F5E_P_1 */
c0f3af97 9717 {
592a252b
L
9718 { VEX_W_TABLE (VEX_W_0F5E_P_1) },
9719 { VEX_W_TABLE (VEX_W_0F5E_P_1) },
c0f3af97
L
9720 },
9721
592a252b 9722 /* VEX_LEN_0F5E_P_3 */
c0f3af97 9723 {
592a252b
L
9724 { VEX_W_TABLE (VEX_W_0F5E_P_3) },
9725 { VEX_W_TABLE (VEX_W_0F5E_P_3) },
c0f3af97
L
9726 },
9727
592a252b 9728 /* VEX_LEN_0F5F_P_1 */
c0f3af97 9729 {
592a252b
L
9730 { VEX_W_TABLE (VEX_W_0F5F_P_1) },
9731 { VEX_W_TABLE (VEX_W_0F5F_P_1) },
c0f3af97
L
9732 },
9733
592a252b 9734 /* VEX_LEN_0F5F_P_3 */
c0f3af97 9735 {
592a252b
L
9736 { VEX_W_TABLE (VEX_W_0F5F_P_3) },
9737 { VEX_W_TABLE (VEX_W_0F5F_P_3) },
c0f3af97
L
9738 },
9739
592a252b 9740 /* VEX_LEN_0F6E_P_2 */
c0f3af97 9741 {
539f890d
L
9742 { "vmovK", { XMScalar, Edq } },
9743 { "vmovK", { XMScalar, Edq } },
c0f3af97
L
9744 },
9745
592a252b 9746 /* VEX_LEN_0F7E_P_1 */
c0f3af97 9747 {
592a252b
L
9748 { VEX_W_TABLE (VEX_W_0F7E_P_1) },
9749 { VEX_W_TABLE (VEX_W_0F7E_P_1) },
c0f3af97
L
9750 },
9751
592a252b 9752 /* VEX_LEN_0F7E_P_2 */
c0f3af97 9753 {
539f890d 9754 { "vmovK", { Edq, XMScalar } },
6c30d220 9755 { "vmovK", { Edq, XMScalar } },
c0f3af97
L
9756 },
9757
43234a1e
L
9758 /* VEX_LEN_0F90_P_0 */
9759 {
9760 { VEX_W_TABLE (VEX_W_0F90_P_0_LEN_0) },
9761 },
9762
1ba585e8
IT
9763 /* VEX_LEN_0F90_P_2 */
9764 {
9765 { VEX_W_TABLE (VEX_W_0F90_P_2_LEN_0) },
9766 },
9767
43234a1e
L
9768 /* VEX_LEN_0F91_P_0 */
9769 {
9770 { VEX_W_TABLE (VEX_W_0F91_P_0_LEN_0) },
9771 },
9772
1ba585e8
IT
9773 /* VEX_LEN_0F91_P_2 */
9774 {
9775 { VEX_W_TABLE (VEX_W_0F91_P_2_LEN_0) },
9776 },
9777
43234a1e
L
9778 /* VEX_LEN_0F92_P_0 */
9779 {
9780 { VEX_W_TABLE (VEX_W_0F92_P_0_LEN_0) },
9781 },
9782
1ba585e8
IT
9783 /* VEX_LEN_0F92_P_3 */
9784 {
9785 { VEX_W_TABLE (VEX_W_0F92_P_3_LEN_0) },
9786 },
9787
43234a1e
L
9788 /* VEX_LEN_0F93_P_0 */
9789 {
9790 { VEX_W_TABLE (VEX_W_0F93_P_0_LEN_0) },
9791 },
9792
1ba585e8
IT
9793 /* VEX_LEN_0F93_P_3 */
9794 {
9795 { VEX_W_TABLE (VEX_W_0F93_P_3_LEN_0) },
9796 },
9797
43234a1e
L
9798 /* VEX_LEN_0F98_P_0 */
9799 {
9800 { VEX_W_TABLE (VEX_W_0F98_P_0_LEN_0) },
9801 },
9802
1ba585e8
IT
9803 /* VEX_LEN_0F98_P_2 */
9804 {
9805 { VEX_W_TABLE (VEX_W_0F98_P_2_LEN_0) },
9806 },
9807
9808 /* VEX_LEN_0F99_P_0 */
9809 {
9810 { VEX_W_TABLE (VEX_W_0F99_P_0_LEN_0) },
9811 },
9812
9813 /* VEX_LEN_0F99_P_2 */
9814 {
9815 { VEX_W_TABLE (VEX_W_0F99_P_2_LEN_0) },
9816 },
9817
6c30d220 9818 /* VEX_LEN_0FAE_R_2_M_0 */
c0f3af97 9819 {
6c30d220 9820 { VEX_W_TABLE (VEX_W_0FAE_R_2_M_0) },
c0f3af97
L
9821 },
9822
6c30d220 9823 /* VEX_LEN_0FAE_R_3_M_0 */
c0f3af97 9824 {
6c30d220 9825 { VEX_W_TABLE (VEX_W_0FAE_R_3_M_0) },
c0f3af97
L
9826 },
9827
6c30d220 9828 /* VEX_LEN_0FC2_P_1 */
c0f3af97 9829 {
6c30d220
L
9830 { VEX_W_TABLE (VEX_W_0FC2_P_1) },
9831 { VEX_W_TABLE (VEX_W_0FC2_P_1) },
c0f3af97
L
9832 },
9833
6c30d220 9834 /* VEX_LEN_0FC2_P_3 */
c0f3af97 9835 {
6c30d220
L
9836 { VEX_W_TABLE (VEX_W_0FC2_P_3) },
9837 { VEX_W_TABLE (VEX_W_0FC2_P_3) },
c0f3af97
L
9838 },
9839
6c30d220 9840 /* VEX_LEN_0FC4_P_2 */
c0f3af97 9841 {
6c30d220 9842 { VEX_W_TABLE (VEX_W_0FC4_P_2) },
c0f3af97
L
9843 },
9844
6c30d220 9845 /* VEX_LEN_0FC5_P_2 */
c0f3af97 9846 {
6c30d220 9847 { VEX_W_TABLE (VEX_W_0FC5_P_2) },
c0f3af97
L
9848 },
9849
6c30d220 9850 /* VEX_LEN_0FD6_P_2 */
c0f3af97 9851 {
6c30d220
L
9852 { VEX_W_TABLE (VEX_W_0FD6_P_2) },
9853 { VEX_W_TABLE (VEX_W_0FD6_P_2) },
c0f3af97
L
9854 },
9855
6c30d220 9856 /* VEX_LEN_0FF7_P_2 */
c0f3af97 9857 {
6c30d220 9858 { VEX_W_TABLE (VEX_W_0FF7_P_2) },
c0f3af97
L
9859 },
9860
6c30d220 9861 /* VEX_LEN_0F3816_P_2 */
c0f3af97 9862 {
6c30d220
L
9863 { Bad_Opcode },
9864 { VEX_W_TABLE (VEX_W_0F3816_P_2) },
c0f3af97
L
9865 },
9866
6c30d220 9867 /* VEX_LEN_0F3819_P_2 */
c0f3af97 9868 {
6c30d220
L
9869 { Bad_Opcode },
9870 { VEX_W_TABLE (VEX_W_0F3819_P_2) },
c0f3af97
L
9871 },
9872
6c30d220 9873 /* VEX_LEN_0F381A_P_2_M_0 */
c0f3af97 9874 {
6c30d220
L
9875 { Bad_Opcode },
9876 { VEX_W_TABLE (VEX_W_0F381A_P_2_M_0) },
c0f3af97
L
9877 },
9878
6c30d220 9879 /* VEX_LEN_0F3836_P_2 */
c0f3af97 9880 {
6c30d220
L
9881 { Bad_Opcode },
9882 { VEX_W_TABLE (VEX_W_0F3836_P_2) },
c0f3af97
L
9883 },
9884
592a252b 9885 /* VEX_LEN_0F3841_P_2 */
c0f3af97 9886 {
592a252b 9887 { VEX_W_TABLE (VEX_W_0F3841_P_2) },
c0f3af97
L
9888 },
9889
6c30d220
L
9890 /* VEX_LEN_0F385A_P_2_M_0 */
9891 {
9892 { Bad_Opcode },
9893 { VEX_W_TABLE (VEX_W_0F385A_P_2_M_0) },
9894 },
9895
592a252b 9896 /* VEX_LEN_0F38DB_P_2 */
a5ff0eb2 9897 {
592a252b 9898 { VEX_W_TABLE (VEX_W_0F38DB_P_2) },
a5ff0eb2
L
9899 },
9900
592a252b 9901 /* VEX_LEN_0F38DC_P_2 */
a5ff0eb2 9902 {
592a252b 9903 { VEX_W_TABLE (VEX_W_0F38DC_P_2) },
a5ff0eb2
L
9904 },
9905
592a252b 9906 /* VEX_LEN_0F38DD_P_2 */
a5ff0eb2 9907 {
592a252b 9908 { VEX_W_TABLE (VEX_W_0F38DD_P_2) },
a5ff0eb2
L
9909 },
9910
592a252b 9911 /* VEX_LEN_0F38DE_P_2 */
a5ff0eb2 9912 {
592a252b 9913 { VEX_W_TABLE (VEX_W_0F38DE_P_2) },
a5ff0eb2
L
9914 },
9915
592a252b 9916 /* VEX_LEN_0F38DF_P_2 */
a5ff0eb2 9917 {
592a252b 9918 { VEX_W_TABLE (VEX_W_0F38DF_P_2) },
a5ff0eb2
L
9919 },
9920
f12dc422
L
9921 /* VEX_LEN_0F38F2_P_0 */
9922 {
9923 { "andnS", { Gdq, VexGdq, Edq } },
9924 },
9925
9926 /* VEX_LEN_0F38F3_R_1_P_0 */
9927 {
9928 { "blsrS", { VexGdq, Edq } },
9929 },
9930
9931 /* VEX_LEN_0F38F3_R_2_P_0 */
9932 {
9933 { "blsmskS", { VexGdq, Edq } },
9934 },
9935
9936 /* VEX_LEN_0F38F3_R_3_P_0 */
9937 {
9938 { "blsiS", { VexGdq, Edq } },
9939 },
9940
6c30d220
L
9941 /* VEX_LEN_0F38F5_P_0 */
9942 {
9943 { "bzhiS", { Gdq, Edq, VexGdq } },
9944 },
9945
9946 /* VEX_LEN_0F38F5_P_1 */
9947 {
9948 { "pextS", { Gdq, VexGdq, Edq } },
9949 },
9950
9951 /* VEX_LEN_0F38F5_P_3 */
9952 {
9953 { "pdepS", { Gdq, VexGdq, Edq } },
9954 },
9955
9956 /* VEX_LEN_0F38F6_P_3 */
9957 {
9958 { "mulxS", { Gdq, VexGdq, Edq } },
9959 },
9960
f12dc422
L
9961 /* VEX_LEN_0F38F7_P_0 */
9962 {
9963 { "bextrS", { Gdq, Edq, VexGdq } },
9964 },
9965
6c30d220
L
9966 /* VEX_LEN_0F38F7_P_1 */
9967 {
9968 { "sarxS", { Gdq, Edq, VexGdq } },
9969 },
9970
9971 /* VEX_LEN_0F38F7_P_2 */
9972 {
9973 { "shlxS", { Gdq, Edq, VexGdq } },
9974 },
9975
9976 /* VEX_LEN_0F38F7_P_3 */
9977 {
9978 { "shrxS", { Gdq, Edq, VexGdq } },
9979 },
9980
9981 /* VEX_LEN_0F3A00_P_2 */
9982 {
9983 { Bad_Opcode },
9984 { VEX_W_TABLE (VEX_W_0F3A00_P_2) },
9985 },
9986
9987 /* VEX_LEN_0F3A01_P_2 */
9988 {
9989 { Bad_Opcode },
9990 { VEX_W_TABLE (VEX_W_0F3A01_P_2) },
9991 },
9992
592a252b 9993 /* VEX_LEN_0F3A06_P_2 */
c0f3af97 9994 {
592d1631 9995 { Bad_Opcode },
592a252b 9996 { VEX_W_TABLE (VEX_W_0F3A06_P_2) },
c0f3af97
L
9997 },
9998
592a252b 9999 /* VEX_LEN_0F3A0A_P_2 */
c0f3af97 10000 {
592a252b
L
10001 { VEX_W_TABLE (VEX_W_0F3A0A_P_2) },
10002 { VEX_W_TABLE (VEX_W_0F3A0A_P_2) },
c0f3af97
L
10003 },
10004
592a252b 10005 /* VEX_LEN_0F3A0B_P_2 */
c0f3af97 10006 {
592a252b
L
10007 { VEX_W_TABLE (VEX_W_0F3A0B_P_2) },
10008 { VEX_W_TABLE (VEX_W_0F3A0B_P_2) },
c0f3af97
L
10009 },
10010
592a252b 10011 /* VEX_LEN_0F3A14_P_2 */
c0f3af97 10012 {
592a252b 10013 { VEX_W_TABLE (VEX_W_0F3A14_P_2) },
c0f3af97
L
10014 },
10015
592a252b 10016 /* VEX_LEN_0F3A15_P_2 */
c0f3af97 10017 {
592a252b 10018 { VEX_W_TABLE (VEX_W_0F3A15_P_2) },
c0f3af97
L
10019 },
10020
592a252b 10021 /* VEX_LEN_0F3A16_P_2 */
c0f3af97
L
10022 {
10023 { "vpextrK", { Edq, XM, Ib } },
c0f3af97
L
10024 },
10025
592a252b 10026 /* VEX_LEN_0F3A17_P_2 */
c0f3af97
L
10027 {
10028 { "vextractps", { Edqd, XM, Ib } },
c0f3af97
L
10029 },
10030
592a252b 10031 /* VEX_LEN_0F3A18_P_2 */
c0f3af97 10032 {
592d1631 10033 { Bad_Opcode },
592a252b 10034 { VEX_W_TABLE (VEX_W_0F3A18_P_2) },
c0f3af97
L
10035 },
10036
592a252b 10037 /* VEX_LEN_0F3A19_P_2 */
c0f3af97 10038 {
592d1631 10039 { Bad_Opcode },
592a252b 10040 { VEX_W_TABLE (VEX_W_0F3A19_P_2) },
c0f3af97
L
10041 },
10042
592a252b 10043 /* VEX_LEN_0F3A20_P_2 */
c0f3af97 10044 {
592a252b 10045 { VEX_W_TABLE (VEX_W_0F3A20_P_2) },
c0f3af97
L
10046 },
10047
592a252b 10048 /* VEX_LEN_0F3A21_P_2 */
c0f3af97 10049 {
592a252b 10050 { VEX_W_TABLE (VEX_W_0F3A21_P_2) },
c0f3af97
L
10051 },
10052
592a252b 10053 /* VEX_LEN_0F3A22_P_2 */
c0f3af97
L
10054 {
10055 { "vpinsrK", { XM, Vex128, Edq, Ib } },
c0f3af97
L
10056 },
10057
43234a1e
L
10058 /* VEX_LEN_0F3A30_P_2 */
10059 {
10060 { VEX_W_TABLE (VEX_W_0F3A30_P_2_LEN_0) },
10061 },
10062
1ba585e8
IT
10063 /* VEX_LEN_0F3A31_P_2 */
10064 {
10065 { VEX_W_TABLE (VEX_W_0F3A31_P_2_LEN_0) },
10066 },
10067
43234a1e
L
10068 /* VEX_LEN_0F3A32_P_2 */
10069 {
10070 { VEX_W_TABLE (VEX_W_0F3A32_P_2_LEN_0) },
10071 },
10072
1ba585e8
IT
10073 /* VEX_LEN_0F3A33_P_2 */
10074 {
10075 { VEX_W_TABLE (VEX_W_0F3A33_P_2_LEN_0) },
10076 },
10077
6c30d220 10078 /* VEX_LEN_0F3A38_P_2 */
c0f3af97 10079 {
6c30d220
L
10080 { Bad_Opcode },
10081 { VEX_W_TABLE (VEX_W_0F3A38_P_2) },
c0f3af97
L
10082 },
10083
6c30d220 10084 /* VEX_LEN_0F3A39_P_2 */
c0f3af97 10085 {
6c30d220
L
10086 { Bad_Opcode },
10087 { VEX_W_TABLE (VEX_W_0F3A39_P_2) },
10088 },
10089
10090 /* VEX_LEN_0F3A41_P_2 */
10091 {
10092 { VEX_W_TABLE (VEX_W_0F3A41_P_2) },
c0f3af97
L
10093 },
10094
592a252b 10095 /* VEX_LEN_0F3A44_P_2 */
ce2f5b3c 10096 {
592a252b 10097 { VEX_W_TABLE (VEX_W_0F3A44_P_2) },
ce2f5b3c
L
10098 },
10099
6c30d220 10100 /* VEX_LEN_0F3A46_P_2 */
c0f3af97 10101 {
6c30d220
L
10102 { Bad_Opcode },
10103 { VEX_W_TABLE (VEX_W_0F3A46_P_2) },
c0f3af97
L
10104 },
10105
592a252b 10106 /* VEX_LEN_0F3A60_P_2 */
c0f3af97 10107 {
592a252b 10108 { VEX_W_TABLE (VEX_W_0F3A60_P_2) },
c0f3af97
L
10109 },
10110
592a252b 10111 /* VEX_LEN_0F3A61_P_2 */
c0f3af97 10112 {
592a252b 10113 { VEX_W_TABLE (VEX_W_0F3A61_P_2) },
c0f3af97
L
10114 },
10115
592a252b 10116 /* VEX_LEN_0F3A62_P_2 */
c0f3af97 10117 {
592a252b 10118 { VEX_W_TABLE (VEX_W_0F3A62_P_2) },
c0f3af97
L
10119 },
10120
592a252b 10121 /* VEX_LEN_0F3A63_P_2 */
c0f3af97 10122 {
592a252b 10123 { VEX_W_TABLE (VEX_W_0F3A63_P_2) },
c0f3af97
L
10124 },
10125
592a252b 10126 /* VEX_LEN_0F3A6A_P_2 */
922d8de8 10127 {
206c2556 10128 { "vfmaddss", { XMVexW, Vex128, EXdVexW, EXdVexW, VexI4 } },
922d8de8
DR
10129 },
10130
592a252b 10131 /* VEX_LEN_0F3A6B_P_2 */
922d8de8 10132 {
206c2556 10133 { "vfmaddsd", { XMVexW, Vex128, EXqVexW, EXqVexW, VexI4 } },
922d8de8
DR
10134 },
10135
592a252b 10136 /* VEX_LEN_0F3A6E_P_2 */
922d8de8 10137 {
206c2556 10138 { "vfmsubss", { XMVexW, Vex128, EXdVexW, EXdVexW, VexI4 } },
922d8de8
DR
10139 },
10140
592a252b 10141 /* VEX_LEN_0F3A6F_P_2 */
922d8de8 10142 {
206c2556 10143 { "vfmsubsd", { XMVexW, Vex128, EXqVexW, EXqVexW, VexI4 } },
922d8de8
DR
10144 },
10145
592a252b 10146 /* VEX_LEN_0F3A7A_P_2 */
922d8de8 10147 {
206c2556 10148 { "vfnmaddss", { XMVexW, Vex128, EXdVexW, EXdVexW, VexI4 } },
922d8de8
DR
10149 },
10150
592a252b 10151 /* VEX_LEN_0F3A7B_P_2 */
922d8de8 10152 {
206c2556 10153 { "vfnmaddsd", { XMVexW, Vex128, EXqVexW, EXqVexW, VexI4 } },
922d8de8
DR
10154 },
10155
592a252b 10156 /* VEX_LEN_0F3A7E_P_2 */
922d8de8 10157 {
206c2556 10158 { "vfnmsubss", { XMVexW, Vex128, EXdVexW, EXdVexW, VexI4 } },
922d8de8
DR
10159 },
10160
592a252b 10161 /* VEX_LEN_0F3A7F_P_2 */
922d8de8 10162 {
206c2556 10163 { "vfnmsubsd", { XMVexW, Vex128, EXqVexW, EXqVexW, VexI4 } },
922d8de8
DR
10164 },
10165
592a252b 10166 /* VEX_LEN_0F3ADF_P_2 */
a5ff0eb2 10167 {
592a252b 10168 { VEX_W_TABLE (VEX_W_0F3ADF_P_2) },
a5ff0eb2 10169 },
4c807e72 10170
6c30d220
L
10171 /* VEX_LEN_0F3AF0_P_3 */
10172 {
182ae480 10173 { "rorxS", { Gdq, Edq, Ib } },
6c30d220
L
10174 },
10175
ff688e1f
L
10176 /* VEX_LEN_0FXOP_08_CC */
10177 {
10178 { "vpcomb", { XM, Vex128, EXx, Ib } },
10179 },
10180
10181 /* VEX_LEN_0FXOP_08_CD */
10182 {
10183 { "vpcomw", { XM, Vex128, EXx, Ib } },
10184 },
10185
10186 /* VEX_LEN_0FXOP_08_CE */
10187 {
10188 { "vpcomd", { XM, Vex128, EXx, Ib } },
10189 },
10190
10191 /* VEX_LEN_0FXOP_08_CF */
10192 {
10193 { "vpcomq", { XM, Vex128, EXx, Ib } },
10194 },
10195
10196 /* VEX_LEN_0FXOP_08_EC */
10197 {
10198 { "vpcomub", { XM, Vex128, EXx, Ib } },
10199 },
10200
10201 /* VEX_LEN_0FXOP_08_ED */
10202 {
10203 { "vpcomuw", { XM, Vex128, EXx, Ib } },
10204 },
10205
10206 /* VEX_LEN_0FXOP_08_EE */
10207 {
10208 { "vpcomud", { XM, Vex128, EXx, Ib } },
10209 },
10210
10211 /* VEX_LEN_0FXOP_08_EF */
10212 {
10213 { "vpcomuq", { XM, Vex128, EXx, Ib } },
10214 },
10215
592a252b 10216 /* VEX_LEN_0FXOP_09_80 */
5dd85c99 10217 {
4c807e72
L
10218 { "vfrczps", { XM, EXxmm } },
10219 { "vfrczps", { XM, EXymmq } },
5dd85c99 10220 },
4c807e72 10221
592a252b 10222 /* VEX_LEN_0FXOP_09_81 */
5dd85c99 10223 {
4c807e72
L
10224 { "vfrczpd", { XM, EXxmm } },
10225 { "vfrczpd", { XM, EXymmq } },
5dd85c99 10226 },
331d2d0d
L
10227};
10228
9e30b8e0 10229static const struct dis386 vex_w_table[][2] = {
b844680a 10230 {
592a252b 10231 /* VEX_W_0F10_P_0 */
9e30b8e0 10232 { "vmovups", { XM, EXx } },
d8faab4e
L
10233 },
10234 {
592a252b 10235 /* VEX_W_0F10_P_1 */
539f890d 10236 { "vmovss", { XMVexScalar, VexScalar, EXdScalar } },
d8faab4e
L
10237 },
10238 {
592a252b 10239 /* VEX_W_0F10_P_2 */
9e30b8e0 10240 { "vmovupd", { XM, EXx } },
d8faab4e
L
10241 },
10242 {
592a252b 10243 /* VEX_W_0F10_P_3 */
539f890d 10244 { "vmovsd", { XMVexScalar, VexScalar, EXqScalar } },
d8faab4e
L
10245 },
10246 {
592a252b 10247 /* VEX_W_0F11_P_0 */
9e30b8e0 10248 { "vmovups", { EXxS, XM } },
d8faab4e
L
10249 },
10250 {
592a252b 10251 /* VEX_W_0F11_P_1 */
539f890d 10252 { "vmovss", { EXdVexScalarS, VexScalar, XMScalar } },
b844680a
L
10253 },
10254 {
592a252b 10255 /* VEX_W_0F11_P_2 */
9e30b8e0 10256 { "vmovupd", { EXxS, XM } },
b844680a
L
10257 },
10258 {
592a252b 10259 /* VEX_W_0F11_P_3 */
539f890d 10260 { "vmovsd", { EXqVexScalarS, VexScalar, XMScalar } },
d8faab4e
L
10261 },
10262 {
592a252b 10263 /* VEX_W_0F12_P_0_M_0 */
9e30b8e0 10264 { "vmovlps", { XM, Vex128, EXq } },
b844680a
L
10265 },
10266 {
592a252b 10267 /* VEX_W_0F12_P_0_M_1 */
9e30b8e0 10268 { "vmovhlps", { XM, Vex128, EXq } },
b844680a
L
10269 },
10270 {
592a252b 10271 /* VEX_W_0F12_P_1 */
9e30b8e0 10272 { "vmovsldup", { XM, EXx } },
b844680a
L
10273 },
10274 {
592a252b 10275 /* VEX_W_0F12_P_2 */
9e30b8e0 10276 { "vmovlpd", { XM, Vex128, EXq } },
b844680a
L
10277 },
10278 {
592a252b 10279 /* VEX_W_0F12_P_3 */
9e30b8e0 10280 { "vmovddup", { XM, EXymmq } },
b844680a
L
10281 },
10282 {
592a252b 10283 /* VEX_W_0F13_M_0 */
9e30b8e0 10284 { "vmovlpX", { EXq, XM } },
b844680a
L
10285 },
10286 {
592a252b 10287 /* VEX_W_0F14 */
9e30b8e0 10288 { "vunpcklpX", { XM, Vex, EXx } },
b844680a
L
10289 },
10290 {
592a252b 10291 /* VEX_W_0F15 */
9e30b8e0 10292 { "vunpckhpX", { XM, Vex, EXx } },
b844680a
L
10293 },
10294 {
592a252b 10295 /* VEX_W_0F16_P_0_M_0 */
9e30b8e0 10296 { "vmovhps", { XM, Vex128, EXq } },
9e30b8e0
L
10297 },
10298 {
592a252b 10299 /* VEX_W_0F16_P_0_M_1 */
9e30b8e0 10300 { "vmovlhps", { XM, Vex128, EXq } },
9e30b8e0
L
10301 },
10302 {
592a252b 10303 /* VEX_W_0F16_P_1 */
9e30b8e0 10304 { "vmovshdup", { XM, EXx } },
9e30b8e0
L
10305 },
10306 {
592a252b 10307 /* VEX_W_0F16_P_2 */
9e30b8e0 10308 { "vmovhpd", { XM, Vex128, EXq } },
9e30b8e0
L
10309 },
10310 {
592a252b 10311 /* VEX_W_0F17_M_0 */
9e30b8e0 10312 { "vmovhpX", { EXq, XM } },
9e30b8e0
L
10313 },
10314 {
592a252b 10315 /* VEX_W_0F28 */
9e30b8e0 10316 { "vmovapX", { XM, EXx } },
9e30b8e0
L
10317 },
10318 {
592a252b 10319 /* VEX_W_0F29 */
9e30b8e0 10320 { "vmovapX", { EXxS, XM } },
9e30b8e0
L
10321 },
10322 {
592a252b 10323 /* VEX_W_0F2B_M_0 */
9e30b8e0 10324 { "vmovntpX", { Mx, XM } },
9e30b8e0
L
10325 },
10326 {
592a252b 10327 /* VEX_W_0F2E_P_0 */
7bb15c6f 10328 { "vucomiss", { XMScalar, EXdScalar } },
9e30b8e0
L
10329 },
10330 {
592a252b 10331 /* VEX_W_0F2E_P_2 */
7bb15c6f 10332 { "vucomisd", { XMScalar, EXqScalar } },
9e30b8e0
L
10333 },
10334 {
592a252b 10335 /* VEX_W_0F2F_P_0 */
539f890d 10336 { "vcomiss", { XMScalar, EXdScalar } },
9e30b8e0
L
10337 },
10338 {
592a252b 10339 /* VEX_W_0F2F_P_2 */
539f890d 10340 { "vcomisd", { XMScalar, EXqScalar } },
9e30b8e0 10341 },
43234a1e
L
10342 {
10343 /* VEX_W_0F41_P_0_LEN_1 */
10344 { "kandw", { MaskG, MaskVex, MaskR } },
1ba585e8
IT
10345 { "kandq", { MaskG, MaskVex, MaskR } },
10346 },
10347 {
10348 /* VEX_W_0F41_P_2_LEN_1 */
10349 { Bad_Opcode },
10350 { "kandd", { MaskG, MaskVex, MaskR } },
43234a1e
L
10351 },
10352 {
10353 /* VEX_W_0F42_P_0_LEN_1 */
10354 { "kandnw", { MaskG, MaskVex, MaskR } },
1ba585e8
IT
10355 { "kandnq", { MaskG, MaskVex, MaskR } },
10356 },
10357 {
10358 /* VEX_W_0F42_P_2_LEN_1 */
10359 { Bad_Opcode },
10360 { "kandnd", { MaskG, MaskVex, MaskR } },
43234a1e
L
10361 },
10362 {
10363 /* VEX_W_0F44_P_0_LEN_0 */
10364 { "knotw", { MaskG, MaskR } },
1ba585e8
IT
10365 { "knotq", { MaskG, MaskR } },
10366 },
10367 {
10368 /* VEX_W_0F44_P_2_LEN_0 */
10369 { Bad_Opcode },
10370 { "knotd", { MaskG, MaskR } },
43234a1e
L
10371 },
10372 {
10373 /* VEX_W_0F45_P_0_LEN_1 */
10374 { "korw", { MaskG, MaskVex, MaskR } },
1ba585e8
IT
10375 { "korq", { MaskG, MaskVex, MaskR } },
10376 },
10377 {
10378 /* VEX_W_0F45_P_2_LEN_1 */
10379 { Bad_Opcode },
10380 { "kord", { MaskG, MaskVex, MaskR } },
43234a1e
L
10381 },
10382 {
10383 /* VEX_W_0F46_P_0_LEN_1 */
10384 { "kxnorw", { MaskG, MaskVex, MaskR } },
1ba585e8
IT
10385 { "kxnorq", { MaskG, MaskVex, MaskR } },
10386 },
10387 {
10388 /* VEX_W_0F46_P_2_LEN_1 */
10389 { Bad_Opcode },
10390 { "kxnord", { MaskG, MaskVex, MaskR } },
43234a1e
L
10391 },
10392 {
10393 /* VEX_W_0F47_P_0_LEN_1 */
10394 { "kxorw", { MaskG, MaskVex, MaskR } },
1ba585e8
IT
10395 { "kxorq", { MaskG, MaskVex, MaskR } },
10396 },
10397 {
10398 /* VEX_W_0F47_P_2_LEN_1 */
10399 { Bad_Opcode },
10400 { "kxord", { MaskG, MaskVex, MaskR } },
10401 },
10402 {
10403 /* VEX_W_0F4A_P_0_LEN_1 */
10404 { "kaddw", { MaskG, MaskVex, MaskR } },
10405 { "kaddq", { MaskG, MaskVex, MaskR } },
10406 },
10407 {
10408 /* VEX_W_0F4A_P_2_LEN_1 */
10409 { Bad_Opcode },
10410 { "kaddd", { MaskG, MaskVex, MaskR } },
10411 },
10412 {
10413 /* VEX_W_0F4B_P_0_LEN_1 */
10414 { "kunpckwd", { MaskG, MaskVex, MaskR } },
10415 { "kunpckdq", { MaskG, MaskVex, MaskR } },
43234a1e
L
10416 },
10417 {
10418 /* VEX_W_0F4B_P_2_LEN_1 */
10419 { "kunpckbw", { MaskG, MaskVex, MaskR } },
10420 },
9e30b8e0 10421 {
592a252b 10422 /* VEX_W_0F50_M_0 */
9e30b8e0 10423 { "vmovmskpX", { Gdq, XS } },
9e30b8e0
L
10424 },
10425 {
592a252b 10426 /* VEX_W_0F51_P_0 */
9e30b8e0 10427 { "vsqrtps", { XM, EXx } },
9e30b8e0
L
10428 },
10429 {
592a252b 10430 /* VEX_W_0F51_P_1 */
539f890d 10431 { "vsqrtss", { XMScalar, VexScalar, EXdScalar } },
9e30b8e0
L
10432 },
10433 {
592a252b 10434 /* VEX_W_0F51_P_2 */
9e30b8e0 10435 { "vsqrtpd", { XM, EXx } },
9e30b8e0
L
10436 },
10437 {
592a252b 10438 /* VEX_W_0F51_P_3 */
539f890d 10439 { "vsqrtsd", { XMScalar, VexScalar, EXqScalar } },
9e30b8e0
L
10440 },
10441 {
592a252b 10442 /* VEX_W_0F52_P_0 */
9e30b8e0 10443 { "vrsqrtps", { XM, EXx } },
9e30b8e0
L
10444 },
10445 {
592a252b 10446 /* VEX_W_0F52_P_1 */
539f890d 10447 { "vrsqrtss", { XMScalar, VexScalar, EXdScalar } },
9e30b8e0
L
10448 },
10449 {
592a252b 10450 /* VEX_W_0F53_P_0 */
9e30b8e0 10451 { "vrcpps", { XM, EXx } },
9e30b8e0
L
10452 },
10453 {
592a252b 10454 /* VEX_W_0F53_P_1 */
539f890d 10455 { "vrcpss", { XMScalar, VexScalar, EXdScalar } },
9e30b8e0
L
10456 },
10457 {
592a252b 10458 /* VEX_W_0F58_P_0 */
9e30b8e0 10459 { "vaddps", { XM, Vex, EXx } },
9e30b8e0
L
10460 },
10461 {
592a252b 10462 /* VEX_W_0F58_P_1 */
539f890d 10463 { "vaddss", { XMScalar, VexScalar, EXdScalar } },
9e30b8e0
L
10464 },
10465 {
592a252b 10466 /* VEX_W_0F58_P_2 */
9e30b8e0 10467 { "vaddpd", { XM, Vex, EXx } },
9e30b8e0
L
10468 },
10469 {
592a252b 10470 /* VEX_W_0F58_P_3 */
539f890d 10471 { "vaddsd", { XMScalar, VexScalar, EXqScalar } },
9e30b8e0
L
10472 },
10473 {
592a252b 10474 /* VEX_W_0F59_P_0 */
9e30b8e0 10475 { "vmulps", { XM, Vex, EXx } },
9e30b8e0
L
10476 },
10477 {
592a252b 10478 /* VEX_W_0F59_P_1 */
539f890d 10479 { "vmulss", { XMScalar, VexScalar, EXdScalar } },
9e30b8e0
L
10480 },
10481 {
592a252b 10482 /* VEX_W_0F59_P_2 */
9e30b8e0 10483 { "vmulpd", { XM, Vex, EXx } },
9e30b8e0
L
10484 },
10485 {
592a252b 10486 /* VEX_W_0F59_P_3 */
539f890d 10487 { "vmulsd", { XMScalar, VexScalar, EXqScalar } },
9e30b8e0
L
10488 },
10489 {
592a252b 10490 /* VEX_W_0F5A_P_0 */
9e30b8e0 10491 { "vcvtps2pd", { XM, EXxmmq } },
9e30b8e0
L
10492 },
10493 {
592a252b 10494 /* VEX_W_0F5A_P_1 */
539f890d 10495 { "vcvtss2sd", { XMScalar, VexScalar, EXdScalar } },
9e30b8e0
L
10496 },
10497 {
592a252b 10498 /* VEX_W_0F5A_P_3 */
539f890d 10499 { "vcvtsd2ss", { XMScalar, VexScalar, EXqScalar } },
9e30b8e0
L
10500 },
10501 {
592a252b 10502 /* VEX_W_0F5B_P_0 */
9e30b8e0 10503 { "vcvtdq2ps", { XM, EXx } },
9e30b8e0
L
10504 },
10505 {
592a252b 10506 /* VEX_W_0F5B_P_1 */
9e30b8e0 10507 { "vcvttps2dq", { XM, EXx } },
9e30b8e0
L
10508 },
10509 {
592a252b 10510 /* VEX_W_0F5B_P_2 */
9e30b8e0 10511 { "vcvtps2dq", { XM, EXx } },
9e30b8e0
L
10512 },
10513 {
592a252b 10514 /* VEX_W_0F5C_P_0 */
9e30b8e0 10515 { "vsubps", { XM, Vex, EXx } },
9e30b8e0
L
10516 },
10517 {
592a252b 10518 /* VEX_W_0F5C_P_1 */
539f890d 10519 { "vsubss", { XMScalar, VexScalar, EXdScalar } },
9e30b8e0
L
10520 },
10521 {
592a252b 10522 /* VEX_W_0F5C_P_2 */
9e30b8e0 10523 { "vsubpd", { XM, Vex, EXx } },
9e30b8e0
L
10524 },
10525 {
592a252b 10526 /* VEX_W_0F5C_P_3 */
539f890d 10527 { "vsubsd", { XMScalar, VexScalar, EXqScalar } },
9e30b8e0
L
10528 },
10529 {
592a252b 10530 /* VEX_W_0F5D_P_0 */
9e30b8e0 10531 { "vminps", { XM, Vex, EXx } },
9e30b8e0
L
10532 },
10533 {
592a252b 10534 /* VEX_W_0F5D_P_1 */
539f890d 10535 { "vminss", { XMScalar, VexScalar, EXdScalar } },
9e30b8e0
L
10536 },
10537 {
592a252b 10538 /* VEX_W_0F5D_P_2 */
9e30b8e0 10539 { "vminpd", { XM, Vex, EXx } },
9e30b8e0
L
10540 },
10541 {
592a252b 10542 /* VEX_W_0F5D_P_3 */
539f890d 10543 { "vminsd", { XMScalar, VexScalar, EXqScalar } },
9e30b8e0
L
10544 },
10545 {
592a252b 10546 /* VEX_W_0F5E_P_0 */
9e30b8e0 10547 { "vdivps", { XM, Vex, EXx } },
9e30b8e0
L
10548 },
10549 {
592a252b 10550 /* VEX_W_0F5E_P_1 */
539f890d 10551 { "vdivss", { XMScalar, VexScalar, EXdScalar } },
9e30b8e0
L
10552 },
10553 {
592a252b 10554 /* VEX_W_0F5E_P_2 */
9e30b8e0 10555 { "vdivpd", { XM, Vex, EXx } },
9e30b8e0
L
10556 },
10557 {
592a252b 10558 /* VEX_W_0F5E_P_3 */
539f890d 10559 { "vdivsd", { XMScalar, VexScalar, EXqScalar } },
9e30b8e0
L
10560 },
10561 {
592a252b 10562 /* VEX_W_0F5F_P_0 */
9e30b8e0 10563 { "vmaxps", { XM, Vex, EXx } },
9e30b8e0
L
10564 },
10565 {
592a252b 10566 /* VEX_W_0F5F_P_1 */
539f890d 10567 { "vmaxss", { XMScalar, VexScalar, EXdScalar } },
9e30b8e0
L
10568 },
10569 {
592a252b 10570 /* VEX_W_0F5F_P_2 */
9e30b8e0 10571 { "vmaxpd", { XM, Vex, EXx } },
9e30b8e0
L
10572 },
10573 {
592a252b 10574 /* VEX_W_0F5F_P_3 */
539f890d 10575 { "vmaxsd", { XMScalar, VexScalar, EXqScalar } },
9e30b8e0
L
10576 },
10577 {
592a252b 10578 /* VEX_W_0F60_P_2 */
6c30d220 10579 { "vpunpcklbw", { XM, Vex, EXx } },
9e30b8e0
L
10580 },
10581 {
592a252b 10582 /* VEX_W_0F61_P_2 */
6c30d220 10583 { "vpunpcklwd", { XM, Vex, EXx } },
9e30b8e0
L
10584 },
10585 {
592a252b 10586 /* VEX_W_0F62_P_2 */
6c30d220 10587 { "vpunpckldq", { XM, Vex, EXx } },
9e30b8e0
L
10588 },
10589 {
592a252b 10590 /* VEX_W_0F63_P_2 */
6c30d220 10591 { "vpacksswb", { XM, Vex, EXx } },
9e30b8e0
L
10592 },
10593 {
592a252b 10594 /* VEX_W_0F64_P_2 */
6c30d220 10595 { "vpcmpgtb", { XM, Vex, EXx } },
9e30b8e0
L
10596 },
10597 {
592a252b 10598 /* VEX_W_0F65_P_2 */
6c30d220 10599 { "vpcmpgtw", { XM, Vex, EXx } },
9e30b8e0
L
10600 },
10601 {
592a252b 10602 /* VEX_W_0F66_P_2 */
6c30d220 10603 { "vpcmpgtd", { XM, Vex, EXx } },
9e30b8e0
L
10604 },
10605 {
592a252b 10606 /* VEX_W_0F67_P_2 */
6c30d220 10607 { "vpackuswb", { XM, Vex, EXx } },
9e30b8e0
L
10608 },
10609 {
592a252b 10610 /* VEX_W_0F68_P_2 */
6c30d220 10611 { "vpunpckhbw", { XM, Vex, EXx } },
9e30b8e0
L
10612 },
10613 {
592a252b 10614 /* VEX_W_0F69_P_2 */
6c30d220 10615 { "vpunpckhwd", { XM, Vex, EXx } },
9e30b8e0
L
10616 },
10617 {
592a252b 10618 /* VEX_W_0F6A_P_2 */
6c30d220 10619 { "vpunpckhdq", { XM, Vex, EXx } },
9e30b8e0
L
10620 },
10621 {
592a252b 10622 /* VEX_W_0F6B_P_2 */
6c30d220 10623 { "vpackssdw", { XM, Vex, EXx } },
9e30b8e0
L
10624 },
10625 {
592a252b 10626 /* VEX_W_0F6C_P_2 */
6c30d220 10627 { "vpunpcklqdq", { XM, Vex, EXx } },
9e30b8e0
L
10628 },
10629 {
592a252b 10630 /* VEX_W_0F6D_P_2 */
6c30d220 10631 { "vpunpckhqdq", { XM, Vex, EXx } },
9e30b8e0
L
10632 },
10633 {
592a252b 10634 /* VEX_W_0F6F_P_1 */
efdb52b7 10635 { "vmovdqu", { XM, EXx } },
9e30b8e0
L
10636 },
10637 {
592a252b 10638 /* VEX_W_0F6F_P_2 */
efdb52b7 10639 { "vmovdqa", { XM, EXx } },
9e30b8e0
L
10640 },
10641 {
592a252b 10642 /* VEX_W_0F70_P_1 */
9e30b8e0 10643 { "vpshufhw", { XM, EXx, Ib } },
9e30b8e0
L
10644 },
10645 {
592a252b 10646 /* VEX_W_0F70_P_2 */
9e30b8e0 10647 { "vpshufd", { XM, EXx, Ib } },
9e30b8e0
L
10648 },
10649 {
592a252b 10650 /* VEX_W_0F70_P_3 */
9e30b8e0 10651 { "vpshuflw", { XM, EXx, Ib } },
9e30b8e0
L
10652 },
10653 {
592a252b 10654 /* VEX_W_0F71_R_2_P_2 */
6c30d220 10655 { "vpsrlw", { Vex, XS, Ib } },
9e30b8e0
L
10656 },
10657 {
592a252b 10658 /* VEX_W_0F71_R_4_P_2 */
6c30d220 10659 { "vpsraw", { Vex, XS, Ib } },
9e30b8e0
L
10660 },
10661 {
592a252b 10662 /* VEX_W_0F71_R_6_P_2 */
6c30d220 10663 { "vpsllw", { Vex, XS, Ib } },
9e30b8e0
L
10664 },
10665 {
592a252b 10666 /* VEX_W_0F72_R_2_P_2 */
6c30d220 10667 { "vpsrld", { Vex, XS, Ib } },
9e30b8e0
L
10668 },
10669 {
592a252b 10670 /* VEX_W_0F72_R_4_P_2 */
6c30d220 10671 { "vpsrad", { Vex, XS, Ib } },
9e30b8e0
L
10672 },
10673 {
592a252b 10674 /* VEX_W_0F72_R_6_P_2 */
6c30d220 10675 { "vpslld", { Vex, XS, Ib } },
9e30b8e0
L
10676 },
10677 {
592a252b 10678 /* VEX_W_0F73_R_2_P_2 */
6c30d220 10679 { "vpsrlq", { Vex, XS, Ib } },
9e30b8e0
L
10680 },
10681 {
592a252b 10682 /* VEX_W_0F73_R_3_P_2 */
6c30d220 10683 { "vpsrldq", { Vex, XS, Ib } },
9e30b8e0
L
10684 },
10685 {
592a252b 10686 /* VEX_W_0F73_R_6_P_2 */
6c30d220 10687 { "vpsllq", { Vex, XS, Ib } },
9e30b8e0
L
10688 },
10689 {
592a252b 10690 /* VEX_W_0F73_R_7_P_2 */
6c30d220 10691 { "vpslldq", { Vex, XS, Ib } },
9e30b8e0
L
10692 },
10693 {
592a252b 10694 /* VEX_W_0F74_P_2 */
6c30d220 10695 { "vpcmpeqb", { XM, Vex, EXx } },
9e30b8e0
L
10696 },
10697 {
592a252b 10698 /* VEX_W_0F75_P_2 */
6c30d220 10699 { "vpcmpeqw", { XM, Vex, EXx } },
9e30b8e0
L
10700 },
10701 {
592a252b 10702 /* VEX_W_0F76_P_2 */
6c30d220 10703 { "vpcmpeqd", { XM, Vex, EXx } },
9e30b8e0
L
10704 },
10705 {
592a252b 10706 /* VEX_W_0F77_P_0 */
9e30b8e0 10707 { "", { VZERO } },
9e30b8e0
L
10708 },
10709 {
592a252b 10710 /* VEX_W_0F7C_P_2 */
9e30b8e0 10711 { "vhaddpd", { XM, Vex, EXx } },
9e30b8e0
L
10712 },
10713 {
592a252b 10714 /* VEX_W_0F7C_P_3 */
9e30b8e0 10715 { "vhaddps", { XM, Vex, EXx } },
9e30b8e0
L
10716 },
10717 {
592a252b 10718 /* VEX_W_0F7D_P_2 */
9e30b8e0 10719 { "vhsubpd", { XM, Vex, EXx } },
9e30b8e0
L
10720 },
10721 {
592a252b 10722 /* VEX_W_0F7D_P_3 */
9e30b8e0 10723 { "vhsubps", { XM, Vex, EXx } },
9e30b8e0
L
10724 },
10725 {
592a252b 10726 /* VEX_W_0F7E_P_1 */
539f890d 10727 { "vmovq", { XMScalar, EXqScalar } },
9e30b8e0
L
10728 },
10729 {
592a252b 10730 /* VEX_W_0F7F_P_1 */
9e30b8e0 10731 { "vmovdqu", { EXxS, XM } },
9e30b8e0
L
10732 },
10733 {
592a252b 10734 /* VEX_W_0F7F_P_2 */
9e30b8e0 10735 { "vmovdqa", { EXxS, XM } },
9e30b8e0 10736 },
43234a1e
L
10737 {
10738 /* VEX_W_0F90_P_0_LEN_0 */
10739 { "kmovw", { MaskG, MaskE } },
1ba585e8
IT
10740 { "kmovq", { MaskG, MaskE } },
10741 },
10742 {
10743 /* VEX_W_0F90_P_2_LEN_0 */
10744 { Bad_Opcode },
10745 { "kmovd", { MaskG, MaskBDE } },
43234a1e
L
10746 },
10747 {
10748 /* VEX_W_0F91_P_0_LEN_0 */
10749 { "kmovw", { Ew, MaskG } },
1ba585e8
IT
10750 { "kmovq", { Eq, MaskG } },
10751 },
10752 {
10753 /* VEX_W_0F91_P_2_LEN_0 */
10754 { Bad_Opcode },
10755 { "kmovd", { Ed, MaskG } },
43234a1e
L
10756 },
10757 {
10758 /* VEX_W_0F92_P_0_LEN_0 */
10759 { "kmovw", { MaskG, Rdq } },
10760 },
1ba585e8
IT
10761 {
10762 /* VEX_W_0F92_P_3_LEN_0 */
10763 { "kmovd", { MaskG, Rdq } },
10764 { "kmovq", { MaskG, Rdq } },
10765 },
43234a1e
L
10766 {
10767 /* VEX_W_0F93_P_0_LEN_0 */
10768 { "kmovw", { Gdq, MaskR } },
10769 },
1ba585e8
IT
10770 {
10771 /* VEX_W_0F93_P_3_LEN_0 */
10772 { "kmovd", { Gdq, MaskR } },
10773 { "kmovq", { Gdq, MaskR } },
10774 },
43234a1e
L
10775 {
10776 /* VEX_W_0F98_P_0_LEN_0 */
10777 { "kortestw", { MaskG, MaskR } },
1ba585e8
IT
10778 { "kortestq", { MaskG, MaskR } },
10779 },
10780 {
10781 /* VEX_W_0F98_P_2_LEN_0 */
10782 { "kortestb", { MaskG, MaskR } },
10783 { "kortestd", { MaskG, MaskR } },
10784 },
10785 {
10786 /* VEX_W_0F99_P_0_LEN_0 */
10787 { "ktestw", { MaskG, MaskR } },
10788 { "ktestq", { MaskG, MaskR } },
10789 },
10790 {
10791 /* VEX_W_0F99_P_2_LEN_0 */
10792 { Bad_Opcode },
10793 { "ktestd", { MaskG, MaskR } },
43234a1e 10794 },
9e30b8e0 10795 {
592a252b 10796 /* VEX_W_0FAE_R_2_M_0 */
9e30b8e0 10797 { "vldmxcsr", { Md } },
9e30b8e0
L
10798 },
10799 {
592a252b 10800 /* VEX_W_0FAE_R_3_M_0 */
9e30b8e0 10801 { "vstmxcsr", { Md } },
9e30b8e0
L
10802 },
10803 {
592a252b 10804 /* VEX_W_0FC2_P_0 */
9e30b8e0 10805 { "vcmpps", { XM, Vex, EXx, VCMP } },
9e30b8e0
L
10806 },
10807 {
592a252b 10808 /* VEX_W_0FC2_P_1 */
539f890d 10809 { "vcmpss", { XMScalar, VexScalar, EXdScalar, VCMP } },
9e30b8e0
L
10810 },
10811 {
592a252b 10812 /* VEX_W_0FC2_P_2 */
9e30b8e0 10813 { "vcmppd", { XM, Vex, EXx, VCMP } },
9e30b8e0
L
10814 },
10815 {
592a252b 10816 /* VEX_W_0FC2_P_3 */
539f890d 10817 { "vcmpsd", { XMScalar, VexScalar, EXqScalar, VCMP } },
9e30b8e0
L
10818 },
10819 {
592a252b 10820 /* VEX_W_0FC4_P_2 */
9e30b8e0 10821 { "vpinsrw", { XM, Vex128, Edqw, Ib } },
9e30b8e0
L
10822 },
10823 {
592a252b 10824 /* VEX_W_0FC5_P_2 */
9e30b8e0 10825 { "vpextrw", { Gdq, XS, Ib } },
9e30b8e0
L
10826 },
10827 {
592a252b 10828 /* VEX_W_0FD0_P_2 */
9e30b8e0 10829 { "vaddsubpd", { XM, Vex, EXx } },
9e30b8e0
L
10830 },
10831 {
592a252b 10832 /* VEX_W_0FD0_P_3 */
9e30b8e0 10833 { "vaddsubps", { XM, Vex, EXx } },
9e30b8e0
L
10834 },
10835 {
592a252b 10836 /* VEX_W_0FD1_P_2 */
6c30d220 10837 { "vpsrlw", { XM, Vex, EXxmm } },
9e30b8e0
L
10838 },
10839 {
592a252b 10840 /* VEX_W_0FD2_P_2 */
6c30d220 10841 { "vpsrld", { XM, Vex, EXxmm } },
9e30b8e0
L
10842 },
10843 {
592a252b 10844 /* VEX_W_0FD3_P_2 */
6c30d220 10845 { "vpsrlq", { XM, Vex, EXxmm } },
9e30b8e0
L
10846 },
10847 {
592a252b 10848 /* VEX_W_0FD4_P_2 */
6c30d220 10849 { "vpaddq", { XM, Vex, EXx } },
9e30b8e0
L
10850 },
10851 {
592a252b 10852 /* VEX_W_0FD5_P_2 */
6c30d220 10853 { "vpmullw", { XM, Vex, EXx } },
9e30b8e0
L
10854 },
10855 {
592a252b 10856 /* VEX_W_0FD6_P_2 */
539f890d 10857 { "vmovq", { EXqScalarS, XMScalar } },
9e30b8e0
L
10858 },
10859 {
592a252b 10860 /* VEX_W_0FD7_P_2_M_1 */
9e30b8e0 10861 { "vpmovmskb", { Gdq, XS } },
9e30b8e0
L
10862 },
10863 {
592a252b 10864 /* VEX_W_0FD8_P_2 */
6c30d220 10865 { "vpsubusb", { XM, Vex, EXx } },
9e30b8e0
L
10866 },
10867 {
592a252b 10868 /* VEX_W_0FD9_P_2 */
6c30d220 10869 { "vpsubusw", { XM, Vex, EXx } },
9e30b8e0
L
10870 },
10871 {
592a252b 10872 /* VEX_W_0FDA_P_2 */
6c30d220 10873 { "vpminub", { XM, Vex, EXx } },
9e30b8e0
L
10874 },
10875 {
592a252b 10876 /* VEX_W_0FDB_P_2 */
6c30d220 10877 { "vpand", { XM, Vex, EXx } },
9e30b8e0
L
10878 },
10879 {
592a252b 10880 /* VEX_W_0FDC_P_2 */
6c30d220 10881 { "vpaddusb", { XM, Vex, EXx } },
9e30b8e0
L
10882 },
10883 {
592a252b 10884 /* VEX_W_0FDD_P_2 */
6c30d220 10885 { "vpaddusw", { XM, Vex, EXx } },
9e30b8e0
L
10886 },
10887 {
592a252b 10888 /* VEX_W_0FDE_P_2 */
6c30d220 10889 { "vpmaxub", { XM, Vex, EXx } },
9e30b8e0
L
10890 },
10891 {
592a252b 10892 /* VEX_W_0FDF_P_2 */
6c30d220 10893 { "vpandn", { XM, Vex, EXx } },
9e30b8e0
L
10894 },
10895 {
592a252b 10896 /* VEX_W_0FE0_P_2 */
6c30d220 10897 { "vpavgb", { XM, Vex, EXx } },
9e30b8e0
L
10898 },
10899 {
592a252b 10900 /* VEX_W_0FE1_P_2 */
6c30d220 10901 { "vpsraw", { XM, Vex, EXxmm } },
9e30b8e0
L
10902 },
10903 {
592a252b 10904 /* VEX_W_0FE2_P_2 */
6c30d220 10905 { "vpsrad", { XM, Vex, EXxmm } },
9e30b8e0
L
10906 },
10907 {
592a252b 10908 /* VEX_W_0FE3_P_2 */
6c30d220 10909 { "vpavgw", { XM, Vex, EXx } },
9e30b8e0
L
10910 },
10911 {
592a252b 10912 /* VEX_W_0FE4_P_2 */
6c30d220 10913 { "vpmulhuw", { XM, Vex, EXx } },
9e30b8e0
L
10914 },
10915 {
592a252b 10916 /* VEX_W_0FE5_P_2 */
6c30d220 10917 { "vpmulhw", { XM, Vex, EXx } },
9e30b8e0
L
10918 },
10919 {
592a252b 10920 /* VEX_W_0FE6_P_1 */
efdb52b7 10921 { "vcvtdq2pd", { XM, EXxmmq } },
9e30b8e0
L
10922 },
10923 {
592a252b 10924 /* VEX_W_0FE6_P_2 */
a179a9fd 10925 { "vcvttpd2dq%XY", { XMM, EXx } },
9e30b8e0
L
10926 },
10927 {
592a252b 10928 /* VEX_W_0FE6_P_3 */
a179a9fd 10929 { "vcvtpd2dq%XY", { XMM, EXx } },
9e30b8e0
L
10930 },
10931 {
592a252b 10932 /* VEX_W_0FE7_P_2_M_0 */
9e30b8e0 10933 { "vmovntdq", { Mx, XM } },
9e30b8e0
L
10934 },
10935 {
592a252b 10936 /* VEX_W_0FE8_P_2 */
6c30d220 10937 { "vpsubsb", { XM, Vex, EXx } },
9e30b8e0
L
10938 },
10939 {
592a252b 10940 /* VEX_W_0FE9_P_2 */
6c30d220 10941 { "vpsubsw", { XM, Vex, EXx } },
9e30b8e0
L
10942 },
10943 {
592a252b 10944 /* VEX_W_0FEA_P_2 */
6c30d220 10945 { "vpminsw", { XM, Vex, EXx } },
9e30b8e0
L
10946 },
10947 {
592a252b 10948 /* VEX_W_0FEB_P_2 */
6c30d220 10949 { "vpor", { XM, Vex, EXx } },
9e30b8e0
L
10950 },
10951 {
592a252b 10952 /* VEX_W_0FEC_P_2 */
6c30d220 10953 { "vpaddsb", { XM, Vex, EXx } },
9e30b8e0
L
10954 },
10955 {
592a252b 10956 /* VEX_W_0FED_P_2 */
6c30d220 10957 { "vpaddsw", { XM, Vex, EXx } },
9e30b8e0
L
10958 },
10959 {
592a252b 10960 /* VEX_W_0FEE_P_2 */
6c30d220 10961 { "vpmaxsw", { XM, Vex, EXx } },
9e30b8e0
L
10962 },
10963 {
592a252b 10964 /* VEX_W_0FEF_P_2 */
6c30d220 10965 { "vpxor", { XM, Vex, EXx } },
9e30b8e0
L
10966 },
10967 {
592a252b 10968 /* VEX_W_0FF0_P_3_M_0 */
9e30b8e0 10969 { "vlddqu", { XM, M } },
9e30b8e0
L
10970 },
10971 {
592a252b 10972 /* VEX_W_0FF1_P_2 */
6c30d220 10973 { "vpsllw", { XM, Vex, EXxmm } },
9e30b8e0
L
10974 },
10975 {
592a252b 10976 /* VEX_W_0FF2_P_2 */
6c30d220 10977 { "vpslld", { XM, Vex, EXxmm } },
9e30b8e0
L
10978 },
10979 {
592a252b 10980 /* VEX_W_0FF3_P_2 */
6c30d220 10981 { "vpsllq", { XM, Vex, EXxmm } },
9e30b8e0
L
10982 },
10983 {
592a252b 10984 /* VEX_W_0FF4_P_2 */
6c30d220 10985 { "vpmuludq", { XM, Vex, EXx } },
9e30b8e0
L
10986 },
10987 {
592a252b 10988 /* VEX_W_0FF5_P_2 */
6c30d220 10989 { "vpmaddwd", { XM, Vex, EXx } },
9e30b8e0
L
10990 },
10991 {
592a252b 10992 /* VEX_W_0FF6_P_2 */
6c30d220 10993 { "vpsadbw", { XM, Vex, EXx } },
9e30b8e0
L
10994 },
10995 {
592a252b 10996 /* VEX_W_0FF7_P_2 */
9e30b8e0 10997 { "vmaskmovdqu", { XM, XS } },
9e30b8e0
L
10998 },
10999 {
592a252b 11000 /* VEX_W_0FF8_P_2 */
6c30d220 11001 { "vpsubb", { XM, Vex, EXx } },
9e30b8e0
L
11002 },
11003 {
592a252b 11004 /* VEX_W_0FF9_P_2 */
6c30d220 11005 { "vpsubw", { XM, Vex, EXx } },
9e30b8e0
L
11006 },
11007 {
592a252b 11008 /* VEX_W_0FFA_P_2 */
6c30d220 11009 { "vpsubd", { XM, Vex, EXx } },
9e30b8e0
L
11010 },
11011 {
592a252b 11012 /* VEX_W_0FFB_P_2 */
6c30d220 11013 { "vpsubq", { XM, Vex, EXx } },
9e30b8e0
L
11014 },
11015 {
592a252b 11016 /* VEX_W_0FFC_P_2 */
6c30d220 11017 { "vpaddb", { XM, Vex, EXx } },
9e30b8e0
L
11018 },
11019 {
592a252b 11020 /* VEX_W_0FFD_P_2 */
6c30d220 11021 { "vpaddw", { XM, Vex, EXx } },
9e30b8e0
L
11022 },
11023 {
592a252b 11024 /* VEX_W_0FFE_P_2 */
6c30d220 11025 { "vpaddd", { XM, Vex, EXx } },
9e30b8e0
L
11026 },
11027 {
592a252b 11028 /* VEX_W_0F3800_P_2 */
6c30d220 11029 { "vpshufb", { XM, Vex, EXx } },
9e30b8e0
L
11030 },
11031 {
592a252b 11032 /* VEX_W_0F3801_P_2 */
6c30d220 11033 { "vphaddw", { XM, Vex, EXx } },
9e30b8e0
L
11034 },
11035 {
592a252b 11036 /* VEX_W_0F3802_P_2 */
6c30d220 11037 { "vphaddd", { XM, Vex, EXx } },
9e30b8e0
L
11038 },
11039 {
592a252b 11040 /* VEX_W_0F3803_P_2 */
6c30d220 11041 { "vphaddsw", { XM, Vex, EXx } },
9e30b8e0
L
11042 },
11043 {
592a252b 11044 /* VEX_W_0F3804_P_2 */
6c30d220 11045 { "vpmaddubsw", { XM, Vex, EXx } },
9e30b8e0
L
11046 },
11047 {
592a252b 11048 /* VEX_W_0F3805_P_2 */
6c30d220 11049 { "vphsubw", { XM, Vex, EXx } },
9e30b8e0
L
11050 },
11051 {
592a252b 11052 /* VEX_W_0F3806_P_2 */
6c30d220 11053 { "vphsubd", { XM, Vex, EXx } },
9e30b8e0
L
11054 },
11055 {
592a252b 11056 /* VEX_W_0F3807_P_2 */
6c30d220 11057 { "vphsubsw", { XM, Vex, EXx } },
9e30b8e0
L
11058 },
11059 {
592a252b 11060 /* VEX_W_0F3808_P_2 */
6c30d220 11061 { "vpsignb", { XM, Vex, EXx } },
9e30b8e0
L
11062 },
11063 {
592a252b 11064 /* VEX_W_0F3809_P_2 */
6c30d220 11065 { "vpsignw", { XM, Vex, EXx } },
9e30b8e0
L
11066 },
11067 {
592a252b 11068 /* VEX_W_0F380A_P_2 */
6c30d220 11069 { "vpsignd", { XM, Vex, EXx } },
9e30b8e0
L
11070 },
11071 {
592a252b 11072 /* VEX_W_0F380B_P_2 */
6c30d220 11073 { "vpmulhrsw", { XM, Vex, EXx } },
9e30b8e0
L
11074 },
11075 {
592a252b 11076 /* VEX_W_0F380C_P_2 */
9e30b8e0 11077 { "vpermilps", { XM, Vex, EXx } },
9e30b8e0
L
11078 },
11079 {
592a252b 11080 /* VEX_W_0F380D_P_2 */
9e30b8e0 11081 { "vpermilpd", { XM, Vex, EXx } },
9e30b8e0
L
11082 },
11083 {
592a252b 11084 /* VEX_W_0F380E_P_2 */
9e30b8e0 11085 { "vtestps", { XM, EXx } },
9e30b8e0
L
11086 },
11087 {
592a252b 11088 /* VEX_W_0F380F_P_2 */
9e30b8e0 11089 { "vtestpd", { XM, EXx } },
9e30b8e0 11090 },
6c30d220
L
11091 {
11092 /* VEX_W_0F3816_P_2 */
11093 { "vpermps", { XM, Vex, EXx } },
11094 },
9e30b8e0 11095 {
592a252b 11096 /* VEX_W_0F3817_P_2 */
9e30b8e0 11097 { "vptest", { XM, EXx } },
9e30b8e0 11098 },
bcf2684f 11099 {
6c30d220
L
11100 /* VEX_W_0F3818_P_2 */
11101 { "vbroadcastss", { XM, EXxmm_md } },
bcf2684f 11102 },
9e30b8e0 11103 {
6c30d220
L
11104 /* VEX_W_0F3819_P_2 */
11105 { "vbroadcastsd", { XM, EXxmm_mq } },
9e30b8e0
L
11106 },
11107 {
592a252b 11108 /* VEX_W_0F381A_P_2_M_0 */
9e30b8e0 11109 { "vbroadcastf128", { XM, Mxmm } },
9e30b8e0
L
11110 },
11111 {
592a252b 11112 /* VEX_W_0F381C_P_2 */
9e30b8e0 11113 { "vpabsb", { XM, EXx } },
9e30b8e0
L
11114 },
11115 {
592a252b 11116 /* VEX_W_0F381D_P_2 */
9e30b8e0 11117 { "vpabsw", { XM, EXx } },
9e30b8e0
L
11118 },
11119 {
592a252b 11120 /* VEX_W_0F381E_P_2 */
9e30b8e0 11121 { "vpabsd", { XM, EXx } },
9e30b8e0
L
11122 },
11123 {
592a252b 11124 /* VEX_W_0F3820_P_2 */
6c30d220 11125 { "vpmovsxbw", { XM, EXxmmq } },
9e30b8e0
L
11126 },
11127 {
592a252b 11128 /* VEX_W_0F3821_P_2 */
6c30d220 11129 { "vpmovsxbd", { XM, EXxmmqd } },
9e30b8e0
L
11130 },
11131 {
592a252b 11132 /* VEX_W_0F3822_P_2 */
6c30d220 11133 { "vpmovsxbq", { XM, EXxmmdw } },
9e30b8e0
L
11134 },
11135 {
592a252b 11136 /* VEX_W_0F3823_P_2 */
6c30d220 11137 { "vpmovsxwd", { XM, EXxmmq } },
9e30b8e0
L
11138 },
11139 {
592a252b 11140 /* VEX_W_0F3824_P_2 */
6c30d220 11141 { "vpmovsxwq", { XM, EXxmmqd } },
9e30b8e0
L
11142 },
11143 {
592a252b 11144 /* VEX_W_0F3825_P_2 */
6c30d220 11145 { "vpmovsxdq", { XM, EXxmmq } },
9e30b8e0
L
11146 },
11147 {
592a252b 11148 /* VEX_W_0F3828_P_2 */
6c30d220 11149 { "vpmuldq", { XM, Vex, EXx } },
9e30b8e0
L
11150 },
11151 {
592a252b 11152 /* VEX_W_0F3829_P_2 */
6c30d220 11153 { "vpcmpeqq", { XM, Vex, EXx } },
9e30b8e0
L
11154 },
11155 {
592a252b 11156 /* VEX_W_0F382A_P_2_M_0 */
9e30b8e0 11157 { "vmovntdqa", { XM, Mx } },
9e30b8e0
L
11158 },
11159 {
592a252b 11160 /* VEX_W_0F382B_P_2 */
6c30d220 11161 { "vpackusdw", { XM, Vex, EXx } },
9e30b8e0 11162 },
53aa04a0 11163 {
592a252b 11164 /* VEX_W_0F382C_P_2_M_0 */
53aa04a0 11165 { "vmaskmovps", { XM, Vex, Mx } },
53aa04a0
L
11166 },
11167 {
592a252b 11168 /* VEX_W_0F382D_P_2_M_0 */
53aa04a0 11169 { "vmaskmovpd", { XM, Vex, Mx } },
53aa04a0
L
11170 },
11171 {
592a252b 11172 /* VEX_W_0F382E_P_2_M_0 */
53aa04a0 11173 { "vmaskmovps", { Mx, Vex, XM } },
53aa04a0
L
11174 },
11175 {
592a252b 11176 /* VEX_W_0F382F_P_2_M_0 */
53aa04a0 11177 { "vmaskmovpd", { Mx, Vex, XM } },
53aa04a0 11178 },
9e30b8e0 11179 {
592a252b 11180 /* VEX_W_0F3830_P_2 */
6c30d220 11181 { "vpmovzxbw", { XM, EXxmmq } },
9e30b8e0
L
11182 },
11183 {
592a252b 11184 /* VEX_W_0F3831_P_2 */
6c30d220 11185 { "vpmovzxbd", { XM, EXxmmqd } },
9e30b8e0
L
11186 },
11187 {
592a252b 11188 /* VEX_W_0F3832_P_2 */
6c30d220 11189 { "vpmovzxbq", { XM, EXxmmdw } },
9e30b8e0
L
11190 },
11191 {
592a252b 11192 /* VEX_W_0F3833_P_2 */
6c30d220 11193 { "vpmovzxwd", { XM, EXxmmq } },
9e30b8e0
L
11194 },
11195 {
592a252b 11196 /* VEX_W_0F3834_P_2 */
6c30d220 11197 { "vpmovzxwq", { XM, EXxmmqd } },
9e30b8e0
L
11198 },
11199 {
592a252b 11200 /* VEX_W_0F3835_P_2 */
6c30d220
L
11201 { "vpmovzxdq", { XM, EXxmmq } },
11202 },
11203 {
11204 /* VEX_W_0F3836_P_2 */
11205 { "vpermd", { XM, Vex, EXx } },
9e30b8e0
L
11206 },
11207 {
592a252b 11208 /* VEX_W_0F3837_P_2 */
6c30d220 11209 { "vpcmpgtq", { XM, Vex, EXx } },
9e30b8e0
L
11210 },
11211 {
592a252b 11212 /* VEX_W_0F3838_P_2 */
6c30d220 11213 { "vpminsb", { XM, Vex, EXx } },
9e30b8e0
L
11214 },
11215 {
592a252b 11216 /* VEX_W_0F3839_P_2 */
6c30d220 11217 { "vpminsd", { XM, Vex, EXx } },
9e30b8e0
L
11218 },
11219 {
592a252b 11220 /* VEX_W_0F383A_P_2 */
6c30d220 11221 { "vpminuw", { XM, Vex, EXx } },
9e30b8e0
L
11222 },
11223 {
592a252b 11224 /* VEX_W_0F383B_P_2 */
6c30d220 11225 { "vpminud", { XM, Vex, EXx } },
9e30b8e0
L
11226 },
11227 {
592a252b 11228 /* VEX_W_0F383C_P_2 */
6c30d220 11229 { "vpmaxsb", { XM, Vex, EXx } },
9e30b8e0
L
11230 },
11231 {
592a252b 11232 /* VEX_W_0F383D_P_2 */
6c30d220 11233 { "vpmaxsd", { XM, Vex, EXx } },
9e30b8e0
L
11234 },
11235 {
592a252b 11236 /* VEX_W_0F383E_P_2 */
6c30d220 11237 { "vpmaxuw", { XM, Vex, EXx } },
9e30b8e0
L
11238 },
11239 {
592a252b 11240 /* VEX_W_0F383F_P_2 */
6c30d220 11241 { "vpmaxud", { XM, Vex, EXx } },
9e30b8e0
L
11242 },
11243 {
592a252b 11244 /* VEX_W_0F3840_P_2 */
6c30d220 11245 { "vpmulld", { XM, Vex, EXx } },
9e30b8e0
L
11246 },
11247 {
592a252b 11248 /* VEX_W_0F3841_P_2 */
9e30b8e0 11249 { "vphminposuw", { XM, EXx } },
9e30b8e0 11250 },
6c30d220
L
11251 {
11252 /* VEX_W_0F3846_P_2 */
11253 { "vpsravd", { XM, Vex, EXx } },
11254 },
11255 {
11256 /* VEX_W_0F3858_P_2 */
11257 { "vpbroadcastd", { XM, EXxmm_md } },
11258 },
11259 {
11260 /* VEX_W_0F3859_P_2 */
11261 { "vpbroadcastq", { XM, EXxmm_mq } },
11262 },
11263 {
11264 /* VEX_W_0F385A_P_2_M_0 */
11265 { "vbroadcasti128", { XM, Mxmm } },
11266 },
11267 {
11268 /* VEX_W_0F3878_P_2 */
11269 { "vpbroadcastb", { XM, EXxmm_mb } },
11270 },
11271 {
11272 /* VEX_W_0F3879_P_2 */
11273 { "vpbroadcastw", { XM, EXxmm_mw } },
11274 },
9e30b8e0 11275 {
592a252b 11276 /* VEX_W_0F38DB_P_2 */
9e30b8e0 11277 { "vaesimc", { XM, EXx } },
9e30b8e0
L
11278 },
11279 {
592a252b 11280 /* VEX_W_0F38DC_P_2 */
9e30b8e0 11281 { "vaesenc", { XM, Vex128, EXx } },
9e30b8e0
L
11282 },
11283 {
592a252b 11284 /* VEX_W_0F38DD_P_2 */
9e30b8e0 11285 { "vaesenclast", { XM, Vex128, EXx } },
9e30b8e0
L
11286 },
11287 {
592a252b 11288 /* VEX_W_0F38DE_P_2 */
9e30b8e0 11289 { "vaesdec", { XM, Vex128, EXx } },
9e30b8e0
L
11290 },
11291 {
592a252b 11292 /* VEX_W_0F38DF_P_2 */
9e30b8e0 11293 { "vaesdeclast", { XM, Vex128, EXx } },
9e30b8e0 11294 },
6c30d220
L
11295 {
11296 /* VEX_W_0F3A00_P_2 */
11297 { Bad_Opcode },
11298 { "vpermq", { XM, EXx, Ib } },
11299 },
11300 {
11301 /* VEX_W_0F3A01_P_2 */
11302 { Bad_Opcode },
11303 { "vpermpd", { XM, EXx, Ib } },
11304 },
11305 {
11306 /* VEX_W_0F3A02_P_2 */
11307 { "vpblendd", { XM, Vex, EXx, Ib } },
11308 },
9e30b8e0 11309 {
592a252b 11310 /* VEX_W_0F3A04_P_2 */
9e30b8e0 11311 { "vpermilps", { XM, EXx, Ib } },
9e30b8e0
L
11312 },
11313 {
592a252b 11314 /* VEX_W_0F3A05_P_2 */
9e30b8e0 11315 { "vpermilpd", { XM, EXx, Ib } },
9e30b8e0
L
11316 },
11317 {
592a252b 11318 /* VEX_W_0F3A06_P_2 */
9e30b8e0 11319 { "vperm2f128", { XM, Vex256, EXx, Ib } },
9e30b8e0
L
11320 },
11321 {
592a252b 11322 /* VEX_W_0F3A08_P_2 */
9e30b8e0 11323 { "vroundps", { XM, EXx, Ib } },
9e30b8e0
L
11324 },
11325 {
592a252b 11326 /* VEX_W_0F3A09_P_2 */
9e30b8e0 11327 { "vroundpd", { XM, EXx, Ib } },
9e30b8e0
L
11328 },
11329 {
592a252b 11330 /* VEX_W_0F3A0A_P_2 */
539f890d 11331 { "vroundss", { XMScalar, VexScalar, EXdScalar, Ib } },
9e30b8e0
L
11332 },
11333 {
592a252b 11334 /* VEX_W_0F3A0B_P_2 */
539f890d 11335 { "vroundsd", { XMScalar, VexScalar, EXqScalar, Ib } },
9e30b8e0
L
11336 },
11337 {
592a252b 11338 /* VEX_W_0F3A0C_P_2 */
9e30b8e0 11339 { "vblendps", { XM, Vex, EXx, Ib } },
9e30b8e0
L
11340 },
11341 {
592a252b 11342 /* VEX_W_0F3A0D_P_2 */
9e30b8e0 11343 { "vblendpd", { XM, Vex, EXx, Ib } },
9e30b8e0
L
11344 },
11345 {
592a252b 11346 /* VEX_W_0F3A0E_P_2 */
6c30d220 11347 { "vpblendw", { XM, Vex, EXx, Ib } },
9e30b8e0
L
11348 },
11349 {
592a252b 11350 /* VEX_W_0F3A0F_P_2 */
6c30d220 11351 { "vpalignr", { XM, Vex, EXx, Ib } },
9e30b8e0
L
11352 },
11353 {
592a252b 11354 /* VEX_W_0F3A14_P_2 */
9e30b8e0 11355 { "vpextrb", { Edqb, XM, Ib } },
9e30b8e0
L
11356 },
11357 {
592a252b 11358 /* VEX_W_0F3A15_P_2 */
9e30b8e0 11359 { "vpextrw", { Edqw, XM, Ib } },
9e30b8e0
L
11360 },
11361 {
592a252b 11362 /* VEX_W_0F3A18_P_2 */
9e30b8e0 11363 { "vinsertf128", { XM, Vex256, EXxmm, Ib } },
9e30b8e0
L
11364 },
11365 {
592a252b 11366 /* VEX_W_0F3A19_P_2 */
9e30b8e0 11367 { "vextractf128", { EXxmm, XM, Ib } },
9e30b8e0
L
11368 },
11369 {
592a252b 11370 /* VEX_W_0F3A20_P_2 */
9e30b8e0 11371 { "vpinsrb", { XM, Vex128, Edqb, Ib } },
9e30b8e0
L
11372 },
11373 {
592a252b 11374 /* VEX_W_0F3A21_P_2 */
9e30b8e0 11375 { "vinsertps", { XM, Vex128, EXd, Ib } },
9e30b8e0 11376 },
43234a1e 11377 {
1ba585e8 11378 /* VEX_W_0F3A30_P_2_LEN_0 */
43234a1e
L
11379 { Bad_Opcode },
11380 { "kshiftrw", { MaskG, MaskR, Ib } },
11381 },
11382 {
1ba585e8
IT
11383 /* VEX_W_0F3A31_P_2_LEN_0 */
11384 { "kshiftrd", { MaskG, MaskR, Ib } },
11385 { "kshiftrq", { MaskG, MaskR, Ib } },
11386 },
11387 {
11388 /* VEX_W_0F3A32_P_2_LEN_0 */
43234a1e
L
11389 { Bad_Opcode },
11390 { "kshiftlw", { MaskG, MaskR, Ib } },
11391 },
1ba585e8
IT
11392 {
11393 /* VEX_W_0F3A33_P_2_LEN_0 */
11394 { "kshiftld", { MaskG, MaskR, Ib } },
11395 { "kshiftlq", { MaskG, MaskR, Ib } },
11396 },
6c30d220
L
11397 {
11398 /* VEX_W_0F3A38_P_2 */
11399 { "vinserti128", { XM, Vex256, EXxmm, Ib } },
11400 },
11401 {
11402 /* VEX_W_0F3A39_P_2 */
11403 { "vextracti128", { EXxmm, XM, Ib } },
11404 },
9e30b8e0 11405 {
592a252b 11406 /* VEX_W_0F3A40_P_2 */
9e30b8e0 11407 { "vdpps", { XM, Vex, EXx, Ib } },
9e30b8e0
L
11408 },
11409 {
592a252b 11410 /* VEX_W_0F3A41_P_2 */
9e30b8e0 11411 { "vdppd", { XM, Vex128, EXx, Ib } },
9e30b8e0
L
11412 },
11413 {
592a252b 11414 /* VEX_W_0F3A42_P_2 */
6c30d220 11415 { "vmpsadbw", { XM, Vex, EXx, Ib } },
9e30b8e0
L
11416 },
11417 {
592a252b 11418 /* VEX_W_0F3A44_P_2 */
9e30b8e0 11419 { "vpclmulqdq", { XM, Vex128, EXx, PCLMUL } },
9e30b8e0 11420 },
6c30d220
L
11421 {
11422 /* VEX_W_0F3A46_P_2 */
11423 { "vperm2i128", { XM, Vex256, EXx, Ib } },
11424 },
a683cc34 11425 {
592a252b 11426 /* VEX_W_0F3A48_P_2 */
a683cc34
SP
11427 { "vpermil2ps", { XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW } },
11428 { "vpermil2ps", { XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW } },
11429 },
11430 {
592a252b 11431 /* VEX_W_0F3A49_P_2 */
a683cc34
SP
11432 { "vpermil2pd", { XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW } },
11433 { "vpermil2pd", { XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW } },
11434 },
9e30b8e0 11435 {
592a252b 11436 /* VEX_W_0F3A4A_P_2 */
9e30b8e0 11437 { "vblendvps", { XM, Vex, EXx, XMVexI4 } },
9e30b8e0
L
11438 },
11439 {
592a252b 11440 /* VEX_W_0F3A4B_P_2 */
9e30b8e0 11441 { "vblendvpd", { XM, Vex, EXx, XMVexI4 } },
9e30b8e0
L
11442 },
11443 {
592a252b 11444 /* VEX_W_0F3A4C_P_2 */
6c30d220 11445 { "vpblendvb", { XM, Vex, EXx, XMVexI4 } },
9e30b8e0
L
11446 },
11447 {
592a252b 11448 /* VEX_W_0F3A60_P_2 */
9e30b8e0 11449 { "vpcmpestrm", { XM, EXx, Ib } },
9e30b8e0
L
11450 },
11451 {
592a252b 11452 /* VEX_W_0F3A61_P_2 */
9e30b8e0 11453 { "vpcmpestri", { XM, EXx, Ib } },
9e30b8e0
L
11454 },
11455 {
592a252b 11456 /* VEX_W_0F3A62_P_2 */
9e30b8e0 11457 { "vpcmpistrm", { XM, EXx, Ib } },
9e30b8e0
L
11458 },
11459 {
592a252b 11460 /* VEX_W_0F3A63_P_2 */
9e30b8e0 11461 { "vpcmpistri", { XM, EXx, Ib } },
9e30b8e0
L
11462 },
11463 {
592a252b 11464 /* VEX_W_0F3ADF_P_2 */
9e30b8e0 11465 { "vaeskeygenassist", { XM, EXx, Ib } },
9e30b8e0 11466 },
43234a1e
L
11467#define NEED_VEX_W_TABLE
11468#include "i386-dis-evex.h"
11469#undef NEED_VEX_W_TABLE
9e30b8e0
L
11470};
11471
11472static const struct dis386 mod_table[][2] = {
11473 {
11474 /* MOD_8D */
11475 { "leaS", { Gv, M } },
9e30b8e0 11476 },
42164a71
L
11477 {
11478 /* MOD_C6_REG_7 */
11479 { Bad_Opcode },
11480 { RM_TABLE (RM_C6_REG_7) },
11481 },
11482 {
11483 /* MOD_C7_REG_7 */
11484 { Bad_Opcode },
11485 { RM_TABLE (RM_C7_REG_7) },
11486 },
4a357820
MZ
11487 {
11488 /* MOD_FF_REG_3 */
11489 { "Jcall{T|}", { indirEp } },
11490 },
11491 {
11492 /* MOD_FF_REG_5 */
11493 { "Jjmp{T|}", { indirEp } },
11494 },
9e30b8e0
L
11495 {
11496 /* MOD_0F01_REG_0 */
11497 { X86_64_TABLE (X86_64_0F01_REG_0) },
11498 { RM_TABLE (RM_0F01_REG_0) },
11499 },
11500 {
11501 /* MOD_0F01_REG_1 */
11502 { X86_64_TABLE (X86_64_0F01_REG_1) },
11503 { RM_TABLE (RM_0F01_REG_1) },
11504 },
11505 {
11506 /* MOD_0F01_REG_2 */
11507 { X86_64_TABLE (X86_64_0F01_REG_2) },
11508 { RM_TABLE (RM_0F01_REG_2) },
11509 },
11510 {
11511 /* MOD_0F01_REG_3 */
11512 { X86_64_TABLE (X86_64_0F01_REG_3) },
11513 { RM_TABLE (RM_0F01_REG_3) },
11514 },
11515 {
11516 /* MOD_0F01_REG_7 */
11517 { "invlpg", { Mb } },
11518 { RM_TABLE (RM_0F01_REG_7) },
11519 },
11520 {
11521 /* MOD_0F12_PREFIX_0 */
11522 { "movlps", { XM, EXq } },
11523 { "movhlps", { XM, EXq } },
11524 },
11525 {
11526 /* MOD_0F13 */
11527 { "movlpX", { EXq, XM } },
9e30b8e0
L
11528 },
11529 {
11530 /* MOD_0F16_PREFIX_0 */
11531 { "movhps", { XM, EXq } },
11532 { "movlhps", { XM, EXq } },
11533 },
11534 {
11535 /* MOD_0F17 */
11536 { "movhpX", { EXq, XM } },
9e30b8e0
L
11537 },
11538 {
11539 /* MOD_0F18_REG_0 */
11540 { "prefetchnta", { Mb } },
9e30b8e0
L
11541 },
11542 {
11543 /* MOD_0F18_REG_1 */
11544 { "prefetcht0", { Mb } },
9e30b8e0
L
11545 },
11546 {
11547 /* MOD_0F18_REG_2 */
11548 { "prefetcht1", { Mb } },
9e30b8e0
L
11549 },
11550 {
11551 /* MOD_0F18_REG_3 */
11552 { "prefetcht2", { Mb } },
9e30b8e0 11553 },
d7189fa5
RM
11554 {
11555 /* MOD_0F18_REG_4 */
11556 { "nop/reserved", { Mb } },
11557 },
11558 {
11559 /* MOD_0F18_REG_5 */
11560 { "nop/reserved", { Mb } },
11561 },
11562 {
11563 /* MOD_0F18_REG_6 */
11564 { "nop/reserved", { Mb } },
11565 },
11566 {
11567 /* MOD_0F18_REG_7 */
11568 { "nop/reserved", { Mb } },
11569 },
7e8b059b
L
11570 {
11571 /* MOD_0F1A_PREFIX_0 */
11572 { "bndldx", { Gbnd, Ev_bnd } },
11573 { "nopQ", { Ev } },
11574 },
11575 {
11576 /* MOD_0F1B_PREFIX_0 */
11577 { "bndstx", { Ev_bnd, Gbnd } },
11578 { "nopQ", { Ev } },
11579 },
11580 {
11581 /* MOD_0F1B_PREFIX_1 */
11582 { "bndmk", { Gbnd, Ev_bnd } },
11583 { "nopQ", { Ev } },
11584 },
9e30b8e0
L
11585 {
11586 /* MOD_0F20 */
592d1631 11587 { Bad_Opcode },
9e30b8e0
L
11588 { "movZ", { Rm, Cm } },
11589 },
11590 {
11591 /* MOD_0F21 */
592d1631 11592 { Bad_Opcode },
9e30b8e0
L
11593 { "movZ", { Rm, Dm } },
11594 },
11595 {
11596 /* MOD_0F22 */
592d1631 11597 { Bad_Opcode },
9e30b8e0 11598 { "movZ", { Cm, Rm } },
b844680a
L
11599 },
11600 {
92fddf8e 11601 /* MOD_0F23 */
592d1631 11602 { Bad_Opcode },
92fddf8e 11603 { "movZ", { Dm, Rm } },
b844680a
L
11604 },
11605 {
92fddf8e 11606 /* MOD_0F24 */
7bb15c6f 11607 { Bad_Opcode },
92fddf8e 11608 { "movL", { Rd, Td } },
b844680a
L
11609 },
11610 {
92fddf8e 11611 /* MOD_0F26 */
592d1631 11612 { Bad_Opcode },
92fddf8e 11613 { "movL", { Td, Rd } },
b844680a 11614 },
75c135a8
L
11615 {
11616 /* MOD_0F2B_PREFIX_0 */
4ee52178 11617 {"movntps", { Mx, XM } },
75c135a8
L
11618 },
11619 {
11620 /* MOD_0F2B_PREFIX_1 */
4ee52178 11621 {"movntss", { Md, XM } },
75c135a8
L
11622 },
11623 {
11624 /* MOD_0F2B_PREFIX_2 */
4ee52178 11625 {"movntpd", { Mx, XM } },
75c135a8
L
11626 },
11627 {
11628 /* MOD_0F2B_PREFIX_3 */
4ee52178 11629 {"movntsd", { Mq, XM } },
75c135a8
L
11630 },
11631 {
11632 /* MOD_0F51 */
592d1631 11633 { Bad_Opcode },
75c135a8
L
11634 { "movmskpX", { Gdq, XS } },
11635 },
b844680a 11636 {
1ceb70f8 11637 /* MOD_0F71_REG_2 */
592d1631 11638 { Bad_Opcode },
4e7d34a6 11639 { "psrlw", { MS, Ib } },
b844680a
L
11640 },
11641 {
1ceb70f8 11642 /* MOD_0F71_REG_4 */
592d1631 11643 { Bad_Opcode },
4e7d34a6 11644 { "psraw", { MS, Ib } },
b844680a
L
11645 },
11646 {
1ceb70f8 11647 /* MOD_0F71_REG_6 */
592d1631 11648 { Bad_Opcode },
4e7d34a6 11649 { "psllw", { MS, Ib } },
b844680a
L
11650 },
11651 {
1ceb70f8 11652 /* MOD_0F72_REG_2 */
592d1631 11653 { Bad_Opcode },
4e7d34a6 11654 { "psrld", { MS, Ib } },
b844680a
L
11655 },
11656 {
1ceb70f8 11657 /* MOD_0F72_REG_4 */
592d1631 11658 { Bad_Opcode },
4e7d34a6 11659 { "psrad", { MS, Ib } },
b844680a
L
11660 },
11661 {
1ceb70f8 11662 /* MOD_0F72_REG_6 */
592d1631 11663 { Bad_Opcode },
4e7d34a6 11664 { "pslld", { MS, Ib } },
b844680a
L
11665 },
11666 {
1ceb70f8 11667 /* MOD_0F73_REG_2 */
592d1631 11668 { Bad_Opcode },
4e7d34a6 11669 { "psrlq", { MS, Ib } },
b844680a
L
11670 },
11671 {
1ceb70f8 11672 /* MOD_0F73_REG_3 */
592d1631 11673 { Bad_Opcode },
c0f3af97
L
11674 { PREFIX_TABLE (PREFIX_0F73_REG_3) },
11675 },
11676 {
11677 /* MOD_0F73_REG_6 */
592d1631 11678 { Bad_Opcode },
c0f3af97
L
11679 { "psllq", { MS, Ib } },
11680 },
11681 {
11682 /* MOD_0F73_REG_7 */
592d1631 11683 { Bad_Opcode },
c0f3af97
L
11684 { PREFIX_TABLE (PREFIX_0F73_REG_7) },
11685 },
11686 {
11687 /* MOD_0FAE_REG_0 */
eacc9c89 11688 { "fxsave", { FXSAVE } },
c7b8aa3a 11689 { PREFIX_TABLE (PREFIX_0FAE_REG_0) },
c0f3af97
L
11690 },
11691 {
11692 /* MOD_0FAE_REG_1 */
eacc9c89 11693 { "fxrstor", { FXSAVE } },
c7b8aa3a 11694 { PREFIX_TABLE (PREFIX_0FAE_REG_1) },
c0f3af97
L
11695 },
11696 {
11697 /* MOD_0FAE_REG_2 */
11698 { "ldmxcsr", { Md } },
c7b8aa3a 11699 { PREFIX_TABLE (PREFIX_0FAE_REG_2) },
c0f3af97
L
11700 },
11701 {
11702 /* MOD_0FAE_REG_3 */
11703 { "stmxcsr", { Md } },
c7b8aa3a 11704 { PREFIX_TABLE (PREFIX_0FAE_REG_3) },
c0f3af97
L
11705 },
11706 {
11707 /* MOD_0FAE_REG_4 */
73bb6729 11708 { "xsave", { FXSAVE } },
c0f3af97
L
11709 },
11710 {
11711 /* MOD_0FAE_REG_5 */
73bb6729 11712 { "xrstor", { FXSAVE } },
c0f3af97
L
11713 { RM_TABLE (RM_0FAE_REG_5) },
11714 },
11715 {
11716 /* MOD_0FAE_REG_6 */
c7b8aa3a 11717 { "xsaveopt", { FXSAVE } },
c0f3af97
L
11718 { RM_TABLE (RM_0FAE_REG_6) },
11719 },
11720 {
11721 /* MOD_0FAE_REG_7 */
963f3586 11722 { PREFIX_TABLE (PREFIX_0FAE_REG_7) },
c0f3af97
L
11723 { RM_TABLE (RM_0FAE_REG_7) },
11724 },
11725 {
11726 /* MOD_0FB2 */
11727 { "lssS", { Gv, Mp } },
c0f3af97
L
11728 },
11729 {
11730 /* MOD_0FB4 */
11731 { "lfsS", { Gv, Mp } },
c0f3af97
L
11732 },
11733 {
11734 /* MOD_0FB5 */
11735 { "lgsS", { Gv, Mp } },
c0f3af97 11736 },
963f3586
IT
11737 {
11738 /* MOD_0FC7_REG_3 */
11739 { "xrstors", { FXSAVE } },
11740 },
11741 {
11742 /* MOD_0FC7_REG_4 */
11743 { "xsavec", { FXSAVE } },
11744 },
11745 {
11746 /* MOD_0FC7_REG_5 */
11747 { "xsaves", { FXSAVE } },
11748 },
c0f3af97
L
11749 {
11750 /* MOD_0FC7_REG_6 */
11751 { PREFIX_TABLE (PREFIX_0FC7_REG_6) },
d7d9a9f8 11752 { "rdrand", { Ev } },
c0f3af97
L
11753 },
11754 {
11755 /* MOD_0FC7_REG_7 */
11756 { "vmptrst", { Mq } },
e2e1fcde 11757 { "rdseed", { Ev } },
c0f3af97
L
11758 },
11759 {
11760 /* MOD_0FD7 */
592d1631 11761 { Bad_Opcode },
c0f3af97
L
11762 { "pmovmskb", { Gdq, MS } },
11763 },
11764 {
11765 /* MOD_0FE7_PREFIX_2 */
11766 { "movntdq", { Mx, XM } },
c0f3af97
L
11767 },
11768 {
11769 /* MOD_0FF0_PREFIX_3 */
11770 { "lddqu", { XM, M } },
c0f3af97
L
11771 },
11772 {
11773 /* MOD_0F382A_PREFIX_2 */
11774 { "movntdqa", { XM, Mx } },
c0f3af97
L
11775 },
11776 {
11777 /* MOD_62_32BIT */
11778 { "bound{S|}", { Gv, Ma } },
43234a1e 11779 { EVEX_TABLE (EVEX_0F) },
c0f3af97
L
11780 },
11781 {
11782 /* MOD_C4_32BIT */
11783 { "lesS", { Gv, Mp } },
11784 { VEX_C4_TABLE (VEX_0F) },
11785 },
11786 {
11787 /* MOD_C5_32BIT */
11788 { "ldsS", { Gv, Mp } },
11789 { VEX_C5_TABLE (VEX_0F) },
11790 },
11791 {
592a252b
L
11792 /* MOD_VEX_0F12_PREFIX_0 */
11793 { VEX_LEN_TABLE (VEX_LEN_0F12_P_0_M_0) },
11794 { VEX_LEN_TABLE (VEX_LEN_0F12_P_0_M_1) },
c0f3af97
L
11795 },
11796 {
592a252b
L
11797 /* MOD_VEX_0F13 */
11798 { VEX_LEN_TABLE (VEX_LEN_0F13_M_0) },
c0f3af97
L
11799 },
11800 {
592a252b
L
11801 /* MOD_VEX_0F16_PREFIX_0 */
11802 { VEX_LEN_TABLE (VEX_LEN_0F16_P_0_M_0) },
11803 { VEX_LEN_TABLE (VEX_LEN_0F16_P_0_M_1) },
c0f3af97
L
11804 },
11805 {
592a252b
L
11806 /* MOD_VEX_0F17 */
11807 { VEX_LEN_TABLE (VEX_LEN_0F17_M_0) },
c0f3af97
L
11808 },
11809 {
592a252b
L
11810 /* MOD_VEX_0F2B */
11811 { VEX_W_TABLE (VEX_W_0F2B_M_0) },
c0f3af97
L
11812 },
11813 {
592a252b 11814 /* MOD_VEX_0F50 */
592d1631 11815 { Bad_Opcode },
592a252b 11816 { VEX_W_TABLE (VEX_W_0F50_M_0) },
c0f3af97
L
11817 },
11818 {
592a252b 11819 /* MOD_VEX_0F71_REG_2 */
592d1631 11820 { Bad_Opcode },
592a252b 11821 { PREFIX_TABLE (PREFIX_VEX_0F71_REG_2) },
b844680a
L
11822 },
11823 {
592a252b 11824 /* MOD_VEX_0F71_REG_4 */
592d1631 11825 { Bad_Opcode },
592a252b 11826 { PREFIX_TABLE (PREFIX_VEX_0F71_REG_4) },
b844680a
L
11827 },
11828 {
592a252b 11829 /* MOD_VEX_0F71_REG_6 */
592d1631 11830 { Bad_Opcode },
592a252b 11831 { PREFIX_TABLE (PREFIX_VEX_0F71_REG_6) },
b844680a
L
11832 },
11833 {
592a252b 11834 /* MOD_VEX_0F72_REG_2 */
592d1631 11835 { Bad_Opcode },
592a252b 11836 { PREFIX_TABLE (PREFIX_VEX_0F72_REG_2) },
b844680a 11837 },
d8faab4e 11838 {
592a252b 11839 /* MOD_VEX_0F72_REG_4 */
592d1631 11840 { Bad_Opcode },
592a252b 11841 { PREFIX_TABLE (PREFIX_VEX_0F72_REG_4) },
d8faab4e
L
11842 },
11843 {
592a252b 11844 /* MOD_VEX_0F72_REG_6 */
592d1631 11845 { Bad_Opcode },
592a252b 11846 { PREFIX_TABLE (PREFIX_VEX_0F72_REG_6) },
d8faab4e 11847 },
876d4bfa 11848 {
592a252b 11849 /* MOD_VEX_0F73_REG_2 */
592d1631 11850 { Bad_Opcode },
592a252b 11851 { PREFIX_TABLE (PREFIX_VEX_0F73_REG_2) },
876d4bfa
L
11852 },
11853 {
592a252b 11854 /* MOD_VEX_0F73_REG_3 */
592d1631 11855 { Bad_Opcode },
592a252b 11856 { PREFIX_TABLE (PREFIX_VEX_0F73_REG_3) },
475a2301
L
11857 },
11858 {
592a252b 11859 /* MOD_VEX_0F73_REG_6 */
592d1631 11860 { Bad_Opcode },
592a252b 11861 { PREFIX_TABLE (PREFIX_VEX_0F73_REG_6) },
876d4bfa
L
11862 },
11863 {
592a252b 11864 /* MOD_VEX_0F73_REG_7 */
592d1631 11865 { Bad_Opcode },
592a252b 11866 { PREFIX_TABLE (PREFIX_VEX_0F73_REG_7) },
876d4bfa
L
11867 },
11868 {
592a252b
L
11869 /* MOD_VEX_0FAE_REG_2 */
11870 { VEX_LEN_TABLE (VEX_LEN_0FAE_R_2_M_0) },
876d4bfa 11871 },
bbedc832 11872 {
592a252b
L
11873 /* MOD_VEX_0FAE_REG_3 */
11874 { VEX_LEN_TABLE (VEX_LEN_0FAE_R_3_M_0) },
bbedc832 11875 },
144c41d9 11876 {
592a252b 11877 /* MOD_VEX_0FD7_PREFIX_2 */
592d1631 11878 { Bad_Opcode },
6c30d220 11879 { VEX_W_TABLE (VEX_W_0FD7_P_2_M_1) },
144c41d9 11880 },
1afd85e3 11881 {
592a252b
L
11882 /* MOD_VEX_0FE7_PREFIX_2 */
11883 { VEX_W_TABLE (VEX_W_0FE7_P_2_M_0) },
1afd85e3
L
11884 },
11885 {
592a252b
L
11886 /* MOD_VEX_0FF0_PREFIX_3 */
11887 { VEX_W_TABLE (VEX_W_0FF0_P_3_M_0) },
92fddf8e 11888 },
75c135a8 11889 {
592a252b
L
11890 /* MOD_VEX_0F381A_PREFIX_2 */
11891 { VEX_LEN_TABLE (VEX_LEN_0F381A_P_2_M_0) },
75c135a8 11892 },
1afd85e3 11893 {
592a252b 11894 /* MOD_VEX_0F382A_PREFIX_2 */
6c30d220 11895 { VEX_W_TABLE (VEX_W_0F382A_P_2_M_0) },
1afd85e3 11896 },
75c135a8 11897 {
592a252b
L
11898 /* MOD_VEX_0F382C_PREFIX_2 */
11899 { VEX_W_TABLE (VEX_W_0F382C_P_2_M_0) },
75c135a8 11900 },
1afd85e3 11901 {
592a252b
L
11902 /* MOD_VEX_0F382D_PREFIX_2 */
11903 { VEX_W_TABLE (VEX_W_0F382D_P_2_M_0) },
1afd85e3
L
11904 },
11905 {
592a252b
L
11906 /* MOD_VEX_0F382E_PREFIX_2 */
11907 { VEX_W_TABLE (VEX_W_0F382E_P_2_M_0) },
1afd85e3
L
11908 },
11909 {
592a252b
L
11910 /* MOD_VEX_0F382F_PREFIX_2 */
11911 { VEX_W_TABLE (VEX_W_0F382F_P_2_M_0) },
1afd85e3 11912 },
6c30d220
L
11913 {
11914 /* MOD_VEX_0F385A_PREFIX_2 */
11915 { VEX_LEN_TABLE (VEX_LEN_0F385A_P_2_M_0) },
11916 },
11917 {
11918 /* MOD_VEX_0F388C_PREFIX_2 */
11919 { "vpmaskmov%LW", { XM, Vex, Mx } },
11920 },
11921 {
11922 /* MOD_VEX_0F388E_PREFIX_2 */
11923 { "vpmaskmov%LW", { Mx, Vex, XM } },
11924 },
43234a1e
L
11925#define NEED_MOD_TABLE
11926#include "i386-dis-evex.h"
11927#undef NEED_MOD_TABLE
b844680a
L
11928};
11929
1ceb70f8 11930static const struct dis386 rm_table[][8] = {
42164a71
L
11931 {
11932 /* RM_C6_REG_7 */
11933 { "xabort", { Skip_MODRM, Ib } },
11934 },
11935 {
11936 /* RM_C7_REG_7 */
11937 { "xbeginT", { Skip_MODRM, Jv } },
11938 },
b844680a 11939 {
1ceb70f8 11940 /* RM_0F01_REG_0 */
592d1631 11941 { Bad_Opcode },
b844680a
L
11942 { "vmcall", { Skip_MODRM } },
11943 { "vmlaunch", { Skip_MODRM } },
11944 { "vmresume", { Skip_MODRM } },
11945 { "vmxoff", { Skip_MODRM } },
b844680a
L
11946 },
11947 {
1ceb70f8 11948 /* RM_0F01_REG_1 */
b844680a
L
11949 { "monitor", { { OP_Monitor, 0 } } },
11950 { "mwait", { { OP_Mwait, 0 } } },
5c111e37
L
11951 { "clac", { Skip_MODRM } },
11952 { "stac", { Skip_MODRM } },
2cf200a4
IT
11953 { Bad_Opcode },
11954 { Bad_Opcode },
11955 { Bad_Opcode },
11956 { "encls", { Skip_MODRM } },
b844680a 11957 },
475a2301
L
11958 {
11959 /* RM_0F01_REG_2 */
11960 { "xgetbv", { Skip_MODRM } },
11961 { "xsetbv", { Skip_MODRM } },
8729a6f6
L
11962 { Bad_Opcode },
11963 { Bad_Opcode },
11964 { "vmfunc", { Skip_MODRM } },
42164a71
L
11965 { "xend", { Skip_MODRM } },
11966 { "xtest", { Skip_MODRM } },
2cf200a4 11967 { "enclu", { Skip_MODRM } },
475a2301 11968 },
b844680a 11969 {
1ceb70f8 11970 /* RM_0F01_REG_3 */
4e7d34a6
L
11971 { "vmrun", { Skip_MODRM } },
11972 { "vmmcall", { Skip_MODRM } },
11973 { "vmload", { Skip_MODRM } },
11974 { "vmsave", { Skip_MODRM } },
11975 { "stgi", { Skip_MODRM } },
11976 { "clgi", { Skip_MODRM } },
11977 { "skinit", { Skip_MODRM } },
11978 { "invlpga", { Skip_MODRM } },
11979 },
11980 {
1ceb70f8 11981 /* RM_0F01_REG_7 */
4e7d34a6
L
11982 { "swapgs", { Skip_MODRM } },
11983 { "rdtscp", { Skip_MODRM } },
b844680a
L
11984 },
11985 {
1ceb70f8 11986 /* RM_0FAE_REG_5 */
4e7d34a6 11987 { "lfence", { Skip_MODRM } },
b844680a
L
11988 },
11989 {
1ceb70f8 11990 /* RM_0FAE_REG_6 */
4e7d34a6 11991 { "mfence", { Skip_MODRM } },
b844680a 11992 },
bbedc832 11993 {
1ceb70f8 11994 /* RM_0FAE_REG_7 */
4e7d34a6 11995 { "sfence", { Skip_MODRM } },
144c41d9 11996 },
b844680a
L
11997};
11998
c608c12e
AM
11999#define INTERNAL_DISASSEMBLER_ERROR _("<internal disassembler error>")
12000
f16cd0d5
L
12001/* We use the high bit to indicate different name for the same
12002 prefix. */
f16cd0d5 12003#define REP_PREFIX (0xf3 | 0x100)
42164a71
L
12004#define XACQUIRE_PREFIX (0xf2 | 0x200)
12005#define XRELEASE_PREFIX (0xf3 | 0x400)
7e8b059b 12006#define BND_PREFIX (0xf2 | 0x400)
f16cd0d5
L
12007
12008static int
26ca5450 12009ckprefix (void)
252b5132 12010{
f16cd0d5 12011 int newrex, i, length;
52b15da3 12012 rex = 0;
c0f3af97 12013 rex_ignored = 0;
252b5132 12014 prefixes = 0;
7d421014 12015 used_prefixes = 0;
52b15da3 12016 rex_used = 0;
f16cd0d5
L
12017 last_lock_prefix = -1;
12018 last_repz_prefix = -1;
12019 last_repnz_prefix = -1;
12020 last_data_prefix = -1;
12021 last_addr_prefix = -1;
12022 last_rex_prefix = -1;
12023 last_seg_prefix = -1;
d9949a36 12024 fwait_prefix = -1;
285ca992 12025 active_seg_prefix = 0;
f310f33d
L
12026 for (i = 0; i < (int) ARRAY_SIZE (all_prefixes); i++)
12027 all_prefixes[i] = 0;
12028 i = 0;
f16cd0d5
L
12029 length = 0;
12030 /* The maximum instruction length is 15bytes. */
12031 while (length < MAX_CODE_LENGTH - 1)
252b5132
RH
12032 {
12033 FETCH_DATA (the_info, codep + 1);
52b15da3 12034 newrex = 0;
252b5132
RH
12035 switch (*codep)
12036 {
52b15da3
JH
12037 /* REX prefixes family. */
12038 case 0x40:
12039 case 0x41:
12040 case 0x42:
12041 case 0x43:
12042 case 0x44:
12043 case 0x45:
12044 case 0x46:
12045 case 0x47:
12046 case 0x48:
12047 case 0x49:
12048 case 0x4a:
12049 case 0x4b:
12050 case 0x4c:
12051 case 0x4d:
12052 case 0x4e:
12053 case 0x4f:
f16cd0d5
L
12054 if (address_mode == mode_64bit)
12055 newrex = *codep;
12056 else
12057 return 1;
12058 last_rex_prefix = i;
52b15da3 12059 break;
252b5132
RH
12060 case 0xf3:
12061 prefixes |= PREFIX_REPZ;
f16cd0d5 12062 last_repz_prefix = i;
252b5132
RH
12063 break;
12064 case 0xf2:
12065 prefixes |= PREFIX_REPNZ;
f16cd0d5 12066 last_repnz_prefix = i;
252b5132
RH
12067 break;
12068 case 0xf0:
12069 prefixes |= PREFIX_LOCK;
f16cd0d5 12070 last_lock_prefix = i;
252b5132
RH
12071 break;
12072 case 0x2e:
12073 prefixes |= PREFIX_CS;
f16cd0d5 12074 last_seg_prefix = i;
285ca992 12075 active_seg_prefix = PREFIX_CS;
252b5132
RH
12076 break;
12077 case 0x36:
12078 prefixes |= PREFIX_SS;
f16cd0d5 12079 last_seg_prefix = i;
285ca992 12080 active_seg_prefix = PREFIX_SS;
252b5132
RH
12081 break;
12082 case 0x3e:
12083 prefixes |= PREFIX_DS;
f16cd0d5 12084 last_seg_prefix = i;
285ca992 12085 active_seg_prefix = PREFIX_DS;
252b5132
RH
12086 break;
12087 case 0x26:
12088 prefixes |= PREFIX_ES;
f16cd0d5 12089 last_seg_prefix = i;
285ca992 12090 active_seg_prefix = PREFIX_ES;
252b5132
RH
12091 break;
12092 case 0x64:
12093 prefixes |= PREFIX_FS;
f16cd0d5 12094 last_seg_prefix = i;
285ca992 12095 active_seg_prefix = PREFIX_FS;
252b5132
RH
12096 break;
12097 case 0x65:
12098 prefixes |= PREFIX_GS;
f16cd0d5 12099 last_seg_prefix = i;
285ca992 12100 active_seg_prefix = PREFIX_GS;
252b5132
RH
12101 break;
12102 case 0x66:
12103 prefixes |= PREFIX_DATA;
f16cd0d5 12104 last_data_prefix = i;
252b5132
RH
12105 break;
12106 case 0x67:
12107 prefixes |= PREFIX_ADDR;
f16cd0d5 12108 last_addr_prefix = i;
252b5132 12109 break;
5076851f 12110 case FWAIT_OPCODE:
252b5132
RH
12111 /* fwait is really an instruction. If there are prefixes
12112 before the fwait, they belong to the fwait, *not* to the
12113 following instruction. */
d9949a36 12114 fwait_prefix = i;
3e7d61b2 12115 if (prefixes || rex)
252b5132
RH
12116 {
12117 prefixes |= PREFIX_FWAIT;
12118 codep++;
6c067bbb
RM
12119 /* This ensures that the previous REX prefixes are noticed
12120 as unused prefixes, as in the return case below. */
12121 rex_used = rex;
f16cd0d5 12122 return 1;
252b5132
RH
12123 }
12124 prefixes = PREFIX_FWAIT;
12125 break;
12126 default:
f16cd0d5 12127 return 1;
252b5132 12128 }
52b15da3
JH
12129 /* Rex is ignored when followed by another prefix. */
12130 if (rex)
12131 {
3e7d61b2 12132 rex_used = rex;
f16cd0d5 12133 return 1;
52b15da3 12134 }
f16cd0d5
L
12135 if (*codep != FWAIT_OPCODE)
12136 all_prefixes[i++] = *codep;
52b15da3 12137 rex = newrex;
252b5132 12138 codep++;
f16cd0d5
L
12139 length++;
12140 }
12141 return 0;
12142}
12143
7d421014
ILT
12144/* Return the name of the prefix byte PREF, or NULL if PREF is not a
12145 prefix byte. */
12146
12147static const char *
26ca5450 12148prefix_name (int pref, int sizeflag)
7d421014 12149{
0003779b
L
12150 static const char *rexes [16] =
12151 {
12152 "rex", /* 0x40 */
12153 "rex.B", /* 0x41 */
12154 "rex.X", /* 0x42 */
12155 "rex.XB", /* 0x43 */
12156 "rex.R", /* 0x44 */
12157 "rex.RB", /* 0x45 */
12158 "rex.RX", /* 0x46 */
12159 "rex.RXB", /* 0x47 */
12160 "rex.W", /* 0x48 */
12161 "rex.WB", /* 0x49 */
12162 "rex.WX", /* 0x4a */
12163 "rex.WXB", /* 0x4b */
12164 "rex.WR", /* 0x4c */
12165 "rex.WRB", /* 0x4d */
12166 "rex.WRX", /* 0x4e */
12167 "rex.WRXB", /* 0x4f */
12168 };
12169
7d421014
ILT
12170 switch (pref)
12171 {
52b15da3
JH
12172 /* REX prefixes family. */
12173 case 0x40:
52b15da3 12174 case 0x41:
52b15da3 12175 case 0x42:
52b15da3 12176 case 0x43:
52b15da3 12177 case 0x44:
52b15da3 12178 case 0x45:
52b15da3 12179 case 0x46:
52b15da3 12180 case 0x47:
52b15da3 12181 case 0x48:
52b15da3 12182 case 0x49:
52b15da3 12183 case 0x4a:
52b15da3 12184 case 0x4b:
52b15da3 12185 case 0x4c:
52b15da3 12186 case 0x4d:
52b15da3 12187 case 0x4e:
52b15da3 12188 case 0x4f:
0003779b 12189 return rexes [pref - 0x40];
7d421014
ILT
12190 case 0xf3:
12191 return "repz";
12192 case 0xf2:
12193 return "repnz";
12194 case 0xf0:
12195 return "lock";
12196 case 0x2e:
12197 return "cs";
12198 case 0x36:
12199 return "ss";
12200 case 0x3e:
12201 return "ds";
12202 case 0x26:
12203 return "es";
12204 case 0x64:
12205 return "fs";
12206 case 0x65:
12207 return "gs";
12208 case 0x66:
12209 return (sizeflag & DFLAG) ? "data16" : "data32";
12210 case 0x67:
cb712a9e 12211 if (address_mode == mode_64bit)
db6eb5be 12212 return (sizeflag & AFLAG) ? "addr32" : "addr64";
c1a64871 12213 else
2888cb7a 12214 return (sizeflag & AFLAG) ? "addr16" : "addr32";
7d421014
ILT
12215 case FWAIT_OPCODE:
12216 return "fwait";
f16cd0d5
L
12217 case REP_PREFIX:
12218 return "rep";
42164a71
L
12219 case XACQUIRE_PREFIX:
12220 return "xacquire";
12221 case XRELEASE_PREFIX:
12222 return "xrelease";
7e8b059b
L
12223 case BND_PREFIX:
12224 return "bnd";
7d421014
ILT
12225 default:
12226 return NULL;
12227 }
12228}
12229
ce518a5f
L
12230static char op_out[MAX_OPERANDS][100];
12231static int op_ad, op_index[MAX_OPERANDS];
1d9f512f 12232static int two_source_ops;
ce518a5f
L
12233static bfd_vma op_address[MAX_OPERANDS];
12234static bfd_vma op_riprel[MAX_OPERANDS];
52b15da3 12235static bfd_vma start_pc;
ce518a5f 12236
252b5132
RH
12237/*
12238 * On the 386's of 1988, the maximum length of an instruction is 15 bytes.
12239 * (see topic "Redundant prefixes" in the "Differences from 8086"
12240 * section of the "Virtual 8086 Mode" chapter.)
12241 * 'pc' should be the address of this instruction, it will
12242 * be used to print the target address if this is a relative jump or call
12243 * The function returns the length of this instruction in bytes.
12244 */
12245
252b5132 12246static char intel_syntax;
9d141669 12247static char intel_mnemonic = !SYSV386_COMPAT;
252b5132
RH
12248static char open_char;
12249static char close_char;
12250static char separator_char;
12251static char scale_char;
12252
e396998b
AM
12253/* Here for backwards compatibility. When gdb stops using
12254 print_insn_i386_att and print_insn_i386_intel these functions can
12255 disappear, and print_insn_i386 be merged into print_insn. */
252b5132 12256int
26ca5450 12257print_insn_i386_att (bfd_vma pc, disassemble_info *info)
252b5132
RH
12258{
12259 intel_syntax = 0;
e396998b
AM
12260
12261 return print_insn (pc, info);
252b5132
RH
12262}
12263
12264int
26ca5450 12265print_insn_i386_intel (bfd_vma pc, disassemble_info *info)
252b5132
RH
12266{
12267 intel_syntax = 1;
e396998b
AM
12268
12269 return print_insn (pc, info);
252b5132
RH
12270}
12271
e396998b 12272int
26ca5450 12273print_insn_i386 (bfd_vma pc, disassemble_info *info)
e396998b
AM
12274{
12275 intel_syntax = -1;
12276
12277 return print_insn (pc, info);
12278}
12279
f59a29b9
L
12280void
12281print_i386_disassembler_options (FILE *stream)
12282{
12283 fprintf (stream, _("\n\
12284The following i386/x86-64 specific disassembler options are supported for use\n\
12285with the -M switch (multiple options should be separated by commas):\n"));
12286
12287 fprintf (stream, _(" x86-64 Disassemble in 64bit mode\n"));
12288 fprintf (stream, _(" i386 Disassemble in 32bit mode\n"));
12289 fprintf (stream, _(" i8086 Disassemble in 16bit mode\n"));
12290 fprintf (stream, _(" att Display instruction in AT&T syntax\n"));
12291 fprintf (stream, _(" intel Display instruction in Intel syntax\n"));
9d141669
L
12292 fprintf (stream, _(" att-mnemonic\n"
12293 " Display instruction in AT&T mnemonic\n"));
12294 fprintf (stream, _(" intel-mnemonic\n"
12295 " Display instruction in Intel mnemonic\n"));
f59a29b9
L
12296 fprintf (stream, _(" addr64 Assume 64bit address size\n"));
12297 fprintf (stream, _(" addr32 Assume 32bit address size\n"));
12298 fprintf (stream, _(" addr16 Assume 16bit address size\n"));
12299 fprintf (stream, _(" data32 Assume 32bit data size\n"));
12300 fprintf (stream, _(" data16 Assume 16bit data size\n"));
12301 fprintf (stream, _(" suffix Always display instruction suffix in AT&T syntax\n"));
12302}
12303
592d1631
L
12304/* Bad opcode. */
12305static const struct dis386 bad_opcode = { "(bad)", { XX } };
12306
b844680a
L
12307/* Get a pointer to struct dis386 with a valid name. */
12308
12309static const struct dis386 *
8bb15339 12310get_valid_dis386 (const struct dis386 *dp, disassemble_info *info)
b844680a 12311{
91d6fa6a 12312 int vindex, vex_table_index;
b844680a
L
12313
12314 if (dp->name != NULL)
12315 return dp;
12316
12317 switch (dp->op[0].bytemode)
12318 {
1ceb70f8
L
12319 case USE_REG_TABLE:
12320 dp = &reg_table[dp->op[1].bytemode][modrm.reg];
12321 break;
12322
12323 case USE_MOD_TABLE:
91d6fa6a
NC
12324 vindex = modrm.mod == 0x3 ? 1 : 0;
12325 dp = &mod_table[dp->op[1].bytemode][vindex];
1ceb70f8
L
12326 break;
12327
12328 case USE_RM_TABLE:
12329 dp = &rm_table[dp->op[1].bytemode][modrm.rm];
b844680a
L
12330 break;
12331
4e7d34a6 12332 case USE_PREFIX_TABLE:
c0f3af97 12333 if (need_vex)
b844680a 12334 {
c0f3af97
L
12335 /* The prefix in VEX is implicit. */
12336 switch (vex.prefix)
12337 {
12338 case 0:
91d6fa6a 12339 vindex = 0;
c0f3af97
L
12340 break;
12341 case REPE_PREFIX_OPCODE:
91d6fa6a 12342 vindex = 1;
c0f3af97
L
12343 break;
12344 case DATA_PREFIX_OPCODE:
91d6fa6a 12345 vindex = 2;
c0f3af97
L
12346 break;
12347 case REPNE_PREFIX_OPCODE:
91d6fa6a 12348 vindex = 3;
c0f3af97
L
12349 break;
12350 default:
12351 abort ();
12352 break;
12353 }
b844680a 12354 }
7bb15c6f 12355 else
b844680a 12356 {
285ca992
L
12357 int last_prefix = -1;
12358 int prefix = 0;
91d6fa6a 12359 vindex = 0;
285ca992
L
12360 /* We check PREFIX_REPNZ and PREFIX_REPZ before PREFIX_DATA.
12361 When there are multiple PREFIX_REPNZ and PREFIX_REPZ, the
12362 last one wins. */
12363 if ((prefixes & (PREFIX_REPZ | PREFIX_REPNZ)) != 0)
b844680a 12364 {
285ca992 12365 if (last_repz_prefix > last_repnz_prefix)
c0f3af97 12366 {
285ca992
L
12367 vindex = 1;
12368 prefix = PREFIX_REPZ;
12369 last_prefix = last_repz_prefix;
c0f3af97
L
12370 }
12371 else
b844680a 12372 {
285ca992
L
12373 vindex = 3;
12374 prefix = PREFIX_REPNZ;
12375 last_prefix = last_repnz_prefix;
b844680a 12376 }
285ca992
L
12377
12378 /* Ignore the invalid index if it isn't mandatory. */
12379 if (!mandatory_prefix
12380 && (prefix_table[dp->op[1].bytemode][vindex].name
12381 == NULL)
12382 && (prefix_table[dp->op[1].bytemode][vindex].op[0].bytemode
12383 == 0))
12384 vindex = 0;
12385 }
12386
12387 if (vindex == 0 && (prefixes & PREFIX_DATA) != 0)
12388 {
12389 vindex = 2;
12390 prefix = PREFIX_DATA;
12391 last_prefix = last_data_prefix;
12392 }
12393
12394 if (vindex != 0)
12395 {
12396 used_prefixes |= prefix;
12397 all_prefixes[last_prefix] = 0;
b844680a
L
12398 }
12399 }
91d6fa6a 12400 dp = &prefix_table[dp->op[1].bytemode][vindex];
b844680a
L
12401 break;
12402
4e7d34a6 12403 case USE_X86_64_TABLE:
91d6fa6a
NC
12404 vindex = address_mode == mode_64bit ? 1 : 0;
12405 dp = &x86_64_table[dp->op[1].bytemode][vindex];
b844680a
L
12406 break;
12407
4e7d34a6 12408 case USE_3BYTE_TABLE:
8bb15339 12409 FETCH_DATA (info, codep + 2);
91d6fa6a
NC
12410 vindex = *codep++;
12411 dp = &three_byte_table[dp->op[1].bytemode][vindex];
285ca992 12412 end_codep = codep;
8bb15339
L
12413 modrm.mod = (*codep >> 6) & 3;
12414 modrm.reg = (*codep >> 3) & 7;
12415 modrm.rm = *codep & 7;
12416 break;
12417
c0f3af97
L
12418 case USE_VEX_LEN_TABLE:
12419 if (!need_vex)
12420 abort ();
12421
12422 switch (vex.length)
12423 {
12424 case 128:
91d6fa6a 12425 vindex = 0;
c0f3af97
L
12426 break;
12427 case 256:
91d6fa6a 12428 vindex = 1;
c0f3af97
L
12429 break;
12430 default:
12431 abort ();
12432 break;
12433 }
12434
91d6fa6a 12435 dp = &vex_len_table[dp->op[1].bytemode][vindex];
c0f3af97
L
12436 break;
12437
f88c9eb0
SP
12438 case USE_XOP_8F_TABLE:
12439 FETCH_DATA (info, codep + 3);
12440 /* All bits in the REX prefix are ignored. */
12441 rex_ignored = rex;
12442 rex = ~(*codep >> 5) & 0x7;
12443
12444 /* VEX_TABLE_INDEX is the mmmmm part of the XOP byte 1 "RCB.mmmmm". */
12445 switch ((*codep & 0x1f))
12446 {
12447 default:
f07af43e
L
12448 dp = &bad_opcode;
12449 return dp;
5dd85c99
SP
12450 case 0x8:
12451 vex_table_index = XOP_08;
12452 break;
f88c9eb0
SP
12453 case 0x9:
12454 vex_table_index = XOP_09;
12455 break;
12456 case 0xa:
12457 vex_table_index = XOP_0A;
12458 break;
12459 }
12460 codep++;
12461 vex.w = *codep & 0x80;
12462 if (vex.w && address_mode == mode_64bit)
12463 rex |= REX_W;
12464
12465 vex.register_specifier = (~(*codep >> 3)) & 0xf;
12466 if (address_mode != mode_64bit
12467 && vex.register_specifier > 0x7)
f07af43e
L
12468 {
12469 dp = &bad_opcode;
12470 return dp;
12471 }
f88c9eb0
SP
12472
12473 vex.length = (*codep & 0x4) ? 256 : 128;
12474 switch ((*codep & 0x3))
12475 {
12476 case 0:
12477 vex.prefix = 0;
12478 break;
12479 case 1:
12480 vex.prefix = DATA_PREFIX_OPCODE;
12481 break;
12482 case 2:
12483 vex.prefix = REPE_PREFIX_OPCODE;
12484 break;
12485 case 3:
12486 vex.prefix = REPNE_PREFIX_OPCODE;
12487 break;
12488 }
12489 need_vex = 1;
12490 need_vex_reg = 1;
12491 codep++;
91d6fa6a
NC
12492 vindex = *codep++;
12493 dp = &xop_table[vex_table_index][vindex];
c48244a5 12494
285ca992 12495 end_codep = codep;
c48244a5
SP
12496 FETCH_DATA (info, codep + 1);
12497 modrm.mod = (*codep >> 6) & 3;
12498 modrm.reg = (*codep >> 3) & 7;
12499 modrm.rm = *codep & 7;
f88c9eb0
SP
12500 break;
12501
c0f3af97 12502 case USE_VEX_C4_TABLE:
43234a1e 12503 /* VEX prefix. */
c0f3af97
L
12504 FETCH_DATA (info, codep + 3);
12505 /* All bits in the REX prefix are ignored. */
12506 rex_ignored = rex;
12507 rex = ~(*codep >> 5) & 0x7;
12508 switch ((*codep & 0x1f))
12509 {
12510 default:
f07af43e
L
12511 dp = &bad_opcode;
12512 return dp;
c0f3af97 12513 case 0x1:
f88c9eb0 12514 vex_table_index = VEX_0F;
c0f3af97
L
12515 break;
12516 case 0x2:
f88c9eb0 12517 vex_table_index = VEX_0F38;
c0f3af97
L
12518 break;
12519 case 0x3:
f88c9eb0 12520 vex_table_index = VEX_0F3A;
c0f3af97
L
12521 break;
12522 }
12523 codep++;
12524 vex.w = *codep & 0x80;
12525 if (vex.w && address_mode == mode_64bit)
12526 rex |= REX_W;
12527
12528 vex.register_specifier = (~(*codep >> 3)) & 0xf;
12529 if (address_mode != mode_64bit
12530 && vex.register_specifier > 0x7)
f07af43e
L
12531 {
12532 dp = &bad_opcode;
12533 return dp;
12534 }
c0f3af97
L
12535
12536 vex.length = (*codep & 0x4) ? 256 : 128;
12537 switch ((*codep & 0x3))
12538 {
12539 case 0:
12540 vex.prefix = 0;
12541 break;
12542 case 1:
12543 vex.prefix = DATA_PREFIX_OPCODE;
12544 break;
12545 case 2:
12546 vex.prefix = REPE_PREFIX_OPCODE;
12547 break;
12548 case 3:
12549 vex.prefix = REPNE_PREFIX_OPCODE;
12550 break;
12551 }
12552 need_vex = 1;
12553 need_vex_reg = 1;
12554 codep++;
91d6fa6a
NC
12555 vindex = *codep++;
12556 dp = &vex_table[vex_table_index][vindex];
285ca992 12557 end_codep = codep;
c0f3af97 12558 /* There is no MODRM byte for VEX [82|77]. */
91d6fa6a 12559 if (vindex != 0x77 && vindex != 0x82)
c0f3af97
L
12560 {
12561 FETCH_DATA (info, codep + 1);
12562 modrm.mod = (*codep >> 6) & 3;
12563 modrm.reg = (*codep >> 3) & 7;
12564 modrm.rm = *codep & 7;
12565 }
12566 break;
12567
12568 case USE_VEX_C5_TABLE:
43234a1e 12569 /* VEX prefix. */
c0f3af97
L
12570 FETCH_DATA (info, codep + 2);
12571 /* All bits in the REX prefix are ignored. */
12572 rex_ignored = rex;
12573 rex = (*codep & 0x80) ? 0 : REX_R;
12574
12575 vex.register_specifier = (~(*codep >> 3)) & 0xf;
12576 if (address_mode != mode_64bit
12577 && vex.register_specifier > 0x7)
f07af43e
L
12578 {
12579 dp = &bad_opcode;
12580 return dp;
12581 }
c0f3af97 12582
759a05ce
L
12583 vex.w = 0;
12584
c0f3af97
L
12585 vex.length = (*codep & 0x4) ? 256 : 128;
12586 switch ((*codep & 0x3))
12587 {
12588 case 0:
12589 vex.prefix = 0;
12590 break;
12591 case 1:
12592 vex.prefix = DATA_PREFIX_OPCODE;
12593 break;
12594 case 2:
12595 vex.prefix = REPE_PREFIX_OPCODE;
12596 break;
12597 case 3:
12598 vex.prefix = REPNE_PREFIX_OPCODE;
12599 break;
12600 }
12601 need_vex = 1;
12602 need_vex_reg = 1;
12603 codep++;
91d6fa6a
NC
12604 vindex = *codep++;
12605 dp = &vex_table[dp->op[1].bytemode][vindex];
285ca992 12606 end_codep = codep;
c0f3af97 12607 /* There is no MODRM byte for VEX [82|77]. */
91d6fa6a 12608 if (vindex != 0x77 && vindex != 0x82)
c0f3af97
L
12609 {
12610 FETCH_DATA (info, codep + 1);
12611 modrm.mod = (*codep >> 6) & 3;
12612 modrm.reg = (*codep >> 3) & 7;
12613 modrm.rm = *codep & 7;
12614 }
12615 break;
12616
9e30b8e0
L
12617 case USE_VEX_W_TABLE:
12618 if (!need_vex)
12619 abort ();
12620
12621 dp = &vex_w_table[dp->op[1].bytemode][vex.w ? 1 : 0];
12622 break;
12623
43234a1e
L
12624 case USE_EVEX_TABLE:
12625 two_source_ops = 0;
12626 /* EVEX prefix. */
12627 vex.evex = 1;
12628 FETCH_DATA (info, codep + 4);
12629 /* All bits in the REX prefix are ignored. */
12630 rex_ignored = rex;
12631 /* The first byte after 0x62. */
12632 rex = ~(*codep >> 5) & 0x7;
12633 vex.r = *codep & 0x10;
12634 switch ((*codep & 0xf))
12635 {
12636 default:
12637 return &bad_opcode;
12638 case 0x1:
12639 vex_table_index = EVEX_0F;
12640 break;
12641 case 0x2:
12642 vex_table_index = EVEX_0F38;
12643 break;
12644 case 0x3:
12645 vex_table_index = EVEX_0F3A;
12646 break;
12647 }
12648
12649 /* The second byte after 0x62. */
12650 codep++;
12651 vex.w = *codep & 0x80;
12652 if (vex.w && address_mode == mode_64bit)
12653 rex |= REX_W;
12654
12655 vex.register_specifier = (~(*codep >> 3)) & 0xf;
12656 if (address_mode != mode_64bit)
12657 {
12658 /* In 16/32-bit mode silently ignore following bits. */
12659 rex &= ~REX_B;
12660 vex.r = 1;
12661 vex.v = 1;
12662 vex.register_specifier &= 0x7;
12663 }
12664
12665 /* The U bit. */
12666 if (!(*codep & 0x4))
12667 return &bad_opcode;
12668
12669 switch ((*codep & 0x3))
12670 {
12671 case 0:
12672 vex.prefix = 0;
12673 break;
12674 case 1:
12675 vex.prefix = DATA_PREFIX_OPCODE;
12676 break;
12677 case 2:
12678 vex.prefix = REPE_PREFIX_OPCODE;
12679 break;
12680 case 3:
12681 vex.prefix = REPNE_PREFIX_OPCODE;
12682 break;
12683 }
12684
12685 /* The third byte after 0x62. */
12686 codep++;
12687
12688 /* Remember the static rounding bits. */
12689 vex.ll = (*codep >> 5) & 3;
12690 vex.b = (*codep & 0x10) != 0;
12691
12692 vex.v = *codep & 0x8;
12693 vex.mask_register_specifier = *codep & 0x7;
12694 vex.zeroing = *codep & 0x80;
12695
12696 need_vex = 1;
12697 need_vex_reg = 1;
12698 codep++;
12699 vindex = *codep++;
12700 dp = &evex_table[vex_table_index][vindex];
285ca992 12701 end_codep = codep;
43234a1e
L
12702 FETCH_DATA (info, codep + 1);
12703 modrm.mod = (*codep >> 6) & 3;
12704 modrm.reg = (*codep >> 3) & 7;
12705 modrm.rm = *codep & 7;
12706
12707 /* Set vector length. */
12708 if (modrm.mod == 3 && vex.b)
12709 vex.length = 512;
12710 else
12711 {
12712 switch (vex.ll)
12713 {
12714 case 0x0:
12715 vex.length = 128;
12716 break;
12717 case 0x1:
12718 vex.length = 256;
12719 break;
12720 case 0x2:
12721 vex.length = 512;
12722 break;
12723 default:
12724 return &bad_opcode;
12725 }
12726 }
12727 break;
12728
592d1631
L
12729 case 0:
12730 dp = &bad_opcode;
12731 break;
12732
b844680a 12733 default:
d34b5006 12734 abort ();
b844680a
L
12735 }
12736
12737 if (dp->name != NULL)
12738 return dp;
12739 else
8bb15339 12740 return get_valid_dis386 (dp, info);
b844680a
L
12741}
12742
dfc8cf43 12743static void
55cf16e1 12744get_sib (disassemble_info *info, int sizeflag)
dfc8cf43
L
12745{
12746 /* If modrm.mod == 3, operand must be register. */
12747 if (need_modrm
55cf16e1 12748 && ((sizeflag & AFLAG) || address_mode == mode_64bit)
dfc8cf43
L
12749 && modrm.mod != 3
12750 && modrm.rm == 4)
12751 {
12752 FETCH_DATA (info, codep + 2);
12753 sib.index = (codep [1] >> 3) & 7;
12754 sib.scale = (codep [1] >> 6) & 3;
12755 sib.base = codep [1] & 7;
12756 }
12757}
12758
e396998b 12759static int
26ca5450 12760print_insn (bfd_vma pc, disassemble_info *info)
252b5132 12761{
2da11e11 12762 const struct dis386 *dp;
252b5132 12763 int i;
ce518a5f 12764 char *op_txt[MAX_OPERANDS];
252b5132 12765 int needcomma;
df18fdba 12766 int sizeflag, orig_sizeflag;
e396998b 12767 const char *p;
252b5132 12768 struct dis_private priv;
f16cd0d5 12769 int prefix_length;
252b5132 12770
d7921315
L
12771 priv.orig_sizeflag = AFLAG | DFLAG;
12772 if ((info->mach & bfd_mach_i386_i386) != 0)
cb712a9e 12773 address_mode = mode_32bit;
2da11e11 12774 else if (info->mach == bfd_mach_i386_i8086)
d7921315
L
12775 {
12776 address_mode = mode_16bit;
12777 priv.orig_sizeflag = 0;
12778 }
2da11e11 12779 else
d7921315
L
12780 address_mode = mode_64bit;
12781
12782 if (intel_syntax == (char) -1)
12783 intel_syntax = (info->mach & bfd_mach_i386_intel_syntax) != 0;
e396998b
AM
12784
12785 for (p = info->disassembler_options; p != NULL; )
12786 {
0112cd26 12787 if (CONST_STRNEQ (p, "x86-64"))
e396998b 12788 {
cb712a9e 12789 address_mode = mode_64bit;
e396998b
AM
12790 priv.orig_sizeflag = AFLAG | DFLAG;
12791 }
0112cd26 12792 else if (CONST_STRNEQ (p, "i386"))
e396998b 12793 {
cb712a9e 12794 address_mode = mode_32bit;
e396998b
AM
12795 priv.orig_sizeflag = AFLAG | DFLAG;
12796 }
0112cd26 12797 else if (CONST_STRNEQ (p, "i8086"))
e396998b 12798 {
cb712a9e 12799 address_mode = mode_16bit;
e396998b
AM
12800 priv.orig_sizeflag = 0;
12801 }
0112cd26 12802 else if (CONST_STRNEQ (p, "intel"))
e396998b
AM
12803 {
12804 intel_syntax = 1;
9d141669
L
12805 if (CONST_STRNEQ (p + 5, "-mnemonic"))
12806 intel_mnemonic = 1;
e396998b 12807 }
0112cd26 12808 else if (CONST_STRNEQ (p, "att"))
e396998b
AM
12809 {
12810 intel_syntax = 0;
9d141669
L
12811 if (CONST_STRNEQ (p + 3, "-mnemonic"))
12812 intel_mnemonic = 0;
e396998b 12813 }
0112cd26 12814 else if (CONST_STRNEQ (p, "addr"))
e396998b 12815 {
f59a29b9
L
12816 if (address_mode == mode_64bit)
12817 {
12818 if (p[4] == '3' && p[5] == '2')
12819 priv.orig_sizeflag &= ~AFLAG;
12820 else if (p[4] == '6' && p[5] == '4')
12821 priv.orig_sizeflag |= AFLAG;
12822 }
12823 else
12824 {
12825 if (p[4] == '1' && p[5] == '6')
12826 priv.orig_sizeflag &= ~AFLAG;
12827 else if (p[4] == '3' && p[5] == '2')
12828 priv.orig_sizeflag |= AFLAG;
12829 }
e396998b 12830 }
0112cd26 12831 else if (CONST_STRNEQ (p, "data"))
e396998b
AM
12832 {
12833 if (p[4] == '1' && p[5] == '6')
12834 priv.orig_sizeflag &= ~DFLAG;
12835 else if (p[4] == '3' && p[5] == '2')
12836 priv.orig_sizeflag |= DFLAG;
12837 }
0112cd26 12838 else if (CONST_STRNEQ (p, "suffix"))
e396998b
AM
12839 priv.orig_sizeflag |= SUFFIX_ALWAYS;
12840
12841 p = strchr (p, ',');
12842 if (p != NULL)
12843 p++;
12844 }
12845
12846 if (intel_syntax)
12847 {
12848 names64 = intel_names64;
12849 names32 = intel_names32;
12850 names16 = intel_names16;
12851 names8 = intel_names8;
12852 names8rex = intel_names8rex;
12853 names_seg = intel_names_seg;
b9733481 12854 names_mm = intel_names_mm;
7e8b059b 12855 names_bnd = intel_names_bnd;
b9733481
L
12856 names_xmm = intel_names_xmm;
12857 names_ymm = intel_names_ymm;
43234a1e 12858 names_zmm = intel_names_zmm;
db51cc60
L
12859 index64 = intel_index64;
12860 index32 = intel_index32;
43234a1e 12861 names_mask = intel_names_mask;
e396998b
AM
12862 index16 = intel_index16;
12863 open_char = '[';
12864 close_char = ']';
12865 separator_char = '+';
12866 scale_char = '*';
12867 }
12868 else
12869 {
12870 names64 = att_names64;
12871 names32 = att_names32;
12872 names16 = att_names16;
12873 names8 = att_names8;
12874 names8rex = att_names8rex;
12875 names_seg = att_names_seg;
b9733481 12876 names_mm = att_names_mm;
7e8b059b 12877 names_bnd = att_names_bnd;
b9733481
L
12878 names_xmm = att_names_xmm;
12879 names_ymm = att_names_ymm;
43234a1e 12880 names_zmm = att_names_zmm;
db51cc60
L
12881 index64 = att_index64;
12882 index32 = att_index32;
43234a1e 12883 names_mask = att_names_mask;
e396998b
AM
12884 index16 = att_index16;
12885 open_char = '(';
12886 close_char = ')';
12887 separator_char = ',';
12888 scale_char = ',';
12889 }
2da11e11 12890
4fe53c98 12891 /* The output looks better if we put 7 bytes on a line, since that
8a9036a4
L
12892 puts most long word instructions on a single line. Use 8 bytes
12893 for Intel L1OM. */
d7921315 12894 if ((info->mach & bfd_mach_l1om) != 0)
8a9036a4
L
12895 info->bytes_per_line = 8;
12896 else
12897 info->bytes_per_line = 7;
252b5132 12898
26ca5450 12899 info->private_data = &priv;
252b5132
RH
12900 priv.max_fetched = priv.the_buffer;
12901 priv.insn_start = pc;
252b5132
RH
12902
12903 obuf[0] = 0;
ce518a5f
L
12904 for (i = 0; i < MAX_OPERANDS; ++i)
12905 {
12906 op_out[i][0] = 0;
12907 op_index[i] = -1;
12908 }
252b5132
RH
12909
12910 the_info = info;
12911 start_pc = pc;
e396998b
AM
12912 start_codep = priv.the_buffer;
12913 codep = priv.the_buffer;
252b5132 12914
8df14d78 12915 if (OPCODES_SIGSETJMP (priv.bailout) != 0)
5076851f 12916 {
7d421014
ILT
12917 const char *name;
12918
5076851f 12919 /* Getting here means we tried for data but didn't get it. That
e396998b
AM
12920 means we have an incomplete instruction of some sort. Just
12921 print the first byte as a prefix or a .byte pseudo-op. */
12922 if (codep > priv.the_buffer)
5076851f 12923 {
e396998b 12924 name = prefix_name (priv.the_buffer[0], priv.orig_sizeflag);
7d421014
ILT
12925 if (name != NULL)
12926 (*info->fprintf_func) (info->stream, "%s", name);
12927 else
5076851f 12928 {
7d421014
ILT
12929 /* Just print the first byte as a .byte instruction. */
12930 (*info->fprintf_func) (info->stream, ".byte 0x%x",
e396998b 12931 (unsigned int) priv.the_buffer[0]);
5076851f 12932 }
5076851f 12933
7d421014 12934 return 1;
5076851f
ILT
12935 }
12936
12937 return -1;
12938 }
12939
52b15da3 12940 obufp = obuf;
f16cd0d5
L
12941 sizeflag = priv.orig_sizeflag;
12942
12943 if (!ckprefix () || rex_used)
12944 {
12945 /* Too many prefixes or unused REX prefixes. */
12946 for (i = 0;
f6dd4781 12947 i < (int) ARRAY_SIZE (all_prefixes) && all_prefixes[i];
f16cd0d5 12948 i++)
de882298 12949 (*info->fprintf_func) (info->stream, "%s%s",
6c067bbb 12950 i == 0 ? "" : " ",
f16cd0d5 12951 prefix_name (all_prefixes[i], sizeflag));
de882298 12952 return i;
f16cd0d5 12953 }
252b5132
RH
12954
12955 insn_codep = codep;
12956
12957 FETCH_DATA (info, codep + 1);
12958 two_source_ops = (*codep == 0x62) || (*codep == 0xc8);
12959
3e7d61b2 12960 if (((prefixes & PREFIX_FWAIT)
f16cd0d5 12961 && ((*codep < 0xd8) || (*codep > 0xdf))))
252b5132 12962 {
86a80a50 12963 /* Handle prefixes before fwait. */
d9949a36 12964 for (i = 0; i < fwait_prefix && all_prefixes[i];
86a80a50
L
12965 i++)
12966 (*info->fprintf_func) (info->stream, "%s ",
12967 prefix_name (all_prefixes[i], sizeflag));
f16cd0d5 12968 (*info->fprintf_func) (info->stream, "fwait");
86a80a50 12969 return i + 1;
252b5132
RH
12970 }
12971
252b5132
RH
12972 if (*codep == 0x0f)
12973 {
eec0f4ca 12974 unsigned char threebyte;
252b5132 12975 FETCH_DATA (info, codep + 2);
eec0f4ca
L
12976 threebyte = *++codep;
12977 dp = &dis386_twobyte[threebyte];
252b5132 12978 need_modrm = twobyte_has_modrm[*codep];
285ca992 12979 mandatory_prefix = twobyte_has_mandatory_prefix[*codep];
eec0f4ca 12980 codep++;
252b5132
RH
12981 }
12982 else
12983 {
6439fc28 12984 dp = &dis386[*codep];
252b5132 12985 need_modrm = onebyte_has_modrm[*codep];
285ca992 12986 mandatory_prefix = 0;
eec0f4ca 12987 codep++;
252b5132 12988 }
246c51aa 12989
df18fdba
L
12990 /* Save sizeflag for printing the extra prefixes later before updating
12991 it for mnemonic and operand processing. The prefix names depend
12992 only on the address mode. */
12993 orig_sizeflag = sizeflag;
c608c12e 12994 if (prefixes & PREFIX_ADDR)
df18fdba 12995 sizeflag ^= AFLAG;
b844680a 12996 if ((prefixes & PREFIX_DATA))
df18fdba 12997 sizeflag ^= DFLAG;
3ffd33cf 12998
285ca992 12999 end_codep = codep;
8bb15339 13000 if (need_modrm)
252b5132
RH
13001 {
13002 FETCH_DATA (info, codep + 1);
7967e09e
L
13003 modrm.mod = (*codep >> 6) & 3;
13004 modrm.reg = (*codep >> 3) & 7;
13005 modrm.rm = *codep & 7;
252b5132
RH
13006 }
13007
42d5f9c6
MS
13008 need_vex = 0;
13009 need_vex_reg = 0;
13010 vex_w_done = 0;
43234a1e 13011 vex.evex = 0;
55b126d4 13012
ce518a5f 13013 if (dp->name == NULL && dp->op[0].bytemode == FLOATCODE)
252b5132 13014 {
55cf16e1 13015 get_sib (info, sizeflag);
252b5132
RH
13016 dofloat (sizeflag);
13017 }
13018 else
13019 {
8bb15339 13020 dp = get_valid_dis386 (dp, info);
b844680a 13021 if (dp != NULL && putop (dp->name, sizeflag) == 0)
6c067bbb 13022 {
55cf16e1 13023 get_sib (info, sizeflag);
ce518a5f
L
13024 for (i = 0; i < MAX_OPERANDS; ++i)
13025 {
246c51aa 13026 obufp = op_out[i];
ce518a5f
L
13027 op_ad = MAX_OPERANDS - 1 - i;
13028 if (dp->op[i].rtn)
13029 (*dp->op[i].rtn) (dp->op[i].bytemode, sizeflag);
43234a1e
L
13030 /* For EVEX instruction after the last operand masking
13031 should be printed. */
13032 if (i == 0 && vex.evex)
13033 {
13034 /* Don't print {%k0}. */
13035 if (vex.mask_register_specifier)
13036 {
13037 oappend ("{");
13038 oappend (names_mask[vex.mask_register_specifier]);
13039 oappend ("}");
13040 }
13041 if (vex.zeroing)
13042 oappend ("{z}");
13043 }
ce518a5f 13044 }
6439fc28 13045 }
252b5132
RH
13046 }
13047
d869730d 13048 /* Check if the REX prefix is used. */
e2e6193d 13049 if (rex_ignored == 0 && (rex ^ rex_used) == 0 && last_rex_prefix >= 0)
f16cd0d5
L
13050 all_prefixes[last_rex_prefix] = 0;
13051
5e6718e4 13052 /* Check if the SEG prefix is used. */
f16cd0d5
L
13053 if ((prefixes & (PREFIX_CS | PREFIX_SS | PREFIX_DS | PREFIX_ES
13054 | PREFIX_FS | PREFIX_GS)) != 0
285ca992 13055 && (used_prefixes & active_seg_prefix) != 0)
f16cd0d5
L
13056 all_prefixes[last_seg_prefix] = 0;
13057
5e6718e4 13058 /* Check if the ADDR prefix is used. */
f16cd0d5
L
13059 if ((prefixes & PREFIX_ADDR) != 0
13060 && (used_prefixes & PREFIX_ADDR) != 0)
13061 all_prefixes[last_addr_prefix] = 0;
13062
df18fdba
L
13063 /* Check if the DATA prefix is used. */
13064 if ((prefixes & PREFIX_DATA) != 0
13065 && (used_prefixes & PREFIX_DATA) != 0)
13066 all_prefixes[last_data_prefix] = 0;
f16cd0d5 13067
df18fdba 13068 /* Print the extra prefixes. */
f16cd0d5 13069 prefix_length = 0;
f310f33d 13070 for (i = 0; i < (int) ARRAY_SIZE (all_prefixes); i++)
f16cd0d5
L
13071 if (all_prefixes[i])
13072 {
13073 const char *name;
df18fdba 13074 name = prefix_name (all_prefixes[i], orig_sizeflag);
f16cd0d5
L
13075 if (name == NULL)
13076 abort ();
13077 prefix_length += strlen (name) + 1;
13078 (*info->fprintf_func) (info->stream, "%s ", name);
13079 }
b844680a 13080
285ca992
L
13081 /* If the mandatory PREFIX_REPZ/PREFIX_REPNZ/PREFIX_DATA prefix is
13082 unused, opcode is invalid. Since the PREFIX_DATA prefix may be
13083 used by putop and MMX/SSE operand and may be overriden by the
13084 PREFIX_REPZ/PREFIX_REPNZ fix, we check the PREFIX_DATA prefix
13085 separately. */
13086 if (mandatory_prefix
13087 && dp != &bad_opcode
13088 && (((prefixes
13089 & (PREFIX_REPZ | PREFIX_REPNZ)) != 0
13090 && (used_prefixes
13091 & (PREFIX_REPZ | PREFIX_REPNZ)) == 0)
13092 || ((((prefixes
13093 & (PREFIX_REPZ | PREFIX_REPNZ | PREFIX_DATA))
13094 == PREFIX_DATA)
13095 && (used_prefixes & PREFIX_DATA) == 0))))
13096 {
13097 (*info->fprintf_func) (info->stream, "(bad)");
13098 return end_codep - priv.the_buffer;
13099 }
13100
f16cd0d5
L
13101 /* Check maximum code length. */
13102 if ((codep - start_codep) > MAX_CODE_LENGTH)
13103 {
13104 (*info->fprintf_func) (info->stream, "(bad)");
13105 return MAX_CODE_LENGTH;
13106 }
b844680a 13107
ea397f5b 13108 obufp = mnemonicendp;
f16cd0d5 13109 for (i = strlen (obuf) + prefix_length; i < 6; i++)
252b5132
RH
13110 oappend (" ");
13111 oappend (" ");
13112 (*info->fprintf_func) (info->stream, "%s", obuf);
13113
13114 /* The enter and bound instructions are printed with operands in the same
13115 order as the intel book; everything else is printed in reverse order. */
2da11e11 13116 if (intel_syntax || two_source_ops)
252b5132 13117 {
185b1163
L
13118 bfd_vma riprel;
13119
ce518a5f 13120 for (i = 0; i < MAX_OPERANDS; ++i)
6c067bbb 13121 op_txt[i] = op_out[i];
246c51aa 13122
ce518a5f
L
13123 for (i = 0; i < (MAX_OPERANDS >> 1); ++i)
13124 {
6c067bbb
RM
13125 op_ad = op_index[i];
13126 op_index[i] = op_index[MAX_OPERANDS - 1 - i];
13127 op_index[MAX_OPERANDS - 1 - i] = op_ad;
185b1163
L
13128 riprel = op_riprel[i];
13129 op_riprel[i] = op_riprel [MAX_OPERANDS - 1 - i];
13130 op_riprel[MAX_OPERANDS - 1 - i] = riprel;
ce518a5f 13131 }
252b5132
RH
13132 }
13133 else
13134 {
ce518a5f 13135 for (i = 0; i < MAX_OPERANDS; ++i)
6c067bbb 13136 op_txt[MAX_OPERANDS - 1 - i] = op_out[i];
050dfa73
MM
13137 }
13138
ce518a5f
L
13139 needcomma = 0;
13140 for (i = 0; i < MAX_OPERANDS; ++i)
13141 if (*op_txt[i])
13142 {
13143 if (needcomma)
13144 (*info->fprintf_func) (info->stream, ",");
13145 if (op_index[i] != -1 && !op_riprel[i])
13146 (*info->print_address_func) ((bfd_vma) op_address[op_index[i]], info);
13147 else
13148 (*info->fprintf_func) (info->stream, "%s", op_txt[i]);
13149 needcomma = 1;
13150 }
050dfa73 13151
ce518a5f 13152 for (i = 0; i < MAX_OPERANDS; i++)
52b15da3
JH
13153 if (op_index[i] != -1 && op_riprel[i])
13154 {
13155 (*info->fprintf_func) (info->stream, " # ");
13156 (*info->print_address_func) ((bfd_vma) (start_pc + codep - start_codep
13157 + op_address[op_index[i]]), info);
185b1163 13158 break;
52b15da3 13159 }
e396998b 13160 return codep - priv.the_buffer;
252b5132
RH
13161}
13162
6439fc28 13163static const char *float_mem[] = {
252b5132 13164 /* d8 */
7c52e0e8
L
13165 "fadd{s|}",
13166 "fmul{s|}",
13167 "fcom{s|}",
13168 "fcomp{s|}",
13169 "fsub{s|}",
13170 "fsubr{s|}",
13171 "fdiv{s|}",
13172 "fdivr{s|}",
db6eb5be 13173 /* d9 */
7c52e0e8 13174 "fld{s|}",
252b5132 13175 "(bad)",
7c52e0e8
L
13176 "fst{s|}",
13177 "fstp{s|}",
9306ca4a 13178 "fldenvIC",
252b5132 13179 "fldcw",
9306ca4a 13180 "fNstenvIC",
252b5132
RH
13181 "fNstcw",
13182 /* da */
7c52e0e8
L
13183 "fiadd{l|}",
13184 "fimul{l|}",
13185 "ficom{l|}",
13186 "ficomp{l|}",
13187 "fisub{l|}",
13188 "fisubr{l|}",
13189 "fidiv{l|}",
13190 "fidivr{l|}",
252b5132 13191 /* db */
7c52e0e8
L
13192 "fild{l|}",
13193 "fisttp{l|}",
13194 "fist{l|}",
13195 "fistp{l|}",
252b5132 13196 "(bad)",
6439fc28 13197 "fld{t||t|}",
252b5132 13198 "(bad)",
6439fc28 13199 "fstp{t||t|}",
252b5132 13200 /* dc */
7c52e0e8
L
13201 "fadd{l|}",
13202 "fmul{l|}",
13203 "fcom{l|}",
13204 "fcomp{l|}",
13205 "fsub{l|}",
13206 "fsubr{l|}",
13207 "fdiv{l|}",
13208 "fdivr{l|}",
252b5132 13209 /* dd */
7c52e0e8
L
13210 "fld{l|}",
13211 "fisttp{ll|}",
13212 "fst{l||}",
13213 "fstp{l|}",
9306ca4a 13214 "frstorIC",
252b5132 13215 "(bad)",
9306ca4a 13216 "fNsaveIC",
252b5132
RH
13217 "fNstsw",
13218 /* de */
13219 "fiadd",
13220 "fimul",
13221 "ficom",
13222 "ficomp",
13223 "fisub",
13224 "fisubr",
13225 "fidiv",
13226 "fidivr",
13227 /* df */
13228 "fild",
ca164297 13229 "fisttp",
252b5132
RH
13230 "fist",
13231 "fistp",
13232 "fbld",
7c52e0e8 13233 "fild{ll|}",
252b5132 13234 "fbstp",
7c52e0e8 13235 "fistp{ll|}",
1d9f512f
AM
13236};
13237
13238static const unsigned char float_mem_mode[] = {
13239 /* d8 */
13240 d_mode,
13241 d_mode,
13242 d_mode,
13243 d_mode,
13244 d_mode,
13245 d_mode,
13246 d_mode,
13247 d_mode,
13248 /* d9 */
13249 d_mode,
13250 0,
13251 d_mode,
13252 d_mode,
13253 0,
13254 w_mode,
13255 0,
13256 w_mode,
13257 /* da */
13258 d_mode,
13259 d_mode,
13260 d_mode,
13261 d_mode,
13262 d_mode,
13263 d_mode,
13264 d_mode,
13265 d_mode,
13266 /* db */
13267 d_mode,
13268 d_mode,
13269 d_mode,
13270 d_mode,
13271 0,
9306ca4a 13272 t_mode,
1d9f512f 13273 0,
9306ca4a 13274 t_mode,
1d9f512f
AM
13275 /* dc */
13276 q_mode,
13277 q_mode,
13278 q_mode,
13279 q_mode,
13280 q_mode,
13281 q_mode,
13282 q_mode,
13283 q_mode,
13284 /* dd */
13285 q_mode,
13286 q_mode,
13287 q_mode,
13288 q_mode,
13289 0,
13290 0,
13291 0,
13292 w_mode,
13293 /* de */
13294 w_mode,
13295 w_mode,
13296 w_mode,
13297 w_mode,
13298 w_mode,
13299 w_mode,
13300 w_mode,
13301 w_mode,
13302 /* df */
13303 w_mode,
13304 w_mode,
13305 w_mode,
13306 w_mode,
9306ca4a 13307 t_mode,
1d9f512f 13308 q_mode,
9306ca4a 13309 t_mode,
1d9f512f 13310 q_mode
252b5132
RH
13311};
13312
ce518a5f
L
13313#define ST { OP_ST, 0 }
13314#define STi { OP_STi, 0 }
252b5132 13315
4efba78c
L
13316#define FGRPd9_2 NULL, { { NULL, 0 } }
13317#define FGRPd9_4 NULL, { { NULL, 1 } }
13318#define FGRPd9_5 NULL, { { NULL, 2 } }
13319#define FGRPd9_6 NULL, { { NULL, 3 } }
13320#define FGRPd9_7 NULL, { { NULL, 4 } }
13321#define FGRPda_5 NULL, { { NULL, 5 } }
13322#define FGRPdb_4 NULL, { { NULL, 6 } }
13323#define FGRPde_3 NULL, { { NULL, 7 } }
13324#define FGRPdf_4 NULL, { { NULL, 8 } }
252b5132 13325
2da11e11 13326static const struct dis386 float_reg[][8] = {
252b5132
RH
13327 /* d8 */
13328 {
ce518a5f
L
13329 { "fadd", { ST, STi } },
13330 { "fmul", { ST, STi } },
13331 { "fcom", { STi } },
13332 { "fcomp", { STi } },
13333 { "fsub", { ST, STi } },
13334 { "fsubr", { ST, STi } },
13335 { "fdiv", { ST, STi } },
13336 { "fdivr", { ST, STi } },
252b5132
RH
13337 },
13338 /* d9 */
13339 {
ce518a5f
L
13340 { "fld", { STi } },
13341 { "fxch", { STi } },
252b5132 13342 { FGRPd9_2 },
592d1631 13343 { Bad_Opcode },
252b5132
RH
13344 { FGRPd9_4 },
13345 { FGRPd9_5 },
13346 { FGRPd9_6 },
13347 { FGRPd9_7 },
13348 },
13349 /* da */
13350 {
ce518a5f
L
13351 { "fcmovb", { ST, STi } },
13352 { "fcmove", { ST, STi } },
13353 { "fcmovbe",{ ST, STi } },
13354 { "fcmovu", { ST, STi } },
592d1631 13355 { Bad_Opcode },
252b5132 13356 { FGRPda_5 },
592d1631
L
13357 { Bad_Opcode },
13358 { Bad_Opcode },
252b5132
RH
13359 },
13360 /* db */
13361 {
ce518a5f
L
13362 { "fcmovnb",{ ST, STi } },
13363 { "fcmovne",{ ST, STi } },
13364 { "fcmovnbe",{ ST, STi } },
13365 { "fcmovnu",{ ST, STi } },
252b5132 13366 { FGRPdb_4 },
ce518a5f
L
13367 { "fucomi", { ST, STi } },
13368 { "fcomi", { ST, STi } },
592d1631 13369 { Bad_Opcode },
252b5132
RH
13370 },
13371 /* dc */
13372 {
ce518a5f
L
13373 { "fadd", { STi, ST } },
13374 { "fmul", { STi, ST } },
592d1631
L
13375 { Bad_Opcode },
13376 { Bad_Opcode },
9d141669
L
13377 { "fsub!M", { STi, ST } },
13378 { "fsubM", { STi, ST } },
13379 { "fdiv!M", { STi, ST } },
13380 { "fdivM", { STi, ST } },
252b5132
RH
13381 },
13382 /* dd */
13383 {
ce518a5f 13384 { "ffree", { STi } },
592d1631 13385 { Bad_Opcode },
ce518a5f
L
13386 { "fst", { STi } },
13387 { "fstp", { STi } },
13388 { "fucom", { STi } },
13389 { "fucomp", { STi } },
592d1631
L
13390 { Bad_Opcode },
13391 { Bad_Opcode },
252b5132
RH
13392 },
13393 /* de */
13394 {
ce518a5f
L
13395 { "faddp", { STi, ST } },
13396 { "fmulp", { STi, ST } },
592d1631 13397 { Bad_Opcode },
252b5132 13398 { FGRPde_3 },
9d141669
L
13399 { "fsub!Mp", { STi, ST } },
13400 { "fsubMp", { STi, ST } },
13401 { "fdiv!Mp", { STi, ST } },
13402 { "fdivMp", { STi, ST } },
252b5132
RH
13403 },
13404 /* df */
13405 {
ce518a5f 13406 { "ffreep", { STi } },
592d1631
L
13407 { Bad_Opcode },
13408 { Bad_Opcode },
13409 { Bad_Opcode },
252b5132 13410 { FGRPdf_4 },
ce518a5f
L
13411 { "fucomip", { ST, STi } },
13412 { "fcomip", { ST, STi } },
592d1631 13413 { Bad_Opcode },
252b5132
RH
13414 },
13415};
13416
252b5132
RH
13417static char *fgrps[][8] = {
13418 /* d9_2 0 */
13419 {
13420 "fnop","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
13421 },
13422
13423 /* d9_4 1 */
13424 {
13425 "fchs","fabs","(bad)","(bad)","ftst","fxam","(bad)","(bad)",
13426 },
13427
13428 /* d9_5 2 */
13429 {
13430 "fld1","fldl2t","fldl2e","fldpi","fldlg2","fldln2","fldz","(bad)",
13431 },
13432
13433 /* d9_6 3 */
13434 {
13435 "f2xm1","fyl2x","fptan","fpatan","fxtract","fprem1","fdecstp","fincstp",
13436 },
13437
13438 /* d9_7 4 */
13439 {
13440 "fprem","fyl2xp1","fsqrt","fsincos","frndint","fscale","fsin","fcos",
13441 },
13442
13443 /* da_5 5 */
13444 {
13445 "(bad)","fucompp","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
13446 },
13447
13448 /* db_4 6 */
13449 {
309d3373
JB
13450 "fNeni(8087 only)","fNdisi(8087 only)","fNclex","fNinit",
13451 "fNsetpm(287 only)","frstpm(287 only)","(bad)","(bad)",
252b5132
RH
13452 },
13453
13454 /* de_3 7 */
13455 {
13456 "(bad)","fcompp","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
13457 },
13458
13459 /* df_4 8 */
13460 {
13461 "fNstsw","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
13462 },
13463};
13464
b6169b20
L
13465static void
13466swap_operand (void)
13467{
13468 mnemonicendp[0] = '.';
13469 mnemonicendp[1] = 's';
13470 mnemonicendp += 2;
13471}
13472
b844680a
L
13473static void
13474OP_Skip_MODRM (int bytemode ATTRIBUTE_UNUSED,
13475 int sizeflag ATTRIBUTE_UNUSED)
13476{
13477 /* Skip mod/rm byte. */
13478 MODRM_CHECK;
13479 codep++;
13480}
13481
252b5132 13482static void
26ca5450 13483dofloat (int sizeflag)
252b5132 13484{
2da11e11 13485 const struct dis386 *dp;
252b5132
RH
13486 unsigned char floatop;
13487
13488 floatop = codep[-1];
13489
7967e09e 13490 if (modrm.mod != 3)
252b5132 13491 {
7967e09e 13492 int fp_indx = (floatop - 0xd8) * 8 + modrm.reg;
1d9f512f
AM
13493
13494 putop (float_mem[fp_indx], sizeflag);
ce518a5f 13495 obufp = op_out[0];
6e50d963 13496 op_ad = 2;
1d9f512f 13497 OP_E (float_mem_mode[fp_indx], sizeflag);
252b5132
RH
13498 return;
13499 }
6608db57 13500 /* Skip mod/rm byte. */
4bba6815 13501 MODRM_CHECK;
252b5132
RH
13502 codep++;
13503
7967e09e 13504 dp = &float_reg[floatop - 0xd8][modrm.reg];
252b5132
RH
13505 if (dp->name == NULL)
13506 {
7967e09e 13507 putop (fgrps[dp->op[0].bytemode][modrm.rm], sizeflag);
252b5132 13508
6608db57 13509 /* Instruction fnstsw is only one with strange arg. */
252b5132 13510 if (floatop == 0xdf && codep[-1] == 0xe0)
ce518a5f 13511 strcpy (op_out[0], names16[0]);
252b5132
RH
13512 }
13513 else
13514 {
13515 putop (dp->name, sizeflag);
13516
ce518a5f 13517 obufp = op_out[0];
6e50d963 13518 op_ad = 2;
ce518a5f
L
13519 if (dp->op[0].rtn)
13520 (*dp->op[0].rtn) (dp->op[0].bytemode, sizeflag);
6e50d963 13521
ce518a5f 13522 obufp = op_out[1];
6e50d963 13523 op_ad = 1;
ce518a5f
L
13524 if (dp->op[1].rtn)
13525 (*dp->op[1].rtn) (dp->op[1].bytemode, sizeflag);
252b5132
RH
13526 }
13527}
13528
9ce09ba2
RM
13529/* Like oappend (below), but S is a string starting with '%'.
13530 In Intel syntax, the '%' is elided. */
13531static void
13532oappend_maybe_intel (const char *s)
13533{
13534 oappend (s + intel_syntax);
13535}
13536
252b5132 13537static void
26ca5450 13538OP_ST (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 13539{
9ce09ba2 13540 oappend_maybe_intel ("%st");
252b5132
RH
13541}
13542
252b5132 13543static void
26ca5450 13544OP_STi (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 13545{
7967e09e 13546 sprintf (scratchbuf, "%%st(%d)", modrm.rm);
9ce09ba2 13547 oappend_maybe_intel (scratchbuf);
252b5132
RH
13548}
13549
6608db57 13550/* Capital letters in template are macros. */
6439fc28 13551static int
d3ce72d0 13552putop (const char *in_template, int sizeflag)
252b5132 13553{
2da11e11 13554 const char *p;
9306ca4a 13555 int alt = 0;
9d141669 13556 int cond = 1;
98b528ac
L
13557 unsigned int l = 0, len = 1;
13558 char last[4];
13559
13560#define SAVE_LAST(c) \
13561 if (l < len && l < sizeof (last)) \
13562 last[l++] = c; \
13563 else \
13564 abort ();
252b5132 13565
d3ce72d0 13566 for (p = in_template; *p; p++)
252b5132
RH
13567 {
13568 switch (*p)
13569 {
13570 default:
13571 *obufp++ = *p;
13572 break;
98b528ac
L
13573 case '%':
13574 len++;
13575 break;
9d141669
L
13576 case '!':
13577 cond = 0;
13578 break;
6439fc28
AM
13579 case '{':
13580 alt = 0;
13581 if (intel_syntax)
6439fc28
AM
13582 {
13583 while (*++p != '|')
7c52e0e8
L
13584 if (*p == '}' || *p == '\0')
13585 abort ();
6439fc28 13586 }
9306ca4a
JB
13587 /* Fall through. */
13588 case 'I':
13589 alt = 1;
13590 continue;
6439fc28
AM
13591 case '|':
13592 while (*++p != '}')
13593 {
13594 if (*p == '\0')
13595 abort ();
13596 }
13597 break;
13598 case '}':
13599 break;
252b5132 13600 case 'A':
db6eb5be
AM
13601 if (intel_syntax)
13602 break;
7967e09e 13603 if (modrm.mod != 3 || (sizeflag & SUFFIX_ALWAYS))
252b5132
RH
13604 *obufp++ = 'b';
13605 break;
13606 case 'B':
4b06377f
L
13607 if (l == 0 && len == 1)
13608 {
13609case_B:
13610 if (intel_syntax)
13611 break;
13612 if (sizeflag & SUFFIX_ALWAYS)
13613 *obufp++ = 'b';
13614 }
13615 else
13616 {
13617 if (l != 1
13618 || len != 2
13619 || last[0] != 'L')
13620 {
13621 SAVE_LAST (*p);
13622 break;
13623 }
13624
13625 if (address_mode == mode_64bit
13626 && !(prefixes & PREFIX_ADDR))
13627 {
13628 *obufp++ = 'a';
13629 *obufp++ = 'b';
13630 *obufp++ = 's';
13631 }
13632
13633 goto case_B;
13634 }
252b5132 13635 break;
9306ca4a
JB
13636 case 'C':
13637 if (intel_syntax && !alt)
13638 break;
13639 if ((prefixes & PREFIX_DATA) || (sizeflag & SUFFIX_ALWAYS))
13640 {
13641 if (sizeflag & DFLAG)
13642 *obufp++ = intel_syntax ? 'd' : 'l';
13643 else
13644 *obufp++ = intel_syntax ? 'w' : 's';
13645 used_prefixes |= (prefixes & PREFIX_DATA);
13646 }
13647 break;
ed7841b3
JB
13648 case 'D':
13649 if (intel_syntax || !(sizeflag & SUFFIX_ALWAYS))
13650 break;
161a04f6 13651 USED_REX (REX_W);
7967e09e 13652 if (modrm.mod == 3)
ed7841b3 13653 {
161a04f6 13654 if (rex & REX_W)
ed7841b3 13655 *obufp++ = 'q';
ed7841b3 13656 else
f16cd0d5
L
13657 {
13658 if (sizeflag & DFLAG)
13659 *obufp++ = intel_syntax ? 'd' : 'l';
13660 else
13661 *obufp++ = 'w';
13662 used_prefixes |= (prefixes & PREFIX_DATA);
13663 }
ed7841b3
JB
13664 }
13665 else
13666 *obufp++ = 'w';
13667 break;
252b5132 13668 case 'E': /* For jcxz/jecxz */
cb712a9e 13669 if (address_mode == mode_64bit)
c1a64871
JH
13670 {
13671 if (sizeflag & AFLAG)
13672 *obufp++ = 'r';
13673 else
13674 *obufp++ = 'e';
13675 }
13676 else
13677 if (sizeflag & AFLAG)
13678 *obufp++ = 'e';
3ffd33cf
AM
13679 used_prefixes |= (prefixes & PREFIX_ADDR);
13680 break;
13681 case 'F':
db6eb5be
AM
13682 if (intel_syntax)
13683 break;
e396998b 13684 if ((prefixes & PREFIX_ADDR) || (sizeflag & SUFFIX_ALWAYS))
3ffd33cf
AM
13685 {
13686 if (sizeflag & AFLAG)
cb712a9e 13687 *obufp++ = address_mode == mode_64bit ? 'q' : 'l';
3ffd33cf 13688 else
cb712a9e 13689 *obufp++ = address_mode == mode_64bit ? 'l' : 'w';
3ffd33cf
AM
13690 used_prefixes |= (prefixes & PREFIX_ADDR);
13691 }
252b5132 13692 break;
52fd6d94
JB
13693 case 'G':
13694 if (intel_syntax || (obufp[-1] != 's' && !(sizeflag & SUFFIX_ALWAYS)))
13695 break;
161a04f6 13696 if ((rex & REX_W) || (sizeflag & DFLAG))
52fd6d94
JB
13697 *obufp++ = 'l';
13698 else
13699 *obufp++ = 'w';
161a04f6 13700 if (!(rex & REX_W))
52fd6d94
JB
13701 used_prefixes |= (prefixes & PREFIX_DATA);
13702 break;
5dd0794d 13703 case 'H':
db6eb5be
AM
13704 if (intel_syntax)
13705 break;
5dd0794d
AM
13706 if ((prefixes & (PREFIX_CS | PREFIX_DS)) == PREFIX_CS
13707 || (prefixes & (PREFIX_CS | PREFIX_DS)) == PREFIX_DS)
13708 {
13709 used_prefixes |= prefixes & (PREFIX_CS | PREFIX_DS);
13710 *obufp++ = ',';
13711 *obufp++ = 'p';
13712 if (prefixes & PREFIX_DS)
13713 *obufp++ = 't';
13714 else
13715 *obufp++ = 'n';
13716 }
13717 break;
9306ca4a
JB
13718 case 'J':
13719 if (intel_syntax)
13720 break;
13721 *obufp++ = 'l';
13722 break;
42903f7f
L
13723 case 'K':
13724 USED_REX (REX_W);
13725 if (rex & REX_W)
13726 *obufp++ = 'q';
13727 else
13728 *obufp++ = 'd';
13729 break;
6dd5059a
L
13730 case 'Z':
13731 if (intel_syntax)
13732 break;
13733 if (address_mode == mode_64bit && (sizeflag & SUFFIX_ALWAYS))
13734 {
13735 *obufp++ = 'q';
13736 break;
13737 }
13738 /* Fall through. */
98b528ac 13739 goto case_L;
252b5132 13740 case 'L':
98b528ac
L
13741 if (l != 0 || len != 1)
13742 {
13743 SAVE_LAST (*p);
13744 break;
13745 }
13746case_L:
db6eb5be
AM
13747 if (intel_syntax)
13748 break;
252b5132
RH
13749 if (sizeflag & SUFFIX_ALWAYS)
13750 *obufp++ = 'l';
252b5132 13751 break;
9d141669
L
13752 case 'M':
13753 if (intel_mnemonic != cond)
13754 *obufp++ = 'r';
13755 break;
252b5132
RH
13756 case 'N':
13757 if ((prefixes & PREFIX_FWAIT) == 0)
13758 *obufp++ = 'n';
7d421014
ILT
13759 else
13760 used_prefixes |= PREFIX_FWAIT;
252b5132 13761 break;
52b15da3 13762 case 'O':
161a04f6
L
13763 USED_REX (REX_W);
13764 if (rex & REX_W)
6439fc28 13765 *obufp++ = 'o';
a35ca55a
JB
13766 else if (intel_syntax && (sizeflag & DFLAG))
13767 *obufp++ = 'q';
52b15da3
JH
13768 else
13769 *obufp++ = 'd';
161a04f6 13770 if (!(rex & REX_W))
a35ca55a 13771 used_prefixes |= (prefixes & PREFIX_DATA);
52b15da3 13772 break;
6439fc28 13773 case 'T':
d9e3625e
L
13774 if (!intel_syntax
13775 && address_mode == mode_64bit
7bb15c6f 13776 && ((sizeflag & DFLAG) || (rex & REX_W)))
6439fc28
AM
13777 {
13778 *obufp++ = 'q';
13779 break;
13780 }
6608db57 13781 /* Fall through. */
252b5132 13782 case 'P':
db6eb5be 13783 if (intel_syntax)
d9e3625e
L
13784 {
13785 if ((rex & REX_W) == 0
13786 && (prefixes & PREFIX_DATA))
13787 {
13788 if ((sizeflag & DFLAG) == 0)
13789 *obufp++ = 'w';
13790 used_prefixes |= (prefixes & PREFIX_DATA);
13791 }
13792 break;
13793 }
252b5132 13794 if ((prefixes & PREFIX_DATA)
161a04f6 13795 || (rex & REX_W)
e396998b 13796 || (sizeflag & SUFFIX_ALWAYS))
252b5132 13797 {
161a04f6
L
13798 USED_REX (REX_W);
13799 if (rex & REX_W)
52b15da3 13800 *obufp++ = 'q';
c2419411 13801 else
52b15da3
JH
13802 {
13803 if (sizeflag & DFLAG)
13804 *obufp++ = 'l';
13805 else
13806 *obufp++ = 'w';
f16cd0d5 13807 used_prefixes |= (prefixes & PREFIX_DATA);
52b15da3 13808 }
252b5132
RH
13809 }
13810 break;
6439fc28 13811 case 'U':
db6eb5be
AM
13812 if (intel_syntax)
13813 break;
7bb15c6f 13814 if (address_mode == mode_64bit
6c067bbb 13815 && ((sizeflag & DFLAG) || (rex & REX_W)))
6439fc28 13816 {
7967e09e 13817 if (modrm.mod != 3 || (sizeflag & SUFFIX_ALWAYS))
1a114b12 13818 *obufp++ = 'q';
6439fc28
AM
13819 break;
13820 }
6608db57 13821 /* Fall through. */
98b528ac 13822 goto case_Q;
252b5132 13823 case 'Q':
98b528ac 13824 if (l == 0 && len == 1)
252b5132 13825 {
98b528ac
L
13826case_Q:
13827 if (intel_syntax && !alt)
13828 break;
13829 USED_REX (REX_W);
13830 if (modrm.mod != 3 || (sizeflag & SUFFIX_ALWAYS))
52b15da3 13831 {
98b528ac
L
13832 if (rex & REX_W)
13833 *obufp++ = 'q';
52b15da3 13834 else
98b528ac
L
13835 {
13836 if (sizeflag & DFLAG)
13837 *obufp++ = intel_syntax ? 'd' : 'l';
13838 else
13839 *obufp++ = 'w';
f16cd0d5 13840 used_prefixes |= (prefixes & PREFIX_DATA);
98b528ac 13841 }
52b15da3 13842 }
98b528ac
L
13843 }
13844 else
13845 {
13846 if (l != 1 || len != 2 || last[0] != 'L')
13847 {
13848 SAVE_LAST (*p);
13849 break;
13850 }
13851 if (intel_syntax
13852 || (modrm.mod == 3 && !(sizeflag & SUFFIX_ALWAYS)))
13853 break;
13854 if ((rex & REX_W))
13855 {
13856 USED_REX (REX_W);
13857 *obufp++ = 'q';
13858 }
13859 else
13860 *obufp++ = 'l';
252b5132
RH
13861 }
13862 break;
13863 case 'R':
161a04f6
L
13864 USED_REX (REX_W);
13865 if (rex & REX_W)
a35ca55a
JB
13866 *obufp++ = 'q';
13867 else if (sizeflag & DFLAG)
c608c12e 13868 {
a35ca55a 13869 if (intel_syntax)
c608c12e 13870 *obufp++ = 'd';
c608c12e 13871 else
a35ca55a 13872 *obufp++ = 'l';
c608c12e 13873 }
252b5132 13874 else
a35ca55a
JB
13875 *obufp++ = 'w';
13876 if (intel_syntax && !p[1]
161a04f6 13877 && ((rex & REX_W) || (sizeflag & DFLAG)))
a35ca55a 13878 *obufp++ = 'e';
161a04f6 13879 if (!(rex & REX_W))
52b15da3 13880 used_prefixes |= (prefixes & PREFIX_DATA);
252b5132 13881 break;
1a114b12 13882 case 'V':
4b06377f 13883 if (l == 0 && len == 1)
1a114b12 13884 {
4b06377f
L
13885 if (intel_syntax)
13886 break;
7bb15c6f 13887 if (address_mode == mode_64bit
6c067bbb 13888 && ((sizeflag & DFLAG) || (rex & REX_W)))
4b06377f
L
13889 {
13890 if (sizeflag & SUFFIX_ALWAYS)
13891 *obufp++ = 'q';
13892 break;
13893 }
13894 }
13895 else
13896 {
13897 if (l != 1
13898 || len != 2
13899 || last[0] != 'L')
13900 {
13901 SAVE_LAST (*p);
13902 break;
13903 }
13904
13905 if (rex & REX_W)
13906 {
13907 *obufp++ = 'a';
13908 *obufp++ = 'b';
13909 *obufp++ = 's';
13910 }
1a114b12
JB
13911 }
13912 /* Fall through. */
4b06377f 13913 goto case_S;
252b5132 13914 case 'S':
4b06377f 13915 if (l == 0 && len == 1)
252b5132 13916 {
4b06377f
L
13917case_S:
13918 if (intel_syntax)
13919 break;
13920 if (sizeflag & SUFFIX_ALWAYS)
52b15da3 13921 {
4b06377f
L
13922 if (rex & REX_W)
13923 *obufp++ = 'q';
52b15da3 13924 else
4b06377f
L
13925 {
13926 if (sizeflag & DFLAG)
13927 *obufp++ = 'l';
13928 else
13929 *obufp++ = 'w';
13930 used_prefixes |= (prefixes & PREFIX_DATA);
13931 }
13932 }
13933 }
13934 else
13935 {
13936 if (l != 1
13937 || len != 2
13938 || last[0] != 'L')
13939 {
13940 SAVE_LAST (*p);
13941 break;
52b15da3 13942 }
4b06377f
L
13943
13944 if (address_mode == mode_64bit
13945 && !(prefixes & PREFIX_ADDR))
13946 {
13947 *obufp++ = 'a';
13948 *obufp++ = 'b';
13949 *obufp++ = 's';
13950 }
13951
13952 goto case_S;
252b5132 13953 }
252b5132 13954 break;
041bd2e0 13955 case 'X':
c0f3af97
L
13956 if (l != 0 || len != 1)
13957 {
13958 SAVE_LAST (*p);
13959 break;
13960 }
13961 if (need_vex && vex.prefix)
13962 {
13963 if (vex.prefix == DATA_PREFIX_OPCODE)
13964 *obufp++ = 'd';
13965 else
13966 *obufp++ = 's';
13967 }
041bd2e0 13968 else
f16cd0d5
L
13969 {
13970 if (prefixes & PREFIX_DATA)
13971 *obufp++ = 'd';
13972 else
13973 *obufp++ = 's';
13974 used_prefixes |= (prefixes & PREFIX_DATA);
13975 }
041bd2e0 13976 break;
76f227a5 13977 case 'Y':
c0f3af97 13978 if (l == 0 && len == 1)
76f227a5 13979 {
c0f3af97
L
13980 if (intel_syntax || !(sizeflag & SUFFIX_ALWAYS))
13981 break;
13982 if (rex & REX_W)
13983 {
13984 USED_REX (REX_W);
13985 *obufp++ = 'q';
13986 }
13987 break;
13988 }
13989 else
13990 {
13991 if (l != 1 || len != 2 || last[0] != 'X')
13992 {
13993 SAVE_LAST (*p);
13994 break;
13995 }
13996 if (!need_vex)
13997 abort ();
13998 if (intel_syntax
13999 || (modrm.mod == 3 && !(sizeflag & SUFFIX_ALWAYS)))
14000 break;
14001 switch (vex.length)
14002 {
14003 case 128:
14004 *obufp++ = 'x';
14005 break;
14006 case 256:
14007 *obufp++ = 'y';
14008 break;
14009 default:
14010 abort ();
14011 }
76f227a5
JH
14012 }
14013 break;
252b5132 14014 case 'W':
0bfee649 14015 if (l == 0 && len == 1)
a35ca55a 14016 {
0bfee649
L
14017 /* operand size flag for cwtl, cbtw */
14018 USED_REX (REX_W);
14019 if (rex & REX_W)
14020 {
14021 if (intel_syntax)
14022 *obufp++ = 'd';
14023 else
14024 *obufp++ = 'l';
14025 }
14026 else if (sizeflag & DFLAG)
14027 *obufp++ = 'w';
a35ca55a 14028 else
0bfee649
L
14029 *obufp++ = 'b';
14030 if (!(rex & REX_W))
14031 used_prefixes |= (prefixes & PREFIX_DATA);
a35ca55a 14032 }
252b5132 14033 else
0bfee649 14034 {
6c30d220
L
14035 if (l != 1
14036 || len != 2
14037 || (last[0] != 'X'
14038 && last[0] != 'L'))
0bfee649
L
14039 {
14040 SAVE_LAST (*p);
14041 break;
14042 }
14043 if (!need_vex)
14044 abort ();
6c30d220
L
14045 if (last[0] == 'X')
14046 *obufp++ = vex.w ? 'd': 's';
14047 else
14048 *obufp++ = vex.w ? 'q': 'd';
0bfee649 14049 }
252b5132
RH
14050 break;
14051 }
9306ca4a 14052 alt = 0;
252b5132
RH
14053 }
14054 *obufp = 0;
ea397f5b 14055 mnemonicendp = obufp;
6439fc28 14056 return 0;
252b5132
RH
14057}
14058
14059static void
26ca5450 14060oappend (const char *s)
252b5132 14061{
ea397f5b 14062 obufp = stpcpy (obufp, s);
252b5132
RH
14063}
14064
14065static void
26ca5450 14066append_seg (void)
252b5132 14067{
285ca992
L
14068 /* Only print the active segment register. */
14069 if (!active_seg_prefix)
14070 return;
14071
14072 used_prefixes |= active_seg_prefix;
14073 switch (active_seg_prefix)
7d421014 14074 {
285ca992 14075 case PREFIX_CS:
9ce09ba2 14076 oappend_maybe_intel ("%cs:");
285ca992
L
14077 break;
14078 case PREFIX_DS:
9ce09ba2 14079 oappend_maybe_intel ("%ds:");
285ca992
L
14080 break;
14081 case PREFIX_SS:
9ce09ba2 14082 oappend_maybe_intel ("%ss:");
285ca992
L
14083 break;
14084 case PREFIX_ES:
9ce09ba2 14085 oappend_maybe_intel ("%es:");
285ca992
L
14086 break;
14087 case PREFIX_FS:
9ce09ba2 14088 oappend_maybe_intel ("%fs:");
285ca992
L
14089 break;
14090 case PREFIX_GS:
9ce09ba2 14091 oappend_maybe_intel ("%gs:");
285ca992
L
14092 break;
14093 default:
14094 break;
7d421014 14095 }
252b5132
RH
14096}
14097
14098static void
26ca5450 14099OP_indirE (int bytemode, int sizeflag)
252b5132
RH
14100{
14101 if (!intel_syntax)
14102 oappend ("*");
14103 OP_E (bytemode, sizeflag);
14104}
14105
52b15da3 14106static void
26ca5450 14107print_operand_value (char *buf, int hex, bfd_vma disp)
52b15da3 14108{
cb712a9e 14109 if (address_mode == mode_64bit)
52b15da3
JH
14110 {
14111 if (hex)
14112 {
14113 char tmp[30];
14114 int i;
14115 buf[0] = '0';
14116 buf[1] = 'x';
14117 sprintf_vma (tmp, disp);
6608db57 14118 for (i = 0; tmp[i] == '0' && tmp[i + 1]; i++);
52b15da3
JH
14119 strcpy (buf + 2, tmp + i);
14120 }
14121 else
14122 {
14123 bfd_signed_vma v = disp;
14124 char tmp[30];
14125 int i;
14126 if (v < 0)
14127 {
14128 *(buf++) = '-';
14129 v = -disp;
6608db57 14130 /* Check for possible overflow on 0x8000000000000000. */
52b15da3
JH
14131 if (v < 0)
14132 {
14133 strcpy (buf, "9223372036854775808");
14134 return;
14135 }
14136 }
14137 if (!v)
14138 {
14139 strcpy (buf, "0");
14140 return;
14141 }
14142
14143 i = 0;
14144 tmp[29] = 0;
14145 while (v)
14146 {
6608db57 14147 tmp[28 - i] = (v % 10) + '0';
52b15da3
JH
14148 v /= 10;
14149 i++;
14150 }
14151 strcpy (buf, tmp + 29 - i);
14152 }
14153 }
14154 else
14155 {
14156 if (hex)
14157 sprintf (buf, "0x%x", (unsigned int) disp);
14158 else
14159 sprintf (buf, "%d", (int) disp);
14160 }
14161}
14162
5d669648
L
14163/* Put DISP in BUF as signed hex number. */
14164
14165static void
14166print_displacement (char *buf, bfd_vma disp)
14167{
14168 bfd_signed_vma val = disp;
14169 char tmp[30];
14170 int i, j = 0;
14171
14172 if (val < 0)
14173 {
14174 buf[j++] = '-';
14175 val = -disp;
14176
14177 /* Check for possible overflow. */
14178 if (val < 0)
14179 {
14180 switch (address_mode)
14181 {
14182 case mode_64bit:
14183 strcpy (buf + j, "0x8000000000000000");
14184 break;
14185 case mode_32bit:
14186 strcpy (buf + j, "0x80000000");
14187 break;
14188 case mode_16bit:
14189 strcpy (buf + j, "0x8000");
14190 break;
14191 }
14192 return;
14193 }
14194 }
14195
14196 buf[j++] = '0';
14197 buf[j++] = 'x';
14198
0af1713e 14199 sprintf_vma (tmp, (bfd_vma) val);
5d669648
L
14200 for (i = 0; tmp[i] == '0'; i++)
14201 continue;
14202 if (tmp[i] == '\0')
14203 i--;
14204 strcpy (buf + j, tmp + i);
14205}
14206
3f31e633
JB
14207static void
14208intel_operand_size (int bytemode, int sizeflag)
14209{
43234a1e
L
14210 if (vex.evex
14211 && vex.b
14212 && (bytemode == x_mode
14213 || bytemode == evex_half_bcst_xmmq_mode))
14214 {
14215 if (vex.w)
14216 oappend ("QWORD PTR ");
14217 else
14218 oappend ("DWORD PTR ");
14219 return;
14220 }
3f31e633
JB
14221 switch (bytemode)
14222 {
14223 case b_mode:
b6169b20 14224 case b_swap_mode:
42903f7f 14225 case dqb_mode:
1ba585e8 14226 case db_mode:
3f31e633
JB
14227 oappend ("BYTE PTR ");
14228 break;
14229 case w_mode:
1ba585e8 14230 case dw_mode:
3f31e633 14231 case dqw_mode:
1ba585e8 14232 case dqw_swap_mode:
3f31e633
JB
14233 oappend ("WORD PTR ");
14234 break;
1a114b12 14235 case stack_v_mode:
7bb15c6f 14236 if (address_mode == mode_64bit && ((sizeflag & DFLAG) || (rex & REX_W)))
3f31e633
JB
14237 {
14238 oappend ("QWORD PTR ");
3f31e633
JB
14239 break;
14240 }
14241 /* FALLTHRU */
14242 case v_mode:
b6169b20 14243 case v_swap_mode:
3f31e633 14244 case dq_mode:
161a04f6
L
14245 USED_REX (REX_W);
14246 if (rex & REX_W)
3f31e633 14247 oappend ("QWORD PTR ");
3f31e633 14248 else
f16cd0d5
L
14249 {
14250 if ((sizeflag & DFLAG) || bytemode == dq_mode)
14251 oappend ("DWORD PTR ");
14252 else
14253 oappend ("WORD PTR ");
14254 used_prefixes |= (prefixes & PREFIX_DATA);
14255 }
3f31e633 14256 break;
52fd6d94 14257 case z_mode:
161a04f6 14258 if ((rex & REX_W) || (sizeflag & DFLAG))
52fd6d94
JB
14259 *obufp++ = 'D';
14260 oappend ("WORD PTR ");
161a04f6 14261 if (!(rex & REX_W))
52fd6d94
JB
14262 used_prefixes |= (prefixes & PREFIX_DATA);
14263 break;
34b772a6
JB
14264 case a_mode:
14265 if (sizeflag & DFLAG)
14266 oappend ("QWORD PTR ");
14267 else
14268 oappend ("DWORD PTR ");
14269 used_prefixes |= (prefixes & PREFIX_DATA);
14270 break;
3f31e633 14271 case d_mode:
539f890d
L
14272 case d_scalar_mode:
14273 case d_scalar_swap_mode:
fa99fab2 14274 case d_swap_mode:
42903f7f 14275 case dqd_mode:
3f31e633
JB
14276 oappend ("DWORD PTR ");
14277 break;
14278 case q_mode:
539f890d
L
14279 case q_scalar_mode:
14280 case q_scalar_swap_mode:
b6169b20 14281 case q_swap_mode:
3f31e633
JB
14282 oappend ("QWORD PTR ");
14283 break;
14284 case m_mode:
cb712a9e 14285 if (address_mode == mode_64bit)
3f31e633
JB
14286 oappend ("QWORD PTR ");
14287 else
14288 oappend ("DWORD PTR ");
14289 break;
14290 case f_mode:
14291 if (sizeflag & DFLAG)
14292 oappend ("FWORD PTR ");
14293 else
14294 oappend ("DWORD PTR ");
14295 used_prefixes |= (prefixes & PREFIX_DATA);
14296 break;
14297 case t_mode:
14298 oappend ("TBYTE PTR ");
14299 break;
14300 case x_mode:
b6169b20 14301 case x_swap_mode:
43234a1e
L
14302 case evex_x_gscat_mode:
14303 case evex_x_nobcst_mode:
c0f3af97
L
14304 if (need_vex)
14305 {
14306 switch (vex.length)
14307 {
14308 case 128:
14309 oappend ("XMMWORD PTR ");
14310 break;
14311 case 256:
14312 oappend ("YMMWORD PTR ");
14313 break;
43234a1e
L
14314 case 512:
14315 oappend ("ZMMWORD PTR ");
14316 break;
c0f3af97
L
14317 default:
14318 abort ();
14319 }
14320 }
14321 else
14322 oappend ("XMMWORD PTR ");
14323 break;
14324 case xmm_mode:
3f31e633
JB
14325 oappend ("XMMWORD PTR ");
14326 break;
43234a1e
L
14327 case ymm_mode:
14328 oappend ("YMMWORD PTR ");
14329 break;
c0f3af97 14330 case xmmq_mode:
43234a1e 14331 case evex_half_bcst_xmmq_mode:
c0f3af97
L
14332 if (!need_vex)
14333 abort ();
14334
14335 switch (vex.length)
14336 {
14337 case 128:
14338 oappend ("QWORD PTR ");
14339 break;
14340 case 256:
14341 oappend ("XMMWORD PTR ");
14342 break;
43234a1e
L
14343 case 512:
14344 oappend ("YMMWORD PTR ");
14345 break;
c0f3af97
L
14346 default:
14347 abort ();
14348 }
14349 break;
6c30d220
L
14350 case xmm_mb_mode:
14351 if (!need_vex)
14352 abort ();
14353
14354 switch (vex.length)
14355 {
14356 case 128:
14357 case 256:
43234a1e 14358 case 512:
6c30d220
L
14359 oappend ("BYTE PTR ");
14360 break;
14361 default:
14362 abort ();
14363 }
14364 break;
14365 case xmm_mw_mode:
14366 if (!need_vex)
14367 abort ();
14368
14369 switch (vex.length)
14370 {
14371 case 128:
14372 case 256:
43234a1e 14373 case 512:
6c30d220
L
14374 oappend ("WORD PTR ");
14375 break;
14376 default:
14377 abort ();
14378 }
14379 break;
14380 case xmm_md_mode:
14381 if (!need_vex)
14382 abort ();
14383
14384 switch (vex.length)
14385 {
14386 case 128:
14387 case 256:
43234a1e 14388 case 512:
6c30d220
L
14389 oappend ("DWORD PTR ");
14390 break;
14391 default:
14392 abort ();
14393 }
14394 break;
14395 case xmm_mq_mode:
14396 if (!need_vex)
14397 abort ();
14398
14399 switch (vex.length)
14400 {
14401 case 128:
14402 case 256:
43234a1e 14403 case 512:
6c30d220
L
14404 oappend ("QWORD PTR ");
14405 break;
14406 default:
14407 abort ();
14408 }
14409 break;
14410 case xmmdw_mode:
14411 if (!need_vex)
14412 abort ();
14413
14414 switch (vex.length)
14415 {
14416 case 128:
14417 oappend ("WORD PTR ");
14418 break;
14419 case 256:
14420 oappend ("DWORD PTR ");
14421 break;
43234a1e
L
14422 case 512:
14423 oappend ("QWORD PTR ");
14424 break;
6c30d220
L
14425 default:
14426 abort ();
14427 }
14428 break;
14429 case xmmqd_mode:
14430 if (!need_vex)
14431 abort ();
14432
14433 switch (vex.length)
14434 {
14435 case 128:
14436 oappend ("DWORD PTR ");
14437 break;
14438 case 256:
14439 oappend ("QWORD PTR ");
14440 break;
43234a1e
L
14441 case 512:
14442 oappend ("XMMWORD PTR ");
14443 break;
6c30d220
L
14444 default:
14445 abort ();
14446 }
14447 break;
c0f3af97
L
14448 case ymmq_mode:
14449 if (!need_vex)
14450 abort ();
14451
14452 switch (vex.length)
14453 {
14454 case 128:
14455 oappend ("QWORD PTR ");
14456 break;
14457 case 256:
14458 oappend ("YMMWORD PTR ");
14459 break;
43234a1e
L
14460 case 512:
14461 oappend ("ZMMWORD PTR ");
14462 break;
c0f3af97
L
14463 default:
14464 abort ();
14465 }
14466 break;
6c30d220
L
14467 case ymmxmm_mode:
14468 if (!need_vex)
14469 abort ();
14470
14471 switch (vex.length)
14472 {
14473 case 128:
14474 case 256:
14475 oappend ("XMMWORD PTR ");
14476 break;
14477 default:
14478 abort ();
14479 }
14480 break;
fb9c77c7
L
14481 case o_mode:
14482 oappend ("OWORD PTR ");
14483 break;
43234a1e 14484 case xmm_mdq_mode:
0bfee649 14485 case vex_w_dq_mode:
1c480963 14486 case vex_scalar_w_dq_mode:
0bfee649
L
14487 if (!need_vex)
14488 abort ();
14489
14490 if (vex.w)
14491 oappend ("QWORD PTR ");
14492 else
14493 oappend ("DWORD PTR ");
14494 break;
43234a1e
L
14495 case vex_vsib_d_w_dq_mode:
14496 case vex_vsib_q_w_dq_mode:
14497 if (!need_vex)
14498 abort ();
14499
14500 if (!vex.evex)
14501 {
14502 if (vex.w)
14503 oappend ("QWORD PTR ");
14504 else
14505 oappend ("DWORD PTR ");
14506 }
14507 else
14508 {
b28d1bda
IT
14509 switch (vex.length)
14510 {
14511 case 128:
14512 oappend ("XMMWORD PTR ");
14513 break;
14514 case 256:
14515 oappend ("YMMWORD PTR ");
14516 break;
14517 case 512:
14518 oappend ("ZMMWORD PTR ");
14519 break;
14520 default:
14521 abort ();
14522 }
43234a1e
L
14523 }
14524 break;
5fc35d96
IT
14525 case vex_vsib_q_w_d_mode:
14526 case vex_vsib_d_w_d_mode:
b28d1bda 14527 if (!need_vex || !vex.evex)
5fc35d96
IT
14528 abort ();
14529
b28d1bda
IT
14530 switch (vex.length)
14531 {
14532 case 128:
14533 oappend ("QWORD PTR ");
14534 break;
14535 case 256:
14536 oappend ("XMMWORD PTR ");
14537 break;
14538 case 512:
14539 oappend ("YMMWORD PTR ");
14540 break;
14541 default:
14542 abort ();
14543 }
5fc35d96
IT
14544
14545 break;
1ba585e8
IT
14546 case mask_bd_mode:
14547 if (!need_vex || vex.length != 128)
14548 abort ();
14549 if (vex.w)
14550 oappend ("DWORD PTR ");
14551 else
14552 oappend ("BYTE PTR ");
14553 break;
43234a1e
L
14554 case mask_mode:
14555 if (!need_vex)
14556 abort ();
1ba585e8
IT
14557 if (vex.w)
14558 oappend ("QWORD PTR ");
14559 else
14560 oappend ("WORD PTR ");
43234a1e 14561 break;
6c75cc62 14562 case v_bnd_mode:
3f31e633
JB
14563 default:
14564 break;
14565 }
14566}
14567
252b5132 14568static void
c0f3af97 14569OP_E_register (int bytemode, int sizeflag)
252b5132 14570{
c0f3af97
L
14571 int reg = modrm.rm;
14572 const char **names;
252b5132 14573
c0f3af97
L
14574 USED_REX (REX_B);
14575 if ((rex & REX_B))
14576 reg += 8;
252b5132 14577
b6169b20 14578 if ((sizeflag & SUFFIX_ALWAYS)
1ba585e8
IT
14579 && (bytemode == b_swap_mode
14580 || bytemode == v_swap_mode
14581 || bytemode == dqw_swap_mode))
b6169b20
L
14582 swap_operand ();
14583
c0f3af97 14584 switch (bytemode)
252b5132 14585 {
c0f3af97 14586 case b_mode:
b6169b20 14587 case b_swap_mode:
c0f3af97
L
14588 USED_REX (0);
14589 if (rex)
14590 names = names8rex;
14591 else
14592 names = names8;
14593 break;
14594 case w_mode:
14595 names = names16;
14596 break;
14597 case d_mode:
1ba585e8
IT
14598 case dw_mode:
14599 case db_mode:
c0f3af97
L
14600 names = names32;
14601 break;
14602 case q_mode:
14603 names = names64;
14604 break;
14605 case m_mode:
6c75cc62 14606 case v_bnd_mode:
c0f3af97
L
14607 names = address_mode == mode_64bit ? names64 : names32;
14608 break;
7e8b059b
L
14609 case bnd_mode:
14610 names = names_bnd;
14611 break;
c0f3af97 14612 case stack_v_mode:
7bb15c6f 14613 if (address_mode == mode_64bit && ((sizeflag & DFLAG) || (rex & REX_W)))
252b5132 14614 {
c0f3af97 14615 names = names64;
252b5132 14616 break;
252b5132 14617 }
c0f3af97
L
14618 bytemode = v_mode;
14619 /* FALLTHRU */
14620 case v_mode:
b6169b20 14621 case v_swap_mode:
c0f3af97
L
14622 case dq_mode:
14623 case dqb_mode:
14624 case dqd_mode:
14625 case dqw_mode:
1ba585e8 14626 case dqw_swap_mode:
c0f3af97
L
14627 USED_REX (REX_W);
14628 if (rex & REX_W)
14629 names = names64;
c0f3af97 14630 else
f16cd0d5 14631 {
7bb15c6f 14632 if ((sizeflag & DFLAG)
f16cd0d5
L
14633 || (bytemode != v_mode
14634 && bytemode != v_swap_mode))
14635 names = names32;
14636 else
14637 names = names16;
14638 used_prefixes |= (prefixes & PREFIX_DATA);
14639 }
c0f3af97 14640 break;
1ba585e8 14641 case mask_bd_mode:
43234a1e
L
14642 case mask_mode:
14643 names = names_mask;
14644 break;
c0f3af97
L
14645 case 0:
14646 return;
14647 default:
14648 oappend (INTERNAL_DISASSEMBLER_ERROR);
252b5132
RH
14649 return;
14650 }
c0f3af97
L
14651 oappend (names[reg]);
14652}
14653
14654static void
c1e679ec 14655OP_E_memory (int bytemode, int sizeflag)
c0f3af97
L
14656{
14657 bfd_vma disp = 0;
14658 int add = (rex & REX_B) ? 8 : 0;
14659 int riprel = 0;
43234a1e
L
14660 int shift;
14661
14662 if (vex.evex)
14663 {
14664 /* In EVEX, if operand doesn't allow broadcast, vex.b should be 0. */
14665 if (vex.b
14666 && bytemode != x_mode
14667 && bytemode != evex_half_bcst_xmmq_mode)
14668 {
14669 BadOp ();
14670 return;
14671 }
14672 switch (bytemode)
14673 {
1ba585e8
IT
14674 case dqw_mode:
14675 case dw_mode:
14676 case dqw_swap_mode:
14677 shift = 1;
14678 break;
14679 case dqb_mode:
14680 case db_mode:
14681 shift = 0;
14682 break;
43234a1e 14683 case vex_vsib_d_w_dq_mode:
5fc35d96 14684 case vex_vsib_d_w_d_mode:
eaa9d1ad 14685 case vex_vsib_q_w_dq_mode:
5fc35d96 14686 case vex_vsib_q_w_d_mode:
43234a1e
L
14687 case evex_x_gscat_mode:
14688 case xmm_mdq_mode:
14689 shift = vex.w ? 3 : 2;
14690 break;
43234a1e
L
14691 case x_mode:
14692 case evex_half_bcst_xmmq_mode:
14693 if (vex.b)
14694 {
14695 shift = vex.w ? 3 : 2;
14696 break;
14697 }
14698 /* Fall through if vex.b == 0. */
14699 case xmmqd_mode:
14700 case xmmdw_mode:
14701 case xmmq_mode:
14702 case ymmq_mode:
14703 case evex_x_nobcst_mode:
14704 case x_swap_mode:
14705 switch (vex.length)
14706 {
14707 case 128:
14708 shift = 4;
14709 break;
14710 case 256:
14711 shift = 5;
14712 break;
14713 case 512:
14714 shift = 6;
14715 break;
14716 default:
14717 abort ();
14718 }
14719 break;
14720 case ymm_mode:
14721 shift = 5;
14722 break;
14723 case xmm_mode:
14724 shift = 4;
14725 break;
14726 case xmm_mq_mode:
14727 case q_mode:
14728 case q_scalar_mode:
14729 case q_swap_mode:
14730 case q_scalar_swap_mode:
14731 shift = 3;
14732 break;
14733 case dqd_mode:
14734 case xmm_md_mode:
14735 case d_mode:
14736 case d_scalar_mode:
14737 case d_swap_mode:
14738 case d_scalar_swap_mode:
14739 shift = 2;
14740 break;
14741 case xmm_mw_mode:
14742 shift = 1;
14743 break;
14744 case xmm_mb_mode:
14745 shift = 0;
14746 break;
14747 default:
14748 abort ();
14749 }
14750 /* Make necessary corrections to shift for modes that need it.
14751 For these modes we currently have shift 4, 5 or 6 depending on
14752 vex.length (it corresponds to xmmword, ymmword or zmmword
14753 operand). We might want to make it 3, 4 or 5 (e.g. for
14754 xmmq_mode). In case of broadcast enabled the corrections
14755 aren't needed, as element size is always 32 or 64 bits. */
14756 if (bytemode == xmmq_mode
14757 || (bytemode == evex_half_bcst_xmmq_mode
14758 && !vex.b))
14759 shift -= 1;
14760 else if (bytemode == xmmqd_mode)
14761 shift -= 2;
14762 else if (bytemode == xmmdw_mode)
14763 shift -= 3;
b28d1bda
IT
14764 else if (bytemode == ymmq_mode && vex.length == 128)
14765 shift -= 1;
43234a1e
L
14766 }
14767 else
14768 shift = 0;
252b5132 14769
c0f3af97 14770 USED_REX (REX_B);
3f31e633
JB
14771 if (intel_syntax)
14772 intel_operand_size (bytemode, sizeflag);
252b5132
RH
14773 append_seg ();
14774
5d669648 14775 if ((sizeflag & AFLAG) || address_mode == mode_64bit)
252b5132 14776 {
5d669648
L
14777 /* 32/64 bit address mode */
14778 int havedisp;
252b5132
RH
14779 int havesib;
14780 int havebase;
0f7da397 14781 int haveindex;
20afcfb7 14782 int needindex;
82c18208 14783 int base, rbase;
91d6fa6a 14784 int vindex = 0;
252b5132 14785 int scale = 0;
7e8b059b
L
14786 int addr32flag = !((sizeflag & AFLAG)
14787 || bytemode == v_bnd_mode
14788 || bytemode == bnd_mode);
6c30d220
L
14789 const char **indexes64 = names64;
14790 const char **indexes32 = names32;
252b5132
RH
14791
14792 havesib = 0;
14793 havebase = 1;
0f7da397 14794 haveindex = 0;
7967e09e 14795 base = modrm.rm;
252b5132
RH
14796
14797 if (base == 4)
14798 {
14799 havesib = 1;
dfc8cf43 14800 vindex = sib.index;
161a04f6
L
14801 USED_REX (REX_X);
14802 if (rex & REX_X)
91d6fa6a 14803 vindex += 8;
6c30d220
L
14804 switch (bytemode)
14805 {
14806 case vex_vsib_d_w_dq_mode:
5fc35d96 14807 case vex_vsib_d_w_d_mode:
6c30d220 14808 case vex_vsib_q_w_dq_mode:
5fc35d96 14809 case vex_vsib_q_w_d_mode:
6c30d220
L
14810 if (!need_vex)
14811 abort ();
43234a1e
L
14812 if (vex.evex)
14813 {
14814 if (!vex.v)
14815 vindex += 16;
14816 }
6c30d220
L
14817
14818 haveindex = 1;
14819 switch (vex.length)
14820 {
14821 case 128:
7bb15c6f 14822 indexes64 = indexes32 = names_xmm;
6c30d220
L
14823 break;
14824 case 256:
5fc35d96
IT
14825 if (!vex.w
14826 || bytemode == vex_vsib_q_w_dq_mode
14827 || bytemode == vex_vsib_q_w_d_mode)
7bb15c6f 14828 indexes64 = indexes32 = names_ymm;
6c30d220 14829 else
7bb15c6f 14830 indexes64 = indexes32 = names_xmm;
6c30d220 14831 break;
43234a1e 14832 case 512:
5fc35d96
IT
14833 if (!vex.w
14834 || bytemode == vex_vsib_q_w_dq_mode
14835 || bytemode == vex_vsib_q_w_d_mode)
43234a1e
L
14836 indexes64 = indexes32 = names_zmm;
14837 else
14838 indexes64 = indexes32 = names_ymm;
14839 break;
6c30d220
L
14840 default:
14841 abort ();
14842 }
14843 break;
14844 default:
14845 haveindex = vindex != 4;
14846 break;
14847 }
14848 scale = sib.scale;
14849 base = sib.base;
252b5132
RH
14850 codep++;
14851 }
82c18208 14852 rbase = base + add;
252b5132 14853
7967e09e 14854 switch (modrm.mod)
252b5132
RH
14855 {
14856 case 0:
82c18208 14857 if (base == 5)
252b5132
RH
14858 {
14859 havebase = 0;
cb712a9e 14860 if (address_mode == mode_64bit && !havesib)
52b15da3
JH
14861 riprel = 1;
14862 disp = get32s ();
252b5132
RH
14863 }
14864 break;
14865 case 1:
14866 FETCH_DATA (the_info, codep + 1);
14867 disp = *codep++;
14868 if ((disp & 0x80) != 0)
14869 disp -= 0x100;
43234a1e
L
14870 if (vex.evex && shift > 0)
14871 disp <<= shift;
252b5132
RH
14872 break;
14873 case 2:
52b15da3 14874 disp = get32s ();
252b5132
RH
14875 break;
14876 }
14877
20afcfb7
L
14878 /* In 32bit mode, we need index register to tell [offset] from
14879 [eiz*1 + offset]. */
14880 needindex = (havesib
14881 && !havebase
14882 && !haveindex
14883 && address_mode == mode_32bit);
14884 havedisp = (havebase
14885 || needindex
14886 || (havesib && (haveindex || scale != 0)));
5d669648 14887
252b5132 14888 if (!intel_syntax)
82c18208 14889 if (modrm.mod != 0 || base == 5)
db6eb5be 14890 {
5d669648
L
14891 if (havedisp || riprel)
14892 print_displacement (scratchbuf, disp);
14893 else
14894 print_operand_value (scratchbuf, 1, disp);
db6eb5be 14895 oappend (scratchbuf);
52b15da3
JH
14896 if (riprel)
14897 {
14898 set_op (disp, 1);
87767711 14899 oappend (sizeflag & AFLAG ? "(%rip)" : "(%eip)");
52b15da3 14900 }
db6eb5be 14901 }
2da11e11 14902
7e8b059b
L
14903 if ((havebase || haveindex || riprel)
14904 && (bytemode != v_bnd_mode)
14905 && (bytemode != bnd_mode))
87767711
JB
14906 used_prefixes |= PREFIX_ADDR;
14907
5d669648 14908 if (havedisp || (intel_syntax && riprel))
252b5132 14909 {
252b5132 14910 *obufp++ = open_char;
52b15da3 14911 if (intel_syntax && riprel)
185b1163
L
14912 {
14913 set_op (disp, 1);
87767711 14914 oappend (sizeflag & AFLAG ? "rip" : "eip");
185b1163 14915 }
db6eb5be 14916 *obufp = '\0';
252b5132 14917 if (havebase)
7e8b059b 14918 oappend (address_mode == mode_64bit && !addr32flag
82c18208 14919 ? names64[rbase] : names32[rbase]);
252b5132
RH
14920 if (havesib)
14921 {
db51cc60
L
14922 /* ESP/RSP won't allow index. If base isn't ESP/RSP,
14923 print index to tell base + index from base. */
14924 if (scale != 0
20afcfb7 14925 || needindex
db51cc60
L
14926 || haveindex
14927 || (havebase && base != ESP_REG_NUM))
252b5132 14928 {
9306ca4a 14929 if (!intel_syntax || havebase)
db6eb5be 14930 {
9306ca4a
JB
14931 *obufp++ = separator_char;
14932 *obufp = '\0';
db6eb5be 14933 }
db51cc60 14934 if (haveindex)
7e8b059b 14935 oappend (address_mode == mode_64bit && !addr32flag
6c30d220 14936 ? indexes64[vindex] : indexes32[vindex]);
db51cc60 14937 else
7e8b059b 14938 oappend (address_mode == mode_64bit && !addr32flag
db51cc60
L
14939 ? index64 : index32);
14940
db6eb5be
AM
14941 *obufp++ = scale_char;
14942 *obufp = '\0';
14943 sprintf (scratchbuf, "%d", 1 << scale);
14944 oappend (scratchbuf);
14945 }
252b5132 14946 }
185b1163 14947 if (intel_syntax
82c18208 14948 && (disp || modrm.mod != 0 || base == 5))
3d456fa1 14949 {
db51cc60 14950 if (!havedisp || (bfd_signed_vma) disp >= 0)
3d456fa1
JB
14951 {
14952 *obufp++ = '+';
14953 *obufp = '\0';
14954 }
05203043 14955 else if (modrm.mod != 1 && disp != -disp)
3d456fa1
JB
14956 {
14957 *obufp++ = '-';
14958 *obufp = '\0';
14959 disp = - (bfd_signed_vma) disp;
14960 }
14961
db51cc60
L
14962 if (havedisp)
14963 print_displacement (scratchbuf, disp);
14964 else
14965 print_operand_value (scratchbuf, 1, disp);
3d456fa1
JB
14966 oappend (scratchbuf);
14967 }
252b5132
RH
14968
14969 *obufp++ = close_char;
db6eb5be 14970 *obufp = '\0';
252b5132
RH
14971 }
14972 else if (intel_syntax)
db6eb5be 14973 {
82c18208 14974 if (modrm.mod != 0 || base == 5)
db6eb5be 14975 {
285ca992 14976 if (!active_seg_prefix)
252b5132 14977 {
d708bcba 14978 oappend (names_seg[ds_reg - es_reg]);
252b5132
RH
14979 oappend (":");
14980 }
52b15da3 14981 print_operand_value (scratchbuf, 1, disp);
db6eb5be
AM
14982 oappend (scratchbuf);
14983 }
14984 }
252b5132
RH
14985 }
14986 else
f16cd0d5
L
14987 {
14988 /* 16 bit address mode */
14989 used_prefixes |= prefixes & PREFIX_ADDR;
7967e09e 14990 switch (modrm.mod)
252b5132
RH
14991 {
14992 case 0:
7967e09e 14993 if (modrm.rm == 6)
252b5132
RH
14994 {
14995 disp = get16 ();
14996 if ((disp & 0x8000) != 0)
14997 disp -= 0x10000;
14998 }
14999 break;
15000 case 1:
15001 FETCH_DATA (the_info, codep + 1);
15002 disp = *codep++;
15003 if ((disp & 0x80) != 0)
15004 disp -= 0x100;
15005 break;
15006 case 2:
15007 disp = get16 ();
15008 if ((disp & 0x8000) != 0)
15009 disp -= 0x10000;
15010 break;
15011 }
15012
15013 if (!intel_syntax)
7967e09e 15014 if (modrm.mod != 0 || modrm.rm == 6)
db6eb5be 15015 {
5d669648 15016 print_displacement (scratchbuf, disp);
db6eb5be
AM
15017 oappend (scratchbuf);
15018 }
252b5132 15019
7967e09e 15020 if (modrm.mod != 0 || modrm.rm != 6)
252b5132
RH
15021 {
15022 *obufp++ = open_char;
db6eb5be 15023 *obufp = '\0';
7967e09e 15024 oappend (index16[modrm.rm]);
5d669648
L
15025 if (intel_syntax
15026 && (disp || modrm.mod != 0 || modrm.rm == 6))
3d456fa1 15027 {
5d669648 15028 if ((bfd_signed_vma) disp >= 0)
3d456fa1
JB
15029 {
15030 *obufp++ = '+';
15031 *obufp = '\0';
15032 }
7967e09e 15033 else if (modrm.mod != 1)
3d456fa1
JB
15034 {
15035 *obufp++ = '-';
15036 *obufp = '\0';
15037 disp = - (bfd_signed_vma) disp;
15038 }
15039
5d669648 15040 print_displacement (scratchbuf, disp);
3d456fa1
JB
15041 oappend (scratchbuf);
15042 }
15043
db6eb5be
AM
15044 *obufp++ = close_char;
15045 *obufp = '\0';
252b5132 15046 }
3d456fa1
JB
15047 else if (intel_syntax)
15048 {
285ca992 15049 if (!active_seg_prefix)
3d456fa1
JB
15050 {
15051 oappend (names_seg[ds_reg - es_reg]);
15052 oappend (":");
15053 }
15054 print_operand_value (scratchbuf, 1, disp & 0xffff);
15055 oappend (scratchbuf);
15056 }
252b5132 15057 }
43234a1e
L
15058 if (vex.evex && vex.b
15059 && (bytemode == x_mode
15060 || bytemode == evex_half_bcst_xmmq_mode))
15061 {
15062 if (vex.w || bytemode == evex_half_bcst_xmmq_mode)
b28d1bda
IT
15063 {
15064 switch (vex.length)
15065 {
15066 case 128:
15067 oappend ("{1to2}");
15068 break;
15069 case 256:
15070 oappend ("{1to4}");
15071 break;
15072 case 512:
15073 oappend ("{1to8}");
15074 break;
15075 default:
15076 abort ();
15077 }
15078 }
43234a1e 15079 else
b28d1bda
IT
15080 {
15081 switch (vex.length)
15082 {
15083 case 128:
15084 oappend ("{1to4}");
15085 break;
15086 case 256:
15087 oappend ("{1to8}");
15088 break;
15089 case 512:
15090 oappend ("{1to16}");
15091 break;
15092 default:
15093 abort ();
15094 }
15095 }
43234a1e 15096 }
252b5132
RH
15097}
15098
c0f3af97 15099static void
8b3f93e7 15100OP_E (int bytemode, int sizeflag)
c0f3af97
L
15101{
15102 /* Skip mod/rm byte. */
15103 MODRM_CHECK;
15104 codep++;
15105
15106 if (modrm.mod == 3)
15107 OP_E_register (bytemode, sizeflag);
15108 else
c1e679ec 15109 OP_E_memory (bytemode, sizeflag);
c0f3af97
L
15110}
15111
252b5132 15112static void
26ca5450 15113OP_G (int bytemode, int sizeflag)
252b5132 15114{
52b15da3 15115 int add = 0;
161a04f6
L
15116 USED_REX (REX_R);
15117 if (rex & REX_R)
52b15da3 15118 add += 8;
252b5132
RH
15119 switch (bytemode)
15120 {
15121 case b_mode:
52b15da3
JH
15122 USED_REX (0);
15123 if (rex)
7967e09e 15124 oappend (names8rex[modrm.reg + add]);
52b15da3 15125 else
7967e09e 15126 oappend (names8[modrm.reg + add]);
252b5132
RH
15127 break;
15128 case w_mode:
7967e09e 15129 oappend (names16[modrm.reg + add]);
252b5132
RH
15130 break;
15131 case d_mode:
1ba585e8
IT
15132 case db_mode:
15133 case dw_mode:
7967e09e 15134 oappend (names32[modrm.reg + add]);
52b15da3
JH
15135 break;
15136 case q_mode:
7967e09e 15137 oappend (names64[modrm.reg + add]);
252b5132 15138 break;
7e8b059b
L
15139 case bnd_mode:
15140 oappend (names_bnd[modrm.reg]);
15141 break;
252b5132 15142 case v_mode:
9306ca4a 15143 case dq_mode:
42903f7f
L
15144 case dqb_mode:
15145 case dqd_mode:
9306ca4a 15146 case dqw_mode:
1ba585e8 15147 case dqw_swap_mode:
161a04f6
L
15148 USED_REX (REX_W);
15149 if (rex & REX_W)
7967e09e 15150 oappend (names64[modrm.reg + add]);
252b5132 15151 else
f16cd0d5
L
15152 {
15153 if ((sizeflag & DFLAG) || bytemode != v_mode)
15154 oappend (names32[modrm.reg + add]);
15155 else
15156 oappend (names16[modrm.reg + add]);
15157 used_prefixes |= (prefixes & PREFIX_DATA);
15158 }
252b5132 15159 break;
90700ea2 15160 case m_mode:
cb712a9e 15161 if (address_mode == mode_64bit)
7967e09e 15162 oappend (names64[modrm.reg + add]);
90700ea2 15163 else
7967e09e 15164 oappend (names32[modrm.reg + add]);
90700ea2 15165 break;
1ba585e8 15166 case mask_bd_mode:
43234a1e
L
15167 case mask_mode:
15168 oappend (names_mask[modrm.reg + add]);
15169 break;
252b5132
RH
15170 default:
15171 oappend (INTERNAL_DISASSEMBLER_ERROR);
15172 break;
15173 }
15174}
15175
52b15da3 15176static bfd_vma
26ca5450 15177get64 (void)
52b15da3 15178{
5dd0794d 15179 bfd_vma x;
52b15da3 15180#ifdef BFD64
5dd0794d
AM
15181 unsigned int a;
15182 unsigned int b;
15183
52b15da3
JH
15184 FETCH_DATA (the_info, codep + 8);
15185 a = *codep++ & 0xff;
15186 a |= (*codep++ & 0xff) << 8;
15187 a |= (*codep++ & 0xff) << 16;
15188 a |= (*codep++ & 0xff) << 24;
5dd0794d 15189 b = *codep++ & 0xff;
52b15da3
JH
15190 b |= (*codep++ & 0xff) << 8;
15191 b |= (*codep++ & 0xff) << 16;
15192 b |= (*codep++ & 0xff) << 24;
15193 x = a + ((bfd_vma) b << 32);
15194#else
6608db57 15195 abort ();
5dd0794d 15196 x = 0;
52b15da3
JH
15197#endif
15198 return x;
15199}
15200
15201static bfd_signed_vma
26ca5450 15202get32 (void)
252b5132 15203{
52b15da3 15204 bfd_signed_vma x = 0;
252b5132
RH
15205
15206 FETCH_DATA (the_info, codep + 4);
52b15da3
JH
15207 x = *codep++ & (bfd_signed_vma) 0xff;
15208 x |= (*codep++ & (bfd_signed_vma) 0xff) << 8;
15209 x |= (*codep++ & (bfd_signed_vma) 0xff) << 16;
15210 x |= (*codep++ & (bfd_signed_vma) 0xff) << 24;
15211 return x;
15212}
15213
15214static bfd_signed_vma
26ca5450 15215get32s (void)
52b15da3
JH
15216{
15217 bfd_signed_vma x = 0;
15218
15219 FETCH_DATA (the_info, codep + 4);
15220 x = *codep++ & (bfd_signed_vma) 0xff;
15221 x |= (*codep++ & (bfd_signed_vma) 0xff) << 8;
15222 x |= (*codep++ & (bfd_signed_vma) 0xff) << 16;
15223 x |= (*codep++ & (bfd_signed_vma) 0xff) << 24;
15224
15225 x = (x ^ ((bfd_signed_vma) 1 << 31)) - ((bfd_signed_vma) 1 << 31);
15226
252b5132
RH
15227 return x;
15228}
15229
15230static int
26ca5450 15231get16 (void)
252b5132
RH
15232{
15233 int x = 0;
15234
15235 FETCH_DATA (the_info, codep + 2);
15236 x = *codep++ & 0xff;
15237 x |= (*codep++ & 0xff) << 8;
15238 return x;
15239}
15240
15241static void
26ca5450 15242set_op (bfd_vma op, int riprel)
252b5132
RH
15243{
15244 op_index[op_ad] = op_ad;
cb712a9e 15245 if (address_mode == mode_64bit)
7081ff04
AJ
15246 {
15247 op_address[op_ad] = op;
15248 op_riprel[op_ad] = riprel;
15249 }
15250 else
15251 {
15252 /* Mask to get a 32-bit address. */
15253 op_address[op_ad] = op & 0xffffffff;
15254 op_riprel[op_ad] = riprel & 0xffffffff;
15255 }
252b5132
RH
15256}
15257
15258static void
26ca5450 15259OP_REG (int code, int sizeflag)
252b5132 15260{
2da11e11 15261 const char *s;
9b60702d 15262 int add;
de882298
RM
15263
15264 switch (code)
15265 {
15266 case es_reg: case ss_reg: case cs_reg:
15267 case ds_reg: case fs_reg: case gs_reg:
15268 oappend (names_seg[code - es_reg]);
15269 return;
15270 }
15271
161a04f6
L
15272 USED_REX (REX_B);
15273 if (rex & REX_B)
52b15da3 15274 add = 8;
9b60702d
L
15275 else
15276 add = 0;
52b15da3
JH
15277
15278 switch (code)
15279 {
52b15da3
JH
15280 case ax_reg: case cx_reg: case dx_reg: case bx_reg:
15281 case sp_reg: case bp_reg: case si_reg: case di_reg:
15282 s = names16[code - ax_reg + add];
15283 break;
52b15da3
JH
15284 case al_reg: case ah_reg: case cl_reg: case ch_reg:
15285 case dl_reg: case dh_reg: case bl_reg: case bh_reg:
15286 USED_REX (0);
15287 if (rex)
15288 s = names8rex[code - al_reg + add];
15289 else
15290 s = names8[code - al_reg];
15291 break;
6439fc28
AM
15292 case rAX_reg: case rCX_reg: case rDX_reg: case rBX_reg:
15293 case rSP_reg: case rBP_reg: case rSI_reg: case rDI_reg:
7bb15c6f 15294 if (address_mode == mode_64bit
6c067bbb 15295 && ((sizeflag & DFLAG) || (rex & REX_W)))
6439fc28
AM
15296 {
15297 s = names64[code - rAX_reg + add];
15298 break;
15299 }
15300 code += eAX_reg - rAX_reg;
6608db57 15301 /* Fall through. */
52b15da3
JH
15302 case eAX_reg: case eCX_reg: case eDX_reg: case eBX_reg:
15303 case eSP_reg: case eBP_reg: case eSI_reg: case eDI_reg:
161a04f6
L
15304 USED_REX (REX_W);
15305 if (rex & REX_W)
52b15da3 15306 s = names64[code - eAX_reg + add];
52b15da3 15307 else
f16cd0d5
L
15308 {
15309 if (sizeflag & DFLAG)
15310 s = names32[code - eAX_reg + add];
15311 else
15312 s = names16[code - eAX_reg + add];
15313 used_prefixes |= (prefixes & PREFIX_DATA);
15314 }
52b15da3 15315 break;
52b15da3
JH
15316 default:
15317 s = INTERNAL_DISASSEMBLER_ERROR;
15318 break;
15319 }
15320 oappend (s);
15321}
15322
15323static void
26ca5450 15324OP_IMREG (int code, int sizeflag)
52b15da3
JH
15325{
15326 const char *s;
252b5132
RH
15327
15328 switch (code)
15329 {
15330 case indir_dx_reg:
d708bcba 15331 if (intel_syntax)
52fd6d94 15332 s = "dx";
d708bcba 15333 else
db6eb5be 15334 s = "(%dx)";
252b5132
RH
15335 break;
15336 case ax_reg: case cx_reg: case dx_reg: case bx_reg:
15337 case sp_reg: case bp_reg: case si_reg: case di_reg:
15338 s = names16[code - ax_reg];
15339 break;
15340 case es_reg: case ss_reg: case cs_reg:
15341 case ds_reg: case fs_reg: case gs_reg:
15342 s = names_seg[code - es_reg];
15343 break;
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:
52b15da3
JH
15346 USED_REX (0);
15347 if (rex)
15348 s = names8rex[code - al_reg];
15349 else
15350 s = names8[code - al_reg];
252b5132
RH
15351 break;
15352 case eAX_reg: case eCX_reg: case eDX_reg: case eBX_reg:
15353 case eSP_reg: case eBP_reg: case eSI_reg: case eDI_reg:
161a04f6
L
15354 USED_REX (REX_W);
15355 if (rex & REX_W)
52b15da3 15356 s = names64[code - eAX_reg];
252b5132 15357 else
f16cd0d5
L
15358 {
15359 if (sizeflag & DFLAG)
15360 s = names32[code - eAX_reg];
15361 else
15362 s = names16[code - eAX_reg];
15363 used_prefixes |= (prefixes & PREFIX_DATA);
15364 }
252b5132 15365 break;
52fd6d94 15366 case z_mode_ax_reg:
161a04f6 15367 if ((rex & REX_W) || (sizeflag & DFLAG))
52fd6d94
JB
15368 s = *names32;
15369 else
15370 s = *names16;
161a04f6 15371 if (!(rex & REX_W))
52fd6d94
JB
15372 used_prefixes |= (prefixes & PREFIX_DATA);
15373 break;
252b5132
RH
15374 default:
15375 s = INTERNAL_DISASSEMBLER_ERROR;
15376 break;
15377 }
15378 oappend (s);
15379}
15380
15381static void
26ca5450 15382OP_I (int bytemode, int sizeflag)
252b5132 15383{
52b15da3
JH
15384 bfd_signed_vma op;
15385 bfd_signed_vma mask = -1;
252b5132
RH
15386
15387 switch (bytemode)
15388 {
15389 case b_mode:
15390 FETCH_DATA (the_info, codep + 1);
52b15da3
JH
15391 op = *codep++;
15392 mask = 0xff;
15393 break;
15394 case q_mode:
cb712a9e 15395 if (address_mode == mode_64bit)
6439fc28
AM
15396 {
15397 op = get32s ();
15398 break;
15399 }
6608db57 15400 /* Fall through. */
252b5132 15401 case v_mode:
161a04f6
L
15402 USED_REX (REX_W);
15403 if (rex & REX_W)
52b15da3 15404 op = get32s ();
252b5132 15405 else
52b15da3 15406 {
f16cd0d5
L
15407 if (sizeflag & DFLAG)
15408 {
15409 op = get32 ();
15410 mask = 0xffffffff;
15411 }
15412 else
15413 {
15414 op = get16 ();
15415 mask = 0xfffff;
15416 }
15417 used_prefixes |= (prefixes & PREFIX_DATA);
52b15da3 15418 }
252b5132
RH
15419 break;
15420 case w_mode:
52b15da3 15421 mask = 0xfffff;
252b5132
RH
15422 op = get16 ();
15423 break;
9306ca4a
JB
15424 case const_1_mode:
15425 if (intel_syntax)
6c067bbb 15426 oappend ("1");
9306ca4a 15427 return;
252b5132
RH
15428 default:
15429 oappend (INTERNAL_DISASSEMBLER_ERROR);
15430 return;
15431 }
15432
52b15da3
JH
15433 op &= mask;
15434 scratchbuf[0] = '$';
d708bcba 15435 print_operand_value (scratchbuf + 1, 1, op);
9ce09ba2 15436 oappend_maybe_intel (scratchbuf);
52b15da3
JH
15437 scratchbuf[0] = '\0';
15438}
15439
15440static void
26ca5450 15441OP_I64 (int bytemode, int sizeflag)
52b15da3
JH
15442{
15443 bfd_signed_vma op;
15444 bfd_signed_vma mask = -1;
15445
cb712a9e 15446 if (address_mode != mode_64bit)
6439fc28
AM
15447 {
15448 OP_I (bytemode, sizeflag);
15449 return;
15450 }
15451
52b15da3
JH
15452 switch (bytemode)
15453 {
15454 case b_mode:
15455 FETCH_DATA (the_info, codep + 1);
15456 op = *codep++;
15457 mask = 0xff;
15458 break;
15459 case v_mode:
161a04f6
L
15460 USED_REX (REX_W);
15461 if (rex & REX_W)
52b15da3 15462 op = get64 ();
52b15da3
JH
15463 else
15464 {
f16cd0d5
L
15465 if (sizeflag & DFLAG)
15466 {
15467 op = get32 ();
15468 mask = 0xffffffff;
15469 }
15470 else
15471 {
15472 op = get16 ();
15473 mask = 0xfffff;
15474 }
15475 used_prefixes |= (prefixes & PREFIX_DATA);
52b15da3 15476 }
52b15da3
JH
15477 break;
15478 case w_mode:
15479 mask = 0xfffff;
15480 op = get16 ();
15481 break;
15482 default:
15483 oappend (INTERNAL_DISASSEMBLER_ERROR);
15484 return;
15485 }
15486
15487 op &= mask;
15488 scratchbuf[0] = '$';
d708bcba 15489 print_operand_value (scratchbuf + 1, 1, op);
9ce09ba2 15490 oappend_maybe_intel (scratchbuf);
252b5132
RH
15491 scratchbuf[0] = '\0';
15492}
15493
15494static void
26ca5450 15495OP_sI (int bytemode, int sizeflag)
252b5132 15496{
52b15da3 15497 bfd_signed_vma op;
252b5132
RH
15498
15499 switch (bytemode)
15500 {
15501 case b_mode:
e3949f17 15502 case b_T_mode:
252b5132
RH
15503 FETCH_DATA (the_info, codep + 1);
15504 op = *codep++;
15505 if ((op & 0x80) != 0)
15506 op -= 0x100;
e3949f17
L
15507 if (bytemode == b_T_mode)
15508 {
15509 if (address_mode != mode_64bit
7bb15c6f 15510 || !((sizeflag & DFLAG) || (rex & REX_W)))
e3949f17 15511 {
6c067bbb
RM
15512 /* The operand-size prefix is overridden by a REX prefix. */
15513 if ((sizeflag & DFLAG) || (rex & REX_W))
e3949f17
L
15514 op &= 0xffffffff;
15515 else
15516 op &= 0xffff;
15517 }
15518 }
15519 else
15520 {
15521 if (!(rex & REX_W))
15522 {
15523 if (sizeflag & DFLAG)
15524 op &= 0xffffffff;
15525 else
15526 op &= 0xffff;
15527 }
15528 }
252b5132
RH
15529 break;
15530 case v_mode:
7bb15c6f
RM
15531 /* The operand-size prefix is overridden by a REX prefix. */
15532 if ((sizeflag & DFLAG) || (rex & REX_W))
52b15da3 15533 op = get32s ();
252b5132 15534 else
d9e3625e 15535 op = get16 ();
252b5132
RH
15536 break;
15537 default:
15538 oappend (INTERNAL_DISASSEMBLER_ERROR);
15539 return;
15540 }
52b15da3
JH
15541
15542 scratchbuf[0] = '$';
15543 print_operand_value (scratchbuf + 1, 1, op);
9ce09ba2 15544 oappend_maybe_intel (scratchbuf);
252b5132
RH
15545}
15546
15547static void
26ca5450 15548OP_J (int bytemode, int sizeflag)
252b5132 15549{
52b15da3 15550 bfd_vma disp;
7081ff04 15551 bfd_vma mask = -1;
65ca155d 15552 bfd_vma segment = 0;
252b5132
RH
15553
15554 switch (bytemode)
15555 {
15556 case b_mode:
15557 FETCH_DATA (the_info, codep + 1);
15558 disp = *codep++;
15559 if ((disp & 0x80) != 0)
15560 disp -= 0x100;
15561 break;
15562 case v_mode:
f16cd0d5 15563 USED_REX (REX_W);
161a04f6 15564 if ((sizeflag & DFLAG) || (rex & REX_W))
52b15da3 15565 disp = get32s ();
252b5132
RH
15566 else
15567 {
15568 disp = get16 ();
206717e8
L
15569 if ((disp & 0x8000) != 0)
15570 disp -= 0x10000;
65ca155d
L
15571 /* In 16bit mode, address is wrapped around at 64k within
15572 the same segment. Otherwise, a data16 prefix on a jump
15573 instruction means that the pc is masked to 16 bits after
15574 the displacement is added! */
15575 mask = 0xffff;
15576 if ((prefixes & PREFIX_DATA) == 0)
15577 segment = ((start_pc + codep - start_codep)
15578 & ~((bfd_vma) 0xffff));
252b5132 15579 }
f16cd0d5
L
15580 if (!(rex & REX_W))
15581 used_prefixes |= (prefixes & PREFIX_DATA);
252b5132
RH
15582 break;
15583 default:
15584 oappend (INTERNAL_DISASSEMBLER_ERROR);
15585 return;
15586 }
42d5f9c6 15587 disp = ((start_pc + (codep - start_codep) + disp) & mask) | segment;
52b15da3
JH
15588 set_op (disp, 0);
15589 print_operand_value (scratchbuf, 1, disp);
252b5132
RH
15590 oappend (scratchbuf);
15591}
15592
252b5132 15593static void
ed7841b3 15594OP_SEG (int bytemode, int sizeflag)
252b5132 15595{
ed7841b3 15596 if (bytemode == w_mode)
7967e09e 15597 oappend (names_seg[modrm.reg]);
ed7841b3 15598 else
7967e09e 15599 OP_E (modrm.mod == 3 ? bytemode : w_mode, sizeflag);
252b5132
RH
15600}
15601
15602static void
26ca5450 15603OP_DIR (int dummy ATTRIBUTE_UNUSED, int sizeflag)
252b5132
RH
15604{
15605 int seg, offset;
15606
c608c12e 15607 if (sizeflag & DFLAG)
252b5132 15608 {
c608c12e
AM
15609 offset = get32 ();
15610 seg = get16 ();
252b5132 15611 }
c608c12e
AM
15612 else
15613 {
15614 offset = get16 ();
15615 seg = get16 ();
15616 }
7d421014 15617 used_prefixes |= (prefixes & PREFIX_DATA);
d708bcba 15618 if (intel_syntax)
3f31e633 15619 sprintf (scratchbuf, "0x%x:0x%x", seg, offset);
d708bcba
AM
15620 else
15621 sprintf (scratchbuf, "$0x%x,$0x%x", seg, offset);
c608c12e 15622 oappend (scratchbuf);
252b5132
RH
15623}
15624
252b5132 15625static void
3f31e633 15626OP_OFF (int bytemode, int sizeflag)
252b5132 15627{
52b15da3 15628 bfd_vma off;
252b5132 15629
3f31e633
JB
15630 if (intel_syntax && (sizeflag & SUFFIX_ALWAYS))
15631 intel_operand_size (bytemode, sizeflag);
252b5132
RH
15632 append_seg ();
15633
cb712a9e 15634 if ((sizeflag & AFLAG) || address_mode == mode_64bit)
252b5132
RH
15635 off = get32 ();
15636 else
15637 off = get16 ();
15638
15639 if (intel_syntax)
15640 {
285ca992 15641 if (!active_seg_prefix)
252b5132 15642 {
d708bcba 15643 oappend (names_seg[ds_reg - es_reg]);
252b5132
RH
15644 oappend (":");
15645 }
15646 }
52b15da3
JH
15647 print_operand_value (scratchbuf, 1, off);
15648 oappend (scratchbuf);
15649}
6439fc28 15650
52b15da3 15651static void
3f31e633 15652OP_OFF64 (int bytemode, int sizeflag)
52b15da3
JH
15653{
15654 bfd_vma off;
15655
539e75ad
L
15656 if (address_mode != mode_64bit
15657 || (prefixes & PREFIX_ADDR))
6439fc28
AM
15658 {
15659 OP_OFF (bytemode, sizeflag);
15660 return;
15661 }
15662
3f31e633
JB
15663 if (intel_syntax && (sizeflag & SUFFIX_ALWAYS))
15664 intel_operand_size (bytemode, sizeflag);
52b15da3
JH
15665 append_seg ();
15666
6608db57 15667 off = get64 ();
52b15da3
JH
15668
15669 if (intel_syntax)
15670 {
285ca992 15671 if (!active_seg_prefix)
52b15da3 15672 {
d708bcba 15673 oappend (names_seg[ds_reg - es_reg]);
52b15da3
JH
15674 oappend (":");
15675 }
15676 }
15677 print_operand_value (scratchbuf, 1, off);
252b5132
RH
15678 oappend (scratchbuf);
15679}
15680
15681static void
26ca5450 15682ptr_reg (int code, int sizeflag)
252b5132 15683{
2da11e11 15684 const char *s;
d708bcba 15685
1d9f512f 15686 *obufp++ = open_char;
20f0a1fc 15687 used_prefixes |= (prefixes & PREFIX_ADDR);
cb712a9e 15688 if (address_mode == mode_64bit)
c1a64871
JH
15689 {
15690 if (!(sizeflag & AFLAG))
db6eb5be 15691 s = names32[code - eAX_reg];
c1a64871 15692 else
db6eb5be 15693 s = names64[code - eAX_reg];
c1a64871 15694 }
52b15da3 15695 else if (sizeflag & AFLAG)
252b5132
RH
15696 s = names32[code - eAX_reg];
15697 else
15698 s = names16[code - eAX_reg];
15699 oappend (s);
1d9f512f
AM
15700 *obufp++ = close_char;
15701 *obufp = 0;
252b5132
RH
15702}
15703
15704static void
26ca5450 15705OP_ESreg (int code, int sizeflag)
252b5132 15706{
9306ca4a 15707 if (intel_syntax)
52fd6d94
JB
15708 {
15709 switch (codep[-1])
15710 {
15711 case 0x6d: /* insw/insl */
15712 intel_operand_size (z_mode, sizeflag);
15713 break;
15714 case 0xa5: /* movsw/movsl/movsq */
15715 case 0xa7: /* cmpsw/cmpsl/cmpsq */
15716 case 0xab: /* stosw/stosl */
15717 case 0xaf: /* scasw/scasl */
15718 intel_operand_size (v_mode, sizeflag);
15719 break;
15720 default:
15721 intel_operand_size (b_mode, sizeflag);
15722 }
15723 }
9ce09ba2 15724 oappend_maybe_intel ("%es:");
252b5132
RH
15725 ptr_reg (code, sizeflag);
15726}
15727
15728static void
26ca5450 15729OP_DSreg (int code, int sizeflag)
252b5132 15730{
9306ca4a 15731 if (intel_syntax)
52fd6d94
JB
15732 {
15733 switch (codep[-1])
15734 {
15735 case 0x6f: /* outsw/outsl */
15736 intel_operand_size (z_mode, sizeflag);
15737 break;
15738 case 0xa5: /* movsw/movsl/movsq */
15739 case 0xa7: /* cmpsw/cmpsl/cmpsq */
15740 case 0xad: /* lodsw/lodsl/lodsq */
15741 intel_operand_size (v_mode, sizeflag);
15742 break;
15743 default:
15744 intel_operand_size (b_mode, sizeflag);
15745 }
15746 }
285ca992
L
15747 /* Set active_seg_prefix to PREFIX_DS if it is unset so that the
15748 default segment register DS is printed. */
15749 if (!active_seg_prefix)
15750 active_seg_prefix = PREFIX_DS;
6608db57 15751 append_seg ();
252b5132
RH
15752 ptr_reg (code, sizeflag);
15753}
15754
252b5132 15755static void
26ca5450 15756OP_C (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 15757{
9b60702d 15758 int add;
161a04f6 15759 if (rex & REX_R)
c4a530c5 15760 {
161a04f6 15761 USED_REX (REX_R);
c4a530c5
JB
15762 add = 8;
15763 }
cb712a9e 15764 else if (address_mode != mode_64bit && (prefixes & PREFIX_LOCK))
c4a530c5 15765 {
f16cd0d5 15766 all_prefixes[last_lock_prefix] = 0;
c4a530c5
JB
15767 used_prefixes |= PREFIX_LOCK;
15768 add = 8;
15769 }
9b60702d
L
15770 else
15771 add = 0;
7967e09e 15772 sprintf (scratchbuf, "%%cr%d", modrm.reg + add);
9ce09ba2 15773 oappend_maybe_intel (scratchbuf);
252b5132
RH
15774}
15775
252b5132 15776static void
26ca5450 15777OP_D (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 15778{
9b60702d 15779 int add;
161a04f6
L
15780 USED_REX (REX_R);
15781 if (rex & REX_R)
52b15da3 15782 add = 8;
9b60702d
L
15783 else
15784 add = 0;
d708bcba 15785 if (intel_syntax)
7967e09e 15786 sprintf (scratchbuf, "db%d", modrm.reg + add);
d708bcba 15787 else
7967e09e 15788 sprintf (scratchbuf, "%%db%d", modrm.reg + add);
252b5132
RH
15789 oappend (scratchbuf);
15790}
15791
252b5132 15792static void
26ca5450 15793OP_T (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 15794{
7967e09e 15795 sprintf (scratchbuf, "%%tr%d", modrm.reg);
9ce09ba2 15796 oappend_maybe_intel (scratchbuf);
252b5132
RH
15797}
15798
15799static void
6f74c397 15800OP_R (int bytemode, int sizeflag)
252b5132 15801{
7967e09e 15802 if (modrm.mod == 3)
2da11e11
AM
15803 OP_E (bytemode, sizeflag);
15804 else
6608db57 15805 BadOp ();
252b5132
RH
15806}
15807
15808static void
26ca5450 15809OP_MMX (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 15810{
b9733481
L
15811 int reg = modrm.reg;
15812 const char **names;
15813
041bd2e0
JH
15814 used_prefixes |= (prefixes & PREFIX_DATA);
15815 if (prefixes & PREFIX_DATA)
20f0a1fc 15816 {
b9733481 15817 names = names_xmm;
161a04f6
L
15818 USED_REX (REX_R);
15819 if (rex & REX_R)
b9733481 15820 reg += 8;
20f0a1fc 15821 }
041bd2e0 15822 else
b9733481
L
15823 names = names_mm;
15824 oappend (names[reg]);
252b5132
RH
15825}
15826
c608c12e 15827static void
c0f3af97 15828OP_XMM (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
c608c12e 15829{
b9733481
L
15830 int reg = modrm.reg;
15831 const char **names;
15832
161a04f6
L
15833 USED_REX (REX_R);
15834 if (rex & REX_R)
b9733481 15835 reg += 8;
43234a1e
L
15836 if (vex.evex)
15837 {
15838 if (!vex.r)
15839 reg += 16;
15840 }
15841
539f890d
L
15842 if (need_vex
15843 && bytemode != xmm_mode
43234a1e
L
15844 && bytemode != xmmq_mode
15845 && bytemode != evex_half_bcst_xmmq_mode
15846 && bytemode != ymm_mode
539f890d 15847 && bytemode != scalar_mode)
c0f3af97
L
15848 {
15849 switch (vex.length)
15850 {
15851 case 128:
b9733481 15852 names = names_xmm;
c0f3af97
L
15853 break;
15854 case 256:
5fc35d96
IT
15855 if (vex.w
15856 || (bytemode != vex_vsib_q_w_dq_mode
15857 && bytemode != vex_vsib_q_w_d_mode))
6c30d220
L
15858 names = names_ymm;
15859 else
15860 names = names_xmm;
c0f3af97 15861 break;
43234a1e
L
15862 case 512:
15863 names = names_zmm;
15864 break;
c0f3af97
L
15865 default:
15866 abort ();
15867 }
15868 }
43234a1e
L
15869 else if (bytemode == xmmq_mode
15870 || bytemode == evex_half_bcst_xmmq_mode)
15871 {
15872 switch (vex.length)
15873 {
15874 case 128:
15875 case 256:
15876 names = names_xmm;
15877 break;
15878 case 512:
15879 names = names_ymm;
15880 break;
15881 default:
15882 abort ();
15883 }
15884 }
15885 else if (bytemode == ymm_mode)
15886 names = names_ymm;
c0f3af97 15887 else
b9733481
L
15888 names = names_xmm;
15889 oappend (names[reg]);
c608c12e
AM
15890}
15891
252b5132 15892static void
26ca5450 15893OP_EM (int bytemode, int sizeflag)
252b5132 15894{
b9733481
L
15895 int reg;
15896 const char **names;
15897
7967e09e 15898 if (modrm.mod != 3)
252b5132 15899 {
b6169b20
L
15900 if (intel_syntax
15901 && (bytemode == v_mode || bytemode == v_swap_mode))
9306ca4a
JB
15902 {
15903 bytemode = (prefixes & PREFIX_DATA) ? x_mode : q_mode;
15904 used_prefixes |= (prefixes & PREFIX_DATA);
6c067bbb 15905 }
252b5132
RH
15906 OP_E (bytemode, sizeflag);
15907 return;
15908 }
15909
b6169b20
L
15910 if ((sizeflag & SUFFIX_ALWAYS) && bytemode == v_swap_mode)
15911 swap_operand ();
15912
6608db57 15913 /* Skip mod/rm byte. */
4bba6815 15914 MODRM_CHECK;
252b5132 15915 codep++;
041bd2e0 15916 used_prefixes |= (prefixes & PREFIX_DATA);
b9733481 15917 reg = modrm.rm;
041bd2e0 15918 if (prefixes & PREFIX_DATA)
20f0a1fc 15919 {
b9733481 15920 names = names_xmm;
161a04f6
L
15921 USED_REX (REX_B);
15922 if (rex & REX_B)
b9733481 15923 reg += 8;
20f0a1fc 15924 }
041bd2e0 15925 else
b9733481
L
15926 names = names_mm;
15927 oappend (names[reg]);
252b5132
RH
15928}
15929
246c51aa
L
15930/* cvt* are the only instructions in sse2 which have
15931 both SSE and MMX operands and also have 0x66 prefix
15932 in their opcode. 0x66 was originally used to differentiate
15933 between SSE and MMX instruction(operands). So we have to handle the
4d9567e0
MM
15934 cvt* separately using OP_EMC and OP_MXC */
15935static void
15936OP_EMC (int bytemode, int sizeflag)
15937{
7967e09e 15938 if (modrm.mod != 3)
4d9567e0
MM
15939 {
15940 if (intel_syntax && bytemode == v_mode)
15941 {
15942 bytemode = (prefixes & PREFIX_DATA) ? x_mode : q_mode;
15943 used_prefixes |= (prefixes & PREFIX_DATA);
6c067bbb 15944 }
4d9567e0
MM
15945 OP_E (bytemode, sizeflag);
15946 return;
15947 }
246c51aa 15948
4d9567e0
MM
15949 /* Skip mod/rm byte. */
15950 MODRM_CHECK;
15951 codep++;
15952 used_prefixes |= (prefixes & PREFIX_DATA);
b9733481 15953 oappend (names_mm[modrm.rm]);
4d9567e0
MM
15954}
15955
15956static void
15957OP_MXC (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
15958{
15959 used_prefixes |= (prefixes & PREFIX_DATA);
b9733481 15960 oappend (names_mm[modrm.reg]);
4d9567e0
MM
15961}
15962
c608c12e 15963static void
26ca5450 15964OP_EX (int bytemode, int sizeflag)
c608c12e 15965{
b9733481
L
15966 int reg;
15967 const char **names;
d6f574e0
L
15968
15969 /* Skip mod/rm byte. */
15970 MODRM_CHECK;
15971 codep++;
15972
7967e09e 15973 if (modrm.mod != 3)
c608c12e 15974 {
c1e679ec 15975 OP_E_memory (bytemode, sizeflag);
c608c12e
AM
15976 return;
15977 }
d6f574e0 15978
b9733481 15979 reg = modrm.rm;
161a04f6
L
15980 USED_REX (REX_B);
15981 if (rex & REX_B)
b9733481 15982 reg += 8;
43234a1e
L
15983 if (vex.evex)
15984 {
15985 USED_REX (REX_X);
15986 if ((rex & REX_X))
15987 reg += 16;
15988 }
c608c12e 15989
b6169b20 15990 if ((sizeflag & SUFFIX_ALWAYS)
fa99fab2
L
15991 && (bytemode == x_swap_mode
15992 || bytemode == d_swap_mode
1ba585e8 15993 || bytemode == dqw_swap_mode
7bb15c6f 15994 || bytemode == d_scalar_swap_mode
539f890d
L
15995 || bytemode == q_swap_mode
15996 || bytemode == q_scalar_swap_mode))
b6169b20
L
15997 swap_operand ();
15998
c0f3af97
L
15999 if (need_vex
16000 && bytemode != xmm_mode
6c30d220
L
16001 && bytemode != xmmdw_mode
16002 && bytemode != xmmqd_mode
16003 && bytemode != xmm_mb_mode
16004 && bytemode != xmm_mw_mode
16005 && bytemode != xmm_md_mode
16006 && bytemode != xmm_mq_mode
43234a1e 16007 && bytemode != xmm_mdq_mode
539f890d 16008 && bytemode != xmmq_mode
43234a1e
L
16009 && bytemode != evex_half_bcst_xmmq_mode
16010 && bytemode != ymm_mode
539f890d 16011 && bytemode != d_scalar_mode
7bb15c6f 16012 && bytemode != d_scalar_swap_mode
539f890d 16013 && bytemode != q_scalar_mode
1c480963
L
16014 && bytemode != q_scalar_swap_mode
16015 && bytemode != vex_scalar_w_dq_mode)
c0f3af97
L
16016 {
16017 switch (vex.length)
16018 {
16019 case 128:
b9733481 16020 names = names_xmm;
c0f3af97
L
16021 break;
16022 case 256:
b9733481 16023 names = names_ymm;
c0f3af97 16024 break;
43234a1e
L
16025 case 512:
16026 names = names_zmm;
16027 break;
c0f3af97
L
16028 default:
16029 abort ();
16030 }
16031 }
43234a1e
L
16032 else if (bytemode == xmmq_mode
16033 || bytemode == evex_half_bcst_xmmq_mode)
16034 {
16035 switch (vex.length)
16036 {
16037 case 128:
16038 case 256:
16039 names = names_xmm;
16040 break;
16041 case 512:
16042 names = names_ymm;
16043 break;
16044 default:
16045 abort ();
16046 }
16047 }
16048 else if (bytemode == ymm_mode)
16049 names = names_ymm;
c0f3af97 16050 else
b9733481
L
16051 names = names_xmm;
16052 oappend (names[reg]);
c608c12e
AM
16053}
16054
252b5132 16055static void
26ca5450 16056OP_MS (int bytemode, int sizeflag)
252b5132 16057{
7967e09e 16058 if (modrm.mod == 3)
2da11e11
AM
16059 OP_EM (bytemode, sizeflag);
16060 else
6608db57 16061 BadOp ();
252b5132
RH
16062}
16063
992aaec9 16064static void
26ca5450 16065OP_XS (int bytemode, int sizeflag)
992aaec9 16066{
7967e09e 16067 if (modrm.mod == 3)
992aaec9
AM
16068 OP_EX (bytemode, sizeflag);
16069 else
6608db57 16070 BadOp ();
992aaec9
AM
16071}
16072
cc0ec051
AM
16073static void
16074OP_M (int bytemode, int sizeflag)
16075{
7967e09e 16076 if (modrm.mod == 3)
75413a22
L
16077 /* bad bound,lea,lds,les,lfs,lgs,lss,cmpxchg8b,vmptrst modrm */
16078 BadOp ();
cc0ec051
AM
16079 else
16080 OP_E (bytemode, sizeflag);
16081}
16082
16083static void
16084OP_0f07 (int bytemode, int sizeflag)
16085{
7967e09e 16086 if (modrm.mod != 3 || modrm.rm != 0)
cc0ec051
AM
16087 BadOp ();
16088 else
16089 OP_E (bytemode, sizeflag);
16090}
16091
46e883c5 16092/* NOP is an alias of "xchg %ax,%ax" in 16bit mode, "xchg %eax,%eax" in
246c51aa 16093 32bit mode and "xchg %rax,%rax" in 64bit mode. */
46e883c5 16094
cc0ec051 16095static void
46e883c5 16096NOP_Fixup1 (int bytemode, int sizeflag)
cc0ec051 16097{
8b38ad71
L
16098 if ((prefixes & PREFIX_DATA) != 0
16099 || (rex != 0
16100 && rex != 0x48
16101 && address_mode == mode_64bit))
46e883c5
L
16102 OP_REG (bytemode, sizeflag);
16103 else
16104 strcpy (obuf, "nop");
16105}
16106
16107static void
16108NOP_Fixup2 (int bytemode, int sizeflag)
16109{
8b38ad71
L
16110 if ((prefixes & PREFIX_DATA) != 0
16111 || (rex != 0
16112 && rex != 0x48
16113 && address_mode == mode_64bit))
46e883c5 16114 OP_IMREG (bytemode, sizeflag);
cc0ec051
AM
16115}
16116
84037f8c 16117static const char *const Suffix3DNow[] = {
252b5132
RH
16118/* 00 */ NULL, NULL, NULL, NULL,
16119/* 04 */ NULL, NULL, NULL, NULL,
16120/* 08 */ NULL, NULL, NULL, NULL,
9e525108 16121/* 0C */ "pi2fw", "pi2fd", NULL, NULL,
252b5132
RH
16122/* 10 */ NULL, NULL, NULL, NULL,
16123/* 14 */ NULL, NULL, NULL, NULL,
16124/* 18 */ NULL, NULL, NULL, NULL,
9e525108 16125/* 1C */ "pf2iw", "pf2id", NULL, NULL,
252b5132
RH
16126/* 20 */ NULL, NULL, NULL, NULL,
16127/* 24 */ NULL, NULL, NULL, NULL,
16128/* 28 */ NULL, NULL, NULL, NULL,
16129/* 2C */ NULL, NULL, NULL, NULL,
16130/* 30 */ NULL, NULL, NULL, NULL,
16131/* 34 */ NULL, NULL, NULL, NULL,
16132/* 38 */ NULL, NULL, NULL, NULL,
16133/* 3C */ NULL, NULL, NULL, NULL,
16134/* 40 */ NULL, NULL, NULL, NULL,
16135/* 44 */ NULL, NULL, NULL, NULL,
16136/* 48 */ NULL, NULL, NULL, NULL,
16137/* 4C */ NULL, NULL, NULL, NULL,
16138/* 50 */ NULL, NULL, NULL, NULL,
16139/* 54 */ NULL, NULL, NULL, NULL,
16140/* 58 */ NULL, NULL, NULL, NULL,
16141/* 5C */ NULL, NULL, NULL, NULL,
16142/* 60 */ NULL, NULL, NULL, NULL,
16143/* 64 */ NULL, NULL, NULL, NULL,
16144/* 68 */ NULL, NULL, NULL, NULL,
16145/* 6C */ NULL, NULL, NULL, NULL,
16146/* 70 */ NULL, NULL, NULL, NULL,
16147/* 74 */ NULL, NULL, NULL, NULL,
16148/* 78 */ NULL, NULL, NULL, NULL,
16149/* 7C */ NULL, NULL, NULL, NULL,
16150/* 80 */ NULL, NULL, NULL, NULL,
16151/* 84 */ NULL, NULL, NULL, NULL,
9e525108
AM
16152/* 88 */ NULL, NULL, "pfnacc", NULL,
16153/* 8C */ NULL, NULL, "pfpnacc", NULL,
252b5132
RH
16154/* 90 */ "pfcmpge", NULL, NULL, NULL,
16155/* 94 */ "pfmin", NULL, "pfrcp", "pfrsqrt",
16156/* 98 */ NULL, NULL, "pfsub", NULL,
16157/* 9C */ NULL, NULL, "pfadd", NULL,
16158/* A0 */ "pfcmpgt", NULL, NULL, NULL,
16159/* A4 */ "pfmax", NULL, "pfrcpit1", "pfrsqit1",
16160/* A8 */ NULL, NULL, "pfsubr", NULL,
16161/* AC */ NULL, NULL, "pfacc", NULL,
16162/* B0 */ "pfcmpeq", NULL, NULL, NULL,
9beff690 16163/* B4 */ "pfmul", NULL, "pfrcpit2", "pmulhrw",
9e525108 16164/* B8 */ NULL, NULL, NULL, "pswapd",
252b5132
RH
16165/* BC */ NULL, NULL, NULL, "pavgusb",
16166/* C0 */ NULL, NULL, NULL, NULL,
16167/* C4 */ NULL, NULL, NULL, NULL,
16168/* C8 */ NULL, NULL, NULL, NULL,
16169/* CC */ NULL, NULL, NULL, NULL,
16170/* D0 */ NULL, NULL, NULL, NULL,
16171/* D4 */ NULL, NULL, NULL, NULL,
16172/* D8 */ NULL, NULL, NULL, NULL,
16173/* DC */ NULL, NULL, NULL, NULL,
16174/* E0 */ NULL, NULL, NULL, NULL,
16175/* E4 */ NULL, NULL, NULL, NULL,
16176/* E8 */ NULL, NULL, NULL, NULL,
16177/* EC */ NULL, NULL, NULL, NULL,
16178/* F0 */ NULL, NULL, NULL, NULL,
16179/* F4 */ NULL, NULL, NULL, NULL,
16180/* F8 */ NULL, NULL, NULL, NULL,
16181/* FC */ NULL, NULL, NULL, NULL,
16182};
16183
16184static void
26ca5450 16185OP_3DNowSuffix (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132
RH
16186{
16187 const char *mnemonic;
16188
16189 FETCH_DATA (the_info, codep + 1);
16190 /* AMD 3DNow! instructions are specified by an opcode suffix in the
16191 place where an 8-bit immediate would normally go. ie. the last
16192 byte of the instruction. */
ea397f5b 16193 obufp = mnemonicendp;
c608c12e 16194 mnemonic = Suffix3DNow[*codep++ & 0xff];
252b5132 16195 if (mnemonic)
2da11e11 16196 oappend (mnemonic);
252b5132
RH
16197 else
16198 {
16199 /* Since a variable sized modrm/sib chunk is between the start
16200 of the opcode (0x0f0f) and the opcode suffix, we need to do
16201 all the modrm processing first, and don't know until now that
16202 we have a bad opcode. This necessitates some cleaning up. */
ce518a5f
L
16203 op_out[0][0] = '\0';
16204 op_out[1][0] = '\0';
6608db57 16205 BadOp ();
252b5132 16206 }
ea397f5b 16207 mnemonicendp = obufp;
252b5132 16208}
c608c12e 16209
ea397f5b
L
16210static struct op simd_cmp_op[] =
16211{
16212 { STRING_COMMA_LEN ("eq") },
16213 { STRING_COMMA_LEN ("lt") },
16214 { STRING_COMMA_LEN ("le") },
16215 { STRING_COMMA_LEN ("unord") },
16216 { STRING_COMMA_LEN ("neq") },
16217 { STRING_COMMA_LEN ("nlt") },
16218 { STRING_COMMA_LEN ("nle") },
16219 { STRING_COMMA_LEN ("ord") }
c608c12e
AM
16220};
16221
16222static void
ad19981d 16223CMP_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
c608c12e
AM
16224{
16225 unsigned int cmp_type;
16226
16227 FETCH_DATA (the_info, codep + 1);
16228 cmp_type = *codep++ & 0xff;
c0f3af97 16229 if (cmp_type < ARRAY_SIZE (simd_cmp_op))
c608c12e 16230 {
ad19981d 16231 char suffix [3];
ea397f5b 16232 char *p = mnemonicendp - 2;
ad19981d
L
16233 suffix[0] = p[0];
16234 suffix[1] = p[1];
16235 suffix[2] = '\0';
ea397f5b
L
16236 sprintf (p, "%s%s", simd_cmp_op[cmp_type].name, suffix);
16237 mnemonicendp += simd_cmp_op[cmp_type].len;
c608c12e
AM
16238 }
16239 else
16240 {
ad19981d
L
16241 /* We have a reserved extension byte. Output it directly. */
16242 scratchbuf[0] = '$';
16243 print_operand_value (scratchbuf + 1, 1, cmp_type);
9ce09ba2 16244 oappend_maybe_intel (scratchbuf);
ad19981d 16245 scratchbuf[0] = '\0';
c608c12e
AM
16246 }
16247}
16248
ca164297 16249static void
b844680a
L
16250OP_Mwait (int bytemode ATTRIBUTE_UNUSED,
16251 int sizeflag ATTRIBUTE_UNUSED)
16252{
16253 /* mwait %eax,%ecx */
16254 if (!intel_syntax)
16255 {
16256 const char **names = (address_mode == mode_64bit
16257 ? names64 : names32);
16258 strcpy (op_out[0], names[0]);
16259 strcpy (op_out[1], names[1]);
16260 two_source_ops = 1;
16261 }
16262 /* Skip mod/rm byte. */
16263 MODRM_CHECK;
16264 codep++;
16265}
16266
16267static void
16268OP_Monitor (int bytemode ATTRIBUTE_UNUSED,
16269 int sizeflag ATTRIBUTE_UNUSED)
ca164297 16270{
b844680a
L
16271 /* monitor %eax,%ecx,%edx" */
16272 if (!intel_syntax)
ca164297 16273 {
b844680a 16274 const char **op1_names;
cb712a9e
L
16275 const char **names = (address_mode == mode_64bit
16276 ? names64 : names32);
1d9f512f 16277
b844680a
L
16278 if (!(prefixes & PREFIX_ADDR))
16279 op1_names = (address_mode == mode_16bit
16280 ? names16 : names);
ca164297
L
16281 else
16282 {
b844680a 16283 /* Remove "addr16/addr32". */
f16cd0d5 16284 all_prefixes[last_addr_prefix] = 0;
b844680a
L
16285 op1_names = (address_mode != mode_32bit
16286 ? names32 : names16);
16287 used_prefixes |= PREFIX_ADDR;
ca164297 16288 }
b844680a
L
16289 strcpy (op_out[0], op1_names[0]);
16290 strcpy (op_out[1], names[1]);
16291 strcpy (op_out[2], names[2]);
16292 two_source_ops = 1;
ca164297 16293 }
b844680a
L
16294 /* Skip mod/rm byte. */
16295 MODRM_CHECK;
16296 codep++;
30123838
JB
16297}
16298
6608db57
KH
16299static void
16300BadOp (void)
2da11e11 16301{
6608db57
KH
16302 /* Throw away prefixes and 1st. opcode byte. */
16303 codep = insn_codep + 1;
2da11e11
AM
16304 oappend ("(bad)");
16305}
4cc91dba 16306
35c52694
L
16307static void
16308REP_Fixup (int bytemode, int sizeflag)
16309{
16310 /* The 0xf3 prefix should be displayed as "rep" for ins, outs, movs,
16311 lods and stos. */
35c52694 16312 if (prefixes & PREFIX_REPZ)
f16cd0d5 16313 all_prefixes[last_repz_prefix] = REP_PREFIX;
35c52694
L
16314
16315 switch (bytemode)
16316 {
16317 case al_reg:
16318 case eAX_reg:
16319 case indir_dx_reg:
16320 OP_IMREG (bytemode, sizeflag);
16321 break;
16322 case eDI_reg:
16323 OP_ESreg (bytemode, sizeflag);
16324 break;
16325 case eSI_reg:
16326 OP_DSreg (bytemode, sizeflag);
16327 break;
16328 default:
16329 abort ();
16330 break;
16331 }
16332}
f5804c90 16333
7e8b059b
L
16334/* For BND-prefixed instructions 0xF2 prefix should be displayed as
16335 "bnd". */
16336
16337static void
16338BND_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
16339{
16340 if (prefixes & PREFIX_REPNZ)
16341 all_prefixes[last_repnz_prefix] = BND_PREFIX;
16342}
16343
42164a71
L
16344/* Similar to OP_E. But the 0xf2/0xf3 prefixes should be displayed as
16345 "xacquire"/"xrelease" for memory operand if there is a LOCK prefix.
16346 */
16347
16348static void
16349HLE_Fixup1 (int bytemode, int sizeflag)
16350{
16351 if (modrm.mod != 3
16352 && (prefixes & PREFIX_LOCK) != 0)
16353 {
16354 if (prefixes & PREFIX_REPZ)
16355 all_prefixes[last_repz_prefix] = XRELEASE_PREFIX;
16356 if (prefixes & PREFIX_REPNZ)
16357 all_prefixes[last_repnz_prefix] = XACQUIRE_PREFIX;
16358 }
16359
16360 OP_E (bytemode, sizeflag);
16361}
16362
16363/* Similar to OP_E. But the 0xf2/0xf3 prefixes should be displayed as
16364 "xacquire"/"xrelease" for memory operand. No check for LOCK prefix.
16365 */
16366
16367static void
16368HLE_Fixup2 (int bytemode, int sizeflag)
16369{
16370 if (modrm.mod != 3)
16371 {
16372 if (prefixes & PREFIX_REPZ)
16373 all_prefixes[last_repz_prefix] = XRELEASE_PREFIX;
16374 if (prefixes & PREFIX_REPNZ)
16375 all_prefixes[last_repnz_prefix] = XACQUIRE_PREFIX;
16376 }
16377
16378 OP_E (bytemode, sizeflag);
16379}
16380
16381/* Similar to OP_E. But the 0xf3 prefixes should be displayed as
16382 "xrelease" for memory operand. No check for LOCK prefix. */
16383
16384static void
16385HLE_Fixup3 (int bytemode, int sizeflag)
16386{
16387 if (modrm.mod != 3
16388 && last_repz_prefix > last_repnz_prefix
16389 && (prefixes & PREFIX_REPZ) != 0)
16390 all_prefixes[last_repz_prefix] = XRELEASE_PREFIX;
16391
16392 OP_E (bytemode, sizeflag);
16393}
16394
f5804c90
L
16395static void
16396CMPXCHG8B_Fixup (int bytemode, int sizeflag)
16397{
161a04f6
L
16398 USED_REX (REX_W);
16399 if (rex & REX_W)
f5804c90
L
16400 {
16401 /* Change cmpxchg8b to cmpxchg16b. */
ea397f5b
L
16402 char *p = mnemonicendp - 2;
16403 mnemonicendp = stpcpy (p, "16b");
fb9c77c7 16404 bytemode = o_mode;
f5804c90 16405 }
42164a71
L
16406 else if ((prefixes & PREFIX_LOCK) != 0)
16407 {
16408 if (prefixes & PREFIX_REPZ)
16409 all_prefixes[last_repz_prefix] = XRELEASE_PREFIX;
16410 if (prefixes & PREFIX_REPNZ)
16411 all_prefixes[last_repnz_prefix] = XACQUIRE_PREFIX;
16412 }
16413
f5804c90
L
16414 OP_M (bytemode, sizeflag);
16415}
42903f7f
L
16416
16417static void
16418XMM_Fixup (int reg, int sizeflag ATTRIBUTE_UNUSED)
16419{
b9733481
L
16420 const char **names;
16421
c0f3af97
L
16422 if (need_vex)
16423 {
16424 switch (vex.length)
16425 {
16426 case 128:
b9733481 16427 names = names_xmm;
c0f3af97
L
16428 break;
16429 case 256:
b9733481 16430 names = names_ymm;
c0f3af97
L
16431 break;
16432 default:
16433 abort ();
16434 }
16435 }
16436 else
b9733481
L
16437 names = names_xmm;
16438 oappend (names[reg]);
42903f7f 16439}
381d071f
L
16440
16441static void
16442CRC32_Fixup (int bytemode, int sizeflag)
16443{
16444 /* Add proper suffix to "crc32". */
ea397f5b 16445 char *p = mnemonicendp;
381d071f
L
16446
16447 switch (bytemode)
16448 {
16449 case b_mode:
20592a94 16450 if (intel_syntax)
ea397f5b 16451 goto skip;
20592a94 16452
381d071f
L
16453 *p++ = 'b';
16454 break;
16455 case v_mode:
20592a94 16456 if (intel_syntax)
ea397f5b 16457 goto skip;
20592a94 16458
381d071f
L
16459 USED_REX (REX_W);
16460 if (rex & REX_W)
16461 *p++ = 'q';
7bb15c6f 16462 else
f16cd0d5
L
16463 {
16464 if (sizeflag & DFLAG)
16465 *p++ = 'l';
16466 else
16467 *p++ = 'w';
16468 used_prefixes |= (prefixes & PREFIX_DATA);
16469 }
381d071f
L
16470 break;
16471 default:
16472 oappend (INTERNAL_DISASSEMBLER_ERROR);
16473 break;
16474 }
ea397f5b 16475 mnemonicendp = p;
381d071f
L
16476 *p = '\0';
16477
ea397f5b 16478skip:
381d071f
L
16479 if (modrm.mod == 3)
16480 {
16481 int add;
16482
16483 /* Skip mod/rm byte. */
16484 MODRM_CHECK;
16485 codep++;
16486
16487 USED_REX (REX_B);
16488 add = (rex & REX_B) ? 8 : 0;
16489 if (bytemode == b_mode)
16490 {
16491 USED_REX (0);
16492 if (rex)
16493 oappend (names8rex[modrm.rm + add]);
16494 else
16495 oappend (names8[modrm.rm + add]);
16496 }
16497 else
16498 {
16499 USED_REX (REX_W);
16500 if (rex & REX_W)
16501 oappend (names64[modrm.rm + add]);
16502 else if ((prefixes & PREFIX_DATA))
16503 oappend (names16[modrm.rm + add]);
16504 else
16505 oappend (names32[modrm.rm + add]);
16506 }
16507 }
16508 else
9344ff29 16509 OP_E (bytemode, sizeflag);
381d071f 16510}
85f10a01 16511
eacc9c89
L
16512static void
16513FXSAVE_Fixup (int bytemode, int sizeflag)
16514{
16515 /* Add proper suffix to "fxsave" and "fxrstor". */
16516 USED_REX (REX_W);
16517 if (rex & REX_W)
16518 {
16519 char *p = mnemonicendp;
16520 *p++ = '6';
16521 *p++ = '4';
16522 *p = '\0';
16523 mnemonicendp = p;
16524 }
16525 OP_M (bytemode, sizeflag);
16526}
16527
c0f3af97
L
16528/* Display the destination register operand for instructions with
16529 VEX. */
16530
16531static void
16532OP_VEX (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
16533{
539f890d 16534 int reg;
b9733481
L
16535 const char **names;
16536
c0f3af97
L
16537 if (!need_vex)
16538 abort ();
16539
16540 if (!need_vex_reg)
16541 return;
16542
539f890d 16543 reg = vex.register_specifier;
43234a1e
L
16544 if (vex.evex)
16545 {
16546 if (!vex.v)
16547 reg += 16;
16548 }
16549
539f890d
L
16550 if (bytemode == vex_scalar_mode)
16551 {
16552 oappend (names_xmm[reg]);
16553 return;
16554 }
16555
c0f3af97
L
16556 switch (vex.length)
16557 {
16558 case 128:
16559 switch (bytemode)
16560 {
16561 case vex_mode:
16562 case vex128_mode:
6c30d220 16563 case vex_vsib_q_w_dq_mode:
5fc35d96 16564 case vex_vsib_q_w_d_mode:
cb21baef
L
16565 names = names_xmm;
16566 break;
16567 case dq_mode:
16568 if (vex.w)
16569 names = names64;
16570 else
16571 names = names32;
c0f3af97 16572 break;
1ba585e8 16573 case mask_bd_mode:
43234a1e
L
16574 case mask_mode:
16575 names = names_mask;
16576 break;
c0f3af97
L
16577 default:
16578 abort ();
16579 return;
16580 }
c0f3af97
L
16581 break;
16582 case 256:
16583 switch (bytemode)
16584 {
16585 case vex_mode:
16586 case vex256_mode:
6c30d220
L
16587 names = names_ymm;
16588 break;
16589 case vex_vsib_q_w_dq_mode:
5fc35d96 16590 case vex_vsib_q_w_d_mode:
6c30d220 16591 names = vex.w ? names_ymm : names_xmm;
c0f3af97 16592 break;
1ba585e8 16593 case mask_bd_mode:
43234a1e
L
16594 case mask_mode:
16595 names = names_mask;
16596 break;
c0f3af97
L
16597 default:
16598 abort ();
16599 return;
16600 }
c0f3af97 16601 break;
43234a1e
L
16602 case 512:
16603 names = names_zmm;
16604 break;
c0f3af97
L
16605 default:
16606 abort ();
16607 break;
16608 }
539f890d 16609 oappend (names[reg]);
c0f3af97
L
16610}
16611
922d8de8
DR
16612/* Get the VEX immediate byte without moving codep. */
16613
16614static unsigned char
ccc5981b 16615get_vex_imm8 (int sizeflag, int opnum)
922d8de8
DR
16616{
16617 int bytes_before_imm = 0;
16618
922d8de8
DR
16619 if (modrm.mod != 3)
16620 {
16621 /* There are SIB/displacement bytes. */
16622 if ((sizeflag & AFLAG) || address_mode == mode_64bit)
6c067bbb 16623 {
922d8de8 16624 /* 32/64 bit address mode */
6c067bbb 16625 int base = modrm.rm;
922d8de8
DR
16626
16627 /* Check SIB byte. */
6c067bbb
RM
16628 if (base == 4)
16629 {
16630 FETCH_DATA (the_info, codep + 1);
16631 base = *codep & 7;
16632 /* When decoding the third source, don't increase
16633 bytes_before_imm as this has already been incremented
16634 by one in OP_E_memory while decoding the second
16635 source operand. */
16636 if (opnum == 0)
16637 bytes_before_imm++;
16638 }
16639
16640 /* Don't increase bytes_before_imm when decoding the third source,
16641 it has already been incremented by OP_E_memory while decoding
16642 the second source operand. */
16643 if (opnum == 0)
16644 {
16645 switch (modrm.mod)
16646 {
16647 case 0:
16648 /* When modrm.rm == 5 or modrm.rm == 4 and base in
16649 SIB == 5, there is a 4 byte displacement. */
16650 if (base != 5)
16651 /* No displacement. */
16652 break;
16653 case 2:
16654 /* 4 byte displacement. */
16655 bytes_before_imm += 4;
16656 break;
16657 case 1:
16658 /* 1 byte displacement. */
16659 bytes_before_imm++;
16660 break;
16661 }
16662 }
16663 }
922d8de8 16664 else
02e647f9
SP
16665 {
16666 /* 16 bit address mode */
6c067bbb
RM
16667 /* Don't increase bytes_before_imm when decoding the third source,
16668 it has already been incremented by OP_E_memory while decoding
16669 the second source operand. */
16670 if (opnum == 0)
16671 {
02e647f9
SP
16672 switch (modrm.mod)
16673 {
16674 case 0:
16675 /* When modrm.rm == 6, there is a 2 byte displacement. */
16676 if (modrm.rm != 6)
16677 /* No displacement. */
16678 break;
16679 case 2:
16680 /* 2 byte displacement. */
16681 bytes_before_imm += 2;
16682 break;
16683 case 1:
16684 /* 1 byte displacement: when decoding the third source,
16685 don't increase bytes_before_imm as this has already
16686 been incremented by one in OP_E_memory while decoding
16687 the second source operand. */
16688 if (opnum == 0)
16689 bytes_before_imm++;
ccc5981b 16690
02e647f9
SP
16691 break;
16692 }
922d8de8
DR
16693 }
16694 }
16695 }
16696
16697 FETCH_DATA (the_info, codep + bytes_before_imm + 1);
16698 return codep [bytes_before_imm];
16699}
16700
16701static void
16702OP_EX_VexReg (int bytemode, int sizeflag, int reg)
16703{
b9733481
L
16704 const char **names;
16705
922d8de8
DR
16706 if (reg == -1 && modrm.mod != 3)
16707 {
16708 OP_E_memory (bytemode, sizeflag);
16709 return;
16710 }
16711 else
16712 {
16713 if (reg == -1)
16714 {
16715 reg = modrm.rm;
16716 USED_REX (REX_B);
16717 if (rex & REX_B)
16718 reg += 8;
16719 }
16720 else if (reg > 7 && address_mode != mode_64bit)
16721 BadOp ();
16722 }
16723
16724 switch (vex.length)
16725 {
16726 case 128:
b9733481 16727 names = names_xmm;
922d8de8
DR
16728 break;
16729 case 256:
b9733481 16730 names = names_ymm;
922d8de8
DR
16731 break;
16732 default:
16733 abort ();
16734 }
b9733481 16735 oappend (names[reg]);
922d8de8
DR
16736}
16737
a683cc34
SP
16738static void
16739OP_EX_VexImmW (int bytemode, int sizeflag)
16740{
16741 int reg = -1;
16742 static unsigned char vex_imm8;
16743
16744 if (vex_w_done == 0)
16745 {
16746 vex_w_done = 1;
16747
16748 /* Skip mod/rm byte. */
16749 MODRM_CHECK;
16750 codep++;
16751
16752 vex_imm8 = get_vex_imm8 (sizeflag, 0);
16753
16754 if (vex.w)
16755 reg = vex_imm8 >> 4;
16756
16757 OP_EX_VexReg (bytemode, sizeflag, reg);
16758 }
16759 else if (vex_w_done == 1)
16760 {
16761 vex_w_done = 2;
16762
16763 if (!vex.w)
16764 reg = vex_imm8 >> 4;
16765
16766 OP_EX_VexReg (bytemode, sizeflag, reg);
16767 }
16768 else
16769 {
16770 /* Output the imm8 directly. */
16771 scratchbuf[0] = '$';
16772 print_operand_value (scratchbuf + 1, 1, vex_imm8 & 0xf);
9ce09ba2 16773 oappend_maybe_intel (scratchbuf);
a683cc34
SP
16774 scratchbuf[0] = '\0';
16775 codep++;
16776 }
16777}
16778
5dd85c99
SP
16779static void
16780OP_Vex_2src (int bytemode, int sizeflag)
16781{
16782 if (modrm.mod == 3)
16783 {
b9733481 16784 int reg = modrm.rm;
5dd85c99 16785 USED_REX (REX_B);
b9733481
L
16786 if (rex & REX_B)
16787 reg += 8;
16788 oappend (names_xmm[reg]);
5dd85c99
SP
16789 }
16790 else
16791 {
16792 if (intel_syntax
16793 && (bytemode == v_mode || bytemode == v_swap_mode))
16794 {
16795 bytemode = (prefixes & PREFIX_DATA) ? x_mode : q_mode;
16796 used_prefixes |= (prefixes & PREFIX_DATA);
16797 }
16798 OP_E (bytemode, sizeflag);
16799 }
16800}
16801
16802static void
16803OP_Vex_2src_1 (int bytemode, int sizeflag)
16804{
16805 if (modrm.mod == 3)
16806 {
16807 /* Skip mod/rm byte. */
16808 MODRM_CHECK;
16809 codep++;
16810 }
16811
16812 if (vex.w)
b9733481 16813 oappend (names_xmm[vex.register_specifier]);
5dd85c99
SP
16814 else
16815 OP_Vex_2src (bytemode, sizeflag);
16816}
16817
16818static void
16819OP_Vex_2src_2 (int bytemode, int sizeflag)
16820{
16821 if (vex.w)
16822 OP_Vex_2src (bytemode, sizeflag);
16823 else
b9733481 16824 oappend (names_xmm[vex.register_specifier]);
5dd85c99
SP
16825}
16826
922d8de8
DR
16827static void
16828OP_EX_VexW (int bytemode, int sizeflag)
16829{
16830 int reg = -1;
16831
16832 if (!vex_w_done)
16833 {
16834 vex_w_done = 1;
41effecb
SP
16835
16836 /* Skip mod/rm byte. */
16837 MODRM_CHECK;
16838 codep++;
16839
922d8de8 16840 if (vex.w)
ccc5981b 16841 reg = get_vex_imm8 (sizeflag, 0) >> 4;
922d8de8
DR
16842 }
16843 else
16844 {
16845 if (!vex.w)
ccc5981b 16846 reg = get_vex_imm8 (sizeflag, 1) >> 4;
922d8de8
DR
16847 }
16848
16849 OP_EX_VexReg (bytemode, sizeflag, reg);
16850}
16851
922d8de8
DR
16852static void
16853VEXI4_Fixup (int bytemode ATTRIBUTE_UNUSED,
16854 int sizeflag ATTRIBUTE_UNUSED)
16855{
16856 /* Skip the immediate byte and check for invalid bits. */
16857 FETCH_DATA (the_info, codep + 1);
16858 if (*codep++ & 0xf)
16859 BadOp ();
16860}
16861
c0f3af97
L
16862static void
16863OP_REG_VexI4 (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
16864{
16865 int reg;
b9733481
L
16866 const char **names;
16867
c0f3af97
L
16868 FETCH_DATA (the_info, codep + 1);
16869 reg = *codep++;
16870
16871 if (bytemode != x_mode)
16872 abort ();
16873
16874 if (reg & 0xf)
16875 BadOp ();
16876
16877 reg >>= 4;
dae39acc
L
16878 if (reg > 7 && address_mode != mode_64bit)
16879 BadOp ();
16880
c0f3af97
L
16881 switch (vex.length)
16882 {
16883 case 128:
b9733481 16884 names = names_xmm;
c0f3af97
L
16885 break;
16886 case 256:
b9733481 16887 names = names_ymm;
c0f3af97
L
16888 break;
16889 default:
16890 abort ();
16891 }
b9733481 16892 oappend (names[reg]);
c0f3af97
L
16893}
16894
922d8de8
DR
16895static void
16896OP_XMM_VexW (int bytemode, int sizeflag)
16897{
16898 /* Turn off the REX.W bit since it is used for swapping operands
16899 now. */
16900 rex &= ~REX_W;
16901 OP_XMM (bytemode, sizeflag);
16902}
16903
c0f3af97
L
16904static void
16905OP_EX_Vex (int bytemode, int sizeflag)
16906{
16907 if (modrm.mod != 3)
16908 {
16909 if (vex.register_specifier != 0)
16910 BadOp ();
16911 need_vex_reg = 0;
16912 }
16913 OP_EX (bytemode, sizeflag);
16914}
16915
16916static void
16917OP_XMM_Vex (int bytemode, int sizeflag)
16918{
16919 if (modrm.mod != 3)
16920 {
16921 if (vex.register_specifier != 0)
16922 BadOp ();
16923 need_vex_reg = 0;
16924 }
16925 OP_XMM (bytemode, sizeflag);
16926}
16927
16928static void
16929VZERO_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
16930{
16931 switch (vex.length)
16932 {
16933 case 128:
ea397f5b 16934 mnemonicendp = stpcpy (obuf, "vzeroupper");
c0f3af97
L
16935 break;
16936 case 256:
ea397f5b 16937 mnemonicendp = stpcpy (obuf, "vzeroall");
c0f3af97
L
16938 break;
16939 default:
16940 abort ();
16941 }
16942}
16943
ea397f5b
L
16944static struct op vex_cmp_op[] =
16945{
16946 { STRING_COMMA_LEN ("eq") },
16947 { STRING_COMMA_LEN ("lt") },
16948 { STRING_COMMA_LEN ("le") },
16949 { STRING_COMMA_LEN ("unord") },
16950 { STRING_COMMA_LEN ("neq") },
16951 { STRING_COMMA_LEN ("nlt") },
16952 { STRING_COMMA_LEN ("nle") },
16953 { STRING_COMMA_LEN ("ord") },
16954 { STRING_COMMA_LEN ("eq_uq") },
16955 { STRING_COMMA_LEN ("nge") },
16956 { STRING_COMMA_LEN ("ngt") },
16957 { STRING_COMMA_LEN ("false") },
16958 { STRING_COMMA_LEN ("neq_oq") },
16959 { STRING_COMMA_LEN ("ge") },
16960 { STRING_COMMA_LEN ("gt") },
16961 { STRING_COMMA_LEN ("true") },
16962 { STRING_COMMA_LEN ("eq_os") },
16963 { STRING_COMMA_LEN ("lt_oq") },
16964 { STRING_COMMA_LEN ("le_oq") },
16965 { STRING_COMMA_LEN ("unord_s") },
16966 { STRING_COMMA_LEN ("neq_us") },
16967 { STRING_COMMA_LEN ("nlt_uq") },
16968 { STRING_COMMA_LEN ("nle_uq") },
16969 { STRING_COMMA_LEN ("ord_s") },
16970 { STRING_COMMA_LEN ("eq_us") },
16971 { STRING_COMMA_LEN ("nge_uq") },
16972 { STRING_COMMA_LEN ("ngt_uq") },
16973 { STRING_COMMA_LEN ("false_os") },
16974 { STRING_COMMA_LEN ("neq_os") },
16975 { STRING_COMMA_LEN ("ge_oq") },
16976 { STRING_COMMA_LEN ("gt_oq") },
16977 { STRING_COMMA_LEN ("true_us") },
c0f3af97
L
16978};
16979
16980static void
16981VCMP_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
16982{
16983 unsigned int cmp_type;
16984
16985 FETCH_DATA (the_info, codep + 1);
16986 cmp_type = *codep++ & 0xff;
16987 if (cmp_type < ARRAY_SIZE (vex_cmp_op))
16988 {
16989 char suffix [3];
ea397f5b 16990 char *p = mnemonicendp - 2;
c0f3af97
L
16991 suffix[0] = p[0];
16992 suffix[1] = p[1];
16993 suffix[2] = '\0';
ea397f5b
L
16994 sprintf (p, "%s%s", vex_cmp_op[cmp_type].name, suffix);
16995 mnemonicendp += vex_cmp_op[cmp_type].len;
c0f3af97
L
16996 }
16997 else
16998 {
16999 /* We have a reserved extension byte. Output it directly. */
17000 scratchbuf[0] = '$';
17001 print_operand_value (scratchbuf + 1, 1, cmp_type);
9ce09ba2 17002 oappend_maybe_intel (scratchbuf);
c0f3af97
L
17003 scratchbuf[0] = '\0';
17004 }
17005}
17006
43234a1e
L
17007static void
17008VPCMP_Fixup (int bytemode ATTRIBUTE_UNUSED,
17009 int sizeflag ATTRIBUTE_UNUSED)
17010{
17011 unsigned int cmp_type;
17012
17013 if (!vex.evex)
17014 abort ();
17015
17016 FETCH_DATA (the_info, codep + 1);
17017 cmp_type = *codep++ & 0xff;
17018 /* There are aliases for immediates 0, 1, 2, 4, 5, 6.
17019 If it's the case, print suffix, otherwise - print the immediate. */
17020 if (cmp_type < ARRAY_SIZE (simd_cmp_op)
17021 && cmp_type != 3
17022 && cmp_type != 7)
17023 {
17024 char suffix [3];
17025 char *p = mnemonicendp - 2;
17026
17027 /* vpcmp* can have both one- and two-lettered suffix. */
17028 if (p[0] == 'p')
17029 {
17030 p++;
17031 suffix[0] = p[0];
17032 suffix[1] = '\0';
17033 }
17034 else
17035 {
17036 suffix[0] = p[0];
17037 suffix[1] = p[1];
17038 suffix[2] = '\0';
17039 }
17040
17041 sprintf (p, "%s%s", simd_cmp_op[cmp_type].name, suffix);
17042 mnemonicendp += simd_cmp_op[cmp_type].len;
17043 }
17044 else
17045 {
17046 /* We have a reserved extension byte. Output it directly. */
17047 scratchbuf[0] = '$';
17048 print_operand_value (scratchbuf + 1, 1, cmp_type);
9ce09ba2 17049 oappend_maybe_intel (scratchbuf);
43234a1e
L
17050 scratchbuf[0] = '\0';
17051 }
17052}
17053
ea397f5b
L
17054static const struct op pclmul_op[] =
17055{
17056 { STRING_COMMA_LEN ("lql") },
17057 { STRING_COMMA_LEN ("hql") },
17058 { STRING_COMMA_LEN ("lqh") },
17059 { STRING_COMMA_LEN ("hqh") }
c0f3af97
L
17060};
17061
17062static void
17063PCLMUL_Fixup (int bytemode ATTRIBUTE_UNUSED,
17064 int sizeflag ATTRIBUTE_UNUSED)
17065{
17066 unsigned int pclmul_type;
17067
17068 FETCH_DATA (the_info, codep + 1);
17069 pclmul_type = *codep++ & 0xff;
17070 switch (pclmul_type)
17071 {
17072 case 0x10:
17073 pclmul_type = 2;
17074 break;
17075 case 0x11:
17076 pclmul_type = 3;
17077 break;
17078 default:
17079 break;
7bb15c6f 17080 }
c0f3af97
L
17081 if (pclmul_type < ARRAY_SIZE (pclmul_op))
17082 {
17083 char suffix [4];
ea397f5b 17084 char *p = mnemonicendp - 3;
c0f3af97
L
17085 suffix[0] = p[0];
17086 suffix[1] = p[1];
17087 suffix[2] = p[2];
17088 suffix[3] = '\0';
ea397f5b
L
17089 sprintf (p, "%s%s", pclmul_op[pclmul_type].name, suffix);
17090 mnemonicendp += pclmul_op[pclmul_type].len;
c0f3af97
L
17091 }
17092 else
17093 {
17094 /* We have a reserved extension byte. Output it directly. */
17095 scratchbuf[0] = '$';
17096 print_operand_value (scratchbuf + 1, 1, pclmul_type);
9ce09ba2 17097 oappend_maybe_intel (scratchbuf);
c0f3af97
L
17098 scratchbuf[0] = '\0';
17099 }
17100}
17101
f1f8f695
L
17102static void
17103MOVBE_Fixup (int bytemode, int sizeflag)
17104{
17105 /* Add proper suffix to "movbe". */
ea397f5b 17106 char *p = mnemonicendp;
f1f8f695
L
17107
17108 switch (bytemode)
17109 {
17110 case v_mode:
17111 if (intel_syntax)
ea397f5b 17112 goto skip;
f1f8f695
L
17113
17114 USED_REX (REX_W);
17115 if (sizeflag & SUFFIX_ALWAYS)
17116 {
17117 if (rex & REX_W)
17118 *p++ = 'q';
f1f8f695 17119 else
f16cd0d5
L
17120 {
17121 if (sizeflag & DFLAG)
17122 *p++ = 'l';
17123 else
17124 *p++ = 'w';
17125 used_prefixes |= (prefixes & PREFIX_DATA);
17126 }
f1f8f695 17127 }
f1f8f695
L
17128 break;
17129 default:
17130 oappend (INTERNAL_DISASSEMBLER_ERROR);
17131 break;
17132 }
ea397f5b 17133 mnemonicendp = p;
f1f8f695
L
17134 *p = '\0';
17135
ea397f5b 17136skip:
f1f8f695
L
17137 OP_M (bytemode, sizeflag);
17138}
f88c9eb0
SP
17139
17140static void
17141OP_LWPCB_E (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
17142{
17143 int reg;
17144 const char **names;
17145
17146 /* Skip mod/rm byte. */
17147 MODRM_CHECK;
17148 codep++;
17149
17150 if (vex.w)
17151 names = names64;
f88c9eb0 17152 else
ce7d077e 17153 names = names32;
f88c9eb0
SP
17154
17155 reg = modrm.rm;
17156 USED_REX (REX_B);
17157 if (rex & REX_B)
17158 reg += 8;
17159
17160 oappend (names[reg]);
17161}
17162
17163static void
17164OP_LWP_E (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
17165{
17166 const char **names;
17167
17168 if (vex.w)
17169 names = names64;
f88c9eb0 17170 else
ce7d077e 17171 names = names32;
f88c9eb0
SP
17172
17173 oappend (names[vex.register_specifier]);
17174}
43234a1e
L
17175
17176static void
17177OP_Mask (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
17178{
17179 if (!vex.evex
1ba585e8 17180 || (bytemode != mask_mode && bytemode != mask_bd_mode))
43234a1e
L
17181 abort ();
17182
17183 USED_REX (REX_R);
17184 if ((rex & REX_R) != 0 || !vex.r)
17185 {
17186 BadOp ();
17187 return;
17188 }
17189
17190 oappend (names_mask [modrm.reg]);
17191}
17192
17193static void
17194OP_Rounding (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
17195{
17196 if (!vex.evex
17197 || (bytemode != evex_rounding_mode
17198 && bytemode != evex_sae_mode))
17199 abort ();
17200 if (modrm.mod == 3 && vex.b)
17201 switch (bytemode)
17202 {
17203 case evex_rounding_mode:
17204 oappend (names_rounding[vex.ll]);
17205 break;
17206 case evex_sae_mode:
17207 oappend ("{sae}");
17208 break;
17209 default:
17210 break;
17211 }
17212}
This page took 2.29382 seconds and 4 git commands to generate.