Handle invalid prefixes for rdrand and rdseed
[deliverable/binutils-gdb.git] / opcodes / i386-dis.c
CommitLineData
252b5132 1/* Print i386 instructions for GDB, the GNU debugger.
b90efa5b 2 Copyright (C) 1988-2015 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
bf890a93 224/* Possible values for prefix requirement. */
507bd325
L
225#define PREFIX_UD_SHIFT 8
226#define PREFIX_UD_REPZ (PREFIX_REPZ << PREFIX_UD_SHIFT)
227#define PREFIX_UD_REPNZ (PREFIX_REPNZ << PREFIX_UD_SHIFT)
228#define PREFIX_UD_DATA (PREFIX_DATA << PREFIX_UD_SHIFT)
229#define PREFIX_UD_ADDR (PREFIX_ADDR << PREFIX_UD_SHIFT)
230#define PREFIX_UD_LOCK (PREFIX_LOCK << PREFIX_UD_SHIFT)
231#define PREFIX_IGNORED_SHIFT 16
232#define PREFIX_IGNORED_REPZ (PREFIX_REPZ << PREFIX_IGNORED_SHIFT)
233#define PREFIX_IGNORED_REPNZ (PREFIX_REPNZ << PREFIX_IGNORED_SHIFT)
234#define PREFIX_IGNORED_DATA (PREFIX_DATA << PREFIX_IGNORED_SHIFT)
235#define PREFIX_IGNORED_ADDR (PREFIX_ADDR << PREFIX_IGNORED_SHIFT)
236#define PREFIX_IGNORED_LOCK (PREFIX_LOCK << PREFIX_IGNORED_SHIFT)
237
238/* Opcode prefixes. */
239#define PREFIX_OPCODE (PREFIX_REPZ \
240 | PREFIX_REPNZ \
241 | PREFIX_DATA)
242
243/* Prefixes ignored. */
244#define PREFIX_IGNORED (PREFIX_IGNORED_REPZ \
245 | PREFIX_IGNORED_REPNZ \
246 | PREFIX_IGNORED_DATA)
bf890a93 247
ce518a5f 248#define XX { NULL, 0 }
507bd325 249#define Bad_Opcode NULL, { { NULL, 0 } }, 0
ce518a5f
L
250
251#define Eb { OP_E, b_mode }
7e8b059b 252#define Ebnd { OP_E, bnd_mode }
b6169b20 253#define EbS { OP_E, b_swap_mode }
ce518a5f 254#define Ev { OP_E, v_mode }
7e8b059b 255#define Ev_bnd { OP_E, v_bnd_mode }
b6169b20 256#define EvS { OP_E, v_swap_mode }
ce518a5f
L
257#define Ed { OP_E, d_mode }
258#define Edq { OP_E, dq_mode }
259#define Edqw { OP_E, dqw_mode }
1ba585e8 260#define EdqwS { OP_E, dqw_swap_mode }
42903f7f 261#define Edqb { OP_E, dqb_mode }
1ba585e8
IT
262#define Edb { OP_E, db_mode }
263#define Edw { OP_E, dw_mode }
42903f7f 264#define Edqd { OP_E, dqd_mode }
09335d05 265#define Eq { OP_E, q_mode }
ce518a5f
L
266#define indirEv { OP_indirE, stack_v_mode }
267#define indirEp { OP_indirE, f_mode }
268#define stackEv { OP_E, stack_v_mode }
269#define Em { OP_E, m_mode }
270#define Ew { OP_E, w_mode }
271#define M { OP_M, 0 } /* lea, lgdt, etc. */
34b772a6 272#define Ma { OP_M, a_mode }
b844680a 273#define Mb { OP_M, b_mode }
d9a5e5e5 274#define Md { OP_M, d_mode }
f1f8f695 275#define Mo { OP_M, o_mode }
ce518a5f
L
276#define Mp { OP_M, f_mode } /* 32 or 48 bit memory operand for LDS, LES etc */
277#define Mq { OP_M, q_mode }
4ee52178 278#define Mx { OP_M, x_mode }
c0f3af97 279#define Mxmm { OP_M, xmm_mode }
ce518a5f 280#define Gb { OP_G, b_mode }
7e8b059b 281#define Gbnd { OP_G, bnd_mode }
ce518a5f
L
282#define Gv { OP_G, v_mode }
283#define Gd { OP_G, d_mode }
284#define Gdq { OP_G, dq_mode }
285#define Gm { OP_G, m_mode }
286#define Gw { OP_G, w_mode }
6f74c397 287#define Rd { OP_R, d_mode }
43234a1e 288#define Rdq { OP_R, dq_mode }
6f74c397 289#define Rm { OP_R, m_mode }
ce518a5f
L
290#define Ib { OP_I, b_mode }
291#define sIb { OP_sI, b_mode } /* sign extened byte */
e3949f17 292#define sIbT { OP_sI, b_T_mode } /* sign extened byte like 'T' */
ce518a5f 293#define Iv { OP_I, v_mode }
7bb15c6f 294#define sIv { OP_sI, v_mode }
ce518a5f
L
295#define Iq { OP_I, q_mode }
296#define Iv64 { OP_I64, v_mode }
297#define Iw { OP_I, w_mode }
298#define I1 { OP_I, const_1_mode }
299#define Jb { OP_J, b_mode }
300#define Jv { OP_J, v_mode }
301#define Cm { OP_C, m_mode }
302#define Dm { OP_D, m_mode }
303#define Td { OP_T, d_mode }
b844680a 304#define Skip_MODRM { OP_Skip_MODRM, 0 }
ce518a5f
L
305
306#define RMeAX { OP_REG, eAX_reg }
307#define RMeBX { OP_REG, eBX_reg }
308#define RMeCX { OP_REG, eCX_reg }
309#define RMeDX { OP_REG, eDX_reg }
310#define RMeSP { OP_REG, eSP_reg }
311#define RMeBP { OP_REG, eBP_reg }
312#define RMeSI { OP_REG, eSI_reg }
313#define RMeDI { OP_REG, eDI_reg }
314#define RMrAX { OP_REG, rAX_reg }
315#define RMrBX { OP_REG, rBX_reg }
316#define RMrCX { OP_REG, rCX_reg }
317#define RMrDX { OP_REG, rDX_reg }
318#define RMrSP { OP_REG, rSP_reg }
319#define RMrBP { OP_REG, rBP_reg }
320#define RMrSI { OP_REG, rSI_reg }
321#define RMrDI { OP_REG, rDI_reg }
322#define RMAL { OP_REG, al_reg }
ce518a5f
L
323#define RMCL { OP_REG, cl_reg }
324#define RMDL { OP_REG, dl_reg }
325#define RMBL { OP_REG, bl_reg }
326#define RMAH { OP_REG, ah_reg }
327#define RMCH { OP_REG, ch_reg }
328#define RMDH { OP_REG, dh_reg }
329#define RMBH { OP_REG, bh_reg }
330#define RMAX { OP_REG, ax_reg }
331#define RMDX { OP_REG, dx_reg }
332
333#define eAX { OP_IMREG, eAX_reg }
334#define eBX { OP_IMREG, eBX_reg }
335#define eCX { OP_IMREG, eCX_reg }
336#define eDX { OP_IMREG, eDX_reg }
337#define eSP { OP_IMREG, eSP_reg }
338#define eBP { OP_IMREG, eBP_reg }
339#define eSI { OP_IMREG, eSI_reg }
340#define eDI { OP_IMREG, eDI_reg }
341#define AL { OP_IMREG, al_reg }
342#define CL { OP_IMREG, cl_reg }
343#define DL { OP_IMREG, dl_reg }
344#define BL { OP_IMREG, bl_reg }
345#define AH { OP_IMREG, ah_reg }
346#define CH { OP_IMREG, ch_reg }
347#define DH { OP_IMREG, dh_reg }
348#define BH { OP_IMREG, bh_reg }
349#define AX { OP_IMREG, ax_reg }
350#define DX { OP_IMREG, dx_reg }
351#define zAX { OP_IMREG, z_mode_ax_reg }
352#define indirDX { OP_IMREG, indir_dx_reg }
353
354#define Sw { OP_SEG, w_mode }
355#define Sv { OP_SEG, v_mode }
356#define Ap { OP_DIR, 0 }
357#define Ob { OP_OFF64, b_mode }
358#define Ov { OP_OFF64, v_mode }
359#define Xb { OP_DSreg, eSI_reg }
360#define Xv { OP_DSreg, eSI_reg }
361#define Xz { OP_DSreg, eSI_reg }
362#define Yb { OP_ESreg, eDI_reg }
363#define Yv { OP_ESreg, eDI_reg }
364#define DSBX { OP_DSreg, eBX_reg }
365
366#define es { OP_REG, es_reg }
367#define ss { OP_REG, ss_reg }
368#define cs { OP_REG, cs_reg }
369#define ds { OP_REG, ds_reg }
370#define fs { OP_REG, fs_reg }
371#define gs { OP_REG, gs_reg }
372
373#define MX { OP_MMX, 0 }
374#define XM { OP_XMM, 0 }
539f890d 375#define XMScalar { OP_XMM, scalar_mode }
6c30d220 376#define XMGatherQ { OP_XMM, vex_vsib_q_w_dq_mode }
c0f3af97 377#define XMM { OP_XMM, xmm_mode }
43234a1e 378#define XMxmmq { OP_XMM, xmmq_mode }
ce518a5f 379#define EM { OP_EM, v_mode }
b6169b20 380#define EMS { OP_EM, v_swap_mode }
09a2c6cf 381#define EMd { OP_EM, d_mode }
14051056 382#define EMx { OP_EM, x_mode }
8976381e 383#define EXw { OP_EX, w_mode }
09a2c6cf 384#define EXd { OP_EX, d_mode }
539f890d 385#define EXdScalar { OP_EX, d_scalar_mode }
fa99fab2 386#define EXdS { OP_EX, d_swap_mode }
43234a1e 387#define EXdScalarS { OP_EX, d_scalar_swap_mode }
09a2c6cf 388#define EXq { OP_EX, q_mode }
539f890d
L
389#define EXqScalar { OP_EX, q_scalar_mode }
390#define EXqScalarS { OP_EX, q_scalar_swap_mode }
b6169b20 391#define EXqS { OP_EX, q_swap_mode }
09a2c6cf 392#define EXx { OP_EX, x_mode }
b6169b20 393#define EXxS { OP_EX, x_swap_mode }
c0f3af97 394#define EXxmm { OP_EX, xmm_mode }
43234a1e 395#define EXymm { OP_EX, ymm_mode }
c0f3af97 396#define EXxmmq { OP_EX, xmmq_mode }
43234a1e 397#define EXEvexHalfBcstXmmq { OP_EX, evex_half_bcst_xmmq_mode }
6c30d220
L
398#define EXxmm_mb { OP_EX, xmm_mb_mode }
399#define EXxmm_mw { OP_EX, xmm_mw_mode }
400#define EXxmm_md { OP_EX, xmm_md_mode }
401#define EXxmm_mq { OP_EX, xmm_mq_mode }
43234a1e 402#define EXxmm_mdq { OP_EX, xmm_mdq_mode }
6c30d220
L
403#define EXxmmdw { OP_EX, xmmdw_mode }
404#define EXxmmqd { OP_EX, xmmqd_mode }
c0f3af97 405#define EXymmq { OP_EX, ymmq_mode }
0bfee649 406#define EXVexWdq { OP_EX, vex_w_dq_mode }
1c480963 407#define EXVexWdqScalar { OP_EX, vex_scalar_w_dq_mode }
43234a1e
L
408#define EXEvexXGscat { OP_EX, evex_x_gscat_mode }
409#define EXEvexXNoBcst { OP_EX, evex_x_nobcst_mode }
ce518a5f
L
410#define MS { OP_MS, v_mode }
411#define XS { OP_XS, v_mode }
09335d05 412#define EMCq { OP_EMC, q_mode }
ce518a5f 413#define MXC { OP_MXC, 0 }
ce518a5f 414#define OPSUF { OP_3DNowSuffix, 0 }
ad19981d 415#define CMP { CMP_Fixup, 0 }
42903f7f 416#define XMM0 { XMM_Fixup, 0 }
eacc9c89 417#define FXSAVE { FXSAVE_Fixup, 0 }
5dd85c99
SP
418#define Vex_2src_1 { OP_Vex_2src_1, 0 }
419#define Vex_2src_2 { OP_Vex_2src_2, 0 }
252b5132 420
c0f3af97 421#define Vex { OP_VEX, vex_mode }
539f890d 422#define VexScalar { OP_VEX, vex_scalar_mode }
6c30d220 423#define VexGatherQ { OP_VEX, vex_vsib_q_w_dq_mode }
c0f3af97
L
424#define Vex128 { OP_VEX, vex128_mode }
425#define Vex256 { OP_VEX, vex256_mode }
cb21baef 426#define VexGdq { OP_VEX, dq_mode }
922d8de8 427#define VexI4 { VEXI4_Fixup, 0}
c0f3af97 428#define EXdVex { OP_EX_Vex, d_mode }
fa99fab2 429#define EXdVexS { OP_EX_Vex, d_swap_mode }
539f890d 430#define EXdVexScalarS { OP_EX_Vex, d_scalar_swap_mode }
c0f3af97 431#define EXqVex { OP_EX_Vex, q_mode }
fa99fab2 432#define EXqVexS { OP_EX_Vex, q_swap_mode }
539f890d 433#define EXqVexScalarS { OP_EX_Vex, q_scalar_swap_mode }
922d8de8
DR
434#define EXVexW { OP_EX_VexW, x_mode }
435#define EXdVexW { OP_EX_VexW, d_mode }
436#define EXqVexW { OP_EX_VexW, q_mode }
a683cc34 437#define EXVexImmW { OP_EX_VexImmW, x_mode }
c0f3af97 438#define XMVex { OP_XMM_Vex, 0 }
539f890d 439#define XMVexScalar { OP_XMM_Vex, scalar_mode }
922d8de8 440#define XMVexW { OP_XMM_VexW, 0 }
c0f3af97
L
441#define XMVexI4 { OP_REG_VexI4, x_mode }
442#define PCLMUL { PCLMUL_Fixup, 0 }
443#define VZERO { VZERO_Fixup, 0 }
444#define VCMP { VCMP_Fixup, 0 }
43234a1e
L
445#define VPCMP { VPCMP_Fixup, 0 }
446
447#define EXxEVexR { OP_Rounding, evex_rounding_mode }
448#define EXxEVexS { OP_Rounding, evex_sae_mode }
449
450#define XMask { OP_Mask, mask_mode }
451#define MaskG { OP_G, mask_mode }
452#define MaskE { OP_E, mask_mode }
1ba585e8 453#define MaskBDE { OP_E, mask_bd_mode }
43234a1e
L
454#define MaskR { OP_R, mask_mode }
455#define MaskVex { OP_VEX, mask_mode }
c0f3af97 456
6c30d220 457#define MVexVSIBDWpX { OP_M, vex_vsib_d_w_dq_mode }
5fc35d96 458#define MVexVSIBDQWpX { OP_M, vex_vsib_d_w_d_mode }
6c30d220 459#define MVexVSIBQWpX { OP_M, vex_vsib_q_w_dq_mode }
5fc35d96 460#define MVexVSIBQDWpX { OP_M, vex_vsib_q_w_d_mode }
6c30d220 461
35c52694 462/* Used handle "rep" prefix for string instructions. */
ce518a5f
L
463#define Xbr { REP_Fixup, eSI_reg }
464#define Xvr { REP_Fixup, eSI_reg }
465#define Ybr { REP_Fixup, eDI_reg }
466#define Yvr { REP_Fixup, eDI_reg }
467#define Yzr { REP_Fixup, eDI_reg }
468#define indirDXr { REP_Fixup, indir_dx_reg }
469#define ALr { REP_Fixup, al_reg }
470#define eAXr { REP_Fixup, eAX_reg }
471
42164a71
L
472/* Used handle HLE prefix for lockable instructions. */
473#define Ebh1 { HLE_Fixup1, b_mode }
474#define Evh1 { HLE_Fixup1, v_mode }
475#define Ebh2 { HLE_Fixup2, b_mode }
476#define Evh2 { HLE_Fixup2, v_mode }
477#define Ebh3 { HLE_Fixup3, b_mode }
478#define Evh3 { HLE_Fixup3, v_mode }
479
7e8b059b
L
480#define BND { BND_Fixup, 0 }
481
ce518a5f
L
482#define cond_jump_flag { NULL, cond_jump_mode }
483#define loop_jcxz_flag { NULL, loop_jcxz_mode }
3ffd33cf 484
252b5132 485/* bits in sizeflag */
252b5132 486#define SUFFIX_ALWAYS 4
252b5132
RH
487#define AFLAG 2
488#define DFLAG 1
489
51e7da1b
L
490enum
491{
492 /* byte operand */
493 b_mode = 1,
494 /* byte operand with operand swapped */
3873ba12 495 b_swap_mode,
e3949f17
L
496 /* byte operand, sign extend like 'T' suffix */
497 b_T_mode,
51e7da1b 498 /* operand size depends on prefixes */
3873ba12 499 v_mode,
51e7da1b 500 /* operand size depends on prefixes with operand swapped */
3873ba12 501 v_swap_mode,
51e7da1b 502 /* word operand */
3873ba12 503 w_mode,
51e7da1b 504 /* double word operand */
3873ba12 505 d_mode,
51e7da1b 506 /* double word operand with operand swapped */
3873ba12 507 d_swap_mode,
51e7da1b 508 /* quad word operand */
3873ba12 509 q_mode,
51e7da1b 510 /* quad word operand with operand swapped */
3873ba12 511 q_swap_mode,
51e7da1b 512 /* ten-byte operand */
3873ba12 513 t_mode,
43234a1e
L
514 /* 16-byte XMM, 32-byte YMM or 64-byte ZMM operand. In EVEX with
515 broadcast enabled. */
3873ba12 516 x_mode,
43234a1e
L
517 /* Similar to x_mode, but with different EVEX mem shifts. */
518 evex_x_gscat_mode,
519 /* Similar to x_mode, but with disabled broadcast. */
520 evex_x_nobcst_mode,
521 /* Similar to x_mode, but with operands swapped and disabled broadcast
522 in EVEX. */
3873ba12 523 x_swap_mode,
51e7da1b 524 /* 16-byte XMM operand */
3873ba12 525 xmm_mode,
43234a1e
L
526 /* XMM, XMM or YMM register operand, or quad word, xmmword or ymmword
527 memory operand (depending on vector length). Broadcast isn't
528 allowed. */
3873ba12 529 xmmq_mode,
43234a1e
L
530 /* Same as xmmq_mode, but broadcast is allowed. */
531 evex_half_bcst_xmmq_mode,
6c30d220
L
532 /* XMM register or byte memory operand */
533 xmm_mb_mode,
534 /* XMM register or word memory operand */
535 xmm_mw_mode,
536 /* XMM register or double word memory operand */
537 xmm_md_mode,
538 /* XMM register or quad word memory operand */
539 xmm_mq_mode,
43234a1e
L
540 /* XMM register or double/quad word memory operand, depending on
541 VEX.W. */
542 xmm_mdq_mode,
543 /* 16-byte XMM, word, double word or quad word operand. */
6c30d220 544 xmmdw_mode,
43234a1e 545 /* 16-byte XMM, double word, quad word operand or xmm word operand. */
6c30d220 546 xmmqd_mode,
43234a1e
L
547 /* 32-byte YMM operand */
548 ymm_mode,
549 /* quad word, ymmword or zmmword memory operand. */
3873ba12 550 ymmq_mode,
6c30d220
L
551 /* 32-byte YMM or 16-byte word operand */
552 ymmxmm_mode,
51e7da1b 553 /* d_mode in 32bit, q_mode in 64bit mode. */
3873ba12 554 m_mode,
51e7da1b 555 /* pair of v_mode operands */
3873ba12
L
556 a_mode,
557 cond_jump_mode,
558 loop_jcxz_mode,
7e8b059b 559 v_bnd_mode,
51e7da1b 560 /* operand size depends on REX prefixes. */
3873ba12 561 dq_mode,
51e7da1b 562 /* registers like dq_mode, memory like w_mode. */
3873ba12 563 dqw_mode,
1ba585e8 564 dqw_swap_mode,
7e8b059b 565 bnd_mode,
51e7da1b 566 /* 4- or 6-byte pointer operand */
3873ba12
L
567 f_mode,
568 const_1_mode,
51e7da1b 569 /* v_mode for stack-related opcodes. */
3873ba12 570 stack_v_mode,
51e7da1b 571 /* non-quad operand size depends on prefixes */
3873ba12 572 z_mode,
51e7da1b 573 /* 16-byte operand */
3873ba12 574 o_mode,
51e7da1b 575 /* registers like dq_mode, memory like b_mode. */
3873ba12 576 dqb_mode,
1ba585e8
IT
577 /* registers like d_mode, memory like b_mode. */
578 db_mode,
579 /* registers like d_mode, memory like w_mode. */
580 dw_mode,
51e7da1b 581 /* registers like dq_mode, memory like d_mode. */
3873ba12 582 dqd_mode,
51e7da1b 583 /* normal vex mode */
3873ba12 584 vex_mode,
51e7da1b 585 /* 128bit vex mode */
3873ba12 586 vex128_mode,
51e7da1b 587 /* 256bit vex mode */
3873ba12 588 vex256_mode,
51e7da1b 589 /* operand size depends on the VEX.W bit. */
3873ba12 590 vex_w_dq_mode,
d55ee72f 591
6c30d220
L
592 /* Similar to vex_w_dq_mode, with VSIB dword indices. */
593 vex_vsib_d_w_dq_mode,
5fc35d96
IT
594 /* Similar to vex_vsib_d_w_dq_mode, with smaller memory. */
595 vex_vsib_d_w_d_mode,
6c30d220
L
596 /* Similar to vex_w_dq_mode, with VSIB qword indices. */
597 vex_vsib_q_w_dq_mode,
5fc35d96
IT
598 /* Similar to vex_vsib_q_w_dq_mode, with smaller memory. */
599 vex_vsib_q_w_d_mode,
6c30d220 600
539f890d
L
601 /* scalar, ignore vector length. */
602 scalar_mode,
603 /* like d_mode, ignore vector length. */
604 d_scalar_mode,
605 /* like d_swap_mode, ignore vector length. */
606 d_scalar_swap_mode,
607 /* like q_mode, ignore vector length. */
608 q_scalar_mode,
609 /* like q_swap_mode, ignore vector length. */
610 q_scalar_swap_mode,
611 /* like vex_mode, ignore vector length. */
612 vex_scalar_mode,
1c480963
L
613 /* like vex_w_dq_mode, ignore vector length. */
614 vex_scalar_w_dq_mode,
539f890d 615
43234a1e
L
616 /* Static rounding. */
617 evex_rounding_mode,
618 /* Supress all exceptions. */
619 evex_sae_mode,
620
621 /* Mask register operand. */
622 mask_mode,
1ba585e8
IT
623 /* Mask register operand. */
624 mask_bd_mode,
43234a1e 625
3873ba12
L
626 es_reg,
627 cs_reg,
628 ss_reg,
629 ds_reg,
630 fs_reg,
631 gs_reg,
d55ee72f 632
3873ba12
L
633 eAX_reg,
634 eCX_reg,
635 eDX_reg,
636 eBX_reg,
637 eSP_reg,
638 eBP_reg,
639 eSI_reg,
640 eDI_reg,
d55ee72f 641
3873ba12
L
642 al_reg,
643 cl_reg,
644 dl_reg,
645 bl_reg,
646 ah_reg,
647 ch_reg,
648 dh_reg,
649 bh_reg,
d55ee72f 650
3873ba12
L
651 ax_reg,
652 cx_reg,
653 dx_reg,
654 bx_reg,
655 sp_reg,
656 bp_reg,
657 si_reg,
658 di_reg,
d55ee72f 659
3873ba12
L
660 rAX_reg,
661 rCX_reg,
662 rDX_reg,
663 rBX_reg,
664 rSP_reg,
665 rBP_reg,
666 rSI_reg,
667 rDI_reg,
d55ee72f 668
3873ba12
L
669 z_mode_ax_reg,
670 indir_dx_reg
51e7da1b 671};
252b5132 672
51e7da1b
L
673enum
674{
675 FLOATCODE = 1,
3873ba12
L
676 USE_REG_TABLE,
677 USE_MOD_TABLE,
678 USE_RM_TABLE,
679 USE_PREFIX_TABLE,
680 USE_X86_64_TABLE,
681 USE_3BYTE_TABLE,
f88c9eb0 682 USE_XOP_8F_TABLE,
3873ba12
L
683 USE_VEX_C4_TABLE,
684 USE_VEX_C5_TABLE,
9e30b8e0 685 USE_VEX_LEN_TABLE,
43234a1e
L
686 USE_VEX_W_TABLE,
687 USE_EVEX_TABLE
51e7da1b 688};
6439fc28 689
bf890a93 690#define FLOAT NULL, { { NULL, FLOATCODE } }, 0
4efba78c 691
bf890a93
IT
692#define DIS386(T, I) NULL, { { NULL, (T)}, { NULL, (I) } }, 0
693#define DIS386_PREFIX(T, I, P) NULL, { { NULL, (T)}, { NULL, (I) } }, P
1ceb70f8
L
694#define REG_TABLE(I) DIS386 (USE_REG_TABLE, (I))
695#define MOD_TABLE(I) DIS386 (USE_MOD_TABLE, (I))
696#define RM_TABLE(I) DIS386 (USE_RM_TABLE, (I))
697#define PREFIX_TABLE(I) DIS386 (USE_PREFIX_TABLE, (I))
4e7d34a6
L
698#define X86_64_TABLE(I) DIS386 (USE_X86_64_TABLE, (I))
699#define THREE_BYTE_TABLE(I) DIS386 (USE_3BYTE_TABLE, (I))
bf890a93 700#define THREE_BYTE_TABLE_PREFIX(I, P) DIS386_PREFIX (USE_3BYTE_TABLE, (I), P)
f88c9eb0 701#define XOP_8F_TABLE(I) DIS386 (USE_XOP_8F_TABLE, (I))
c0f3af97
L
702#define VEX_C4_TABLE(I) DIS386 (USE_VEX_C4_TABLE, (I))
703#define VEX_C5_TABLE(I) DIS386 (USE_VEX_C5_TABLE, (I))
704#define VEX_LEN_TABLE(I) DIS386 (USE_VEX_LEN_TABLE, (I))
9e30b8e0 705#define VEX_W_TABLE(I) DIS386 (USE_VEX_W_TABLE, (I))
43234a1e 706#define EVEX_TABLE(I) DIS386 (USE_EVEX_TABLE, (I))
1ceb70f8 707
51e7da1b
L
708enum
709{
710 REG_80 = 0,
3873ba12
L
711 REG_81,
712 REG_82,
713 REG_8F,
714 REG_C0,
715 REG_C1,
716 REG_C6,
717 REG_C7,
718 REG_D0,
719 REG_D1,
720 REG_D2,
721 REG_D3,
722 REG_F6,
723 REG_F7,
724 REG_FE,
725 REG_FF,
726 REG_0F00,
727 REG_0F01,
728 REG_0F0D,
729 REG_0F18,
730 REG_0F71,
731 REG_0F72,
732 REG_0F73,
733 REG_0FA6,
734 REG_0FA7,
735 REG_0FAE,
736 REG_0FBA,
737 REG_0FC7,
592a252b
L
738 REG_VEX_0F71,
739 REG_VEX_0F72,
740 REG_VEX_0F73,
741 REG_VEX_0FAE,
f12dc422 742 REG_VEX_0F38F3,
f88c9eb0 743 REG_XOP_LWPCB,
2a2a0f38
QN
744 REG_XOP_LWP,
745 REG_XOP_TBM_01,
43234a1e
L
746 REG_XOP_TBM_02,
747
1ba585e8 748 REG_EVEX_0F71,
43234a1e
L
749 REG_EVEX_0F72,
750 REG_EVEX_0F73,
751 REG_EVEX_0F38C6,
752 REG_EVEX_0F38C7
51e7da1b 753};
1ceb70f8 754
51e7da1b
L
755enum
756{
757 MOD_8D = 0,
42164a71
L
758 MOD_C6_REG_7,
759 MOD_C7_REG_7,
4a357820
MZ
760 MOD_FF_REG_3,
761 MOD_FF_REG_5,
3873ba12
L
762 MOD_0F01_REG_0,
763 MOD_0F01_REG_1,
764 MOD_0F01_REG_2,
765 MOD_0F01_REG_3,
766 MOD_0F01_REG_7,
767 MOD_0F12_PREFIX_0,
768 MOD_0F13,
769 MOD_0F16_PREFIX_0,
770 MOD_0F17,
771 MOD_0F18_REG_0,
772 MOD_0F18_REG_1,
773 MOD_0F18_REG_2,
774 MOD_0F18_REG_3,
d7189fa5
RM
775 MOD_0F18_REG_4,
776 MOD_0F18_REG_5,
777 MOD_0F18_REG_6,
778 MOD_0F18_REG_7,
7e8b059b
L
779 MOD_0F1A_PREFIX_0,
780 MOD_0F1B_PREFIX_0,
781 MOD_0F1B_PREFIX_1,
3873ba12
L
782 MOD_0F24,
783 MOD_0F26,
784 MOD_0F2B_PREFIX_0,
785 MOD_0F2B_PREFIX_1,
786 MOD_0F2B_PREFIX_2,
787 MOD_0F2B_PREFIX_3,
788 MOD_0F51,
789 MOD_0F71_REG_2,
790 MOD_0F71_REG_4,
791 MOD_0F71_REG_6,
792 MOD_0F72_REG_2,
793 MOD_0F72_REG_4,
794 MOD_0F72_REG_6,
795 MOD_0F73_REG_2,
796 MOD_0F73_REG_3,
797 MOD_0F73_REG_6,
798 MOD_0F73_REG_7,
799 MOD_0FAE_REG_0,
800 MOD_0FAE_REG_1,
801 MOD_0FAE_REG_2,
802 MOD_0FAE_REG_3,
803 MOD_0FAE_REG_4,
804 MOD_0FAE_REG_5,
805 MOD_0FAE_REG_6,
806 MOD_0FAE_REG_7,
807 MOD_0FB2,
808 MOD_0FB4,
809 MOD_0FB5,
963f3586
IT
810 MOD_0FC7_REG_3,
811 MOD_0FC7_REG_4,
812 MOD_0FC7_REG_5,
3873ba12
L
813 MOD_0FC7_REG_6,
814 MOD_0FC7_REG_7,
815 MOD_0FD7,
816 MOD_0FE7_PREFIX_2,
817 MOD_0FF0_PREFIX_3,
818 MOD_0F382A_PREFIX_2,
819 MOD_62_32BIT,
820 MOD_C4_32BIT,
821 MOD_C5_32BIT,
592a252b
L
822 MOD_VEX_0F12_PREFIX_0,
823 MOD_VEX_0F13,
824 MOD_VEX_0F16_PREFIX_0,
825 MOD_VEX_0F17,
826 MOD_VEX_0F2B,
827 MOD_VEX_0F50,
828 MOD_VEX_0F71_REG_2,
829 MOD_VEX_0F71_REG_4,
830 MOD_VEX_0F71_REG_6,
831 MOD_VEX_0F72_REG_2,
832 MOD_VEX_0F72_REG_4,
833 MOD_VEX_0F72_REG_6,
834 MOD_VEX_0F73_REG_2,
835 MOD_VEX_0F73_REG_3,
836 MOD_VEX_0F73_REG_6,
837 MOD_VEX_0F73_REG_7,
838 MOD_VEX_0FAE_REG_2,
839 MOD_VEX_0FAE_REG_3,
840 MOD_VEX_0FD7_PREFIX_2,
841 MOD_VEX_0FE7_PREFIX_2,
842 MOD_VEX_0FF0_PREFIX_3,
592a252b
L
843 MOD_VEX_0F381A_PREFIX_2,
844 MOD_VEX_0F382A_PREFIX_2,
845 MOD_VEX_0F382C_PREFIX_2,
846 MOD_VEX_0F382D_PREFIX_2,
847 MOD_VEX_0F382E_PREFIX_2,
6c30d220
L
848 MOD_VEX_0F382F_PREFIX_2,
849 MOD_VEX_0F385A_PREFIX_2,
850 MOD_VEX_0F388C_PREFIX_2,
851 MOD_VEX_0F388E_PREFIX_2,
43234a1e
L
852
853 MOD_EVEX_0F10_PREFIX_1,
854 MOD_EVEX_0F10_PREFIX_3,
855 MOD_EVEX_0F11_PREFIX_1,
856 MOD_EVEX_0F11_PREFIX_3,
857 MOD_EVEX_0F12_PREFIX_0,
858 MOD_EVEX_0F16_PREFIX_0,
859 MOD_EVEX_0F38C6_REG_1,
860 MOD_EVEX_0F38C6_REG_2,
861 MOD_EVEX_0F38C6_REG_5,
862 MOD_EVEX_0F38C6_REG_6,
863 MOD_EVEX_0F38C7_REG_1,
864 MOD_EVEX_0F38C7_REG_2,
865 MOD_EVEX_0F38C7_REG_5,
866 MOD_EVEX_0F38C7_REG_6
51e7da1b 867};
1ceb70f8 868
51e7da1b
L
869enum
870{
42164a71
L
871 RM_C6_REG_7 = 0,
872 RM_C7_REG_7,
873 RM_0F01_REG_0,
3873ba12
L
874 RM_0F01_REG_1,
875 RM_0F01_REG_2,
876 RM_0F01_REG_3,
877 RM_0F01_REG_7,
878 RM_0FAE_REG_5,
879 RM_0FAE_REG_6,
880 RM_0FAE_REG_7
51e7da1b 881};
1ceb70f8 882
51e7da1b
L
883enum
884{
885 PREFIX_90 = 0,
3873ba12
L
886 PREFIX_0F10,
887 PREFIX_0F11,
888 PREFIX_0F12,
889 PREFIX_0F16,
7e8b059b
L
890 PREFIX_0F1A,
891 PREFIX_0F1B,
3873ba12
L
892 PREFIX_0F2A,
893 PREFIX_0F2B,
894 PREFIX_0F2C,
895 PREFIX_0F2D,
896 PREFIX_0F2E,
897 PREFIX_0F2F,
898 PREFIX_0F51,
899 PREFIX_0F52,
900 PREFIX_0F53,
901 PREFIX_0F58,
902 PREFIX_0F59,
903 PREFIX_0F5A,
904 PREFIX_0F5B,
905 PREFIX_0F5C,
906 PREFIX_0F5D,
907 PREFIX_0F5E,
908 PREFIX_0F5F,
909 PREFIX_0F60,
910 PREFIX_0F61,
911 PREFIX_0F62,
912 PREFIX_0F6C,
913 PREFIX_0F6D,
914 PREFIX_0F6F,
915 PREFIX_0F70,
916 PREFIX_0F73_REG_3,
917 PREFIX_0F73_REG_7,
918 PREFIX_0F78,
919 PREFIX_0F79,
920 PREFIX_0F7C,
921 PREFIX_0F7D,
922 PREFIX_0F7E,
923 PREFIX_0F7F,
c7b8aa3a
L
924 PREFIX_0FAE_REG_0,
925 PREFIX_0FAE_REG_1,
926 PREFIX_0FAE_REG_2,
927 PREFIX_0FAE_REG_3,
c5e7287a 928 PREFIX_0FAE_REG_6,
963f3586 929 PREFIX_0FAE_REG_7,
9d8596f0 930 PREFIX_RM_0_0FAE_REG_7,
3873ba12 931 PREFIX_0FB8,
f12dc422 932 PREFIX_0FBC,
3873ba12
L
933 PREFIX_0FBD,
934 PREFIX_0FC2,
935 PREFIX_0FC3,
f24bcbaa
L
936 PREFIX_MOD_0_0FC7_REG_6,
937 PREFIX_MOD_3_0FC7_REG_6,
938 PREFIX_MOD_3_0FC7_REG_7,
3873ba12
L
939 PREFIX_0FD0,
940 PREFIX_0FD6,
941 PREFIX_0FE6,
942 PREFIX_0FE7,
943 PREFIX_0FF0,
944 PREFIX_0FF7,
945 PREFIX_0F3810,
946 PREFIX_0F3814,
947 PREFIX_0F3815,
948 PREFIX_0F3817,
949 PREFIX_0F3820,
950 PREFIX_0F3821,
951 PREFIX_0F3822,
952 PREFIX_0F3823,
953 PREFIX_0F3824,
954 PREFIX_0F3825,
955 PREFIX_0F3828,
956 PREFIX_0F3829,
957 PREFIX_0F382A,
958 PREFIX_0F382B,
959 PREFIX_0F3830,
960 PREFIX_0F3831,
961 PREFIX_0F3832,
962 PREFIX_0F3833,
963 PREFIX_0F3834,
964 PREFIX_0F3835,
965 PREFIX_0F3837,
966 PREFIX_0F3838,
967 PREFIX_0F3839,
968 PREFIX_0F383A,
969 PREFIX_0F383B,
970 PREFIX_0F383C,
971 PREFIX_0F383D,
972 PREFIX_0F383E,
973 PREFIX_0F383F,
974 PREFIX_0F3840,
975 PREFIX_0F3841,
976 PREFIX_0F3880,
977 PREFIX_0F3881,
6c30d220 978 PREFIX_0F3882,
a0046408
L
979 PREFIX_0F38C8,
980 PREFIX_0F38C9,
981 PREFIX_0F38CA,
982 PREFIX_0F38CB,
983 PREFIX_0F38CC,
984 PREFIX_0F38CD,
3873ba12
L
985 PREFIX_0F38DB,
986 PREFIX_0F38DC,
987 PREFIX_0F38DD,
988 PREFIX_0F38DE,
989 PREFIX_0F38DF,
990 PREFIX_0F38F0,
991 PREFIX_0F38F1,
e2e1fcde 992 PREFIX_0F38F6,
3873ba12
L
993 PREFIX_0F3A08,
994 PREFIX_0F3A09,
995 PREFIX_0F3A0A,
996 PREFIX_0F3A0B,
997 PREFIX_0F3A0C,
998 PREFIX_0F3A0D,
999 PREFIX_0F3A0E,
1000 PREFIX_0F3A14,
1001 PREFIX_0F3A15,
1002 PREFIX_0F3A16,
1003 PREFIX_0F3A17,
1004 PREFIX_0F3A20,
1005 PREFIX_0F3A21,
1006 PREFIX_0F3A22,
1007 PREFIX_0F3A40,
1008 PREFIX_0F3A41,
1009 PREFIX_0F3A42,
1010 PREFIX_0F3A44,
1011 PREFIX_0F3A60,
1012 PREFIX_0F3A61,
1013 PREFIX_0F3A62,
1014 PREFIX_0F3A63,
a0046408 1015 PREFIX_0F3ACC,
3873ba12 1016 PREFIX_0F3ADF,
592a252b
L
1017 PREFIX_VEX_0F10,
1018 PREFIX_VEX_0F11,
1019 PREFIX_VEX_0F12,
1020 PREFIX_VEX_0F16,
1021 PREFIX_VEX_0F2A,
1022 PREFIX_VEX_0F2C,
1023 PREFIX_VEX_0F2D,
1024 PREFIX_VEX_0F2E,
1025 PREFIX_VEX_0F2F,
43234a1e
L
1026 PREFIX_VEX_0F41,
1027 PREFIX_VEX_0F42,
1028 PREFIX_VEX_0F44,
1029 PREFIX_VEX_0F45,
1030 PREFIX_VEX_0F46,
1031 PREFIX_VEX_0F47,
1ba585e8 1032 PREFIX_VEX_0F4A,
43234a1e 1033 PREFIX_VEX_0F4B,
592a252b
L
1034 PREFIX_VEX_0F51,
1035 PREFIX_VEX_0F52,
1036 PREFIX_VEX_0F53,
1037 PREFIX_VEX_0F58,
1038 PREFIX_VEX_0F59,
1039 PREFIX_VEX_0F5A,
1040 PREFIX_VEX_0F5B,
1041 PREFIX_VEX_0F5C,
1042 PREFIX_VEX_0F5D,
1043 PREFIX_VEX_0F5E,
1044 PREFIX_VEX_0F5F,
1045 PREFIX_VEX_0F60,
1046 PREFIX_VEX_0F61,
1047 PREFIX_VEX_0F62,
1048 PREFIX_VEX_0F63,
1049 PREFIX_VEX_0F64,
1050 PREFIX_VEX_0F65,
1051 PREFIX_VEX_0F66,
1052 PREFIX_VEX_0F67,
1053 PREFIX_VEX_0F68,
1054 PREFIX_VEX_0F69,
1055 PREFIX_VEX_0F6A,
1056 PREFIX_VEX_0F6B,
1057 PREFIX_VEX_0F6C,
1058 PREFIX_VEX_0F6D,
1059 PREFIX_VEX_0F6E,
1060 PREFIX_VEX_0F6F,
1061 PREFIX_VEX_0F70,
1062 PREFIX_VEX_0F71_REG_2,
1063 PREFIX_VEX_0F71_REG_4,
1064 PREFIX_VEX_0F71_REG_6,
1065 PREFIX_VEX_0F72_REG_2,
1066 PREFIX_VEX_0F72_REG_4,
1067 PREFIX_VEX_0F72_REG_6,
1068 PREFIX_VEX_0F73_REG_2,
1069 PREFIX_VEX_0F73_REG_3,
1070 PREFIX_VEX_0F73_REG_6,
1071 PREFIX_VEX_0F73_REG_7,
1072 PREFIX_VEX_0F74,
1073 PREFIX_VEX_0F75,
1074 PREFIX_VEX_0F76,
1075 PREFIX_VEX_0F77,
1076 PREFIX_VEX_0F7C,
1077 PREFIX_VEX_0F7D,
1078 PREFIX_VEX_0F7E,
1079 PREFIX_VEX_0F7F,
43234a1e
L
1080 PREFIX_VEX_0F90,
1081 PREFIX_VEX_0F91,
1082 PREFIX_VEX_0F92,
1083 PREFIX_VEX_0F93,
1084 PREFIX_VEX_0F98,
1ba585e8 1085 PREFIX_VEX_0F99,
592a252b
L
1086 PREFIX_VEX_0FC2,
1087 PREFIX_VEX_0FC4,
1088 PREFIX_VEX_0FC5,
1089 PREFIX_VEX_0FD0,
1090 PREFIX_VEX_0FD1,
1091 PREFIX_VEX_0FD2,
1092 PREFIX_VEX_0FD3,
1093 PREFIX_VEX_0FD4,
1094 PREFIX_VEX_0FD5,
1095 PREFIX_VEX_0FD6,
1096 PREFIX_VEX_0FD7,
1097 PREFIX_VEX_0FD8,
1098 PREFIX_VEX_0FD9,
1099 PREFIX_VEX_0FDA,
1100 PREFIX_VEX_0FDB,
1101 PREFIX_VEX_0FDC,
1102 PREFIX_VEX_0FDD,
1103 PREFIX_VEX_0FDE,
1104 PREFIX_VEX_0FDF,
1105 PREFIX_VEX_0FE0,
1106 PREFIX_VEX_0FE1,
1107 PREFIX_VEX_0FE2,
1108 PREFIX_VEX_0FE3,
1109 PREFIX_VEX_0FE4,
1110 PREFIX_VEX_0FE5,
1111 PREFIX_VEX_0FE6,
1112 PREFIX_VEX_0FE7,
1113 PREFIX_VEX_0FE8,
1114 PREFIX_VEX_0FE9,
1115 PREFIX_VEX_0FEA,
1116 PREFIX_VEX_0FEB,
1117 PREFIX_VEX_0FEC,
1118 PREFIX_VEX_0FED,
1119 PREFIX_VEX_0FEE,
1120 PREFIX_VEX_0FEF,
1121 PREFIX_VEX_0FF0,
1122 PREFIX_VEX_0FF1,
1123 PREFIX_VEX_0FF2,
1124 PREFIX_VEX_0FF3,
1125 PREFIX_VEX_0FF4,
1126 PREFIX_VEX_0FF5,
1127 PREFIX_VEX_0FF6,
1128 PREFIX_VEX_0FF7,
1129 PREFIX_VEX_0FF8,
1130 PREFIX_VEX_0FF9,
1131 PREFIX_VEX_0FFA,
1132 PREFIX_VEX_0FFB,
1133 PREFIX_VEX_0FFC,
1134 PREFIX_VEX_0FFD,
1135 PREFIX_VEX_0FFE,
1136 PREFIX_VEX_0F3800,
1137 PREFIX_VEX_0F3801,
1138 PREFIX_VEX_0F3802,
1139 PREFIX_VEX_0F3803,
1140 PREFIX_VEX_0F3804,
1141 PREFIX_VEX_0F3805,
1142 PREFIX_VEX_0F3806,
1143 PREFIX_VEX_0F3807,
1144 PREFIX_VEX_0F3808,
1145 PREFIX_VEX_0F3809,
1146 PREFIX_VEX_0F380A,
1147 PREFIX_VEX_0F380B,
1148 PREFIX_VEX_0F380C,
1149 PREFIX_VEX_0F380D,
1150 PREFIX_VEX_0F380E,
1151 PREFIX_VEX_0F380F,
1152 PREFIX_VEX_0F3813,
6c30d220 1153 PREFIX_VEX_0F3816,
592a252b
L
1154 PREFIX_VEX_0F3817,
1155 PREFIX_VEX_0F3818,
1156 PREFIX_VEX_0F3819,
1157 PREFIX_VEX_0F381A,
1158 PREFIX_VEX_0F381C,
1159 PREFIX_VEX_0F381D,
1160 PREFIX_VEX_0F381E,
1161 PREFIX_VEX_0F3820,
1162 PREFIX_VEX_0F3821,
1163 PREFIX_VEX_0F3822,
1164 PREFIX_VEX_0F3823,
1165 PREFIX_VEX_0F3824,
1166 PREFIX_VEX_0F3825,
1167 PREFIX_VEX_0F3828,
1168 PREFIX_VEX_0F3829,
1169 PREFIX_VEX_0F382A,
1170 PREFIX_VEX_0F382B,
1171 PREFIX_VEX_0F382C,
1172 PREFIX_VEX_0F382D,
1173 PREFIX_VEX_0F382E,
1174 PREFIX_VEX_0F382F,
1175 PREFIX_VEX_0F3830,
1176 PREFIX_VEX_0F3831,
1177 PREFIX_VEX_0F3832,
1178 PREFIX_VEX_0F3833,
1179 PREFIX_VEX_0F3834,
1180 PREFIX_VEX_0F3835,
6c30d220 1181 PREFIX_VEX_0F3836,
592a252b
L
1182 PREFIX_VEX_0F3837,
1183 PREFIX_VEX_0F3838,
1184 PREFIX_VEX_0F3839,
1185 PREFIX_VEX_0F383A,
1186 PREFIX_VEX_0F383B,
1187 PREFIX_VEX_0F383C,
1188 PREFIX_VEX_0F383D,
1189 PREFIX_VEX_0F383E,
1190 PREFIX_VEX_0F383F,
1191 PREFIX_VEX_0F3840,
1192 PREFIX_VEX_0F3841,
6c30d220
L
1193 PREFIX_VEX_0F3845,
1194 PREFIX_VEX_0F3846,
1195 PREFIX_VEX_0F3847,
1196 PREFIX_VEX_0F3858,
1197 PREFIX_VEX_0F3859,
1198 PREFIX_VEX_0F385A,
1199 PREFIX_VEX_0F3878,
1200 PREFIX_VEX_0F3879,
1201 PREFIX_VEX_0F388C,
1202 PREFIX_VEX_0F388E,
1203 PREFIX_VEX_0F3890,
1204 PREFIX_VEX_0F3891,
1205 PREFIX_VEX_0F3892,
1206 PREFIX_VEX_0F3893,
592a252b
L
1207 PREFIX_VEX_0F3896,
1208 PREFIX_VEX_0F3897,
1209 PREFIX_VEX_0F3898,
1210 PREFIX_VEX_0F3899,
1211 PREFIX_VEX_0F389A,
1212 PREFIX_VEX_0F389B,
1213 PREFIX_VEX_0F389C,
1214 PREFIX_VEX_0F389D,
1215 PREFIX_VEX_0F389E,
1216 PREFIX_VEX_0F389F,
1217 PREFIX_VEX_0F38A6,
1218 PREFIX_VEX_0F38A7,
1219 PREFIX_VEX_0F38A8,
1220 PREFIX_VEX_0F38A9,
1221 PREFIX_VEX_0F38AA,
1222 PREFIX_VEX_0F38AB,
1223 PREFIX_VEX_0F38AC,
1224 PREFIX_VEX_0F38AD,
1225 PREFIX_VEX_0F38AE,
1226 PREFIX_VEX_0F38AF,
1227 PREFIX_VEX_0F38B6,
1228 PREFIX_VEX_0F38B7,
1229 PREFIX_VEX_0F38B8,
1230 PREFIX_VEX_0F38B9,
1231 PREFIX_VEX_0F38BA,
1232 PREFIX_VEX_0F38BB,
1233 PREFIX_VEX_0F38BC,
1234 PREFIX_VEX_0F38BD,
1235 PREFIX_VEX_0F38BE,
1236 PREFIX_VEX_0F38BF,
1237 PREFIX_VEX_0F38DB,
1238 PREFIX_VEX_0F38DC,
1239 PREFIX_VEX_0F38DD,
1240 PREFIX_VEX_0F38DE,
1241 PREFIX_VEX_0F38DF,
f12dc422
L
1242 PREFIX_VEX_0F38F2,
1243 PREFIX_VEX_0F38F3_REG_1,
1244 PREFIX_VEX_0F38F3_REG_2,
1245 PREFIX_VEX_0F38F3_REG_3,
6c30d220
L
1246 PREFIX_VEX_0F38F5,
1247 PREFIX_VEX_0F38F6,
f12dc422 1248 PREFIX_VEX_0F38F7,
6c30d220
L
1249 PREFIX_VEX_0F3A00,
1250 PREFIX_VEX_0F3A01,
1251 PREFIX_VEX_0F3A02,
592a252b
L
1252 PREFIX_VEX_0F3A04,
1253 PREFIX_VEX_0F3A05,
1254 PREFIX_VEX_0F3A06,
1255 PREFIX_VEX_0F3A08,
1256 PREFIX_VEX_0F3A09,
1257 PREFIX_VEX_0F3A0A,
1258 PREFIX_VEX_0F3A0B,
1259 PREFIX_VEX_0F3A0C,
1260 PREFIX_VEX_0F3A0D,
1261 PREFIX_VEX_0F3A0E,
1262 PREFIX_VEX_0F3A0F,
1263 PREFIX_VEX_0F3A14,
1264 PREFIX_VEX_0F3A15,
1265 PREFIX_VEX_0F3A16,
1266 PREFIX_VEX_0F3A17,
1267 PREFIX_VEX_0F3A18,
1268 PREFIX_VEX_0F3A19,
1269 PREFIX_VEX_0F3A1D,
1270 PREFIX_VEX_0F3A20,
1271 PREFIX_VEX_0F3A21,
1272 PREFIX_VEX_0F3A22,
43234a1e 1273 PREFIX_VEX_0F3A30,
1ba585e8 1274 PREFIX_VEX_0F3A31,
43234a1e 1275 PREFIX_VEX_0F3A32,
1ba585e8 1276 PREFIX_VEX_0F3A33,
6c30d220
L
1277 PREFIX_VEX_0F3A38,
1278 PREFIX_VEX_0F3A39,
592a252b
L
1279 PREFIX_VEX_0F3A40,
1280 PREFIX_VEX_0F3A41,
1281 PREFIX_VEX_0F3A42,
1282 PREFIX_VEX_0F3A44,
6c30d220 1283 PREFIX_VEX_0F3A46,
592a252b
L
1284 PREFIX_VEX_0F3A48,
1285 PREFIX_VEX_0F3A49,
1286 PREFIX_VEX_0F3A4A,
1287 PREFIX_VEX_0F3A4B,
1288 PREFIX_VEX_0F3A4C,
1289 PREFIX_VEX_0F3A5C,
1290 PREFIX_VEX_0F3A5D,
1291 PREFIX_VEX_0F3A5E,
1292 PREFIX_VEX_0F3A5F,
1293 PREFIX_VEX_0F3A60,
1294 PREFIX_VEX_0F3A61,
1295 PREFIX_VEX_0F3A62,
1296 PREFIX_VEX_0F3A63,
1297 PREFIX_VEX_0F3A68,
1298 PREFIX_VEX_0F3A69,
1299 PREFIX_VEX_0F3A6A,
1300 PREFIX_VEX_0F3A6B,
1301 PREFIX_VEX_0F3A6C,
1302 PREFIX_VEX_0F3A6D,
1303 PREFIX_VEX_0F3A6E,
1304 PREFIX_VEX_0F3A6F,
1305 PREFIX_VEX_0F3A78,
1306 PREFIX_VEX_0F3A79,
1307 PREFIX_VEX_0F3A7A,
1308 PREFIX_VEX_0F3A7B,
1309 PREFIX_VEX_0F3A7C,
1310 PREFIX_VEX_0F3A7D,
1311 PREFIX_VEX_0F3A7E,
1312 PREFIX_VEX_0F3A7F,
6c30d220 1313 PREFIX_VEX_0F3ADF,
43234a1e
L
1314 PREFIX_VEX_0F3AF0,
1315
1316 PREFIX_EVEX_0F10,
1317 PREFIX_EVEX_0F11,
1318 PREFIX_EVEX_0F12,
1319 PREFIX_EVEX_0F13,
1320 PREFIX_EVEX_0F14,
1321 PREFIX_EVEX_0F15,
1322 PREFIX_EVEX_0F16,
1323 PREFIX_EVEX_0F17,
1324 PREFIX_EVEX_0F28,
1325 PREFIX_EVEX_0F29,
1326 PREFIX_EVEX_0F2A,
1327 PREFIX_EVEX_0F2B,
1328 PREFIX_EVEX_0F2C,
1329 PREFIX_EVEX_0F2D,
1330 PREFIX_EVEX_0F2E,
1331 PREFIX_EVEX_0F2F,
1332 PREFIX_EVEX_0F51,
90a915bf
IT
1333 PREFIX_EVEX_0F54,
1334 PREFIX_EVEX_0F55,
1335 PREFIX_EVEX_0F56,
1336 PREFIX_EVEX_0F57,
43234a1e
L
1337 PREFIX_EVEX_0F58,
1338 PREFIX_EVEX_0F59,
1339 PREFIX_EVEX_0F5A,
1340 PREFIX_EVEX_0F5B,
1341 PREFIX_EVEX_0F5C,
1342 PREFIX_EVEX_0F5D,
1343 PREFIX_EVEX_0F5E,
1344 PREFIX_EVEX_0F5F,
1ba585e8
IT
1345 PREFIX_EVEX_0F60,
1346 PREFIX_EVEX_0F61,
43234a1e 1347 PREFIX_EVEX_0F62,
1ba585e8
IT
1348 PREFIX_EVEX_0F63,
1349 PREFIX_EVEX_0F64,
1350 PREFIX_EVEX_0F65,
43234a1e 1351 PREFIX_EVEX_0F66,
1ba585e8
IT
1352 PREFIX_EVEX_0F67,
1353 PREFIX_EVEX_0F68,
1354 PREFIX_EVEX_0F69,
43234a1e 1355 PREFIX_EVEX_0F6A,
1ba585e8 1356 PREFIX_EVEX_0F6B,
43234a1e
L
1357 PREFIX_EVEX_0F6C,
1358 PREFIX_EVEX_0F6D,
1359 PREFIX_EVEX_0F6E,
1360 PREFIX_EVEX_0F6F,
1361 PREFIX_EVEX_0F70,
1ba585e8
IT
1362 PREFIX_EVEX_0F71_REG_2,
1363 PREFIX_EVEX_0F71_REG_4,
1364 PREFIX_EVEX_0F71_REG_6,
43234a1e
L
1365 PREFIX_EVEX_0F72_REG_0,
1366 PREFIX_EVEX_0F72_REG_1,
1367 PREFIX_EVEX_0F72_REG_2,
1368 PREFIX_EVEX_0F72_REG_4,
1369 PREFIX_EVEX_0F72_REG_6,
1370 PREFIX_EVEX_0F73_REG_2,
1ba585e8 1371 PREFIX_EVEX_0F73_REG_3,
43234a1e 1372 PREFIX_EVEX_0F73_REG_6,
1ba585e8
IT
1373 PREFIX_EVEX_0F73_REG_7,
1374 PREFIX_EVEX_0F74,
1375 PREFIX_EVEX_0F75,
43234a1e
L
1376 PREFIX_EVEX_0F76,
1377 PREFIX_EVEX_0F78,
1378 PREFIX_EVEX_0F79,
1379 PREFIX_EVEX_0F7A,
1380 PREFIX_EVEX_0F7B,
1381 PREFIX_EVEX_0F7E,
1382 PREFIX_EVEX_0F7F,
1383 PREFIX_EVEX_0FC2,
1ba585e8
IT
1384 PREFIX_EVEX_0FC4,
1385 PREFIX_EVEX_0FC5,
43234a1e 1386 PREFIX_EVEX_0FC6,
1ba585e8 1387 PREFIX_EVEX_0FD1,
43234a1e
L
1388 PREFIX_EVEX_0FD2,
1389 PREFIX_EVEX_0FD3,
1390 PREFIX_EVEX_0FD4,
1ba585e8 1391 PREFIX_EVEX_0FD5,
43234a1e 1392 PREFIX_EVEX_0FD6,
1ba585e8
IT
1393 PREFIX_EVEX_0FD8,
1394 PREFIX_EVEX_0FD9,
1395 PREFIX_EVEX_0FDA,
43234a1e 1396 PREFIX_EVEX_0FDB,
1ba585e8
IT
1397 PREFIX_EVEX_0FDC,
1398 PREFIX_EVEX_0FDD,
1399 PREFIX_EVEX_0FDE,
43234a1e 1400 PREFIX_EVEX_0FDF,
1ba585e8
IT
1401 PREFIX_EVEX_0FE0,
1402 PREFIX_EVEX_0FE1,
43234a1e 1403 PREFIX_EVEX_0FE2,
1ba585e8
IT
1404 PREFIX_EVEX_0FE3,
1405 PREFIX_EVEX_0FE4,
1406 PREFIX_EVEX_0FE5,
43234a1e
L
1407 PREFIX_EVEX_0FE6,
1408 PREFIX_EVEX_0FE7,
1ba585e8
IT
1409 PREFIX_EVEX_0FE8,
1410 PREFIX_EVEX_0FE9,
1411 PREFIX_EVEX_0FEA,
43234a1e 1412 PREFIX_EVEX_0FEB,
1ba585e8
IT
1413 PREFIX_EVEX_0FEC,
1414 PREFIX_EVEX_0FED,
1415 PREFIX_EVEX_0FEE,
43234a1e 1416 PREFIX_EVEX_0FEF,
1ba585e8 1417 PREFIX_EVEX_0FF1,
43234a1e
L
1418 PREFIX_EVEX_0FF2,
1419 PREFIX_EVEX_0FF3,
1420 PREFIX_EVEX_0FF4,
1ba585e8
IT
1421 PREFIX_EVEX_0FF5,
1422 PREFIX_EVEX_0FF6,
1423 PREFIX_EVEX_0FF8,
1424 PREFIX_EVEX_0FF9,
43234a1e
L
1425 PREFIX_EVEX_0FFA,
1426 PREFIX_EVEX_0FFB,
1ba585e8
IT
1427 PREFIX_EVEX_0FFC,
1428 PREFIX_EVEX_0FFD,
43234a1e 1429 PREFIX_EVEX_0FFE,
1ba585e8
IT
1430 PREFIX_EVEX_0F3800,
1431 PREFIX_EVEX_0F3804,
1432 PREFIX_EVEX_0F380B,
43234a1e
L
1433 PREFIX_EVEX_0F380C,
1434 PREFIX_EVEX_0F380D,
1ba585e8 1435 PREFIX_EVEX_0F3810,
43234a1e
L
1436 PREFIX_EVEX_0F3811,
1437 PREFIX_EVEX_0F3812,
1438 PREFIX_EVEX_0F3813,
1439 PREFIX_EVEX_0F3814,
1440 PREFIX_EVEX_0F3815,
1441 PREFIX_EVEX_0F3816,
1442 PREFIX_EVEX_0F3818,
1443 PREFIX_EVEX_0F3819,
1444 PREFIX_EVEX_0F381A,
1445 PREFIX_EVEX_0F381B,
1ba585e8
IT
1446 PREFIX_EVEX_0F381C,
1447 PREFIX_EVEX_0F381D,
43234a1e
L
1448 PREFIX_EVEX_0F381E,
1449 PREFIX_EVEX_0F381F,
1ba585e8 1450 PREFIX_EVEX_0F3820,
43234a1e
L
1451 PREFIX_EVEX_0F3821,
1452 PREFIX_EVEX_0F3822,
1453 PREFIX_EVEX_0F3823,
1454 PREFIX_EVEX_0F3824,
1455 PREFIX_EVEX_0F3825,
1ba585e8 1456 PREFIX_EVEX_0F3826,
43234a1e
L
1457 PREFIX_EVEX_0F3827,
1458 PREFIX_EVEX_0F3828,
1459 PREFIX_EVEX_0F3829,
1460 PREFIX_EVEX_0F382A,
1ba585e8 1461 PREFIX_EVEX_0F382B,
43234a1e
L
1462 PREFIX_EVEX_0F382C,
1463 PREFIX_EVEX_0F382D,
1ba585e8 1464 PREFIX_EVEX_0F3830,
43234a1e
L
1465 PREFIX_EVEX_0F3831,
1466 PREFIX_EVEX_0F3832,
1467 PREFIX_EVEX_0F3833,
1468 PREFIX_EVEX_0F3834,
1469 PREFIX_EVEX_0F3835,
1470 PREFIX_EVEX_0F3836,
1471 PREFIX_EVEX_0F3837,
1ba585e8 1472 PREFIX_EVEX_0F3838,
43234a1e
L
1473 PREFIX_EVEX_0F3839,
1474 PREFIX_EVEX_0F383A,
1475 PREFIX_EVEX_0F383B,
1ba585e8 1476 PREFIX_EVEX_0F383C,
43234a1e 1477 PREFIX_EVEX_0F383D,
1ba585e8 1478 PREFIX_EVEX_0F383E,
43234a1e
L
1479 PREFIX_EVEX_0F383F,
1480 PREFIX_EVEX_0F3840,
1481 PREFIX_EVEX_0F3842,
1482 PREFIX_EVEX_0F3843,
1483 PREFIX_EVEX_0F3844,
1484 PREFIX_EVEX_0F3845,
1485 PREFIX_EVEX_0F3846,
1486 PREFIX_EVEX_0F3847,
1487 PREFIX_EVEX_0F384C,
1488 PREFIX_EVEX_0F384D,
1489 PREFIX_EVEX_0F384E,
1490 PREFIX_EVEX_0F384F,
1491 PREFIX_EVEX_0F3858,
1492 PREFIX_EVEX_0F3859,
1493 PREFIX_EVEX_0F385A,
1494 PREFIX_EVEX_0F385B,
1495 PREFIX_EVEX_0F3864,
1496 PREFIX_EVEX_0F3865,
1ba585e8
IT
1497 PREFIX_EVEX_0F3866,
1498 PREFIX_EVEX_0F3875,
43234a1e
L
1499 PREFIX_EVEX_0F3876,
1500 PREFIX_EVEX_0F3877,
1ba585e8
IT
1501 PREFIX_EVEX_0F3878,
1502 PREFIX_EVEX_0F3879,
1503 PREFIX_EVEX_0F387A,
1504 PREFIX_EVEX_0F387B,
43234a1e 1505 PREFIX_EVEX_0F387C,
1ba585e8 1506 PREFIX_EVEX_0F387D,
43234a1e
L
1507 PREFIX_EVEX_0F387E,
1508 PREFIX_EVEX_0F387F,
14f195c9 1509 PREFIX_EVEX_0F3883,
43234a1e
L
1510 PREFIX_EVEX_0F3888,
1511 PREFIX_EVEX_0F3889,
1512 PREFIX_EVEX_0F388A,
1513 PREFIX_EVEX_0F388B,
1ba585e8 1514 PREFIX_EVEX_0F388D,
43234a1e
L
1515 PREFIX_EVEX_0F3890,
1516 PREFIX_EVEX_0F3891,
1517 PREFIX_EVEX_0F3892,
1518 PREFIX_EVEX_0F3893,
1519 PREFIX_EVEX_0F3896,
1520 PREFIX_EVEX_0F3897,
1521 PREFIX_EVEX_0F3898,
1522 PREFIX_EVEX_0F3899,
1523 PREFIX_EVEX_0F389A,
1524 PREFIX_EVEX_0F389B,
1525 PREFIX_EVEX_0F389C,
1526 PREFIX_EVEX_0F389D,
1527 PREFIX_EVEX_0F389E,
1528 PREFIX_EVEX_0F389F,
1529 PREFIX_EVEX_0F38A0,
1530 PREFIX_EVEX_0F38A1,
1531 PREFIX_EVEX_0F38A2,
1532 PREFIX_EVEX_0F38A3,
1533 PREFIX_EVEX_0F38A6,
1534 PREFIX_EVEX_0F38A7,
1535 PREFIX_EVEX_0F38A8,
1536 PREFIX_EVEX_0F38A9,
1537 PREFIX_EVEX_0F38AA,
1538 PREFIX_EVEX_0F38AB,
1539 PREFIX_EVEX_0F38AC,
1540 PREFIX_EVEX_0F38AD,
1541 PREFIX_EVEX_0F38AE,
1542 PREFIX_EVEX_0F38AF,
2cc1b5aa
IT
1543 PREFIX_EVEX_0F38B4,
1544 PREFIX_EVEX_0F38B5,
43234a1e
L
1545 PREFIX_EVEX_0F38B6,
1546 PREFIX_EVEX_0F38B7,
1547 PREFIX_EVEX_0F38B8,
1548 PREFIX_EVEX_0F38B9,
1549 PREFIX_EVEX_0F38BA,
1550 PREFIX_EVEX_0F38BB,
1551 PREFIX_EVEX_0F38BC,
1552 PREFIX_EVEX_0F38BD,
1553 PREFIX_EVEX_0F38BE,
1554 PREFIX_EVEX_0F38BF,
1555 PREFIX_EVEX_0F38C4,
1556 PREFIX_EVEX_0F38C6_REG_1,
1557 PREFIX_EVEX_0F38C6_REG_2,
1558 PREFIX_EVEX_0F38C6_REG_5,
1559 PREFIX_EVEX_0F38C6_REG_6,
1560 PREFIX_EVEX_0F38C7_REG_1,
1561 PREFIX_EVEX_0F38C7_REG_2,
1562 PREFIX_EVEX_0F38C7_REG_5,
1563 PREFIX_EVEX_0F38C7_REG_6,
1564 PREFIX_EVEX_0F38C8,
1565 PREFIX_EVEX_0F38CA,
1566 PREFIX_EVEX_0F38CB,
1567 PREFIX_EVEX_0F38CC,
1568 PREFIX_EVEX_0F38CD,
1569
1570 PREFIX_EVEX_0F3A00,
1571 PREFIX_EVEX_0F3A01,
1572 PREFIX_EVEX_0F3A03,
1573 PREFIX_EVEX_0F3A04,
1574 PREFIX_EVEX_0F3A05,
1575 PREFIX_EVEX_0F3A08,
1576 PREFIX_EVEX_0F3A09,
1577 PREFIX_EVEX_0F3A0A,
1578 PREFIX_EVEX_0F3A0B,
1ba585e8
IT
1579 PREFIX_EVEX_0F3A0F,
1580 PREFIX_EVEX_0F3A14,
1581 PREFIX_EVEX_0F3A15,
90a915bf 1582 PREFIX_EVEX_0F3A16,
43234a1e
L
1583 PREFIX_EVEX_0F3A17,
1584 PREFIX_EVEX_0F3A18,
1585 PREFIX_EVEX_0F3A19,
1586 PREFIX_EVEX_0F3A1A,
1587 PREFIX_EVEX_0F3A1B,
1588 PREFIX_EVEX_0F3A1D,
1589 PREFIX_EVEX_0F3A1E,
1590 PREFIX_EVEX_0F3A1F,
1ba585e8 1591 PREFIX_EVEX_0F3A20,
43234a1e 1592 PREFIX_EVEX_0F3A21,
90a915bf 1593 PREFIX_EVEX_0F3A22,
43234a1e
L
1594 PREFIX_EVEX_0F3A23,
1595 PREFIX_EVEX_0F3A25,
1596 PREFIX_EVEX_0F3A26,
1597 PREFIX_EVEX_0F3A27,
1598 PREFIX_EVEX_0F3A38,
1599 PREFIX_EVEX_0F3A39,
1600 PREFIX_EVEX_0F3A3A,
1601 PREFIX_EVEX_0F3A3B,
1ba585e8
IT
1602 PREFIX_EVEX_0F3A3E,
1603 PREFIX_EVEX_0F3A3F,
1604 PREFIX_EVEX_0F3A42,
43234a1e 1605 PREFIX_EVEX_0F3A43,
90a915bf
IT
1606 PREFIX_EVEX_0F3A50,
1607 PREFIX_EVEX_0F3A51,
43234a1e 1608 PREFIX_EVEX_0F3A54,
90a915bf
IT
1609 PREFIX_EVEX_0F3A55,
1610 PREFIX_EVEX_0F3A56,
1611 PREFIX_EVEX_0F3A57,
1612 PREFIX_EVEX_0F3A66,
1613 PREFIX_EVEX_0F3A67
51e7da1b 1614};
4e7d34a6 1615
51e7da1b
L
1616enum
1617{
1618 X86_64_06 = 0,
3873ba12
L
1619 X86_64_07,
1620 X86_64_0D,
1621 X86_64_16,
1622 X86_64_17,
1623 X86_64_1E,
1624 X86_64_1F,
1625 X86_64_27,
1626 X86_64_2F,
1627 X86_64_37,
1628 X86_64_3F,
1629 X86_64_60,
1630 X86_64_61,
1631 X86_64_62,
1632 X86_64_63,
1633 X86_64_6D,
1634 X86_64_6F,
1635 X86_64_9A,
1636 X86_64_C4,
1637 X86_64_C5,
1638 X86_64_CE,
1639 X86_64_D4,
1640 X86_64_D5,
1641 X86_64_EA,
1642 X86_64_0F01_REG_0,
1643 X86_64_0F01_REG_1,
1644 X86_64_0F01_REG_2,
1645 X86_64_0F01_REG_3
51e7da1b 1646};
4e7d34a6 1647
51e7da1b
L
1648enum
1649{
1650 THREE_BYTE_0F38 = 0,
3873ba12
L
1651 THREE_BYTE_0F3A,
1652 THREE_BYTE_0F7A
51e7da1b 1653};
4e7d34a6 1654
f88c9eb0
SP
1655enum
1656{
5dd85c99
SP
1657 XOP_08 = 0,
1658 XOP_09,
f88c9eb0
SP
1659 XOP_0A
1660};
1661
51e7da1b
L
1662enum
1663{
1664 VEX_0F = 0,
3873ba12
L
1665 VEX_0F38,
1666 VEX_0F3A
51e7da1b 1667};
c0f3af97 1668
43234a1e
L
1669enum
1670{
1671 EVEX_0F = 0,
1672 EVEX_0F38,
1673 EVEX_0F3A
1674};
1675
51e7da1b
L
1676enum
1677{
592a252b
L
1678 VEX_LEN_0F10_P_1 = 0,
1679 VEX_LEN_0F10_P_3,
1680 VEX_LEN_0F11_P_1,
1681 VEX_LEN_0F11_P_3,
1682 VEX_LEN_0F12_P_0_M_0,
1683 VEX_LEN_0F12_P_0_M_1,
1684 VEX_LEN_0F12_P_2,
1685 VEX_LEN_0F13_M_0,
1686 VEX_LEN_0F16_P_0_M_0,
1687 VEX_LEN_0F16_P_0_M_1,
1688 VEX_LEN_0F16_P_2,
1689 VEX_LEN_0F17_M_0,
1690 VEX_LEN_0F2A_P_1,
1691 VEX_LEN_0F2A_P_3,
1692 VEX_LEN_0F2C_P_1,
1693 VEX_LEN_0F2C_P_3,
1694 VEX_LEN_0F2D_P_1,
1695 VEX_LEN_0F2D_P_3,
1696 VEX_LEN_0F2E_P_0,
1697 VEX_LEN_0F2E_P_2,
1698 VEX_LEN_0F2F_P_0,
1699 VEX_LEN_0F2F_P_2,
43234a1e 1700 VEX_LEN_0F41_P_0,
1ba585e8 1701 VEX_LEN_0F41_P_2,
43234a1e 1702 VEX_LEN_0F42_P_0,
1ba585e8 1703 VEX_LEN_0F42_P_2,
43234a1e 1704 VEX_LEN_0F44_P_0,
1ba585e8 1705 VEX_LEN_0F44_P_2,
43234a1e 1706 VEX_LEN_0F45_P_0,
1ba585e8 1707 VEX_LEN_0F45_P_2,
43234a1e 1708 VEX_LEN_0F46_P_0,
1ba585e8 1709 VEX_LEN_0F46_P_2,
43234a1e 1710 VEX_LEN_0F47_P_0,
1ba585e8
IT
1711 VEX_LEN_0F47_P_2,
1712 VEX_LEN_0F4A_P_0,
1713 VEX_LEN_0F4A_P_2,
1714 VEX_LEN_0F4B_P_0,
43234a1e 1715 VEX_LEN_0F4B_P_2,
592a252b
L
1716 VEX_LEN_0F51_P_1,
1717 VEX_LEN_0F51_P_3,
1718 VEX_LEN_0F52_P_1,
1719 VEX_LEN_0F53_P_1,
1720 VEX_LEN_0F58_P_1,
1721 VEX_LEN_0F58_P_3,
1722 VEX_LEN_0F59_P_1,
1723 VEX_LEN_0F59_P_3,
1724 VEX_LEN_0F5A_P_1,
1725 VEX_LEN_0F5A_P_3,
1726 VEX_LEN_0F5C_P_1,
1727 VEX_LEN_0F5C_P_3,
1728 VEX_LEN_0F5D_P_1,
1729 VEX_LEN_0F5D_P_3,
1730 VEX_LEN_0F5E_P_1,
1731 VEX_LEN_0F5E_P_3,
1732 VEX_LEN_0F5F_P_1,
1733 VEX_LEN_0F5F_P_3,
592a252b 1734 VEX_LEN_0F6E_P_2,
592a252b
L
1735 VEX_LEN_0F7E_P_1,
1736 VEX_LEN_0F7E_P_2,
43234a1e 1737 VEX_LEN_0F90_P_0,
1ba585e8 1738 VEX_LEN_0F90_P_2,
43234a1e 1739 VEX_LEN_0F91_P_0,
1ba585e8 1740 VEX_LEN_0F91_P_2,
43234a1e 1741 VEX_LEN_0F92_P_0,
90a915bf 1742 VEX_LEN_0F92_P_2,
1ba585e8 1743 VEX_LEN_0F92_P_3,
43234a1e 1744 VEX_LEN_0F93_P_0,
90a915bf 1745 VEX_LEN_0F93_P_2,
1ba585e8 1746 VEX_LEN_0F93_P_3,
43234a1e 1747 VEX_LEN_0F98_P_0,
1ba585e8
IT
1748 VEX_LEN_0F98_P_2,
1749 VEX_LEN_0F99_P_0,
1750 VEX_LEN_0F99_P_2,
592a252b
L
1751 VEX_LEN_0FAE_R_2_M_0,
1752 VEX_LEN_0FAE_R_3_M_0,
1753 VEX_LEN_0FC2_P_1,
1754 VEX_LEN_0FC2_P_3,
1755 VEX_LEN_0FC4_P_2,
1756 VEX_LEN_0FC5_P_2,
592a252b 1757 VEX_LEN_0FD6_P_2,
592a252b 1758 VEX_LEN_0FF7_P_2,
6c30d220
L
1759 VEX_LEN_0F3816_P_2,
1760 VEX_LEN_0F3819_P_2,
592a252b 1761 VEX_LEN_0F381A_P_2_M_0,
6c30d220 1762 VEX_LEN_0F3836_P_2,
592a252b 1763 VEX_LEN_0F3841_P_2,
6c30d220 1764 VEX_LEN_0F385A_P_2_M_0,
592a252b
L
1765 VEX_LEN_0F38DB_P_2,
1766 VEX_LEN_0F38DC_P_2,
1767 VEX_LEN_0F38DD_P_2,
1768 VEX_LEN_0F38DE_P_2,
1769 VEX_LEN_0F38DF_P_2,
f12dc422
L
1770 VEX_LEN_0F38F2_P_0,
1771 VEX_LEN_0F38F3_R_1_P_0,
1772 VEX_LEN_0F38F3_R_2_P_0,
1773 VEX_LEN_0F38F3_R_3_P_0,
6c30d220
L
1774 VEX_LEN_0F38F5_P_0,
1775 VEX_LEN_0F38F5_P_1,
1776 VEX_LEN_0F38F5_P_3,
1777 VEX_LEN_0F38F6_P_3,
f12dc422 1778 VEX_LEN_0F38F7_P_0,
6c30d220
L
1779 VEX_LEN_0F38F7_P_1,
1780 VEX_LEN_0F38F7_P_2,
1781 VEX_LEN_0F38F7_P_3,
1782 VEX_LEN_0F3A00_P_2,
1783 VEX_LEN_0F3A01_P_2,
592a252b
L
1784 VEX_LEN_0F3A06_P_2,
1785 VEX_LEN_0F3A0A_P_2,
1786 VEX_LEN_0F3A0B_P_2,
592a252b
L
1787 VEX_LEN_0F3A14_P_2,
1788 VEX_LEN_0F3A15_P_2,
1789 VEX_LEN_0F3A16_P_2,
1790 VEX_LEN_0F3A17_P_2,
1791 VEX_LEN_0F3A18_P_2,
1792 VEX_LEN_0F3A19_P_2,
1793 VEX_LEN_0F3A20_P_2,
1794 VEX_LEN_0F3A21_P_2,
1795 VEX_LEN_0F3A22_P_2,
43234a1e 1796 VEX_LEN_0F3A30_P_2,
1ba585e8 1797 VEX_LEN_0F3A31_P_2,
43234a1e 1798 VEX_LEN_0F3A32_P_2,
1ba585e8 1799 VEX_LEN_0F3A33_P_2,
6c30d220
L
1800 VEX_LEN_0F3A38_P_2,
1801 VEX_LEN_0F3A39_P_2,
592a252b 1802 VEX_LEN_0F3A41_P_2,
592a252b 1803 VEX_LEN_0F3A44_P_2,
6c30d220 1804 VEX_LEN_0F3A46_P_2,
592a252b
L
1805 VEX_LEN_0F3A60_P_2,
1806 VEX_LEN_0F3A61_P_2,
1807 VEX_LEN_0F3A62_P_2,
1808 VEX_LEN_0F3A63_P_2,
1809 VEX_LEN_0F3A6A_P_2,
1810 VEX_LEN_0F3A6B_P_2,
1811 VEX_LEN_0F3A6E_P_2,
1812 VEX_LEN_0F3A6F_P_2,
1813 VEX_LEN_0F3A7A_P_2,
1814 VEX_LEN_0F3A7B_P_2,
1815 VEX_LEN_0F3A7E_P_2,
1816 VEX_LEN_0F3A7F_P_2,
1817 VEX_LEN_0F3ADF_P_2,
6c30d220 1818 VEX_LEN_0F3AF0_P_3,
ff688e1f
L
1819 VEX_LEN_0FXOP_08_CC,
1820 VEX_LEN_0FXOP_08_CD,
1821 VEX_LEN_0FXOP_08_CE,
1822 VEX_LEN_0FXOP_08_CF,
1823 VEX_LEN_0FXOP_08_EC,
1824 VEX_LEN_0FXOP_08_ED,
1825 VEX_LEN_0FXOP_08_EE,
1826 VEX_LEN_0FXOP_08_EF,
592a252b
L
1827 VEX_LEN_0FXOP_09_80,
1828 VEX_LEN_0FXOP_09_81
51e7da1b 1829};
c0f3af97 1830
9e30b8e0
L
1831enum
1832{
592a252b
L
1833 VEX_W_0F10_P_0 = 0,
1834 VEX_W_0F10_P_1,
1835 VEX_W_0F10_P_2,
1836 VEX_W_0F10_P_3,
1837 VEX_W_0F11_P_0,
1838 VEX_W_0F11_P_1,
1839 VEX_W_0F11_P_2,
1840 VEX_W_0F11_P_3,
1841 VEX_W_0F12_P_0_M_0,
1842 VEX_W_0F12_P_0_M_1,
1843 VEX_W_0F12_P_1,
1844 VEX_W_0F12_P_2,
1845 VEX_W_0F12_P_3,
1846 VEX_W_0F13_M_0,
1847 VEX_W_0F14,
1848 VEX_W_0F15,
1849 VEX_W_0F16_P_0_M_0,
1850 VEX_W_0F16_P_0_M_1,
1851 VEX_W_0F16_P_1,
1852 VEX_W_0F16_P_2,
1853 VEX_W_0F17_M_0,
1854 VEX_W_0F28,
1855 VEX_W_0F29,
1856 VEX_W_0F2B_M_0,
1857 VEX_W_0F2E_P_0,
1858 VEX_W_0F2E_P_2,
1859 VEX_W_0F2F_P_0,
1860 VEX_W_0F2F_P_2,
43234a1e 1861 VEX_W_0F41_P_0_LEN_1,
1ba585e8 1862 VEX_W_0F41_P_2_LEN_1,
43234a1e 1863 VEX_W_0F42_P_0_LEN_1,
1ba585e8 1864 VEX_W_0F42_P_2_LEN_1,
43234a1e 1865 VEX_W_0F44_P_0_LEN_0,
1ba585e8 1866 VEX_W_0F44_P_2_LEN_0,
43234a1e 1867 VEX_W_0F45_P_0_LEN_1,
1ba585e8 1868 VEX_W_0F45_P_2_LEN_1,
43234a1e 1869 VEX_W_0F46_P_0_LEN_1,
1ba585e8 1870 VEX_W_0F46_P_2_LEN_1,
43234a1e 1871 VEX_W_0F47_P_0_LEN_1,
1ba585e8
IT
1872 VEX_W_0F47_P_2_LEN_1,
1873 VEX_W_0F4A_P_0_LEN_1,
1874 VEX_W_0F4A_P_2_LEN_1,
1875 VEX_W_0F4B_P_0_LEN_1,
43234a1e 1876 VEX_W_0F4B_P_2_LEN_1,
592a252b
L
1877 VEX_W_0F50_M_0,
1878 VEX_W_0F51_P_0,
1879 VEX_W_0F51_P_1,
1880 VEX_W_0F51_P_2,
1881 VEX_W_0F51_P_3,
1882 VEX_W_0F52_P_0,
1883 VEX_W_0F52_P_1,
1884 VEX_W_0F53_P_0,
1885 VEX_W_0F53_P_1,
1886 VEX_W_0F58_P_0,
1887 VEX_W_0F58_P_1,
1888 VEX_W_0F58_P_2,
1889 VEX_W_0F58_P_3,
1890 VEX_W_0F59_P_0,
1891 VEX_W_0F59_P_1,
1892 VEX_W_0F59_P_2,
1893 VEX_W_0F59_P_3,
1894 VEX_W_0F5A_P_0,
1895 VEX_W_0F5A_P_1,
1896 VEX_W_0F5A_P_3,
1897 VEX_W_0F5B_P_0,
1898 VEX_W_0F5B_P_1,
1899 VEX_W_0F5B_P_2,
1900 VEX_W_0F5C_P_0,
1901 VEX_W_0F5C_P_1,
1902 VEX_W_0F5C_P_2,
1903 VEX_W_0F5C_P_3,
1904 VEX_W_0F5D_P_0,
1905 VEX_W_0F5D_P_1,
1906 VEX_W_0F5D_P_2,
1907 VEX_W_0F5D_P_3,
1908 VEX_W_0F5E_P_0,
1909 VEX_W_0F5E_P_1,
1910 VEX_W_0F5E_P_2,
1911 VEX_W_0F5E_P_3,
1912 VEX_W_0F5F_P_0,
1913 VEX_W_0F5F_P_1,
1914 VEX_W_0F5F_P_2,
1915 VEX_W_0F5F_P_3,
1916 VEX_W_0F60_P_2,
1917 VEX_W_0F61_P_2,
1918 VEX_W_0F62_P_2,
1919 VEX_W_0F63_P_2,
1920 VEX_W_0F64_P_2,
1921 VEX_W_0F65_P_2,
1922 VEX_W_0F66_P_2,
1923 VEX_W_0F67_P_2,
1924 VEX_W_0F68_P_2,
1925 VEX_W_0F69_P_2,
1926 VEX_W_0F6A_P_2,
1927 VEX_W_0F6B_P_2,
1928 VEX_W_0F6C_P_2,
1929 VEX_W_0F6D_P_2,
1930 VEX_W_0F6F_P_1,
1931 VEX_W_0F6F_P_2,
1932 VEX_W_0F70_P_1,
1933 VEX_W_0F70_P_2,
1934 VEX_W_0F70_P_3,
1935 VEX_W_0F71_R_2_P_2,
1936 VEX_W_0F71_R_4_P_2,
1937 VEX_W_0F71_R_6_P_2,
1938 VEX_W_0F72_R_2_P_2,
1939 VEX_W_0F72_R_4_P_2,
1940 VEX_W_0F72_R_6_P_2,
1941 VEX_W_0F73_R_2_P_2,
1942 VEX_W_0F73_R_3_P_2,
1943 VEX_W_0F73_R_6_P_2,
1944 VEX_W_0F73_R_7_P_2,
1945 VEX_W_0F74_P_2,
1946 VEX_W_0F75_P_2,
1947 VEX_W_0F76_P_2,
1948 VEX_W_0F77_P_0,
1949 VEX_W_0F7C_P_2,
1950 VEX_W_0F7C_P_3,
1951 VEX_W_0F7D_P_2,
1952 VEX_W_0F7D_P_3,
1953 VEX_W_0F7E_P_1,
1954 VEX_W_0F7F_P_1,
1955 VEX_W_0F7F_P_2,
43234a1e 1956 VEX_W_0F90_P_0_LEN_0,
1ba585e8 1957 VEX_W_0F90_P_2_LEN_0,
43234a1e 1958 VEX_W_0F91_P_0_LEN_0,
1ba585e8 1959 VEX_W_0F91_P_2_LEN_0,
43234a1e 1960 VEX_W_0F92_P_0_LEN_0,
90a915bf 1961 VEX_W_0F92_P_2_LEN_0,
1ba585e8 1962 VEX_W_0F92_P_3_LEN_0,
43234a1e 1963 VEX_W_0F93_P_0_LEN_0,
90a915bf 1964 VEX_W_0F93_P_2_LEN_0,
1ba585e8 1965 VEX_W_0F93_P_3_LEN_0,
43234a1e 1966 VEX_W_0F98_P_0_LEN_0,
1ba585e8
IT
1967 VEX_W_0F98_P_2_LEN_0,
1968 VEX_W_0F99_P_0_LEN_0,
1969 VEX_W_0F99_P_2_LEN_0,
592a252b
L
1970 VEX_W_0FAE_R_2_M_0,
1971 VEX_W_0FAE_R_3_M_0,
1972 VEX_W_0FC2_P_0,
1973 VEX_W_0FC2_P_1,
1974 VEX_W_0FC2_P_2,
1975 VEX_W_0FC2_P_3,
1976 VEX_W_0FC4_P_2,
1977 VEX_W_0FC5_P_2,
1978 VEX_W_0FD0_P_2,
1979 VEX_W_0FD0_P_3,
1980 VEX_W_0FD1_P_2,
1981 VEX_W_0FD2_P_2,
1982 VEX_W_0FD3_P_2,
1983 VEX_W_0FD4_P_2,
1984 VEX_W_0FD5_P_2,
1985 VEX_W_0FD6_P_2,
1986 VEX_W_0FD7_P_2_M_1,
1987 VEX_W_0FD8_P_2,
1988 VEX_W_0FD9_P_2,
1989 VEX_W_0FDA_P_2,
1990 VEX_W_0FDB_P_2,
1991 VEX_W_0FDC_P_2,
1992 VEX_W_0FDD_P_2,
1993 VEX_W_0FDE_P_2,
1994 VEX_W_0FDF_P_2,
1995 VEX_W_0FE0_P_2,
1996 VEX_W_0FE1_P_2,
1997 VEX_W_0FE2_P_2,
1998 VEX_W_0FE3_P_2,
1999 VEX_W_0FE4_P_2,
2000 VEX_W_0FE5_P_2,
2001 VEX_W_0FE6_P_1,
2002 VEX_W_0FE6_P_2,
2003 VEX_W_0FE6_P_3,
2004 VEX_W_0FE7_P_2_M_0,
2005 VEX_W_0FE8_P_2,
2006 VEX_W_0FE9_P_2,
2007 VEX_W_0FEA_P_2,
2008 VEX_W_0FEB_P_2,
2009 VEX_W_0FEC_P_2,
2010 VEX_W_0FED_P_2,
2011 VEX_W_0FEE_P_2,
2012 VEX_W_0FEF_P_2,
2013 VEX_W_0FF0_P_3_M_0,
2014 VEX_W_0FF1_P_2,
2015 VEX_W_0FF2_P_2,
2016 VEX_W_0FF3_P_2,
2017 VEX_W_0FF4_P_2,
2018 VEX_W_0FF5_P_2,
2019 VEX_W_0FF6_P_2,
2020 VEX_W_0FF7_P_2,
2021 VEX_W_0FF8_P_2,
2022 VEX_W_0FF9_P_2,
2023 VEX_W_0FFA_P_2,
2024 VEX_W_0FFB_P_2,
2025 VEX_W_0FFC_P_2,
2026 VEX_W_0FFD_P_2,
2027 VEX_W_0FFE_P_2,
2028 VEX_W_0F3800_P_2,
2029 VEX_W_0F3801_P_2,
2030 VEX_W_0F3802_P_2,
2031 VEX_W_0F3803_P_2,
2032 VEX_W_0F3804_P_2,
2033 VEX_W_0F3805_P_2,
2034 VEX_W_0F3806_P_2,
2035 VEX_W_0F3807_P_2,
2036 VEX_W_0F3808_P_2,
2037 VEX_W_0F3809_P_2,
2038 VEX_W_0F380A_P_2,
2039 VEX_W_0F380B_P_2,
2040 VEX_W_0F380C_P_2,
2041 VEX_W_0F380D_P_2,
2042 VEX_W_0F380E_P_2,
2043 VEX_W_0F380F_P_2,
6c30d220 2044 VEX_W_0F3816_P_2,
592a252b 2045 VEX_W_0F3817_P_2,
6c30d220
L
2046 VEX_W_0F3818_P_2,
2047 VEX_W_0F3819_P_2,
592a252b
L
2048 VEX_W_0F381A_P_2_M_0,
2049 VEX_W_0F381C_P_2,
2050 VEX_W_0F381D_P_2,
2051 VEX_W_0F381E_P_2,
2052 VEX_W_0F3820_P_2,
2053 VEX_W_0F3821_P_2,
2054 VEX_W_0F3822_P_2,
2055 VEX_W_0F3823_P_2,
2056 VEX_W_0F3824_P_2,
2057 VEX_W_0F3825_P_2,
2058 VEX_W_0F3828_P_2,
2059 VEX_W_0F3829_P_2,
2060 VEX_W_0F382A_P_2_M_0,
2061 VEX_W_0F382B_P_2,
2062 VEX_W_0F382C_P_2_M_0,
2063 VEX_W_0F382D_P_2_M_0,
2064 VEX_W_0F382E_P_2_M_0,
2065 VEX_W_0F382F_P_2_M_0,
2066 VEX_W_0F3830_P_2,
2067 VEX_W_0F3831_P_2,
2068 VEX_W_0F3832_P_2,
2069 VEX_W_0F3833_P_2,
2070 VEX_W_0F3834_P_2,
2071 VEX_W_0F3835_P_2,
6c30d220 2072 VEX_W_0F3836_P_2,
592a252b
L
2073 VEX_W_0F3837_P_2,
2074 VEX_W_0F3838_P_2,
2075 VEX_W_0F3839_P_2,
2076 VEX_W_0F383A_P_2,
2077 VEX_W_0F383B_P_2,
2078 VEX_W_0F383C_P_2,
2079 VEX_W_0F383D_P_2,
2080 VEX_W_0F383E_P_2,
2081 VEX_W_0F383F_P_2,
2082 VEX_W_0F3840_P_2,
2083 VEX_W_0F3841_P_2,
6c30d220
L
2084 VEX_W_0F3846_P_2,
2085 VEX_W_0F3858_P_2,
2086 VEX_W_0F3859_P_2,
2087 VEX_W_0F385A_P_2_M_0,
2088 VEX_W_0F3878_P_2,
2089 VEX_W_0F3879_P_2,
592a252b
L
2090 VEX_W_0F38DB_P_2,
2091 VEX_W_0F38DC_P_2,
2092 VEX_W_0F38DD_P_2,
2093 VEX_W_0F38DE_P_2,
2094 VEX_W_0F38DF_P_2,
6c30d220
L
2095 VEX_W_0F3A00_P_2,
2096 VEX_W_0F3A01_P_2,
2097 VEX_W_0F3A02_P_2,
592a252b
L
2098 VEX_W_0F3A04_P_2,
2099 VEX_W_0F3A05_P_2,
2100 VEX_W_0F3A06_P_2,
2101 VEX_W_0F3A08_P_2,
2102 VEX_W_0F3A09_P_2,
2103 VEX_W_0F3A0A_P_2,
2104 VEX_W_0F3A0B_P_2,
2105 VEX_W_0F3A0C_P_2,
2106 VEX_W_0F3A0D_P_2,
2107 VEX_W_0F3A0E_P_2,
2108 VEX_W_0F3A0F_P_2,
2109 VEX_W_0F3A14_P_2,
2110 VEX_W_0F3A15_P_2,
2111 VEX_W_0F3A18_P_2,
2112 VEX_W_0F3A19_P_2,
2113 VEX_W_0F3A20_P_2,
2114 VEX_W_0F3A21_P_2,
43234a1e 2115 VEX_W_0F3A30_P_2_LEN_0,
1ba585e8 2116 VEX_W_0F3A31_P_2_LEN_0,
43234a1e 2117 VEX_W_0F3A32_P_2_LEN_0,
1ba585e8 2118 VEX_W_0F3A33_P_2_LEN_0,
6c30d220
L
2119 VEX_W_0F3A38_P_2,
2120 VEX_W_0F3A39_P_2,
592a252b
L
2121 VEX_W_0F3A40_P_2,
2122 VEX_W_0F3A41_P_2,
2123 VEX_W_0F3A42_P_2,
2124 VEX_W_0F3A44_P_2,
6c30d220 2125 VEX_W_0F3A46_P_2,
592a252b
L
2126 VEX_W_0F3A48_P_2,
2127 VEX_W_0F3A49_P_2,
2128 VEX_W_0F3A4A_P_2,
2129 VEX_W_0F3A4B_P_2,
2130 VEX_W_0F3A4C_P_2,
2131 VEX_W_0F3A60_P_2,
2132 VEX_W_0F3A61_P_2,
2133 VEX_W_0F3A62_P_2,
2134 VEX_W_0F3A63_P_2,
43234a1e
L
2135 VEX_W_0F3ADF_P_2,
2136
2137 EVEX_W_0F10_P_0,
2138 EVEX_W_0F10_P_1_M_0,
2139 EVEX_W_0F10_P_1_M_1,
2140 EVEX_W_0F10_P_2,
2141 EVEX_W_0F10_P_3_M_0,
2142 EVEX_W_0F10_P_3_M_1,
2143 EVEX_W_0F11_P_0,
2144 EVEX_W_0F11_P_1_M_0,
2145 EVEX_W_0F11_P_1_M_1,
2146 EVEX_W_0F11_P_2,
2147 EVEX_W_0F11_P_3_M_0,
2148 EVEX_W_0F11_P_3_M_1,
2149 EVEX_W_0F12_P_0_M_0,
2150 EVEX_W_0F12_P_0_M_1,
2151 EVEX_W_0F12_P_1,
2152 EVEX_W_0F12_P_2,
2153 EVEX_W_0F12_P_3,
2154 EVEX_W_0F13_P_0,
2155 EVEX_W_0F13_P_2,
2156 EVEX_W_0F14_P_0,
2157 EVEX_W_0F14_P_2,
2158 EVEX_W_0F15_P_0,
2159 EVEX_W_0F15_P_2,
2160 EVEX_W_0F16_P_0_M_0,
2161 EVEX_W_0F16_P_0_M_1,
2162 EVEX_W_0F16_P_1,
2163 EVEX_W_0F16_P_2,
2164 EVEX_W_0F17_P_0,
2165 EVEX_W_0F17_P_2,
2166 EVEX_W_0F28_P_0,
2167 EVEX_W_0F28_P_2,
2168 EVEX_W_0F29_P_0,
2169 EVEX_W_0F29_P_2,
2170 EVEX_W_0F2A_P_1,
2171 EVEX_W_0F2A_P_3,
2172 EVEX_W_0F2B_P_0,
2173 EVEX_W_0F2B_P_2,
2174 EVEX_W_0F2E_P_0,
2175 EVEX_W_0F2E_P_2,
2176 EVEX_W_0F2F_P_0,
2177 EVEX_W_0F2F_P_2,
2178 EVEX_W_0F51_P_0,
2179 EVEX_W_0F51_P_1,
2180 EVEX_W_0F51_P_2,
2181 EVEX_W_0F51_P_3,
90a915bf
IT
2182 EVEX_W_0F54_P_0,
2183 EVEX_W_0F54_P_2,
2184 EVEX_W_0F55_P_0,
2185 EVEX_W_0F55_P_2,
2186 EVEX_W_0F56_P_0,
2187 EVEX_W_0F56_P_2,
2188 EVEX_W_0F57_P_0,
2189 EVEX_W_0F57_P_2,
43234a1e
L
2190 EVEX_W_0F58_P_0,
2191 EVEX_W_0F58_P_1,
2192 EVEX_W_0F58_P_2,
2193 EVEX_W_0F58_P_3,
2194 EVEX_W_0F59_P_0,
2195 EVEX_W_0F59_P_1,
2196 EVEX_W_0F59_P_2,
2197 EVEX_W_0F59_P_3,
2198 EVEX_W_0F5A_P_0,
2199 EVEX_W_0F5A_P_1,
2200 EVEX_W_0F5A_P_2,
2201 EVEX_W_0F5A_P_3,
2202 EVEX_W_0F5B_P_0,
2203 EVEX_W_0F5B_P_1,
2204 EVEX_W_0F5B_P_2,
2205 EVEX_W_0F5C_P_0,
2206 EVEX_W_0F5C_P_1,
2207 EVEX_W_0F5C_P_2,
2208 EVEX_W_0F5C_P_3,
2209 EVEX_W_0F5D_P_0,
2210 EVEX_W_0F5D_P_1,
2211 EVEX_W_0F5D_P_2,
2212 EVEX_W_0F5D_P_3,
2213 EVEX_W_0F5E_P_0,
2214 EVEX_W_0F5E_P_1,
2215 EVEX_W_0F5E_P_2,
2216 EVEX_W_0F5E_P_3,
2217 EVEX_W_0F5F_P_0,
2218 EVEX_W_0F5F_P_1,
2219 EVEX_W_0F5F_P_2,
2220 EVEX_W_0F5F_P_3,
2221 EVEX_W_0F62_P_2,
2222 EVEX_W_0F66_P_2,
2223 EVEX_W_0F6A_P_2,
1ba585e8 2224 EVEX_W_0F6B_P_2,
43234a1e
L
2225 EVEX_W_0F6C_P_2,
2226 EVEX_W_0F6D_P_2,
2227 EVEX_W_0F6E_P_2,
2228 EVEX_W_0F6F_P_1,
2229 EVEX_W_0F6F_P_2,
1ba585e8 2230 EVEX_W_0F6F_P_3,
43234a1e
L
2231 EVEX_W_0F70_P_2,
2232 EVEX_W_0F72_R_2_P_2,
2233 EVEX_W_0F72_R_6_P_2,
2234 EVEX_W_0F73_R_2_P_2,
2235 EVEX_W_0F73_R_6_P_2,
2236 EVEX_W_0F76_P_2,
2237 EVEX_W_0F78_P_0,
90a915bf 2238 EVEX_W_0F78_P_2,
43234a1e 2239 EVEX_W_0F79_P_0,
90a915bf 2240 EVEX_W_0F79_P_2,
43234a1e 2241 EVEX_W_0F7A_P_1,
90a915bf 2242 EVEX_W_0F7A_P_2,
43234a1e
L
2243 EVEX_W_0F7A_P_3,
2244 EVEX_W_0F7B_P_1,
90a915bf 2245 EVEX_W_0F7B_P_2,
43234a1e
L
2246 EVEX_W_0F7B_P_3,
2247 EVEX_W_0F7E_P_1,
2248 EVEX_W_0F7E_P_2,
2249 EVEX_W_0F7F_P_1,
2250 EVEX_W_0F7F_P_2,
1ba585e8 2251 EVEX_W_0F7F_P_3,
43234a1e
L
2252 EVEX_W_0FC2_P_0,
2253 EVEX_W_0FC2_P_1,
2254 EVEX_W_0FC2_P_2,
2255 EVEX_W_0FC2_P_3,
2256 EVEX_W_0FC6_P_0,
2257 EVEX_W_0FC6_P_2,
2258 EVEX_W_0FD2_P_2,
2259 EVEX_W_0FD3_P_2,
2260 EVEX_W_0FD4_P_2,
2261 EVEX_W_0FD6_P_2,
2262 EVEX_W_0FE6_P_1,
2263 EVEX_W_0FE6_P_2,
2264 EVEX_W_0FE6_P_3,
2265 EVEX_W_0FE7_P_2,
2266 EVEX_W_0FF2_P_2,
2267 EVEX_W_0FF3_P_2,
2268 EVEX_W_0FF4_P_2,
2269 EVEX_W_0FFA_P_2,
2270 EVEX_W_0FFB_P_2,
2271 EVEX_W_0FFE_P_2,
2272 EVEX_W_0F380C_P_2,
2273 EVEX_W_0F380D_P_2,
1ba585e8
IT
2274 EVEX_W_0F3810_P_1,
2275 EVEX_W_0F3810_P_2,
43234a1e 2276 EVEX_W_0F3811_P_1,
1ba585e8 2277 EVEX_W_0F3811_P_2,
43234a1e 2278 EVEX_W_0F3812_P_1,
1ba585e8 2279 EVEX_W_0F3812_P_2,
43234a1e
L
2280 EVEX_W_0F3813_P_1,
2281 EVEX_W_0F3813_P_2,
2282 EVEX_W_0F3814_P_1,
2283 EVEX_W_0F3815_P_1,
2284 EVEX_W_0F3818_P_2,
2285 EVEX_W_0F3819_P_2,
2286 EVEX_W_0F381A_P_2,
2287 EVEX_W_0F381B_P_2,
2288 EVEX_W_0F381E_P_2,
2289 EVEX_W_0F381F_P_2,
1ba585e8 2290 EVEX_W_0F3820_P_1,
43234a1e
L
2291 EVEX_W_0F3821_P_1,
2292 EVEX_W_0F3822_P_1,
2293 EVEX_W_0F3823_P_1,
2294 EVEX_W_0F3824_P_1,
2295 EVEX_W_0F3825_P_1,
2296 EVEX_W_0F3825_P_2,
1ba585e8
IT
2297 EVEX_W_0F3826_P_1,
2298 EVEX_W_0F3826_P_2,
2299 EVEX_W_0F3828_P_1,
43234a1e 2300 EVEX_W_0F3828_P_2,
1ba585e8 2301 EVEX_W_0F3829_P_1,
43234a1e
L
2302 EVEX_W_0F3829_P_2,
2303 EVEX_W_0F382A_P_1,
2304 EVEX_W_0F382A_P_2,
1ba585e8
IT
2305 EVEX_W_0F382B_P_2,
2306 EVEX_W_0F3830_P_1,
43234a1e
L
2307 EVEX_W_0F3831_P_1,
2308 EVEX_W_0F3832_P_1,
2309 EVEX_W_0F3833_P_1,
2310 EVEX_W_0F3834_P_1,
2311 EVEX_W_0F3835_P_1,
2312 EVEX_W_0F3835_P_2,
2313 EVEX_W_0F3837_P_2,
90a915bf
IT
2314 EVEX_W_0F3838_P_1,
2315 EVEX_W_0F3839_P_1,
43234a1e
L
2316 EVEX_W_0F383A_P_1,
2317 EVEX_W_0F3840_P_2,
2318 EVEX_W_0F3858_P_2,
2319 EVEX_W_0F3859_P_2,
2320 EVEX_W_0F385A_P_2,
2321 EVEX_W_0F385B_P_2,
1ba585e8
IT
2322 EVEX_W_0F3866_P_2,
2323 EVEX_W_0F3875_P_2,
2324 EVEX_W_0F3878_P_2,
2325 EVEX_W_0F3879_P_2,
2326 EVEX_W_0F387A_P_2,
2327 EVEX_W_0F387B_P_2,
2328 EVEX_W_0F387D_P_2,
14f195c9 2329 EVEX_W_0F3883_P_2,
1ba585e8 2330 EVEX_W_0F388D_P_2,
43234a1e
L
2331 EVEX_W_0F3891_P_2,
2332 EVEX_W_0F3893_P_2,
2333 EVEX_W_0F38A1_P_2,
2334 EVEX_W_0F38A3_P_2,
2335 EVEX_W_0F38C7_R_1_P_2,
2336 EVEX_W_0F38C7_R_2_P_2,
2337 EVEX_W_0F38C7_R_5_P_2,
2338 EVEX_W_0F38C7_R_6_P_2,
2339
2340 EVEX_W_0F3A00_P_2,
2341 EVEX_W_0F3A01_P_2,
2342 EVEX_W_0F3A04_P_2,
2343 EVEX_W_0F3A05_P_2,
2344 EVEX_W_0F3A08_P_2,
2345 EVEX_W_0F3A09_P_2,
2346 EVEX_W_0F3A0A_P_2,
2347 EVEX_W_0F3A0B_P_2,
90a915bf 2348 EVEX_W_0F3A16_P_2,
43234a1e
L
2349 EVEX_W_0F3A18_P_2,
2350 EVEX_W_0F3A19_P_2,
2351 EVEX_W_0F3A1A_P_2,
2352 EVEX_W_0F3A1B_P_2,
2353 EVEX_W_0F3A1D_P_2,
2354 EVEX_W_0F3A21_P_2,
90a915bf 2355 EVEX_W_0F3A22_P_2,
43234a1e
L
2356 EVEX_W_0F3A23_P_2,
2357 EVEX_W_0F3A38_P_2,
2358 EVEX_W_0F3A39_P_2,
2359 EVEX_W_0F3A3A_P_2,
2360 EVEX_W_0F3A3B_P_2,
1ba585e8
IT
2361 EVEX_W_0F3A3E_P_2,
2362 EVEX_W_0F3A3F_P_2,
2363 EVEX_W_0F3A42_P_2,
90a915bf
IT
2364 EVEX_W_0F3A43_P_2,
2365 EVEX_W_0F3A50_P_2,
2366 EVEX_W_0F3A51_P_2,
2367 EVEX_W_0F3A56_P_2,
2368 EVEX_W_0F3A57_P_2,
2369 EVEX_W_0F3A66_P_2,
2370 EVEX_W_0F3A67_P_2
9e30b8e0
L
2371};
2372
26ca5450 2373typedef void (*op_rtn) (int bytemode, int sizeflag);
252b5132
RH
2374
2375struct dis386 {
2da11e11 2376 const char *name;
ce518a5f
L
2377 struct
2378 {
2379 op_rtn rtn;
2380 int bytemode;
2381 } op[MAX_OPERANDS];
bf890a93 2382 unsigned int prefix_requirement;
252b5132
RH
2383};
2384
2385/* Upper case letters in the instruction names here are macros.
2386 'A' => print 'b' if no register operands or suffix_always is true
2387 'B' => print 'b' if suffix_always is true
9306ca4a 2388 'C' => print 's' or 'l' ('w' or 'd' in Intel mode) depending on operand
98b528ac 2389 size prefix
ed7841b3 2390 'D' => print 'w' if no register operands or 'w', 'l' or 'q', if
98b528ac 2391 suffix_always is true
252b5132 2392 'E' => print 'e' if 32-bit form of jcxz
3ffd33cf 2393 'F' => print 'w' or 'l' depending on address size prefix (loop insns)
52fd6d94 2394 'G' => print 'w' or 'l' depending on operand size prefix (i/o insns)
5dd0794d 2395 'H' => print ",pt" or ",pn" branch hint
9306ca4a 2396 'I' => honor following macro letter even in Intel mode (implemented only
98b528ac 2397 for some of the macro letters)
9306ca4a 2398 'J' => print 'l'
42903f7f 2399 'K' => print 'd' or 'q' if rex prefix is present.
252b5132 2400 'L' => print 'l' if suffix_always is true
9d141669 2401 'M' => print 'r' if intel_mnemonic is false.
252b5132 2402 'N' => print 'n' if instruction has no wait "prefix"
a35ca55a 2403 'O' => print 'd' or 'o' (or 'q' in Intel mode)
52b15da3 2404 'P' => print 'w', 'l' or 'q' if instruction has an operand size prefix,
98b528ac
L
2405 or suffix_always is true. print 'q' if rex prefix is present.
2406 'Q' => print 'w', 'l' or 'q' for memory operand or suffix_always
2407 is true
a35ca55a 2408 'R' => print 'w', 'l' or 'q' ('d' for 'l' and 'e' in Intel mode)
52b15da3 2409 'S' => print 'w', 'l' or 'q' if suffix_always is true
6439fc28
AM
2410 'T' => print 'q' in 64bit mode and behave as 'P' otherwise
2411 'U' => print 'q' in 64bit mode and behave as 'Q' otherwise
1a114b12 2412 'V' => print 'q' in 64bit mode and behave as 'S' otherwise
a35ca55a 2413 'W' => print 'b', 'w' or 'l' ('d' in Intel mode)
9306ca4a 2414 'X' => print 's', 'd' depending on data16 prefix (for XMM)
8a72226a
L
2415 'Y' => 'q' if instruction has an REX 64bit overwrite prefix and
2416 suffix_always is true.
6dd5059a 2417 'Z' => print 'q' in 64bit mode and behave as 'L' otherwise
9d141669 2418 '!' => change condition from true to false or from false to true.
98b528ac
L
2419 '%' => add 1 upper case letter to the macro.
2420
2421 2 upper case letter macros:
c0f3af97
L
2422 "XY" => print 'x' or 'y' if no register operands or suffix_always
2423 is true.
4b06377f
L
2424 "XW" => print 's', 'd' depending on the VEX.W bit (for FMA)
2425 "LQ" => print 'l' ('d' in Intel mode) or 'q' for memory operand
98b528ac 2426 or suffix_always is true
4b06377f
L
2427 "LB" => print "abs" in 64bit mode and behave as 'B' otherwise
2428 "LS" => print "abs" in 64bit mode and behave as 'S' otherwise
2429 "LV" => print "abs" for 64bit operand and behave as 'S' otherwise
6c30d220 2430 "LW" => print 'd', 'q' depending on the VEX.W bit
4b4c407a
L
2431 "LP" => print 'w' or 'l' ('d' in Intel mode) if instruction has
2432 an operand size prefix, or suffix_always is true. print
2433 'q' if rex prefix is present.
52b15da3 2434
6439fc28
AM
2435 Many of the above letters print nothing in Intel mode. See "putop"
2436 for the details.
52b15da3 2437
6439fc28 2438 Braces '{' and '}', and vertical bars '|', indicate alternative
7c52e0e8 2439 mnemonic strings for AT&T and Intel. */
252b5132 2440
6439fc28 2441static const struct dis386 dis386[] = {
252b5132 2442 /* 00 */
bf890a93
IT
2443 { "addB", { Ebh1, Gb }, 0 },
2444 { "addS", { Evh1, Gv }, 0 },
2445 { "addB", { Gb, EbS }, 0 },
2446 { "addS", { Gv, EvS }, 0 },
2447 { "addB", { AL, Ib }, 0 },
2448 { "addS", { eAX, Iv }, 0 },
4e7d34a6
L
2449 { X86_64_TABLE (X86_64_06) },
2450 { X86_64_TABLE (X86_64_07) },
252b5132 2451 /* 08 */
bf890a93
IT
2452 { "orB", { Ebh1, Gb }, 0 },
2453 { "orS", { Evh1, Gv }, 0 },
2454 { "orB", { Gb, EbS }, 0 },
2455 { "orS", { Gv, EvS }, 0 },
2456 { "orB", { AL, Ib }, 0 },
2457 { "orS", { eAX, Iv }, 0 },
4e7d34a6 2458 { X86_64_TABLE (X86_64_0D) },
592d1631 2459 { Bad_Opcode }, /* 0x0f extended opcode escape */
252b5132 2460 /* 10 */
bf890a93
IT
2461 { "adcB", { Ebh1, Gb }, 0 },
2462 { "adcS", { Evh1, Gv }, 0 },
2463 { "adcB", { Gb, EbS }, 0 },
2464 { "adcS", { Gv, EvS }, 0 },
2465 { "adcB", { AL, Ib }, 0 },
2466 { "adcS", { eAX, Iv }, 0 },
4e7d34a6
L
2467 { X86_64_TABLE (X86_64_16) },
2468 { X86_64_TABLE (X86_64_17) },
252b5132 2469 /* 18 */
bf890a93
IT
2470 { "sbbB", { Ebh1, Gb }, 0 },
2471 { "sbbS", { Evh1, Gv }, 0 },
2472 { "sbbB", { Gb, EbS }, 0 },
2473 { "sbbS", { Gv, EvS }, 0 },
2474 { "sbbB", { AL, Ib }, 0 },
2475 { "sbbS", { eAX, Iv }, 0 },
4e7d34a6
L
2476 { X86_64_TABLE (X86_64_1E) },
2477 { X86_64_TABLE (X86_64_1F) },
252b5132 2478 /* 20 */
bf890a93
IT
2479 { "andB", { Ebh1, Gb }, 0 },
2480 { "andS", { Evh1, Gv }, 0 },
2481 { "andB", { Gb, EbS }, 0 },
2482 { "andS", { Gv, EvS }, 0 },
2483 { "andB", { AL, Ib }, 0 },
2484 { "andS", { eAX, Iv }, 0 },
592d1631 2485 { Bad_Opcode }, /* SEG ES prefix */
4e7d34a6 2486 { X86_64_TABLE (X86_64_27) },
252b5132 2487 /* 28 */
bf890a93
IT
2488 { "subB", { Ebh1, Gb }, 0 },
2489 { "subS", { Evh1, Gv }, 0 },
2490 { "subB", { Gb, EbS }, 0 },
2491 { "subS", { Gv, EvS }, 0 },
2492 { "subB", { AL, Ib }, 0 },
2493 { "subS", { eAX, Iv }, 0 },
592d1631 2494 { Bad_Opcode }, /* SEG CS prefix */
4e7d34a6 2495 { X86_64_TABLE (X86_64_2F) },
252b5132 2496 /* 30 */
bf890a93
IT
2497 { "xorB", { Ebh1, Gb }, 0 },
2498 { "xorS", { Evh1, Gv }, 0 },
2499 { "xorB", { Gb, EbS }, 0 },
2500 { "xorS", { Gv, EvS }, 0 },
2501 { "xorB", { AL, Ib }, 0 },
2502 { "xorS", { eAX, Iv }, 0 },
592d1631 2503 { Bad_Opcode }, /* SEG SS prefix */
4e7d34a6 2504 { X86_64_TABLE (X86_64_37) },
252b5132 2505 /* 38 */
bf890a93
IT
2506 { "cmpB", { Eb, Gb }, 0 },
2507 { "cmpS", { Ev, Gv }, 0 },
2508 { "cmpB", { Gb, EbS }, 0 },
2509 { "cmpS", { Gv, EvS }, 0 },
2510 { "cmpB", { AL, Ib }, 0 },
2511 { "cmpS", { eAX, Iv }, 0 },
592d1631 2512 { Bad_Opcode }, /* SEG DS prefix */
4e7d34a6 2513 { X86_64_TABLE (X86_64_3F) },
252b5132 2514 /* 40 */
bf890a93
IT
2515 { "inc{S|}", { RMeAX }, 0 },
2516 { "inc{S|}", { RMeCX }, 0 },
2517 { "inc{S|}", { RMeDX }, 0 },
2518 { "inc{S|}", { RMeBX }, 0 },
2519 { "inc{S|}", { RMeSP }, 0 },
2520 { "inc{S|}", { RMeBP }, 0 },
2521 { "inc{S|}", { RMeSI }, 0 },
2522 { "inc{S|}", { RMeDI }, 0 },
252b5132 2523 /* 48 */
bf890a93
IT
2524 { "dec{S|}", { RMeAX }, 0 },
2525 { "dec{S|}", { RMeCX }, 0 },
2526 { "dec{S|}", { RMeDX }, 0 },
2527 { "dec{S|}", { RMeBX }, 0 },
2528 { "dec{S|}", { RMeSP }, 0 },
2529 { "dec{S|}", { RMeBP }, 0 },
2530 { "dec{S|}", { RMeSI }, 0 },
2531 { "dec{S|}", { RMeDI }, 0 },
252b5132 2532 /* 50 */
bf890a93
IT
2533 { "pushV", { RMrAX }, 0 },
2534 { "pushV", { RMrCX }, 0 },
2535 { "pushV", { RMrDX }, 0 },
2536 { "pushV", { RMrBX }, 0 },
2537 { "pushV", { RMrSP }, 0 },
2538 { "pushV", { RMrBP }, 0 },
2539 { "pushV", { RMrSI }, 0 },
2540 { "pushV", { RMrDI }, 0 },
252b5132 2541 /* 58 */
bf890a93
IT
2542 { "popV", { RMrAX }, 0 },
2543 { "popV", { RMrCX }, 0 },
2544 { "popV", { RMrDX }, 0 },
2545 { "popV", { RMrBX }, 0 },
2546 { "popV", { RMrSP }, 0 },
2547 { "popV", { RMrBP }, 0 },
2548 { "popV", { RMrSI }, 0 },
2549 { "popV", { RMrDI }, 0 },
252b5132 2550 /* 60 */
4e7d34a6
L
2551 { X86_64_TABLE (X86_64_60) },
2552 { X86_64_TABLE (X86_64_61) },
2553 { X86_64_TABLE (X86_64_62) },
2554 { X86_64_TABLE (X86_64_63) },
592d1631
L
2555 { Bad_Opcode }, /* seg fs */
2556 { Bad_Opcode }, /* seg gs */
2557 { Bad_Opcode }, /* op size prefix */
2558 { Bad_Opcode }, /* adr size prefix */
252b5132 2559 /* 68 */
bf890a93
IT
2560 { "pushT", { sIv }, 0 },
2561 { "imulS", { Gv, Ev, Iv }, 0 },
2562 { "pushT", { sIbT }, 0 },
2563 { "imulS", { Gv, Ev, sIb }, 0 },
2564 { "ins{b|}", { Ybr, indirDX }, 0 },
4e7d34a6 2565 { X86_64_TABLE (X86_64_6D) },
bf890a93 2566 { "outs{b|}", { indirDXr, Xb }, 0 },
4e7d34a6 2567 { X86_64_TABLE (X86_64_6F) },
252b5132 2568 /* 70 */
bf890a93
IT
2569 { "joH", { Jb, BND, cond_jump_flag }, 0 },
2570 { "jnoH", { Jb, BND, cond_jump_flag }, 0 },
2571 { "jbH", { Jb, BND, cond_jump_flag }, 0 },
2572 { "jaeH", { Jb, BND, cond_jump_flag }, 0 },
2573 { "jeH", { Jb, BND, cond_jump_flag }, 0 },
2574 { "jneH", { Jb, BND, cond_jump_flag }, 0 },
2575 { "jbeH", { Jb, BND, cond_jump_flag }, 0 },
2576 { "jaH", { Jb, BND, cond_jump_flag }, 0 },
252b5132 2577 /* 78 */
bf890a93
IT
2578 { "jsH", { Jb, BND, cond_jump_flag }, 0 },
2579 { "jnsH", { Jb, BND, cond_jump_flag }, 0 },
2580 { "jpH", { Jb, BND, cond_jump_flag }, 0 },
2581 { "jnpH", { Jb, BND, cond_jump_flag }, 0 },
2582 { "jlH", { Jb, BND, cond_jump_flag }, 0 },
2583 { "jgeH", { Jb, BND, cond_jump_flag }, 0 },
2584 { "jleH", { Jb, BND, cond_jump_flag }, 0 },
2585 { "jgH", { Jb, BND, cond_jump_flag }, 0 },
252b5132 2586 /* 80 */
1ceb70f8
L
2587 { REG_TABLE (REG_80) },
2588 { REG_TABLE (REG_81) },
592d1631 2589 { Bad_Opcode },
1ceb70f8 2590 { REG_TABLE (REG_82) },
bf890a93
IT
2591 { "testB", { Eb, Gb }, 0 },
2592 { "testS", { Ev, Gv }, 0 },
2593 { "xchgB", { Ebh2, Gb }, 0 },
2594 { "xchgS", { Evh2, Gv }, 0 },
252b5132 2595 /* 88 */
bf890a93
IT
2596 { "movB", { Ebh3, Gb }, 0 },
2597 { "movS", { Evh3, Gv }, 0 },
2598 { "movB", { Gb, EbS }, 0 },
2599 { "movS", { Gv, EvS }, 0 },
2600 { "movD", { Sv, Sw }, 0 },
1ceb70f8 2601 { MOD_TABLE (MOD_8D) },
bf890a93 2602 { "movD", { Sw, Sv }, 0 },
1ceb70f8 2603 { REG_TABLE (REG_8F) },
252b5132 2604 /* 90 */
1ceb70f8 2605 { PREFIX_TABLE (PREFIX_90) },
bf890a93
IT
2606 { "xchgS", { RMeCX, eAX }, 0 },
2607 { "xchgS", { RMeDX, eAX }, 0 },
2608 { "xchgS", { RMeBX, eAX }, 0 },
2609 { "xchgS", { RMeSP, eAX }, 0 },
2610 { "xchgS", { RMeBP, eAX }, 0 },
2611 { "xchgS", { RMeSI, eAX }, 0 },
2612 { "xchgS", { RMeDI, eAX }, 0 },
252b5132 2613 /* 98 */
bf890a93
IT
2614 { "cW{t|}R", { XX }, 0 },
2615 { "cR{t|}O", { XX }, 0 },
4e7d34a6 2616 { X86_64_TABLE (X86_64_9A) },
592d1631 2617 { Bad_Opcode }, /* fwait */
bf890a93
IT
2618 { "pushfT", { XX }, 0 },
2619 { "popfT", { XX }, 0 },
2620 { "sahf", { XX }, 0 },
2621 { "lahf", { XX }, 0 },
252b5132 2622 /* a0 */
bf890a93
IT
2623 { "mov%LB", { AL, Ob }, 0 },
2624 { "mov%LS", { eAX, Ov }, 0 },
2625 { "mov%LB", { Ob, AL }, 0 },
2626 { "mov%LS", { Ov, eAX }, 0 },
2627 { "movs{b|}", { Ybr, Xb }, 0 },
2628 { "movs{R|}", { Yvr, Xv }, 0 },
2629 { "cmps{b|}", { Xb, Yb }, 0 },
2630 { "cmps{R|}", { Xv, Yv }, 0 },
252b5132 2631 /* a8 */
bf890a93
IT
2632 { "testB", { AL, Ib }, 0 },
2633 { "testS", { eAX, Iv }, 0 },
2634 { "stosB", { Ybr, AL }, 0 },
2635 { "stosS", { Yvr, eAX }, 0 },
2636 { "lodsB", { ALr, Xb }, 0 },
2637 { "lodsS", { eAXr, Xv }, 0 },
2638 { "scasB", { AL, Yb }, 0 },
2639 { "scasS", { eAX, Yv }, 0 },
252b5132 2640 /* b0 */
bf890a93
IT
2641 { "movB", { RMAL, Ib }, 0 },
2642 { "movB", { RMCL, Ib }, 0 },
2643 { "movB", { RMDL, Ib }, 0 },
2644 { "movB", { RMBL, Ib }, 0 },
2645 { "movB", { RMAH, Ib }, 0 },
2646 { "movB", { RMCH, Ib }, 0 },
2647 { "movB", { RMDH, Ib }, 0 },
2648 { "movB", { RMBH, Ib }, 0 },
252b5132 2649 /* b8 */
bf890a93
IT
2650 { "mov%LV", { RMeAX, Iv64 }, 0 },
2651 { "mov%LV", { RMeCX, Iv64 }, 0 },
2652 { "mov%LV", { RMeDX, Iv64 }, 0 },
2653 { "mov%LV", { RMeBX, Iv64 }, 0 },
2654 { "mov%LV", { RMeSP, Iv64 }, 0 },
2655 { "mov%LV", { RMeBP, Iv64 }, 0 },
2656 { "mov%LV", { RMeSI, Iv64 }, 0 },
2657 { "mov%LV", { RMeDI, Iv64 }, 0 },
252b5132 2658 /* c0 */
1ceb70f8
L
2659 { REG_TABLE (REG_C0) },
2660 { REG_TABLE (REG_C1) },
bf890a93
IT
2661 { "retT", { Iw, BND }, 0 },
2662 { "retT", { BND }, 0 },
4e7d34a6
L
2663 { X86_64_TABLE (X86_64_C4) },
2664 { X86_64_TABLE (X86_64_C5) },
1ceb70f8
L
2665 { REG_TABLE (REG_C6) },
2666 { REG_TABLE (REG_C7) },
252b5132 2667 /* c8 */
bf890a93
IT
2668 { "enterT", { Iw, Ib }, 0 },
2669 { "leaveT", { XX }, 0 },
2670 { "Jret{|f}P", { Iw }, 0 },
2671 { "Jret{|f}P", { XX }, 0 },
2672 { "int3", { XX }, 0 },
2673 { "int", { Ib }, 0 },
4e7d34a6 2674 { X86_64_TABLE (X86_64_CE) },
bf890a93 2675 { "iret%LP", { XX }, 0 },
252b5132 2676 /* d0 */
1ceb70f8
L
2677 { REG_TABLE (REG_D0) },
2678 { REG_TABLE (REG_D1) },
2679 { REG_TABLE (REG_D2) },
2680 { REG_TABLE (REG_D3) },
4e7d34a6
L
2681 { X86_64_TABLE (X86_64_D4) },
2682 { X86_64_TABLE (X86_64_D5) },
592d1631 2683 { Bad_Opcode },
bf890a93 2684 { "xlat", { DSBX }, 0 },
252b5132
RH
2685 /* d8 */
2686 { FLOAT },
2687 { FLOAT },
2688 { FLOAT },
2689 { FLOAT },
2690 { FLOAT },
2691 { FLOAT },
2692 { FLOAT },
2693 { FLOAT },
2694 /* e0 */
bf890a93
IT
2695 { "loopneFH", { Jb, XX, loop_jcxz_flag }, 0 },
2696 { "loopeFH", { Jb, XX, loop_jcxz_flag }, 0 },
2697 { "loopFH", { Jb, XX, loop_jcxz_flag }, 0 },
2698 { "jEcxzH", { Jb, XX, loop_jcxz_flag }, 0 },
2699 { "inB", { AL, Ib }, 0 },
2700 { "inG", { zAX, Ib }, 0 },
2701 { "outB", { Ib, AL }, 0 },
2702 { "outG", { Ib, zAX }, 0 },
252b5132 2703 /* e8 */
bf890a93
IT
2704 { "callT", { Jv, BND }, 0 },
2705 { "jmpT", { Jv, BND }, 0 },
4e7d34a6 2706 { X86_64_TABLE (X86_64_EA) },
bf890a93
IT
2707 { "jmp", { Jb, BND }, 0 },
2708 { "inB", { AL, indirDX }, 0 },
2709 { "inG", { zAX, indirDX }, 0 },
2710 { "outB", { indirDX, AL }, 0 },
2711 { "outG", { indirDX, zAX }, 0 },
252b5132 2712 /* f0 */
592d1631 2713 { Bad_Opcode }, /* lock prefix */
bf890a93 2714 { "icebp", { XX }, 0 },
592d1631
L
2715 { Bad_Opcode }, /* repne */
2716 { Bad_Opcode }, /* repz */
bf890a93
IT
2717 { "hlt", { XX }, 0 },
2718 { "cmc", { XX }, 0 },
1ceb70f8
L
2719 { REG_TABLE (REG_F6) },
2720 { REG_TABLE (REG_F7) },
252b5132 2721 /* f8 */
bf890a93
IT
2722 { "clc", { XX }, 0 },
2723 { "stc", { XX }, 0 },
2724 { "cli", { XX }, 0 },
2725 { "sti", { XX }, 0 },
2726 { "cld", { XX }, 0 },
2727 { "std", { XX }, 0 },
1ceb70f8
L
2728 { REG_TABLE (REG_FE) },
2729 { REG_TABLE (REG_FF) },
252b5132
RH
2730};
2731
6439fc28 2732static const struct dis386 dis386_twobyte[] = {
252b5132 2733 /* 00 */
1ceb70f8
L
2734 { REG_TABLE (REG_0F00 ) },
2735 { REG_TABLE (REG_0F01 ) },
bf890a93
IT
2736 { "larS", { Gv, Ew }, 0 },
2737 { "lslS", { Gv, Ew }, 0 },
592d1631 2738 { Bad_Opcode },
bf890a93
IT
2739 { "syscall", { XX }, 0 },
2740 { "clts", { XX }, 0 },
2741 { "sysret%LP", { XX }, 0 },
252b5132 2742 /* 08 */
bf890a93
IT
2743 { "invd", { XX }, 0 },
2744 { "wbinvd", { XX }, 0 },
592d1631 2745 { Bad_Opcode },
bf890a93 2746 { "ud2", { XX }, 0 },
592d1631 2747 { Bad_Opcode },
b5b1fc4f 2748 { REG_TABLE (REG_0F0D) },
bf890a93
IT
2749 { "femms", { XX }, 0 },
2750 { "", { MX, EM, OPSUF }, 0 }, /* See OP_3DNowSuffix. */
252b5132 2751 /* 10 */
1ceb70f8
L
2752 { PREFIX_TABLE (PREFIX_0F10) },
2753 { PREFIX_TABLE (PREFIX_0F11) },
2754 { PREFIX_TABLE (PREFIX_0F12) },
2755 { MOD_TABLE (MOD_0F13) },
507bd325
L
2756 { "unpcklpX", { XM, EXx }, PREFIX_OPCODE },
2757 { "unpckhpX", { XM, EXx }, PREFIX_OPCODE },
1ceb70f8
L
2758 { PREFIX_TABLE (PREFIX_0F16) },
2759 { MOD_TABLE (MOD_0F17) },
252b5132 2760 /* 18 */
1ceb70f8 2761 { REG_TABLE (REG_0F18) },
bf890a93 2762 { "nopQ", { Ev }, 0 },
7e8b059b
L
2763 { PREFIX_TABLE (PREFIX_0F1A) },
2764 { PREFIX_TABLE (PREFIX_0F1B) },
bf890a93
IT
2765 { "nopQ", { Ev }, 0 },
2766 { "nopQ", { Ev }, 0 },
2767 { "nopQ", { Ev }, 0 },
2768 { "nopQ", { Ev }, 0 },
252b5132 2769 /* 20 */
bf890a93
IT
2770 { "movZ", { Rm, Cm }, 0 },
2771 { "movZ", { Rm, Dm }, 0 },
2772 { "movZ", { Cm, Rm }, 0 },
2773 { "movZ", { Dm, Rm }, 0 },
1ceb70f8 2774 { MOD_TABLE (MOD_0F24) },
592d1631 2775 { Bad_Opcode },
1ceb70f8 2776 { MOD_TABLE (MOD_0F26) },
592d1631 2777 { Bad_Opcode },
252b5132 2778 /* 28 */
507bd325
L
2779 { "movapX", { XM, EXx }, PREFIX_OPCODE },
2780 { "movapX", { EXxS, XM }, PREFIX_OPCODE },
1ceb70f8
L
2781 { PREFIX_TABLE (PREFIX_0F2A) },
2782 { PREFIX_TABLE (PREFIX_0F2B) },
2783 { PREFIX_TABLE (PREFIX_0F2C) },
2784 { PREFIX_TABLE (PREFIX_0F2D) },
2785 { PREFIX_TABLE (PREFIX_0F2E) },
2786 { PREFIX_TABLE (PREFIX_0F2F) },
252b5132 2787 /* 30 */
bf890a93
IT
2788 { "wrmsr", { XX }, 0 },
2789 { "rdtsc", { XX }, 0 },
2790 { "rdmsr", { XX }, 0 },
2791 { "rdpmc", { XX }, 0 },
2792 { "sysenter", { XX }, 0 },
2793 { "sysexit", { XX }, 0 },
592d1631 2794 { Bad_Opcode },
bf890a93 2795 { "getsec", { XX }, 0 },
252b5132 2796 /* 38 */
507bd325 2797 { THREE_BYTE_TABLE_PREFIX (THREE_BYTE_0F38, PREFIX_OPCODE) },
592d1631 2798 { Bad_Opcode },
507bd325 2799 { THREE_BYTE_TABLE_PREFIX (THREE_BYTE_0F3A, PREFIX_OPCODE) },
592d1631
L
2800 { Bad_Opcode },
2801 { Bad_Opcode },
2802 { Bad_Opcode },
2803 { Bad_Opcode },
2804 { Bad_Opcode },
252b5132 2805 /* 40 */
bf890a93
IT
2806 { "cmovoS", { Gv, Ev }, 0 },
2807 { "cmovnoS", { Gv, Ev }, 0 },
2808 { "cmovbS", { Gv, Ev }, 0 },
2809 { "cmovaeS", { Gv, Ev }, 0 },
2810 { "cmoveS", { Gv, Ev }, 0 },
2811 { "cmovneS", { Gv, Ev }, 0 },
2812 { "cmovbeS", { Gv, Ev }, 0 },
2813 { "cmovaS", { Gv, Ev }, 0 },
252b5132 2814 /* 48 */
bf890a93
IT
2815 { "cmovsS", { Gv, Ev }, 0 },
2816 { "cmovnsS", { Gv, Ev }, 0 },
2817 { "cmovpS", { Gv, Ev }, 0 },
2818 { "cmovnpS", { Gv, Ev }, 0 },
2819 { "cmovlS", { Gv, Ev }, 0 },
2820 { "cmovgeS", { Gv, Ev }, 0 },
2821 { "cmovleS", { Gv, Ev }, 0 },
2822 { "cmovgS", { Gv, Ev }, 0 },
252b5132 2823 /* 50 */
75c135a8 2824 { MOD_TABLE (MOD_0F51) },
1ceb70f8
L
2825 { PREFIX_TABLE (PREFIX_0F51) },
2826 { PREFIX_TABLE (PREFIX_0F52) },
2827 { PREFIX_TABLE (PREFIX_0F53) },
507bd325
L
2828 { "andpX", { XM, EXx }, PREFIX_OPCODE },
2829 { "andnpX", { XM, EXx }, PREFIX_OPCODE },
2830 { "orpX", { XM, EXx }, PREFIX_OPCODE },
2831 { "xorpX", { XM, EXx }, PREFIX_OPCODE },
252b5132 2832 /* 58 */
1ceb70f8
L
2833 { PREFIX_TABLE (PREFIX_0F58) },
2834 { PREFIX_TABLE (PREFIX_0F59) },
2835 { PREFIX_TABLE (PREFIX_0F5A) },
2836 { PREFIX_TABLE (PREFIX_0F5B) },
2837 { PREFIX_TABLE (PREFIX_0F5C) },
2838 { PREFIX_TABLE (PREFIX_0F5D) },
2839 { PREFIX_TABLE (PREFIX_0F5E) },
2840 { PREFIX_TABLE (PREFIX_0F5F) },
252b5132 2841 /* 60 */
1ceb70f8
L
2842 { PREFIX_TABLE (PREFIX_0F60) },
2843 { PREFIX_TABLE (PREFIX_0F61) },
2844 { PREFIX_TABLE (PREFIX_0F62) },
507bd325
L
2845 { "packsswb", { MX, EM }, PREFIX_OPCODE },
2846 { "pcmpgtb", { MX, EM }, PREFIX_OPCODE },
2847 { "pcmpgtw", { MX, EM }, PREFIX_OPCODE },
2848 { "pcmpgtd", { MX, EM }, PREFIX_OPCODE },
2849 { "packuswb", { MX, EM }, PREFIX_OPCODE },
252b5132 2850 /* 68 */
507bd325
L
2851 { "punpckhbw", { MX, EM }, PREFIX_OPCODE },
2852 { "punpckhwd", { MX, EM }, PREFIX_OPCODE },
2853 { "punpckhdq", { MX, EM }, PREFIX_OPCODE },
2854 { "packssdw", { MX, EM }, PREFIX_OPCODE },
1ceb70f8
L
2855 { PREFIX_TABLE (PREFIX_0F6C) },
2856 { PREFIX_TABLE (PREFIX_0F6D) },
507bd325 2857 { "movK", { MX, Edq }, PREFIX_OPCODE },
1ceb70f8 2858 { PREFIX_TABLE (PREFIX_0F6F) },
252b5132 2859 /* 70 */
1ceb70f8
L
2860 { PREFIX_TABLE (PREFIX_0F70) },
2861 { REG_TABLE (REG_0F71) },
2862 { REG_TABLE (REG_0F72) },
2863 { REG_TABLE (REG_0F73) },
507bd325
L
2864 { "pcmpeqb", { MX, EM }, PREFIX_OPCODE },
2865 { "pcmpeqw", { MX, EM }, PREFIX_OPCODE },
2866 { "pcmpeqd", { MX, EM }, PREFIX_OPCODE },
2867 { "emms", { XX }, PREFIX_OPCODE },
252b5132 2868 /* 78 */
1ceb70f8
L
2869 { PREFIX_TABLE (PREFIX_0F78) },
2870 { PREFIX_TABLE (PREFIX_0F79) },
4e7d34a6 2871 { THREE_BYTE_TABLE (THREE_BYTE_0F7A) },
592d1631 2872 { Bad_Opcode },
1ceb70f8
L
2873 { PREFIX_TABLE (PREFIX_0F7C) },
2874 { PREFIX_TABLE (PREFIX_0F7D) },
2875 { PREFIX_TABLE (PREFIX_0F7E) },
2876 { PREFIX_TABLE (PREFIX_0F7F) },
252b5132 2877 /* 80 */
bf890a93
IT
2878 { "joH", { Jv, BND, cond_jump_flag }, 0 },
2879 { "jnoH", { Jv, BND, cond_jump_flag }, 0 },
2880 { "jbH", { Jv, BND, cond_jump_flag }, 0 },
2881 { "jaeH", { Jv, BND, cond_jump_flag }, 0 },
2882 { "jeH", { Jv, BND, cond_jump_flag }, 0 },
2883 { "jneH", { Jv, BND, cond_jump_flag }, 0 },
2884 { "jbeH", { Jv, BND, cond_jump_flag }, 0 },
2885 { "jaH", { Jv, BND, cond_jump_flag }, 0 },
252b5132 2886 /* 88 */
bf890a93
IT
2887 { "jsH", { Jv, BND, cond_jump_flag }, 0 },
2888 { "jnsH", { Jv, BND, cond_jump_flag }, 0 },
2889 { "jpH", { Jv, BND, cond_jump_flag }, 0 },
2890 { "jnpH", { Jv, BND, cond_jump_flag }, 0 },
2891 { "jlH", { Jv, BND, cond_jump_flag }, 0 },
2892 { "jgeH", { Jv, BND, cond_jump_flag }, 0 },
2893 { "jleH", { Jv, BND, cond_jump_flag }, 0 },
2894 { "jgH", { Jv, BND, cond_jump_flag }, 0 },
252b5132 2895 /* 90 */
bf890a93
IT
2896 { "seto", { Eb }, 0 },
2897 { "setno", { Eb }, 0 },
2898 { "setb", { Eb }, 0 },
2899 { "setae", { Eb }, 0 },
2900 { "sete", { Eb }, 0 },
2901 { "setne", { Eb }, 0 },
2902 { "setbe", { Eb }, 0 },
2903 { "seta", { Eb }, 0 },
252b5132 2904 /* 98 */
bf890a93
IT
2905 { "sets", { Eb }, 0 },
2906 { "setns", { Eb }, 0 },
2907 { "setp", { Eb }, 0 },
2908 { "setnp", { Eb }, 0 },
2909 { "setl", { Eb }, 0 },
2910 { "setge", { Eb }, 0 },
2911 { "setle", { Eb }, 0 },
2912 { "setg", { Eb }, 0 },
252b5132 2913 /* a0 */
bf890a93
IT
2914 { "pushT", { fs }, 0 },
2915 { "popT", { fs }, 0 },
2916 { "cpuid", { XX }, 0 },
2917 { "btS", { Ev, Gv }, 0 },
2918 { "shldS", { Ev, Gv, Ib }, 0 },
2919 { "shldS", { Ev, Gv, CL }, 0 },
1ceb70f8
L
2920 { REG_TABLE (REG_0FA6) },
2921 { REG_TABLE (REG_0FA7) },
252b5132 2922 /* a8 */
bf890a93
IT
2923 { "pushT", { gs }, 0 },
2924 { "popT", { gs }, 0 },
2925 { "rsm", { XX }, 0 },
2926 { "btsS", { Evh1, Gv }, 0 },
2927 { "shrdS", { Ev, Gv, Ib }, 0 },
2928 { "shrdS", { Ev, Gv, CL }, 0 },
1ceb70f8 2929 { REG_TABLE (REG_0FAE) },
bf890a93 2930 { "imulS", { Gv, Ev }, 0 },
252b5132 2931 /* b0 */
bf890a93
IT
2932 { "cmpxchgB", { Ebh1, Gb }, 0 },
2933 { "cmpxchgS", { Evh1, Gv }, 0 },
1ceb70f8 2934 { MOD_TABLE (MOD_0FB2) },
bf890a93 2935 { "btrS", { Evh1, Gv }, 0 },
1ceb70f8
L
2936 { MOD_TABLE (MOD_0FB4) },
2937 { MOD_TABLE (MOD_0FB5) },
bf890a93
IT
2938 { "movz{bR|x}", { Gv, Eb }, 0 },
2939 { "movz{wR|x}", { Gv, Ew }, 0 }, /* yes, there really is movzww ! */
252b5132 2940 /* b8 */
1ceb70f8 2941 { PREFIX_TABLE (PREFIX_0FB8) },
bf890a93 2942 { "ud1", { XX }, 0 },
1ceb70f8 2943 { REG_TABLE (REG_0FBA) },
bf890a93 2944 { "btcS", { Evh1, Gv }, 0 },
f12dc422 2945 { PREFIX_TABLE (PREFIX_0FBC) },
1ceb70f8 2946 { PREFIX_TABLE (PREFIX_0FBD) },
bf890a93
IT
2947 { "movs{bR|x}", { Gv, Eb }, 0 },
2948 { "movs{wR|x}", { Gv, Ew }, 0 }, /* yes, there really is movsww ! */
252b5132 2949 /* c0 */
bf890a93
IT
2950 { "xaddB", { Ebh1, Gb }, 0 },
2951 { "xaddS", { Evh1, Gv }, 0 },
1ceb70f8 2952 { PREFIX_TABLE (PREFIX_0FC2) },
4ee52178 2953 { PREFIX_TABLE (PREFIX_0FC3) },
507bd325
L
2954 { "pinsrw", { MX, Edqw, Ib }, PREFIX_OPCODE },
2955 { "pextrw", { Gdq, MS, Ib }, PREFIX_OPCODE },
2956 { "shufpX", { XM, EXx, Ib }, PREFIX_OPCODE },
1ceb70f8 2957 { REG_TABLE (REG_0FC7) },
252b5132 2958 /* c8 */
bf890a93
IT
2959 { "bswap", { RMeAX }, 0 },
2960 { "bswap", { RMeCX }, 0 },
2961 { "bswap", { RMeDX }, 0 },
2962 { "bswap", { RMeBX }, 0 },
2963 { "bswap", { RMeSP }, 0 },
2964 { "bswap", { RMeBP }, 0 },
2965 { "bswap", { RMeSI }, 0 },
2966 { "bswap", { RMeDI }, 0 },
252b5132 2967 /* d0 */
1ceb70f8 2968 { PREFIX_TABLE (PREFIX_0FD0) },
507bd325
L
2969 { "psrlw", { MX, EM }, PREFIX_OPCODE },
2970 { "psrld", { MX, EM }, PREFIX_OPCODE },
2971 { "psrlq", { MX, EM }, PREFIX_OPCODE },
2972 { "paddq", { MX, EM }, PREFIX_OPCODE },
2973 { "pmullw", { MX, EM }, PREFIX_OPCODE },
1ceb70f8 2974 { PREFIX_TABLE (PREFIX_0FD6) },
75c135a8 2975 { MOD_TABLE (MOD_0FD7) },
252b5132 2976 /* d8 */
507bd325
L
2977 { "psubusb", { MX, EM }, PREFIX_OPCODE },
2978 { "psubusw", { MX, EM }, PREFIX_OPCODE },
2979 { "pminub", { MX, EM }, PREFIX_OPCODE },
2980 { "pand", { MX, EM }, PREFIX_OPCODE },
2981 { "paddusb", { MX, EM }, PREFIX_OPCODE },
2982 { "paddusw", { MX, EM }, PREFIX_OPCODE },
2983 { "pmaxub", { MX, EM }, PREFIX_OPCODE },
2984 { "pandn", { MX, EM }, PREFIX_OPCODE },
252b5132 2985 /* e0 */
507bd325
L
2986 { "pavgb", { MX, EM }, PREFIX_OPCODE },
2987 { "psraw", { MX, EM }, PREFIX_OPCODE },
2988 { "psrad", { MX, EM }, PREFIX_OPCODE },
2989 { "pavgw", { MX, EM }, PREFIX_OPCODE },
2990 { "pmulhuw", { MX, EM }, PREFIX_OPCODE },
2991 { "pmulhw", { MX, EM }, PREFIX_OPCODE },
1ceb70f8
L
2992 { PREFIX_TABLE (PREFIX_0FE6) },
2993 { PREFIX_TABLE (PREFIX_0FE7) },
252b5132 2994 /* e8 */
507bd325
L
2995 { "psubsb", { MX, EM }, PREFIX_OPCODE },
2996 { "psubsw", { MX, EM }, PREFIX_OPCODE },
2997 { "pminsw", { MX, EM }, PREFIX_OPCODE },
2998 { "por", { MX, EM }, PREFIX_OPCODE },
2999 { "paddsb", { MX, EM }, PREFIX_OPCODE },
3000 { "paddsw", { MX, EM }, PREFIX_OPCODE },
3001 { "pmaxsw", { MX, EM }, PREFIX_OPCODE },
3002 { "pxor", { MX, EM }, PREFIX_OPCODE },
252b5132 3003 /* f0 */
1ceb70f8 3004 { PREFIX_TABLE (PREFIX_0FF0) },
507bd325
L
3005 { "psllw", { MX, EM }, PREFIX_OPCODE },
3006 { "pslld", { MX, EM }, PREFIX_OPCODE },
3007 { "psllq", { MX, EM }, PREFIX_OPCODE },
3008 { "pmuludq", { MX, EM }, PREFIX_OPCODE },
3009 { "pmaddwd", { MX, EM }, PREFIX_OPCODE },
3010 { "psadbw", { MX, EM }, PREFIX_OPCODE },
1ceb70f8 3011 { PREFIX_TABLE (PREFIX_0FF7) },
252b5132 3012 /* f8 */
507bd325
L
3013 { "psubb", { MX, EM }, PREFIX_OPCODE },
3014 { "psubw", { MX, EM }, PREFIX_OPCODE },
3015 { "psubd", { MX, EM }, PREFIX_OPCODE },
3016 { "psubq", { MX, EM }, PREFIX_OPCODE },
3017 { "paddb", { MX, EM }, PREFIX_OPCODE },
3018 { "paddw", { MX, EM }, PREFIX_OPCODE },
3019 { "paddd", { MX, EM }, PREFIX_OPCODE },
592d1631 3020 { Bad_Opcode },
252b5132
RH
3021};
3022
3023static const unsigned char onebyte_has_modrm[256] = {
c608c12e
AM
3024 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
3025 /* ------------------------------- */
3026 /* 00 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 00 */
3027 /* 10 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 10 */
3028 /* 20 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 20 */
3029 /* 30 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 30 */
3030 /* 40 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 40 */
3031 /* 50 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 50 */
3032 /* 60 */ 0,0,1,1,0,0,0,0,0,1,0,1,0,0,0,0, /* 60 */
3033 /* 70 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 70 */
3034 /* 80 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 80 */
3035 /* 90 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 90 */
3036 /* a0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* a0 */
3037 /* b0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* b0 */
3038 /* c0 */ 1,1,0,0,1,1,1,1,0,0,0,0,0,0,0,0, /* c0 */
3039 /* d0 */ 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1, /* d0 */
3040 /* e0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* e0 */
3041 /* f0 */ 0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1 /* f0 */
3042 /* ------------------------------- */
3043 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
252b5132
RH
3044};
3045
3046static const unsigned char twobyte_has_modrm[256] = {
c608c12e
AM
3047 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
3048 /* ------------------------------- */
252b5132 3049 /* 00 */ 1,1,1,1,0,0,0,0,0,0,0,0,0,1,0,1, /* 0f */
b5b1fc4f 3050 /* 10 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 1f */
85f10a01 3051 /* 20 */ 1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1, /* 2f */
331d2d0d 3052 /* 30 */ 0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0, /* 3f */
252b5132 3053 /* 40 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 4f */
4bba6815
AM
3054 /* 50 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 5f */
3055 /* 60 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 6f */
85f10a01 3056 /* 70 */ 1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1, /* 7f */
252b5132
RH
3057 /* 80 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 8f */
3058 /* 90 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 9f */
30d1c836 3059 /* a0 */ 0,0,0,1,1,1,1,1,0,0,0,1,1,1,1,1, /* af */
050dfa73 3060 /* b0 */ 1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1, /* bf */
252b5132 3061 /* c0 */ 1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0, /* cf */
ca164297 3062 /* d0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* df */
4bba6815 3063 /* e0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* ef */
ca164297 3064 /* f0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0 /* ff */
c608c12e
AM
3065 /* ------------------------------- */
3066 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
3067};
3068
252b5132
RH
3069static char obuf[100];
3070static char *obufp;
ea397f5b 3071static char *mnemonicendp;
252b5132
RH
3072static char scratchbuf[100];
3073static unsigned char *start_codep;
3074static unsigned char *insn_codep;
3075static unsigned char *codep;
285ca992 3076static unsigned char *end_codep;
f16cd0d5
L
3077static int last_lock_prefix;
3078static int last_repz_prefix;
3079static int last_repnz_prefix;
3080static int last_data_prefix;
3081static int last_addr_prefix;
3082static int last_rex_prefix;
3083static int last_seg_prefix;
d9949a36 3084static int fwait_prefix;
285ca992 3085/* The PREFIX_REPZ/PREFIX_REPNZ/PREFIX_DATA prefix is mandatory. */
507bd325 3086static int prefix_requirement;
285ca992
L
3087/* The active segment register prefix. */
3088static int active_seg_prefix;
f16cd0d5
L
3089#define MAX_CODE_LENGTH 15
3090/* We can up to 14 prefixes since the maximum instruction length is
3091 15bytes. */
3092static int all_prefixes[MAX_CODE_LENGTH - 1];
252b5132 3093static disassemble_info *the_info;
7967e09e
L
3094static struct
3095 {
3096 int mod;
7967e09e 3097 int reg;
484c222e 3098 int rm;
7967e09e
L
3099 }
3100modrm;
4bba6815 3101static unsigned char need_modrm;
dfc8cf43
L
3102static struct
3103 {
3104 int scale;
3105 int index;
3106 int base;
3107 }
3108sib;
c0f3af97
L
3109static struct
3110 {
3111 int register_specifier;
3112 int length;
3113 int prefix;
3114 int w;
43234a1e
L
3115 int evex;
3116 int r;
3117 int v;
3118 int mask_register_specifier;
3119 int zeroing;
3120 int ll;
3121 int b;
c0f3af97
L
3122 }
3123vex;
3124static unsigned char need_vex;
3125static unsigned char need_vex_reg;
dae39acc 3126static unsigned char vex_w_done;
252b5132 3127
ea397f5b
L
3128struct op
3129 {
3130 const char *name;
3131 unsigned int len;
3132 };
3133
4bba6815
AM
3134/* If we are accessing mod/rm/reg without need_modrm set, then the
3135 values are stale. Hitting this abort likely indicates that you
3136 need to update onebyte_has_modrm or twobyte_has_modrm. */
3137#define MODRM_CHECK if (!need_modrm) abort ()
3138
d708bcba
AM
3139static const char **names64;
3140static const char **names32;
3141static const char **names16;
3142static const char **names8;
3143static const char **names8rex;
3144static const char **names_seg;
db51cc60
L
3145static const char *index64;
3146static const char *index32;
d708bcba 3147static const char **index16;
7e8b059b 3148static const char **names_bnd;
d708bcba
AM
3149
3150static const char *intel_names64[] = {
3151 "rax", "rcx", "rdx", "rbx", "rsp", "rbp", "rsi", "rdi",
3152 "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15"
3153};
3154static const char *intel_names32[] = {
3155 "eax", "ecx", "edx", "ebx", "esp", "ebp", "esi", "edi",
3156 "r8d", "r9d", "r10d", "r11d", "r12d", "r13d", "r14d", "r15d"
3157};
3158static const char *intel_names16[] = {
3159 "ax", "cx", "dx", "bx", "sp", "bp", "si", "di",
3160 "r8w", "r9w", "r10w", "r11w", "r12w", "r13w", "r14w", "r15w"
3161};
3162static const char *intel_names8[] = {
3163 "al", "cl", "dl", "bl", "ah", "ch", "dh", "bh",
3164};
3165static const char *intel_names8rex[] = {
3166 "al", "cl", "dl", "bl", "spl", "bpl", "sil", "dil",
3167 "r8b", "r9b", "r10b", "r11b", "r12b", "r13b", "r14b", "r15b"
3168};
3169static const char *intel_names_seg[] = {
3170 "es", "cs", "ss", "ds", "fs", "gs", "?", "?",
3171};
db51cc60
L
3172static const char *intel_index64 = "riz";
3173static const char *intel_index32 = "eiz";
d708bcba
AM
3174static const char *intel_index16[] = {
3175 "bx+si", "bx+di", "bp+si", "bp+di", "si", "di", "bp", "bx"
3176};
3177
3178static const char *att_names64[] = {
3179 "%rax", "%rcx", "%rdx", "%rbx", "%rsp", "%rbp", "%rsi", "%rdi",
52b15da3
JH
3180 "%r8", "%r9", "%r10", "%r11", "%r12", "%r13", "%r14", "%r15"
3181};
d708bcba
AM
3182static const char *att_names32[] = {
3183 "%eax", "%ecx", "%edx", "%ebx", "%esp", "%ebp", "%esi", "%edi",
52b15da3 3184 "%r8d", "%r9d", "%r10d", "%r11d", "%r12d", "%r13d", "%r14d", "%r15d"
252b5132 3185};
d708bcba
AM
3186static const char *att_names16[] = {
3187 "%ax", "%cx", "%dx", "%bx", "%sp", "%bp", "%si", "%di",
52b15da3 3188 "%r8w", "%r9w", "%r10w", "%r11w", "%r12w", "%r13w", "%r14w", "%r15w"
252b5132 3189};
d708bcba
AM
3190static const char *att_names8[] = {
3191 "%al", "%cl", "%dl", "%bl", "%ah", "%ch", "%dh", "%bh",
252b5132 3192};
d708bcba
AM
3193static const char *att_names8rex[] = {
3194 "%al", "%cl", "%dl", "%bl", "%spl", "%bpl", "%sil", "%dil",
52b15da3
JH
3195 "%r8b", "%r9b", "%r10b", "%r11b", "%r12b", "%r13b", "%r14b", "%r15b"
3196};
d708bcba
AM
3197static const char *att_names_seg[] = {
3198 "%es", "%cs", "%ss", "%ds", "%fs", "%gs", "%?", "%?",
252b5132 3199};
db51cc60
L
3200static const char *att_index64 = "%riz";
3201static const char *att_index32 = "%eiz";
d708bcba
AM
3202static const char *att_index16[] = {
3203 "%bx,%si", "%bx,%di", "%bp,%si", "%bp,%di", "%si", "%di", "%bp", "%bx"
252b5132
RH
3204};
3205
b9733481
L
3206static const char **names_mm;
3207static const char *intel_names_mm[] = {
3208 "mm0", "mm1", "mm2", "mm3",
3209 "mm4", "mm5", "mm6", "mm7"
3210};
3211static const char *att_names_mm[] = {
3212 "%mm0", "%mm1", "%mm2", "%mm3",
3213 "%mm4", "%mm5", "%mm6", "%mm7"
3214};
3215
7e8b059b
L
3216static const char *intel_names_bnd[] = {
3217 "bnd0", "bnd1", "bnd2", "bnd3"
3218};
3219
3220static const char *att_names_bnd[] = {
3221 "%bnd0", "%bnd1", "%bnd2", "%bnd3"
3222};
3223
b9733481
L
3224static const char **names_xmm;
3225static const char *intel_names_xmm[] = {
3226 "xmm0", "xmm1", "xmm2", "xmm3",
3227 "xmm4", "xmm5", "xmm6", "xmm7",
3228 "xmm8", "xmm9", "xmm10", "xmm11",
43234a1e
L
3229 "xmm12", "xmm13", "xmm14", "xmm15",
3230 "xmm16", "xmm17", "xmm18", "xmm19",
3231 "xmm20", "xmm21", "xmm22", "xmm23",
3232 "xmm24", "xmm25", "xmm26", "xmm27",
3233 "xmm28", "xmm29", "xmm30", "xmm31"
b9733481
L
3234};
3235static const char *att_names_xmm[] = {
3236 "%xmm0", "%xmm1", "%xmm2", "%xmm3",
3237 "%xmm4", "%xmm5", "%xmm6", "%xmm7",
3238 "%xmm8", "%xmm9", "%xmm10", "%xmm11",
43234a1e
L
3239 "%xmm12", "%xmm13", "%xmm14", "%xmm15",
3240 "%xmm16", "%xmm17", "%xmm18", "%xmm19",
3241 "%xmm20", "%xmm21", "%xmm22", "%xmm23",
3242 "%xmm24", "%xmm25", "%xmm26", "%xmm27",
3243 "%xmm28", "%xmm29", "%xmm30", "%xmm31"
b9733481
L
3244};
3245
3246static const char **names_ymm;
3247static const char *intel_names_ymm[] = {
3248 "ymm0", "ymm1", "ymm2", "ymm3",
3249 "ymm4", "ymm5", "ymm6", "ymm7",
3250 "ymm8", "ymm9", "ymm10", "ymm11",
43234a1e
L
3251 "ymm12", "ymm13", "ymm14", "ymm15",
3252 "ymm16", "ymm17", "ymm18", "ymm19",
3253 "ymm20", "ymm21", "ymm22", "ymm23",
3254 "ymm24", "ymm25", "ymm26", "ymm27",
3255 "ymm28", "ymm29", "ymm30", "ymm31"
b9733481
L
3256};
3257static const char *att_names_ymm[] = {
3258 "%ymm0", "%ymm1", "%ymm2", "%ymm3",
3259 "%ymm4", "%ymm5", "%ymm6", "%ymm7",
3260 "%ymm8", "%ymm9", "%ymm10", "%ymm11",
43234a1e
L
3261 "%ymm12", "%ymm13", "%ymm14", "%ymm15",
3262 "%ymm16", "%ymm17", "%ymm18", "%ymm19",
3263 "%ymm20", "%ymm21", "%ymm22", "%ymm23",
3264 "%ymm24", "%ymm25", "%ymm26", "%ymm27",
3265 "%ymm28", "%ymm29", "%ymm30", "%ymm31"
3266};
3267
3268static const char **names_zmm;
3269static const char *intel_names_zmm[] = {
3270 "zmm0", "zmm1", "zmm2", "zmm3",
3271 "zmm4", "zmm5", "zmm6", "zmm7",
3272 "zmm8", "zmm9", "zmm10", "zmm11",
3273 "zmm12", "zmm13", "zmm14", "zmm15",
3274 "zmm16", "zmm17", "zmm18", "zmm19",
3275 "zmm20", "zmm21", "zmm22", "zmm23",
3276 "zmm24", "zmm25", "zmm26", "zmm27",
3277 "zmm28", "zmm29", "zmm30", "zmm31"
3278};
3279static const char *att_names_zmm[] = {
3280 "%zmm0", "%zmm1", "%zmm2", "%zmm3",
3281 "%zmm4", "%zmm5", "%zmm6", "%zmm7",
3282 "%zmm8", "%zmm9", "%zmm10", "%zmm11",
3283 "%zmm12", "%zmm13", "%zmm14", "%zmm15",
3284 "%zmm16", "%zmm17", "%zmm18", "%zmm19",
3285 "%zmm20", "%zmm21", "%zmm22", "%zmm23",
3286 "%zmm24", "%zmm25", "%zmm26", "%zmm27",
3287 "%zmm28", "%zmm29", "%zmm30", "%zmm31"
3288};
3289
3290static const char **names_mask;
3291static const char *intel_names_mask[] = {
3292 "k0", "k1", "k2", "k3", "k4", "k5", "k6", "k7"
3293};
3294static const char *att_names_mask[] = {
3295 "%k0", "%k1", "%k2", "%k3", "%k4", "%k5", "%k6", "%k7"
3296};
3297
3298static const char *names_rounding[] =
3299{
3300 "{rn-sae}",
3301 "{rd-sae}",
3302 "{ru-sae}",
3303 "{rz-sae}"
b9733481
L
3304};
3305
1ceb70f8
L
3306static const struct dis386 reg_table[][8] = {
3307 /* REG_80 */
252b5132 3308 {
bf890a93
IT
3309 { "addA", { Ebh1, Ib }, 0 },
3310 { "orA", { Ebh1, Ib }, 0 },
3311 { "adcA", { Ebh1, Ib }, 0 },
3312 { "sbbA", { Ebh1, Ib }, 0 },
3313 { "andA", { Ebh1, Ib }, 0 },
3314 { "subA", { Ebh1, Ib }, 0 },
3315 { "xorA", { Ebh1, Ib }, 0 },
3316 { "cmpA", { Eb, Ib }, 0 },
252b5132 3317 },
1ceb70f8 3318 /* REG_81 */
252b5132 3319 {
bf890a93
IT
3320 { "addQ", { Evh1, Iv }, 0 },
3321 { "orQ", { Evh1, Iv }, 0 },
3322 { "adcQ", { Evh1, Iv }, 0 },
3323 { "sbbQ", { Evh1, Iv }, 0 },
3324 { "andQ", { Evh1, Iv }, 0 },
3325 { "subQ", { Evh1, Iv }, 0 },
3326 { "xorQ", { Evh1, Iv }, 0 },
3327 { "cmpQ", { Ev, Iv }, 0 },
252b5132 3328 },
1ceb70f8 3329 /* REG_82 */
252b5132 3330 {
bf890a93
IT
3331 { "addQ", { Evh1, sIb }, 0 },
3332 { "orQ", { Evh1, sIb }, 0 },
3333 { "adcQ", { Evh1, sIb }, 0 },
3334 { "sbbQ", { Evh1, sIb }, 0 },
3335 { "andQ", { Evh1, sIb }, 0 },
3336 { "subQ", { Evh1, sIb }, 0 },
3337 { "xorQ", { Evh1, sIb }, 0 },
3338 { "cmpQ", { Ev, sIb }, 0 },
252b5132 3339 },
1ceb70f8 3340 /* REG_8F */
4e7d34a6 3341 {
bf890a93 3342 { "popU", { stackEv }, 0 },
c48244a5 3343 { XOP_8F_TABLE (XOP_09) },
592d1631
L
3344 { Bad_Opcode },
3345 { Bad_Opcode },
3346 { Bad_Opcode },
f88c9eb0 3347 { XOP_8F_TABLE (XOP_09) },
4e7d34a6 3348 },
1ceb70f8 3349 /* REG_C0 */
252b5132 3350 {
bf890a93
IT
3351 { "rolA", { Eb, Ib }, 0 },
3352 { "rorA", { Eb, Ib }, 0 },
3353 { "rclA", { Eb, Ib }, 0 },
3354 { "rcrA", { Eb, Ib }, 0 },
3355 { "shlA", { Eb, Ib }, 0 },
3356 { "shrA", { Eb, Ib }, 0 },
592d1631 3357 { Bad_Opcode },
bf890a93 3358 { "sarA", { Eb, Ib }, 0 },
252b5132 3359 },
1ceb70f8 3360 /* REG_C1 */
252b5132 3361 {
bf890a93
IT
3362 { "rolQ", { Ev, Ib }, 0 },
3363 { "rorQ", { Ev, Ib }, 0 },
3364 { "rclQ", { Ev, Ib }, 0 },
3365 { "rcrQ", { Ev, Ib }, 0 },
3366 { "shlQ", { Ev, Ib }, 0 },
3367 { "shrQ", { Ev, Ib }, 0 },
592d1631 3368 { Bad_Opcode },
bf890a93 3369 { "sarQ", { Ev, Ib }, 0 },
252b5132 3370 },
1ceb70f8 3371 /* REG_C6 */
4e7d34a6 3372 {
bf890a93 3373 { "movA", { Ebh3, Ib }, 0 },
42164a71
L
3374 { Bad_Opcode },
3375 { Bad_Opcode },
3376 { Bad_Opcode },
3377 { Bad_Opcode },
3378 { Bad_Opcode },
3379 { Bad_Opcode },
3380 { MOD_TABLE (MOD_C6_REG_7) },
4e7d34a6 3381 },
1ceb70f8 3382 /* REG_C7 */
4e7d34a6 3383 {
bf890a93 3384 { "movQ", { Evh3, Iv }, 0 },
42164a71
L
3385 { Bad_Opcode },
3386 { Bad_Opcode },
3387 { Bad_Opcode },
3388 { Bad_Opcode },
3389 { Bad_Opcode },
3390 { Bad_Opcode },
3391 { MOD_TABLE (MOD_C7_REG_7) },
4e7d34a6 3392 },
1ceb70f8 3393 /* REG_D0 */
252b5132 3394 {
bf890a93
IT
3395 { "rolA", { Eb, I1 }, 0 },
3396 { "rorA", { Eb, I1 }, 0 },
3397 { "rclA", { Eb, I1 }, 0 },
3398 { "rcrA", { Eb, I1 }, 0 },
3399 { "shlA", { Eb, I1 }, 0 },
3400 { "shrA", { Eb, I1 }, 0 },
592d1631 3401 { Bad_Opcode },
bf890a93 3402 { "sarA", { Eb, I1 }, 0 },
252b5132 3403 },
1ceb70f8 3404 /* REG_D1 */
252b5132 3405 {
bf890a93
IT
3406 { "rolQ", { Ev, I1 }, 0 },
3407 { "rorQ", { Ev, I1 }, 0 },
3408 { "rclQ", { Ev, I1 }, 0 },
3409 { "rcrQ", { Ev, I1 }, 0 },
3410 { "shlQ", { Ev, I1 }, 0 },
3411 { "shrQ", { Ev, I1 }, 0 },
592d1631 3412 { Bad_Opcode },
bf890a93 3413 { "sarQ", { Ev, I1 }, 0 },
252b5132 3414 },
1ceb70f8 3415 /* REG_D2 */
252b5132 3416 {
bf890a93
IT
3417 { "rolA", { Eb, CL }, 0 },
3418 { "rorA", { Eb, CL }, 0 },
3419 { "rclA", { Eb, CL }, 0 },
3420 { "rcrA", { Eb, CL }, 0 },
3421 { "shlA", { Eb, CL }, 0 },
3422 { "shrA", { Eb, CL }, 0 },
592d1631 3423 { Bad_Opcode },
bf890a93 3424 { "sarA", { Eb, CL }, 0 },
252b5132 3425 },
1ceb70f8 3426 /* REG_D3 */
252b5132 3427 {
bf890a93
IT
3428 { "rolQ", { Ev, CL }, 0 },
3429 { "rorQ", { Ev, CL }, 0 },
3430 { "rclQ", { Ev, CL }, 0 },
3431 { "rcrQ", { Ev, CL }, 0 },
3432 { "shlQ", { Ev, CL }, 0 },
3433 { "shrQ", { Ev, CL }, 0 },
592d1631 3434 { Bad_Opcode },
bf890a93 3435 { "sarQ", { Ev, CL }, 0 },
252b5132 3436 },
1ceb70f8 3437 /* REG_F6 */
252b5132 3438 {
bf890a93 3439 { "testA", { Eb, Ib }, 0 },
592d1631 3440 { Bad_Opcode },
bf890a93
IT
3441 { "notA", { Ebh1 }, 0 },
3442 { "negA", { Ebh1 }, 0 },
3443 { "mulA", { Eb }, 0 }, /* Don't print the implicit %al register, */
3444 { "imulA", { Eb }, 0 }, /* to distinguish these opcodes from other */
3445 { "divA", { Eb }, 0 }, /* mul/imul opcodes. Do the same for div */
3446 { "idivA", { Eb }, 0 }, /* and idiv for consistency. */
252b5132 3447 },
1ceb70f8 3448 /* REG_F7 */
252b5132 3449 {
bf890a93 3450 { "testQ", { Ev, Iv }, 0 },
592d1631 3451 { Bad_Opcode },
bf890a93
IT
3452 { "notQ", { Evh1 }, 0 },
3453 { "negQ", { Evh1 }, 0 },
3454 { "mulQ", { Ev }, 0 }, /* Don't print the implicit register. */
3455 { "imulQ", { Ev }, 0 },
3456 { "divQ", { Ev }, 0 },
3457 { "idivQ", { Ev }, 0 },
252b5132 3458 },
1ceb70f8 3459 /* REG_FE */
252b5132 3460 {
bf890a93
IT
3461 { "incA", { Ebh1 }, 0 },
3462 { "decA", { Ebh1 }, 0 },
252b5132 3463 },
1ceb70f8 3464 /* REG_FF */
252b5132 3465 {
bf890a93
IT
3466 { "incQ", { Evh1 }, 0 },
3467 { "decQ", { Evh1 }, 0 },
3468 { "call{T|}", { indirEv, BND }, 0 },
4a357820 3469 { MOD_TABLE (MOD_FF_REG_3) },
bf890a93 3470 { "jmp{T|}", { indirEv, BND }, 0 },
4a357820 3471 { MOD_TABLE (MOD_FF_REG_5) },
bf890a93 3472 { "pushU", { stackEv }, 0 },
592d1631 3473 { Bad_Opcode },
252b5132 3474 },
1ceb70f8 3475 /* REG_0F00 */
252b5132 3476 {
bf890a93
IT
3477 { "sldtD", { Sv }, 0 },
3478 { "strD", { Sv }, 0 },
3479 { "lldt", { Ew }, 0 },
3480 { "ltr", { Ew }, 0 },
3481 { "verr", { Ew }, 0 },
3482 { "verw", { Ew }, 0 },
592d1631
L
3483 { Bad_Opcode },
3484 { Bad_Opcode },
252b5132 3485 },
1ceb70f8 3486 /* REG_0F01 */
252b5132 3487 {
1ceb70f8
L
3488 { MOD_TABLE (MOD_0F01_REG_0) },
3489 { MOD_TABLE (MOD_0F01_REG_1) },
3490 { MOD_TABLE (MOD_0F01_REG_2) },
3491 { MOD_TABLE (MOD_0F01_REG_3) },
bf890a93 3492 { "smswD", { Sv }, 0 },
592d1631 3493 { Bad_Opcode },
bf890a93 3494 { "lmsw", { Ew }, 0 },
1ceb70f8 3495 { MOD_TABLE (MOD_0F01_REG_7) },
252b5132 3496 },
b5b1fc4f 3497 /* REG_0F0D */
252b5132 3498 {
bf890a93
IT
3499 { "prefetch", { Mb }, 0 },
3500 { "prefetchw", { Mb }, 0 },
3501 { "prefetchwt1", { Mb }, 0 },
3502 { "prefetch", { Mb }, 0 },
3503 { "prefetch", { Mb }, 0 },
3504 { "prefetch", { Mb }, 0 },
3505 { "prefetch", { Mb }, 0 },
3506 { "prefetch", { Mb }, 0 },
252b5132 3507 },
1ceb70f8 3508 /* REG_0F18 */
252b5132 3509 {
1ceb70f8
L
3510 { MOD_TABLE (MOD_0F18_REG_0) },
3511 { MOD_TABLE (MOD_0F18_REG_1) },
3512 { MOD_TABLE (MOD_0F18_REG_2) },
3513 { MOD_TABLE (MOD_0F18_REG_3) },
d7189fa5
RM
3514 { MOD_TABLE (MOD_0F18_REG_4) },
3515 { MOD_TABLE (MOD_0F18_REG_5) },
3516 { MOD_TABLE (MOD_0F18_REG_6) },
3517 { MOD_TABLE (MOD_0F18_REG_7) },
252b5132 3518 },
1ceb70f8 3519 /* REG_0F71 */
a6bd098c 3520 {
592d1631
L
3521 { Bad_Opcode },
3522 { Bad_Opcode },
1ceb70f8 3523 { MOD_TABLE (MOD_0F71_REG_2) },
592d1631 3524 { Bad_Opcode },
1ceb70f8 3525 { MOD_TABLE (MOD_0F71_REG_4) },
592d1631 3526 { Bad_Opcode },
1ceb70f8 3527 { MOD_TABLE (MOD_0F71_REG_6) },
a6bd098c 3528 },
1ceb70f8 3529 /* REG_0F72 */
a6bd098c 3530 {
592d1631
L
3531 { Bad_Opcode },
3532 { Bad_Opcode },
1ceb70f8 3533 { MOD_TABLE (MOD_0F72_REG_2) },
592d1631 3534 { Bad_Opcode },
1ceb70f8 3535 { MOD_TABLE (MOD_0F72_REG_4) },
592d1631 3536 { Bad_Opcode },
1ceb70f8 3537 { MOD_TABLE (MOD_0F72_REG_6) },
a6bd098c 3538 },
1ceb70f8 3539 /* REG_0F73 */
252b5132 3540 {
592d1631
L
3541 { Bad_Opcode },
3542 { Bad_Opcode },
1ceb70f8
L
3543 { MOD_TABLE (MOD_0F73_REG_2) },
3544 { MOD_TABLE (MOD_0F73_REG_3) },
592d1631
L
3545 { Bad_Opcode },
3546 { Bad_Opcode },
1ceb70f8
L
3547 { MOD_TABLE (MOD_0F73_REG_6) },
3548 { MOD_TABLE (MOD_0F73_REG_7) },
252b5132 3549 },
1ceb70f8 3550 /* REG_0FA6 */
252b5132 3551 {
bf890a93
IT
3552 { "montmul", { { OP_0f07, 0 } }, 0 },
3553 { "xsha1", { { OP_0f07, 0 } }, 0 },
3554 { "xsha256", { { OP_0f07, 0 } }, 0 },
4e7d34a6 3555 },
1ceb70f8 3556 /* REG_0FA7 */
4e7d34a6 3557 {
bf890a93
IT
3558 { "xstore-rng", { { OP_0f07, 0 } }, 0 },
3559 { "xcrypt-ecb", { { OP_0f07, 0 } }, 0 },
3560 { "xcrypt-cbc", { { OP_0f07, 0 } }, 0 },
3561 { "xcrypt-ctr", { { OP_0f07, 0 } }, 0 },
3562 { "xcrypt-cfb", { { OP_0f07, 0 } }, 0 },
3563 { "xcrypt-ofb", { { OP_0f07, 0 } }, 0 },
4e7d34a6 3564 },
1ceb70f8 3565 /* REG_0FAE */
4e7d34a6 3566 {
1ceb70f8
L
3567 { MOD_TABLE (MOD_0FAE_REG_0) },
3568 { MOD_TABLE (MOD_0FAE_REG_1) },
3569 { MOD_TABLE (MOD_0FAE_REG_2) },
3570 { MOD_TABLE (MOD_0FAE_REG_3) },
475a2301 3571 { MOD_TABLE (MOD_0FAE_REG_4) },
1ceb70f8
L
3572 { MOD_TABLE (MOD_0FAE_REG_5) },
3573 { MOD_TABLE (MOD_0FAE_REG_6) },
3574 { MOD_TABLE (MOD_0FAE_REG_7) },
252b5132 3575 },
1ceb70f8 3576 /* REG_0FBA */
252b5132 3577 {
592d1631
L
3578 { Bad_Opcode },
3579 { Bad_Opcode },
3580 { Bad_Opcode },
3581 { Bad_Opcode },
bf890a93
IT
3582 { "btQ", { Ev, Ib }, 0 },
3583 { "btsQ", { Evh1, Ib }, 0 },
3584 { "btrQ", { Evh1, Ib }, 0 },
3585 { "btcQ", { Evh1, Ib }, 0 },
c608c12e 3586 },
1ceb70f8 3587 /* REG_0FC7 */
c608c12e 3588 {
592d1631 3589 { Bad_Opcode },
bf890a93 3590 { "cmpxchg8b", { { CMPXCHG8B_Fixup, q_mode } }, 0 },
592d1631 3591 { Bad_Opcode },
963f3586
IT
3592 { MOD_TABLE (MOD_0FC7_REG_3) },
3593 { MOD_TABLE (MOD_0FC7_REG_4) },
3594 { MOD_TABLE (MOD_0FC7_REG_5) },
1ceb70f8
L
3595 { MOD_TABLE (MOD_0FC7_REG_6) },
3596 { MOD_TABLE (MOD_0FC7_REG_7) },
252b5132 3597 },
592a252b 3598 /* REG_VEX_0F71 */
c0f3af97 3599 {
592d1631
L
3600 { Bad_Opcode },
3601 { Bad_Opcode },
592a252b 3602 { MOD_TABLE (MOD_VEX_0F71_REG_2) },
592d1631 3603 { Bad_Opcode },
592a252b 3604 { MOD_TABLE (MOD_VEX_0F71_REG_4) },
592d1631 3605 { Bad_Opcode },
592a252b 3606 { MOD_TABLE (MOD_VEX_0F71_REG_6) },
c0f3af97 3607 },
592a252b 3608 /* REG_VEX_0F72 */
c0f3af97 3609 {
592d1631
L
3610 { Bad_Opcode },
3611 { Bad_Opcode },
592a252b 3612 { MOD_TABLE (MOD_VEX_0F72_REG_2) },
592d1631 3613 { Bad_Opcode },
592a252b 3614 { MOD_TABLE (MOD_VEX_0F72_REG_4) },
592d1631 3615 { Bad_Opcode },
592a252b 3616 { MOD_TABLE (MOD_VEX_0F72_REG_6) },
c0f3af97 3617 },
592a252b 3618 /* REG_VEX_0F73 */
c0f3af97 3619 {
592d1631
L
3620 { Bad_Opcode },
3621 { Bad_Opcode },
592a252b
L
3622 { MOD_TABLE (MOD_VEX_0F73_REG_2) },
3623 { MOD_TABLE (MOD_VEX_0F73_REG_3) },
592d1631
L
3624 { Bad_Opcode },
3625 { Bad_Opcode },
592a252b
L
3626 { MOD_TABLE (MOD_VEX_0F73_REG_6) },
3627 { MOD_TABLE (MOD_VEX_0F73_REG_7) },
c0f3af97 3628 },
592a252b 3629 /* REG_VEX_0FAE */
c0f3af97 3630 {
592d1631
L
3631 { Bad_Opcode },
3632 { Bad_Opcode },
592a252b
L
3633 { MOD_TABLE (MOD_VEX_0FAE_REG_2) },
3634 { MOD_TABLE (MOD_VEX_0FAE_REG_3) },
c0f3af97 3635 },
f12dc422
L
3636 /* REG_VEX_0F38F3 */
3637 {
3638 { Bad_Opcode },
3639 { PREFIX_TABLE (PREFIX_VEX_0F38F3_REG_1) },
3640 { PREFIX_TABLE (PREFIX_VEX_0F38F3_REG_2) },
3641 { PREFIX_TABLE (PREFIX_VEX_0F38F3_REG_3) },
3642 },
f88c9eb0
SP
3643 /* REG_XOP_LWPCB */
3644 {
bf890a93
IT
3645 { "llwpcb", { { OP_LWPCB_E, 0 } }, 0 },
3646 { "slwpcb", { { OP_LWPCB_E, 0 } }, 0 },
f88c9eb0
SP
3647 },
3648 /* REG_XOP_LWP */
3649 {
bf890a93
IT
3650 { "lwpins", { { OP_LWP_E, 0 }, Ed, Iq }, 0 },
3651 { "lwpval", { { OP_LWP_E, 0 }, Ed, Iq }, 0 },
f88c9eb0 3652 },
2a2a0f38
QN
3653 /* REG_XOP_TBM_01 */
3654 {
3655 { Bad_Opcode },
bf890a93
IT
3656 { "blcfill", { { OP_LWP_E, 0 }, Ev }, 0 },
3657 { "blsfill", { { OP_LWP_E, 0 }, Ev }, 0 },
3658 { "blcs", { { OP_LWP_E, 0 }, Ev }, 0 },
3659 { "tzmsk", { { OP_LWP_E, 0 }, Ev }, 0 },
3660 { "blcic", { { OP_LWP_E, 0 }, Ev }, 0 },
3661 { "blsic", { { OP_LWP_E, 0 }, Ev }, 0 },
3662 { "t1mskc", { { OP_LWP_E, 0 }, Ev }, 0 },
2a2a0f38
QN
3663 },
3664 /* REG_XOP_TBM_02 */
3665 {
3666 { Bad_Opcode },
bf890a93 3667 { "blcmsk", { { OP_LWP_E, 0 }, Ev }, 0 },
2a2a0f38
QN
3668 { Bad_Opcode },
3669 { Bad_Opcode },
3670 { Bad_Opcode },
3671 { Bad_Opcode },
bf890a93 3672 { "blci", { { OP_LWP_E, 0 }, Ev }, 0 },
2a2a0f38 3673 },
43234a1e
L
3674#define NEED_REG_TABLE
3675#include "i386-dis-evex.h"
3676#undef NEED_REG_TABLE
4e7d34a6
L
3677};
3678
1ceb70f8
L
3679static const struct dis386 prefix_table[][4] = {
3680 /* PREFIX_90 */
252b5132 3681 {
bf890a93
IT
3682 { "xchgS", { { NOP_Fixup1, eAX_reg }, { NOP_Fixup2, eAX_reg } }, 0 },
3683 { "pause", { XX }, 0 },
3684 { "xchgS", { { NOP_Fixup1, eAX_reg }, { NOP_Fixup2, eAX_reg } }, 0 },
507bd325 3685 { NULL, { { NULL, 0 } }, PREFIX_IGNORED }
0f10071e 3686 },
4e7d34a6 3687
1ceb70f8 3688 /* PREFIX_0F10 */
cc0ec051 3689 {
507bd325
L
3690 { "movups", { XM, EXx }, PREFIX_OPCODE },
3691 { "movss", { XM, EXd }, PREFIX_OPCODE },
3692 { "movupd", { XM, EXx }, PREFIX_OPCODE },
3693 { "movsd", { XM, EXq }, PREFIX_OPCODE },
30d1c836 3694 },
4e7d34a6 3695
1ceb70f8 3696 /* PREFIX_0F11 */
30d1c836 3697 {
507bd325
L
3698 { "movups", { EXxS, XM }, PREFIX_OPCODE },
3699 { "movss", { EXdS, XM }, PREFIX_OPCODE },
3700 { "movupd", { EXxS, XM }, PREFIX_OPCODE },
3701 { "movsd", { EXqS, XM }, PREFIX_OPCODE },
4e7d34a6 3702 },
252b5132 3703
1ceb70f8 3704 /* PREFIX_0F12 */
c608c12e 3705 {
1ceb70f8 3706 { MOD_TABLE (MOD_0F12_PREFIX_0) },
507bd325
L
3707 { "movsldup", { XM, EXx }, PREFIX_OPCODE },
3708 { "movlpd", { XM, EXq }, PREFIX_OPCODE },
3709 { "movddup", { XM, EXq }, PREFIX_OPCODE },
c608c12e 3710 },
4e7d34a6 3711
1ceb70f8 3712 /* PREFIX_0F16 */
c608c12e 3713 {
1ceb70f8 3714 { MOD_TABLE (MOD_0F16_PREFIX_0) },
507bd325
L
3715 { "movshdup", { XM, EXx }, PREFIX_OPCODE },
3716 { "movhpd", { XM, EXq }, PREFIX_OPCODE },
c608c12e 3717 },
4e7d34a6 3718
7e8b059b
L
3719 /* PREFIX_0F1A */
3720 {
3721 { MOD_TABLE (MOD_0F1A_PREFIX_0) },
bf890a93
IT
3722 { "bndcl", { Gbnd, Ev_bnd }, 0 },
3723 { "bndmov", { Gbnd, Ebnd }, 0 },
3724 { "bndcu", { Gbnd, Ev_bnd }, 0 },
7e8b059b
L
3725 },
3726
3727 /* PREFIX_0F1B */
3728 {
3729 { MOD_TABLE (MOD_0F1B_PREFIX_0) },
3730 { MOD_TABLE (MOD_0F1B_PREFIX_1) },
bf890a93
IT
3731 { "bndmov", { Ebnd, Gbnd }, 0 },
3732 { "bndcn", { Gbnd, Ev_bnd }, 0 },
7e8b059b
L
3733 },
3734
1ceb70f8 3735 /* PREFIX_0F2A */
c608c12e 3736 {
507bd325
L
3737 { "cvtpi2ps", { XM, EMCq }, PREFIX_OPCODE },
3738 { "cvtsi2ss%LQ", { XM, Ev }, PREFIX_OPCODE },
3739 { "cvtpi2pd", { XM, EMCq }, PREFIX_OPCODE },
bf890a93 3740 { "cvtsi2sd%LQ", { XM, Ev }, 0 },
c608c12e 3741 },
4e7d34a6 3742
1ceb70f8 3743 /* PREFIX_0F2B */
c608c12e 3744 {
75c135a8
L
3745 { MOD_TABLE (MOD_0F2B_PREFIX_0) },
3746 { MOD_TABLE (MOD_0F2B_PREFIX_1) },
3747 { MOD_TABLE (MOD_0F2B_PREFIX_2) },
3748 { MOD_TABLE (MOD_0F2B_PREFIX_3) },
c608c12e 3749 },
4e7d34a6 3750
1ceb70f8 3751 /* PREFIX_0F2C */
c608c12e 3752 {
507bd325
L
3753 { "cvttps2pi", { MXC, EXq }, PREFIX_OPCODE },
3754 { "cvttss2siY", { Gv, EXd }, PREFIX_OPCODE },
3755 { "cvttpd2pi", { MXC, EXx }, PREFIX_OPCODE },
3756 { "cvttsd2siY", { Gv, EXq }, PREFIX_OPCODE },
c608c12e 3757 },
4e7d34a6 3758
1ceb70f8 3759 /* PREFIX_0F2D */
c608c12e 3760 {
507bd325
L
3761 { "cvtps2pi", { MXC, EXq }, PREFIX_OPCODE },
3762 { "cvtss2siY", { Gv, EXd }, PREFIX_OPCODE },
3763 { "cvtpd2pi", { MXC, EXx }, PREFIX_OPCODE },
3764 { "cvtsd2siY", { Gv, EXq }, PREFIX_OPCODE },
c608c12e 3765 },
4e7d34a6 3766
1ceb70f8 3767 /* PREFIX_0F2E */
c608c12e 3768 {
bf890a93 3769 { "ucomiss",{ XM, EXd }, 0 },
592d1631 3770 { Bad_Opcode },
bf890a93 3771 { "ucomisd",{ XM, EXq }, 0 },
c608c12e 3772 },
4e7d34a6 3773
1ceb70f8 3774 /* PREFIX_0F2F */
c608c12e 3775 {
bf890a93 3776 { "comiss", { XM, EXd }, 0 },
592d1631 3777 { Bad_Opcode },
bf890a93 3778 { "comisd", { XM, EXq }, 0 },
c608c12e 3779 },
4e7d34a6 3780
1ceb70f8 3781 /* PREFIX_0F51 */
c608c12e 3782 {
507bd325
L
3783 { "sqrtps", { XM, EXx }, PREFIX_OPCODE },
3784 { "sqrtss", { XM, EXd }, PREFIX_OPCODE },
3785 { "sqrtpd", { XM, EXx }, PREFIX_OPCODE },
3786 { "sqrtsd", { XM, EXq }, PREFIX_OPCODE },
c608c12e 3787 },
4e7d34a6 3788
1ceb70f8 3789 /* PREFIX_0F52 */
c608c12e 3790 {
507bd325
L
3791 { "rsqrtps",{ XM, EXx }, PREFIX_OPCODE },
3792 { "rsqrtss",{ XM, EXd }, PREFIX_OPCODE },
c608c12e 3793 },
4e7d34a6 3794
1ceb70f8 3795 /* PREFIX_0F53 */
c608c12e 3796 {
507bd325
L
3797 { "rcpps", { XM, EXx }, PREFIX_OPCODE },
3798 { "rcpss", { XM, EXd }, PREFIX_OPCODE },
c608c12e 3799 },
4e7d34a6 3800
1ceb70f8 3801 /* PREFIX_0F58 */
c608c12e 3802 {
507bd325
L
3803 { "addps", { XM, EXx }, PREFIX_OPCODE },
3804 { "addss", { XM, EXd }, PREFIX_OPCODE },
3805 { "addpd", { XM, EXx }, PREFIX_OPCODE },
3806 { "addsd", { XM, EXq }, PREFIX_OPCODE },
c608c12e 3807 },
4e7d34a6 3808
1ceb70f8 3809 /* PREFIX_0F59 */
c608c12e 3810 {
507bd325
L
3811 { "mulps", { XM, EXx }, PREFIX_OPCODE },
3812 { "mulss", { XM, EXd }, PREFIX_OPCODE },
3813 { "mulpd", { XM, EXx }, PREFIX_OPCODE },
3814 { "mulsd", { XM, EXq }, PREFIX_OPCODE },
041bd2e0 3815 },
4e7d34a6 3816
1ceb70f8 3817 /* PREFIX_0F5A */
041bd2e0 3818 {
507bd325
L
3819 { "cvtps2pd", { XM, EXq }, PREFIX_OPCODE },
3820 { "cvtss2sd", { XM, EXd }, PREFIX_OPCODE },
3821 { "cvtpd2ps", { XM, EXx }, PREFIX_OPCODE },
3822 { "cvtsd2ss", { XM, EXq }, PREFIX_OPCODE },
041bd2e0 3823 },
4e7d34a6 3824
1ceb70f8 3825 /* PREFIX_0F5B */
041bd2e0 3826 {
507bd325
L
3827 { "cvtdq2ps", { XM, EXx }, PREFIX_OPCODE },
3828 { "cvttps2dq", { XM, EXx }, PREFIX_OPCODE },
3829 { "cvtps2dq", { XM, EXx }, PREFIX_OPCODE },
041bd2e0 3830 },
4e7d34a6 3831
1ceb70f8 3832 /* PREFIX_0F5C */
041bd2e0 3833 {
507bd325
L
3834 { "subps", { XM, EXx }, PREFIX_OPCODE },
3835 { "subss", { XM, EXd }, PREFIX_OPCODE },
3836 { "subpd", { XM, EXx }, PREFIX_OPCODE },
3837 { "subsd", { XM, EXq }, PREFIX_OPCODE },
041bd2e0 3838 },
4e7d34a6 3839
1ceb70f8 3840 /* PREFIX_0F5D */
041bd2e0 3841 {
507bd325
L
3842 { "minps", { XM, EXx }, PREFIX_OPCODE },
3843 { "minss", { XM, EXd }, PREFIX_OPCODE },
3844 { "minpd", { XM, EXx }, PREFIX_OPCODE },
3845 { "minsd", { XM, EXq }, PREFIX_OPCODE },
041bd2e0 3846 },
4e7d34a6 3847
1ceb70f8 3848 /* PREFIX_0F5E */
041bd2e0 3849 {
507bd325
L
3850 { "divps", { XM, EXx }, PREFIX_OPCODE },
3851 { "divss", { XM, EXd }, PREFIX_OPCODE },
3852 { "divpd", { XM, EXx }, PREFIX_OPCODE },
3853 { "divsd", { XM, EXq }, PREFIX_OPCODE },
041bd2e0 3854 },
4e7d34a6 3855
1ceb70f8 3856 /* PREFIX_0F5F */
041bd2e0 3857 {
507bd325
L
3858 { "maxps", { XM, EXx }, PREFIX_OPCODE },
3859 { "maxss", { XM, EXd }, PREFIX_OPCODE },
3860 { "maxpd", { XM, EXx }, PREFIX_OPCODE },
3861 { "maxsd", { XM, EXq }, PREFIX_OPCODE },
041bd2e0 3862 },
4e7d34a6 3863
1ceb70f8 3864 /* PREFIX_0F60 */
041bd2e0 3865 {
507bd325 3866 { "punpcklbw",{ MX, EMd }, PREFIX_OPCODE },
592d1631 3867 { Bad_Opcode },
507bd325 3868 { "punpcklbw",{ MX, EMx }, PREFIX_OPCODE },
041bd2e0 3869 },
4e7d34a6 3870
1ceb70f8 3871 /* PREFIX_0F61 */
041bd2e0 3872 {
507bd325 3873 { "punpcklwd",{ MX, EMd }, PREFIX_OPCODE },
592d1631 3874 { Bad_Opcode },
507bd325 3875 { "punpcklwd",{ MX, EMx }, PREFIX_OPCODE },
041bd2e0 3876 },
4e7d34a6 3877
1ceb70f8 3878 /* PREFIX_0F62 */
041bd2e0 3879 {
507bd325 3880 { "punpckldq",{ MX, EMd }, PREFIX_OPCODE },
592d1631 3881 { Bad_Opcode },
507bd325 3882 { "punpckldq",{ MX, EMx }, PREFIX_OPCODE },
041bd2e0 3883 },
4e7d34a6 3884
1ceb70f8 3885 /* PREFIX_0F6C */
041bd2e0 3886 {
592d1631
L
3887 { Bad_Opcode },
3888 { Bad_Opcode },
507bd325 3889 { "punpcklqdq", { XM, EXx }, PREFIX_OPCODE },
0f17484f 3890 },
4e7d34a6 3891
1ceb70f8 3892 /* PREFIX_0F6D */
0f17484f 3893 {
592d1631
L
3894 { Bad_Opcode },
3895 { Bad_Opcode },
507bd325 3896 { "punpckhqdq", { XM, EXx }, PREFIX_OPCODE },
041bd2e0 3897 },
4e7d34a6 3898
1ceb70f8 3899 /* PREFIX_0F6F */
ca164297 3900 {
507bd325
L
3901 { "movq", { MX, EM }, PREFIX_OPCODE },
3902 { "movdqu", { XM, EXx }, PREFIX_OPCODE },
3903 { "movdqa", { XM, EXx }, PREFIX_OPCODE },
ca164297 3904 },
4e7d34a6 3905
1ceb70f8 3906 /* PREFIX_0F70 */
4e7d34a6 3907 {
507bd325
L
3908 { "pshufw", { MX, EM, Ib }, PREFIX_OPCODE },
3909 { "pshufhw",{ XM, EXx, Ib }, PREFIX_OPCODE },
3910 { "pshufd", { XM, EXx, Ib }, PREFIX_OPCODE },
3911 { "pshuflw",{ XM, EXx, Ib }, PREFIX_OPCODE },
4e7d34a6
L
3912 },
3913
92fddf8e
L
3914 /* PREFIX_0F73_REG_3 */
3915 {
592d1631
L
3916 { Bad_Opcode },
3917 { Bad_Opcode },
bf890a93 3918 { "psrldq", { XS, Ib }, 0 },
92fddf8e
L
3919 },
3920
3921 /* PREFIX_0F73_REG_7 */
3922 {
592d1631
L
3923 { Bad_Opcode },
3924 { Bad_Opcode },
bf890a93 3925 { "pslldq", { XS, Ib }, 0 },
92fddf8e
L
3926 },
3927
1ceb70f8 3928 /* PREFIX_0F78 */
4e7d34a6 3929 {
bf890a93 3930 {"vmread", { Em, Gm }, 0 },
592d1631 3931 { Bad_Opcode },
bf890a93
IT
3932 {"extrq", { XS, Ib, Ib }, 0 },
3933 {"insertq", { XM, XS, Ib, Ib }, 0 },
4e7d34a6
L
3934 },
3935
1ceb70f8 3936 /* PREFIX_0F79 */
4e7d34a6 3937 {
bf890a93 3938 {"vmwrite", { Gm, Em }, 0 },
592d1631 3939 { Bad_Opcode },
bf890a93
IT
3940 {"extrq", { XM, XS }, 0 },
3941 {"insertq", { XM, XS }, 0 },
4e7d34a6
L
3942 },
3943
1ceb70f8 3944 /* PREFIX_0F7C */
ca164297 3945 {
592d1631
L
3946 { Bad_Opcode },
3947 { Bad_Opcode },
507bd325
L
3948 { "haddpd", { XM, EXx }, PREFIX_OPCODE },
3949 { "haddps", { XM, EXx }, PREFIX_OPCODE },
ca164297 3950 },
4e7d34a6 3951
1ceb70f8 3952 /* PREFIX_0F7D */
ca164297 3953 {
592d1631
L
3954 { Bad_Opcode },
3955 { Bad_Opcode },
507bd325
L
3956 { "hsubpd", { XM, EXx }, PREFIX_OPCODE },
3957 { "hsubps", { XM, EXx }, PREFIX_OPCODE },
ca164297 3958 },
4e7d34a6 3959
1ceb70f8 3960 /* PREFIX_0F7E */
ca164297 3961 {
507bd325
L
3962 { "movK", { Edq, MX }, PREFIX_OPCODE },
3963 { "movq", { XM, EXq }, PREFIX_OPCODE },
3964 { "movK", { Edq, XM }, PREFIX_OPCODE },
ca164297 3965 },
4e7d34a6 3966
1ceb70f8 3967 /* PREFIX_0F7F */
ca164297 3968 {
507bd325
L
3969 { "movq", { EMS, MX }, PREFIX_OPCODE },
3970 { "movdqu", { EXxS, XM }, PREFIX_OPCODE },
3971 { "movdqa", { EXxS, XM }, PREFIX_OPCODE },
ca164297 3972 },
4e7d34a6 3973
c7b8aa3a
L
3974 /* PREFIX_0FAE_REG_0 */
3975 {
3976 { Bad_Opcode },
bf890a93 3977 { "rdfsbase", { Ev }, 0 },
c7b8aa3a
L
3978 },
3979
3980 /* PREFIX_0FAE_REG_1 */
3981 {
3982 { Bad_Opcode },
bf890a93 3983 { "rdgsbase", { Ev }, 0 },
c7b8aa3a
L
3984 },
3985
3986 /* PREFIX_0FAE_REG_2 */
3987 {
3988 { Bad_Opcode },
bf890a93 3989 { "wrfsbase", { Ev }, 0 },
c7b8aa3a
L
3990 },
3991
3992 /* PREFIX_0FAE_REG_3 */
3993 {
3994 { Bad_Opcode },
bf890a93 3995 { "wrgsbase", { Ev }, 0 },
c7b8aa3a
L
3996 },
3997
c5e7287a
IT
3998 /* PREFIX_0FAE_REG_6 */
3999 {
bf890a93 4000 { "xsaveopt", { FXSAVE }, 0 },
c5e7287a 4001 { Bad_Opcode },
bf890a93 4002 { "clwb", { Mb }, 0 },
c5e7287a
IT
4003 },
4004
963f3586
IT
4005 /* PREFIX_0FAE_REG_7 */
4006 {
bf890a93 4007 { "clflush", { Mb }, 0 },
963f3586 4008 { Bad_Opcode },
bf890a93 4009 { "clflushopt", { Mb }, 0 },
963f3586
IT
4010 },
4011
9d8596f0
IT
4012 /* PREFIX_RM_0_0FAE_REG_7 */
4013 {
bf890a93 4014 { "sfence", { Skip_MODRM }, 0 },
9d8596f0 4015 { Bad_Opcode },
bf890a93 4016 { "pcommit", { Skip_MODRM }, 0 },
9d8596f0
IT
4017 },
4018
1ceb70f8 4019 /* PREFIX_0FB8 */
ca164297 4020 {
592d1631 4021 { Bad_Opcode },
bf890a93 4022 { "popcntS", { Gv, Ev }, 0 },
ca164297 4023 },
4e7d34a6 4024
f12dc422
L
4025 /* PREFIX_0FBC */
4026 {
bf890a93
IT
4027 { "bsfS", { Gv, Ev }, 0 },
4028 { "tzcntS", { Gv, Ev }, 0 },
4029 { "bsfS", { Gv, Ev }, 0 },
f12dc422
L
4030 },
4031
1ceb70f8 4032 /* PREFIX_0FBD */
050dfa73 4033 {
bf890a93
IT
4034 { "bsrS", { Gv, Ev }, 0 },
4035 { "lzcntS", { Gv, Ev }, 0 },
4036 { "bsrS", { Gv, Ev }, 0 },
050dfa73
MM
4037 },
4038
1ceb70f8 4039 /* PREFIX_0FC2 */
050dfa73 4040 {
507bd325
L
4041 { "cmpps", { XM, EXx, CMP }, PREFIX_OPCODE },
4042 { "cmpss", { XM, EXd, CMP }, PREFIX_OPCODE },
4043 { "cmppd", { XM, EXx, CMP }, PREFIX_OPCODE },
4044 { "cmpsd", { XM, EXq, CMP }, PREFIX_OPCODE },
050dfa73 4045 },
246c51aa 4046
4ee52178
L
4047 /* PREFIX_0FC3 */
4048 {
507bd325 4049 { "movntiS", { Ma, Gv }, PREFIX_OPCODE },
4ee52178
L
4050 },
4051
f24bcbaa 4052 /* PREFIX_MOD_0_0FC7_REG_6 */
92fddf8e 4053 {
bf890a93
IT
4054 { "vmptrld",{ Mq }, 0 },
4055 { "vmxon", { Mq }, 0 },
4056 { "vmclear",{ Mq }, 0 },
92fddf8e
L
4057 },
4058
f24bcbaa
L
4059 /* PREFIX_MOD_3_0FC7_REG_6 */
4060 {
4061 { "rdrand", { Ev }, 0 },
4062 { Bad_Opcode },
4063 { "rdrand", { Ev }, 0 }
4064 },
4065
4066 /* PREFIX_MOD_3_0FC7_REG_7 */
4067 {
4068 { "rdseed", { Ev }, 0 },
4069 { Bad_Opcode },
4070 { "rdseed", { Ev }, 0 },
4071 },
4072
1ceb70f8 4073 /* PREFIX_0FD0 */
050dfa73 4074 {
592d1631
L
4075 { Bad_Opcode },
4076 { Bad_Opcode },
bf890a93
IT
4077 { "addsubpd", { XM, EXx }, 0 },
4078 { "addsubps", { XM, EXx }, 0 },
246c51aa 4079 },
050dfa73 4080
1ceb70f8 4081 /* PREFIX_0FD6 */
050dfa73 4082 {
592d1631 4083 { Bad_Opcode },
bf890a93
IT
4084 { "movq2dq",{ XM, MS }, 0 },
4085 { "movq", { EXqS, XM }, 0 },
4086 { "movdq2q",{ MX, XS }, 0 },
050dfa73
MM
4087 },
4088
1ceb70f8 4089 /* PREFIX_0FE6 */
7918206c 4090 {
592d1631 4091 { Bad_Opcode },
507bd325
L
4092 { "cvtdq2pd", { XM, EXq }, PREFIX_OPCODE },
4093 { "cvttpd2dq", { XM, EXx }, PREFIX_OPCODE },
4094 { "cvtpd2dq", { XM, EXx }, PREFIX_OPCODE },
7918206c 4095 },
8b38ad71 4096
1ceb70f8 4097 /* PREFIX_0FE7 */
8b38ad71 4098 {
507bd325 4099 { "movntq", { Mq, MX }, PREFIX_OPCODE },
592d1631 4100 { Bad_Opcode },
75c135a8 4101 { MOD_TABLE (MOD_0FE7_PREFIX_2) },
4e7d34a6
L
4102 },
4103
1ceb70f8 4104 /* PREFIX_0FF0 */
4e7d34a6 4105 {
592d1631
L
4106 { Bad_Opcode },
4107 { Bad_Opcode },
4108 { Bad_Opcode },
1ceb70f8 4109 { MOD_TABLE (MOD_0FF0_PREFIX_3) },
4e7d34a6
L
4110 },
4111
1ceb70f8 4112 /* PREFIX_0FF7 */
4e7d34a6 4113 {
507bd325 4114 { "maskmovq", { MX, MS }, PREFIX_OPCODE },
592d1631 4115 { Bad_Opcode },
507bd325 4116 { "maskmovdqu", { XM, XS }, PREFIX_OPCODE },
8b38ad71 4117 },
42903f7f 4118
1ceb70f8 4119 /* PREFIX_0F3810 */
42903f7f 4120 {
592d1631
L
4121 { Bad_Opcode },
4122 { Bad_Opcode },
507bd325 4123 { "pblendvb", { XM, EXx, XMM0 }, PREFIX_OPCODE },
42903f7f
L
4124 },
4125
1ceb70f8 4126 /* PREFIX_0F3814 */
42903f7f 4127 {
592d1631
L
4128 { Bad_Opcode },
4129 { Bad_Opcode },
507bd325 4130 { "blendvps", { XM, EXx, XMM0 }, PREFIX_OPCODE },
42903f7f
L
4131 },
4132
1ceb70f8 4133 /* PREFIX_0F3815 */
42903f7f 4134 {
592d1631
L
4135 { Bad_Opcode },
4136 { Bad_Opcode },
507bd325 4137 { "blendvpd", { XM, EXx, XMM0 }, PREFIX_OPCODE },
42903f7f
L
4138 },
4139
1ceb70f8 4140 /* PREFIX_0F3817 */
42903f7f 4141 {
592d1631
L
4142 { Bad_Opcode },
4143 { Bad_Opcode },
507bd325 4144 { "ptest", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4145 },
4146
1ceb70f8 4147 /* PREFIX_0F3820 */
42903f7f 4148 {
592d1631
L
4149 { Bad_Opcode },
4150 { Bad_Opcode },
507bd325 4151 { "pmovsxbw", { XM, EXq }, PREFIX_OPCODE },
42903f7f
L
4152 },
4153
1ceb70f8 4154 /* PREFIX_0F3821 */
42903f7f 4155 {
592d1631
L
4156 { Bad_Opcode },
4157 { Bad_Opcode },
507bd325 4158 { "pmovsxbd", { XM, EXd }, PREFIX_OPCODE },
42903f7f
L
4159 },
4160
1ceb70f8 4161 /* PREFIX_0F3822 */
42903f7f 4162 {
592d1631
L
4163 { Bad_Opcode },
4164 { Bad_Opcode },
507bd325 4165 { "pmovsxbq", { XM, EXw }, PREFIX_OPCODE },
42903f7f
L
4166 },
4167
1ceb70f8 4168 /* PREFIX_0F3823 */
42903f7f 4169 {
592d1631
L
4170 { Bad_Opcode },
4171 { Bad_Opcode },
507bd325 4172 { "pmovsxwd", { XM, EXq }, PREFIX_OPCODE },
42903f7f
L
4173 },
4174
1ceb70f8 4175 /* PREFIX_0F3824 */
42903f7f 4176 {
592d1631
L
4177 { Bad_Opcode },
4178 { Bad_Opcode },
507bd325 4179 { "pmovsxwq", { XM, EXd }, PREFIX_OPCODE },
42903f7f
L
4180 },
4181
1ceb70f8 4182 /* PREFIX_0F3825 */
42903f7f 4183 {
592d1631
L
4184 { Bad_Opcode },
4185 { Bad_Opcode },
507bd325 4186 { "pmovsxdq", { XM, EXq }, PREFIX_OPCODE },
42903f7f
L
4187 },
4188
1ceb70f8 4189 /* PREFIX_0F3828 */
42903f7f 4190 {
592d1631
L
4191 { Bad_Opcode },
4192 { Bad_Opcode },
507bd325 4193 { "pmuldq", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4194 },
4195
1ceb70f8 4196 /* PREFIX_0F3829 */
42903f7f 4197 {
592d1631
L
4198 { Bad_Opcode },
4199 { Bad_Opcode },
507bd325 4200 { "pcmpeqq", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4201 },
4202
1ceb70f8 4203 /* PREFIX_0F382A */
42903f7f 4204 {
592d1631
L
4205 { Bad_Opcode },
4206 { Bad_Opcode },
75c135a8 4207 { MOD_TABLE (MOD_0F382A_PREFIX_2) },
42903f7f
L
4208 },
4209
1ceb70f8 4210 /* PREFIX_0F382B */
42903f7f 4211 {
592d1631
L
4212 { Bad_Opcode },
4213 { Bad_Opcode },
507bd325 4214 { "packusdw", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4215 },
4216
1ceb70f8 4217 /* PREFIX_0F3830 */
42903f7f 4218 {
592d1631
L
4219 { Bad_Opcode },
4220 { Bad_Opcode },
507bd325 4221 { "pmovzxbw", { XM, EXq }, PREFIX_OPCODE },
42903f7f
L
4222 },
4223
1ceb70f8 4224 /* PREFIX_0F3831 */
42903f7f 4225 {
592d1631
L
4226 { Bad_Opcode },
4227 { Bad_Opcode },
507bd325 4228 { "pmovzxbd", { XM, EXd }, PREFIX_OPCODE },
42903f7f
L
4229 },
4230
1ceb70f8 4231 /* PREFIX_0F3832 */
42903f7f 4232 {
592d1631
L
4233 { Bad_Opcode },
4234 { Bad_Opcode },
507bd325 4235 { "pmovzxbq", { XM, EXw }, PREFIX_OPCODE },
42903f7f
L
4236 },
4237
1ceb70f8 4238 /* PREFIX_0F3833 */
42903f7f 4239 {
592d1631
L
4240 { Bad_Opcode },
4241 { Bad_Opcode },
507bd325 4242 { "pmovzxwd", { XM, EXq }, PREFIX_OPCODE },
42903f7f
L
4243 },
4244
1ceb70f8 4245 /* PREFIX_0F3834 */
42903f7f 4246 {
592d1631
L
4247 { Bad_Opcode },
4248 { Bad_Opcode },
507bd325 4249 { "pmovzxwq", { XM, EXd }, PREFIX_OPCODE },
42903f7f
L
4250 },
4251
1ceb70f8 4252 /* PREFIX_0F3835 */
42903f7f 4253 {
592d1631
L
4254 { Bad_Opcode },
4255 { Bad_Opcode },
507bd325 4256 { "pmovzxdq", { XM, EXq }, PREFIX_OPCODE },
42903f7f
L
4257 },
4258
1ceb70f8 4259 /* PREFIX_0F3837 */
4e7d34a6 4260 {
592d1631
L
4261 { Bad_Opcode },
4262 { Bad_Opcode },
507bd325 4263 { "pcmpgtq", { XM, EXx }, PREFIX_OPCODE },
4e7d34a6
L
4264 },
4265
1ceb70f8 4266 /* PREFIX_0F3838 */
42903f7f 4267 {
592d1631
L
4268 { Bad_Opcode },
4269 { Bad_Opcode },
507bd325 4270 { "pminsb", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4271 },
4272
1ceb70f8 4273 /* PREFIX_0F3839 */
42903f7f 4274 {
592d1631
L
4275 { Bad_Opcode },
4276 { Bad_Opcode },
507bd325 4277 { "pminsd", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4278 },
4279
1ceb70f8 4280 /* PREFIX_0F383A */
42903f7f 4281 {
592d1631
L
4282 { Bad_Opcode },
4283 { Bad_Opcode },
507bd325 4284 { "pminuw", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4285 },
4286
1ceb70f8 4287 /* PREFIX_0F383B */
42903f7f 4288 {
592d1631
L
4289 { Bad_Opcode },
4290 { Bad_Opcode },
507bd325 4291 { "pminud", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4292 },
4293
1ceb70f8 4294 /* PREFIX_0F383C */
42903f7f 4295 {
592d1631
L
4296 { Bad_Opcode },
4297 { Bad_Opcode },
507bd325 4298 { "pmaxsb", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4299 },
4300
1ceb70f8 4301 /* PREFIX_0F383D */
42903f7f 4302 {
592d1631
L
4303 { Bad_Opcode },
4304 { Bad_Opcode },
507bd325 4305 { "pmaxsd", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4306 },
4307
1ceb70f8 4308 /* PREFIX_0F383E */
42903f7f 4309 {
592d1631
L
4310 { Bad_Opcode },
4311 { Bad_Opcode },
507bd325 4312 { "pmaxuw", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4313 },
4314
1ceb70f8 4315 /* PREFIX_0F383F */
42903f7f 4316 {
592d1631
L
4317 { Bad_Opcode },
4318 { Bad_Opcode },
507bd325 4319 { "pmaxud", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4320 },
4321
1ceb70f8 4322 /* PREFIX_0F3840 */
42903f7f 4323 {
592d1631
L
4324 { Bad_Opcode },
4325 { Bad_Opcode },
507bd325 4326 { "pmulld", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4327 },
4328
1ceb70f8 4329 /* PREFIX_0F3841 */
42903f7f 4330 {
592d1631
L
4331 { Bad_Opcode },
4332 { Bad_Opcode },
507bd325 4333 { "phminposuw", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4334 },
4335
f1f8f695
L
4336 /* PREFIX_0F3880 */
4337 {
592d1631
L
4338 { Bad_Opcode },
4339 { Bad_Opcode },
507bd325 4340 { "invept", { Gm, Mo }, PREFIX_OPCODE },
f1f8f695
L
4341 },
4342
4343 /* PREFIX_0F3881 */
4344 {
592d1631
L
4345 { Bad_Opcode },
4346 { Bad_Opcode },
507bd325 4347 { "invvpid", { Gm, Mo }, PREFIX_OPCODE },
f1f8f695
L
4348 },
4349
6c30d220
L
4350 /* PREFIX_0F3882 */
4351 {
4352 { Bad_Opcode },
4353 { Bad_Opcode },
507bd325 4354 { "invpcid", { Gm, M }, PREFIX_OPCODE },
6c30d220
L
4355 },
4356
a0046408
L
4357 /* PREFIX_0F38C8 */
4358 {
507bd325 4359 { "sha1nexte", { XM, EXxmm }, PREFIX_OPCODE },
a0046408
L
4360 },
4361
4362 /* PREFIX_0F38C9 */
4363 {
507bd325 4364 { "sha1msg1", { XM, EXxmm }, PREFIX_OPCODE },
a0046408
L
4365 },
4366
4367 /* PREFIX_0F38CA */
4368 {
507bd325 4369 { "sha1msg2", { XM, EXxmm }, PREFIX_OPCODE },
a0046408
L
4370 },
4371
4372 /* PREFIX_0F38CB */
4373 {
507bd325 4374 { "sha256rnds2", { XM, EXxmm, XMM0 }, PREFIX_OPCODE },
a0046408
L
4375 },
4376
4377 /* PREFIX_0F38CC */
4378 {
507bd325 4379 { "sha256msg1", { XM, EXxmm }, PREFIX_OPCODE },
a0046408
L
4380 },
4381
4382 /* PREFIX_0F38CD */
4383 {
507bd325 4384 { "sha256msg2", { XM, EXxmm }, PREFIX_OPCODE },
a0046408
L
4385 },
4386
c0f3af97
L
4387 /* PREFIX_0F38DB */
4388 {
592d1631
L
4389 { Bad_Opcode },
4390 { Bad_Opcode },
507bd325 4391 { "aesimc", { XM, EXx }, PREFIX_OPCODE },
c0f3af97
L
4392 },
4393
4394 /* PREFIX_0F38DC */
4395 {
592d1631
L
4396 { Bad_Opcode },
4397 { Bad_Opcode },
507bd325 4398 { "aesenc", { XM, EXx }, PREFIX_OPCODE },
c0f3af97
L
4399 },
4400
4401 /* PREFIX_0F38DD */
4402 {
592d1631
L
4403 { Bad_Opcode },
4404 { Bad_Opcode },
507bd325 4405 { "aesenclast", { XM, EXx }, PREFIX_OPCODE },
c0f3af97
L
4406 },
4407
4408 /* PREFIX_0F38DE */
4409 {
592d1631
L
4410 { Bad_Opcode },
4411 { Bad_Opcode },
507bd325 4412 { "aesdec", { XM, EXx }, PREFIX_OPCODE },
c0f3af97
L
4413 },
4414
4415 /* PREFIX_0F38DF */
4416 {
592d1631
L
4417 { Bad_Opcode },
4418 { Bad_Opcode },
507bd325 4419 { "aesdeclast", { XM, EXx }, PREFIX_OPCODE },
c0f3af97
L
4420 },
4421
1ceb70f8 4422 /* PREFIX_0F38F0 */
4e7d34a6 4423 {
507bd325 4424 { "movbeS", { Gv, { MOVBE_Fixup, v_mode } }, PREFIX_OPCODE },
592d1631 4425 { Bad_Opcode },
507bd325
L
4426 { "movbeS", { Gv, { MOVBE_Fixup, v_mode } }, PREFIX_OPCODE },
4427 { "crc32", { Gdq, { CRC32_Fixup, b_mode } }, PREFIX_OPCODE },
4e7d34a6
L
4428 },
4429
1ceb70f8 4430 /* PREFIX_0F38F1 */
4e7d34a6 4431 {
507bd325 4432 { "movbeS", { { MOVBE_Fixup, v_mode }, Gv }, PREFIX_OPCODE },
592d1631 4433 { Bad_Opcode },
507bd325
L
4434 { "movbeS", { { MOVBE_Fixup, v_mode }, Gv }, PREFIX_OPCODE },
4435 { "crc32", { Gdq, { CRC32_Fixup, v_mode } }, PREFIX_OPCODE },
4e7d34a6
L
4436 },
4437
e2e1fcde
L
4438 /* PREFIX_0F38F6 */
4439 {
4440 { Bad_Opcode },
507bd325
L
4441 { "adoxS", { Gdq, Edq}, PREFIX_OPCODE },
4442 { "adcxS", { Gdq, Edq}, PREFIX_OPCODE },
e2e1fcde
L
4443 { Bad_Opcode },
4444 },
4445
1ceb70f8 4446 /* PREFIX_0F3A08 */
42903f7f 4447 {
592d1631
L
4448 { Bad_Opcode },
4449 { Bad_Opcode },
507bd325 4450 { "roundps", { XM, EXx, Ib }, PREFIX_OPCODE },
42903f7f
L
4451 },
4452
1ceb70f8 4453 /* PREFIX_0F3A09 */
42903f7f 4454 {
592d1631
L
4455 { Bad_Opcode },
4456 { Bad_Opcode },
507bd325 4457 { "roundpd", { XM, EXx, Ib }, PREFIX_OPCODE },
42903f7f
L
4458 },
4459
1ceb70f8 4460 /* PREFIX_0F3A0A */
42903f7f 4461 {
592d1631
L
4462 { Bad_Opcode },
4463 { Bad_Opcode },
507bd325 4464 { "roundss", { XM, EXd, Ib }, PREFIX_OPCODE },
42903f7f
L
4465 },
4466
1ceb70f8 4467 /* PREFIX_0F3A0B */
42903f7f 4468 {
592d1631
L
4469 { Bad_Opcode },
4470 { Bad_Opcode },
507bd325 4471 { "roundsd", { XM, EXq, Ib }, PREFIX_OPCODE },
42903f7f
L
4472 },
4473
1ceb70f8 4474 /* PREFIX_0F3A0C */
42903f7f 4475 {
592d1631
L
4476 { Bad_Opcode },
4477 { Bad_Opcode },
507bd325 4478 { "blendps", { XM, EXx, Ib }, PREFIX_OPCODE },
42903f7f
L
4479 },
4480
1ceb70f8 4481 /* PREFIX_0F3A0D */
42903f7f 4482 {
592d1631
L
4483 { Bad_Opcode },
4484 { Bad_Opcode },
507bd325 4485 { "blendpd", { XM, EXx, Ib }, PREFIX_OPCODE },
42903f7f
L
4486 },
4487
1ceb70f8 4488 /* PREFIX_0F3A0E */
42903f7f 4489 {
592d1631
L
4490 { Bad_Opcode },
4491 { Bad_Opcode },
507bd325 4492 { "pblendw", { XM, EXx, Ib }, PREFIX_OPCODE },
42903f7f
L
4493 },
4494
1ceb70f8 4495 /* PREFIX_0F3A14 */
42903f7f 4496 {
592d1631
L
4497 { Bad_Opcode },
4498 { Bad_Opcode },
507bd325 4499 { "pextrb", { Edqb, XM, Ib }, PREFIX_OPCODE },
42903f7f
L
4500 },
4501
1ceb70f8 4502 /* PREFIX_0F3A15 */
42903f7f 4503 {
592d1631
L
4504 { Bad_Opcode },
4505 { Bad_Opcode },
507bd325 4506 { "pextrw", { Edqw, XM, Ib }, PREFIX_OPCODE },
42903f7f
L
4507 },
4508
1ceb70f8 4509 /* PREFIX_0F3A16 */
42903f7f 4510 {
592d1631
L
4511 { Bad_Opcode },
4512 { Bad_Opcode },
507bd325 4513 { "pextrK", { Edq, XM, Ib }, PREFIX_OPCODE },
42903f7f
L
4514 },
4515
1ceb70f8 4516 /* PREFIX_0F3A17 */
42903f7f 4517 {
592d1631
L
4518 { Bad_Opcode },
4519 { Bad_Opcode },
507bd325 4520 { "extractps", { Edqd, XM, Ib }, PREFIX_OPCODE },
42903f7f
L
4521 },
4522
1ceb70f8 4523 /* PREFIX_0F3A20 */
42903f7f 4524 {
592d1631
L
4525 { Bad_Opcode },
4526 { Bad_Opcode },
507bd325 4527 { "pinsrb", { XM, Edqb, Ib }, PREFIX_OPCODE },
42903f7f
L
4528 },
4529
1ceb70f8 4530 /* PREFIX_0F3A21 */
42903f7f 4531 {
592d1631
L
4532 { Bad_Opcode },
4533 { Bad_Opcode },
507bd325 4534 { "insertps", { XM, EXd, Ib }, PREFIX_OPCODE },
42903f7f
L
4535 },
4536
1ceb70f8 4537 /* PREFIX_0F3A22 */
42903f7f 4538 {
592d1631
L
4539 { Bad_Opcode },
4540 { Bad_Opcode },
507bd325 4541 { "pinsrK", { XM, Edq, Ib }, PREFIX_OPCODE },
42903f7f
L
4542 },
4543
1ceb70f8 4544 /* PREFIX_0F3A40 */
42903f7f 4545 {
592d1631
L
4546 { Bad_Opcode },
4547 { Bad_Opcode },
507bd325 4548 { "dpps", { XM, EXx, Ib }, PREFIX_OPCODE },
42903f7f
L
4549 },
4550
1ceb70f8 4551 /* PREFIX_0F3A41 */
42903f7f 4552 {
592d1631
L
4553 { Bad_Opcode },
4554 { Bad_Opcode },
507bd325 4555 { "dppd", { XM, EXx, Ib }, PREFIX_OPCODE },
42903f7f
L
4556 },
4557
1ceb70f8 4558 /* PREFIX_0F3A42 */
42903f7f 4559 {
592d1631
L
4560 { Bad_Opcode },
4561 { Bad_Opcode },
507bd325 4562 { "mpsadbw", { XM, EXx, Ib }, PREFIX_OPCODE },
42903f7f 4563 },
381d071f 4564
c0f3af97
L
4565 /* PREFIX_0F3A44 */
4566 {
592d1631
L
4567 { Bad_Opcode },
4568 { Bad_Opcode },
507bd325 4569 { "pclmulqdq", { XM, EXx, PCLMUL }, PREFIX_OPCODE },
c0f3af97
L
4570 },
4571
1ceb70f8 4572 /* PREFIX_0F3A60 */
381d071f 4573 {
592d1631
L
4574 { Bad_Opcode },
4575 { Bad_Opcode },
507bd325 4576 { "pcmpestrm", { XM, EXx, Ib }, PREFIX_OPCODE },
381d071f
L
4577 },
4578
1ceb70f8 4579 /* PREFIX_0F3A61 */
381d071f 4580 {
592d1631
L
4581 { Bad_Opcode },
4582 { Bad_Opcode },
507bd325 4583 { "pcmpestri", { XM, EXx, Ib }, PREFIX_OPCODE },
381d071f
L
4584 },
4585
1ceb70f8 4586 /* PREFIX_0F3A62 */
381d071f 4587 {
592d1631
L
4588 { Bad_Opcode },
4589 { Bad_Opcode },
507bd325 4590 { "pcmpistrm", { XM, EXx, Ib }, PREFIX_OPCODE },
381d071f
L
4591 },
4592
1ceb70f8 4593 /* PREFIX_0F3A63 */
381d071f 4594 {
592d1631
L
4595 { Bad_Opcode },
4596 { Bad_Opcode },
507bd325 4597 { "pcmpistri", { XM, EXx, Ib }, PREFIX_OPCODE },
381d071f 4598 },
09a2c6cf 4599
a0046408
L
4600 /* PREFIX_0F3ACC */
4601 {
507bd325 4602 { "sha1rnds4", { XM, EXxmm, Ib }, PREFIX_OPCODE },
a0046408
L
4603 },
4604
c0f3af97 4605 /* PREFIX_0F3ADF */
09a2c6cf 4606 {
592d1631
L
4607 { Bad_Opcode },
4608 { Bad_Opcode },
507bd325 4609 { "aeskeygenassist", { XM, EXx, Ib }, PREFIX_OPCODE },
09a2c6cf
L
4610 },
4611
592a252b 4612 /* PREFIX_VEX_0F10 */
09a2c6cf 4613 {
592a252b
L
4614 { VEX_W_TABLE (VEX_W_0F10_P_0) },
4615 { VEX_LEN_TABLE (VEX_LEN_0F10_P_1) },
4616 { VEX_W_TABLE (VEX_W_0F10_P_2) },
4617 { VEX_LEN_TABLE (VEX_LEN_0F10_P_3) },
09a2c6cf
L
4618 },
4619
592a252b 4620 /* PREFIX_VEX_0F11 */
09a2c6cf 4621 {
592a252b
L
4622 { VEX_W_TABLE (VEX_W_0F11_P_0) },
4623 { VEX_LEN_TABLE (VEX_LEN_0F11_P_1) },
4624 { VEX_W_TABLE (VEX_W_0F11_P_2) },
4625 { VEX_LEN_TABLE (VEX_LEN_0F11_P_3) },
09a2c6cf
L
4626 },
4627
592a252b 4628 /* PREFIX_VEX_0F12 */
09a2c6cf 4629 {
592a252b
L
4630 { MOD_TABLE (MOD_VEX_0F12_PREFIX_0) },
4631 { VEX_W_TABLE (VEX_W_0F12_P_1) },
4632 { VEX_LEN_TABLE (VEX_LEN_0F12_P_2) },
4633 { VEX_W_TABLE (VEX_W_0F12_P_3) },
09a2c6cf
L
4634 },
4635
592a252b 4636 /* PREFIX_VEX_0F16 */
09a2c6cf 4637 {
592a252b
L
4638 { MOD_TABLE (MOD_VEX_0F16_PREFIX_0) },
4639 { VEX_W_TABLE (VEX_W_0F16_P_1) },
4640 { VEX_LEN_TABLE (VEX_LEN_0F16_P_2) },
5f754f58 4641 },
7c52e0e8 4642
592a252b 4643 /* PREFIX_VEX_0F2A */
5f754f58 4644 {
592d1631 4645 { Bad_Opcode },
592a252b 4646 { VEX_LEN_TABLE (VEX_LEN_0F2A_P_1) },
592d1631 4647 { Bad_Opcode },
592a252b 4648 { VEX_LEN_TABLE (VEX_LEN_0F2A_P_3) },
5f754f58 4649 },
7c52e0e8 4650
592a252b 4651 /* PREFIX_VEX_0F2C */
5f754f58 4652 {
592d1631 4653 { Bad_Opcode },
592a252b 4654 { VEX_LEN_TABLE (VEX_LEN_0F2C_P_1) },
592d1631 4655 { Bad_Opcode },
592a252b 4656 { VEX_LEN_TABLE (VEX_LEN_0F2C_P_3) },
5f754f58 4657 },
7c52e0e8 4658
592a252b 4659 /* PREFIX_VEX_0F2D */
7c52e0e8 4660 {
592d1631 4661 { Bad_Opcode },
592a252b 4662 { VEX_LEN_TABLE (VEX_LEN_0F2D_P_1) },
592d1631 4663 { Bad_Opcode },
592a252b 4664 { VEX_LEN_TABLE (VEX_LEN_0F2D_P_3) },
7c52e0e8
L
4665 },
4666
592a252b 4667 /* PREFIX_VEX_0F2E */
7c52e0e8 4668 {
592a252b 4669 { VEX_LEN_TABLE (VEX_LEN_0F2E_P_0) },
592d1631 4670 { Bad_Opcode },
592a252b 4671 { VEX_LEN_TABLE (VEX_LEN_0F2E_P_2) },
7c52e0e8
L
4672 },
4673
592a252b 4674 /* PREFIX_VEX_0F2F */
7c52e0e8 4675 {
592a252b 4676 { VEX_LEN_TABLE (VEX_LEN_0F2F_P_0) },
592d1631 4677 { Bad_Opcode },
592a252b 4678 { VEX_LEN_TABLE (VEX_LEN_0F2F_P_2) },
7c52e0e8
L
4679 },
4680
43234a1e
L
4681 /* PREFIX_VEX_0F41 */
4682 {
4683 { VEX_LEN_TABLE (VEX_LEN_0F41_P_0) },
1ba585e8
IT
4684 { Bad_Opcode },
4685 { VEX_LEN_TABLE (VEX_LEN_0F41_P_2) },
43234a1e
L
4686 },
4687
4688 /* PREFIX_VEX_0F42 */
4689 {
4690 { VEX_LEN_TABLE (VEX_LEN_0F42_P_0) },
1ba585e8
IT
4691 { Bad_Opcode },
4692 { VEX_LEN_TABLE (VEX_LEN_0F42_P_2) },
43234a1e
L
4693 },
4694
4695 /* PREFIX_VEX_0F44 */
4696 {
4697 { VEX_LEN_TABLE (VEX_LEN_0F44_P_0) },
1ba585e8
IT
4698 { Bad_Opcode },
4699 { VEX_LEN_TABLE (VEX_LEN_0F44_P_2) },
43234a1e
L
4700 },
4701
4702 /* PREFIX_VEX_0F45 */
4703 {
4704 { VEX_LEN_TABLE (VEX_LEN_0F45_P_0) },
1ba585e8
IT
4705 { Bad_Opcode },
4706 { VEX_LEN_TABLE (VEX_LEN_0F45_P_2) },
43234a1e
L
4707 },
4708
4709 /* PREFIX_VEX_0F46 */
4710 {
4711 { VEX_LEN_TABLE (VEX_LEN_0F46_P_0) },
1ba585e8
IT
4712 { Bad_Opcode },
4713 { VEX_LEN_TABLE (VEX_LEN_0F46_P_2) },
43234a1e
L
4714 },
4715
4716 /* PREFIX_VEX_0F47 */
4717 {
4718 { VEX_LEN_TABLE (VEX_LEN_0F47_P_0) },
1ba585e8
IT
4719 { Bad_Opcode },
4720 { VEX_LEN_TABLE (VEX_LEN_0F47_P_2) },
43234a1e
L
4721 },
4722
1ba585e8 4723 /* PREFIX_VEX_0F4A */
43234a1e 4724 {
1ba585e8 4725 { VEX_LEN_TABLE (VEX_LEN_0F4A_P_0) },
43234a1e 4726 { Bad_Opcode },
1ba585e8
IT
4727 { VEX_LEN_TABLE (VEX_LEN_0F4A_P_2) },
4728 },
4729
4730 /* PREFIX_VEX_0F4B */
4731 {
4732 { VEX_LEN_TABLE (VEX_LEN_0F4B_P_0) },
43234a1e
L
4733 { Bad_Opcode },
4734 { VEX_LEN_TABLE (VEX_LEN_0F4B_P_2) },
4735 },
4736
592a252b 4737 /* PREFIX_VEX_0F51 */
7c52e0e8 4738 {
592a252b
L
4739 { VEX_W_TABLE (VEX_W_0F51_P_0) },
4740 { VEX_LEN_TABLE (VEX_LEN_0F51_P_1) },
4741 { VEX_W_TABLE (VEX_W_0F51_P_2) },
4742 { VEX_LEN_TABLE (VEX_LEN_0F51_P_3) },
7c52e0e8
L
4743 },
4744
592a252b 4745 /* PREFIX_VEX_0F52 */
7c52e0e8 4746 {
592a252b
L
4747 { VEX_W_TABLE (VEX_W_0F52_P_0) },
4748 { VEX_LEN_TABLE (VEX_LEN_0F52_P_1) },
7c52e0e8
L
4749 },
4750
592a252b 4751 /* PREFIX_VEX_0F53 */
7c52e0e8 4752 {
592a252b
L
4753 { VEX_W_TABLE (VEX_W_0F53_P_0) },
4754 { VEX_LEN_TABLE (VEX_LEN_0F53_P_1) },
7c52e0e8
L
4755 },
4756
592a252b 4757 /* PREFIX_VEX_0F58 */
7c52e0e8 4758 {
592a252b
L
4759 { VEX_W_TABLE (VEX_W_0F58_P_0) },
4760 { VEX_LEN_TABLE (VEX_LEN_0F58_P_1) },
4761 { VEX_W_TABLE (VEX_W_0F58_P_2) },
4762 { VEX_LEN_TABLE (VEX_LEN_0F58_P_3) },
7c52e0e8
L
4763 },
4764
592a252b 4765 /* PREFIX_VEX_0F59 */
7c52e0e8 4766 {
592a252b
L
4767 { VEX_W_TABLE (VEX_W_0F59_P_0) },
4768 { VEX_LEN_TABLE (VEX_LEN_0F59_P_1) },
4769 { VEX_W_TABLE (VEX_W_0F59_P_2) },
4770 { VEX_LEN_TABLE (VEX_LEN_0F59_P_3) },
7c52e0e8
L
4771 },
4772
592a252b 4773 /* PREFIX_VEX_0F5A */
7c52e0e8 4774 {
592a252b
L
4775 { VEX_W_TABLE (VEX_W_0F5A_P_0) },
4776 { VEX_LEN_TABLE (VEX_LEN_0F5A_P_1) },
bf890a93 4777 { "vcvtpd2ps%XY", { XMM, EXx }, 0 },
592a252b 4778 { VEX_LEN_TABLE (VEX_LEN_0F5A_P_3) },
7c52e0e8
L
4779 },
4780
592a252b 4781 /* PREFIX_VEX_0F5B */
7c52e0e8 4782 {
592a252b
L
4783 { VEX_W_TABLE (VEX_W_0F5B_P_0) },
4784 { VEX_W_TABLE (VEX_W_0F5B_P_1) },
4785 { VEX_W_TABLE (VEX_W_0F5B_P_2) },
7c52e0e8
L
4786 },
4787
592a252b 4788 /* PREFIX_VEX_0F5C */
7c52e0e8 4789 {
592a252b
L
4790 { VEX_W_TABLE (VEX_W_0F5C_P_0) },
4791 { VEX_LEN_TABLE (VEX_LEN_0F5C_P_1) },
4792 { VEX_W_TABLE (VEX_W_0F5C_P_2) },
4793 { VEX_LEN_TABLE (VEX_LEN_0F5C_P_3) },
7c52e0e8
L
4794 },
4795
592a252b 4796 /* PREFIX_VEX_0F5D */
7c52e0e8 4797 {
592a252b
L
4798 { VEX_W_TABLE (VEX_W_0F5D_P_0) },
4799 { VEX_LEN_TABLE (VEX_LEN_0F5D_P_1) },
4800 { VEX_W_TABLE (VEX_W_0F5D_P_2) },
4801 { VEX_LEN_TABLE (VEX_LEN_0F5D_P_3) },
7c52e0e8
L
4802 },
4803
592a252b 4804 /* PREFIX_VEX_0F5E */
7c52e0e8 4805 {
592a252b
L
4806 { VEX_W_TABLE (VEX_W_0F5E_P_0) },
4807 { VEX_LEN_TABLE (VEX_LEN_0F5E_P_1) },
4808 { VEX_W_TABLE (VEX_W_0F5E_P_2) },
4809 { VEX_LEN_TABLE (VEX_LEN_0F5E_P_3) },
7c52e0e8
L
4810 },
4811
592a252b 4812 /* PREFIX_VEX_0F5F */
7c52e0e8 4813 {
592a252b
L
4814 { VEX_W_TABLE (VEX_W_0F5F_P_0) },
4815 { VEX_LEN_TABLE (VEX_LEN_0F5F_P_1) },
4816 { VEX_W_TABLE (VEX_W_0F5F_P_2) },
4817 { VEX_LEN_TABLE (VEX_LEN_0F5F_P_3) },
7c52e0e8
L
4818 },
4819
592a252b 4820 /* PREFIX_VEX_0F60 */
7c52e0e8 4821 {
592d1631
L
4822 { Bad_Opcode },
4823 { Bad_Opcode },
6c30d220 4824 { VEX_W_TABLE (VEX_W_0F60_P_2) },
7c52e0e8
L
4825 },
4826
592a252b 4827 /* PREFIX_VEX_0F61 */
7c52e0e8 4828 {
592d1631
L
4829 { Bad_Opcode },
4830 { Bad_Opcode },
6c30d220 4831 { VEX_W_TABLE (VEX_W_0F61_P_2) },
7c52e0e8
L
4832 },
4833
592a252b 4834 /* PREFIX_VEX_0F62 */
7c52e0e8 4835 {
592d1631
L
4836 { Bad_Opcode },
4837 { Bad_Opcode },
6c30d220 4838 { VEX_W_TABLE (VEX_W_0F62_P_2) },
7c52e0e8
L
4839 },
4840
592a252b 4841 /* PREFIX_VEX_0F63 */
7c52e0e8 4842 {
592d1631
L
4843 { Bad_Opcode },
4844 { Bad_Opcode },
6c30d220 4845 { VEX_W_TABLE (VEX_W_0F63_P_2) },
7c52e0e8
L
4846 },
4847
592a252b 4848 /* PREFIX_VEX_0F64 */
7c52e0e8 4849 {
592d1631
L
4850 { Bad_Opcode },
4851 { Bad_Opcode },
6c30d220 4852 { VEX_W_TABLE (VEX_W_0F64_P_2) },
7c52e0e8
L
4853 },
4854
592a252b 4855 /* PREFIX_VEX_0F65 */
7c52e0e8 4856 {
592d1631
L
4857 { Bad_Opcode },
4858 { Bad_Opcode },
6c30d220 4859 { VEX_W_TABLE (VEX_W_0F65_P_2) },
7c52e0e8
L
4860 },
4861
592a252b 4862 /* PREFIX_VEX_0F66 */
7c52e0e8 4863 {
592d1631
L
4864 { Bad_Opcode },
4865 { Bad_Opcode },
6c30d220 4866 { VEX_W_TABLE (VEX_W_0F66_P_2) },
7c52e0e8 4867 },
6439fc28 4868
592a252b 4869 /* PREFIX_VEX_0F67 */
331d2d0d 4870 {
592d1631
L
4871 { Bad_Opcode },
4872 { Bad_Opcode },
6c30d220 4873 { VEX_W_TABLE (VEX_W_0F67_P_2) },
c0f3af97
L
4874 },
4875
592a252b 4876 /* PREFIX_VEX_0F68 */
c0f3af97 4877 {
592d1631
L
4878 { Bad_Opcode },
4879 { Bad_Opcode },
6c30d220 4880 { VEX_W_TABLE (VEX_W_0F68_P_2) },
c0f3af97
L
4881 },
4882
592a252b 4883 /* PREFIX_VEX_0F69 */
c0f3af97 4884 {
592d1631
L
4885 { Bad_Opcode },
4886 { Bad_Opcode },
6c30d220 4887 { VEX_W_TABLE (VEX_W_0F69_P_2) },
c0f3af97
L
4888 },
4889
592a252b 4890 /* PREFIX_VEX_0F6A */
c0f3af97 4891 {
592d1631
L
4892 { Bad_Opcode },
4893 { Bad_Opcode },
6c30d220 4894 { VEX_W_TABLE (VEX_W_0F6A_P_2) },
c0f3af97
L
4895 },
4896
592a252b 4897 /* PREFIX_VEX_0F6B */
c0f3af97 4898 {
592d1631
L
4899 { Bad_Opcode },
4900 { Bad_Opcode },
6c30d220 4901 { VEX_W_TABLE (VEX_W_0F6B_P_2) },
c0f3af97
L
4902 },
4903
592a252b 4904 /* PREFIX_VEX_0F6C */
c0f3af97 4905 {
592d1631
L
4906 { Bad_Opcode },
4907 { Bad_Opcode },
6c30d220 4908 { VEX_W_TABLE (VEX_W_0F6C_P_2) },
c0f3af97
L
4909 },
4910
592a252b 4911 /* PREFIX_VEX_0F6D */
c0f3af97 4912 {
592d1631
L
4913 { Bad_Opcode },
4914 { Bad_Opcode },
6c30d220 4915 { VEX_W_TABLE (VEX_W_0F6D_P_2) },
c0f3af97
L
4916 },
4917
592a252b 4918 /* PREFIX_VEX_0F6E */
c0f3af97 4919 {
592d1631
L
4920 { Bad_Opcode },
4921 { Bad_Opcode },
592a252b 4922 { VEX_LEN_TABLE (VEX_LEN_0F6E_P_2) },
c0f3af97
L
4923 },
4924
592a252b 4925 /* PREFIX_VEX_0F6F */
c0f3af97 4926 {
592d1631 4927 { Bad_Opcode },
592a252b
L
4928 { VEX_W_TABLE (VEX_W_0F6F_P_1) },
4929 { VEX_W_TABLE (VEX_W_0F6F_P_2) },
c0f3af97
L
4930 },
4931
592a252b 4932 /* PREFIX_VEX_0F70 */
c0f3af97 4933 {
592d1631 4934 { Bad_Opcode },
6c30d220
L
4935 { VEX_W_TABLE (VEX_W_0F70_P_1) },
4936 { VEX_W_TABLE (VEX_W_0F70_P_2) },
4937 { VEX_W_TABLE (VEX_W_0F70_P_3) },
c0f3af97
L
4938 },
4939
592a252b 4940 /* PREFIX_VEX_0F71_REG_2 */
c0f3af97 4941 {
592d1631
L
4942 { Bad_Opcode },
4943 { Bad_Opcode },
6c30d220 4944 { VEX_W_TABLE (VEX_W_0F71_R_2_P_2) },
c0f3af97
L
4945 },
4946
592a252b 4947 /* PREFIX_VEX_0F71_REG_4 */
c0f3af97 4948 {
592d1631
L
4949 { Bad_Opcode },
4950 { Bad_Opcode },
6c30d220 4951 { VEX_W_TABLE (VEX_W_0F71_R_4_P_2) },
c0f3af97
L
4952 },
4953
592a252b 4954 /* PREFIX_VEX_0F71_REG_6 */
c0f3af97 4955 {
592d1631
L
4956 { Bad_Opcode },
4957 { Bad_Opcode },
6c30d220 4958 { VEX_W_TABLE (VEX_W_0F71_R_6_P_2) },
c0f3af97
L
4959 },
4960
592a252b 4961 /* PREFIX_VEX_0F72_REG_2 */
c0f3af97 4962 {
592d1631
L
4963 { Bad_Opcode },
4964 { Bad_Opcode },
6c30d220 4965 { VEX_W_TABLE (VEX_W_0F72_R_2_P_2) },
c0f3af97
L
4966 },
4967
592a252b 4968 /* PREFIX_VEX_0F72_REG_4 */
c0f3af97 4969 {
592d1631
L
4970 { Bad_Opcode },
4971 { Bad_Opcode },
6c30d220 4972 { VEX_W_TABLE (VEX_W_0F72_R_4_P_2) },
c0f3af97
L
4973 },
4974
592a252b 4975 /* PREFIX_VEX_0F72_REG_6 */
c0f3af97 4976 {
592d1631
L
4977 { Bad_Opcode },
4978 { Bad_Opcode },
6c30d220 4979 { VEX_W_TABLE (VEX_W_0F72_R_6_P_2) },
c0f3af97
L
4980 },
4981
592a252b 4982 /* PREFIX_VEX_0F73_REG_2 */
c0f3af97 4983 {
592d1631
L
4984 { Bad_Opcode },
4985 { Bad_Opcode },
6c30d220 4986 { VEX_W_TABLE (VEX_W_0F73_R_2_P_2) },
c0f3af97
L
4987 },
4988
592a252b 4989 /* PREFIX_VEX_0F73_REG_3 */
c0f3af97 4990 {
592d1631
L
4991 { Bad_Opcode },
4992 { Bad_Opcode },
6c30d220 4993 { VEX_W_TABLE (VEX_W_0F73_R_3_P_2) },
c0f3af97
L
4994 },
4995
592a252b 4996 /* PREFIX_VEX_0F73_REG_6 */
c0f3af97 4997 {
592d1631
L
4998 { Bad_Opcode },
4999 { Bad_Opcode },
6c30d220 5000 { VEX_W_TABLE (VEX_W_0F73_R_6_P_2) },
c0f3af97
L
5001 },
5002
592a252b 5003 /* PREFIX_VEX_0F73_REG_7 */
c0f3af97 5004 {
592d1631
L
5005 { Bad_Opcode },
5006 { Bad_Opcode },
6c30d220 5007 { VEX_W_TABLE (VEX_W_0F73_R_7_P_2) },
c0f3af97
L
5008 },
5009
592a252b 5010 /* PREFIX_VEX_0F74 */
c0f3af97 5011 {
592d1631
L
5012 { Bad_Opcode },
5013 { Bad_Opcode },
6c30d220 5014 { VEX_W_TABLE (VEX_W_0F74_P_2) },
c0f3af97
L
5015 },
5016
592a252b 5017 /* PREFIX_VEX_0F75 */
c0f3af97 5018 {
592d1631
L
5019 { Bad_Opcode },
5020 { Bad_Opcode },
6c30d220 5021 { VEX_W_TABLE (VEX_W_0F75_P_2) },
c0f3af97
L
5022 },
5023
592a252b 5024 /* PREFIX_VEX_0F76 */
c0f3af97 5025 {
592d1631
L
5026 { Bad_Opcode },
5027 { Bad_Opcode },
6c30d220 5028 { VEX_W_TABLE (VEX_W_0F76_P_2) },
c0f3af97
L
5029 },
5030
592a252b 5031 /* PREFIX_VEX_0F77 */
c0f3af97 5032 {
592a252b 5033 { VEX_W_TABLE (VEX_W_0F77_P_0) },
c0f3af97
L
5034 },
5035
592a252b 5036 /* PREFIX_VEX_0F7C */
c0f3af97 5037 {
592d1631
L
5038 { Bad_Opcode },
5039 { Bad_Opcode },
592a252b
L
5040 { VEX_W_TABLE (VEX_W_0F7C_P_2) },
5041 { VEX_W_TABLE (VEX_W_0F7C_P_3) },
c0f3af97
L
5042 },
5043
592a252b 5044 /* PREFIX_VEX_0F7D */
c0f3af97 5045 {
592d1631
L
5046 { Bad_Opcode },
5047 { Bad_Opcode },
592a252b
L
5048 { VEX_W_TABLE (VEX_W_0F7D_P_2) },
5049 { VEX_W_TABLE (VEX_W_0F7D_P_3) },
c0f3af97
L
5050 },
5051
592a252b 5052 /* PREFIX_VEX_0F7E */
c0f3af97 5053 {
592d1631 5054 { Bad_Opcode },
592a252b
L
5055 { VEX_LEN_TABLE (VEX_LEN_0F7E_P_1) },
5056 { VEX_LEN_TABLE (VEX_LEN_0F7E_P_2) },
c0f3af97
L
5057 },
5058
592a252b 5059 /* PREFIX_VEX_0F7F */
c0f3af97 5060 {
592d1631 5061 { Bad_Opcode },
592a252b
L
5062 { VEX_W_TABLE (VEX_W_0F7F_P_1) },
5063 { VEX_W_TABLE (VEX_W_0F7F_P_2) },
c0f3af97
L
5064 },
5065
43234a1e
L
5066 /* PREFIX_VEX_0F90 */
5067 {
5068 { VEX_LEN_TABLE (VEX_LEN_0F90_P_0) },
1ba585e8
IT
5069 { Bad_Opcode },
5070 { VEX_LEN_TABLE (VEX_LEN_0F90_P_2) },
43234a1e
L
5071 },
5072
5073 /* PREFIX_VEX_0F91 */
5074 {
5075 { VEX_LEN_TABLE (VEX_LEN_0F91_P_0) },
1ba585e8
IT
5076 { Bad_Opcode },
5077 { VEX_LEN_TABLE (VEX_LEN_0F91_P_2) },
43234a1e
L
5078 },
5079
5080 /* PREFIX_VEX_0F92 */
5081 {
5082 { VEX_LEN_TABLE (VEX_LEN_0F92_P_0) },
1ba585e8 5083 { Bad_Opcode },
90a915bf 5084 { VEX_LEN_TABLE (VEX_LEN_0F92_P_2) },
1ba585e8 5085 { VEX_LEN_TABLE (VEX_LEN_0F92_P_3) },
43234a1e
L
5086 },
5087
5088 /* PREFIX_VEX_0F93 */
5089 {
5090 { VEX_LEN_TABLE (VEX_LEN_0F93_P_0) },
1ba585e8 5091 { Bad_Opcode },
90a915bf 5092 { VEX_LEN_TABLE (VEX_LEN_0F93_P_2) },
1ba585e8 5093 { VEX_LEN_TABLE (VEX_LEN_0F93_P_3) },
43234a1e
L
5094 },
5095
5096 /* PREFIX_VEX_0F98 */
5097 {
5098 { VEX_LEN_TABLE (VEX_LEN_0F98_P_0) },
1ba585e8
IT
5099 { Bad_Opcode },
5100 { VEX_LEN_TABLE (VEX_LEN_0F98_P_2) },
5101 },
5102
5103 /* PREFIX_VEX_0F99 */
5104 {
5105 { VEX_LEN_TABLE (VEX_LEN_0F99_P_0) },
5106 { Bad_Opcode },
5107 { VEX_LEN_TABLE (VEX_LEN_0F99_P_2) },
43234a1e
L
5108 },
5109
592a252b 5110 /* PREFIX_VEX_0FC2 */
c0f3af97 5111 {
592a252b
L
5112 { VEX_W_TABLE (VEX_W_0FC2_P_0) },
5113 { VEX_LEN_TABLE (VEX_LEN_0FC2_P_1) },
5114 { VEX_W_TABLE (VEX_W_0FC2_P_2) },
5115 { VEX_LEN_TABLE (VEX_LEN_0FC2_P_3) },
c0f3af97
L
5116 },
5117
592a252b 5118 /* PREFIX_VEX_0FC4 */
c0f3af97 5119 {
592d1631
L
5120 { Bad_Opcode },
5121 { Bad_Opcode },
592a252b 5122 { VEX_LEN_TABLE (VEX_LEN_0FC4_P_2) },
c0f3af97
L
5123 },
5124
592a252b 5125 /* PREFIX_VEX_0FC5 */
c0f3af97 5126 {
592d1631
L
5127 { Bad_Opcode },
5128 { Bad_Opcode },
592a252b 5129 { VEX_LEN_TABLE (VEX_LEN_0FC5_P_2) },
c0f3af97
L
5130 },
5131
592a252b 5132 /* PREFIX_VEX_0FD0 */
c0f3af97 5133 {
592d1631
L
5134 { Bad_Opcode },
5135 { Bad_Opcode },
592a252b
L
5136 { VEX_W_TABLE (VEX_W_0FD0_P_2) },
5137 { VEX_W_TABLE (VEX_W_0FD0_P_3) },
c0f3af97
L
5138 },
5139
592a252b 5140 /* PREFIX_VEX_0FD1 */
c0f3af97 5141 {
592d1631
L
5142 { Bad_Opcode },
5143 { Bad_Opcode },
6c30d220 5144 { VEX_W_TABLE (VEX_W_0FD1_P_2) },
c0f3af97
L
5145 },
5146
592a252b 5147 /* PREFIX_VEX_0FD2 */
c0f3af97 5148 {
592d1631
L
5149 { Bad_Opcode },
5150 { Bad_Opcode },
6c30d220 5151 { VEX_W_TABLE (VEX_W_0FD2_P_2) },
c0f3af97
L
5152 },
5153
592a252b 5154 /* PREFIX_VEX_0FD3 */
c0f3af97 5155 {
592d1631
L
5156 { Bad_Opcode },
5157 { Bad_Opcode },
6c30d220 5158 { VEX_W_TABLE (VEX_W_0FD3_P_2) },
c0f3af97
L
5159 },
5160
592a252b 5161 /* PREFIX_VEX_0FD4 */
c0f3af97 5162 {
592d1631
L
5163 { Bad_Opcode },
5164 { Bad_Opcode },
6c30d220 5165 { VEX_W_TABLE (VEX_W_0FD4_P_2) },
c0f3af97
L
5166 },
5167
592a252b 5168 /* PREFIX_VEX_0FD5 */
c0f3af97 5169 {
592d1631
L
5170 { Bad_Opcode },
5171 { Bad_Opcode },
6c30d220 5172 { VEX_W_TABLE (VEX_W_0FD5_P_2) },
c0f3af97
L
5173 },
5174
592a252b 5175 /* PREFIX_VEX_0FD6 */
c0f3af97 5176 {
592d1631
L
5177 { Bad_Opcode },
5178 { Bad_Opcode },
592a252b 5179 { VEX_LEN_TABLE (VEX_LEN_0FD6_P_2) },
c0f3af97
L
5180 },
5181
592a252b 5182 /* PREFIX_VEX_0FD7 */
c0f3af97 5183 {
592d1631
L
5184 { Bad_Opcode },
5185 { Bad_Opcode },
592a252b 5186 { MOD_TABLE (MOD_VEX_0FD7_PREFIX_2) },
c0f3af97
L
5187 },
5188
592a252b 5189 /* PREFIX_VEX_0FD8 */
c0f3af97 5190 {
592d1631
L
5191 { Bad_Opcode },
5192 { Bad_Opcode },
6c30d220 5193 { VEX_W_TABLE (VEX_W_0FD8_P_2) },
c0f3af97
L
5194 },
5195
592a252b 5196 /* PREFIX_VEX_0FD9 */
c0f3af97 5197 {
592d1631
L
5198 { Bad_Opcode },
5199 { Bad_Opcode },
6c30d220 5200 { VEX_W_TABLE (VEX_W_0FD9_P_2) },
c0f3af97
L
5201 },
5202
592a252b 5203 /* PREFIX_VEX_0FDA */
c0f3af97 5204 {
592d1631
L
5205 { Bad_Opcode },
5206 { Bad_Opcode },
6c30d220 5207 { VEX_W_TABLE (VEX_W_0FDA_P_2) },
c0f3af97
L
5208 },
5209
592a252b 5210 /* PREFIX_VEX_0FDB */
c0f3af97 5211 {
592d1631
L
5212 { Bad_Opcode },
5213 { Bad_Opcode },
6c30d220 5214 { VEX_W_TABLE (VEX_W_0FDB_P_2) },
c0f3af97
L
5215 },
5216
592a252b 5217 /* PREFIX_VEX_0FDC */
c0f3af97 5218 {
592d1631
L
5219 { Bad_Opcode },
5220 { Bad_Opcode },
6c30d220 5221 { VEX_W_TABLE (VEX_W_0FDC_P_2) },
c0f3af97
L
5222 },
5223
592a252b 5224 /* PREFIX_VEX_0FDD */
c0f3af97 5225 {
592d1631
L
5226 { Bad_Opcode },
5227 { Bad_Opcode },
6c30d220 5228 { VEX_W_TABLE (VEX_W_0FDD_P_2) },
c0f3af97
L
5229 },
5230
592a252b 5231 /* PREFIX_VEX_0FDE */
c0f3af97 5232 {
592d1631
L
5233 { Bad_Opcode },
5234 { Bad_Opcode },
6c30d220 5235 { VEX_W_TABLE (VEX_W_0FDE_P_2) },
c0f3af97
L
5236 },
5237
592a252b 5238 /* PREFIX_VEX_0FDF */
c0f3af97 5239 {
592d1631
L
5240 { Bad_Opcode },
5241 { Bad_Opcode },
6c30d220 5242 { VEX_W_TABLE (VEX_W_0FDF_P_2) },
c0f3af97
L
5243 },
5244
592a252b 5245 /* PREFIX_VEX_0FE0 */
c0f3af97 5246 {
592d1631
L
5247 { Bad_Opcode },
5248 { Bad_Opcode },
6c30d220 5249 { VEX_W_TABLE (VEX_W_0FE0_P_2) },
c0f3af97
L
5250 },
5251
592a252b 5252 /* PREFIX_VEX_0FE1 */
c0f3af97 5253 {
592d1631
L
5254 { Bad_Opcode },
5255 { Bad_Opcode },
6c30d220 5256 { VEX_W_TABLE (VEX_W_0FE1_P_2) },
c0f3af97
L
5257 },
5258
592a252b 5259 /* PREFIX_VEX_0FE2 */
c0f3af97 5260 {
592d1631
L
5261 { Bad_Opcode },
5262 { Bad_Opcode },
6c30d220 5263 { VEX_W_TABLE (VEX_W_0FE2_P_2) },
c0f3af97
L
5264 },
5265
592a252b 5266 /* PREFIX_VEX_0FE3 */
c0f3af97 5267 {
592d1631
L
5268 { Bad_Opcode },
5269 { Bad_Opcode },
6c30d220 5270 { VEX_W_TABLE (VEX_W_0FE3_P_2) },
c0f3af97
L
5271 },
5272
592a252b 5273 /* PREFIX_VEX_0FE4 */
c0f3af97 5274 {
592d1631
L
5275 { Bad_Opcode },
5276 { Bad_Opcode },
6c30d220 5277 { VEX_W_TABLE (VEX_W_0FE4_P_2) },
c0f3af97
L
5278 },
5279
592a252b 5280 /* PREFIX_VEX_0FE5 */
c0f3af97 5281 {
592d1631
L
5282 { Bad_Opcode },
5283 { Bad_Opcode },
6c30d220 5284 { VEX_W_TABLE (VEX_W_0FE5_P_2) },
c0f3af97
L
5285 },
5286
592a252b 5287 /* PREFIX_VEX_0FE6 */
c0f3af97 5288 {
592d1631 5289 { Bad_Opcode },
592a252b
L
5290 { VEX_W_TABLE (VEX_W_0FE6_P_1) },
5291 { VEX_W_TABLE (VEX_W_0FE6_P_2) },
5292 { VEX_W_TABLE (VEX_W_0FE6_P_3) },
c0f3af97
L
5293 },
5294
592a252b 5295 /* PREFIX_VEX_0FE7 */
c0f3af97 5296 {
592d1631
L
5297 { Bad_Opcode },
5298 { Bad_Opcode },
592a252b 5299 { MOD_TABLE (MOD_VEX_0FE7_PREFIX_2) },
c0f3af97
L
5300 },
5301
592a252b 5302 /* PREFIX_VEX_0FE8 */
c0f3af97 5303 {
592d1631
L
5304 { Bad_Opcode },
5305 { Bad_Opcode },
6c30d220 5306 { VEX_W_TABLE (VEX_W_0FE8_P_2) },
c0f3af97
L
5307 },
5308
592a252b 5309 /* PREFIX_VEX_0FE9 */
c0f3af97 5310 {
592d1631
L
5311 { Bad_Opcode },
5312 { Bad_Opcode },
6c30d220 5313 { VEX_W_TABLE (VEX_W_0FE9_P_2) },
c0f3af97
L
5314 },
5315
592a252b 5316 /* PREFIX_VEX_0FEA */
c0f3af97 5317 {
592d1631
L
5318 { Bad_Opcode },
5319 { Bad_Opcode },
6c30d220 5320 { VEX_W_TABLE (VEX_W_0FEA_P_2) },
c0f3af97
L
5321 },
5322
592a252b 5323 /* PREFIX_VEX_0FEB */
c0f3af97 5324 {
592d1631
L
5325 { Bad_Opcode },
5326 { Bad_Opcode },
6c30d220 5327 { VEX_W_TABLE (VEX_W_0FEB_P_2) },
c0f3af97
L
5328 },
5329
592a252b 5330 /* PREFIX_VEX_0FEC */
c0f3af97 5331 {
592d1631
L
5332 { Bad_Opcode },
5333 { Bad_Opcode },
6c30d220 5334 { VEX_W_TABLE (VEX_W_0FEC_P_2) },
c0f3af97
L
5335 },
5336
592a252b 5337 /* PREFIX_VEX_0FED */
c0f3af97 5338 {
592d1631
L
5339 { Bad_Opcode },
5340 { Bad_Opcode },
6c30d220 5341 { VEX_W_TABLE (VEX_W_0FED_P_2) },
c0f3af97
L
5342 },
5343
592a252b 5344 /* PREFIX_VEX_0FEE */
c0f3af97 5345 {
592d1631
L
5346 { Bad_Opcode },
5347 { Bad_Opcode },
6c30d220 5348 { VEX_W_TABLE (VEX_W_0FEE_P_2) },
c0f3af97
L
5349 },
5350
592a252b 5351 /* PREFIX_VEX_0FEF */
c0f3af97 5352 {
592d1631
L
5353 { Bad_Opcode },
5354 { Bad_Opcode },
6c30d220 5355 { VEX_W_TABLE (VEX_W_0FEF_P_2) },
c0f3af97
L
5356 },
5357
592a252b 5358 /* PREFIX_VEX_0FF0 */
c0f3af97 5359 {
592d1631
L
5360 { Bad_Opcode },
5361 { Bad_Opcode },
5362 { Bad_Opcode },
592a252b 5363 { MOD_TABLE (MOD_VEX_0FF0_PREFIX_3) },
c0f3af97
L
5364 },
5365
592a252b 5366 /* PREFIX_VEX_0FF1 */
c0f3af97 5367 {
592d1631
L
5368 { Bad_Opcode },
5369 { Bad_Opcode },
6c30d220 5370 { VEX_W_TABLE (VEX_W_0FF1_P_2) },
c0f3af97
L
5371 },
5372
592a252b 5373 /* PREFIX_VEX_0FF2 */
c0f3af97 5374 {
592d1631
L
5375 { Bad_Opcode },
5376 { Bad_Opcode },
6c30d220 5377 { VEX_W_TABLE (VEX_W_0FF2_P_2) },
c0f3af97
L
5378 },
5379
592a252b 5380 /* PREFIX_VEX_0FF3 */
c0f3af97 5381 {
592d1631
L
5382 { Bad_Opcode },
5383 { Bad_Opcode },
6c30d220 5384 { VEX_W_TABLE (VEX_W_0FF3_P_2) },
c0f3af97
L
5385 },
5386
592a252b 5387 /* PREFIX_VEX_0FF4 */
c0f3af97 5388 {
592d1631
L
5389 { Bad_Opcode },
5390 { Bad_Opcode },
6c30d220 5391 { VEX_W_TABLE (VEX_W_0FF4_P_2) },
c0f3af97
L
5392 },
5393
592a252b 5394 /* PREFIX_VEX_0FF5 */
c0f3af97 5395 {
592d1631
L
5396 { Bad_Opcode },
5397 { Bad_Opcode },
6c30d220 5398 { VEX_W_TABLE (VEX_W_0FF5_P_2) },
c0f3af97
L
5399 },
5400
592a252b 5401 /* PREFIX_VEX_0FF6 */
c0f3af97 5402 {
592d1631
L
5403 { Bad_Opcode },
5404 { Bad_Opcode },
6c30d220 5405 { VEX_W_TABLE (VEX_W_0FF6_P_2) },
c0f3af97
L
5406 },
5407
592a252b 5408 /* PREFIX_VEX_0FF7 */
c0f3af97 5409 {
592d1631
L
5410 { Bad_Opcode },
5411 { Bad_Opcode },
592a252b 5412 { VEX_LEN_TABLE (VEX_LEN_0FF7_P_2) },
c0f3af97
L
5413 },
5414
592a252b 5415 /* PREFIX_VEX_0FF8 */
c0f3af97 5416 {
592d1631
L
5417 { Bad_Opcode },
5418 { Bad_Opcode },
6c30d220 5419 { VEX_W_TABLE (VEX_W_0FF8_P_2) },
c0f3af97
L
5420 },
5421
592a252b 5422 /* PREFIX_VEX_0FF9 */
c0f3af97 5423 {
592d1631
L
5424 { Bad_Opcode },
5425 { Bad_Opcode },
6c30d220 5426 { VEX_W_TABLE (VEX_W_0FF9_P_2) },
c0f3af97
L
5427 },
5428
592a252b 5429 /* PREFIX_VEX_0FFA */
c0f3af97 5430 {
592d1631
L
5431 { Bad_Opcode },
5432 { Bad_Opcode },
6c30d220 5433 { VEX_W_TABLE (VEX_W_0FFA_P_2) },
c0f3af97
L
5434 },
5435
592a252b 5436 /* PREFIX_VEX_0FFB */
c0f3af97 5437 {
592d1631
L
5438 { Bad_Opcode },
5439 { Bad_Opcode },
6c30d220 5440 { VEX_W_TABLE (VEX_W_0FFB_P_2) },
c0f3af97
L
5441 },
5442
592a252b 5443 /* PREFIX_VEX_0FFC */
c0f3af97 5444 {
592d1631
L
5445 { Bad_Opcode },
5446 { Bad_Opcode },
6c30d220 5447 { VEX_W_TABLE (VEX_W_0FFC_P_2) },
c0f3af97
L
5448 },
5449
592a252b 5450 /* PREFIX_VEX_0FFD */
c0f3af97 5451 {
592d1631
L
5452 { Bad_Opcode },
5453 { Bad_Opcode },
6c30d220 5454 { VEX_W_TABLE (VEX_W_0FFD_P_2) },
c0f3af97
L
5455 },
5456
592a252b 5457 /* PREFIX_VEX_0FFE */
c0f3af97 5458 {
592d1631
L
5459 { Bad_Opcode },
5460 { Bad_Opcode },
6c30d220 5461 { VEX_W_TABLE (VEX_W_0FFE_P_2) },
c0f3af97
L
5462 },
5463
592a252b 5464 /* PREFIX_VEX_0F3800 */
c0f3af97 5465 {
592d1631
L
5466 { Bad_Opcode },
5467 { Bad_Opcode },
6c30d220 5468 { VEX_W_TABLE (VEX_W_0F3800_P_2) },
c0f3af97
L
5469 },
5470
592a252b 5471 /* PREFIX_VEX_0F3801 */
c0f3af97 5472 {
592d1631
L
5473 { Bad_Opcode },
5474 { Bad_Opcode },
6c30d220 5475 { VEX_W_TABLE (VEX_W_0F3801_P_2) },
c0f3af97
L
5476 },
5477
592a252b 5478 /* PREFIX_VEX_0F3802 */
c0f3af97 5479 {
592d1631
L
5480 { Bad_Opcode },
5481 { Bad_Opcode },
6c30d220 5482 { VEX_W_TABLE (VEX_W_0F3802_P_2) },
c0f3af97
L
5483 },
5484
592a252b 5485 /* PREFIX_VEX_0F3803 */
c0f3af97 5486 {
592d1631
L
5487 { Bad_Opcode },
5488 { Bad_Opcode },
6c30d220 5489 { VEX_W_TABLE (VEX_W_0F3803_P_2) },
c0f3af97
L
5490 },
5491
592a252b 5492 /* PREFIX_VEX_0F3804 */
c0f3af97 5493 {
592d1631
L
5494 { Bad_Opcode },
5495 { Bad_Opcode },
6c30d220 5496 { VEX_W_TABLE (VEX_W_0F3804_P_2) },
c0f3af97
L
5497 },
5498
592a252b 5499 /* PREFIX_VEX_0F3805 */
c0f3af97 5500 {
592d1631
L
5501 { Bad_Opcode },
5502 { Bad_Opcode },
6c30d220 5503 { VEX_W_TABLE (VEX_W_0F3805_P_2) },
c0f3af97
L
5504 },
5505
592a252b 5506 /* PREFIX_VEX_0F3806 */
c0f3af97 5507 {
592d1631
L
5508 { Bad_Opcode },
5509 { Bad_Opcode },
6c30d220 5510 { VEX_W_TABLE (VEX_W_0F3806_P_2) },
c0f3af97
L
5511 },
5512
592a252b 5513 /* PREFIX_VEX_0F3807 */
c0f3af97 5514 {
592d1631
L
5515 { Bad_Opcode },
5516 { Bad_Opcode },
6c30d220 5517 { VEX_W_TABLE (VEX_W_0F3807_P_2) },
c0f3af97
L
5518 },
5519
592a252b 5520 /* PREFIX_VEX_0F3808 */
c0f3af97 5521 {
592d1631
L
5522 { Bad_Opcode },
5523 { Bad_Opcode },
6c30d220 5524 { VEX_W_TABLE (VEX_W_0F3808_P_2) },
c0f3af97
L
5525 },
5526
592a252b 5527 /* PREFIX_VEX_0F3809 */
c0f3af97 5528 {
592d1631
L
5529 { Bad_Opcode },
5530 { Bad_Opcode },
6c30d220 5531 { VEX_W_TABLE (VEX_W_0F3809_P_2) },
c0f3af97
L
5532 },
5533
592a252b 5534 /* PREFIX_VEX_0F380A */
c0f3af97 5535 {
592d1631
L
5536 { Bad_Opcode },
5537 { Bad_Opcode },
6c30d220 5538 { VEX_W_TABLE (VEX_W_0F380A_P_2) },
c0f3af97
L
5539 },
5540
592a252b 5541 /* PREFIX_VEX_0F380B */
c0f3af97 5542 {
592d1631
L
5543 { Bad_Opcode },
5544 { Bad_Opcode },
6c30d220 5545 { VEX_W_TABLE (VEX_W_0F380B_P_2) },
c0f3af97
L
5546 },
5547
592a252b 5548 /* PREFIX_VEX_0F380C */
c0f3af97 5549 {
592d1631
L
5550 { Bad_Opcode },
5551 { Bad_Opcode },
592a252b 5552 { VEX_W_TABLE (VEX_W_0F380C_P_2) },
c0f3af97
L
5553 },
5554
592a252b 5555 /* PREFIX_VEX_0F380D */
c0f3af97 5556 {
592d1631
L
5557 { Bad_Opcode },
5558 { Bad_Opcode },
592a252b 5559 { VEX_W_TABLE (VEX_W_0F380D_P_2) },
c0f3af97
L
5560 },
5561
592a252b 5562 /* PREFIX_VEX_0F380E */
c0f3af97 5563 {
592d1631
L
5564 { Bad_Opcode },
5565 { Bad_Opcode },
592a252b 5566 { VEX_W_TABLE (VEX_W_0F380E_P_2) },
c0f3af97
L
5567 },
5568
592a252b 5569 /* PREFIX_VEX_0F380F */
c0f3af97 5570 {
592d1631
L
5571 { Bad_Opcode },
5572 { Bad_Opcode },
592a252b 5573 { VEX_W_TABLE (VEX_W_0F380F_P_2) },
c0f3af97
L
5574 },
5575
592a252b 5576 /* PREFIX_VEX_0F3813 */
c7b8aa3a
L
5577 {
5578 { Bad_Opcode },
5579 { Bad_Opcode },
bf890a93 5580 { "vcvtph2ps", { XM, EXxmmq }, 0 },
c7b8aa3a
L
5581 },
5582
6c30d220
L
5583 /* PREFIX_VEX_0F3816 */
5584 {
5585 { Bad_Opcode },
5586 { Bad_Opcode },
5587 { VEX_LEN_TABLE (VEX_LEN_0F3816_P_2) },
5588 },
5589
592a252b 5590 /* PREFIX_VEX_0F3817 */
c0f3af97 5591 {
592d1631
L
5592 { Bad_Opcode },
5593 { Bad_Opcode },
592a252b 5594 { VEX_W_TABLE (VEX_W_0F3817_P_2) },
c0f3af97
L
5595 },
5596
592a252b 5597 /* PREFIX_VEX_0F3818 */
c0f3af97 5598 {
592d1631
L
5599 { Bad_Opcode },
5600 { Bad_Opcode },
6c30d220 5601 { VEX_W_TABLE (VEX_W_0F3818_P_2) },
c0f3af97
L
5602 },
5603
592a252b 5604 /* PREFIX_VEX_0F3819 */
c0f3af97 5605 {
592d1631
L
5606 { Bad_Opcode },
5607 { Bad_Opcode },
6c30d220 5608 { VEX_LEN_TABLE (VEX_LEN_0F3819_P_2) },
c0f3af97
L
5609 },
5610
592a252b 5611 /* PREFIX_VEX_0F381A */
c0f3af97 5612 {
592d1631
L
5613 { Bad_Opcode },
5614 { Bad_Opcode },
592a252b 5615 { MOD_TABLE (MOD_VEX_0F381A_PREFIX_2) },
c0f3af97
L
5616 },
5617
592a252b 5618 /* PREFIX_VEX_0F381C */
c0f3af97 5619 {
592d1631
L
5620 { Bad_Opcode },
5621 { Bad_Opcode },
6c30d220 5622 { VEX_W_TABLE (VEX_W_0F381C_P_2) },
c0f3af97
L
5623 },
5624
592a252b 5625 /* PREFIX_VEX_0F381D */
c0f3af97 5626 {
592d1631
L
5627 { Bad_Opcode },
5628 { Bad_Opcode },
6c30d220 5629 { VEX_W_TABLE (VEX_W_0F381D_P_2) },
c0f3af97
L
5630 },
5631
592a252b 5632 /* PREFIX_VEX_0F381E */
c0f3af97 5633 {
592d1631
L
5634 { Bad_Opcode },
5635 { Bad_Opcode },
6c30d220 5636 { VEX_W_TABLE (VEX_W_0F381E_P_2) },
c0f3af97
L
5637 },
5638
592a252b 5639 /* PREFIX_VEX_0F3820 */
c0f3af97 5640 {
592d1631
L
5641 { Bad_Opcode },
5642 { Bad_Opcode },
6c30d220 5643 { VEX_W_TABLE (VEX_W_0F3820_P_2) },
c0f3af97
L
5644 },
5645
592a252b 5646 /* PREFIX_VEX_0F3821 */
c0f3af97 5647 {
592d1631
L
5648 { Bad_Opcode },
5649 { Bad_Opcode },
6c30d220 5650 { VEX_W_TABLE (VEX_W_0F3821_P_2) },
c0f3af97
L
5651 },
5652
592a252b 5653 /* PREFIX_VEX_0F3822 */
c0f3af97 5654 {
592d1631
L
5655 { Bad_Opcode },
5656 { Bad_Opcode },
6c30d220 5657 { VEX_W_TABLE (VEX_W_0F3822_P_2) },
c0f3af97
L
5658 },
5659
592a252b 5660 /* PREFIX_VEX_0F3823 */
c0f3af97 5661 {
592d1631
L
5662 { Bad_Opcode },
5663 { Bad_Opcode },
6c30d220 5664 { VEX_W_TABLE (VEX_W_0F3823_P_2) },
c0f3af97
L
5665 },
5666
592a252b 5667 /* PREFIX_VEX_0F3824 */
c0f3af97 5668 {
592d1631
L
5669 { Bad_Opcode },
5670 { Bad_Opcode },
6c30d220 5671 { VEX_W_TABLE (VEX_W_0F3824_P_2) },
c0f3af97
L
5672 },
5673
592a252b 5674 /* PREFIX_VEX_0F3825 */
c0f3af97 5675 {
592d1631
L
5676 { Bad_Opcode },
5677 { Bad_Opcode },
6c30d220 5678 { VEX_W_TABLE (VEX_W_0F3825_P_2) },
c0f3af97
L
5679 },
5680
592a252b 5681 /* PREFIX_VEX_0F3828 */
c0f3af97 5682 {
592d1631
L
5683 { Bad_Opcode },
5684 { Bad_Opcode },
6c30d220 5685 { VEX_W_TABLE (VEX_W_0F3828_P_2) },
c0f3af97
L
5686 },
5687
592a252b 5688 /* PREFIX_VEX_0F3829 */
c0f3af97 5689 {
592d1631
L
5690 { Bad_Opcode },
5691 { Bad_Opcode },
6c30d220 5692 { VEX_W_TABLE (VEX_W_0F3829_P_2) },
c0f3af97
L
5693 },
5694
592a252b 5695 /* PREFIX_VEX_0F382A */
c0f3af97 5696 {
592d1631
L
5697 { Bad_Opcode },
5698 { Bad_Opcode },
592a252b 5699 { MOD_TABLE (MOD_VEX_0F382A_PREFIX_2) },
c0f3af97
L
5700 },
5701
592a252b 5702 /* PREFIX_VEX_0F382B */
c0f3af97 5703 {
592d1631
L
5704 { Bad_Opcode },
5705 { Bad_Opcode },
6c30d220 5706 { VEX_W_TABLE (VEX_W_0F382B_P_2) },
c0f3af97
L
5707 },
5708
592a252b 5709 /* PREFIX_VEX_0F382C */
c0f3af97 5710 {
592d1631
L
5711 { Bad_Opcode },
5712 { Bad_Opcode },
592a252b 5713 { MOD_TABLE (MOD_VEX_0F382C_PREFIX_2) },
c0f3af97
L
5714 },
5715
592a252b 5716 /* PREFIX_VEX_0F382D */
c0f3af97 5717 {
592d1631
L
5718 { Bad_Opcode },
5719 { Bad_Opcode },
592a252b 5720 { MOD_TABLE (MOD_VEX_0F382D_PREFIX_2) },
c0f3af97
L
5721 },
5722
592a252b 5723 /* PREFIX_VEX_0F382E */
c0f3af97 5724 {
592d1631
L
5725 { Bad_Opcode },
5726 { Bad_Opcode },
592a252b 5727 { MOD_TABLE (MOD_VEX_0F382E_PREFIX_2) },
c0f3af97
L
5728 },
5729
592a252b 5730 /* PREFIX_VEX_0F382F */
c0f3af97 5731 {
592d1631
L
5732 { Bad_Opcode },
5733 { Bad_Opcode },
592a252b 5734 { MOD_TABLE (MOD_VEX_0F382F_PREFIX_2) },
c0f3af97
L
5735 },
5736
592a252b 5737 /* PREFIX_VEX_0F3830 */
c0f3af97 5738 {
592d1631
L
5739 { Bad_Opcode },
5740 { Bad_Opcode },
6c30d220 5741 { VEX_W_TABLE (VEX_W_0F3830_P_2) },
c0f3af97
L
5742 },
5743
592a252b 5744 /* PREFIX_VEX_0F3831 */
c0f3af97 5745 {
592d1631
L
5746 { Bad_Opcode },
5747 { Bad_Opcode },
6c30d220 5748 { VEX_W_TABLE (VEX_W_0F3831_P_2) },
c0f3af97
L
5749 },
5750
592a252b 5751 /* PREFIX_VEX_0F3832 */
c0f3af97 5752 {
592d1631
L
5753 { Bad_Opcode },
5754 { Bad_Opcode },
6c30d220 5755 { VEX_W_TABLE (VEX_W_0F3832_P_2) },
c0f3af97
L
5756 },
5757
592a252b 5758 /* PREFIX_VEX_0F3833 */
c0f3af97 5759 {
592d1631
L
5760 { Bad_Opcode },
5761 { Bad_Opcode },
6c30d220 5762 { VEX_W_TABLE (VEX_W_0F3833_P_2) },
c0f3af97
L
5763 },
5764
592a252b 5765 /* PREFIX_VEX_0F3834 */
c0f3af97 5766 {
592d1631
L
5767 { Bad_Opcode },
5768 { Bad_Opcode },
6c30d220 5769 { VEX_W_TABLE (VEX_W_0F3834_P_2) },
c0f3af97
L
5770 },
5771
592a252b 5772 /* PREFIX_VEX_0F3835 */
c0f3af97 5773 {
592d1631
L
5774 { Bad_Opcode },
5775 { Bad_Opcode },
6c30d220
L
5776 { VEX_W_TABLE (VEX_W_0F3835_P_2) },
5777 },
5778
5779 /* PREFIX_VEX_0F3836 */
5780 {
5781 { Bad_Opcode },
5782 { Bad_Opcode },
5783 { VEX_LEN_TABLE (VEX_LEN_0F3836_P_2) },
c0f3af97
L
5784 },
5785
592a252b 5786 /* PREFIX_VEX_0F3837 */
c0f3af97 5787 {
592d1631
L
5788 { Bad_Opcode },
5789 { Bad_Opcode },
6c30d220 5790 { VEX_W_TABLE (VEX_W_0F3837_P_2) },
c0f3af97
L
5791 },
5792
592a252b 5793 /* PREFIX_VEX_0F3838 */
c0f3af97 5794 {
592d1631
L
5795 { Bad_Opcode },
5796 { Bad_Opcode },
6c30d220 5797 { VEX_W_TABLE (VEX_W_0F3838_P_2) },
c0f3af97
L
5798 },
5799
592a252b 5800 /* PREFIX_VEX_0F3839 */
c0f3af97 5801 {
592d1631
L
5802 { Bad_Opcode },
5803 { Bad_Opcode },
6c30d220 5804 { VEX_W_TABLE (VEX_W_0F3839_P_2) },
c0f3af97
L
5805 },
5806
592a252b 5807 /* PREFIX_VEX_0F383A */
c0f3af97 5808 {
592d1631
L
5809 { Bad_Opcode },
5810 { Bad_Opcode },
6c30d220 5811 { VEX_W_TABLE (VEX_W_0F383A_P_2) },
c0f3af97
L
5812 },
5813
592a252b 5814 /* PREFIX_VEX_0F383B */
c0f3af97 5815 {
592d1631
L
5816 { Bad_Opcode },
5817 { Bad_Opcode },
6c30d220 5818 { VEX_W_TABLE (VEX_W_0F383B_P_2) },
c0f3af97
L
5819 },
5820
592a252b 5821 /* PREFIX_VEX_0F383C */
c0f3af97 5822 {
592d1631
L
5823 { Bad_Opcode },
5824 { Bad_Opcode },
6c30d220 5825 { VEX_W_TABLE (VEX_W_0F383C_P_2) },
c0f3af97
L
5826 },
5827
592a252b 5828 /* PREFIX_VEX_0F383D */
c0f3af97 5829 {
592d1631
L
5830 { Bad_Opcode },
5831 { Bad_Opcode },
6c30d220 5832 { VEX_W_TABLE (VEX_W_0F383D_P_2) },
c0f3af97
L
5833 },
5834
592a252b 5835 /* PREFIX_VEX_0F383E */
c0f3af97 5836 {
592d1631
L
5837 { Bad_Opcode },
5838 { Bad_Opcode },
6c30d220 5839 { VEX_W_TABLE (VEX_W_0F383E_P_2) },
c0f3af97
L
5840 },
5841
592a252b 5842 /* PREFIX_VEX_0F383F */
c0f3af97 5843 {
592d1631
L
5844 { Bad_Opcode },
5845 { Bad_Opcode },
6c30d220 5846 { VEX_W_TABLE (VEX_W_0F383F_P_2) },
c0f3af97
L
5847 },
5848
592a252b 5849 /* PREFIX_VEX_0F3840 */
c0f3af97 5850 {
592d1631
L
5851 { Bad_Opcode },
5852 { Bad_Opcode },
6c30d220 5853 { VEX_W_TABLE (VEX_W_0F3840_P_2) },
c0f3af97
L
5854 },
5855
592a252b 5856 /* PREFIX_VEX_0F3841 */
c0f3af97 5857 {
592d1631
L
5858 { Bad_Opcode },
5859 { Bad_Opcode },
592a252b 5860 { VEX_LEN_TABLE (VEX_LEN_0F3841_P_2) },
c0f3af97
L
5861 },
5862
6c30d220
L
5863 /* PREFIX_VEX_0F3845 */
5864 {
5865 { Bad_Opcode },
5866 { Bad_Opcode },
bf890a93 5867 { "vpsrlv%LW", { XM, Vex, EXx }, 0 },
6c30d220
L
5868 },
5869
5870 /* PREFIX_VEX_0F3846 */
5871 {
5872 { Bad_Opcode },
5873 { Bad_Opcode },
5874 { VEX_W_TABLE (VEX_W_0F3846_P_2) },
5875 },
5876
5877 /* PREFIX_VEX_0F3847 */
5878 {
5879 { Bad_Opcode },
5880 { Bad_Opcode },
bf890a93 5881 { "vpsllv%LW", { XM, Vex, EXx }, 0 },
6c30d220
L
5882 },
5883
5884 /* PREFIX_VEX_0F3858 */
5885 {
5886 { Bad_Opcode },
5887 { Bad_Opcode },
5888 { VEX_W_TABLE (VEX_W_0F3858_P_2) },
5889 },
5890
5891 /* PREFIX_VEX_0F3859 */
5892 {
5893 { Bad_Opcode },
5894 { Bad_Opcode },
5895 { VEX_W_TABLE (VEX_W_0F3859_P_2) },
5896 },
5897
5898 /* PREFIX_VEX_0F385A */
5899 {
5900 { Bad_Opcode },
5901 { Bad_Opcode },
5902 { MOD_TABLE (MOD_VEX_0F385A_PREFIX_2) },
5903 },
5904
5905 /* PREFIX_VEX_0F3878 */
5906 {
5907 { Bad_Opcode },
5908 { Bad_Opcode },
5909 { VEX_W_TABLE (VEX_W_0F3878_P_2) },
5910 },
5911
5912 /* PREFIX_VEX_0F3879 */
5913 {
5914 { Bad_Opcode },
5915 { Bad_Opcode },
5916 { VEX_W_TABLE (VEX_W_0F3879_P_2) },
5917 },
5918
5919 /* PREFIX_VEX_0F388C */
5920 {
5921 { Bad_Opcode },
5922 { Bad_Opcode },
f7002f42 5923 { MOD_TABLE (MOD_VEX_0F388C_PREFIX_2) },
6c30d220
L
5924 },
5925
5926 /* PREFIX_VEX_0F388E */
5927 {
5928 { Bad_Opcode },
5929 { Bad_Opcode },
f7002f42 5930 { MOD_TABLE (MOD_VEX_0F388E_PREFIX_2) },
6c30d220
L
5931 },
5932
5933 /* PREFIX_VEX_0F3890 */
5934 {
5935 { Bad_Opcode },
5936 { Bad_Opcode },
bf890a93 5937 { "vpgatherd%LW", { XM, MVexVSIBDWpX, Vex }, 0 },
6c30d220
L
5938 },
5939
5940 /* PREFIX_VEX_0F3891 */
5941 {
5942 { Bad_Opcode },
5943 { Bad_Opcode },
bf890a93 5944 { "vpgatherq%LW", { XMGatherQ, MVexVSIBQWpX, VexGatherQ }, 0 },
6c30d220
L
5945 },
5946
5947 /* PREFIX_VEX_0F3892 */
5948 {
5949 { Bad_Opcode },
5950 { Bad_Opcode },
bf890a93 5951 { "vgatherdp%XW", { XM, MVexVSIBDWpX, Vex }, 0 },
6c30d220
L
5952 },
5953
5954 /* PREFIX_VEX_0F3893 */
5955 {
5956 { Bad_Opcode },
5957 { Bad_Opcode },
bf890a93 5958 { "vgatherqp%XW", { XMGatherQ, MVexVSIBQWpX, VexGatherQ }, 0 },
6c30d220
L
5959 },
5960
592a252b 5961 /* PREFIX_VEX_0F3896 */
a5ff0eb2 5962 {
592d1631
L
5963 { Bad_Opcode },
5964 { Bad_Opcode },
bf890a93 5965 { "vfmaddsub132p%XW", { XM, Vex, EXx }, 0 },
a5ff0eb2
L
5966 },
5967
592a252b 5968 /* PREFIX_VEX_0F3897 */
a5ff0eb2 5969 {
592d1631
L
5970 { Bad_Opcode },
5971 { Bad_Opcode },
bf890a93 5972 { "vfmsubadd132p%XW", { XM, Vex, EXx }, 0 },
a5ff0eb2
L
5973 },
5974
592a252b 5975 /* PREFIX_VEX_0F3898 */
a5ff0eb2 5976 {
592d1631
L
5977 { Bad_Opcode },
5978 { Bad_Opcode },
bf890a93 5979 { "vfmadd132p%XW", { XM, Vex, EXx }, 0 },
a5ff0eb2
L
5980 },
5981
592a252b 5982 /* PREFIX_VEX_0F3899 */
a5ff0eb2 5983 {
592d1631
L
5984 { Bad_Opcode },
5985 { Bad_Opcode },
bf890a93 5986 { "vfmadd132s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
a5ff0eb2
L
5987 },
5988
592a252b 5989 /* PREFIX_VEX_0F389A */
a5ff0eb2 5990 {
592d1631
L
5991 { Bad_Opcode },
5992 { Bad_Opcode },
bf890a93 5993 { "vfmsub132p%XW", { XM, Vex, EXx }, 0 },
a5ff0eb2
L
5994 },
5995
592a252b 5996 /* PREFIX_VEX_0F389B */
c0f3af97 5997 {
592d1631
L
5998 { Bad_Opcode },
5999 { Bad_Opcode },
bf890a93 6000 { "vfmsub132s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6001 },
6002
592a252b 6003 /* PREFIX_VEX_0F389C */
c0f3af97 6004 {
592d1631
L
6005 { Bad_Opcode },
6006 { Bad_Opcode },
bf890a93 6007 { "vfnmadd132p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6008 },
6009
592a252b 6010 /* PREFIX_VEX_0F389D */
c0f3af97 6011 {
592d1631
L
6012 { Bad_Opcode },
6013 { Bad_Opcode },
bf890a93 6014 { "vfnmadd132s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6015 },
6016
592a252b 6017 /* PREFIX_VEX_0F389E */
c0f3af97 6018 {
592d1631
L
6019 { Bad_Opcode },
6020 { Bad_Opcode },
bf890a93 6021 { "vfnmsub132p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6022 },
6023
592a252b 6024 /* PREFIX_VEX_0F389F */
c0f3af97 6025 {
592d1631
L
6026 { Bad_Opcode },
6027 { Bad_Opcode },
bf890a93 6028 { "vfnmsub132s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6029 },
6030
592a252b 6031 /* PREFIX_VEX_0F38A6 */
c0f3af97 6032 {
592d1631
L
6033 { Bad_Opcode },
6034 { Bad_Opcode },
bf890a93 6035 { "vfmaddsub213p%XW", { XM, Vex, EXx }, 0 },
592d1631 6036 { Bad_Opcode },
c0f3af97
L
6037 },
6038
592a252b 6039 /* PREFIX_VEX_0F38A7 */
c0f3af97 6040 {
592d1631
L
6041 { Bad_Opcode },
6042 { Bad_Opcode },
bf890a93 6043 { "vfmsubadd213p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6044 },
6045
592a252b 6046 /* PREFIX_VEX_0F38A8 */
c0f3af97 6047 {
592d1631
L
6048 { Bad_Opcode },
6049 { Bad_Opcode },
bf890a93 6050 { "vfmadd213p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6051 },
6052
592a252b 6053 /* PREFIX_VEX_0F38A9 */
c0f3af97 6054 {
592d1631
L
6055 { Bad_Opcode },
6056 { Bad_Opcode },
bf890a93 6057 { "vfmadd213s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6058 },
6059
592a252b 6060 /* PREFIX_VEX_0F38AA */
c0f3af97 6061 {
592d1631
L
6062 { Bad_Opcode },
6063 { Bad_Opcode },
bf890a93 6064 { "vfmsub213p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6065 },
6066
592a252b 6067 /* PREFIX_VEX_0F38AB */
c0f3af97 6068 {
592d1631
L
6069 { Bad_Opcode },
6070 { Bad_Opcode },
bf890a93 6071 { "vfmsub213s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6072 },
6073
592a252b 6074 /* PREFIX_VEX_0F38AC */
c0f3af97 6075 {
592d1631
L
6076 { Bad_Opcode },
6077 { Bad_Opcode },
bf890a93 6078 { "vfnmadd213p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6079 },
6080
592a252b 6081 /* PREFIX_VEX_0F38AD */
c0f3af97 6082 {
592d1631
L
6083 { Bad_Opcode },
6084 { Bad_Opcode },
bf890a93 6085 { "vfnmadd213s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6086 },
6087
592a252b 6088 /* PREFIX_VEX_0F38AE */
c0f3af97 6089 {
592d1631
L
6090 { Bad_Opcode },
6091 { Bad_Opcode },
bf890a93 6092 { "vfnmsub213p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6093 },
6094
592a252b 6095 /* PREFIX_VEX_0F38AF */
c0f3af97 6096 {
592d1631
L
6097 { Bad_Opcode },
6098 { Bad_Opcode },
bf890a93 6099 { "vfnmsub213s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6100 },
6101
592a252b 6102 /* PREFIX_VEX_0F38B6 */
c0f3af97 6103 {
592d1631
L
6104 { Bad_Opcode },
6105 { Bad_Opcode },
bf890a93 6106 { "vfmaddsub231p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6107 },
6108
592a252b 6109 /* PREFIX_VEX_0F38B7 */
c0f3af97 6110 {
592d1631
L
6111 { Bad_Opcode },
6112 { Bad_Opcode },
bf890a93 6113 { "vfmsubadd231p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6114 },
6115
592a252b 6116 /* PREFIX_VEX_0F38B8 */
c0f3af97 6117 {
592d1631
L
6118 { Bad_Opcode },
6119 { Bad_Opcode },
bf890a93 6120 { "vfmadd231p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6121 },
6122
592a252b 6123 /* PREFIX_VEX_0F38B9 */
c0f3af97 6124 {
592d1631
L
6125 { Bad_Opcode },
6126 { Bad_Opcode },
bf890a93 6127 { "vfmadd231s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6128 },
6129
592a252b 6130 /* PREFIX_VEX_0F38BA */
c0f3af97 6131 {
592d1631
L
6132 { Bad_Opcode },
6133 { Bad_Opcode },
bf890a93 6134 { "vfmsub231p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6135 },
6136
592a252b 6137 /* PREFIX_VEX_0F38BB */
c0f3af97 6138 {
592d1631
L
6139 { Bad_Opcode },
6140 { Bad_Opcode },
bf890a93 6141 { "vfmsub231s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6142 },
6143
592a252b 6144 /* PREFIX_VEX_0F38BC */
c0f3af97 6145 {
592d1631
L
6146 { Bad_Opcode },
6147 { Bad_Opcode },
bf890a93 6148 { "vfnmadd231p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6149 },
6150
592a252b 6151 /* PREFIX_VEX_0F38BD */
c0f3af97 6152 {
592d1631
L
6153 { Bad_Opcode },
6154 { Bad_Opcode },
bf890a93 6155 { "vfnmadd231s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6156 },
6157
592a252b 6158 /* PREFIX_VEX_0F38BE */
c0f3af97 6159 {
592d1631
L
6160 { Bad_Opcode },
6161 { Bad_Opcode },
bf890a93 6162 { "vfnmsub231p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6163 },
6164
592a252b 6165 /* PREFIX_VEX_0F38BF */
c0f3af97 6166 {
592d1631
L
6167 { Bad_Opcode },
6168 { Bad_Opcode },
bf890a93 6169 { "vfnmsub231s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6170 },
6171
592a252b 6172 /* PREFIX_VEX_0F38DB */
c0f3af97 6173 {
592d1631
L
6174 { Bad_Opcode },
6175 { Bad_Opcode },
592a252b 6176 { VEX_LEN_TABLE (VEX_LEN_0F38DB_P_2) },
c0f3af97
L
6177 },
6178
592a252b 6179 /* PREFIX_VEX_0F38DC */
c0f3af97 6180 {
592d1631
L
6181 { Bad_Opcode },
6182 { Bad_Opcode },
592a252b 6183 { VEX_LEN_TABLE (VEX_LEN_0F38DC_P_2) },
c0f3af97
L
6184 },
6185
592a252b 6186 /* PREFIX_VEX_0F38DD */
c0f3af97 6187 {
592d1631
L
6188 { Bad_Opcode },
6189 { Bad_Opcode },
592a252b 6190 { VEX_LEN_TABLE (VEX_LEN_0F38DD_P_2) },
c0f3af97
L
6191 },
6192
592a252b 6193 /* PREFIX_VEX_0F38DE */
c0f3af97 6194 {
592d1631
L
6195 { Bad_Opcode },
6196 { Bad_Opcode },
592a252b 6197 { VEX_LEN_TABLE (VEX_LEN_0F38DE_P_2) },
c0f3af97
L
6198 },
6199
592a252b 6200 /* PREFIX_VEX_0F38DF */
c0f3af97 6201 {
592d1631
L
6202 { Bad_Opcode },
6203 { Bad_Opcode },
592a252b 6204 { VEX_LEN_TABLE (VEX_LEN_0F38DF_P_2) },
c0f3af97
L
6205 },
6206
f12dc422
L
6207 /* PREFIX_VEX_0F38F2 */
6208 {
6209 { VEX_LEN_TABLE (VEX_LEN_0F38F2_P_0) },
6210 },
6211
6212 /* PREFIX_VEX_0F38F3_REG_1 */
6213 {
6214 { VEX_LEN_TABLE (VEX_LEN_0F38F3_R_1_P_0) },
6215 },
6216
6217 /* PREFIX_VEX_0F38F3_REG_2 */
6218 {
6219 { VEX_LEN_TABLE (VEX_LEN_0F38F3_R_2_P_0) },
6220 },
6221
6222 /* PREFIX_VEX_0F38F3_REG_3 */
6223 {
6224 { VEX_LEN_TABLE (VEX_LEN_0F38F3_R_3_P_0) },
6225 },
6226
6c30d220
L
6227 /* PREFIX_VEX_0F38F5 */
6228 {
6229 { VEX_LEN_TABLE (VEX_LEN_0F38F5_P_0) },
6230 { VEX_LEN_TABLE (VEX_LEN_0F38F5_P_1) },
6231 { Bad_Opcode },
6232 { VEX_LEN_TABLE (VEX_LEN_0F38F5_P_3) },
6233 },
6234
6235 /* PREFIX_VEX_0F38F6 */
6236 {
6237 { Bad_Opcode },
6238 { Bad_Opcode },
6239 { Bad_Opcode },
6240 { VEX_LEN_TABLE (VEX_LEN_0F38F6_P_3) },
6241 },
6242
f12dc422
L
6243 /* PREFIX_VEX_0F38F7 */
6244 {
6245 { VEX_LEN_TABLE (VEX_LEN_0F38F7_P_0) },
6c30d220
L
6246 { VEX_LEN_TABLE (VEX_LEN_0F38F7_P_1) },
6247 { VEX_LEN_TABLE (VEX_LEN_0F38F7_P_2) },
6248 { VEX_LEN_TABLE (VEX_LEN_0F38F7_P_3) },
6249 },
6250
6251 /* PREFIX_VEX_0F3A00 */
6252 {
6253 { Bad_Opcode },
6254 { Bad_Opcode },
6255 { VEX_LEN_TABLE (VEX_LEN_0F3A00_P_2) },
6256 },
6257
6258 /* PREFIX_VEX_0F3A01 */
6259 {
6260 { Bad_Opcode },
6261 { Bad_Opcode },
6262 { VEX_LEN_TABLE (VEX_LEN_0F3A01_P_2) },
6263 },
6264
6265 /* PREFIX_VEX_0F3A02 */
6266 {
6267 { Bad_Opcode },
6268 { Bad_Opcode },
6269 { VEX_W_TABLE (VEX_W_0F3A02_P_2) },
f12dc422
L
6270 },
6271
592a252b 6272 /* PREFIX_VEX_0F3A04 */
c0f3af97 6273 {
592d1631
L
6274 { Bad_Opcode },
6275 { Bad_Opcode },
592a252b 6276 { VEX_W_TABLE (VEX_W_0F3A04_P_2) },
c0f3af97
L
6277 },
6278
592a252b 6279 /* PREFIX_VEX_0F3A05 */
c0f3af97 6280 {
592d1631
L
6281 { Bad_Opcode },
6282 { Bad_Opcode },
592a252b 6283 { VEX_W_TABLE (VEX_W_0F3A05_P_2) },
c0f3af97
L
6284 },
6285
592a252b 6286 /* PREFIX_VEX_0F3A06 */
c0f3af97 6287 {
592d1631
L
6288 { Bad_Opcode },
6289 { Bad_Opcode },
592a252b 6290 { VEX_LEN_TABLE (VEX_LEN_0F3A06_P_2) },
c0f3af97
L
6291 },
6292
592a252b 6293 /* PREFIX_VEX_0F3A08 */
c0f3af97 6294 {
592d1631
L
6295 { Bad_Opcode },
6296 { Bad_Opcode },
592a252b 6297 { VEX_W_TABLE (VEX_W_0F3A08_P_2) },
c0f3af97
L
6298 },
6299
592a252b 6300 /* PREFIX_VEX_0F3A09 */
c0f3af97 6301 {
592d1631
L
6302 { Bad_Opcode },
6303 { Bad_Opcode },
592a252b 6304 { VEX_W_TABLE (VEX_W_0F3A09_P_2) },
c0f3af97
L
6305 },
6306
592a252b 6307 /* PREFIX_VEX_0F3A0A */
c0f3af97 6308 {
592d1631
L
6309 { Bad_Opcode },
6310 { Bad_Opcode },
592a252b 6311 { VEX_LEN_TABLE (VEX_LEN_0F3A0A_P_2) },
0bfee649
L
6312 },
6313
592a252b 6314 /* PREFIX_VEX_0F3A0B */
0bfee649 6315 {
592d1631
L
6316 { Bad_Opcode },
6317 { Bad_Opcode },
592a252b 6318 { VEX_LEN_TABLE (VEX_LEN_0F3A0B_P_2) },
0bfee649
L
6319 },
6320
592a252b 6321 /* PREFIX_VEX_0F3A0C */
0bfee649 6322 {
592d1631
L
6323 { Bad_Opcode },
6324 { Bad_Opcode },
592a252b 6325 { VEX_W_TABLE (VEX_W_0F3A0C_P_2) },
0bfee649
L
6326 },
6327
592a252b 6328 /* PREFIX_VEX_0F3A0D */
0bfee649 6329 {
592d1631
L
6330 { Bad_Opcode },
6331 { Bad_Opcode },
592a252b 6332 { VEX_W_TABLE (VEX_W_0F3A0D_P_2) },
c0f3af97
L
6333 },
6334
592a252b 6335 /* PREFIX_VEX_0F3A0E */
0bfee649 6336 {
592d1631
L
6337 { Bad_Opcode },
6338 { Bad_Opcode },
6c30d220 6339 { VEX_W_TABLE (VEX_W_0F3A0E_P_2) },
0bfee649
L
6340 },
6341
592a252b 6342 /* PREFIX_VEX_0F3A0F */
0bfee649 6343 {
592d1631
L
6344 { Bad_Opcode },
6345 { Bad_Opcode },
6c30d220 6346 { VEX_W_TABLE (VEX_W_0F3A0F_P_2) },
0bfee649
L
6347 },
6348
592a252b 6349 /* PREFIX_VEX_0F3A14 */
0bfee649 6350 {
592d1631
L
6351 { Bad_Opcode },
6352 { Bad_Opcode },
592a252b 6353 { VEX_LEN_TABLE (VEX_LEN_0F3A14_P_2) },
0bfee649
L
6354 },
6355
592a252b 6356 /* PREFIX_VEX_0F3A15 */
0bfee649 6357 {
592d1631
L
6358 { Bad_Opcode },
6359 { Bad_Opcode },
592a252b 6360 { VEX_LEN_TABLE (VEX_LEN_0F3A15_P_2) },
0bfee649
L
6361 },
6362
592a252b 6363 /* PREFIX_VEX_0F3A16 */
c0f3af97 6364 {
592d1631
L
6365 { Bad_Opcode },
6366 { Bad_Opcode },
592a252b 6367 { VEX_LEN_TABLE (VEX_LEN_0F3A16_P_2) },
c0f3af97
L
6368 },
6369
592a252b 6370 /* PREFIX_VEX_0F3A17 */
c0f3af97 6371 {
592d1631
L
6372 { Bad_Opcode },
6373 { Bad_Opcode },
592a252b 6374 { VEX_LEN_TABLE (VEX_LEN_0F3A17_P_2) },
c0f3af97
L
6375 },
6376
592a252b 6377 /* PREFIX_VEX_0F3A18 */
c0f3af97 6378 {
592d1631
L
6379 { Bad_Opcode },
6380 { Bad_Opcode },
592a252b 6381 { VEX_LEN_TABLE (VEX_LEN_0F3A18_P_2) },
c0f3af97
L
6382 },
6383
592a252b 6384 /* PREFIX_VEX_0F3A19 */
c0f3af97 6385 {
592d1631
L
6386 { Bad_Opcode },
6387 { Bad_Opcode },
592a252b 6388 { VEX_LEN_TABLE (VEX_LEN_0F3A19_P_2) },
c0f3af97
L
6389 },
6390
592a252b 6391 /* PREFIX_VEX_0F3A1D */
c7b8aa3a
L
6392 {
6393 { Bad_Opcode },
6394 { Bad_Opcode },
bf890a93 6395 { "vcvtps2ph", { EXxmmq, XM, Ib }, 0 },
c7b8aa3a
L
6396 },
6397
592a252b 6398 /* PREFIX_VEX_0F3A20 */
c0f3af97 6399 {
592d1631
L
6400 { Bad_Opcode },
6401 { Bad_Opcode },
592a252b 6402 { VEX_LEN_TABLE (VEX_LEN_0F3A20_P_2) },
c0f3af97
L
6403 },
6404
592a252b 6405 /* PREFIX_VEX_0F3A21 */
c0f3af97 6406 {
592d1631
L
6407 { Bad_Opcode },
6408 { Bad_Opcode },
592a252b 6409 { VEX_LEN_TABLE (VEX_LEN_0F3A21_P_2) },
c0f3af97
L
6410 },
6411
592a252b 6412 /* PREFIX_VEX_0F3A22 */
0bfee649 6413 {
592d1631
L
6414 { Bad_Opcode },
6415 { Bad_Opcode },
592a252b 6416 { VEX_LEN_TABLE (VEX_LEN_0F3A22_P_2) },
0bfee649
L
6417 },
6418
43234a1e
L
6419 /* PREFIX_VEX_0F3A30 */
6420 {
6421 { Bad_Opcode },
6422 { Bad_Opcode },
6423 { VEX_LEN_TABLE (VEX_LEN_0F3A30_P_2) },
6424 },
6425
1ba585e8
IT
6426 /* PREFIX_VEX_0F3A31 */
6427 {
6428 { Bad_Opcode },
6429 { Bad_Opcode },
6430 { VEX_LEN_TABLE (VEX_LEN_0F3A31_P_2) },
6431 },
6432
43234a1e
L
6433 /* PREFIX_VEX_0F3A32 */
6434 {
6435 { Bad_Opcode },
6436 { Bad_Opcode },
6437 { VEX_LEN_TABLE (VEX_LEN_0F3A32_P_2) },
6438 },
6439
1ba585e8
IT
6440 /* PREFIX_VEX_0F3A33 */
6441 {
6442 { Bad_Opcode },
6443 { Bad_Opcode },
6444 { VEX_LEN_TABLE (VEX_LEN_0F3A33_P_2) },
6445 },
6446
6c30d220
L
6447 /* PREFIX_VEX_0F3A38 */
6448 {
6449 { Bad_Opcode },
6450 { Bad_Opcode },
6451 { VEX_LEN_TABLE (VEX_LEN_0F3A38_P_2) },
6452 },
6453
6454 /* PREFIX_VEX_0F3A39 */
6455 {
6456 { Bad_Opcode },
6457 { Bad_Opcode },
6458 { VEX_LEN_TABLE (VEX_LEN_0F3A39_P_2) },
6459 },
6460
592a252b 6461 /* PREFIX_VEX_0F3A40 */
c0f3af97 6462 {
592d1631
L
6463 { Bad_Opcode },
6464 { Bad_Opcode },
592a252b 6465 { VEX_W_TABLE (VEX_W_0F3A40_P_2) },
c0f3af97
L
6466 },
6467
592a252b 6468 /* PREFIX_VEX_0F3A41 */
c0f3af97 6469 {
592d1631
L
6470 { Bad_Opcode },
6471 { Bad_Opcode },
592a252b 6472 { VEX_LEN_TABLE (VEX_LEN_0F3A41_P_2) },
c0f3af97
L
6473 },
6474
592a252b 6475 /* PREFIX_VEX_0F3A42 */
c0f3af97 6476 {
592d1631
L
6477 { Bad_Opcode },
6478 { Bad_Opcode },
6c30d220 6479 { VEX_W_TABLE (VEX_W_0F3A42_P_2) },
c0f3af97
L
6480 },
6481
592a252b 6482 /* PREFIX_VEX_0F3A44 */
ce2f5b3c 6483 {
592d1631
L
6484 { Bad_Opcode },
6485 { Bad_Opcode },
592a252b 6486 { VEX_LEN_TABLE (VEX_LEN_0F3A44_P_2) },
ce2f5b3c
L
6487 },
6488
6c30d220
L
6489 /* PREFIX_VEX_0F3A46 */
6490 {
6491 { Bad_Opcode },
6492 { Bad_Opcode },
6493 { VEX_LEN_TABLE (VEX_LEN_0F3A46_P_2) },
6494 },
6495
592a252b 6496 /* PREFIX_VEX_0F3A48 */
a683cc34
SP
6497 {
6498 { Bad_Opcode },
6499 { Bad_Opcode },
592a252b 6500 { VEX_W_TABLE (VEX_W_0F3A48_P_2) },
a683cc34
SP
6501 },
6502
592a252b 6503 /* PREFIX_VEX_0F3A49 */
a683cc34
SP
6504 {
6505 { Bad_Opcode },
6506 { Bad_Opcode },
592a252b 6507 { VEX_W_TABLE (VEX_W_0F3A49_P_2) },
a683cc34
SP
6508 },
6509
592a252b 6510 /* PREFIX_VEX_0F3A4A */
c0f3af97 6511 {
592d1631
L
6512 { Bad_Opcode },
6513 { Bad_Opcode },
592a252b 6514 { VEX_W_TABLE (VEX_W_0F3A4A_P_2) },
c0f3af97
L
6515 },
6516
592a252b 6517 /* PREFIX_VEX_0F3A4B */
c0f3af97 6518 {
592d1631
L
6519 { Bad_Opcode },
6520 { Bad_Opcode },
592a252b 6521 { VEX_W_TABLE (VEX_W_0F3A4B_P_2) },
c0f3af97
L
6522 },
6523
592a252b 6524 /* PREFIX_VEX_0F3A4C */
c0f3af97 6525 {
592d1631
L
6526 { Bad_Opcode },
6527 { Bad_Opcode },
6c30d220 6528 { VEX_W_TABLE (VEX_W_0F3A4C_P_2) },
c0f3af97
L
6529 },
6530
592a252b 6531 /* PREFIX_VEX_0F3A5C */
922d8de8 6532 {
592d1631
L
6533 { Bad_Opcode },
6534 { Bad_Opcode },
bf890a93 6535 { "vfmaddsubps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
922d8de8
DR
6536 },
6537
592a252b 6538 /* PREFIX_VEX_0F3A5D */
922d8de8 6539 {
592d1631
L
6540 { Bad_Opcode },
6541 { Bad_Opcode },
bf890a93 6542 { "vfmaddsubpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
922d8de8
DR
6543 },
6544
592a252b 6545 /* PREFIX_VEX_0F3A5E */
922d8de8 6546 {
592d1631
L
6547 { Bad_Opcode },
6548 { Bad_Opcode },
bf890a93 6549 { "vfmsubaddps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
922d8de8
DR
6550 },
6551
592a252b 6552 /* PREFIX_VEX_0F3A5F */
922d8de8 6553 {
592d1631
L
6554 { Bad_Opcode },
6555 { Bad_Opcode },
bf890a93 6556 { "vfmsubaddpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
922d8de8
DR
6557 },
6558
592a252b 6559 /* PREFIX_VEX_0F3A60 */
c0f3af97 6560 {
592d1631
L
6561 { Bad_Opcode },
6562 { Bad_Opcode },
592a252b 6563 { VEX_LEN_TABLE (VEX_LEN_0F3A60_P_2) },
592d1631 6564 { Bad_Opcode },
c0f3af97
L
6565 },
6566
592a252b 6567 /* PREFIX_VEX_0F3A61 */
c0f3af97 6568 {
592d1631
L
6569 { Bad_Opcode },
6570 { Bad_Opcode },
592a252b 6571 { VEX_LEN_TABLE (VEX_LEN_0F3A61_P_2) },
c0f3af97
L
6572 },
6573
592a252b 6574 /* PREFIX_VEX_0F3A62 */
c0f3af97 6575 {
592d1631
L
6576 { Bad_Opcode },
6577 { Bad_Opcode },
592a252b 6578 { VEX_LEN_TABLE (VEX_LEN_0F3A62_P_2) },
c0f3af97
L
6579 },
6580
592a252b 6581 /* PREFIX_VEX_0F3A63 */
c0f3af97 6582 {
592d1631
L
6583 { Bad_Opcode },
6584 { Bad_Opcode },
592a252b 6585 { VEX_LEN_TABLE (VEX_LEN_0F3A63_P_2) },
c0f3af97 6586 },
a5ff0eb2 6587
592a252b 6588 /* PREFIX_VEX_0F3A68 */
922d8de8 6589 {
592d1631
L
6590 { Bad_Opcode },
6591 { Bad_Opcode },
bf890a93 6592 { "vfmaddps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
922d8de8
DR
6593 },
6594
592a252b 6595 /* PREFIX_VEX_0F3A69 */
922d8de8 6596 {
592d1631
L
6597 { Bad_Opcode },
6598 { Bad_Opcode },
bf890a93 6599 { "vfmaddpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
922d8de8
DR
6600 },
6601
592a252b 6602 /* PREFIX_VEX_0F3A6A */
922d8de8 6603 {
592d1631
L
6604 { Bad_Opcode },
6605 { Bad_Opcode },
592a252b 6606 { VEX_LEN_TABLE (VEX_LEN_0F3A6A_P_2) },
922d8de8
DR
6607 },
6608
592a252b 6609 /* PREFIX_VEX_0F3A6B */
922d8de8 6610 {
592d1631
L
6611 { Bad_Opcode },
6612 { Bad_Opcode },
592a252b 6613 { VEX_LEN_TABLE (VEX_LEN_0F3A6B_P_2) },
922d8de8
DR
6614 },
6615
592a252b 6616 /* PREFIX_VEX_0F3A6C */
922d8de8 6617 {
592d1631
L
6618 { Bad_Opcode },
6619 { Bad_Opcode },
bf890a93 6620 { "vfmsubps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
922d8de8
DR
6621 },
6622
592a252b 6623 /* PREFIX_VEX_0F3A6D */
922d8de8 6624 {
592d1631
L
6625 { Bad_Opcode },
6626 { Bad_Opcode },
bf890a93 6627 { "vfmsubpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
922d8de8
DR
6628 },
6629
592a252b 6630 /* PREFIX_VEX_0F3A6E */
922d8de8 6631 {
592d1631
L
6632 { Bad_Opcode },
6633 { Bad_Opcode },
592a252b 6634 { VEX_LEN_TABLE (VEX_LEN_0F3A6E_P_2) },
922d8de8
DR
6635 },
6636
592a252b 6637 /* PREFIX_VEX_0F3A6F */
922d8de8 6638 {
592d1631
L
6639 { Bad_Opcode },
6640 { Bad_Opcode },
592a252b 6641 { VEX_LEN_TABLE (VEX_LEN_0F3A6F_P_2) },
922d8de8
DR
6642 },
6643
592a252b 6644 /* PREFIX_VEX_0F3A78 */
922d8de8 6645 {
592d1631
L
6646 { Bad_Opcode },
6647 { Bad_Opcode },
bf890a93 6648 { "vfnmaddps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
922d8de8
DR
6649 },
6650
592a252b 6651 /* PREFIX_VEX_0F3A79 */
922d8de8 6652 {
592d1631
L
6653 { Bad_Opcode },
6654 { Bad_Opcode },
bf890a93 6655 { "vfnmaddpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
922d8de8
DR
6656 },
6657
592a252b 6658 /* PREFIX_VEX_0F3A7A */
922d8de8 6659 {
592d1631
L
6660 { Bad_Opcode },
6661 { Bad_Opcode },
592a252b 6662 { VEX_LEN_TABLE (VEX_LEN_0F3A7A_P_2) },
922d8de8
DR
6663 },
6664
592a252b 6665 /* PREFIX_VEX_0F3A7B */
922d8de8 6666 {
592d1631
L
6667 { Bad_Opcode },
6668 { Bad_Opcode },
592a252b 6669 { VEX_LEN_TABLE (VEX_LEN_0F3A7B_P_2) },
922d8de8
DR
6670 },
6671
592a252b 6672 /* PREFIX_VEX_0F3A7C */
922d8de8 6673 {
592d1631
L
6674 { Bad_Opcode },
6675 { Bad_Opcode },
bf890a93 6676 { "vfnmsubps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
592d1631 6677 { Bad_Opcode },
922d8de8
DR
6678 },
6679
592a252b 6680 /* PREFIX_VEX_0F3A7D */
922d8de8 6681 {
592d1631
L
6682 { Bad_Opcode },
6683 { Bad_Opcode },
bf890a93 6684 { "vfnmsubpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
922d8de8
DR
6685 },
6686
592a252b 6687 /* PREFIX_VEX_0F3A7E */
922d8de8 6688 {
592d1631
L
6689 { Bad_Opcode },
6690 { Bad_Opcode },
592a252b 6691 { VEX_LEN_TABLE (VEX_LEN_0F3A7E_P_2) },
922d8de8
DR
6692 },
6693
592a252b 6694 /* PREFIX_VEX_0F3A7F */
922d8de8 6695 {
592d1631
L
6696 { Bad_Opcode },
6697 { Bad_Opcode },
592a252b 6698 { VEX_LEN_TABLE (VEX_LEN_0F3A7F_P_2) },
922d8de8
DR
6699 },
6700
592a252b 6701 /* PREFIX_VEX_0F3ADF */
a5ff0eb2 6702 {
592d1631
L
6703 { Bad_Opcode },
6704 { Bad_Opcode },
592a252b 6705 { VEX_LEN_TABLE (VEX_LEN_0F3ADF_P_2) },
a5ff0eb2 6706 },
6c30d220
L
6707
6708 /* PREFIX_VEX_0F3AF0 */
6709 {
6710 { Bad_Opcode },
6711 { Bad_Opcode },
6712 { Bad_Opcode },
6713 { VEX_LEN_TABLE (VEX_LEN_0F3AF0_P_3) },
6714 },
43234a1e
L
6715
6716#define NEED_PREFIX_TABLE
6717#include "i386-dis-evex.h"
6718#undef NEED_PREFIX_TABLE
c0f3af97
L
6719};
6720
6721static const struct dis386 x86_64_table[][2] = {
6722 /* X86_64_06 */
6723 {
bf890a93 6724 { "pushP", { es }, 0 },
c0f3af97
L
6725 },
6726
6727 /* X86_64_07 */
6728 {
bf890a93 6729 { "popP", { es }, 0 },
c0f3af97
L
6730 },
6731
6732 /* X86_64_0D */
6733 {
bf890a93 6734 { "pushP", { cs }, 0 },
c0f3af97
L
6735 },
6736
6737 /* X86_64_16 */
6738 {
bf890a93 6739 { "pushP", { ss }, 0 },
c0f3af97
L
6740 },
6741
6742 /* X86_64_17 */
6743 {
bf890a93 6744 { "popP", { ss }, 0 },
c0f3af97
L
6745 },
6746
6747 /* X86_64_1E */
6748 {
bf890a93 6749 { "pushP", { ds }, 0 },
c0f3af97
L
6750 },
6751
6752 /* X86_64_1F */
6753 {
bf890a93 6754 { "popP", { ds }, 0 },
c0f3af97
L
6755 },
6756
6757 /* X86_64_27 */
6758 {
bf890a93 6759 { "daa", { XX }, 0 },
c0f3af97
L
6760 },
6761
6762 /* X86_64_2F */
6763 {
bf890a93 6764 { "das", { XX }, 0 },
c0f3af97
L
6765 },
6766
6767 /* X86_64_37 */
6768 {
bf890a93 6769 { "aaa", { XX }, 0 },
c0f3af97
L
6770 },
6771
6772 /* X86_64_3F */
6773 {
bf890a93 6774 { "aas", { XX }, 0 },
c0f3af97
L
6775 },
6776
6777 /* X86_64_60 */
6778 {
bf890a93 6779 { "pushaP", { XX }, 0 },
c0f3af97
L
6780 },
6781
6782 /* X86_64_61 */
6783 {
bf890a93 6784 { "popaP", { XX }, 0 },
c0f3af97
L
6785 },
6786
6787 /* X86_64_62 */
6788 {
6789 { MOD_TABLE (MOD_62_32BIT) },
43234a1e 6790 { EVEX_TABLE (EVEX_0F) },
c0f3af97
L
6791 },
6792
6793 /* X86_64_63 */
6794 {
bf890a93
IT
6795 { "arpl", { Ew, Gw }, 0 },
6796 { "movs{lq|xd}", { Gv, Ed }, 0 },
c0f3af97
L
6797 },
6798
6799 /* X86_64_6D */
6800 {
bf890a93
IT
6801 { "ins{R|}", { Yzr, indirDX }, 0 },
6802 { "ins{G|}", { Yzr, indirDX }, 0 },
c0f3af97
L
6803 },
6804
6805 /* X86_64_6F */
6806 {
bf890a93
IT
6807 { "outs{R|}", { indirDXr, Xz }, 0 },
6808 { "outs{G|}", { indirDXr, Xz }, 0 },
c0f3af97
L
6809 },
6810
6811 /* X86_64_9A */
6812 {
bf890a93 6813 { "Jcall{T|}", { Ap }, 0 },
c0f3af97
L
6814 },
6815
6816 /* X86_64_C4 */
6817 {
6818 { MOD_TABLE (MOD_C4_32BIT) },
6819 { VEX_C4_TABLE (VEX_0F) },
6820 },
6821
6822 /* X86_64_C5 */
6823 {
6824 { MOD_TABLE (MOD_C5_32BIT) },
6825 { VEX_C5_TABLE (VEX_0F) },
6826 },
6827
6828 /* X86_64_CE */
6829 {
bf890a93 6830 { "into", { XX }, 0 },
c0f3af97
L
6831 },
6832
6833 /* X86_64_D4 */
6834 {
bf890a93 6835 { "aam", { Ib }, 0 },
c0f3af97
L
6836 },
6837
6838 /* X86_64_D5 */
6839 {
bf890a93 6840 { "aad", { Ib }, 0 },
c0f3af97
L
6841 },
6842
6843 /* X86_64_EA */
6844 {
bf890a93 6845 { "Jjmp{T|}", { Ap }, 0 },
c0f3af97
L
6846 },
6847
6848 /* X86_64_0F01_REG_0 */
6849 {
bf890a93
IT
6850 { "sgdt{Q|IQ}", { M }, 0 },
6851 { "sgdt", { M }, 0 },
c0f3af97
L
6852 },
6853
6854 /* X86_64_0F01_REG_1 */
6855 {
bf890a93
IT
6856 { "sidt{Q|IQ}", { M }, 0 },
6857 { "sidt", { M }, 0 },
c0f3af97
L
6858 },
6859
6860 /* X86_64_0F01_REG_2 */
6861 {
bf890a93
IT
6862 { "lgdt{Q|Q}", { M }, 0 },
6863 { "lgdt", { M }, 0 },
c0f3af97
L
6864 },
6865
6866 /* X86_64_0F01_REG_3 */
6867 {
bf890a93
IT
6868 { "lidt{Q|Q}", { M }, 0 },
6869 { "lidt", { M }, 0 },
c0f3af97
L
6870 },
6871};
6872
6873static const struct dis386 three_byte_table[][256] = {
c1e679ec
DR
6874
6875 /* THREE_BYTE_0F38 */
c0f3af97
L
6876 {
6877 /* 00 */
507bd325
L
6878 { "pshufb", { MX, EM }, PREFIX_OPCODE },
6879 { "phaddw", { MX, EM }, PREFIX_OPCODE },
6880 { "phaddd", { MX, EM }, PREFIX_OPCODE },
6881 { "phaddsw", { MX, EM }, PREFIX_OPCODE },
6882 { "pmaddubsw", { MX, EM }, PREFIX_OPCODE },
6883 { "phsubw", { MX, EM }, PREFIX_OPCODE },
6884 { "phsubd", { MX, EM }, PREFIX_OPCODE },
6885 { "phsubsw", { MX, EM }, PREFIX_OPCODE },
c0f3af97 6886 /* 08 */
507bd325
L
6887 { "psignb", { MX, EM }, PREFIX_OPCODE },
6888 { "psignw", { MX, EM }, PREFIX_OPCODE },
6889 { "psignd", { MX, EM }, PREFIX_OPCODE },
6890 { "pmulhrsw", { MX, EM }, PREFIX_OPCODE },
592d1631
L
6891 { Bad_Opcode },
6892 { Bad_Opcode },
6893 { Bad_Opcode },
6894 { Bad_Opcode },
f88c9eb0
SP
6895 /* 10 */
6896 { PREFIX_TABLE (PREFIX_0F3810) },
592d1631
L
6897 { Bad_Opcode },
6898 { Bad_Opcode },
6899 { Bad_Opcode },
f88c9eb0
SP
6900 { PREFIX_TABLE (PREFIX_0F3814) },
6901 { PREFIX_TABLE (PREFIX_0F3815) },
592d1631 6902 { Bad_Opcode },
f88c9eb0
SP
6903 { PREFIX_TABLE (PREFIX_0F3817) },
6904 /* 18 */
592d1631
L
6905 { Bad_Opcode },
6906 { Bad_Opcode },
6907 { Bad_Opcode },
6908 { Bad_Opcode },
507bd325
L
6909 { "pabsb", { MX, EM }, PREFIX_OPCODE },
6910 { "pabsw", { MX, EM }, PREFIX_OPCODE },
6911 { "pabsd", { MX, EM }, PREFIX_OPCODE },
592d1631 6912 { Bad_Opcode },
f88c9eb0
SP
6913 /* 20 */
6914 { PREFIX_TABLE (PREFIX_0F3820) },
6915 { PREFIX_TABLE (PREFIX_0F3821) },
6916 { PREFIX_TABLE (PREFIX_0F3822) },
6917 { PREFIX_TABLE (PREFIX_0F3823) },
6918 { PREFIX_TABLE (PREFIX_0F3824) },
6919 { PREFIX_TABLE (PREFIX_0F3825) },
592d1631
L
6920 { Bad_Opcode },
6921 { Bad_Opcode },
f88c9eb0
SP
6922 /* 28 */
6923 { PREFIX_TABLE (PREFIX_0F3828) },
6924 { PREFIX_TABLE (PREFIX_0F3829) },
6925 { PREFIX_TABLE (PREFIX_0F382A) },
6926 { PREFIX_TABLE (PREFIX_0F382B) },
592d1631
L
6927 { Bad_Opcode },
6928 { Bad_Opcode },
6929 { Bad_Opcode },
6930 { Bad_Opcode },
f88c9eb0
SP
6931 /* 30 */
6932 { PREFIX_TABLE (PREFIX_0F3830) },
6933 { PREFIX_TABLE (PREFIX_0F3831) },
6934 { PREFIX_TABLE (PREFIX_0F3832) },
6935 { PREFIX_TABLE (PREFIX_0F3833) },
6936 { PREFIX_TABLE (PREFIX_0F3834) },
6937 { PREFIX_TABLE (PREFIX_0F3835) },
592d1631 6938 { Bad_Opcode },
f88c9eb0
SP
6939 { PREFIX_TABLE (PREFIX_0F3837) },
6940 /* 38 */
6941 { PREFIX_TABLE (PREFIX_0F3838) },
6942 { PREFIX_TABLE (PREFIX_0F3839) },
6943 { PREFIX_TABLE (PREFIX_0F383A) },
6944 { PREFIX_TABLE (PREFIX_0F383B) },
6945 { PREFIX_TABLE (PREFIX_0F383C) },
6946 { PREFIX_TABLE (PREFIX_0F383D) },
6947 { PREFIX_TABLE (PREFIX_0F383E) },
6948 { PREFIX_TABLE (PREFIX_0F383F) },
6949 /* 40 */
6950 { PREFIX_TABLE (PREFIX_0F3840) },
6951 { PREFIX_TABLE (PREFIX_0F3841) },
592d1631
L
6952 { Bad_Opcode },
6953 { Bad_Opcode },
6954 { Bad_Opcode },
6955 { Bad_Opcode },
6956 { Bad_Opcode },
6957 { Bad_Opcode },
f88c9eb0 6958 /* 48 */
592d1631
L
6959 { Bad_Opcode },
6960 { Bad_Opcode },
6961 { Bad_Opcode },
6962 { Bad_Opcode },
6963 { Bad_Opcode },
6964 { Bad_Opcode },
6965 { Bad_Opcode },
6966 { Bad_Opcode },
f88c9eb0 6967 /* 50 */
592d1631
L
6968 { Bad_Opcode },
6969 { Bad_Opcode },
6970 { Bad_Opcode },
6971 { Bad_Opcode },
6972 { Bad_Opcode },
6973 { Bad_Opcode },
6974 { Bad_Opcode },
6975 { Bad_Opcode },
f88c9eb0 6976 /* 58 */
592d1631
L
6977 { Bad_Opcode },
6978 { Bad_Opcode },
6979 { Bad_Opcode },
6980 { Bad_Opcode },
6981 { Bad_Opcode },
6982 { Bad_Opcode },
6983 { Bad_Opcode },
6984 { Bad_Opcode },
f88c9eb0 6985 /* 60 */
592d1631
L
6986 { Bad_Opcode },
6987 { Bad_Opcode },
6988 { Bad_Opcode },
6989 { Bad_Opcode },
6990 { Bad_Opcode },
6991 { Bad_Opcode },
6992 { Bad_Opcode },
6993 { Bad_Opcode },
f88c9eb0 6994 /* 68 */
592d1631
L
6995 { Bad_Opcode },
6996 { Bad_Opcode },
6997 { Bad_Opcode },
6998 { Bad_Opcode },
6999 { Bad_Opcode },
7000 { Bad_Opcode },
7001 { Bad_Opcode },
7002 { Bad_Opcode },
f88c9eb0 7003 /* 70 */
592d1631
L
7004 { Bad_Opcode },
7005 { Bad_Opcode },
7006 { Bad_Opcode },
7007 { Bad_Opcode },
7008 { Bad_Opcode },
7009 { Bad_Opcode },
7010 { Bad_Opcode },
7011 { Bad_Opcode },
f88c9eb0 7012 /* 78 */
592d1631
L
7013 { Bad_Opcode },
7014 { Bad_Opcode },
7015 { Bad_Opcode },
7016 { Bad_Opcode },
7017 { Bad_Opcode },
7018 { Bad_Opcode },
7019 { Bad_Opcode },
7020 { Bad_Opcode },
f88c9eb0
SP
7021 /* 80 */
7022 { PREFIX_TABLE (PREFIX_0F3880) },
7023 { PREFIX_TABLE (PREFIX_0F3881) },
6c30d220 7024 { PREFIX_TABLE (PREFIX_0F3882) },
592d1631
L
7025 { Bad_Opcode },
7026 { Bad_Opcode },
7027 { Bad_Opcode },
7028 { Bad_Opcode },
7029 { Bad_Opcode },
f88c9eb0 7030 /* 88 */
592d1631
L
7031 { Bad_Opcode },
7032 { Bad_Opcode },
7033 { Bad_Opcode },
7034 { Bad_Opcode },
7035 { Bad_Opcode },
7036 { Bad_Opcode },
7037 { Bad_Opcode },
7038 { Bad_Opcode },
f88c9eb0 7039 /* 90 */
592d1631
L
7040 { Bad_Opcode },
7041 { Bad_Opcode },
7042 { Bad_Opcode },
7043 { Bad_Opcode },
7044 { Bad_Opcode },
7045 { Bad_Opcode },
7046 { Bad_Opcode },
7047 { Bad_Opcode },
f88c9eb0 7048 /* 98 */
592d1631
L
7049 { Bad_Opcode },
7050 { Bad_Opcode },
7051 { Bad_Opcode },
7052 { Bad_Opcode },
7053 { Bad_Opcode },
7054 { Bad_Opcode },
7055 { Bad_Opcode },
7056 { Bad_Opcode },
f88c9eb0 7057 /* a0 */
592d1631
L
7058 { Bad_Opcode },
7059 { Bad_Opcode },
7060 { Bad_Opcode },
7061 { Bad_Opcode },
7062 { Bad_Opcode },
7063 { Bad_Opcode },
7064 { Bad_Opcode },
7065 { Bad_Opcode },
f88c9eb0 7066 /* a8 */
592d1631
L
7067 { Bad_Opcode },
7068 { Bad_Opcode },
7069 { Bad_Opcode },
7070 { Bad_Opcode },
7071 { Bad_Opcode },
7072 { Bad_Opcode },
7073 { Bad_Opcode },
7074 { Bad_Opcode },
f88c9eb0 7075 /* b0 */
592d1631
L
7076 { Bad_Opcode },
7077 { Bad_Opcode },
7078 { Bad_Opcode },
7079 { Bad_Opcode },
7080 { Bad_Opcode },
7081 { Bad_Opcode },
7082 { Bad_Opcode },
7083 { Bad_Opcode },
f88c9eb0 7084 /* b8 */
592d1631
L
7085 { Bad_Opcode },
7086 { Bad_Opcode },
7087 { Bad_Opcode },
7088 { Bad_Opcode },
7089 { Bad_Opcode },
7090 { Bad_Opcode },
7091 { Bad_Opcode },
7092 { Bad_Opcode },
f88c9eb0 7093 /* c0 */
592d1631
L
7094 { Bad_Opcode },
7095 { Bad_Opcode },
7096 { Bad_Opcode },
7097 { Bad_Opcode },
7098 { Bad_Opcode },
7099 { Bad_Opcode },
7100 { Bad_Opcode },
7101 { Bad_Opcode },
f88c9eb0 7102 /* c8 */
a0046408
L
7103 { PREFIX_TABLE (PREFIX_0F38C8) },
7104 { PREFIX_TABLE (PREFIX_0F38C9) },
7105 { PREFIX_TABLE (PREFIX_0F38CA) },
7106 { PREFIX_TABLE (PREFIX_0F38CB) },
7107 { PREFIX_TABLE (PREFIX_0F38CC) },
7108 { PREFIX_TABLE (PREFIX_0F38CD) },
592d1631
L
7109 { Bad_Opcode },
7110 { Bad_Opcode },
f88c9eb0 7111 /* d0 */
592d1631
L
7112 { Bad_Opcode },
7113 { Bad_Opcode },
7114 { Bad_Opcode },
7115 { Bad_Opcode },
7116 { Bad_Opcode },
7117 { Bad_Opcode },
7118 { Bad_Opcode },
7119 { Bad_Opcode },
f88c9eb0 7120 /* d8 */
592d1631
L
7121 { Bad_Opcode },
7122 { Bad_Opcode },
7123 { Bad_Opcode },
f88c9eb0
SP
7124 { PREFIX_TABLE (PREFIX_0F38DB) },
7125 { PREFIX_TABLE (PREFIX_0F38DC) },
7126 { PREFIX_TABLE (PREFIX_0F38DD) },
7127 { PREFIX_TABLE (PREFIX_0F38DE) },
7128 { PREFIX_TABLE (PREFIX_0F38DF) },
7129 /* e0 */
592d1631
L
7130 { Bad_Opcode },
7131 { Bad_Opcode },
7132 { Bad_Opcode },
7133 { Bad_Opcode },
7134 { Bad_Opcode },
7135 { Bad_Opcode },
7136 { Bad_Opcode },
7137 { Bad_Opcode },
f88c9eb0 7138 /* e8 */
592d1631
L
7139 { Bad_Opcode },
7140 { Bad_Opcode },
7141 { Bad_Opcode },
7142 { Bad_Opcode },
7143 { Bad_Opcode },
7144 { Bad_Opcode },
7145 { Bad_Opcode },
7146 { Bad_Opcode },
f88c9eb0
SP
7147 /* f0 */
7148 { PREFIX_TABLE (PREFIX_0F38F0) },
7149 { PREFIX_TABLE (PREFIX_0F38F1) },
592d1631
L
7150 { Bad_Opcode },
7151 { Bad_Opcode },
7152 { Bad_Opcode },
7153 { Bad_Opcode },
e2e1fcde 7154 { PREFIX_TABLE (PREFIX_0F38F6) },
592d1631 7155 { Bad_Opcode },
f88c9eb0 7156 /* f8 */
592d1631
L
7157 { Bad_Opcode },
7158 { Bad_Opcode },
7159 { Bad_Opcode },
7160 { Bad_Opcode },
7161 { Bad_Opcode },
7162 { Bad_Opcode },
7163 { Bad_Opcode },
7164 { Bad_Opcode },
f88c9eb0
SP
7165 },
7166 /* THREE_BYTE_0F3A */
7167 {
7168 /* 00 */
592d1631
L
7169 { Bad_Opcode },
7170 { Bad_Opcode },
7171 { Bad_Opcode },
7172 { Bad_Opcode },
7173 { Bad_Opcode },
7174 { Bad_Opcode },
7175 { Bad_Opcode },
7176 { Bad_Opcode },
f88c9eb0
SP
7177 /* 08 */
7178 { PREFIX_TABLE (PREFIX_0F3A08) },
7179 { PREFIX_TABLE (PREFIX_0F3A09) },
7180 { PREFIX_TABLE (PREFIX_0F3A0A) },
7181 { PREFIX_TABLE (PREFIX_0F3A0B) },
7182 { PREFIX_TABLE (PREFIX_0F3A0C) },
7183 { PREFIX_TABLE (PREFIX_0F3A0D) },
7184 { PREFIX_TABLE (PREFIX_0F3A0E) },
507bd325 7185 { "palignr", { MX, EM, Ib }, PREFIX_OPCODE },
f88c9eb0 7186 /* 10 */
592d1631
L
7187 { Bad_Opcode },
7188 { Bad_Opcode },
7189 { Bad_Opcode },
7190 { Bad_Opcode },
f88c9eb0
SP
7191 { PREFIX_TABLE (PREFIX_0F3A14) },
7192 { PREFIX_TABLE (PREFIX_0F3A15) },
7193 { PREFIX_TABLE (PREFIX_0F3A16) },
7194 { PREFIX_TABLE (PREFIX_0F3A17) },
7195 /* 18 */
592d1631
L
7196 { Bad_Opcode },
7197 { Bad_Opcode },
7198 { Bad_Opcode },
7199 { Bad_Opcode },
7200 { Bad_Opcode },
7201 { Bad_Opcode },
7202 { Bad_Opcode },
7203 { Bad_Opcode },
f88c9eb0
SP
7204 /* 20 */
7205 { PREFIX_TABLE (PREFIX_0F3A20) },
7206 { PREFIX_TABLE (PREFIX_0F3A21) },
7207 { PREFIX_TABLE (PREFIX_0F3A22) },
592d1631
L
7208 { Bad_Opcode },
7209 { Bad_Opcode },
7210 { Bad_Opcode },
7211 { Bad_Opcode },
7212 { Bad_Opcode },
f88c9eb0 7213 /* 28 */
592d1631
L
7214 { Bad_Opcode },
7215 { Bad_Opcode },
7216 { Bad_Opcode },
7217 { Bad_Opcode },
7218 { Bad_Opcode },
7219 { Bad_Opcode },
7220 { Bad_Opcode },
7221 { Bad_Opcode },
f88c9eb0 7222 /* 30 */
592d1631
L
7223 { Bad_Opcode },
7224 { Bad_Opcode },
7225 { Bad_Opcode },
7226 { Bad_Opcode },
7227 { Bad_Opcode },
7228 { Bad_Opcode },
7229 { Bad_Opcode },
7230 { Bad_Opcode },
f88c9eb0 7231 /* 38 */
592d1631
L
7232 { Bad_Opcode },
7233 { Bad_Opcode },
7234 { Bad_Opcode },
7235 { Bad_Opcode },
7236 { Bad_Opcode },
7237 { Bad_Opcode },
7238 { Bad_Opcode },
7239 { Bad_Opcode },
f88c9eb0
SP
7240 /* 40 */
7241 { PREFIX_TABLE (PREFIX_0F3A40) },
7242 { PREFIX_TABLE (PREFIX_0F3A41) },
7243 { PREFIX_TABLE (PREFIX_0F3A42) },
592d1631 7244 { Bad_Opcode },
f88c9eb0 7245 { PREFIX_TABLE (PREFIX_0F3A44) },
592d1631
L
7246 { Bad_Opcode },
7247 { Bad_Opcode },
7248 { Bad_Opcode },
f88c9eb0 7249 /* 48 */
592d1631
L
7250 { Bad_Opcode },
7251 { Bad_Opcode },
7252 { Bad_Opcode },
7253 { Bad_Opcode },
7254 { Bad_Opcode },
7255 { Bad_Opcode },
7256 { Bad_Opcode },
7257 { Bad_Opcode },
f88c9eb0 7258 /* 50 */
592d1631
L
7259 { Bad_Opcode },
7260 { Bad_Opcode },
7261 { Bad_Opcode },
7262 { Bad_Opcode },
7263 { Bad_Opcode },
7264 { Bad_Opcode },
7265 { Bad_Opcode },
7266 { Bad_Opcode },
f88c9eb0 7267 /* 58 */
592d1631
L
7268 { Bad_Opcode },
7269 { Bad_Opcode },
7270 { Bad_Opcode },
7271 { Bad_Opcode },
7272 { Bad_Opcode },
7273 { Bad_Opcode },
7274 { Bad_Opcode },
7275 { Bad_Opcode },
f88c9eb0
SP
7276 /* 60 */
7277 { PREFIX_TABLE (PREFIX_0F3A60) },
7278 { PREFIX_TABLE (PREFIX_0F3A61) },
7279 { PREFIX_TABLE (PREFIX_0F3A62) },
7280 { PREFIX_TABLE (PREFIX_0F3A63) },
592d1631
L
7281 { Bad_Opcode },
7282 { Bad_Opcode },
7283 { Bad_Opcode },
7284 { Bad_Opcode },
f88c9eb0 7285 /* 68 */
592d1631
L
7286 { Bad_Opcode },
7287 { Bad_Opcode },
7288 { Bad_Opcode },
7289 { Bad_Opcode },
7290 { Bad_Opcode },
7291 { Bad_Opcode },
7292 { Bad_Opcode },
7293 { Bad_Opcode },
f88c9eb0 7294 /* 70 */
592d1631
L
7295 { Bad_Opcode },
7296 { Bad_Opcode },
7297 { Bad_Opcode },
7298 { Bad_Opcode },
7299 { Bad_Opcode },
7300 { Bad_Opcode },
7301 { Bad_Opcode },
7302 { Bad_Opcode },
f88c9eb0 7303 /* 78 */
592d1631
L
7304 { Bad_Opcode },
7305 { Bad_Opcode },
7306 { Bad_Opcode },
7307 { Bad_Opcode },
7308 { Bad_Opcode },
7309 { Bad_Opcode },
7310 { Bad_Opcode },
7311 { Bad_Opcode },
f88c9eb0 7312 /* 80 */
592d1631
L
7313 { Bad_Opcode },
7314 { Bad_Opcode },
7315 { Bad_Opcode },
7316 { Bad_Opcode },
7317 { Bad_Opcode },
7318 { Bad_Opcode },
7319 { Bad_Opcode },
7320 { Bad_Opcode },
f88c9eb0 7321 /* 88 */
592d1631
L
7322 { Bad_Opcode },
7323 { Bad_Opcode },
7324 { Bad_Opcode },
7325 { Bad_Opcode },
7326 { Bad_Opcode },
7327 { Bad_Opcode },
7328 { Bad_Opcode },
7329 { Bad_Opcode },
f88c9eb0 7330 /* 90 */
592d1631
L
7331 { Bad_Opcode },
7332 { Bad_Opcode },
7333 { Bad_Opcode },
7334 { Bad_Opcode },
7335 { Bad_Opcode },
7336 { Bad_Opcode },
7337 { Bad_Opcode },
7338 { Bad_Opcode },
f88c9eb0 7339 /* 98 */
592d1631
L
7340 { Bad_Opcode },
7341 { Bad_Opcode },
7342 { Bad_Opcode },
7343 { Bad_Opcode },
7344 { Bad_Opcode },
7345 { Bad_Opcode },
7346 { Bad_Opcode },
7347 { Bad_Opcode },
f88c9eb0 7348 /* a0 */
592d1631
L
7349 { Bad_Opcode },
7350 { Bad_Opcode },
7351 { Bad_Opcode },
7352 { Bad_Opcode },
7353 { Bad_Opcode },
7354 { Bad_Opcode },
7355 { Bad_Opcode },
7356 { Bad_Opcode },
f88c9eb0 7357 /* a8 */
592d1631
L
7358 { Bad_Opcode },
7359 { Bad_Opcode },
7360 { Bad_Opcode },
7361 { Bad_Opcode },
7362 { Bad_Opcode },
7363 { Bad_Opcode },
7364 { Bad_Opcode },
7365 { Bad_Opcode },
f88c9eb0 7366 /* b0 */
592d1631
L
7367 { Bad_Opcode },
7368 { Bad_Opcode },
7369 { Bad_Opcode },
7370 { Bad_Opcode },
7371 { Bad_Opcode },
7372 { Bad_Opcode },
7373 { Bad_Opcode },
7374 { Bad_Opcode },
f88c9eb0 7375 /* b8 */
592d1631
L
7376 { Bad_Opcode },
7377 { Bad_Opcode },
7378 { Bad_Opcode },
7379 { Bad_Opcode },
7380 { Bad_Opcode },
7381 { Bad_Opcode },
7382 { Bad_Opcode },
7383 { Bad_Opcode },
f88c9eb0 7384 /* c0 */
592d1631
L
7385 { Bad_Opcode },
7386 { Bad_Opcode },
7387 { Bad_Opcode },
7388 { Bad_Opcode },
7389 { Bad_Opcode },
7390 { Bad_Opcode },
7391 { Bad_Opcode },
7392 { Bad_Opcode },
f88c9eb0 7393 /* c8 */
592d1631
L
7394 { Bad_Opcode },
7395 { Bad_Opcode },
7396 { Bad_Opcode },
7397 { Bad_Opcode },
a0046408 7398 { PREFIX_TABLE (PREFIX_0F3ACC) },
592d1631
L
7399 { Bad_Opcode },
7400 { Bad_Opcode },
7401 { Bad_Opcode },
f88c9eb0 7402 /* d0 */
592d1631
L
7403 { Bad_Opcode },
7404 { Bad_Opcode },
7405 { Bad_Opcode },
7406 { Bad_Opcode },
7407 { Bad_Opcode },
7408 { Bad_Opcode },
7409 { Bad_Opcode },
7410 { Bad_Opcode },
f88c9eb0 7411 /* d8 */
592d1631
L
7412 { Bad_Opcode },
7413 { Bad_Opcode },
7414 { Bad_Opcode },
7415 { Bad_Opcode },
7416 { Bad_Opcode },
7417 { Bad_Opcode },
7418 { Bad_Opcode },
f88c9eb0
SP
7419 { PREFIX_TABLE (PREFIX_0F3ADF) },
7420 /* e0 */
592d1631
L
7421 { Bad_Opcode },
7422 { Bad_Opcode },
7423 { Bad_Opcode },
7424 { Bad_Opcode },
7425 { Bad_Opcode },
7426 { Bad_Opcode },
7427 { Bad_Opcode },
7428 { Bad_Opcode },
f88c9eb0 7429 /* e8 */
592d1631
L
7430 { Bad_Opcode },
7431 { Bad_Opcode },
7432 { Bad_Opcode },
7433 { Bad_Opcode },
7434 { Bad_Opcode },
7435 { Bad_Opcode },
7436 { Bad_Opcode },
7437 { Bad_Opcode },
f88c9eb0 7438 /* f0 */
592d1631
L
7439 { Bad_Opcode },
7440 { Bad_Opcode },
7441 { Bad_Opcode },
7442 { Bad_Opcode },
7443 { Bad_Opcode },
7444 { Bad_Opcode },
7445 { Bad_Opcode },
7446 { Bad_Opcode },
f88c9eb0 7447 /* f8 */
592d1631
L
7448 { Bad_Opcode },
7449 { Bad_Opcode },
7450 { Bad_Opcode },
7451 { Bad_Opcode },
7452 { Bad_Opcode },
7453 { Bad_Opcode },
7454 { Bad_Opcode },
7455 { Bad_Opcode },
f88c9eb0
SP
7456 },
7457
7458 /* THREE_BYTE_0F7A */
7459 {
7460 /* 00 */
592d1631
L
7461 { Bad_Opcode },
7462 { Bad_Opcode },
7463 { Bad_Opcode },
7464 { Bad_Opcode },
7465 { Bad_Opcode },
7466 { Bad_Opcode },
7467 { Bad_Opcode },
7468 { Bad_Opcode },
f88c9eb0 7469 /* 08 */
592d1631
L
7470 { Bad_Opcode },
7471 { Bad_Opcode },
7472 { Bad_Opcode },
7473 { Bad_Opcode },
7474 { Bad_Opcode },
7475 { Bad_Opcode },
7476 { Bad_Opcode },
7477 { Bad_Opcode },
f88c9eb0 7478 /* 10 */
592d1631
L
7479 { Bad_Opcode },
7480 { Bad_Opcode },
7481 { Bad_Opcode },
7482 { Bad_Opcode },
7483 { Bad_Opcode },
7484 { Bad_Opcode },
7485 { Bad_Opcode },
7486 { Bad_Opcode },
f88c9eb0 7487 /* 18 */
592d1631
L
7488 { Bad_Opcode },
7489 { Bad_Opcode },
7490 { Bad_Opcode },
7491 { Bad_Opcode },
7492 { Bad_Opcode },
7493 { Bad_Opcode },
7494 { Bad_Opcode },
7495 { Bad_Opcode },
f88c9eb0 7496 /* 20 */
507bd325 7497 { "ptest", { XX }, PREFIX_OPCODE },
592d1631
L
7498 { Bad_Opcode },
7499 { Bad_Opcode },
7500 { Bad_Opcode },
7501 { Bad_Opcode },
7502 { Bad_Opcode },
7503 { Bad_Opcode },
7504 { Bad_Opcode },
f88c9eb0 7505 /* 28 */
592d1631
L
7506 { Bad_Opcode },
7507 { Bad_Opcode },
7508 { Bad_Opcode },
7509 { Bad_Opcode },
7510 { Bad_Opcode },
7511 { Bad_Opcode },
7512 { Bad_Opcode },
7513 { Bad_Opcode },
f88c9eb0 7514 /* 30 */
592d1631
L
7515 { Bad_Opcode },
7516 { Bad_Opcode },
7517 { Bad_Opcode },
7518 { Bad_Opcode },
7519 { Bad_Opcode },
7520 { Bad_Opcode },
7521 { Bad_Opcode },
7522 { Bad_Opcode },
f88c9eb0 7523 /* 38 */
592d1631
L
7524 { Bad_Opcode },
7525 { Bad_Opcode },
7526 { Bad_Opcode },
7527 { Bad_Opcode },
7528 { Bad_Opcode },
7529 { Bad_Opcode },
7530 { Bad_Opcode },
7531 { Bad_Opcode },
f88c9eb0 7532 /* 40 */
592d1631 7533 { Bad_Opcode },
507bd325
L
7534 { "phaddbw", { XM, EXq }, PREFIX_OPCODE },
7535 { "phaddbd", { XM, EXq }, PREFIX_OPCODE },
7536 { "phaddbq", { XM, EXq }, PREFIX_OPCODE },
592d1631
L
7537 { Bad_Opcode },
7538 { Bad_Opcode },
507bd325
L
7539 { "phaddwd", { XM, EXq }, PREFIX_OPCODE },
7540 { "phaddwq", { XM, EXq }, PREFIX_OPCODE },
f88c9eb0 7541 /* 48 */
592d1631
L
7542 { Bad_Opcode },
7543 { Bad_Opcode },
7544 { Bad_Opcode },
507bd325 7545 { "phadddq", { XM, EXq }, PREFIX_OPCODE },
592d1631
L
7546 { Bad_Opcode },
7547 { Bad_Opcode },
7548 { Bad_Opcode },
7549 { Bad_Opcode },
f88c9eb0 7550 /* 50 */
592d1631 7551 { Bad_Opcode },
507bd325
L
7552 { "phaddubw", { XM, EXq }, PREFIX_OPCODE },
7553 { "phaddubd", { XM, EXq }, PREFIX_OPCODE },
7554 { "phaddubq", { XM, EXq }, PREFIX_OPCODE },
592d1631
L
7555 { Bad_Opcode },
7556 { Bad_Opcode },
507bd325
L
7557 { "phadduwd", { XM, EXq }, PREFIX_OPCODE },
7558 { "phadduwq", { XM, EXq }, PREFIX_OPCODE },
f88c9eb0 7559 /* 58 */
592d1631
L
7560 { Bad_Opcode },
7561 { Bad_Opcode },
7562 { Bad_Opcode },
507bd325 7563 { "phaddudq", { XM, EXq }, PREFIX_OPCODE },
592d1631
L
7564 { Bad_Opcode },
7565 { Bad_Opcode },
7566 { Bad_Opcode },
7567 { Bad_Opcode },
f88c9eb0 7568 /* 60 */
592d1631 7569 { Bad_Opcode },
507bd325
L
7570 { "phsubbw", { XM, EXq }, PREFIX_OPCODE },
7571 { "phsubbd", { XM, EXq }, PREFIX_OPCODE },
7572 { "phsubbq", { XM, EXq }, PREFIX_OPCODE },
592d1631
L
7573 { Bad_Opcode },
7574 { Bad_Opcode },
7575 { Bad_Opcode },
7576 { Bad_Opcode },
4e7d34a6 7577 /* 68 */
592d1631
L
7578 { Bad_Opcode },
7579 { Bad_Opcode },
7580 { Bad_Opcode },
7581 { Bad_Opcode },
7582 { Bad_Opcode },
7583 { Bad_Opcode },
7584 { Bad_Opcode },
7585 { Bad_Opcode },
85f10a01 7586 /* 70 */
592d1631
L
7587 { Bad_Opcode },
7588 { Bad_Opcode },
7589 { Bad_Opcode },
7590 { Bad_Opcode },
7591 { Bad_Opcode },
7592 { Bad_Opcode },
7593 { Bad_Opcode },
7594 { Bad_Opcode },
85f10a01 7595 /* 78 */
592d1631
L
7596 { Bad_Opcode },
7597 { Bad_Opcode },
7598 { Bad_Opcode },
7599 { Bad_Opcode },
7600 { Bad_Opcode },
7601 { Bad_Opcode },
7602 { Bad_Opcode },
7603 { Bad_Opcode },
85f10a01 7604 /* 80 */
592d1631
L
7605 { Bad_Opcode },
7606 { Bad_Opcode },
7607 { Bad_Opcode },
7608 { Bad_Opcode },
7609 { Bad_Opcode },
7610 { Bad_Opcode },
7611 { Bad_Opcode },
7612 { Bad_Opcode },
85f10a01 7613 /* 88 */
592d1631
L
7614 { Bad_Opcode },
7615 { Bad_Opcode },
7616 { Bad_Opcode },
7617 { Bad_Opcode },
7618 { Bad_Opcode },
7619 { Bad_Opcode },
7620 { Bad_Opcode },
7621 { Bad_Opcode },
85f10a01 7622 /* 90 */
592d1631
L
7623 { Bad_Opcode },
7624 { Bad_Opcode },
7625 { Bad_Opcode },
7626 { Bad_Opcode },
7627 { Bad_Opcode },
7628 { Bad_Opcode },
7629 { Bad_Opcode },
7630 { Bad_Opcode },
85f10a01 7631 /* 98 */
592d1631
L
7632 { Bad_Opcode },
7633 { Bad_Opcode },
7634 { Bad_Opcode },
7635 { Bad_Opcode },
7636 { Bad_Opcode },
7637 { Bad_Opcode },
7638 { Bad_Opcode },
7639 { Bad_Opcode },
85f10a01 7640 /* a0 */
592d1631
L
7641 { Bad_Opcode },
7642 { Bad_Opcode },
7643 { Bad_Opcode },
7644 { Bad_Opcode },
7645 { Bad_Opcode },
7646 { Bad_Opcode },
7647 { Bad_Opcode },
7648 { Bad_Opcode },
85f10a01 7649 /* a8 */
592d1631
L
7650 { Bad_Opcode },
7651 { Bad_Opcode },
7652 { Bad_Opcode },
7653 { Bad_Opcode },
7654 { Bad_Opcode },
7655 { Bad_Opcode },
7656 { Bad_Opcode },
7657 { Bad_Opcode },
85f10a01 7658 /* b0 */
592d1631
L
7659 { Bad_Opcode },
7660 { Bad_Opcode },
7661 { Bad_Opcode },
7662 { Bad_Opcode },
7663 { Bad_Opcode },
7664 { Bad_Opcode },
7665 { Bad_Opcode },
7666 { Bad_Opcode },
85f10a01 7667 /* b8 */
592d1631
L
7668 { Bad_Opcode },
7669 { Bad_Opcode },
7670 { Bad_Opcode },
7671 { Bad_Opcode },
7672 { Bad_Opcode },
7673 { Bad_Opcode },
7674 { Bad_Opcode },
7675 { Bad_Opcode },
85f10a01 7676 /* c0 */
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 /* c8 */
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 /* d0 */
592d1631
L
7695 { Bad_Opcode },
7696 { Bad_Opcode },
7697 { Bad_Opcode },
7698 { Bad_Opcode },
7699 { Bad_Opcode },
7700 { Bad_Opcode },
7701 { Bad_Opcode },
7702 { Bad_Opcode },
85f10a01 7703 /* d8 */
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 /* e0 */
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 /* e8 */
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 },
85f10a01 7730 /* f0 */
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 },
85f10a01 7739 /* f8 */
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 },
85f10a01 7748 },
f88c9eb0
SP
7749};
7750
7751static const struct dis386 xop_table[][256] = {
5dd85c99 7752 /* XOP_08 */
85f10a01
MM
7753 {
7754 /* 00 */
592d1631
L
7755 { Bad_Opcode },
7756 { Bad_Opcode },
7757 { Bad_Opcode },
7758 { Bad_Opcode },
7759 { Bad_Opcode },
7760 { Bad_Opcode },
7761 { Bad_Opcode },
7762 { Bad_Opcode },
85f10a01 7763 /* 08 */
592d1631
L
7764 { Bad_Opcode },
7765 { Bad_Opcode },
7766 { Bad_Opcode },
7767 { Bad_Opcode },
7768 { Bad_Opcode },
7769 { Bad_Opcode },
7770 { Bad_Opcode },
7771 { Bad_Opcode },
85f10a01 7772 /* 10 */
3929df09 7773 { Bad_Opcode },
592d1631
L
7774 { Bad_Opcode },
7775 { Bad_Opcode },
7776 { Bad_Opcode },
7777 { Bad_Opcode },
7778 { Bad_Opcode },
7779 { Bad_Opcode },
7780 { Bad_Opcode },
85f10a01 7781 /* 18 */
592d1631
L
7782 { Bad_Opcode },
7783 { Bad_Opcode },
7784 { Bad_Opcode },
7785 { Bad_Opcode },
7786 { Bad_Opcode },
7787 { Bad_Opcode },
7788 { Bad_Opcode },
7789 { Bad_Opcode },
85f10a01 7790 /* 20 */
592d1631
L
7791 { Bad_Opcode },
7792 { Bad_Opcode },
7793 { Bad_Opcode },
7794 { Bad_Opcode },
7795 { Bad_Opcode },
7796 { Bad_Opcode },
7797 { Bad_Opcode },
7798 { Bad_Opcode },
85f10a01 7799 /* 28 */
592d1631
L
7800 { Bad_Opcode },
7801 { Bad_Opcode },
7802 { Bad_Opcode },
7803 { Bad_Opcode },
7804 { Bad_Opcode },
7805 { Bad_Opcode },
7806 { Bad_Opcode },
7807 { Bad_Opcode },
c0f3af97 7808 /* 30 */
592d1631
L
7809 { Bad_Opcode },
7810 { Bad_Opcode },
7811 { Bad_Opcode },
7812 { Bad_Opcode },
7813 { Bad_Opcode },
7814 { Bad_Opcode },
7815 { Bad_Opcode },
7816 { Bad_Opcode },
c0f3af97 7817 /* 38 */
592d1631
L
7818 { Bad_Opcode },
7819 { Bad_Opcode },
7820 { Bad_Opcode },
7821 { Bad_Opcode },
7822 { Bad_Opcode },
7823 { Bad_Opcode },
7824 { Bad_Opcode },
7825 { Bad_Opcode },
c0f3af97 7826 /* 40 */
592d1631
L
7827 { Bad_Opcode },
7828 { Bad_Opcode },
7829 { Bad_Opcode },
7830 { Bad_Opcode },
7831 { Bad_Opcode },
7832 { Bad_Opcode },
7833 { Bad_Opcode },
7834 { Bad_Opcode },
85f10a01 7835 /* 48 */
592d1631
L
7836 { Bad_Opcode },
7837 { Bad_Opcode },
7838 { Bad_Opcode },
7839 { Bad_Opcode },
7840 { Bad_Opcode },
7841 { Bad_Opcode },
7842 { Bad_Opcode },
7843 { Bad_Opcode },
c0f3af97 7844 /* 50 */
592d1631
L
7845 { Bad_Opcode },
7846 { Bad_Opcode },
7847 { Bad_Opcode },
7848 { Bad_Opcode },
7849 { Bad_Opcode },
7850 { Bad_Opcode },
7851 { Bad_Opcode },
7852 { Bad_Opcode },
85f10a01 7853 /* 58 */
592d1631
L
7854 { Bad_Opcode },
7855 { Bad_Opcode },
7856 { Bad_Opcode },
7857 { Bad_Opcode },
7858 { Bad_Opcode },
7859 { Bad_Opcode },
7860 { Bad_Opcode },
7861 { Bad_Opcode },
c1e679ec 7862 /* 60 */
592d1631
L
7863 { Bad_Opcode },
7864 { Bad_Opcode },
7865 { Bad_Opcode },
7866 { Bad_Opcode },
7867 { Bad_Opcode },
7868 { Bad_Opcode },
7869 { Bad_Opcode },
7870 { Bad_Opcode },
c0f3af97 7871 /* 68 */
592d1631
L
7872 { Bad_Opcode },
7873 { Bad_Opcode },
7874 { Bad_Opcode },
7875 { Bad_Opcode },
7876 { Bad_Opcode },
7877 { Bad_Opcode },
7878 { Bad_Opcode },
7879 { Bad_Opcode },
85f10a01 7880 /* 70 */
592d1631
L
7881 { Bad_Opcode },
7882 { Bad_Opcode },
7883 { Bad_Opcode },
7884 { Bad_Opcode },
7885 { Bad_Opcode },
7886 { Bad_Opcode },
7887 { Bad_Opcode },
7888 { Bad_Opcode },
85f10a01 7889 /* 78 */
592d1631
L
7890 { Bad_Opcode },
7891 { Bad_Opcode },
7892 { Bad_Opcode },
7893 { Bad_Opcode },
7894 { Bad_Opcode },
7895 { Bad_Opcode },
7896 { Bad_Opcode },
7897 { Bad_Opcode },
85f10a01 7898 /* 80 */
592d1631
L
7899 { Bad_Opcode },
7900 { Bad_Opcode },
7901 { Bad_Opcode },
7902 { Bad_Opcode },
7903 { Bad_Opcode },
bf890a93
IT
7904 { "vpmacssww", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
7905 { "vpmacsswd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
7906 { "vpmacssdql", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
5dd85c99 7907 /* 88 */
592d1631
L
7908 { Bad_Opcode },
7909 { Bad_Opcode },
7910 { Bad_Opcode },
7911 { Bad_Opcode },
7912 { Bad_Opcode },
7913 { Bad_Opcode },
bf890a93
IT
7914 { "vpmacssdd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
7915 { "vpmacssdqh", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
5dd85c99 7916 /* 90 */
592d1631
L
7917 { Bad_Opcode },
7918 { Bad_Opcode },
7919 { Bad_Opcode },
7920 { Bad_Opcode },
7921 { Bad_Opcode },
bf890a93
IT
7922 { "vpmacsww", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
7923 { "vpmacswd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
7924 { "vpmacsdql", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
5dd85c99 7925 /* 98 */
592d1631
L
7926 { Bad_Opcode },
7927 { Bad_Opcode },
7928 { Bad_Opcode },
7929 { Bad_Opcode },
7930 { Bad_Opcode },
7931 { Bad_Opcode },
bf890a93
IT
7932 { "vpmacsdd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
7933 { "vpmacsdqh", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
5dd85c99 7934 /* a0 */
592d1631
L
7935 { Bad_Opcode },
7936 { Bad_Opcode },
bf890a93
IT
7937 { "vpcmov", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
7938 { "vpperm", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
592d1631
L
7939 { Bad_Opcode },
7940 { Bad_Opcode },
bf890a93 7941 { "vpmadcsswd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
592d1631 7942 { Bad_Opcode },
5dd85c99 7943 /* a8 */
592d1631
L
7944 { Bad_Opcode },
7945 { Bad_Opcode },
7946 { Bad_Opcode },
7947 { Bad_Opcode },
7948 { Bad_Opcode },
7949 { Bad_Opcode },
7950 { Bad_Opcode },
7951 { Bad_Opcode },
5dd85c99 7952 /* b0 */
592d1631
L
7953 { Bad_Opcode },
7954 { Bad_Opcode },
7955 { Bad_Opcode },
7956 { Bad_Opcode },
7957 { Bad_Opcode },
7958 { Bad_Opcode },
bf890a93 7959 { "vpmadcswd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
592d1631 7960 { Bad_Opcode },
5dd85c99 7961 /* b8 */
592d1631
L
7962 { Bad_Opcode },
7963 { Bad_Opcode },
7964 { Bad_Opcode },
7965 { Bad_Opcode },
7966 { Bad_Opcode },
7967 { Bad_Opcode },
7968 { Bad_Opcode },
7969 { Bad_Opcode },
5dd85c99 7970 /* c0 */
bf890a93
IT
7971 { "vprotb", { XM, Vex_2src_1, Ib }, 0 },
7972 { "vprotw", { XM, Vex_2src_1, Ib }, 0 },
7973 { "vprotd", { XM, Vex_2src_1, Ib }, 0 },
7974 { "vprotq", { XM, Vex_2src_1, Ib }, 0 },
592d1631
L
7975 { Bad_Opcode },
7976 { Bad_Opcode },
7977 { Bad_Opcode },
7978 { Bad_Opcode },
5dd85c99 7979 /* c8 */
592d1631
L
7980 { Bad_Opcode },
7981 { Bad_Opcode },
7982 { Bad_Opcode },
7983 { Bad_Opcode },
ff688e1f
L
7984 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_CC) },
7985 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_CD) },
7986 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_CE) },
7987 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_CF) },
5dd85c99 7988 /* d0 */
592d1631
L
7989 { Bad_Opcode },
7990 { Bad_Opcode },
7991 { Bad_Opcode },
7992 { Bad_Opcode },
7993 { Bad_Opcode },
7994 { Bad_Opcode },
7995 { Bad_Opcode },
7996 { Bad_Opcode },
5dd85c99 7997 /* d8 */
592d1631
L
7998 { Bad_Opcode },
7999 { Bad_Opcode },
8000 { Bad_Opcode },
8001 { Bad_Opcode },
8002 { Bad_Opcode },
8003 { Bad_Opcode },
8004 { Bad_Opcode },
8005 { Bad_Opcode },
5dd85c99 8006 /* e0 */
592d1631
L
8007 { Bad_Opcode },
8008 { Bad_Opcode },
8009 { Bad_Opcode },
8010 { Bad_Opcode },
8011 { Bad_Opcode },
8012 { Bad_Opcode },
8013 { Bad_Opcode },
8014 { Bad_Opcode },
5dd85c99 8015 /* e8 */
592d1631
L
8016 { Bad_Opcode },
8017 { Bad_Opcode },
8018 { Bad_Opcode },
8019 { Bad_Opcode },
ff688e1f
L
8020 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_EC) },
8021 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_ED) },
8022 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_EE) },
8023 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_EF) },
5dd85c99 8024 /* f0 */
592d1631
L
8025 { Bad_Opcode },
8026 { Bad_Opcode },
8027 { Bad_Opcode },
8028 { Bad_Opcode },
8029 { Bad_Opcode },
8030 { Bad_Opcode },
8031 { Bad_Opcode },
8032 { Bad_Opcode },
5dd85c99 8033 /* f8 */
592d1631
L
8034 { Bad_Opcode },
8035 { Bad_Opcode },
8036 { Bad_Opcode },
8037 { Bad_Opcode },
8038 { Bad_Opcode },
8039 { Bad_Opcode },
8040 { Bad_Opcode },
8041 { Bad_Opcode },
5dd85c99
SP
8042 },
8043 /* XOP_09 */
8044 {
8045 /* 00 */
592d1631 8046 { Bad_Opcode },
2a2a0f38
QN
8047 { REG_TABLE (REG_XOP_TBM_01) },
8048 { REG_TABLE (REG_XOP_TBM_02) },
592d1631
L
8049 { Bad_Opcode },
8050 { Bad_Opcode },
8051 { Bad_Opcode },
8052 { Bad_Opcode },
8053 { Bad_Opcode },
5dd85c99 8054 /* 08 */
592d1631
L
8055 { Bad_Opcode },
8056 { Bad_Opcode },
8057 { Bad_Opcode },
8058 { Bad_Opcode },
8059 { Bad_Opcode },
8060 { Bad_Opcode },
8061 { Bad_Opcode },
8062 { Bad_Opcode },
5dd85c99 8063 /* 10 */
592d1631
L
8064 { Bad_Opcode },
8065 { Bad_Opcode },
5dd85c99 8066 { REG_TABLE (REG_XOP_LWPCB) },
592d1631
L
8067 { Bad_Opcode },
8068 { Bad_Opcode },
8069 { Bad_Opcode },
8070 { Bad_Opcode },
8071 { Bad_Opcode },
5dd85c99 8072 /* 18 */
592d1631
L
8073 { Bad_Opcode },
8074 { Bad_Opcode },
8075 { Bad_Opcode },
8076 { Bad_Opcode },
8077 { Bad_Opcode },
8078 { Bad_Opcode },
8079 { Bad_Opcode },
8080 { Bad_Opcode },
5dd85c99 8081 /* 20 */
592d1631
L
8082 { Bad_Opcode },
8083 { Bad_Opcode },
8084 { Bad_Opcode },
8085 { Bad_Opcode },
8086 { Bad_Opcode },
8087 { Bad_Opcode },
8088 { Bad_Opcode },
8089 { Bad_Opcode },
5dd85c99 8090 /* 28 */
592d1631
L
8091 { Bad_Opcode },
8092 { Bad_Opcode },
8093 { Bad_Opcode },
8094 { Bad_Opcode },
8095 { Bad_Opcode },
8096 { Bad_Opcode },
8097 { Bad_Opcode },
8098 { Bad_Opcode },
5dd85c99 8099 /* 30 */
592d1631
L
8100 { Bad_Opcode },
8101 { Bad_Opcode },
8102 { Bad_Opcode },
8103 { Bad_Opcode },
8104 { Bad_Opcode },
8105 { Bad_Opcode },
8106 { Bad_Opcode },
8107 { Bad_Opcode },
5dd85c99 8108 /* 38 */
592d1631
L
8109 { Bad_Opcode },
8110 { Bad_Opcode },
8111 { Bad_Opcode },
8112 { Bad_Opcode },
8113 { Bad_Opcode },
8114 { Bad_Opcode },
8115 { Bad_Opcode },
8116 { Bad_Opcode },
5dd85c99 8117 /* 40 */
592d1631
L
8118 { Bad_Opcode },
8119 { Bad_Opcode },
8120 { Bad_Opcode },
8121 { Bad_Opcode },
8122 { Bad_Opcode },
8123 { Bad_Opcode },
8124 { Bad_Opcode },
8125 { Bad_Opcode },
5dd85c99 8126 /* 48 */
592d1631
L
8127 { Bad_Opcode },
8128 { Bad_Opcode },
8129 { Bad_Opcode },
8130 { Bad_Opcode },
8131 { Bad_Opcode },
8132 { Bad_Opcode },
8133 { Bad_Opcode },
8134 { Bad_Opcode },
5dd85c99 8135 /* 50 */
592d1631
L
8136 { Bad_Opcode },
8137 { Bad_Opcode },
8138 { Bad_Opcode },
8139 { Bad_Opcode },
8140 { Bad_Opcode },
8141 { Bad_Opcode },
8142 { Bad_Opcode },
8143 { Bad_Opcode },
5dd85c99 8144 /* 58 */
592d1631
L
8145 { Bad_Opcode },
8146 { Bad_Opcode },
8147 { Bad_Opcode },
8148 { Bad_Opcode },
8149 { Bad_Opcode },
8150 { Bad_Opcode },
8151 { Bad_Opcode },
8152 { Bad_Opcode },
5dd85c99 8153 /* 60 */
592d1631
L
8154 { Bad_Opcode },
8155 { Bad_Opcode },
8156 { Bad_Opcode },
8157 { Bad_Opcode },
8158 { Bad_Opcode },
8159 { Bad_Opcode },
8160 { Bad_Opcode },
8161 { Bad_Opcode },
5dd85c99 8162 /* 68 */
592d1631
L
8163 { Bad_Opcode },
8164 { Bad_Opcode },
8165 { Bad_Opcode },
8166 { Bad_Opcode },
8167 { Bad_Opcode },
8168 { Bad_Opcode },
8169 { Bad_Opcode },
8170 { Bad_Opcode },
5dd85c99 8171 /* 70 */
592d1631
L
8172 { Bad_Opcode },
8173 { Bad_Opcode },
8174 { Bad_Opcode },
8175 { Bad_Opcode },
8176 { Bad_Opcode },
8177 { Bad_Opcode },
8178 { Bad_Opcode },
8179 { Bad_Opcode },
5dd85c99 8180 /* 78 */
592d1631
L
8181 { Bad_Opcode },
8182 { Bad_Opcode },
8183 { Bad_Opcode },
8184 { Bad_Opcode },
8185 { Bad_Opcode },
8186 { Bad_Opcode },
8187 { Bad_Opcode },
8188 { Bad_Opcode },
5dd85c99 8189 /* 80 */
592a252b
L
8190 { VEX_LEN_TABLE (VEX_LEN_0FXOP_09_80) },
8191 { VEX_LEN_TABLE (VEX_LEN_0FXOP_09_81) },
bf890a93
IT
8192 { "vfrczss", { XM, EXd }, 0 },
8193 { "vfrczsd", { XM, EXq }, 0 },
592d1631
L
8194 { Bad_Opcode },
8195 { Bad_Opcode },
8196 { Bad_Opcode },
8197 { Bad_Opcode },
5dd85c99 8198 /* 88 */
592d1631
L
8199 { Bad_Opcode },
8200 { Bad_Opcode },
8201 { Bad_Opcode },
8202 { Bad_Opcode },
8203 { Bad_Opcode },
8204 { Bad_Opcode },
8205 { Bad_Opcode },
8206 { Bad_Opcode },
5dd85c99 8207 /* 90 */
bf890a93
IT
8208 { "vprotb", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8209 { "vprotw", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8210 { "vprotd", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8211 { "vprotq", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8212 { "vpshlb", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8213 { "vpshlw", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8214 { "vpshld", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8215 { "vpshlq", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
5dd85c99 8216 /* 98 */
bf890a93
IT
8217 { "vpshab", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8218 { "vpshaw", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8219 { "vpshad", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8220 { "vpshaq", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
592d1631
L
8221 { Bad_Opcode },
8222 { Bad_Opcode },
8223 { Bad_Opcode },
8224 { Bad_Opcode },
5dd85c99 8225 /* a0 */
592d1631
L
8226 { Bad_Opcode },
8227 { Bad_Opcode },
8228 { Bad_Opcode },
8229 { Bad_Opcode },
8230 { Bad_Opcode },
8231 { Bad_Opcode },
8232 { Bad_Opcode },
8233 { Bad_Opcode },
5dd85c99 8234 /* a8 */
592d1631
L
8235 { Bad_Opcode },
8236 { Bad_Opcode },
8237 { Bad_Opcode },
8238 { Bad_Opcode },
8239 { Bad_Opcode },
8240 { Bad_Opcode },
8241 { Bad_Opcode },
8242 { Bad_Opcode },
5dd85c99 8243 /* b0 */
592d1631
L
8244 { Bad_Opcode },
8245 { Bad_Opcode },
8246 { Bad_Opcode },
8247 { Bad_Opcode },
8248 { Bad_Opcode },
8249 { Bad_Opcode },
8250 { Bad_Opcode },
8251 { Bad_Opcode },
5dd85c99 8252 /* b8 */
592d1631
L
8253 { Bad_Opcode },
8254 { Bad_Opcode },
8255 { Bad_Opcode },
8256 { Bad_Opcode },
8257 { Bad_Opcode },
8258 { Bad_Opcode },
8259 { Bad_Opcode },
8260 { Bad_Opcode },
5dd85c99 8261 /* c0 */
592d1631 8262 { Bad_Opcode },
bf890a93
IT
8263 { "vphaddbw", { XM, EXxmm }, 0 },
8264 { "vphaddbd", { XM, EXxmm }, 0 },
8265 { "vphaddbq", { XM, EXxmm }, 0 },
592d1631
L
8266 { Bad_Opcode },
8267 { Bad_Opcode },
bf890a93
IT
8268 { "vphaddwd", { XM, EXxmm }, 0 },
8269 { "vphaddwq", { XM, EXxmm }, 0 },
5dd85c99 8270 /* c8 */
592d1631
L
8271 { Bad_Opcode },
8272 { Bad_Opcode },
8273 { Bad_Opcode },
bf890a93 8274 { "vphadddq", { XM, EXxmm }, 0 },
592d1631
L
8275 { Bad_Opcode },
8276 { Bad_Opcode },
8277 { Bad_Opcode },
8278 { Bad_Opcode },
5dd85c99 8279 /* d0 */
592d1631 8280 { Bad_Opcode },
bf890a93
IT
8281 { "vphaddubw", { XM, EXxmm }, 0 },
8282 { "vphaddubd", { XM, EXxmm }, 0 },
8283 { "vphaddubq", { XM, EXxmm }, 0 },
592d1631
L
8284 { Bad_Opcode },
8285 { Bad_Opcode },
bf890a93
IT
8286 { "vphadduwd", { XM, EXxmm }, 0 },
8287 { "vphadduwq", { XM, EXxmm }, 0 },
5dd85c99 8288 /* d8 */
592d1631
L
8289 { Bad_Opcode },
8290 { Bad_Opcode },
8291 { Bad_Opcode },
bf890a93 8292 { "vphaddudq", { XM, EXxmm }, 0 },
592d1631
L
8293 { Bad_Opcode },
8294 { Bad_Opcode },
8295 { Bad_Opcode },
8296 { Bad_Opcode },
5dd85c99 8297 /* e0 */
592d1631 8298 { Bad_Opcode },
bf890a93
IT
8299 { "vphsubbw", { XM, EXxmm }, 0 },
8300 { "vphsubwd", { XM, EXxmm }, 0 },
8301 { "vphsubdq", { XM, EXxmm }, 0 },
592d1631
L
8302 { Bad_Opcode },
8303 { Bad_Opcode },
8304 { Bad_Opcode },
8305 { Bad_Opcode },
4e7d34a6 8306 /* e8 */
592d1631
L
8307 { Bad_Opcode },
8308 { Bad_Opcode },
8309 { Bad_Opcode },
8310 { Bad_Opcode },
8311 { Bad_Opcode },
8312 { Bad_Opcode },
8313 { Bad_Opcode },
8314 { Bad_Opcode },
4e7d34a6 8315 /* f0 */
592d1631
L
8316 { Bad_Opcode },
8317 { Bad_Opcode },
8318 { Bad_Opcode },
8319 { Bad_Opcode },
8320 { Bad_Opcode },
8321 { Bad_Opcode },
8322 { Bad_Opcode },
8323 { Bad_Opcode },
4e7d34a6 8324 /* f8 */
592d1631
L
8325 { Bad_Opcode },
8326 { Bad_Opcode },
8327 { Bad_Opcode },
8328 { Bad_Opcode },
8329 { Bad_Opcode },
8330 { Bad_Opcode },
8331 { Bad_Opcode },
8332 { Bad_Opcode },
4e7d34a6 8333 },
f88c9eb0 8334 /* XOP_0A */
4e7d34a6
L
8335 {
8336 /* 00 */
592d1631
L
8337 { Bad_Opcode },
8338 { Bad_Opcode },
8339 { Bad_Opcode },
8340 { Bad_Opcode },
8341 { Bad_Opcode },
8342 { Bad_Opcode },
8343 { Bad_Opcode },
8344 { Bad_Opcode },
4e7d34a6 8345 /* 08 */
592d1631
L
8346 { Bad_Opcode },
8347 { Bad_Opcode },
8348 { Bad_Opcode },
8349 { Bad_Opcode },
8350 { Bad_Opcode },
8351 { Bad_Opcode },
8352 { Bad_Opcode },
8353 { Bad_Opcode },
4e7d34a6 8354 /* 10 */
bf890a93 8355 { "bextr", { Gv, Ev, Iq }, 0 },
592d1631 8356 { Bad_Opcode },
f88c9eb0 8357 { REG_TABLE (REG_XOP_LWP) },
592d1631
L
8358 { Bad_Opcode },
8359 { Bad_Opcode },
8360 { Bad_Opcode },
8361 { Bad_Opcode },
8362 { Bad_Opcode },
4e7d34a6 8363 /* 18 */
592d1631
L
8364 { Bad_Opcode },
8365 { Bad_Opcode },
8366 { Bad_Opcode },
8367 { Bad_Opcode },
8368 { Bad_Opcode },
8369 { Bad_Opcode },
8370 { Bad_Opcode },
8371 { Bad_Opcode },
4e7d34a6 8372 /* 20 */
592d1631
L
8373 { Bad_Opcode },
8374 { Bad_Opcode },
8375 { Bad_Opcode },
8376 { Bad_Opcode },
8377 { Bad_Opcode },
8378 { Bad_Opcode },
8379 { Bad_Opcode },
8380 { Bad_Opcode },
4e7d34a6 8381 /* 28 */
592d1631
L
8382 { Bad_Opcode },
8383 { Bad_Opcode },
8384 { Bad_Opcode },
8385 { Bad_Opcode },
8386 { Bad_Opcode },
8387 { Bad_Opcode },
8388 { Bad_Opcode },
8389 { Bad_Opcode },
4e7d34a6 8390 /* 30 */
592d1631
L
8391 { Bad_Opcode },
8392 { Bad_Opcode },
8393 { Bad_Opcode },
8394 { Bad_Opcode },
8395 { Bad_Opcode },
8396 { Bad_Opcode },
8397 { Bad_Opcode },
8398 { Bad_Opcode },
c0f3af97 8399 /* 38 */
592d1631
L
8400 { Bad_Opcode },
8401 { Bad_Opcode },
8402 { Bad_Opcode },
8403 { Bad_Opcode },
8404 { Bad_Opcode },
8405 { Bad_Opcode },
8406 { Bad_Opcode },
8407 { Bad_Opcode },
c0f3af97 8408 /* 40 */
592d1631
L
8409 { Bad_Opcode },
8410 { Bad_Opcode },
8411 { Bad_Opcode },
8412 { Bad_Opcode },
8413 { Bad_Opcode },
8414 { Bad_Opcode },
8415 { Bad_Opcode },
8416 { Bad_Opcode },
c1e679ec 8417 /* 48 */
592d1631
L
8418 { Bad_Opcode },
8419 { Bad_Opcode },
8420 { Bad_Opcode },
8421 { Bad_Opcode },
8422 { Bad_Opcode },
8423 { Bad_Opcode },
8424 { Bad_Opcode },
8425 { Bad_Opcode },
c1e679ec 8426 /* 50 */
592d1631
L
8427 { Bad_Opcode },
8428 { Bad_Opcode },
8429 { Bad_Opcode },
8430 { Bad_Opcode },
8431 { Bad_Opcode },
8432 { Bad_Opcode },
8433 { Bad_Opcode },
8434 { Bad_Opcode },
4e7d34a6 8435 /* 58 */
592d1631
L
8436 { Bad_Opcode },
8437 { Bad_Opcode },
8438 { Bad_Opcode },
8439 { Bad_Opcode },
8440 { Bad_Opcode },
8441 { Bad_Opcode },
8442 { Bad_Opcode },
8443 { Bad_Opcode },
4e7d34a6 8444 /* 60 */
592d1631
L
8445 { Bad_Opcode },
8446 { Bad_Opcode },
8447 { Bad_Opcode },
8448 { Bad_Opcode },
8449 { Bad_Opcode },
8450 { Bad_Opcode },
8451 { Bad_Opcode },
8452 { Bad_Opcode },
4e7d34a6 8453 /* 68 */
592d1631
L
8454 { Bad_Opcode },
8455 { Bad_Opcode },
8456 { Bad_Opcode },
8457 { Bad_Opcode },
8458 { Bad_Opcode },
8459 { Bad_Opcode },
8460 { Bad_Opcode },
8461 { Bad_Opcode },
4e7d34a6 8462 /* 70 */
592d1631
L
8463 { Bad_Opcode },
8464 { Bad_Opcode },
8465 { Bad_Opcode },
8466 { Bad_Opcode },
8467 { Bad_Opcode },
8468 { Bad_Opcode },
8469 { Bad_Opcode },
8470 { Bad_Opcode },
4e7d34a6 8471 /* 78 */
592d1631
L
8472 { Bad_Opcode },
8473 { Bad_Opcode },
8474 { Bad_Opcode },
8475 { Bad_Opcode },
8476 { Bad_Opcode },
8477 { Bad_Opcode },
8478 { Bad_Opcode },
8479 { Bad_Opcode },
4e7d34a6 8480 /* 80 */
592d1631
L
8481 { Bad_Opcode },
8482 { Bad_Opcode },
8483 { Bad_Opcode },
8484 { Bad_Opcode },
8485 { Bad_Opcode },
8486 { Bad_Opcode },
8487 { Bad_Opcode },
8488 { Bad_Opcode },
4e7d34a6 8489 /* 88 */
592d1631
L
8490 { Bad_Opcode },
8491 { Bad_Opcode },
8492 { Bad_Opcode },
8493 { Bad_Opcode },
8494 { Bad_Opcode },
8495 { Bad_Opcode },
8496 { Bad_Opcode },
8497 { Bad_Opcode },
4e7d34a6 8498 /* 90 */
592d1631
L
8499 { Bad_Opcode },
8500 { Bad_Opcode },
8501 { Bad_Opcode },
8502 { Bad_Opcode },
8503 { Bad_Opcode },
8504 { Bad_Opcode },
8505 { Bad_Opcode },
8506 { Bad_Opcode },
4e7d34a6 8507 /* 98 */
592d1631
L
8508 { Bad_Opcode },
8509 { Bad_Opcode },
8510 { Bad_Opcode },
8511 { Bad_Opcode },
8512 { Bad_Opcode },
8513 { Bad_Opcode },
8514 { Bad_Opcode },
8515 { Bad_Opcode },
4e7d34a6 8516 /* a0 */
592d1631
L
8517 { Bad_Opcode },
8518 { Bad_Opcode },
8519 { Bad_Opcode },
8520 { Bad_Opcode },
8521 { Bad_Opcode },
8522 { Bad_Opcode },
8523 { Bad_Opcode },
8524 { Bad_Opcode },
4e7d34a6 8525 /* a8 */
592d1631
L
8526 { Bad_Opcode },
8527 { Bad_Opcode },
8528 { Bad_Opcode },
8529 { Bad_Opcode },
8530 { Bad_Opcode },
8531 { Bad_Opcode },
8532 { Bad_Opcode },
8533 { Bad_Opcode },
d5d7db8e 8534 /* b0 */
592d1631
L
8535 { Bad_Opcode },
8536 { Bad_Opcode },
8537 { Bad_Opcode },
8538 { Bad_Opcode },
8539 { Bad_Opcode },
8540 { Bad_Opcode },
8541 { Bad_Opcode },
8542 { Bad_Opcode },
85f10a01 8543 /* b8 */
592d1631
L
8544 { Bad_Opcode },
8545 { Bad_Opcode },
8546 { Bad_Opcode },
8547 { Bad_Opcode },
8548 { Bad_Opcode },
8549 { Bad_Opcode },
8550 { Bad_Opcode },
8551 { Bad_Opcode },
85f10a01 8552 /* c0 */
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 /* c8 */
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 },
85f10a01 8570 /* d0 */
592d1631
L
8571 { Bad_Opcode },
8572 { Bad_Opcode },
8573 { Bad_Opcode },
8574 { Bad_Opcode },
8575 { Bad_Opcode },
8576 { Bad_Opcode },
8577 { Bad_Opcode },
8578 { Bad_Opcode },
85f10a01 8579 /* d8 */
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 },
85f10a01 8588 /* e0 */
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 },
85f10a01 8597 /* e8 */
592d1631
L
8598 { Bad_Opcode },
8599 { Bad_Opcode },
8600 { Bad_Opcode },
8601 { Bad_Opcode },
8602 { Bad_Opcode },
8603 { Bad_Opcode },
8604 { Bad_Opcode },
8605 { Bad_Opcode },
85f10a01 8606 /* f0 */
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 },
85f10a01 8615 /* f8 */
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 },
85f10a01 8624 },
c0f3af97
L
8625};
8626
8627static const struct dis386 vex_table[][256] = {
8628 /* VEX_0F */
85f10a01
MM
8629 {
8630 /* 00 */
592d1631
L
8631 { Bad_Opcode },
8632 { Bad_Opcode },
8633 { Bad_Opcode },
8634 { Bad_Opcode },
8635 { Bad_Opcode },
8636 { Bad_Opcode },
8637 { Bad_Opcode },
8638 { Bad_Opcode },
85f10a01 8639 /* 08 */
592d1631
L
8640 { Bad_Opcode },
8641 { Bad_Opcode },
8642 { Bad_Opcode },
8643 { Bad_Opcode },
8644 { Bad_Opcode },
8645 { Bad_Opcode },
8646 { Bad_Opcode },
8647 { Bad_Opcode },
c0f3af97 8648 /* 10 */
592a252b
L
8649 { PREFIX_TABLE (PREFIX_VEX_0F10) },
8650 { PREFIX_TABLE (PREFIX_VEX_0F11) },
8651 { PREFIX_TABLE (PREFIX_VEX_0F12) },
8652 { MOD_TABLE (MOD_VEX_0F13) },
8653 { VEX_W_TABLE (VEX_W_0F14) },
8654 { VEX_W_TABLE (VEX_W_0F15) },
8655 { PREFIX_TABLE (PREFIX_VEX_0F16) },
8656 { MOD_TABLE (MOD_VEX_0F17) },
c0f3af97 8657 /* 18 */
592d1631
L
8658 { Bad_Opcode },
8659 { Bad_Opcode },
8660 { Bad_Opcode },
8661 { Bad_Opcode },
8662 { Bad_Opcode },
8663 { Bad_Opcode },
8664 { Bad_Opcode },
8665 { Bad_Opcode },
c0f3af97 8666 /* 20 */
592d1631
L
8667 { Bad_Opcode },
8668 { Bad_Opcode },
8669 { Bad_Opcode },
8670 { Bad_Opcode },
8671 { Bad_Opcode },
8672 { Bad_Opcode },
8673 { Bad_Opcode },
8674 { Bad_Opcode },
c0f3af97 8675 /* 28 */
592a252b
L
8676 { VEX_W_TABLE (VEX_W_0F28) },
8677 { VEX_W_TABLE (VEX_W_0F29) },
8678 { PREFIX_TABLE (PREFIX_VEX_0F2A) },
8679 { MOD_TABLE (MOD_VEX_0F2B) },
8680 { PREFIX_TABLE (PREFIX_VEX_0F2C) },
8681 { PREFIX_TABLE (PREFIX_VEX_0F2D) },
8682 { PREFIX_TABLE (PREFIX_VEX_0F2E) },
8683 { PREFIX_TABLE (PREFIX_VEX_0F2F) },
85f10a01 8684 /* 30 */
592d1631
L
8685 { Bad_Opcode },
8686 { Bad_Opcode },
8687 { Bad_Opcode },
8688 { Bad_Opcode },
8689 { Bad_Opcode },
8690 { Bad_Opcode },
8691 { Bad_Opcode },
8692 { Bad_Opcode },
4e7d34a6 8693 /* 38 */
592d1631
L
8694 { Bad_Opcode },
8695 { Bad_Opcode },
8696 { Bad_Opcode },
8697 { Bad_Opcode },
8698 { Bad_Opcode },
8699 { Bad_Opcode },
8700 { Bad_Opcode },
8701 { Bad_Opcode },
d5d7db8e 8702 /* 40 */
592d1631 8703 { Bad_Opcode },
43234a1e
L
8704 { PREFIX_TABLE (PREFIX_VEX_0F41) },
8705 { PREFIX_TABLE (PREFIX_VEX_0F42) },
592d1631 8706 { Bad_Opcode },
43234a1e
L
8707 { PREFIX_TABLE (PREFIX_VEX_0F44) },
8708 { PREFIX_TABLE (PREFIX_VEX_0F45) },
8709 { PREFIX_TABLE (PREFIX_VEX_0F46) },
8710 { PREFIX_TABLE (PREFIX_VEX_0F47) },
85f10a01 8711 /* 48 */
592d1631
L
8712 { Bad_Opcode },
8713 { Bad_Opcode },
1ba585e8 8714 { PREFIX_TABLE (PREFIX_VEX_0F4A) },
43234a1e 8715 { PREFIX_TABLE (PREFIX_VEX_0F4B) },
592d1631
L
8716 { Bad_Opcode },
8717 { Bad_Opcode },
8718 { Bad_Opcode },
8719 { Bad_Opcode },
d5d7db8e 8720 /* 50 */
592a252b
L
8721 { MOD_TABLE (MOD_VEX_0F50) },
8722 { PREFIX_TABLE (PREFIX_VEX_0F51) },
8723 { PREFIX_TABLE (PREFIX_VEX_0F52) },
8724 { PREFIX_TABLE (PREFIX_VEX_0F53) },
bf890a93
IT
8725 { "vandpX", { XM, Vex, EXx }, 0 },
8726 { "vandnpX", { XM, Vex, EXx }, 0 },
8727 { "vorpX", { XM, Vex, EXx }, 0 },
8728 { "vxorpX", { XM, Vex, EXx }, 0 },
c0f3af97 8729 /* 58 */
592a252b
L
8730 { PREFIX_TABLE (PREFIX_VEX_0F58) },
8731 { PREFIX_TABLE (PREFIX_VEX_0F59) },
8732 { PREFIX_TABLE (PREFIX_VEX_0F5A) },
8733 { PREFIX_TABLE (PREFIX_VEX_0F5B) },
8734 { PREFIX_TABLE (PREFIX_VEX_0F5C) },
8735 { PREFIX_TABLE (PREFIX_VEX_0F5D) },
8736 { PREFIX_TABLE (PREFIX_VEX_0F5E) },
8737 { PREFIX_TABLE (PREFIX_VEX_0F5F) },
c0f3af97 8738 /* 60 */
592a252b
L
8739 { PREFIX_TABLE (PREFIX_VEX_0F60) },
8740 { PREFIX_TABLE (PREFIX_VEX_0F61) },
8741 { PREFIX_TABLE (PREFIX_VEX_0F62) },
8742 { PREFIX_TABLE (PREFIX_VEX_0F63) },
8743 { PREFIX_TABLE (PREFIX_VEX_0F64) },
8744 { PREFIX_TABLE (PREFIX_VEX_0F65) },
8745 { PREFIX_TABLE (PREFIX_VEX_0F66) },
8746 { PREFIX_TABLE (PREFIX_VEX_0F67) },
c0f3af97 8747 /* 68 */
592a252b
L
8748 { PREFIX_TABLE (PREFIX_VEX_0F68) },
8749 { PREFIX_TABLE (PREFIX_VEX_0F69) },
8750 { PREFIX_TABLE (PREFIX_VEX_0F6A) },
8751 { PREFIX_TABLE (PREFIX_VEX_0F6B) },
8752 { PREFIX_TABLE (PREFIX_VEX_0F6C) },
8753 { PREFIX_TABLE (PREFIX_VEX_0F6D) },
8754 { PREFIX_TABLE (PREFIX_VEX_0F6E) },
8755 { PREFIX_TABLE (PREFIX_VEX_0F6F) },
c0f3af97 8756 /* 70 */
592a252b
L
8757 { PREFIX_TABLE (PREFIX_VEX_0F70) },
8758 { REG_TABLE (REG_VEX_0F71) },
8759 { REG_TABLE (REG_VEX_0F72) },
8760 { REG_TABLE (REG_VEX_0F73) },
8761 { PREFIX_TABLE (PREFIX_VEX_0F74) },
8762 { PREFIX_TABLE (PREFIX_VEX_0F75) },
8763 { PREFIX_TABLE (PREFIX_VEX_0F76) },
8764 { PREFIX_TABLE (PREFIX_VEX_0F77) },
c0f3af97 8765 /* 78 */
592d1631
L
8766 { Bad_Opcode },
8767 { Bad_Opcode },
8768 { Bad_Opcode },
8769 { Bad_Opcode },
592a252b
L
8770 { PREFIX_TABLE (PREFIX_VEX_0F7C) },
8771 { PREFIX_TABLE (PREFIX_VEX_0F7D) },
8772 { PREFIX_TABLE (PREFIX_VEX_0F7E) },
8773 { PREFIX_TABLE (PREFIX_VEX_0F7F) },
c0f3af97 8774 /* 80 */
592d1631
L
8775 { Bad_Opcode },
8776 { Bad_Opcode },
8777 { Bad_Opcode },
8778 { Bad_Opcode },
8779 { Bad_Opcode },
8780 { Bad_Opcode },
8781 { Bad_Opcode },
8782 { Bad_Opcode },
c0f3af97 8783 /* 88 */
592d1631
L
8784 { Bad_Opcode },
8785 { Bad_Opcode },
8786 { Bad_Opcode },
8787 { Bad_Opcode },
8788 { Bad_Opcode },
8789 { Bad_Opcode },
8790 { Bad_Opcode },
8791 { Bad_Opcode },
c0f3af97 8792 /* 90 */
43234a1e
L
8793 { PREFIX_TABLE (PREFIX_VEX_0F90) },
8794 { PREFIX_TABLE (PREFIX_VEX_0F91) },
8795 { PREFIX_TABLE (PREFIX_VEX_0F92) },
8796 { PREFIX_TABLE (PREFIX_VEX_0F93) },
592d1631
L
8797 { Bad_Opcode },
8798 { Bad_Opcode },
8799 { Bad_Opcode },
8800 { Bad_Opcode },
c0f3af97 8801 /* 98 */
43234a1e 8802 { PREFIX_TABLE (PREFIX_VEX_0F98) },
1ba585e8 8803 { PREFIX_TABLE (PREFIX_VEX_0F99) },
592d1631
L
8804 { Bad_Opcode },
8805 { Bad_Opcode },
8806 { Bad_Opcode },
8807 { Bad_Opcode },
8808 { Bad_Opcode },
8809 { Bad_Opcode },
c0f3af97 8810 /* a0 */
592d1631
L
8811 { Bad_Opcode },
8812 { Bad_Opcode },
8813 { Bad_Opcode },
8814 { Bad_Opcode },
8815 { Bad_Opcode },
8816 { Bad_Opcode },
8817 { Bad_Opcode },
8818 { Bad_Opcode },
c0f3af97 8819 /* a8 */
592d1631
L
8820 { Bad_Opcode },
8821 { Bad_Opcode },
8822 { Bad_Opcode },
8823 { Bad_Opcode },
8824 { Bad_Opcode },
8825 { Bad_Opcode },
592a252b 8826 { REG_TABLE (REG_VEX_0FAE) },
592d1631 8827 { Bad_Opcode },
c0f3af97 8828 /* b0 */
592d1631
L
8829 { Bad_Opcode },
8830 { Bad_Opcode },
8831 { Bad_Opcode },
8832 { Bad_Opcode },
8833 { Bad_Opcode },
8834 { Bad_Opcode },
8835 { Bad_Opcode },
8836 { Bad_Opcode },
c0f3af97 8837 /* b8 */
592d1631
L
8838 { Bad_Opcode },
8839 { Bad_Opcode },
8840 { Bad_Opcode },
8841 { Bad_Opcode },
8842 { Bad_Opcode },
8843 { Bad_Opcode },
8844 { Bad_Opcode },
8845 { Bad_Opcode },
c0f3af97 8846 /* c0 */
592d1631
L
8847 { Bad_Opcode },
8848 { Bad_Opcode },
592a252b 8849 { PREFIX_TABLE (PREFIX_VEX_0FC2) },
592d1631 8850 { Bad_Opcode },
592a252b
L
8851 { PREFIX_TABLE (PREFIX_VEX_0FC4) },
8852 { PREFIX_TABLE (PREFIX_VEX_0FC5) },
bf890a93 8853 { "vshufpX", { XM, Vex, EXx, Ib }, 0 },
592d1631 8854 { Bad_Opcode },
c0f3af97 8855 /* c8 */
592d1631
L
8856 { Bad_Opcode },
8857 { Bad_Opcode },
8858 { Bad_Opcode },
8859 { Bad_Opcode },
8860 { Bad_Opcode },
8861 { Bad_Opcode },
8862 { Bad_Opcode },
8863 { Bad_Opcode },
c0f3af97 8864 /* d0 */
592a252b
L
8865 { PREFIX_TABLE (PREFIX_VEX_0FD0) },
8866 { PREFIX_TABLE (PREFIX_VEX_0FD1) },
8867 { PREFIX_TABLE (PREFIX_VEX_0FD2) },
8868 { PREFIX_TABLE (PREFIX_VEX_0FD3) },
8869 { PREFIX_TABLE (PREFIX_VEX_0FD4) },
8870 { PREFIX_TABLE (PREFIX_VEX_0FD5) },
8871 { PREFIX_TABLE (PREFIX_VEX_0FD6) },
8872 { PREFIX_TABLE (PREFIX_VEX_0FD7) },
c0f3af97 8873 /* d8 */
592a252b
L
8874 { PREFIX_TABLE (PREFIX_VEX_0FD8) },
8875 { PREFIX_TABLE (PREFIX_VEX_0FD9) },
8876 { PREFIX_TABLE (PREFIX_VEX_0FDA) },
8877 { PREFIX_TABLE (PREFIX_VEX_0FDB) },
8878 { PREFIX_TABLE (PREFIX_VEX_0FDC) },
8879 { PREFIX_TABLE (PREFIX_VEX_0FDD) },
8880 { PREFIX_TABLE (PREFIX_VEX_0FDE) },
8881 { PREFIX_TABLE (PREFIX_VEX_0FDF) },
c0f3af97 8882 /* e0 */
592a252b
L
8883 { PREFIX_TABLE (PREFIX_VEX_0FE0) },
8884 { PREFIX_TABLE (PREFIX_VEX_0FE1) },
8885 { PREFIX_TABLE (PREFIX_VEX_0FE2) },
8886 { PREFIX_TABLE (PREFIX_VEX_0FE3) },
8887 { PREFIX_TABLE (PREFIX_VEX_0FE4) },
8888 { PREFIX_TABLE (PREFIX_VEX_0FE5) },
8889 { PREFIX_TABLE (PREFIX_VEX_0FE6) },
8890 { PREFIX_TABLE (PREFIX_VEX_0FE7) },
c0f3af97 8891 /* e8 */
592a252b
L
8892 { PREFIX_TABLE (PREFIX_VEX_0FE8) },
8893 { PREFIX_TABLE (PREFIX_VEX_0FE9) },
8894 { PREFIX_TABLE (PREFIX_VEX_0FEA) },
8895 { PREFIX_TABLE (PREFIX_VEX_0FEB) },
8896 { PREFIX_TABLE (PREFIX_VEX_0FEC) },
8897 { PREFIX_TABLE (PREFIX_VEX_0FED) },
8898 { PREFIX_TABLE (PREFIX_VEX_0FEE) },
8899 { PREFIX_TABLE (PREFIX_VEX_0FEF) },
c0f3af97 8900 /* f0 */
592a252b
L
8901 { PREFIX_TABLE (PREFIX_VEX_0FF0) },
8902 { PREFIX_TABLE (PREFIX_VEX_0FF1) },
8903 { PREFIX_TABLE (PREFIX_VEX_0FF2) },
8904 { PREFIX_TABLE (PREFIX_VEX_0FF3) },
8905 { PREFIX_TABLE (PREFIX_VEX_0FF4) },
8906 { PREFIX_TABLE (PREFIX_VEX_0FF5) },
8907 { PREFIX_TABLE (PREFIX_VEX_0FF6) },
8908 { PREFIX_TABLE (PREFIX_VEX_0FF7) },
c0f3af97 8909 /* f8 */
592a252b
L
8910 { PREFIX_TABLE (PREFIX_VEX_0FF8) },
8911 { PREFIX_TABLE (PREFIX_VEX_0FF9) },
8912 { PREFIX_TABLE (PREFIX_VEX_0FFA) },
8913 { PREFIX_TABLE (PREFIX_VEX_0FFB) },
8914 { PREFIX_TABLE (PREFIX_VEX_0FFC) },
8915 { PREFIX_TABLE (PREFIX_VEX_0FFD) },
8916 { PREFIX_TABLE (PREFIX_VEX_0FFE) },
592d1631 8917 { Bad_Opcode },
c0f3af97
L
8918 },
8919 /* VEX_0F38 */
8920 {
8921 /* 00 */
592a252b
L
8922 { PREFIX_TABLE (PREFIX_VEX_0F3800) },
8923 { PREFIX_TABLE (PREFIX_VEX_0F3801) },
8924 { PREFIX_TABLE (PREFIX_VEX_0F3802) },
8925 { PREFIX_TABLE (PREFIX_VEX_0F3803) },
8926 { PREFIX_TABLE (PREFIX_VEX_0F3804) },
8927 { PREFIX_TABLE (PREFIX_VEX_0F3805) },
8928 { PREFIX_TABLE (PREFIX_VEX_0F3806) },
8929 { PREFIX_TABLE (PREFIX_VEX_0F3807) },
c0f3af97 8930 /* 08 */
592a252b
L
8931 { PREFIX_TABLE (PREFIX_VEX_0F3808) },
8932 { PREFIX_TABLE (PREFIX_VEX_0F3809) },
8933 { PREFIX_TABLE (PREFIX_VEX_0F380A) },
8934 { PREFIX_TABLE (PREFIX_VEX_0F380B) },
8935 { PREFIX_TABLE (PREFIX_VEX_0F380C) },
8936 { PREFIX_TABLE (PREFIX_VEX_0F380D) },
8937 { PREFIX_TABLE (PREFIX_VEX_0F380E) },
8938 { PREFIX_TABLE (PREFIX_VEX_0F380F) },
c0f3af97 8939 /* 10 */
592d1631
L
8940 { Bad_Opcode },
8941 { Bad_Opcode },
8942 { Bad_Opcode },
592a252b 8943 { PREFIX_TABLE (PREFIX_VEX_0F3813) },
592d1631
L
8944 { Bad_Opcode },
8945 { Bad_Opcode },
6c30d220 8946 { PREFIX_TABLE (PREFIX_VEX_0F3816) },
592a252b 8947 { PREFIX_TABLE (PREFIX_VEX_0F3817) },
c0f3af97 8948 /* 18 */
592a252b
L
8949 { PREFIX_TABLE (PREFIX_VEX_0F3818) },
8950 { PREFIX_TABLE (PREFIX_VEX_0F3819) },
8951 { PREFIX_TABLE (PREFIX_VEX_0F381A) },
592d1631 8952 { Bad_Opcode },
592a252b
L
8953 { PREFIX_TABLE (PREFIX_VEX_0F381C) },
8954 { PREFIX_TABLE (PREFIX_VEX_0F381D) },
8955 { PREFIX_TABLE (PREFIX_VEX_0F381E) },
592d1631 8956 { Bad_Opcode },
c0f3af97 8957 /* 20 */
592a252b
L
8958 { PREFIX_TABLE (PREFIX_VEX_0F3820) },
8959 { PREFIX_TABLE (PREFIX_VEX_0F3821) },
8960 { PREFIX_TABLE (PREFIX_VEX_0F3822) },
8961 { PREFIX_TABLE (PREFIX_VEX_0F3823) },
8962 { PREFIX_TABLE (PREFIX_VEX_0F3824) },
8963 { PREFIX_TABLE (PREFIX_VEX_0F3825) },
592d1631
L
8964 { Bad_Opcode },
8965 { Bad_Opcode },
c0f3af97 8966 /* 28 */
592a252b
L
8967 { PREFIX_TABLE (PREFIX_VEX_0F3828) },
8968 { PREFIX_TABLE (PREFIX_VEX_0F3829) },
8969 { PREFIX_TABLE (PREFIX_VEX_0F382A) },
8970 { PREFIX_TABLE (PREFIX_VEX_0F382B) },
8971 { PREFIX_TABLE (PREFIX_VEX_0F382C) },
8972 { PREFIX_TABLE (PREFIX_VEX_0F382D) },
8973 { PREFIX_TABLE (PREFIX_VEX_0F382E) },
8974 { PREFIX_TABLE (PREFIX_VEX_0F382F) },
c0f3af97 8975 /* 30 */
592a252b
L
8976 { PREFIX_TABLE (PREFIX_VEX_0F3830) },
8977 { PREFIX_TABLE (PREFIX_VEX_0F3831) },
8978 { PREFIX_TABLE (PREFIX_VEX_0F3832) },
8979 { PREFIX_TABLE (PREFIX_VEX_0F3833) },
8980 { PREFIX_TABLE (PREFIX_VEX_0F3834) },
8981 { PREFIX_TABLE (PREFIX_VEX_0F3835) },
6c30d220 8982 { PREFIX_TABLE (PREFIX_VEX_0F3836) },
592a252b 8983 { PREFIX_TABLE (PREFIX_VEX_0F3837) },
c0f3af97 8984 /* 38 */
592a252b
L
8985 { PREFIX_TABLE (PREFIX_VEX_0F3838) },
8986 { PREFIX_TABLE (PREFIX_VEX_0F3839) },
8987 { PREFIX_TABLE (PREFIX_VEX_0F383A) },
8988 { PREFIX_TABLE (PREFIX_VEX_0F383B) },
8989 { PREFIX_TABLE (PREFIX_VEX_0F383C) },
8990 { PREFIX_TABLE (PREFIX_VEX_0F383D) },
8991 { PREFIX_TABLE (PREFIX_VEX_0F383E) },
8992 { PREFIX_TABLE (PREFIX_VEX_0F383F) },
c0f3af97 8993 /* 40 */
592a252b
L
8994 { PREFIX_TABLE (PREFIX_VEX_0F3840) },
8995 { PREFIX_TABLE (PREFIX_VEX_0F3841) },
592d1631
L
8996 { Bad_Opcode },
8997 { Bad_Opcode },
8998 { Bad_Opcode },
6c30d220
L
8999 { PREFIX_TABLE (PREFIX_VEX_0F3845) },
9000 { PREFIX_TABLE (PREFIX_VEX_0F3846) },
9001 { PREFIX_TABLE (PREFIX_VEX_0F3847) },
c0f3af97 9002 /* 48 */
592d1631
L
9003 { Bad_Opcode },
9004 { Bad_Opcode },
9005 { Bad_Opcode },
9006 { Bad_Opcode },
9007 { Bad_Opcode },
9008 { Bad_Opcode },
9009 { Bad_Opcode },
9010 { Bad_Opcode },
c0f3af97 9011 /* 50 */
592d1631
L
9012 { Bad_Opcode },
9013 { Bad_Opcode },
9014 { Bad_Opcode },
9015 { Bad_Opcode },
9016 { Bad_Opcode },
9017 { Bad_Opcode },
9018 { Bad_Opcode },
9019 { Bad_Opcode },
c0f3af97 9020 /* 58 */
6c30d220
L
9021 { PREFIX_TABLE (PREFIX_VEX_0F3858) },
9022 { PREFIX_TABLE (PREFIX_VEX_0F3859) },
9023 { PREFIX_TABLE (PREFIX_VEX_0F385A) },
592d1631
L
9024 { Bad_Opcode },
9025 { Bad_Opcode },
9026 { Bad_Opcode },
9027 { Bad_Opcode },
9028 { Bad_Opcode },
c0f3af97 9029 /* 60 */
592d1631
L
9030 { Bad_Opcode },
9031 { Bad_Opcode },
9032 { Bad_Opcode },
9033 { Bad_Opcode },
9034 { Bad_Opcode },
9035 { Bad_Opcode },
9036 { Bad_Opcode },
9037 { Bad_Opcode },
c0f3af97 9038 /* 68 */
592d1631
L
9039 { Bad_Opcode },
9040 { Bad_Opcode },
9041 { Bad_Opcode },
9042 { Bad_Opcode },
9043 { Bad_Opcode },
9044 { Bad_Opcode },
9045 { Bad_Opcode },
9046 { Bad_Opcode },
c0f3af97 9047 /* 70 */
592d1631
L
9048 { Bad_Opcode },
9049 { Bad_Opcode },
9050 { Bad_Opcode },
9051 { Bad_Opcode },
9052 { Bad_Opcode },
9053 { Bad_Opcode },
9054 { Bad_Opcode },
9055 { Bad_Opcode },
c0f3af97 9056 /* 78 */
6c30d220
L
9057 { PREFIX_TABLE (PREFIX_VEX_0F3878) },
9058 { PREFIX_TABLE (PREFIX_VEX_0F3879) },
592d1631
L
9059 { Bad_Opcode },
9060 { Bad_Opcode },
9061 { Bad_Opcode },
9062 { Bad_Opcode },
9063 { Bad_Opcode },
9064 { Bad_Opcode },
c0f3af97 9065 /* 80 */
592d1631
L
9066 { Bad_Opcode },
9067 { Bad_Opcode },
9068 { Bad_Opcode },
9069 { Bad_Opcode },
9070 { Bad_Opcode },
9071 { Bad_Opcode },
9072 { Bad_Opcode },
9073 { Bad_Opcode },
c0f3af97 9074 /* 88 */
592d1631
L
9075 { Bad_Opcode },
9076 { Bad_Opcode },
9077 { Bad_Opcode },
9078 { Bad_Opcode },
6c30d220 9079 { PREFIX_TABLE (PREFIX_VEX_0F388C) },
592d1631 9080 { Bad_Opcode },
6c30d220 9081 { PREFIX_TABLE (PREFIX_VEX_0F388E) },
592d1631 9082 { Bad_Opcode },
c0f3af97 9083 /* 90 */
6c30d220
L
9084 { PREFIX_TABLE (PREFIX_VEX_0F3890) },
9085 { PREFIX_TABLE (PREFIX_VEX_0F3891) },
9086 { PREFIX_TABLE (PREFIX_VEX_0F3892) },
9087 { PREFIX_TABLE (PREFIX_VEX_0F3893) },
592d1631
L
9088 { Bad_Opcode },
9089 { Bad_Opcode },
592a252b
L
9090 { PREFIX_TABLE (PREFIX_VEX_0F3896) },
9091 { PREFIX_TABLE (PREFIX_VEX_0F3897) },
c0f3af97 9092 /* 98 */
592a252b
L
9093 { PREFIX_TABLE (PREFIX_VEX_0F3898) },
9094 { PREFIX_TABLE (PREFIX_VEX_0F3899) },
9095 { PREFIX_TABLE (PREFIX_VEX_0F389A) },
9096 { PREFIX_TABLE (PREFIX_VEX_0F389B) },
9097 { PREFIX_TABLE (PREFIX_VEX_0F389C) },
9098 { PREFIX_TABLE (PREFIX_VEX_0F389D) },
9099 { PREFIX_TABLE (PREFIX_VEX_0F389E) },
9100 { PREFIX_TABLE (PREFIX_VEX_0F389F) },
c0f3af97 9101 /* a0 */
592d1631
L
9102 { Bad_Opcode },
9103 { Bad_Opcode },
9104 { Bad_Opcode },
9105 { Bad_Opcode },
9106 { Bad_Opcode },
9107 { Bad_Opcode },
592a252b
L
9108 { PREFIX_TABLE (PREFIX_VEX_0F38A6) },
9109 { PREFIX_TABLE (PREFIX_VEX_0F38A7) },
c0f3af97 9110 /* a8 */
592a252b
L
9111 { PREFIX_TABLE (PREFIX_VEX_0F38A8) },
9112 { PREFIX_TABLE (PREFIX_VEX_0F38A9) },
9113 { PREFIX_TABLE (PREFIX_VEX_0F38AA) },
9114 { PREFIX_TABLE (PREFIX_VEX_0F38AB) },
9115 { PREFIX_TABLE (PREFIX_VEX_0F38AC) },
9116 { PREFIX_TABLE (PREFIX_VEX_0F38AD) },
9117 { PREFIX_TABLE (PREFIX_VEX_0F38AE) },
9118 { PREFIX_TABLE (PREFIX_VEX_0F38AF) },
c0f3af97 9119 /* b0 */
592d1631
L
9120 { Bad_Opcode },
9121 { Bad_Opcode },
9122 { Bad_Opcode },
9123 { Bad_Opcode },
9124 { Bad_Opcode },
9125 { Bad_Opcode },
592a252b
L
9126 { PREFIX_TABLE (PREFIX_VEX_0F38B6) },
9127 { PREFIX_TABLE (PREFIX_VEX_0F38B7) },
c0f3af97 9128 /* b8 */
592a252b
L
9129 { PREFIX_TABLE (PREFIX_VEX_0F38B8) },
9130 { PREFIX_TABLE (PREFIX_VEX_0F38B9) },
9131 { PREFIX_TABLE (PREFIX_VEX_0F38BA) },
9132 { PREFIX_TABLE (PREFIX_VEX_0F38BB) },
9133 { PREFIX_TABLE (PREFIX_VEX_0F38BC) },
9134 { PREFIX_TABLE (PREFIX_VEX_0F38BD) },
9135 { PREFIX_TABLE (PREFIX_VEX_0F38BE) },
9136 { PREFIX_TABLE (PREFIX_VEX_0F38BF) },
c0f3af97 9137 /* c0 */
592d1631
L
9138 { Bad_Opcode },
9139 { Bad_Opcode },
9140 { Bad_Opcode },
9141 { Bad_Opcode },
9142 { Bad_Opcode },
9143 { Bad_Opcode },
9144 { Bad_Opcode },
9145 { Bad_Opcode },
c0f3af97 9146 /* c8 */
592d1631
L
9147 { Bad_Opcode },
9148 { Bad_Opcode },
9149 { Bad_Opcode },
9150 { Bad_Opcode },
9151 { Bad_Opcode },
9152 { Bad_Opcode },
9153 { Bad_Opcode },
9154 { Bad_Opcode },
c0f3af97 9155 /* d0 */
592d1631
L
9156 { Bad_Opcode },
9157 { Bad_Opcode },
9158 { Bad_Opcode },
9159 { Bad_Opcode },
9160 { Bad_Opcode },
9161 { Bad_Opcode },
9162 { Bad_Opcode },
9163 { Bad_Opcode },
c0f3af97 9164 /* d8 */
592d1631
L
9165 { Bad_Opcode },
9166 { Bad_Opcode },
9167 { Bad_Opcode },
592a252b
L
9168 { PREFIX_TABLE (PREFIX_VEX_0F38DB) },
9169 { PREFIX_TABLE (PREFIX_VEX_0F38DC) },
9170 { PREFIX_TABLE (PREFIX_VEX_0F38DD) },
9171 { PREFIX_TABLE (PREFIX_VEX_0F38DE) },
9172 { PREFIX_TABLE (PREFIX_VEX_0F38DF) },
c0f3af97 9173 /* e0 */
592d1631
L
9174 { Bad_Opcode },
9175 { Bad_Opcode },
9176 { Bad_Opcode },
9177 { Bad_Opcode },
9178 { Bad_Opcode },
9179 { Bad_Opcode },
9180 { Bad_Opcode },
9181 { Bad_Opcode },
c0f3af97 9182 /* e8 */
592d1631
L
9183 { Bad_Opcode },
9184 { Bad_Opcode },
9185 { Bad_Opcode },
9186 { Bad_Opcode },
9187 { Bad_Opcode },
9188 { Bad_Opcode },
9189 { Bad_Opcode },
9190 { Bad_Opcode },
c0f3af97 9191 /* f0 */
592d1631
L
9192 { Bad_Opcode },
9193 { Bad_Opcode },
f12dc422
L
9194 { PREFIX_TABLE (PREFIX_VEX_0F38F2) },
9195 { REG_TABLE (REG_VEX_0F38F3) },
592d1631 9196 { Bad_Opcode },
6c30d220
L
9197 { PREFIX_TABLE (PREFIX_VEX_0F38F5) },
9198 { PREFIX_TABLE (PREFIX_VEX_0F38F6) },
f12dc422 9199 { PREFIX_TABLE (PREFIX_VEX_0F38F7) },
c0f3af97 9200 /* f8 */
592d1631
L
9201 { Bad_Opcode },
9202 { Bad_Opcode },
9203 { Bad_Opcode },
9204 { Bad_Opcode },
9205 { Bad_Opcode },
9206 { Bad_Opcode },
9207 { Bad_Opcode },
9208 { Bad_Opcode },
c0f3af97
L
9209 },
9210 /* VEX_0F3A */
9211 {
9212 /* 00 */
6c30d220
L
9213 { PREFIX_TABLE (PREFIX_VEX_0F3A00) },
9214 { PREFIX_TABLE (PREFIX_VEX_0F3A01) },
9215 { PREFIX_TABLE (PREFIX_VEX_0F3A02) },
592d1631 9216 { Bad_Opcode },
592a252b
L
9217 { PREFIX_TABLE (PREFIX_VEX_0F3A04) },
9218 { PREFIX_TABLE (PREFIX_VEX_0F3A05) },
9219 { PREFIX_TABLE (PREFIX_VEX_0F3A06) },
592d1631 9220 { Bad_Opcode },
c0f3af97 9221 /* 08 */
592a252b
L
9222 { PREFIX_TABLE (PREFIX_VEX_0F3A08) },
9223 { PREFIX_TABLE (PREFIX_VEX_0F3A09) },
9224 { PREFIX_TABLE (PREFIX_VEX_0F3A0A) },
9225 { PREFIX_TABLE (PREFIX_VEX_0F3A0B) },
9226 { PREFIX_TABLE (PREFIX_VEX_0F3A0C) },
9227 { PREFIX_TABLE (PREFIX_VEX_0F3A0D) },
9228 { PREFIX_TABLE (PREFIX_VEX_0F3A0E) },
9229 { PREFIX_TABLE (PREFIX_VEX_0F3A0F) },
c0f3af97 9230 /* 10 */
592d1631
L
9231 { Bad_Opcode },
9232 { Bad_Opcode },
9233 { Bad_Opcode },
9234 { Bad_Opcode },
592a252b
L
9235 { PREFIX_TABLE (PREFIX_VEX_0F3A14) },
9236 { PREFIX_TABLE (PREFIX_VEX_0F3A15) },
9237 { PREFIX_TABLE (PREFIX_VEX_0F3A16) },
9238 { PREFIX_TABLE (PREFIX_VEX_0F3A17) },
c0f3af97 9239 /* 18 */
592a252b
L
9240 { PREFIX_TABLE (PREFIX_VEX_0F3A18) },
9241 { PREFIX_TABLE (PREFIX_VEX_0F3A19) },
592d1631
L
9242 { Bad_Opcode },
9243 { Bad_Opcode },
9244 { Bad_Opcode },
592a252b 9245 { PREFIX_TABLE (PREFIX_VEX_0F3A1D) },
592d1631
L
9246 { Bad_Opcode },
9247 { Bad_Opcode },
c0f3af97 9248 /* 20 */
592a252b
L
9249 { PREFIX_TABLE (PREFIX_VEX_0F3A20) },
9250 { PREFIX_TABLE (PREFIX_VEX_0F3A21) },
9251 { PREFIX_TABLE (PREFIX_VEX_0F3A22) },
592d1631
L
9252 { Bad_Opcode },
9253 { Bad_Opcode },
9254 { Bad_Opcode },
9255 { Bad_Opcode },
9256 { Bad_Opcode },
c0f3af97 9257 /* 28 */
592d1631
L
9258 { Bad_Opcode },
9259 { Bad_Opcode },
9260 { Bad_Opcode },
9261 { Bad_Opcode },
9262 { Bad_Opcode },
9263 { Bad_Opcode },
9264 { Bad_Opcode },
9265 { Bad_Opcode },
c0f3af97 9266 /* 30 */
43234a1e 9267 { PREFIX_TABLE (PREFIX_VEX_0F3A30) },
1ba585e8 9268 { PREFIX_TABLE (PREFIX_VEX_0F3A31) },
43234a1e 9269 { PREFIX_TABLE (PREFIX_VEX_0F3A32) },
1ba585e8 9270 { PREFIX_TABLE (PREFIX_VEX_0F3A33) },
592d1631
L
9271 { Bad_Opcode },
9272 { Bad_Opcode },
9273 { Bad_Opcode },
9274 { Bad_Opcode },
c0f3af97 9275 /* 38 */
6c30d220
L
9276 { PREFIX_TABLE (PREFIX_VEX_0F3A38) },
9277 { PREFIX_TABLE (PREFIX_VEX_0F3A39) },
592d1631
L
9278 { Bad_Opcode },
9279 { Bad_Opcode },
9280 { Bad_Opcode },
9281 { Bad_Opcode },
9282 { Bad_Opcode },
9283 { Bad_Opcode },
c0f3af97 9284 /* 40 */
592a252b
L
9285 { PREFIX_TABLE (PREFIX_VEX_0F3A40) },
9286 { PREFIX_TABLE (PREFIX_VEX_0F3A41) },
9287 { PREFIX_TABLE (PREFIX_VEX_0F3A42) },
592d1631 9288 { Bad_Opcode },
592a252b 9289 { PREFIX_TABLE (PREFIX_VEX_0F3A44) },
592d1631 9290 { Bad_Opcode },
6c30d220 9291 { PREFIX_TABLE (PREFIX_VEX_0F3A46) },
592d1631 9292 { Bad_Opcode },
c0f3af97 9293 /* 48 */
592a252b
L
9294 { PREFIX_TABLE (PREFIX_VEX_0F3A48) },
9295 { PREFIX_TABLE (PREFIX_VEX_0F3A49) },
9296 { PREFIX_TABLE (PREFIX_VEX_0F3A4A) },
9297 { PREFIX_TABLE (PREFIX_VEX_0F3A4B) },
9298 { PREFIX_TABLE (PREFIX_VEX_0F3A4C) },
592d1631
L
9299 { Bad_Opcode },
9300 { Bad_Opcode },
9301 { Bad_Opcode },
c0f3af97 9302 /* 50 */
592d1631
L
9303 { Bad_Opcode },
9304 { Bad_Opcode },
9305 { Bad_Opcode },
9306 { Bad_Opcode },
9307 { Bad_Opcode },
9308 { Bad_Opcode },
9309 { Bad_Opcode },
9310 { Bad_Opcode },
c0f3af97 9311 /* 58 */
592d1631
L
9312 { Bad_Opcode },
9313 { Bad_Opcode },
9314 { Bad_Opcode },
9315 { Bad_Opcode },
592a252b
L
9316 { PREFIX_TABLE (PREFIX_VEX_0F3A5C) },
9317 { PREFIX_TABLE (PREFIX_VEX_0F3A5D) },
9318 { PREFIX_TABLE (PREFIX_VEX_0F3A5E) },
9319 { PREFIX_TABLE (PREFIX_VEX_0F3A5F) },
c0f3af97 9320 /* 60 */
592a252b
L
9321 { PREFIX_TABLE (PREFIX_VEX_0F3A60) },
9322 { PREFIX_TABLE (PREFIX_VEX_0F3A61) },
9323 { PREFIX_TABLE (PREFIX_VEX_0F3A62) },
9324 { PREFIX_TABLE (PREFIX_VEX_0F3A63) },
592d1631
L
9325 { Bad_Opcode },
9326 { Bad_Opcode },
9327 { Bad_Opcode },
9328 { Bad_Opcode },
c0f3af97 9329 /* 68 */
592a252b
L
9330 { PREFIX_TABLE (PREFIX_VEX_0F3A68) },
9331 { PREFIX_TABLE (PREFIX_VEX_0F3A69) },
9332 { PREFIX_TABLE (PREFIX_VEX_0F3A6A) },
9333 { PREFIX_TABLE (PREFIX_VEX_0F3A6B) },
9334 { PREFIX_TABLE (PREFIX_VEX_0F3A6C) },
9335 { PREFIX_TABLE (PREFIX_VEX_0F3A6D) },
9336 { PREFIX_TABLE (PREFIX_VEX_0F3A6E) },
9337 { PREFIX_TABLE (PREFIX_VEX_0F3A6F) },
c0f3af97 9338 /* 70 */
592d1631
L
9339 { Bad_Opcode },
9340 { Bad_Opcode },
9341 { Bad_Opcode },
9342 { Bad_Opcode },
9343 { Bad_Opcode },
9344 { Bad_Opcode },
9345 { Bad_Opcode },
9346 { Bad_Opcode },
c0f3af97 9347 /* 78 */
592a252b
L
9348 { PREFIX_TABLE (PREFIX_VEX_0F3A78) },
9349 { PREFIX_TABLE (PREFIX_VEX_0F3A79) },
9350 { PREFIX_TABLE (PREFIX_VEX_0F3A7A) },
9351 { PREFIX_TABLE (PREFIX_VEX_0F3A7B) },
9352 { PREFIX_TABLE (PREFIX_VEX_0F3A7C) },
9353 { PREFIX_TABLE (PREFIX_VEX_0F3A7D) },
9354 { PREFIX_TABLE (PREFIX_VEX_0F3A7E) },
9355 { PREFIX_TABLE (PREFIX_VEX_0F3A7F) },
c0f3af97 9356 /* 80 */
592d1631
L
9357 { Bad_Opcode },
9358 { Bad_Opcode },
9359 { Bad_Opcode },
9360 { Bad_Opcode },
9361 { Bad_Opcode },
9362 { Bad_Opcode },
9363 { Bad_Opcode },
9364 { Bad_Opcode },
c0f3af97 9365 /* 88 */
592d1631
L
9366 { Bad_Opcode },
9367 { Bad_Opcode },
9368 { Bad_Opcode },
9369 { Bad_Opcode },
9370 { Bad_Opcode },
9371 { Bad_Opcode },
9372 { Bad_Opcode },
9373 { Bad_Opcode },
c0f3af97 9374 /* 90 */
592d1631
L
9375 { Bad_Opcode },
9376 { Bad_Opcode },
9377 { Bad_Opcode },
9378 { Bad_Opcode },
9379 { Bad_Opcode },
9380 { Bad_Opcode },
9381 { Bad_Opcode },
9382 { Bad_Opcode },
c0f3af97 9383 /* 98 */
592d1631
L
9384 { Bad_Opcode },
9385 { Bad_Opcode },
9386 { Bad_Opcode },
9387 { Bad_Opcode },
9388 { Bad_Opcode },
9389 { Bad_Opcode },
9390 { Bad_Opcode },
9391 { Bad_Opcode },
c0f3af97 9392 /* a0 */
592d1631
L
9393 { Bad_Opcode },
9394 { Bad_Opcode },
9395 { Bad_Opcode },
9396 { Bad_Opcode },
9397 { Bad_Opcode },
9398 { Bad_Opcode },
9399 { Bad_Opcode },
9400 { Bad_Opcode },
c0f3af97 9401 /* a8 */
592d1631
L
9402 { Bad_Opcode },
9403 { Bad_Opcode },
9404 { Bad_Opcode },
9405 { Bad_Opcode },
9406 { Bad_Opcode },
9407 { Bad_Opcode },
9408 { Bad_Opcode },
9409 { Bad_Opcode },
c0f3af97 9410 /* b0 */
592d1631
L
9411 { Bad_Opcode },
9412 { Bad_Opcode },
9413 { Bad_Opcode },
9414 { Bad_Opcode },
9415 { Bad_Opcode },
9416 { Bad_Opcode },
9417 { Bad_Opcode },
9418 { Bad_Opcode },
c0f3af97 9419 /* b8 */
592d1631
L
9420 { Bad_Opcode },
9421 { Bad_Opcode },
9422 { Bad_Opcode },
9423 { Bad_Opcode },
9424 { Bad_Opcode },
9425 { Bad_Opcode },
9426 { Bad_Opcode },
9427 { Bad_Opcode },
c0f3af97 9428 /* c0 */
592d1631
L
9429 { Bad_Opcode },
9430 { Bad_Opcode },
9431 { Bad_Opcode },
9432 { Bad_Opcode },
9433 { Bad_Opcode },
9434 { Bad_Opcode },
9435 { Bad_Opcode },
9436 { Bad_Opcode },
c0f3af97 9437 /* c8 */
592d1631
L
9438 { Bad_Opcode },
9439 { Bad_Opcode },
9440 { Bad_Opcode },
9441 { Bad_Opcode },
9442 { Bad_Opcode },
9443 { Bad_Opcode },
9444 { Bad_Opcode },
9445 { Bad_Opcode },
c0f3af97 9446 /* d0 */
592d1631
L
9447 { Bad_Opcode },
9448 { Bad_Opcode },
9449 { Bad_Opcode },
9450 { Bad_Opcode },
9451 { Bad_Opcode },
9452 { Bad_Opcode },
9453 { Bad_Opcode },
9454 { Bad_Opcode },
c0f3af97 9455 /* d8 */
592d1631
L
9456 { Bad_Opcode },
9457 { Bad_Opcode },
9458 { Bad_Opcode },
9459 { Bad_Opcode },
9460 { Bad_Opcode },
9461 { Bad_Opcode },
9462 { Bad_Opcode },
592a252b 9463 { PREFIX_TABLE (PREFIX_VEX_0F3ADF) },
c0f3af97 9464 /* e0 */
592d1631
L
9465 { Bad_Opcode },
9466 { Bad_Opcode },
9467 { Bad_Opcode },
9468 { Bad_Opcode },
9469 { Bad_Opcode },
9470 { Bad_Opcode },
9471 { Bad_Opcode },
9472 { Bad_Opcode },
c0f3af97 9473 /* e8 */
592d1631
L
9474 { Bad_Opcode },
9475 { Bad_Opcode },
9476 { Bad_Opcode },
9477 { Bad_Opcode },
9478 { Bad_Opcode },
9479 { Bad_Opcode },
9480 { Bad_Opcode },
9481 { Bad_Opcode },
c0f3af97 9482 /* f0 */
6c30d220 9483 { PREFIX_TABLE (PREFIX_VEX_0F3AF0) },
592d1631
L
9484 { Bad_Opcode },
9485 { Bad_Opcode },
9486 { Bad_Opcode },
9487 { Bad_Opcode },
9488 { Bad_Opcode },
9489 { Bad_Opcode },
9490 { Bad_Opcode },
c0f3af97 9491 /* f8 */
592d1631
L
9492 { Bad_Opcode },
9493 { Bad_Opcode },
9494 { Bad_Opcode },
9495 { Bad_Opcode },
9496 { Bad_Opcode },
9497 { Bad_Opcode },
9498 { Bad_Opcode },
9499 { Bad_Opcode },
c0f3af97
L
9500 },
9501};
9502
43234a1e
L
9503#define NEED_OPCODE_TABLE
9504#include "i386-dis-evex.h"
9505#undef NEED_OPCODE_TABLE
c0f3af97 9506static const struct dis386 vex_len_table[][2] = {
592a252b 9507 /* VEX_LEN_0F10_P_1 */
c0f3af97 9508 {
592a252b
L
9509 { VEX_W_TABLE (VEX_W_0F10_P_1) },
9510 { VEX_W_TABLE (VEX_W_0F10_P_1) },
c0f3af97
L
9511 },
9512
592a252b 9513 /* VEX_LEN_0F10_P_3 */
c0f3af97 9514 {
592a252b
L
9515 { VEX_W_TABLE (VEX_W_0F10_P_3) },
9516 { VEX_W_TABLE (VEX_W_0F10_P_3) },
c0f3af97
L
9517 },
9518
592a252b 9519 /* VEX_LEN_0F11_P_1 */
c0f3af97 9520 {
592a252b
L
9521 { VEX_W_TABLE (VEX_W_0F11_P_1) },
9522 { VEX_W_TABLE (VEX_W_0F11_P_1) },
c0f3af97
L
9523 },
9524
592a252b 9525 /* VEX_LEN_0F11_P_3 */
c0f3af97 9526 {
592a252b
L
9527 { VEX_W_TABLE (VEX_W_0F11_P_3) },
9528 { VEX_W_TABLE (VEX_W_0F11_P_3) },
c0f3af97
L
9529 },
9530
592a252b 9531 /* VEX_LEN_0F12_P_0_M_0 */
c0f3af97 9532 {
592a252b 9533 { VEX_W_TABLE (VEX_W_0F12_P_0_M_0) },
c0f3af97
L
9534 },
9535
592a252b 9536 /* VEX_LEN_0F12_P_0_M_1 */
c0f3af97 9537 {
592a252b 9538 { VEX_W_TABLE (VEX_W_0F12_P_0_M_1) },
c0f3af97
L
9539 },
9540
592a252b 9541 /* VEX_LEN_0F12_P_2 */
c0f3af97 9542 {
592a252b 9543 { VEX_W_TABLE (VEX_W_0F12_P_2) },
c0f3af97
L
9544 },
9545
592a252b 9546 /* VEX_LEN_0F13_M_0 */
c0f3af97 9547 {
592a252b 9548 { VEX_W_TABLE (VEX_W_0F13_M_0) },
c0f3af97
L
9549 },
9550
592a252b 9551 /* VEX_LEN_0F16_P_0_M_0 */
c0f3af97 9552 {
592a252b 9553 { VEX_W_TABLE (VEX_W_0F16_P_0_M_0) },
c0f3af97
L
9554 },
9555
592a252b 9556 /* VEX_LEN_0F16_P_0_M_1 */
c0f3af97 9557 {
592a252b 9558 { VEX_W_TABLE (VEX_W_0F16_P_0_M_1) },
c0f3af97
L
9559 },
9560
592a252b 9561 /* VEX_LEN_0F16_P_2 */
c0f3af97 9562 {
592a252b 9563 { VEX_W_TABLE (VEX_W_0F16_P_2) },
c0f3af97
L
9564 },
9565
592a252b 9566 /* VEX_LEN_0F17_M_0 */
c0f3af97 9567 {
592a252b 9568 { VEX_W_TABLE (VEX_W_0F17_M_0) },
c0f3af97
L
9569 },
9570
592a252b 9571 /* VEX_LEN_0F2A_P_1 */
c0f3af97 9572 {
bf890a93
IT
9573 { "vcvtsi2ss%LQ", { XMScalar, VexScalar, Ev }, 0 },
9574 { "vcvtsi2ss%LQ", { XMScalar, VexScalar, Ev }, 0 },
c0f3af97
L
9575 },
9576
592a252b 9577 /* VEX_LEN_0F2A_P_3 */
c0f3af97 9578 {
bf890a93
IT
9579 { "vcvtsi2sd%LQ", { XMScalar, VexScalar, Ev }, 0 },
9580 { "vcvtsi2sd%LQ", { XMScalar, VexScalar, Ev }, 0 },
c0f3af97
L
9581 },
9582
592a252b 9583 /* VEX_LEN_0F2C_P_1 */
c0f3af97 9584 {
bf890a93
IT
9585 { "vcvttss2siY", { Gv, EXdScalar }, 0 },
9586 { "vcvttss2siY", { Gv, EXdScalar }, 0 },
c0f3af97
L
9587 },
9588
592a252b 9589 /* VEX_LEN_0F2C_P_3 */
c0f3af97 9590 {
bf890a93
IT
9591 { "vcvttsd2siY", { Gv, EXqScalar }, 0 },
9592 { "vcvttsd2siY", { Gv, EXqScalar }, 0 },
c0f3af97
L
9593 },
9594
592a252b 9595 /* VEX_LEN_0F2D_P_1 */
c0f3af97 9596 {
bf890a93
IT
9597 { "vcvtss2siY", { Gv, EXdScalar }, 0 },
9598 { "vcvtss2siY", { Gv, EXdScalar }, 0 },
c0f3af97
L
9599 },
9600
592a252b 9601 /* VEX_LEN_0F2D_P_3 */
c0f3af97 9602 {
bf890a93
IT
9603 { "vcvtsd2siY", { Gv, EXqScalar }, 0 },
9604 { "vcvtsd2siY", { Gv, EXqScalar }, 0 },
c0f3af97
L
9605 },
9606
592a252b 9607 /* VEX_LEN_0F2E_P_0 */
c0f3af97 9608 {
592a252b
L
9609 { VEX_W_TABLE (VEX_W_0F2E_P_0) },
9610 { VEX_W_TABLE (VEX_W_0F2E_P_0) },
c0f3af97
L
9611 },
9612
592a252b 9613 /* VEX_LEN_0F2E_P_2 */
c0f3af97 9614 {
592a252b
L
9615 { VEX_W_TABLE (VEX_W_0F2E_P_2) },
9616 { VEX_W_TABLE (VEX_W_0F2E_P_2) },
c0f3af97
L
9617 },
9618
592a252b 9619 /* VEX_LEN_0F2F_P_0 */
c0f3af97 9620 {
592a252b
L
9621 { VEX_W_TABLE (VEX_W_0F2F_P_0) },
9622 { VEX_W_TABLE (VEX_W_0F2F_P_0) },
c0f3af97
L
9623 },
9624
592a252b 9625 /* VEX_LEN_0F2F_P_2 */
c0f3af97 9626 {
592a252b
L
9627 { VEX_W_TABLE (VEX_W_0F2F_P_2) },
9628 { VEX_W_TABLE (VEX_W_0F2F_P_2) },
c0f3af97
L
9629 },
9630
43234a1e
L
9631 /* VEX_LEN_0F41_P_0 */
9632 {
9633 { Bad_Opcode },
9634 { VEX_W_TABLE (VEX_W_0F41_P_0_LEN_1) },
9635 },
1ba585e8
IT
9636 /* VEX_LEN_0F41_P_2 */
9637 {
9638 { Bad_Opcode },
9639 { VEX_W_TABLE (VEX_W_0F41_P_2_LEN_1) },
9640 },
43234a1e
L
9641 /* VEX_LEN_0F42_P_0 */
9642 {
9643 { Bad_Opcode },
9644 { VEX_W_TABLE (VEX_W_0F42_P_0_LEN_1) },
9645 },
1ba585e8
IT
9646 /* VEX_LEN_0F42_P_2 */
9647 {
9648 { Bad_Opcode },
9649 { VEX_W_TABLE (VEX_W_0F42_P_2_LEN_1) },
9650 },
43234a1e
L
9651 /* VEX_LEN_0F44_P_0 */
9652 {
9653 { VEX_W_TABLE (VEX_W_0F44_P_0_LEN_0) },
9654 },
1ba585e8
IT
9655 /* VEX_LEN_0F44_P_2 */
9656 {
9657 { VEX_W_TABLE (VEX_W_0F44_P_2_LEN_0) },
9658 },
43234a1e
L
9659 /* VEX_LEN_0F45_P_0 */
9660 {
9661 { Bad_Opcode },
9662 { VEX_W_TABLE (VEX_W_0F45_P_0_LEN_1) },
9663 },
1ba585e8
IT
9664 /* VEX_LEN_0F45_P_2 */
9665 {
9666 { Bad_Opcode },
9667 { VEX_W_TABLE (VEX_W_0F45_P_2_LEN_1) },
9668 },
43234a1e
L
9669 /* VEX_LEN_0F46_P_0 */
9670 {
9671 { Bad_Opcode },
9672 { VEX_W_TABLE (VEX_W_0F46_P_0_LEN_1) },
9673 },
1ba585e8
IT
9674 /* VEX_LEN_0F46_P_2 */
9675 {
9676 { Bad_Opcode },
9677 { VEX_W_TABLE (VEX_W_0F46_P_2_LEN_1) },
9678 },
43234a1e
L
9679 /* VEX_LEN_0F47_P_0 */
9680 {
9681 { Bad_Opcode },
9682 { VEX_W_TABLE (VEX_W_0F47_P_0_LEN_1) },
9683 },
1ba585e8
IT
9684 /* VEX_LEN_0F47_P_2 */
9685 {
9686 { Bad_Opcode },
9687 { VEX_W_TABLE (VEX_W_0F47_P_2_LEN_1) },
9688 },
9689 /* VEX_LEN_0F4A_P_0 */
9690 {
9691 { Bad_Opcode },
9692 { VEX_W_TABLE (VEX_W_0F4A_P_0_LEN_1) },
9693 },
9694 /* VEX_LEN_0F4A_P_2 */
9695 {
9696 { Bad_Opcode },
9697 { VEX_W_TABLE (VEX_W_0F4A_P_2_LEN_1) },
9698 },
9699 /* VEX_LEN_0F4B_P_0 */
9700 {
9701 { Bad_Opcode },
9702 { VEX_W_TABLE (VEX_W_0F4B_P_0_LEN_1) },
9703 },
43234a1e
L
9704 /* VEX_LEN_0F4B_P_2 */
9705 {
9706 { Bad_Opcode },
9707 { VEX_W_TABLE (VEX_W_0F4B_P_2_LEN_1) },
9708 },
9709
592a252b 9710 /* VEX_LEN_0F51_P_1 */
c0f3af97 9711 {
592a252b
L
9712 { VEX_W_TABLE (VEX_W_0F51_P_1) },
9713 { VEX_W_TABLE (VEX_W_0F51_P_1) },
c0f3af97
L
9714 },
9715
592a252b 9716 /* VEX_LEN_0F51_P_3 */
c0f3af97 9717 {
592a252b
L
9718 { VEX_W_TABLE (VEX_W_0F51_P_3) },
9719 { VEX_W_TABLE (VEX_W_0F51_P_3) },
c0f3af97
L
9720 },
9721
592a252b 9722 /* VEX_LEN_0F52_P_1 */
c0f3af97 9723 {
592a252b
L
9724 { VEX_W_TABLE (VEX_W_0F52_P_1) },
9725 { VEX_W_TABLE (VEX_W_0F52_P_1) },
c0f3af97
L
9726 },
9727
592a252b 9728 /* VEX_LEN_0F53_P_1 */
c0f3af97 9729 {
592a252b
L
9730 { VEX_W_TABLE (VEX_W_0F53_P_1) },
9731 { VEX_W_TABLE (VEX_W_0F53_P_1) },
c0f3af97
L
9732 },
9733
592a252b 9734 /* VEX_LEN_0F58_P_1 */
c0f3af97 9735 {
592a252b
L
9736 { VEX_W_TABLE (VEX_W_0F58_P_1) },
9737 { VEX_W_TABLE (VEX_W_0F58_P_1) },
c0f3af97
L
9738 },
9739
592a252b 9740 /* VEX_LEN_0F58_P_3 */
c0f3af97 9741 {
592a252b
L
9742 { VEX_W_TABLE (VEX_W_0F58_P_3) },
9743 { VEX_W_TABLE (VEX_W_0F58_P_3) },
c0f3af97
L
9744 },
9745
592a252b 9746 /* VEX_LEN_0F59_P_1 */
c0f3af97 9747 {
592a252b
L
9748 { VEX_W_TABLE (VEX_W_0F59_P_1) },
9749 { VEX_W_TABLE (VEX_W_0F59_P_1) },
c0f3af97
L
9750 },
9751
592a252b 9752 /* VEX_LEN_0F59_P_3 */
c0f3af97 9753 {
592a252b
L
9754 { VEX_W_TABLE (VEX_W_0F59_P_3) },
9755 { VEX_W_TABLE (VEX_W_0F59_P_3) },
c0f3af97
L
9756 },
9757
592a252b 9758 /* VEX_LEN_0F5A_P_1 */
c0f3af97 9759 {
592a252b
L
9760 { VEX_W_TABLE (VEX_W_0F5A_P_1) },
9761 { VEX_W_TABLE (VEX_W_0F5A_P_1) },
c0f3af97
L
9762 },
9763
592a252b 9764 /* VEX_LEN_0F5A_P_3 */
c0f3af97 9765 {
592a252b
L
9766 { VEX_W_TABLE (VEX_W_0F5A_P_3) },
9767 { VEX_W_TABLE (VEX_W_0F5A_P_3) },
c0f3af97
L
9768 },
9769
592a252b 9770 /* VEX_LEN_0F5C_P_1 */
c0f3af97 9771 {
592a252b
L
9772 { VEX_W_TABLE (VEX_W_0F5C_P_1) },
9773 { VEX_W_TABLE (VEX_W_0F5C_P_1) },
c0f3af97
L
9774 },
9775
592a252b 9776 /* VEX_LEN_0F5C_P_3 */
c0f3af97 9777 {
592a252b
L
9778 { VEX_W_TABLE (VEX_W_0F5C_P_3) },
9779 { VEX_W_TABLE (VEX_W_0F5C_P_3) },
c0f3af97
L
9780 },
9781
592a252b 9782 /* VEX_LEN_0F5D_P_1 */
c0f3af97 9783 {
592a252b
L
9784 { VEX_W_TABLE (VEX_W_0F5D_P_1) },
9785 { VEX_W_TABLE (VEX_W_0F5D_P_1) },
c0f3af97
L
9786 },
9787
592a252b 9788 /* VEX_LEN_0F5D_P_3 */
c0f3af97 9789 {
592a252b
L
9790 { VEX_W_TABLE (VEX_W_0F5D_P_3) },
9791 { VEX_W_TABLE (VEX_W_0F5D_P_3) },
c0f3af97
L
9792 },
9793
592a252b 9794 /* VEX_LEN_0F5E_P_1 */
c0f3af97 9795 {
592a252b
L
9796 { VEX_W_TABLE (VEX_W_0F5E_P_1) },
9797 { VEX_W_TABLE (VEX_W_0F5E_P_1) },
c0f3af97
L
9798 },
9799
592a252b 9800 /* VEX_LEN_0F5E_P_3 */
c0f3af97 9801 {
592a252b
L
9802 { VEX_W_TABLE (VEX_W_0F5E_P_3) },
9803 { VEX_W_TABLE (VEX_W_0F5E_P_3) },
c0f3af97
L
9804 },
9805
592a252b 9806 /* VEX_LEN_0F5F_P_1 */
c0f3af97 9807 {
592a252b
L
9808 { VEX_W_TABLE (VEX_W_0F5F_P_1) },
9809 { VEX_W_TABLE (VEX_W_0F5F_P_1) },
c0f3af97
L
9810 },
9811
592a252b 9812 /* VEX_LEN_0F5F_P_3 */
c0f3af97 9813 {
592a252b
L
9814 { VEX_W_TABLE (VEX_W_0F5F_P_3) },
9815 { VEX_W_TABLE (VEX_W_0F5F_P_3) },
c0f3af97
L
9816 },
9817
592a252b 9818 /* VEX_LEN_0F6E_P_2 */
c0f3af97 9819 {
bf890a93
IT
9820 { "vmovK", { XMScalar, Edq }, 0 },
9821 { "vmovK", { XMScalar, Edq }, 0 },
c0f3af97
L
9822 },
9823
592a252b 9824 /* VEX_LEN_0F7E_P_1 */
c0f3af97 9825 {
592a252b
L
9826 { VEX_W_TABLE (VEX_W_0F7E_P_1) },
9827 { VEX_W_TABLE (VEX_W_0F7E_P_1) },
c0f3af97
L
9828 },
9829
592a252b 9830 /* VEX_LEN_0F7E_P_2 */
c0f3af97 9831 {
bf890a93
IT
9832 { "vmovK", { Edq, XMScalar }, 0 },
9833 { "vmovK", { Edq, XMScalar }, 0 },
c0f3af97
L
9834 },
9835
43234a1e
L
9836 /* VEX_LEN_0F90_P_0 */
9837 {
9838 { VEX_W_TABLE (VEX_W_0F90_P_0_LEN_0) },
9839 },
9840
1ba585e8
IT
9841 /* VEX_LEN_0F90_P_2 */
9842 {
9843 { VEX_W_TABLE (VEX_W_0F90_P_2_LEN_0) },
9844 },
9845
43234a1e
L
9846 /* VEX_LEN_0F91_P_0 */
9847 {
9848 { VEX_W_TABLE (VEX_W_0F91_P_0_LEN_0) },
9849 },
9850
1ba585e8
IT
9851 /* VEX_LEN_0F91_P_2 */
9852 {
9853 { VEX_W_TABLE (VEX_W_0F91_P_2_LEN_0) },
9854 },
9855
43234a1e
L
9856 /* VEX_LEN_0F92_P_0 */
9857 {
9858 { VEX_W_TABLE (VEX_W_0F92_P_0_LEN_0) },
9859 },
9860
90a915bf
IT
9861 /* VEX_LEN_0F92_P_2 */
9862 {
9863 { VEX_W_TABLE (VEX_W_0F92_P_2_LEN_0) },
9864 },
9865
1ba585e8
IT
9866 /* VEX_LEN_0F92_P_3 */
9867 {
9868 { VEX_W_TABLE (VEX_W_0F92_P_3_LEN_0) },
9869 },
9870
43234a1e
L
9871 /* VEX_LEN_0F93_P_0 */
9872 {
9873 { VEX_W_TABLE (VEX_W_0F93_P_0_LEN_0) },
9874 },
9875
90a915bf
IT
9876 /* VEX_LEN_0F93_P_2 */
9877 {
9878 { VEX_W_TABLE (VEX_W_0F93_P_2_LEN_0) },
9879 },
9880
1ba585e8
IT
9881 /* VEX_LEN_0F93_P_3 */
9882 {
9883 { VEX_W_TABLE (VEX_W_0F93_P_3_LEN_0) },
9884 },
9885
43234a1e
L
9886 /* VEX_LEN_0F98_P_0 */
9887 {
9888 { VEX_W_TABLE (VEX_W_0F98_P_0_LEN_0) },
9889 },
9890
1ba585e8
IT
9891 /* VEX_LEN_0F98_P_2 */
9892 {
9893 { VEX_W_TABLE (VEX_W_0F98_P_2_LEN_0) },
9894 },
9895
9896 /* VEX_LEN_0F99_P_0 */
9897 {
9898 { VEX_W_TABLE (VEX_W_0F99_P_0_LEN_0) },
9899 },
9900
9901 /* VEX_LEN_0F99_P_2 */
9902 {
9903 { VEX_W_TABLE (VEX_W_0F99_P_2_LEN_0) },
9904 },
9905
6c30d220 9906 /* VEX_LEN_0FAE_R_2_M_0 */
c0f3af97 9907 {
6c30d220 9908 { VEX_W_TABLE (VEX_W_0FAE_R_2_M_0) },
c0f3af97
L
9909 },
9910
6c30d220 9911 /* VEX_LEN_0FAE_R_3_M_0 */
c0f3af97 9912 {
6c30d220 9913 { VEX_W_TABLE (VEX_W_0FAE_R_3_M_0) },
c0f3af97
L
9914 },
9915
6c30d220 9916 /* VEX_LEN_0FC2_P_1 */
c0f3af97 9917 {
6c30d220
L
9918 { VEX_W_TABLE (VEX_W_0FC2_P_1) },
9919 { VEX_W_TABLE (VEX_W_0FC2_P_1) },
c0f3af97
L
9920 },
9921
6c30d220 9922 /* VEX_LEN_0FC2_P_3 */
c0f3af97 9923 {
6c30d220
L
9924 { VEX_W_TABLE (VEX_W_0FC2_P_3) },
9925 { VEX_W_TABLE (VEX_W_0FC2_P_3) },
c0f3af97
L
9926 },
9927
6c30d220 9928 /* VEX_LEN_0FC4_P_2 */
c0f3af97 9929 {
6c30d220 9930 { VEX_W_TABLE (VEX_W_0FC4_P_2) },
c0f3af97
L
9931 },
9932
6c30d220 9933 /* VEX_LEN_0FC5_P_2 */
c0f3af97 9934 {
6c30d220 9935 { VEX_W_TABLE (VEX_W_0FC5_P_2) },
c0f3af97
L
9936 },
9937
6c30d220 9938 /* VEX_LEN_0FD6_P_2 */
c0f3af97 9939 {
6c30d220
L
9940 { VEX_W_TABLE (VEX_W_0FD6_P_2) },
9941 { VEX_W_TABLE (VEX_W_0FD6_P_2) },
c0f3af97
L
9942 },
9943
6c30d220 9944 /* VEX_LEN_0FF7_P_2 */
c0f3af97 9945 {
6c30d220 9946 { VEX_W_TABLE (VEX_W_0FF7_P_2) },
c0f3af97
L
9947 },
9948
6c30d220 9949 /* VEX_LEN_0F3816_P_2 */
c0f3af97 9950 {
6c30d220
L
9951 { Bad_Opcode },
9952 { VEX_W_TABLE (VEX_W_0F3816_P_2) },
c0f3af97
L
9953 },
9954
6c30d220 9955 /* VEX_LEN_0F3819_P_2 */
c0f3af97 9956 {
6c30d220
L
9957 { Bad_Opcode },
9958 { VEX_W_TABLE (VEX_W_0F3819_P_2) },
c0f3af97
L
9959 },
9960
6c30d220 9961 /* VEX_LEN_0F381A_P_2_M_0 */
c0f3af97 9962 {
6c30d220
L
9963 { Bad_Opcode },
9964 { VEX_W_TABLE (VEX_W_0F381A_P_2_M_0) },
c0f3af97
L
9965 },
9966
6c30d220 9967 /* VEX_LEN_0F3836_P_2 */
c0f3af97 9968 {
6c30d220
L
9969 { Bad_Opcode },
9970 { VEX_W_TABLE (VEX_W_0F3836_P_2) },
c0f3af97
L
9971 },
9972
592a252b 9973 /* VEX_LEN_0F3841_P_2 */
c0f3af97 9974 {
592a252b 9975 { VEX_W_TABLE (VEX_W_0F3841_P_2) },
c0f3af97
L
9976 },
9977
6c30d220
L
9978 /* VEX_LEN_0F385A_P_2_M_0 */
9979 {
9980 { Bad_Opcode },
9981 { VEX_W_TABLE (VEX_W_0F385A_P_2_M_0) },
9982 },
9983
592a252b 9984 /* VEX_LEN_0F38DB_P_2 */
a5ff0eb2 9985 {
592a252b 9986 { VEX_W_TABLE (VEX_W_0F38DB_P_2) },
a5ff0eb2
L
9987 },
9988
592a252b 9989 /* VEX_LEN_0F38DC_P_2 */
a5ff0eb2 9990 {
592a252b 9991 { VEX_W_TABLE (VEX_W_0F38DC_P_2) },
a5ff0eb2
L
9992 },
9993
592a252b 9994 /* VEX_LEN_0F38DD_P_2 */
a5ff0eb2 9995 {
592a252b 9996 { VEX_W_TABLE (VEX_W_0F38DD_P_2) },
a5ff0eb2
L
9997 },
9998
592a252b 9999 /* VEX_LEN_0F38DE_P_2 */
a5ff0eb2 10000 {
592a252b 10001 { VEX_W_TABLE (VEX_W_0F38DE_P_2) },
a5ff0eb2
L
10002 },
10003
592a252b 10004 /* VEX_LEN_0F38DF_P_2 */
a5ff0eb2 10005 {
592a252b 10006 { VEX_W_TABLE (VEX_W_0F38DF_P_2) },
a5ff0eb2
L
10007 },
10008
f12dc422
L
10009 /* VEX_LEN_0F38F2_P_0 */
10010 {
bf890a93 10011 { "andnS", { Gdq, VexGdq, Edq }, 0 },
f12dc422
L
10012 },
10013
10014 /* VEX_LEN_0F38F3_R_1_P_0 */
10015 {
bf890a93 10016 { "blsrS", { VexGdq, Edq }, 0 },
f12dc422
L
10017 },
10018
10019 /* VEX_LEN_0F38F3_R_2_P_0 */
10020 {
bf890a93 10021 { "blsmskS", { VexGdq, Edq }, 0 },
f12dc422
L
10022 },
10023
10024 /* VEX_LEN_0F38F3_R_3_P_0 */
10025 {
bf890a93 10026 { "blsiS", { VexGdq, Edq }, 0 },
f12dc422
L
10027 },
10028
6c30d220
L
10029 /* VEX_LEN_0F38F5_P_0 */
10030 {
bf890a93 10031 { "bzhiS", { Gdq, Edq, VexGdq }, 0 },
6c30d220
L
10032 },
10033
10034 /* VEX_LEN_0F38F5_P_1 */
10035 {
bf890a93 10036 { "pextS", { Gdq, VexGdq, Edq }, 0 },
6c30d220
L
10037 },
10038
10039 /* VEX_LEN_0F38F5_P_3 */
10040 {
bf890a93 10041 { "pdepS", { Gdq, VexGdq, Edq }, 0 },
6c30d220
L
10042 },
10043
10044 /* VEX_LEN_0F38F6_P_3 */
10045 {
bf890a93 10046 { "mulxS", { Gdq, VexGdq, Edq }, 0 },
6c30d220
L
10047 },
10048
f12dc422
L
10049 /* VEX_LEN_0F38F7_P_0 */
10050 {
bf890a93 10051 { "bextrS", { Gdq, Edq, VexGdq }, 0 },
f12dc422
L
10052 },
10053
6c30d220
L
10054 /* VEX_LEN_0F38F7_P_1 */
10055 {
bf890a93 10056 { "sarxS", { Gdq, Edq, VexGdq }, 0 },
6c30d220
L
10057 },
10058
10059 /* VEX_LEN_0F38F7_P_2 */
10060 {
bf890a93 10061 { "shlxS", { Gdq, Edq, VexGdq }, 0 },
6c30d220
L
10062 },
10063
10064 /* VEX_LEN_0F38F7_P_3 */
10065 {
bf890a93 10066 { "shrxS", { Gdq, Edq, VexGdq }, 0 },
6c30d220
L
10067 },
10068
10069 /* VEX_LEN_0F3A00_P_2 */
10070 {
10071 { Bad_Opcode },
10072 { VEX_W_TABLE (VEX_W_0F3A00_P_2) },
10073 },
10074
10075 /* VEX_LEN_0F3A01_P_2 */
10076 {
10077 { Bad_Opcode },
10078 { VEX_W_TABLE (VEX_W_0F3A01_P_2) },
10079 },
10080
592a252b 10081 /* VEX_LEN_0F3A06_P_2 */
c0f3af97 10082 {
592d1631 10083 { Bad_Opcode },
592a252b 10084 { VEX_W_TABLE (VEX_W_0F3A06_P_2) },
c0f3af97
L
10085 },
10086
592a252b 10087 /* VEX_LEN_0F3A0A_P_2 */
c0f3af97 10088 {
592a252b
L
10089 { VEX_W_TABLE (VEX_W_0F3A0A_P_2) },
10090 { VEX_W_TABLE (VEX_W_0F3A0A_P_2) },
c0f3af97
L
10091 },
10092
592a252b 10093 /* VEX_LEN_0F3A0B_P_2 */
c0f3af97 10094 {
592a252b
L
10095 { VEX_W_TABLE (VEX_W_0F3A0B_P_2) },
10096 { VEX_W_TABLE (VEX_W_0F3A0B_P_2) },
c0f3af97
L
10097 },
10098
592a252b 10099 /* VEX_LEN_0F3A14_P_2 */
c0f3af97 10100 {
592a252b 10101 { VEX_W_TABLE (VEX_W_0F3A14_P_2) },
c0f3af97
L
10102 },
10103
592a252b 10104 /* VEX_LEN_0F3A15_P_2 */
c0f3af97 10105 {
592a252b 10106 { VEX_W_TABLE (VEX_W_0F3A15_P_2) },
c0f3af97
L
10107 },
10108
592a252b 10109 /* VEX_LEN_0F3A16_P_2 */
c0f3af97 10110 {
bf890a93 10111 { "vpextrK", { Edq, XM, Ib }, 0 },
c0f3af97
L
10112 },
10113
592a252b 10114 /* VEX_LEN_0F3A17_P_2 */
c0f3af97 10115 {
bf890a93 10116 { "vextractps", { Edqd, XM, Ib }, 0 },
c0f3af97
L
10117 },
10118
592a252b 10119 /* VEX_LEN_0F3A18_P_2 */
c0f3af97 10120 {
592d1631 10121 { Bad_Opcode },
592a252b 10122 { VEX_W_TABLE (VEX_W_0F3A18_P_2) },
c0f3af97
L
10123 },
10124
592a252b 10125 /* VEX_LEN_0F3A19_P_2 */
c0f3af97 10126 {
592d1631 10127 { Bad_Opcode },
592a252b 10128 { VEX_W_TABLE (VEX_W_0F3A19_P_2) },
c0f3af97
L
10129 },
10130
592a252b 10131 /* VEX_LEN_0F3A20_P_2 */
c0f3af97 10132 {
592a252b 10133 { VEX_W_TABLE (VEX_W_0F3A20_P_2) },
c0f3af97
L
10134 },
10135
592a252b 10136 /* VEX_LEN_0F3A21_P_2 */
c0f3af97 10137 {
592a252b 10138 { VEX_W_TABLE (VEX_W_0F3A21_P_2) },
c0f3af97
L
10139 },
10140
592a252b 10141 /* VEX_LEN_0F3A22_P_2 */
c0f3af97 10142 {
bf890a93 10143 { "vpinsrK", { XM, Vex128, Edq, Ib }, 0 },
c0f3af97
L
10144 },
10145
43234a1e
L
10146 /* VEX_LEN_0F3A30_P_2 */
10147 {
10148 { VEX_W_TABLE (VEX_W_0F3A30_P_2_LEN_0) },
10149 },
10150
1ba585e8
IT
10151 /* VEX_LEN_0F3A31_P_2 */
10152 {
10153 { VEX_W_TABLE (VEX_W_0F3A31_P_2_LEN_0) },
10154 },
10155
43234a1e
L
10156 /* VEX_LEN_0F3A32_P_2 */
10157 {
10158 { VEX_W_TABLE (VEX_W_0F3A32_P_2_LEN_0) },
10159 },
10160
1ba585e8
IT
10161 /* VEX_LEN_0F3A33_P_2 */
10162 {
10163 { VEX_W_TABLE (VEX_W_0F3A33_P_2_LEN_0) },
10164 },
10165
6c30d220 10166 /* VEX_LEN_0F3A38_P_2 */
c0f3af97 10167 {
6c30d220
L
10168 { Bad_Opcode },
10169 { VEX_W_TABLE (VEX_W_0F3A38_P_2) },
c0f3af97
L
10170 },
10171
6c30d220 10172 /* VEX_LEN_0F3A39_P_2 */
c0f3af97 10173 {
6c30d220
L
10174 { Bad_Opcode },
10175 { VEX_W_TABLE (VEX_W_0F3A39_P_2) },
10176 },
10177
10178 /* VEX_LEN_0F3A41_P_2 */
10179 {
10180 { VEX_W_TABLE (VEX_W_0F3A41_P_2) },
c0f3af97
L
10181 },
10182
592a252b 10183 /* VEX_LEN_0F3A44_P_2 */
ce2f5b3c 10184 {
592a252b 10185 { VEX_W_TABLE (VEX_W_0F3A44_P_2) },
ce2f5b3c
L
10186 },
10187
6c30d220 10188 /* VEX_LEN_0F3A46_P_2 */
c0f3af97 10189 {
6c30d220
L
10190 { Bad_Opcode },
10191 { VEX_W_TABLE (VEX_W_0F3A46_P_2) },
c0f3af97
L
10192 },
10193
592a252b 10194 /* VEX_LEN_0F3A60_P_2 */
c0f3af97 10195 {
592a252b 10196 { VEX_W_TABLE (VEX_W_0F3A60_P_2) },
c0f3af97
L
10197 },
10198
592a252b 10199 /* VEX_LEN_0F3A61_P_2 */
c0f3af97 10200 {
592a252b 10201 { VEX_W_TABLE (VEX_W_0F3A61_P_2) },
c0f3af97
L
10202 },
10203
592a252b 10204 /* VEX_LEN_0F3A62_P_2 */
c0f3af97 10205 {
592a252b 10206 { VEX_W_TABLE (VEX_W_0F3A62_P_2) },
c0f3af97
L
10207 },
10208
592a252b 10209 /* VEX_LEN_0F3A63_P_2 */
c0f3af97 10210 {
592a252b 10211 { VEX_W_TABLE (VEX_W_0F3A63_P_2) },
c0f3af97
L
10212 },
10213
592a252b 10214 /* VEX_LEN_0F3A6A_P_2 */
922d8de8 10215 {
bf890a93 10216 { "vfmaddss", { XMVexW, Vex128, EXdVexW, EXdVexW, VexI4 }, 0 },
922d8de8
DR
10217 },
10218
592a252b 10219 /* VEX_LEN_0F3A6B_P_2 */
922d8de8 10220 {
bf890a93 10221 { "vfmaddsd", { XMVexW, Vex128, EXqVexW, EXqVexW, VexI4 }, 0 },
922d8de8
DR
10222 },
10223
592a252b 10224 /* VEX_LEN_0F3A6E_P_2 */
922d8de8 10225 {
bf890a93 10226 { "vfmsubss", { XMVexW, Vex128, EXdVexW, EXdVexW, VexI4 }, 0 },
922d8de8
DR
10227 },
10228
592a252b 10229 /* VEX_LEN_0F3A6F_P_2 */
922d8de8 10230 {
bf890a93 10231 { "vfmsubsd", { XMVexW, Vex128, EXqVexW, EXqVexW, VexI4 }, 0 },
922d8de8
DR
10232 },
10233
592a252b 10234 /* VEX_LEN_0F3A7A_P_2 */
922d8de8 10235 {
bf890a93 10236 { "vfnmaddss", { XMVexW, Vex128, EXdVexW, EXdVexW, VexI4 }, 0 },
922d8de8
DR
10237 },
10238
592a252b 10239 /* VEX_LEN_0F3A7B_P_2 */
922d8de8 10240 {
bf890a93 10241 { "vfnmaddsd", { XMVexW, Vex128, EXqVexW, EXqVexW, VexI4 }, 0 },
922d8de8
DR
10242 },
10243
592a252b 10244 /* VEX_LEN_0F3A7E_P_2 */
922d8de8 10245 {
bf890a93 10246 { "vfnmsubss", { XMVexW, Vex128, EXdVexW, EXdVexW, VexI4 }, 0 },
922d8de8
DR
10247 },
10248
592a252b 10249 /* VEX_LEN_0F3A7F_P_2 */
922d8de8 10250 {
bf890a93 10251 { "vfnmsubsd", { XMVexW, Vex128, EXqVexW, EXqVexW, VexI4 }, 0 },
922d8de8
DR
10252 },
10253
592a252b 10254 /* VEX_LEN_0F3ADF_P_2 */
a5ff0eb2 10255 {
592a252b 10256 { VEX_W_TABLE (VEX_W_0F3ADF_P_2) },
a5ff0eb2 10257 },
4c807e72 10258
6c30d220
L
10259 /* VEX_LEN_0F3AF0_P_3 */
10260 {
bf890a93 10261 { "rorxS", { Gdq, Edq, Ib }, 0 },
6c30d220
L
10262 },
10263
ff688e1f
L
10264 /* VEX_LEN_0FXOP_08_CC */
10265 {
bf890a93 10266 { "vpcomb", { XM, Vex128, EXx, Ib }, 0 },
ff688e1f
L
10267 },
10268
10269 /* VEX_LEN_0FXOP_08_CD */
10270 {
bf890a93 10271 { "vpcomw", { XM, Vex128, EXx, Ib }, 0 },
ff688e1f
L
10272 },
10273
10274 /* VEX_LEN_0FXOP_08_CE */
10275 {
bf890a93 10276 { "vpcomd", { XM, Vex128, EXx, Ib }, 0 },
ff688e1f
L
10277 },
10278
10279 /* VEX_LEN_0FXOP_08_CF */
10280 {
bf890a93 10281 { "vpcomq", { XM, Vex128, EXx, Ib }, 0 },
ff688e1f
L
10282 },
10283
10284 /* VEX_LEN_0FXOP_08_EC */
10285 {
bf890a93 10286 { "vpcomub", { XM, Vex128, EXx, Ib }, 0 },
ff688e1f
L
10287 },
10288
10289 /* VEX_LEN_0FXOP_08_ED */
10290 {
bf890a93 10291 { "vpcomuw", { XM, Vex128, EXx, Ib }, 0 },
ff688e1f
L
10292 },
10293
10294 /* VEX_LEN_0FXOP_08_EE */
10295 {
bf890a93 10296 { "vpcomud", { XM, Vex128, EXx, Ib }, 0 },
ff688e1f
L
10297 },
10298
10299 /* VEX_LEN_0FXOP_08_EF */
10300 {
bf890a93 10301 { "vpcomuq", { XM, Vex128, EXx, Ib }, 0 },
ff688e1f
L
10302 },
10303
592a252b 10304 /* VEX_LEN_0FXOP_09_80 */
5dd85c99 10305 {
bf890a93
IT
10306 { "vfrczps", { XM, EXxmm }, 0 },
10307 { "vfrczps", { XM, EXymmq }, 0 },
5dd85c99 10308 },
4c807e72 10309
592a252b 10310 /* VEX_LEN_0FXOP_09_81 */
5dd85c99 10311 {
bf890a93
IT
10312 { "vfrczpd", { XM, EXxmm }, 0 },
10313 { "vfrczpd", { XM, EXymmq }, 0 },
5dd85c99 10314 },
331d2d0d
L
10315};
10316
9e30b8e0 10317static const struct dis386 vex_w_table[][2] = {
b844680a 10318 {
592a252b 10319 /* VEX_W_0F10_P_0 */
bf890a93 10320 { "vmovups", { XM, EXx }, 0 },
d8faab4e
L
10321 },
10322 {
592a252b 10323 /* VEX_W_0F10_P_1 */
bf890a93 10324 { "vmovss", { XMVexScalar, VexScalar, EXdScalar }, 0 },
d8faab4e
L
10325 },
10326 {
592a252b 10327 /* VEX_W_0F10_P_2 */
bf890a93 10328 { "vmovupd", { XM, EXx }, 0 },
d8faab4e
L
10329 },
10330 {
592a252b 10331 /* VEX_W_0F10_P_3 */
bf890a93 10332 { "vmovsd", { XMVexScalar, VexScalar, EXqScalar }, 0 },
d8faab4e
L
10333 },
10334 {
592a252b 10335 /* VEX_W_0F11_P_0 */
bf890a93 10336 { "vmovups", { EXxS, XM }, 0 },
d8faab4e
L
10337 },
10338 {
592a252b 10339 /* VEX_W_0F11_P_1 */
bf890a93 10340 { "vmovss", { EXdVexScalarS, VexScalar, XMScalar }, 0 },
b844680a
L
10341 },
10342 {
592a252b 10343 /* VEX_W_0F11_P_2 */
bf890a93 10344 { "vmovupd", { EXxS, XM }, 0 },
b844680a
L
10345 },
10346 {
592a252b 10347 /* VEX_W_0F11_P_3 */
bf890a93 10348 { "vmovsd", { EXqVexScalarS, VexScalar, XMScalar }, 0 },
d8faab4e
L
10349 },
10350 {
592a252b 10351 /* VEX_W_0F12_P_0_M_0 */
bf890a93 10352 { "vmovlps", { XM, Vex128, EXq }, 0 },
b844680a
L
10353 },
10354 {
592a252b 10355 /* VEX_W_0F12_P_0_M_1 */
bf890a93 10356 { "vmovhlps", { XM, Vex128, EXq }, 0 },
b844680a
L
10357 },
10358 {
592a252b 10359 /* VEX_W_0F12_P_1 */
bf890a93 10360 { "vmovsldup", { XM, EXx }, 0 },
b844680a
L
10361 },
10362 {
592a252b 10363 /* VEX_W_0F12_P_2 */
bf890a93 10364 { "vmovlpd", { XM, Vex128, EXq }, 0 },
b844680a
L
10365 },
10366 {
592a252b 10367 /* VEX_W_0F12_P_3 */
bf890a93 10368 { "vmovddup", { XM, EXymmq }, 0 },
b844680a
L
10369 },
10370 {
592a252b 10371 /* VEX_W_0F13_M_0 */
bf890a93 10372 { "vmovlpX", { EXq, XM }, 0 },
b844680a
L
10373 },
10374 {
592a252b 10375 /* VEX_W_0F14 */
bf890a93 10376 { "vunpcklpX", { XM, Vex, EXx }, 0 },
b844680a
L
10377 },
10378 {
592a252b 10379 /* VEX_W_0F15 */
bf890a93 10380 { "vunpckhpX", { XM, Vex, EXx }, 0 },
b844680a
L
10381 },
10382 {
592a252b 10383 /* VEX_W_0F16_P_0_M_0 */
bf890a93 10384 { "vmovhps", { XM, Vex128, EXq }, 0 },
9e30b8e0
L
10385 },
10386 {
592a252b 10387 /* VEX_W_0F16_P_0_M_1 */
bf890a93 10388 { "vmovlhps", { XM, Vex128, EXq }, 0 },
9e30b8e0
L
10389 },
10390 {
592a252b 10391 /* VEX_W_0F16_P_1 */
bf890a93 10392 { "vmovshdup", { XM, EXx }, 0 },
9e30b8e0
L
10393 },
10394 {
592a252b 10395 /* VEX_W_0F16_P_2 */
bf890a93 10396 { "vmovhpd", { XM, Vex128, EXq }, 0 },
9e30b8e0
L
10397 },
10398 {
592a252b 10399 /* VEX_W_0F17_M_0 */
bf890a93 10400 { "vmovhpX", { EXq, XM }, 0 },
9e30b8e0
L
10401 },
10402 {
592a252b 10403 /* VEX_W_0F28 */
bf890a93 10404 { "vmovapX", { XM, EXx }, 0 },
9e30b8e0
L
10405 },
10406 {
592a252b 10407 /* VEX_W_0F29 */
bf890a93 10408 { "vmovapX", { EXxS, XM }, 0 },
9e30b8e0
L
10409 },
10410 {
592a252b 10411 /* VEX_W_0F2B_M_0 */
bf890a93 10412 { "vmovntpX", { Mx, XM }, 0 },
9e30b8e0
L
10413 },
10414 {
592a252b 10415 /* VEX_W_0F2E_P_0 */
bf890a93 10416 { "vucomiss", { XMScalar, EXdScalar }, 0 },
9e30b8e0
L
10417 },
10418 {
592a252b 10419 /* VEX_W_0F2E_P_2 */
bf890a93 10420 { "vucomisd", { XMScalar, EXqScalar }, 0 },
9e30b8e0
L
10421 },
10422 {
592a252b 10423 /* VEX_W_0F2F_P_0 */
bf890a93 10424 { "vcomiss", { XMScalar, EXdScalar }, 0 },
9e30b8e0
L
10425 },
10426 {
592a252b 10427 /* VEX_W_0F2F_P_2 */
bf890a93 10428 { "vcomisd", { XMScalar, EXqScalar }, 0 },
9e30b8e0 10429 },
43234a1e
L
10430 {
10431 /* VEX_W_0F41_P_0_LEN_1 */
bf890a93
IT
10432 { "kandw", { MaskG, MaskVex, MaskR }, 0 },
10433 { "kandq", { MaskG, MaskVex, MaskR }, 0 },
1ba585e8
IT
10434 },
10435 {
10436 /* VEX_W_0F41_P_2_LEN_1 */
bf890a93
IT
10437 { "kandb", { MaskG, MaskVex, MaskR }, 0 },
10438 { "kandd", { MaskG, MaskVex, MaskR }, 0 },
43234a1e
L
10439 },
10440 {
10441 /* VEX_W_0F42_P_0_LEN_1 */
bf890a93
IT
10442 { "kandnw", { MaskG, MaskVex, MaskR }, 0 },
10443 { "kandnq", { MaskG, MaskVex, MaskR }, 0 },
1ba585e8
IT
10444 },
10445 {
10446 /* VEX_W_0F42_P_2_LEN_1 */
bf890a93
IT
10447 { "kandnb", { MaskG, MaskVex, MaskR }, 0 },
10448 { "kandnd", { MaskG, MaskVex, MaskR }, 0 },
43234a1e
L
10449 },
10450 {
10451 /* VEX_W_0F44_P_0_LEN_0 */
bf890a93
IT
10452 { "knotw", { MaskG, MaskR }, 0 },
10453 { "knotq", { MaskG, MaskR }, 0 },
1ba585e8
IT
10454 },
10455 {
10456 /* VEX_W_0F44_P_2_LEN_0 */
bf890a93
IT
10457 { "knotb", { MaskG, MaskR }, 0 },
10458 { "knotd", { MaskG, MaskR }, 0 },
43234a1e
L
10459 },
10460 {
10461 /* VEX_W_0F45_P_0_LEN_1 */
bf890a93
IT
10462 { "korw", { MaskG, MaskVex, MaskR }, 0 },
10463 { "korq", { MaskG, MaskVex, MaskR }, 0 },
1ba585e8
IT
10464 },
10465 {
10466 /* VEX_W_0F45_P_2_LEN_1 */
bf890a93
IT
10467 { "korb", { MaskG, MaskVex, MaskR }, 0 },
10468 { "kord", { MaskG, MaskVex, MaskR }, 0 },
43234a1e
L
10469 },
10470 {
10471 /* VEX_W_0F46_P_0_LEN_1 */
bf890a93
IT
10472 { "kxnorw", { MaskG, MaskVex, MaskR }, 0 },
10473 { "kxnorq", { MaskG, MaskVex, MaskR }, 0 },
1ba585e8
IT
10474 },
10475 {
10476 /* VEX_W_0F46_P_2_LEN_1 */
bf890a93
IT
10477 { "kxnorb", { MaskG, MaskVex, MaskR }, 0 },
10478 { "kxnord", { MaskG, MaskVex, MaskR }, 0 },
43234a1e
L
10479 },
10480 {
10481 /* VEX_W_0F47_P_0_LEN_1 */
bf890a93
IT
10482 { "kxorw", { MaskG, MaskVex, MaskR }, 0 },
10483 { "kxorq", { MaskG, MaskVex, MaskR }, 0 },
1ba585e8
IT
10484 },
10485 {
10486 /* VEX_W_0F47_P_2_LEN_1 */
bf890a93
IT
10487 { "kxorb", { MaskG, MaskVex, MaskR }, 0 },
10488 { "kxord", { MaskG, MaskVex, MaskR }, 0 },
1ba585e8
IT
10489 },
10490 {
10491 /* VEX_W_0F4A_P_0_LEN_1 */
bf890a93
IT
10492 { "kaddw", { MaskG, MaskVex, MaskR }, 0 },
10493 { "kaddq", { MaskG, MaskVex, MaskR }, 0 },
1ba585e8
IT
10494 },
10495 {
10496 /* VEX_W_0F4A_P_2_LEN_1 */
bf890a93
IT
10497 { "kaddb", { MaskG, MaskVex, MaskR }, 0 },
10498 { "kaddd", { MaskG, MaskVex, MaskR }, 0 },
1ba585e8
IT
10499 },
10500 {
10501 /* VEX_W_0F4B_P_0_LEN_1 */
bf890a93
IT
10502 { "kunpckwd", { MaskG, MaskVex, MaskR }, 0 },
10503 { "kunpckdq", { MaskG, MaskVex, MaskR }, 0 },
43234a1e
L
10504 },
10505 {
10506 /* VEX_W_0F4B_P_2_LEN_1 */
bf890a93 10507 { "kunpckbw", { MaskG, MaskVex, MaskR }, 0 },
43234a1e 10508 },
9e30b8e0 10509 {
592a252b 10510 /* VEX_W_0F50_M_0 */
bf890a93 10511 { "vmovmskpX", { Gdq, XS }, 0 },
9e30b8e0
L
10512 },
10513 {
592a252b 10514 /* VEX_W_0F51_P_0 */
bf890a93 10515 { "vsqrtps", { XM, EXx }, 0 },
9e30b8e0
L
10516 },
10517 {
592a252b 10518 /* VEX_W_0F51_P_1 */
bf890a93 10519 { "vsqrtss", { XMScalar, VexScalar, EXdScalar }, 0 },
9e30b8e0
L
10520 },
10521 {
592a252b 10522 /* VEX_W_0F51_P_2 */
bf890a93 10523 { "vsqrtpd", { XM, EXx }, 0 },
9e30b8e0
L
10524 },
10525 {
592a252b 10526 /* VEX_W_0F51_P_3 */
bf890a93 10527 { "vsqrtsd", { XMScalar, VexScalar, EXqScalar }, 0 },
9e30b8e0
L
10528 },
10529 {
592a252b 10530 /* VEX_W_0F52_P_0 */
bf890a93 10531 { "vrsqrtps", { XM, EXx }, 0 },
9e30b8e0
L
10532 },
10533 {
592a252b 10534 /* VEX_W_0F52_P_1 */
bf890a93 10535 { "vrsqrtss", { XMScalar, VexScalar, EXdScalar }, 0 },
9e30b8e0
L
10536 },
10537 {
592a252b 10538 /* VEX_W_0F53_P_0 */
bf890a93 10539 { "vrcpps", { XM, EXx }, 0 },
9e30b8e0
L
10540 },
10541 {
592a252b 10542 /* VEX_W_0F53_P_1 */
bf890a93 10543 { "vrcpss", { XMScalar, VexScalar, EXdScalar }, 0 },
9e30b8e0
L
10544 },
10545 {
592a252b 10546 /* VEX_W_0F58_P_0 */
bf890a93 10547 { "vaddps", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10548 },
10549 {
592a252b 10550 /* VEX_W_0F58_P_1 */
bf890a93 10551 { "vaddss", { XMScalar, VexScalar, EXdScalar }, 0 },
9e30b8e0
L
10552 },
10553 {
592a252b 10554 /* VEX_W_0F58_P_2 */
bf890a93 10555 { "vaddpd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10556 },
10557 {
592a252b 10558 /* VEX_W_0F58_P_3 */
bf890a93 10559 { "vaddsd", { XMScalar, VexScalar, EXqScalar }, 0 },
9e30b8e0
L
10560 },
10561 {
592a252b 10562 /* VEX_W_0F59_P_0 */
bf890a93 10563 { "vmulps", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10564 },
10565 {
592a252b 10566 /* VEX_W_0F59_P_1 */
bf890a93 10567 { "vmulss", { XMScalar, VexScalar, EXdScalar }, 0 },
9e30b8e0
L
10568 },
10569 {
592a252b 10570 /* VEX_W_0F59_P_2 */
bf890a93 10571 { "vmulpd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10572 },
10573 {
592a252b 10574 /* VEX_W_0F59_P_3 */
bf890a93 10575 { "vmulsd", { XMScalar, VexScalar, EXqScalar }, 0 },
9e30b8e0
L
10576 },
10577 {
592a252b 10578 /* VEX_W_0F5A_P_0 */
bf890a93 10579 { "vcvtps2pd", { XM, EXxmmq }, 0 },
9e30b8e0
L
10580 },
10581 {
592a252b 10582 /* VEX_W_0F5A_P_1 */
bf890a93 10583 { "vcvtss2sd", { XMScalar, VexScalar, EXdScalar }, 0 },
9e30b8e0
L
10584 },
10585 {
592a252b 10586 /* VEX_W_0F5A_P_3 */
bf890a93 10587 { "vcvtsd2ss", { XMScalar, VexScalar, EXqScalar }, 0 },
9e30b8e0
L
10588 },
10589 {
592a252b 10590 /* VEX_W_0F5B_P_0 */
bf890a93 10591 { "vcvtdq2ps", { XM, EXx }, 0 },
9e30b8e0
L
10592 },
10593 {
592a252b 10594 /* VEX_W_0F5B_P_1 */
bf890a93 10595 { "vcvttps2dq", { XM, EXx }, 0 },
9e30b8e0
L
10596 },
10597 {
592a252b 10598 /* VEX_W_0F5B_P_2 */
bf890a93 10599 { "vcvtps2dq", { XM, EXx }, 0 },
9e30b8e0
L
10600 },
10601 {
592a252b 10602 /* VEX_W_0F5C_P_0 */
bf890a93 10603 { "vsubps", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10604 },
10605 {
592a252b 10606 /* VEX_W_0F5C_P_1 */
bf890a93 10607 { "vsubss", { XMScalar, VexScalar, EXdScalar }, 0 },
9e30b8e0
L
10608 },
10609 {
592a252b 10610 /* VEX_W_0F5C_P_2 */
bf890a93 10611 { "vsubpd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10612 },
10613 {
592a252b 10614 /* VEX_W_0F5C_P_3 */
bf890a93 10615 { "vsubsd", { XMScalar, VexScalar, EXqScalar }, 0 },
9e30b8e0
L
10616 },
10617 {
592a252b 10618 /* VEX_W_0F5D_P_0 */
bf890a93 10619 { "vminps", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10620 },
10621 {
592a252b 10622 /* VEX_W_0F5D_P_1 */
bf890a93 10623 { "vminss", { XMScalar, VexScalar, EXdScalar }, 0 },
9e30b8e0
L
10624 },
10625 {
592a252b 10626 /* VEX_W_0F5D_P_2 */
bf890a93 10627 { "vminpd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10628 },
10629 {
592a252b 10630 /* VEX_W_0F5D_P_3 */
bf890a93 10631 { "vminsd", { XMScalar, VexScalar, EXqScalar }, 0 },
9e30b8e0
L
10632 },
10633 {
592a252b 10634 /* VEX_W_0F5E_P_0 */
bf890a93 10635 { "vdivps", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10636 },
10637 {
592a252b 10638 /* VEX_W_0F5E_P_1 */
bf890a93 10639 { "vdivss", { XMScalar, VexScalar, EXdScalar }, 0 },
9e30b8e0
L
10640 },
10641 {
592a252b 10642 /* VEX_W_0F5E_P_2 */
bf890a93 10643 { "vdivpd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10644 },
10645 {
592a252b 10646 /* VEX_W_0F5E_P_3 */
bf890a93 10647 { "vdivsd", { XMScalar, VexScalar, EXqScalar }, 0 },
9e30b8e0
L
10648 },
10649 {
592a252b 10650 /* VEX_W_0F5F_P_0 */
bf890a93 10651 { "vmaxps", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10652 },
10653 {
592a252b 10654 /* VEX_W_0F5F_P_1 */
bf890a93 10655 { "vmaxss", { XMScalar, VexScalar, EXdScalar }, 0 },
9e30b8e0
L
10656 },
10657 {
592a252b 10658 /* VEX_W_0F5F_P_2 */
bf890a93 10659 { "vmaxpd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10660 },
10661 {
592a252b 10662 /* VEX_W_0F5F_P_3 */
bf890a93 10663 { "vmaxsd", { XMScalar, VexScalar, EXqScalar }, 0 },
9e30b8e0
L
10664 },
10665 {
592a252b 10666 /* VEX_W_0F60_P_2 */
bf890a93 10667 { "vpunpcklbw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10668 },
10669 {
592a252b 10670 /* VEX_W_0F61_P_2 */
bf890a93 10671 { "vpunpcklwd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10672 },
10673 {
592a252b 10674 /* VEX_W_0F62_P_2 */
bf890a93 10675 { "vpunpckldq", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10676 },
10677 {
592a252b 10678 /* VEX_W_0F63_P_2 */
bf890a93 10679 { "vpacksswb", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10680 },
10681 {
592a252b 10682 /* VEX_W_0F64_P_2 */
bf890a93 10683 { "vpcmpgtb", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10684 },
10685 {
592a252b 10686 /* VEX_W_0F65_P_2 */
bf890a93 10687 { "vpcmpgtw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10688 },
10689 {
592a252b 10690 /* VEX_W_0F66_P_2 */
bf890a93 10691 { "vpcmpgtd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10692 },
10693 {
592a252b 10694 /* VEX_W_0F67_P_2 */
bf890a93 10695 { "vpackuswb", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10696 },
10697 {
592a252b 10698 /* VEX_W_0F68_P_2 */
bf890a93 10699 { "vpunpckhbw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10700 },
10701 {
592a252b 10702 /* VEX_W_0F69_P_2 */
bf890a93 10703 { "vpunpckhwd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10704 },
10705 {
592a252b 10706 /* VEX_W_0F6A_P_2 */
bf890a93 10707 { "vpunpckhdq", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10708 },
10709 {
592a252b 10710 /* VEX_W_0F6B_P_2 */
bf890a93 10711 { "vpackssdw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10712 },
10713 {
592a252b 10714 /* VEX_W_0F6C_P_2 */
bf890a93 10715 { "vpunpcklqdq", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10716 },
10717 {
592a252b 10718 /* VEX_W_0F6D_P_2 */
bf890a93 10719 { "vpunpckhqdq", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10720 },
10721 {
592a252b 10722 /* VEX_W_0F6F_P_1 */
bf890a93 10723 { "vmovdqu", { XM, EXx }, 0 },
9e30b8e0
L
10724 },
10725 {
592a252b 10726 /* VEX_W_0F6F_P_2 */
bf890a93 10727 { "vmovdqa", { XM, EXx }, 0 },
9e30b8e0
L
10728 },
10729 {
592a252b 10730 /* VEX_W_0F70_P_1 */
bf890a93 10731 { "vpshufhw", { XM, EXx, Ib }, 0 },
9e30b8e0
L
10732 },
10733 {
592a252b 10734 /* VEX_W_0F70_P_2 */
bf890a93 10735 { "vpshufd", { XM, EXx, Ib }, 0 },
9e30b8e0
L
10736 },
10737 {
592a252b 10738 /* VEX_W_0F70_P_3 */
bf890a93 10739 { "vpshuflw", { XM, EXx, Ib }, 0 },
9e30b8e0
L
10740 },
10741 {
592a252b 10742 /* VEX_W_0F71_R_2_P_2 */
bf890a93 10743 { "vpsrlw", { Vex, XS, Ib }, 0 },
9e30b8e0
L
10744 },
10745 {
592a252b 10746 /* VEX_W_0F71_R_4_P_2 */
bf890a93 10747 { "vpsraw", { Vex, XS, Ib }, 0 },
9e30b8e0
L
10748 },
10749 {
592a252b 10750 /* VEX_W_0F71_R_6_P_2 */
bf890a93 10751 { "vpsllw", { Vex, XS, Ib }, 0 },
9e30b8e0
L
10752 },
10753 {
592a252b 10754 /* VEX_W_0F72_R_2_P_2 */
bf890a93 10755 { "vpsrld", { Vex, XS, Ib }, 0 },
9e30b8e0
L
10756 },
10757 {
592a252b 10758 /* VEX_W_0F72_R_4_P_2 */
bf890a93 10759 { "vpsrad", { Vex, XS, Ib }, 0 },
9e30b8e0
L
10760 },
10761 {
592a252b 10762 /* VEX_W_0F72_R_6_P_2 */
bf890a93 10763 { "vpslld", { Vex, XS, Ib }, 0 },
9e30b8e0
L
10764 },
10765 {
592a252b 10766 /* VEX_W_0F73_R_2_P_2 */
bf890a93 10767 { "vpsrlq", { Vex, XS, Ib }, 0 },
9e30b8e0
L
10768 },
10769 {
592a252b 10770 /* VEX_W_0F73_R_3_P_2 */
bf890a93 10771 { "vpsrldq", { Vex, XS, Ib }, 0 },
9e30b8e0
L
10772 },
10773 {
592a252b 10774 /* VEX_W_0F73_R_6_P_2 */
bf890a93 10775 { "vpsllq", { Vex, XS, Ib }, 0 },
9e30b8e0
L
10776 },
10777 {
592a252b 10778 /* VEX_W_0F73_R_7_P_2 */
bf890a93 10779 { "vpslldq", { Vex, XS, Ib }, 0 },
9e30b8e0
L
10780 },
10781 {
592a252b 10782 /* VEX_W_0F74_P_2 */
bf890a93 10783 { "vpcmpeqb", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10784 },
10785 {
592a252b 10786 /* VEX_W_0F75_P_2 */
bf890a93 10787 { "vpcmpeqw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10788 },
10789 {
592a252b 10790 /* VEX_W_0F76_P_2 */
bf890a93 10791 { "vpcmpeqd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10792 },
10793 {
592a252b 10794 /* VEX_W_0F77_P_0 */
bf890a93 10795 { "", { VZERO }, 0 },
9e30b8e0
L
10796 },
10797 {
592a252b 10798 /* VEX_W_0F7C_P_2 */
bf890a93 10799 { "vhaddpd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10800 },
10801 {
592a252b 10802 /* VEX_W_0F7C_P_3 */
bf890a93 10803 { "vhaddps", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10804 },
10805 {
592a252b 10806 /* VEX_W_0F7D_P_2 */
bf890a93 10807 { "vhsubpd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10808 },
10809 {
592a252b 10810 /* VEX_W_0F7D_P_3 */
bf890a93 10811 { "vhsubps", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10812 },
10813 {
592a252b 10814 /* VEX_W_0F7E_P_1 */
bf890a93 10815 { "vmovq", { XMScalar, EXqScalar }, 0 },
9e30b8e0
L
10816 },
10817 {
592a252b 10818 /* VEX_W_0F7F_P_1 */
bf890a93 10819 { "vmovdqu", { EXxS, XM }, 0 },
9e30b8e0
L
10820 },
10821 {
592a252b 10822 /* VEX_W_0F7F_P_2 */
bf890a93 10823 { "vmovdqa", { EXxS, XM }, 0 },
9e30b8e0 10824 },
43234a1e
L
10825 {
10826 /* VEX_W_0F90_P_0_LEN_0 */
bf890a93
IT
10827 { "kmovw", { MaskG, MaskE }, 0 },
10828 { "kmovq", { MaskG, MaskE }, 0 },
1ba585e8
IT
10829 },
10830 {
10831 /* VEX_W_0F90_P_2_LEN_0 */
bf890a93
IT
10832 { "kmovb", { MaskG, MaskBDE }, 0 },
10833 { "kmovd", { MaskG, MaskBDE }, 0 },
43234a1e
L
10834 },
10835 {
10836 /* VEX_W_0F91_P_0_LEN_0 */
bf890a93
IT
10837 { "kmovw", { Ew, MaskG }, 0 },
10838 { "kmovq", { Eq, MaskG }, 0 },
1ba585e8
IT
10839 },
10840 {
10841 /* VEX_W_0F91_P_2_LEN_0 */
bf890a93
IT
10842 { "kmovb", { Eb, MaskG }, 0 },
10843 { "kmovd", { Ed, MaskG }, 0 },
43234a1e
L
10844 },
10845 {
10846 /* VEX_W_0F92_P_0_LEN_0 */
bf890a93 10847 { "kmovw", { MaskG, Rdq }, 0 },
43234a1e 10848 },
90a915bf
IT
10849 {
10850 /* VEX_W_0F92_P_2_LEN_0 */
bf890a93 10851 { "kmovb", { MaskG, Rdq }, 0 },
90a915bf 10852 },
1ba585e8
IT
10853 {
10854 /* VEX_W_0F92_P_3_LEN_0 */
bf890a93
IT
10855 { "kmovd", { MaskG, Rdq }, 0 },
10856 { "kmovq", { MaskG, Rdq }, 0 },
1ba585e8 10857 },
43234a1e
L
10858 {
10859 /* VEX_W_0F93_P_0_LEN_0 */
bf890a93 10860 { "kmovw", { Gdq, MaskR }, 0 },
43234a1e 10861 },
90a915bf
IT
10862 {
10863 /* VEX_W_0F93_P_2_LEN_0 */
bf890a93 10864 { "kmovb", { Gdq, MaskR }, 0 },
90a915bf 10865 },
1ba585e8
IT
10866 {
10867 /* VEX_W_0F93_P_3_LEN_0 */
bf890a93
IT
10868 { "kmovd", { Gdq, MaskR }, 0 },
10869 { "kmovq", { Gdq, MaskR }, 0 },
1ba585e8 10870 },
43234a1e
L
10871 {
10872 /* VEX_W_0F98_P_0_LEN_0 */
bf890a93
IT
10873 { "kortestw", { MaskG, MaskR }, 0 },
10874 { "kortestq", { MaskG, MaskR }, 0 },
1ba585e8
IT
10875 },
10876 {
10877 /* VEX_W_0F98_P_2_LEN_0 */
bf890a93
IT
10878 { "kortestb", { MaskG, MaskR }, 0 },
10879 { "kortestd", { MaskG, MaskR }, 0 },
1ba585e8
IT
10880 },
10881 {
10882 /* VEX_W_0F99_P_0_LEN_0 */
bf890a93
IT
10883 { "ktestw", { MaskG, MaskR }, 0 },
10884 { "ktestq", { MaskG, MaskR }, 0 },
1ba585e8
IT
10885 },
10886 {
10887 /* VEX_W_0F99_P_2_LEN_0 */
bf890a93
IT
10888 { "ktestb", { MaskG, MaskR }, 0 },
10889 { "ktestd", { MaskG, MaskR }, 0 },
43234a1e 10890 },
9e30b8e0 10891 {
592a252b 10892 /* VEX_W_0FAE_R_2_M_0 */
bf890a93 10893 { "vldmxcsr", { Md }, 0 },
9e30b8e0
L
10894 },
10895 {
592a252b 10896 /* VEX_W_0FAE_R_3_M_0 */
bf890a93 10897 { "vstmxcsr", { Md }, 0 },
9e30b8e0
L
10898 },
10899 {
592a252b 10900 /* VEX_W_0FC2_P_0 */
bf890a93 10901 { "vcmpps", { XM, Vex, EXx, VCMP }, 0 },
9e30b8e0
L
10902 },
10903 {
592a252b 10904 /* VEX_W_0FC2_P_1 */
bf890a93 10905 { "vcmpss", { XMScalar, VexScalar, EXdScalar, VCMP }, 0 },
9e30b8e0
L
10906 },
10907 {
592a252b 10908 /* VEX_W_0FC2_P_2 */
bf890a93 10909 { "vcmppd", { XM, Vex, EXx, VCMP }, 0 },
9e30b8e0
L
10910 },
10911 {
592a252b 10912 /* VEX_W_0FC2_P_3 */
bf890a93 10913 { "vcmpsd", { XMScalar, VexScalar, EXqScalar, VCMP }, 0 },
9e30b8e0
L
10914 },
10915 {
592a252b 10916 /* VEX_W_0FC4_P_2 */
bf890a93 10917 { "vpinsrw", { XM, Vex128, Edqw, Ib }, 0 },
9e30b8e0
L
10918 },
10919 {
592a252b 10920 /* VEX_W_0FC5_P_2 */
bf890a93 10921 { "vpextrw", { Gdq, XS, Ib }, 0 },
9e30b8e0
L
10922 },
10923 {
592a252b 10924 /* VEX_W_0FD0_P_2 */
bf890a93 10925 { "vaddsubpd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10926 },
10927 {
592a252b 10928 /* VEX_W_0FD0_P_3 */
bf890a93 10929 { "vaddsubps", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10930 },
10931 {
592a252b 10932 /* VEX_W_0FD1_P_2 */
bf890a93 10933 { "vpsrlw", { XM, Vex, EXxmm }, 0 },
9e30b8e0
L
10934 },
10935 {
592a252b 10936 /* VEX_W_0FD2_P_2 */
bf890a93 10937 { "vpsrld", { XM, Vex, EXxmm }, 0 },
9e30b8e0
L
10938 },
10939 {
592a252b 10940 /* VEX_W_0FD3_P_2 */
bf890a93 10941 { "vpsrlq", { XM, Vex, EXxmm }, 0 },
9e30b8e0
L
10942 },
10943 {
592a252b 10944 /* VEX_W_0FD4_P_2 */
bf890a93 10945 { "vpaddq", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10946 },
10947 {
592a252b 10948 /* VEX_W_0FD5_P_2 */
bf890a93 10949 { "vpmullw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10950 },
10951 {
592a252b 10952 /* VEX_W_0FD6_P_2 */
bf890a93 10953 { "vmovq", { EXqScalarS, XMScalar }, 0 },
9e30b8e0
L
10954 },
10955 {
592a252b 10956 /* VEX_W_0FD7_P_2_M_1 */
bf890a93 10957 { "vpmovmskb", { Gdq, XS }, 0 },
9e30b8e0
L
10958 },
10959 {
592a252b 10960 /* VEX_W_0FD8_P_2 */
bf890a93 10961 { "vpsubusb", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10962 },
10963 {
592a252b 10964 /* VEX_W_0FD9_P_2 */
bf890a93 10965 { "vpsubusw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10966 },
10967 {
592a252b 10968 /* VEX_W_0FDA_P_2 */
bf890a93 10969 { "vpminub", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10970 },
10971 {
592a252b 10972 /* VEX_W_0FDB_P_2 */
bf890a93 10973 { "vpand", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10974 },
10975 {
592a252b 10976 /* VEX_W_0FDC_P_2 */
bf890a93 10977 { "vpaddusb", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10978 },
10979 {
592a252b 10980 /* VEX_W_0FDD_P_2 */
bf890a93 10981 { "vpaddusw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10982 },
10983 {
592a252b 10984 /* VEX_W_0FDE_P_2 */
bf890a93 10985 { "vpmaxub", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10986 },
10987 {
592a252b 10988 /* VEX_W_0FDF_P_2 */
bf890a93 10989 { "vpandn", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10990 },
10991 {
592a252b 10992 /* VEX_W_0FE0_P_2 */
bf890a93 10993 { "vpavgb", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10994 },
10995 {
592a252b 10996 /* VEX_W_0FE1_P_2 */
bf890a93 10997 { "vpsraw", { XM, Vex, EXxmm }, 0 },
9e30b8e0
L
10998 },
10999 {
592a252b 11000 /* VEX_W_0FE2_P_2 */
bf890a93 11001 { "vpsrad", { XM, Vex, EXxmm }, 0 },
9e30b8e0
L
11002 },
11003 {
592a252b 11004 /* VEX_W_0FE3_P_2 */
bf890a93 11005 { "vpavgw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11006 },
11007 {
592a252b 11008 /* VEX_W_0FE4_P_2 */
bf890a93 11009 { "vpmulhuw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11010 },
11011 {
592a252b 11012 /* VEX_W_0FE5_P_2 */
bf890a93 11013 { "vpmulhw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11014 },
11015 {
592a252b 11016 /* VEX_W_0FE6_P_1 */
bf890a93 11017 { "vcvtdq2pd", { XM, EXxmmq }, 0 },
9e30b8e0
L
11018 },
11019 {
592a252b 11020 /* VEX_W_0FE6_P_2 */
bf890a93 11021 { "vcvttpd2dq%XY", { XMM, EXx }, 0 },
9e30b8e0
L
11022 },
11023 {
592a252b 11024 /* VEX_W_0FE6_P_3 */
bf890a93 11025 { "vcvtpd2dq%XY", { XMM, EXx }, 0 },
9e30b8e0
L
11026 },
11027 {
592a252b 11028 /* VEX_W_0FE7_P_2_M_0 */
bf890a93 11029 { "vmovntdq", { Mx, XM }, 0 },
9e30b8e0
L
11030 },
11031 {
592a252b 11032 /* VEX_W_0FE8_P_2 */
bf890a93 11033 { "vpsubsb", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11034 },
11035 {
592a252b 11036 /* VEX_W_0FE9_P_2 */
bf890a93 11037 { "vpsubsw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11038 },
11039 {
592a252b 11040 /* VEX_W_0FEA_P_2 */
bf890a93 11041 { "vpminsw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11042 },
11043 {
592a252b 11044 /* VEX_W_0FEB_P_2 */
bf890a93 11045 { "vpor", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11046 },
11047 {
592a252b 11048 /* VEX_W_0FEC_P_2 */
bf890a93 11049 { "vpaddsb", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11050 },
11051 {
592a252b 11052 /* VEX_W_0FED_P_2 */
bf890a93 11053 { "vpaddsw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11054 },
11055 {
592a252b 11056 /* VEX_W_0FEE_P_2 */
bf890a93 11057 { "vpmaxsw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11058 },
11059 {
592a252b 11060 /* VEX_W_0FEF_P_2 */
bf890a93 11061 { "vpxor", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11062 },
11063 {
592a252b 11064 /* VEX_W_0FF0_P_3_M_0 */
bf890a93 11065 { "vlddqu", { XM, M }, 0 },
9e30b8e0
L
11066 },
11067 {
592a252b 11068 /* VEX_W_0FF1_P_2 */
bf890a93 11069 { "vpsllw", { XM, Vex, EXxmm }, 0 },
9e30b8e0
L
11070 },
11071 {
592a252b 11072 /* VEX_W_0FF2_P_2 */
bf890a93 11073 { "vpslld", { XM, Vex, EXxmm }, 0 },
9e30b8e0
L
11074 },
11075 {
592a252b 11076 /* VEX_W_0FF3_P_2 */
bf890a93 11077 { "vpsllq", { XM, Vex, EXxmm }, 0 },
9e30b8e0
L
11078 },
11079 {
592a252b 11080 /* VEX_W_0FF4_P_2 */
bf890a93 11081 { "vpmuludq", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11082 },
11083 {
592a252b 11084 /* VEX_W_0FF5_P_2 */
bf890a93 11085 { "vpmaddwd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11086 },
11087 {
592a252b 11088 /* VEX_W_0FF6_P_2 */
bf890a93 11089 { "vpsadbw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11090 },
11091 {
592a252b 11092 /* VEX_W_0FF7_P_2 */
bf890a93 11093 { "vmaskmovdqu", { XM, XS }, 0 },
9e30b8e0
L
11094 },
11095 {
592a252b 11096 /* VEX_W_0FF8_P_2 */
bf890a93 11097 { "vpsubb", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11098 },
11099 {
592a252b 11100 /* VEX_W_0FF9_P_2 */
bf890a93 11101 { "vpsubw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11102 },
11103 {
592a252b 11104 /* VEX_W_0FFA_P_2 */
bf890a93 11105 { "vpsubd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11106 },
11107 {
592a252b 11108 /* VEX_W_0FFB_P_2 */
bf890a93 11109 { "vpsubq", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11110 },
11111 {
592a252b 11112 /* VEX_W_0FFC_P_2 */
bf890a93 11113 { "vpaddb", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11114 },
11115 {
592a252b 11116 /* VEX_W_0FFD_P_2 */
bf890a93 11117 { "vpaddw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11118 },
11119 {
592a252b 11120 /* VEX_W_0FFE_P_2 */
bf890a93 11121 { "vpaddd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11122 },
11123 {
592a252b 11124 /* VEX_W_0F3800_P_2 */
bf890a93 11125 { "vpshufb", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11126 },
11127 {
592a252b 11128 /* VEX_W_0F3801_P_2 */
bf890a93 11129 { "vphaddw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11130 },
11131 {
592a252b 11132 /* VEX_W_0F3802_P_2 */
bf890a93 11133 { "vphaddd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11134 },
11135 {
592a252b 11136 /* VEX_W_0F3803_P_2 */
bf890a93 11137 { "vphaddsw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11138 },
11139 {
592a252b 11140 /* VEX_W_0F3804_P_2 */
bf890a93 11141 { "vpmaddubsw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11142 },
11143 {
592a252b 11144 /* VEX_W_0F3805_P_2 */
bf890a93 11145 { "vphsubw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11146 },
11147 {
592a252b 11148 /* VEX_W_0F3806_P_2 */
bf890a93 11149 { "vphsubd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11150 },
11151 {
592a252b 11152 /* VEX_W_0F3807_P_2 */
bf890a93 11153 { "vphsubsw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11154 },
11155 {
592a252b 11156 /* VEX_W_0F3808_P_2 */
bf890a93 11157 { "vpsignb", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11158 },
11159 {
592a252b 11160 /* VEX_W_0F3809_P_2 */
bf890a93 11161 { "vpsignw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11162 },
11163 {
592a252b 11164 /* VEX_W_0F380A_P_2 */
bf890a93 11165 { "vpsignd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11166 },
11167 {
592a252b 11168 /* VEX_W_0F380B_P_2 */
bf890a93 11169 { "vpmulhrsw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11170 },
11171 {
592a252b 11172 /* VEX_W_0F380C_P_2 */
bf890a93 11173 { "vpermilps", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11174 },
11175 {
592a252b 11176 /* VEX_W_0F380D_P_2 */
bf890a93 11177 { "vpermilpd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11178 },
11179 {
592a252b 11180 /* VEX_W_0F380E_P_2 */
bf890a93 11181 { "vtestps", { XM, EXx }, 0 },
9e30b8e0
L
11182 },
11183 {
592a252b 11184 /* VEX_W_0F380F_P_2 */
bf890a93 11185 { "vtestpd", { XM, EXx }, 0 },
9e30b8e0 11186 },
6c30d220
L
11187 {
11188 /* VEX_W_0F3816_P_2 */
bf890a93 11189 { "vpermps", { XM, Vex, EXx }, 0 },
6c30d220 11190 },
9e30b8e0 11191 {
592a252b 11192 /* VEX_W_0F3817_P_2 */
bf890a93 11193 { "vptest", { XM, EXx }, 0 },
9e30b8e0 11194 },
bcf2684f 11195 {
6c30d220 11196 /* VEX_W_0F3818_P_2 */
bf890a93 11197 { "vbroadcastss", { XM, EXxmm_md }, 0 },
bcf2684f 11198 },
9e30b8e0 11199 {
6c30d220 11200 /* VEX_W_0F3819_P_2 */
bf890a93 11201 { "vbroadcastsd", { XM, EXxmm_mq }, 0 },
9e30b8e0
L
11202 },
11203 {
592a252b 11204 /* VEX_W_0F381A_P_2_M_0 */
bf890a93 11205 { "vbroadcastf128", { XM, Mxmm }, 0 },
9e30b8e0
L
11206 },
11207 {
592a252b 11208 /* VEX_W_0F381C_P_2 */
bf890a93 11209 { "vpabsb", { XM, EXx }, 0 },
9e30b8e0
L
11210 },
11211 {
592a252b 11212 /* VEX_W_0F381D_P_2 */
bf890a93 11213 { "vpabsw", { XM, EXx }, 0 },
9e30b8e0
L
11214 },
11215 {
592a252b 11216 /* VEX_W_0F381E_P_2 */
bf890a93 11217 { "vpabsd", { XM, EXx }, 0 },
9e30b8e0
L
11218 },
11219 {
592a252b 11220 /* VEX_W_0F3820_P_2 */
bf890a93 11221 { "vpmovsxbw", { XM, EXxmmq }, 0 },
9e30b8e0
L
11222 },
11223 {
592a252b 11224 /* VEX_W_0F3821_P_2 */
bf890a93 11225 { "vpmovsxbd", { XM, EXxmmqd }, 0 },
9e30b8e0
L
11226 },
11227 {
592a252b 11228 /* VEX_W_0F3822_P_2 */
bf890a93 11229 { "vpmovsxbq", { XM, EXxmmdw }, 0 },
9e30b8e0
L
11230 },
11231 {
592a252b 11232 /* VEX_W_0F3823_P_2 */
bf890a93 11233 { "vpmovsxwd", { XM, EXxmmq }, 0 },
9e30b8e0
L
11234 },
11235 {
592a252b 11236 /* VEX_W_0F3824_P_2 */
bf890a93 11237 { "vpmovsxwq", { XM, EXxmmqd }, 0 },
9e30b8e0
L
11238 },
11239 {
592a252b 11240 /* VEX_W_0F3825_P_2 */
bf890a93 11241 { "vpmovsxdq", { XM, EXxmmq }, 0 },
9e30b8e0
L
11242 },
11243 {
592a252b 11244 /* VEX_W_0F3828_P_2 */
bf890a93 11245 { "vpmuldq", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11246 },
11247 {
592a252b 11248 /* VEX_W_0F3829_P_2 */
bf890a93 11249 { "vpcmpeqq", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11250 },
11251 {
592a252b 11252 /* VEX_W_0F382A_P_2_M_0 */
bf890a93 11253 { "vmovntdqa", { XM, Mx }, 0 },
9e30b8e0
L
11254 },
11255 {
592a252b 11256 /* VEX_W_0F382B_P_2 */
bf890a93 11257 { "vpackusdw", { XM, Vex, EXx }, 0 },
9e30b8e0 11258 },
53aa04a0 11259 {
592a252b 11260 /* VEX_W_0F382C_P_2_M_0 */
bf890a93 11261 { "vmaskmovps", { XM, Vex, Mx }, 0 },
53aa04a0
L
11262 },
11263 {
592a252b 11264 /* VEX_W_0F382D_P_2_M_0 */
bf890a93 11265 { "vmaskmovpd", { XM, Vex, Mx }, 0 },
53aa04a0
L
11266 },
11267 {
592a252b 11268 /* VEX_W_0F382E_P_2_M_0 */
bf890a93 11269 { "vmaskmovps", { Mx, Vex, XM }, 0 },
53aa04a0
L
11270 },
11271 {
592a252b 11272 /* VEX_W_0F382F_P_2_M_0 */
bf890a93 11273 { "vmaskmovpd", { Mx, Vex, XM }, 0 },
53aa04a0 11274 },
9e30b8e0 11275 {
592a252b 11276 /* VEX_W_0F3830_P_2 */
bf890a93 11277 { "vpmovzxbw", { XM, EXxmmq }, 0 },
9e30b8e0
L
11278 },
11279 {
592a252b 11280 /* VEX_W_0F3831_P_2 */
bf890a93 11281 { "vpmovzxbd", { XM, EXxmmqd }, 0 },
9e30b8e0
L
11282 },
11283 {
592a252b 11284 /* VEX_W_0F3832_P_2 */
bf890a93 11285 { "vpmovzxbq", { XM, EXxmmdw }, 0 },
9e30b8e0
L
11286 },
11287 {
592a252b 11288 /* VEX_W_0F3833_P_2 */
bf890a93 11289 { "vpmovzxwd", { XM, EXxmmq }, 0 },
9e30b8e0
L
11290 },
11291 {
592a252b 11292 /* VEX_W_0F3834_P_2 */
bf890a93 11293 { "vpmovzxwq", { XM, EXxmmqd }, 0 },
9e30b8e0
L
11294 },
11295 {
592a252b 11296 /* VEX_W_0F3835_P_2 */
bf890a93 11297 { "vpmovzxdq", { XM, EXxmmq }, 0 },
6c30d220
L
11298 },
11299 {
11300 /* VEX_W_0F3836_P_2 */
bf890a93 11301 { "vpermd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11302 },
11303 {
592a252b 11304 /* VEX_W_0F3837_P_2 */
bf890a93 11305 { "vpcmpgtq", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11306 },
11307 {
592a252b 11308 /* VEX_W_0F3838_P_2 */
bf890a93 11309 { "vpminsb", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11310 },
11311 {
592a252b 11312 /* VEX_W_0F3839_P_2 */
bf890a93 11313 { "vpminsd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11314 },
11315 {
592a252b 11316 /* VEX_W_0F383A_P_2 */
bf890a93 11317 { "vpminuw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11318 },
11319 {
592a252b 11320 /* VEX_W_0F383B_P_2 */
bf890a93 11321 { "vpminud", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11322 },
11323 {
592a252b 11324 /* VEX_W_0F383C_P_2 */
bf890a93 11325 { "vpmaxsb", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11326 },
11327 {
592a252b 11328 /* VEX_W_0F383D_P_2 */
bf890a93 11329 { "vpmaxsd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11330 },
11331 {
592a252b 11332 /* VEX_W_0F383E_P_2 */
bf890a93 11333 { "vpmaxuw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11334 },
11335 {
592a252b 11336 /* VEX_W_0F383F_P_2 */
bf890a93 11337 { "vpmaxud", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11338 },
11339 {
592a252b 11340 /* VEX_W_0F3840_P_2 */
bf890a93 11341 { "vpmulld", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11342 },
11343 {
592a252b 11344 /* VEX_W_0F3841_P_2 */
bf890a93 11345 { "vphminposuw", { XM, EXx }, 0 },
9e30b8e0 11346 },
6c30d220
L
11347 {
11348 /* VEX_W_0F3846_P_2 */
bf890a93 11349 { "vpsravd", { XM, Vex, EXx }, 0 },
6c30d220
L
11350 },
11351 {
11352 /* VEX_W_0F3858_P_2 */
bf890a93 11353 { "vpbroadcastd", { XM, EXxmm_md }, 0 },
6c30d220
L
11354 },
11355 {
11356 /* VEX_W_0F3859_P_2 */
bf890a93 11357 { "vpbroadcastq", { XM, EXxmm_mq }, 0 },
6c30d220
L
11358 },
11359 {
11360 /* VEX_W_0F385A_P_2_M_0 */
bf890a93 11361 { "vbroadcasti128", { XM, Mxmm }, 0 },
6c30d220
L
11362 },
11363 {
11364 /* VEX_W_0F3878_P_2 */
bf890a93 11365 { "vpbroadcastb", { XM, EXxmm_mb }, 0 },
6c30d220
L
11366 },
11367 {
11368 /* VEX_W_0F3879_P_2 */
bf890a93 11369 { "vpbroadcastw", { XM, EXxmm_mw }, 0 },
6c30d220 11370 },
9e30b8e0 11371 {
592a252b 11372 /* VEX_W_0F38DB_P_2 */
bf890a93 11373 { "vaesimc", { XM, EXx }, 0 },
9e30b8e0
L
11374 },
11375 {
592a252b 11376 /* VEX_W_0F38DC_P_2 */
bf890a93 11377 { "vaesenc", { XM, Vex128, EXx }, 0 },
9e30b8e0
L
11378 },
11379 {
592a252b 11380 /* VEX_W_0F38DD_P_2 */
bf890a93 11381 { "vaesenclast", { XM, Vex128, EXx }, 0 },
9e30b8e0
L
11382 },
11383 {
592a252b 11384 /* VEX_W_0F38DE_P_2 */
bf890a93 11385 { "vaesdec", { XM, Vex128, EXx }, 0 },
9e30b8e0
L
11386 },
11387 {
592a252b 11388 /* VEX_W_0F38DF_P_2 */
bf890a93 11389 { "vaesdeclast", { XM, Vex128, EXx }, 0 },
9e30b8e0 11390 },
6c30d220
L
11391 {
11392 /* VEX_W_0F3A00_P_2 */
11393 { Bad_Opcode },
bf890a93 11394 { "vpermq", { XM, EXx, Ib }, 0 },
6c30d220
L
11395 },
11396 {
11397 /* VEX_W_0F3A01_P_2 */
11398 { Bad_Opcode },
bf890a93 11399 { "vpermpd", { XM, EXx, Ib }, 0 },
6c30d220
L
11400 },
11401 {
11402 /* VEX_W_0F3A02_P_2 */
bf890a93 11403 { "vpblendd", { XM, Vex, EXx, Ib }, 0 },
6c30d220 11404 },
9e30b8e0 11405 {
592a252b 11406 /* VEX_W_0F3A04_P_2 */
bf890a93 11407 { "vpermilps", { XM, EXx, Ib }, 0 },
9e30b8e0
L
11408 },
11409 {
592a252b 11410 /* VEX_W_0F3A05_P_2 */
bf890a93 11411 { "vpermilpd", { XM, EXx, Ib }, 0 },
9e30b8e0
L
11412 },
11413 {
592a252b 11414 /* VEX_W_0F3A06_P_2 */
bf890a93 11415 { "vperm2f128", { XM, Vex256, EXx, Ib }, 0 },
9e30b8e0
L
11416 },
11417 {
592a252b 11418 /* VEX_W_0F3A08_P_2 */
bf890a93 11419 { "vroundps", { XM, EXx, Ib }, 0 },
9e30b8e0
L
11420 },
11421 {
592a252b 11422 /* VEX_W_0F3A09_P_2 */
bf890a93 11423 { "vroundpd", { XM, EXx, Ib }, 0 },
9e30b8e0
L
11424 },
11425 {
592a252b 11426 /* VEX_W_0F3A0A_P_2 */
bf890a93 11427 { "vroundss", { XMScalar, VexScalar, EXdScalar, Ib }, 0 },
9e30b8e0
L
11428 },
11429 {
592a252b 11430 /* VEX_W_0F3A0B_P_2 */
bf890a93 11431 { "vroundsd", { XMScalar, VexScalar, EXqScalar, Ib }, 0 },
9e30b8e0
L
11432 },
11433 {
592a252b 11434 /* VEX_W_0F3A0C_P_2 */
bf890a93 11435 { "vblendps", { XM, Vex, EXx, Ib }, 0 },
9e30b8e0
L
11436 },
11437 {
592a252b 11438 /* VEX_W_0F3A0D_P_2 */
bf890a93 11439 { "vblendpd", { XM, Vex, EXx, Ib }, 0 },
9e30b8e0
L
11440 },
11441 {
592a252b 11442 /* VEX_W_0F3A0E_P_2 */
bf890a93 11443 { "vpblendw", { XM, Vex, EXx, Ib }, 0 },
9e30b8e0
L
11444 },
11445 {
592a252b 11446 /* VEX_W_0F3A0F_P_2 */
bf890a93 11447 { "vpalignr", { XM, Vex, EXx, Ib }, 0 },
9e30b8e0
L
11448 },
11449 {
592a252b 11450 /* VEX_W_0F3A14_P_2 */
bf890a93 11451 { "vpextrb", { Edqb, XM, Ib }, 0 },
9e30b8e0
L
11452 },
11453 {
592a252b 11454 /* VEX_W_0F3A15_P_2 */
bf890a93 11455 { "vpextrw", { Edqw, XM, Ib }, 0 },
9e30b8e0
L
11456 },
11457 {
592a252b 11458 /* VEX_W_0F3A18_P_2 */
bf890a93 11459 { "vinsertf128", { XM, Vex256, EXxmm, Ib }, 0 },
9e30b8e0
L
11460 },
11461 {
592a252b 11462 /* VEX_W_0F3A19_P_2 */
bf890a93 11463 { "vextractf128", { EXxmm, XM, Ib }, 0 },
9e30b8e0
L
11464 },
11465 {
592a252b 11466 /* VEX_W_0F3A20_P_2 */
bf890a93 11467 { "vpinsrb", { XM, Vex128, Edqb, Ib }, 0 },
9e30b8e0
L
11468 },
11469 {
592a252b 11470 /* VEX_W_0F3A21_P_2 */
bf890a93 11471 { "vinsertps", { XM, Vex128, EXd, Ib }, 0 },
9e30b8e0 11472 },
43234a1e 11473 {
1ba585e8 11474 /* VEX_W_0F3A30_P_2_LEN_0 */
bf890a93
IT
11475 { "kshiftrb", { MaskG, MaskR, Ib }, 0 },
11476 { "kshiftrw", { MaskG, MaskR, Ib }, 0 },
43234a1e
L
11477 },
11478 {
1ba585e8 11479 /* VEX_W_0F3A31_P_2_LEN_0 */
bf890a93
IT
11480 { "kshiftrd", { MaskG, MaskR, Ib }, 0 },
11481 { "kshiftrq", { MaskG, MaskR, Ib }, 0 },
1ba585e8
IT
11482 },
11483 {
11484 /* VEX_W_0F3A32_P_2_LEN_0 */
bf890a93
IT
11485 { "kshiftlb", { MaskG, MaskR, Ib }, 0 },
11486 { "kshiftlw", { MaskG, MaskR, Ib }, 0 },
43234a1e 11487 },
1ba585e8
IT
11488 {
11489 /* VEX_W_0F3A33_P_2_LEN_0 */
bf890a93
IT
11490 { "kshiftld", { MaskG, MaskR, Ib }, 0 },
11491 { "kshiftlq", { MaskG, MaskR, Ib }, 0 },
1ba585e8 11492 },
6c30d220
L
11493 {
11494 /* VEX_W_0F3A38_P_2 */
bf890a93 11495 { "vinserti128", { XM, Vex256, EXxmm, Ib }, 0 },
6c30d220
L
11496 },
11497 {
11498 /* VEX_W_0F3A39_P_2 */
bf890a93 11499 { "vextracti128", { EXxmm, XM, Ib }, 0 },
6c30d220 11500 },
9e30b8e0 11501 {
592a252b 11502 /* VEX_W_0F3A40_P_2 */
bf890a93 11503 { "vdpps", { XM, Vex, EXx, Ib }, 0 },
9e30b8e0
L
11504 },
11505 {
592a252b 11506 /* VEX_W_0F3A41_P_2 */
bf890a93 11507 { "vdppd", { XM, Vex128, EXx, Ib }, 0 },
9e30b8e0
L
11508 },
11509 {
592a252b 11510 /* VEX_W_0F3A42_P_2 */
bf890a93 11511 { "vmpsadbw", { XM, Vex, EXx, Ib }, 0 },
9e30b8e0
L
11512 },
11513 {
592a252b 11514 /* VEX_W_0F3A44_P_2 */
bf890a93 11515 { "vpclmulqdq", { XM, Vex128, EXx, PCLMUL }, 0 },
9e30b8e0 11516 },
6c30d220
L
11517 {
11518 /* VEX_W_0F3A46_P_2 */
bf890a93 11519 { "vperm2i128", { XM, Vex256, EXx, Ib }, 0 },
6c30d220 11520 },
a683cc34 11521 {
592a252b 11522 /* VEX_W_0F3A48_P_2 */
bf890a93
IT
11523 { "vpermil2ps", { XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW }, 0 },
11524 { "vpermil2ps", { XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW }, 0 },
a683cc34
SP
11525 },
11526 {
592a252b 11527 /* VEX_W_0F3A49_P_2 */
bf890a93
IT
11528 { "vpermil2pd", { XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW }, 0 },
11529 { "vpermil2pd", { XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW }, 0 },
a683cc34 11530 },
9e30b8e0 11531 {
592a252b 11532 /* VEX_W_0F3A4A_P_2 */
bf890a93 11533 { "vblendvps", { XM, Vex, EXx, XMVexI4 }, 0 },
9e30b8e0
L
11534 },
11535 {
592a252b 11536 /* VEX_W_0F3A4B_P_2 */
bf890a93 11537 { "vblendvpd", { XM, Vex, EXx, XMVexI4 }, 0 },
9e30b8e0
L
11538 },
11539 {
592a252b 11540 /* VEX_W_0F3A4C_P_2 */
bf890a93 11541 { "vpblendvb", { XM, Vex, EXx, XMVexI4 }, 0 },
9e30b8e0
L
11542 },
11543 {
592a252b 11544 /* VEX_W_0F3A60_P_2 */
bf890a93 11545 { "vpcmpestrm", { XM, EXx, Ib }, 0 },
9e30b8e0
L
11546 },
11547 {
592a252b 11548 /* VEX_W_0F3A61_P_2 */
bf890a93 11549 { "vpcmpestri", { XM, EXx, Ib }, 0 },
9e30b8e0
L
11550 },
11551 {
592a252b 11552 /* VEX_W_0F3A62_P_2 */
bf890a93 11553 { "vpcmpistrm", { XM, EXx, Ib }, 0 },
9e30b8e0
L
11554 },
11555 {
592a252b 11556 /* VEX_W_0F3A63_P_2 */
bf890a93 11557 { "vpcmpistri", { XM, EXx, Ib }, 0 },
9e30b8e0
L
11558 },
11559 {
592a252b 11560 /* VEX_W_0F3ADF_P_2 */
bf890a93 11561 { "vaeskeygenassist", { XM, EXx, Ib }, 0 },
9e30b8e0 11562 },
43234a1e
L
11563#define NEED_VEX_W_TABLE
11564#include "i386-dis-evex.h"
11565#undef NEED_VEX_W_TABLE
9e30b8e0
L
11566};
11567
11568static const struct dis386 mod_table[][2] = {
11569 {
11570 /* MOD_8D */
bf890a93 11571 { "leaS", { Gv, M }, 0 },
9e30b8e0 11572 },
42164a71
L
11573 {
11574 /* MOD_C6_REG_7 */
11575 { Bad_Opcode },
11576 { RM_TABLE (RM_C6_REG_7) },
11577 },
11578 {
11579 /* MOD_C7_REG_7 */
11580 { Bad_Opcode },
11581 { RM_TABLE (RM_C7_REG_7) },
11582 },
4a357820
MZ
11583 {
11584 /* MOD_FF_REG_3 */
bf890a93 11585 { "Jcall{T|}", { indirEp }, 0 },
4a357820
MZ
11586 },
11587 {
11588 /* MOD_FF_REG_5 */
bf890a93 11589 { "Jjmp{T|}", { indirEp }, 0 },
4a357820 11590 },
9e30b8e0
L
11591 {
11592 /* MOD_0F01_REG_0 */
11593 { X86_64_TABLE (X86_64_0F01_REG_0) },
11594 { RM_TABLE (RM_0F01_REG_0) },
11595 },
11596 {
11597 /* MOD_0F01_REG_1 */
11598 { X86_64_TABLE (X86_64_0F01_REG_1) },
11599 { RM_TABLE (RM_0F01_REG_1) },
11600 },
11601 {
11602 /* MOD_0F01_REG_2 */
11603 { X86_64_TABLE (X86_64_0F01_REG_2) },
11604 { RM_TABLE (RM_0F01_REG_2) },
11605 },
11606 {
11607 /* MOD_0F01_REG_3 */
11608 { X86_64_TABLE (X86_64_0F01_REG_3) },
11609 { RM_TABLE (RM_0F01_REG_3) },
11610 },
11611 {
11612 /* MOD_0F01_REG_7 */
bf890a93 11613 { "invlpg", { Mb }, 0 },
9e30b8e0
L
11614 { RM_TABLE (RM_0F01_REG_7) },
11615 },
11616 {
11617 /* MOD_0F12_PREFIX_0 */
507bd325
L
11618 { "movlps", { XM, EXq }, PREFIX_OPCODE },
11619 { "movhlps", { XM, EXq }, PREFIX_OPCODE },
9e30b8e0
L
11620 },
11621 {
11622 /* MOD_0F13 */
507bd325 11623 { "movlpX", { EXq, XM }, PREFIX_OPCODE },
9e30b8e0
L
11624 },
11625 {
11626 /* MOD_0F16_PREFIX_0 */
bf890a93
IT
11627 { "movhps", { XM, EXq }, 0 },
11628 { "movlhps", { XM, EXq }, 0 },
9e30b8e0
L
11629 },
11630 {
11631 /* MOD_0F17 */
507bd325 11632 { "movhpX", { EXq, XM }, PREFIX_OPCODE },
9e30b8e0
L
11633 },
11634 {
11635 /* MOD_0F18_REG_0 */
bf890a93 11636 { "prefetchnta", { Mb }, 0 },
9e30b8e0
L
11637 },
11638 {
11639 /* MOD_0F18_REG_1 */
bf890a93 11640 { "prefetcht0", { Mb }, 0 },
9e30b8e0
L
11641 },
11642 {
11643 /* MOD_0F18_REG_2 */
bf890a93 11644 { "prefetcht1", { Mb }, 0 },
9e30b8e0
L
11645 },
11646 {
11647 /* MOD_0F18_REG_3 */
bf890a93 11648 { "prefetcht2", { Mb }, 0 },
9e30b8e0 11649 },
d7189fa5
RM
11650 {
11651 /* MOD_0F18_REG_4 */
bf890a93 11652 { "nop/reserved", { Mb }, 0 },
d7189fa5
RM
11653 },
11654 {
11655 /* MOD_0F18_REG_5 */
bf890a93 11656 { "nop/reserved", { Mb }, 0 },
d7189fa5
RM
11657 },
11658 {
11659 /* MOD_0F18_REG_6 */
bf890a93 11660 { "nop/reserved", { Mb }, 0 },
d7189fa5
RM
11661 },
11662 {
11663 /* MOD_0F18_REG_7 */
bf890a93 11664 { "nop/reserved", { Mb }, 0 },
d7189fa5 11665 },
7e8b059b
L
11666 {
11667 /* MOD_0F1A_PREFIX_0 */
bf890a93
IT
11668 { "bndldx", { Gbnd, Ev_bnd }, 0 },
11669 { "nopQ", { Ev }, 0 },
7e8b059b
L
11670 },
11671 {
11672 /* MOD_0F1B_PREFIX_0 */
bf890a93
IT
11673 { "bndstx", { Ev_bnd, Gbnd }, 0 },
11674 { "nopQ", { Ev }, 0 },
7e8b059b
L
11675 },
11676 {
11677 /* MOD_0F1B_PREFIX_1 */
bf890a93
IT
11678 { "bndmk", { Gbnd, Ev_bnd }, 0 },
11679 { "nopQ", { Ev }, 0 },
7e8b059b 11680 },
b844680a 11681 {
92fddf8e 11682 /* MOD_0F24 */
7bb15c6f 11683 { Bad_Opcode },
bf890a93 11684 { "movL", { Rd, Td }, 0 },
b844680a
L
11685 },
11686 {
92fddf8e 11687 /* MOD_0F26 */
592d1631 11688 { Bad_Opcode },
bf890a93 11689 { "movL", { Td, Rd }, 0 },
b844680a 11690 },
75c135a8
L
11691 {
11692 /* MOD_0F2B_PREFIX_0 */
507bd325 11693 {"movntps", { Mx, XM }, PREFIX_OPCODE },
75c135a8
L
11694 },
11695 {
11696 /* MOD_0F2B_PREFIX_1 */
507bd325 11697 {"movntss", { Md, XM }, PREFIX_OPCODE },
75c135a8
L
11698 },
11699 {
11700 /* MOD_0F2B_PREFIX_2 */
507bd325 11701 {"movntpd", { Mx, XM }, PREFIX_OPCODE },
75c135a8
L
11702 },
11703 {
11704 /* MOD_0F2B_PREFIX_3 */
507bd325 11705 {"movntsd", { Mq, XM }, PREFIX_OPCODE },
75c135a8
L
11706 },
11707 {
11708 /* MOD_0F51 */
592d1631 11709 { Bad_Opcode },
507bd325 11710 { "movmskpX", { Gdq, XS }, PREFIX_OPCODE },
75c135a8 11711 },
b844680a 11712 {
1ceb70f8 11713 /* MOD_0F71_REG_2 */
592d1631 11714 { Bad_Opcode },
bf890a93 11715 { "psrlw", { MS, Ib }, 0 },
b844680a
L
11716 },
11717 {
1ceb70f8 11718 /* MOD_0F71_REG_4 */
592d1631 11719 { Bad_Opcode },
bf890a93 11720 { "psraw", { MS, Ib }, 0 },
b844680a
L
11721 },
11722 {
1ceb70f8 11723 /* MOD_0F71_REG_6 */
592d1631 11724 { Bad_Opcode },
bf890a93 11725 { "psllw", { MS, Ib }, 0 },
b844680a
L
11726 },
11727 {
1ceb70f8 11728 /* MOD_0F72_REG_2 */
592d1631 11729 { Bad_Opcode },
bf890a93 11730 { "psrld", { MS, Ib }, 0 },
b844680a
L
11731 },
11732 {
1ceb70f8 11733 /* MOD_0F72_REG_4 */
592d1631 11734 { Bad_Opcode },
bf890a93 11735 { "psrad", { MS, Ib }, 0 },
b844680a
L
11736 },
11737 {
1ceb70f8 11738 /* MOD_0F72_REG_6 */
592d1631 11739 { Bad_Opcode },
bf890a93 11740 { "pslld", { MS, Ib }, 0 },
b844680a
L
11741 },
11742 {
1ceb70f8 11743 /* MOD_0F73_REG_2 */
592d1631 11744 { Bad_Opcode },
bf890a93 11745 { "psrlq", { MS, Ib }, 0 },
b844680a
L
11746 },
11747 {
1ceb70f8 11748 /* MOD_0F73_REG_3 */
592d1631 11749 { Bad_Opcode },
c0f3af97
L
11750 { PREFIX_TABLE (PREFIX_0F73_REG_3) },
11751 },
11752 {
11753 /* MOD_0F73_REG_6 */
592d1631 11754 { Bad_Opcode },
bf890a93 11755 { "psllq", { MS, Ib }, 0 },
c0f3af97
L
11756 },
11757 {
11758 /* MOD_0F73_REG_7 */
592d1631 11759 { Bad_Opcode },
c0f3af97
L
11760 { PREFIX_TABLE (PREFIX_0F73_REG_7) },
11761 },
11762 {
11763 /* MOD_0FAE_REG_0 */
bf890a93 11764 { "fxsave", { FXSAVE }, 0 },
c7b8aa3a 11765 { PREFIX_TABLE (PREFIX_0FAE_REG_0) },
c0f3af97
L
11766 },
11767 {
11768 /* MOD_0FAE_REG_1 */
bf890a93 11769 { "fxrstor", { FXSAVE }, 0 },
c7b8aa3a 11770 { PREFIX_TABLE (PREFIX_0FAE_REG_1) },
c0f3af97
L
11771 },
11772 {
11773 /* MOD_0FAE_REG_2 */
bf890a93 11774 { "ldmxcsr", { Md }, 0 },
c7b8aa3a 11775 { PREFIX_TABLE (PREFIX_0FAE_REG_2) },
c0f3af97
L
11776 },
11777 {
11778 /* MOD_0FAE_REG_3 */
bf890a93 11779 { "stmxcsr", { Md }, 0 },
c7b8aa3a 11780 { PREFIX_TABLE (PREFIX_0FAE_REG_3) },
c0f3af97
L
11781 },
11782 {
11783 /* MOD_0FAE_REG_4 */
bf890a93 11784 { "xsave", { FXSAVE }, 0 },
c0f3af97
L
11785 },
11786 {
11787 /* MOD_0FAE_REG_5 */
bf890a93 11788 { "xrstor", { FXSAVE }, 0 },
c0f3af97
L
11789 { RM_TABLE (RM_0FAE_REG_5) },
11790 },
11791 {
11792 /* MOD_0FAE_REG_6 */
c5e7287a 11793 { PREFIX_TABLE (PREFIX_0FAE_REG_6) },
c0f3af97
L
11794 { RM_TABLE (RM_0FAE_REG_6) },
11795 },
11796 {
11797 /* MOD_0FAE_REG_7 */
963f3586 11798 { PREFIX_TABLE (PREFIX_0FAE_REG_7) },
c0f3af97
L
11799 { RM_TABLE (RM_0FAE_REG_7) },
11800 },
11801 {
11802 /* MOD_0FB2 */
bf890a93 11803 { "lssS", { Gv, Mp }, 0 },
c0f3af97
L
11804 },
11805 {
11806 /* MOD_0FB4 */
bf890a93 11807 { "lfsS", { Gv, Mp }, 0 },
c0f3af97
L
11808 },
11809 {
11810 /* MOD_0FB5 */
bf890a93 11811 { "lgsS", { Gv, Mp }, 0 },
c0f3af97 11812 },
963f3586
IT
11813 {
11814 /* MOD_0FC7_REG_3 */
bf890a93 11815 { "xrstors", { FXSAVE }, 0 },
963f3586
IT
11816 },
11817 {
11818 /* MOD_0FC7_REG_4 */
bf890a93 11819 { "xsavec", { FXSAVE }, 0 },
963f3586
IT
11820 },
11821 {
11822 /* MOD_0FC7_REG_5 */
bf890a93 11823 { "xsaves", { FXSAVE }, 0 },
963f3586 11824 },
c0f3af97
L
11825 {
11826 /* MOD_0FC7_REG_6 */
f24bcbaa
L
11827 { PREFIX_TABLE (PREFIX_MOD_0_0FC7_REG_6) },
11828 { PREFIX_TABLE (PREFIX_MOD_3_0FC7_REG_6) }
c0f3af97
L
11829 },
11830 {
11831 /* MOD_0FC7_REG_7 */
bf890a93 11832 { "vmptrst", { Mq }, 0 },
f24bcbaa 11833 { PREFIX_TABLE (PREFIX_MOD_3_0FC7_REG_7) }
c0f3af97
L
11834 },
11835 {
11836 /* MOD_0FD7 */
592d1631 11837 { Bad_Opcode },
bf890a93 11838 { "pmovmskb", { Gdq, MS }, 0 },
c0f3af97
L
11839 },
11840 {
11841 /* MOD_0FE7_PREFIX_2 */
bf890a93 11842 { "movntdq", { Mx, XM }, 0 },
c0f3af97
L
11843 },
11844 {
11845 /* MOD_0FF0_PREFIX_3 */
bf890a93 11846 { "lddqu", { XM, M }, 0 },
c0f3af97
L
11847 },
11848 {
11849 /* MOD_0F382A_PREFIX_2 */
bf890a93 11850 { "movntdqa", { XM, Mx }, 0 },
c0f3af97
L
11851 },
11852 {
11853 /* MOD_62_32BIT */
bf890a93 11854 { "bound{S|}", { Gv, Ma }, 0 },
43234a1e 11855 { EVEX_TABLE (EVEX_0F) },
c0f3af97
L
11856 },
11857 {
11858 /* MOD_C4_32BIT */
bf890a93 11859 { "lesS", { Gv, Mp }, 0 },
c0f3af97
L
11860 { VEX_C4_TABLE (VEX_0F) },
11861 },
11862 {
11863 /* MOD_C5_32BIT */
bf890a93 11864 { "ldsS", { Gv, Mp }, 0 },
c0f3af97
L
11865 { VEX_C5_TABLE (VEX_0F) },
11866 },
11867 {
592a252b
L
11868 /* MOD_VEX_0F12_PREFIX_0 */
11869 { VEX_LEN_TABLE (VEX_LEN_0F12_P_0_M_0) },
11870 { VEX_LEN_TABLE (VEX_LEN_0F12_P_0_M_1) },
c0f3af97
L
11871 },
11872 {
592a252b
L
11873 /* MOD_VEX_0F13 */
11874 { VEX_LEN_TABLE (VEX_LEN_0F13_M_0) },
c0f3af97
L
11875 },
11876 {
592a252b
L
11877 /* MOD_VEX_0F16_PREFIX_0 */
11878 { VEX_LEN_TABLE (VEX_LEN_0F16_P_0_M_0) },
11879 { VEX_LEN_TABLE (VEX_LEN_0F16_P_0_M_1) },
c0f3af97
L
11880 },
11881 {
592a252b
L
11882 /* MOD_VEX_0F17 */
11883 { VEX_LEN_TABLE (VEX_LEN_0F17_M_0) },
c0f3af97
L
11884 },
11885 {
592a252b
L
11886 /* MOD_VEX_0F2B */
11887 { VEX_W_TABLE (VEX_W_0F2B_M_0) },
c0f3af97
L
11888 },
11889 {
592a252b 11890 /* MOD_VEX_0F50 */
592d1631 11891 { Bad_Opcode },
592a252b 11892 { VEX_W_TABLE (VEX_W_0F50_M_0) },
c0f3af97
L
11893 },
11894 {
592a252b 11895 /* MOD_VEX_0F71_REG_2 */
592d1631 11896 { Bad_Opcode },
592a252b 11897 { PREFIX_TABLE (PREFIX_VEX_0F71_REG_2) },
b844680a
L
11898 },
11899 {
592a252b 11900 /* MOD_VEX_0F71_REG_4 */
592d1631 11901 { Bad_Opcode },
592a252b 11902 { PREFIX_TABLE (PREFIX_VEX_0F71_REG_4) },
b844680a
L
11903 },
11904 {
592a252b 11905 /* MOD_VEX_0F71_REG_6 */
592d1631 11906 { Bad_Opcode },
592a252b 11907 { PREFIX_TABLE (PREFIX_VEX_0F71_REG_6) },
b844680a
L
11908 },
11909 {
592a252b 11910 /* MOD_VEX_0F72_REG_2 */
592d1631 11911 { Bad_Opcode },
592a252b 11912 { PREFIX_TABLE (PREFIX_VEX_0F72_REG_2) },
b844680a 11913 },
d8faab4e 11914 {
592a252b 11915 /* MOD_VEX_0F72_REG_4 */
592d1631 11916 { Bad_Opcode },
592a252b 11917 { PREFIX_TABLE (PREFIX_VEX_0F72_REG_4) },
d8faab4e
L
11918 },
11919 {
592a252b 11920 /* MOD_VEX_0F72_REG_6 */
592d1631 11921 { Bad_Opcode },
592a252b 11922 { PREFIX_TABLE (PREFIX_VEX_0F72_REG_6) },
d8faab4e 11923 },
876d4bfa 11924 {
592a252b 11925 /* MOD_VEX_0F73_REG_2 */
592d1631 11926 { Bad_Opcode },
592a252b 11927 { PREFIX_TABLE (PREFIX_VEX_0F73_REG_2) },
876d4bfa
L
11928 },
11929 {
592a252b 11930 /* MOD_VEX_0F73_REG_3 */
592d1631 11931 { Bad_Opcode },
592a252b 11932 { PREFIX_TABLE (PREFIX_VEX_0F73_REG_3) },
475a2301
L
11933 },
11934 {
592a252b 11935 /* MOD_VEX_0F73_REG_6 */
592d1631 11936 { Bad_Opcode },
592a252b 11937 { PREFIX_TABLE (PREFIX_VEX_0F73_REG_6) },
876d4bfa
L
11938 },
11939 {
592a252b 11940 /* MOD_VEX_0F73_REG_7 */
592d1631 11941 { Bad_Opcode },
592a252b 11942 { PREFIX_TABLE (PREFIX_VEX_0F73_REG_7) },
876d4bfa
L
11943 },
11944 {
592a252b
L
11945 /* MOD_VEX_0FAE_REG_2 */
11946 { VEX_LEN_TABLE (VEX_LEN_0FAE_R_2_M_0) },
876d4bfa 11947 },
bbedc832 11948 {
592a252b
L
11949 /* MOD_VEX_0FAE_REG_3 */
11950 { VEX_LEN_TABLE (VEX_LEN_0FAE_R_3_M_0) },
bbedc832 11951 },
144c41d9 11952 {
592a252b 11953 /* MOD_VEX_0FD7_PREFIX_2 */
592d1631 11954 { Bad_Opcode },
6c30d220 11955 { VEX_W_TABLE (VEX_W_0FD7_P_2_M_1) },
144c41d9 11956 },
1afd85e3 11957 {
592a252b
L
11958 /* MOD_VEX_0FE7_PREFIX_2 */
11959 { VEX_W_TABLE (VEX_W_0FE7_P_2_M_0) },
1afd85e3
L
11960 },
11961 {
592a252b
L
11962 /* MOD_VEX_0FF0_PREFIX_3 */
11963 { VEX_W_TABLE (VEX_W_0FF0_P_3_M_0) },
92fddf8e 11964 },
75c135a8 11965 {
592a252b
L
11966 /* MOD_VEX_0F381A_PREFIX_2 */
11967 { VEX_LEN_TABLE (VEX_LEN_0F381A_P_2_M_0) },
75c135a8 11968 },
1afd85e3 11969 {
592a252b 11970 /* MOD_VEX_0F382A_PREFIX_2 */
6c30d220 11971 { VEX_W_TABLE (VEX_W_0F382A_P_2_M_0) },
1afd85e3 11972 },
75c135a8 11973 {
592a252b
L
11974 /* MOD_VEX_0F382C_PREFIX_2 */
11975 { VEX_W_TABLE (VEX_W_0F382C_P_2_M_0) },
75c135a8 11976 },
1afd85e3 11977 {
592a252b
L
11978 /* MOD_VEX_0F382D_PREFIX_2 */
11979 { VEX_W_TABLE (VEX_W_0F382D_P_2_M_0) },
1afd85e3
L
11980 },
11981 {
592a252b
L
11982 /* MOD_VEX_0F382E_PREFIX_2 */
11983 { VEX_W_TABLE (VEX_W_0F382E_P_2_M_0) },
1afd85e3
L
11984 },
11985 {
592a252b
L
11986 /* MOD_VEX_0F382F_PREFIX_2 */
11987 { VEX_W_TABLE (VEX_W_0F382F_P_2_M_0) },
1afd85e3 11988 },
6c30d220
L
11989 {
11990 /* MOD_VEX_0F385A_PREFIX_2 */
11991 { VEX_LEN_TABLE (VEX_LEN_0F385A_P_2_M_0) },
11992 },
11993 {
11994 /* MOD_VEX_0F388C_PREFIX_2 */
bf890a93 11995 { "vpmaskmov%LW", { XM, Vex, Mx }, 0 },
6c30d220
L
11996 },
11997 {
11998 /* MOD_VEX_0F388E_PREFIX_2 */
bf890a93 11999 { "vpmaskmov%LW", { Mx, Vex, XM }, 0 },
6c30d220 12000 },
43234a1e
L
12001#define NEED_MOD_TABLE
12002#include "i386-dis-evex.h"
12003#undef NEED_MOD_TABLE
b844680a
L
12004};
12005
1ceb70f8 12006static const struct dis386 rm_table[][8] = {
42164a71
L
12007 {
12008 /* RM_C6_REG_7 */
bf890a93 12009 { "xabort", { Skip_MODRM, Ib }, 0 },
42164a71
L
12010 },
12011 {
12012 /* RM_C7_REG_7 */
bf890a93 12013 { "xbeginT", { Skip_MODRM, Jv }, 0 },
42164a71 12014 },
b844680a 12015 {
1ceb70f8 12016 /* RM_0F01_REG_0 */
592d1631 12017 { Bad_Opcode },
bf890a93
IT
12018 { "vmcall", { Skip_MODRM }, 0 },
12019 { "vmlaunch", { Skip_MODRM }, 0 },
12020 { "vmresume", { Skip_MODRM }, 0 },
12021 { "vmxoff", { Skip_MODRM }, 0 },
b844680a
L
12022 },
12023 {
1ceb70f8 12024 /* RM_0F01_REG_1 */
bf890a93
IT
12025 { "monitor", { { OP_Monitor, 0 } }, 0 },
12026 { "mwait", { { OP_Mwait, 0 } }, 0 },
12027 { "clac", { Skip_MODRM }, 0 },
12028 { "stac", { Skip_MODRM }, 0 },
2cf200a4
IT
12029 { Bad_Opcode },
12030 { Bad_Opcode },
12031 { Bad_Opcode },
bf890a93 12032 { "encls", { Skip_MODRM }, 0 },
b844680a 12033 },
475a2301
L
12034 {
12035 /* RM_0F01_REG_2 */
bf890a93
IT
12036 { "xgetbv", { Skip_MODRM }, 0 },
12037 { "xsetbv", { Skip_MODRM }, 0 },
8729a6f6
L
12038 { Bad_Opcode },
12039 { Bad_Opcode },
bf890a93
IT
12040 { "vmfunc", { Skip_MODRM }, 0 },
12041 { "xend", { Skip_MODRM }, 0 },
12042 { "xtest", { Skip_MODRM }, 0 },
12043 { "enclu", { Skip_MODRM }, 0 },
475a2301 12044 },
b844680a 12045 {
1ceb70f8 12046 /* RM_0F01_REG_3 */
bf890a93
IT
12047 { "vmrun", { Skip_MODRM }, 0 },
12048 { "vmmcall", { Skip_MODRM }, 0 },
12049 { "vmload", { Skip_MODRM }, 0 },
12050 { "vmsave", { Skip_MODRM }, 0 },
12051 { "stgi", { Skip_MODRM }, 0 },
12052 { "clgi", { Skip_MODRM }, 0 },
12053 { "skinit", { Skip_MODRM }, 0 },
12054 { "invlpga", { Skip_MODRM }, 0 },
4e7d34a6
L
12055 },
12056 {
1ceb70f8 12057 /* RM_0F01_REG_7 */
bf890a93
IT
12058 { "swapgs", { Skip_MODRM }, 0 },
12059 { "rdtscp", { Skip_MODRM }, 0 },
029f3522
GG
12060 { Bad_Opcode },
12061 { Bad_Opcode },
bf890a93 12062 { "clzero", { Skip_MODRM }, 0 },
b844680a
L
12063 },
12064 {
1ceb70f8 12065 /* RM_0FAE_REG_5 */
bf890a93 12066 { "lfence", { Skip_MODRM }, 0 },
b844680a
L
12067 },
12068 {
1ceb70f8 12069 /* RM_0FAE_REG_6 */
bf890a93 12070 { "mfence", { Skip_MODRM }, 0 },
b844680a 12071 },
bbedc832 12072 {
1ceb70f8 12073 /* RM_0FAE_REG_7 */
9d8596f0 12074 { PREFIX_TABLE (PREFIX_RM_0_0FAE_REG_7) },
144c41d9 12075 },
b844680a
L
12076};
12077
c608c12e
AM
12078#define INTERNAL_DISASSEMBLER_ERROR _("<internal disassembler error>")
12079
f16cd0d5
L
12080/* We use the high bit to indicate different name for the same
12081 prefix. */
f16cd0d5 12082#define REP_PREFIX (0xf3 | 0x100)
42164a71
L
12083#define XACQUIRE_PREFIX (0xf2 | 0x200)
12084#define XRELEASE_PREFIX (0xf3 | 0x400)
7e8b059b 12085#define BND_PREFIX (0xf2 | 0x400)
f16cd0d5
L
12086
12087static int
26ca5450 12088ckprefix (void)
252b5132 12089{
f16cd0d5 12090 int newrex, i, length;
52b15da3 12091 rex = 0;
c0f3af97 12092 rex_ignored = 0;
252b5132 12093 prefixes = 0;
7d421014 12094 used_prefixes = 0;
52b15da3 12095 rex_used = 0;
f16cd0d5
L
12096 last_lock_prefix = -1;
12097 last_repz_prefix = -1;
12098 last_repnz_prefix = -1;
12099 last_data_prefix = -1;
12100 last_addr_prefix = -1;
12101 last_rex_prefix = -1;
12102 last_seg_prefix = -1;
d9949a36 12103 fwait_prefix = -1;
285ca992 12104 active_seg_prefix = 0;
f310f33d
L
12105 for (i = 0; i < (int) ARRAY_SIZE (all_prefixes); i++)
12106 all_prefixes[i] = 0;
12107 i = 0;
f16cd0d5
L
12108 length = 0;
12109 /* The maximum instruction length is 15bytes. */
12110 while (length < MAX_CODE_LENGTH - 1)
252b5132
RH
12111 {
12112 FETCH_DATA (the_info, codep + 1);
52b15da3 12113 newrex = 0;
252b5132
RH
12114 switch (*codep)
12115 {
52b15da3
JH
12116 /* REX prefixes family. */
12117 case 0x40:
12118 case 0x41:
12119 case 0x42:
12120 case 0x43:
12121 case 0x44:
12122 case 0x45:
12123 case 0x46:
12124 case 0x47:
12125 case 0x48:
12126 case 0x49:
12127 case 0x4a:
12128 case 0x4b:
12129 case 0x4c:
12130 case 0x4d:
12131 case 0x4e:
12132 case 0x4f:
f16cd0d5
L
12133 if (address_mode == mode_64bit)
12134 newrex = *codep;
12135 else
12136 return 1;
12137 last_rex_prefix = i;
52b15da3 12138 break;
252b5132
RH
12139 case 0xf3:
12140 prefixes |= PREFIX_REPZ;
f16cd0d5 12141 last_repz_prefix = i;
252b5132
RH
12142 break;
12143 case 0xf2:
12144 prefixes |= PREFIX_REPNZ;
f16cd0d5 12145 last_repnz_prefix = i;
252b5132
RH
12146 break;
12147 case 0xf0:
12148 prefixes |= PREFIX_LOCK;
f16cd0d5 12149 last_lock_prefix = i;
252b5132
RH
12150 break;
12151 case 0x2e:
12152 prefixes |= PREFIX_CS;
f16cd0d5 12153 last_seg_prefix = i;
285ca992 12154 active_seg_prefix = PREFIX_CS;
252b5132
RH
12155 break;
12156 case 0x36:
12157 prefixes |= PREFIX_SS;
f16cd0d5 12158 last_seg_prefix = i;
285ca992 12159 active_seg_prefix = PREFIX_SS;
252b5132
RH
12160 break;
12161 case 0x3e:
12162 prefixes |= PREFIX_DS;
f16cd0d5 12163 last_seg_prefix = i;
285ca992 12164 active_seg_prefix = PREFIX_DS;
252b5132
RH
12165 break;
12166 case 0x26:
12167 prefixes |= PREFIX_ES;
f16cd0d5 12168 last_seg_prefix = i;
285ca992 12169 active_seg_prefix = PREFIX_ES;
252b5132
RH
12170 break;
12171 case 0x64:
12172 prefixes |= PREFIX_FS;
f16cd0d5 12173 last_seg_prefix = i;
285ca992 12174 active_seg_prefix = PREFIX_FS;
252b5132
RH
12175 break;
12176 case 0x65:
12177 prefixes |= PREFIX_GS;
f16cd0d5 12178 last_seg_prefix = i;
285ca992 12179 active_seg_prefix = PREFIX_GS;
252b5132
RH
12180 break;
12181 case 0x66:
12182 prefixes |= PREFIX_DATA;
f16cd0d5 12183 last_data_prefix = i;
252b5132
RH
12184 break;
12185 case 0x67:
12186 prefixes |= PREFIX_ADDR;
f16cd0d5 12187 last_addr_prefix = i;
252b5132 12188 break;
5076851f 12189 case FWAIT_OPCODE:
252b5132
RH
12190 /* fwait is really an instruction. If there are prefixes
12191 before the fwait, they belong to the fwait, *not* to the
12192 following instruction. */
d9949a36 12193 fwait_prefix = i;
3e7d61b2 12194 if (prefixes || rex)
252b5132
RH
12195 {
12196 prefixes |= PREFIX_FWAIT;
12197 codep++;
6c067bbb
RM
12198 /* This ensures that the previous REX prefixes are noticed
12199 as unused prefixes, as in the return case below. */
12200 rex_used = rex;
f16cd0d5 12201 return 1;
252b5132
RH
12202 }
12203 prefixes = PREFIX_FWAIT;
12204 break;
12205 default:
f16cd0d5 12206 return 1;
252b5132 12207 }
52b15da3
JH
12208 /* Rex is ignored when followed by another prefix. */
12209 if (rex)
12210 {
3e7d61b2 12211 rex_used = rex;
f16cd0d5 12212 return 1;
52b15da3 12213 }
f16cd0d5
L
12214 if (*codep != FWAIT_OPCODE)
12215 all_prefixes[i++] = *codep;
52b15da3 12216 rex = newrex;
252b5132 12217 codep++;
f16cd0d5
L
12218 length++;
12219 }
12220 return 0;
12221}
12222
7d421014
ILT
12223/* Return the name of the prefix byte PREF, or NULL if PREF is not a
12224 prefix byte. */
12225
12226static const char *
26ca5450 12227prefix_name (int pref, int sizeflag)
7d421014 12228{
0003779b
L
12229 static const char *rexes [16] =
12230 {
12231 "rex", /* 0x40 */
12232 "rex.B", /* 0x41 */
12233 "rex.X", /* 0x42 */
12234 "rex.XB", /* 0x43 */
12235 "rex.R", /* 0x44 */
12236 "rex.RB", /* 0x45 */
12237 "rex.RX", /* 0x46 */
12238 "rex.RXB", /* 0x47 */
12239 "rex.W", /* 0x48 */
12240 "rex.WB", /* 0x49 */
12241 "rex.WX", /* 0x4a */
12242 "rex.WXB", /* 0x4b */
12243 "rex.WR", /* 0x4c */
12244 "rex.WRB", /* 0x4d */
12245 "rex.WRX", /* 0x4e */
12246 "rex.WRXB", /* 0x4f */
12247 };
12248
7d421014
ILT
12249 switch (pref)
12250 {
52b15da3
JH
12251 /* REX prefixes family. */
12252 case 0x40:
52b15da3 12253 case 0x41:
52b15da3 12254 case 0x42:
52b15da3 12255 case 0x43:
52b15da3 12256 case 0x44:
52b15da3 12257 case 0x45:
52b15da3 12258 case 0x46:
52b15da3 12259 case 0x47:
52b15da3 12260 case 0x48:
52b15da3 12261 case 0x49:
52b15da3 12262 case 0x4a:
52b15da3 12263 case 0x4b:
52b15da3 12264 case 0x4c:
52b15da3 12265 case 0x4d:
52b15da3 12266 case 0x4e:
52b15da3 12267 case 0x4f:
0003779b 12268 return rexes [pref - 0x40];
7d421014
ILT
12269 case 0xf3:
12270 return "repz";
12271 case 0xf2:
12272 return "repnz";
12273 case 0xf0:
12274 return "lock";
12275 case 0x2e:
12276 return "cs";
12277 case 0x36:
12278 return "ss";
12279 case 0x3e:
12280 return "ds";
12281 case 0x26:
12282 return "es";
12283 case 0x64:
12284 return "fs";
12285 case 0x65:
12286 return "gs";
12287 case 0x66:
12288 return (sizeflag & DFLAG) ? "data16" : "data32";
12289 case 0x67:
cb712a9e 12290 if (address_mode == mode_64bit)
db6eb5be 12291 return (sizeflag & AFLAG) ? "addr32" : "addr64";
c1a64871 12292 else
2888cb7a 12293 return (sizeflag & AFLAG) ? "addr16" : "addr32";
7d421014
ILT
12294 case FWAIT_OPCODE:
12295 return "fwait";
f16cd0d5
L
12296 case REP_PREFIX:
12297 return "rep";
42164a71
L
12298 case XACQUIRE_PREFIX:
12299 return "xacquire";
12300 case XRELEASE_PREFIX:
12301 return "xrelease";
7e8b059b
L
12302 case BND_PREFIX:
12303 return "bnd";
7d421014
ILT
12304 default:
12305 return NULL;
12306 }
12307}
12308
ce518a5f
L
12309static char op_out[MAX_OPERANDS][100];
12310static int op_ad, op_index[MAX_OPERANDS];
1d9f512f 12311static int two_source_ops;
ce518a5f
L
12312static bfd_vma op_address[MAX_OPERANDS];
12313static bfd_vma op_riprel[MAX_OPERANDS];
52b15da3 12314static bfd_vma start_pc;
ce518a5f 12315
252b5132
RH
12316/*
12317 * On the 386's of 1988, the maximum length of an instruction is 15 bytes.
12318 * (see topic "Redundant prefixes" in the "Differences from 8086"
12319 * section of the "Virtual 8086 Mode" chapter.)
12320 * 'pc' should be the address of this instruction, it will
12321 * be used to print the target address if this is a relative jump or call
12322 * The function returns the length of this instruction in bytes.
12323 */
12324
252b5132 12325static char intel_syntax;
9d141669 12326static char intel_mnemonic = !SYSV386_COMPAT;
252b5132
RH
12327static char open_char;
12328static char close_char;
12329static char separator_char;
12330static char scale_char;
12331
e396998b
AM
12332/* Here for backwards compatibility. When gdb stops using
12333 print_insn_i386_att and print_insn_i386_intel these functions can
12334 disappear, and print_insn_i386 be merged into print_insn. */
252b5132 12335int
26ca5450 12336print_insn_i386_att (bfd_vma pc, disassemble_info *info)
252b5132
RH
12337{
12338 intel_syntax = 0;
e396998b
AM
12339
12340 return print_insn (pc, info);
252b5132
RH
12341}
12342
12343int
26ca5450 12344print_insn_i386_intel (bfd_vma pc, disassemble_info *info)
252b5132
RH
12345{
12346 intel_syntax = 1;
e396998b
AM
12347
12348 return print_insn (pc, info);
252b5132
RH
12349}
12350
e396998b 12351int
26ca5450 12352print_insn_i386 (bfd_vma pc, disassemble_info *info)
e396998b
AM
12353{
12354 intel_syntax = -1;
12355
12356 return print_insn (pc, info);
12357}
12358
f59a29b9
L
12359void
12360print_i386_disassembler_options (FILE *stream)
12361{
12362 fprintf (stream, _("\n\
12363The following i386/x86-64 specific disassembler options are supported for use\n\
12364with the -M switch (multiple options should be separated by commas):\n"));
12365
12366 fprintf (stream, _(" x86-64 Disassemble in 64bit mode\n"));
12367 fprintf (stream, _(" i386 Disassemble in 32bit mode\n"));
12368 fprintf (stream, _(" i8086 Disassemble in 16bit mode\n"));
12369 fprintf (stream, _(" att Display instruction in AT&T syntax\n"));
12370 fprintf (stream, _(" intel Display instruction in Intel syntax\n"));
9d141669
L
12371 fprintf (stream, _(" att-mnemonic\n"
12372 " Display instruction in AT&T mnemonic\n"));
12373 fprintf (stream, _(" intel-mnemonic\n"
12374 " Display instruction in Intel mnemonic\n"));
f59a29b9
L
12375 fprintf (stream, _(" addr64 Assume 64bit address size\n"));
12376 fprintf (stream, _(" addr32 Assume 32bit address size\n"));
12377 fprintf (stream, _(" addr16 Assume 16bit address size\n"));
12378 fprintf (stream, _(" data32 Assume 32bit data size\n"));
12379 fprintf (stream, _(" data16 Assume 16bit data size\n"));
12380 fprintf (stream, _(" suffix Always display instruction suffix in AT&T syntax\n"));
12381}
12382
592d1631 12383/* Bad opcode. */
bf890a93 12384static const struct dis386 bad_opcode = { "(bad)", { XX }, 0 };
592d1631 12385
b844680a
L
12386/* Get a pointer to struct dis386 with a valid name. */
12387
12388static const struct dis386 *
8bb15339 12389get_valid_dis386 (const struct dis386 *dp, disassemble_info *info)
b844680a 12390{
91d6fa6a 12391 int vindex, vex_table_index;
b844680a
L
12392
12393 if (dp->name != NULL)
12394 return dp;
12395
12396 switch (dp->op[0].bytemode)
12397 {
1ceb70f8
L
12398 case USE_REG_TABLE:
12399 dp = &reg_table[dp->op[1].bytemode][modrm.reg];
12400 break;
12401
12402 case USE_MOD_TABLE:
91d6fa6a
NC
12403 vindex = modrm.mod == 0x3 ? 1 : 0;
12404 dp = &mod_table[dp->op[1].bytemode][vindex];
1ceb70f8
L
12405 break;
12406
12407 case USE_RM_TABLE:
12408 dp = &rm_table[dp->op[1].bytemode][modrm.rm];
b844680a
L
12409 break;
12410
4e7d34a6 12411 case USE_PREFIX_TABLE:
c0f3af97 12412 if (need_vex)
b844680a 12413 {
c0f3af97
L
12414 /* The prefix in VEX is implicit. */
12415 switch (vex.prefix)
12416 {
12417 case 0:
91d6fa6a 12418 vindex = 0;
c0f3af97
L
12419 break;
12420 case REPE_PREFIX_OPCODE:
91d6fa6a 12421 vindex = 1;
c0f3af97
L
12422 break;
12423 case DATA_PREFIX_OPCODE:
91d6fa6a 12424 vindex = 2;
c0f3af97
L
12425 break;
12426 case REPNE_PREFIX_OPCODE:
91d6fa6a 12427 vindex = 3;
c0f3af97
L
12428 break;
12429 default:
12430 abort ();
12431 break;
12432 }
b844680a 12433 }
7bb15c6f 12434 else
b844680a 12435 {
285ca992
L
12436 int last_prefix = -1;
12437 int prefix = 0;
91d6fa6a 12438 vindex = 0;
285ca992
L
12439 /* We check PREFIX_REPNZ and PREFIX_REPZ before PREFIX_DATA.
12440 When there are multiple PREFIX_REPNZ and PREFIX_REPZ, the
12441 last one wins. */
12442 if ((prefixes & (PREFIX_REPZ | PREFIX_REPNZ)) != 0)
b844680a 12443 {
285ca992 12444 if (last_repz_prefix > last_repnz_prefix)
c0f3af97 12445 {
285ca992
L
12446 vindex = 1;
12447 prefix = PREFIX_REPZ;
12448 last_prefix = last_repz_prefix;
c0f3af97
L
12449 }
12450 else
b844680a 12451 {
285ca992
L
12452 vindex = 3;
12453 prefix = PREFIX_REPNZ;
12454 last_prefix = last_repnz_prefix;
b844680a 12455 }
285ca992 12456
507bd325
L
12457 /* Check if prefix should be ignored. */
12458 if ((((prefix_table[dp->op[1].bytemode][vindex].prefix_requirement
12459 & PREFIX_IGNORED) >> PREFIX_IGNORED_SHIFT)
12460 & prefix) != 0)
285ca992
L
12461 vindex = 0;
12462 }
12463
12464 if (vindex == 0 && (prefixes & PREFIX_DATA) != 0)
12465 {
12466 vindex = 2;
12467 prefix = PREFIX_DATA;
12468 last_prefix = last_data_prefix;
12469 }
12470
12471 if (vindex != 0)
12472 {
12473 used_prefixes |= prefix;
12474 all_prefixes[last_prefix] = 0;
b844680a
L
12475 }
12476 }
91d6fa6a 12477 dp = &prefix_table[dp->op[1].bytemode][vindex];
b844680a
L
12478 break;
12479
4e7d34a6 12480 case USE_X86_64_TABLE:
91d6fa6a
NC
12481 vindex = address_mode == mode_64bit ? 1 : 0;
12482 dp = &x86_64_table[dp->op[1].bytemode][vindex];
b844680a
L
12483 break;
12484
4e7d34a6 12485 case USE_3BYTE_TABLE:
8bb15339 12486 FETCH_DATA (info, codep + 2);
91d6fa6a
NC
12487 vindex = *codep++;
12488 dp = &three_byte_table[dp->op[1].bytemode][vindex];
285ca992 12489 end_codep = codep;
8bb15339
L
12490 modrm.mod = (*codep >> 6) & 3;
12491 modrm.reg = (*codep >> 3) & 7;
12492 modrm.rm = *codep & 7;
12493 break;
12494
c0f3af97
L
12495 case USE_VEX_LEN_TABLE:
12496 if (!need_vex)
12497 abort ();
12498
12499 switch (vex.length)
12500 {
12501 case 128:
91d6fa6a 12502 vindex = 0;
c0f3af97
L
12503 break;
12504 case 256:
91d6fa6a 12505 vindex = 1;
c0f3af97
L
12506 break;
12507 default:
12508 abort ();
12509 break;
12510 }
12511
91d6fa6a 12512 dp = &vex_len_table[dp->op[1].bytemode][vindex];
c0f3af97
L
12513 break;
12514
f88c9eb0
SP
12515 case USE_XOP_8F_TABLE:
12516 FETCH_DATA (info, codep + 3);
12517 /* All bits in the REX prefix are ignored. */
12518 rex_ignored = rex;
12519 rex = ~(*codep >> 5) & 0x7;
12520
12521 /* VEX_TABLE_INDEX is the mmmmm part of the XOP byte 1 "RCB.mmmmm". */
12522 switch ((*codep & 0x1f))
12523 {
12524 default:
f07af43e
L
12525 dp = &bad_opcode;
12526 return dp;
5dd85c99
SP
12527 case 0x8:
12528 vex_table_index = XOP_08;
12529 break;
f88c9eb0
SP
12530 case 0x9:
12531 vex_table_index = XOP_09;
12532 break;
12533 case 0xa:
12534 vex_table_index = XOP_0A;
12535 break;
12536 }
12537 codep++;
12538 vex.w = *codep & 0x80;
12539 if (vex.w && address_mode == mode_64bit)
12540 rex |= REX_W;
12541
12542 vex.register_specifier = (~(*codep >> 3)) & 0xf;
12543 if (address_mode != mode_64bit
12544 && vex.register_specifier > 0x7)
f07af43e
L
12545 {
12546 dp = &bad_opcode;
12547 return dp;
12548 }
f88c9eb0
SP
12549
12550 vex.length = (*codep & 0x4) ? 256 : 128;
12551 switch ((*codep & 0x3))
12552 {
12553 case 0:
12554 vex.prefix = 0;
12555 break;
12556 case 1:
12557 vex.prefix = DATA_PREFIX_OPCODE;
12558 break;
12559 case 2:
12560 vex.prefix = REPE_PREFIX_OPCODE;
12561 break;
12562 case 3:
12563 vex.prefix = REPNE_PREFIX_OPCODE;
12564 break;
12565 }
12566 need_vex = 1;
12567 need_vex_reg = 1;
12568 codep++;
91d6fa6a
NC
12569 vindex = *codep++;
12570 dp = &xop_table[vex_table_index][vindex];
c48244a5 12571
285ca992 12572 end_codep = codep;
c48244a5
SP
12573 FETCH_DATA (info, codep + 1);
12574 modrm.mod = (*codep >> 6) & 3;
12575 modrm.reg = (*codep >> 3) & 7;
12576 modrm.rm = *codep & 7;
f88c9eb0
SP
12577 break;
12578
c0f3af97 12579 case USE_VEX_C4_TABLE:
43234a1e 12580 /* VEX prefix. */
c0f3af97
L
12581 FETCH_DATA (info, codep + 3);
12582 /* All bits in the REX prefix are ignored. */
12583 rex_ignored = rex;
12584 rex = ~(*codep >> 5) & 0x7;
12585 switch ((*codep & 0x1f))
12586 {
12587 default:
f07af43e
L
12588 dp = &bad_opcode;
12589 return dp;
c0f3af97 12590 case 0x1:
f88c9eb0 12591 vex_table_index = VEX_0F;
c0f3af97
L
12592 break;
12593 case 0x2:
f88c9eb0 12594 vex_table_index = VEX_0F38;
c0f3af97
L
12595 break;
12596 case 0x3:
f88c9eb0 12597 vex_table_index = VEX_0F3A;
c0f3af97
L
12598 break;
12599 }
12600 codep++;
12601 vex.w = *codep & 0x80;
12602 if (vex.w && address_mode == mode_64bit)
12603 rex |= REX_W;
12604
12605 vex.register_specifier = (~(*codep >> 3)) & 0xf;
12606 if (address_mode != mode_64bit
12607 && vex.register_specifier > 0x7)
f07af43e
L
12608 {
12609 dp = &bad_opcode;
12610 return dp;
12611 }
c0f3af97
L
12612
12613 vex.length = (*codep & 0x4) ? 256 : 128;
12614 switch ((*codep & 0x3))
12615 {
12616 case 0:
12617 vex.prefix = 0;
12618 break;
12619 case 1:
12620 vex.prefix = DATA_PREFIX_OPCODE;
12621 break;
12622 case 2:
12623 vex.prefix = REPE_PREFIX_OPCODE;
12624 break;
12625 case 3:
12626 vex.prefix = REPNE_PREFIX_OPCODE;
12627 break;
12628 }
12629 need_vex = 1;
12630 need_vex_reg = 1;
12631 codep++;
91d6fa6a
NC
12632 vindex = *codep++;
12633 dp = &vex_table[vex_table_index][vindex];
285ca992 12634 end_codep = codep;
c0f3af97 12635 /* There is no MODRM byte for VEX [82|77]. */
91d6fa6a 12636 if (vindex != 0x77 && vindex != 0x82)
c0f3af97
L
12637 {
12638 FETCH_DATA (info, codep + 1);
12639 modrm.mod = (*codep >> 6) & 3;
12640 modrm.reg = (*codep >> 3) & 7;
12641 modrm.rm = *codep & 7;
12642 }
12643 break;
12644
12645 case USE_VEX_C5_TABLE:
43234a1e 12646 /* VEX prefix. */
c0f3af97
L
12647 FETCH_DATA (info, codep + 2);
12648 /* All bits in the REX prefix are ignored. */
12649 rex_ignored = rex;
12650 rex = (*codep & 0x80) ? 0 : REX_R;
12651
12652 vex.register_specifier = (~(*codep >> 3)) & 0xf;
12653 if (address_mode != mode_64bit
12654 && vex.register_specifier > 0x7)
f07af43e
L
12655 {
12656 dp = &bad_opcode;
12657 return dp;
12658 }
c0f3af97 12659
759a05ce
L
12660 vex.w = 0;
12661
c0f3af97
L
12662 vex.length = (*codep & 0x4) ? 256 : 128;
12663 switch ((*codep & 0x3))
12664 {
12665 case 0:
12666 vex.prefix = 0;
12667 break;
12668 case 1:
12669 vex.prefix = DATA_PREFIX_OPCODE;
12670 break;
12671 case 2:
12672 vex.prefix = REPE_PREFIX_OPCODE;
12673 break;
12674 case 3:
12675 vex.prefix = REPNE_PREFIX_OPCODE;
12676 break;
12677 }
12678 need_vex = 1;
12679 need_vex_reg = 1;
12680 codep++;
91d6fa6a
NC
12681 vindex = *codep++;
12682 dp = &vex_table[dp->op[1].bytemode][vindex];
285ca992 12683 end_codep = codep;
c0f3af97 12684 /* There is no MODRM byte for VEX [82|77]. */
91d6fa6a 12685 if (vindex != 0x77 && vindex != 0x82)
c0f3af97
L
12686 {
12687 FETCH_DATA (info, codep + 1);
12688 modrm.mod = (*codep >> 6) & 3;
12689 modrm.reg = (*codep >> 3) & 7;
12690 modrm.rm = *codep & 7;
12691 }
12692 break;
12693
9e30b8e0
L
12694 case USE_VEX_W_TABLE:
12695 if (!need_vex)
12696 abort ();
12697
12698 dp = &vex_w_table[dp->op[1].bytemode][vex.w ? 1 : 0];
12699 break;
12700
43234a1e
L
12701 case USE_EVEX_TABLE:
12702 two_source_ops = 0;
12703 /* EVEX prefix. */
12704 vex.evex = 1;
12705 FETCH_DATA (info, codep + 4);
12706 /* All bits in the REX prefix are ignored. */
12707 rex_ignored = rex;
12708 /* The first byte after 0x62. */
12709 rex = ~(*codep >> 5) & 0x7;
12710 vex.r = *codep & 0x10;
12711 switch ((*codep & 0xf))
12712 {
12713 default:
12714 return &bad_opcode;
12715 case 0x1:
12716 vex_table_index = EVEX_0F;
12717 break;
12718 case 0x2:
12719 vex_table_index = EVEX_0F38;
12720 break;
12721 case 0x3:
12722 vex_table_index = EVEX_0F3A;
12723 break;
12724 }
12725
12726 /* The second byte after 0x62. */
12727 codep++;
12728 vex.w = *codep & 0x80;
12729 if (vex.w && address_mode == mode_64bit)
12730 rex |= REX_W;
12731
12732 vex.register_specifier = (~(*codep >> 3)) & 0xf;
12733 if (address_mode != mode_64bit)
12734 {
12735 /* In 16/32-bit mode silently ignore following bits. */
12736 rex &= ~REX_B;
12737 vex.r = 1;
12738 vex.v = 1;
12739 vex.register_specifier &= 0x7;
12740 }
12741
12742 /* The U bit. */
12743 if (!(*codep & 0x4))
12744 return &bad_opcode;
12745
12746 switch ((*codep & 0x3))
12747 {
12748 case 0:
12749 vex.prefix = 0;
12750 break;
12751 case 1:
12752 vex.prefix = DATA_PREFIX_OPCODE;
12753 break;
12754 case 2:
12755 vex.prefix = REPE_PREFIX_OPCODE;
12756 break;
12757 case 3:
12758 vex.prefix = REPNE_PREFIX_OPCODE;
12759 break;
12760 }
12761
12762 /* The third byte after 0x62. */
12763 codep++;
12764
12765 /* Remember the static rounding bits. */
12766 vex.ll = (*codep >> 5) & 3;
12767 vex.b = (*codep & 0x10) != 0;
12768
12769 vex.v = *codep & 0x8;
12770 vex.mask_register_specifier = *codep & 0x7;
12771 vex.zeroing = *codep & 0x80;
12772
12773 need_vex = 1;
12774 need_vex_reg = 1;
12775 codep++;
12776 vindex = *codep++;
12777 dp = &evex_table[vex_table_index][vindex];
285ca992 12778 end_codep = codep;
43234a1e
L
12779 FETCH_DATA (info, codep + 1);
12780 modrm.mod = (*codep >> 6) & 3;
12781 modrm.reg = (*codep >> 3) & 7;
12782 modrm.rm = *codep & 7;
12783
12784 /* Set vector length. */
12785 if (modrm.mod == 3 && vex.b)
12786 vex.length = 512;
12787 else
12788 {
12789 switch (vex.ll)
12790 {
12791 case 0x0:
12792 vex.length = 128;
12793 break;
12794 case 0x1:
12795 vex.length = 256;
12796 break;
12797 case 0x2:
12798 vex.length = 512;
12799 break;
12800 default:
12801 return &bad_opcode;
12802 }
12803 }
12804 break;
12805
592d1631
L
12806 case 0:
12807 dp = &bad_opcode;
12808 break;
12809
b844680a 12810 default:
d34b5006 12811 abort ();
b844680a
L
12812 }
12813
12814 if (dp->name != NULL)
12815 return dp;
12816 else
8bb15339 12817 return get_valid_dis386 (dp, info);
b844680a
L
12818}
12819
dfc8cf43 12820static void
55cf16e1 12821get_sib (disassemble_info *info, int sizeflag)
dfc8cf43
L
12822{
12823 /* If modrm.mod == 3, operand must be register. */
12824 if (need_modrm
55cf16e1 12825 && ((sizeflag & AFLAG) || address_mode == mode_64bit)
dfc8cf43
L
12826 && modrm.mod != 3
12827 && modrm.rm == 4)
12828 {
12829 FETCH_DATA (info, codep + 2);
12830 sib.index = (codep [1] >> 3) & 7;
12831 sib.scale = (codep [1] >> 6) & 3;
12832 sib.base = codep [1] & 7;
12833 }
12834}
12835
e396998b 12836static int
26ca5450 12837print_insn (bfd_vma pc, disassemble_info *info)
252b5132 12838{
2da11e11 12839 const struct dis386 *dp;
252b5132 12840 int i;
ce518a5f 12841 char *op_txt[MAX_OPERANDS];
252b5132 12842 int needcomma;
df18fdba 12843 int sizeflag, orig_sizeflag;
e396998b 12844 const char *p;
252b5132 12845 struct dis_private priv;
f16cd0d5 12846 int prefix_length;
252b5132 12847
d7921315
L
12848 priv.orig_sizeflag = AFLAG | DFLAG;
12849 if ((info->mach & bfd_mach_i386_i386) != 0)
cb712a9e 12850 address_mode = mode_32bit;
2da11e11 12851 else if (info->mach == bfd_mach_i386_i8086)
d7921315
L
12852 {
12853 address_mode = mode_16bit;
12854 priv.orig_sizeflag = 0;
12855 }
2da11e11 12856 else
d7921315
L
12857 address_mode = mode_64bit;
12858
12859 if (intel_syntax == (char) -1)
12860 intel_syntax = (info->mach & bfd_mach_i386_intel_syntax) != 0;
e396998b
AM
12861
12862 for (p = info->disassembler_options; p != NULL; )
12863 {
0112cd26 12864 if (CONST_STRNEQ (p, "x86-64"))
e396998b 12865 {
cb712a9e 12866 address_mode = mode_64bit;
e396998b
AM
12867 priv.orig_sizeflag = AFLAG | DFLAG;
12868 }
0112cd26 12869 else if (CONST_STRNEQ (p, "i386"))
e396998b 12870 {
cb712a9e 12871 address_mode = mode_32bit;
e396998b
AM
12872 priv.orig_sizeflag = AFLAG | DFLAG;
12873 }
0112cd26 12874 else if (CONST_STRNEQ (p, "i8086"))
e396998b 12875 {
cb712a9e 12876 address_mode = mode_16bit;
e396998b
AM
12877 priv.orig_sizeflag = 0;
12878 }
0112cd26 12879 else if (CONST_STRNEQ (p, "intel"))
e396998b
AM
12880 {
12881 intel_syntax = 1;
9d141669
L
12882 if (CONST_STRNEQ (p + 5, "-mnemonic"))
12883 intel_mnemonic = 1;
e396998b 12884 }
0112cd26 12885 else if (CONST_STRNEQ (p, "att"))
e396998b
AM
12886 {
12887 intel_syntax = 0;
9d141669
L
12888 if (CONST_STRNEQ (p + 3, "-mnemonic"))
12889 intel_mnemonic = 0;
e396998b 12890 }
0112cd26 12891 else if (CONST_STRNEQ (p, "addr"))
e396998b 12892 {
f59a29b9
L
12893 if (address_mode == mode_64bit)
12894 {
12895 if (p[4] == '3' && p[5] == '2')
12896 priv.orig_sizeflag &= ~AFLAG;
12897 else if (p[4] == '6' && p[5] == '4')
12898 priv.orig_sizeflag |= AFLAG;
12899 }
12900 else
12901 {
12902 if (p[4] == '1' && p[5] == '6')
12903 priv.orig_sizeflag &= ~AFLAG;
12904 else if (p[4] == '3' && p[5] == '2')
12905 priv.orig_sizeflag |= AFLAG;
12906 }
e396998b 12907 }
0112cd26 12908 else if (CONST_STRNEQ (p, "data"))
e396998b
AM
12909 {
12910 if (p[4] == '1' && p[5] == '6')
12911 priv.orig_sizeflag &= ~DFLAG;
12912 else if (p[4] == '3' && p[5] == '2')
12913 priv.orig_sizeflag |= DFLAG;
12914 }
0112cd26 12915 else if (CONST_STRNEQ (p, "suffix"))
e396998b
AM
12916 priv.orig_sizeflag |= SUFFIX_ALWAYS;
12917
12918 p = strchr (p, ',');
12919 if (p != NULL)
12920 p++;
12921 }
12922
12923 if (intel_syntax)
12924 {
12925 names64 = intel_names64;
12926 names32 = intel_names32;
12927 names16 = intel_names16;
12928 names8 = intel_names8;
12929 names8rex = intel_names8rex;
12930 names_seg = intel_names_seg;
b9733481 12931 names_mm = intel_names_mm;
7e8b059b 12932 names_bnd = intel_names_bnd;
b9733481
L
12933 names_xmm = intel_names_xmm;
12934 names_ymm = intel_names_ymm;
43234a1e 12935 names_zmm = intel_names_zmm;
db51cc60
L
12936 index64 = intel_index64;
12937 index32 = intel_index32;
43234a1e 12938 names_mask = intel_names_mask;
e396998b
AM
12939 index16 = intel_index16;
12940 open_char = '[';
12941 close_char = ']';
12942 separator_char = '+';
12943 scale_char = '*';
12944 }
12945 else
12946 {
12947 names64 = att_names64;
12948 names32 = att_names32;
12949 names16 = att_names16;
12950 names8 = att_names8;
12951 names8rex = att_names8rex;
12952 names_seg = att_names_seg;
b9733481 12953 names_mm = att_names_mm;
7e8b059b 12954 names_bnd = att_names_bnd;
b9733481
L
12955 names_xmm = att_names_xmm;
12956 names_ymm = att_names_ymm;
43234a1e 12957 names_zmm = att_names_zmm;
db51cc60
L
12958 index64 = att_index64;
12959 index32 = att_index32;
43234a1e 12960 names_mask = att_names_mask;
e396998b
AM
12961 index16 = att_index16;
12962 open_char = '(';
12963 close_char = ')';
12964 separator_char = ',';
12965 scale_char = ',';
12966 }
2da11e11 12967
4fe53c98 12968 /* The output looks better if we put 7 bytes on a line, since that
8a9036a4
L
12969 puts most long word instructions on a single line. Use 8 bytes
12970 for Intel L1OM. */
d7921315 12971 if ((info->mach & bfd_mach_l1om) != 0)
8a9036a4
L
12972 info->bytes_per_line = 8;
12973 else
12974 info->bytes_per_line = 7;
252b5132 12975
26ca5450 12976 info->private_data = &priv;
252b5132
RH
12977 priv.max_fetched = priv.the_buffer;
12978 priv.insn_start = pc;
252b5132
RH
12979
12980 obuf[0] = 0;
ce518a5f
L
12981 for (i = 0; i < MAX_OPERANDS; ++i)
12982 {
12983 op_out[i][0] = 0;
12984 op_index[i] = -1;
12985 }
252b5132
RH
12986
12987 the_info = info;
12988 start_pc = pc;
e396998b
AM
12989 start_codep = priv.the_buffer;
12990 codep = priv.the_buffer;
252b5132 12991
8df14d78 12992 if (OPCODES_SIGSETJMP (priv.bailout) != 0)
5076851f 12993 {
7d421014
ILT
12994 const char *name;
12995
5076851f 12996 /* Getting here means we tried for data but didn't get it. That
e396998b
AM
12997 means we have an incomplete instruction of some sort. Just
12998 print the first byte as a prefix or a .byte pseudo-op. */
12999 if (codep > priv.the_buffer)
5076851f 13000 {
e396998b 13001 name = prefix_name (priv.the_buffer[0], priv.orig_sizeflag);
7d421014
ILT
13002 if (name != NULL)
13003 (*info->fprintf_func) (info->stream, "%s", name);
13004 else
5076851f 13005 {
7d421014
ILT
13006 /* Just print the first byte as a .byte instruction. */
13007 (*info->fprintf_func) (info->stream, ".byte 0x%x",
e396998b 13008 (unsigned int) priv.the_buffer[0]);
5076851f 13009 }
5076851f 13010
7d421014 13011 return 1;
5076851f
ILT
13012 }
13013
13014 return -1;
13015 }
13016
52b15da3 13017 obufp = obuf;
f16cd0d5
L
13018 sizeflag = priv.orig_sizeflag;
13019
13020 if (!ckprefix () || rex_used)
13021 {
13022 /* Too many prefixes or unused REX prefixes. */
13023 for (i = 0;
f6dd4781 13024 i < (int) ARRAY_SIZE (all_prefixes) && all_prefixes[i];
f16cd0d5 13025 i++)
de882298 13026 (*info->fprintf_func) (info->stream, "%s%s",
6c067bbb 13027 i == 0 ? "" : " ",
f16cd0d5 13028 prefix_name (all_prefixes[i], sizeflag));
de882298 13029 return i;
f16cd0d5 13030 }
252b5132
RH
13031
13032 insn_codep = codep;
13033
13034 FETCH_DATA (info, codep + 1);
13035 two_source_ops = (*codep == 0x62) || (*codep == 0xc8);
13036
3e7d61b2 13037 if (((prefixes & PREFIX_FWAIT)
f16cd0d5 13038 && ((*codep < 0xd8) || (*codep > 0xdf))))
252b5132 13039 {
86a80a50 13040 /* Handle prefixes before fwait. */
d9949a36 13041 for (i = 0; i < fwait_prefix && all_prefixes[i];
86a80a50
L
13042 i++)
13043 (*info->fprintf_func) (info->stream, "%s ",
13044 prefix_name (all_prefixes[i], sizeflag));
f16cd0d5 13045 (*info->fprintf_func) (info->stream, "fwait");
86a80a50 13046 return i + 1;
252b5132
RH
13047 }
13048
252b5132
RH
13049 if (*codep == 0x0f)
13050 {
eec0f4ca 13051 unsigned char threebyte;
252b5132 13052 FETCH_DATA (info, codep + 2);
eec0f4ca
L
13053 threebyte = *++codep;
13054 dp = &dis386_twobyte[threebyte];
252b5132 13055 need_modrm = twobyte_has_modrm[*codep];
507bd325 13056 prefix_requirement = dp->prefix_requirement;
eec0f4ca 13057 codep++;
252b5132
RH
13058 }
13059 else
13060 {
6439fc28 13061 dp = &dis386[*codep];
252b5132 13062 need_modrm = onebyte_has_modrm[*codep];
507bd325 13063 prefix_requirement = 0;
eec0f4ca 13064 codep++;
252b5132 13065 }
246c51aa 13066
df18fdba
L
13067 /* Save sizeflag for printing the extra prefixes later before updating
13068 it for mnemonic and operand processing. The prefix names depend
13069 only on the address mode. */
13070 orig_sizeflag = sizeflag;
c608c12e 13071 if (prefixes & PREFIX_ADDR)
df18fdba 13072 sizeflag ^= AFLAG;
b844680a 13073 if ((prefixes & PREFIX_DATA))
df18fdba 13074 sizeflag ^= DFLAG;
3ffd33cf 13075
285ca992 13076 end_codep = codep;
8bb15339 13077 if (need_modrm)
252b5132
RH
13078 {
13079 FETCH_DATA (info, codep + 1);
7967e09e
L
13080 modrm.mod = (*codep >> 6) & 3;
13081 modrm.reg = (*codep >> 3) & 7;
13082 modrm.rm = *codep & 7;
252b5132
RH
13083 }
13084
42d5f9c6
MS
13085 need_vex = 0;
13086 need_vex_reg = 0;
13087 vex_w_done = 0;
43234a1e 13088 vex.evex = 0;
55b126d4 13089
ce518a5f 13090 if (dp->name == NULL && dp->op[0].bytemode == FLOATCODE)
252b5132 13091 {
55cf16e1 13092 get_sib (info, sizeflag);
252b5132
RH
13093 dofloat (sizeflag);
13094 }
13095 else
13096 {
8bb15339 13097 dp = get_valid_dis386 (dp, info);
b844680a 13098 if (dp != NULL && putop (dp->name, sizeflag) == 0)
6c067bbb 13099 {
55cf16e1 13100 get_sib (info, sizeflag);
ce518a5f
L
13101 for (i = 0; i < MAX_OPERANDS; ++i)
13102 {
246c51aa 13103 obufp = op_out[i];
ce518a5f
L
13104 op_ad = MAX_OPERANDS - 1 - i;
13105 if (dp->op[i].rtn)
13106 (*dp->op[i].rtn) (dp->op[i].bytemode, sizeflag);
43234a1e
L
13107 /* For EVEX instruction after the last operand masking
13108 should be printed. */
13109 if (i == 0 && vex.evex)
13110 {
13111 /* Don't print {%k0}. */
13112 if (vex.mask_register_specifier)
13113 {
13114 oappend ("{");
13115 oappend (names_mask[vex.mask_register_specifier]);
13116 oappend ("}");
13117 }
13118 if (vex.zeroing)
13119 oappend ("{z}");
13120 }
ce518a5f 13121 }
6439fc28 13122 }
252b5132
RH
13123 }
13124
d869730d 13125 /* Check if the REX prefix is used. */
e2e6193d 13126 if (rex_ignored == 0 && (rex ^ rex_used) == 0 && last_rex_prefix >= 0)
f16cd0d5
L
13127 all_prefixes[last_rex_prefix] = 0;
13128
5e6718e4 13129 /* Check if the SEG prefix is used. */
f16cd0d5
L
13130 if ((prefixes & (PREFIX_CS | PREFIX_SS | PREFIX_DS | PREFIX_ES
13131 | PREFIX_FS | PREFIX_GS)) != 0
285ca992 13132 && (used_prefixes & active_seg_prefix) != 0)
f16cd0d5
L
13133 all_prefixes[last_seg_prefix] = 0;
13134
5e6718e4 13135 /* Check if the ADDR prefix is used. */
f16cd0d5
L
13136 if ((prefixes & PREFIX_ADDR) != 0
13137 && (used_prefixes & PREFIX_ADDR) != 0)
13138 all_prefixes[last_addr_prefix] = 0;
13139
df18fdba
L
13140 /* Check if the DATA prefix is used. */
13141 if ((prefixes & PREFIX_DATA) != 0
13142 && (used_prefixes & PREFIX_DATA) != 0)
13143 all_prefixes[last_data_prefix] = 0;
f16cd0d5 13144
df18fdba 13145 /* Print the extra prefixes. */
f16cd0d5 13146 prefix_length = 0;
f310f33d 13147 for (i = 0; i < (int) ARRAY_SIZE (all_prefixes); i++)
f16cd0d5
L
13148 if (all_prefixes[i])
13149 {
13150 const char *name;
df18fdba 13151 name = prefix_name (all_prefixes[i], orig_sizeflag);
f16cd0d5
L
13152 if (name == NULL)
13153 abort ();
13154 prefix_length += strlen (name) + 1;
13155 (*info->fprintf_func) (info->stream, "%s ", name);
13156 }
b844680a 13157
285ca992
L
13158 /* If the mandatory PREFIX_REPZ/PREFIX_REPNZ/PREFIX_DATA prefix is
13159 unused, opcode is invalid. Since the PREFIX_DATA prefix may be
13160 used by putop and MMX/SSE operand and may be overriden by the
13161 PREFIX_REPZ/PREFIX_REPNZ fix, we check the PREFIX_DATA prefix
13162 separately. */
507bd325 13163 if (prefix_requirement == PREFIX_OPCODE
285ca992
L
13164 && dp != &bad_opcode
13165 && (((prefixes
13166 & (PREFIX_REPZ | PREFIX_REPNZ)) != 0
13167 && (used_prefixes
13168 & (PREFIX_REPZ | PREFIX_REPNZ)) == 0)
13169 || ((((prefixes
13170 & (PREFIX_REPZ | PREFIX_REPNZ | PREFIX_DATA))
13171 == PREFIX_DATA)
13172 && (used_prefixes & PREFIX_DATA) == 0))))
13173 {
13174 (*info->fprintf_func) (info->stream, "(bad)");
13175 return end_codep - priv.the_buffer;
13176 }
13177
f16cd0d5
L
13178 /* Check maximum code length. */
13179 if ((codep - start_codep) > MAX_CODE_LENGTH)
13180 {
13181 (*info->fprintf_func) (info->stream, "(bad)");
13182 return MAX_CODE_LENGTH;
13183 }
b844680a 13184
ea397f5b 13185 obufp = mnemonicendp;
f16cd0d5 13186 for (i = strlen (obuf) + prefix_length; i < 6; i++)
252b5132
RH
13187 oappend (" ");
13188 oappend (" ");
13189 (*info->fprintf_func) (info->stream, "%s", obuf);
13190
13191 /* The enter and bound instructions are printed with operands in the same
13192 order as the intel book; everything else is printed in reverse order. */
2da11e11 13193 if (intel_syntax || two_source_ops)
252b5132 13194 {
185b1163
L
13195 bfd_vma riprel;
13196
ce518a5f 13197 for (i = 0; i < MAX_OPERANDS; ++i)
6c067bbb 13198 op_txt[i] = op_out[i];
246c51aa 13199
ce518a5f
L
13200 for (i = 0; i < (MAX_OPERANDS >> 1); ++i)
13201 {
6c067bbb
RM
13202 op_ad = op_index[i];
13203 op_index[i] = op_index[MAX_OPERANDS - 1 - i];
13204 op_index[MAX_OPERANDS - 1 - i] = op_ad;
185b1163
L
13205 riprel = op_riprel[i];
13206 op_riprel[i] = op_riprel [MAX_OPERANDS - 1 - i];
13207 op_riprel[MAX_OPERANDS - 1 - i] = riprel;
ce518a5f 13208 }
252b5132
RH
13209 }
13210 else
13211 {
ce518a5f 13212 for (i = 0; i < MAX_OPERANDS; ++i)
6c067bbb 13213 op_txt[MAX_OPERANDS - 1 - i] = op_out[i];
050dfa73
MM
13214 }
13215
ce518a5f
L
13216 needcomma = 0;
13217 for (i = 0; i < MAX_OPERANDS; ++i)
13218 if (*op_txt[i])
13219 {
13220 if (needcomma)
13221 (*info->fprintf_func) (info->stream, ",");
13222 if (op_index[i] != -1 && !op_riprel[i])
13223 (*info->print_address_func) ((bfd_vma) op_address[op_index[i]], info);
13224 else
13225 (*info->fprintf_func) (info->stream, "%s", op_txt[i]);
13226 needcomma = 1;
13227 }
050dfa73 13228
ce518a5f 13229 for (i = 0; i < MAX_OPERANDS; i++)
52b15da3
JH
13230 if (op_index[i] != -1 && op_riprel[i])
13231 {
13232 (*info->fprintf_func) (info->stream, " # ");
13233 (*info->print_address_func) ((bfd_vma) (start_pc + codep - start_codep
13234 + op_address[op_index[i]]), info);
185b1163 13235 break;
52b15da3 13236 }
e396998b 13237 return codep - priv.the_buffer;
252b5132
RH
13238}
13239
6439fc28 13240static const char *float_mem[] = {
252b5132 13241 /* d8 */
7c52e0e8
L
13242 "fadd{s|}",
13243 "fmul{s|}",
13244 "fcom{s|}",
13245 "fcomp{s|}",
13246 "fsub{s|}",
13247 "fsubr{s|}",
13248 "fdiv{s|}",
13249 "fdivr{s|}",
db6eb5be 13250 /* d9 */
7c52e0e8 13251 "fld{s|}",
252b5132 13252 "(bad)",
7c52e0e8
L
13253 "fst{s|}",
13254 "fstp{s|}",
9306ca4a 13255 "fldenvIC",
252b5132 13256 "fldcw",
9306ca4a 13257 "fNstenvIC",
252b5132
RH
13258 "fNstcw",
13259 /* da */
7c52e0e8
L
13260 "fiadd{l|}",
13261 "fimul{l|}",
13262 "ficom{l|}",
13263 "ficomp{l|}",
13264 "fisub{l|}",
13265 "fisubr{l|}",
13266 "fidiv{l|}",
13267 "fidivr{l|}",
252b5132 13268 /* db */
7c52e0e8
L
13269 "fild{l|}",
13270 "fisttp{l|}",
13271 "fist{l|}",
13272 "fistp{l|}",
252b5132 13273 "(bad)",
6439fc28 13274 "fld{t||t|}",
252b5132 13275 "(bad)",
6439fc28 13276 "fstp{t||t|}",
252b5132 13277 /* dc */
7c52e0e8
L
13278 "fadd{l|}",
13279 "fmul{l|}",
13280 "fcom{l|}",
13281 "fcomp{l|}",
13282 "fsub{l|}",
13283 "fsubr{l|}",
13284 "fdiv{l|}",
13285 "fdivr{l|}",
252b5132 13286 /* dd */
7c52e0e8
L
13287 "fld{l|}",
13288 "fisttp{ll|}",
13289 "fst{l||}",
13290 "fstp{l|}",
9306ca4a 13291 "frstorIC",
252b5132 13292 "(bad)",
9306ca4a 13293 "fNsaveIC",
252b5132
RH
13294 "fNstsw",
13295 /* de */
13296 "fiadd",
13297 "fimul",
13298 "ficom",
13299 "ficomp",
13300 "fisub",
13301 "fisubr",
13302 "fidiv",
13303 "fidivr",
13304 /* df */
13305 "fild",
ca164297 13306 "fisttp",
252b5132
RH
13307 "fist",
13308 "fistp",
13309 "fbld",
7c52e0e8 13310 "fild{ll|}",
252b5132 13311 "fbstp",
7c52e0e8 13312 "fistp{ll|}",
1d9f512f
AM
13313};
13314
13315static const unsigned char float_mem_mode[] = {
13316 /* d8 */
13317 d_mode,
13318 d_mode,
13319 d_mode,
13320 d_mode,
13321 d_mode,
13322 d_mode,
13323 d_mode,
13324 d_mode,
13325 /* d9 */
13326 d_mode,
13327 0,
13328 d_mode,
13329 d_mode,
13330 0,
13331 w_mode,
13332 0,
13333 w_mode,
13334 /* da */
13335 d_mode,
13336 d_mode,
13337 d_mode,
13338 d_mode,
13339 d_mode,
13340 d_mode,
13341 d_mode,
13342 d_mode,
13343 /* db */
13344 d_mode,
13345 d_mode,
13346 d_mode,
13347 d_mode,
13348 0,
9306ca4a 13349 t_mode,
1d9f512f 13350 0,
9306ca4a 13351 t_mode,
1d9f512f
AM
13352 /* dc */
13353 q_mode,
13354 q_mode,
13355 q_mode,
13356 q_mode,
13357 q_mode,
13358 q_mode,
13359 q_mode,
13360 q_mode,
13361 /* dd */
13362 q_mode,
13363 q_mode,
13364 q_mode,
13365 q_mode,
13366 0,
13367 0,
13368 0,
13369 w_mode,
13370 /* de */
13371 w_mode,
13372 w_mode,
13373 w_mode,
13374 w_mode,
13375 w_mode,
13376 w_mode,
13377 w_mode,
13378 w_mode,
13379 /* df */
13380 w_mode,
13381 w_mode,
13382 w_mode,
13383 w_mode,
9306ca4a 13384 t_mode,
1d9f512f 13385 q_mode,
9306ca4a 13386 t_mode,
1d9f512f 13387 q_mode
252b5132
RH
13388};
13389
ce518a5f
L
13390#define ST { OP_ST, 0 }
13391#define STi { OP_STi, 0 }
252b5132 13392
bf890a93
IT
13393#define FGRPd9_2 NULL, { { NULL, 0 } }, 0
13394#define FGRPd9_4 NULL, { { NULL, 1 } }, 0
13395#define FGRPd9_5 NULL, { { NULL, 2 } }, 0
13396#define FGRPd9_6 NULL, { { NULL, 3 } }, 0
13397#define FGRPd9_7 NULL, { { NULL, 4 } }, 0
13398#define FGRPda_5 NULL, { { NULL, 5 } }, 0
13399#define FGRPdb_4 NULL, { { NULL, 6 } }, 0
13400#define FGRPde_3 NULL, { { NULL, 7 } }, 0
13401#define FGRPdf_4 NULL, { { NULL, 8 } }, 0
252b5132 13402
2da11e11 13403static const struct dis386 float_reg[][8] = {
252b5132
RH
13404 /* d8 */
13405 {
bf890a93
IT
13406 { "fadd", { ST, STi }, 0 },
13407 { "fmul", { ST, STi }, 0 },
13408 { "fcom", { STi }, 0 },
13409 { "fcomp", { STi }, 0 },
13410 { "fsub", { ST, STi }, 0 },
13411 { "fsubr", { ST, STi }, 0 },
13412 { "fdiv", { ST, STi }, 0 },
13413 { "fdivr", { ST, STi }, 0 },
252b5132
RH
13414 },
13415 /* d9 */
13416 {
bf890a93
IT
13417 { "fld", { STi }, 0 },
13418 { "fxch", { STi }, 0 },
252b5132 13419 { FGRPd9_2 },
592d1631 13420 { Bad_Opcode },
252b5132
RH
13421 { FGRPd9_4 },
13422 { FGRPd9_5 },
13423 { FGRPd9_6 },
13424 { FGRPd9_7 },
13425 },
13426 /* da */
13427 {
bf890a93
IT
13428 { "fcmovb", { ST, STi }, 0 },
13429 { "fcmove", { ST, STi }, 0 },
13430 { "fcmovbe",{ ST, STi }, 0 },
13431 { "fcmovu", { ST, STi }, 0 },
592d1631 13432 { Bad_Opcode },
252b5132 13433 { FGRPda_5 },
592d1631
L
13434 { Bad_Opcode },
13435 { Bad_Opcode },
252b5132
RH
13436 },
13437 /* db */
13438 {
bf890a93
IT
13439 { "fcmovnb",{ ST, STi }, 0 },
13440 { "fcmovne",{ ST, STi }, 0 },
13441 { "fcmovnbe",{ ST, STi }, 0 },
13442 { "fcmovnu",{ ST, STi }, 0 },
252b5132 13443 { FGRPdb_4 },
bf890a93
IT
13444 { "fucomi", { ST, STi }, 0 },
13445 { "fcomi", { ST, STi }, 0 },
592d1631 13446 { Bad_Opcode },
252b5132
RH
13447 },
13448 /* dc */
13449 {
bf890a93
IT
13450 { "fadd", { STi, ST }, 0 },
13451 { "fmul", { STi, ST }, 0 },
592d1631
L
13452 { Bad_Opcode },
13453 { Bad_Opcode },
bf890a93
IT
13454 { "fsub!M", { STi, ST }, 0 },
13455 { "fsubM", { STi, ST }, 0 },
13456 { "fdiv!M", { STi, ST }, 0 },
13457 { "fdivM", { STi, ST }, 0 },
252b5132
RH
13458 },
13459 /* dd */
13460 {
bf890a93 13461 { "ffree", { STi }, 0 },
592d1631 13462 { Bad_Opcode },
bf890a93
IT
13463 { "fst", { STi }, 0 },
13464 { "fstp", { STi }, 0 },
13465 { "fucom", { STi }, 0 },
13466 { "fucomp", { STi }, 0 },
592d1631
L
13467 { Bad_Opcode },
13468 { Bad_Opcode },
252b5132
RH
13469 },
13470 /* de */
13471 {
bf890a93
IT
13472 { "faddp", { STi, ST }, 0 },
13473 { "fmulp", { STi, ST }, 0 },
592d1631 13474 { Bad_Opcode },
252b5132 13475 { FGRPde_3 },
bf890a93
IT
13476 { "fsub!Mp", { STi, ST }, 0 },
13477 { "fsubMp", { STi, ST }, 0 },
13478 { "fdiv!Mp", { STi, ST }, 0 },
13479 { "fdivMp", { STi, ST }, 0 },
252b5132
RH
13480 },
13481 /* df */
13482 {
bf890a93 13483 { "ffreep", { STi }, 0 },
592d1631
L
13484 { Bad_Opcode },
13485 { Bad_Opcode },
13486 { Bad_Opcode },
252b5132 13487 { FGRPdf_4 },
bf890a93
IT
13488 { "fucomip", { ST, STi }, 0 },
13489 { "fcomip", { ST, STi }, 0 },
592d1631 13490 { Bad_Opcode },
252b5132
RH
13491 },
13492};
13493
252b5132
RH
13494static char *fgrps[][8] = {
13495 /* d9_2 0 */
13496 {
13497 "fnop","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
13498 },
13499
13500 /* d9_4 1 */
13501 {
13502 "fchs","fabs","(bad)","(bad)","ftst","fxam","(bad)","(bad)",
13503 },
13504
13505 /* d9_5 2 */
13506 {
13507 "fld1","fldl2t","fldl2e","fldpi","fldlg2","fldln2","fldz","(bad)",
13508 },
13509
13510 /* d9_6 3 */
13511 {
13512 "f2xm1","fyl2x","fptan","fpatan","fxtract","fprem1","fdecstp","fincstp",
13513 },
13514
13515 /* d9_7 4 */
13516 {
13517 "fprem","fyl2xp1","fsqrt","fsincos","frndint","fscale","fsin","fcos",
13518 },
13519
13520 /* da_5 5 */
13521 {
13522 "(bad)","fucompp","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
13523 },
13524
13525 /* db_4 6 */
13526 {
309d3373
JB
13527 "fNeni(8087 only)","fNdisi(8087 only)","fNclex","fNinit",
13528 "fNsetpm(287 only)","frstpm(287 only)","(bad)","(bad)",
252b5132
RH
13529 },
13530
13531 /* de_3 7 */
13532 {
13533 "(bad)","fcompp","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
13534 },
13535
13536 /* df_4 8 */
13537 {
13538 "fNstsw","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
13539 },
13540};
13541
b6169b20
L
13542static void
13543swap_operand (void)
13544{
13545 mnemonicendp[0] = '.';
13546 mnemonicendp[1] = 's';
13547 mnemonicendp += 2;
13548}
13549
b844680a
L
13550static void
13551OP_Skip_MODRM (int bytemode ATTRIBUTE_UNUSED,
13552 int sizeflag ATTRIBUTE_UNUSED)
13553{
13554 /* Skip mod/rm byte. */
13555 MODRM_CHECK;
13556 codep++;
13557}
13558
252b5132 13559static void
26ca5450 13560dofloat (int sizeflag)
252b5132 13561{
2da11e11 13562 const struct dis386 *dp;
252b5132
RH
13563 unsigned char floatop;
13564
13565 floatop = codep[-1];
13566
7967e09e 13567 if (modrm.mod != 3)
252b5132 13568 {
7967e09e 13569 int fp_indx = (floatop - 0xd8) * 8 + modrm.reg;
1d9f512f
AM
13570
13571 putop (float_mem[fp_indx], sizeflag);
ce518a5f 13572 obufp = op_out[0];
6e50d963 13573 op_ad = 2;
1d9f512f 13574 OP_E (float_mem_mode[fp_indx], sizeflag);
252b5132
RH
13575 return;
13576 }
6608db57 13577 /* Skip mod/rm byte. */
4bba6815 13578 MODRM_CHECK;
252b5132
RH
13579 codep++;
13580
7967e09e 13581 dp = &float_reg[floatop - 0xd8][modrm.reg];
252b5132
RH
13582 if (dp->name == NULL)
13583 {
7967e09e 13584 putop (fgrps[dp->op[0].bytemode][modrm.rm], sizeflag);
252b5132 13585
6608db57 13586 /* Instruction fnstsw is only one with strange arg. */
252b5132 13587 if (floatop == 0xdf && codep[-1] == 0xe0)
ce518a5f 13588 strcpy (op_out[0], names16[0]);
252b5132
RH
13589 }
13590 else
13591 {
13592 putop (dp->name, sizeflag);
13593
ce518a5f 13594 obufp = op_out[0];
6e50d963 13595 op_ad = 2;
ce518a5f
L
13596 if (dp->op[0].rtn)
13597 (*dp->op[0].rtn) (dp->op[0].bytemode, sizeflag);
6e50d963 13598
ce518a5f 13599 obufp = op_out[1];
6e50d963 13600 op_ad = 1;
ce518a5f
L
13601 if (dp->op[1].rtn)
13602 (*dp->op[1].rtn) (dp->op[1].bytemode, sizeflag);
252b5132
RH
13603 }
13604}
13605
9ce09ba2
RM
13606/* Like oappend (below), but S is a string starting with '%'.
13607 In Intel syntax, the '%' is elided. */
13608static void
13609oappend_maybe_intel (const char *s)
13610{
13611 oappend (s + intel_syntax);
13612}
13613
252b5132 13614static void
26ca5450 13615OP_ST (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 13616{
9ce09ba2 13617 oappend_maybe_intel ("%st");
252b5132
RH
13618}
13619
252b5132 13620static void
26ca5450 13621OP_STi (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 13622{
7967e09e 13623 sprintf (scratchbuf, "%%st(%d)", modrm.rm);
9ce09ba2 13624 oappend_maybe_intel (scratchbuf);
252b5132
RH
13625}
13626
6608db57 13627/* Capital letters in template are macros. */
6439fc28 13628static int
d3ce72d0 13629putop (const char *in_template, int sizeflag)
252b5132 13630{
2da11e11 13631 const char *p;
9306ca4a 13632 int alt = 0;
9d141669 13633 int cond = 1;
98b528ac
L
13634 unsigned int l = 0, len = 1;
13635 char last[4];
13636
13637#define SAVE_LAST(c) \
13638 if (l < len && l < sizeof (last)) \
13639 last[l++] = c; \
13640 else \
13641 abort ();
252b5132 13642
d3ce72d0 13643 for (p = in_template; *p; p++)
252b5132
RH
13644 {
13645 switch (*p)
13646 {
13647 default:
13648 *obufp++ = *p;
13649 break;
98b528ac
L
13650 case '%':
13651 len++;
13652 break;
9d141669
L
13653 case '!':
13654 cond = 0;
13655 break;
6439fc28
AM
13656 case '{':
13657 alt = 0;
13658 if (intel_syntax)
6439fc28
AM
13659 {
13660 while (*++p != '|')
7c52e0e8
L
13661 if (*p == '}' || *p == '\0')
13662 abort ();
6439fc28 13663 }
9306ca4a
JB
13664 /* Fall through. */
13665 case 'I':
13666 alt = 1;
13667 continue;
6439fc28
AM
13668 case '|':
13669 while (*++p != '}')
13670 {
13671 if (*p == '\0')
13672 abort ();
13673 }
13674 break;
13675 case '}':
13676 break;
252b5132 13677 case 'A':
db6eb5be
AM
13678 if (intel_syntax)
13679 break;
7967e09e 13680 if (modrm.mod != 3 || (sizeflag & SUFFIX_ALWAYS))
252b5132
RH
13681 *obufp++ = 'b';
13682 break;
13683 case 'B':
4b06377f
L
13684 if (l == 0 && len == 1)
13685 {
13686case_B:
13687 if (intel_syntax)
13688 break;
13689 if (sizeflag & SUFFIX_ALWAYS)
13690 *obufp++ = 'b';
13691 }
13692 else
13693 {
13694 if (l != 1
13695 || len != 2
13696 || last[0] != 'L')
13697 {
13698 SAVE_LAST (*p);
13699 break;
13700 }
13701
13702 if (address_mode == mode_64bit
13703 && !(prefixes & PREFIX_ADDR))
13704 {
13705 *obufp++ = 'a';
13706 *obufp++ = 'b';
13707 *obufp++ = 's';
13708 }
13709
13710 goto case_B;
13711 }
252b5132 13712 break;
9306ca4a
JB
13713 case 'C':
13714 if (intel_syntax && !alt)
13715 break;
13716 if ((prefixes & PREFIX_DATA) || (sizeflag & SUFFIX_ALWAYS))
13717 {
13718 if (sizeflag & DFLAG)
13719 *obufp++ = intel_syntax ? 'd' : 'l';
13720 else
13721 *obufp++ = intel_syntax ? 'w' : 's';
13722 used_prefixes |= (prefixes & PREFIX_DATA);
13723 }
13724 break;
ed7841b3
JB
13725 case 'D':
13726 if (intel_syntax || !(sizeflag & SUFFIX_ALWAYS))
13727 break;
161a04f6 13728 USED_REX (REX_W);
7967e09e 13729 if (modrm.mod == 3)
ed7841b3 13730 {
161a04f6 13731 if (rex & REX_W)
ed7841b3 13732 *obufp++ = 'q';
ed7841b3 13733 else
f16cd0d5
L
13734 {
13735 if (sizeflag & DFLAG)
13736 *obufp++ = intel_syntax ? 'd' : 'l';
13737 else
13738 *obufp++ = 'w';
13739 used_prefixes |= (prefixes & PREFIX_DATA);
13740 }
ed7841b3
JB
13741 }
13742 else
13743 *obufp++ = 'w';
13744 break;
252b5132 13745 case 'E': /* For jcxz/jecxz */
cb712a9e 13746 if (address_mode == mode_64bit)
c1a64871
JH
13747 {
13748 if (sizeflag & AFLAG)
13749 *obufp++ = 'r';
13750 else
13751 *obufp++ = 'e';
13752 }
13753 else
13754 if (sizeflag & AFLAG)
13755 *obufp++ = 'e';
3ffd33cf
AM
13756 used_prefixes |= (prefixes & PREFIX_ADDR);
13757 break;
13758 case 'F':
db6eb5be
AM
13759 if (intel_syntax)
13760 break;
e396998b 13761 if ((prefixes & PREFIX_ADDR) || (sizeflag & SUFFIX_ALWAYS))
3ffd33cf
AM
13762 {
13763 if (sizeflag & AFLAG)
cb712a9e 13764 *obufp++ = address_mode == mode_64bit ? 'q' : 'l';
3ffd33cf 13765 else
cb712a9e 13766 *obufp++ = address_mode == mode_64bit ? 'l' : 'w';
3ffd33cf
AM
13767 used_prefixes |= (prefixes & PREFIX_ADDR);
13768 }
252b5132 13769 break;
52fd6d94
JB
13770 case 'G':
13771 if (intel_syntax || (obufp[-1] != 's' && !(sizeflag & SUFFIX_ALWAYS)))
13772 break;
161a04f6 13773 if ((rex & REX_W) || (sizeflag & DFLAG))
52fd6d94
JB
13774 *obufp++ = 'l';
13775 else
13776 *obufp++ = 'w';
161a04f6 13777 if (!(rex & REX_W))
52fd6d94
JB
13778 used_prefixes |= (prefixes & PREFIX_DATA);
13779 break;
5dd0794d 13780 case 'H':
db6eb5be
AM
13781 if (intel_syntax)
13782 break;
5dd0794d
AM
13783 if ((prefixes & (PREFIX_CS | PREFIX_DS)) == PREFIX_CS
13784 || (prefixes & (PREFIX_CS | PREFIX_DS)) == PREFIX_DS)
13785 {
13786 used_prefixes |= prefixes & (PREFIX_CS | PREFIX_DS);
13787 *obufp++ = ',';
13788 *obufp++ = 'p';
13789 if (prefixes & PREFIX_DS)
13790 *obufp++ = 't';
13791 else
13792 *obufp++ = 'n';
13793 }
13794 break;
9306ca4a
JB
13795 case 'J':
13796 if (intel_syntax)
13797 break;
13798 *obufp++ = 'l';
13799 break;
42903f7f
L
13800 case 'K':
13801 USED_REX (REX_W);
13802 if (rex & REX_W)
13803 *obufp++ = 'q';
13804 else
13805 *obufp++ = 'd';
13806 break;
6dd5059a
L
13807 case 'Z':
13808 if (intel_syntax)
13809 break;
13810 if (address_mode == mode_64bit && (sizeflag & SUFFIX_ALWAYS))
13811 {
13812 *obufp++ = 'q';
13813 break;
13814 }
13815 /* Fall through. */
98b528ac 13816 goto case_L;
252b5132 13817 case 'L':
98b528ac
L
13818 if (l != 0 || len != 1)
13819 {
13820 SAVE_LAST (*p);
13821 break;
13822 }
13823case_L:
db6eb5be
AM
13824 if (intel_syntax)
13825 break;
252b5132
RH
13826 if (sizeflag & SUFFIX_ALWAYS)
13827 *obufp++ = 'l';
252b5132 13828 break;
9d141669
L
13829 case 'M':
13830 if (intel_mnemonic != cond)
13831 *obufp++ = 'r';
13832 break;
252b5132
RH
13833 case 'N':
13834 if ((prefixes & PREFIX_FWAIT) == 0)
13835 *obufp++ = 'n';
7d421014
ILT
13836 else
13837 used_prefixes |= PREFIX_FWAIT;
252b5132 13838 break;
52b15da3 13839 case 'O':
161a04f6
L
13840 USED_REX (REX_W);
13841 if (rex & REX_W)
6439fc28 13842 *obufp++ = 'o';
a35ca55a
JB
13843 else if (intel_syntax && (sizeflag & DFLAG))
13844 *obufp++ = 'q';
52b15da3
JH
13845 else
13846 *obufp++ = 'd';
161a04f6 13847 if (!(rex & REX_W))
a35ca55a 13848 used_prefixes |= (prefixes & PREFIX_DATA);
52b15da3 13849 break;
6439fc28 13850 case 'T':
d9e3625e
L
13851 if (!intel_syntax
13852 && address_mode == mode_64bit
7bb15c6f 13853 && ((sizeflag & DFLAG) || (rex & REX_W)))
6439fc28
AM
13854 {
13855 *obufp++ = 'q';
13856 break;
13857 }
6608db57 13858 /* Fall through. */
4b4c407a 13859 goto case_P;
252b5132 13860 case 'P':
4b4c407a 13861 if (l == 0 && len == 1)
d9e3625e 13862 {
4b4c407a
L
13863case_P:
13864 if (intel_syntax)
d9e3625e 13865 {
4b4c407a
L
13866 if ((rex & REX_W) == 0
13867 && (prefixes & PREFIX_DATA))
13868 {
13869 if ((sizeflag & DFLAG) == 0)
13870 *obufp++ = 'w';
13871 used_prefixes |= (prefixes & PREFIX_DATA);
13872 }
13873 break;
13874 }
13875 if ((prefixes & PREFIX_DATA)
13876 || (rex & REX_W)
13877 || (sizeflag & SUFFIX_ALWAYS))
13878 {
13879 USED_REX (REX_W);
13880 if (rex & REX_W)
13881 *obufp++ = 'q';
13882 else
13883 {
13884 if (sizeflag & DFLAG)
13885 *obufp++ = 'l';
13886 else
13887 *obufp++ = 'w';
13888 used_prefixes |= (prefixes & PREFIX_DATA);
13889 }
d9e3625e 13890 }
d9e3625e 13891 }
4b4c407a 13892 else
252b5132 13893 {
4b4c407a
L
13894 if (l != 1 || len != 2 || last[0] != 'L')
13895 {
13896 SAVE_LAST (*p);
13897 break;
13898 }
13899
13900 if ((prefixes & PREFIX_DATA)
13901 || (rex & REX_W)
13902 || (sizeflag & SUFFIX_ALWAYS))
52b15da3 13903 {
4b4c407a
L
13904 USED_REX (REX_W);
13905 if (rex & REX_W)
13906 *obufp++ = 'q';
13907 else
13908 {
13909 if (sizeflag & DFLAG)
13910 *obufp++ = intel_syntax ? 'd' : 'l';
13911 else
13912 *obufp++ = 'w';
13913 used_prefixes |= (prefixes & PREFIX_DATA);
13914 }
52b15da3 13915 }
252b5132
RH
13916 }
13917 break;
6439fc28 13918 case 'U':
db6eb5be
AM
13919 if (intel_syntax)
13920 break;
7bb15c6f 13921 if (address_mode == mode_64bit
6c067bbb 13922 && ((sizeflag & DFLAG) || (rex & REX_W)))
6439fc28 13923 {
7967e09e 13924 if (modrm.mod != 3 || (sizeflag & SUFFIX_ALWAYS))
1a114b12 13925 *obufp++ = 'q';
6439fc28
AM
13926 break;
13927 }
6608db57 13928 /* Fall through. */
98b528ac 13929 goto case_Q;
252b5132 13930 case 'Q':
98b528ac 13931 if (l == 0 && len == 1)
252b5132 13932 {
98b528ac
L
13933case_Q:
13934 if (intel_syntax && !alt)
13935 break;
13936 USED_REX (REX_W);
13937 if (modrm.mod != 3 || (sizeflag & SUFFIX_ALWAYS))
52b15da3 13938 {
98b528ac
L
13939 if (rex & REX_W)
13940 *obufp++ = 'q';
52b15da3 13941 else
98b528ac
L
13942 {
13943 if (sizeflag & DFLAG)
13944 *obufp++ = intel_syntax ? 'd' : 'l';
13945 else
13946 *obufp++ = 'w';
f16cd0d5 13947 used_prefixes |= (prefixes & PREFIX_DATA);
98b528ac 13948 }
52b15da3 13949 }
98b528ac
L
13950 }
13951 else
13952 {
13953 if (l != 1 || len != 2 || last[0] != 'L')
13954 {
13955 SAVE_LAST (*p);
13956 break;
13957 }
13958 if (intel_syntax
13959 || (modrm.mod == 3 && !(sizeflag & SUFFIX_ALWAYS)))
13960 break;
13961 if ((rex & REX_W))
13962 {
13963 USED_REX (REX_W);
13964 *obufp++ = 'q';
13965 }
13966 else
13967 *obufp++ = 'l';
252b5132
RH
13968 }
13969 break;
13970 case 'R':
161a04f6
L
13971 USED_REX (REX_W);
13972 if (rex & REX_W)
a35ca55a
JB
13973 *obufp++ = 'q';
13974 else if (sizeflag & DFLAG)
c608c12e 13975 {
a35ca55a 13976 if (intel_syntax)
c608c12e 13977 *obufp++ = 'd';
c608c12e 13978 else
a35ca55a 13979 *obufp++ = 'l';
c608c12e 13980 }
252b5132 13981 else
a35ca55a
JB
13982 *obufp++ = 'w';
13983 if (intel_syntax && !p[1]
161a04f6 13984 && ((rex & REX_W) || (sizeflag & DFLAG)))
a35ca55a 13985 *obufp++ = 'e';
161a04f6 13986 if (!(rex & REX_W))
52b15da3 13987 used_prefixes |= (prefixes & PREFIX_DATA);
252b5132 13988 break;
1a114b12 13989 case 'V':
4b06377f 13990 if (l == 0 && len == 1)
1a114b12 13991 {
4b06377f
L
13992 if (intel_syntax)
13993 break;
7bb15c6f 13994 if (address_mode == mode_64bit
6c067bbb 13995 && ((sizeflag & DFLAG) || (rex & REX_W)))
4b06377f
L
13996 {
13997 if (sizeflag & SUFFIX_ALWAYS)
13998 *obufp++ = 'q';
13999 break;
14000 }
14001 }
14002 else
14003 {
14004 if (l != 1
14005 || len != 2
14006 || last[0] != 'L')
14007 {
14008 SAVE_LAST (*p);
14009 break;
14010 }
14011
14012 if (rex & REX_W)
14013 {
14014 *obufp++ = 'a';
14015 *obufp++ = 'b';
14016 *obufp++ = 's';
14017 }
1a114b12
JB
14018 }
14019 /* Fall through. */
4b06377f 14020 goto case_S;
252b5132 14021 case 'S':
4b06377f 14022 if (l == 0 && len == 1)
252b5132 14023 {
4b06377f
L
14024case_S:
14025 if (intel_syntax)
14026 break;
14027 if (sizeflag & SUFFIX_ALWAYS)
52b15da3 14028 {
4b06377f
L
14029 if (rex & REX_W)
14030 *obufp++ = 'q';
52b15da3 14031 else
4b06377f
L
14032 {
14033 if (sizeflag & DFLAG)
14034 *obufp++ = 'l';
14035 else
14036 *obufp++ = 'w';
14037 used_prefixes |= (prefixes & PREFIX_DATA);
14038 }
14039 }
14040 }
14041 else
14042 {
14043 if (l != 1
14044 || len != 2
14045 || last[0] != 'L')
14046 {
14047 SAVE_LAST (*p);
14048 break;
52b15da3 14049 }
4b06377f
L
14050
14051 if (address_mode == mode_64bit
14052 && !(prefixes & PREFIX_ADDR))
14053 {
14054 *obufp++ = 'a';
14055 *obufp++ = 'b';
14056 *obufp++ = 's';
14057 }
14058
14059 goto case_S;
252b5132 14060 }
252b5132 14061 break;
041bd2e0 14062 case 'X':
c0f3af97
L
14063 if (l != 0 || len != 1)
14064 {
14065 SAVE_LAST (*p);
14066 break;
14067 }
14068 if (need_vex && vex.prefix)
14069 {
14070 if (vex.prefix == DATA_PREFIX_OPCODE)
14071 *obufp++ = 'd';
14072 else
14073 *obufp++ = 's';
14074 }
041bd2e0 14075 else
f16cd0d5
L
14076 {
14077 if (prefixes & PREFIX_DATA)
14078 *obufp++ = 'd';
14079 else
14080 *obufp++ = 's';
14081 used_prefixes |= (prefixes & PREFIX_DATA);
14082 }
041bd2e0 14083 break;
76f227a5 14084 case 'Y':
c0f3af97 14085 if (l == 0 && len == 1)
76f227a5 14086 {
c0f3af97
L
14087 if (intel_syntax || !(sizeflag & SUFFIX_ALWAYS))
14088 break;
14089 if (rex & REX_W)
14090 {
14091 USED_REX (REX_W);
14092 *obufp++ = 'q';
14093 }
14094 break;
14095 }
14096 else
14097 {
14098 if (l != 1 || len != 2 || last[0] != 'X')
14099 {
14100 SAVE_LAST (*p);
14101 break;
14102 }
14103 if (!need_vex)
14104 abort ();
14105 if (intel_syntax
14106 || (modrm.mod == 3 && !(sizeflag & SUFFIX_ALWAYS)))
14107 break;
14108 switch (vex.length)
14109 {
14110 case 128:
14111 *obufp++ = 'x';
14112 break;
14113 case 256:
14114 *obufp++ = 'y';
14115 break;
14116 default:
14117 abort ();
14118 }
76f227a5
JH
14119 }
14120 break;
252b5132 14121 case 'W':
0bfee649 14122 if (l == 0 && len == 1)
a35ca55a 14123 {
0bfee649
L
14124 /* operand size flag for cwtl, cbtw */
14125 USED_REX (REX_W);
14126 if (rex & REX_W)
14127 {
14128 if (intel_syntax)
14129 *obufp++ = 'd';
14130 else
14131 *obufp++ = 'l';
14132 }
14133 else if (sizeflag & DFLAG)
14134 *obufp++ = 'w';
a35ca55a 14135 else
0bfee649
L
14136 *obufp++ = 'b';
14137 if (!(rex & REX_W))
14138 used_prefixes |= (prefixes & PREFIX_DATA);
a35ca55a 14139 }
252b5132 14140 else
0bfee649 14141 {
6c30d220
L
14142 if (l != 1
14143 || len != 2
14144 || (last[0] != 'X'
14145 && last[0] != 'L'))
0bfee649
L
14146 {
14147 SAVE_LAST (*p);
14148 break;
14149 }
14150 if (!need_vex)
14151 abort ();
6c30d220
L
14152 if (last[0] == 'X')
14153 *obufp++ = vex.w ? 'd': 's';
14154 else
14155 *obufp++ = vex.w ? 'q': 'd';
0bfee649 14156 }
252b5132
RH
14157 break;
14158 }
9306ca4a 14159 alt = 0;
252b5132
RH
14160 }
14161 *obufp = 0;
ea397f5b 14162 mnemonicendp = obufp;
6439fc28 14163 return 0;
252b5132
RH
14164}
14165
14166static void
26ca5450 14167oappend (const char *s)
252b5132 14168{
ea397f5b 14169 obufp = stpcpy (obufp, s);
252b5132
RH
14170}
14171
14172static void
26ca5450 14173append_seg (void)
252b5132 14174{
285ca992
L
14175 /* Only print the active segment register. */
14176 if (!active_seg_prefix)
14177 return;
14178
14179 used_prefixes |= active_seg_prefix;
14180 switch (active_seg_prefix)
7d421014 14181 {
285ca992 14182 case PREFIX_CS:
9ce09ba2 14183 oappend_maybe_intel ("%cs:");
285ca992
L
14184 break;
14185 case PREFIX_DS:
9ce09ba2 14186 oappend_maybe_intel ("%ds:");
285ca992
L
14187 break;
14188 case PREFIX_SS:
9ce09ba2 14189 oappend_maybe_intel ("%ss:");
285ca992
L
14190 break;
14191 case PREFIX_ES:
9ce09ba2 14192 oappend_maybe_intel ("%es:");
285ca992
L
14193 break;
14194 case PREFIX_FS:
9ce09ba2 14195 oappend_maybe_intel ("%fs:");
285ca992
L
14196 break;
14197 case PREFIX_GS:
9ce09ba2 14198 oappend_maybe_intel ("%gs:");
285ca992
L
14199 break;
14200 default:
14201 break;
7d421014 14202 }
252b5132
RH
14203}
14204
14205static void
26ca5450 14206OP_indirE (int bytemode, int sizeflag)
252b5132
RH
14207{
14208 if (!intel_syntax)
14209 oappend ("*");
14210 OP_E (bytemode, sizeflag);
14211}
14212
52b15da3 14213static void
26ca5450 14214print_operand_value (char *buf, int hex, bfd_vma disp)
52b15da3 14215{
cb712a9e 14216 if (address_mode == mode_64bit)
52b15da3
JH
14217 {
14218 if (hex)
14219 {
14220 char tmp[30];
14221 int i;
14222 buf[0] = '0';
14223 buf[1] = 'x';
14224 sprintf_vma (tmp, disp);
6608db57 14225 for (i = 0; tmp[i] == '0' && tmp[i + 1]; i++);
52b15da3
JH
14226 strcpy (buf + 2, tmp + i);
14227 }
14228 else
14229 {
14230 bfd_signed_vma v = disp;
14231 char tmp[30];
14232 int i;
14233 if (v < 0)
14234 {
14235 *(buf++) = '-';
14236 v = -disp;
6608db57 14237 /* Check for possible overflow on 0x8000000000000000. */
52b15da3
JH
14238 if (v < 0)
14239 {
14240 strcpy (buf, "9223372036854775808");
14241 return;
14242 }
14243 }
14244 if (!v)
14245 {
14246 strcpy (buf, "0");
14247 return;
14248 }
14249
14250 i = 0;
14251 tmp[29] = 0;
14252 while (v)
14253 {
6608db57 14254 tmp[28 - i] = (v % 10) + '0';
52b15da3
JH
14255 v /= 10;
14256 i++;
14257 }
14258 strcpy (buf, tmp + 29 - i);
14259 }
14260 }
14261 else
14262 {
14263 if (hex)
14264 sprintf (buf, "0x%x", (unsigned int) disp);
14265 else
14266 sprintf (buf, "%d", (int) disp);
14267 }
14268}
14269
5d669648
L
14270/* Put DISP in BUF as signed hex number. */
14271
14272static void
14273print_displacement (char *buf, bfd_vma disp)
14274{
14275 bfd_signed_vma val = disp;
14276 char tmp[30];
14277 int i, j = 0;
14278
14279 if (val < 0)
14280 {
14281 buf[j++] = '-';
14282 val = -disp;
14283
14284 /* Check for possible overflow. */
14285 if (val < 0)
14286 {
14287 switch (address_mode)
14288 {
14289 case mode_64bit:
14290 strcpy (buf + j, "0x8000000000000000");
14291 break;
14292 case mode_32bit:
14293 strcpy (buf + j, "0x80000000");
14294 break;
14295 case mode_16bit:
14296 strcpy (buf + j, "0x8000");
14297 break;
14298 }
14299 return;
14300 }
14301 }
14302
14303 buf[j++] = '0';
14304 buf[j++] = 'x';
14305
0af1713e 14306 sprintf_vma (tmp, (bfd_vma) val);
5d669648
L
14307 for (i = 0; tmp[i] == '0'; i++)
14308 continue;
14309 if (tmp[i] == '\0')
14310 i--;
14311 strcpy (buf + j, tmp + i);
14312}
14313
3f31e633
JB
14314static void
14315intel_operand_size (int bytemode, int sizeflag)
14316{
43234a1e
L
14317 if (vex.evex
14318 && vex.b
14319 && (bytemode == x_mode
14320 || bytemode == evex_half_bcst_xmmq_mode))
14321 {
14322 if (vex.w)
14323 oappend ("QWORD PTR ");
14324 else
14325 oappend ("DWORD PTR ");
14326 return;
14327 }
3f31e633
JB
14328 switch (bytemode)
14329 {
14330 case b_mode:
b6169b20 14331 case b_swap_mode:
42903f7f 14332 case dqb_mode:
1ba585e8 14333 case db_mode:
3f31e633
JB
14334 oappend ("BYTE PTR ");
14335 break;
14336 case w_mode:
1ba585e8 14337 case dw_mode:
3f31e633 14338 case dqw_mode:
1ba585e8 14339 case dqw_swap_mode:
3f31e633
JB
14340 oappend ("WORD PTR ");
14341 break;
1a114b12 14342 case stack_v_mode:
7bb15c6f 14343 if (address_mode == mode_64bit && ((sizeflag & DFLAG) || (rex & REX_W)))
3f31e633
JB
14344 {
14345 oappend ("QWORD PTR ");
3f31e633
JB
14346 break;
14347 }
14348 /* FALLTHRU */
14349 case v_mode:
b6169b20 14350 case v_swap_mode:
3f31e633 14351 case dq_mode:
161a04f6
L
14352 USED_REX (REX_W);
14353 if (rex & REX_W)
3f31e633 14354 oappend ("QWORD PTR ");
3f31e633 14355 else
f16cd0d5
L
14356 {
14357 if ((sizeflag & DFLAG) || bytemode == dq_mode)
14358 oappend ("DWORD PTR ");
14359 else
14360 oappend ("WORD PTR ");
14361 used_prefixes |= (prefixes & PREFIX_DATA);
14362 }
3f31e633 14363 break;
52fd6d94 14364 case z_mode:
161a04f6 14365 if ((rex & REX_W) || (sizeflag & DFLAG))
52fd6d94
JB
14366 *obufp++ = 'D';
14367 oappend ("WORD PTR ");
161a04f6 14368 if (!(rex & REX_W))
52fd6d94
JB
14369 used_prefixes |= (prefixes & PREFIX_DATA);
14370 break;
34b772a6
JB
14371 case a_mode:
14372 if (sizeflag & DFLAG)
14373 oappend ("QWORD PTR ");
14374 else
14375 oappend ("DWORD PTR ");
14376 used_prefixes |= (prefixes & PREFIX_DATA);
14377 break;
3f31e633 14378 case d_mode:
539f890d
L
14379 case d_scalar_mode:
14380 case d_scalar_swap_mode:
fa99fab2 14381 case d_swap_mode:
42903f7f 14382 case dqd_mode:
3f31e633
JB
14383 oappend ("DWORD PTR ");
14384 break;
14385 case q_mode:
539f890d
L
14386 case q_scalar_mode:
14387 case q_scalar_swap_mode:
b6169b20 14388 case q_swap_mode:
3f31e633
JB
14389 oappend ("QWORD PTR ");
14390 break;
14391 case m_mode:
cb712a9e 14392 if (address_mode == mode_64bit)
3f31e633
JB
14393 oappend ("QWORD PTR ");
14394 else
14395 oappend ("DWORD PTR ");
14396 break;
14397 case f_mode:
14398 if (sizeflag & DFLAG)
14399 oappend ("FWORD PTR ");
14400 else
14401 oappend ("DWORD PTR ");
14402 used_prefixes |= (prefixes & PREFIX_DATA);
14403 break;
14404 case t_mode:
14405 oappend ("TBYTE PTR ");
14406 break;
14407 case x_mode:
b6169b20 14408 case x_swap_mode:
43234a1e
L
14409 case evex_x_gscat_mode:
14410 case evex_x_nobcst_mode:
c0f3af97
L
14411 if (need_vex)
14412 {
14413 switch (vex.length)
14414 {
14415 case 128:
14416 oappend ("XMMWORD PTR ");
14417 break;
14418 case 256:
14419 oappend ("YMMWORD PTR ");
14420 break;
43234a1e
L
14421 case 512:
14422 oappend ("ZMMWORD PTR ");
14423 break;
c0f3af97
L
14424 default:
14425 abort ();
14426 }
14427 }
14428 else
14429 oappend ("XMMWORD PTR ");
14430 break;
14431 case xmm_mode:
3f31e633
JB
14432 oappend ("XMMWORD PTR ");
14433 break;
43234a1e
L
14434 case ymm_mode:
14435 oappend ("YMMWORD PTR ");
14436 break;
c0f3af97 14437 case xmmq_mode:
43234a1e 14438 case evex_half_bcst_xmmq_mode:
c0f3af97
L
14439 if (!need_vex)
14440 abort ();
14441
14442 switch (vex.length)
14443 {
14444 case 128:
14445 oappend ("QWORD PTR ");
14446 break;
14447 case 256:
14448 oappend ("XMMWORD PTR ");
14449 break;
43234a1e
L
14450 case 512:
14451 oappend ("YMMWORD PTR ");
14452 break;
c0f3af97
L
14453 default:
14454 abort ();
14455 }
14456 break;
6c30d220
L
14457 case xmm_mb_mode:
14458 if (!need_vex)
14459 abort ();
14460
14461 switch (vex.length)
14462 {
14463 case 128:
14464 case 256:
43234a1e 14465 case 512:
6c30d220
L
14466 oappend ("BYTE PTR ");
14467 break;
14468 default:
14469 abort ();
14470 }
14471 break;
14472 case xmm_mw_mode:
14473 if (!need_vex)
14474 abort ();
14475
14476 switch (vex.length)
14477 {
14478 case 128:
14479 case 256:
43234a1e 14480 case 512:
6c30d220
L
14481 oappend ("WORD PTR ");
14482 break;
14483 default:
14484 abort ();
14485 }
14486 break;
14487 case xmm_md_mode:
14488 if (!need_vex)
14489 abort ();
14490
14491 switch (vex.length)
14492 {
14493 case 128:
14494 case 256:
43234a1e 14495 case 512:
6c30d220
L
14496 oappend ("DWORD PTR ");
14497 break;
14498 default:
14499 abort ();
14500 }
14501 break;
14502 case xmm_mq_mode:
14503 if (!need_vex)
14504 abort ();
14505
14506 switch (vex.length)
14507 {
14508 case 128:
14509 case 256:
43234a1e 14510 case 512:
6c30d220
L
14511 oappend ("QWORD PTR ");
14512 break;
14513 default:
14514 abort ();
14515 }
14516 break;
14517 case xmmdw_mode:
14518 if (!need_vex)
14519 abort ();
14520
14521 switch (vex.length)
14522 {
14523 case 128:
14524 oappend ("WORD PTR ");
14525 break;
14526 case 256:
14527 oappend ("DWORD PTR ");
14528 break;
43234a1e
L
14529 case 512:
14530 oappend ("QWORD PTR ");
14531 break;
6c30d220
L
14532 default:
14533 abort ();
14534 }
14535 break;
14536 case xmmqd_mode:
14537 if (!need_vex)
14538 abort ();
14539
14540 switch (vex.length)
14541 {
14542 case 128:
14543 oappend ("DWORD PTR ");
14544 break;
14545 case 256:
14546 oappend ("QWORD PTR ");
14547 break;
43234a1e
L
14548 case 512:
14549 oappend ("XMMWORD PTR ");
14550 break;
6c30d220
L
14551 default:
14552 abort ();
14553 }
14554 break;
c0f3af97
L
14555 case ymmq_mode:
14556 if (!need_vex)
14557 abort ();
14558
14559 switch (vex.length)
14560 {
14561 case 128:
14562 oappend ("QWORD PTR ");
14563 break;
14564 case 256:
14565 oappend ("YMMWORD PTR ");
14566 break;
43234a1e
L
14567 case 512:
14568 oappend ("ZMMWORD PTR ");
14569 break;
c0f3af97
L
14570 default:
14571 abort ();
14572 }
14573 break;
6c30d220
L
14574 case ymmxmm_mode:
14575 if (!need_vex)
14576 abort ();
14577
14578 switch (vex.length)
14579 {
14580 case 128:
14581 case 256:
14582 oappend ("XMMWORD PTR ");
14583 break;
14584 default:
14585 abort ();
14586 }
14587 break;
fb9c77c7
L
14588 case o_mode:
14589 oappend ("OWORD PTR ");
14590 break;
43234a1e 14591 case xmm_mdq_mode:
0bfee649 14592 case vex_w_dq_mode:
1c480963 14593 case vex_scalar_w_dq_mode:
0bfee649
L
14594 if (!need_vex)
14595 abort ();
14596
14597 if (vex.w)
14598 oappend ("QWORD PTR ");
14599 else
14600 oappend ("DWORD PTR ");
14601 break;
43234a1e
L
14602 case vex_vsib_d_w_dq_mode:
14603 case vex_vsib_q_w_dq_mode:
14604 if (!need_vex)
14605 abort ();
14606
14607 if (!vex.evex)
14608 {
14609 if (vex.w)
14610 oappend ("QWORD PTR ");
14611 else
14612 oappend ("DWORD PTR ");
14613 }
14614 else
14615 {
b28d1bda
IT
14616 switch (vex.length)
14617 {
14618 case 128:
14619 oappend ("XMMWORD PTR ");
14620 break;
14621 case 256:
14622 oappend ("YMMWORD PTR ");
14623 break;
14624 case 512:
14625 oappend ("ZMMWORD PTR ");
14626 break;
14627 default:
14628 abort ();
14629 }
43234a1e
L
14630 }
14631 break;
5fc35d96
IT
14632 case vex_vsib_q_w_d_mode:
14633 case vex_vsib_d_w_d_mode:
b28d1bda 14634 if (!need_vex || !vex.evex)
5fc35d96
IT
14635 abort ();
14636
b28d1bda
IT
14637 switch (vex.length)
14638 {
14639 case 128:
14640 oappend ("QWORD PTR ");
14641 break;
14642 case 256:
14643 oappend ("XMMWORD PTR ");
14644 break;
14645 case 512:
14646 oappend ("YMMWORD PTR ");
14647 break;
14648 default:
14649 abort ();
14650 }
5fc35d96
IT
14651
14652 break;
1ba585e8
IT
14653 case mask_bd_mode:
14654 if (!need_vex || vex.length != 128)
14655 abort ();
14656 if (vex.w)
14657 oappend ("DWORD PTR ");
14658 else
14659 oappend ("BYTE PTR ");
14660 break;
43234a1e
L
14661 case mask_mode:
14662 if (!need_vex)
14663 abort ();
1ba585e8
IT
14664 if (vex.w)
14665 oappend ("QWORD PTR ");
14666 else
14667 oappend ("WORD PTR ");
43234a1e 14668 break;
6c75cc62 14669 case v_bnd_mode:
3f31e633
JB
14670 default:
14671 break;
14672 }
14673}
14674
252b5132 14675static void
c0f3af97 14676OP_E_register (int bytemode, int sizeflag)
252b5132 14677{
c0f3af97
L
14678 int reg = modrm.rm;
14679 const char **names;
252b5132 14680
c0f3af97
L
14681 USED_REX (REX_B);
14682 if ((rex & REX_B))
14683 reg += 8;
252b5132 14684
b6169b20 14685 if ((sizeflag & SUFFIX_ALWAYS)
1ba585e8
IT
14686 && (bytemode == b_swap_mode
14687 || bytemode == v_swap_mode
14688 || bytemode == dqw_swap_mode))
b6169b20
L
14689 swap_operand ();
14690
c0f3af97 14691 switch (bytemode)
252b5132 14692 {
c0f3af97 14693 case b_mode:
b6169b20 14694 case b_swap_mode:
c0f3af97
L
14695 USED_REX (0);
14696 if (rex)
14697 names = names8rex;
14698 else
14699 names = names8;
14700 break;
14701 case w_mode:
14702 names = names16;
14703 break;
14704 case d_mode:
1ba585e8
IT
14705 case dw_mode:
14706 case db_mode:
c0f3af97
L
14707 names = names32;
14708 break;
14709 case q_mode:
14710 names = names64;
14711 break;
14712 case m_mode:
6c75cc62 14713 case v_bnd_mode:
c0f3af97
L
14714 names = address_mode == mode_64bit ? names64 : names32;
14715 break;
7e8b059b
L
14716 case bnd_mode:
14717 names = names_bnd;
14718 break;
c0f3af97 14719 case stack_v_mode:
7bb15c6f 14720 if (address_mode == mode_64bit && ((sizeflag & DFLAG) || (rex & REX_W)))
252b5132 14721 {
c0f3af97 14722 names = names64;
252b5132 14723 break;
252b5132 14724 }
c0f3af97
L
14725 bytemode = v_mode;
14726 /* FALLTHRU */
14727 case v_mode:
b6169b20 14728 case v_swap_mode:
c0f3af97
L
14729 case dq_mode:
14730 case dqb_mode:
14731 case dqd_mode:
14732 case dqw_mode:
1ba585e8 14733 case dqw_swap_mode:
c0f3af97
L
14734 USED_REX (REX_W);
14735 if (rex & REX_W)
14736 names = names64;
c0f3af97 14737 else
f16cd0d5 14738 {
7bb15c6f 14739 if ((sizeflag & DFLAG)
f16cd0d5
L
14740 || (bytemode != v_mode
14741 && bytemode != v_swap_mode))
14742 names = names32;
14743 else
14744 names = names16;
14745 used_prefixes |= (prefixes & PREFIX_DATA);
14746 }
c0f3af97 14747 break;
1ba585e8 14748 case mask_bd_mode:
43234a1e
L
14749 case mask_mode:
14750 names = names_mask;
14751 break;
c0f3af97
L
14752 case 0:
14753 return;
14754 default:
14755 oappend (INTERNAL_DISASSEMBLER_ERROR);
252b5132
RH
14756 return;
14757 }
c0f3af97
L
14758 oappend (names[reg]);
14759}
14760
14761static void
c1e679ec 14762OP_E_memory (int bytemode, int sizeflag)
c0f3af97
L
14763{
14764 bfd_vma disp = 0;
14765 int add = (rex & REX_B) ? 8 : 0;
14766 int riprel = 0;
43234a1e
L
14767 int shift;
14768
14769 if (vex.evex)
14770 {
14771 /* In EVEX, if operand doesn't allow broadcast, vex.b should be 0. */
14772 if (vex.b
14773 && bytemode != x_mode
90a915bf 14774 && bytemode != xmmq_mode
43234a1e
L
14775 && bytemode != evex_half_bcst_xmmq_mode)
14776 {
14777 BadOp ();
14778 return;
14779 }
14780 switch (bytemode)
14781 {
1ba585e8
IT
14782 case dqw_mode:
14783 case dw_mode:
14784 case dqw_swap_mode:
14785 shift = 1;
14786 break;
14787 case dqb_mode:
14788 case db_mode:
14789 shift = 0;
14790 break;
43234a1e 14791 case vex_vsib_d_w_dq_mode:
5fc35d96 14792 case vex_vsib_d_w_d_mode:
eaa9d1ad 14793 case vex_vsib_q_w_dq_mode:
5fc35d96 14794 case vex_vsib_q_w_d_mode:
43234a1e
L
14795 case evex_x_gscat_mode:
14796 case xmm_mdq_mode:
14797 shift = vex.w ? 3 : 2;
14798 break;
43234a1e
L
14799 case x_mode:
14800 case evex_half_bcst_xmmq_mode:
90a915bf 14801 case xmmq_mode:
43234a1e
L
14802 if (vex.b)
14803 {
14804 shift = vex.w ? 3 : 2;
14805 break;
14806 }
14807 /* Fall through if vex.b == 0. */
14808 case xmmqd_mode:
14809 case xmmdw_mode:
43234a1e
L
14810 case ymmq_mode:
14811 case evex_x_nobcst_mode:
14812 case x_swap_mode:
14813 switch (vex.length)
14814 {
14815 case 128:
14816 shift = 4;
14817 break;
14818 case 256:
14819 shift = 5;
14820 break;
14821 case 512:
14822 shift = 6;
14823 break;
14824 default:
14825 abort ();
14826 }
14827 break;
14828 case ymm_mode:
14829 shift = 5;
14830 break;
14831 case xmm_mode:
14832 shift = 4;
14833 break;
14834 case xmm_mq_mode:
14835 case q_mode:
14836 case q_scalar_mode:
14837 case q_swap_mode:
14838 case q_scalar_swap_mode:
14839 shift = 3;
14840 break;
14841 case dqd_mode:
14842 case xmm_md_mode:
14843 case d_mode:
14844 case d_scalar_mode:
14845 case d_swap_mode:
14846 case d_scalar_swap_mode:
14847 shift = 2;
14848 break;
14849 case xmm_mw_mode:
14850 shift = 1;
14851 break;
14852 case xmm_mb_mode:
14853 shift = 0;
14854 break;
14855 default:
14856 abort ();
14857 }
14858 /* Make necessary corrections to shift for modes that need it.
14859 For these modes we currently have shift 4, 5 or 6 depending on
14860 vex.length (it corresponds to xmmword, ymmword or zmmword
14861 operand). We might want to make it 3, 4 or 5 (e.g. for
14862 xmmq_mode). In case of broadcast enabled the corrections
14863 aren't needed, as element size is always 32 or 64 bits. */
90a915bf
IT
14864 if (!vex.b
14865 && (bytemode == xmmq_mode
14866 || bytemode == evex_half_bcst_xmmq_mode))
43234a1e
L
14867 shift -= 1;
14868 else if (bytemode == xmmqd_mode)
14869 shift -= 2;
14870 else if (bytemode == xmmdw_mode)
14871 shift -= 3;
b28d1bda
IT
14872 else if (bytemode == ymmq_mode && vex.length == 128)
14873 shift -= 1;
43234a1e
L
14874 }
14875 else
14876 shift = 0;
252b5132 14877
c0f3af97 14878 USED_REX (REX_B);
3f31e633
JB
14879 if (intel_syntax)
14880 intel_operand_size (bytemode, sizeflag);
252b5132
RH
14881 append_seg ();
14882
5d669648 14883 if ((sizeflag & AFLAG) || address_mode == mode_64bit)
252b5132 14884 {
5d669648
L
14885 /* 32/64 bit address mode */
14886 int havedisp;
252b5132
RH
14887 int havesib;
14888 int havebase;
0f7da397 14889 int haveindex;
20afcfb7 14890 int needindex;
82c18208 14891 int base, rbase;
91d6fa6a 14892 int vindex = 0;
252b5132 14893 int scale = 0;
7e8b059b
L
14894 int addr32flag = !((sizeflag & AFLAG)
14895 || bytemode == v_bnd_mode
14896 || bytemode == bnd_mode);
6c30d220
L
14897 const char **indexes64 = names64;
14898 const char **indexes32 = names32;
252b5132
RH
14899
14900 havesib = 0;
14901 havebase = 1;
0f7da397 14902 haveindex = 0;
7967e09e 14903 base = modrm.rm;
252b5132
RH
14904
14905 if (base == 4)
14906 {
14907 havesib = 1;
dfc8cf43 14908 vindex = sib.index;
161a04f6
L
14909 USED_REX (REX_X);
14910 if (rex & REX_X)
91d6fa6a 14911 vindex += 8;
6c30d220
L
14912 switch (bytemode)
14913 {
14914 case vex_vsib_d_w_dq_mode:
5fc35d96 14915 case vex_vsib_d_w_d_mode:
6c30d220 14916 case vex_vsib_q_w_dq_mode:
5fc35d96 14917 case vex_vsib_q_w_d_mode:
6c30d220
L
14918 if (!need_vex)
14919 abort ();
43234a1e
L
14920 if (vex.evex)
14921 {
14922 if (!vex.v)
14923 vindex += 16;
14924 }
6c30d220
L
14925
14926 haveindex = 1;
14927 switch (vex.length)
14928 {
14929 case 128:
7bb15c6f 14930 indexes64 = indexes32 = names_xmm;
6c30d220
L
14931 break;
14932 case 256:
5fc35d96
IT
14933 if (!vex.w
14934 || bytemode == vex_vsib_q_w_dq_mode
14935 || bytemode == vex_vsib_q_w_d_mode)
7bb15c6f 14936 indexes64 = indexes32 = names_ymm;
6c30d220 14937 else
7bb15c6f 14938 indexes64 = indexes32 = names_xmm;
6c30d220 14939 break;
43234a1e 14940 case 512:
5fc35d96
IT
14941 if (!vex.w
14942 || bytemode == vex_vsib_q_w_dq_mode
14943 || bytemode == vex_vsib_q_w_d_mode)
43234a1e
L
14944 indexes64 = indexes32 = names_zmm;
14945 else
14946 indexes64 = indexes32 = names_ymm;
14947 break;
6c30d220
L
14948 default:
14949 abort ();
14950 }
14951 break;
14952 default:
14953 haveindex = vindex != 4;
14954 break;
14955 }
14956 scale = sib.scale;
14957 base = sib.base;
252b5132
RH
14958 codep++;
14959 }
82c18208 14960 rbase = base + add;
252b5132 14961
7967e09e 14962 switch (modrm.mod)
252b5132
RH
14963 {
14964 case 0:
82c18208 14965 if (base == 5)
252b5132
RH
14966 {
14967 havebase = 0;
cb712a9e 14968 if (address_mode == mode_64bit && !havesib)
52b15da3
JH
14969 riprel = 1;
14970 disp = get32s ();
252b5132
RH
14971 }
14972 break;
14973 case 1:
14974 FETCH_DATA (the_info, codep + 1);
14975 disp = *codep++;
14976 if ((disp & 0x80) != 0)
14977 disp -= 0x100;
43234a1e
L
14978 if (vex.evex && shift > 0)
14979 disp <<= shift;
252b5132
RH
14980 break;
14981 case 2:
52b15da3 14982 disp = get32s ();
252b5132
RH
14983 break;
14984 }
14985
20afcfb7
L
14986 /* In 32bit mode, we need index register to tell [offset] from
14987 [eiz*1 + offset]. */
14988 needindex = (havesib
14989 && !havebase
14990 && !haveindex
14991 && address_mode == mode_32bit);
14992 havedisp = (havebase
14993 || needindex
14994 || (havesib && (haveindex || scale != 0)));
5d669648 14995
252b5132 14996 if (!intel_syntax)
82c18208 14997 if (modrm.mod != 0 || base == 5)
db6eb5be 14998 {
5d669648
L
14999 if (havedisp || riprel)
15000 print_displacement (scratchbuf, disp);
15001 else
15002 print_operand_value (scratchbuf, 1, disp);
db6eb5be 15003 oappend (scratchbuf);
52b15da3
JH
15004 if (riprel)
15005 {
15006 set_op (disp, 1);
87767711 15007 oappend (sizeflag & AFLAG ? "(%rip)" : "(%eip)");
52b15da3 15008 }
db6eb5be 15009 }
2da11e11 15010
7e8b059b
L
15011 if ((havebase || haveindex || riprel)
15012 && (bytemode != v_bnd_mode)
15013 && (bytemode != bnd_mode))
87767711
JB
15014 used_prefixes |= PREFIX_ADDR;
15015
5d669648 15016 if (havedisp || (intel_syntax && riprel))
252b5132 15017 {
252b5132 15018 *obufp++ = open_char;
52b15da3 15019 if (intel_syntax && riprel)
185b1163
L
15020 {
15021 set_op (disp, 1);
87767711 15022 oappend (sizeflag & AFLAG ? "rip" : "eip");
185b1163 15023 }
db6eb5be 15024 *obufp = '\0';
252b5132 15025 if (havebase)
7e8b059b 15026 oappend (address_mode == mode_64bit && !addr32flag
82c18208 15027 ? names64[rbase] : names32[rbase]);
252b5132
RH
15028 if (havesib)
15029 {
db51cc60
L
15030 /* ESP/RSP won't allow index. If base isn't ESP/RSP,
15031 print index to tell base + index from base. */
15032 if (scale != 0
20afcfb7 15033 || needindex
db51cc60
L
15034 || haveindex
15035 || (havebase && base != ESP_REG_NUM))
252b5132 15036 {
9306ca4a 15037 if (!intel_syntax || havebase)
db6eb5be 15038 {
9306ca4a
JB
15039 *obufp++ = separator_char;
15040 *obufp = '\0';
db6eb5be 15041 }
db51cc60 15042 if (haveindex)
7e8b059b 15043 oappend (address_mode == mode_64bit && !addr32flag
6c30d220 15044 ? indexes64[vindex] : indexes32[vindex]);
db51cc60 15045 else
7e8b059b 15046 oappend (address_mode == mode_64bit && !addr32flag
db51cc60
L
15047 ? index64 : index32);
15048
db6eb5be
AM
15049 *obufp++ = scale_char;
15050 *obufp = '\0';
15051 sprintf (scratchbuf, "%d", 1 << scale);
15052 oappend (scratchbuf);
15053 }
252b5132 15054 }
185b1163 15055 if (intel_syntax
82c18208 15056 && (disp || modrm.mod != 0 || base == 5))
3d456fa1 15057 {
db51cc60 15058 if (!havedisp || (bfd_signed_vma) disp >= 0)
3d456fa1
JB
15059 {
15060 *obufp++ = '+';
15061 *obufp = '\0';
15062 }
05203043 15063 else if (modrm.mod != 1 && disp != -disp)
3d456fa1
JB
15064 {
15065 *obufp++ = '-';
15066 *obufp = '\0';
15067 disp = - (bfd_signed_vma) disp;
15068 }
15069
db51cc60
L
15070 if (havedisp)
15071 print_displacement (scratchbuf, disp);
15072 else
15073 print_operand_value (scratchbuf, 1, disp);
3d456fa1
JB
15074 oappend (scratchbuf);
15075 }
252b5132
RH
15076
15077 *obufp++ = close_char;
db6eb5be 15078 *obufp = '\0';
252b5132
RH
15079 }
15080 else if (intel_syntax)
db6eb5be 15081 {
82c18208 15082 if (modrm.mod != 0 || base == 5)
db6eb5be 15083 {
285ca992 15084 if (!active_seg_prefix)
252b5132 15085 {
d708bcba 15086 oappend (names_seg[ds_reg - es_reg]);
252b5132
RH
15087 oappend (":");
15088 }
52b15da3 15089 print_operand_value (scratchbuf, 1, disp);
db6eb5be
AM
15090 oappend (scratchbuf);
15091 }
15092 }
252b5132
RH
15093 }
15094 else
f16cd0d5
L
15095 {
15096 /* 16 bit address mode */
15097 used_prefixes |= prefixes & PREFIX_ADDR;
7967e09e 15098 switch (modrm.mod)
252b5132
RH
15099 {
15100 case 0:
7967e09e 15101 if (modrm.rm == 6)
252b5132
RH
15102 {
15103 disp = get16 ();
15104 if ((disp & 0x8000) != 0)
15105 disp -= 0x10000;
15106 }
15107 break;
15108 case 1:
15109 FETCH_DATA (the_info, codep + 1);
15110 disp = *codep++;
15111 if ((disp & 0x80) != 0)
15112 disp -= 0x100;
15113 break;
15114 case 2:
15115 disp = get16 ();
15116 if ((disp & 0x8000) != 0)
15117 disp -= 0x10000;
15118 break;
15119 }
15120
15121 if (!intel_syntax)
7967e09e 15122 if (modrm.mod != 0 || modrm.rm == 6)
db6eb5be 15123 {
5d669648 15124 print_displacement (scratchbuf, disp);
db6eb5be
AM
15125 oappend (scratchbuf);
15126 }
252b5132 15127
7967e09e 15128 if (modrm.mod != 0 || modrm.rm != 6)
252b5132
RH
15129 {
15130 *obufp++ = open_char;
db6eb5be 15131 *obufp = '\0';
7967e09e 15132 oappend (index16[modrm.rm]);
5d669648
L
15133 if (intel_syntax
15134 && (disp || modrm.mod != 0 || modrm.rm == 6))
3d456fa1 15135 {
5d669648 15136 if ((bfd_signed_vma) disp >= 0)
3d456fa1
JB
15137 {
15138 *obufp++ = '+';
15139 *obufp = '\0';
15140 }
7967e09e 15141 else if (modrm.mod != 1)
3d456fa1
JB
15142 {
15143 *obufp++ = '-';
15144 *obufp = '\0';
15145 disp = - (bfd_signed_vma) disp;
15146 }
15147
5d669648 15148 print_displacement (scratchbuf, disp);
3d456fa1
JB
15149 oappend (scratchbuf);
15150 }
15151
db6eb5be
AM
15152 *obufp++ = close_char;
15153 *obufp = '\0';
252b5132 15154 }
3d456fa1
JB
15155 else if (intel_syntax)
15156 {
285ca992 15157 if (!active_seg_prefix)
3d456fa1
JB
15158 {
15159 oappend (names_seg[ds_reg - es_reg]);
15160 oappend (":");
15161 }
15162 print_operand_value (scratchbuf, 1, disp & 0xffff);
15163 oappend (scratchbuf);
15164 }
252b5132 15165 }
43234a1e
L
15166 if (vex.evex && vex.b
15167 && (bytemode == x_mode
90a915bf 15168 || bytemode == xmmq_mode
43234a1e
L
15169 || bytemode == evex_half_bcst_xmmq_mode))
15170 {
90a915bf
IT
15171 if (vex.w
15172 || bytemode == xmmq_mode
15173 || bytemode == evex_half_bcst_xmmq_mode)
b28d1bda
IT
15174 {
15175 switch (vex.length)
15176 {
15177 case 128:
15178 oappend ("{1to2}");
15179 break;
15180 case 256:
15181 oappend ("{1to4}");
15182 break;
15183 case 512:
15184 oappend ("{1to8}");
15185 break;
15186 default:
15187 abort ();
15188 }
15189 }
43234a1e 15190 else
b28d1bda
IT
15191 {
15192 switch (vex.length)
15193 {
15194 case 128:
15195 oappend ("{1to4}");
15196 break;
15197 case 256:
15198 oappend ("{1to8}");
15199 break;
15200 case 512:
15201 oappend ("{1to16}");
15202 break;
15203 default:
15204 abort ();
15205 }
15206 }
43234a1e 15207 }
252b5132
RH
15208}
15209
c0f3af97 15210static void
8b3f93e7 15211OP_E (int bytemode, int sizeflag)
c0f3af97
L
15212{
15213 /* Skip mod/rm byte. */
15214 MODRM_CHECK;
15215 codep++;
15216
15217 if (modrm.mod == 3)
15218 OP_E_register (bytemode, sizeflag);
15219 else
c1e679ec 15220 OP_E_memory (bytemode, sizeflag);
c0f3af97
L
15221}
15222
252b5132 15223static void
26ca5450 15224OP_G (int bytemode, int sizeflag)
252b5132 15225{
52b15da3 15226 int add = 0;
161a04f6
L
15227 USED_REX (REX_R);
15228 if (rex & REX_R)
52b15da3 15229 add += 8;
252b5132
RH
15230 switch (bytemode)
15231 {
15232 case b_mode:
52b15da3
JH
15233 USED_REX (0);
15234 if (rex)
7967e09e 15235 oappend (names8rex[modrm.reg + add]);
52b15da3 15236 else
7967e09e 15237 oappend (names8[modrm.reg + add]);
252b5132
RH
15238 break;
15239 case w_mode:
7967e09e 15240 oappend (names16[modrm.reg + add]);
252b5132
RH
15241 break;
15242 case d_mode:
1ba585e8
IT
15243 case db_mode:
15244 case dw_mode:
7967e09e 15245 oappend (names32[modrm.reg + add]);
52b15da3
JH
15246 break;
15247 case q_mode:
7967e09e 15248 oappend (names64[modrm.reg + add]);
252b5132 15249 break;
7e8b059b
L
15250 case bnd_mode:
15251 oappend (names_bnd[modrm.reg]);
15252 break;
252b5132 15253 case v_mode:
9306ca4a 15254 case dq_mode:
42903f7f
L
15255 case dqb_mode:
15256 case dqd_mode:
9306ca4a 15257 case dqw_mode:
1ba585e8 15258 case dqw_swap_mode:
161a04f6
L
15259 USED_REX (REX_W);
15260 if (rex & REX_W)
7967e09e 15261 oappend (names64[modrm.reg + add]);
252b5132 15262 else
f16cd0d5
L
15263 {
15264 if ((sizeflag & DFLAG) || bytemode != v_mode)
15265 oappend (names32[modrm.reg + add]);
15266 else
15267 oappend (names16[modrm.reg + add]);
15268 used_prefixes |= (prefixes & PREFIX_DATA);
15269 }
252b5132 15270 break;
90700ea2 15271 case m_mode:
cb712a9e 15272 if (address_mode == mode_64bit)
7967e09e 15273 oappend (names64[modrm.reg + add]);
90700ea2 15274 else
7967e09e 15275 oappend (names32[modrm.reg + add]);
90700ea2 15276 break;
1ba585e8 15277 case mask_bd_mode:
43234a1e
L
15278 case mask_mode:
15279 oappend (names_mask[modrm.reg + add]);
15280 break;
252b5132
RH
15281 default:
15282 oappend (INTERNAL_DISASSEMBLER_ERROR);
15283 break;
15284 }
15285}
15286
52b15da3 15287static bfd_vma
26ca5450 15288get64 (void)
52b15da3 15289{
5dd0794d 15290 bfd_vma x;
52b15da3 15291#ifdef BFD64
5dd0794d
AM
15292 unsigned int a;
15293 unsigned int b;
15294
52b15da3
JH
15295 FETCH_DATA (the_info, codep + 8);
15296 a = *codep++ & 0xff;
15297 a |= (*codep++ & 0xff) << 8;
15298 a |= (*codep++ & 0xff) << 16;
15299 a |= (*codep++ & 0xff) << 24;
5dd0794d 15300 b = *codep++ & 0xff;
52b15da3
JH
15301 b |= (*codep++ & 0xff) << 8;
15302 b |= (*codep++ & 0xff) << 16;
15303 b |= (*codep++ & 0xff) << 24;
15304 x = a + ((bfd_vma) b << 32);
15305#else
6608db57 15306 abort ();
5dd0794d 15307 x = 0;
52b15da3
JH
15308#endif
15309 return x;
15310}
15311
15312static bfd_signed_vma
26ca5450 15313get32 (void)
252b5132 15314{
52b15da3 15315 bfd_signed_vma x = 0;
252b5132
RH
15316
15317 FETCH_DATA (the_info, codep + 4);
52b15da3
JH
15318 x = *codep++ & (bfd_signed_vma) 0xff;
15319 x |= (*codep++ & (bfd_signed_vma) 0xff) << 8;
15320 x |= (*codep++ & (bfd_signed_vma) 0xff) << 16;
15321 x |= (*codep++ & (bfd_signed_vma) 0xff) << 24;
15322 return x;
15323}
15324
15325static bfd_signed_vma
26ca5450 15326get32s (void)
52b15da3
JH
15327{
15328 bfd_signed_vma x = 0;
15329
15330 FETCH_DATA (the_info, codep + 4);
15331 x = *codep++ & (bfd_signed_vma) 0xff;
15332 x |= (*codep++ & (bfd_signed_vma) 0xff) << 8;
15333 x |= (*codep++ & (bfd_signed_vma) 0xff) << 16;
15334 x |= (*codep++ & (bfd_signed_vma) 0xff) << 24;
15335
15336 x = (x ^ ((bfd_signed_vma) 1 << 31)) - ((bfd_signed_vma) 1 << 31);
15337
252b5132
RH
15338 return x;
15339}
15340
15341static int
26ca5450 15342get16 (void)
252b5132
RH
15343{
15344 int x = 0;
15345
15346 FETCH_DATA (the_info, codep + 2);
15347 x = *codep++ & 0xff;
15348 x |= (*codep++ & 0xff) << 8;
15349 return x;
15350}
15351
15352static void
26ca5450 15353set_op (bfd_vma op, int riprel)
252b5132
RH
15354{
15355 op_index[op_ad] = op_ad;
cb712a9e 15356 if (address_mode == mode_64bit)
7081ff04
AJ
15357 {
15358 op_address[op_ad] = op;
15359 op_riprel[op_ad] = riprel;
15360 }
15361 else
15362 {
15363 /* Mask to get a 32-bit address. */
15364 op_address[op_ad] = op & 0xffffffff;
15365 op_riprel[op_ad] = riprel & 0xffffffff;
15366 }
252b5132
RH
15367}
15368
15369static void
26ca5450 15370OP_REG (int code, int sizeflag)
252b5132 15371{
2da11e11 15372 const char *s;
9b60702d 15373 int add;
de882298
RM
15374
15375 switch (code)
15376 {
15377 case es_reg: case ss_reg: case cs_reg:
15378 case ds_reg: case fs_reg: case gs_reg:
15379 oappend (names_seg[code - es_reg]);
15380 return;
15381 }
15382
161a04f6
L
15383 USED_REX (REX_B);
15384 if (rex & REX_B)
52b15da3 15385 add = 8;
9b60702d
L
15386 else
15387 add = 0;
52b15da3
JH
15388
15389 switch (code)
15390 {
52b15da3
JH
15391 case ax_reg: case cx_reg: case dx_reg: case bx_reg:
15392 case sp_reg: case bp_reg: case si_reg: case di_reg:
15393 s = names16[code - ax_reg + add];
15394 break;
52b15da3
JH
15395 case al_reg: case ah_reg: case cl_reg: case ch_reg:
15396 case dl_reg: case dh_reg: case bl_reg: case bh_reg:
15397 USED_REX (0);
15398 if (rex)
15399 s = names8rex[code - al_reg + add];
15400 else
15401 s = names8[code - al_reg];
15402 break;
6439fc28
AM
15403 case rAX_reg: case rCX_reg: case rDX_reg: case rBX_reg:
15404 case rSP_reg: case rBP_reg: case rSI_reg: case rDI_reg:
7bb15c6f 15405 if (address_mode == mode_64bit
6c067bbb 15406 && ((sizeflag & DFLAG) || (rex & REX_W)))
6439fc28
AM
15407 {
15408 s = names64[code - rAX_reg + add];
15409 break;
15410 }
15411 code += eAX_reg - rAX_reg;
6608db57 15412 /* Fall through. */
52b15da3
JH
15413 case eAX_reg: case eCX_reg: case eDX_reg: case eBX_reg:
15414 case eSP_reg: case eBP_reg: case eSI_reg: case eDI_reg:
161a04f6
L
15415 USED_REX (REX_W);
15416 if (rex & REX_W)
52b15da3 15417 s = names64[code - eAX_reg + add];
52b15da3 15418 else
f16cd0d5
L
15419 {
15420 if (sizeflag & DFLAG)
15421 s = names32[code - eAX_reg + add];
15422 else
15423 s = names16[code - eAX_reg + add];
15424 used_prefixes |= (prefixes & PREFIX_DATA);
15425 }
52b15da3 15426 break;
52b15da3
JH
15427 default:
15428 s = INTERNAL_DISASSEMBLER_ERROR;
15429 break;
15430 }
15431 oappend (s);
15432}
15433
15434static void
26ca5450 15435OP_IMREG (int code, int sizeflag)
52b15da3
JH
15436{
15437 const char *s;
252b5132
RH
15438
15439 switch (code)
15440 {
15441 case indir_dx_reg:
d708bcba 15442 if (intel_syntax)
52fd6d94 15443 s = "dx";
d708bcba 15444 else
db6eb5be 15445 s = "(%dx)";
252b5132
RH
15446 break;
15447 case ax_reg: case cx_reg: case dx_reg: case bx_reg:
15448 case sp_reg: case bp_reg: case si_reg: case di_reg:
15449 s = names16[code - ax_reg];
15450 break;
15451 case es_reg: case ss_reg: case cs_reg:
15452 case ds_reg: case fs_reg: case gs_reg:
15453 s = names_seg[code - es_reg];
15454 break;
15455 case al_reg: case ah_reg: case cl_reg: case ch_reg:
15456 case dl_reg: case dh_reg: case bl_reg: case bh_reg:
52b15da3
JH
15457 USED_REX (0);
15458 if (rex)
15459 s = names8rex[code - al_reg];
15460 else
15461 s = names8[code - al_reg];
252b5132
RH
15462 break;
15463 case eAX_reg: case eCX_reg: case eDX_reg: case eBX_reg:
15464 case eSP_reg: case eBP_reg: case eSI_reg: case eDI_reg:
161a04f6
L
15465 USED_REX (REX_W);
15466 if (rex & REX_W)
52b15da3 15467 s = names64[code - eAX_reg];
252b5132 15468 else
f16cd0d5
L
15469 {
15470 if (sizeflag & DFLAG)
15471 s = names32[code - eAX_reg];
15472 else
15473 s = names16[code - eAX_reg];
15474 used_prefixes |= (prefixes & PREFIX_DATA);
15475 }
252b5132 15476 break;
52fd6d94 15477 case z_mode_ax_reg:
161a04f6 15478 if ((rex & REX_W) || (sizeflag & DFLAG))
52fd6d94
JB
15479 s = *names32;
15480 else
15481 s = *names16;
161a04f6 15482 if (!(rex & REX_W))
52fd6d94
JB
15483 used_prefixes |= (prefixes & PREFIX_DATA);
15484 break;
252b5132
RH
15485 default:
15486 s = INTERNAL_DISASSEMBLER_ERROR;
15487 break;
15488 }
15489 oappend (s);
15490}
15491
15492static void
26ca5450 15493OP_I (int bytemode, int sizeflag)
252b5132 15494{
52b15da3
JH
15495 bfd_signed_vma op;
15496 bfd_signed_vma mask = -1;
252b5132
RH
15497
15498 switch (bytemode)
15499 {
15500 case b_mode:
15501 FETCH_DATA (the_info, codep + 1);
52b15da3
JH
15502 op = *codep++;
15503 mask = 0xff;
15504 break;
15505 case q_mode:
cb712a9e 15506 if (address_mode == mode_64bit)
6439fc28
AM
15507 {
15508 op = get32s ();
15509 break;
15510 }
6608db57 15511 /* Fall through. */
252b5132 15512 case v_mode:
161a04f6
L
15513 USED_REX (REX_W);
15514 if (rex & REX_W)
52b15da3 15515 op = get32s ();
252b5132 15516 else
52b15da3 15517 {
f16cd0d5
L
15518 if (sizeflag & DFLAG)
15519 {
15520 op = get32 ();
15521 mask = 0xffffffff;
15522 }
15523 else
15524 {
15525 op = get16 ();
15526 mask = 0xfffff;
15527 }
15528 used_prefixes |= (prefixes & PREFIX_DATA);
52b15da3 15529 }
252b5132
RH
15530 break;
15531 case w_mode:
52b15da3 15532 mask = 0xfffff;
252b5132
RH
15533 op = get16 ();
15534 break;
9306ca4a
JB
15535 case const_1_mode:
15536 if (intel_syntax)
6c067bbb 15537 oappend ("1");
9306ca4a 15538 return;
252b5132
RH
15539 default:
15540 oappend (INTERNAL_DISASSEMBLER_ERROR);
15541 return;
15542 }
15543
52b15da3
JH
15544 op &= mask;
15545 scratchbuf[0] = '$';
d708bcba 15546 print_operand_value (scratchbuf + 1, 1, op);
9ce09ba2 15547 oappend_maybe_intel (scratchbuf);
52b15da3
JH
15548 scratchbuf[0] = '\0';
15549}
15550
15551static void
26ca5450 15552OP_I64 (int bytemode, int sizeflag)
52b15da3
JH
15553{
15554 bfd_signed_vma op;
15555 bfd_signed_vma mask = -1;
15556
cb712a9e 15557 if (address_mode != mode_64bit)
6439fc28
AM
15558 {
15559 OP_I (bytemode, sizeflag);
15560 return;
15561 }
15562
52b15da3
JH
15563 switch (bytemode)
15564 {
15565 case b_mode:
15566 FETCH_DATA (the_info, codep + 1);
15567 op = *codep++;
15568 mask = 0xff;
15569 break;
15570 case v_mode:
161a04f6
L
15571 USED_REX (REX_W);
15572 if (rex & REX_W)
52b15da3 15573 op = get64 ();
52b15da3
JH
15574 else
15575 {
f16cd0d5
L
15576 if (sizeflag & DFLAG)
15577 {
15578 op = get32 ();
15579 mask = 0xffffffff;
15580 }
15581 else
15582 {
15583 op = get16 ();
15584 mask = 0xfffff;
15585 }
15586 used_prefixes |= (prefixes & PREFIX_DATA);
52b15da3 15587 }
52b15da3
JH
15588 break;
15589 case w_mode:
15590 mask = 0xfffff;
15591 op = get16 ();
15592 break;
15593 default:
15594 oappend (INTERNAL_DISASSEMBLER_ERROR);
15595 return;
15596 }
15597
15598 op &= mask;
15599 scratchbuf[0] = '$';
d708bcba 15600 print_operand_value (scratchbuf + 1, 1, op);
9ce09ba2 15601 oappend_maybe_intel (scratchbuf);
252b5132
RH
15602 scratchbuf[0] = '\0';
15603}
15604
15605static void
26ca5450 15606OP_sI (int bytemode, int sizeflag)
252b5132 15607{
52b15da3 15608 bfd_signed_vma op;
252b5132
RH
15609
15610 switch (bytemode)
15611 {
15612 case b_mode:
e3949f17 15613 case b_T_mode:
252b5132
RH
15614 FETCH_DATA (the_info, codep + 1);
15615 op = *codep++;
15616 if ((op & 0x80) != 0)
15617 op -= 0x100;
e3949f17
L
15618 if (bytemode == b_T_mode)
15619 {
15620 if (address_mode != mode_64bit
7bb15c6f 15621 || !((sizeflag & DFLAG) || (rex & REX_W)))
e3949f17 15622 {
6c067bbb
RM
15623 /* The operand-size prefix is overridden by a REX prefix. */
15624 if ((sizeflag & DFLAG) || (rex & REX_W))
e3949f17
L
15625 op &= 0xffffffff;
15626 else
15627 op &= 0xffff;
15628 }
15629 }
15630 else
15631 {
15632 if (!(rex & REX_W))
15633 {
15634 if (sizeflag & DFLAG)
15635 op &= 0xffffffff;
15636 else
15637 op &= 0xffff;
15638 }
15639 }
252b5132
RH
15640 break;
15641 case v_mode:
7bb15c6f
RM
15642 /* The operand-size prefix is overridden by a REX prefix. */
15643 if ((sizeflag & DFLAG) || (rex & REX_W))
52b15da3 15644 op = get32s ();
252b5132 15645 else
d9e3625e 15646 op = get16 ();
252b5132
RH
15647 break;
15648 default:
15649 oappend (INTERNAL_DISASSEMBLER_ERROR);
15650 return;
15651 }
52b15da3
JH
15652
15653 scratchbuf[0] = '$';
15654 print_operand_value (scratchbuf + 1, 1, op);
9ce09ba2 15655 oappend_maybe_intel (scratchbuf);
252b5132
RH
15656}
15657
15658static void
26ca5450 15659OP_J (int bytemode, int sizeflag)
252b5132 15660{
52b15da3 15661 bfd_vma disp;
7081ff04 15662 bfd_vma mask = -1;
65ca155d 15663 bfd_vma segment = 0;
252b5132
RH
15664
15665 switch (bytemode)
15666 {
15667 case b_mode:
15668 FETCH_DATA (the_info, codep + 1);
15669 disp = *codep++;
15670 if ((disp & 0x80) != 0)
15671 disp -= 0x100;
15672 break;
15673 case v_mode:
f16cd0d5 15674 USED_REX (REX_W);
161a04f6 15675 if ((sizeflag & DFLAG) || (rex & REX_W))
52b15da3 15676 disp = get32s ();
252b5132
RH
15677 else
15678 {
15679 disp = get16 ();
206717e8
L
15680 if ((disp & 0x8000) != 0)
15681 disp -= 0x10000;
65ca155d
L
15682 /* In 16bit mode, address is wrapped around at 64k within
15683 the same segment. Otherwise, a data16 prefix on a jump
15684 instruction means that the pc is masked to 16 bits after
15685 the displacement is added! */
15686 mask = 0xffff;
15687 if ((prefixes & PREFIX_DATA) == 0)
15688 segment = ((start_pc + codep - start_codep)
15689 & ~((bfd_vma) 0xffff));
252b5132 15690 }
f16cd0d5
L
15691 if (!(rex & REX_W))
15692 used_prefixes |= (prefixes & PREFIX_DATA);
252b5132
RH
15693 break;
15694 default:
15695 oappend (INTERNAL_DISASSEMBLER_ERROR);
15696 return;
15697 }
42d5f9c6 15698 disp = ((start_pc + (codep - start_codep) + disp) & mask) | segment;
52b15da3
JH
15699 set_op (disp, 0);
15700 print_operand_value (scratchbuf, 1, disp);
252b5132
RH
15701 oappend (scratchbuf);
15702}
15703
252b5132 15704static void
ed7841b3 15705OP_SEG (int bytemode, int sizeflag)
252b5132 15706{
ed7841b3 15707 if (bytemode == w_mode)
7967e09e 15708 oappend (names_seg[modrm.reg]);
ed7841b3 15709 else
7967e09e 15710 OP_E (modrm.mod == 3 ? bytemode : w_mode, sizeflag);
252b5132
RH
15711}
15712
15713static void
26ca5450 15714OP_DIR (int dummy ATTRIBUTE_UNUSED, int sizeflag)
252b5132
RH
15715{
15716 int seg, offset;
15717
c608c12e 15718 if (sizeflag & DFLAG)
252b5132 15719 {
c608c12e
AM
15720 offset = get32 ();
15721 seg = get16 ();
252b5132 15722 }
c608c12e
AM
15723 else
15724 {
15725 offset = get16 ();
15726 seg = get16 ();
15727 }
7d421014 15728 used_prefixes |= (prefixes & PREFIX_DATA);
d708bcba 15729 if (intel_syntax)
3f31e633 15730 sprintf (scratchbuf, "0x%x:0x%x", seg, offset);
d708bcba
AM
15731 else
15732 sprintf (scratchbuf, "$0x%x,$0x%x", seg, offset);
c608c12e 15733 oappend (scratchbuf);
252b5132
RH
15734}
15735
252b5132 15736static void
3f31e633 15737OP_OFF (int bytemode, int sizeflag)
252b5132 15738{
52b15da3 15739 bfd_vma off;
252b5132 15740
3f31e633
JB
15741 if (intel_syntax && (sizeflag & SUFFIX_ALWAYS))
15742 intel_operand_size (bytemode, sizeflag);
252b5132
RH
15743 append_seg ();
15744
cb712a9e 15745 if ((sizeflag & AFLAG) || address_mode == mode_64bit)
252b5132
RH
15746 off = get32 ();
15747 else
15748 off = get16 ();
15749
15750 if (intel_syntax)
15751 {
285ca992 15752 if (!active_seg_prefix)
252b5132 15753 {
d708bcba 15754 oappend (names_seg[ds_reg - es_reg]);
252b5132
RH
15755 oappend (":");
15756 }
15757 }
52b15da3
JH
15758 print_operand_value (scratchbuf, 1, off);
15759 oappend (scratchbuf);
15760}
6439fc28 15761
52b15da3 15762static void
3f31e633 15763OP_OFF64 (int bytemode, int sizeflag)
52b15da3
JH
15764{
15765 bfd_vma off;
15766
539e75ad
L
15767 if (address_mode != mode_64bit
15768 || (prefixes & PREFIX_ADDR))
6439fc28
AM
15769 {
15770 OP_OFF (bytemode, sizeflag);
15771 return;
15772 }
15773
3f31e633
JB
15774 if (intel_syntax && (sizeflag & SUFFIX_ALWAYS))
15775 intel_operand_size (bytemode, sizeflag);
52b15da3
JH
15776 append_seg ();
15777
6608db57 15778 off = get64 ();
52b15da3
JH
15779
15780 if (intel_syntax)
15781 {
285ca992 15782 if (!active_seg_prefix)
52b15da3 15783 {
d708bcba 15784 oappend (names_seg[ds_reg - es_reg]);
52b15da3
JH
15785 oappend (":");
15786 }
15787 }
15788 print_operand_value (scratchbuf, 1, off);
252b5132
RH
15789 oappend (scratchbuf);
15790}
15791
15792static void
26ca5450 15793ptr_reg (int code, int sizeflag)
252b5132 15794{
2da11e11 15795 const char *s;
d708bcba 15796
1d9f512f 15797 *obufp++ = open_char;
20f0a1fc 15798 used_prefixes |= (prefixes & PREFIX_ADDR);
cb712a9e 15799 if (address_mode == mode_64bit)
c1a64871
JH
15800 {
15801 if (!(sizeflag & AFLAG))
db6eb5be 15802 s = names32[code - eAX_reg];
c1a64871 15803 else
db6eb5be 15804 s = names64[code - eAX_reg];
c1a64871 15805 }
52b15da3 15806 else if (sizeflag & AFLAG)
252b5132
RH
15807 s = names32[code - eAX_reg];
15808 else
15809 s = names16[code - eAX_reg];
15810 oappend (s);
1d9f512f
AM
15811 *obufp++ = close_char;
15812 *obufp = 0;
252b5132
RH
15813}
15814
15815static void
26ca5450 15816OP_ESreg (int code, int sizeflag)
252b5132 15817{
9306ca4a 15818 if (intel_syntax)
52fd6d94
JB
15819 {
15820 switch (codep[-1])
15821 {
15822 case 0x6d: /* insw/insl */
15823 intel_operand_size (z_mode, sizeflag);
15824 break;
15825 case 0xa5: /* movsw/movsl/movsq */
15826 case 0xa7: /* cmpsw/cmpsl/cmpsq */
15827 case 0xab: /* stosw/stosl */
15828 case 0xaf: /* scasw/scasl */
15829 intel_operand_size (v_mode, sizeflag);
15830 break;
15831 default:
15832 intel_operand_size (b_mode, sizeflag);
15833 }
15834 }
9ce09ba2 15835 oappend_maybe_intel ("%es:");
252b5132
RH
15836 ptr_reg (code, sizeflag);
15837}
15838
15839static void
26ca5450 15840OP_DSreg (int code, int sizeflag)
252b5132 15841{
9306ca4a 15842 if (intel_syntax)
52fd6d94
JB
15843 {
15844 switch (codep[-1])
15845 {
15846 case 0x6f: /* outsw/outsl */
15847 intel_operand_size (z_mode, sizeflag);
15848 break;
15849 case 0xa5: /* movsw/movsl/movsq */
15850 case 0xa7: /* cmpsw/cmpsl/cmpsq */
15851 case 0xad: /* lodsw/lodsl/lodsq */
15852 intel_operand_size (v_mode, sizeflag);
15853 break;
15854 default:
15855 intel_operand_size (b_mode, sizeflag);
15856 }
15857 }
285ca992
L
15858 /* Set active_seg_prefix to PREFIX_DS if it is unset so that the
15859 default segment register DS is printed. */
15860 if (!active_seg_prefix)
15861 active_seg_prefix = PREFIX_DS;
6608db57 15862 append_seg ();
252b5132
RH
15863 ptr_reg (code, sizeflag);
15864}
15865
252b5132 15866static void
26ca5450 15867OP_C (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 15868{
9b60702d 15869 int add;
161a04f6 15870 if (rex & REX_R)
c4a530c5 15871 {
161a04f6 15872 USED_REX (REX_R);
c4a530c5
JB
15873 add = 8;
15874 }
cb712a9e 15875 else if (address_mode != mode_64bit && (prefixes & PREFIX_LOCK))
c4a530c5 15876 {
f16cd0d5 15877 all_prefixes[last_lock_prefix] = 0;
c4a530c5
JB
15878 used_prefixes |= PREFIX_LOCK;
15879 add = 8;
15880 }
9b60702d
L
15881 else
15882 add = 0;
7967e09e 15883 sprintf (scratchbuf, "%%cr%d", modrm.reg + add);
9ce09ba2 15884 oappend_maybe_intel (scratchbuf);
252b5132
RH
15885}
15886
252b5132 15887static void
26ca5450 15888OP_D (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 15889{
9b60702d 15890 int add;
161a04f6
L
15891 USED_REX (REX_R);
15892 if (rex & REX_R)
52b15da3 15893 add = 8;
9b60702d
L
15894 else
15895 add = 0;
d708bcba 15896 if (intel_syntax)
7967e09e 15897 sprintf (scratchbuf, "db%d", modrm.reg + add);
d708bcba 15898 else
7967e09e 15899 sprintf (scratchbuf, "%%db%d", modrm.reg + add);
252b5132
RH
15900 oappend (scratchbuf);
15901}
15902
252b5132 15903static void
26ca5450 15904OP_T (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 15905{
7967e09e 15906 sprintf (scratchbuf, "%%tr%d", modrm.reg);
9ce09ba2 15907 oappend_maybe_intel (scratchbuf);
252b5132
RH
15908}
15909
15910static void
6f74c397 15911OP_R (int bytemode, int sizeflag)
252b5132 15912{
68f34464
L
15913 /* Skip mod/rm byte. */
15914 MODRM_CHECK;
15915 codep++;
15916 OP_E_register (bytemode, sizeflag);
252b5132
RH
15917}
15918
15919static void
26ca5450 15920OP_MMX (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 15921{
b9733481
L
15922 int reg = modrm.reg;
15923 const char **names;
15924
041bd2e0
JH
15925 used_prefixes |= (prefixes & PREFIX_DATA);
15926 if (prefixes & PREFIX_DATA)
20f0a1fc 15927 {
b9733481 15928 names = names_xmm;
161a04f6
L
15929 USED_REX (REX_R);
15930 if (rex & REX_R)
b9733481 15931 reg += 8;
20f0a1fc 15932 }
041bd2e0 15933 else
b9733481
L
15934 names = names_mm;
15935 oappend (names[reg]);
252b5132
RH
15936}
15937
c608c12e 15938static void
c0f3af97 15939OP_XMM (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
c608c12e 15940{
b9733481
L
15941 int reg = modrm.reg;
15942 const char **names;
15943
161a04f6
L
15944 USED_REX (REX_R);
15945 if (rex & REX_R)
b9733481 15946 reg += 8;
43234a1e
L
15947 if (vex.evex)
15948 {
15949 if (!vex.r)
15950 reg += 16;
15951 }
15952
539f890d
L
15953 if (need_vex
15954 && bytemode != xmm_mode
43234a1e
L
15955 && bytemode != xmmq_mode
15956 && bytemode != evex_half_bcst_xmmq_mode
15957 && bytemode != ymm_mode
539f890d 15958 && bytemode != scalar_mode)
c0f3af97
L
15959 {
15960 switch (vex.length)
15961 {
15962 case 128:
b9733481 15963 names = names_xmm;
c0f3af97
L
15964 break;
15965 case 256:
5fc35d96
IT
15966 if (vex.w
15967 || (bytemode != vex_vsib_q_w_dq_mode
15968 && bytemode != vex_vsib_q_w_d_mode))
6c30d220
L
15969 names = names_ymm;
15970 else
15971 names = names_xmm;
c0f3af97 15972 break;
43234a1e
L
15973 case 512:
15974 names = names_zmm;
15975 break;
c0f3af97
L
15976 default:
15977 abort ();
15978 }
15979 }
43234a1e
L
15980 else if (bytemode == xmmq_mode
15981 || bytemode == evex_half_bcst_xmmq_mode)
15982 {
15983 switch (vex.length)
15984 {
15985 case 128:
15986 case 256:
15987 names = names_xmm;
15988 break;
15989 case 512:
15990 names = names_ymm;
15991 break;
15992 default:
15993 abort ();
15994 }
15995 }
15996 else if (bytemode == ymm_mode)
15997 names = names_ymm;
c0f3af97 15998 else
b9733481
L
15999 names = names_xmm;
16000 oappend (names[reg]);
c608c12e
AM
16001}
16002
252b5132 16003static void
26ca5450 16004OP_EM (int bytemode, int sizeflag)
252b5132 16005{
b9733481
L
16006 int reg;
16007 const char **names;
16008
7967e09e 16009 if (modrm.mod != 3)
252b5132 16010 {
b6169b20
L
16011 if (intel_syntax
16012 && (bytemode == v_mode || bytemode == v_swap_mode))
9306ca4a
JB
16013 {
16014 bytemode = (prefixes & PREFIX_DATA) ? x_mode : q_mode;
16015 used_prefixes |= (prefixes & PREFIX_DATA);
6c067bbb 16016 }
252b5132
RH
16017 OP_E (bytemode, sizeflag);
16018 return;
16019 }
16020
b6169b20
L
16021 if ((sizeflag & SUFFIX_ALWAYS) && bytemode == v_swap_mode)
16022 swap_operand ();
16023
6608db57 16024 /* Skip mod/rm byte. */
4bba6815 16025 MODRM_CHECK;
252b5132 16026 codep++;
041bd2e0 16027 used_prefixes |= (prefixes & PREFIX_DATA);
b9733481 16028 reg = modrm.rm;
041bd2e0 16029 if (prefixes & PREFIX_DATA)
20f0a1fc 16030 {
b9733481 16031 names = names_xmm;
161a04f6
L
16032 USED_REX (REX_B);
16033 if (rex & REX_B)
b9733481 16034 reg += 8;
20f0a1fc 16035 }
041bd2e0 16036 else
b9733481
L
16037 names = names_mm;
16038 oappend (names[reg]);
252b5132
RH
16039}
16040
246c51aa
L
16041/* cvt* are the only instructions in sse2 which have
16042 both SSE and MMX operands and also have 0x66 prefix
16043 in their opcode. 0x66 was originally used to differentiate
16044 between SSE and MMX instruction(operands). So we have to handle the
4d9567e0
MM
16045 cvt* separately using OP_EMC and OP_MXC */
16046static void
16047OP_EMC (int bytemode, int sizeflag)
16048{
7967e09e 16049 if (modrm.mod != 3)
4d9567e0
MM
16050 {
16051 if (intel_syntax && bytemode == v_mode)
16052 {
16053 bytemode = (prefixes & PREFIX_DATA) ? x_mode : q_mode;
16054 used_prefixes |= (prefixes & PREFIX_DATA);
6c067bbb 16055 }
4d9567e0
MM
16056 OP_E (bytemode, sizeflag);
16057 return;
16058 }
246c51aa 16059
4d9567e0
MM
16060 /* Skip mod/rm byte. */
16061 MODRM_CHECK;
16062 codep++;
16063 used_prefixes |= (prefixes & PREFIX_DATA);
b9733481 16064 oappend (names_mm[modrm.rm]);
4d9567e0
MM
16065}
16066
16067static void
16068OP_MXC (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
16069{
16070 used_prefixes |= (prefixes & PREFIX_DATA);
b9733481 16071 oappend (names_mm[modrm.reg]);
4d9567e0
MM
16072}
16073
c608c12e 16074static void
26ca5450 16075OP_EX (int bytemode, int sizeflag)
c608c12e 16076{
b9733481
L
16077 int reg;
16078 const char **names;
d6f574e0
L
16079
16080 /* Skip mod/rm byte. */
16081 MODRM_CHECK;
16082 codep++;
16083
7967e09e 16084 if (modrm.mod != 3)
c608c12e 16085 {
c1e679ec 16086 OP_E_memory (bytemode, sizeflag);
c608c12e
AM
16087 return;
16088 }
d6f574e0 16089
b9733481 16090 reg = modrm.rm;
161a04f6
L
16091 USED_REX (REX_B);
16092 if (rex & REX_B)
b9733481 16093 reg += 8;
43234a1e
L
16094 if (vex.evex)
16095 {
16096 USED_REX (REX_X);
16097 if ((rex & REX_X))
16098 reg += 16;
16099 }
c608c12e 16100
b6169b20 16101 if ((sizeflag & SUFFIX_ALWAYS)
fa99fab2
L
16102 && (bytemode == x_swap_mode
16103 || bytemode == d_swap_mode
1ba585e8 16104 || bytemode == dqw_swap_mode
7bb15c6f 16105 || bytemode == d_scalar_swap_mode
539f890d
L
16106 || bytemode == q_swap_mode
16107 || bytemode == q_scalar_swap_mode))
b6169b20
L
16108 swap_operand ();
16109
c0f3af97
L
16110 if (need_vex
16111 && bytemode != xmm_mode
6c30d220
L
16112 && bytemode != xmmdw_mode
16113 && bytemode != xmmqd_mode
16114 && bytemode != xmm_mb_mode
16115 && bytemode != xmm_mw_mode
16116 && bytemode != xmm_md_mode
16117 && bytemode != xmm_mq_mode
43234a1e 16118 && bytemode != xmm_mdq_mode
539f890d 16119 && bytemode != xmmq_mode
43234a1e
L
16120 && bytemode != evex_half_bcst_xmmq_mode
16121 && bytemode != ymm_mode
539f890d 16122 && bytemode != d_scalar_mode
7bb15c6f 16123 && bytemode != d_scalar_swap_mode
539f890d 16124 && bytemode != q_scalar_mode
1c480963
L
16125 && bytemode != q_scalar_swap_mode
16126 && bytemode != vex_scalar_w_dq_mode)
c0f3af97
L
16127 {
16128 switch (vex.length)
16129 {
16130 case 128:
b9733481 16131 names = names_xmm;
c0f3af97
L
16132 break;
16133 case 256:
b9733481 16134 names = names_ymm;
c0f3af97 16135 break;
43234a1e
L
16136 case 512:
16137 names = names_zmm;
16138 break;
c0f3af97
L
16139 default:
16140 abort ();
16141 }
16142 }
43234a1e
L
16143 else if (bytemode == xmmq_mode
16144 || bytemode == evex_half_bcst_xmmq_mode)
16145 {
16146 switch (vex.length)
16147 {
16148 case 128:
16149 case 256:
16150 names = names_xmm;
16151 break;
16152 case 512:
16153 names = names_ymm;
16154 break;
16155 default:
16156 abort ();
16157 }
16158 }
16159 else if (bytemode == ymm_mode)
16160 names = names_ymm;
c0f3af97 16161 else
b9733481
L
16162 names = names_xmm;
16163 oappend (names[reg]);
c608c12e
AM
16164}
16165
252b5132 16166static void
26ca5450 16167OP_MS (int bytemode, int sizeflag)
252b5132 16168{
7967e09e 16169 if (modrm.mod == 3)
2da11e11
AM
16170 OP_EM (bytemode, sizeflag);
16171 else
6608db57 16172 BadOp ();
252b5132
RH
16173}
16174
992aaec9 16175static void
26ca5450 16176OP_XS (int bytemode, int sizeflag)
992aaec9 16177{
7967e09e 16178 if (modrm.mod == 3)
992aaec9
AM
16179 OP_EX (bytemode, sizeflag);
16180 else
6608db57 16181 BadOp ();
992aaec9
AM
16182}
16183
cc0ec051
AM
16184static void
16185OP_M (int bytemode, int sizeflag)
16186{
7967e09e 16187 if (modrm.mod == 3)
75413a22
L
16188 /* bad bound,lea,lds,les,lfs,lgs,lss,cmpxchg8b,vmptrst modrm */
16189 BadOp ();
cc0ec051
AM
16190 else
16191 OP_E (bytemode, sizeflag);
16192}
16193
16194static void
16195OP_0f07 (int bytemode, int sizeflag)
16196{
7967e09e 16197 if (modrm.mod != 3 || modrm.rm != 0)
cc0ec051
AM
16198 BadOp ();
16199 else
16200 OP_E (bytemode, sizeflag);
16201}
16202
46e883c5 16203/* NOP is an alias of "xchg %ax,%ax" in 16bit mode, "xchg %eax,%eax" in
246c51aa 16204 32bit mode and "xchg %rax,%rax" in 64bit mode. */
46e883c5 16205
cc0ec051 16206static void
46e883c5 16207NOP_Fixup1 (int bytemode, int sizeflag)
cc0ec051 16208{
8b38ad71
L
16209 if ((prefixes & PREFIX_DATA) != 0
16210 || (rex != 0
16211 && rex != 0x48
16212 && address_mode == mode_64bit))
46e883c5
L
16213 OP_REG (bytemode, sizeflag);
16214 else
16215 strcpy (obuf, "nop");
16216}
16217
16218static void
16219NOP_Fixup2 (int bytemode, int sizeflag)
16220{
8b38ad71
L
16221 if ((prefixes & PREFIX_DATA) != 0
16222 || (rex != 0
16223 && rex != 0x48
16224 && address_mode == mode_64bit))
46e883c5 16225 OP_IMREG (bytemode, sizeflag);
cc0ec051
AM
16226}
16227
84037f8c 16228static const char *const Suffix3DNow[] = {
252b5132
RH
16229/* 00 */ NULL, NULL, NULL, NULL,
16230/* 04 */ NULL, NULL, NULL, NULL,
16231/* 08 */ NULL, NULL, NULL, NULL,
9e525108 16232/* 0C */ "pi2fw", "pi2fd", NULL, NULL,
252b5132
RH
16233/* 10 */ NULL, NULL, NULL, NULL,
16234/* 14 */ NULL, NULL, NULL, NULL,
16235/* 18 */ NULL, NULL, NULL, NULL,
9e525108 16236/* 1C */ "pf2iw", "pf2id", NULL, NULL,
252b5132
RH
16237/* 20 */ NULL, NULL, NULL, NULL,
16238/* 24 */ NULL, NULL, NULL, NULL,
16239/* 28 */ NULL, NULL, NULL, NULL,
16240/* 2C */ NULL, NULL, NULL, NULL,
16241/* 30 */ NULL, NULL, NULL, NULL,
16242/* 34 */ NULL, NULL, NULL, NULL,
16243/* 38 */ NULL, NULL, NULL, NULL,
16244/* 3C */ NULL, NULL, NULL, NULL,
16245/* 40 */ NULL, NULL, NULL, NULL,
16246/* 44 */ NULL, NULL, NULL, NULL,
16247/* 48 */ NULL, NULL, NULL, NULL,
16248/* 4C */ NULL, NULL, NULL, NULL,
16249/* 50 */ NULL, NULL, NULL, NULL,
16250/* 54 */ NULL, NULL, NULL, NULL,
16251/* 58 */ NULL, NULL, NULL, NULL,
16252/* 5C */ NULL, NULL, NULL, NULL,
16253/* 60 */ NULL, NULL, NULL, NULL,
16254/* 64 */ NULL, NULL, NULL, NULL,
16255/* 68 */ NULL, NULL, NULL, NULL,
16256/* 6C */ NULL, NULL, NULL, NULL,
16257/* 70 */ NULL, NULL, NULL, NULL,
16258/* 74 */ NULL, NULL, NULL, NULL,
16259/* 78 */ NULL, NULL, NULL, NULL,
16260/* 7C */ NULL, NULL, NULL, NULL,
16261/* 80 */ NULL, NULL, NULL, NULL,
16262/* 84 */ NULL, NULL, NULL, NULL,
9e525108
AM
16263/* 88 */ NULL, NULL, "pfnacc", NULL,
16264/* 8C */ NULL, NULL, "pfpnacc", NULL,
252b5132
RH
16265/* 90 */ "pfcmpge", NULL, NULL, NULL,
16266/* 94 */ "pfmin", NULL, "pfrcp", "pfrsqrt",
16267/* 98 */ NULL, NULL, "pfsub", NULL,
16268/* 9C */ NULL, NULL, "pfadd", NULL,
16269/* A0 */ "pfcmpgt", NULL, NULL, NULL,
16270/* A4 */ "pfmax", NULL, "pfrcpit1", "pfrsqit1",
16271/* A8 */ NULL, NULL, "pfsubr", NULL,
16272/* AC */ NULL, NULL, "pfacc", NULL,
16273/* B0 */ "pfcmpeq", NULL, NULL, NULL,
9beff690 16274/* B4 */ "pfmul", NULL, "pfrcpit2", "pmulhrw",
9e525108 16275/* B8 */ NULL, NULL, NULL, "pswapd",
252b5132
RH
16276/* BC */ NULL, NULL, NULL, "pavgusb",
16277/* C0 */ NULL, NULL, NULL, NULL,
16278/* C4 */ NULL, NULL, NULL, NULL,
16279/* C8 */ NULL, NULL, NULL, NULL,
16280/* CC */ NULL, NULL, NULL, NULL,
16281/* D0 */ NULL, NULL, NULL, NULL,
16282/* D4 */ NULL, NULL, NULL, NULL,
16283/* D8 */ NULL, NULL, NULL, NULL,
16284/* DC */ NULL, NULL, NULL, NULL,
16285/* E0 */ NULL, NULL, NULL, NULL,
16286/* E4 */ NULL, NULL, NULL, NULL,
16287/* E8 */ NULL, NULL, NULL, NULL,
16288/* EC */ NULL, NULL, NULL, NULL,
16289/* F0 */ NULL, NULL, NULL, NULL,
16290/* F4 */ NULL, NULL, NULL, NULL,
16291/* F8 */ NULL, NULL, NULL, NULL,
16292/* FC */ NULL, NULL, NULL, NULL,
16293};
16294
16295static void
26ca5450 16296OP_3DNowSuffix (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132
RH
16297{
16298 const char *mnemonic;
16299
16300 FETCH_DATA (the_info, codep + 1);
16301 /* AMD 3DNow! instructions are specified by an opcode suffix in the
16302 place where an 8-bit immediate would normally go. ie. the last
16303 byte of the instruction. */
ea397f5b 16304 obufp = mnemonicendp;
c608c12e 16305 mnemonic = Suffix3DNow[*codep++ & 0xff];
252b5132 16306 if (mnemonic)
2da11e11 16307 oappend (mnemonic);
252b5132
RH
16308 else
16309 {
16310 /* Since a variable sized modrm/sib chunk is between the start
16311 of the opcode (0x0f0f) and the opcode suffix, we need to do
16312 all the modrm processing first, and don't know until now that
16313 we have a bad opcode. This necessitates some cleaning up. */
ce518a5f
L
16314 op_out[0][0] = '\0';
16315 op_out[1][0] = '\0';
6608db57 16316 BadOp ();
252b5132 16317 }
ea397f5b 16318 mnemonicendp = obufp;
252b5132 16319}
c608c12e 16320
ea397f5b
L
16321static struct op simd_cmp_op[] =
16322{
16323 { STRING_COMMA_LEN ("eq") },
16324 { STRING_COMMA_LEN ("lt") },
16325 { STRING_COMMA_LEN ("le") },
16326 { STRING_COMMA_LEN ("unord") },
16327 { STRING_COMMA_LEN ("neq") },
16328 { STRING_COMMA_LEN ("nlt") },
16329 { STRING_COMMA_LEN ("nle") },
16330 { STRING_COMMA_LEN ("ord") }
c608c12e
AM
16331};
16332
16333static void
ad19981d 16334CMP_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
c608c12e
AM
16335{
16336 unsigned int cmp_type;
16337
16338 FETCH_DATA (the_info, codep + 1);
16339 cmp_type = *codep++ & 0xff;
c0f3af97 16340 if (cmp_type < ARRAY_SIZE (simd_cmp_op))
c608c12e 16341 {
ad19981d 16342 char suffix [3];
ea397f5b 16343 char *p = mnemonicendp - 2;
ad19981d
L
16344 suffix[0] = p[0];
16345 suffix[1] = p[1];
16346 suffix[2] = '\0';
ea397f5b
L
16347 sprintf (p, "%s%s", simd_cmp_op[cmp_type].name, suffix);
16348 mnemonicendp += simd_cmp_op[cmp_type].len;
c608c12e
AM
16349 }
16350 else
16351 {
ad19981d
L
16352 /* We have a reserved extension byte. Output it directly. */
16353 scratchbuf[0] = '$';
16354 print_operand_value (scratchbuf + 1, 1, cmp_type);
9ce09ba2 16355 oappend_maybe_intel (scratchbuf);
ad19981d 16356 scratchbuf[0] = '\0';
c608c12e
AM
16357 }
16358}
16359
ca164297 16360static void
b844680a
L
16361OP_Mwait (int bytemode ATTRIBUTE_UNUSED,
16362 int sizeflag ATTRIBUTE_UNUSED)
16363{
16364 /* mwait %eax,%ecx */
16365 if (!intel_syntax)
16366 {
16367 const char **names = (address_mode == mode_64bit
16368 ? names64 : names32);
16369 strcpy (op_out[0], names[0]);
16370 strcpy (op_out[1], names[1]);
16371 two_source_ops = 1;
16372 }
16373 /* Skip mod/rm byte. */
16374 MODRM_CHECK;
16375 codep++;
16376}
16377
16378static void
16379OP_Monitor (int bytemode ATTRIBUTE_UNUSED,
16380 int sizeflag ATTRIBUTE_UNUSED)
ca164297 16381{
b844680a
L
16382 /* monitor %eax,%ecx,%edx" */
16383 if (!intel_syntax)
ca164297 16384 {
b844680a 16385 const char **op1_names;
cb712a9e
L
16386 const char **names = (address_mode == mode_64bit
16387 ? names64 : names32);
1d9f512f 16388
b844680a
L
16389 if (!(prefixes & PREFIX_ADDR))
16390 op1_names = (address_mode == mode_16bit
16391 ? names16 : names);
ca164297
L
16392 else
16393 {
b844680a 16394 /* Remove "addr16/addr32". */
f16cd0d5 16395 all_prefixes[last_addr_prefix] = 0;
b844680a
L
16396 op1_names = (address_mode != mode_32bit
16397 ? names32 : names16);
16398 used_prefixes |= PREFIX_ADDR;
ca164297 16399 }
b844680a
L
16400 strcpy (op_out[0], op1_names[0]);
16401 strcpy (op_out[1], names[1]);
16402 strcpy (op_out[2], names[2]);
16403 two_source_ops = 1;
ca164297 16404 }
b844680a
L
16405 /* Skip mod/rm byte. */
16406 MODRM_CHECK;
16407 codep++;
30123838
JB
16408}
16409
6608db57
KH
16410static void
16411BadOp (void)
2da11e11 16412{
6608db57
KH
16413 /* Throw away prefixes and 1st. opcode byte. */
16414 codep = insn_codep + 1;
2da11e11
AM
16415 oappend ("(bad)");
16416}
4cc91dba 16417
35c52694
L
16418static void
16419REP_Fixup (int bytemode, int sizeflag)
16420{
16421 /* The 0xf3 prefix should be displayed as "rep" for ins, outs, movs,
16422 lods and stos. */
35c52694 16423 if (prefixes & PREFIX_REPZ)
f16cd0d5 16424 all_prefixes[last_repz_prefix] = REP_PREFIX;
35c52694
L
16425
16426 switch (bytemode)
16427 {
16428 case al_reg:
16429 case eAX_reg:
16430 case indir_dx_reg:
16431 OP_IMREG (bytemode, sizeflag);
16432 break;
16433 case eDI_reg:
16434 OP_ESreg (bytemode, sizeflag);
16435 break;
16436 case eSI_reg:
16437 OP_DSreg (bytemode, sizeflag);
16438 break;
16439 default:
16440 abort ();
16441 break;
16442 }
16443}
f5804c90 16444
7e8b059b
L
16445/* For BND-prefixed instructions 0xF2 prefix should be displayed as
16446 "bnd". */
16447
16448static void
16449BND_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
16450{
16451 if (prefixes & PREFIX_REPNZ)
16452 all_prefixes[last_repnz_prefix] = BND_PREFIX;
16453}
16454
42164a71
L
16455/* Similar to OP_E. But the 0xf2/0xf3 prefixes should be displayed as
16456 "xacquire"/"xrelease" for memory operand if there is a LOCK prefix.
16457 */
16458
16459static void
16460HLE_Fixup1 (int bytemode, int sizeflag)
16461{
16462 if (modrm.mod != 3
16463 && (prefixes & PREFIX_LOCK) != 0)
16464 {
16465 if (prefixes & PREFIX_REPZ)
16466 all_prefixes[last_repz_prefix] = XRELEASE_PREFIX;
16467 if (prefixes & PREFIX_REPNZ)
16468 all_prefixes[last_repnz_prefix] = XACQUIRE_PREFIX;
16469 }
16470
16471 OP_E (bytemode, sizeflag);
16472}
16473
16474/* Similar to OP_E. But the 0xf2/0xf3 prefixes should be displayed as
16475 "xacquire"/"xrelease" for memory operand. No check for LOCK prefix.
16476 */
16477
16478static void
16479HLE_Fixup2 (int bytemode, int sizeflag)
16480{
16481 if (modrm.mod != 3)
16482 {
16483 if (prefixes & PREFIX_REPZ)
16484 all_prefixes[last_repz_prefix] = XRELEASE_PREFIX;
16485 if (prefixes & PREFIX_REPNZ)
16486 all_prefixes[last_repnz_prefix] = XACQUIRE_PREFIX;
16487 }
16488
16489 OP_E (bytemode, sizeflag);
16490}
16491
16492/* Similar to OP_E. But the 0xf3 prefixes should be displayed as
16493 "xrelease" for memory operand. No check for LOCK prefix. */
16494
16495static void
16496HLE_Fixup3 (int bytemode, int sizeflag)
16497{
16498 if (modrm.mod != 3
16499 && last_repz_prefix > last_repnz_prefix
16500 && (prefixes & PREFIX_REPZ) != 0)
16501 all_prefixes[last_repz_prefix] = XRELEASE_PREFIX;
16502
16503 OP_E (bytemode, sizeflag);
16504}
16505
f5804c90
L
16506static void
16507CMPXCHG8B_Fixup (int bytemode, int sizeflag)
16508{
161a04f6
L
16509 USED_REX (REX_W);
16510 if (rex & REX_W)
f5804c90
L
16511 {
16512 /* Change cmpxchg8b to cmpxchg16b. */
ea397f5b
L
16513 char *p = mnemonicendp - 2;
16514 mnemonicendp = stpcpy (p, "16b");
fb9c77c7 16515 bytemode = o_mode;
f5804c90 16516 }
42164a71
L
16517 else if ((prefixes & PREFIX_LOCK) != 0)
16518 {
16519 if (prefixes & PREFIX_REPZ)
16520 all_prefixes[last_repz_prefix] = XRELEASE_PREFIX;
16521 if (prefixes & PREFIX_REPNZ)
16522 all_prefixes[last_repnz_prefix] = XACQUIRE_PREFIX;
16523 }
16524
f5804c90
L
16525 OP_M (bytemode, sizeflag);
16526}
42903f7f
L
16527
16528static void
16529XMM_Fixup (int reg, int sizeflag ATTRIBUTE_UNUSED)
16530{
b9733481
L
16531 const char **names;
16532
c0f3af97
L
16533 if (need_vex)
16534 {
16535 switch (vex.length)
16536 {
16537 case 128:
b9733481 16538 names = names_xmm;
c0f3af97
L
16539 break;
16540 case 256:
b9733481 16541 names = names_ymm;
c0f3af97
L
16542 break;
16543 default:
16544 abort ();
16545 }
16546 }
16547 else
b9733481
L
16548 names = names_xmm;
16549 oappend (names[reg]);
42903f7f 16550}
381d071f
L
16551
16552static void
16553CRC32_Fixup (int bytemode, int sizeflag)
16554{
16555 /* Add proper suffix to "crc32". */
ea397f5b 16556 char *p = mnemonicendp;
381d071f
L
16557
16558 switch (bytemode)
16559 {
16560 case b_mode:
20592a94 16561 if (intel_syntax)
ea397f5b 16562 goto skip;
20592a94 16563
381d071f
L
16564 *p++ = 'b';
16565 break;
16566 case v_mode:
20592a94 16567 if (intel_syntax)
ea397f5b 16568 goto skip;
20592a94 16569
381d071f
L
16570 USED_REX (REX_W);
16571 if (rex & REX_W)
16572 *p++ = 'q';
7bb15c6f 16573 else
f16cd0d5
L
16574 {
16575 if (sizeflag & DFLAG)
16576 *p++ = 'l';
16577 else
16578 *p++ = 'w';
16579 used_prefixes |= (prefixes & PREFIX_DATA);
16580 }
381d071f
L
16581 break;
16582 default:
16583 oappend (INTERNAL_DISASSEMBLER_ERROR);
16584 break;
16585 }
ea397f5b 16586 mnemonicendp = p;
381d071f
L
16587 *p = '\0';
16588
ea397f5b 16589skip:
381d071f
L
16590 if (modrm.mod == 3)
16591 {
16592 int add;
16593
16594 /* Skip mod/rm byte. */
16595 MODRM_CHECK;
16596 codep++;
16597
16598 USED_REX (REX_B);
16599 add = (rex & REX_B) ? 8 : 0;
16600 if (bytemode == b_mode)
16601 {
16602 USED_REX (0);
16603 if (rex)
16604 oappend (names8rex[modrm.rm + add]);
16605 else
16606 oappend (names8[modrm.rm + add]);
16607 }
16608 else
16609 {
16610 USED_REX (REX_W);
16611 if (rex & REX_W)
16612 oappend (names64[modrm.rm + add]);
16613 else if ((prefixes & PREFIX_DATA))
16614 oappend (names16[modrm.rm + add]);
16615 else
16616 oappend (names32[modrm.rm + add]);
16617 }
16618 }
16619 else
9344ff29 16620 OP_E (bytemode, sizeflag);
381d071f 16621}
85f10a01 16622
eacc9c89
L
16623static void
16624FXSAVE_Fixup (int bytemode, int sizeflag)
16625{
16626 /* Add proper suffix to "fxsave" and "fxrstor". */
16627 USED_REX (REX_W);
16628 if (rex & REX_W)
16629 {
16630 char *p = mnemonicendp;
16631 *p++ = '6';
16632 *p++ = '4';
16633 *p = '\0';
16634 mnemonicendp = p;
16635 }
16636 OP_M (bytemode, sizeflag);
16637}
16638
c0f3af97
L
16639/* Display the destination register operand for instructions with
16640 VEX. */
16641
16642static void
16643OP_VEX (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
16644{
539f890d 16645 int reg;
b9733481
L
16646 const char **names;
16647
c0f3af97
L
16648 if (!need_vex)
16649 abort ();
16650
16651 if (!need_vex_reg)
16652 return;
16653
539f890d 16654 reg = vex.register_specifier;
43234a1e
L
16655 if (vex.evex)
16656 {
16657 if (!vex.v)
16658 reg += 16;
16659 }
16660
539f890d
L
16661 if (bytemode == vex_scalar_mode)
16662 {
16663 oappend (names_xmm[reg]);
16664 return;
16665 }
16666
c0f3af97
L
16667 switch (vex.length)
16668 {
16669 case 128:
16670 switch (bytemode)
16671 {
16672 case vex_mode:
16673 case vex128_mode:
6c30d220 16674 case vex_vsib_q_w_dq_mode:
5fc35d96 16675 case vex_vsib_q_w_d_mode:
cb21baef
L
16676 names = names_xmm;
16677 break;
16678 case dq_mode:
16679 if (vex.w)
16680 names = names64;
16681 else
16682 names = names32;
c0f3af97 16683 break;
1ba585e8 16684 case mask_bd_mode:
43234a1e
L
16685 case mask_mode:
16686 names = names_mask;
16687 break;
c0f3af97
L
16688 default:
16689 abort ();
16690 return;
16691 }
c0f3af97
L
16692 break;
16693 case 256:
16694 switch (bytemode)
16695 {
16696 case vex_mode:
16697 case vex256_mode:
6c30d220
L
16698 names = names_ymm;
16699 break;
16700 case vex_vsib_q_w_dq_mode:
5fc35d96 16701 case vex_vsib_q_w_d_mode:
6c30d220 16702 names = vex.w ? names_ymm : names_xmm;
c0f3af97 16703 break;
1ba585e8 16704 case mask_bd_mode:
43234a1e
L
16705 case mask_mode:
16706 names = names_mask;
16707 break;
c0f3af97
L
16708 default:
16709 abort ();
16710 return;
16711 }
c0f3af97 16712 break;
43234a1e
L
16713 case 512:
16714 names = names_zmm;
16715 break;
c0f3af97
L
16716 default:
16717 abort ();
16718 break;
16719 }
539f890d 16720 oappend (names[reg]);
c0f3af97
L
16721}
16722
922d8de8
DR
16723/* Get the VEX immediate byte without moving codep. */
16724
16725static unsigned char
ccc5981b 16726get_vex_imm8 (int sizeflag, int opnum)
922d8de8
DR
16727{
16728 int bytes_before_imm = 0;
16729
922d8de8
DR
16730 if (modrm.mod != 3)
16731 {
16732 /* There are SIB/displacement bytes. */
16733 if ((sizeflag & AFLAG) || address_mode == mode_64bit)
6c067bbb 16734 {
922d8de8 16735 /* 32/64 bit address mode */
6c067bbb 16736 int base = modrm.rm;
922d8de8
DR
16737
16738 /* Check SIB byte. */
6c067bbb
RM
16739 if (base == 4)
16740 {
16741 FETCH_DATA (the_info, codep + 1);
16742 base = *codep & 7;
16743 /* When decoding the third source, don't increase
16744 bytes_before_imm as this has already been incremented
16745 by one in OP_E_memory while decoding the second
16746 source operand. */
16747 if (opnum == 0)
16748 bytes_before_imm++;
16749 }
16750
16751 /* Don't increase bytes_before_imm when decoding the third source,
16752 it has already been incremented by OP_E_memory while decoding
16753 the second source operand. */
16754 if (opnum == 0)
16755 {
16756 switch (modrm.mod)
16757 {
16758 case 0:
16759 /* When modrm.rm == 5 or modrm.rm == 4 and base in
16760 SIB == 5, there is a 4 byte displacement. */
16761 if (base != 5)
16762 /* No displacement. */
16763 break;
16764 case 2:
16765 /* 4 byte displacement. */
16766 bytes_before_imm += 4;
16767 break;
16768 case 1:
16769 /* 1 byte displacement. */
16770 bytes_before_imm++;
16771 break;
16772 }
16773 }
16774 }
922d8de8 16775 else
02e647f9
SP
16776 {
16777 /* 16 bit address mode */
6c067bbb
RM
16778 /* Don't increase bytes_before_imm when decoding the third source,
16779 it has already been incremented by OP_E_memory while decoding
16780 the second source operand. */
16781 if (opnum == 0)
16782 {
02e647f9
SP
16783 switch (modrm.mod)
16784 {
16785 case 0:
16786 /* When modrm.rm == 6, there is a 2 byte displacement. */
16787 if (modrm.rm != 6)
16788 /* No displacement. */
16789 break;
16790 case 2:
16791 /* 2 byte displacement. */
16792 bytes_before_imm += 2;
16793 break;
16794 case 1:
16795 /* 1 byte displacement: when decoding the third source,
16796 don't increase bytes_before_imm as this has already
16797 been incremented by one in OP_E_memory while decoding
16798 the second source operand. */
16799 if (opnum == 0)
16800 bytes_before_imm++;
ccc5981b 16801
02e647f9
SP
16802 break;
16803 }
922d8de8
DR
16804 }
16805 }
16806 }
16807
16808 FETCH_DATA (the_info, codep + bytes_before_imm + 1);
16809 return codep [bytes_before_imm];
16810}
16811
16812static void
16813OP_EX_VexReg (int bytemode, int sizeflag, int reg)
16814{
b9733481
L
16815 const char **names;
16816
922d8de8
DR
16817 if (reg == -1 && modrm.mod != 3)
16818 {
16819 OP_E_memory (bytemode, sizeflag);
16820 return;
16821 }
16822 else
16823 {
16824 if (reg == -1)
16825 {
16826 reg = modrm.rm;
16827 USED_REX (REX_B);
16828 if (rex & REX_B)
16829 reg += 8;
16830 }
16831 else if (reg > 7 && address_mode != mode_64bit)
16832 BadOp ();
16833 }
16834
16835 switch (vex.length)
16836 {
16837 case 128:
b9733481 16838 names = names_xmm;
922d8de8
DR
16839 break;
16840 case 256:
b9733481 16841 names = names_ymm;
922d8de8
DR
16842 break;
16843 default:
16844 abort ();
16845 }
b9733481 16846 oappend (names[reg]);
922d8de8
DR
16847}
16848
a683cc34
SP
16849static void
16850OP_EX_VexImmW (int bytemode, int sizeflag)
16851{
16852 int reg = -1;
16853 static unsigned char vex_imm8;
16854
16855 if (vex_w_done == 0)
16856 {
16857 vex_w_done = 1;
16858
16859 /* Skip mod/rm byte. */
16860 MODRM_CHECK;
16861 codep++;
16862
16863 vex_imm8 = get_vex_imm8 (sizeflag, 0);
16864
16865 if (vex.w)
16866 reg = vex_imm8 >> 4;
16867
16868 OP_EX_VexReg (bytemode, sizeflag, reg);
16869 }
16870 else if (vex_w_done == 1)
16871 {
16872 vex_w_done = 2;
16873
16874 if (!vex.w)
16875 reg = vex_imm8 >> 4;
16876
16877 OP_EX_VexReg (bytemode, sizeflag, reg);
16878 }
16879 else
16880 {
16881 /* Output the imm8 directly. */
16882 scratchbuf[0] = '$';
16883 print_operand_value (scratchbuf + 1, 1, vex_imm8 & 0xf);
9ce09ba2 16884 oappend_maybe_intel (scratchbuf);
a683cc34
SP
16885 scratchbuf[0] = '\0';
16886 codep++;
16887 }
16888}
16889
5dd85c99
SP
16890static void
16891OP_Vex_2src (int bytemode, int sizeflag)
16892{
16893 if (modrm.mod == 3)
16894 {
b9733481 16895 int reg = modrm.rm;
5dd85c99 16896 USED_REX (REX_B);
b9733481
L
16897 if (rex & REX_B)
16898 reg += 8;
16899 oappend (names_xmm[reg]);
5dd85c99
SP
16900 }
16901 else
16902 {
16903 if (intel_syntax
16904 && (bytemode == v_mode || bytemode == v_swap_mode))
16905 {
16906 bytemode = (prefixes & PREFIX_DATA) ? x_mode : q_mode;
16907 used_prefixes |= (prefixes & PREFIX_DATA);
16908 }
16909 OP_E (bytemode, sizeflag);
16910 }
16911}
16912
16913static void
16914OP_Vex_2src_1 (int bytemode, int sizeflag)
16915{
16916 if (modrm.mod == 3)
16917 {
16918 /* Skip mod/rm byte. */
16919 MODRM_CHECK;
16920 codep++;
16921 }
16922
16923 if (vex.w)
b9733481 16924 oappend (names_xmm[vex.register_specifier]);
5dd85c99
SP
16925 else
16926 OP_Vex_2src (bytemode, sizeflag);
16927}
16928
16929static void
16930OP_Vex_2src_2 (int bytemode, int sizeflag)
16931{
16932 if (vex.w)
16933 OP_Vex_2src (bytemode, sizeflag);
16934 else
b9733481 16935 oappend (names_xmm[vex.register_specifier]);
5dd85c99
SP
16936}
16937
922d8de8
DR
16938static void
16939OP_EX_VexW (int bytemode, int sizeflag)
16940{
16941 int reg = -1;
16942
16943 if (!vex_w_done)
16944 {
16945 vex_w_done = 1;
41effecb
SP
16946
16947 /* Skip mod/rm byte. */
16948 MODRM_CHECK;
16949 codep++;
16950
922d8de8 16951 if (vex.w)
ccc5981b 16952 reg = get_vex_imm8 (sizeflag, 0) >> 4;
922d8de8
DR
16953 }
16954 else
16955 {
16956 if (!vex.w)
ccc5981b 16957 reg = get_vex_imm8 (sizeflag, 1) >> 4;
922d8de8
DR
16958 }
16959
16960 OP_EX_VexReg (bytemode, sizeflag, reg);
16961}
16962
922d8de8
DR
16963static void
16964VEXI4_Fixup (int bytemode ATTRIBUTE_UNUSED,
16965 int sizeflag ATTRIBUTE_UNUSED)
16966{
16967 /* Skip the immediate byte and check for invalid bits. */
16968 FETCH_DATA (the_info, codep + 1);
16969 if (*codep++ & 0xf)
16970 BadOp ();
16971}
16972
c0f3af97
L
16973static void
16974OP_REG_VexI4 (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
16975{
16976 int reg;
b9733481
L
16977 const char **names;
16978
c0f3af97
L
16979 FETCH_DATA (the_info, codep + 1);
16980 reg = *codep++;
16981
16982 if (bytemode != x_mode)
16983 abort ();
16984
16985 if (reg & 0xf)
16986 BadOp ();
16987
16988 reg >>= 4;
dae39acc
L
16989 if (reg > 7 && address_mode != mode_64bit)
16990 BadOp ();
16991
c0f3af97
L
16992 switch (vex.length)
16993 {
16994 case 128:
b9733481 16995 names = names_xmm;
c0f3af97
L
16996 break;
16997 case 256:
b9733481 16998 names = names_ymm;
c0f3af97
L
16999 break;
17000 default:
17001 abort ();
17002 }
b9733481 17003 oappend (names[reg]);
c0f3af97
L
17004}
17005
922d8de8
DR
17006static void
17007OP_XMM_VexW (int bytemode, int sizeflag)
17008{
17009 /* Turn off the REX.W bit since it is used for swapping operands
17010 now. */
17011 rex &= ~REX_W;
17012 OP_XMM (bytemode, sizeflag);
17013}
17014
c0f3af97
L
17015static void
17016OP_EX_Vex (int bytemode, int sizeflag)
17017{
17018 if (modrm.mod != 3)
17019 {
17020 if (vex.register_specifier != 0)
17021 BadOp ();
17022 need_vex_reg = 0;
17023 }
17024 OP_EX (bytemode, sizeflag);
17025}
17026
17027static void
17028OP_XMM_Vex (int bytemode, int sizeflag)
17029{
17030 if (modrm.mod != 3)
17031 {
17032 if (vex.register_specifier != 0)
17033 BadOp ();
17034 need_vex_reg = 0;
17035 }
17036 OP_XMM (bytemode, sizeflag);
17037}
17038
17039static void
17040VZERO_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
17041{
17042 switch (vex.length)
17043 {
17044 case 128:
ea397f5b 17045 mnemonicendp = stpcpy (obuf, "vzeroupper");
c0f3af97
L
17046 break;
17047 case 256:
ea397f5b 17048 mnemonicendp = stpcpy (obuf, "vzeroall");
c0f3af97
L
17049 break;
17050 default:
17051 abort ();
17052 }
17053}
17054
ea397f5b
L
17055static struct op vex_cmp_op[] =
17056{
17057 { STRING_COMMA_LEN ("eq") },
17058 { STRING_COMMA_LEN ("lt") },
17059 { STRING_COMMA_LEN ("le") },
17060 { STRING_COMMA_LEN ("unord") },
17061 { STRING_COMMA_LEN ("neq") },
17062 { STRING_COMMA_LEN ("nlt") },
17063 { STRING_COMMA_LEN ("nle") },
17064 { STRING_COMMA_LEN ("ord") },
17065 { STRING_COMMA_LEN ("eq_uq") },
17066 { STRING_COMMA_LEN ("nge") },
17067 { STRING_COMMA_LEN ("ngt") },
17068 { STRING_COMMA_LEN ("false") },
17069 { STRING_COMMA_LEN ("neq_oq") },
17070 { STRING_COMMA_LEN ("ge") },
17071 { STRING_COMMA_LEN ("gt") },
17072 { STRING_COMMA_LEN ("true") },
17073 { STRING_COMMA_LEN ("eq_os") },
17074 { STRING_COMMA_LEN ("lt_oq") },
17075 { STRING_COMMA_LEN ("le_oq") },
17076 { STRING_COMMA_LEN ("unord_s") },
17077 { STRING_COMMA_LEN ("neq_us") },
17078 { STRING_COMMA_LEN ("nlt_uq") },
17079 { STRING_COMMA_LEN ("nle_uq") },
17080 { STRING_COMMA_LEN ("ord_s") },
17081 { STRING_COMMA_LEN ("eq_us") },
17082 { STRING_COMMA_LEN ("nge_uq") },
17083 { STRING_COMMA_LEN ("ngt_uq") },
17084 { STRING_COMMA_LEN ("false_os") },
17085 { STRING_COMMA_LEN ("neq_os") },
17086 { STRING_COMMA_LEN ("ge_oq") },
17087 { STRING_COMMA_LEN ("gt_oq") },
17088 { STRING_COMMA_LEN ("true_us") },
c0f3af97
L
17089};
17090
17091static void
17092VCMP_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
17093{
17094 unsigned int cmp_type;
17095
17096 FETCH_DATA (the_info, codep + 1);
17097 cmp_type = *codep++ & 0xff;
17098 if (cmp_type < ARRAY_SIZE (vex_cmp_op))
17099 {
17100 char suffix [3];
ea397f5b 17101 char *p = mnemonicendp - 2;
c0f3af97
L
17102 suffix[0] = p[0];
17103 suffix[1] = p[1];
17104 suffix[2] = '\0';
ea397f5b
L
17105 sprintf (p, "%s%s", vex_cmp_op[cmp_type].name, suffix);
17106 mnemonicendp += vex_cmp_op[cmp_type].len;
c0f3af97
L
17107 }
17108 else
17109 {
17110 /* We have a reserved extension byte. Output it directly. */
17111 scratchbuf[0] = '$';
17112 print_operand_value (scratchbuf + 1, 1, cmp_type);
9ce09ba2 17113 oappend_maybe_intel (scratchbuf);
c0f3af97
L
17114 scratchbuf[0] = '\0';
17115 }
17116}
17117
43234a1e
L
17118static void
17119VPCMP_Fixup (int bytemode ATTRIBUTE_UNUSED,
17120 int sizeflag ATTRIBUTE_UNUSED)
17121{
17122 unsigned int cmp_type;
17123
17124 if (!vex.evex)
17125 abort ();
17126
17127 FETCH_DATA (the_info, codep + 1);
17128 cmp_type = *codep++ & 0xff;
17129 /* There are aliases for immediates 0, 1, 2, 4, 5, 6.
17130 If it's the case, print suffix, otherwise - print the immediate. */
17131 if (cmp_type < ARRAY_SIZE (simd_cmp_op)
17132 && cmp_type != 3
17133 && cmp_type != 7)
17134 {
17135 char suffix [3];
17136 char *p = mnemonicendp - 2;
17137
17138 /* vpcmp* can have both one- and two-lettered suffix. */
17139 if (p[0] == 'p')
17140 {
17141 p++;
17142 suffix[0] = p[0];
17143 suffix[1] = '\0';
17144 }
17145 else
17146 {
17147 suffix[0] = p[0];
17148 suffix[1] = p[1];
17149 suffix[2] = '\0';
17150 }
17151
17152 sprintf (p, "%s%s", simd_cmp_op[cmp_type].name, suffix);
17153 mnemonicendp += simd_cmp_op[cmp_type].len;
17154 }
17155 else
17156 {
17157 /* We have a reserved extension byte. Output it directly. */
17158 scratchbuf[0] = '$';
17159 print_operand_value (scratchbuf + 1, 1, cmp_type);
9ce09ba2 17160 oappend_maybe_intel (scratchbuf);
43234a1e
L
17161 scratchbuf[0] = '\0';
17162 }
17163}
17164
ea397f5b
L
17165static const struct op pclmul_op[] =
17166{
17167 { STRING_COMMA_LEN ("lql") },
17168 { STRING_COMMA_LEN ("hql") },
17169 { STRING_COMMA_LEN ("lqh") },
17170 { STRING_COMMA_LEN ("hqh") }
c0f3af97
L
17171};
17172
17173static void
17174PCLMUL_Fixup (int bytemode ATTRIBUTE_UNUSED,
17175 int sizeflag ATTRIBUTE_UNUSED)
17176{
17177 unsigned int pclmul_type;
17178
17179 FETCH_DATA (the_info, codep + 1);
17180 pclmul_type = *codep++ & 0xff;
17181 switch (pclmul_type)
17182 {
17183 case 0x10:
17184 pclmul_type = 2;
17185 break;
17186 case 0x11:
17187 pclmul_type = 3;
17188 break;
17189 default:
17190 break;
7bb15c6f 17191 }
c0f3af97
L
17192 if (pclmul_type < ARRAY_SIZE (pclmul_op))
17193 {
17194 char suffix [4];
ea397f5b 17195 char *p = mnemonicendp - 3;
c0f3af97
L
17196 suffix[0] = p[0];
17197 suffix[1] = p[1];
17198 suffix[2] = p[2];
17199 suffix[3] = '\0';
ea397f5b
L
17200 sprintf (p, "%s%s", pclmul_op[pclmul_type].name, suffix);
17201 mnemonicendp += pclmul_op[pclmul_type].len;
c0f3af97
L
17202 }
17203 else
17204 {
17205 /* We have a reserved extension byte. Output it directly. */
17206 scratchbuf[0] = '$';
17207 print_operand_value (scratchbuf + 1, 1, pclmul_type);
9ce09ba2 17208 oappend_maybe_intel (scratchbuf);
c0f3af97
L
17209 scratchbuf[0] = '\0';
17210 }
17211}
17212
f1f8f695
L
17213static void
17214MOVBE_Fixup (int bytemode, int sizeflag)
17215{
17216 /* Add proper suffix to "movbe". */
ea397f5b 17217 char *p = mnemonicendp;
f1f8f695
L
17218
17219 switch (bytemode)
17220 {
17221 case v_mode:
17222 if (intel_syntax)
ea397f5b 17223 goto skip;
f1f8f695
L
17224
17225 USED_REX (REX_W);
17226 if (sizeflag & SUFFIX_ALWAYS)
17227 {
17228 if (rex & REX_W)
17229 *p++ = 'q';
f1f8f695 17230 else
f16cd0d5
L
17231 {
17232 if (sizeflag & DFLAG)
17233 *p++ = 'l';
17234 else
17235 *p++ = 'w';
17236 used_prefixes |= (prefixes & PREFIX_DATA);
17237 }
f1f8f695 17238 }
f1f8f695
L
17239 break;
17240 default:
17241 oappend (INTERNAL_DISASSEMBLER_ERROR);
17242 break;
17243 }
ea397f5b 17244 mnemonicendp = p;
f1f8f695
L
17245 *p = '\0';
17246
ea397f5b 17247skip:
f1f8f695
L
17248 OP_M (bytemode, sizeflag);
17249}
f88c9eb0
SP
17250
17251static void
17252OP_LWPCB_E (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
17253{
17254 int reg;
17255 const char **names;
17256
17257 /* Skip mod/rm byte. */
17258 MODRM_CHECK;
17259 codep++;
17260
17261 if (vex.w)
17262 names = names64;
f88c9eb0 17263 else
ce7d077e 17264 names = names32;
f88c9eb0
SP
17265
17266 reg = modrm.rm;
17267 USED_REX (REX_B);
17268 if (rex & REX_B)
17269 reg += 8;
17270
17271 oappend (names[reg]);
17272}
17273
17274static void
17275OP_LWP_E (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
17276{
17277 const char **names;
17278
17279 if (vex.w)
17280 names = names64;
f88c9eb0 17281 else
ce7d077e 17282 names = names32;
f88c9eb0
SP
17283
17284 oappend (names[vex.register_specifier]);
17285}
43234a1e
L
17286
17287static void
17288OP_Mask (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
17289{
17290 if (!vex.evex
1ba585e8 17291 || (bytemode != mask_mode && bytemode != mask_bd_mode))
43234a1e
L
17292 abort ();
17293
17294 USED_REX (REX_R);
17295 if ((rex & REX_R) != 0 || !vex.r)
17296 {
17297 BadOp ();
17298 return;
17299 }
17300
17301 oappend (names_mask [modrm.reg]);
17302}
17303
17304static void
17305OP_Rounding (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
17306{
17307 if (!vex.evex
17308 || (bytemode != evex_rounding_mode
17309 && bytemode != evex_sae_mode))
17310 abort ();
17311 if (modrm.mod == 3 && vex.b)
17312 switch (bytemode)
17313 {
17314 case evex_rounding_mode:
17315 oappend (names_rounding[vex.ll]);
17316 break;
17317 case evex_sae_mode:
17318 oappend ("{sae}");
17319 break;
17320 default:
17321 break;
17322 }
17323}
This page took 3.040479 seconds and 4 git commands to generate.