* cli/cli-setshow.c (do_setshow_command): Handle case 'var_filename'
[deliverable/binutils-gdb.git] / opcodes / i386-dis.c
CommitLineData
252b5132 1/* Print i386 instructions for GDB, the GNU debugger.
060d22b0 2 Copyright 1988, 1989, 1991, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
42d5f9c6 3 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
0af1713e 4 Free Software Foundation, Inc.
252b5132 5
9b201bb5 6 This file is part of the GNU opcodes library.
20f0a1fc 7
9b201bb5 8 This library is free software; you can redistribute it and/or modify
20f0a1fc 9 it under the terms of the GNU General Public License as published by
9b201bb5
NC
10 the Free Software Foundation; either version 3, or (at your option)
11 any later version.
20f0a1fc 12
9b201bb5
NC
13 It is distributed in the hope that it will be useful, but WITHOUT
14 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
15 or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
16 License for more details.
20f0a1fc
NC
17
18 You should have received a copy of the GNU General Public License
19 along with this program; if not, write to the Free Software
9b201bb5
NC
20 Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
21 MA 02110-1301, USA. */
22
20f0a1fc
NC
23
24/* 80386 instruction printer by Pace Willisson (pace@prep.ai.mit.edu)
25 July 1988
26 modified by John Hassey (hassey@dg-rtp.dg.com)
27 x86-64 support added by Jan Hubicka (jh@suse.cz)
28 VIA PadLock support by Michal Ludvig (mludvig@suse.cz). */
29
30/* The main tables describing the instructions is essentially a copy
31 of the "Opcode Map" chapter (Appendix A) of the Intel 80386
32 Programmers Manual. Usually, there is a capital letter, followed
33 by a small letter. The capital letter tell the addressing mode,
34 and the small letter tells about the operand size. Refer to
35 the Intel manual for details. */
252b5132 36
252b5132 37#include "sysdep.h"
dabbade6 38#include "dis-asm.h"
252b5132 39#include "opintl.h"
0b1cf022 40#include "opcode/i386.h"
85f10a01 41#include "libiberty.h"
252b5132
RH
42
43#include <setjmp.h>
44
26ca5450
AJ
45static int print_insn (bfd_vma, disassemble_info *);
46static void dofloat (int);
47static void OP_ST (int, int);
48static void OP_STi (int, int);
49static int putop (const char *, int);
50static void oappend (const char *);
51static void append_seg (void);
52static void OP_indirE (int, int);
53static void print_operand_value (char *, int, bfd_vma);
c0f3af97 54static void OP_E_register (int, int);
c1e679ec 55static void OP_E_memory (int, int);
5d669648 56static void print_displacement (char *, bfd_vma);
26ca5450
AJ
57static void OP_E (int, int);
58static void OP_G (int, int);
59static bfd_vma get64 (void);
60static bfd_signed_vma get32 (void);
61static bfd_signed_vma get32s (void);
62static int get16 (void);
63static void set_op (bfd_vma, int);
b844680a 64static void OP_Skip_MODRM (int, int);
26ca5450
AJ
65static void OP_REG (int, int);
66static void OP_IMREG (int, int);
67static void OP_I (int, int);
68static void OP_I64 (int, int);
69static void OP_sI (int, int);
70static void OP_J (int, int);
71static void OP_SEG (int, int);
72static void OP_DIR (int, int);
73static void OP_OFF (int, int);
74static void OP_OFF64 (int, int);
75static void ptr_reg (int, int);
76static void OP_ESreg (int, int);
77static void OP_DSreg (int, int);
78static void OP_C (int, int);
79static void OP_D (int, int);
80static void OP_T (int, int);
6f74c397 81static void OP_R (int, int);
26ca5450
AJ
82static void OP_MMX (int, int);
83static void OP_XMM (int, int);
84static void OP_EM (int, int);
85static void OP_EX (int, int);
4d9567e0
MM
86static void OP_EMC (int,int);
87static void OP_MXC (int,int);
26ca5450
AJ
88static void OP_MS (int, int);
89static void OP_XS (int, int);
cc0ec051 90static void OP_M (int, int);
c0f3af97
L
91static void OP_VEX (int, int);
92static void OP_EX_Vex (int, int);
922d8de8 93static void OP_EX_VexW (int, int);
a683cc34 94static void OP_EX_VexImmW (int, int);
c0f3af97 95static void OP_XMM_Vex (int, int);
922d8de8 96static void OP_XMM_VexW (int, int);
c0f3af97
L
97static void OP_REG_VexI4 (int, int);
98static void PCLMUL_Fixup (int, int);
922d8de8 99static void VEXI4_Fixup (int, int);
c0f3af97
L
100static void VZERO_Fixup (int, int);
101static void VCMP_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);
42164a71
L
111static void HLE_Fixup1 (int, int);
112static void HLE_Fixup2 (int, int);
113static void HLE_Fixup3 (int, int);
f5804c90 114static void CMPXCHG8B_Fixup (int, int);
42903f7f 115static void XMM_Fixup (int, int);
381d071f 116static void CRC32_Fixup (int, int);
eacc9c89 117static void FXSAVE_Fixup (int, int);
f88c9eb0
SP
118static void OP_LWPCB_E (int, int);
119static void OP_LWP_E (int, int);
5dd85c99
SP
120static void OP_Vex_2src_1 (int, int);
121static void OP_Vex_2src_2 (int, int);
c1e679ec 122
f1f8f695 123static void MOVBE_Fixup (int, int);
252b5132 124
6608db57 125struct dis_private {
252b5132
RH
126 /* Points to first byte not fetched. */
127 bfd_byte *max_fetched;
0b1cf022 128 bfd_byte the_buffer[MAX_MNEM_SIZE];
252b5132 129 bfd_vma insn_start;
e396998b 130 int orig_sizeflag;
252b5132
RH
131 jmp_buf bailout;
132};
133
cb712a9e
L
134enum address_mode
135{
136 mode_16bit,
137 mode_32bit,
138 mode_64bit
139};
140
141enum address_mode address_mode;
52b15da3 142
5076851f
ILT
143/* Flags for the prefixes for the current instruction. See below. */
144static int prefixes;
145
52b15da3
JH
146/* REX prefix the current instruction. See below. */
147static int rex;
148/* Bits of REX we've already used. */
149static int rex_used;
d869730d 150/* REX bits in original REX prefix ignored. */
c0f3af97 151static int rex_ignored;
52b15da3
JH
152/* Mark parts used in the REX prefix. When we are testing for
153 empty prefix (for 8bit register REX extension), just mask it
154 out. Otherwise test for REX bit is excuse for existence of REX
155 only in case value is nonzero. */
156#define USED_REX(value) \
157 { \
158 if (value) \
161a04f6
L
159 { \
160 if ((rex & value)) \
161 rex_used |= (value) | REX_OPCODE; \
162 } \
52b15da3 163 else \
161a04f6 164 rex_used |= REX_OPCODE; \
52b15da3
JH
165 }
166
7d421014
ILT
167/* Flags for prefixes which we somehow handled when printing the
168 current instruction. */
169static int used_prefixes;
170
5076851f
ILT
171/* Flags stored in PREFIXES. */
172#define PREFIX_REPZ 1
173#define PREFIX_REPNZ 2
174#define PREFIX_LOCK 4
175#define PREFIX_CS 8
176#define PREFIX_SS 0x10
177#define PREFIX_DS 0x20
178#define PREFIX_ES 0x40
179#define PREFIX_FS 0x80
180#define PREFIX_GS 0x100
181#define PREFIX_DATA 0x200
182#define PREFIX_ADDR 0x400
183#define PREFIX_FWAIT 0x800
184
252b5132
RH
185/* Make sure that bytes from INFO->PRIVATE_DATA->BUFFER (inclusive)
186 to ADDR (exclusive) are valid. Returns 1 for success, longjmps
187 on error. */
188#define FETCH_DATA(info, addr) \
6608db57 189 ((addr) <= ((struct dis_private *) (info->private_data))->max_fetched \
252b5132
RH
190 ? 1 : fetch_data ((info), (addr)))
191
192static int
26ca5450 193fetch_data (struct disassemble_info *info, bfd_byte *addr)
252b5132
RH
194{
195 int status;
6608db57 196 struct dis_private *priv = (struct dis_private *) info->private_data;
252b5132
RH
197 bfd_vma start = priv->insn_start + (priv->max_fetched - priv->the_buffer);
198
0b1cf022 199 if (addr <= priv->the_buffer + MAX_MNEM_SIZE)
272c9217
JB
200 status = (*info->read_memory_func) (start,
201 priv->max_fetched,
202 addr - priv->max_fetched,
203 info);
204 else
205 status = -1;
252b5132
RH
206 if (status != 0)
207 {
7d421014 208 /* If we did manage to read at least one byte, then
db6eb5be
AM
209 print_insn_i386 will do something sensible. Otherwise, print
210 an error. We do that here because this is where we know
211 STATUS. */
7d421014 212 if (priv->max_fetched == priv->the_buffer)
5076851f 213 (*info->memory_error_func) (status, start, info);
252b5132
RH
214 longjmp (priv->bailout, 1);
215 }
216 else
217 priv->max_fetched = addr;
218 return 1;
219}
220
ce518a5f 221#define XX { NULL, 0 }
592d1631 222#define Bad_Opcode NULL, { { NULL, 0 } }
ce518a5f
L
223
224#define Eb { OP_E, b_mode }
b6169b20 225#define EbS { OP_E, b_swap_mode }
ce518a5f 226#define Ev { OP_E, v_mode }
b6169b20 227#define EvS { OP_E, v_swap_mode }
ce518a5f
L
228#define Ed { OP_E, d_mode }
229#define Edq { OP_E, dq_mode }
230#define Edqw { OP_E, dqw_mode }
42903f7f
L
231#define Edqb { OP_E, dqb_mode }
232#define Edqd { OP_E, dqd_mode }
09335d05 233#define Eq { OP_E, q_mode }
ce518a5f
L
234#define indirEv { OP_indirE, stack_v_mode }
235#define indirEp { OP_indirE, f_mode }
236#define stackEv { OP_E, stack_v_mode }
237#define Em { OP_E, m_mode }
238#define Ew { OP_E, w_mode }
239#define M { OP_M, 0 } /* lea, lgdt, etc. */
34b772a6 240#define Ma { OP_M, a_mode }
b844680a 241#define Mb { OP_M, b_mode }
d9a5e5e5 242#define Md { OP_M, d_mode }
f1f8f695 243#define Mo { OP_M, o_mode }
ce518a5f
L
244#define Mp { OP_M, f_mode } /* 32 or 48 bit memory operand for LDS, LES etc */
245#define Mq { OP_M, q_mode }
4ee52178 246#define Mx { OP_M, x_mode }
c0f3af97 247#define Mxmm { OP_M, xmm_mode }
ce518a5f
L
248#define Gb { OP_G, b_mode }
249#define Gv { OP_G, v_mode }
250#define Gd { OP_G, d_mode }
251#define Gdq { OP_G, dq_mode }
252#define Gm { OP_G, m_mode }
253#define Gw { OP_G, w_mode }
6f74c397
L
254#define Rd { OP_R, d_mode }
255#define Rm { OP_R, m_mode }
ce518a5f
L
256#define Ib { OP_I, b_mode }
257#define sIb { OP_sI, b_mode } /* sign extened byte */
e3949f17 258#define sIbT { OP_sI, b_T_mode } /* sign extened byte like 'T' */
ce518a5f 259#define Iv { OP_I, v_mode }
d9e3625e 260#define sIv { OP_sI, v_mode }
ce518a5f
L
261#define Iq { OP_I, q_mode }
262#define Iv64 { OP_I64, v_mode }
263#define Iw { OP_I, w_mode }
264#define I1 { OP_I, const_1_mode }
265#define Jb { OP_J, b_mode }
266#define Jv { OP_J, v_mode }
267#define Cm { OP_C, m_mode }
268#define Dm { OP_D, m_mode }
269#define Td { OP_T, d_mode }
b844680a 270#define Skip_MODRM { OP_Skip_MODRM, 0 }
ce518a5f
L
271
272#define RMeAX { OP_REG, eAX_reg }
273#define RMeBX { OP_REG, eBX_reg }
274#define RMeCX { OP_REG, eCX_reg }
275#define RMeDX { OP_REG, eDX_reg }
276#define RMeSP { OP_REG, eSP_reg }
277#define RMeBP { OP_REG, eBP_reg }
278#define RMeSI { OP_REG, eSI_reg }
279#define RMeDI { OP_REG, eDI_reg }
280#define RMrAX { OP_REG, rAX_reg }
281#define RMrBX { OP_REG, rBX_reg }
282#define RMrCX { OP_REG, rCX_reg }
283#define RMrDX { OP_REG, rDX_reg }
284#define RMrSP { OP_REG, rSP_reg }
285#define RMrBP { OP_REG, rBP_reg }
286#define RMrSI { OP_REG, rSI_reg }
287#define RMrDI { OP_REG, rDI_reg }
288#define RMAL { OP_REG, al_reg }
ce518a5f
L
289#define RMCL { OP_REG, cl_reg }
290#define RMDL { OP_REG, dl_reg }
291#define RMBL { OP_REG, bl_reg }
292#define RMAH { OP_REG, ah_reg }
293#define RMCH { OP_REG, ch_reg }
294#define RMDH { OP_REG, dh_reg }
295#define RMBH { OP_REG, bh_reg }
296#define RMAX { OP_REG, ax_reg }
297#define RMDX { OP_REG, dx_reg }
298
299#define eAX { OP_IMREG, eAX_reg }
300#define eBX { OP_IMREG, eBX_reg }
301#define eCX { OP_IMREG, eCX_reg }
302#define eDX { OP_IMREG, eDX_reg }
303#define eSP { OP_IMREG, eSP_reg }
304#define eBP { OP_IMREG, eBP_reg }
305#define eSI { OP_IMREG, eSI_reg }
306#define eDI { OP_IMREG, eDI_reg }
307#define AL { OP_IMREG, al_reg }
308#define CL { OP_IMREG, cl_reg }
309#define DL { OP_IMREG, dl_reg }
310#define BL { OP_IMREG, bl_reg }
311#define AH { OP_IMREG, ah_reg }
312#define CH { OP_IMREG, ch_reg }
313#define DH { OP_IMREG, dh_reg }
314#define BH { OP_IMREG, bh_reg }
315#define AX { OP_IMREG, ax_reg }
316#define DX { OP_IMREG, dx_reg }
317#define zAX { OP_IMREG, z_mode_ax_reg }
318#define indirDX { OP_IMREG, indir_dx_reg }
319
320#define Sw { OP_SEG, w_mode }
321#define Sv { OP_SEG, v_mode }
322#define Ap { OP_DIR, 0 }
323#define Ob { OP_OFF64, b_mode }
324#define Ov { OP_OFF64, v_mode }
325#define Xb { OP_DSreg, eSI_reg }
326#define Xv { OP_DSreg, eSI_reg }
327#define Xz { OP_DSreg, eSI_reg }
328#define Yb { OP_ESreg, eDI_reg }
329#define Yv { OP_ESreg, eDI_reg }
330#define DSBX { OP_DSreg, eBX_reg }
331
332#define es { OP_REG, es_reg }
333#define ss { OP_REG, ss_reg }
334#define cs { OP_REG, cs_reg }
335#define ds { OP_REG, ds_reg }
336#define fs { OP_REG, fs_reg }
337#define gs { OP_REG, gs_reg }
338
339#define MX { OP_MMX, 0 }
340#define XM { OP_XMM, 0 }
539f890d 341#define XMScalar { OP_XMM, scalar_mode }
6c30d220 342#define XMGatherQ { OP_XMM, vex_vsib_q_w_dq_mode }
c0f3af97 343#define XMM { OP_XMM, xmm_mode }
ce518a5f 344#define EM { OP_EM, v_mode }
b6169b20 345#define EMS { OP_EM, v_swap_mode }
09a2c6cf 346#define EMd { OP_EM, d_mode }
14051056 347#define EMx { OP_EM, x_mode }
8976381e 348#define EXw { OP_EX, w_mode }
09a2c6cf 349#define EXd { OP_EX, d_mode }
539f890d 350#define EXdScalar { OP_EX, d_scalar_mode }
fa99fab2 351#define EXdS { OP_EX, d_swap_mode }
09a2c6cf 352#define EXq { OP_EX, q_mode }
539f890d
L
353#define EXqScalar { OP_EX, q_scalar_mode }
354#define EXqScalarS { OP_EX, q_scalar_swap_mode }
b6169b20 355#define EXqS { OP_EX, q_swap_mode }
09a2c6cf 356#define EXx { OP_EX, x_mode }
b6169b20 357#define EXxS { OP_EX, x_swap_mode }
c0f3af97
L
358#define EXxmm { OP_EX, xmm_mode }
359#define EXxmmq { OP_EX, xmmq_mode }
6c30d220
L
360#define EXxmm_mb { OP_EX, xmm_mb_mode }
361#define EXxmm_mw { OP_EX, xmm_mw_mode }
362#define EXxmm_md { OP_EX, xmm_md_mode }
363#define EXxmm_mq { OP_EX, xmm_mq_mode }
364#define EXxmmdw { OP_EX, xmmdw_mode }
365#define EXxmmqd { OP_EX, xmmqd_mode }
c0f3af97 366#define EXymmq { OP_EX, ymmq_mode }
0bfee649 367#define EXVexWdq { OP_EX, vex_w_dq_mode }
1c480963 368#define EXVexWdqScalar { OP_EX, vex_scalar_w_dq_mode }
ce518a5f
L
369#define MS { OP_MS, v_mode }
370#define XS { OP_XS, v_mode }
09335d05 371#define EMCq { OP_EMC, q_mode }
ce518a5f 372#define MXC { OP_MXC, 0 }
ce518a5f 373#define OPSUF { OP_3DNowSuffix, 0 }
ad19981d 374#define CMP { CMP_Fixup, 0 }
42903f7f 375#define XMM0 { XMM_Fixup, 0 }
eacc9c89 376#define FXSAVE { FXSAVE_Fixup, 0 }
5dd85c99
SP
377#define Vex_2src_1 { OP_Vex_2src_1, 0 }
378#define Vex_2src_2 { OP_Vex_2src_2, 0 }
252b5132 379
c0f3af97 380#define Vex { OP_VEX, vex_mode }
539f890d 381#define VexScalar { OP_VEX, vex_scalar_mode }
6c30d220 382#define VexGatherQ { OP_VEX, vex_vsib_q_w_dq_mode }
c0f3af97
L
383#define Vex128 { OP_VEX, vex128_mode }
384#define Vex256 { OP_VEX, vex256_mode }
cb21baef 385#define VexGdq { OP_VEX, dq_mode }
922d8de8 386#define VexI4 { VEXI4_Fixup, 0}
c0f3af97 387#define EXdVex { OP_EX_Vex, d_mode }
fa99fab2 388#define EXdVexS { OP_EX_Vex, d_swap_mode }
539f890d 389#define EXdVexScalarS { OP_EX_Vex, d_scalar_swap_mode }
c0f3af97 390#define EXqVex { OP_EX_Vex, q_mode }
fa99fab2 391#define EXqVexS { OP_EX_Vex, q_swap_mode }
539f890d 392#define EXqVexScalarS { OP_EX_Vex, q_scalar_swap_mode }
922d8de8
DR
393#define EXVexW { OP_EX_VexW, x_mode }
394#define EXdVexW { OP_EX_VexW, d_mode }
395#define EXqVexW { OP_EX_VexW, q_mode }
a683cc34 396#define EXVexImmW { OP_EX_VexImmW, x_mode }
c0f3af97 397#define XMVex { OP_XMM_Vex, 0 }
539f890d 398#define XMVexScalar { OP_XMM_Vex, scalar_mode }
922d8de8 399#define XMVexW { OP_XMM_VexW, 0 }
c0f3af97
L
400#define XMVexI4 { OP_REG_VexI4, x_mode }
401#define PCLMUL { PCLMUL_Fixup, 0 }
402#define VZERO { VZERO_Fixup, 0 }
403#define VCMP { VCMP_Fixup, 0 }
c0f3af97 404
6c30d220
L
405#define MVexVSIBDWpX { OP_M, vex_vsib_d_w_dq_mode }
406#define MVexVSIBQWpX { OP_M, vex_vsib_q_w_dq_mode }
407
35c52694 408/* Used handle "rep" prefix for string instructions. */
ce518a5f
L
409#define Xbr { REP_Fixup, eSI_reg }
410#define Xvr { REP_Fixup, eSI_reg }
411#define Ybr { REP_Fixup, eDI_reg }
412#define Yvr { REP_Fixup, eDI_reg }
413#define Yzr { REP_Fixup, eDI_reg }
414#define indirDXr { REP_Fixup, indir_dx_reg }
415#define ALr { REP_Fixup, al_reg }
416#define eAXr { REP_Fixup, eAX_reg }
417
42164a71
L
418/* Used handle HLE prefix for lockable instructions. */
419#define Ebh1 { HLE_Fixup1, b_mode }
420#define Evh1 { HLE_Fixup1, v_mode }
421#define Ebh2 { HLE_Fixup2, b_mode }
422#define Evh2 { HLE_Fixup2, v_mode }
423#define Ebh3 { HLE_Fixup3, b_mode }
424#define Evh3 { HLE_Fixup3, v_mode }
425
ce518a5f
L
426#define cond_jump_flag { NULL, cond_jump_mode }
427#define loop_jcxz_flag { NULL, loop_jcxz_mode }
3ffd33cf 428
252b5132 429/* bits in sizeflag */
252b5132 430#define SUFFIX_ALWAYS 4
252b5132
RH
431#define AFLAG 2
432#define DFLAG 1
433
51e7da1b
L
434enum
435{
436 /* byte operand */
437 b_mode = 1,
438 /* byte operand with operand swapped */
3873ba12 439 b_swap_mode,
e3949f17
L
440 /* byte operand, sign extend like 'T' suffix */
441 b_T_mode,
51e7da1b 442 /* operand size depends on prefixes */
3873ba12 443 v_mode,
51e7da1b 444 /* operand size depends on prefixes with operand swapped */
3873ba12 445 v_swap_mode,
51e7da1b 446 /* word operand */
3873ba12 447 w_mode,
51e7da1b 448 /* double word operand */
3873ba12 449 d_mode,
51e7da1b 450 /* double word operand with operand swapped */
3873ba12 451 d_swap_mode,
51e7da1b 452 /* quad word operand */
3873ba12 453 q_mode,
51e7da1b 454 /* quad word operand with operand swapped */
3873ba12 455 q_swap_mode,
51e7da1b 456 /* ten-byte operand */
3873ba12 457 t_mode,
51e7da1b 458 /* 16-byte XMM or 32-byte YMM operand */
3873ba12 459 x_mode,
51e7da1b 460 /* 16-byte XMM or 32-byte YMM operand with operand swapped */
3873ba12 461 x_swap_mode,
51e7da1b 462 /* 16-byte XMM operand */
3873ba12 463 xmm_mode,
51e7da1b 464 /* 16-byte XMM or quad word operand */
3873ba12 465 xmmq_mode,
6c30d220
L
466 /* XMM register or byte memory operand */
467 xmm_mb_mode,
468 /* XMM register or word memory operand */
469 xmm_mw_mode,
470 /* XMM register or double word memory operand */
471 xmm_md_mode,
472 /* XMM register or quad word memory operand */
473 xmm_mq_mode,
474 /* 16-byte XMM, word or double word operand */
475 xmmdw_mode,
476 /* 16-byte XMM, double word or quad word operand */
477 xmmqd_mode,
51e7da1b 478 /* 32-byte YMM or quad word operand */
3873ba12 479 ymmq_mode,
6c30d220
L
480 /* 32-byte YMM or 16-byte word operand */
481 ymmxmm_mode,
51e7da1b 482 /* d_mode in 32bit, q_mode in 64bit mode. */
3873ba12 483 m_mode,
51e7da1b 484 /* pair of v_mode operands */
3873ba12
L
485 a_mode,
486 cond_jump_mode,
487 loop_jcxz_mode,
51e7da1b 488 /* operand size depends on REX prefixes. */
3873ba12 489 dq_mode,
51e7da1b 490 /* registers like dq_mode, memory like w_mode. */
3873ba12 491 dqw_mode,
51e7da1b 492 /* 4- or 6-byte pointer operand */
3873ba12
L
493 f_mode,
494 const_1_mode,
51e7da1b 495 /* v_mode for stack-related opcodes. */
3873ba12 496 stack_v_mode,
51e7da1b 497 /* non-quad operand size depends on prefixes */
3873ba12 498 z_mode,
51e7da1b 499 /* 16-byte operand */
3873ba12 500 o_mode,
51e7da1b 501 /* registers like dq_mode, memory like b_mode. */
3873ba12 502 dqb_mode,
51e7da1b 503 /* registers like dq_mode, memory like d_mode. */
3873ba12 504 dqd_mode,
51e7da1b 505 /* normal vex mode */
3873ba12 506 vex_mode,
51e7da1b 507 /* 128bit vex mode */
3873ba12 508 vex128_mode,
51e7da1b 509 /* 256bit vex mode */
3873ba12 510 vex256_mode,
51e7da1b 511 /* operand size depends on the VEX.W bit. */
3873ba12 512 vex_w_dq_mode,
d55ee72f 513
6c30d220
L
514 /* Similar to vex_w_dq_mode, with VSIB dword indices. */
515 vex_vsib_d_w_dq_mode,
516 /* Similar to vex_w_dq_mode, with VSIB qword indices. */
517 vex_vsib_q_w_dq_mode,
518
539f890d
L
519 /* scalar, ignore vector length. */
520 scalar_mode,
521 /* like d_mode, ignore vector length. */
522 d_scalar_mode,
523 /* like d_swap_mode, ignore vector length. */
524 d_scalar_swap_mode,
525 /* like q_mode, ignore vector length. */
526 q_scalar_mode,
527 /* like q_swap_mode, ignore vector length. */
528 q_scalar_swap_mode,
529 /* like vex_mode, ignore vector length. */
530 vex_scalar_mode,
1c480963
L
531 /* like vex_w_dq_mode, ignore vector length. */
532 vex_scalar_w_dq_mode,
539f890d 533
3873ba12
L
534 es_reg,
535 cs_reg,
536 ss_reg,
537 ds_reg,
538 fs_reg,
539 gs_reg,
d55ee72f 540
3873ba12
L
541 eAX_reg,
542 eCX_reg,
543 eDX_reg,
544 eBX_reg,
545 eSP_reg,
546 eBP_reg,
547 eSI_reg,
548 eDI_reg,
d55ee72f 549
3873ba12
L
550 al_reg,
551 cl_reg,
552 dl_reg,
553 bl_reg,
554 ah_reg,
555 ch_reg,
556 dh_reg,
557 bh_reg,
d55ee72f 558
3873ba12
L
559 ax_reg,
560 cx_reg,
561 dx_reg,
562 bx_reg,
563 sp_reg,
564 bp_reg,
565 si_reg,
566 di_reg,
d55ee72f 567
3873ba12
L
568 rAX_reg,
569 rCX_reg,
570 rDX_reg,
571 rBX_reg,
572 rSP_reg,
573 rBP_reg,
574 rSI_reg,
575 rDI_reg,
d55ee72f 576
3873ba12
L
577 z_mode_ax_reg,
578 indir_dx_reg
51e7da1b 579};
252b5132 580
51e7da1b
L
581enum
582{
583 FLOATCODE = 1,
3873ba12
L
584 USE_REG_TABLE,
585 USE_MOD_TABLE,
586 USE_RM_TABLE,
587 USE_PREFIX_TABLE,
588 USE_X86_64_TABLE,
589 USE_3BYTE_TABLE,
f88c9eb0 590 USE_XOP_8F_TABLE,
3873ba12
L
591 USE_VEX_C4_TABLE,
592 USE_VEX_C5_TABLE,
9e30b8e0
L
593 USE_VEX_LEN_TABLE,
594 USE_VEX_W_TABLE
51e7da1b 595};
6439fc28 596
1ceb70f8 597#define FLOAT NULL, { { NULL, FLOATCODE } }
4efba78c 598
4e7d34a6 599#define DIS386(T, I) NULL, { { NULL, (T)}, { NULL, (I) } }
1ceb70f8
L
600#define REG_TABLE(I) DIS386 (USE_REG_TABLE, (I))
601#define MOD_TABLE(I) DIS386 (USE_MOD_TABLE, (I))
602#define RM_TABLE(I) DIS386 (USE_RM_TABLE, (I))
603#define PREFIX_TABLE(I) DIS386 (USE_PREFIX_TABLE, (I))
4e7d34a6
L
604#define X86_64_TABLE(I) DIS386 (USE_X86_64_TABLE, (I))
605#define THREE_BYTE_TABLE(I) DIS386 (USE_3BYTE_TABLE, (I))
f88c9eb0 606#define XOP_8F_TABLE(I) DIS386 (USE_XOP_8F_TABLE, (I))
c0f3af97
L
607#define VEX_C4_TABLE(I) DIS386 (USE_VEX_C4_TABLE, (I))
608#define VEX_C5_TABLE(I) DIS386 (USE_VEX_C5_TABLE, (I))
609#define VEX_LEN_TABLE(I) DIS386 (USE_VEX_LEN_TABLE, (I))
9e30b8e0 610#define VEX_W_TABLE(I) DIS386 (USE_VEX_W_TABLE, (I))
1ceb70f8 611
51e7da1b
L
612enum
613{
614 REG_80 = 0,
3873ba12
L
615 REG_81,
616 REG_82,
617 REG_8F,
618 REG_C0,
619 REG_C1,
620 REG_C6,
621 REG_C7,
622 REG_D0,
623 REG_D1,
624 REG_D2,
625 REG_D3,
626 REG_F6,
627 REG_F7,
628 REG_FE,
629 REG_FF,
630 REG_0F00,
631 REG_0F01,
632 REG_0F0D,
633 REG_0F18,
634 REG_0F71,
635 REG_0F72,
636 REG_0F73,
637 REG_0FA6,
638 REG_0FA7,
639 REG_0FAE,
640 REG_0FBA,
641 REG_0FC7,
592a252b
L
642 REG_VEX_0F71,
643 REG_VEX_0F72,
644 REG_VEX_0F73,
645 REG_VEX_0FAE,
f12dc422 646 REG_VEX_0F38F3,
f88c9eb0 647 REG_XOP_LWPCB,
2a2a0f38
QN
648 REG_XOP_LWP,
649 REG_XOP_TBM_01,
650 REG_XOP_TBM_02
51e7da1b 651};
1ceb70f8 652
51e7da1b
L
653enum
654{
655 MOD_8D = 0,
42164a71
L
656 MOD_C6_REG_7,
657 MOD_C7_REG_7,
3873ba12
L
658 MOD_0F01_REG_0,
659 MOD_0F01_REG_1,
660 MOD_0F01_REG_2,
661 MOD_0F01_REG_3,
662 MOD_0F01_REG_7,
663 MOD_0F12_PREFIX_0,
664 MOD_0F13,
665 MOD_0F16_PREFIX_0,
666 MOD_0F17,
667 MOD_0F18_REG_0,
668 MOD_0F18_REG_1,
669 MOD_0F18_REG_2,
670 MOD_0F18_REG_3,
671 MOD_0F20,
672 MOD_0F21,
673 MOD_0F22,
674 MOD_0F23,
675 MOD_0F24,
676 MOD_0F26,
677 MOD_0F2B_PREFIX_0,
678 MOD_0F2B_PREFIX_1,
679 MOD_0F2B_PREFIX_2,
680 MOD_0F2B_PREFIX_3,
681 MOD_0F51,
682 MOD_0F71_REG_2,
683 MOD_0F71_REG_4,
684 MOD_0F71_REG_6,
685 MOD_0F72_REG_2,
686 MOD_0F72_REG_4,
687 MOD_0F72_REG_6,
688 MOD_0F73_REG_2,
689 MOD_0F73_REG_3,
690 MOD_0F73_REG_6,
691 MOD_0F73_REG_7,
692 MOD_0FAE_REG_0,
693 MOD_0FAE_REG_1,
694 MOD_0FAE_REG_2,
695 MOD_0FAE_REG_3,
696 MOD_0FAE_REG_4,
697 MOD_0FAE_REG_5,
698 MOD_0FAE_REG_6,
699 MOD_0FAE_REG_7,
700 MOD_0FB2,
701 MOD_0FB4,
702 MOD_0FB5,
703 MOD_0FC7_REG_6,
704 MOD_0FC7_REG_7,
705 MOD_0FD7,
706 MOD_0FE7_PREFIX_2,
707 MOD_0FF0_PREFIX_3,
708 MOD_0F382A_PREFIX_2,
709 MOD_62_32BIT,
710 MOD_C4_32BIT,
711 MOD_C5_32BIT,
592a252b
L
712 MOD_VEX_0F12_PREFIX_0,
713 MOD_VEX_0F13,
714 MOD_VEX_0F16_PREFIX_0,
715 MOD_VEX_0F17,
716 MOD_VEX_0F2B,
717 MOD_VEX_0F50,
718 MOD_VEX_0F71_REG_2,
719 MOD_VEX_0F71_REG_4,
720 MOD_VEX_0F71_REG_6,
721 MOD_VEX_0F72_REG_2,
722 MOD_VEX_0F72_REG_4,
723 MOD_VEX_0F72_REG_6,
724 MOD_VEX_0F73_REG_2,
725 MOD_VEX_0F73_REG_3,
726 MOD_VEX_0F73_REG_6,
727 MOD_VEX_0F73_REG_7,
728 MOD_VEX_0FAE_REG_2,
729 MOD_VEX_0FAE_REG_3,
730 MOD_VEX_0FD7_PREFIX_2,
731 MOD_VEX_0FE7_PREFIX_2,
732 MOD_VEX_0FF0_PREFIX_3,
592a252b
L
733 MOD_VEX_0F381A_PREFIX_2,
734 MOD_VEX_0F382A_PREFIX_2,
735 MOD_VEX_0F382C_PREFIX_2,
736 MOD_VEX_0F382D_PREFIX_2,
737 MOD_VEX_0F382E_PREFIX_2,
6c30d220
L
738 MOD_VEX_0F382F_PREFIX_2,
739 MOD_VEX_0F385A_PREFIX_2,
740 MOD_VEX_0F388C_PREFIX_2,
741 MOD_VEX_0F388E_PREFIX_2,
51e7da1b 742};
1ceb70f8 743
51e7da1b
L
744enum
745{
42164a71
L
746 RM_C6_REG_7 = 0,
747 RM_C7_REG_7,
748 RM_0F01_REG_0,
3873ba12
L
749 RM_0F01_REG_1,
750 RM_0F01_REG_2,
751 RM_0F01_REG_3,
752 RM_0F01_REG_7,
753 RM_0FAE_REG_5,
754 RM_0FAE_REG_6,
755 RM_0FAE_REG_7
51e7da1b 756};
1ceb70f8 757
51e7da1b
L
758enum
759{
760 PREFIX_90 = 0,
3873ba12
L
761 PREFIX_0F10,
762 PREFIX_0F11,
763 PREFIX_0F12,
764 PREFIX_0F16,
765 PREFIX_0F2A,
766 PREFIX_0F2B,
767 PREFIX_0F2C,
768 PREFIX_0F2D,
769 PREFIX_0F2E,
770 PREFIX_0F2F,
771 PREFIX_0F51,
772 PREFIX_0F52,
773 PREFIX_0F53,
774 PREFIX_0F58,
775 PREFIX_0F59,
776 PREFIX_0F5A,
777 PREFIX_0F5B,
778 PREFIX_0F5C,
779 PREFIX_0F5D,
780 PREFIX_0F5E,
781 PREFIX_0F5F,
782 PREFIX_0F60,
783 PREFIX_0F61,
784 PREFIX_0F62,
785 PREFIX_0F6C,
786 PREFIX_0F6D,
787 PREFIX_0F6F,
788 PREFIX_0F70,
789 PREFIX_0F73_REG_3,
790 PREFIX_0F73_REG_7,
791 PREFIX_0F78,
792 PREFIX_0F79,
793 PREFIX_0F7C,
794 PREFIX_0F7D,
795 PREFIX_0F7E,
796 PREFIX_0F7F,
c7b8aa3a
L
797 PREFIX_0FAE_REG_0,
798 PREFIX_0FAE_REG_1,
799 PREFIX_0FAE_REG_2,
800 PREFIX_0FAE_REG_3,
3873ba12 801 PREFIX_0FB8,
f12dc422 802 PREFIX_0FBC,
3873ba12
L
803 PREFIX_0FBD,
804 PREFIX_0FC2,
805 PREFIX_0FC3,
806 PREFIX_0FC7_REG_6,
807 PREFIX_0FD0,
808 PREFIX_0FD6,
809 PREFIX_0FE6,
810 PREFIX_0FE7,
811 PREFIX_0FF0,
812 PREFIX_0FF7,
813 PREFIX_0F3810,
814 PREFIX_0F3814,
815 PREFIX_0F3815,
816 PREFIX_0F3817,
817 PREFIX_0F3820,
818 PREFIX_0F3821,
819 PREFIX_0F3822,
820 PREFIX_0F3823,
821 PREFIX_0F3824,
822 PREFIX_0F3825,
823 PREFIX_0F3828,
824 PREFIX_0F3829,
825 PREFIX_0F382A,
826 PREFIX_0F382B,
827 PREFIX_0F3830,
828 PREFIX_0F3831,
829 PREFIX_0F3832,
830 PREFIX_0F3833,
831 PREFIX_0F3834,
832 PREFIX_0F3835,
833 PREFIX_0F3837,
834 PREFIX_0F3838,
835 PREFIX_0F3839,
836 PREFIX_0F383A,
837 PREFIX_0F383B,
838 PREFIX_0F383C,
839 PREFIX_0F383D,
840 PREFIX_0F383E,
841 PREFIX_0F383F,
842 PREFIX_0F3840,
843 PREFIX_0F3841,
844 PREFIX_0F3880,
845 PREFIX_0F3881,
6c30d220 846 PREFIX_0F3882,
3873ba12
L
847 PREFIX_0F38DB,
848 PREFIX_0F38DC,
849 PREFIX_0F38DD,
850 PREFIX_0F38DE,
851 PREFIX_0F38DF,
852 PREFIX_0F38F0,
853 PREFIX_0F38F1,
e2e1fcde 854 PREFIX_0F38F6,
3873ba12
L
855 PREFIX_0F3A08,
856 PREFIX_0F3A09,
857 PREFIX_0F3A0A,
858 PREFIX_0F3A0B,
859 PREFIX_0F3A0C,
860 PREFIX_0F3A0D,
861 PREFIX_0F3A0E,
862 PREFIX_0F3A14,
863 PREFIX_0F3A15,
864 PREFIX_0F3A16,
865 PREFIX_0F3A17,
866 PREFIX_0F3A20,
867 PREFIX_0F3A21,
868 PREFIX_0F3A22,
869 PREFIX_0F3A40,
870 PREFIX_0F3A41,
871 PREFIX_0F3A42,
872 PREFIX_0F3A44,
873 PREFIX_0F3A60,
874 PREFIX_0F3A61,
875 PREFIX_0F3A62,
876 PREFIX_0F3A63,
877 PREFIX_0F3ADF,
592a252b
L
878 PREFIX_VEX_0F10,
879 PREFIX_VEX_0F11,
880 PREFIX_VEX_0F12,
881 PREFIX_VEX_0F16,
882 PREFIX_VEX_0F2A,
883 PREFIX_VEX_0F2C,
884 PREFIX_VEX_0F2D,
885 PREFIX_VEX_0F2E,
886 PREFIX_VEX_0F2F,
887 PREFIX_VEX_0F51,
888 PREFIX_VEX_0F52,
889 PREFIX_VEX_0F53,
890 PREFIX_VEX_0F58,
891 PREFIX_VEX_0F59,
892 PREFIX_VEX_0F5A,
893 PREFIX_VEX_0F5B,
894 PREFIX_VEX_0F5C,
895 PREFIX_VEX_0F5D,
896 PREFIX_VEX_0F5E,
897 PREFIX_VEX_0F5F,
898 PREFIX_VEX_0F60,
899 PREFIX_VEX_0F61,
900 PREFIX_VEX_0F62,
901 PREFIX_VEX_0F63,
902 PREFIX_VEX_0F64,
903 PREFIX_VEX_0F65,
904 PREFIX_VEX_0F66,
905 PREFIX_VEX_0F67,
906 PREFIX_VEX_0F68,
907 PREFIX_VEX_0F69,
908 PREFIX_VEX_0F6A,
909 PREFIX_VEX_0F6B,
910 PREFIX_VEX_0F6C,
911 PREFIX_VEX_0F6D,
912 PREFIX_VEX_0F6E,
913 PREFIX_VEX_0F6F,
914 PREFIX_VEX_0F70,
915 PREFIX_VEX_0F71_REG_2,
916 PREFIX_VEX_0F71_REG_4,
917 PREFIX_VEX_0F71_REG_6,
918 PREFIX_VEX_0F72_REG_2,
919 PREFIX_VEX_0F72_REG_4,
920 PREFIX_VEX_0F72_REG_6,
921 PREFIX_VEX_0F73_REG_2,
922 PREFIX_VEX_0F73_REG_3,
923 PREFIX_VEX_0F73_REG_6,
924 PREFIX_VEX_0F73_REG_7,
925 PREFIX_VEX_0F74,
926 PREFIX_VEX_0F75,
927 PREFIX_VEX_0F76,
928 PREFIX_VEX_0F77,
929 PREFIX_VEX_0F7C,
930 PREFIX_VEX_0F7D,
931 PREFIX_VEX_0F7E,
932 PREFIX_VEX_0F7F,
933 PREFIX_VEX_0FC2,
934 PREFIX_VEX_0FC4,
935 PREFIX_VEX_0FC5,
936 PREFIX_VEX_0FD0,
937 PREFIX_VEX_0FD1,
938 PREFIX_VEX_0FD2,
939 PREFIX_VEX_0FD3,
940 PREFIX_VEX_0FD4,
941 PREFIX_VEX_0FD5,
942 PREFIX_VEX_0FD6,
943 PREFIX_VEX_0FD7,
944 PREFIX_VEX_0FD8,
945 PREFIX_VEX_0FD9,
946 PREFIX_VEX_0FDA,
947 PREFIX_VEX_0FDB,
948 PREFIX_VEX_0FDC,
949 PREFIX_VEX_0FDD,
950 PREFIX_VEX_0FDE,
951 PREFIX_VEX_0FDF,
952 PREFIX_VEX_0FE0,
953 PREFIX_VEX_0FE1,
954 PREFIX_VEX_0FE2,
955 PREFIX_VEX_0FE3,
956 PREFIX_VEX_0FE4,
957 PREFIX_VEX_0FE5,
958 PREFIX_VEX_0FE6,
959 PREFIX_VEX_0FE7,
960 PREFIX_VEX_0FE8,
961 PREFIX_VEX_0FE9,
962 PREFIX_VEX_0FEA,
963 PREFIX_VEX_0FEB,
964 PREFIX_VEX_0FEC,
965 PREFIX_VEX_0FED,
966 PREFIX_VEX_0FEE,
967 PREFIX_VEX_0FEF,
968 PREFIX_VEX_0FF0,
969 PREFIX_VEX_0FF1,
970 PREFIX_VEX_0FF2,
971 PREFIX_VEX_0FF3,
972 PREFIX_VEX_0FF4,
973 PREFIX_VEX_0FF5,
974 PREFIX_VEX_0FF6,
975 PREFIX_VEX_0FF7,
976 PREFIX_VEX_0FF8,
977 PREFIX_VEX_0FF9,
978 PREFIX_VEX_0FFA,
979 PREFIX_VEX_0FFB,
980 PREFIX_VEX_0FFC,
981 PREFIX_VEX_0FFD,
982 PREFIX_VEX_0FFE,
983 PREFIX_VEX_0F3800,
984 PREFIX_VEX_0F3801,
985 PREFIX_VEX_0F3802,
986 PREFIX_VEX_0F3803,
987 PREFIX_VEX_0F3804,
988 PREFIX_VEX_0F3805,
989 PREFIX_VEX_0F3806,
990 PREFIX_VEX_0F3807,
991 PREFIX_VEX_0F3808,
992 PREFIX_VEX_0F3809,
993 PREFIX_VEX_0F380A,
994 PREFIX_VEX_0F380B,
995 PREFIX_VEX_0F380C,
996 PREFIX_VEX_0F380D,
997 PREFIX_VEX_0F380E,
998 PREFIX_VEX_0F380F,
999 PREFIX_VEX_0F3813,
6c30d220 1000 PREFIX_VEX_0F3816,
592a252b
L
1001 PREFIX_VEX_0F3817,
1002 PREFIX_VEX_0F3818,
1003 PREFIX_VEX_0F3819,
1004 PREFIX_VEX_0F381A,
1005 PREFIX_VEX_0F381C,
1006 PREFIX_VEX_0F381D,
1007 PREFIX_VEX_0F381E,
1008 PREFIX_VEX_0F3820,
1009 PREFIX_VEX_0F3821,
1010 PREFIX_VEX_0F3822,
1011 PREFIX_VEX_0F3823,
1012 PREFIX_VEX_0F3824,
1013 PREFIX_VEX_0F3825,
1014 PREFIX_VEX_0F3828,
1015 PREFIX_VEX_0F3829,
1016 PREFIX_VEX_0F382A,
1017 PREFIX_VEX_0F382B,
1018 PREFIX_VEX_0F382C,
1019 PREFIX_VEX_0F382D,
1020 PREFIX_VEX_0F382E,
1021 PREFIX_VEX_0F382F,
1022 PREFIX_VEX_0F3830,
1023 PREFIX_VEX_0F3831,
1024 PREFIX_VEX_0F3832,
1025 PREFIX_VEX_0F3833,
1026 PREFIX_VEX_0F3834,
1027 PREFIX_VEX_0F3835,
6c30d220 1028 PREFIX_VEX_0F3836,
592a252b
L
1029 PREFIX_VEX_0F3837,
1030 PREFIX_VEX_0F3838,
1031 PREFIX_VEX_0F3839,
1032 PREFIX_VEX_0F383A,
1033 PREFIX_VEX_0F383B,
1034 PREFIX_VEX_0F383C,
1035 PREFIX_VEX_0F383D,
1036 PREFIX_VEX_0F383E,
1037 PREFIX_VEX_0F383F,
1038 PREFIX_VEX_0F3840,
1039 PREFIX_VEX_0F3841,
6c30d220
L
1040 PREFIX_VEX_0F3845,
1041 PREFIX_VEX_0F3846,
1042 PREFIX_VEX_0F3847,
1043 PREFIX_VEX_0F3858,
1044 PREFIX_VEX_0F3859,
1045 PREFIX_VEX_0F385A,
1046 PREFIX_VEX_0F3878,
1047 PREFIX_VEX_0F3879,
1048 PREFIX_VEX_0F388C,
1049 PREFIX_VEX_0F388E,
1050 PREFIX_VEX_0F3890,
1051 PREFIX_VEX_0F3891,
1052 PREFIX_VEX_0F3892,
1053 PREFIX_VEX_0F3893,
592a252b
L
1054 PREFIX_VEX_0F3896,
1055 PREFIX_VEX_0F3897,
1056 PREFIX_VEX_0F3898,
1057 PREFIX_VEX_0F3899,
1058 PREFIX_VEX_0F389A,
1059 PREFIX_VEX_0F389B,
1060 PREFIX_VEX_0F389C,
1061 PREFIX_VEX_0F389D,
1062 PREFIX_VEX_0F389E,
1063 PREFIX_VEX_0F389F,
1064 PREFIX_VEX_0F38A6,
1065 PREFIX_VEX_0F38A7,
1066 PREFIX_VEX_0F38A8,
1067 PREFIX_VEX_0F38A9,
1068 PREFIX_VEX_0F38AA,
1069 PREFIX_VEX_0F38AB,
1070 PREFIX_VEX_0F38AC,
1071 PREFIX_VEX_0F38AD,
1072 PREFIX_VEX_0F38AE,
1073 PREFIX_VEX_0F38AF,
1074 PREFIX_VEX_0F38B6,
1075 PREFIX_VEX_0F38B7,
1076 PREFIX_VEX_0F38B8,
1077 PREFIX_VEX_0F38B9,
1078 PREFIX_VEX_0F38BA,
1079 PREFIX_VEX_0F38BB,
1080 PREFIX_VEX_0F38BC,
1081 PREFIX_VEX_0F38BD,
1082 PREFIX_VEX_0F38BE,
1083 PREFIX_VEX_0F38BF,
1084 PREFIX_VEX_0F38DB,
1085 PREFIX_VEX_0F38DC,
1086 PREFIX_VEX_0F38DD,
1087 PREFIX_VEX_0F38DE,
1088 PREFIX_VEX_0F38DF,
f12dc422
L
1089 PREFIX_VEX_0F38F2,
1090 PREFIX_VEX_0F38F3_REG_1,
1091 PREFIX_VEX_0F38F3_REG_2,
1092 PREFIX_VEX_0F38F3_REG_3,
6c30d220
L
1093 PREFIX_VEX_0F38F5,
1094 PREFIX_VEX_0F38F6,
f12dc422 1095 PREFIX_VEX_0F38F7,
6c30d220
L
1096 PREFIX_VEX_0F3A00,
1097 PREFIX_VEX_0F3A01,
1098 PREFIX_VEX_0F3A02,
592a252b
L
1099 PREFIX_VEX_0F3A04,
1100 PREFIX_VEX_0F3A05,
1101 PREFIX_VEX_0F3A06,
1102 PREFIX_VEX_0F3A08,
1103 PREFIX_VEX_0F3A09,
1104 PREFIX_VEX_0F3A0A,
1105 PREFIX_VEX_0F3A0B,
1106 PREFIX_VEX_0F3A0C,
1107 PREFIX_VEX_0F3A0D,
1108 PREFIX_VEX_0F3A0E,
1109 PREFIX_VEX_0F3A0F,
1110 PREFIX_VEX_0F3A14,
1111 PREFIX_VEX_0F3A15,
1112 PREFIX_VEX_0F3A16,
1113 PREFIX_VEX_0F3A17,
1114 PREFIX_VEX_0F3A18,
1115 PREFIX_VEX_0F3A19,
1116 PREFIX_VEX_0F3A1D,
1117 PREFIX_VEX_0F3A20,
1118 PREFIX_VEX_0F3A21,
1119 PREFIX_VEX_0F3A22,
6c30d220
L
1120 PREFIX_VEX_0F3A38,
1121 PREFIX_VEX_0F3A39,
592a252b
L
1122 PREFIX_VEX_0F3A40,
1123 PREFIX_VEX_0F3A41,
1124 PREFIX_VEX_0F3A42,
1125 PREFIX_VEX_0F3A44,
6c30d220 1126 PREFIX_VEX_0F3A46,
592a252b
L
1127 PREFIX_VEX_0F3A48,
1128 PREFIX_VEX_0F3A49,
1129 PREFIX_VEX_0F3A4A,
1130 PREFIX_VEX_0F3A4B,
1131 PREFIX_VEX_0F3A4C,
1132 PREFIX_VEX_0F3A5C,
1133 PREFIX_VEX_0F3A5D,
1134 PREFIX_VEX_0F3A5E,
1135 PREFIX_VEX_0F3A5F,
1136 PREFIX_VEX_0F3A60,
1137 PREFIX_VEX_0F3A61,
1138 PREFIX_VEX_0F3A62,
1139 PREFIX_VEX_0F3A63,
1140 PREFIX_VEX_0F3A68,
1141 PREFIX_VEX_0F3A69,
1142 PREFIX_VEX_0F3A6A,
1143 PREFIX_VEX_0F3A6B,
1144 PREFIX_VEX_0F3A6C,
1145 PREFIX_VEX_0F3A6D,
1146 PREFIX_VEX_0F3A6E,
1147 PREFIX_VEX_0F3A6F,
1148 PREFIX_VEX_0F3A78,
1149 PREFIX_VEX_0F3A79,
1150 PREFIX_VEX_0F3A7A,
1151 PREFIX_VEX_0F3A7B,
1152 PREFIX_VEX_0F3A7C,
1153 PREFIX_VEX_0F3A7D,
1154 PREFIX_VEX_0F3A7E,
1155 PREFIX_VEX_0F3A7F,
6c30d220
L
1156 PREFIX_VEX_0F3ADF,
1157 PREFIX_VEX_0F3AF0
51e7da1b 1158};
4e7d34a6 1159
51e7da1b
L
1160enum
1161{
1162 X86_64_06 = 0,
3873ba12
L
1163 X86_64_07,
1164 X86_64_0D,
1165 X86_64_16,
1166 X86_64_17,
1167 X86_64_1E,
1168 X86_64_1F,
1169 X86_64_27,
1170 X86_64_2F,
1171 X86_64_37,
1172 X86_64_3F,
1173 X86_64_60,
1174 X86_64_61,
1175 X86_64_62,
1176 X86_64_63,
1177 X86_64_6D,
1178 X86_64_6F,
1179 X86_64_9A,
1180 X86_64_C4,
1181 X86_64_C5,
1182 X86_64_CE,
1183 X86_64_D4,
1184 X86_64_D5,
1185 X86_64_EA,
1186 X86_64_0F01_REG_0,
1187 X86_64_0F01_REG_1,
1188 X86_64_0F01_REG_2,
1189 X86_64_0F01_REG_3
51e7da1b 1190};
4e7d34a6 1191
51e7da1b
L
1192enum
1193{
1194 THREE_BYTE_0F38 = 0,
3873ba12
L
1195 THREE_BYTE_0F3A,
1196 THREE_BYTE_0F7A
51e7da1b 1197};
4e7d34a6 1198
f88c9eb0
SP
1199enum
1200{
5dd85c99
SP
1201 XOP_08 = 0,
1202 XOP_09,
f88c9eb0
SP
1203 XOP_0A
1204};
1205
51e7da1b
L
1206enum
1207{
1208 VEX_0F = 0,
3873ba12
L
1209 VEX_0F38,
1210 VEX_0F3A
51e7da1b 1211};
c0f3af97 1212
51e7da1b
L
1213enum
1214{
592a252b
L
1215 VEX_LEN_0F10_P_1 = 0,
1216 VEX_LEN_0F10_P_3,
1217 VEX_LEN_0F11_P_1,
1218 VEX_LEN_0F11_P_3,
1219 VEX_LEN_0F12_P_0_M_0,
1220 VEX_LEN_0F12_P_0_M_1,
1221 VEX_LEN_0F12_P_2,
1222 VEX_LEN_0F13_M_0,
1223 VEX_LEN_0F16_P_0_M_0,
1224 VEX_LEN_0F16_P_0_M_1,
1225 VEX_LEN_0F16_P_2,
1226 VEX_LEN_0F17_M_0,
1227 VEX_LEN_0F2A_P_1,
1228 VEX_LEN_0F2A_P_3,
1229 VEX_LEN_0F2C_P_1,
1230 VEX_LEN_0F2C_P_3,
1231 VEX_LEN_0F2D_P_1,
1232 VEX_LEN_0F2D_P_3,
1233 VEX_LEN_0F2E_P_0,
1234 VEX_LEN_0F2E_P_2,
1235 VEX_LEN_0F2F_P_0,
1236 VEX_LEN_0F2F_P_2,
1237 VEX_LEN_0F51_P_1,
1238 VEX_LEN_0F51_P_3,
1239 VEX_LEN_0F52_P_1,
1240 VEX_LEN_0F53_P_1,
1241 VEX_LEN_0F58_P_1,
1242 VEX_LEN_0F58_P_3,
1243 VEX_LEN_0F59_P_1,
1244 VEX_LEN_0F59_P_3,
1245 VEX_LEN_0F5A_P_1,
1246 VEX_LEN_0F5A_P_3,
1247 VEX_LEN_0F5C_P_1,
1248 VEX_LEN_0F5C_P_3,
1249 VEX_LEN_0F5D_P_1,
1250 VEX_LEN_0F5D_P_3,
1251 VEX_LEN_0F5E_P_1,
1252 VEX_LEN_0F5E_P_3,
1253 VEX_LEN_0F5F_P_1,
1254 VEX_LEN_0F5F_P_3,
592a252b 1255 VEX_LEN_0F6E_P_2,
592a252b
L
1256 VEX_LEN_0F7E_P_1,
1257 VEX_LEN_0F7E_P_2,
1258 VEX_LEN_0FAE_R_2_M_0,
1259 VEX_LEN_0FAE_R_3_M_0,
1260 VEX_LEN_0FC2_P_1,
1261 VEX_LEN_0FC2_P_3,
1262 VEX_LEN_0FC4_P_2,
1263 VEX_LEN_0FC5_P_2,
592a252b 1264 VEX_LEN_0FD6_P_2,
592a252b 1265 VEX_LEN_0FF7_P_2,
6c30d220
L
1266 VEX_LEN_0F3816_P_2,
1267 VEX_LEN_0F3819_P_2,
592a252b 1268 VEX_LEN_0F381A_P_2_M_0,
6c30d220 1269 VEX_LEN_0F3836_P_2,
592a252b 1270 VEX_LEN_0F3841_P_2,
6c30d220 1271 VEX_LEN_0F385A_P_2_M_0,
592a252b
L
1272 VEX_LEN_0F38DB_P_2,
1273 VEX_LEN_0F38DC_P_2,
1274 VEX_LEN_0F38DD_P_2,
1275 VEX_LEN_0F38DE_P_2,
1276 VEX_LEN_0F38DF_P_2,
f12dc422
L
1277 VEX_LEN_0F38F2_P_0,
1278 VEX_LEN_0F38F3_R_1_P_0,
1279 VEX_LEN_0F38F3_R_2_P_0,
1280 VEX_LEN_0F38F3_R_3_P_0,
6c30d220
L
1281 VEX_LEN_0F38F5_P_0,
1282 VEX_LEN_0F38F5_P_1,
1283 VEX_LEN_0F38F5_P_3,
1284 VEX_LEN_0F38F6_P_3,
f12dc422 1285 VEX_LEN_0F38F7_P_0,
6c30d220
L
1286 VEX_LEN_0F38F7_P_1,
1287 VEX_LEN_0F38F7_P_2,
1288 VEX_LEN_0F38F7_P_3,
1289 VEX_LEN_0F3A00_P_2,
1290 VEX_LEN_0F3A01_P_2,
592a252b
L
1291 VEX_LEN_0F3A06_P_2,
1292 VEX_LEN_0F3A0A_P_2,
1293 VEX_LEN_0F3A0B_P_2,
592a252b
L
1294 VEX_LEN_0F3A14_P_2,
1295 VEX_LEN_0F3A15_P_2,
1296 VEX_LEN_0F3A16_P_2,
1297 VEX_LEN_0F3A17_P_2,
1298 VEX_LEN_0F3A18_P_2,
1299 VEX_LEN_0F3A19_P_2,
1300 VEX_LEN_0F3A20_P_2,
1301 VEX_LEN_0F3A21_P_2,
1302 VEX_LEN_0F3A22_P_2,
6c30d220
L
1303 VEX_LEN_0F3A38_P_2,
1304 VEX_LEN_0F3A39_P_2,
592a252b 1305 VEX_LEN_0F3A41_P_2,
592a252b 1306 VEX_LEN_0F3A44_P_2,
6c30d220 1307 VEX_LEN_0F3A46_P_2,
592a252b
L
1308 VEX_LEN_0F3A60_P_2,
1309 VEX_LEN_0F3A61_P_2,
1310 VEX_LEN_0F3A62_P_2,
1311 VEX_LEN_0F3A63_P_2,
1312 VEX_LEN_0F3A6A_P_2,
1313 VEX_LEN_0F3A6B_P_2,
1314 VEX_LEN_0F3A6E_P_2,
1315 VEX_LEN_0F3A6F_P_2,
1316 VEX_LEN_0F3A7A_P_2,
1317 VEX_LEN_0F3A7B_P_2,
1318 VEX_LEN_0F3A7E_P_2,
1319 VEX_LEN_0F3A7F_P_2,
1320 VEX_LEN_0F3ADF_P_2,
6c30d220 1321 VEX_LEN_0F3AF0_P_3,
592a252b
L
1322 VEX_LEN_0FXOP_09_80,
1323 VEX_LEN_0FXOP_09_81
51e7da1b 1324};
c0f3af97 1325
9e30b8e0
L
1326enum
1327{
592a252b
L
1328 VEX_W_0F10_P_0 = 0,
1329 VEX_W_0F10_P_1,
1330 VEX_W_0F10_P_2,
1331 VEX_W_0F10_P_3,
1332 VEX_W_0F11_P_0,
1333 VEX_W_0F11_P_1,
1334 VEX_W_0F11_P_2,
1335 VEX_W_0F11_P_3,
1336 VEX_W_0F12_P_0_M_0,
1337 VEX_W_0F12_P_0_M_1,
1338 VEX_W_0F12_P_1,
1339 VEX_W_0F12_P_2,
1340 VEX_W_0F12_P_3,
1341 VEX_W_0F13_M_0,
1342 VEX_W_0F14,
1343 VEX_W_0F15,
1344 VEX_W_0F16_P_0_M_0,
1345 VEX_W_0F16_P_0_M_1,
1346 VEX_W_0F16_P_1,
1347 VEX_W_0F16_P_2,
1348 VEX_W_0F17_M_0,
1349 VEX_W_0F28,
1350 VEX_W_0F29,
1351 VEX_W_0F2B_M_0,
1352 VEX_W_0F2E_P_0,
1353 VEX_W_0F2E_P_2,
1354 VEX_W_0F2F_P_0,
1355 VEX_W_0F2F_P_2,
1356 VEX_W_0F50_M_0,
1357 VEX_W_0F51_P_0,
1358 VEX_W_0F51_P_1,
1359 VEX_W_0F51_P_2,
1360 VEX_W_0F51_P_3,
1361 VEX_W_0F52_P_0,
1362 VEX_W_0F52_P_1,
1363 VEX_W_0F53_P_0,
1364 VEX_W_0F53_P_1,
1365 VEX_W_0F58_P_0,
1366 VEX_W_0F58_P_1,
1367 VEX_W_0F58_P_2,
1368 VEX_W_0F58_P_3,
1369 VEX_W_0F59_P_0,
1370 VEX_W_0F59_P_1,
1371 VEX_W_0F59_P_2,
1372 VEX_W_0F59_P_3,
1373 VEX_W_0F5A_P_0,
1374 VEX_W_0F5A_P_1,
1375 VEX_W_0F5A_P_3,
1376 VEX_W_0F5B_P_0,
1377 VEX_W_0F5B_P_1,
1378 VEX_W_0F5B_P_2,
1379 VEX_W_0F5C_P_0,
1380 VEX_W_0F5C_P_1,
1381 VEX_W_0F5C_P_2,
1382 VEX_W_0F5C_P_3,
1383 VEX_W_0F5D_P_0,
1384 VEX_W_0F5D_P_1,
1385 VEX_W_0F5D_P_2,
1386 VEX_W_0F5D_P_3,
1387 VEX_W_0F5E_P_0,
1388 VEX_W_0F5E_P_1,
1389 VEX_W_0F5E_P_2,
1390 VEX_W_0F5E_P_3,
1391 VEX_W_0F5F_P_0,
1392 VEX_W_0F5F_P_1,
1393 VEX_W_0F5F_P_2,
1394 VEX_W_0F5F_P_3,
1395 VEX_W_0F60_P_2,
1396 VEX_W_0F61_P_2,
1397 VEX_W_0F62_P_2,
1398 VEX_W_0F63_P_2,
1399 VEX_W_0F64_P_2,
1400 VEX_W_0F65_P_2,
1401 VEX_W_0F66_P_2,
1402 VEX_W_0F67_P_2,
1403 VEX_W_0F68_P_2,
1404 VEX_W_0F69_P_2,
1405 VEX_W_0F6A_P_2,
1406 VEX_W_0F6B_P_2,
1407 VEX_W_0F6C_P_2,
1408 VEX_W_0F6D_P_2,
1409 VEX_W_0F6F_P_1,
1410 VEX_W_0F6F_P_2,
1411 VEX_W_0F70_P_1,
1412 VEX_W_0F70_P_2,
1413 VEX_W_0F70_P_3,
1414 VEX_W_0F71_R_2_P_2,
1415 VEX_W_0F71_R_4_P_2,
1416 VEX_W_0F71_R_6_P_2,
1417 VEX_W_0F72_R_2_P_2,
1418 VEX_W_0F72_R_4_P_2,
1419 VEX_W_0F72_R_6_P_2,
1420 VEX_W_0F73_R_2_P_2,
1421 VEX_W_0F73_R_3_P_2,
1422 VEX_W_0F73_R_6_P_2,
1423 VEX_W_0F73_R_7_P_2,
1424 VEX_W_0F74_P_2,
1425 VEX_W_0F75_P_2,
1426 VEX_W_0F76_P_2,
1427 VEX_W_0F77_P_0,
1428 VEX_W_0F7C_P_2,
1429 VEX_W_0F7C_P_3,
1430 VEX_W_0F7D_P_2,
1431 VEX_W_0F7D_P_3,
1432 VEX_W_0F7E_P_1,
1433 VEX_W_0F7F_P_1,
1434 VEX_W_0F7F_P_2,
1435 VEX_W_0FAE_R_2_M_0,
1436 VEX_W_0FAE_R_3_M_0,
1437 VEX_W_0FC2_P_0,
1438 VEX_W_0FC2_P_1,
1439 VEX_W_0FC2_P_2,
1440 VEX_W_0FC2_P_3,
1441 VEX_W_0FC4_P_2,
1442 VEX_W_0FC5_P_2,
1443 VEX_W_0FD0_P_2,
1444 VEX_W_0FD0_P_3,
1445 VEX_W_0FD1_P_2,
1446 VEX_W_0FD2_P_2,
1447 VEX_W_0FD3_P_2,
1448 VEX_W_0FD4_P_2,
1449 VEX_W_0FD5_P_2,
1450 VEX_W_0FD6_P_2,
1451 VEX_W_0FD7_P_2_M_1,
1452 VEX_W_0FD8_P_2,
1453 VEX_W_0FD9_P_2,
1454 VEX_W_0FDA_P_2,
1455 VEX_W_0FDB_P_2,
1456 VEX_W_0FDC_P_2,
1457 VEX_W_0FDD_P_2,
1458 VEX_W_0FDE_P_2,
1459 VEX_W_0FDF_P_2,
1460 VEX_W_0FE0_P_2,
1461 VEX_W_0FE1_P_2,
1462 VEX_W_0FE2_P_2,
1463 VEX_W_0FE3_P_2,
1464 VEX_W_0FE4_P_2,
1465 VEX_W_0FE5_P_2,
1466 VEX_W_0FE6_P_1,
1467 VEX_W_0FE6_P_2,
1468 VEX_W_0FE6_P_3,
1469 VEX_W_0FE7_P_2_M_0,
1470 VEX_W_0FE8_P_2,
1471 VEX_W_0FE9_P_2,
1472 VEX_W_0FEA_P_2,
1473 VEX_W_0FEB_P_2,
1474 VEX_W_0FEC_P_2,
1475 VEX_W_0FED_P_2,
1476 VEX_W_0FEE_P_2,
1477 VEX_W_0FEF_P_2,
1478 VEX_W_0FF0_P_3_M_0,
1479 VEX_W_0FF1_P_2,
1480 VEX_W_0FF2_P_2,
1481 VEX_W_0FF3_P_2,
1482 VEX_W_0FF4_P_2,
1483 VEX_W_0FF5_P_2,
1484 VEX_W_0FF6_P_2,
1485 VEX_W_0FF7_P_2,
1486 VEX_W_0FF8_P_2,
1487 VEX_W_0FF9_P_2,
1488 VEX_W_0FFA_P_2,
1489 VEX_W_0FFB_P_2,
1490 VEX_W_0FFC_P_2,
1491 VEX_W_0FFD_P_2,
1492 VEX_W_0FFE_P_2,
1493 VEX_W_0F3800_P_2,
1494 VEX_W_0F3801_P_2,
1495 VEX_W_0F3802_P_2,
1496 VEX_W_0F3803_P_2,
1497 VEX_W_0F3804_P_2,
1498 VEX_W_0F3805_P_2,
1499 VEX_W_0F3806_P_2,
1500 VEX_W_0F3807_P_2,
1501 VEX_W_0F3808_P_2,
1502 VEX_W_0F3809_P_2,
1503 VEX_W_0F380A_P_2,
1504 VEX_W_0F380B_P_2,
1505 VEX_W_0F380C_P_2,
1506 VEX_W_0F380D_P_2,
1507 VEX_W_0F380E_P_2,
1508 VEX_W_0F380F_P_2,
6c30d220 1509 VEX_W_0F3816_P_2,
592a252b 1510 VEX_W_0F3817_P_2,
6c30d220
L
1511 VEX_W_0F3818_P_2,
1512 VEX_W_0F3819_P_2,
592a252b
L
1513 VEX_W_0F381A_P_2_M_0,
1514 VEX_W_0F381C_P_2,
1515 VEX_W_0F381D_P_2,
1516 VEX_W_0F381E_P_2,
1517 VEX_W_0F3820_P_2,
1518 VEX_W_0F3821_P_2,
1519 VEX_W_0F3822_P_2,
1520 VEX_W_0F3823_P_2,
1521 VEX_W_0F3824_P_2,
1522 VEX_W_0F3825_P_2,
1523 VEX_W_0F3828_P_2,
1524 VEX_W_0F3829_P_2,
1525 VEX_W_0F382A_P_2_M_0,
1526 VEX_W_0F382B_P_2,
1527 VEX_W_0F382C_P_2_M_0,
1528 VEX_W_0F382D_P_2_M_0,
1529 VEX_W_0F382E_P_2_M_0,
1530 VEX_W_0F382F_P_2_M_0,
1531 VEX_W_0F3830_P_2,
1532 VEX_W_0F3831_P_2,
1533 VEX_W_0F3832_P_2,
1534 VEX_W_0F3833_P_2,
1535 VEX_W_0F3834_P_2,
1536 VEX_W_0F3835_P_2,
6c30d220 1537 VEX_W_0F3836_P_2,
592a252b
L
1538 VEX_W_0F3837_P_2,
1539 VEX_W_0F3838_P_2,
1540 VEX_W_0F3839_P_2,
1541 VEX_W_0F383A_P_2,
1542 VEX_W_0F383B_P_2,
1543 VEX_W_0F383C_P_2,
1544 VEX_W_0F383D_P_2,
1545 VEX_W_0F383E_P_2,
1546 VEX_W_0F383F_P_2,
1547 VEX_W_0F3840_P_2,
1548 VEX_W_0F3841_P_2,
6c30d220
L
1549 VEX_W_0F3846_P_2,
1550 VEX_W_0F3858_P_2,
1551 VEX_W_0F3859_P_2,
1552 VEX_W_0F385A_P_2_M_0,
1553 VEX_W_0F3878_P_2,
1554 VEX_W_0F3879_P_2,
592a252b
L
1555 VEX_W_0F38DB_P_2,
1556 VEX_W_0F38DC_P_2,
1557 VEX_W_0F38DD_P_2,
1558 VEX_W_0F38DE_P_2,
1559 VEX_W_0F38DF_P_2,
6c30d220
L
1560 VEX_W_0F3A00_P_2,
1561 VEX_W_0F3A01_P_2,
1562 VEX_W_0F3A02_P_2,
592a252b
L
1563 VEX_W_0F3A04_P_2,
1564 VEX_W_0F3A05_P_2,
1565 VEX_W_0F3A06_P_2,
1566 VEX_W_0F3A08_P_2,
1567 VEX_W_0F3A09_P_2,
1568 VEX_W_0F3A0A_P_2,
1569 VEX_W_0F3A0B_P_2,
1570 VEX_W_0F3A0C_P_2,
1571 VEX_W_0F3A0D_P_2,
1572 VEX_W_0F3A0E_P_2,
1573 VEX_W_0F3A0F_P_2,
1574 VEX_W_0F3A14_P_2,
1575 VEX_W_0F3A15_P_2,
1576 VEX_W_0F3A18_P_2,
1577 VEX_W_0F3A19_P_2,
1578 VEX_W_0F3A20_P_2,
1579 VEX_W_0F3A21_P_2,
6c30d220
L
1580 VEX_W_0F3A38_P_2,
1581 VEX_W_0F3A39_P_2,
592a252b
L
1582 VEX_W_0F3A40_P_2,
1583 VEX_W_0F3A41_P_2,
1584 VEX_W_0F3A42_P_2,
1585 VEX_W_0F3A44_P_2,
6c30d220 1586 VEX_W_0F3A46_P_2,
592a252b
L
1587 VEX_W_0F3A48_P_2,
1588 VEX_W_0F3A49_P_2,
1589 VEX_W_0F3A4A_P_2,
1590 VEX_W_0F3A4B_P_2,
1591 VEX_W_0F3A4C_P_2,
1592 VEX_W_0F3A60_P_2,
1593 VEX_W_0F3A61_P_2,
1594 VEX_W_0F3A62_P_2,
1595 VEX_W_0F3A63_P_2,
1596 VEX_W_0F3ADF_P_2
9e30b8e0
L
1597};
1598
26ca5450 1599typedef void (*op_rtn) (int bytemode, int sizeflag);
252b5132
RH
1600
1601struct dis386 {
2da11e11 1602 const char *name;
ce518a5f
L
1603 struct
1604 {
1605 op_rtn rtn;
1606 int bytemode;
1607 } op[MAX_OPERANDS];
252b5132
RH
1608};
1609
1610/* Upper case letters in the instruction names here are macros.
1611 'A' => print 'b' if no register operands or suffix_always is true
1612 'B' => print 'b' if suffix_always is true
9306ca4a 1613 'C' => print 's' or 'l' ('w' or 'd' in Intel mode) depending on operand
98b528ac 1614 size prefix
ed7841b3 1615 'D' => print 'w' if no register operands or 'w', 'l' or 'q', if
98b528ac 1616 suffix_always is true
252b5132 1617 'E' => print 'e' if 32-bit form of jcxz
3ffd33cf 1618 'F' => print 'w' or 'l' depending on address size prefix (loop insns)
52fd6d94 1619 'G' => print 'w' or 'l' depending on operand size prefix (i/o insns)
5dd0794d 1620 'H' => print ",pt" or ",pn" branch hint
9306ca4a 1621 'I' => honor following macro letter even in Intel mode (implemented only
98b528ac 1622 for some of the macro letters)
9306ca4a 1623 'J' => print 'l'
42903f7f 1624 'K' => print 'd' or 'q' if rex prefix is present.
252b5132 1625 'L' => print 'l' if suffix_always is true
9d141669 1626 'M' => print 'r' if intel_mnemonic is false.
252b5132 1627 'N' => print 'n' if instruction has no wait "prefix"
a35ca55a 1628 'O' => print 'd' or 'o' (or 'q' in Intel mode)
52b15da3 1629 'P' => print 'w', 'l' or 'q' if instruction has an operand size prefix,
98b528ac
L
1630 or suffix_always is true. print 'q' if rex prefix is present.
1631 'Q' => print 'w', 'l' or 'q' for memory operand or suffix_always
1632 is true
a35ca55a 1633 'R' => print 'w', 'l' or 'q' ('d' for 'l' and 'e' in Intel mode)
52b15da3 1634 'S' => print 'w', 'l' or 'q' if suffix_always is true
6439fc28
AM
1635 'T' => print 'q' in 64bit mode and behave as 'P' otherwise
1636 'U' => print 'q' in 64bit mode and behave as 'Q' otherwise
1a114b12 1637 'V' => print 'q' in 64bit mode and behave as 'S' otherwise
a35ca55a 1638 'W' => print 'b', 'w' or 'l' ('d' in Intel mode)
9306ca4a 1639 'X' => print 's', 'd' depending on data16 prefix (for XMM)
8a72226a
L
1640 'Y' => 'q' if instruction has an REX 64bit overwrite prefix and
1641 suffix_always is true.
6dd5059a 1642 'Z' => print 'q' in 64bit mode and behave as 'L' otherwise
9d141669 1643 '!' => change condition from true to false or from false to true.
98b528ac
L
1644 '%' => add 1 upper case letter to the macro.
1645
1646 2 upper case letter macros:
c0f3af97
L
1647 "XY" => print 'x' or 'y' if no register operands or suffix_always
1648 is true.
4b06377f
L
1649 "XW" => print 's', 'd' depending on the VEX.W bit (for FMA)
1650 "LQ" => print 'l' ('d' in Intel mode) or 'q' for memory operand
98b528ac 1651 or suffix_always is true
4b06377f
L
1652 "LB" => print "abs" in 64bit mode and behave as 'B' otherwise
1653 "LS" => print "abs" in 64bit mode and behave as 'S' otherwise
1654 "LV" => print "abs" for 64bit operand and behave as 'S' otherwise
6c30d220 1655 "LW" => print 'd', 'q' depending on the VEX.W bit
52b15da3 1656
6439fc28
AM
1657 Many of the above letters print nothing in Intel mode. See "putop"
1658 for the details.
52b15da3 1659
6439fc28 1660 Braces '{' and '}', and vertical bars '|', indicate alternative
7c52e0e8 1661 mnemonic strings for AT&T and Intel. */
252b5132 1662
6439fc28 1663static const struct dis386 dis386[] = {
252b5132 1664 /* 00 */
42164a71
L
1665 { "addB", { Ebh1, Gb } },
1666 { "addS", { Evh1, Gv } },
c7532693
L
1667 { "addB", { Gb, EbS } },
1668 { "addS", { Gv, EvS } },
ce518a5f
L
1669 { "addB", { AL, Ib } },
1670 { "addS", { eAX, Iv } },
4e7d34a6
L
1671 { X86_64_TABLE (X86_64_06) },
1672 { X86_64_TABLE (X86_64_07) },
252b5132 1673 /* 08 */
42164a71
L
1674 { "orB", { Ebh1, Gb } },
1675 { "orS", { Evh1, Gv } },
c7532693
L
1676 { "orB", { Gb, EbS } },
1677 { "orS", { Gv, EvS } },
ce518a5f
L
1678 { "orB", { AL, Ib } },
1679 { "orS", { eAX, Iv } },
4e7d34a6 1680 { X86_64_TABLE (X86_64_0D) },
592d1631 1681 { Bad_Opcode }, /* 0x0f extended opcode escape */
252b5132 1682 /* 10 */
42164a71
L
1683 { "adcB", { Ebh1, Gb } },
1684 { "adcS", { Evh1, Gv } },
c7532693
L
1685 { "adcB", { Gb, EbS } },
1686 { "adcS", { Gv, EvS } },
ce518a5f
L
1687 { "adcB", { AL, Ib } },
1688 { "adcS", { eAX, Iv } },
4e7d34a6
L
1689 { X86_64_TABLE (X86_64_16) },
1690 { X86_64_TABLE (X86_64_17) },
252b5132 1691 /* 18 */
42164a71
L
1692 { "sbbB", { Ebh1, Gb } },
1693 { "sbbS", { Evh1, Gv } },
c7532693
L
1694 { "sbbB", { Gb, EbS } },
1695 { "sbbS", { Gv, EvS } },
ce518a5f
L
1696 { "sbbB", { AL, Ib } },
1697 { "sbbS", { eAX, Iv } },
4e7d34a6
L
1698 { X86_64_TABLE (X86_64_1E) },
1699 { X86_64_TABLE (X86_64_1F) },
252b5132 1700 /* 20 */
42164a71
L
1701 { "andB", { Ebh1, Gb } },
1702 { "andS", { Evh1, Gv } },
c7532693
L
1703 { "andB", { Gb, EbS } },
1704 { "andS", { Gv, EvS } },
ce518a5f
L
1705 { "andB", { AL, Ib } },
1706 { "andS", { eAX, Iv } },
592d1631 1707 { Bad_Opcode }, /* SEG ES prefix */
4e7d34a6 1708 { X86_64_TABLE (X86_64_27) },
252b5132 1709 /* 28 */
42164a71
L
1710 { "subB", { Ebh1, Gb } },
1711 { "subS", { Evh1, Gv } },
c7532693
L
1712 { "subB", { Gb, EbS } },
1713 { "subS", { Gv, EvS } },
ce518a5f
L
1714 { "subB", { AL, Ib } },
1715 { "subS", { eAX, Iv } },
592d1631 1716 { Bad_Opcode }, /* SEG CS prefix */
4e7d34a6 1717 { X86_64_TABLE (X86_64_2F) },
252b5132 1718 /* 30 */
42164a71
L
1719 { "xorB", { Ebh1, Gb } },
1720 { "xorS", { Evh1, Gv } },
c7532693
L
1721 { "xorB", { Gb, EbS } },
1722 { "xorS", { Gv, EvS } },
ce518a5f
L
1723 { "xorB", { AL, Ib } },
1724 { "xorS", { eAX, Iv } },
592d1631 1725 { Bad_Opcode }, /* SEG SS prefix */
4e7d34a6 1726 { X86_64_TABLE (X86_64_37) },
252b5132 1727 /* 38 */
ce518a5f
L
1728 { "cmpB", { Eb, Gb } },
1729 { "cmpS", { Ev, Gv } },
c7532693
L
1730 { "cmpB", { Gb, EbS } },
1731 { "cmpS", { Gv, EvS } },
ce518a5f
L
1732 { "cmpB", { AL, Ib } },
1733 { "cmpS", { eAX, Iv } },
592d1631 1734 { Bad_Opcode }, /* SEG DS prefix */
4e7d34a6 1735 { X86_64_TABLE (X86_64_3F) },
252b5132 1736 /* 40 */
ce518a5f
L
1737 { "inc{S|}", { RMeAX } },
1738 { "inc{S|}", { RMeCX } },
1739 { "inc{S|}", { RMeDX } },
1740 { "inc{S|}", { RMeBX } },
1741 { "inc{S|}", { RMeSP } },
1742 { "inc{S|}", { RMeBP } },
1743 { "inc{S|}", { RMeSI } },
1744 { "inc{S|}", { RMeDI } },
252b5132 1745 /* 48 */
ce518a5f
L
1746 { "dec{S|}", { RMeAX } },
1747 { "dec{S|}", { RMeCX } },
1748 { "dec{S|}", { RMeDX } },
1749 { "dec{S|}", { RMeBX } },
1750 { "dec{S|}", { RMeSP } },
1751 { "dec{S|}", { RMeBP } },
1752 { "dec{S|}", { RMeSI } },
1753 { "dec{S|}", { RMeDI } },
252b5132 1754 /* 50 */
ce518a5f
L
1755 { "pushV", { RMrAX } },
1756 { "pushV", { RMrCX } },
1757 { "pushV", { RMrDX } },
1758 { "pushV", { RMrBX } },
1759 { "pushV", { RMrSP } },
1760 { "pushV", { RMrBP } },
1761 { "pushV", { RMrSI } },
1762 { "pushV", { RMrDI } },
252b5132 1763 /* 58 */
ce518a5f
L
1764 { "popV", { RMrAX } },
1765 { "popV", { RMrCX } },
1766 { "popV", { RMrDX } },
1767 { "popV", { RMrBX } },
1768 { "popV", { RMrSP } },
1769 { "popV", { RMrBP } },
1770 { "popV", { RMrSI } },
1771 { "popV", { RMrDI } },
252b5132 1772 /* 60 */
4e7d34a6
L
1773 { X86_64_TABLE (X86_64_60) },
1774 { X86_64_TABLE (X86_64_61) },
1775 { X86_64_TABLE (X86_64_62) },
1776 { X86_64_TABLE (X86_64_63) },
592d1631
L
1777 { Bad_Opcode }, /* seg fs */
1778 { Bad_Opcode }, /* seg gs */
1779 { Bad_Opcode }, /* op size prefix */
1780 { Bad_Opcode }, /* adr size prefix */
252b5132 1781 /* 68 */
d9e3625e 1782 { "pushT", { sIv } },
ce518a5f 1783 { "imulS", { Gv, Ev, Iv } },
e3949f17 1784 { "pushT", { sIbT } },
ce518a5f 1785 { "imulS", { Gv, Ev, sIb } },
7c52e0e8 1786 { "ins{b|}", { Ybr, indirDX } },
4e7d34a6 1787 { X86_64_TABLE (X86_64_6D) },
7c52e0e8 1788 { "outs{b|}", { indirDXr, Xb } },
4e7d34a6 1789 { X86_64_TABLE (X86_64_6F) },
252b5132 1790 /* 70 */
ce518a5f
L
1791 { "joH", { Jb, XX, cond_jump_flag } },
1792 { "jnoH", { Jb, XX, cond_jump_flag } },
1793 { "jbH", { Jb, XX, cond_jump_flag } },
1794 { "jaeH", { Jb, XX, cond_jump_flag } },
1795 { "jeH", { Jb, XX, cond_jump_flag } },
1796 { "jneH", { Jb, XX, cond_jump_flag } },
1797 { "jbeH", { Jb, XX, cond_jump_flag } },
1798 { "jaH", { Jb, XX, cond_jump_flag } },
252b5132 1799 /* 78 */
ce518a5f
L
1800 { "jsH", { Jb, XX, cond_jump_flag } },
1801 { "jnsH", { Jb, XX, cond_jump_flag } },
1802 { "jpH", { Jb, XX, cond_jump_flag } },
1803 { "jnpH", { Jb, XX, cond_jump_flag } },
1804 { "jlH", { Jb, XX, cond_jump_flag } },
1805 { "jgeH", { Jb, XX, cond_jump_flag } },
1806 { "jleH", { Jb, XX, cond_jump_flag } },
1807 { "jgH", { Jb, XX, cond_jump_flag } },
252b5132 1808 /* 80 */
1ceb70f8
L
1809 { REG_TABLE (REG_80) },
1810 { REG_TABLE (REG_81) },
592d1631 1811 { Bad_Opcode },
1ceb70f8 1812 { REG_TABLE (REG_82) },
ce518a5f
L
1813 { "testB", { Eb, Gb } },
1814 { "testS", { Ev, Gv } },
42164a71
L
1815 { "xchgB", { Ebh2, Gb } },
1816 { "xchgS", { Evh2, Gv } },
252b5132 1817 /* 88 */
42164a71
L
1818 { "movB", { Ebh3, Gb } },
1819 { "movS", { Evh3, Gv } },
b6169b20
L
1820 { "movB", { Gb, EbS } },
1821 { "movS", { Gv, EvS } },
ce518a5f 1822 { "movD", { Sv, Sw } },
1ceb70f8 1823 { MOD_TABLE (MOD_8D) },
ce518a5f 1824 { "movD", { Sw, Sv } },
1ceb70f8 1825 { REG_TABLE (REG_8F) },
252b5132 1826 /* 90 */
1ceb70f8 1827 { PREFIX_TABLE (PREFIX_90) },
ce518a5f
L
1828 { "xchgS", { RMeCX, eAX } },
1829 { "xchgS", { RMeDX, eAX } },
1830 { "xchgS", { RMeBX, eAX } },
1831 { "xchgS", { RMeSP, eAX } },
1832 { "xchgS", { RMeBP, eAX } },
1833 { "xchgS", { RMeSI, eAX } },
1834 { "xchgS", { RMeDI, eAX } },
252b5132 1835 /* 98 */
7c52e0e8
L
1836 { "cW{t|}R", { XX } },
1837 { "cR{t|}O", { XX } },
4e7d34a6 1838 { X86_64_TABLE (X86_64_9A) },
592d1631 1839 { Bad_Opcode }, /* fwait */
ce518a5f
L
1840 { "pushfT", { XX } },
1841 { "popfT", { XX } },
7c52e0e8
L
1842 { "sahf", { XX } },
1843 { "lahf", { XX } },
252b5132 1844 /* a0 */
4b06377f
L
1845 { "mov%LB", { AL, Ob } },
1846 { "mov%LS", { eAX, Ov } },
1847 { "mov%LB", { Ob, AL } },
1848 { "mov%LS", { Ov, eAX } },
7c52e0e8
L
1849 { "movs{b|}", { Ybr, Xb } },
1850 { "movs{R|}", { Yvr, Xv } },
1851 { "cmps{b|}", { Xb, Yb } },
1852 { "cmps{R|}", { Xv, Yv } },
252b5132 1853 /* a8 */
ce518a5f
L
1854 { "testB", { AL, Ib } },
1855 { "testS", { eAX, Iv } },
1856 { "stosB", { Ybr, AL } },
1857 { "stosS", { Yvr, eAX } },
1858 { "lodsB", { ALr, Xb } },
1859 { "lodsS", { eAXr, Xv } },
1860 { "scasB", { AL, Yb } },
1861 { "scasS", { eAX, Yv } },
252b5132 1862 /* b0 */
ce518a5f
L
1863 { "movB", { RMAL, Ib } },
1864 { "movB", { RMCL, Ib } },
1865 { "movB", { RMDL, Ib } },
1866 { "movB", { RMBL, Ib } },
1867 { "movB", { RMAH, Ib } },
1868 { "movB", { RMCH, Ib } },
1869 { "movB", { RMDH, Ib } },
1870 { "movB", { RMBH, Ib } },
252b5132 1871 /* b8 */
4b06377f
L
1872 { "mov%LV", { RMeAX, Iv64 } },
1873 { "mov%LV", { RMeCX, Iv64 } },
1874 { "mov%LV", { RMeDX, Iv64 } },
1875 { "mov%LV", { RMeBX, Iv64 } },
1876 { "mov%LV", { RMeSP, Iv64 } },
1877 { "mov%LV", { RMeBP, Iv64 } },
1878 { "mov%LV", { RMeSI, Iv64 } },
1879 { "mov%LV", { RMeDI, Iv64 } },
252b5132 1880 /* c0 */
1ceb70f8
L
1881 { REG_TABLE (REG_C0) },
1882 { REG_TABLE (REG_C1) },
ce518a5f
L
1883 { "retT", { Iw } },
1884 { "retT", { XX } },
4e7d34a6
L
1885 { X86_64_TABLE (X86_64_C4) },
1886 { X86_64_TABLE (X86_64_C5) },
1ceb70f8
L
1887 { REG_TABLE (REG_C6) },
1888 { REG_TABLE (REG_C7) },
252b5132 1889 /* c8 */
ce518a5f
L
1890 { "enterT", { Iw, Ib } },
1891 { "leaveT", { XX } },
ddab3d59
JB
1892 { "Jret{|f}P", { Iw } },
1893 { "Jret{|f}P", { XX } },
ce518a5f
L
1894 { "int3", { XX } },
1895 { "int", { Ib } },
4e7d34a6 1896 { X86_64_TABLE (X86_64_CE) },
ce518a5f 1897 { "iretP", { XX } },
252b5132 1898 /* d0 */
1ceb70f8
L
1899 { REG_TABLE (REG_D0) },
1900 { REG_TABLE (REG_D1) },
1901 { REG_TABLE (REG_D2) },
1902 { REG_TABLE (REG_D3) },
4e7d34a6
L
1903 { X86_64_TABLE (X86_64_D4) },
1904 { X86_64_TABLE (X86_64_D5) },
592d1631 1905 { Bad_Opcode },
ce518a5f 1906 { "xlat", { DSBX } },
252b5132
RH
1907 /* d8 */
1908 { FLOAT },
1909 { FLOAT },
1910 { FLOAT },
1911 { FLOAT },
1912 { FLOAT },
1913 { FLOAT },
1914 { FLOAT },
1915 { FLOAT },
1916 /* e0 */
ce518a5f
L
1917 { "loopneFH", { Jb, XX, loop_jcxz_flag } },
1918 { "loopeFH", { Jb, XX, loop_jcxz_flag } },
1919 { "loopFH", { Jb, XX, loop_jcxz_flag } },
1920 { "jEcxzH", { Jb, XX, loop_jcxz_flag } },
1921 { "inB", { AL, Ib } },
1922 { "inG", { zAX, Ib } },
1923 { "outB", { Ib, AL } },
1924 { "outG", { Ib, zAX } },
252b5132 1925 /* e8 */
ce518a5f
L
1926 { "callT", { Jv } },
1927 { "jmpT", { Jv } },
4e7d34a6 1928 { X86_64_TABLE (X86_64_EA) },
ce518a5f
L
1929 { "jmp", { Jb } },
1930 { "inB", { AL, indirDX } },
1931 { "inG", { zAX, indirDX } },
1932 { "outB", { indirDX, AL } },
1933 { "outG", { indirDX, zAX } },
252b5132 1934 /* f0 */
592d1631 1935 { Bad_Opcode }, /* lock prefix */
ce518a5f 1936 { "icebp", { XX } },
592d1631
L
1937 { Bad_Opcode }, /* repne */
1938 { Bad_Opcode }, /* repz */
ce518a5f
L
1939 { "hlt", { XX } },
1940 { "cmc", { XX } },
1ceb70f8
L
1941 { REG_TABLE (REG_F6) },
1942 { REG_TABLE (REG_F7) },
252b5132 1943 /* f8 */
ce518a5f
L
1944 { "clc", { XX } },
1945 { "stc", { XX } },
1946 { "cli", { XX } },
1947 { "sti", { XX } },
1948 { "cld", { XX } },
1949 { "std", { XX } },
1ceb70f8
L
1950 { REG_TABLE (REG_FE) },
1951 { REG_TABLE (REG_FF) },
252b5132
RH
1952};
1953
6439fc28 1954static const struct dis386 dis386_twobyte[] = {
252b5132 1955 /* 00 */
1ceb70f8
L
1956 { REG_TABLE (REG_0F00 ) },
1957 { REG_TABLE (REG_0F01 ) },
ce518a5f
L
1958 { "larS", { Gv, Ew } },
1959 { "lslS", { Gv, Ew } },
592d1631 1960 { Bad_Opcode },
ce518a5f
L
1961 { "syscall", { XX } },
1962 { "clts", { XX } },
1963 { "sysretP", { XX } },
252b5132 1964 /* 08 */
ce518a5f
L
1965 { "invd", { XX } },
1966 { "wbinvd", { XX } },
592d1631 1967 { Bad_Opcode },
b414985b 1968 { "ud2", { XX } },
592d1631 1969 { Bad_Opcode },
b5b1fc4f 1970 { REG_TABLE (REG_0F0D) },
ce518a5f
L
1971 { "femms", { XX } },
1972 { "", { MX, EM, OPSUF } }, /* See OP_3DNowSuffix. */
252b5132 1973 /* 10 */
1ceb70f8
L
1974 { PREFIX_TABLE (PREFIX_0F10) },
1975 { PREFIX_TABLE (PREFIX_0F11) },
1976 { PREFIX_TABLE (PREFIX_0F12) },
1977 { MOD_TABLE (MOD_0F13) },
f2a421c4
L
1978 { "unpcklpX", { XM, EXx } },
1979 { "unpckhpX", { XM, EXx } },
1ceb70f8
L
1980 { PREFIX_TABLE (PREFIX_0F16) },
1981 { MOD_TABLE (MOD_0F17) },
252b5132 1982 /* 18 */
1ceb70f8 1983 { REG_TABLE (REG_0F18) },
b5b1fc4f
L
1984 { "nopQ", { Ev } },
1985 { "nopQ", { Ev } },
1986 { "nopQ", { Ev } },
1987 { "nopQ", { Ev } },
1988 { "nopQ", { Ev } },
1989 { "nopQ", { Ev } },
ce518a5f 1990 { "nopQ", { Ev } },
252b5132 1991 /* 20 */
1ceb70f8
L
1992 { MOD_TABLE (MOD_0F20) },
1993 { MOD_TABLE (MOD_0F21) },
1994 { MOD_TABLE (MOD_0F22) },
1995 { MOD_TABLE (MOD_0F23) },
1996 { MOD_TABLE (MOD_0F24) },
592d1631 1997 { Bad_Opcode },
1ceb70f8 1998 { MOD_TABLE (MOD_0F26) },
592d1631 1999 { Bad_Opcode },
252b5132 2000 /* 28 */
09a2c6cf 2001 { "movapX", { XM, EXx } },
b6169b20 2002 { "movapX", { EXxS, XM } },
1ceb70f8
L
2003 { PREFIX_TABLE (PREFIX_0F2A) },
2004 { PREFIX_TABLE (PREFIX_0F2B) },
2005 { PREFIX_TABLE (PREFIX_0F2C) },
2006 { PREFIX_TABLE (PREFIX_0F2D) },
2007 { PREFIX_TABLE (PREFIX_0F2E) },
2008 { PREFIX_TABLE (PREFIX_0F2F) },
252b5132 2009 /* 30 */
ce518a5f
L
2010 { "wrmsr", { XX } },
2011 { "rdtsc", { XX } },
2012 { "rdmsr", { XX } },
2013 { "rdpmc", { XX } },
2014 { "sysenter", { XX } },
2015 { "sysexit", { XX } },
592d1631 2016 { Bad_Opcode },
47dd174c 2017 { "getsec", { XX } },
252b5132 2018 /* 38 */
4e7d34a6 2019 { THREE_BYTE_TABLE (THREE_BYTE_0F38) },
592d1631 2020 { Bad_Opcode },
4e7d34a6 2021 { THREE_BYTE_TABLE (THREE_BYTE_0F3A) },
592d1631
L
2022 { Bad_Opcode },
2023 { Bad_Opcode },
2024 { Bad_Opcode },
2025 { Bad_Opcode },
2026 { Bad_Opcode },
252b5132 2027 /* 40 */
b19d5385
JB
2028 { "cmovoS", { Gv, Ev } },
2029 { "cmovnoS", { Gv, Ev } },
2030 { "cmovbS", { Gv, Ev } },
2031 { "cmovaeS", { Gv, Ev } },
2032 { "cmoveS", { Gv, Ev } },
2033 { "cmovneS", { Gv, Ev } },
2034 { "cmovbeS", { Gv, Ev } },
2035 { "cmovaS", { Gv, Ev } },
252b5132 2036 /* 48 */
b19d5385
JB
2037 { "cmovsS", { Gv, Ev } },
2038 { "cmovnsS", { Gv, Ev } },
2039 { "cmovpS", { Gv, Ev } },
2040 { "cmovnpS", { Gv, Ev } },
2041 { "cmovlS", { Gv, Ev } },
2042 { "cmovgeS", { Gv, Ev } },
2043 { "cmovleS", { Gv, Ev } },
2044 { "cmovgS", { Gv, Ev } },
252b5132 2045 /* 50 */
75c135a8 2046 { MOD_TABLE (MOD_0F51) },
1ceb70f8
L
2047 { PREFIX_TABLE (PREFIX_0F51) },
2048 { PREFIX_TABLE (PREFIX_0F52) },
2049 { PREFIX_TABLE (PREFIX_0F53) },
09a2c6cf
L
2050 { "andpX", { XM, EXx } },
2051 { "andnpX", { XM, EXx } },
2052 { "orpX", { XM, EXx } },
2053 { "xorpX", { XM, EXx } },
252b5132 2054 /* 58 */
1ceb70f8
L
2055 { PREFIX_TABLE (PREFIX_0F58) },
2056 { PREFIX_TABLE (PREFIX_0F59) },
2057 { PREFIX_TABLE (PREFIX_0F5A) },
2058 { PREFIX_TABLE (PREFIX_0F5B) },
2059 { PREFIX_TABLE (PREFIX_0F5C) },
2060 { PREFIX_TABLE (PREFIX_0F5D) },
2061 { PREFIX_TABLE (PREFIX_0F5E) },
2062 { PREFIX_TABLE (PREFIX_0F5F) },
252b5132 2063 /* 60 */
1ceb70f8
L
2064 { PREFIX_TABLE (PREFIX_0F60) },
2065 { PREFIX_TABLE (PREFIX_0F61) },
2066 { PREFIX_TABLE (PREFIX_0F62) },
ce518a5f
L
2067 { "packsswb", { MX, EM } },
2068 { "pcmpgtb", { MX, EM } },
2069 { "pcmpgtw", { MX, EM } },
2070 { "pcmpgtd", { MX, EM } },
2071 { "packuswb", { MX, EM } },
252b5132 2072 /* 68 */
ce518a5f
L
2073 { "punpckhbw", { MX, EM } },
2074 { "punpckhwd", { MX, EM } },
2075 { "punpckhdq", { MX, EM } },
2076 { "packssdw", { MX, EM } },
1ceb70f8
L
2077 { PREFIX_TABLE (PREFIX_0F6C) },
2078 { PREFIX_TABLE (PREFIX_0F6D) },
231af070 2079 { "movK", { MX, Edq } },
1ceb70f8 2080 { PREFIX_TABLE (PREFIX_0F6F) },
252b5132 2081 /* 70 */
1ceb70f8
L
2082 { PREFIX_TABLE (PREFIX_0F70) },
2083 { REG_TABLE (REG_0F71) },
2084 { REG_TABLE (REG_0F72) },
2085 { REG_TABLE (REG_0F73) },
ce518a5f
L
2086 { "pcmpeqb", { MX, EM } },
2087 { "pcmpeqw", { MX, EM } },
2088 { "pcmpeqd", { MX, EM } },
2089 { "emms", { XX } },
252b5132 2090 /* 78 */
1ceb70f8
L
2091 { PREFIX_TABLE (PREFIX_0F78) },
2092 { PREFIX_TABLE (PREFIX_0F79) },
4e7d34a6 2093 { THREE_BYTE_TABLE (THREE_BYTE_0F7A) },
592d1631 2094 { Bad_Opcode },
1ceb70f8
L
2095 { PREFIX_TABLE (PREFIX_0F7C) },
2096 { PREFIX_TABLE (PREFIX_0F7D) },
2097 { PREFIX_TABLE (PREFIX_0F7E) },
2098 { PREFIX_TABLE (PREFIX_0F7F) },
252b5132 2099 /* 80 */
ce518a5f
L
2100 { "joH", { Jv, XX, cond_jump_flag } },
2101 { "jnoH", { Jv, XX, cond_jump_flag } },
2102 { "jbH", { Jv, XX, cond_jump_flag } },
2103 { "jaeH", { Jv, XX, cond_jump_flag } },
2104 { "jeH", { Jv, XX, cond_jump_flag } },
2105 { "jneH", { Jv, XX, cond_jump_flag } },
2106 { "jbeH", { Jv, XX, cond_jump_flag } },
2107 { "jaH", { Jv, XX, cond_jump_flag } },
252b5132 2108 /* 88 */
ce518a5f
L
2109 { "jsH", { Jv, XX, cond_jump_flag } },
2110 { "jnsH", { Jv, XX, cond_jump_flag } },
2111 { "jpH", { Jv, XX, cond_jump_flag } },
2112 { "jnpH", { Jv, XX, cond_jump_flag } },
2113 { "jlH", { Jv, XX, cond_jump_flag } },
2114 { "jgeH", { Jv, XX, cond_jump_flag } },
2115 { "jleH", { Jv, XX, cond_jump_flag } },
2116 { "jgH", { Jv, XX, cond_jump_flag } },
252b5132 2117 /* 90 */
ce518a5f
L
2118 { "seto", { Eb } },
2119 { "setno", { Eb } },
2120 { "setb", { Eb } },
2121 { "setae", { Eb } },
2122 { "sete", { Eb } },
2123 { "setne", { Eb } },
2124 { "setbe", { Eb } },
2125 { "seta", { Eb } },
252b5132 2126 /* 98 */
ce518a5f
L
2127 { "sets", { Eb } },
2128 { "setns", { Eb } },
2129 { "setp", { Eb } },
2130 { "setnp", { Eb } },
2131 { "setl", { Eb } },
2132 { "setge", { Eb } },
2133 { "setle", { Eb } },
2134 { "setg", { Eb } },
252b5132 2135 /* a0 */
ce518a5f
L
2136 { "pushT", { fs } },
2137 { "popT", { fs } },
2138 { "cpuid", { XX } },
2139 { "btS", { Ev, Gv } },
2140 { "shldS", { Ev, Gv, Ib } },
2141 { "shldS", { Ev, Gv, CL } },
1ceb70f8
L
2142 { REG_TABLE (REG_0FA6) },
2143 { REG_TABLE (REG_0FA7) },
252b5132 2144 /* a8 */
ce518a5f
L
2145 { "pushT", { gs } },
2146 { "popT", { gs } },
2147 { "rsm", { XX } },
42164a71 2148 { "btsS", { Evh1, Gv } },
ce518a5f
L
2149 { "shrdS", { Ev, Gv, Ib } },
2150 { "shrdS", { Ev, Gv, CL } },
1ceb70f8 2151 { REG_TABLE (REG_0FAE) },
ce518a5f 2152 { "imulS", { Gv, Ev } },
252b5132 2153 /* b0 */
42164a71
L
2154 { "cmpxchgB", { Ebh1, Gb } },
2155 { "cmpxchgS", { Evh1, Gv } },
1ceb70f8 2156 { MOD_TABLE (MOD_0FB2) },
42164a71 2157 { "btrS", { Evh1, Gv } },
1ceb70f8
L
2158 { MOD_TABLE (MOD_0FB4) },
2159 { MOD_TABLE (MOD_0FB5) },
7c52e0e8
L
2160 { "movz{bR|x}", { Gv, Eb } },
2161 { "movz{wR|x}", { Gv, Ew } }, /* yes, there really is movzww ! */
252b5132 2162 /* b8 */
1ceb70f8 2163 { PREFIX_TABLE (PREFIX_0FB8) },
b414985b 2164 { "ud1", { XX } },
1ceb70f8 2165 { REG_TABLE (REG_0FBA) },
42164a71 2166 { "btcS", { Evh1, Gv } },
f12dc422 2167 { PREFIX_TABLE (PREFIX_0FBC) },
1ceb70f8 2168 { PREFIX_TABLE (PREFIX_0FBD) },
7c52e0e8
L
2169 { "movs{bR|x}", { Gv, Eb } },
2170 { "movs{wR|x}", { Gv, Ew } }, /* yes, there really is movsww ! */
252b5132 2171 /* c0 */
42164a71
L
2172 { "xaddB", { Ebh1, Gb } },
2173 { "xaddS", { Evh1, Gv } },
1ceb70f8 2174 { PREFIX_TABLE (PREFIX_0FC2) },
4ee52178 2175 { PREFIX_TABLE (PREFIX_0FC3) },
ce518a5f
L
2176 { "pinsrw", { MX, Edqw, Ib } },
2177 { "pextrw", { Gdq, MS, Ib } },
09a2c6cf 2178 { "shufpX", { XM, EXx, Ib } },
1ceb70f8 2179 { REG_TABLE (REG_0FC7) },
252b5132 2180 /* c8 */
ce518a5f
L
2181 { "bswap", { RMeAX } },
2182 { "bswap", { RMeCX } },
2183 { "bswap", { RMeDX } },
2184 { "bswap", { RMeBX } },
2185 { "bswap", { RMeSP } },
2186 { "bswap", { RMeBP } },
2187 { "bswap", { RMeSI } },
2188 { "bswap", { RMeDI } },
252b5132 2189 /* d0 */
1ceb70f8 2190 { PREFIX_TABLE (PREFIX_0FD0) },
ce518a5f
L
2191 { "psrlw", { MX, EM } },
2192 { "psrld", { MX, EM } },
2193 { "psrlq", { MX, EM } },
2194 { "paddq", { MX, EM } },
2195 { "pmullw", { MX, EM } },
1ceb70f8 2196 { PREFIX_TABLE (PREFIX_0FD6) },
75c135a8 2197 { MOD_TABLE (MOD_0FD7) },
252b5132 2198 /* d8 */
ce518a5f
L
2199 { "psubusb", { MX, EM } },
2200 { "psubusw", { MX, EM } },
2201 { "pminub", { MX, EM } },
2202 { "pand", { MX, EM } },
2203 { "paddusb", { MX, EM } },
2204 { "paddusw", { MX, EM } },
2205 { "pmaxub", { MX, EM } },
2206 { "pandn", { MX, EM } },
252b5132 2207 /* e0 */
ce518a5f
L
2208 { "pavgb", { MX, EM } },
2209 { "psraw", { MX, EM } },
2210 { "psrad", { MX, EM } },
2211 { "pavgw", { MX, EM } },
2212 { "pmulhuw", { MX, EM } },
2213 { "pmulhw", { MX, EM } },
1ceb70f8
L
2214 { PREFIX_TABLE (PREFIX_0FE6) },
2215 { PREFIX_TABLE (PREFIX_0FE7) },
252b5132 2216 /* e8 */
ce518a5f
L
2217 { "psubsb", { MX, EM } },
2218 { "psubsw", { MX, EM } },
2219 { "pminsw", { MX, EM } },
2220 { "por", { MX, EM } },
2221 { "paddsb", { MX, EM } },
2222 { "paddsw", { MX, EM } },
2223 { "pmaxsw", { MX, EM } },
2224 { "pxor", { MX, EM } },
252b5132 2225 /* f0 */
1ceb70f8 2226 { PREFIX_TABLE (PREFIX_0FF0) },
ce518a5f
L
2227 { "psllw", { MX, EM } },
2228 { "pslld", { MX, EM } },
2229 { "psllq", { MX, EM } },
2230 { "pmuludq", { MX, EM } },
2231 { "pmaddwd", { MX, EM } },
2232 { "psadbw", { MX, EM } },
1ceb70f8 2233 { PREFIX_TABLE (PREFIX_0FF7) },
252b5132 2234 /* f8 */
ce518a5f
L
2235 { "psubb", { MX, EM } },
2236 { "psubw", { MX, EM } },
2237 { "psubd", { MX, EM } },
2238 { "psubq", { MX, EM } },
2239 { "paddb", { MX, EM } },
2240 { "paddw", { MX, EM } },
2241 { "paddd", { MX, EM } },
592d1631 2242 { Bad_Opcode },
252b5132
RH
2243};
2244
2245static const unsigned char onebyte_has_modrm[256] = {
c608c12e
AM
2246 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
2247 /* ------------------------------- */
2248 /* 00 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 00 */
2249 /* 10 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 10 */
2250 /* 20 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 20 */
2251 /* 30 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 30 */
2252 /* 40 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 40 */
2253 /* 50 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 50 */
2254 /* 60 */ 0,0,1,1,0,0,0,0,0,1,0,1,0,0,0,0, /* 60 */
2255 /* 70 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 70 */
2256 /* 80 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 80 */
2257 /* 90 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 90 */
2258 /* a0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* a0 */
2259 /* b0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* b0 */
2260 /* c0 */ 1,1,0,0,1,1,1,1,0,0,0,0,0,0,0,0, /* c0 */
2261 /* d0 */ 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1, /* d0 */
2262 /* e0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* e0 */
2263 /* f0 */ 0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1 /* f0 */
2264 /* ------------------------------- */
2265 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
252b5132
RH
2266};
2267
2268static const unsigned char twobyte_has_modrm[256] = {
c608c12e
AM
2269 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
2270 /* ------------------------------- */
252b5132 2271 /* 00 */ 1,1,1,1,0,0,0,0,0,0,0,0,0,1,0,1, /* 0f */
b5b1fc4f 2272 /* 10 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 1f */
85f10a01 2273 /* 20 */ 1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1, /* 2f */
331d2d0d 2274 /* 30 */ 0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0, /* 3f */
252b5132 2275 /* 40 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 4f */
4bba6815
AM
2276 /* 50 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 5f */
2277 /* 60 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 6f */
85f10a01 2278 /* 70 */ 1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1, /* 7f */
252b5132
RH
2279 /* 80 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 8f */
2280 /* 90 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 9f */
30d1c836 2281 /* a0 */ 0,0,0,1,1,1,1,1,0,0,0,1,1,1,1,1, /* af */
050dfa73 2282 /* b0 */ 1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1, /* bf */
252b5132 2283 /* c0 */ 1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0, /* cf */
ca164297 2284 /* d0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* df */
4bba6815 2285 /* e0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* ef */
ca164297 2286 /* f0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0 /* ff */
c608c12e
AM
2287 /* ------------------------------- */
2288 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
2289};
2290
252b5132
RH
2291static char obuf[100];
2292static char *obufp;
ea397f5b 2293static char *mnemonicendp;
252b5132
RH
2294static char scratchbuf[100];
2295static unsigned char *start_codep;
2296static unsigned char *insn_codep;
2297static unsigned char *codep;
f16cd0d5
L
2298static int last_lock_prefix;
2299static int last_repz_prefix;
2300static int last_repnz_prefix;
2301static int last_data_prefix;
2302static int last_addr_prefix;
2303static int last_rex_prefix;
2304static int last_seg_prefix;
2305#define MAX_CODE_LENGTH 15
2306/* We can up to 14 prefixes since the maximum instruction length is
2307 15bytes. */
2308static int all_prefixes[MAX_CODE_LENGTH - 1];
252b5132 2309static disassemble_info *the_info;
7967e09e
L
2310static struct
2311 {
2312 int mod;
7967e09e 2313 int reg;
484c222e 2314 int rm;
7967e09e
L
2315 }
2316modrm;
4bba6815 2317static unsigned char need_modrm;
dfc8cf43
L
2318static struct
2319 {
2320 int scale;
2321 int index;
2322 int base;
2323 }
2324sib;
c0f3af97
L
2325static struct
2326 {
2327 int register_specifier;
2328 int length;
2329 int prefix;
2330 int w;
2331 }
2332vex;
2333static unsigned char need_vex;
2334static unsigned char need_vex_reg;
dae39acc 2335static unsigned char vex_w_done;
252b5132 2336
ea397f5b
L
2337struct op
2338 {
2339 const char *name;
2340 unsigned int len;
2341 };
2342
4bba6815
AM
2343/* If we are accessing mod/rm/reg without need_modrm set, then the
2344 values are stale. Hitting this abort likely indicates that you
2345 need to update onebyte_has_modrm or twobyte_has_modrm. */
2346#define MODRM_CHECK if (!need_modrm) abort ()
2347
d708bcba
AM
2348static const char **names64;
2349static const char **names32;
2350static const char **names16;
2351static const char **names8;
2352static const char **names8rex;
2353static const char **names_seg;
db51cc60
L
2354static const char *index64;
2355static const char *index32;
d708bcba
AM
2356static const char **index16;
2357
2358static const char *intel_names64[] = {
2359 "rax", "rcx", "rdx", "rbx", "rsp", "rbp", "rsi", "rdi",
2360 "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15"
2361};
2362static const char *intel_names32[] = {
2363 "eax", "ecx", "edx", "ebx", "esp", "ebp", "esi", "edi",
2364 "r8d", "r9d", "r10d", "r11d", "r12d", "r13d", "r14d", "r15d"
2365};
2366static const char *intel_names16[] = {
2367 "ax", "cx", "dx", "bx", "sp", "bp", "si", "di",
2368 "r8w", "r9w", "r10w", "r11w", "r12w", "r13w", "r14w", "r15w"
2369};
2370static const char *intel_names8[] = {
2371 "al", "cl", "dl", "bl", "ah", "ch", "dh", "bh",
2372};
2373static const char *intel_names8rex[] = {
2374 "al", "cl", "dl", "bl", "spl", "bpl", "sil", "dil",
2375 "r8b", "r9b", "r10b", "r11b", "r12b", "r13b", "r14b", "r15b"
2376};
2377static const char *intel_names_seg[] = {
2378 "es", "cs", "ss", "ds", "fs", "gs", "?", "?",
2379};
db51cc60
L
2380static const char *intel_index64 = "riz";
2381static const char *intel_index32 = "eiz";
d708bcba
AM
2382static const char *intel_index16[] = {
2383 "bx+si", "bx+di", "bp+si", "bp+di", "si", "di", "bp", "bx"
2384};
2385
2386static const char *att_names64[] = {
2387 "%rax", "%rcx", "%rdx", "%rbx", "%rsp", "%rbp", "%rsi", "%rdi",
52b15da3
JH
2388 "%r8", "%r9", "%r10", "%r11", "%r12", "%r13", "%r14", "%r15"
2389};
d708bcba
AM
2390static const char *att_names32[] = {
2391 "%eax", "%ecx", "%edx", "%ebx", "%esp", "%ebp", "%esi", "%edi",
52b15da3 2392 "%r8d", "%r9d", "%r10d", "%r11d", "%r12d", "%r13d", "%r14d", "%r15d"
252b5132 2393};
d708bcba
AM
2394static const char *att_names16[] = {
2395 "%ax", "%cx", "%dx", "%bx", "%sp", "%bp", "%si", "%di",
52b15da3 2396 "%r8w", "%r9w", "%r10w", "%r11w", "%r12w", "%r13w", "%r14w", "%r15w"
252b5132 2397};
d708bcba
AM
2398static const char *att_names8[] = {
2399 "%al", "%cl", "%dl", "%bl", "%ah", "%ch", "%dh", "%bh",
252b5132 2400};
d708bcba
AM
2401static const char *att_names8rex[] = {
2402 "%al", "%cl", "%dl", "%bl", "%spl", "%bpl", "%sil", "%dil",
52b15da3
JH
2403 "%r8b", "%r9b", "%r10b", "%r11b", "%r12b", "%r13b", "%r14b", "%r15b"
2404};
d708bcba
AM
2405static const char *att_names_seg[] = {
2406 "%es", "%cs", "%ss", "%ds", "%fs", "%gs", "%?", "%?",
252b5132 2407};
db51cc60
L
2408static const char *att_index64 = "%riz";
2409static const char *att_index32 = "%eiz";
d708bcba
AM
2410static const char *att_index16[] = {
2411 "%bx,%si", "%bx,%di", "%bp,%si", "%bp,%di", "%si", "%di", "%bp", "%bx"
252b5132
RH
2412};
2413
b9733481
L
2414static const char **names_mm;
2415static const char *intel_names_mm[] = {
2416 "mm0", "mm1", "mm2", "mm3",
2417 "mm4", "mm5", "mm6", "mm7"
2418};
2419static const char *att_names_mm[] = {
2420 "%mm0", "%mm1", "%mm2", "%mm3",
2421 "%mm4", "%mm5", "%mm6", "%mm7"
2422};
2423
2424static const char **names_xmm;
2425static const char *intel_names_xmm[] = {
2426 "xmm0", "xmm1", "xmm2", "xmm3",
2427 "xmm4", "xmm5", "xmm6", "xmm7",
2428 "xmm8", "xmm9", "xmm10", "xmm11",
2429 "xmm12", "xmm13", "xmm14", "xmm15"
2430};
2431static const char *att_names_xmm[] = {
2432 "%xmm0", "%xmm1", "%xmm2", "%xmm3",
2433 "%xmm4", "%xmm5", "%xmm6", "%xmm7",
2434 "%xmm8", "%xmm9", "%xmm10", "%xmm11",
2435 "%xmm12", "%xmm13", "%xmm14", "%xmm15"
2436};
2437
2438static const char **names_ymm;
2439static const char *intel_names_ymm[] = {
2440 "ymm0", "ymm1", "ymm2", "ymm3",
2441 "ymm4", "ymm5", "ymm6", "ymm7",
2442 "ymm8", "ymm9", "ymm10", "ymm11",
2443 "ymm12", "ymm13", "ymm14", "ymm15"
2444};
2445static const char *att_names_ymm[] = {
2446 "%ymm0", "%ymm1", "%ymm2", "%ymm3",
2447 "%ymm4", "%ymm5", "%ymm6", "%ymm7",
2448 "%ymm8", "%ymm9", "%ymm10", "%ymm11",
2449 "%ymm12", "%ymm13", "%ymm14", "%ymm15"
2450};
2451
1ceb70f8
L
2452static const struct dis386 reg_table[][8] = {
2453 /* REG_80 */
252b5132 2454 {
42164a71
L
2455 { "addA", { Ebh1, Ib } },
2456 { "orA", { Ebh1, Ib } },
2457 { "adcA", { Ebh1, Ib } },
2458 { "sbbA", { Ebh1, Ib } },
2459 { "andA", { Ebh1, Ib } },
2460 { "subA", { Ebh1, Ib } },
2461 { "xorA", { Ebh1, Ib } },
ce518a5f 2462 { "cmpA", { Eb, Ib } },
252b5132 2463 },
1ceb70f8 2464 /* REG_81 */
252b5132 2465 {
42164a71
L
2466 { "addQ", { Evh1, Iv } },
2467 { "orQ", { Evh1, Iv } },
2468 { "adcQ", { Evh1, Iv } },
2469 { "sbbQ", { Evh1, Iv } },
2470 { "andQ", { Evh1, Iv } },
2471 { "subQ", { Evh1, Iv } },
2472 { "xorQ", { Evh1, Iv } },
ce518a5f 2473 { "cmpQ", { Ev, Iv } },
252b5132 2474 },
1ceb70f8 2475 /* REG_82 */
252b5132 2476 {
42164a71
L
2477 { "addQ", { Evh1, sIb } },
2478 { "orQ", { Evh1, sIb } },
2479 { "adcQ", { Evh1, sIb } },
2480 { "sbbQ", { Evh1, sIb } },
2481 { "andQ", { Evh1, sIb } },
2482 { "subQ", { Evh1, sIb } },
2483 { "xorQ", { Evh1, sIb } },
ce518a5f 2484 { "cmpQ", { Ev, sIb } },
252b5132 2485 },
1ceb70f8 2486 /* REG_8F */
4e7d34a6
L
2487 {
2488 { "popU", { stackEv } },
c48244a5 2489 { XOP_8F_TABLE (XOP_09) },
592d1631
L
2490 { Bad_Opcode },
2491 { Bad_Opcode },
2492 { Bad_Opcode },
f88c9eb0 2493 { XOP_8F_TABLE (XOP_09) },
4e7d34a6 2494 },
1ceb70f8 2495 /* REG_C0 */
252b5132 2496 {
ce518a5f
L
2497 { "rolA", { Eb, Ib } },
2498 { "rorA", { Eb, Ib } },
2499 { "rclA", { Eb, Ib } },
2500 { "rcrA", { Eb, Ib } },
2501 { "shlA", { Eb, Ib } },
2502 { "shrA", { Eb, Ib } },
592d1631 2503 { Bad_Opcode },
ce518a5f 2504 { "sarA", { Eb, Ib } },
252b5132 2505 },
1ceb70f8 2506 /* REG_C1 */
252b5132 2507 {
ce518a5f
L
2508 { "rolQ", { Ev, Ib } },
2509 { "rorQ", { Ev, Ib } },
2510 { "rclQ", { Ev, Ib } },
2511 { "rcrQ", { Ev, Ib } },
2512 { "shlQ", { Ev, Ib } },
2513 { "shrQ", { Ev, Ib } },
592d1631 2514 { Bad_Opcode },
ce518a5f 2515 { "sarQ", { Ev, Ib } },
252b5132 2516 },
1ceb70f8 2517 /* REG_C6 */
4e7d34a6 2518 {
42164a71
L
2519 { "movA", { Ebh3, Ib } },
2520 { Bad_Opcode },
2521 { Bad_Opcode },
2522 { Bad_Opcode },
2523 { Bad_Opcode },
2524 { Bad_Opcode },
2525 { Bad_Opcode },
2526 { MOD_TABLE (MOD_C6_REG_7) },
4e7d34a6 2527 },
1ceb70f8 2528 /* REG_C7 */
4e7d34a6 2529 {
42164a71
L
2530 { "movQ", { Evh3, Iv } },
2531 { Bad_Opcode },
2532 { Bad_Opcode },
2533 { Bad_Opcode },
2534 { Bad_Opcode },
2535 { Bad_Opcode },
2536 { Bad_Opcode },
2537 { MOD_TABLE (MOD_C7_REG_7) },
4e7d34a6 2538 },
1ceb70f8 2539 /* REG_D0 */
252b5132 2540 {
ce518a5f
L
2541 { "rolA", { Eb, I1 } },
2542 { "rorA", { Eb, I1 } },
2543 { "rclA", { Eb, I1 } },
2544 { "rcrA", { Eb, I1 } },
2545 { "shlA", { Eb, I1 } },
2546 { "shrA", { Eb, I1 } },
592d1631 2547 { Bad_Opcode },
ce518a5f 2548 { "sarA", { Eb, I1 } },
252b5132 2549 },
1ceb70f8 2550 /* REG_D1 */
252b5132 2551 {
ce518a5f
L
2552 { "rolQ", { Ev, I1 } },
2553 { "rorQ", { Ev, I1 } },
2554 { "rclQ", { Ev, I1 } },
2555 { "rcrQ", { Ev, I1 } },
2556 { "shlQ", { Ev, I1 } },
2557 { "shrQ", { Ev, I1 } },
592d1631 2558 { Bad_Opcode },
ce518a5f 2559 { "sarQ", { Ev, I1 } },
252b5132 2560 },
1ceb70f8 2561 /* REG_D2 */
252b5132 2562 {
ce518a5f
L
2563 { "rolA", { Eb, CL } },
2564 { "rorA", { Eb, CL } },
2565 { "rclA", { Eb, CL } },
2566 { "rcrA", { Eb, CL } },
2567 { "shlA", { Eb, CL } },
2568 { "shrA", { Eb, CL } },
592d1631 2569 { Bad_Opcode },
ce518a5f 2570 { "sarA", { Eb, CL } },
252b5132 2571 },
1ceb70f8 2572 /* REG_D3 */
252b5132 2573 {
ce518a5f
L
2574 { "rolQ", { Ev, CL } },
2575 { "rorQ", { Ev, CL } },
2576 { "rclQ", { Ev, CL } },
2577 { "rcrQ", { Ev, CL } },
2578 { "shlQ", { Ev, CL } },
2579 { "shrQ", { Ev, CL } },
592d1631 2580 { Bad_Opcode },
ce518a5f 2581 { "sarQ", { Ev, CL } },
252b5132 2582 },
1ceb70f8 2583 /* REG_F6 */
252b5132 2584 {
ce518a5f 2585 { "testA", { Eb, Ib } },
592d1631 2586 { Bad_Opcode },
42164a71
L
2587 { "notA", { Ebh1 } },
2588 { "negA", { Ebh1 } },
ce518a5f
L
2589 { "mulA", { Eb } }, /* Don't print the implicit %al register, */
2590 { "imulA", { Eb } }, /* to distinguish these opcodes from other */
2591 { "divA", { Eb } }, /* mul/imul opcodes. Do the same for div */
2592 { "idivA", { Eb } }, /* and idiv for consistency. */
252b5132 2593 },
1ceb70f8 2594 /* REG_F7 */
252b5132 2595 {
ce518a5f 2596 { "testQ", { Ev, Iv } },
592d1631 2597 { Bad_Opcode },
42164a71
L
2598 { "notQ", { Evh1 } },
2599 { "negQ", { Evh1 } },
ce518a5f
L
2600 { "mulQ", { Ev } }, /* Don't print the implicit register. */
2601 { "imulQ", { Ev } },
2602 { "divQ", { Ev } },
2603 { "idivQ", { Ev } },
252b5132 2604 },
1ceb70f8 2605 /* REG_FE */
252b5132 2606 {
42164a71
L
2607 { "incA", { Ebh1 } },
2608 { "decA", { Ebh1 } },
252b5132 2609 },
1ceb70f8 2610 /* REG_FF */
252b5132 2611 {
42164a71
L
2612 { "incQ", { Evh1 } },
2613 { "decQ", { Evh1 } },
d9e3625e
L
2614 { "call{T|}", { indirEv } },
2615 { "Jcall{T|}", { indirEp } },
2616 { "jmp{T|}", { indirEv } },
2617 { "Jjmp{T|}", { indirEp } },
ce518a5f 2618 { "pushU", { stackEv } },
592d1631 2619 { Bad_Opcode },
252b5132 2620 },
1ceb70f8 2621 /* REG_0F00 */
252b5132 2622 {
ce518a5f
L
2623 { "sldtD", { Sv } },
2624 { "strD", { Sv } },
2625 { "lldt", { Ew } },
2626 { "ltr", { Ew } },
2627 { "verr", { Ew } },
2628 { "verw", { Ew } },
592d1631
L
2629 { Bad_Opcode },
2630 { Bad_Opcode },
252b5132 2631 },
1ceb70f8 2632 /* REG_0F01 */
252b5132 2633 {
1ceb70f8
L
2634 { MOD_TABLE (MOD_0F01_REG_0) },
2635 { MOD_TABLE (MOD_0F01_REG_1) },
2636 { MOD_TABLE (MOD_0F01_REG_2) },
2637 { MOD_TABLE (MOD_0F01_REG_3) },
ce518a5f 2638 { "smswD", { Sv } },
592d1631 2639 { Bad_Opcode },
ce518a5f 2640 { "lmsw", { Ew } },
1ceb70f8 2641 { MOD_TABLE (MOD_0F01_REG_7) },
252b5132 2642 },
b5b1fc4f 2643 /* REG_0F0D */
252b5132 2644 {
1ab03f4b
L
2645 { "prefetch", { Mb } },
2646 { "prefetchw", { Mb } },
252b5132 2647 },
1ceb70f8 2648 /* REG_0F18 */
252b5132 2649 {
1ceb70f8
L
2650 { MOD_TABLE (MOD_0F18_REG_0) },
2651 { MOD_TABLE (MOD_0F18_REG_1) },
2652 { MOD_TABLE (MOD_0F18_REG_2) },
2653 { MOD_TABLE (MOD_0F18_REG_3) },
252b5132 2654 },
1ceb70f8 2655 /* REG_0F71 */
a6bd098c 2656 {
592d1631
L
2657 { Bad_Opcode },
2658 { Bad_Opcode },
1ceb70f8 2659 { MOD_TABLE (MOD_0F71_REG_2) },
592d1631 2660 { Bad_Opcode },
1ceb70f8 2661 { MOD_TABLE (MOD_0F71_REG_4) },
592d1631 2662 { Bad_Opcode },
1ceb70f8 2663 { MOD_TABLE (MOD_0F71_REG_6) },
a6bd098c 2664 },
1ceb70f8 2665 /* REG_0F72 */
a6bd098c 2666 {
592d1631
L
2667 { Bad_Opcode },
2668 { Bad_Opcode },
1ceb70f8 2669 { MOD_TABLE (MOD_0F72_REG_2) },
592d1631 2670 { Bad_Opcode },
1ceb70f8 2671 { MOD_TABLE (MOD_0F72_REG_4) },
592d1631 2672 { Bad_Opcode },
1ceb70f8 2673 { MOD_TABLE (MOD_0F72_REG_6) },
a6bd098c 2674 },
1ceb70f8 2675 /* REG_0F73 */
252b5132 2676 {
592d1631
L
2677 { Bad_Opcode },
2678 { Bad_Opcode },
1ceb70f8
L
2679 { MOD_TABLE (MOD_0F73_REG_2) },
2680 { MOD_TABLE (MOD_0F73_REG_3) },
592d1631
L
2681 { Bad_Opcode },
2682 { Bad_Opcode },
1ceb70f8
L
2683 { MOD_TABLE (MOD_0F73_REG_6) },
2684 { MOD_TABLE (MOD_0F73_REG_7) },
252b5132 2685 },
1ceb70f8 2686 /* REG_0FA6 */
252b5132 2687 {
4e7d34a6
L
2688 { "montmul", { { OP_0f07, 0 } } },
2689 { "xsha1", { { OP_0f07, 0 } } },
2690 { "xsha256", { { OP_0f07, 0 } } },
4e7d34a6 2691 },
1ceb70f8 2692 /* REG_0FA7 */
4e7d34a6
L
2693 {
2694 { "xstore-rng", { { OP_0f07, 0 } } },
2695 { "xcrypt-ecb", { { OP_0f07, 0 } } },
2696 { "xcrypt-cbc", { { OP_0f07, 0 } } },
2697 { "xcrypt-ctr", { { OP_0f07, 0 } } },
2698 { "xcrypt-cfb", { { OP_0f07, 0 } } },
2699 { "xcrypt-ofb", { { OP_0f07, 0 } } },
4e7d34a6 2700 },
1ceb70f8 2701 /* REG_0FAE */
4e7d34a6 2702 {
1ceb70f8
L
2703 { MOD_TABLE (MOD_0FAE_REG_0) },
2704 { MOD_TABLE (MOD_0FAE_REG_1) },
2705 { MOD_TABLE (MOD_0FAE_REG_2) },
2706 { MOD_TABLE (MOD_0FAE_REG_3) },
475a2301 2707 { MOD_TABLE (MOD_0FAE_REG_4) },
1ceb70f8
L
2708 { MOD_TABLE (MOD_0FAE_REG_5) },
2709 { MOD_TABLE (MOD_0FAE_REG_6) },
2710 { MOD_TABLE (MOD_0FAE_REG_7) },
252b5132 2711 },
1ceb70f8 2712 /* REG_0FBA */
252b5132 2713 {
592d1631
L
2714 { Bad_Opcode },
2715 { Bad_Opcode },
2716 { Bad_Opcode },
2717 { Bad_Opcode },
4e7d34a6 2718 { "btQ", { Ev, Ib } },
42164a71
L
2719 { "btsQ", { Evh1, Ib } },
2720 { "btrQ", { Evh1, Ib } },
2721 { "btcQ", { Evh1, Ib } },
c608c12e 2722 },
1ceb70f8 2723 /* REG_0FC7 */
c608c12e 2724 {
592d1631 2725 { Bad_Opcode },
4e7d34a6 2726 { "cmpxchg8b", { { CMPXCHG8B_Fixup, q_mode } } },
592d1631
L
2727 { Bad_Opcode },
2728 { Bad_Opcode },
2729 { Bad_Opcode },
2730 { Bad_Opcode },
1ceb70f8
L
2731 { MOD_TABLE (MOD_0FC7_REG_6) },
2732 { MOD_TABLE (MOD_0FC7_REG_7) },
252b5132 2733 },
592a252b 2734 /* REG_VEX_0F71 */
c0f3af97 2735 {
592d1631
L
2736 { Bad_Opcode },
2737 { Bad_Opcode },
592a252b 2738 { MOD_TABLE (MOD_VEX_0F71_REG_2) },
592d1631 2739 { Bad_Opcode },
592a252b 2740 { MOD_TABLE (MOD_VEX_0F71_REG_4) },
592d1631 2741 { Bad_Opcode },
592a252b 2742 { MOD_TABLE (MOD_VEX_0F71_REG_6) },
c0f3af97 2743 },
592a252b 2744 /* REG_VEX_0F72 */
c0f3af97 2745 {
592d1631
L
2746 { Bad_Opcode },
2747 { Bad_Opcode },
592a252b 2748 { MOD_TABLE (MOD_VEX_0F72_REG_2) },
592d1631 2749 { Bad_Opcode },
592a252b 2750 { MOD_TABLE (MOD_VEX_0F72_REG_4) },
592d1631 2751 { Bad_Opcode },
592a252b 2752 { MOD_TABLE (MOD_VEX_0F72_REG_6) },
c0f3af97 2753 },
592a252b 2754 /* REG_VEX_0F73 */
c0f3af97 2755 {
592d1631
L
2756 { Bad_Opcode },
2757 { Bad_Opcode },
592a252b
L
2758 { MOD_TABLE (MOD_VEX_0F73_REG_2) },
2759 { MOD_TABLE (MOD_VEX_0F73_REG_3) },
592d1631
L
2760 { Bad_Opcode },
2761 { Bad_Opcode },
592a252b
L
2762 { MOD_TABLE (MOD_VEX_0F73_REG_6) },
2763 { MOD_TABLE (MOD_VEX_0F73_REG_7) },
c0f3af97 2764 },
592a252b 2765 /* REG_VEX_0FAE */
c0f3af97 2766 {
592d1631
L
2767 { Bad_Opcode },
2768 { Bad_Opcode },
592a252b
L
2769 { MOD_TABLE (MOD_VEX_0FAE_REG_2) },
2770 { MOD_TABLE (MOD_VEX_0FAE_REG_3) },
c0f3af97 2771 },
f12dc422
L
2772 /* REG_VEX_0F38F3 */
2773 {
2774 { Bad_Opcode },
2775 { PREFIX_TABLE (PREFIX_VEX_0F38F3_REG_1) },
2776 { PREFIX_TABLE (PREFIX_VEX_0F38F3_REG_2) },
2777 { PREFIX_TABLE (PREFIX_VEX_0F38F3_REG_3) },
2778 },
f88c9eb0
SP
2779 /* REG_XOP_LWPCB */
2780 {
2781 { "llwpcb", { { OP_LWPCB_E, 0 } } },
2782 { "slwpcb", { { OP_LWPCB_E, 0 } } },
f88c9eb0
SP
2783 },
2784 /* REG_XOP_LWP */
2785 {
ce7d077e
SP
2786 { "lwpins", { { OP_LWP_E, 0 }, Ed, Iq } },
2787 { "lwpval", { { OP_LWP_E, 0 }, Ed, Iq } },
f88c9eb0 2788 },
2a2a0f38
QN
2789 /* REG_XOP_TBM_01 */
2790 {
2791 { Bad_Opcode },
2792 { "blcfill", { { OP_LWP_E, 0 }, Ev } },
2793 { "blsfill", { { OP_LWP_E, 0 }, Ev } },
2794 { "blcs", { { OP_LWP_E, 0 }, Ev } },
2795 { "tzmsk", { { OP_LWP_E, 0 }, Ev } },
2796 { "blcic", { { OP_LWP_E, 0 }, Ev } },
2797 { "blsic", { { OP_LWP_E, 0 }, Ev } },
2798 { "t1mskc", { { OP_LWP_E, 0 }, Ev } },
2799 },
2800 /* REG_XOP_TBM_02 */
2801 {
2802 { Bad_Opcode },
2803 { "blcmsk", { { OP_LWP_E, 0 }, Ev } },
2804 { Bad_Opcode },
2805 { Bad_Opcode },
2806 { Bad_Opcode },
2807 { Bad_Opcode },
2808 { "blci", { { OP_LWP_E, 0 }, Ev } },
2809 },
4e7d34a6
L
2810};
2811
1ceb70f8
L
2812static const struct dis386 prefix_table[][4] = {
2813 /* PREFIX_90 */
252b5132 2814 {
4e7d34a6
L
2815 { "xchgS", { { NOP_Fixup1, eAX_reg }, { NOP_Fixup2, eAX_reg } } },
2816 { "pause", { XX } },
2817 { "xchgS", { { NOP_Fixup1, eAX_reg }, { NOP_Fixup2, eAX_reg } } },
0f10071e 2818 },
4e7d34a6 2819
1ceb70f8 2820 /* PREFIX_0F10 */
cc0ec051 2821 {
4e7d34a6
L
2822 { "movups", { XM, EXx } },
2823 { "movss", { XM, EXd } },
2824 { "movupd", { XM, EXx } },
2825 { "movsd", { XM, EXq } },
30d1c836 2826 },
4e7d34a6 2827
1ceb70f8 2828 /* PREFIX_0F11 */
30d1c836 2829 {
b6169b20 2830 { "movups", { EXxS, XM } },
fa99fab2 2831 { "movss", { EXdS, XM } },
b6169b20 2832 { "movupd", { EXxS, XM } },
fa99fab2 2833 { "movsd", { EXqS, XM } },
4e7d34a6 2834 },
252b5132 2835
1ceb70f8 2836 /* PREFIX_0F12 */
c608c12e 2837 {
1ceb70f8 2838 { MOD_TABLE (MOD_0F12_PREFIX_0) },
4e7d34a6
L
2839 { "movsldup", { XM, EXx } },
2840 { "movlpd", { XM, EXq } },
2841 { "movddup", { XM, EXq } },
c608c12e 2842 },
4e7d34a6 2843
1ceb70f8 2844 /* PREFIX_0F16 */
c608c12e 2845 {
1ceb70f8 2846 { MOD_TABLE (MOD_0F16_PREFIX_0) },
4e7d34a6
L
2847 { "movshdup", { XM, EXx } },
2848 { "movhpd", { XM, EXq } },
c608c12e 2849 },
4e7d34a6 2850
1ceb70f8 2851 /* PREFIX_0F2A */
c608c12e 2852 {
09335d05 2853 { "cvtpi2ps", { XM, EMCq } },
98b528ac 2854 { "cvtsi2ss%LQ", { XM, Ev } },
09335d05 2855 { "cvtpi2pd", { XM, EMCq } },
98b528ac 2856 { "cvtsi2sd%LQ", { XM, Ev } },
c608c12e 2857 },
4e7d34a6 2858
1ceb70f8 2859 /* PREFIX_0F2B */
c608c12e 2860 {
75c135a8
L
2861 { MOD_TABLE (MOD_0F2B_PREFIX_0) },
2862 { MOD_TABLE (MOD_0F2B_PREFIX_1) },
2863 { MOD_TABLE (MOD_0F2B_PREFIX_2) },
2864 { MOD_TABLE (MOD_0F2B_PREFIX_3) },
c608c12e 2865 },
4e7d34a6 2866
1ceb70f8 2867 /* PREFIX_0F2C */
c608c12e 2868 {
09335d05
L
2869 { "cvttps2pi", { MXC, EXq } },
2870 { "cvttss2siY", { Gv, EXd } },
09a2c6cf 2871 { "cvttpd2pi", { MXC, EXx } },
09335d05 2872 { "cvttsd2siY", { Gv, EXq } },
c608c12e 2873 },
4e7d34a6 2874
1ceb70f8 2875 /* PREFIX_0F2D */
c608c12e 2876 {
4e7d34a6
L
2877 { "cvtps2pi", { MXC, EXq } },
2878 { "cvtss2siY", { Gv, EXd } },
2879 { "cvtpd2pi", { MXC, EXx } },
2880 { "cvtsd2siY", { Gv, EXq } },
c608c12e 2881 },
4e7d34a6 2882
1ceb70f8 2883 /* PREFIX_0F2E */
c608c12e 2884 {
4e7d34a6 2885 { "ucomiss",{ XM, EXd } },
592d1631 2886 { Bad_Opcode },
4e7d34a6 2887 { "ucomisd",{ XM, EXq } },
c608c12e 2888 },
4e7d34a6 2889
1ceb70f8 2890 /* PREFIX_0F2F */
c608c12e 2891 {
4e7d34a6 2892 { "comiss", { XM, EXd } },
592d1631 2893 { Bad_Opcode },
4e7d34a6 2894 { "comisd", { XM, EXq } },
c608c12e 2895 },
4e7d34a6 2896
1ceb70f8 2897 /* PREFIX_0F51 */
c608c12e 2898 {
4e7d34a6
L
2899 { "sqrtps", { XM, EXx } },
2900 { "sqrtss", { XM, EXd } },
2901 { "sqrtpd", { XM, EXx } },
2902 { "sqrtsd", { XM, EXq } },
c608c12e 2903 },
4e7d34a6 2904
1ceb70f8 2905 /* PREFIX_0F52 */
c608c12e 2906 {
4e7d34a6
L
2907 { "rsqrtps",{ XM, EXx } },
2908 { "rsqrtss",{ XM, EXd } },
c608c12e 2909 },
4e7d34a6 2910
1ceb70f8 2911 /* PREFIX_0F53 */
c608c12e 2912 {
4e7d34a6
L
2913 { "rcpps", { XM, EXx } },
2914 { "rcpss", { XM, EXd } },
c608c12e 2915 },
4e7d34a6 2916
1ceb70f8 2917 /* PREFIX_0F58 */
c608c12e 2918 {
4e7d34a6
L
2919 { "addps", { XM, EXx } },
2920 { "addss", { XM, EXd } },
2921 { "addpd", { XM, EXx } },
2922 { "addsd", { XM, EXq } },
c608c12e 2923 },
4e7d34a6 2924
1ceb70f8 2925 /* PREFIX_0F59 */
c608c12e 2926 {
4e7d34a6
L
2927 { "mulps", { XM, EXx } },
2928 { "mulss", { XM, EXd } },
2929 { "mulpd", { XM, EXx } },
2930 { "mulsd", { XM, EXq } },
041bd2e0 2931 },
4e7d34a6 2932
1ceb70f8 2933 /* PREFIX_0F5A */
041bd2e0 2934 {
4e7d34a6
L
2935 { "cvtps2pd", { XM, EXq } },
2936 { "cvtss2sd", { XM, EXd } },
2937 { "cvtpd2ps", { XM, EXx } },
2938 { "cvtsd2ss", { XM, EXq } },
041bd2e0 2939 },
4e7d34a6 2940
1ceb70f8 2941 /* PREFIX_0F5B */
041bd2e0 2942 {
09a2c6cf
L
2943 { "cvtdq2ps", { XM, EXx } },
2944 { "cvttps2dq", { XM, EXx } },
2945 { "cvtps2dq", { XM, EXx } },
041bd2e0 2946 },
4e7d34a6 2947
1ceb70f8 2948 /* PREFIX_0F5C */
041bd2e0 2949 {
4e7d34a6
L
2950 { "subps", { XM, EXx } },
2951 { "subss", { XM, EXd } },
2952 { "subpd", { XM, EXx } },
2953 { "subsd", { XM, EXq } },
041bd2e0 2954 },
4e7d34a6 2955
1ceb70f8 2956 /* PREFIX_0F5D */
041bd2e0 2957 {
4e7d34a6
L
2958 { "minps", { XM, EXx } },
2959 { "minss", { XM, EXd } },
2960 { "minpd", { XM, EXx } },
2961 { "minsd", { XM, EXq } },
041bd2e0 2962 },
4e7d34a6 2963
1ceb70f8 2964 /* PREFIX_0F5E */
041bd2e0 2965 {
4e7d34a6
L
2966 { "divps", { XM, EXx } },
2967 { "divss", { XM, EXd } },
2968 { "divpd", { XM, EXx } },
2969 { "divsd", { XM, EXq } },
041bd2e0 2970 },
4e7d34a6 2971
1ceb70f8 2972 /* PREFIX_0F5F */
041bd2e0 2973 {
4e7d34a6
L
2974 { "maxps", { XM, EXx } },
2975 { "maxss", { XM, EXd } },
2976 { "maxpd", { XM, EXx } },
2977 { "maxsd", { XM, EXq } },
041bd2e0 2978 },
4e7d34a6 2979
1ceb70f8 2980 /* PREFIX_0F60 */
041bd2e0 2981 {
4e7d34a6 2982 { "punpcklbw",{ MX, EMd } },
592d1631 2983 { Bad_Opcode },
4e7d34a6 2984 { "punpcklbw",{ MX, EMx } },
041bd2e0 2985 },
4e7d34a6 2986
1ceb70f8 2987 /* PREFIX_0F61 */
041bd2e0 2988 {
4e7d34a6 2989 { "punpcklwd",{ MX, EMd } },
592d1631 2990 { Bad_Opcode },
4e7d34a6 2991 { "punpcklwd",{ MX, EMx } },
041bd2e0 2992 },
4e7d34a6 2993
1ceb70f8 2994 /* PREFIX_0F62 */
041bd2e0 2995 {
4e7d34a6 2996 { "punpckldq",{ MX, EMd } },
592d1631 2997 { Bad_Opcode },
4e7d34a6 2998 { "punpckldq",{ MX, EMx } },
041bd2e0 2999 },
4e7d34a6 3000
1ceb70f8 3001 /* PREFIX_0F6C */
041bd2e0 3002 {
592d1631
L
3003 { Bad_Opcode },
3004 { Bad_Opcode },
4e7d34a6 3005 { "punpcklqdq", { XM, EXx } },
0f17484f 3006 },
4e7d34a6 3007
1ceb70f8 3008 /* PREFIX_0F6D */
0f17484f 3009 {
592d1631
L
3010 { Bad_Opcode },
3011 { Bad_Opcode },
4e7d34a6 3012 { "punpckhqdq", { XM, EXx } },
041bd2e0 3013 },
4e7d34a6 3014
1ceb70f8 3015 /* PREFIX_0F6F */
ca164297 3016 {
4e7d34a6
L
3017 { "movq", { MX, EM } },
3018 { "movdqu", { XM, EXx } },
3019 { "movdqa", { XM, EXx } },
ca164297 3020 },
4e7d34a6 3021
1ceb70f8 3022 /* PREFIX_0F70 */
4e7d34a6
L
3023 {
3024 { "pshufw", { MX, EM, Ib } },
3025 { "pshufhw",{ XM, EXx, Ib } },
3026 { "pshufd", { XM, EXx, Ib } },
3027 { "pshuflw",{ XM, EXx, Ib } },
3028 },
3029
92fddf8e
L
3030 /* PREFIX_0F73_REG_3 */
3031 {
592d1631
L
3032 { Bad_Opcode },
3033 { Bad_Opcode },
92fddf8e 3034 { "psrldq", { XS, Ib } },
92fddf8e
L
3035 },
3036
3037 /* PREFIX_0F73_REG_7 */
3038 {
592d1631
L
3039 { Bad_Opcode },
3040 { Bad_Opcode },
92fddf8e 3041 { "pslldq", { XS, Ib } },
92fddf8e
L
3042 },
3043
1ceb70f8 3044 /* PREFIX_0F78 */
4e7d34a6
L
3045 {
3046 {"vmread", { Em, Gm } },
592d1631 3047 { Bad_Opcode },
4e7d34a6
L
3048 {"extrq", { XS, Ib, Ib } },
3049 {"insertq", { XM, XS, Ib, Ib } },
3050 },
3051
1ceb70f8 3052 /* PREFIX_0F79 */
4e7d34a6
L
3053 {
3054 {"vmwrite", { Gm, Em } },
592d1631 3055 { Bad_Opcode },
4e7d34a6
L
3056 {"extrq", { XM, XS } },
3057 {"insertq", { XM, XS } },
3058 },
3059
1ceb70f8 3060 /* PREFIX_0F7C */
ca164297 3061 {
592d1631
L
3062 { Bad_Opcode },
3063 { Bad_Opcode },
09a2c6cf
L
3064 { "haddpd", { XM, EXx } },
3065 { "haddps", { XM, EXx } },
ca164297 3066 },
4e7d34a6 3067
1ceb70f8 3068 /* PREFIX_0F7D */
ca164297 3069 {
592d1631
L
3070 { Bad_Opcode },
3071 { Bad_Opcode },
09a2c6cf
L
3072 { "hsubpd", { XM, EXx } },
3073 { "hsubps", { XM, EXx } },
ca164297 3074 },
4e7d34a6 3075
1ceb70f8 3076 /* PREFIX_0F7E */
ca164297 3077 {
4e7d34a6
L
3078 { "movK", { Edq, MX } },
3079 { "movq", { XM, EXq } },
3080 { "movK", { Edq, XM } },
ca164297 3081 },
4e7d34a6 3082
1ceb70f8 3083 /* PREFIX_0F7F */
ca164297 3084 {
b6169b20
L
3085 { "movq", { EMS, MX } },
3086 { "movdqu", { EXxS, XM } },
3087 { "movdqa", { EXxS, XM } },
ca164297 3088 },
4e7d34a6 3089
c7b8aa3a
L
3090 /* PREFIX_0FAE_REG_0 */
3091 {
3092 { Bad_Opcode },
3093 { "rdfsbase", { Ev } },
3094 },
3095
3096 /* PREFIX_0FAE_REG_1 */
3097 {
3098 { Bad_Opcode },
3099 { "rdgsbase", { Ev } },
3100 },
3101
3102 /* PREFIX_0FAE_REG_2 */
3103 {
3104 { Bad_Opcode },
3105 { "wrfsbase", { Ev } },
3106 },
3107
3108 /* PREFIX_0FAE_REG_3 */
3109 {
3110 { Bad_Opcode },
3111 { "wrgsbase", { Ev } },
3112 },
3113
1ceb70f8 3114 /* PREFIX_0FB8 */
ca164297 3115 {
592d1631 3116 { Bad_Opcode },
4e7d34a6 3117 { "popcntS", { Gv, Ev } },
ca164297 3118 },
4e7d34a6 3119
f12dc422
L
3120 /* PREFIX_0FBC */
3121 {
3122 { "bsfS", { Gv, Ev } },
3123 { "tzcntS", { Gv, Ev } },
3124 { "bsfS", { Gv, Ev } },
3125 },
3126
1ceb70f8 3127 /* PREFIX_0FBD */
050dfa73 3128 {
4e7d34a6
L
3129 { "bsrS", { Gv, Ev } },
3130 { "lzcntS", { Gv, Ev } },
3131 { "bsrS", { Gv, Ev } },
050dfa73
MM
3132 },
3133
1ceb70f8 3134 /* PREFIX_0FC2 */
050dfa73 3135 {
ad19981d
L
3136 { "cmpps", { XM, EXx, CMP } },
3137 { "cmpss", { XM, EXd, CMP } },
3138 { "cmppd", { XM, EXx, CMP } },
3139 { "cmpsd", { XM, EXq, CMP } },
050dfa73 3140 },
246c51aa 3141
4ee52178
L
3142 /* PREFIX_0FC3 */
3143 {
3144 { "movntiS", { Ma, Gv } },
4ee52178
L
3145 },
3146
92fddf8e
L
3147 /* PREFIX_0FC7_REG_6 */
3148 {
3149 { "vmptrld",{ Mq } },
3150 { "vmxon", { Mq } },
3151 { "vmclear",{ Mq } },
92fddf8e
L
3152 },
3153
1ceb70f8 3154 /* PREFIX_0FD0 */
050dfa73 3155 {
592d1631
L
3156 { Bad_Opcode },
3157 { Bad_Opcode },
4e7d34a6
L
3158 { "addsubpd", { XM, EXx } },
3159 { "addsubps", { XM, EXx } },
246c51aa 3160 },
050dfa73 3161
1ceb70f8 3162 /* PREFIX_0FD6 */
050dfa73 3163 {
592d1631 3164 { Bad_Opcode },
4e7d34a6 3165 { "movq2dq",{ XM, MS } },
b6169b20 3166 { "movq", { EXqS, XM } },
4e7d34a6 3167 { "movdq2q",{ MX, XS } },
050dfa73
MM
3168 },
3169
1ceb70f8 3170 /* PREFIX_0FE6 */
7918206c 3171 {
592d1631 3172 { Bad_Opcode },
4e7d34a6
L
3173 { "cvtdq2pd", { XM, EXq } },
3174 { "cvttpd2dq", { XM, EXx } },
3175 { "cvtpd2dq", { XM, EXx } },
7918206c 3176 },
8b38ad71 3177
1ceb70f8 3178 /* PREFIX_0FE7 */
8b38ad71 3179 {
4ee52178 3180 { "movntq", { Mq, MX } },
592d1631 3181 { Bad_Opcode },
75c135a8 3182 { MOD_TABLE (MOD_0FE7_PREFIX_2) },
4e7d34a6
L
3183 },
3184
1ceb70f8 3185 /* PREFIX_0FF0 */
4e7d34a6 3186 {
592d1631
L
3187 { Bad_Opcode },
3188 { Bad_Opcode },
3189 { Bad_Opcode },
1ceb70f8 3190 { MOD_TABLE (MOD_0FF0_PREFIX_3) },
4e7d34a6
L
3191 },
3192
1ceb70f8 3193 /* PREFIX_0FF7 */
4e7d34a6
L
3194 {
3195 { "maskmovq", { MX, MS } },
592d1631 3196 { Bad_Opcode },
4e7d34a6 3197 { "maskmovdqu", { XM, XS } },
8b38ad71 3198 },
42903f7f 3199
1ceb70f8 3200 /* PREFIX_0F3810 */
42903f7f 3201 {
592d1631
L
3202 { Bad_Opcode },
3203 { Bad_Opcode },
88a94849 3204 { "pblendvb", { XM, EXx, XMM0 } },
42903f7f
L
3205 },
3206
1ceb70f8 3207 /* PREFIX_0F3814 */
42903f7f 3208 {
592d1631
L
3209 { Bad_Opcode },
3210 { Bad_Opcode },
88a94849 3211 { "blendvps", { XM, EXx, XMM0 } },
42903f7f
L
3212 },
3213
1ceb70f8 3214 /* PREFIX_0F3815 */
42903f7f 3215 {
592d1631
L
3216 { Bad_Opcode },
3217 { Bad_Opcode },
09a2c6cf 3218 { "blendvpd", { XM, EXx, XMM0 } },
42903f7f
L
3219 },
3220
1ceb70f8 3221 /* PREFIX_0F3817 */
42903f7f 3222 {
592d1631
L
3223 { Bad_Opcode },
3224 { Bad_Opcode },
09a2c6cf 3225 { "ptest", { XM, EXx } },
42903f7f
L
3226 },
3227
1ceb70f8 3228 /* PREFIX_0F3820 */
42903f7f 3229 {
592d1631
L
3230 { Bad_Opcode },
3231 { Bad_Opcode },
8976381e 3232 { "pmovsxbw", { XM, EXq } },
42903f7f
L
3233 },
3234
1ceb70f8 3235 /* PREFIX_0F3821 */
42903f7f 3236 {
592d1631
L
3237 { Bad_Opcode },
3238 { Bad_Opcode },
8976381e 3239 { "pmovsxbd", { XM, EXd } },
42903f7f
L
3240 },
3241
1ceb70f8 3242 /* PREFIX_0F3822 */
42903f7f 3243 {
592d1631
L
3244 { Bad_Opcode },
3245 { Bad_Opcode },
8976381e 3246 { "pmovsxbq", { XM, EXw } },
42903f7f
L
3247 },
3248
1ceb70f8 3249 /* PREFIX_0F3823 */
42903f7f 3250 {
592d1631
L
3251 { Bad_Opcode },
3252 { Bad_Opcode },
8976381e 3253 { "pmovsxwd", { XM, EXq } },
42903f7f
L
3254 },
3255
1ceb70f8 3256 /* PREFIX_0F3824 */
42903f7f 3257 {
592d1631
L
3258 { Bad_Opcode },
3259 { Bad_Opcode },
8976381e 3260 { "pmovsxwq", { XM, EXd } },
42903f7f
L
3261 },
3262
1ceb70f8 3263 /* PREFIX_0F3825 */
42903f7f 3264 {
592d1631
L
3265 { Bad_Opcode },
3266 { Bad_Opcode },
8976381e 3267 { "pmovsxdq", { XM, EXq } },
42903f7f
L
3268 },
3269
1ceb70f8 3270 /* PREFIX_0F3828 */
42903f7f 3271 {
592d1631
L
3272 { Bad_Opcode },
3273 { Bad_Opcode },
09a2c6cf 3274 { "pmuldq", { XM, EXx } },
42903f7f
L
3275 },
3276
1ceb70f8 3277 /* PREFIX_0F3829 */
42903f7f 3278 {
592d1631
L
3279 { Bad_Opcode },
3280 { Bad_Opcode },
09a2c6cf 3281 { "pcmpeqq", { XM, EXx } },
42903f7f
L
3282 },
3283
1ceb70f8 3284 /* PREFIX_0F382A */
42903f7f 3285 {
592d1631
L
3286 { Bad_Opcode },
3287 { Bad_Opcode },
75c135a8 3288 { MOD_TABLE (MOD_0F382A_PREFIX_2) },
42903f7f
L
3289 },
3290
1ceb70f8 3291 /* PREFIX_0F382B */
42903f7f 3292 {
592d1631
L
3293 { Bad_Opcode },
3294 { Bad_Opcode },
09a2c6cf 3295 { "packusdw", { XM, EXx } },
42903f7f
L
3296 },
3297
1ceb70f8 3298 /* PREFIX_0F3830 */
42903f7f 3299 {
592d1631
L
3300 { Bad_Opcode },
3301 { Bad_Opcode },
8976381e 3302 { "pmovzxbw", { XM, EXq } },
42903f7f
L
3303 },
3304
1ceb70f8 3305 /* PREFIX_0F3831 */
42903f7f 3306 {
592d1631
L
3307 { Bad_Opcode },
3308 { Bad_Opcode },
8976381e 3309 { "pmovzxbd", { XM, EXd } },
42903f7f
L
3310 },
3311
1ceb70f8 3312 /* PREFIX_0F3832 */
42903f7f 3313 {
592d1631
L
3314 { Bad_Opcode },
3315 { Bad_Opcode },
8976381e 3316 { "pmovzxbq", { XM, EXw } },
42903f7f
L
3317 },
3318
1ceb70f8 3319 /* PREFIX_0F3833 */
42903f7f 3320 {
592d1631
L
3321 { Bad_Opcode },
3322 { Bad_Opcode },
8976381e 3323 { "pmovzxwd", { XM, EXq } },
42903f7f
L
3324 },
3325
1ceb70f8 3326 /* PREFIX_0F3834 */
42903f7f 3327 {
592d1631
L
3328 { Bad_Opcode },
3329 { Bad_Opcode },
8976381e 3330 { "pmovzxwq", { XM, EXd } },
42903f7f
L
3331 },
3332
1ceb70f8 3333 /* PREFIX_0F3835 */
42903f7f 3334 {
592d1631
L
3335 { Bad_Opcode },
3336 { Bad_Opcode },
8976381e 3337 { "pmovzxdq", { XM, EXq } },
42903f7f
L
3338 },
3339
1ceb70f8 3340 /* PREFIX_0F3837 */
4e7d34a6 3341 {
592d1631
L
3342 { Bad_Opcode },
3343 { Bad_Opcode },
4e7d34a6 3344 { "pcmpgtq", { XM, EXx } },
4e7d34a6
L
3345 },
3346
1ceb70f8 3347 /* PREFIX_0F3838 */
42903f7f 3348 {
592d1631
L
3349 { Bad_Opcode },
3350 { Bad_Opcode },
09a2c6cf 3351 { "pminsb", { XM, EXx } },
42903f7f
L
3352 },
3353
1ceb70f8 3354 /* PREFIX_0F3839 */
42903f7f 3355 {
592d1631
L
3356 { Bad_Opcode },
3357 { Bad_Opcode },
09a2c6cf 3358 { "pminsd", { XM, EXx } },
42903f7f
L
3359 },
3360
1ceb70f8 3361 /* PREFIX_0F383A */
42903f7f 3362 {
592d1631
L
3363 { Bad_Opcode },
3364 { Bad_Opcode },
09a2c6cf 3365 { "pminuw", { XM, EXx } },
42903f7f
L
3366 },
3367
1ceb70f8 3368 /* PREFIX_0F383B */
42903f7f 3369 {
592d1631
L
3370 { Bad_Opcode },
3371 { Bad_Opcode },
09a2c6cf 3372 { "pminud", { XM, EXx } },
42903f7f
L
3373 },
3374
1ceb70f8 3375 /* PREFIX_0F383C */
42903f7f 3376 {
592d1631
L
3377 { Bad_Opcode },
3378 { Bad_Opcode },
09a2c6cf 3379 { "pmaxsb", { XM, EXx } },
42903f7f
L
3380 },
3381
1ceb70f8 3382 /* PREFIX_0F383D */
42903f7f 3383 {
592d1631
L
3384 { Bad_Opcode },
3385 { Bad_Opcode },
09a2c6cf 3386 { "pmaxsd", { XM, EXx } },
42903f7f
L
3387 },
3388
1ceb70f8 3389 /* PREFIX_0F383E */
42903f7f 3390 {
592d1631
L
3391 { Bad_Opcode },
3392 { Bad_Opcode },
09a2c6cf 3393 { "pmaxuw", { XM, EXx } },
42903f7f
L
3394 },
3395
1ceb70f8 3396 /* PREFIX_0F383F */
42903f7f 3397 {
592d1631
L
3398 { Bad_Opcode },
3399 { Bad_Opcode },
09a2c6cf 3400 { "pmaxud", { XM, EXx } },
42903f7f
L
3401 },
3402
1ceb70f8 3403 /* PREFIX_0F3840 */
42903f7f 3404 {
592d1631
L
3405 { Bad_Opcode },
3406 { Bad_Opcode },
09a2c6cf 3407 { "pmulld", { XM, EXx } },
42903f7f
L
3408 },
3409
1ceb70f8 3410 /* PREFIX_0F3841 */
42903f7f 3411 {
592d1631
L
3412 { Bad_Opcode },
3413 { Bad_Opcode },
09a2c6cf 3414 { "phminposuw", { XM, EXx } },
42903f7f
L
3415 },
3416
f1f8f695
L
3417 /* PREFIX_0F3880 */
3418 {
592d1631
L
3419 { Bad_Opcode },
3420 { Bad_Opcode },
f1f8f695 3421 { "invept", { Gm, Mo } },
f1f8f695
L
3422 },
3423
3424 /* PREFIX_0F3881 */
3425 {
592d1631
L
3426 { Bad_Opcode },
3427 { Bad_Opcode },
f1f8f695 3428 { "invvpid", { Gm, Mo } },
f1f8f695
L
3429 },
3430
6c30d220
L
3431 /* PREFIX_0F3882 */
3432 {
3433 { Bad_Opcode },
3434 { Bad_Opcode },
3435 { "invpcid", { Gm, M } },
3436 },
3437
c0f3af97
L
3438 /* PREFIX_0F38DB */
3439 {
592d1631
L
3440 { Bad_Opcode },
3441 { Bad_Opcode },
c0f3af97 3442 { "aesimc", { XM, EXx } },
c0f3af97
L
3443 },
3444
3445 /* PREFIX_0F38DC */
3446 {
592d1631
L
3447 { Bad_Opcode },
3448 { Bad_Opcode },
c0f3af97 3449 { "aesenc", { XM, EXx } },
c0f3af97
L
3450 },
3451
3452 /* PREFIX_0F38DD */
3453 {
592d1631
L
3454 { Bad_Opcode },
3455 { Bad_Opcode },
c0f3af97 3456 { "aesenclast", { XM, EXx } },
c0f3af97
L
3457 },
3458
3459 /* PREFIX_0F38DE */
3460 {
592d1631
L
3461 { Bad_Opcode },
3462 { Bad_Opcode },
c0f3af97 3463 { "aesdec", { XM, EXx } },
c0f3af97
L
3464 },
3465
3466 /* PREFIX_0F38DF */
3467 {
592d1631
L
3468 { Bad_Opcode },
3469 { Bad_Opcode },
c0f3af97 3470 { "aesdeclast", { XM, EXx } },
c0f3af97
L
3471 },
3472
1ceb70f8 3473 /* PREFIX_0F38F0 */
4e7d34a6 3474 {
f1f8f695 3475 { "movbeS", { Gv, { MOVBE_Fixup, v_mode } } },
592d1631 3476 { Bad_Opcode },
f1f8f695 3477 { "movbeS", { Gv, { MOVBE_Fixup, v_mode } } },
4e7d34a6
L
3478 { "crc32", { Gdq, { CRC32_Fixup, b_mode } } },
3479 },
3480
1ceb70f8 3481 /* PREFIX_0F38F1 */
4e7d34a6 3482 {
f1f8f695 3483 { "movbeS", { { MOVBE_Fixup, v_mode }, Gv } },
592d1631 3484 { Bad_Opcode },
f1f8f695 3485 { "movbeS", { { MOVBE_Fixup, v_mode }, Gv } },
4e7d34a6
L
3486 { "crc32", { Gdq, { CRC32_Fixup, v_mode } } },
3487 },
3488
e2e1fcde
L
3489 /* PREFIX_0F38F6 */
3490 {
3491 { Bad_Opcode },
3492 { "adoxS", { Gdq, Edq} },
3493 { "adcxS", { Gdq, Edq} },
3494 { Bad_Opcode },
3495 },
3496
1ceb70f8 3497 /* PREFIX_0F3A08 */
42903f7f 3498 {
592d1631
L
3499 { Bad_Opcode },
3500 { Bad_Opcode },
09a2c6cf 3501 { "roundps", { XM, EXx, Ib } },
42903f7f
L
3502 },
3503
1ceb70f8 3504 /* PREFIX_0F3A09 */
42903f7f 3505 {
592d1631
L
3506 { Bad_Opcode },
3507 { Bad_Opcode },
09a2c6cf 3508 { "roundpd", { XM, EXx, Ib } },
42903f7f
L
3509 },
3510
1ceb70f8 3511 /* PREFIX_0F3A0A */
42903f7f 3512 {
592d1631
L
3513 { Bad_Opcode },
3514 { Bad_Opcode },
09335d05 3515 { "roundss", { XM, EXd, Ib } },
42903f7f
L
3516 },
3517
1ceb70f8 3518 /* PREFIX_0F3A0B */
42903f7f 3519 {
592d1631
L
3520 { Bad_Opcode },
3521 { Bad_Opcode },
09335d05 3522 { "roundsd", { XM, EXq, Ib } },
42903f7f
L
3523 },
3524
1ceb70f8 3525 /* PREFIX_0F3A0C */
42903f7f 3526 {
592d1631
L
3527 { Bad_Opcode },
3528 { Bad_Opcode },
09a2c6cf 3529 { "blendps", { XM, EXx, Ib } },
42903f7f
L
3530 },
3531
1ceb70f8 3532 /* PREFIX_0F3A0D */
42903f7f 3533 {
592d1631
L
3534 { Bad_Opcode },
3535 { Bad_Opcode },
09a2c6cf 3536 { "blendpd", { XM, EXx, Ib } },
42903f7f
L
3537 },
3538
1ceb70f8 3539 /* PREFIX_0F3A0E */
42903f7f 3540 {
592d1631
L
3541 { Bad_Opcode },
3542 { Bad_Opcode },
09a2c6cf 3543 { "pblendw", { XM, EXx, Ib } },
42903f7f
L
3544 },
3545
1ceb70f8 3546 /* PREFIX_0F3A14 */
42903f7f 3547 {
592d1631
L
3548 { Bad_Opcode },
3549 { Bad_Opcode },
42903f7f 3550 { "pextrb", { Edqb, XM, Ib } },
42903f7f
L
3551 },
3552
1ceb70f8 3553 /* PREFIX_0F3A15 */
42903f7f 3554 {
592d1631
L
3555 { Bad_Opcode },
3556 { Bad_Opcode },
42903f7f 3557 { "pextrw", { Edqw, XM, Ib } },
42903f7f
L
3558 },
3559
1ceb70f8 3560 /* PREFIX_0F3A16 */
42903f7f 3561 {
592d1631
L
3562 { Bad_Opcode },
3563 { Bad_Opcode },
42903f7f 3564 { "pextrK", { Edq, XM, Ib } },
42903f7f
L
3565 },
3566
1ceb70f8 3567 /* PREFIX_0F3A17 */
42903f7f 3568 {
592d1631
L
3569 { Bad_Opcode },
3570 { Bad_Opcode },
42903f7f 3571 { "extractps", { Edqd, XM, Ib } },
42903f7f
L
3572 },
3573
1ceb70f8 3574 /* PREFIX_0F3A20 */
42903f7f 3575 {
592d1631
L
3576 { Bad_Opcode },
3577 { Bad_Opcode },
42903f7f 3578 { "pinsrb", { XM, Edqb, Ib } },
42903f7f
L
3579 },
3580
1ceb70f8 3581 /* PREFIX_0F3A21 */
42903f7f 3582 {
592d1631
L
3583 { Bad_Opcode },
3584 { Bad_Opcode },
8976381e 3585 { "insertps", { XM, EXd, Ib } },
42903f7f
L
3586 },
3587
1ceb70f8 3588 /* PREFIX_0F3A22 */
42903f7f 3589 {
592d1631
L
3590 { Bad_Opcode },
3591 { Bad_Opcode },
42903f7f 3592 { "pinsrK", { XM, Edq, Ib } },
42903f7f
L
3593 },
3594
1ceb70f8 3595 /* PREFIX_0F3A40 */
42903f7f 3596 {
592d1631
L
3597 { Bad_Opcode },
3598 { Bad_Opcode },
09a2c6cf 3599 { "dpps", { XM, EXx, Ib } },
42903f7f
L
3600 },
3601
1ceb70f8 3602 /* PREFIX_0F3A41 */
42903f7f 3603 {
592d1631
L
3604 { Bad_Opcode },
3605 { Bad_Opcode },
09a2c6cf 3606 { "dppd", { XM, EXx, Ib } },
42903f7f
L
3607 },
3608
1ceb70f8 3609 /* PREFIX_0F3A42 */
42903f7f 3610 {
592d1631
L
3611 { Bad_Opcode },
3612 { Bad_Opcode },
09a2c6cf 3613 { "mpsadbw", { XM, EXx, Ib } },
42903f7f 3614 },
381d071f 3615
c0f3af97
L
3616 /* PREFIX_0F3A44 */
3617 {
592d1631
L
3618 { Bad_Opcode },
3619 { Bad_Opcode },
c0f3af97 3620 { "pclmulqdq", { XM, EXx, PCLMUL } },
c0f3af97
L
3621 },
3622
1ceb70f8 3623 /* PREFIX_0F3A60 */
381d071f 3624 {
592d1631
L
3625 { Bad_Opcode },
3626 { Bad_Opcode },
4e7d34a6 3627 { "pcmpestrm", { XM, EXx, Ib } },
381d071f
L
3628 },
3629
1ceb70f8 3630 /* PREFIX_0F3A61 */
381d071f 3631 {
592d1631
L
3632 { Bad_Opcode },
3633 { Bad_Opcode },
4e7d34a6 3634 { "pcmpestri", { XM, EXx, Ib } },
381d071f
L
3635 },
3636
1ceb70f8 3637 /* PREFIX_0F3A62 */
381d071f 3638 {
592d1631
L
3639 { Bad_Opcode },
3640 { Bad_Opcode },
4e7d34a6 3641 { "pcmpistrm", { XM, EXx, Ib } },
381d071f
L
3642 },
3643
1ceb70f8 3644 /* PREFIX_0F3A63 */
381d071f 3645 {
592d1631
L
3646 { Bad_Opcode },
3647 { Bad_Opcode },
4e7d34a6 3648 { "pcmpistri", { XM, EXx, Ib } },
381d071f 3649 },
09a2c6cf 3650
c0f3af97 3651 /* PREFIX_0F3ADF */
09a2c6cf 3652 {
592d1631
L
3653 { Bad_Opcode },
3654 { Bad_Opcode },
c0f3af97 3655 { "aeskeygenassist", { XM, EXx, Ib } },
09a2c6cf
L
3656 },
3657
592a252b 3658 /* PREFIX_VEX_0F10 */
09a2c6cf 3659 {
592a252b
L
3660 { VEX_W_TABLE (VEX_W_0F10_P_0) },
3661 { VEX_LEN_TABLE (VEX_LEN_0F10_P_1) },
3662 { VEX_W_TABLE (VEX_W_0F10_P_2) },
3663 { VEX_LEN_TABLE (VEX_LEN_0F10_P_3) },
09a2c6cf
L
3664 },
3665
592a252b 3666 /* PREFIX_VEX_0F11 */
09a2c6cf 3667 {
592a252b
L
3668 { VEX_W_TABLE (VEX_W_0F11_P_0) },
3669 { VEX_LEN_TABLE (VEX_LEN_0F11_P_1) },
3670 { VEX_W_TABLE (VEX_W_0F11_P_2) },
3671 { VEX_LEN_TABLE (VEX_LEN_0F11_P_3) },
09a2c6cf
L
3672 },
3673
592a252b 3674 /* PREFIX_VEX_0F12 */
09a2c6cf 3675 {
592a252b
L
3676 { MOD_TABLE (MOD_VEX_0F12_PREFIX_0) },
3677 { VEX_W_TABLE (VEX_W_0F12_P_1) },
3678 { VEX_LEN_TABLE (VEX_LEN_0F12_P_2) },
3679 { VEX_W_TABLE (VEX_W_0F12_P_3) },
09a2c6cf
L
3680 },
3681
592a252b 3682 /* PREFIX_VEX_0F16 */
09a2c6cf 3683 {
592a252b
L
3684 { MOD_TABLE (MOD_VEX_0F16_PREFIX_0) },
3685 { VEX_W_TABLE (VEX_W_0F16_P_1) },
3686 { VEX_LEN_TABLE (VEX_LEN_0F16_P_2) },
5f754f58 3687 },
7c52e0e8 3688
592a252b 3689 /* PREFIX_VEX_0F2A */
5f754f58 3690 {
592d1631 3691 { Bad_Opcode },
592a252b 3692 { VEX_LEN_TABLE (VEX_LEN_0F2A_P_1) },
592d1631 3693 { Bad_Opcode },
592a252b 3694 { VEX_LEN_TABLE (VEX_LEN_0F2A_P_3) },
5f754f58 3695 },
7c52e0e8 3696
592a252b 3697 /* PREFIX_VEX_0F2C */
5f754f58 3698 {
592d1631 3699 { Bad_Opcode },
592a252b 3700 { VEX_LEN_TABLE (VEX_LEN_0F2C_P_1) },
592d1631 3701 { Bad_Opcode },
592a252b 3702 { VEX_LEN_TABLE (VEX_LEN_0F2C_P_3) },
5f754f58 3703 },
7c52e0e8 3704
592a252b 3705 /* PREFIX_VEX_0F2D */
7c52e0e8 3706 {
592d1631 3707 { Bad_Opcode },
592a252b 3708 { VEX_LEN_TABLE (VEX_LEN_0F2D_P_1) },
592d1631 3709 { Bad_Opcode },
592a252b 3710 { VEX_LEN_TABLE (VEX_LEN_0F2D_P_3) },
7c52e0e8
L
3711 },
3712
592a252b 3713 /* PREFIX_VEX_0F2E */
7c52e0e8 3714 {
592a252b 3715 { VEX_LEN_TABLE (VEX_LEN_0F2E_P_0) },
592d1631 3716 { Bad_Opcode },
592a252b 3717 { VEX_LEN_TABLE (VEX_LEN_0F2E_P_2) },
7c52e0e8
L
3718 },
3719
592a252b 3720 /* PREFIX_VEX_0F2F */
7c52e0e8 3721 {
592a252b 3722 { VEX_LEN_TABLE (VEX_LEN_0F2F_P_0) },
592d1631 3723 { Bad_Opcode },
592a252b 3724 { VEX_LEN_TABLE (VEX_LEN_0F2F_P_2) },
7c52e0e8
L
3725 },
3726
592a252b 3727 /* PREFIX_VEX_0F51 */
7c52e0e8 3728 {
592a252b
L
3729 { VEX_W_TABLE (VEX_W_0F51_P_0) },
3730 { VEX_LEN_TABLE (VEX_LEN_0F51_P_1) },
3731 { VEX_W_TABLE (VEX_W_0F51_P_2) },
3732 { VEX_LEN_TABLE (VEX_LEN_0F51_P_3) },
7c52e0e8
L
3733 },
3734
592a252b 3735 /* PREFIX_VEX_0F52 */
7c52e0e8 3736 {
592a252b
L
3737 { VEX_W_TABLE (VEX_W_0F52_P_0) },
3738 { VEX_LEN_TABLE (VEX_LEN_0F52_P_1) },
7c52e0e8
L
3739 },
3740
592a252b 3741 /* PREFIX_VEX_0F53 */
7c52e0e8 3742 {
592a252b
L
3743 { VEX_W_TABLE (VEX_W_0F53_P_0) },
3744 { VEX_LEN_TABLE (VEX_LEN_0F53_P_1) },
7c52e0e8
L
3745 },
3746
592a252b 3747 /* PREFIX_VEX_0F58 */
7c52e0e8 3748 {
592a252b
L
3749 { VEX_W_TABLE (VEX_W_0F58_P_0) },
3750 { VEX_LEN_TABLE (VEX_LEN_0F58_P_1) },
3751 { VEX_W_TABLE (VEX_W_0F58_P_2) },
3752 { VEX_LEN_TABLE (VEX_LEN_0F58_P_3) },
7c52e0e8
L
3753 },
3754
592a252b 3755 /* PREFIX_VEX_0F59 */
7c52e0e8 3756 {
592a252b
L
3757 { VEX_W_TABLE (VEX_W_0F59_P_0) },
3758 { VEX_LEN_TABLE (VEX_LEN_0F59_P_1) },
3759 { VEX_W_TABLE (VEX_W_0F59_P_2) },
3760 { VEX_LEN_TABLE (VEX_LEN_0F59_P_3) },
7c52e0e8
L
3761 },
3762
592a252b 3763 /* PREFIX_VEX_0F5A */
7c52e0e8 3764 {
592a252b
L
3765 { VEX_W_TABLE (VEX_W_0F5A_P_0) },
3766 { VEX_LEN_TABLE (VEX_LEN_0F5A_P_1) },
c0f3af97 3767 { "vcvtpd2ps%XY", { XMM, EXx } },
592a252b 3768 { VEX_LEN_TABLE (VEX_LEN_0F5A_P_3) },
7c52e0e8
L
3769 },
3770
592a252b 3771 /* PREFIX_VEX_0F5B */
7c52e0e8 3772 {
592a252b
L
3773 { VEX_W_TABLE (VEX_W_0F5B_P_0) },
3774 { VEX_W_TABLE (VEX_W_0F5B_P_1) },
3775 { VEX_W_TABLE (VEX_W_0F5B_P_2) },
7c52e0e8
L
3776 },
3777
592a252b 3778 /* PREFIX_VEX_0F5C */
7c52e0e8 3779 {
592a252b
L
3780 { VEX_W_TABLE (VEX_W_0F5C_P_0) },
3781 { VEX_LEN_TABLE (VEX_LEN_0F5C_P_1) },
3782 { VEX_W_TABLE (VEX_W_0F5C_P_2) },
3783 { VEX_LEN_TABLE (VEX_LEN_0F5C_P_3) },
7c52e0e8
L
3784 },
3785
592a252b 3786 /* PREFIX_VEX_0F5D */
7c52e0e8 3787 {
592a252b
L
3788 { VEX_W_TABLE (VEX_W_0F5D_P_0) },
3789 { VEX_LEN_TABLE (VEX_LEN_0F5D_P_1) },
3790 { VEX_W_TABLE (VEX_W_0F5D_P_2) },
3791 { VEX_LEN_TABLE (VEX_LEN_0F5D_P_3) },
7c52e0e8
L
3792 },
3793
592a252b 3794 /* PREFIX_VEX_0F5E */
7c52e0e8 3795 {
592a252b
L
3796 { VEX_W_TABLE (VEX_W_0F5E_P_0) },
3797 { VEX_LEN_TABLE (VEX_LEN_0F5E_P_1) },
3798 { VEX_W_TABLE (VEX_W_0F5E_P_2) },
3799 { VEX_LEN_TABLE (VEX_LEN_0F5E_P_3) },
7c52e0e8
L
3800 },
3801
592a252b 3802 /* PREFIX_VEX_0F5F */
7c52e0e8 3803 {
592a252b
L
3804 { VEX_W_TABLE (VEX_W_0F5F_P_0) },
3805 { VEX_LEN_TABLE (VEX_LEN_0F5F_P_1) },
3806 { VEX_W_TABLE (VEX_W_0F5F_P_2) },
3807 { VEX_LEN_TABLE (VEX_LEN_0F5F_P_3) },
7c52e0e8
L
3808 },
3809
592a252b 3810 /* PREFIX_VEX_0F60 */
7c52e0e8 3811 {
592d1631
L
3812 { Bad_Opcode },
3813 { Bad_Opcode },
6c30d220 3814 { VEX_W_TABLE (VEX_W_0F60_P_2) },
7c52e0e8
L
3815 },
3816
592a252b 3817 /* PREFIX_VEX_0F61 */
7c52e0e8 3818 {
592d1631
L
3819 { Bad_Opcode },
3820 { Bad_Opcode },
6c30d220 3821 { VEX_W_TABLE (VEX_W_0F61_P_2) },
7c52e0e8
L
3822 },
3823
592a252b 3824 /* PREFIX_VEX_0F62 */
7c52e0e8 3825 {
592d1631
L
3826 { Bad_Opcode },
3827 { Bad_Opcode },
6c30d220 3828 { VEX_W_TABLE (VEX_W_0F62_P_2) },
7c52e0e8
L
3829 },
3830
592a252b 3831 /* PREFIX_VEX_0F63 */
7c52e0e8 3832 {
592d1631
L
3833 { Bad_Opcode },
3834 { Bad_Opcode },
6c30d220 3835 { VEX_W_TABLE (VEX_W_0F63_P_2) },
7c52e0e8
L
3836 },
3837
592a252b 3838 /* PREFIX_VEX_0F64 */
7c52e0e8 3839 {
592d1631
L
3840 { Bad_Opcode },
3841 { Bad_Opcode },
6c30d220 3842 { VEX_W_TABLE (VEX_W_0F64_P_2) },
7c52e0e8
L
3843 },
3844
592a252b 3845 /* PREFIX_VEX_0F65 */
7c52e0e8 3846 {
592d1631
L
3847 { Bad_Opcode },
3848 { Bad_Opcode },
6c30d220 3849 { VEX_W_TABLE (VEX_W_0F65_P_2) },
7c52e0e8
L
3850 },
3851
592a252b 3852 /* PREFIX_VEX_0F66 */
7c52e0e8 3853 {
592d1631
L
3854 { Bad_Opcode },
3855 { Bad_Opcode },
6c30d220 3856 { VEX_W_TABLE (VEX_W_0F66_P_2) },
7c52e0e8 3857 },
6439fc28 3858
592a252b 3859 /* PREFIX_VEX_0F67 */
331d2d0d 3860 {
592d1631
L
3861 { Bad_Opcode },
3862 { Bad_Opcode },
6c30d220 3863 { VEX_W_TABLE (VEX_W_0F67_P_2) },
c0f3af97
L
3864 },
3865
592a252b 3866 /* PREFIX_VEX_0F68 */
c0f3af97 3867 {
592d1631
L
3868 { Bad_Opcode },
3869 { Bad_Opcode },
6c30d220 3870 { VEX_W_TABLE (VEX_W_0F68_P_2) },
c0f3af97
L
3871 },
3872
592a252b 3873 /* PREFIX_VEX_0F69 */
c0f3af97 3874 {
592d1631
L
3875 { Bad_Opcode },
3876 { Bad_Opcode },
6c30d220 3877 { VEX_W_TABLE (VEX_W_0F69_P_2) },
c0f3af97
L
3878 },
3879
592a252b 3880 /* PREFIX_VEX_0F6A */
c0f3af97 3881 {
592d1631
L
3882 { Bad_Opcode },
3883 { Bad_Opcode },
6c30d220 3884 { VEX_W_TABLE (VEX_W_0F6A_P_2) },
c0f3af97
L
3885 },
3886
592a252b 3887 /* PREFIX_VEX_0F6B */
c0f3af97 3888 {
592d1631
L
3889 { Bad_Opcode },
3890 { Bad_Opcode },
6c30d220 3891 { VEX_W_TABLE (VEX_W_0F6B_P_2) },
c0f3af97
L
3892 },
3893
592a252b 3894 /* PREFIX_VEX_0F6C */
c0f3af97 3895 {
592d1631
L
3896 { Bad_Opcode },
3897 { Bad_Opcode },
6c30d220 3898 { VEX_W_TABLE (VEX_W_0F6C_P_2) },
c0f3af97
L
3899 },
3900
592a252b 3901 /* PREFIX_VEX_0F6D */
c0f3af97 3902 {
592d1631
L
3903 { Bad_Opcode },
3904 { Bad_Opcode },
6c30d220 3905 { VEX_W_TABLE (VEX_W_0F6D_P_2) },
c0f3af97
L
3906 },
3907
592a252b 3908 /* PREFIX_VEX_0F6E */
c0f3af97 3909 {
592d1631
L
3910 { Bad_Opcode },
3911 { Bad_Opcode },
592a252b 3912 { VEX_LEN_TABLE (VEX_LEN_0F6E_P_2) },
c0f3af97
L
3913 },
3914
592a252b 3915 /* PREFIX_VEX_0F6F */
c0f3af97 3916 {
592d1631 3917 { Bad_Opcode },
592a252b
L
3918 { VEX_W_TABLE (VEX_W_0F6F_P_1) },
3919 { VEX_W_TABLE (VEX_W_0F6F_P_2) },
c0f3af97
L
3920 },
3921
592a252b 3922 /* PREFIX_VEX_0F70 */
c0f3af97 3923 {
592d1631 3924 { Bad_Opcode },
6c30d220
L
3925 { VEX_W_TABLE (VEX_W_0F70_P_1) },
3926 { VEX_W_TABLE (VEX_W_0F70_P_2) },
3927 { VEX_W_TABLE (VEX_W_0F70_P_3) },
c0f3af97
L
3928 },
3929
592a252b 3930 /* PREFIX_VEX_0F71_REG_2 */
c0f3af97 3931 {
592d1631
L
3932 { Bad_Opcode },
3933 { Bad_Opcode },
6c30d220 3934 { VEX_W_TABLE (VEX_W_0F71_R_2_P_2) },
c0f3af97
L
3935 },
3936
592a252b 3937 /* PREFIX_VEX_0F71_REG_4 */
c0f3af97 3938 {
592d1631
L
3939 { Bad_Opcode },
3940 { Bad_Opcode },
6c30d220 3941 { VEX_W_TABLE (VEX_W_0F71_R_4_P_2) },
c0f3af97
L
3942 },
3943
592a252b 3944 /* PREFIX_VEX_0F71_REG_6 */
c0f3af97 3945 {
592d1631
L
3946 { Bad_Opcode },
3947 { Bad_Opcode },
6c30d220 3948 { VEX_W_TABLE (VEX_W_0F71_R_6_P_2) },
c0f3af97
L
3949 },
3950
592a252b 3951 /* PREFIX_VEX_0F72_REG_2 */
c0f3af97 3952 {
592d1631
L
3953 { Bad_Opcode },
3954 { Bad_Opcode },
6c30d220 3955 { VEX_W_TABLE (VEX_W_0F72_R_2_P_2) },
c0f3af97
L
3956 },
3957
592a252b 3958 /* PREFIX_VEX_0F72_REG_4 */
c0f3af97 3959 {
592d1631
L
3960 { Bad_Opcode },
3961 { Bad_Opcode },
6c30d220 3962 { VEX_W_TABLE (VEX_W_0F72_R_4_P_2) },
c0f3af97
L
3963 },
3964
592a252b 3965 /* PREFIX_VEX_0F72_REG_6 */
c0f3af97 3966 {
592d1631
L
3967 { Bad_Opcode },
3968 { Bad_Opcode },
6c30d220 3969 { VEX_W_TABLE (VEX_W_0F72_R_6_P_2) },
c0f3af97
L
3970 },
3971
592a252b 3972 /* PREFIX_VEX_0F73_REG_2 */
c0f3af97 3973 {
592d1631
L
3974 { Bad_Opcode },
3975 { Bad_Opcode },
6c30d220 3976 { VEX_W_TABLE (VEX_W_0F73_R_2_P_2) },
c0f3af97
L
3977 },
3978
592a252b 3979 /* PREFIX_VEX_0F73_REG_3 */
c0f3af97 3980 {
592d1631
L
3981 { Bad_Opcode },
3982 { Bad_Opcode },
6c30d220 3983 { VEX_W_TABLE (VEX_W_0F73_R_3_P_2) },
c0f3af97
L
3984 },
3985
592a252b 3986 /* PREFIX_VEX_0F73_REG_6 */
c0f3af97 3987 {
592d1631
L
3988 { Bad_Opcode },
3989 { Bad_Opcode },
6c30d220 3990 { VEX_W_TABLE (VEX_W_0F73_R_6_P_2) },
c0f3af97
L
3991 },
3992
592a252b 3993 /* PREFIX_VEX_0F73_REG_7 */
c0f3af97 3994 {
592d1631
L
3995 { Bad_Opcode },
3996 { Bad_Opcode },
6c30d220 3997 { VEX_W_TABLE (VEX_W_0F73_R_7_P_2) },
c0f3af97
L
3998 },
3999
592a252b 4000 /* PREFIX_VEX_0F74 */
c0f3af97 4001 {
592d1631
L
4002 { Bad_Opcode },
4003 { Bad_Opcode },
6c30d220 4004 { VEX_W_TABLE (VEX_W_0F74_P_2) },
c0f3af97
L
4005 },
4006
592a252b 4007 /* PREFIX_VEX_0F75 */
c0f3af97 4008 {
592d1631
L
4009 { Bad_Opcode },
4010 { Bad_Opcode },
6c30d220 4011 { VEX_W_TABLE (VEX_W_0F75_P_2) },
c0f3af97
L
4012 },
4013
592a252b 4014 /* PREFIX_VEX_0F76 */
c0f3af97 4015 {
592d1631
L
4016 { Bad_Opcode },
4017 { Bad_Opcode },
6c30d220 4018 { VEX_W_TABLE (VEX_W_0F76_P_2) },
c0f3af97
L
4019 },
4020
592a252b 4021 /* PREFIX_VEX_0F77 */
c0f3af97 4022 {
592a252b 4023 { VEX_W_TABLE (VEX_W_0F77_P_0) },
c0f3af97
L
4024 },
4025
592a252b 4026 /* PREFIX_VEX_0F7C */
c0f3af97 4027 {
592d1631
L
4028 { Bad_Opcode },
4029 { Bad_Opcode },
592a252b
L
4030 { VEX_W_TABLE (VEX_W_0F7C_P_2) },
4031 { VEX_W_TABLE (VEX_W_0F7C_P_3) },
c0f3af97
L
4032 },
4033
592a252b 4034 /* PREFIX_VEX_0F7D */
c0f3af97 4035 {
592d1631
L
4036 { Bad_Opcode },
4037 { Bad_Opcode },
592a252b
L
4038 { VEX_W_TABLE (VEX_W_0F7D_P_2) },
4039 { VEX_W_TABLE (VEX_W_0F7D_P_3) },
c0f3af97
L
4040 },
4041
592a252b 4042 /* PREFIX_VEX_0F7E */
c0f3af97 4043 {
592d1631 4044 { Bad_Opcode },
592a252b
L
4045 { VEX_LEN_TABLE (VEX_LEN_0F7E_P_1) },
4046 { VEX_LEN_TABLE (VEX_LEN_0F7E_P_2) },
c0f3af97
L
4047 },
4048
592a252b 4049 /* PREFIX_VEX_0F7F */
c0f3af97 4050 {
592d1631 4051 { Bad_Opcode },
592a252b
L
4052 { VEX_W_TABLE (VEX_W_0F7F_P_1) },
4053 { VEX_W_TABLE (VEX_W_0F7F_P_2) },
c0f3af97
L
4054 },
4055
592a252b 4056 /* PREFIX_VEX_0FC2 */
c0f3af97 4057 {
592a252b
L
4058 { VEX_W_TABLE (VEX_W_0FC2_P_0) },
4059 { VEX_LEN_TABLE (VEX_LEN_0FC2_P_1) },
4060 { VEX_W_TABLE (VEX_W_0FC2_P_2) },
4061 { VEX_LEN_TABLE (VEX_LEN_0FC2_P_3) },
c0f3af97
L
4062 },
4063
592a252b 4064 /* PREFIX_VEX_0FC4 */
c0f3af97 4065 {
592d1631
L
4066 { Bad_Opcode },
4067 { Bad_Opcode },
592a252b 4068 { VEX_LEN_TABLE (VEX_LEN_0FC4_P_2) },
c0f3af97
L
4069 },
4070
592a252b 4071 /* PREFIX_VEX_0FC5 */
c0f3af97 4072 {
592d1631
L
4073 { Bad_Opcode },
4074 { Bad_Opcode },
592a252b 4075 { VEX_LEN_TABLE (VEX_LEN_0FC5_P_2) },
c0f3af97
L
4076 },
4077
592a252b 4078 /* PREFIX_VEX_0FD0 */
c0f3af97 4079 {
592d1631
L
4080 { Bad_Opcode },
4081 { Bad_Opcode },
592a252b
L
4082 { VEX_W_TABLE (VEX_W_0FD0_P_2) },
4083 { VEX_W_TABLE (VEX_W_0FD0_P_3) },
c0f3af97
L
4084 },
4085
592a252b 4086 /* PREFIX_VEX_0FD1 */
c0f3af97 4087 {
592d1631
L
4088 { Bad_Opcode },
4089 { Bad_Opcode },
6c30d220 4090 { VEX_W_TABLE (VEX_W_0FD1_P_2) },
c0f3af97
L
4091 },
4092
592a252b 4093 /* PREFIX_VEX_0FD2 */
c0f3af97 4094 {
592d1631
L
4095 { Bad_Opcode },
4096 { Bad_Opcode },
6c30d220 4097 { VEX_W_TABLE (VEX_W_0FD2_P_2) },
c0f3af97
L
4098 },
4099
592a252b 4100 /* PREFIX_VEX_0FD3 */
c0f3af97 4101 {
592d1631
L
4102 { Bad_Opcode },
4103 { Bad_Opcode },
6c30d220 4104 { VEX_W_TABLE (VEX_W_0FD3_P_2) },
c0f3af97
L
4105 },
4106
592a252b 4107 /* PREFIX_VEX_0FD4 */
c0f3af97 4108 {
592d1631
L
4109 { Bad_Opcode },
4110 { Bad_Opcode },
6c30d220 4111 { VEX_W_TABLE (VEX_W_0FD4_P_2) },
c0f3af97
L
4112 },
4113
592a252b 4114 /* PREFIX_VEX_0FD5 */
c0f3af97 4115 {
592d1631
L
4116 { Bad_Opcode },
4117 { Bad_Opcode },
6c30d220 4118 { VEX_W_TABLE (VEX_W_0FD5_P_2) },
c0f3af97
L
4119 },
4120
592a252b 4121 /* PREFIX_VEX_0FD6 */
c0f3af97 4122 {
592d1631
L
4123 { Bad_Opcode },
4124 { Bad_Opcode },
592a252b 4125 { VEX_LEN_TABLE (VEX_LEN_0FD6_P_2) },
c0f3af97
L
4126 },
4127
592a252b 4128 /* PREFIX_VEX_0FD7 */
c0f3af97 4129 {
592d1631
L
4130 { Bad_Opcode },
4131 { Bad_Opcode },
592a252b 4132 { MOD_TABLE (MOD_VEX_0FD7_PREFIX_2) },
c0f3af97
L
4133 },
4134
592a252b 4135 /* PREFIX_VEX_0FD8 */
c0f3af97 4136 {
592d1631
L
4137 { Bad_Opcode },
4138 { Bad_Opcode },
6c30d220 4139 { VEX_W_TABLE (VEX_W_0FD8_P_2) },
c0f3af97
L
4140 },
4141
592a252b 4142 /* PREFIX_VEX_0FD9 */
c0f3af97 4143 {
592d1631
L
4144 { Bad_Opcode },
4145 { Bad_Opcode },
6c30d220 4146 { VEX_W_TABLE (VEX_W_0FD9_P_2) },
c0f3af97
L
4147 },
4148
592a252b 4149 /* PREFIX_VEX_0FDA */
c0f3af97 4150 {
592d1631
L
4151 { Bad_Opcode },
4152 { Bad_Opcode },
6c30d220 4153 { VEX_W_TABLE (VEX_W_0FDA_P_2) },
c0f3af97
L
4154 },
4155
592a252b 4156 /* PREFIX_VEX_0FDB */
c0f3af97 4157 {
592d1631
L
4158 { Bad_Opcode },
4159 { Bad_Opcode },
6c30d220 4160 { VEX_W_TABLE (VEX_W_0FDB_P_2) },
c0f3af97
L
4161 },
4162
592a252b 4163 /* PREFIX_VEX_0FDC */
c0f3af97 4164 {
592d1631
L
4165 { Bad_Opcode },
4166 { Bad_Opcode },
6c30d220 4167 { VEX_W_TABLE (VEX_W_0FDC_P_2) },
c0f3af97
L
4168 },
4169
592a252b 4170 /* PREFIX_VEX_0FDD */
c0f3af97 4171 {
592d1631
L
4172 { Bad_Opcode },
4173 { Bad_Opcode },
6c30d220 4174 { VEX_W_TABLE (VEX_W_0FDD_P_2) },
c0f3af97
L
4175 },
4176
592a252b 4177 /* PREFIX_VEX_0FDE */
c0f3af97 4178 {
592d1631
L
4179 { Bad_Opcode },
4180 { Bad_Opcode },
6c30d220 4181 { VEX_W_TABLE (VEX_W_0FDE_P_2) },
c0f3af97
L
4182 },
4183
592a252b 4184 /* PREFIX_VEX_0FDF */
c0f3af97 4185 {
592d1631
L
4186 { Bad_Opcode },
4187 { Bad_Opcode },
6c30d220 4188 { VEX_W_TABLE (VEX_W_0FDF_P_2) },
c0f3af97
L
4189 },
4190
592a252b 4191 /* PREFIX_VEX_0FE0 */
c0f3af97 4192 {
592d1631
L
4193 { Bad_Opcode },
4194 { Bad_Opcode },
6c30d220 4195 { VEX_W_TABLE (VEX_W_0FE0_P_2) },
c0f3af97
L
4196 },
4197
592a252b 4198 /* PREFIX_VEX_0FE1 */
c0f3af97 4199 {
592d1631
L
4200 { Bad_Opcode },
4201 { Bad_Opcode },
6c30d220 4202 { VEX_W_TABLE (VEX_W_0FE1_P_2) },
c0f3af97
L
4203 },
4204
592a252b 4205 /* PREFIX_VEX_0FE2 */
c0f3af97 4206 {
592d1631
L
4207 { Bad_Opcode },
4208 { Bad_Opcode },
6c30d220 4209 { VEX_W_TABLE (VEX_W_0FE2_P_2) },
c0f3af97
L
4210 },
4211
592a252b 4212 /* PREFIX_VEX_0FE3 */
c0f3af97 4213 {
592d1631
L
4214 { Bad_Opcode },
4215 { Bad_Opcode },
6c30d220 4216 { VEX_W_TABLE (VEX_W_0FE3_P_2) },
c0f3af97
L
4217 },
4218
592a252b 4219 /* PREFIX_VEX_0FE4 */
c0f3af97 4220 {
592d1631
L
4221 { Bad_Opcode },
4222 { Bad_Opcode },
6c30d220 4223 { VEX_W_TABLE (VEX_W_0FE4_P_2) },
c0f3af97
L
4224 },
4225
592a252b 4226 /* PREFIX_VEX_0FE5 */
c0f3af97 4227 {
592d1631
L
4228 { Bad_Opcode },
4229 { Bad_Opcode },
6c30d220 4230 { VEX_W_TABLE (VEX_W_0FE5_P_2) },
c0f3af97
L
4231 },
4232
592a252b 4233 /* PREFIX_VEX_0FE6 */
c0f3af97 4234 {
592d1631 4235 { Bad_Opcode },
592a252b
L
4236 { VEX_W_TABLE (VEX_W_0FE6_P_1) },
4237 { VEX_W_TABLE (VEX_W_0FE6_P_2) },
4238 { VEX_W_TABLE (VEX_W_0FE6_P_3) },
c0f3af97
L
4239 },
4240
592a252b 4241 /* PREFIX_VEX_0FE7 */
c0f3af97 4242 {
592d1631
L
4243 { Bad_Opcode },
4244 { Bad_Opcode },
592a252b 4245 { MOD_TABLE (MOD_VEX_0FE7_PREFIX_2) },
c0f3af97
L
4246 },
4247
592a252b 4248 /* PREFIX_VEX_0FE8 */
c0f3af97 4249 {
592d1631
L
4250 { Bad_Opcode },
4251 { Bad_Opcode },
6c30d220 4252 { VEX_W_TABLE (VEX_W_0FE8_P_2) },
c0f3af97
L
4253 },
4254
592a252b 4255 /* PREFIX_VEX_0FE9 */
c0f3af97 4256 {
592d1631
L
4257 { Bad_Opcode },
4258 { Bad_Opcode },
6c30d220 4259 { VEX_W_TABLE (VEX_W_0FE9_P_2) },
c0f3af97
L
4260 },
4261
592a252b 4262 /* PREFIX_VEX_0FEA */
c0f3af97 4263 {
592d1631
L
4264 { Bad_Opcode },
4265 { Bad_Opcode },
6c30d220 4266 { VEX_W_TABLE (VEX_W_0FEA_P_2) },
c0f3af97
L
4267 },
4268
592a252b 4269 /* PREFIX_VEX_0FEB */
c0f3af97 4270 {
592d1631
L
4271 { Bad_Opcode },
4272 { Bad_Opcode },
6c30d220 4273 { VEX_W_TABLE (VEX_W_0FEB_P_2) },
c0f3af97
L
4274 },
4275
592a252b 4276 /* PREFIX_VEX_0FEC */
c0f3af97 4277 {
592d1631
L
4278 { Bad_Opcode },
4279 { Bad_Opcode },
6c30d220 4280 { VEX_W_TABLE (VEX_W_0FEC_P_2) },
c0f3af97
L
4281 },
4282
592a252b 4283 /* PREFIX_VEX_0FED */
c0f3af97 4284 {
592d1631
L
4285 { Bad_Opcode },
4286 { Bad_Opcode },
6c30d220 4287 { VEX_W_TABLE (VEX_W_0FED_P_2) },
c0f3af97
L
4288 },
4289
592a252b 4290 /* PREFIX_VEX_0FEE */
c0f3af97 4291 {
592d1631
L
4292 { Bad_Opcode },
4293 { Bad_Opcode },
6c30d220 4294 { VEX_W_TABLE (VEX_W_0FEE_P_2) },
c0f3af97
L
4295 },
4296
592a252b 4297 /* PREFIX_VEX_0FEF */
c0f3af97 4298 {
592d1631
L
4299 { Bad_Opcode },
4300 { Bad_Opcode },
6c30d220 4301 { VEX_W_TABLE (VEX_W_0FEF_P_2) },
c0f3af97
L
4302 },
4303
592a252b 4304 /* PREFIX_VEX_0FF0 */
c0f3af97 4305 {
592d1631
L
4306 { Bad_Opcode },
4307 { Bad_Opcode },
4308 { Bad_Opcode },
592a252b 4309 { MOD_TABLE (MOD_VEX_0FF0_PREFIX_3) },
c0f3af97
L
4310 },
4311
592a252b 4312 /* PREFIX_VEX_0FF1 */
c0f3af97 4313 {
592d1631
L
4314 { Bad_Opcode },
4315 { Bad_Opcode },
6c30d220 4316 { VEX_W_TABLE (VEX_W_0FF1_P_2) },
c0f3af97
L
4317 },
4318
592a252b 4319 /* PREFIX_VEX_0FF2 */
c0f3af97 4320 {
592d1631
L
4321 { Bad_Opcode },
4322 { Bad_Opcode },
6c30d220 4323 { VEX_W_TABLE (VEX_W_0FF2_P_2) },
c0f3af97
L
4324 },
4325
592a252b 4326 /* PREFIX_VEX_0FF3 */
c0f3af97 4327 {
592d1631
L
4328 { Bad_Opcode },
4329 { Bad_Opcode },
6c30d220 4330 { VEX_W_TABLE (VEX_W_0FF3_P_2) },
c0f3af97
L
4331 },
4332
592a252b 4333 /* PREFIX_VEX_0FF4 */
c0f3af97 4334 {
592d1631
L
4335 { Bad_Opcode },
4336 { Bad_Opcode },
6c30d220 4337 { VEX_W_TABLE (VEX_W_0FF4_P_2) },
c0f3af97
L
4338 },
4339
592a252b 4340 /* PREFIX_VEX_0FF5 */
c0f3af97 4341 {
592d1631
L
4342 { Bad_Opcode },
4343 { Bad_Opcode },
6c30d220 4344 { VEX_W_TABLE (VEX_W_0FF5_P_2) },
c0f3af97
L
4345 },
4346
592a252b 4347 /* PREFIX_VEX_0FF6 */
c0f3af97 4348 {
592d1631
L
4349 { Bad_Opcode },
4350 { Bad_Opcode },
6c30d220 4351 { VEX_W_TABLE (VEX_W_0FF6_P_2) },
c0f3af97
L
4352 },
4353
592a252b 4354 /* PREFIX_VEX_0FF7 */
c0f3af97 4355 {
592d1631
L
4356 { Bad_Opcode },
4357 { Bad_Opcode },
592a252b 4358 { VEX_LEN_TABLE (VEX_LEN_0FF7_P_2) },
c0f3af97
L
4359 },
4360
592a252b 4361 /* PREFIX_VEX_0FF8 */
c0f3af97 4362 {
592d1631
L
4363 { Bad_Opcode },
4364 { Bad_Opcode },
6c30d220 4365 { VEX_W_TABLE (VEX_W_0FF8_P_2) },
c0f3af97
L
4366 },
4367
592a252b 4368 /* PREFIX_VEX_0FF9 */
c0f3af97 4369 {
592d1631
L
4370 { Bad_Opcode },
4371 { Bad_Opcode },
6c30d220 4372 { VEX_W_TABLE (VEX_W_0FF9_P_2) },
c0f3af97
L
4373 },
4374
592a252b 4375 /* PREFIX_VEX_0FFA */
c0f3af97 4376 {
592d1631
L
4377 { Bad_Opcode },
4378 { Bad_Opcode },
6c30d220 4379 { VEX_W_TABLE (VEX_W_0FFA_P_2) },
c0f3af97
L
4380 },
4381
592a252b 4382 /* PREFIX_VEX_0FFB */
c0f3af97 4383 {
592d1631
L
4384 { Bad_Opcode },
4385 { Bad_Opcode },
6c30d220 4386 { VEX_W_TABLE (VEX_W_0FFB_P_2) },
c0f3af97
L
4387 },
4388
592a252b 4389 /* PREFIX_VEX_0FFC */
c0f3af97 4390 {
592d1631
L
4391 { Bad_Opcode },
4392 { Bad_Opcode },
6c30d220 4393 { VEX_W_TABLE (VEX_W_0FFC_P_2) },
c0f3af97
L
4394 },
4395
592a252b 4396 /* PREFIX_VEX_0FFD */
c0f3af97 4397 {
592d1631
L
4398 { Bad_Opcode },
4399 { Bad_Opcode },
6c30d220 4400 { VEX_W_TABLE (VEX_W_0FFD_P_2) },
c0f3af97
L
4401 },
4402
592a252b 4403 /* PREFIX_VEX_0FFE */
c0f3af97 4404 {
592d1631
L
4405 { Bad_Opcode },
4406 { Bad_Opcode },
6c30d220 4407 { VEX_W_TABLE (VEX_W_0FFE_P_2) },
c0f3af97
L
4408 },
4409
592a252b 4410 /* PREFIX_VEX_0F3800 */
c0f3af97 4411 {
592d1631
L
4412 { Bad_Opcode },
4413 { Bad_Opcode },
6c30d220 4414 { VEX_W_TABLE (VEX_W_0F3800_P_2) },
c0f3af97
L
4415 },
4416
592a252b 4417 /* PREFIX_VEX_0F3801 */
c0f3af97 4418 {
592d1631
L
4419 { Bad_Opcode },
4420 { Bad_Opcode },
6c30d220 4421 { VEX_W_TABLE (VEX_W_0F3801_P_2) },
c0f3af97
L
4422 },
4423
592a252b 4424 /* PREFIX_VEX_0F3802 */
c0f3af97 4425 {
592d1631
L
4426 { Bad_Opcode },
4427 { Bad_Opcode },
6c30d220 4428 { VEX_W_TABLE (VEX_W_0F3802_P_2) },
c0f3af97
L
4429 },
4430
592a252b 4431 /* PREFIX_VEX_0F3803 */
c0f3af97 4432 {
592d1631
L
4433 { Bad_Opcode },
4434 { Bad_Opcode },
6c30d220 4435 { VEX_W_TABLE (VEX_W_0F3803_P_2) },
c0f3af97
L
4436 },
4437
592a252b 4438 /* PREFIX_VEX_0F3804 */
c0f3af97 4439 {
592d1631
L
4440 { Bad_Opcode },
4441 { Bad_Opcode },
6c30d220 4442 { VEX_W_TABLE (VEX_W_0F3804_P_2) },
c0f3af97
L
4443 },
4444
592a252b 4445 /* PREFIX_VEX_0F3805 */
c0f3af97 4446 {
592d1631
L
4447 { Bad_Opcode },
4448 { Bad_Opcode },
6c30d220 4449 { VEX_W_TABLE (VEX_W_0F3805_P_2) },
c0f3af97
L
4450 },
4451
592a252b 4452 /* PREFIX_VEX_0F3806 */
c0f3af97 4453 {
592d1631
L
4454 { Bad_Opcode },
4455 { Bad_Opcode },
6c30d220 4456 { VEX_W_TABLE (VEX_W_0F3806_P_2) },
c0f3af97
L
4457 },
4458
592a252b 4459 /* PREFIX_VEX_0F3807 */
c0f3af97 4460 {
592d1631
L
4461 { Bad_Opcode },
4462 { Bad_Opcode },
6c30d220 4463 { VEX_W_TABLE (VEX_W_0F3807_P_2) },
c0f3af97
L
4464 },
4465
592a252b 4466 /* PREFIX_VEX_0F3808 */
c0f3af97 4467 {
592d1631
L
4468 { Bad_Opcode },
4469 { Bad_Opcode },
6c30d220 4470 { VEX_W_TABLE (VEX_W_0F3808_P_2) },
c0f3af97
L
4471 },
4472
592a252b 4473 /* PREFIX_VEX_0F3809 */
c0f3af97 4474 {
592d1631
L
4475 { Bad_Opcode },
4476 { Bad_Opcode },
6c30d220 4477 { VEX_W_TABLE (VEX_W_0F3809_P_2) },
c0f3af97
L
4478 },
4479
592a252b 4480 /* PREFIX_VEX_0F380A */
c0f3af97 4481 {
592d1631
L
4482 { Bad_Opcode },
4483 { Bad_Opcode },
6c30d220 4484 { VEX_W_TABLE (VEX_W_0F380A_P_2) },
c0f3af97
L
4485 },
4486
592a252b 4487 /* PREFIX_VEX_0F380B */
c0f3af97 4488 {
592d1631
L
4489 { Bad_Opcode },
4490 { Bad_Opcode },
6c30d220 4491 { VEX_W_TABLE (VEX_W_0F380B_P_2) },
c0f3af97
L
4492 },
4493
592a252b 4494 /* PREFIX_VEX_0F380C */
c0f3af97 4495 {
592d1631
L
4496 { Bad_Opcode },
4497 { Bad_Opcode },
592a252b 4498 { VEX_W_TABLE (VEX_W_0F380C_P_2) },
c0f3af97
L
4499 },
4500
592a252b 4501 /* PREFIX_VEX_0F380D */
c0f3af97 4502 {
592d1631
L
4503 { Bad_Opcode },
4504 { Bad_Opcode },
592a252b 4505 { VEX_W_TABLE (VEX_W_0F380D_P_2) },
c0f3af97
L
4506 },
4507
592a252b 4508 /* PREFIX_VEX_0F380E */
c0f3af97 4509 {
592d1631
L
4510 { Bad_Opcode },
4511 { Bad_Opcode },
592a252b 4512 { VEX_W_TABLE (VEX_W_0F380E_P_2) },
c0f3af97
L
4513 },
4514
592a252b 4515 /* PREFIX_VEX_0F380F */
c0f3af97 4516 {
592d1631
L
4517 { Bad_Opcode },
4518 { Bad_Opcode },
592a252b 4519 { VEX_W_TABLE (VEX_W_0F380F_P_2) },
c0f3af97
L
4520 },
4521
592a252b 4522 /* PREFIX_VEX_0F3813 */
c7b8aa3a
L
4523 {
4524 { Bad_Opcode },
4525 { Bad_Opcode },
4526 { "vcvtph2ps", { XM, EXxmmq } },
4527 },
4528
6c30d220
L
4529 /* PREFIX_VEX_0F3816 */
4530 {
4531 { Bad_Opcode },
4532 { Bad_Opcode },
4533 { VEX_LEN_TABLE (VEX_LEN_0F3816_P_2) },
4534 },
4535
592a252b 4536 /* PREFIX_VEX_0F3817 */
c0f3af97 4537 {
592d1631
L
4538 { Bad_Opcode },
4539 { Bad_Opcode },
592a252b 4540 { VEX_W_TABLE (VEX_W_0F3817_P_2) },
c0f3af97
L
4541 },
4542
592a252b 4543 /* PREFIX_VEX_0F3818 */
c0f3af97 4544 {
592d1631
L
4545 { Bad_Opcode },
4546 { Bad_Opcode },
6c30d220 4547 { VEX_W_TABLE (VEX_W_0F3818_P_2) },
c0f3af97
L
4548 },
4549
592a252b 4550 /* PREFIX_VEX_0F3819 */
c0f3af97 4551 {
592d1631
L
4552 { Bad_Opcode },
4553 { Bad_Opcode },
6c30d220 4554 { VEX_LEN_TABLE (VEX_LEN_0F3819_P_2) },
c0f3af97
L
4555 },
4556
592a252b 4557 /* PREFIX_VEX_0F381A */
c0f3af97 4558 {
592d1631
L
4559 { Bad_Opcode },
4560 { Bad_Opcode },
592a252b 4561 { MOD_TABLE (MOD_VEX_0F381A_PREFIX_2) },
c0f3af97
L
4562 },
4563
592a252b 4564 /* PREFIX_VEX_0F381C */
c0f3af97 4565 {
592d1631
L
4566 { Bad_Opcode },
4567 { Bad_Opcode },
6c30d220 4568 { VEX_W_TABLE (VEX_W_0F381C_P_2) },
c0f3af97
L
4569 },
4570
592a252b 4571 /* PREFIX_VEX_0F381D */
c0f3af97 4572 {
592d1631
L
4573 { Bad_Opcode },
4574 { Bad_Opcode },
6c30d220 4575 { VEX_W_TABLE (VEX_W_0F381D_P_2) },
c0f3af97
L
4576 },
4577
592a252b 4578 /* PREFIX_VEX_0F381E */
c0f3af97 4579 {
592d1631
L
4580 { Bad_Opcode },
4581 { Bad_Opcode },
6c30d220 4582 { VEX_W_TABLE (VEX_W_0F381E_P_2) },
c0f3af97
L
4583 },
4584
592a252b 4585 /* PREFIX_VEX_0F3820 */
c0f3af97 4586 {
592d1631
L
4587 { Bad_Opcode },
4588 { Bad_Opcode },
6c30d220 4589 { VEX_W_TABLE (VEX_W_0F3820_P_2) },
c0f3af97
L
4590 },
4591
592a252b 4592 /* PREFIX_VEX_0F3821 */
c0f3af97 4593 {
592d1631
L
4594 { Bad_Opcode },
4595 { Bad_Opcode },
6c30d220 4596 { VEX_W_TABLE (VEX_W_0F3821_P_2) },
c0f3af97
L
4597 },
4598
592a252b 4599 /* PREFIX_VEX_0F3822 */
c0f3af97 4600 {
592d1631
L
4601 { Bad_Opcode },
4602 { Bad_Opcode },
6c30d220 4603 { VEX_W_TABLE (VEX_W_0F3822_P_2) },
c0f3af97
L
4604 },
4605
592a252b 4606 /* PREFIX_VEX_0F3823 */
c0f3af97 4607 {
592d1631
L
4608 { Bad_Opcode },
4609 { Bad_Opcode },
6c30d220 4610 { VEX_W_TABLE (VEX_W_0F3823_P_2) },
c0f3af97
L
4611 },
4612
592a252b 4613 /* PREFIX_VEX_0F3824 */
c0f3af97 4614 {
592d1631
L
4615 { Bad_Opcode },
4616 { Bad_Opcode },
6c30d220 4617 { VEX_W_TABLE (VEX_W_0F3824_P_2) },
c0f3af97
L
4618 },
4619
592a252b 4620 /* PREFIX_VEX_0F3825 */
c0f3af97 4621 {
592d1631
L
4622 { Bad_Opcode },
4623 { Bad_Opcode },
6c30d220 4624 { VEX_W_TABLE (VEX_W_0F3825_P_2) },
c0f3af97
L
4625 },
4626
592a252b 4627 /* PREFIX_VEX_0F3828 */
c0f3af97 4628 {
592d1631
L
4629 { Bad_Opcode },
4630 { Bad_Opcode },
6c30d220 4631 { VEX_W_TABLE (VEX_W_0F3828_P_2) },
c0f3af97
L
4632 },
4633
592a252b 4634 /* PREFIX_VEX_0F3829 */
c0f3af97 4635 {
592d1631
L
4636 { Bad_Opcode },
4637 { Bad_Opcode },
6c30d220 4638 { VEX_W_TABLE (VEX_W_0F3829_P_2) },
c0f3af97
L
4639 },
4640
592a252b 4641 /* PREFIX_VEX_0F382A */
c0f3af97 4642 {
592d1631
L
4643 { Bad_Opcode },
4644 { Bad_Opcode },
592a252b 4645 { MOD_TABLE (MOD_VEX_0F382A_PREFIX_2) },
c0f3af97
L
4646 },
4647
592a252b 4648 /* PREFIX_VEX_0F382B */
c0f3af97 4649 {
592d1631
L
4650 { Bad_Opcode },
4651 { Bad_Opcode },
6c30d220 4652 { VEX_W_TABLE (VEX_W_0F382B_P_2) },
c0f3af97
L
4653 },
4654
592a252b 4655 /* PREFIX_VEX_0F382C */
c0f3af97 4656 {
592d1631
L
4657 { Bad_Opcode },
4658 { Bad_Opcode },
592a252b 4659 { MOD_TABLE (MOD_VEX_0F382C_PREFIX_2) },
c0f3af97
L
4660 },
4661
592a252b 4662 /* PREFIX_VEX_0F382D */
c0f3af97 4663 {
592d1631
L
4664 { Bad_Opcode },
4665 { Bad_Opcode },
592a252b 4666 { MOD_TABLE (MOD_VEX_0F382D_PREFIX_2) },
c0f3af97
L
4667 },
4668
592a252b 4669 /* PREFIX_VEX_0F382E */
c0f3af97 4670 {
592d1631
L
4671 { Bad_Opcode },
4672 { Bad_Opcode },
592a252b 4673 { MOD_TABLE (MOD_VEX_0F382E_PREFIX_2) },
c0f3af97
L
4674 },
4675
592a252b 4676 /* PREFIX_VEX_0F382F */
c0f3af97 4677 {
592d1631
L
4678 { Bad_Opcode },
4679 { Bad_Opcode },
592a252b 4680 { MOD_TABLE (MOD_VEX_0F382F_PREFIX_2) },
c0f3af97
L
4681 },
4682
592a252b 4683 /* PREFIX_VEX_0F3830 */
c0f3af97 4684 {
592d1631
L
4685 { Bad_Opcode },
4686 { Bad_Opcode },
6c30d220 4687 { VEX_W_TABLE (VEX_W_0F3830_P_2) },
c0f3af97
L
4688 },
4689
592a252b 4690 /* PREFIX_VEX_0F3831 */
c0f3af97 4691 {
592d1631
L
4692 { Bad_Opcode },
4693 { Bad_Opcode },
6c30d220 4694 { VEX_W_TABLE (VEX_W_0F3831_P_2) },
c0f3af97
L
4695 },
4696
592a252b 4697 /* PREFIX_VEX_0F3832 */
c0f3af97 4698 {
592d1631
L
4699 { Bad_Opcode },
4700 { Bad_Opcode },
6c30d220 4701 { VEX_W_TABLE (VEX_W_0F3832_P_2) },
c0f3af97
L
4702 },
4703
592a252b 4704 /* PREFIX_VEX_0F3833 */
c0f3af97 4705 {
592d1631
L
4706 { Bad_Opcode },
4707 { Bad_Opcode },
6c30d220 4708 { VEX_W_TABLE (VEX_W_0F3833_P_2) },
c0f3af97
L
4709 },
4710
592a252b 4711 /* PREFIX_VEX_0F3834 */
c0f3af97 4712 {
592d1631
L
4713 { Bad_Opcode },
4714 { Bad_Opcode },
6c30d220 4715 { VEX_W_TABLE (VEX_W_0F3834_P_2) },
c0f3af97
L
4716 },
4717
592a252b 4718 /* PREFIX_VEX_0F3835 */
c0f3af97 4719 {
592d1631
L
4720 { Bad_Opcode },
4721 { Bad_Opcode },
6c30d220
L
4722 { VEX_W_TABLE (VEX_W_0F3835_P_2) },
4723 },
4724
4725 /* PREFIX_VEX_0F3836 */
4726 {
4727 { Bad_Opcode },
4728 { Bad_Opcode },
4729 { VEX_LEN_TABLE (VEX_LEN_0F3836_P_2) },
c0f3af97
L
4730 },
4731
592a252b 4732 /* PREFIX_VEX_0F3837 */
c0f3af97 4733 {
592d1631
L
4734 { Bad_Opcode },
4735 { Bad_Opcode },
6c30d220 4736 { VEX_W_TABLE (VEX_W_0F3837_P_2) },
c0f3af97
L
4737 },
4738
592a252b 4739 /* PREFIX_VEX_0F3838 */
c0f3af97 4740 {
592d1631
L
4741 { Bad_Opcode },
4742 { Bad_Opcode },
6c30d220 4743 { VEX_W_TABLE (VEX_W_0F3838_P_2) },
c0f3af97
L
4744 },
4745
592a252b 4746 /* PREFIX_VEX_0F3839 */
c0f3af97 4747 {
592d1631
L
4748 { Bad_Opcode },
4749 { Bad_Opcode },
6c30d220 4750 { VEX_W_TABLE (VEX_W_0F3839_P_2) },
c0f3af97
L
4751 },
4752
592a252b 4753 /* PREFIX_VEX_0F383A */
c0f3af97 4754 {
592d1631
L
4755 { Bad_Opcode },
4756 { Bad_Opcode },
6c30d220 4757 { VEX_W_TABLE (VEX_W_0F383A_P_2) },
c0f3af97
L
4758 },
4759
592a252b 4760 /* PREFIX_VEX_0F383B */
c0f3af97 4761 {
592d1631
L
4762 { Bad_Opcode },
4763 { Bad_Opcode },
6c30d220 4764 { VEX_W_TABLE (VEX_W_0F383B_P_2) },
c0f3af97
L
4765 },
4766
592a252b 4767 /* PREFIX_VEX_0F383C */
c0f3af97 4768 {
592d1631
L
4769 { Bad_Opcode },
4770 { Bad_Opcode },
6c30d220 4771 { VEX_W_TABLE (VEX_W_0F383C_P_2) },
c0f3af97
L
4772 },
4773
592a252b 4774 /* PREFIX_VEX_0F383D */
c0f3af97 4775 {
592d1631
L
4776 { Bad_Opcode },
4777 { Bad_Opcode },
6c30d220 4778 { VEX_W_TABLE (VEX_W_0F383D_P_2) },
c0f3af97
L
4779 },
4780
592a252b 4781 /* PREFIX_VEX_0F383E */
c0f3af97 4782 {
592d1631
L
4783 { Bad_Opcode },
4784 { Bad_Opcode },
6c30d220 4785 { VEX_W_TABLE (VEX_W_0F383E_P_2) },
c0f3af97
L
4786 },
4787
592a252b 4788 /* PREFIX_VEX_0F383F */
c0f3af97 4789 {
592d1631
L
4790 { Bad_Opcode },
4791 { Bad_Opcode },
6c30d220 4792 { VEX_W_TABLE (VEX_W_0F383F_P_2) },
c0f3af97
L
4793 },
4794
592a252b 4795 /* PREFIX_VEX_0F3840 */
c0f3af97 4796 {
592d1631
L
4797 { Bad_Opcode },
4798 { Bad_Opcode },
6c30d220 4799 { VEX_W_TABLE (VEX_W_0F3840_P_2) },
c0f3af97
L
4800 },
4801
592a252b 4802 /* PREFIX_VEX_0F3841 */
c0f3af97 4803 {
592d1631
L
4804 { Bad_Opcode },
4805 { Bad_Opcode },
592a252b 4806 { VEX_LEN_TABLE (VEX_LEN_0F3841_P_2) },
c0f3af97
L
4807 },
4808
6c30d220
L
4809 /* PREFIX_VEX_0F3845 */
4810 {
4811 { Bad_Opcode },
4812 { Bad_Opcode },
4813 { "vpsrlv%LW", { XM, Vex, EXx } },
4814 },
4815
4816 /* PREFIX_VEX_0F3846 */
4817 {
4818 { Bad_Opcode },
4819 { Bad_Opcode },
4820 { VEX_W_TABLE (VEX_W_0F3846_P_2) },
4821 },
4822
4823 /* PREFIX_VEX_0F3847 */
4824 {
4825 { Bad_Opcode },
4826 { Bad_Opcode },
4827 { "vpsllv%LW", { XM, Vex, EXx } },
4828 },
4829
4830 /* PREFIX_VEX_0F3858 */
4831 {
4832 { Bad_Opcode },
4833 { Bad_Opcode },
4834 { VEX_W_TABLE (VEX_W_0F3858_P_2) },
4835 },
4836
4837 /* PREFIX_VEX_0F3859 */
4838 {
4839 { Bad_Opcode },
4840 { Bad_Opcode },
4841 { VEX_W_TABLE (VEX_W_0F3859_P_2) },
4842 },
4843
4844 /* PREFIX_VEX_0F385A */
4845 {
4846 { Bad_Opcode },
4847 { Bad_Opcode },
4848 { MOD_TABLE (MOD_VEX_0F385A_PREFIX_2) },
4849 },
4850
4851 /* PREFIX_VEX_0F3878 */
4852 {
4853 { Bad_Opcode },
4854 { Bad_Opcode },
4855 { VEX_W_TABLE (VEX_W_0F3878_P_2) },
4856 },
4857
4858 /* PREFIX_VEX_0F3879 */
4859 {
4860 { Bad_Opcode },
4861 { Bad_Opcode },
4862 { VEX_W_TABLE (VEX_W_0F3879_P_2) },
4863 },
4864
4865 /* PREFIX_VEX_0F388C */
4866 {
4867 { Bad_Opcode },
4868 { Bad_Opcode },
f7002f42 4869 { MOD_TABLE (MOD_VEX_0F388C_PREFIX_2) },
6c30d220
L
4870 },
4871
4872 /* PREFIX_VEX_0F388E */
4873 {
4874 { Bad_Opcode },
4875 { Bad_Opcode },
f7002f42 4876 { MOD_TABLE (MOD_VEX_0F388E_PREFIX_2) },
6c30d220
L
4877 },
4878
4879 /* PREFIX_VEX_0F3890 */
4880 {
4881 { Bad_Opcode },
4882 { Bad_Opcode },
4883 { "vpgatherd%LW", { XM, MVexVSIBDWpX, Vex } },
4884 },
4885
4886 /* PREFIX_VEX_0F3891 */
4887 {
4888 { Bad_Opcode },
4889 { Bad_Opcode },
4890 { "vpgatherq%LW", { XMGatherQ, MVexVSIBQWpX, VexGatherQ } },
4891 },
4892
4893 /* PREFIX_VEX_0F3892 */
4894 {
4895 { Bad_Opcode },
4896 { Bad_Opcode },
4897 { "vgatherdp%XW", { XM, MVexVSIBDWpX, Vex } },
4898 },
4899
4900 /* PREFIX_VEX_0F3893 */
4901 {
4902 { Bad_Opcode },
4903 { Bad_Opcode },
4904 { "vgatherqp%XW", { XMGatherQ, MVexVSIBQWpX, VexGatherQ } },
4905 },
4906
592a252b 4907 /* PREFIX_VEX_0F3896 */
a5ff0eb2 4908 {
592d1631
L
4909 { Bad_Opcode },
4910 { Bad_Opcode },
0bfee649 4911 { "vfmaddsub132p%XW", { XM, Vex, EXx } },
a5ff0eb2
L
4912 },
4913
592a252b 4914 /* PREFIX_VEX_0F3897 */
a5ff0eb2 4915 {
592d1631
L
4916 { Bad_Opcode },
4917 { Bad_Opcode },
0bfee649 4918 { "vfmsubadd132p%XW", { XM, Vex, EXx } },
a5ff0eb2
L
4919 },
4920
592a252b 4921 /* PREFIX_VEX_0F3898 */
a5ff0eb2 4922 {
592d1631
L
4923 { Bad_Opcode },
4924 { Bad_Opcode },
0bfee649 4925 { "vfmadd132p%XW", { XM, Vex, EXx } },
a5ff0eb2
L
4926 },
4927
592a252b 4928 /* PREFIX_VEX_0F3899 */
a5ff0eb2 4929 {
592d1631
L
4930 { Bad_Opcode },
4931 { Bad_Opcode },
1c480963 4932 { "vfmadd132s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
a5ff0eb2
L
4933 },
4934
592a252b 4935 /* PREFIX_VEX_0F389A */
a5ff0eb2 4936 {
592d1631
L
4937 { Bad_Opcode },
4938 { Bad_Opcode },
0bfee649 4939 { "vfmsub132p%XW", { XM, Vex, EXx } },
a5ff0eb2
L
4940 },
4941
592a252b 4942 /* PREFIX_VEX_0F389B */
c0f3af97 4943 {
592d1631
L
4944 { Bad_Opcode },
4945 { Bad_Opcode },
1c480963 4946 { "vfmsub132s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
c0f3af97
L
4947 },
4948
592a252b 4949 /* PREFIX_VEX_0F389C */
c0f3af97 4950 {
592d1631
L
4951 { Bad_Opcode },
4952 { Bad_Opcode },
0bfee649 4953 { "vfnmadd132p%XW", { XM, Vex, EXx } },
c0f3af97
L
4954 },
4955
592a252b 4956 /* PREFIX_VEX_0F389D */
c0f3af97 4957 {
592d1631
L
4958 { Bad_Opcode },
4959 { Bad_Opcode },
1c480963 4960 { "vfnmadd132s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
c0f3af97
L
4961 },
4962
592a252b 4963 /* PREFIX_VEX_0F389E */
c0f3af97 4964 {
592d1631
L
4965 { Bad_Opcode },
4966 { Bad_Opcode },
0bfee649 4967 { "vfnmsub132p%XW", { XM, Vex, EXx } },
c0f3af97
L
4968 },
4969
592a252b 4970 /* PREFIX_VEX_0F389F */
c0f3af97 4971 {
592d1631
L
4972 { Bad_Opcode },
4973 { Bad_Opcode },
1c480963 4974 { "vfnmsub132s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
c0f3af97
L
4975 },
4976
592a252b 4977 /* PREFIX_VEX_0F38A6 */
c0f3af97 4978 {
592d1631
L
4979 { Bad_Opcode },
4980 { Bad_Opcode },
0bfee649 4981 { "vfmaddsub213p%XW", { XM, Vex, EXx } },
592d1631 4982 { Bad_Opcode },
c0f3af97
L
4983 },
4984
592a252b 4985 /* PREFIX_VEX_0F38A7 */
c0f3af97 4986 {
592d1631
L
4987 { Bad_Opcode },
4988 { Bad_Opcode },
0bfee649 4989 { "vfmsubadd213p%XW", { XM, Vex, EXx } },
c0f3af97
L
4990 },
4991
592a252b 4992 /* PREFIX_VEX_0F38A8 */
c0f3af97 4993 {
592d1631
L
4994 { Bad_Opcode },
4995 { Bad_Opcode },
0bfee649 4996 { "vfmadd213p%XW", { XM, Vex, EXx } },
c0f3af97
L
4997 },
4998
592a252b 4999 /* PREFIX_VEX_0F38A9 */
c0f3af97 5000 {
592d1631
L
5001 { Bad_Opcode },
5002 { Bad_Opcode },
1c480963 5003 { "vfmadd213s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
c0f3af97
L
5004 },
5005
592a252b 5006 /* PREFIX_VEX_0F38AA */
c0f3af97 5007 {
592d1631
L
5008 { Bad_Opcode },
5009 { Bad_Opcode },
0bfee649 5010 { "vfmsub213p%XW", { XM, Vex, EXx } },
c0f3af97
L
5011 },
5012
592a252b 5013 /* PREFIX_VEX_0F38AB */
c0f3af97 5014 {
592d1631
L
5015 { Bad_Opcode },
5016 { Bad_Opcode },
1c480963 5017 { "vfmsub213s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
c0f3af97
L
5018 },
5019
592a252b 5020 /* PREFIX_VEX_0F38AC */
c0f3af97 5021 {
592d1631
L
5022 { Bad_Opcode },
5023 { Bad_Opcode },
0bfee649 5024 { "vfnmadd213p%XW", { XM, Vex, EXx } },
c0f3af97
L
5025 },
5026
592a252b 5027 /* PREFIX_VEX_0F38AD */
c0f3af97 5028 {
592d1631
L
5029 { Bad_Opcode },
5030 { Bad_Opcode },
1c480963 5031 { "vfnmadd213s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
c0f3af97
L
5032 },
5033
592a252b 5034 /* PREFIX_VEX_0F38AE */
c0f3af97 5035 {
592d1631
L
5036 { Bad_Opcode },
5037 { Bad_Opcode },
0bfee649 5038 { "vfnmsub213p%XW", { XM, Vex, EXx } },
c0f3af97
L
5039 },
5040
592a252b 5041 /* PREFIX_VEX_0F38AF */
c0f3af97 5042 {
592d1631
L
5043 { Bad_Opcode },
5044 { Bad_Opcode },
1c480963 5045 { "vfnmsub213s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
c0f3af97
L
5046 },
5047
592a252b 5048 /* PREFIX_VEX_0F38B6 */
c0f3af97 5049 {
592d1631
L
5050 { Bad_Opcode },
5051 { Bad_Opcode },
0bfee649 5052 { "vfmaddsub231p%XW", { XM, Vex, EXx } },
c0f3af97
L
5053 },
5054
592a252b 5055 /* PREFIX_VEX_0F38B7 */
c0f3af97 5056 {
592d1631
L
5057 { Bad_Opcode },
5058 { Bad_Opcode },
0bfee649 5059 { "vfmsubadd231p%XW", { XM, Vex, EXx } },
c0f3af97
L
5060 },
5061
592a252b 5062 /* PREFIX_VEX_0F38B8 */
c0f3af97 5063 {
592d1631
L
5064 { Bad_Opcode },
5065 { Bad_Opcode },
0bfee649 5066 { "vfmadd231p%XW", { XM, Vex, EXx } },
c0f3af97
L
5067 },
5068
592a252b 5069 /* PREFIX_VEX_0F38B9 */
c0f3af97 5070 {
592d1631
L
5071 { Bad_Opcode },
5072 { Bad_Opcode },
1c480963 5073 { "vfmadd231s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
c0f3af97
L
5074 },
5075
592a252b 5076 /* PREFIX_VEX_0F38BA */
c0f3af97 5077 {
592d1631
L
5078 { Bad_Opcode },
5079 { Bad_Opcode },
0bfee649 5080 { "vfmsub231p%XW", { XM, Vex, EXx } },
c0f3af97
L
5081 },
5082
592a252b 5083 /* PREFIX_VEX_0F38BB */
c0f3af97 5084 {
592d1631
L
5085 { Bad_Opcode },
5086 { Bad_Opcode },
1c480963 5087 { "vfmsub231s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
c0f3af97
L
5088 },
5089
592a252b 5090 /* PREFIX_VEX_0F38BC */
c0f3af97 5091 {
592d1631
L
5092 { Bad_Opcode },
5093 { Bad_Opcode },
0bfee649 5094 { "vfnmadd231p%XW", { XM, Vex, EXx } },
c0f3af97
L
5095 },
5096
592a252b 5097 /* PREFIX_VEX_0F38BD */
c0f3af97 5098 {
592d1631
L
5099 { Bad_Opcode },
5100 { Bad_Opcode },
1c480963 5101 { "vfnmadd231s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
c0f3af97
L
5102 },
5103
592a252b 5104 /* PREFIX_VEX_0F38BE */
c0f3af97 5105 {
592d1631
L
5106 { Bad_Opcode },
5107 { Bad_Opcode },
0bfee649 5108 { "vfnmsub231p%XW", { XM, Vex, EXx } },
c0f3af97
L
5109 },
5110
592a252b 5111 /* PREFIX_VEX_0F38BF */
c0f3af97 5112 {
592d1631
L
5113 { Bad_Opcode },
5114 { Bad_Opcode },
1c480963 5115 { "vfnmsub231s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
c0f3af97
L
5116 },
5117
592a252b 5118 /* PREFIX_VEX_0F38DB */
c0f3af97 5119 {
592d1631
L
5120 { Bad_Opcode },
5121 { Bad_Opcode },
592a252b 5122 { VEX_LEN_TABLE (VEX_LEN_0F38DB_P_2) },
c0f3af97
L
5123 },
5124
592a252b 5125 /* PREFIX_VEX_0F38DC */
c0f3af97 5126 {
592d1631
L
5127 { Bad_Opcode },
5128 { Bad_Opcode },
592a252b 5129 { VEX_LEN_TABLE (VEX_LEN_0F38DC_P_2) },
c0f3af97
L
5130 },
5131
592a252b 5132 /* PREFIX_VEX_0F38DD */
c0f3af97 5133 {
592d1631
L
5134 { Bad_Opcode },
5135 { Bad_Opcode },
592a252b 5136 { VEX_LEN_TABLE (VEX_LEN_0F38DD_P_2) },
c0f3af97
L
5137 },
5138
592a252b 5139 /* PREFIX_VEX_0F38DE */
c0f3af97 5140 {
592d1631
L
5141 { Bad_Opcode },
5142 { Bad_Opcode },
592a252b 5143 { VEX_LEN_TABLE (VEX_LEN_0F38DE_P_2) },
c0f3af97
L
5144 },
5145
592a252b 5146 /* PREFIX_VEX_0F38DF */
c0f3af97 5147 {
592d1631
L
5148 { Bad_Opcode },
5149 { Bad_Opcode },
592a252b 5150 { VEX_LEN_TABLE (VEX_LEN_0F38DF_P_2) },
c0f3af97
L
5151 },
5152
f12dc422
L
5153 /* PREFIX_VEX_0F38F2 */
5154 {
5155 { VEX_LEN_TABLE (VEX_LEN_0F38F2_P_0) },
5156 },
5157
5158 /* PREFIX_VEX_0F38F3_REG_1 */
5159 {
5160 { VEX_LEN_TABLE (VEX_LEN_0F38F3_R_1_P_0) },
5161 },
5162
5163 /* PREFIX_VEX_0F38F3_REG_2 */
5164 {
5165 { VEX_LEN_TABLE (VEX_LEN_0F38F3_R_2_P_0) },
5166 },
5167
5168 /* PREFIX_VEX_0F38F3_REG_3 */
5169 {
5170 { VEX_LEN_TABLE (VEX_LEN_0F38F3_R_3_P_0) },
5171 },
5172
6c30d220
L
5173 /* PREFIX_VEX_0F38F5 */
5174 {
5175 { VEX_LEN_TABLE (VEX_LEN_0F38F5_P_0) },
5176 { VEX_LEN_TABLE (VEX_LEN_0F38F5_P_1) },
5177 { Bad_Opcode },
5178 { VEX_LEN_TABLE (VEX_LEN_0F38F5_P_3) },
5179 },
5180
5181 /* PREFIX_VEX_0F38F6 */
5182 {
5183 { Bad_Opcode },
5184 { Bad_Opcode },
5185 { Bad_Opcode },
5186 { VEX_LEN_TABLE (VEX_LEN_0F38F6_P_3) },
5187 },
5188
f12dc422
L
5189 /* PREFIX_VEX_0F38F7 */
5190 {
5191 { VEX_LEN_TABLE (VEX_LEN_0F38F7_P_0) },
6c30d220
L
5192 { VEX_LEN_TABLE (VEX_LEN_0F38F7_P_1) },
5193 { VEX_LEN_TABLE (VEX_LEN_0F38F7_P_2) },
5194 { VEX_LEN_TABLE (VEX_LEN_0F38F7_P_3) },
5195 },
5196
5197 /* PREFIX_VEX_0F3A00 */
5198 {
5199 { Bad_Opcode },
5200 { Bad_Opcode },
5201 { VEX_LEN_TABLE (VEX_LEN_0F3A00_P_2) },
5202 },
5203
5204 /* PREFIX_VEX_0F3A01 */
5205 {
5206 { Bad_Opcode },
5207 { Bad_Opcode },
5208 { VEX_LEN_TABLE (VEX_LEN_0F3A01_P_2) },
5209 },
5210
5211 /* PREFIX_VEX_0F3A02 */
5212 {
5213 { Bad_Opcode },
5214 { Bad_Opcode },
5215 { VEX_W_TABLE (VEX_W_0F3A02_P_2) },
f12dc422
L
5216 },
5217
592a252b 5218 /* PREFIX_VEX_0F3A04 */
c0f3af97 5219 {
592d1631
L
5220 { Bad_Opcode },
5221 { Bad_Opcode },
592a252b 5222 { VEX_W_TABLE (VEX_W_0F3A04_P_2) },
c0f3af97
L
5223 },
5224
592a252b 5225 /* PREFIX_VEX_0F3A05 */
c0f3af97 5226 {
592d1631
L
5227 { Bad_Opcode },
5228 { Bad_Opcode },
592a252b 5229 { VEX_W_TABLE (VEX_W_0F3A05_P_2) },
c0f3af97
L
5230 },
5231
592a252b 5232 /* PREFIX_VEX_0F3A06 */
c0f3af97 5233 {
592d1631
L
5234 { Bad_Opcode },
5235 { Bad_Opcode },
592a252b 5236 { VEX_LEN_TABLE (VEX_LEN_0F3A06_P_2) },
c0f3af97
L
5237 },
5238
592a252b 5239 /* PREFIX_VEX_0F3A08 */
c0f3af97 5240 {
592d1631
L
5241 { Bad_Opcode },
5242 { Bad_Opcode },
592a252b 5243 { VEX_W_TABLE (VEX_W_0F3A08_P_2) },
c0f3af97
L
5244 },
5245
592a252b 5246 /* PREFIX_VEX_0F3A09 */
c0f3af97 5247 {
592d1631
L
5248 { Bad_Opcode },
5249 { Bad_Opcode },
592a252b 5250 { VEX_W_TABLE (VEX_W_0F3A09_P_2) },
c0f3af97
L
5251 },
5252
592a252b 5253 /* PREFIX_VEX_0F3A0A */
c0f3af97 5254 {
592d1631
L
5255 { Bad_Opcode },
5256 { Bad_Opcode },
592a252b 5257 { VEX_LEN_TABLE (VEX_LEN_0F3A0A_P_2) },
0bfee649
L
5258 },
5259
592a252b 5260 /* PREFIX_VEX_0F3A0B */
0bfee649 5261 {
592d1631
L
5262 { Bad_Opcode },
5263 { Bad_Opcode },
592a252b 5264 { VEX_LEN_TABLE (VEX_LEN_0F3A0B_P_2) },
0bfee649
L
5265 },
5266
592a252b 5267 /* PREFIX_VEX_0F3A0C */
0bfee649 5268 {
592d1631
L
5269 { Bad_Opcode },
5270 { Bad_Opcode },
592a252b 5271 { VEX_W_TABLE (VEX_W_0F3A0C_P_2) },
0bfee649
L
5272 },
5273
592a252b 5274 /* PREFIX_VEX_0F3A0D */
0bfee649 5275 {
592d1631
L
5276 { Bad_Opcode },
5277 { Bad_Opcode },
592a252b 5278 { VEX_W_TABLE (VEX_W_0F3A0D_P_2) },
c0f3af97
L
5279 },
5280
592a252b 5281 /* PREFIX_VEX_0F3A0E */
0bfee649 5282 {
592d1631
L
5283 { Bad_Opcode },
5284 { Bad_Opcode },
6c30d220 5285 { VEX_W_TABLE (VEX_W_0F3A0E_P_2) },
0bfee649
L
5286 },
5287
592a252b 5288 /* PREFIX_VEX_0F3A0F */
0bfee649 5289 {
592d1631
L
5290 { Bad_Opcode },
5291 { Bad_Opcode },
6c30d220 5292 { VEX_W_TABLE (VEX_W_0F3A0F_P_2) },
0bfee649
L
5293 },
5294
592a252b 5295 /* PREFIX_VEX_0F3A14 */
0bfee649 5296 {
592d1631
L
5297 { Bad_Opcode },
5298 { Bad_Opcode },
592a252b 5299 { VEX_LEN_TABLE (VEX_LEN_0F3A14_P_2) },
0bfee649
L
5300 },
5301
592a252b 5302 /* PREFIX_VEX_0F3A15 */
0bfee649 5303 {
592d1631
L
5304 { Bad_Opcode },
5305 { Bad_Opcode },
592a252b 5306 { VEX_LEN_TABLE (VEX_LEN_0F3A15_P_2) },
0bfee649
L
5307 },
5308
592a252b 5309 /* PREFIX_VEX_0F3A16 */
c0f3af97 5310 {
592d1631
L
5311 { Bad_Opcode },
5312 { Bad_Opcode },
592a252b 5313 { VEX_LEN_TABLE (VEX_LEN_0F3A16_P_2) },
c0f3af97
L
5314 },
5315
592a252b 5316 /* PREFIX_VEX_0F3A17 */
c0f3af97 5317 {
592d1631
L
5318 { Bad_Opcode },
5319 { Bad_Opcode },
592a252b 5320 { VEX_LEN_TABLE (VEX_LEN_0F3A17_P_2) },
c0f3af97
L
5321 },
5322
592a252b 5323 /* PREFIX_VEX_0F3A18 */
c0f3af97 5324 {
592d1631
L
5325 { Bad_Opcode },
5326 { Bad_Opcode },
592a252b 5327 { VEX_LEN_TABLE (VEX_LEN_0F3A18_P_2) },
c0f3af97
L
5328 },
5329
592a252b 5330 /* PREFIX_VEX_0F3A19 */
c0f3af97 5331 {
592d1631
L
5332 { Bad_Opcode },
5333 { Bad_Opcode },
592a252b 5334 { VEX_LEN_TABLE (VEX_LEN_0F3A19_P_2) },
c0f3af97
L
5335 },
5336
592a252b 5337 /* PREFIX_VEX_0F3A1D */
c7b8aa3a
L
5338 {
5339 { Bad_Opcode },
5340 { Bad_Opcode },
5341 { "vcvtps2ph", { EXxmmq, XM, Ib } },
5342 },
5343
592a252b 5344 /* PREFIX_VEX_0F3A20 */
c0f3af97 5345 {
592d1631
L
5346 { Bad_Opcode },
5347 { Bad_Opcode },
592a252b 5348 { VEX_LEN_TABLE (VEX_LEN_0F3A20_P_2) },
c0f3af97
L
5349 },
5350
592a252b 5351 /* PREFIX_VEX_0F3A21 */
c0f3af97 5352 {
592d1631
L
5353 { Bad_Opcode },
5354 { Bad_Opcode },
592a252b 5355 { VEX_LEN_TABLE (VEX_LEN_0F3A21_P_2) },
c0f3af97
L
5356 },
5357
592a252b 5358 /* PREFIX_VEX_0F3A22 */
0bfee649 5359 {
592d1631
L
5360 { Bad_Opcode },
5361 { Bad_Opcode },
592a252b 5362 { VEX_LEN_TABLE (VEX_LEN_0F3A22_P_2) },
0bfee649
L
5363 },
5364
6c30d220
L
5365 /* PREFIX_VEX_0F3A38 */
5366 {
5367 { Bad_Opcode },
5368 { Bad_Opcode },
5369 { VEX_LEN_TABLE (VEX_LEN_0F3A38_P_2) },
5370 },
5371
5372 /* PREFIX_VEX_0F3A39 */
5373 {
5374 { Bad_Opcode },
5375 { Bad_Opcode },
5376 { VEX_LEN_TABLE (VEX_LEN_0F3A39_P_2) },
5377 },
5378
592a252b 5379 /* PREFIX_VEX_0F3A40 */
c0f3af97 5380 {
592d1631
L
5381 { Bad_Opcode },
5382 { Bad_Opcode },
592a252b 5383 { VEX_W_TABLE (VEX_W_0F3A40_P_2) },
c0f3af97
L
5384 },
5385
592a252b 5386 /* PREFIX_VEX_0F3A41 */
c0f3af97 5387 {
592d1631
L
5388 { Bad_Opcode },
5389 { Bad_Opcode },
592a252b 5390 { VEX_LEN_TABLE (VEX_LEN_0F3A41_P_2) },
c0f3af97
L
5391 },
5392
592a252b 5393 /* PREFIX_VEX_0F3A42 */
c0f3af97 5394 {
592d1631
L
5395 { Bad_Opcode },
5396 { Bad_Opcode },
6c30d220 5397 { VEX_W_TABLE (VEX_W_0F3A42_P_2) },
c0f3af97
L
5398 },
5399
592a252b 5400 /* PREFIX_VEX_0F3A44 */
ce2f5b3c 5401 {
592d1631
L
5402 { Bad_Opcode },
5403 { Bad_Opcode },
592a252b 5404 { VEX_LEN_TABLE (VEX_LEN_0F3A44_P_2) },
ce2f5b3c
L
5405 },
5406
6c30d220
L
5407 /* PREFIX_VEX_0F3A46 */
5408 {
5409 { Bad_Opcode },
5410 { Bad_Opcode },
5411 { VEX_LEN_TABLE (VEX_LEN_0F3A46_P_2) },
5412 },
5413
592a252b 5414 /* PREFIX_VEX_0F3A48 */
a683cc34
SP
5415 {
5416 { Bad_Opcode },
5417 { Bad_Opcode },
592a252b 5418 { VEX_W_TABLE (VEX_W_0F3A48_P_2) },
a683cc34
SP
5419 },
5420
592a252b 5421 /* PREFIX_VEX_0F3A49 */
a683cc34
SP
5422 {
5423 { Bad_Opcode },
5424 { Bad_Opcode },
592a252b 5425 { VEX_W_TABLE (VEX_W_0F3A49_P_2) },
a683cc34
SP
5426 },
5427
592a252b 5428 /* PREFIX_VEX_0F3A4A */
c0f3af97 5429 {
592d1631
L
5430 { Bad_Opcode },
5431 { Bad_Opcode },
592a252b 5432 { VEX_W_TABLE (VEX_W_0F3A4A_P_2) },
c0f3af97
L
5433 },
5434
592a252b 5435 /* PREFIX_VEX_0F3A4B */
c0f3af97 5436 {
592d1631
L
5437 { Bad_Opcode },
5438 { Bad_Opcode },
592a252b 5439 { VEX_W_TABLE (VEX_W_0F3A4B_P_2) },
c0f3af97
L
5440 },
5441
592a252b 5442 /* PREFIX_VEX_0F3A4C */
c0f3af97 5443 {
592d1631
L
5444 { Bad_Opcode },
5445 { Bad_Opcode },
6c30d220 5446 { VEX_W_TABLE (VEX_W_0F3A4C_P_2) },
c0f3af97
L
5447 },
5448
592a252b 5449 /* PREFIX_VEX_0F3A5C */
922d8de8 5450 {
592d1631
L
5451 { Bad_Opcode },
5452 { Bad_Opcode },
206c2556 5453 { "vfmaddsubps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
922d8de8
DR
5454 },
5455
592a252b 5456 /* PREFIX_VEX_0F3A5D */
922d8de8 5457 {
592d1631
L
5458 { Bad_Opcode },
5459 { Bad_Opcode },
206c2556 5460 { "vfmaddsubpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
922d8de8
DR
5461 },
5462
592a252b 5463 /* PREFIX_VEX_0F3A5E */
922d8de8 5464 {
592d1631
L
5465 { Bad_Opcode },
5466 { Bad_Opcode },
206c2556 5467 { "vfmsubaddps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
922d8de8
DR
5468 },
5469
592a252b 5470 /* PREFIX_VEX_0F3A5F */
922d8de8 5471 {
592d1631
L
5472 { Bad_Opcode },
5473 { Bad_Opcode },
206c2556 5474 { "vfmsubaddpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
922d8de8
DR
5475 },
5476
592a252b 5477 /* PREFIX_VEX_0F3A60 */
c0f3af97 5478 {
592d1631
L
5479 { Bad_Opcode },
5480 { Bad_Opcode },
592a252b 5481 { VEX_LEN_TABLE (VEX_LEN_0F3A60_P_2) },
592d1631 5482 { Bad_Opcode },
c0f3af97
L
5483 },
5484
592a252b 5485 /* PREFIX_VEX_0F3A61 */
c0f3af97 5486 {
592d1631
L
5487 { Bad_Opcode },
5488 { Bad_Opcode },
592a252b 5489 { VEX_LEN_TABLE (VEX_LEN_0F3A61_P_2) },
c0f3af97
L
5490 },
5491
592a252b 5492 /* PREFIX_VEX_0F3A62 */
c0f3af97 5493 {
592d1631
L
5494 { Bad_Opcode },
5495 { Bad_Opcode },
592a252b 5496 { VEX_LEN_TABLE (VEX_LEN_0F3A62_P_2) },
c0f3af97
L
5497 },
5498
592a252b 5499 /* PREFIX_VEX_0F3A63 */
c0f3af97 5500 {
592d1631
L
5501 { Bad_Opcode },
5502 { Bad_Opcode },
592a252b 5503 { VEX_LEN_TABLE (VEX_LEN_0F3A63_P_2) },
c0f3af97 5504 },
a5ff0eb2 5505
592a252b 5506 /* PREFIX_VEX_0F3A68 */
922d8de8 5507 {
592d1631
L
5508 { Bad_Opcode },
5509 { Bad_Opcode },
206c2556 5510 { "vfmaddps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
922d8de8
DR
5511 },
5512
592a252b 5513 /* PREFIX_VEX_0F3A69 */
922d8de8 5514 {
592d1631
L
5515 { Bad_Opcode },
5516 { Bad_Opcode },
206c2556 5517 { "vfmaddpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
922d8de8
DR
5518 },
5519
592a252b 5520 /* PREFIX_VEX_0F3A6A */
922d8de8 5521 {
592d1631
L
5522 { Bad_Opcode },
5523 { Bad_Opcode },
592a252b 5524 { VEX_LEN_TABLE (VEX_LEN_0F3A6A_P_2) },
922d8de8
DR
5525 },
5526
592a252b 5527 /* PREFIX_VEX_0F3A6B */
922d8de8 5528 {
592d1631
L
5529 { Bad_Opcode },
5530 { Bad_Opcode },
592a252b 5531 { VEX_LEN_TABLE (VEX_LEN_0F3A6B_P_2) },
922d8de8
DR
5532 },
5533
592a252b 5534 /* PREFIX_VEX_0F3A6C */
922d8de8 5535 {
592d1631
L
5536 { Bad_Opcode },
5537 { Bad_Opcode },
206c2556 5538 { "vfmsubps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
922d8de8
DR
5539 },
5540
592a252b 5541 /* PREFIX_VEX_0F3A6D */
922d8de8 5542 {
592d1631
L
5543 { Bad_Opcode },
5544 { Bad_Opcode },
206c2556 5545 { "vfmsubpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
922d8de8
DR
5546 },
5547
592a252b 5548 /* PREFIX_VEX_0F3A6E */
922d8de8 5549 {
592d1631
L
5550 { Bad_Opcode },
5551 { Bad_Opcode },
592a252b 5552 { VEX_LEN_TABLE (VEX_LEN_0F3A6E_P_2) },
922d8de8
DR
5553 },
5554
592a252b 5555 /* PREFIX_VEX_0F3A6F */
922d8de8 5556 {
592d1631
L
5557 { Bad_Opcode },
5558 { Bad_Opcode },
592a252b 5559 { VEX_LEN_TABLE (VEX_LEN_0F3A6F_P_2) },
922d8de8
DR
5560 },
5561
592a252b 5562 /* PREFIX_VEX_0F3A78 */
922d8de8 5563 {
592d1631
L
5564 { Bad_Opcode },
5565 { Bad_Opcode },
206c2556 5566 { "vfnmaddps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
922d8de8
DR
5567 },
5568
592a252b 5569 /* PREFIX_VEX_0F3A79 */
922d8de8 5570 {
592d1631
L
5571 { Bad_Opcode },
5572 { Bad_Opcode },
206c2556 5573 { "vfnmaddpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
922d8de8
DR
5574 },
5575
592a252b 5576 /* PREFIX_VEX_0F3A7A */
922d8de8 5577 {
592d1631
L
5578 { Bad_Opcode },
5579 { Bad_Opcode },
592a252b 5580 { VEX_LEN_TABLE (VEX_LEN_0F3A7A_P_2) },
922d8de8
DR
5581 },
5582
592a252b 5583 /* PREFIX_VEX_0F3A7B */
922d8de8 5584 {
592d1631
L
5585 { Bad_Opcode },
5586 { Bad_Opcode },
592a252b 5587 { VEX_LEN_TABLE (VEX_LEN_0F3A7B_P_2) },
922d8de8
DR
5588 },
5589
592a252b 5590 /* PREFIX_VEX_0F3A7C */
922d8de8 5591 {
592d1631
L
5592 { Bad_Opcode },
5593 { Bad_Opcode },
206c2556 5594 { "vfnmsubps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
592d1631 5595 { Bad_Opcode },
922d8de8
DR
5596 },
5597
592a252b 5598 /* PREFIX_VEX_0F3A7D */
922d8de8 5599 {
592d1631
L
5600 { Bad_Opcode },
5601 { Bad_Opcode },
206c2556 5602 { "vfnmsubpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
922d8de8
DR
5603 },
5604
592a252b 5605 /* PREFIX_VEX_0F3A7E */
922d8de8 5606 {
592d1631
L
5607 { Bad_Opcode },
5608 { Bad_Opcode },
592a252b 5609 { VEX_LEN_TABLE (VEX_LEN_0F3A7E_P_2) },
922d8de8
DR
5610 },
5611
592a252b 5612 /* PREFIX_VEX_0F3A7F */
922d8de8 5613 {
592d1631
L
5614 { Bad_Opcode },
5615 { Bad_Opcode },
592a252b 5616 { VEX_LEN_TABLE (VEX_LEN_0F3A7F_P_2) },
922d8de8
DR
5617 },
5618
592a252b 5619 /* PREFIX_VEX_0F3ADF */
a5ff0eb2 5620 {
592d1631
L
5621 { Bad_Opcode },
5622 { Bad_Opcode },
592a252b 5623 { VEX_LEN_TABLE (VEX_LEN_0F3ADF_P_2) },
a5ff0eb2 5624 },
6c30d220
L
5625
5626 /* PREFIX_VEX_0F3AF0 */
5627 {
5628 { Bad_Opcode },
5629 { Bad_Opcode },
5630 { Bad_Opcode },
5631 { VEX_LEN_TABLE (VEX_LEN_0F3AF0_P_3) },
5632 },
c0f3af97
L
5633};
5634
5635static const struct dis386 x86_64_table[][2] = {
5636 /* X86_64_06 */
5637 {
d9e3625e 5638 { "pushP", { es } },
c0f3af97
L
5639 },
5640
5641 /* X86_64_07 */
5642 {
d9e3625e 5643 { "popP", { es } },
c0f3af97
L
5644 },
5645
5646 /* X86_64_0D */
5647 {
d9e3625e 5648 { "pushP", { cs } },
c0f3af97
L
5649 },
5650
5651 /* X86_64_16 */
5652 {
d9e3625e 5653 { "pushP", { ss } },
c0f3af97
L
5654 },
5655
5656 /* X86_64_17 */
5657 {
d9e3625e 5658 { "popP", { ss } },
c0f3af97
L
5659 },
5660
5661 /* X86_64_1E */
5662 {
d9e3625e 5663 { "pushP", { ds } },
c0f3af97
L
5664 },
5665
5666 /* X86_64_1F */
5667 {
d9e3625e 5668 { "popP", { ds } },
c0f3af97
L
5669 },
5670
5671 /* X86_64_27 */
5672 {
5673 { "daa", { XX } },
c0f3af97
L
5674 },
5675
5676 /* X86_64_2F */
5677 {
5678 { "das", { XX } },
c0f3af97
L
5679 },
5680
5681 /* X86_64_37 */
5682 {
5683 { "aaa", { XX } },
c0f3af97
L
5684 },
5685
5686 /* X86_64_3F */
5687 {
5688 { "aas", { XX } },
c0f3af97
L
5689 },
5690
5691 /* X86_64_60 */
5692 {
d9e3625e 5693 { "pushaP", { XX } },
c0f3af97
L
5694 },
5695
5696 /* X86_64_61 */
5697 {
d9e3625e 5698 { "popaP", { XX } },
c0f3af97
L
5699 },
5700
5701 /* X86_64_62 */
5702 {
5703 { MOD_TABLE (MOD_62_32BIT) },
c0f3af97
L
5704 },
5705
5706 /* X86_64_63 */
5707 {
5708 { "arpl", { Ew, Gw } },
5709 { "movs{lq|xd}", { Gv, Ed } },
5710 },
5711
5712 /* X86_64_6D */
5713 {
5714 { "ins{R|}", { Yzr, indirDX } },
5715 { "ins{G|}", { Yzr, indirDX } },
5716 },
5717
5718 /* X86_64_6F */
5719 {
5720 { "outs{R|}", { indirDXr, Xz } },
5721 { "outs{G|}", { indirDXr, Xz } },
5722 },
5723
5724 /* X86_64_9A */
5725 {
5726 { "Jcall{T|}", { Ap } },
c0f3af97
L
5727 },
5728
5729 /* X86_64_C4 */
5730 {
5731 { MOD_TABLE (MOD_C4_32BIT) },
5732 { VEX_C4_TABLE (VEX_0F) },
5733 },
5734
5735 /* X86_64_C5 */
5736 {
5737 { MOD_TABLE (MOD_C5_32BIT) },
5738 { VEX_C5_TABLE (VEX_0F) },
5739 },
5740
5741 /* X86_64_CE */
5742 {
5743 { "into", { XX } },
c0f3af97
L
5744 },
5745
5746 /* X86_64_D4 */
5747 {
e3949f17 5748 { "aam", { Ib } },
c0f3af97
L
5749 },
5750
5751 /* X86_64_D5 */
5752 {
e3949f17 5753 { "aad", { Ib } },
c0f3af97
L
5754 },
5755
5756 /* X86_64_EA */
5757 {
5758 { "Jjmp{T|}", { Ap } },
c0f3af97
L
5759 },
5760
5761 /* X86_64_0F01_REG_0 */
5762 {
5763 { "sgdt{Q|IQ}", { M } },
5764 { "sgdt", { M } },
5765 },
5766
5767 /* X86_64_0F01_REG_1 */
5768 {
5769 { "sidt{Q|IQ}", { M } },
5770 { "sidt", { M } },
5771 },
5772
5773 /* X86_64_0F01_REG_2 */
5774 {
5775 { "lgdt{Q|Q}", { M } },
5776 { "lgdt", { M } },
5777 },
5778
5779 /* X86_64_0F01_REG_3 */
5780 {
5781 { "lidt{Q|Q}", { M } },
5782 { "lidt", { M } },
5783 },
5784};
5785
5786static const struct dis386 three_byte_table[][256] = {
c1e679ec
DR
5787
5788 /* THREE_BYTE_0F38 */
c0f3af97
L
5789 {
5790 /* 00 */
c1e679ec
DR
5791 { "pshufb", { MX, EM } },
5792 { "phaddw", { MX, EM } },
5793 { "phaddd", { MX, EM } },
5794 { "phaddsw", { MX, EM } },
5795 { "pmaddubsw", { MX, EM } },
5796 { "phsubw", { MX, EM } },
5797 { "phsubd", { MX, EM } },
5798 { "phsubsw", { MX, EM } },
c0f3af97 5799 /* 08 */
c1e679ec
DR
5800 { "psignb", { MX, EM } },
5801 { "psignw", { MX, EM } },
5802 { "psignd", { MX, EM } },
5803 { "pmulhrsw", { MX, EM } },
592d1631
L
5804 { Bad_Opcode },
5805 { Bad_Opcode },
5806 { Bad_Opcode },
5807 { Bad_Opcode },
f88c9eb0
SP
5808 /* 10 */
5809 { PREFIX_TABLE (PREFIX_0F3810) },
592d1631
L
5810 { Bad_Opcode },
5811 { Bad_Opcode },
5812 { Bad_Opcode },
f88c9eb0
SP
5813 { PREFIX_TABLE (PREFIX_0F3814) },
5814 { PREFIX_TABLE (PREFIX_0F3815) },
592d1631 5815 { Bad_Opcode },
f88c9eb0
SP
5816 { PREFIX_TABLE (PREFIX_0F3817) },
5817 /* 18 */
592d1631
L
5818 { Bad_Opcode },
5819 { Bad_Opcode },
5820 { Bad_Opcode },
5821 { Bad_Opcode },
f88c9eb0
SP
5822 { "pabsb", { MX, EM } },
5823 { "pabsw", { MX, EM } },
5824 { "pabsd", { MX, EM } },
592d1631 5825 { Bad_Opcode },
f88c9eb0
SP
5826 /* 20 */
5827 { PREFIX_TABLE (PREFIX_0F3820) },
5828 { PREFIX_TABLE (PREFIX_0F3821) },
5829 { PREFIX_TABLE (PREFIX_0F3822) },
5830 { PREFIX_TABLE (PREFIX_0F3823) },
5831 { PREFIX_TABLE (PREFIX_0F3824) },
5832 { PREFIX_TABLE (PREFIX_0F3825) },
592d1631
L
5833 { Bad_Opcode },
5834 { Bad_Opcode },
f88c9eb0
SP
5835 /* 28 */
5836 { PREFIX_TABLE (PREFIX_0F3828) },
5837 { PREFIX_TABLE (PREFIX_0F3829) },
5838 { PREFIX_TABLE (PREFIX_0F382A) },
5839 { PREFIX_TABLE (PREFIX_0F382B) },
592d1631
L
5840 { Bad_Opcode },
5841 { Bad_Opcode },
5842 { Bad_Opcode },
5843 { Bad_Opcode },
f88c9eb0
SP
5844 /* 30 */
5845 { PREFIX_TABLE (PREFIX_0F3830) },
5846 { PREFIX_TABLE (PREFIX_0F3831) },
5847 { PREFIX_TABLE (PREFIX_0F3832) },
5848 { PREFIX_TABLE (PREFIX_0F3833) },
5849 { PREFIX_TABLE (PREFIX_0F3834) },
5850 { PREFIX_TABLE (PREFIX_0F3835) },
592d1631 5851 { Bad_Opcode },
f88c9eb0
SP
5852 { PREFIX_TABLE (PREFIX_0F3837) },
5853 /* 38 */
5854 { PREFIX_TABLE (PREFIX_0F3838) },
5855 { PREFIX_TABLE (PREFIX_0F3839) },
5856 { PREFIX_TABLE (PREFIX_0F383A) },
5857 { PREFIX_TABLE (PREFIX_0F383B) },
5858 { PREFIX_TABLE (PREFIX_0F383C) },
5859 { PREFIX_TABLE (PREFIX_0F383D) },
5860 { PREFIX_TABLE (PREFIX_0F383E) },
5861 { PREFIX_TABLE (PREFIX_0F383F) },
5862 /* 40 */
5863 { PREFIX_TABLE (PREFIX_0F3840) },
5864 { PREFIX_TABLE (PREFIX_0F3841) },
592d1631
L
5865 { Bad_Opcode },
5866 { Bad_Opcode },
5867 { Bad_Opcode },
5868 { Bad_Opcode },
5869 { Bad_Opcode },
5870 { Bad_Opcode },
f88c9eb0 5871 /* 48 */
592d1631
L
5872 { Bad_Opcode },
5873 { Bad_Opcode },
5874 { Bad_Opcode },
5875 { Bad_Opcode },
5876 { Bad_Opcode },
5877 { Bad_Opcode },
5878 { Bad_Opcode },
5879 { Bad_Opcode },
f88c9eb0 5880 /* 50 */
592d1631
L
5881 { Bad_Opcode },
5882 { Bad_Opcode },
5883 { Bad_Opcode },
5884 { Bad_Opcode },
5885 { Bad_Opcode },
5886 { Bad_Opcode },
5887 { Bad_Opcode },
5888 { Bad_Opcode },
f88c9eb0 5889 /* 58 */
592d1631
L
5890 { Bad_Opcode },
5891 { Bad_Opcode },
5892 { Bad_Opcode },
5893 { Bad_Opcode },
5894 { Bad_Opcode },
5895 { Bad_Opcode },
5896 { Bad_Opcode },
5897 { Bad_Opcode },
f88c9eb0 5898 /* 60 */
592d1631
L
5899 { Bad_Opcode },
5900 { Bad_Opcode },
5901 { Bad_Opcode },
5902 { Bad_Opcode },
5903 { Bad_Opcode },
5904 { Bad_Opcode },
5905 { Bad_Opcode },
5906 { Bad_Opcode },
f88c9eb0 5907 /* 68 */
592d1631
L
5908 { Bad_Opcode },
5909 { Bad_Opcode },
5910 { Bad_Opcode },
5911 { Bad_Opcode },
5912 { Bad_Opcode },
5913 { Bad_Opcode },
5914 { Bad_Opcode },
5915 { Bad_Opcode },
f88c9eb0 5916 /* 70 */
592d1631
L
5917 { Bad_Opcode },
5918 { Bad_Opcode },
5919 { Bad_Opcode },
5920 { Bad_Opcode },
5921 { Bad_Opcode },
5922 { Bad_Opcode },
5923 { Bad_Opcode },
5924 { Bad_Opcode },
f88c9eb0 5925 /* 78 */
592d1631
L
5926 { Bad_Opcode },
5927 { Bad_Opcode },
5928 { Bad_Opcode },
5929 { Bad_Opcode },
5930 { Bad_Opcode },
5931 { Bad_Opcode },
5932 { Bad_Opcode },
5933 { Bad_Opcode },
f88c9eb0
SP
5934 /* 80 */
5935 { PREFIX_TABLE (PREFIX_0F3880) },
5936 { PREFIX_TABLE (PREFIX_0F3881) },
6c30d220 5937 { PREFIX_TABLE (PREFIX_0F3882) },
592d1631
L
5938 { Bad_Opcode },
5939 { Bad_Opcode },
5940 { Bad_Opcode },
5941 { Bad_Opcode },
5942 { Bad_Opcode },
f88c9eb0 5943 /* 88 */
592d1631
L
5944 { Bad_Opcode },
5945 { Bad_Opcode },
5946 { Bad_Opcode },
5947 { Bad_Opcode },
5948 { Bad_Opcode },
5949 { Bad_Opcode },
5950 { Bad_Opcode },
5951 { Bad_Opcode },
f88c9eb0 5952 /* 90 */
592d1631
L
5953 { Bad_Opcode },
5954 { Bad_Opcode },
5955 { Bad_Opcode },
5956 { Bad_Opcode },
5957 { Bad_Opcode },
5958 { Bad_Opcode },
5959 { Bad_Opcode },
5960 { Bad_Opcode },
f88c9eb0 5961 /* 98 */
592d1631
L
5962 { Bad_Opcode },
5963 { Bad_Opcode },
5964 { Bad_Opcode },
5965 { Bad_Opcode },
5966 { Bad_Opcode },
5967 { Bad_Opcode },
5968 { Bad_Opcode },
5969 { Bad_Opcode },
f88c9eb0 5970 /* a0 */
592d1631
L
5971 { Bad_Opcode },
5972 { Bad_Opcode },
5973 { Bad_Opcode },
5974 { Bad_Opcode },
5975 { Bad_Opcode },
5976 { Bad_Opcode },
5977 { Bad_Opcode },
5978 { Bad_Opcode },
f88c9eb0 5979 /* a8 */
592d1631
L
5980 { Bad_Opcode },
5981 { Bad_Opcode },
5982 { Bad_Opcode },
5983 { Bad_Opcode },
5984 { Bad_Opcode },
5985 { Bad_Opcode },
5986 { Bad_Opcode },
5987 { Bad_Opcode },
f88c9eb0 5988 /* b0 */
592d1631
L
5989 { Bad_Opcode },
5990 { Bad_Opcode },
5991 { Bad_Opcode },
5992 { Bad_Opcode },
5993 { Bad_Opcode },
5994 { Bad_Opcode },
5995 { Bad_Opcode },
5996 { Bad_Opcode },
f88c9eb0 5997 /* b8 */
592d1631
L
5998 { Bad_Opcode },
5999 { Bad_Opcode },
6000 { Bad_Opcode },
6001 { Bad_Opcode },
6002 { Bad_Opcode },
6003 { Bad_Opcode },
6004 { Bad_Opcode },
6005 { Bad_Opcode },
f88c9eb0 6006 /* c0 */
592d1631
L
6007 { Bad_Opcode },
6008 { Bad_Opcode },
6009 { Bad_Opcode },
6010 { Bad_Opcode },
6011 { Bad_Opcode },
6012 { Bad_Opcode },
6013 { Bad_Opcode },
6014 { Bad_Opcode },
f88c9eb0 6015 /* c8 */
592d1631
L
6016 { Bad_Opcode },
6017 { Bad_Opcode },
6018 { Bad_Opcode },
6019 { Bad_Opcode },
6020 { Bad_Opcode },
6021 { Bad_Opcode },
6022 { Bad_Opcode },
6023 { Bad_Opcode },
f88c9eb0 6024 /* d0 */
592d1631
L
6025 { Bad_Opcode },
6026 { Bad_Opcode },
6027 { Bad_Opcode },
6028 { Bad_Opcode },
6029 { Bad_Opcode },
6030 { Bad_Opcode },
6031 { Bad_Opcode },
6032 { Bad_Opcode },
f88c9eb0 6033 /* d8 */
592d1631
L
6034 { Bad_Opcode },
6035 { Bad_Opcode },
6036 { Bad_Opcode },
f88c9eb0
SP
6037 { PREFIX_TABLE (PREFIX_0F38DB) },
6038 { PREFIX_TABLE (PREFIX_0F38DC) },
6039 { PREFIX_TABLE (PREFIX_0F38DD) },
6040 { PREFIX_TABLE (PREFIX_0F38DE) },
6041 { PREFIX_TABLE (PREFIX_0F38DF) },
6042 /* e0 */
592d1631
L
6043 { Bad_Opcode },
6044 { Bad_Opcode },
6045 { Bad_Opcode },
6046 { Bad_Opcode },
6047 { Bad_Opcode },
6048 { Bad_Opcode },
6049 { Bad_Opcode },
6050 { Bad_Opcode },
f88c9eb0 6051 /* e8 */
592d1631
L
6052 { Bad_Opcode },
6053 { Bad_Opcode },
6054 { Bad_Opcode },
6055 { Bad_Opcode },
6056 { Bad_Opcode },
6057 { Bad_Opcode },
6058 { Bad_Opcode },
6059 { Bad_Opcode },
f88c9eb0
SP
6060 /* f0 */
6061 { PREFIX_TABLE (PREFIX_0F38F0) },
6062 { PREFIX_TABLE (PREFIX_0F38F1) },
592d1631
L
6063 { Bad_Opcode },
6064 { Bad_Opcode },
6065 { Bad_Opcode },
6066 { Bad_Opcode },
e2e1fcde 6067 { PREFIX_TABLE (PREFIX_0F38F6) },
592d1631 6068 { Bad_Opcode },
f88c9eb0 6069 /* f8 */
592d1631
L
6070 { Bad_Opcode },
6071 { Bad_Opcode },
6072 { Bad_Opcode },
6073 { Bad_Opcode },
6074 { Bad_Opcode },
6075 { Bad_Opcode },
6076 { Bad_Opcode },
6077 { Bad_Opcode },
f88c9eb0
SP
6078 },
6079 /* THREE_BYTE_0F3A */
6080 {
6081 /* 00 */
592d1631
L
6082 { Bad_Opcode },
6083 { Bad_Opcode },
6084 { Bad_Opcode },
6085 { Bad_Opcode },
6086 { Bad_Opcode },
6087 { Bad_Opcode },
6088 { Bad_Opcode },
6089 { Bad_Opcode },
f88c9eb0
SP
6090 /* 08 */
6091 { PREFIX_TABLE (PREFIX_0F3A08) },
6092 { PREFIX_TABLE (PREFIX_0F3A09) },
6093 { PREFIX_TABLE (PREFIX_0F3A0A) },
6094 { PREFIX_TABLE (PREFIX_0F3A0B) },
6095 { PREFIX_TABLE (PREFIX_0F3A0C) },
6096 { PREFIX_TABLE (PREFIX_0F3A0D) },
6097 { PREFIX_TABLE (PREFIX_0F3A0E) },
6098 { "palignr", { MX, EM, Ib } },
6099 /* 10 */
592d1631
L
6100 { Bad_Opcode },
6101 { Bad_Opcode },
6102 { Bad_Opcode },
6103 { Bad_Opcode },
f88c9eb0
SP
6104 { PREFIX_TABLE (PREFIX_0F3A14) },
6105 { PREFIX_TABLE (PREFIX_0F3A15) },
6106 { PREFIX_TABLE (PREFIX_0F3A16) },
6107 { PREFIX_TABLE (PREFIX_0F3A17) },
6108 /* 18 */
592d1631
L
6109 { Bad_Opcode },
6110 { Bad_Opcode },
6111 { Bad_Opcode },
6112 { Bad_Opcode },
6113 { Bad_Opcode },
6114 { Bad_Opcode },
6115 { Bad_Opcode },
6116 { Bad_Opcode },
f88c9eb0
SP
6117 /* 20 */
6118 { PREFIX_TABLE (PREFIX_0F3A20) },
6119 { PREFIX_TABLE (PREFIX_0F3A21) },
6120 { PREFIX_TABLE (PREFIX_0F3A22) },
592d1631
L
6121 { Bad_Opcode },
6122 { Bad_Opcode },
6123 { Bad_Opcode },
6124 { Bad_Opcode },
6125 { Bad_Opcode },
f88c9eb0 6126 /* 28 */
592d1631
L
6127 { Bad_Opcode },
6128 { Bad_Opcode },
6129 { Bad_Opcode },
6130 { Bad_Opcode },
6131 { Bad_Opcode },
6132 { Bad_Opcode },
6133 { Bad_Opcode },
6134 { Bad_Opcode },
f88c9eb0 6135 /* 30 */
592d1631
L
6136 { Bad_Opcode },
6137 { Bad_Opcode },
6138 { Bad_Opcode },
6139 { Bad_Opcode },
6140 { Bad_Opcode },
6141 { Bad_Opcode },
6142 { Bad_Opcode },
6143 { Bad_Opcode },
f88c9eb0 6144 /* 38 */
592d1631
L
6145 { Bad_Opcode },
6146 { Bad_Opcode },
6147 { Bad_Opcode },
6148 { Bad_Opcode },
6149 { Bad_Opcode },
6150 { Bad_Opcode },
6151 { Bad_Opcode },
6152 { Bad_Opcode },
f88c9eb0
SP
6153 /* 40 */
6154 { PREFIX_TABLE (PREFIX_0F3A40) },
6155 { PREFIX_TABLE (PREFIX_0F3A41) },
6156 { PREFIX_TABLE (PREFIX_0F3A42) },
592d1631 6157 { Bad_Opcode },
f88c9eb0 6158 { PREFIX_TABLE (PREFIX_0F3A44) },
592d1631
L
6159 { Bad_Opcode },
6160 { Bad_Opcode },
6161 { Bad_Opcode },
f88c9eb0 6162 /* 48 */
592d1631
L
6163 { Bad_Opcode },
6164 { Bad_Opcode },
6165 { Bad_Opcode },
6166 { Bad_Opcode },
6167 { Bad_Opcode },
6168 { Bad_Opcode },
6169 { Bad_Opcode },
6170 { Bad_Opcode },
f88c9eb0 6171 /* 50 */
592d1631
L
6172 { Bad_Opcode },
6173 { Bad_Opcode },
6174 { Bad_Opcode },
6175 { Bad_Opcode },
6176 { Bad_Opcode },
6177 { Bad_Opcode },
6178 { Bad_Opcode },
6179 { Bad_Opcode },
f88c9eb0 6180 /* 58 */
592d1631
L
6181 { Bad_Opcode },
6182 { Bad_Opcode },
6183 { Bad_Opcode },
6184 { Bad_Opcode },
6185 { Bad_Opcode },
6186 { Bad_Opcode },
6187 { Bad_Opcode },
6188 { Bad_Opcode },
f88c9eb0
SP
6189 /* 60 */
6190 { PREFIX_TABLE (PREFIX_0F3A60) },
6191 { PREFIX_TABLE (PREFIX_0F3A61) },
6192 { PREFIX_TABLE (PREFIX_0F3A62) },
6193 { PREFIX_TABLE (PREFIX_0F3A63) },
592d1631
L
6194 { Bad_Opcode },
6195 { Bad_Opcode },
6196 { Bad_Opcode },
6197 { Bad_Opcode },
f88c9eb0 6198 /* 68 */
592d1631
L
6199 { Bad_Opcode },
6200 { Bad_Opcode },
6201 { Bad_Opcode },
6202 { Bad_Opcode },
6203 { Bad_Opcode },
6204 { Bad_Opcode },
6205 { Bad_Opcode },
6206 { Bad_Opcode },
f88c9eb0 6207 /* 70 */
592d1631
L
6208 { Bad_Opcode },
6209 { Bad_Opcode },
6210 { Bad_Opcode },
6211 { Bad_Opcode },
6212 { Bad_Opcode },
6213 { Bad_Opcode },
6214 { Bad_Opcode },
6215 { Bad_Opcode },
f88c9eb0 6216 /* 78 */
592d1631
L
6217 { Bad_Opcode },
6218 { Bad_Opcode },
6219 { Bad_Opcode },
6220 { Bad_Opcode },
6221 { Bad_Opcode },
6222 { Bad_Opcode },
6223 { Bad_Opcode },
6224 { Bad_Opcode },
f88c9eb0 6225 /* 80 */
592d1631
L
6226 { Bad_Opcode },
6227 { Bad_Opcode },
6228 { Bad_Opcode },
6229 { Bad_Opcode },
6230 { Bad_Opcode },
6231 { Bad_Opcode },
6232 { Bad_Opcode },
6233 { Bad_Opcode },
f88c9eb0 6234 /* 88 */
592d1631
L
6235 { Bad_Opcode },
6236 { Bad_Opcode },
6237 { Bad_Opcode },
6238 { Bad_Opcode },
6239 { Bad_Opcode },
6240 { Bad_Opcode },
6241 { Bad_Opcode },
6242 { Bad_Opcode },
f88c9eb0 6243 /* 90 */
592d1631
L
6244 { Bad_Opcode },
6245 { Bad_Opcode },
6246 { Bad_Opcode },
6247 { Bad_Opcode },
6248 { Bad_Opcode },
6249 { Bad_Opcode },
6250 { Bad_Opcode },
6251 { Bad_Opcode },
f88c9eb0 6252 /* 98 */
592d1631
L
6253 { Bad_Opcode },
6254 { Bad_Opcode },
6255 { Bad_Opcode },
6256 { Bad_Opcode },
6257 { Bad_Opcode },
6258 { Bad_Opcode },
6259 { Bad_Opcode },
6260 { Bad_Opcode },
f88c9eb0 6261 /* a0 */
592d1631
L
6262 { Bad_Opcode },
6263 { Bad_Opcode },
6264 { Bad_Opcode },
6265 { Bad_Opcode },
6266 { Bad_Opcode },
6267 { Bad_Opcode },
6268 { Bad_Opcode },
6269 { Bad_Opcode },
f88c9eb0 6270 /* a8 */
592d1631
L
6271 { Bad_Opcode },
6272 { Bad_Opcode },
6273 { Bad_Opcode },
6274 { Bad_Opcode },
6275 { Bad_Opcode },
6276 { Bad_Opcode },
6277 { Bad_Opcode },
6278 { Bad_Opcode },
f88c9eb0 6279 /* b0 */
592d1631
L
6280 { Bad_Opcode },
6281 { Bad_Opcode },
6282 { Bad_Opcode },
6283 { Bad_Opcode },
6284 { Bad_Opcode },
6285 { Bad_Opcode },
6286 { Bad_Opcode },
6287 { Bad_Opcode },
f88c9eb0 6288 /* b8 */
592d1631
L
6289 { Bad_Opcode },
6290 { Bad_Opcode },
6291 { Bad_Opcode },
6292 { Bad_Opcode },
6293 { Bad_Opcode },
6294 { Bad_Opcode },
6295 { Bad_Opcode },
6296 { Bad_Opcode },
f88c9eb0 6297 /* c0 */
592d1631
L
6298 { Bad_Opcode },
6299 { Bad_Opcode },
6300 { Bad_Opcode },
6301 { Bad_Opcode },
6302 { Bad_Opcode },
6303 { Bad_Opcode },
6304 { Bad_Opcode },
6305 { Bad_Opcode },
f88c9eb0 6306 /* c8 */
592d1631
L
6307 { Bad_Opcode },
6308 { Bad_Opcode },
6309 { Bad_Opcode },
6310 { Bad_Opcode },
6311 { Bad_Opcode },
6312 { Bad_Opcode },
6313 { Bad_Opcode },
6314 { Bad_Opcode },
f88c9eb0 6315 /* d0 */
592d1631
L
6316 { Bad_Opcode },
6317 { Bad_Opcode },
6318 { Bad_Opcode },
6319 { Bad_Opcode },
6320 { Bad_Opcode },
6321 { Bad_Opcode },
6322 { Bad_Opcode },
6323 { Bad_Opcode },
f88c9eb0 6324 /* d8 */
592d1631
L
6325 { Bad_Opcode },
6326 { Bad_Opcode },
6327 { Bad_Opcode },
6328 { Bad_Opcode },
6329 { Bad_Opcode },
6330 { Bad_Opcode },
6331 { Bad_Opcode },
f88c9eb0
SP
6332 { PREFIX_TABLE (PREFIX_0F3ADF) },
6333 /* e0 */
592d1631
L
6334 { Bad_Opcode },
6335 { Bad_Opcode },
6336 { Bad_Opcode },
6337 { Bad_Opcode },
6338 { Bad_Opcode },
6339 { Bad_Opcode },
6340 { Bad_Opcode },
6341 { Bad_Opcode },
f88c9eb0 6342 /* e8 */
592d1631
L
6343 { Bad_Opcode },
6344 { Bad_Opcode },
6345 { Bad_Opcode },
6346 { Bad_Opcode },
6347 { Bad_Opcode },
6348 { Bad_Opcode },
6349 { Bad_Opcode },
6350 { Bad_Opcode },
f88c9eb0 6351 /* f0 */
592d1631
L
6352 { Bad_Opcode },
6353 { Bad_Opcode },
6354 { Bad_Opcode },
6355 { Bad_Opcode },
6356 { Bad_Opcode },
6357 { Bad_Opcode },
6358 { Bad_Opcode },
6359 { Bad_Opcode },
f88c9eb0 6360 /* f8 */
592d1631
L
6361 { Bad_Opcode },
6362 { Bad_Opcode },
6363 { Bad_Opcode },
6364 { Bad_Opcode },
6365 { Bad_Opcode },
6366 { Bad_Opcode },
6367 { Bad_Opcode },
6368 { Bad_Opcode },
f88c9eb0
SP
6369 },
6370
6371 /* THREE_BYTE_0F7A */
6372 {
6373 /* 00 */
592d1631
L
6374 { Bad_Opcode },
6375 { Bad_Opcode },
6376 { Bad_Opcode },
6377 { Bad_Opcode },
6378 { Bad_Opcode },
6379 { Bad_Opcode },
6380 { Bad_Opcode },
6381 { Bad_Opcode },
f88c9eb0 6382 /* 08 */
592d1631
L
6383 { Bad_Opcode },
6384 { Bad_Opcode },
6385 { Bad_Opcode },
6386 { Bad_Opcode },
6387 { Bad_Opcode },
6388 { Bad_Opcode },
6389 { Bad_Opcode },
6390 { Bad_Opcode },
f88c9eb0 6391 /* 10 */
592d1631
L
6392 { Bad_Opcode },
6393 { Bad_Opcode },
6394 { Bad_Opcode },
6395 { Bad_Opcode },
6396 { Bad_Opcode },
6397 { Bad_Opcode },
6398 { Bad_Opcode },
6399 { Bad_Opcode },
f88c9eb0 6400 /* 18 */
592d1631
L
6401 { Bad_Opcode },
6402 { Bad_Opcode },
6403 { Bad_Opcode },
6404 { Bad_Opcode },
6405 { Bad_Opcode },
6406 { Bad_Opcode },
6407 { Bad_Opcode },
6408 { Bad_Opcode },
f88c9eb0
SP
6409 /* 20 */
6410 { "ptest", { XX } },
592d1631
L
6411 { Bad_Opcode },
6412 { Bad_Opcode },
6413 { Bad_Opcode },
6414 { Bad_Opcode },
6415 { Bad_Opcode },
6416 { Bad_Opcode },
6417 { Bad_Opcode },
f88c9eb0 6418 /* 28 */
592d1631
L
6419 { Bad_Opcode },
6420 { Bad_Opcode },
6421 { Bad_Opcode },
6422 { Bad_Opcode },
6423 { Bad_Opcode },
6424 { Bad_Opcode },
6425 { Bad_Opcode },
6426 { Bad_Opcode },
f88c9eb0 6427 /* 30 */
592d1631
L
6428 { Bad_Opcode },
6429 { Bad_Opcode },
6430 { Bad_Opcode },
6431 { Bad_Opcode },
6432 { Bad_Opcode },
6433 { Bad_Opcode },
6434 { Bad_Opcode },
6435 { Bad_Opcode },
f88c9eb0 6436 /* 38 */
592d1631
L
6437 { Bad_Opcode },
6438 { Bad_Opcode },
6439 { Bad_Opcode },
6440 { Bad_Opcode },
6441 { Bad_Opcode },
6442 { Bad_Opcode },
6443 { Bad_Opcode },
6444 { Bad_Opcode },
f88c9eb0 6445 /* 40 */
592d1631 6446 { Bad_Opcode },
f88c9eb0
SP
6447 { "phaddbw", { XM, EXq } },
6448 { "phaddbd", { XM, EXq } },
6449 { "phaddbq", { XM, EXq } },
592d1631
L
6450 { Bad_Opcode },
6451 { Bad_Opcode },
f88c9eb0
SP
6452 { "phaddwd", { XM, EXq } },
6453 { "phaddwq", { XM, EXq } },
6454 /* 48 */
592d1631
L
6455 { Bad_Opcode },
6456 { Bad_Opcode },
6457 { Bad_Opcode },
f88c9eb0 6458 { "phadddq", { XM, EXq } },
592d1631
L
6459 { Bad_Opcode },
6460 { Bad_Opcode },
6461 { Bad_Opcode },
6462 { Bad_Opcode },
f88c9eb0 6463 /* 50 */
592d1631 6464 { Bad_Opcode },
f88c9eb0
SP
6465 { "phaddubw", { XM, EXq } },
6466 { "phaddubd", { XM, EXq } },
6467 { "phaddubq", { XM, EXq } },
592d1631
L
6468 { Bad_Opcode },
6469 { Bad_Opcode },
f88c9eb0
SP
6470 { "phadduwd", { XM, EXq } },
6471 { "phadduwq", { XM, EXq } },
6472 /* 58 */
592d1631
L
6473 { Bad_Opcode },
6474 { Bad_Opcode },
6475 { Bad_Opcode },
f88c9eb0 6476 { "phaddudq", { XM, EXq } },
592d1631
L
6477 { Bad_Opcode },
6478 { Bad_Opcode },
6479 { Bad_Opcode },
6480 { Bad_Opcode },
f88c9eb0 6481 /* 60 */
592d1631 6482 { Bad_Opcode },
f88c9eb0
SP
6483 { "phsubbw", { XM, EXq } },
6484 { "phsubbd", { XM, EXq } },
6485 { "phsubbq", { XM, EXq } },
592d1631
L
6486 { Bad_Opcode },
6487 { Bad_Opcode },
6488 { Bad_Opcode },
6489 { Bad_Opcode },
4e7d34a6 6490 /* 68 */
592d1631
L
6491 { Bad_Opcode },
6492 { Bad_Opcode },
6493 { Bad_Opcode },
6494 { Bad_Opcode },
6495 { Bad_Opcode },
6496 { Bad_Opcode },
6497 { Bad_Opcode },
6498 { Bad_Opcode },
85f10a01 6499 /* 70 */
592d1631
L
6500 { Bad_Opcode },
6501 { Bad_Opcode },
6502 { Bad_Opcode },
6503 { Bad_Opcode },
6504 { Bad_Opcode },
6505 { Bad_Opcode },
6506 { Bad_Opcode },
6507 { Bad_Opcode },
85f10a01 6508 /* 78 */
592d1631
L
6509 { Bad_Opcode },
6510 { Bad_Opcode },
6511 { Bad_Opcode },
6512 { Bad_Opcode },
6513 { Bad_Opcode },
6514 { Bad_Opcode },
6515 { Bad_Opcode },
6516 { Bad_Opcode },
85f10a01 6517 /* 80 */
592d1631
L
6518 { Bad_Opcode },
6519 { Bad_Opcode },
6520 { Bad_Opcode },
6521 { Bad_Opcode },
6522 { Bad_Opcode },
6523 { Bad_Opcode },
6524 { Bad_Opcode },
6525 { Bad_Opcode },
85f10a01 6526 /* 88 */
592d1631
L
6527 { Bad_Opcode },
6528 { Bad_Opcode },
6529 { Bad_Opcode },
6530 { Bad_Opcode },
6531 { Bad_Opcode },
6532 { Bad_Opcode },
6533 { Bad_Opcode },
6534 { Bad_Opcode },
85f10a01 6535 /* 90 */
592d1631
L
6536 { Bad_Opcode },
6537 { Bad_Opcode },
6538 { Bad_Opcode },
6539 { Bad_Opcode },
6540 { Bad_Opcode },
6541 { Bad_Opcode },
6542 { Bad_Opcode },
6543 { Bad_Opcode },
85f10a01 6544 /* 98 */
592d1631
L
6545 { Bad_Opcode },
6546 { Bad_Opcode },
6547 { Bad_Opcode },
6548 { Bad_Opcode },
6549 { Bad_Opcode },
6550 { Bad_Opcode },
6551 { Bad_Opcode },
6552 { Bad_Opcode },
85f10a01 6553 /* a0 */
592d1631
L
6554 { Bad_Opcode },
6555 { Bad_Opcode },
6556 { Bad_Opcode },
6557 { Bad_Opcode },
6558 { Bad_Opcode },
6559 { Bad_Opcode },
6560 { Bad_Opcode },
6561 { Bad_Opcode },
85f10a01 6562 /* a8 */
592d1631
L
6563 { Bad_Opcode },
6564 { Bad_Opcode },
6565 { Bad_Opcode },
6566 { Bad_Opcode },
6567 { Bad_Opcode },
6568 { Bad_Opcode },
6569 { Bad_Opcode },
6570 { Bad_Opcode },
85f10a01 6571 /* b0 */
592d1631
L
6572 { Bad_Opcode },
6573 { Bad_Opcode },
6574 { Bad_Opcode },
6575 { Bad_Opcode },
6576 { Bad_Opcode },
6577 { Bad_Opcode },
6578 { Bad_Opcode },
6579 { Bad_Opcode },
85f10a01 6580 /* b8 */
592d1631
L
6581 { Bad_Opcode },
6582 { Bad_Opcode },
6583 { Bad_Opcode },
6584 { Bad_Opcode },
6585 { Bad_Opcode },
6586 { Bad_Opcode },
6587 { Bad_Opcode },
6588 { Bad_Opcode },
85f10a01 6589 /* c0 */
592d1631
L
6590 { Bad_Opcode },
6591 { Bad_Opcode },
6592 { Bad_Opcode },
6593 { Bad_Opcode },
6594 { Bad_Opcode },
6595 { Bad_Opcode },
6596 { Bad_Opcode },
6597 { Bad_Opcode },
85f10a01 6598 /* c8 */
592d1631
L
6599 { Bad_Opcode },
6600 { Bad_Opcode },
6601 { Bad_Opcode },
6602 { Bad_Opcode },
6603 { Bad_Opcode },
6604 { Bad_Opcode },
6605 { Bad_Opcode },
6606 { Bad_Opcode },
85f10a01 6607 /* d0 */
592d1631
L
6608 { Bad_Opcode },
6609 { Bad_Opcode },
6610 { Bad_Opcode },
6611 { Bad_Opcode },
6612 { Bad_Opcode },
6613 { Bad_Opcode },
6614 { Bad_Opcode },
6615 { Bad_Opcode },
85f10a01 6616 /* d8 */
592d1631
L
6617 { Bad_Opcode },
6618 { Bad_Opcode },
6619 { Bad_Opcode },
6620 { Bad_Opcode },
6621 { Bad_Opcode },
6622 { Bad_Opcode },
6623 { Bad_Opcode },
6624 { Bad_Opcode },
85f10a01 6625 /* e0 */
592d1631
L
6626 { Bad_Opcode },
6627 { Bad_Opcode },
6628 { Bad_Opcode },
6629 { Bad_Opcode },
6630 { Bad_Opcode },
6631 { Bad_Opcode },
6632 { Bad_Opcode },
6633 { Bad_Opcode },
85f10a01 6634 /* e8 */
592d1631
L
6635 { Bad_Opcode },
6636 { Bad_Opcode },
6637 { Bad_Opcode },
6638 { Bad_Opcode },
6639 { Bad_Opcode },
6640 { Bad_Opcode },
6641 { Bad_Opcode },
6642 { Bad_Opcode },
85f10a01 6643 /* f0 */
592d1631
L
6644 { Bad_Opcode },
6645 { Bad_Opcode },
6646 { Bad_Opcode },
6647 { Bad_Opcode },
6648 { Bad_Opcode },
6649 { Bad_Opcode },
6650 { Bad_Opcode },
6651 { Bad_Opcode },
85f10a01 6652 /* f8 */
592d1631
L
6653 { Bad_Opcode },
6654 { Bad_Opcode },
6655 { Bad_Opcode },
6656 { Bad_Opcode },
6657 { Bad_Opcode },
6658 { Bad_Opcode },
6659 { Bad_Opcode },
6660 { Bad_Opcode },
85f10a01 6661 },
f88c9eb0
SP
6662};
6663
6664static const struct dis386 xop_table[][256] = {
5dd85c99 6665 /* XOP_08 */
85f10a01
MM
6666 {
6667 /* 00 */
592d1631
L
6668 { Bad_Opcode },
6669 { Bad_Opcode },
6670 { Bad_Opcode },
6671 { Bad_Opcode },
6672 { Bad_Opcode },
6673 { Bad_Opcode },
6674 { Bad_Opcode },
6675 { Bad_Opcode },
85f10a01 6676 /* 08 */
592d1631
L
6677 { Bad_Opcode },
6678 { Bad_Opcode },
6679 { Bad_Opcode },
6680 { Bad_Opcode },
6681 { Bad_Opcode },
6682 { Bad_Opcode },
6683 { Bad_Opcode },
6684 { Bad_Opcode },
85f10a01 6685 /* 10 */
3929df09 6686 { Bad_Opcode },
592d1631
L
6687 { Bad_Opcode },
6688 { Bad_Opcode },
6689 { Bad_Opcode },
6690 { Bad_Opcode },
6691 { Bad_Opcode },
6692 { Bad_Opcode },
6693 { Bad_Opcode },
85f10a01 6694 /* 18 */
592d1631
L
6695 { Bad_Opcode },
6696 { Bad_Opcode },
6697 { Bad_Opcode },
6698 { Bad_Opcode },
6699 { Bad_Opcode },
6700 { Bad_Opcode },
6701 { Bad_Opcode },
6702 { Bad_Opcode },
85f10a01 6703 /* 20 */
592d1631
L
6704 { Bad_Opcode },
6705 { Bad_Opcode },
6706 { Bad_Opcode },
6707 { Bad_Opcode },
6708 { Bad_Opcode },
6709 { Bad_Opcode },
6710 { Bad_Opcode },
6711 { Bad_Opcode },
85f10a01 6712 /* 28 */
592d1631
L
6713 { Bad_Opcode },
6714 { Bad_Opcode },
6715 { Bad_Opcode },
6716 { Bad_Opcode },
6717 { Bad_Opcode },
6718 { Bad_Opcode },
6719 { Bad_Opcode },
6720 { Bad_Opcode },
c0f3af97 6721 /* 30 */
592d1631
L
6722 { Bad_Opcode },
6723 { Bad_Opcode },
6724 { Bad_Opcode },
6725 { Bad_Opcode },
6726 { Bad_Opcode },
6727 { Bad_Opcode },
6728 { Bad_Opcode },
6729 { Bad_Opcode },
c0f3af97 6730 /* 38 */
592d1631
L
6731 { Bad_Opcode },
6732 { Bad_Opcode },
6733 { Bad_Opcode },
6734 { Bad_Opcode },
6735 { Bad_Opcode },
6736 { Bad_Opcode },
6737 { Bad_Opcode },
6738 { Bad_Opcode },
c0f3af97 6739 /* 40 */
592d1631
L
6740 { Bad_Opcode },
6741 { Bad_Opcode },
6742 { Bad_Opcode },
6743 { Bad_Opcode },
6744 { Bad_Opcode },
6745 { Bad_Opcode },
6746 { Bad_Opcode },
6747 { Bad_Opcode },
85f10a01 6748 /* 48 */
592d1631
L
6749 { Bad_Opcode },
6750 { Bad_Opcode },
6751 { Bad_Opcode },
6752 { Bad_Opcode },
6753 { Bad_Opcode },
6754 { Bad_Opcode },
6755 { Bad_Opcode },
6756 { Bad_Opcode },
c0f3af97 6757 /* 50 */
592d1631
L
6758 { Bad_Opcode },
6759 { Bad_Opcode },
6760 { Bad_Opcode },
6761 { Bad_Opcode },
6762 { Bad_Opcode },
6763 { Bad_Opcode },
6764 { Bad_Opcode },
6765 { Bad_Opcode },
85f10a01 6766 /* 58 */
592d1631
L
6767 { Bad_Opcode },
6768 { Bad_Opcode },
6769 { Bad_Opcode },
6770 { Bad_Opcode },
6771 { Bad_Opcode },
6772 { Bad_Opcode },
6773 { Bad_Opcode },
6774 { Bad_Opcode },
c1e679ec 6775 /* 60 */
592d1631
L
6776 { Bad_Opcode },
6777 { Bad_Opcode },
6778 { Bad_Opcode },
6779 { Bad_Opcode },
6780 { Bad_Opcode },
6781 { Bad_Opcode },
6782 { Bad_Opcode },
6783 { Bad_Opcode },
c0f3af97 6784 /* 68 */
592d1631
L
6785 { Bad_Opcode },
6786 { Bad_Opcode },
6787 { Bad_Opcode },
6788 { Bad_Opcode },
6789 { Bad_Opcode },
6790 { Bad_Opcode },
6791 { Bad_Opcode },
6792 { Bad_Opcode },
85f10a01 6793 /* 70 */
592d1631
L
6794 { Bad_Opcode },
6795 { Bad_Opcode },
6796 { Bad_Opcode },
6797 { Bad_Opcode },
6798 { Bad_Opcode },
6799 { Bad_Opcode },
6800 { Bad_Opcode },
6801 { Bad_Opcode },
85f10a01 6802 /* 78 */
592d1631
L
6803 { Bad_Opcode },
6804 { Bad_Opcode },
6805 { Bad_Opcode },
6806 { Bad_Opcode },
6807 { Bad_Opcode },
6808 { Bad_Opcode },
6809 { Bad_Opcode },
6810 { Bad_Opcode },
85f10a01 6811 /* 80 */
592d1631
L
6812 { Bad_Opcode },
6813 { Bad_Opcode },
6814 { Bad_Opcode },
6815 { Bad_Opcode },
6816 { Bad_Opcode },
5dd85c99
SP
6817 { "vpmacssww", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
6818 { "vpmacsswd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
6819 { "vpmacssdql", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
6820 /* 88 */
592d1631
L
6821 { Bad_Opcode },
6822 { Bad_Opcode },
6823 { Bad_Opcode },
6824 { Bad_Opcode },
6825 { Bad_Opcode },
6826 { Bad_Opcode },
5dd85c99
SP
6827 { "vpmacssdd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
6828 { "vpmacssdqh", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
6829 /* 90 */
592d1631
L
6830 { Bad_Opcode },
6831 { Bad_Opcode },
6832 { Bad_Opcode },
6833 { Bad_Opcode },
6834 { Bad_Opcode },
5dd85c99
SP
6835 { "vpmacsww", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
6836 { "vpmacswd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
6837 { "vpmacsdql", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
6838 /* 98 */
592d1631
L
6839 { Bad_Opcode },
6840 { Bad_Opcode },
6841 { Bad_Opcode },
6842 { Bad_Opcode },
6843 { Bad_Opcode },
6844 { Bad_Opcode },
5dd85c99
SP
6845 { "vpmacsdd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
6846 { "vpmacsdqh", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
6847 /* a0 */
592d1631
L
6848 { Bad_Opcode },
6849 { Bad_Opcode },
5dd85c99
SP
6850 { "vpcmov", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
6851 { "vpperm", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
592d1631
L
6852 { Bad_Opcode },
6853 { Bad_Opcode },
5dd85c99 6854 { "vpmadcsswd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
592d1631 6855 { Bad_Opcode },
5dd85c99 6856 /* a8 */
592d1631
L
6857 { Bad_Opcode },
6858 { Bad_Opcode },
6859 { Bad_Opcode },
6860 { Bad_Opcode },
6861 { Bad_Opcode },
6862 { Bad_Opcode },
6863 { Bad_Opcode },
6864 { Bad_Opcode },
5dd85c99 6865 /* b0 */
592d1631
L
6866 { Bad_Opcode },
6867 { Bad_Opcode },
6868 { Bad_Opcode },
6869 { Bad_Opcode },
6870 { Bad_Opcode },
6871 { Bad_Opcode },
5dd85c99 6872 { "vpmadcswd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
592d1631 6873 { Bad_Opcode },
5dd85c99 6874 /* b8 */
592d1631
L
6875 { Bad_Opcode },
6876 { Bad_Opcode },
6877 { Bad_Opcode },
6878 { Bad_Opcode },
6879 { Bad_Opcode },
6880 { Bad_Opcode },
6881 { Bad_Opcode },
6882 { Bad_Opcode },
5dd85c99
SP
6883 /* c0 */
6884 { "vprotb", { XM, Vex_2src_1, Ib } },
6885 { "vprotw", { XM, Vex_2src_1, Ib } },
6886 { "vprotd", { XM, Vex_2src_1, Ib } },
6887 { "vprotq", { XM, Vex_2src_1, Ib } },
592d1631
L
6888 { Bad_Opcode },
6889 { Bad_Opcode },
6890 { Bad_Opcode },
6891 { Bad_Opcode },
5dd85c99 6892 /* c8 */
592d1631
L
6893 { Bad_Opcode },
6894 { Bad_Opcode },
6895 { Bad_Opcode },
6896 { Bad_Opcode },
5dd85c99
SP
6897 { "vpcomb", { XM, Vex128, EXx, Ib } },
6898 { "vpcomw", { XM, Vex128, EXx, Ib } },
6899 { "vpcomd", { XM, Vex128, EXx, Ib } },
6900 { "vpcomq", { XM, Vex128, EXx, Ib } },
6901 /* d0 */
592d1631
L
6902 { Bad_Opcode },
6903 { Bad_Opcode },
6904 { Bad_Opcode },
6905 { Bad_Opcode },
6906 { Bad_Opcode },
6907 { Bad_Opcode },
6908 { Bad_Opcode },
6909 { Bad_Opcode },
5dd85c99 6910 /* d8 */
592d1631
L
6911 { Bad_Opcode },
6912 { Bad_Opcode },
6913 { Bad_Opcode },
6914 { Bad_Opcode },
6915 { Bad_Opcode },
6916 { Bad_Opcode },
6917 { Bad_Opcode },
6918 { Bad_Opcode },
5dd85c99 6919 /* e0 */
592d1631
L
6920 { Bad_Opcode },
6921 { Bad_Opcode },
6922 { Bad_Opcode },
6923 { Bad_Opcode },
6924 { Bad_Opcode },
6925 { Bad_Opcode },
6926 { Bad_Opcode },
6927 { Bad_Opcode },
5dd85c99 6928 /* e8 */
592d1631
L
6929 { Bad_Opcode },
6930 { Bad_Opcode },
6931 { Bad_Opcode },
6932 { Bad_Opcode },
5dd85c99
SP
6933 { "vpcomub", { XM, Vex128, EXx, Ib } },
6934 { "vpcomuw", { XM, Vex128, EXx, Ib } },
6935 { "vpcomud", { XM, Vex128, EXx, Ib } },
6936 { "vpcomuq", { XM, Vex128, EXx, Ib } },
6937 /* f0 */
592d1631
L
6938 { Bad_Opcode },
6939 { Bad_Opcode },
6940 { Bad_Opcode },
6941 { Bad_Opcode },
6942 { Bad_Opcode },
6943 { Bad_Opcode },
6944 { Bad_Opcode },
6945 { Bad_Opcode },
5dd85c99 6946 /* f8 */
592d1631
L
6947 { Bad_Opcode },
6948 { Bad_Opcode },
6949 { Bad_Opcode },
6950 { Bad_Opcode },
6951 { Bad_Opcode },
6952 { Bad_Opcode },
6953 { Bad_Opcode },
6954 { Bad_Opcode },
5dd85c99
SP
6955 },
6956 /* XOP_09 */
6957 {
6958 /* 00 */
592d1631 6959 { Bad_Opcode },
2a2a0f38
QN
6960 { REG_TABLE (REG_XOP_TBM_01) },
6961 { REG_TABLE (REG_XOP_TBM_02) },
592d1631
L
6962 { Bad_Opcode },
6963 { Bad_Opcode },
6964 { Bad_Opcode },
6965 { Bad_Opcode },
6966 { Bad_Opcode },
5dd85c99 6967 /* 08 */
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 },
5dd85c99 6976 /* 10 */
592d1631
L
6977 { Bad_Opcode },
6978 { Bad_Opcode },
5dd85c99 6979 { REG_TABLE (REG_XOP_LWPCB) },
592d1631
L
6980 { Bad_Opcode },
6981 { Bad_Opcode },
6982 { Bad_Opcode },
6983 { Bad_Opcode },
6984 { Bad_Opcode },
5dd85c99 6985 /* 18 */
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 },
5dd85c99 6994 /* 20 */
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 },
5dd85c99 7003 /* 28 */
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 },
5dd85c99 7012 /* 30 */
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 },
5dd85c99 7021 /* 38 */
592d1631
L
7022 { Bad_Opcode },
7023 { Bad_Opcode },
7024 { Bad_Opcode },
7025 { Bad_Opcode },
7026 { Bad_Opcode },
7027 { Bad_Opcode },
7028 { Bad_Opcode },
7029 { Bad_Opcode },
5dd85c99 7030 /* 40 */
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 },
5dd85c99 7039 /* 48 */
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 },
5dd85c99 7048 /* 50 */
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 },
5dd85c99 7057 /* 58 */
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 },
5dd85c99 7066 /* 60 */
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 },
5dd85c99 7075 /* 68 */
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 },
5dd85c99 7084 /* 70 */
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 },
5dd85c99 7093 /* 78 */
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 },
5dd85c99 7102 /* 80 */
592a252b
L
7103 { VEX_LEN_TABLE (VEX_LEN_0FXOP_09_80) },
7104 { VEX_LEN_TABLE (VEX_LEN_0FXOP_09_81) },
5dd85c99
SP
7105 { "vfrczss", { XM, EXd } },
7106 { "vfrczsd", { XM, EXq } },
592d1631
L
7107 { Bad_Opcode },
7108 { Bad_Opcode },
7109 { Bad_Opcode },
7110 { Bad_Opcode },
5dd85c99 7111 /* 88 */
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 },
5dd85c99
SP
7120 /* 90 */
7121 { "vprotb", { XM, Vex_2src_1, Vex_2src_2 } },
7122 { "vprotw", { XM, Vex_2src_1, Vex_2src_2 } },
7123 { "vprotd", { XM, Vex_2src_1, Vex_2src_2 } },
7124 { "vprotq", { XM, Vex_2src_1, Vex_2src_2 } },
7125 { "vpshlb", { XM, Vex_2src_1, Vex_2src_2 } },
7126 { "vpshlw", { XM, Vex_2src_1, Vex_2src_2 } },
7127 { "vpshld", { XM, Vex_2src_1, Vex_2src_2 } },
7128 { "vpshlq", { XM, Vex_2src_1, Vex_2src_2 } },
7129 /* 98 */
7130 { "vpshab", { XM, Vex_2src_1, Vex_2src_2 } },
7131 { "vpshaw", { XM, Vex_2src_1, Vex_2src_2 } },
7132 { "vpshad", { XM, Vex_2src_1, Vex_2src_2 } },
7133 { "vpshaq", { XM, Vex_2src_1, Vex_2src_2 } },
592d1631
L
7134 { Bad_Opcode },
7135 { Bad_Opcode },
7136 { Bad_Opcode },
7137 { Bad_Opcode },
5dd85c99 7138 /* a0 */
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 },
5dd85c99 7147 /* a8 */
592d1631
L
7148 { Bad_Opcode },
7149 { Bad_Opcode },
7150 { Bad_Opcode },
7151 { Bad_Opcode },
7152 { Bad_Opcode },
7153 { Bad_Opcode },
7154 { Bad_Opcode },
7155 { Bad_Opcode },
5dd85c99 7156 /* b0 */
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 },
5dd85c99 7165 /* b8 */
592d1631
L
7166 { Bad_Opcode },
7167 { Bad_Opcode },
7168 { Bad_Opcode },
7169 { Bad_Opcode },
7170 { Bad_Opcode },
7171 { Bad_Opcode },
7172 { Bad_Opcode },
7173 { Bad_Opcode },
5dd85c99 7174 /* c0 */
592d1631 7175 { Bad_Opcode },
5dd85c99
SP
7176 { "vphaddbw", { XM, EXxmm } },
7177 { "vphaddbd", { XM, EXxmm } },
7178 { "vphaddbq", { XM, EXxmm } },
592d1631
L
7179 { Bad_Opcode },
7180 { Bad_Opcode },
5dd85c99
SP
7181 { "vphaddwd", { XM, EXxmm } },
7182 { "vphaddwq", { XM, EXxmm } },
7183 /* c8 */
592d1631
L
7184 { Bad_Opcode },
7185 { Bad_Opcode },
7186 { Bad_Opcode },
5dd85c99 7187 { "vphadddq", { XM, EXxmm } },
592d1631
L
7188 { Bad_Opcode },
7189 { Bad_Opcode },
7190 { Bad_Opcode },
7191 { Bad_Opcode },
5dd85c99 7192 /* d0 */
592d1631 7193 { Bad_Opcode },
5dd85c99
SP
7194 { "vphaddubw", { XM, EXxmm } },
7195 { "vphaddubd", { XM, EXxmm } },
7196 { "vphaddubq", { XM, EXxmm } },
592d1631
L
7197 { Bad_Opcode },
7198 { Bad_Opcode },
5dd85c99
SP
7199 { "vphadduwd", { XM, EXxmm } },
7200 { "vphadduwq", { XM, EXxmm } },
7201 /* d8 */
592d1631
L
7202 { Bad_Opcode },
7203 { Bad_Opcode },
7204 { Bad_Opcode },
5dd85c99 7205 { "vphaddudq", { XM, EXxmm } },
592d1631
L
7206 { Bad_Opcode },
7207 { Bad_Opcode },
7208 { Bad_Opcode },
7209 { Bad_Opcode },
5dd85c99 7210 /* e0 */
592d1631 7211 { Bad_Opcode },
5dd85c99
SP
7212 { "vphsubbw", { XM, EXxmm } },
7213 { "vphsubwd", { XM, EXxmm } },
7214 { "vphsubdq", { XM, EXxmm } },
592d1631
L
7215 { Bad_Opcode },
7216 { Bad_Opcode },
7217 { Bad_Opcode },
7218 { Bad_Opcode },
4e7d34a6 7219 /* e8 */
592d1631
L
7220 { Bad_Opcode },
7221 { Bad_Opcode },
7222 { Bad_Opcode },
7223 { Bad_Opcode },
7224 { Bad_Opcode },
7225 { Bad_Opcode },
7226 { Bad_Opcode },
7227 { Bad_Opcode },
4e7d34a6 7228 /* f0 */
592d1631
L
7229 { Bad_Opcode },
7230 { Bad_Opcode },
7231 { Bad_Opcode },
7232 { Bad_Opcode },
7233 { Bad_Opcode },
7234 { Bad_Opcode },
7235 { Bad_Opcode },
7236 { Bad_Opcode },
4e7d34a6 7237 /* f8 */
592d1631
L
7238 { Bad_Opcode },
7239 { Bad_Opcode },
7240 { Bad_Opcode },
7241 { Bad_Opcode },
7242 { Bad_Opcode },
7243 { Bad_Opcode },
7244 { Bad_Opcode },
7245 { Bad_Opcode },
4e7d34a6 7246 },
f88c9eb0 7247 /* XOP_0A */
4e7d34a6
L
7248 {
7249 /* 00 */
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 },
4e7d34a6 7258 /* 08 */
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 },
4e7d34a6 7267 /* 10 */
2a2a0f38 7268 { "bextr", { Gv, Ev, Iq } },
592d1631 7269 { Bad_Opcode },
f88c9eb0 7270 { REG_TABLE (REG_XOP_LWP) },
592d1631
L
7271 { Bad_Opcode },
7272 { Bad_Opcode },
7273 { Bad_Opcode },
7274 { Bad_Opcode },
7275 { Bad_Opcode },
4e7d34a6 7276 /* 18 */
592d1631
L
7277 { Bad_Opcode },
7278 { Bad_Opcode },
7279 { Bad_Opcode },
7280 { Bad_Opcode },
7281 { Bad_Opcode },
7282 { Bad_Opcode },
7283 { Bad_Opcode },
7284 { Bad_Opcode },
4e7d34a6 7285 /* 20 */
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 },
4e7d34a6 7294 /* 28 */
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 },
4e7d34a6 7303 /* 30 */
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 },
c0f3af97 7312 /* 38 */
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 },
c0f3af97 7321 /* 40 */
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 },
c1e679ec 7330 /* 48 */
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 },
c1e679ec 7339 /* 50 */
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 },
4e7d34a6 7348 /* 58 */
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 },
4e7d34a6 7357 /* 60 */
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 },
4e7d34a6 7366 /* 68 */
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 },
4e7d34a6 7375 /* 70 */
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 },
4e7d34a6 7384 /* 78 */
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 },
4e7d34a6 7393 /* 80 */
592d1631
L
7394 { Bad_Opcode },
7395 { Bad_Opcode },
7396 { Bad_Opcode },
7397 { Bad_Opcode },
7398 { Bad_Opcode },
7399 { Bad_Opcode },
7400 { Bad_Opcode },
7401 { Bad_Opcode },
4e7d34a6 7402 /* 88 */
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 },
4e7d34a6 7411 /* 90 */
592d1631
L
7412 { Bad_Opcode },
7413 { Bad_Opcode },
7414 { Bad_Opcode },
7415 { Bad_Opcode },
7416 { Bad_Opcode },
7417 { Bad_Opcode },
7418 { Bad_Opcode },
7419 { Bad_Opcode },
4e7d34a6 7420 /* 98 */
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 },
4e7d34a6 7429 /* a0 */
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 },
4e7d34a6 7438 /* a8 */
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 },
d5d7db8e 7447 /* b0 */
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 },
85f10a01 7456 /* b8 */
592d1631
L
7457 { Bad_Opcode },
7458 { Bad_Opcode },
7459 { Bad_Opcode },
7460 { Bad_Opcode },
7461 { Bad_Opcode },
7462 { Bad_Opcode },
7463 { Bad_Opcode },
7464 { Bad_Opcode },
85f10a01 7465 /* c0 */
592d1631
L
7466 { Bad_Opcode },
7467 { Bad_Opcode },
7468 { Bad_Opcode },
7469 { Bad_Opcode },
7470 { Bad_Opcode },
7471 { Bad_Opcode },
7472 { Bad_Opcode },
7473 { Bad_Opcode },
85f10a01 7474 /* c8 */
592d1631
L
7475 { Bad_Opcode },
7476 { Bad_Opcode },
7477 { Bad_Opcode },
7478 { Bad_Opcode },
7479 { Bad_Opcode },
7480 { Bad_Opcode },
7481 { Bad_Opcode },
7482 { Bad_Opcode },
85f10a01 7483 /* d0 */
592d1631
L
7484 { Bad_Opcode },
7485 { Bad_Opcode },
7486 { Bad_Opcode },
7487 { Bad_Opcode },
7488 { Bad_Opcode },
7489 { Bad_Opcode },
7490 { Bad_Opcode },
7491 { Bad_Opcode },
85f10a01 7492 /* d8 */
592d1631
L
7493 { Bad_Opcode },
7494 { Bad_Opcode },
7495 { Bad_Opcode },
7496 { Bad_Opcode },
7497 { Bad_Opcode },
7498 { Bad_Opcode },
7499 { Bad_Opcode },
7500 { Bad_Opcode },
85f10a01 7501 /* e0 */
592d1631
L
7502 { Bad_Opcode },
7503 { Bad_Opcode },
7504 { Bad_Opcode },
7505 { Bad_Opcode },
7506 { Bad_Opcode },
7507 { Bad_Opcode },
7508 { Bad_Opcode },
7509 { Bad_Opcode },
85f10a01 7510 /* e8 */
592d1631
L
7511 { Bad_Opcode },
7512 { Bad_Opcode },
7513 { Bad_Opcode },
7514 { Bad_Opcode },
7515 { Bad_Opcode },
7516 { Bad_Opcode },
7517 { Bad_Opcode },
7518 { Bad_Opcode },
85f10a01 7519 /* f0 */
592d1631
L
7520 { Bad_Opcode },
7521 { Bad_Opcode },
7522 { Bad_Opcode },
7523 { Bad_Opcode },
7524 { Bad_Opcode },
7525 { Bad_Opcode },
7526 { Bad_Opcode },
7527 { Bad_Opcode },
85f10a01 7528 /* f8 */
592d1631
L
7529 { Bad_Opcode },
7530 { Bad_Opcode },
7531 { Bad_Opcode },
7532 { Bad_Opcode },
7533 { Bad_Opcode },
7534 { Bad_Opcode },
7535 { Bad_Opcode },
7536 { Bad_Opcode },
85f10a01 7537 },
c0f3af97
L
7538};
7539
7540static const struct dis386 vex_table[][256] = {
7541 /* VEX_0F */
85f10a01
MM
7542 {
7543 /* 00 */
592d1631
L
7544 { Bad_Opcode },
7545 { Bad_Opcode },
7546 { Bad_Opcode },
7547 { Bad_Opcode },
7548 { Bad_Opcode },
7549 { Bad_Opcode },
7550 { Bad_Opcode },
7551 { Bad_Opcode },
85f10a01 7552 /* 08 */
592d1631
L
7553 { Bad_Opcode },
7554 { Bad_Opcode },
7555 { Bad_Opcode },
7556 { Bad_Opcode },
7557 { Bad_Opcode },
7558 { Bad_Opcode },
7559 { Bad_Opcode },
7560 { Bad_Opcode },
c0f3af97 7561 /* 10 */
592a252b
L
7562 { PREFIX_TABLE (PREFIX_VEX_0F10) },
7563 { PREFIX_TABLE (PREFIX_VEX_0F11) },
7564 { PREFIX_TABLE (PREFIX_VEX_0F12) },
7565 { MOD_TABLE (MOD_VEX_0F13) },
7566 { VEX_W_TABLE (VEX_W_0F14) },
7567 { VEX_W_TABLE (VEX_W_0F15) },
7568 { PREFIX_TABLE (PREFIX_VEX_0F16) },
7569 { MOD_TABLE (MOD_VEX_0F17) },
c0f3af97 7570 /* 18 */
592d1631
L
7571 { Bad_Opcode },
7572 { Bad_Opcode },
7573 { Bad_Opcode },
7574 { Bad_Opcode },
7575 { Bad_Opcode },
7576 { Bad_Opcode },
7577 { Bad_Opcode },
7578 { Bad_Opcode },
c0f3af97 7579 /* 20 */
592d1631
L
7580 { Bad_Opcode },
7581 { Bad_Opcode },
7582 { Bad_Opcode },
7583 { Bad_Opcode },
7584 { Bad_Opcode },
7585 { Bad_Opcode },
7586 { Bad_Opcode },
7587 { Bad_Opcode },
c0f3af97 7588 /* 28 */
592a252b
L
7589 { VEX_W_TABLE (VEX_W_0F28) },
7590 { VEX_W_TABLE (VEX_W_0F29) },
7591 { PREFIX_TABLE (PREFIX_VEX_0F2A) },
7592 { MOD_TABLE (MOD_VEX_0F2B) },
7593 { PREFIX_TABLE (PREFIX_VEX_0F2C) },
7594 { PREFIX_TABLE (PREFIX_VEX_0F2D) },
7595 { PREFIX_TABLE (PREFIX_VEX_0F2E) },
7596 { PREFIX_TABLE (PREFIX_VEX_0F2F) },
85f10a01 7597 /* 30 */
592d1631
L
7598 { Bad_Opcode },
7599 { Bad_Opcode },
7600 { Bad_Opcode },
7601 { Bad_Opcode },
7602 { Bad_Opcode },
7603 { Bad_Opcode },
7604 { Bad_Opcode },
7605 { Bad_Opcode },
4e7d34a6 7606 /* 38 */
592d1631
L
7607 { Bad_Opcode },
7608 { Bad_Opcode },
7609 { Bad_Opcode },
7610 { Bad_Opcode },
7611 { Bad_Opcode },
7612 { Bad_Opcode },
7613 { Bad_Opcode },
7614 { Bad_Opcode },
d5d7db8e 7615 /* 40 */
592d1631
L
7616 { Bad_Opcode },
7617 { Bad_Opcode },
7618 { Bad_Opcode },
7619 { Bad_Opcode },
7620 { Bad_Opcode },
7621 { Bad_Opcode },
7622 { Bad_Opcode },
7623 { Bad_Opcode },
85f10a01 7624 /* 48 */
592d1631
L
7625 { Bad_Opcode },
7626 { Bad_Opcode },
7627 { Bad_Opcode },
7628 { Bad_Opcode },
7629 { Bad_Opcode },
7630 { Bad_Opcode },
7631 { Bad_Opcode },
7632 { Bad_Opcode },
d5d7db8e 7633 /* 50 */
592a252b
L
7634 { MOD_TABLE (MOD_VEX_0F50) },
7635 { PREFIX_TABLE (PREFIX_VEX_0F51) },
7636 { PREFIX_TABLE (PREFIX_VEX_0F52) },
7637 { PREFIX_TABLE (PREFIX_VEX_0F53) },
c0f3af97
L
7638 { "vandpX", { XM, Vex, EXx } },
7639 { "vandnpX", { XM, Vex, EXx } },
7640 { "vorpX", { XM, Vex, EXx } },
7641 { "vxorpX", { XM, Vex, EXx } },
7642 /* 58 */
592a252b
L
7643 { PREFIX_TABLE (PREFIX_VEX_0F58) },
7644 { PREFIX_TABLE (PREFIX_VEX_0F59) },
7645 { PREFIX_TABLE (PREFIX_VEX_0F5A) },
7646 { PREFIX_TABLE (PREFIX_VEX_0F5B) },
7647 { PREFIX_TABLE (PREFIX_VEX_0F5C) },
7648 { PREFIX_TABLE (PREFIX_VEX_0F5D) },
7649 { PREFIX_TABLE (PREFIX_VEX_0F5E) },
7650 { PREFIX_TABLE (PREFIX_VEX_0F5F) },
c0f3af97 7651 /* 60 */
592a252b
L
7652 { PREFIX_TABLE (PREFIX_VEX_0F60) },
7653 { PREFIX_TABLE (PREFIX_VEX_0F61) },
7654 { PREFIX_TABLE (PREFIX_VEX_0F62) },
7655 { PREFIX_TABLE (PREFIX_VEX_0F63) },
7656 { PREFIX_TABLE (PREFIX_VEX_0F64) },
7657 { PREFIX_TABLE (PREFIX_VEX_0F65) },
7658 { PREFIX_TABLE (PREFIX_VEX_0F66) },
7659 { PREFIX_TABLE (PREFIX_VEX_0F67) },
c0f3af97 7660 /* 68 */
592a252b
L
7661 { PREFIX_TABLE (PREFIX_VEX_0F68) },
7662 { PREFIX_TABLE (PREFIX_VEX_0F69) },
7663 { PREFIX_TABLE (PREFIX_VEX_0F6A) },
7664 { PREFIX_TABLE (PREFIX_VEX_0F6B) },
7665 { PREFIX_TABLE (PREFIX_VEX_0F6C) },
7666 { PREFIX_TABLE (PREFIX_VEX_0F6D) },
7667 { PREFIX_TABLE (PREFIX_VEX_0F6E) },
7668 { PREFIX_TABLE (PREFIX_VEX_0F6F) },
c0f3af97 7669 /* 70 */
592a252b
L
7670 { PREFIX_TABLE (PREFIX_VEX_0F70) },
7671 { REG_TABLE (REG_VEX_0F71) },
7672 { REG_TABLE (REG_VEX_0F72) },
7673 { REG_TABLE (REG_VEX_0F73) },
7674 { PREFIX_TABLE (PREFIX_VEX_0F74) },
7675 { PREFIX_TABLE (PREFIX_VEX_0F75) },
7676 { PREFIX_TABLE (PREFIX_VEX_0F76) },
7677 { PREFIX_TABLE (PREFIX_VEX_0F77) },
c0f3af97 7678 /* 78 */
592d1631
L
7679 { Bad_Opcode },
7680 { Bad_Opcode },
7681 { Bad_Opcode },
7682 { Bad_Opcode },
592a252b
L
7683 { PREFIX_TABLE (PREFIX_VEX_0F7C) },
7684 { PREFIX_TABLE (PREFIX_VEX_0F7D) },
7685 { PREFIX_TABLE (PREFIX_VEX_0F7E) },
7686 { PREFIX_TABLE (PREFIX_VEX_0F7F) },
c0f3af97 7687 /* 80 */
592d1631
L
7688 { Bad_Opcode },
7689 { Bad_Opcode },
7690 { Bad_Opcode },
7691 { Bad_Opcode },
7692 { Bad_Opcode },
7693 { Bad_Opcode },
7694 { Bad_Opcode },
7695 { Bad_Opcode },
c0f3af97 7696 /* 88 */
592d1631
L
7697 { Bad_Opcode },
7698 { Bad_Opcode },
7699 { Bad_Opcode },
7700 { Bad_Opcode },
7701 { Bad_Opcode },
7702 { Bad_Opcode },
7703 { Bad_Opcode },
7704 { Bad_Opcode },
c0f3af97 7705 /* 90 */
592d1631
L
7706 { Bad_Opcode },
7707 { Bad_Opcode },
7708 { Bad_Opcode },
7709 { Bad_Opcode },
7710 { Bad_Opcode },
7711 { Bad_Opcode },
7712 { Bad_Opcode },
7713 { Bad_Opcode },
c0f3af97 7714 /* 98 */
592d1631
L
7715 { Bad_Opcode },
7716 { Bad_Opcode },
7717 { Bad_Opcode },
7718 { Bad_Opcode },
7719 { Bad_Opcode },
7720 { Bad_Opcode },
7721 { Bad_Opcode },
7722 { Bad_Opcode },
c0f3af97 7723 /* a0 */
592d1631
L
7724 { Bad_Opcode },
7725 { Bad_Opcode },
7726 { Bad_Opcode },
7727 { Bad_Opcode },
7728 { Bad_Opcode },
7729 { Bad_Opcode },
7730 { Bad_Opcode },
7731 { Bad_Opcode },
c0f3af97 7732 /* a8 */
592d1631
L
7733 { Bad_Opcode },
7734 { Bad_Opcode },
7735 { Bad_Opcode },
7736 { Bad_Opcode },
7737 { Bad_Opcode },
7738 { Bad_Opcode },
592a252b 7739 { REG_TABLE (REG_VEX_0FAE) },
592d1631 7740 { Bad_Opcode },
c0f3af97 7741 /* b0 */
592d1631
L
7742 { Bad_Opcode },
7743 { Bad_Opcode },
7744 { Bad_Opcode },
7745 { Bad_Opcode },
7746 { Bad_Opcode },
7747 { Bad_Opcode },
7748 { Bad_Opcode },
7749 { Bad_Opcode },
c0f3af97 7750 /* b8 */
592d1631
L
7751 { Bad_Opcode },
7752 { Bad_Opcode },
7753 { Bad_Opcode },
7754 { Bad_Opcode },
7755 { Bad_Opcode },
7756 { Bad_Opcode },
7757 { Bad_Opcode },
7758 { Bad_Opcode },
c0f3af97 7759 /* c0 */
592d1631
L
7760 { Bad_Opcode },
7761 { Bad_Opcode },
592a252b 7762 { PREFIX_TABLE (PREFIX_VEX_0FC2) },
592d1631 7763 { Bad_Opcode },
592a252b
L
7764 { PREFIX_TABLE (PREFIX_VEX_0FC4) },
7765 { PREFIX_TABLE (PREFIX_VEX_0FC5) },
c0f3af97 7766 { "vshufpX", { XM, Vex, EXx, Ib } },
592d1631 7767 { Bad_Opcode },
c0f3af97 7768 /* c8 */
592d1631
L
7769 { Bad_Opcode },
7770 { Bad_Opcode },
7771 { Bad_Opcode },
7772 { Bad_Opcode },
7773 { Bad_Opcode },
7774 { Bad_Opcode },
7775 { Bad_Opcode },
7776 { Bad_Opcode },
c0f3af97 7777 /* d0 */
592a252b
L
7778 { PREFIX_TABLE (PREFIX_VEX_0FD0) },
7779 { PREFIX_TABLE (PREFIX_VEX_0FD1) },
7780 { PREFIX_TABLE (PREFIX_VEX_0FD2) },
7781 { PREFIX_TABLE (PREFIX_VEX_0FD3) },
7782 { PREFIX_TABLE (PREFIX_VEX_0FD4) },
7783 { PREFIX_TABLE (PREFIX_VEX_0FD5) },
7784 { PREFIX_TABLE (PREFIX_VEX_0FD6) },
7785 { PREFIX_TABLE (PREFIX_VEX_0FD7) },
c0f3af97 7786 /* d8 */
592a252b
L
7787 { PREFIX_TABLE (PREFIX_VEX_0FD8) },
7788 { PREFIX_TABLE (PREFIX_VEX_0FD9) },
7789 { PREFIX_TABLE (PREFIX_VEX_0FDA) },
7790 { PREFIX_TABLE (PREFIX_VEX_0FDB) },
7791 { PREFIX_TABLE (PREFIX_VEX_0FDC) },
7792 { PREFIX_TABLE (PREFIX_VEX_0FDD) },
7793 { PREFIX_TABLE (PREFIX_VEX_0FDE) },
7794 { PREFIX_TABLE (PREFIX_VEX_0FDF) },
c0f3af97 7795 /* e0 */
592a252b
L
7796 { PREFIX_TABLE (PREFIX_VEX_0FE0) },
7797 { PREFIX_TABLE (PREFIX_VEX_0FE1) },
7798 { PREFIX_TABLE (PREFIX_VEX_0FE2) },
7799 { PREFIX_TABLE (PREFIX_VEX_0FE3) },
7800 { PREFIX_TABLE (PREFIX_VEX_0FE4) },
7801 { PREFIX_TABLE (PREFIX_VEX_0FE5) },
7802 { PREFIX_TABLE (PREFIX_VEX_0FE6) },
7803 { PREFIX_TABLE (PREFIX_VEX_0FE7) },
c0f3af97 7804 /* e8 */
592a252b
L
7805 { PREFIX_TABLE (PREFIX_VEX_0FE8) },
7806 { PREFIX_TABLE (PREFIX_VEX_0FE9) },
7807 { PREFIX_TABLE (PREFIX_VEX_0FEA) },
7808 { PREFIX_TABLE (PREFIX_VEX_0FEB) },
7809 { PREFIX_TABLE (PREFIX_VEX_0FEC) },
7810 { PREFIX_TABLE (PREFIX_VEX_0FED) },
7811 { PREFIX_TABLE (PREFIX_VEX_0FEE) },
7812 { PREFIX_TABLE (PREFIX_VEX_0FEF) },
c0f3af97 7813 /* f0 */
592a252b
L
7814 { PREFIX_TABLE (PREFIX_VEX_0FF0) },
7815 { PREFIX_TABLE (PREFIX_VEX_0FF1) },
7816 { PREFIX_TABLE (PREFIX_VEX_0FF2) },
7817 { PREFIX_TABLE (PREFIX_VEX_0FF3) },
7818 { PREFIX_TABLE (PREFIX_VEX_0FF4) },
7819 { PREFIX_TABLE (PREFIX_VEX_0FF5) },
7820 { PREFIX_TABLE (PREFIX_VEX_0FF6) },
7821 { PREFIX_TABLE (PREFIX_VEX_0FF7) },
c0f3af97 7822 /* f8 */
592a252b
L
7823 { PREFIX_TABLE (PREFIX_VEX_0FF8) },
7824 { PREFIX_TABLE (PREFIX_VEX_0FF9) },
7825 { PREFIX_TABLE (PREFIX_VEX_0FFA) },
7826 { PREFIX_TABLE (PREFIX_VEX_0FFB) },
7827 { PREFIX_TABLE (PREFIX_VEX_0FFC) },
7828 { PREFIX_TABLE (PREFIX_VEX_0FFD) },
7829 { PREFIX_TABLE (PREFIX_VEX_0FFE) },
592d1631 7830 { Bad_Opcode },
c0f3af97
L
7831 },
7832 /* VEX_0F38 */
7833 {
7834 /* 00 */
592a252b
L
7835 { PREFIX_TABLE (PREFIX_VEX_0F3800) },
7836 { PREFIX_TABLE (PREFIX_VEX_0F3801) },
7837 { PREFIX_TABLE (PREFIX_VEX_0F3802) },
7838 { PREFIX_TABLE (PREFIX_VEX_0F3803) },
7839 { PREFIX_TABLE (PREFIX_VEX_0F3804) },
7840 { PREFIX_TABLE (PREFIX_VEX_0F3805) },
7841 { PREFIX_TABLE (PREFIX_VEX_0F3806) },
7842 { PREFIX_TABLE (PREFIX_VEX_0F3807) },
c0f3af97 7843 /* 08 */
592a252b
L
7844 { PREFIX_TABLE (PREFIX_VEX_0F3808) },
7845 { PREFIX_TABLE (PREFIX_VEX_0F3809) },
7846 { PREFIX_TABLE (PREFIX_VEX_0F380A) },
7847 { PREFIX_TABLE (PREFIX_VEX_0F380B) },
7848 { PREFIX_TABLE (PREFIX_VEX_0F380C) },
7849 { PREFIX_TABLE (PREFIX_VEX_0F380D) },
7850 { PREFIX_TABLE (PREFIX_VEX_0F380E) },
7851 { PREFIX_TABLE (PREFIX_VEX_0F380F) },
c0f3af97 7852 /* 10 */
592d1631
L
7853 { Bad_Opcode },
7854 { Bad_Opcode },
7855 { Bad_Opcode },
592a252b 7856 { PREFIX_TABLE (PREFIX_VEX_0F3813) },
592d1631
L
7857 { Bad_Opcode },
7858 { Bad_Opcode },
6c30d220 7859 { PREFIX_TABLE (PREFIX_VEX_0F3816) },
592a252b 7860 { PREFIX_TABLE (PREFIX_VEX_0F3817) },
c0f3af97 7861 /* 18 */
592a252b
L
7862 { PREFIX_TABLE (PREFIX_VEX_0F3818) },
7863 { PREFIX_TABLE (PREFIX_VEX_0F3819) },
7864 { PREFIX_TABLE (PREFIX_VEX_0F381A) },
592d1631 7865 { Bad_Opcode },
592a252b
L
7866 { PREFIX_TABLE (PREFIX_VEX_0F381C) },
7867 { PREFIX_TABLE (PREFIX_VEX_0F381D) },
7868 { PREFIX_TABLE (PREFIX_VEX_0F381E) },
592d1631 7869 { Bad_Opcode },
c0f3af97 7870 /* 20 */
592a252b
L
7871 { PREFIX_TABLE (PREFIX_VEX_0F3820) },
7872 { PREFIX_TABLE (PREFIX_VEX_0F3821) },
7873 { PREFIX_TABLE (PREFIX_VEX_0F3822) },
7874 { PREFIX_TABLE (PREFIX_VEX_0F3823) },
7875 { PREFIX_TABLE (PREFIX_VEX_0F3824) },
7876 { PREFIX_TABLE (PREFIX_VEX_0F3825) },
592d1631
L
7877 { Bad_Opcode },
7878 { Bad_Opcode },
c0f3af97 7879 /* 28 */
592a252b
L
7880 { PREFIX_TABLE (PREFIX_VEX_0F3828) },
7881 { PREFIX_TABLE (PREFIX_VEX_0F3829) },
7882 { PREFIX_TABLE (PREFIX_VEX_0F382A) },
7883 { PREFIX_TABLE (PREFIX_VEX_0F382B) },
7884 { PREFIX_TABLE (PREFIX_VEX_0F382C) },
7885 { PREFIX_TABLE (PREFIX_VEX_0F382D) },
7886 { PREFIX_TABLE (PREFIX_VEX_0F382E) },
7887 { PREFIX_TABLE (PREFIX_VEX_0F382F) },
c0f3af97 7888 /* 30 */
592a252b
L
7889 { PREFIX_TABLE (PREFIX_VEX_0F3830) },
7890 { PREFIX_TABLE (PREFIX_VEX_0F3831) },
7891 { PREFIX_TABLE (PREFIX_VEX_0F3832) },
7892 { PREFIX_TABLE (PREFIX_VEX_0F3833) },
7893 { PREFIX_TABLE (PREFIX_VEX_0F3834) },
7894 { PREFIX_TABLE (PREFIX_VEX_0F3835) },
6c30d220 7895 { PREFIX_TABLE (PREFIX_VEX_0F3836) },
592a252b 7896 { PREFIX_TABLE (PREFIX_VEX_0F3837) },
c0f3af97 7897 /* 38 */
592a252b
L
7898 { PREFIX_TABLE (PREFIX_VEX_0F3838) },
7899 { PREFIX_TABLE (PREFIX_VEX_0F3839) },
7900 { PREFIX_TABLE (PREFIX_VEX_0F383A) },
7901 { PREFIX_TABLE (PREFIX_VEX_0F383B) },
7902 { PREFIX_TABLE (PREFIX_VEX_0F383C) },
7903 { PREFIX_TABLE (PREFIX_VEX_0F383D) },
7904 { PREFIX_TABLE (PREFIX_VEX_0F383E) },
7905 { PREFIX_TABLE (PREFIX_VEX_0F383F) },
c0f3af97 7906 /* 40 */
592a252b
L
7907 { PREFIX_TABLE (PREFIX_VEX_0F3840) },
7908 { PREFIX_TABLE (PREFIX_VEX_0F3841) },
592d1631
L
7909 { Bad_Opcode },
7910 { Bad_Opcode },
7911 { Bad_Opcode },
6c30d220
L
7912 { PREFIX_TABLE (PREFIX_VEX_0F3845) },
7913 { PREFIX_TABLE (PREFIX_VEX_0F3846) },
7914 { PREFIX_TABLE (PREFIX_VEX_0F3847) },
c0f3af97 7915 /* 48 */
592d1631
L
7916 { Bad_Opcode },
7917 { Bad_Opcode },
7918 { Bad_Opcode },
7919 { Bad_Opcode },
7920 { Bad_Opcode },
7921 { Bad_Opcode },
7922 { Bad_Opcode },
7923 { Bad_Opcode },
c0f3af97 7924 /* 50 */
592d1631
L
7925 { Bad_Opcode },
7926 { Bad_Opcode },
7927 { Bad_Opcode },
7928 { Bad_Opcode },
7929 { Bad_Opcode },
7930 { Bad_Opcode },
7931 { Bad_Opcode },
7932 { Bad_Opcode },
c0f3af97 7933 /* 58 */
6c30d220
L
7934 { PREFIX_TABLE (PREFIX_VEX_0F3858) },
7935 { PREFIX_TABLE (PREFIX_VEX_0F3859) },
7936 { PREFIX_TABLE (PREFIX_VEX_0F385A) },
592d1631
L
7937 { Bad_Opcode },
7938 { Bad_Opcode },
7939 { Bad_Opcode },
7940 { Bad_Opcode },
7941 { Bad_Opcode },
c0f3af97 7942 /* 60 */
592d1631
L
7943 { Bad_Opcode },
7944 { Bad_Opcode },
7945 { Bad_Opcode },
7946 { Bad_Opcode },
7947 { Bad_Opcode },
7948 { Bad_Opcode },
7949 { Bad_Opcode },
7950 { Bad_Opcode },
c0f3af97 7951 /* 68 */
592d1631
L
7952 { Bad_Opcode },
7953 { Bad_Opcode },
7954 { Bad_Opcode },
7955 { Bad_Opcode },
7956 { Bad_Opcode },
7957 { Bad_Opcode },
7958 { Bad_Opcode },
7959 { Bad_Opcode },
c0f3af97 7960 /* 70 */
592d1631
L
7961 { Bad_Opcode },
7962 { Bad_Opcode },
7963 { Bad_Opcode },
7964 { Bad_Opcode },
7965 { Bad_Opcode },
7966 { Bad_Opcode },
7967 { Bad_Opcode },
7968 { Bad_Opcode },
c0f3af97 7969 /* 78 */
6c30d220
L
7970 { PREFIX_TABLE (PREFIX_VEX_0F3878) },
7971 { PREFIX_TABLE (PREFIX_VEX_0F3879) },
592d1631
L
7972 { Bad_Opcode },
7973 { Bad_Opcode },
7974 { Bad_Opcode },
7975 { Bad_Opcode },
7976 { Bad_Opcode },
7977 { Bad_Opcode },
c0f3af97 7978 /* 80 */
592d1631
L
7979 { Bad_Opcode },
7980 { Bad_Opcode },
7981 { Bad_Opcode },
7982 { Bad_Opcode },
7983 { Bad_Opcode },
7984 { Bad_Opcode },
7985 { Bad_Opcode },
7986 { Bad_Opcode },
c0f3af97 7987 /* 88 */
592d1631
L
7988 { Bad_Opcode },
7989 { Bad_Opcode },
7990 { Bad_Opcode },
7991 { Bad_Opcode },
6c30d220 7992 { PREFIX_TABLE (PREFIX_VEX_0F388C) },
592d1631 7993 { Bad_Opcode },
6c30d220 7994 { PREFIX_TABLE (PREFIX_VEX_0F388E) },
592d1631 7995 { Bad_Opcode },
c0f3af97 7996 /* 90 */
6c30d220
L
7997 { PREFIX_TABLE (PREFIX_VEX_0F3890) },
7998 { PREFIX_TABLE (PREFIX_VEX_0F3891) },
7999 { PREFIX_TABLE (PREFIX_VEX_0F3892) },
8000 { PREFIX_TABLE (PREFIX_VEX_0F3893) },
592d1631
L
8001 { Bad_Opcode },
8002 { Bad_Opcode },
592a252b
L
8003 { PREFIX_TABLE (PREFIX_VEX_0F3896) },
8004 { PREFIX_TABLE (PREFIX_VEX_0F3897) },
c0f3af97 8005 /* 98 */
592a252b
L
8006 { PREFIX_TABLE (PREFIX_VEX_0F3898) },
8007 { PREFIX_TABLE (PREFIX_VEX_0F3899) },
8008 { PREFIX_TABLE (PREFIX_VEX_0F389A) },
8009 { PREFIX_TABLE (PREFIX_VEX_0F389B) },
8010 { PREFIX_TABLE (PREFIX_VEX_0F389C) },
8011 { PREFIX_TABLE (PREFIX_VEX_0F389D) },
8012 { PREFIX_TABLE (PREFIX_VEX_0F389E) },
8013 { PREFIX_TABLE (PREFIX_VEX_0F389F) },
c0f3af97 8014 /* a0 */
592d1631
L
8015 { Bad_Opcode },
8016 { Bad_Opcode },
8017 { Bad_Opcode },
8018 { Bad_Opcode },
8019 { Bad_Opcode },
8020 { Bad_Opcode },
592a252b
L
8021 { PREFIX_TABLE (PREFIX_VEX_0F38A6) },
8022 { PREFIX_TABLE (PREFIX_VEX_0F38A7) },
c0f3af97 8023 /* a8 */
592a252b
L
8024 { PREFIX_TABLE (PREFIX_VEX_0F38A8) },
8025 { PREFIX_TABLE (PREFIX_VEX_0F38A9) },
8026 { PREFIX_TABLE (PREFIX_VEX_0F38AA) },
8027 { PREFIX_TABLE (PREFIX_VEX_0F38AB) },
8028 { PREFIX_TABLE (PREFIX_VEX_0F38AC) },
8029 { PREFIX_TABLE (PREFIX_VEX_0F38AD) },
8030 { PREFIX_TABLE (PREFIX_VEX_0F38AE) },
8031 { PREFIX_TABLE (PREFIX_VEX_0F38AF) },
c0f3af97 8032 /* b0 */
592d1631
L
8033 { Bad_Opcode },
8034 { Bad_Opcode },
8035 { Bad_Opcode },
8036 { Bad_Opcode },
8037 { Bad_Opcode },
8038 { Bad_Opcode },
592a252b
L
8039 { PREFIX_TABLE (PREFIX_VEX_0F38B6) },
8040 { PREFIX_TABLE (PREFIX_VEX_0F38B7) },
c0f3af97 8041 /* b8 */
592a252b
L
8042 { PREFIX_TABLE (PREFIX_VEX_0F38B8) },
8043 { PREFIX_TABLE (PREFIX_VEX_0F38B9) },
8044 { PREFIX_TABLE (PREFIX_VEX_0F38BA) },
8045 { PREFIX_TABLE (PREFIX_VEX_0F38BB) },
8046 { PREFIX_TABLE (PREFIX_VEX_0F38BC) },
8047 { PREFIX_TABLE (PREFIX_VEX_0F38BD) },
8048 { PREFIX_TABLE (PREFIX_VEX_0F38BE) },
8049 { PREFIX_TABLE (PREFIX_VEX_0F38BF) },
c0f3af97 8050 /* c0 */
592d1631
L
8051 { Bad_Opcode },
8052 { Bad_Opcode },
8053 { Bad_Opcode },
8054 { Bad_Opcode },
8055 { Bad_Opcode },
8056 { Bad_Opcode },
8057 { Bad_Opcode },
8058 { Bad_Opcode },
c0f3af97 8059 /* c8 */
592d1631
L
8060 { Bad_Opcode },
8061 { Bad_Opcode },
8062 { Bad_Opcode },
8063 { Bad_Opcode },
8064 { Bad_Opcode },
8065 { Bad_Opcode },
8066 { Bad_Opcode },
8067 { Bad_Opcode },
c0f3af97 8068 /* d0 */
592d1631
L
8069 { Bad_Opcode },
8070 { Bad_Opcode },
8071 { Bad_Opcode },
8072 { Bad_Opcode },
8073 { Bad_Opcode },
8074 { Bad_Opcode },
8075 { Bad_Opcode },
8076 { Bad_Opcode },
c0f3af97 8077 /* d8 */
592d1631
L
8078 { Bad_Opcode },
8079 { Bad_Opcode },
8080 { Bad_Opcode },
592a252b
L
8081 { PREFIX_TABLE (PREFIX_VEX_0F38DB) },
8082 { PREFIX_TABLE (PREFIX_VEX_0F38DC) },
8083 { PREFIX_TABLE (PREFIX_VEX_0F38DD) },
8084 { PREFIX_TABLE (PREFIX_VEX_0F38DE) },
8085 { PREFIX_TABLE (PREFIX_VEX_0F38DF) },
c0f3af97 8086 /* e0 */
592d1631
L
8087 { Bad_Opcode },
8088 { Bad_Opcode },
8089 { Bad_Opcode },
8090 { Bad_Opcode },
8091 { Bad_Opcode },
8092 { Bad_Opcode },
8093 { Bad_Opcode },
8094 { Bad_Opcode },
c0f3af97 8095 /* e8 */
592d1631
L
8096 { Bad_Opcode },
8097 { Bad_Opcode },
8098 { Bad_Opcode },
8099 { Bad_Opcode },
8100 { Bad_Opcode },
8101 { Bad_Opcode },
8102 { Bad_Opcode },
8103 { Bad_Opcode },
c0f3af97 8104 /* f0 */
592d1631
L
8105 { Bad_Opcode },
8106 { Bad_Opcode },
f12dc422
L
8107 { PREFIX_TABLE (PREFIX_VEX_0F38F2) },
8108 { REG_TABLE (REG_VEX_0F38F3) },
592d1631 8109 { Bad_Opcode },
6c30d220
L
8110 { PREFIX_TABLE (PREFIX_VEX_0F38F5) },
8111 { PREFIX_TABLE (PREFIX_VEX_0F38F6) },
f12dc422 8112 { PREFIX_TABLE (PREFIX_VEX_0F38F7) },
c0f3af97 8113 /* f8 */
592d1631
L
8114 { Bad_Opcode },
8115 { Bad_Opcode },
8116 { Bad_Opcode },
8117 { Bad_Opcode },
8118 { Bad_Opcode },
8119 { Bad_Opcode },
8120 { Bad_Opcode },
8121 { Bad_Opcode },
c0f3af97
L
8122 },
8123 /* VEX_0F3A */
8124 {
8125 /* 00 */
6c30d220
L
8126 { PREFIX_TABLE (PREFIX_VEX_0F3A00) },
8127 { PREFIX_TABLE (PREFIX_VEX_0F3A01) },
8128 { PREFIX_TABLE (PREFIX_VEX_0F3A02) },
592d1631 8129 { Bad_Opcode },
592a252b
L
8130 { PREFIX_TABLE (PREFIX_VEX_0F3A04) },
8131 { PREFIX_TABLE (PREFIX_VEX_0F3A05) },
8132 { PREFIX_TABLE (PREFIX_VEX_0F3A06) },
592d1631 8133 { Bad_Opcode },
c0f3af97 8134 /* 08 */
592a252b
L
8135 { PREFIX_TABLE (PREFIX_VEX_0F3A08) },
8136 { PREFIX_TABLE (PREFIX_VEX_0F3A09) },
8137 { PREFIX_TABLE (PREFIX_VEX_0F3A0A) },
8138 { PREFIX_TABLE (PREFIX_VEX_0F3A0B) },
8139 { PREFIX_TABLE (PREFIX_VEX_0F3A0C) },
8140 { PREFIX_TABLE (PREFIX_VEX_0F3A0D) },
8141 { PREFIX_TABLE (PREFIX_VEX_0F3A0E) },
8142 { PREFIX_TABLE (PREFIX_VEX_0F3A0F) },
c0f3af97 8143 /* 10 */
592d1631
L
8144 { Bad_Opcode },
8145 { Bad_Opcode },
8146 { Bad_Opcode },
8147 { Bad_Opcode },
592a252b
L
8148 { PREFIX_TABLE (PREFIX_VEX_0F3A14) },
8149 { PREFIX_TABLE (PREFIX_VEX_0F3A15) },
8150 { PREFIX_TABLE (PREFIX_VEX_0F3A16) },
8151 { PREFIX_TABLE (PREFIX_VEX_0F3A17) },
c0f3af97 8152 /* 18 */
592a252b
L
8153 { PREFIX_TABLE (PREFIX_VEX_0F3A18) },
8154 { PREFIX_TABLE (PREFIX_VEX_0F3A19) },
592d1631
L
8155 { Bad_Opcode },
8156 { Bad_Opcode },
8157 { Bad_Opcode },
592a252b 8158 { PREFIX_TABLE (PREFIX_VEX_0F3A1D) },
592d1631
L
8159 { Bad_Opcode },
8160 { Bad_Opcode },
c0f3af97 8161 /* 20 */
592a252b
L
8162 { PREFIX_TABLE (PREFIX_VEX_0F3A20) },
8163 { PREFIX_TABLE (PREFIX_VEX_0F3A21) },
8164 { PREFIX_TABLE (PREFIX_VEX_0F3A22) },
592d1631
L
8165 { Bad_Opcode },
8166 { Bad_Opcode },
8167 { Bad_Opcode },
8168 { Bad_Opcode },
8169 { Bad_Opcode },
c0f3af97 8170 /* 28 */
592d1631
L
8171 { Bad_Opcode },
8172 { Bad_Opcode },
8173 { Bad_Opcode },
8174 { Bad_Opcode },
8175 { Bad_Opcode },
8176 { Bad_Opcode },
8177 { Bad_Opcode },
8178 { Bad_Opcode },
c0f3af97 8179 /* 30 */
592d1631
L
8180 { Bad_Opcode },
8181 { Bad_Opcode },
8182 { Bad_Opcode },
8183 { Bad_Opcode },
8184 { Bad_Opcode },
8185 { Bad_Opcode },
8186 { Bad_Opcode },
8187 { Bad_Opcode },
c0f3af97 8188 /* 38 */
6c30d220
L
8189 { PREFIX_TABLE (PREFIX_VEX_0F3A38) },
8190 { PREFIX_TABLE (PREFIX_VEX_0F3A39) },
592d1631
L
8191 { Bad_Opcode },
8192 { Bad_Opcode },
8193 { Bad_Opcode },
8194 { Bad_Opcode },
8195 { Bad_Opcode },
8196 { Bad_Opcode },
c0f3af97 8197 /* 40 */
592a252b
L
8198 { PREFIX_TABLE (PREFIX_VEX_0F3A40) },
8199 { PREFIX_TABLE (PREFIX_VEX_0F3A41) },
8200 { PREFIX_TABLE (PREFIX_VEX_0F3A42) },
592d1631 8201 { Bad_Opcode },
592a252b 8202 { PREFIX_TABLE (PREFIX_VEX_0F3A44) },
592d1631 8203 { Bad_Opcode },
6c30d220 8204 { PREFIX_TABLE (PREFIX_VEX_0F3A46) },
592d1631 8205 { Bad_Opcode },
c0f3af97 8206 /* 48 */
592a252b
L
8207 { PREFIX_TABLE (PREFIX_VEX_0F3A48) },
8208 { PREFIX_TABLE (PREFIX_VEX_0F3A49) },
8209 { PREFIX_TABLE (PREFIX_VEX_0F3A4A) },
8210 { PREFIX_TABLE (PREFIX_VEX_0F3A4B) },
8211 { PREFIX_TABLE (PREFIX_VEX_0F3A4C) },
592d1631
L
8212 { Bad_Opcode },
8213 { Bad_Opcode },
8214 { Bad_Opcode },
c0f3af97 8215 /* 50 */
592d1631
L
8216 { Bad_Opcode },
8217 { Bad_Opcode },
8218 { Bad_Opcode },
8219 { Bad_Opcode },
8220 { Bad_Opcode },
8221 { Bad_Opcode },
8222 { Bad_Opcode },
8223 { Bad_Opcode },
c0f3af97 8224 /* 58 */
592d1631
L
8225 { Bad_Opcode },
8226 { Bad_Opcode },
8227 { Bad_Opcode },
8228 { Bad_Opcode },
592a252b
L
8229 { PREFIX_TABLE (PREFIX_VEX_0F3A5C) },
8230 { PREFIX_TABLE (PREFIX_VEX_0F3A5D) },
8231 { PREFIX_TABLE (PREFIX_VEX_0F3A5E) },
8232 { PREFIX_TABLE (PREFIX_VEX_0F3A5F) },
c0f3af97 8233 /* 60 */
592a252b
L
8234 { PREFIX_TABLE (PREFIX_VEX_0F3A60) },
8235 { PREFIX_TABLE (PREFIX_VEX_0F3A61) },
8236 { PREFIX_TABLE (PREFIX_VEX_0F3A62) },
8237 { PREFIX_TABLE (PREFIX_VEX_0F3A63) },
592d1631
L
8238 { Bad_Opcode },
8239 { Bad_Opcode },
8240 { Bad_Opcode },
8241 { Bad_Opcode },
c0f3af97 8242 /* 68 */
592a252b
L
8243 { PREFIX_TABLE (PREFIX_VEX_0F3A68) },
8244 { PREFIX_TABLE (PREFIX_VEX_0F3A69) },
8245 { PREFIX_TABLE (PREFIX_VEX_0F3A6A) },
8246 { PREFIX_TABLE (PREFIX_VEX_0F3A6B) },
8247 { PREFIX_TABLE (PREFIX_VEX_0F3A6C) },
8248 { PREFIX_TABLE (PREFIX_VEX_0F3A6D) },
8249 { PREFIX_TABLE (PREFIX_VEX_0F3A6E) },
8250 { PREFIX_TABLE (PREFIX_VEX_0F3A6F) },
c0f3af97 8251 /* 70 */
592d1631
L
8252 { Bad_Opcode },
8253 { Bad_Opcode },
8254 { Bad_Opcode },
8255 { Bad_Opcode },
8256 { Bad_Opcode },
8257 { Bad_Opcode },
8258 { Bad_Opcode },
8259 { Bad_Opcode },
c0f3af97 8260 /* 78 */
592a252b
L
8261 { PREFIX_TABLE (PREFIX_VEX_0F3A78) },
8262 { PREFIX_TABLE (PREFIX_VEX_0F3A79) },
8263 { PREFIX_TABLE (PREFIX_VEX_0F3A7A) },
8264 { PREFIX_TABLE (PREFIX_VEX_0F3A7B) },
8265 { PREFIX_TABLE (PREFIX_VEX_0F3A7C) },
8266 { PREFIX_TABLE (PREFIX_VEX_0F3A7D) },
8267 { PREFIX_TABLE (PREFIX_VEX_0F3A7E) },
8268 { PREFIX_TABLE (PREFIX_VEX_0F3A7F) },
c0f3af97 8269 /* 80 */
592d1631
L
8270 { Bad_Opcode },
8271 { Bad_Opcode },
8272 { Bad_Opcode },
8273 { Bad_Opcode },
8274 { Bad_Opcode },
8275 { Bad_Opcode },
8276 { Bad_Opcode },
8277 { Bad_Opcode },
c0f3af97 8278 /* 88 */
592d1631
L
8279 { Bad_Opcode },
8280 { Bad_Opcode },
8281 { Bad_Opcode },
8282 { Bad_Opcode },
8283 { Bad_Opcode },
8284 { Bad_Opcode },
8285 { Bad_Opcode },
8286 { Bad_Opcode },
c0f3af97 8287 /* 90 */
592d1631
L
8288 { Bad_Opcode },
8289 { Bad_Opcode },
8290 { Bad_Opcode },
8291 { Bad_Opcode },
8292 { Bad_Opcode },
8293 { Bad_Opcode },
8294 { Bad_Opcode },
8295 { Bad_Opcode },
c0f3af97 8296 /* 98 */
592d1631
L
8297 { Bad_Opcode },
8298 { Bad_Opcode },
8299 { Bad_Opcode },
8300 { Bad_Opcode },
8301 { Bad_Opcode },
8302 { Bad_Opcode },
8303 { Bad_Opcode },
8304 { Bad_Opcode },
c0f3af97 8305 /* a0 */
592d1631
L
8306 { Bad_Opcode },
8307 { Bad_Opcode },
8308 { Bad_Opcode },
8309 { Bad_Opcode },
8310 { Bad_Opcode },
8311 { Bad_Opcode },
8312 { Bad_Opcode },
8313 { Bad_Opcode },
c0f3af97 8314 /* a8 */
592d1631
L
8315 { Bad_Opcode },
8316 { Bad_Opcode },
8317 { Bad_Opcode },
8318 { Bad_Opcode },
8319 { Bad_Opcode },
8320 { Bad_Opcode },
8321 { Bad_Opcode },
8322 { Bad_Opcode },
c0f3af97 8323 /* b0 */
592d1631
L
8324 { Bad_Opcode },
8325 { Bad_Opcode },
8326 { Bad_Opcode },
8327 { Bad_Opcode },
8328 { Bad_Opcode },
8329 { Bad_Opcode },
8330 { Bad_Opcode },
8331 { Bad_Opcode },
c0f3af97 8332 /* b8 */
592d1631
L
8333 { Bad_Opcode },
8334 { Bad_Opcode },
8335 { Bad_Opcode },
8336 { Bad_Opcode },
8337 { Bad_Opcode },
8338 { Bad_Opcode },
8339 { Bad_Opcode },
8340 { Bad_Opcode },
c0f3af97 8341 /* c0 */
592d1631
L
8342 { Bad_Opcode },
8343 { Bad_Opcode },
8344 { Bad_Opcode },
8345 { Bad_Opcode },
8346 { Bad_Opcode },
8347 { Bad_Opcode },
8348 { Bad_Opcode },
8349 { Bad_Opcode },
c0f3af97 8350 /* c8 */
592d1631
L
8351 { Bad_Opcode },
8352 { Bad_Opcode },
8353 { Bad_Opcode },
8354 { Bad_Opcode },
8355 { Bad_Opcode },
8356 { Bad_Opcode },
8357 { Bad_Opcode },
8358 { Bad_Opcode },
c0f3af97 8359 /* d0 */
592d1631
L
8360 { Bad_Opcode },
8361 { Bad_Opcode },
8362 { Bad_Opcode },
8363 { Bad_Opcode },
8364 { Bad_Opcode },
8365 { Bad_Opcode },
8366 { Bad_Opcode },
8367 { Bad_Opcode },
c0f3af97 8368 /* d8 */
592d1631
L
8369 { Bad_Opcode },
8370 { Bad_Opcode },
8371 { Bad_Opcode },
8372 { Bad_Opcode },
8373 { Bad_Opcode },
8374 { Bad_Opcode },
8375 { Bad_Opcode },
592a252b 8376 { PREFIX_TABLE (PREFIX_VEX_0F3ADF) },
c0f3af97 8377 /* e0 */
592d1631
L
8378 { Bad_Opcode },
8379 { Bad_Opcode },
8380 { Bad_Opcode },
8381 { Bad_Opcode },
8382 { Bad_Opcode },
8383 { Bad_Opcode },
8384 { Bad_Opcode },
8385 { Bad_Opcode },
c0f3af97 8386 /* e8 */
592d1631
L
8387 { Bad_Opcode },
8388 { Bad_Opcode },
8389 { Bad_Opcode },
8390 { Bad_Opcode },
8391 { Bad_Opcode },
8392 { Bad_Opcode },
8393 { Bad_Opcode },
8394 { Bad_Opcode },
c0f3af97 8395 /* f0 */
6c30d220 8396 { PREFIX_TABLE (PREFIX_VEX_0F3AF0) },
592d1631
L
8397 { Bad_Opcode },
8398 { Bad_Opcode },
8399 { Bad_Opcode },
8400 { Bad_Opcode },
8401 { Bad_Opcode },
8402 { Bad_Opcode },
8403 { Bad_Opcode },
c0f3af97 8404 /* f8 */
592d1631
L
8405 { Bad_Opcode },
8406 { Bad_Opcode },
8407 { Bad_Opcode },
8408 { Bad_Opcode },
8409 { Bad_Opcode },
8410 { Bad_Opcode },
8411 { Bad_Opcode },
8412 { Bad_Opcode },
c0f3af97
L
8413 },
8414};
8415
8416static const struct dis386 vex_len_table[][2] = {
592a252b 8417 /* VEX_LEN_0F10_P_1 */
c0f3af97 8418 {
592a252b
L
8419 { VEX_W_TABLE (VEX_W_0F10_P_1) },
8420 { VEX_W_TABLE (VEX_W_0F10_P_1) },
c0f3af97
L
8421 },
8422
592a252b 8423 /* VEX_LEN_0F10_P_3 */
c0f3af97 8424 {
592a252b
L
8425 { VEX_W_TABLE (VEX_W_0F10_P_3) },
8426 { VEX_W_TABLE (VEX_W_0F10_P_3) },
c0f3af97
L
8427 },
8428
592a252b 8429 /* VEX_LEN_0F11_P_1 */
c0f3af97 8430 {
592a252b
L
8431 { VEX_W_TABLE (VEX_W_0F11_P_1) },
8432 { VEX_W_TABLE (VEX_W_0F11_P_1) },
c0f3af97
L
8433 },
8434
592a252b 8435 /* VEX_LEN_0F11_P_3 */
c0f3af97 8436 {
592a252b
L
8437 { VEX_W_TABLE (VEX_W_0F11_P_3) },
8438 { VEX_W_TABLE (VEX_W_0F11_P_3) },
c0f3af97
L
8439 },
8440
592a252b 8441 /* VEX_LEN_0F12_P_0_M_0 */
c0f3af97 8442 {
592a252b 8443 { VEX_W_TABLE (VEX_W_0F12_P_0_M_0) },
c0f3af97
L
8444 },
8445
592a252b 8446 /* VEX_LEN_0F12_P_0_M_1 */
c0f3af97 8447 {
592a252b 8448 { VEX_W_TABLE (VEX_W_0F12_P_0_M_1) },
c0f3af97
L
8449 },
8450
592a252b 8451 /* VEX_LEN_0F12_P_2 */
c0f3af97 8452 {
592a252b 8453 { VEX_W_TABLE (VEX_W_0F12_P_2) },
c0f3af97
L
8454 },
8455
592a252b 8456 /* VEX_LEN_0F13_M_0 */
c0f3af97 8457 {
592a252b 8458 { VEX_W_TABLE (VEX_W_0F13_M_0) },
c0f3af97
L
8459 },
8460
592a252b 8461 /* VEX_LEN_0F16_P_0_M_0 */
c0f3af97 8462 {
592a252b 8463 { VEX_W_TABLE (VEX_W_0F16_P_0_M_0) },
c0f3af97
L
8464 },
8465
592a252b 8466 /* VEX_LEN_0F16_P_0_M_1 */
c0f3af97 8467 {
592a252b 8468 { VEX_W_TABLE (VEX_W_0F16_P_0_M_1) },
c0f3af97
L
8469 },
8470
592a252b 8471 /* VEX_LEN_0F16_P_2 */
c0f3af97 8472 {
592a252b 8473 { VEX_W_TABLE (VEX_W_0F16_P_2) },
c0f3af97
L
8474 },
8475
592a252b 8476 /* VEX_LEN_0F17_M_0 */
c0f3af97 8477 {
592a252b 8478 { VEX_W_TABLE (VEX_W_0F17_M_0) },
c0f3af97
L
8479 },
8480
592a252b 8481 /* VEX_LEN_0F2A_P_1 */
c0f3af97 8482 {
539f890d
L
8483 { "vcvtsi2ss%LQ", { XMScalar, VexScalar, Ev } },
8484 { "vcvtsi2ss%LQ", { XMScalar, VexScalar, Ev } },
c0f3af97
L
8485 },
8486
592a252b 8487 /* VEX_LEN_0F2A_P_3 */
c0f3af97 8488 {
539f890d
L
8489 { "vcvtsi2sd%LQ", { XMScalar, VexScalar, Ev } },
8490 { "vcvtsi2sd%LQ", { XMScalar, VexScalar, Ev } },
c0f3af97
L
8491 },
8492
592a252b 8493 /* VEX_LEN_0F2C_P_1 */
c0f3af97 8494 {
539f890d
L
8495 { "vcvttss2siY", { Gv, EXdScalar } },
8496 { "vcvttss2siY", { Gv, EXdScalar } },
c0f3af97
L
8497 },
8498
592a252b 8499 /* VEX_LEN_0F2C_P_3 */
c0f3af97 8500 {
539f890d
L
8501 { "vcvttsd2siY", { Gv, EXqScalar } },
8502 { "vcvttsd2siY", { Gv, EXqScalar } },
c0f3af97
L
8503 },
8504
592a252b 8505 /* VEX_LEN_0F2D_P_1 */
c0f3af97 8506 {
539f890d
L
8507 { "vcvtss2siY", { Gv, EXdScalar } },
8508 { "vcvtss2siY", { Gv, EXdScalar } },
c0f3af97
L
8509 },
8510
592a252b 8511 /* VEX_LEN_0F2D_P_3 */
c0f3af97 8512 {
539f890d
L
8513 { "vcvtsd2siY", { Gv, EXqScalar } },
8514 { "vcvtsd2siY", { Gv, EXqScalar } },
c0f3af97
L
8515 },
8516
592a252b 8517 /* VEX_LEN_0F2E_P_0 */
c0f3af97 8518 {
592a252b
L
8519 { VEX_W_TABLE (VEX_W_0F2E_P_0) },
8520 { VEX_W_TABLE (VEX_W_0F2E_P_0) },
c0f3af97
L
8521 },
8522
592a252b 8523 /* VEX_LEN_0F2E_P_2 */
c0f3af97 8524 {
592a252b
L
8525 { VEX_W_TABLE (VEX_W_0F2E_P_2) },
8526 { VEX_W_TABLE (VEX_W_0F2E_P_2) },
c0f3af97
L
8527 },
8528
592a252b 8529 /* VEX_LEN_0F2F_P_0 */
c0f3af97 8530 {
592a252b
L
8531 { VEX_W_TABLE (VEX_W_0F2F_P_0) },
8532 { VEX_W_TABLE (VEX_W_0F2F_P_0) },
c0f3af97
L
8533 },
8534
592a252b 8535 /* VEX_LEN_0F2F_P_2 */
c0f3af97 8536 {
592a252b
L
8537 { VEX_W_TABLE (VEX_W_0F2F_P_2) },
8538 { VEX_W_TABLE (VEX_W_0F2F_P_2) },
c0f3af97
L
8539 },
8540
592a252b 8541 /* VEX_LEN_0F51_P_1 */
c0f3af97 8542 {
592a252b
L
8543 { VEX_W_TABLE (VEX_W_0F51_P_1) },
8544 { VEX_W_TABLE (VEX_W_0F51_P_1) },
c0f3af97
L
8545 },
8546
592a252b 8547 /* VEX_LEN_0F51_P_3 */
c0f3af97 8548 {
592a252b
L
8549 { VEX_W_TABLE (VEX_W_0F51_P_3) },
8550 { VEX_W_TABLE (VEX_W_0F51_P_3) },
c0f3af97
L
8551 },
8552
592a252b 8553 /* VEX_LEN_0F52_P_1 */
c0f3af97 8554 {
592a252b
L
8555 { VEX_W_TABLE (VEX_W_0F52_P_1) },
8556 { VEX_W_TABLE (VEX_W_0F52_P_1) },
c0f3af97
L
8557 },
8558
592a252b 8559 /* VEX_LEN_0F53_P_1 */
c0f3af97 8560 {
592a252b
L
8561 { VEX_W_TABLE (VEX_W_0F53_P_1) },
8562 { VEX_W_TABLE (VEX_W_0F53_P_1) },
c0f3af97
L
8563 },
8564
592a252b 8565 /* VEX_LEN_0F58_P_1 */
c0f3af97 8566 {
592a252b
L
8567 { VEX_W_TABLE (VEX_W_0F58_P_1) },
8568 { VEX_W_TABLE (VEX_W_0F58_P_1) },
c0f3af97
L
8569 },
8570
592a252b 8571 /* VEX_LEN_0F58_P_3 */
c0f3af97 8572 {
592a252b
L
8573 { VEX_W_TABLE (VEX_W_0F58_P_3) },
8574 { VEX_W_TABLE (VEX_W_0F58_P_3) },
c0f3af97
L
8575 },
8576
592a252b 8577 /* VEX_LEN_0F59_P_1 */
c0f3af97 8578 {
592a252b
L
8579 { VEX_W_TABLE (VEX_W_0F59_P_1) },
8580 { VEX_W_TABLE (VEX_W_0F59_P_1) },
c0f3af97
L
8581 },
8582
592a252b 8583 /* VEX_LEN_0F59_P_3 */
c0f3af97 8584 {
592a252b
L
8585 { VEX_W_TABLE (VEX_W_0F59_P_3) },
8586 { VEX_W_TABLE (VEX_W_0F59_P_3) },
c0f3af97
L
8587 },
8588
592a252b 8589 /* VEX_LEN_0F5A_P_1 */
c0f3af97 8590 {
592a252b
L
8591 { VEX_W_TABLE (VEX_W_0F5A_P_1) },
8592 { VEX_W_TABLE (VEX_W_0F5A_P_1) },
c0f3af97
L
8593 },
8594
592a252b 8595 /* VEX_LEN_0F5A_P_3 */
c0f3af97 8596 {
592a252b
L
8597 { VEX_W_TABLE (VEX_W_0F5A_P_3) },
8598 { VEX_W_TABLE (VEX_W_0F5A_P_3) },
c0f3af97
L
8599 },
8600
592a252b 8601 /* VEX_LEN_0F5C_P_1 */
c0f3af97 8602 {
592a252b
L
8603 { VEX_W_TABLE (VEX_W_0F5C_P_1) },
8604 { VEX_W_TABLE (VEX_W_0F5C_P_1) },
c0f3af97
L
8605 },
8606
592a252b 8607 /* VEX_LEN_0F5C_P_3 */
c0f3af97 8608 {
592a252b
L
8609 { VEX_W_TABLE (VEX_W_0F5C_P_3) },
8610 { VEX_W_TABLE (VEX_W_0F5C_P_3) },
c0f3af97
L
8611 },
8612
592a252b 8613 /* VEX_LEN_0F5D_P_1 */
c0f3af97 8614 {
592a252b
L
8615 { VEX_W_TABLE (VEX_W_0F5D_P_1) },
8616 { VEX_W_TABLE (VEX_W_0F5D_P_1) },
c0f3af97
L
8617 },
8618
592a252b 8619 /* VEX_LEN_0F5D_P_3 */
c0f3af97 8620 {
592a252b
L
8621 { VEX_W_TABLE (VEX_W_0F5D_P_3) },
8622 { VEX_W_TABLE (VEX_W_0F5D_P_3) },
c0f3af97
L
8623 },
8624
592a252b 8625 /* VEX_LEN_0F5E_P_1 */
c0f3af97 8626 {
592a252b
L
8627 { VEX_W_TABLE (VEX_W_0F5E_P_1) },
8628 { VEX_W_TABLE (VEX_W_0F5E_P_1) },
c0f3af97
L
8629 },
8630
592a252b 8631 /* VEX_LEN_0F5E_P_3 */
c0f3af97 8632 {
592a252b
L
8633 { VEX_W_TABLE (VEX_W_0F5E_P_3) },
8634 { VEX_W_TABLE (VEX_W_0F5E_P_3) },
c0f3af97
L
8635 },
8636
592a252b 8637 /* VEX_LEN_0F5F_P_1 */
c0f3af97 8638 {
592a252b
L
8639 { VEX_W_TABLE (VEX_W_0F5F_P_1) },
8640 { VEX_W_TABLE (VEX_W_0F5F_P_1) },
c0f3af97
L
8641 },
8642
592a252b 8643 /* VEX_LEN_0F5F_P_3 */
c0f3af97 8644 {
592a252b
L
8645 { VEX_W_TABLE (VEX_W_0F5F_P_3) },
8646 { VEX_W_TABLE (VEX_W_0F5F_P_3) },
c0f3af97
L
8647 },
8648
592a252b 8649 /* VEX_LEN_0F6E_P_2 */
c0f3af97 8650 {
539f890d
L
8651 { "vmovK", { XMScalar, Edq } },
8652 { "vmovK", { XMScalar, Edq } },
c0f3af97
L
8653 },
8654
592a252b 8655 /* VEX_LEN_0F7E_P_1 */
c0f3af97 8656 {
592a252b
L
8657 { VEX_W_TABLE (VEX_W_0F7E_P_1) },
8658 { VEX_W_TABLE (VEX_W_0F7E_P_1) },
c0f3af97
L
8659 },
8660
592a252b 8661 /* VEX_LEN_0F7E_P_2 */
c0f3af97 8662 {
539f890d 8663 { "vmovK", { Edq, XMScalar } },
6c30d220 8664 { "vmovK", { Edq, XMScalar } },
c0f3af97
L
8665 },
8666
6c30d220 8667 /* VEX_LEN_0FAE_R_2_M_0 */
c0f3af97 8668 {
6c30d220 8669 { VEX_W_TABLE (VEX_W_0FAE_R_2_M_0) },
c0f3af97
L
8670 },
8671
6c30d220 8672 /* VEX_LEN_0FAE_R_3_M_0 */
c0f3af97 8673 {
6c30d220 8674 { VEX_W_TABLE (VEX_W_0FAE_R_3_M_0) },
c0f3af97
L
8675 },
8676
6c30d220 8677 /* VEX_LEN_0FC2_P_1 */
c0f3af97 8678 {
6c30d220
L
8679 { VEX_W_TABLE (VEX_W_0FC2_P_1) },
8680 { VEX_W_TABLE (VEX_W_0FC2_P_1) },
c0f3af97
L
8681 },
8682
6c30d220 8683 /* VEX_LEN_0FC2_P_3 */
c0f3af97 8684 {
6c30d220
L
8685 { VEX_W_TABLE (VEX_W_0FC2_P_3) },
8686 { VEX_W_TABLE (VEX_W_0FC2_P_3) },
c0f3af97
L
8687 },
8688
6c30d220 8689 /* VEX_LEN_0FC4_P_2 */
c0f3af97 8690 {
6c30d220 8691 { VEX_W_TABLE (VEX_W_0FC4_P_2) },
c0f3af97
L
8692 },
8693
6c30d220 8694 /* VEX_LEN_0FC5_P_2 */
c0f3af97 8695 {
6c30d220 8696 { VEX_W_TABLE (VEX_W_0FC5_P_2) },
c0f3af97
L
8697 },
8698
6c30d220 8699 /* VEX_LEN_0FD6_P_2 */
c0f3af97 8700 {
6c30d220
L
8701 { VEX_W_TABLE (VEX_W_0FD6_P_2) },
8702 { VEX_W_TABLE (VEX_W_0FD6_P_2) },
c0f3af97
L
8703 },
8704
6c30d220 8705 /* VEX_LEN_0FF7_P_2 */
c0f3af97 8706 {
6c30d220 8707 { VEX_W_TABLE (VEX_W_0FF7_P_2) },
c0f3af97
L
8708 },
8709
6c30d220 8710 /* VEX_LEN_0F3816_P_2 */
c0f3af97 8711 {
6c30d220
L
8712 { Bad_Opcode },
8713 { VEX_W_TABLE (VEX_W_0F3816_P_2) },
c0f3af97
L
8714 },
8715
6c30d220 8716 /* VEX_LEN_0F3819_P_2 */
c0f3af97 8717 {
6c30d220
L
8718 { Bad_Opcode },
8719 { VEX_W_TABLE (VEX_W_0F3819_P_2) },
c0f3af97
L
8720 },
8721
6c30d220 8722 /* VEX_LEN_0F381A_P_2_M_0 */
c0f3af97 8723 {
6c30d220
L
8724 { Bad_Opcode },
8725 { VEX_W_TABLE (VEX_W_0F381A_P_2_M_0) },
c0f3af97
L
8726 },
8727
6c30d220 8728 /* VEX_LEN_0F3836_P_2 */
c0f3af97 8729 {
6c30d220
L
8730 { Bad_Opcode },
8731 { VEX_W_TABLE (VEX_W_0F3836_P_2) },
c0f3af97
L
8732 },
8733
592a252b 8734 /* VEX_LEN_0F3841_P_2 */
c0f3af97 8735 {
592a252b 8736 { VEX_W_TABLE (VEX_W_0F3841_P_2) },
c0f3af97
L
8737 },
8738
6c30d220
L
8739 /* VEX_LEN_0F385A_P_2_M_0 */
8740 {
8741 { Bad_Opcode },
8742 { VEX_W_TABLE (VEX_W_0F385A_P_2_M_0) },
8743 },
8744
592a252b 8745 /* VEX_LEN_0F38DB_P_2 */
a5ff0eb2 8746 {
592a252b 8747 { VEX_W_TABLE (VEX_W_0F38DB_P_2) },
a5ff0eb2
L
8748 },
8749
592a252b 8750 /* VEX_LEN_0F38DC_P_2 */
a5ff0eb2 8751 {
592a252b 8752 { VEX_W_TABLE (VEX_W_0F38DC_P_2) },
a5ff0eb2
L
8753 },
8754
592a252b 8755 /* VEX_LEN_0F38DD_P_2 */
a5ff0eb2 8756 {
592a252b 8757 { VEX_W_TABLE (VEX_W_0F38DD_P_2) },
a5ff0eb2
L
8758 },
8759
592a252b 8760 /* VEX_LEN_0F38DE_P_2 */
a5ff0eb2 8761 {
592a252b 8762 { VEX_W_TABLE (VEX_W_0F38DE_P_2) },
a5ff0eb2
L
8763 },
8764
592a252b 8765 /* VEX_LEN_0F38DF_P_2 */
a5ff0eb2 8766 {
592a252b 8767 { VEX_W_TABLE (VEX_W_0F38DF_P_2) },
a5ff0eb2
L
8768 },
8769
f12dc422
L
8770 /* VEX_LEN_0F38F2_P_0 */
8771 {
8772 { "andnS", { Gdq, VexGdq, Edq } },
8773 },
8774
8775 /* VEX_LEN_0F38F3_R_1_P_0 */
8776 {
8777 { "blsrS", { VexGdq, Edq } },
8778 },
8779
8780 /* VEX_LEN_0F38F3_R_2_P_0 */
8781 {
8782 { "blsmskS", { VexGdq, Edq } },
8783 },
8784
8785 /* VEX_LEN_0F38F3_R_3_P_0 */
8786 {
8787 { "blsiS", { VexGdq, Edq } },
8788 },
8789
6c30d220
L
8790 /* VEX_LEN_0F38F5_P_0 */
8791 {
8792 { "bzhiS", { Gdq, Edq, VexGdq } },
8793 },
8794
8795 /* VEX_LEN_0F38F5_P_1 */
8796 {
8797 { "pextS", { Gdq, VexGdq, Edq } },
8798 },
8799
8800 /* VEX_LEN_0F38F5_P_3 */
8801 {
8802 { "pdepS", { Gdq, VexGdq, Edq } },
8803 },
8804
8805 /* VEX_LEN_0F38F6_P_3 */
8806 {
8807 { "mulxS", { Gdq, VexGdq, Edq } },
8808 },
8809
f12dc422
L
8810 /* VEX_LEN_0F38F7_P_0 */
8811 {
8812 { "bextrS", { Gdq, Edq, VexGdq } },
8813 },
8814
6c30d220
L
8815 /* VEX_LEN_0F38F7_P_1 */
8816 {
8817 { "sarxS", { Gdq, Edq, VexGdq } },
8818 },
8819
8820 /* VEX_LEN_0F38F7_P_2 */
8821 {
8822 { "shlxS", { Gdq, Edq, VexGdq } },
8823 },
8824
8825 /* VEX_LEN_0F38F7_P_3 */
8826 {
8827 { "shrxS", { Gdq, Edq, VexGdq } },
8828 },
8829
8830 /* VEX_LEN_0F3A00_P_2 */
8831 {
8832 { Bad_Opcode },
8833 { VEX_W_TABLE (VEX_W_0F3A00_P_2) },
8834 },
8835
8836 /* VEX_LEN_0F3A01_P_2 */
8837 {
8838 { Bad_Opcode },
8839 { VEX_W_TABLE (VEX_W_0F3A01_P_2) },
8840 },
8841
592a252b 8842 /* VEX_LEN_0F3A06_P_2 */
c0f3af97 8843 {
592d1631 8844 { Bad_Opcode },
592a252b 8845 { VEX_W_TABLE (VEX_W_0F3A06_P_2) },
c0f3af97
L
8846 },
8847
592a252b 8848 /* VEX_LEN_0F3A0A_P_2 */
c0f3af97 8849 {
592a252b
L
8850 { VEX_W_TABLE (VEX_W_0F3A0A_P_2) },
8851 { VEX_W_TABLE (VEX_W_0F3A0A_P_2) },
c0f3af97
L
8852 },
8853
592a252b 8854 /* VEX_LEN_0F3A0B_P_2 */
c0f3af97 8855 {
592a252b
L
8856 { VEX_W_TABLE (VEX_W_0F3A0B_P_2) },
8857 { VEX_W_TABLE (VEX_W_0F3A0B_P_2) },
c0f3af97
L
8858 },
8859
592a252b 8860 /* VEX_LEN_0F3A14_P_2 */
c0f3af97 8861 {
592a252b 8862 { VEX_W_TABLE (VEX_W_0F3A14_P_2) },
c0f3af97
L
8863 },
8864
592a252b 8865 /* VEX_LEN_0F3A15_P_2 */
c0f3af97 8866 {
592a252b 8867 { VEX_W_TABLE (VEX_W_0F3A15_P_2) },
c0f3af97
L
8868 },
8869
592a252b 8870 /* VEX_LEN_0F3A16_P_2 */
c0f3af97
L
8871 {
8872 { "vpextrK", { Edq, XM, Ib } },
c0f3af97
L
8873 },
8874
592a252b 8875 /* VEX_LEN_0F3A17_P_2 */
c0f3af97
L
8876 {
8877 { "vextractps", { Edqd, XM, Ib } },
c0f3af97
L
8878 },
8879
592a252b 8880 /* VEX_LEN_0F3A18_P_2 */
c0f3af97 8881 {
592d1631 8882 { Bad_Opcode },
592a252b 8883 { VEX_W_TABLE (VEX_W_0F3A18_P_2) },
c0f3af97
L
8884 },
8885
592a252b 8886 /* VEX_LEN_0F3A19_P_2 */
c0f3af97 8887 {
592d1631 8888 { Bad_Opcode },
592a252b 8889 { VEX_W_TABLE (VEX_W_0F3A19_P_2) },
c0f3af97
L
8890 },
8891
592a252b 8892 /* VEX_LEN_0F3A20_P_2 */
c0f3af97 8893 {
592a252b 8894 { VEX_W_TABLE (VEX_W_0F3A20_P_2) },
c0f3af97
L
8895 },
8896
592a252b 8897 /* VEX_LEN_0F3A21_P_2 */
c0f3af97 8898 {
592a252b 8899 { VEX_W_TABLE (VEX_W_0F3A21_P_2) },
c0f3af97
L
8900 },
8901
592a252b 8902 /* VEX_LEN_0F3A22_P_2 */
c0f3af97
L
8903 {
8904 { "vpinsrK", { XM, Vex128, Edq, Ib } },
c0f3af97
L
8905 },
8906
6c30d220 8907 /* VEX_LEN_0F3A38_P_2 */
c0f3af97 8908 {
6c30d220
L
8909 { Bad_Opcode },
8910 { VEX_W_TABLE (VEX_W_0F3A38_P_2) },
c0f3af97
L
8911 },
8912
6c30d220 8913 /* VEX_LEN_0F3A39_P_2 */
c0f3af97 8914 {
6c30d220
L
8915 { Bad_Opcode },
8916 { VEX_W_TABLE (VEX_W_0F3A39_P_2) },
8917 },
8918
8919 /* VEX_LEN_0F3A41_P_2 */
8920 {
8921 { VEX_W_TABLE (VEX_W_0F3A41_P_2) },
c0f3af97
L
8922 },
8923
592a252b 8924 /* VEX_LEN_0F3A44_P_2 */
ce2f5b3c 8925 {
592a252b 8926 { VEX_W_TABLE (VEX_W_0F3A44_P_2) },
ce2f5b3c
L
8927 },
8928
6c30d220 8929 /* VEX_LEN_0F3A46_P_2 */
c0f3af97 8930 {
6c30d220
L
8931 { Bad_Opcode },
8932 { VEX_W_TABLE (VEX_W_0F3A46_P_2) },
c0f3af97
L
8933 },
8934
592a252b 8935 /* VEX_LEN_0F3A60_P_2 */
c0f3af97 8936 {
592a252b 8937 { VEX_W_TABLE (VEX_W_0F3A60_P_2) },
c0f3af97
L
8938 },
8939
592a252b 8940 /* VEX_LEN_0F3A61_P_2 */
c0f3af97 8941 {
592a252b 8942 { VEX_W_TABLE (VEX_W_0F3A61_P_2) },
c0f3af97
L
8943 },
8944
592a252b 8945 /* VEX_LEN_0F3A62_P_2 */
c0f3af97 8946 {
592a252b 8947 { VEX_W_TABLE (VEX_W_0F3A62_P_2) },
c0f3af97
L
8948 },
8949
592a252b 8950 /* VEX_LEN_0F3A63_P_2 */
c0f3af97 8951 {
592a252b 8952 { VEX_W_TABLE (VEX_W_0F3A63_P_2) },
c0f3af97
L
8953 },
8954
592a252b 8955 /* VEX_LEN_0F3A6A_P_2 */
922d8de8 8956 {
206c2556 8957 { "vfmaddss", { XMVexW, Vex128, EXdVexW, EXdVexW, VexI4 } },
922d8de8
DR
8958 },
8959
592a252b 8960 /* VEX_LEN_0F3A6B_P_2 */
922d8de8 8961 {
206c2556 8962 { "vfmaddsd", { XMVexW, Vex128, EXqVexW, EXqVexW, VexI4 } },
922d8de8
DR
8963 },
8964
592a252b 8965 /* VEX_LEN_0F3A6E_P_2 */
922d8de8 8966 {
206c2556 8967 { "vfmsubss", { XMVexW, Vex128, EXdVexW, EXdVexW, VexI4 } },
922d8de8
DR
8968 },
8969
592a252b 8970 /* VEX_LEN_0F3A6F_P_2 */
922d8de8 8971 {
206c2556 8972 { "vfmsubsd", { XMVexW, Vex128, EXqVexW, EXqVexW, VexI4 } },
922d8de8
DR
8973 },
8974
592a252b 8975 /* VEX_LEN_0F3A7A_P_2 */
922d8de8 8976 {
206c2556 8977 { "vfnmaddss", { XMVexW, Vex128, EXdVexW, EXdVexW, VexI4 } },
922d8de8
DR
8978 },
8979
592a252b 8980 /* VEX_LEN_0F3A7B_P_2 */
922d8de8 8981 {
206c2556 8982 { "vfnmaddsd", { XMVexW, Vex128, EXqVexW, EXqVexW, VexI4 } },
922d8de8
DR
8983 },
8984
592a252b 8985 /* VEX_LEN_0F3A7E_P_2 */
922d8de8 8986 {
206c2556 8987 { "vfnmsubss", { XMVexW, Vex128, EXdVexW, EXdVexW, VexI4 } },
922d8de8
DR
8988 },
8989
592a252b 8990 /* VEX_LEN_0F3A7F_P_2 */
922d8de8 8991 {
206c2556 8992 { "vfnmsubsd", { XMVexW, Vex128, EXqVexW, EXqVexW, VexI4 } },
922d8de8
DR
8993 },
8994
592a252b 8995 /* VEX_LEN_0F3ADF_P_2 */
a5ff0eb2 8996 {
592a252b 8997 { VEX_W_TABLE (VEX_W_0F3ADF_P_2) },
a5ff0eb2 8998 },
4c807e72 8999
6c30d220
L
9000 /* VEX_LEN_0F3AF0_P_3 */
9001 {
182ae480 9002 { "rorxS", { Gdq, Edq, Ib } },
6c30d220
L
9003 },
9004
592a252b 9005 /* VEX_LEN_0FXOP_09_80 */
5dd85c99 9006 {
4c807e72
L
9007 { "vfrczps", { XM, EXxmm } },
9008 { "vfrczps", { XM, EXymmq } },
5dd85c99 9009 },
4c807e72 9010
592a252b 9011 /* VEX_LEN_0FXOP_09_81 */
5dd85c99 9012 {
4c807e72
L
9013 { "vfrczpd", { XM, EXxmm } },
9014 { "vfrczpd", { XM, EXymmq } },
5dd85c99 9015 },
331d2d0d
L
9016};
9017
9e30b8e0 9018static const struct dis386 vex_w_table[][2] = {
b844680a 9019 {
592a252b 9020 /* VEX_W_0F10_P_0 */
9e30b8e0 9021 { "vmovups", { XM, EXx } },
d8faab4e
L
9022 },
9023 {
592a252b 9024 /* VEX_W_0F10_P_1 */
539f890d 9025 { "vmovss", { XMVexScalar, VexScalar, EXdScalar } },
d8faab4e
L
9026 },
9027 {
592a252b 9028 /* VEX_W_0F10_P_2 */
9e30b8e0 9029 { "vmovupd", { XM, EXx } },
d8faab4e
L
9030 },
9031 {
592a252b 9032 /* VEX_W_0F10_P_3 */
539f890d 9033 { "vmovsd", { XMVexScalar, VexScalar, EXqScalar } },
d8faab4e
L
9034 },
9035 {
592a252b 9036 /* VEX_W_0F11_P_0 */
9e30b8e0 9037 { "vmovups", { EXxS, XM } },
d8faab4e
L
9038 },
9039 {
592a252b 9040 /* VEX_W_0F11_P_1 */
539f890d 9041 { "vmovss", { EXdVexScalarS, VexScalar, XMScalar } },
b844680a
L
9042 },
9043 {
592a252b 9044 /* VEX_W_0F11_P_2 */
9e30b8e0 9045 { "vmovupd", { EXxS, XM } },
b844680a
L
9046 },
9047 {
592a252b 9048 /* VEX_W_0F11_P_3 */
539f890d 9049 { "vmovsd", { EXqVexScalarS, VexScalar, XMScalar } },
d8faab4e
L
9050 },
9051 {
592a252b 9052 /* VEX_W_0F12_P_0_M_0 */
9e30b8e0 9053 { "vmovlps", { XM, Vex128, EXq } },
b844680a
L
9054 },
9055 {
592a252b 9056 /* VEX_W_0F12_P_0_M_1 */
9e30b8e0 9057 { "vmovhlps", { XM, Vex128, EXq } },
b844680a
L
9058 },
9059 {
592a252b 9060 /* VEX_W_0F12_P_1 */
9e30b8e0 9061 { "vmovsldup", { XM, EXx } },
b844680a
L
9062 },
9063 {
592a252b 9064 /* VEX_W_0F12_P_2 */
9e30b8e0 9065 { "vmovlpd", { XM, Vex128, EXq } },
b844680a
L
9066 },
9067 {
592a252b 9068 /* VEX_W_0F12_P_3 */
9e30b8e0 9069 { "vmovddup", { XM, EXymmq } },
b844680a
L
9070 },
9071 {
592a252b 9072 /* VEX_W_0F13_M_0 */
9e30b8e0 9073 { "vmovlpX", { EXq, XM } },
b844680a
L
9074 },
9075 {
592a252b 9076 /* VEX_W_0F14 */
9e30b8e0 9077 { "vunpcklpX", { XM, Vex, EXx } },
b844680a
L
9078 },
9079 {
592a252b 9080 /* VEX_W_0F15 */
9e30b8e0 9081 { "vunpckhpX", { XM, Vex, EXx } },
b844680a
L
9082 },
9083 {
592a252b 9084 /* VEX_W_0F16_P_0_M_0 */
9e30b8e0 9085 { "vmovhps", { XM, Vex128, EXq } },
9e30b8e0
L
9086 },
9087 {
592a252b 9088 /* VEX_W_0F16_P_0_M_1 */
9e30b8e0 9089 { "vmovlhps", { XM, Vex128, EXq } },
9e30b8e0
L
9090 },
9091 {
592a252b 9092 /* VEX_W_0F16_P_1 */
9e30b8e0 9093 { "vmovshdup", { XM, EXx } },
9e30b8e0
L
9094 },
9095 {
592a252b 9096 /* VEX_W_0F16_P_2 */
9e30b8e0 9097 { "vmovhpd", { XM, Vex128, EXq } },
9e30b8e0
L
9098 },
9099 {
592a252b 9100 /* VEX_W_0F17_M_0 */
9e30b8e0 9101 { "vmovhpX", { EXq, XM } },
9e30b8e0
L
9102 },
9103 {
592a252b 9104 /* VEX_W_0F28 */
9e30b8e0 9105 { "vmovapX", { XM, EXx } },
9e30b8e0
L
9106 },
9107 {
592a252b 9108 /* VEX_W_0F29 */
9e30b8e0 9109 { "vmovapX", { EXxS, XM } },
9e30b8e0
L
9110 },
9111 {
592a252b 9112 /* VEX_W_0F2B_M_0 */
9e30b8e0 9113 { "vmovntpX", { Mx, XM } },
9e30b8e0
L
9114 },
9115 {
592a252b 9116 /* VEX_W_0F2E_P_0 */
539f890d 9117 { "vucomiss", { XMScalar, EXdScalar } },
9e30b8e0
L
9118 },
9119 {
592a252b 9120 /* VEX_W_0F2E_P_2 */
539f890d 9121 { "vucomisd", { XMScalar, EXqScalar } },
9e30b8e0
L
9122 },
9123 {
592a252b 9124 /* VEX_W_0F2F_P_0 */
539f890d 9125 { "vcomiss", { XMScalar, EXdScalar } },
9e30b8e0
L
9126 },
9127 {
592a252b 9128 /* VEX_W_0F2F_P_2 */
539f890d 9129 { "vcomisd", { XMScalar, EXqScalar } },
9e30b8e0
L
9130 },
9131 {
592a252b 9132 /* VEX_W_0F50_M_0 */
9e30b8e0 9133 { "vmovmskpX", { Gdq, XS } },
9e30b8e0
L
9134 },
9135 {
592a252b 9136 /* VEX_W_0F51_P_0 */
9e30b8e0 9137 { "vsqrtps", { XM, EXx } },
9e30b8e0
L
9138 },
9139 {
592a252b 9140 /* VEX_W_0F51_P_1 */
539f890d 9141 { "vsqrtss", { XMScalar, VexScalar, EXdScalar } },
9e30b8e0
L
9142 },
9143 {
592a252b 9144 /* VEX_W_0F51_P_2 */
9e30b8e0 9145 { "vsqrtpd", { XM, EXx } },
9e30b8e0
L
9146 },
9147 {
592a252b 9148 /* VEX_W_0F51_P_3 */
539f890d 9149 { "vsqrtsd", { XMScalar, VexScalar, EXqScalar } },
9e30b8e0
L
9150 },
9151 {
592a252b 9152 /* VEX_W_0F52_P_0 */
9e30b8e0 9153 { "vrsqrtps", { XM, EXx } },
9e30b8e0
L
9154 },
9155 {
592a252b 9156 /* VEX_W_0F52_P_1 */
539f890d 9157 { "vrsqrtss", { XMScalar, VexScalar, EXdScalar } },
9e30b8e0
L
9158 },
9159 {
592a252b 9160 /* VEX_W_0F53_P_0 */
9e30b8e0 9161 { "vrcpps", { XM, EXx } },
9e30b8e0
L
9162 },
9163 {
592a252b 9164 /* VEX_W_0F53_P_1 */
539f890d 9165 { "vrcpss", { XMScalar, VexScalar, EXdScalar } },
9e30b8e0
L
9166 },
9167 {
592a252b 9168 /* VEX_W_0F58_P_0 */
9e30b8e0 9169 { "vaddps", { XM, Vex, EXx } },
9e30b8e0
L
9170 },
9171 {
592a252b 9172 /* VEX_W_0F58_P_1 */
539f890d 9173 { "vaddss", { XMScalar, VexScalar, EXdScalar } },
9e30b8e0
L
9174 },
9175 {
592a252b 9176 /* VEX_W_0F58_P_2 */
9e30b8e0 9177 { "vaddpd", { XM, Vex, EXx } },
9e30b8e0
L
9178 },
9179 {
592a252b 9180 /* VEX_W_0F58_P_3 */
539f890d 9181 { "vaddsd", { XMScalar, VexScalar, EXqScalar } },
9e30b8e0
L
9182 },
9183 {
592a252b 9184 /* VEX_W_0F59_P_0 */
9e30b8e0 9185 { "vmulps", { XM, Vex, EXx } },
9e30b8e0
L
9186 },
9187 {
592a252b 9188 /* VEX_W_0F59_P_1 */
539f890d 9189 { "vmulss", { XMScalar, VexScalar, EXdScalar } },
9e30b8e0
L
9190 },
9191 {
592a252b 9192 /* VEX_W_0F59_P_2 */
9e30b8e0 9193 { "vmulpd", { XM, Vex, EXx } },
9e30b8e0
L
9194 },
9195 {
592a252b 9196 /* VEX_W_0F59_P_3 */
539f890d 9197 { "vmulsd", { XMScalar, VexScalar, EXqScalar } },
9e30b8e0
L
9198 },
9199 {
592a252b 9200 /* VEX_W_0F5A_P_0 */
9e30b8e0 9201 { "vcvtps2pd", { XM, EXxmmq } },
9e30b8e0
L
9202 },
9203 {
592a252b 9204 /* VEX_W_0F5A_P_1 */
539f890d 9205 { "vcvtss2sd", { XMScalar, VexScalar, EXdScalar } },
9e30b8e0
L
9206 },
9207 {
592a252b 9208 /* VEX_W_0F5A_P_3 */
539f890d 9209 { "vcvtsd2ss", { XMScalar, VexScalar, EXqScalar } },
9e30b8e0
L
9210 },
9211 {
592a252b 9212 /* VEX_W_0F5B_P_0 */
9e30b8e0 9213 { "vcvtdq2ps", { XM, EXx } },
9e30b8e0
L
9214 },
9215 {
592a252b 9216 /* VEX_W_0F5B_P_1 */
9e30b8e0 9217 { "vcvttps2dq", { XM, EXx } },
9e30b8e0
L
9218 },
9219 {
592a252b 9220 /* VEX_W_0F5B_P_2 */
9e30b8e0 9221 { "vcvtps2dq", { XM, EXx } },
9e30b8e0
L
9222 },
9223 {
592a252b 9224 /* VEX_W_0F5C_P_0 */
9e30b8e0 9225 { "vsubps", { XM, Vex, EXx } },
9e30b8e0
L
9226 },
9227 {
592a252b 9228 /* VEX_W_0F5C_P_1 */
539f890d 9229 { "vsubss", { XMScalar, VexScalar, EXdScalar } },
9e30b8e0
L
9230 },
9231 {
592a252b 9232 /* VEX_W_0F5C_P_2 */
9e30b8e0 9233 { "vsubpd", { XM, Vex, EXx } },
9e30b8e0
L
9234 },
9235 {
592a252b 9236 /* VEX_W_0F5C_P_3 */
539f890d 9237 { "vsubsd", { XMScalar, VexScalar, EXqScalar } },
9e30b8e0
L
9238 },
9239 {
592a252b 9240 /* VEX_W_0F5D_P_0 */
9e30b8e0 9241 { "vminps", { XM, Vex, EXx } },
9e30b8e0
L
9242 },
9243 {
592a252b 9244 /* VEX_W_0F5D_P_1 */
539f890d 9245 { "vminss", { XMScalar, VexScalar, EXdScalar } },
9e30b8e0
L
9246 },
9247 {
592a252b 9248 /* VEX_W_0F5D_P_2 */
9e30b8e0 9249 { "vminpd", { XM, Vex, EXx } },
9e30b8e0
L
9250 },
9251 {
592a252b 9252 /* VEX_W_0F5D_P_3 */
539f890d 9253 { "vminsd", { XMScalar, VexScalar, EXqScalar } },
9e30b8e0
L
9254 },
9255 {
592a252b 9256 /* VEX_W_0F5E_P_0 */
9e30b8e0 9257 { "vdivps", { XM, Vex, EXx } },
9e30b8e0
L
9258 },
9259 {
592a252b 9260 /* VEX_W_0F5E_P_1 */
539f890d 9261 { "vdivss", { XMScalar, VexScalar, EXdScalar } },
9e30b8e0
L
9262 },
9263 {
592a252b 9264 /* VEX_W_0F5E_P_2 */
9e30b8e0 9265 { "vdivpd", { XM, Vex, EXx } },
9e30b8e0
L
9266 },
9267 {
592a252b 9268 /* VEX_W_0F5E_P_3 */
539f890d 9269 { "vdivsd", { XMScalar, VexScalar, EXqScalar } },
9e30b8e0
L
9270 },
9271 {
592a252b 9272 /* VEX_W_0F5F_P_0 */
9e30b8e0 9273 { "vmaxps", { XM, Vex, EXx } },
9e30b8e0
L
9274 },
9275 {
592a252b 9276 /* VEX_W_0F5F_P_1 */
539f890d 9277 { "vmaxss", { XMScalar, VexScalar, EXdScalar } },
9e30b8e0
L
9278 },
9279 {
592a252b 9280 /* VEX_W_0F5F_P_2 */
9e30b8e0 9281 { "vmaxpd", { XM, Vex, EXx } },
9e30b8e0
L
9282 },
9283 {
592a252b 9284 /* VEX_W_0F5F_P_3 */
539f890d 9285 { "vmaxsd", { XMScalar, VexScalar, EXqScalar } },
9e30b8e0
L
9286 },
9287 {
592a252b 9288 /* VEX_W_0F60_P_2 */
6c30d220 9289 { "vpunpcklbw", { XM, Vex, EXx } },
9e30b8e0
L
9290 },
9291 {
592a252b 9292 /* VEX_W_0F61_P_2 */
6c30d220 9293 { "vpunpcklwd", { XM, Vex, EXx } },
9e30b8e0
L
9294 },
9295 {
592a252b 9296 /* VEX_W_0F62_P_2 */
6c30d220 9297 { "vpunpckldq", { XM, Vex, EXx } },
9e30b8e0
L
9298 },
9299 {
592a252b 9300 /* VEX_W_0F63_P_2 */
6c30d220 9301 { "vpacksswb", { XM, Vex, EXx } },
9e30b8e0
L
9302 },
9303 {
592a252b 9304 /* VEX_W_0F64_P_2 */
6c30d220 9305 { "vpcmpgtb", { XM, Vex, EXx } },
9e30b8e0
L
9306 },
9307 {
592a252b 9308 /* VEX_W_0F65_P_2 */
6c30d220 9309 { "vpcmpgtw", { XM, Vex, EXx } },
9e30b8e0
L
9310 },
9311 {
592a252b 9312 /* VEX_W_0F66_P_2 */
6c30d220 9313 { "vpcmpgtd", { XM, Vex, EXx } },
9e30b8e0
L
9314 },
9315 {
592a252b 9316 /* VEX_W_0F67_P_2 */
6c30d220 9317 { "vpackuswb", { XM, Vex, EXx } },
9e30b8e0
L
9318 },
9319 {
592a252b 9320 /* VEX_W_0F68_P_2 */
6c30d220 9321 { "vpunpckhbw", { XM, Vex, EXx } },
9e30b8e0
L
9322 },
9323 {
592a252b 9324 /* VEX_W_0F69_P_2 */
6c30d220 9325 { "vpunpckhwd", { XM, Vex, EXx } },
9e30b8e0
L
9326 },
9327 {
592a252b 9328 /* VEX_W_0F6A_P_2 */
6c30d220 9329 { "vpunpckhdq", { XM, Vex, EXx } },
9e30b8e0
L
9330 },
9331 {
592a252b 9332 /* VEX_W_0F6B_P_2 */
6c30d220 9333 { "vpackssdw", { XM, Vex, EXx } },
9e30b8e0
L
9334 },
9335 {
592a252b 9336 /* VEX_W_0F6C_P_2 */
6c30d220 9337 { "vpunpcklqdq", { XM, Vex, EXx } },
9e30b8e0
L
9338 },
9339 {
592a252b 9340 /* VEX_W_0F6D_P_2 */
6c30d220 9341 { "vpunpckhqdq", { XM, Vex, EXx } },
9e30b8e0
L
9342 },
9343 {
592a252b 9344 /* VEX_W_0F6F_P_1 */
efdb52b7 9345 { "vmovdqu", { XM, EXx } },
9e30b8e0
L
9346 },
9347 {
592a252b 9348 /* VEX_W_0F6F_P_2 */
efdb52b7 9349 { "vmovdqa", { XM, EXx } },
9e30b8e0
L
9350 },
9351 {
592a252b 9352 /* VEX_W_0F70_P_1 */
9e30b8e0 9353 { "vpshufhw", { XM, EXx, Ib } },
9e30b8e0
L
9354 },
9355 {
592a252b 9356 /* VEX_W_0F70_P_2 */
9e30b8e0 9357 { "vpshufd", { XM, EXx, Ib } },
9e30b8e0
L
9358 },
9359 {
592a252b 9360 /* VEX_W_0F70_P_3 */
9e30b8e0 9361 { "vpshuflw", { XM, EXx, Ib } },
9e30b8e0
L
9362 },
9363 {
592a252b 9364 /* VEX_W_0F71_R_2_P_2 */
6c30d220 9365 { "vpsrlw", { Vex, XS, Ib } },
9e30b8e0
L
9366 },
9367 {
592a252b 9368 /* VEX_W_0F71_R_4_P_2 */
6c30d220 9369 { "vpsraw", { Vex, XS, Ib } },
9e30b8e0
L
9370 },
9371 {
592a252b 9372 /* VEX_W_0F71_R_6_P_2 */
6c30d220 9373 { "vpsllw", { Vex, XS, Ib } },
9e30b8e0
L
9374 },
9375 {
592a252b 9376 /* VEX_W_0F72_R_2_P_2 */
6c30d220 9377 { "vpsrld", { Vex, XS, Ib } },
9e30b8e0
L
9378 },
9379 {
592a252b 9380 /* VEX_W_0F72_R_4_P_2 */
6c30d220 9381 { "vpsrad", { Vex, XS, Ib } },
9e30b8e0
L
9382 },
9383 {
592a252b 9384 /* VEX_W_0F72_R_6_P_2 */
6c30d220 9385 { "vpslld", { Vex, XS, Ib } },
9e30b8e0
L
9386 },
9387 {
592a252b 9388 /* VEX_W_0F73_R_2_P_2 */
6c30d220 9389 { "vpsrlq", { Vex, XS, Ib } },
9e30b8e0
L
9390 },
9391 {
592a252b 9392 /* VEX_W_0F73_R_3_P_2 */
6c30d220 9393 { "vpsrldq", { Vex, XS, Ib } },
9e30b8e0
L
9394 },
9395 {
592a252b 9396 /* VEX_W_0F73_R_6_P_2 */
6c30d220 9397 { "vpsllq", { Vex, XS, Ib } },
9e30b8e0
L
9398 },
9399 {
592a252b 9400 /* VEX_W_0F73_R_7_P_2 */
6c30d220 9401 { "vpslldq", { Vex, XS, Ib } },
9e30b8e0
L
9402 },
9403 {
592a252b 9404 /* VEX_W_0F74_P_2 */
6c30d220 9405 { "vpcmpeqb", { XM, Vex, EXx } },
9e30b8e0
L
9406 },
9407 {
592a252b 9408 /* VEX_W_0F75_P_2 */
6c30d220 9409 { "vpcmpeqw", { XM, Vex, EXx } },
9e30b8e0
L
9410 },
9411 {
592a252b 9412 /* VEX_W_0F76_P_2 */
6c30d220 9413 { "vpcmpeqd", { XM, Vex, EXx } },
9e30b8e0
L
9414 },
9415 {
592a252b 9416 /* VEX_W_0F77_P_0 */
9e30b8e0 9417 { "", { VZERO } },
9e30b8e0
L
9418 },
9419 {
592a252b 9420 /* VEX_W_0F7C_P_2 */
9e30b8e0 9421 { "vhaddpd", { XM, Vex, EXx } },
9e30b8e0
L
9422 },
9423 {
592a252b 9424 /* VEX_W_0F7C_P_3 */
9e30b8e0 9425 { "vhaddps", { XM, Vex, EXx } },
9e30b8e0
L
9426 },
9427 {
592a252b 9428 /* VEX_W_0F7D_P_2 */
9e30b8e0 9429 { "vhsubpd", { XM, Vex, EXx } },
9e30b8e0
L
9430 },
9431 {
592a252b 9432 /* VEX_W_0F7D_P_3 */
9e30b8e0 9433 { "vhsubps", { XM, Vex, EXx } },
9e30b8e0
L
9434 },
9435 {
592a252b 9436 /* VEX_W_0F7E_P_1 */
539f890d 9437 { "vmovq", { XMScalar, EXqScalar } },
9e30b8e0
L
9438 },
9439 {
592a252b 9440 /* VEX_W_0F7F_P_1 */
9e30b8e0 9441 { "vmovdqu", { EXxS, XM } },
9e30b8e0
L
9442 },
9443 {
592a252b 9444 /* VEX_W_0F7F_P_2 */
9e30b8e0 9445 { "vmovdqa", { EXxS, XM } },
9e30b8e0
L
9446 },
9447 {
592a252b 9448 /* VEX_W_0FAE_R_2_M_0 */
9e30b8e0 9449 { "vldmxcsr", { Md } },
9e30b8e0
L
9450 },
9451 {
592a252b 9452 /* VEX_W_0FAE_R_3_M_0 */
9e30b8e0 9453 { "vstmxcsr", { Md } },
9e30b8e0
L
9454 },
9455 {
592a252b 9456 /* VEX_W_0FC2_P_0 */
9e30b8e0 9457 { "vcmpps", { XM, Vex, EXx, VCMP } },
9e30b8e0
L
9458 },
9459 {
592a252b 9460 /* VEX_W_0FC2_P_1 */
539f890d 9461 { "vcmpss", { XMScalar, VexScalar, EXdScalar, VCMP } },
9e30b8e0
L
9462 },
9463 {
592a252b 9464 /* VEX_W_0FC2_P_2 */
9e30b8e0 9465 { "vcmppd", { XM, Vex, EXx, VCMP } },
9e30b8e0
L
9466 },
9467 {
592a252b 9468 /* VEX_W_0FC2_P_3 */
539f890d 9469 { "vcmpsd", { XMScalar, VexScalar, EXqScalar, VCMP } },
9e30b8e0
L
9470 },
9471 {
592a252b 9472 /* VEX_W_0FC4_P_2 */
9e30b8e0 9473 { "vpinsrw", { XM, Vex128, Edqw, Ib } },
9e30b8e0
L
9474 },
9475 {
592a252b 9476 /* VEX_W_0FC5_P_2 */
9e30b8e0 9477 { "vpextrw", { Gdq, XS, Ib } },
9e30b8e0
L
9478 },
9479 {
592a252b 9480 /* VEX_W_0FD0_P_2 */
9e30b8e0 9481 { "vaddsubpd", { XM, Vex, EXx } },
9e30b8e0
L
9482 },
9483 {
592a252b 9484 /* VEX_W_0FD0_P_3 */
9e30b8e0 9485 { "vaddsubps", { XM, Vex, EXx } },
9e30b8e0
L
9486 },
9487 {
592a252b 9488 /* VEX_W_0FD1_P_2 */
6c30d220 9489 { "vpsrlw", { XM, Vex, EXxmm } },
9e30b8e0
L
9490 },
9491 {
592a252b 9492 /* VEX_W_0FD2_P_2 */
6c30d220 9493 { "vpsrld", { XM, Vex, EXxmm } },
9e30b8e0
L
9494 },
9495 {
592a252b 9496 /* VEX_W_0FD3_P_2 */
6c30d220 9497 { "vpsrlq", { XM, Vex, EXxmm } },
9e30b8e0
L
9498 },
9499 {
592a252b 9500 /* VEX_W_0FD4_P_2 */
6c30d220 9501 { "vpaddq", { XM, Vex, EXx } },
9e30b8e0
L
9502 },
9503 {
592a252b 9504 /* VEX_W_0FD5_P_2 */
6c30d220 9505 { "vpmullw", { XM, Vex, EXx } },
9e30b8e0
L
9506 },
9507 {
592a252b 9508 /* VEX_W_0FD6_P_2 */
539f890d 9509 { "vmovq", { EXqScalarS, XMScalar } },
9e30b8e0
L
9510 },
9511 {
592a252b 9512 /* VEX_W_0FD7_P_2_M_1 */
9e30b8e0 9513 { "vpmovmskb", { Gdq, XS } },
9e30b8e0
L
9514 },
9515 {
592a252b 9516 /* VEX_W_0FD8_P_2 */
6c30d220 9517 { "vpsubusb", { XM, Vex, EXx } },
9e30b8e0
L
9518 },
9519 {
592a252b 9520 /* VEX_W_0FD9_P_2 */
6c30d220 9521 { "vpsubusw", { XM, Vex, EXx } },
9e30b8e0
L
9522 },
9523 {
592a252b 9524 /* VEX_W_0FDA_P_2 */
6c30d220 9525 { "vpminub", { XM, Vex, EXx } },
9e30b8e0
L
9526 },
9527 {
592a252b 9528 /* VEX_W_0FDB_P_2 */
6c30d220 9529 { "vpand", { XM, Vex, EXx } },
9e30b8e0
L
9530 },
9531 {
592a252b 9532 /* VEX_W_0FDC_P_2 */
6c30d220 9533 { "vpaddusb", { XM, Vex, EXx } },
9e30b8e0
L
9534 },
9535 {
592a252b 9536 /* VEX_W_0FDD_P_2 */
6c30d220 9537 { "vpaddusw", { XM, Vex, EXx } },
9e30b8e0
L
9538 },
9539 {
592a252b 9540 /* VEX_W_0FDE_P_2 */
6c30d220 9541 { "vpmaxub", { XM, Vex, EXx } },
9e30b8e0
L
9542 },
9543 {
592a252b 9544 /* VEX_W_0FDF_P_2 */
6c30d220 9545 { "vpandn", { XM, Vex, EXx } },
9e30b8e0
L
9546 },
9547 {
592a252b 9548 /* VEX_W_0FE0_P_2 */
6c30d220 9549 { "vpavgb", { XM, Vex, EXx } },
9e30b8e0
L
9550 },
9551 {
592a252b 9552 /* VEX_W_0FE1_P_2 */
6c30d220 9553 { "vpsraw", { XM, Vex, EXxmm } },
9e30b8e0
L
9554 },
9555 {
592a252b 9556 /* VEX_W_0FE2_P_2 */
6c30d220 9557 { "vpsrad", { XM, Vex, EXxmm } },
9e30b8e0
L
9558 },
9559 {
592a252b 9560 /* VEX_W_0FE3_P_2 */
6c30d220 9561 { "vpavgw", { XM, Vex, EXx } },
9e30b8e0
L
9562 },
9563 {
592a252b 9564 /* VEX_W_0FE4_P_2 */
6c30d220 9565 { "vpmulhuw", { XM, Vex, EXx } },
9e30b8e0
L
9566 },
9567 {
592a252b 9568 /* VEX_W_0FE5_P_2 */
6c30d220 9569 { "vpmulhw", { XM, Vex, EXx } },
9e30b8e0
L
9570 },
9571 {
592a252b 9572 /* VEX_W_0FE6_P_1 */
efdb52b7 9573 { "vcvtdq2pd", { XM, EXxmmq } },
9e30b8e0
L
9574 },
9575 {
592a252b 9576 /* VEX_W_0FE6_P_2 */
a179a9fd 9577 { "vcvttpd2dq%XY", { XMM, EXx } },
9e30b8e0
L
9578 },
9579 {
592a252b 9580 /* VEX_W_0FE6_P_3 */
a179a9fd 9581 { "vcvtpd2dq%XY", { XMM, EXx } },
9e30b8e0
L
9582 },
9583 {
592a252b 9584 /* VEX_W_0FE7_P_2_M_0 */
9e30b8e0 9585 { "vmovntdq", { Mx, XM } },
9e30b8e0
L
9586 },
9587 {
592a252b 9588 /* VEX_W_0FE8_P_2 */
6c30d220 9589 { "vpsubsb", { XM, Vex, EXx } },
9e30b8e0
L
9590 },
9591 {
592a252b 9592 /* VEX_W_0FE9_P_2 */
6c30d220 9593 { "vpsubsw", { XM, Vex, EXx } },
9e30b8e0
L
9594 },
9595 {
592a252b 9596 /* VEX_W_0FEA_P_2 */
6c30d220 9597 { "vpminsw", { XM, Vex, EXx } },
9e30b8e0
L
9598 },
9599 {
592a252b 9600 /* VEX_W_0FEB_P_2 */
6c30d220 9601 { "vpor", { XM, Vex, EXx } },
9e30b8e0
L
9602 },
9603 {
592a252b 9604 /* VEX_W_0FEC_P_2 */
6c30d220 9605 { "vpaddsb", { XM, Vex, EXx } },
9e30b8e0
L
9606 },
9607 {
592a252b 9608 /* VEX_W_0FED_P_2 */
6c30d220 9609 { "vpaddsw", { XM, Vex, EXx } },
9e30b8e0
L
9610 },
9611 {
592a252b 9612 /* VEX_W_0FEE_P_2 */
6c30d220 9613 { "vpmaxsw", { XM, Vex, EXx } },
9e30b8e0
L
9614 },
9615 {
592a252b 9616 /* VEX_W_0FEF_P_2 */
6c30d220 9617 { "vpxor", { XM, Vex, EXx } },
9e30b8e0
L
9618 },
9619 {
592a252b 9620 /* VEX_W_0FF0_P_3_M_0 */
9e30b8e0 9621 { "vlddqu", { XM, M } },
9e30b8e0
L
9622 },
9623 {
592a252b 9624 /* VEX_W_0FF1_P_2 */
6c30d220 9625 { "vpsllw", { XM, Vex, EXxmm } },
9e30b8e0
L
9626 },
9627 {
592a252b 9628 /* VEX_W_0FF2_P_2 */
6c30d220 9629 { "vpslld", { XM, Vex, EXxmm } },
9e30b8e0
L
9630 },
9631 {
592a252b 9632 /* VEX_W_0FF3_P_2 */
6c30d220 9633 { "vpsllq", { XM, Vex, EXxmm } },
9e30b8e0
L
9634 },
9635 {
592a252b 9636 /* VEX_W_0FF4_P_2 */
6c30d220 9637 { "vpmuludq", { XM, Vex, EXx } },
9e30b8e0
L
9638 },
9639 {
592a252b 9640 /* VEX_W_0FF5_P_2 */
6c30d220 9641 { "vpmaddwd", { XM, Vex, EXx } },
9e30b8e0
L
9642 },
9643 {
592a252b 9644 /* VEX_W_0FF6_P_2 */
6c30d220 9645 { "vpsadbw", { XM, Vex, EXx } },
9e30b8e0
L
9646 },
9647 {
592a252b 9648 /* VEX_W_0FF7_P_2 */
9e30b8e0 9649 { "vmaskmovdqu", { XM, XS } },
9e30b8e0
L
9650 },
9651 {
592a252b 9652 /* VEX_W_0FF8_P_2 */
6c30d220 9653 { "vpsubb", { XM, Vex, EXx } },
9e30b8e0
L
9654 },
9655 {
592a252b 9656 /* VEX_W_0FF9_P_2 */
6c30d220 9657 { "vpsubw", { XM, Vex, EXx } },
9e30b8e0
L
9658 },
9659 {
592a252b 9660 /* VEX_W_0FFA_P_2 */
6c30d220 9661 { "vpsubd", { XM, Vex, EXx } },
9e30b8e0
L
9662 },
9663 {
592a252b 9664 /* VEX_W_0FFB_P_2 */
6c30d220 9665 { "vpsubq", { XM, Vex, EXx } },
9e30b8e0
L
9666 },
9667 {
592a252b 9668 /* VEX_W_0FFC_P_2 */
6c30d220 9669 { "vpaddb", { XM, Vex, EXx } },
9e30b8e0
L
9670 },
9671 {
592a252b 9672 /* VEX_W_0FFD_P_2 */
6c30d220 9673 { "vpaddw", { XM, Vex, EXx } },
9e30b8e0
L
9674 },
9675 {
592a252b 9676 /* VEX_W_0FFE_P_2 */
6c30d220 9677 { "vpaddd", { XM, Vex, EXx } },
9e30b8e0
L
9678 },
9679 {
592a252b 9680 /* VEX_W_0F3800_P_2 */
6c30d220 9681 { "vpshufb", { XM, Vex, EXx } },
9e30b8e0
L
9682 },
9683 {
592a252b 9684 /* VEX_W_0F3801_P_2 */
6c30d220 9685 { "vphaddw", { XM, Vex, EXx } },
9e30b8e0
L
9686 },
9687 {
592a252b 9688 /* VEX_W_0F3802_P_2 */
6c30d220 9689 { "vphaddd", { XM, Vex, EXx } },
9e30b8e0
L
9690 },
9691 {
592a252b 9692 /* VEX_W_0F3803_P_2 */
6c30d220 9693 { "vphaddsw", { XM, Vex, EXx } },
9e30b8e0
L
9694 },
9695 {
592a252b 9696 /* VEX_W_0F3804_P_2 */
6c30d220 9697 { "vpmaddubsw", { XM, Vex, EXx } },
9e30b8e0
L
9698 },
9699 {
592a252b 9700 /* VEX_W_0F3805_P_2 */
6c30d220 9701 { "vphsubw", { XM, Vex, EXx } },
9e30b8e0
L
9702 },
9703 {
592a252b 9704 /* VEX_W_0F3806_P_2 */
6c30d220 9705 { "vphsubd", { XM, Vex, EXx } },
9e30b8e0
L
9706 },
9707 {
592a252b 9708 /* VEX_W_0F3807_P_2 */
6c30d220 9709 { "vphsubsw", { XM, Vex, EXx } },
9e30b8e0
L
9710 },
9711 {
592a252b 9712 /* VEX_W_0F3808_P_2 */
6c30d220 9713 { "vpsignb", { XM, Vex, EXx } },
9e30b8e0
L
9714 },
9715 {
592a252b 9716 /* VEX_W_0F3809_P_2 */
6c30d220 9717 { "vpsignw", { XM, Vex, EXx } },
9e30b8e0
L
9718 },
9719 {
592a252b 9720 /* VEX_W_0F380A_P_2 */
6c30d220 9721 { "vpsignd", { XM, Vex, EXx } },
9e30b8e0
L
9722 },
9723 {
592a252b 9724 /* VEX_W_0F380B_P_2 */
6c30d220 9725 { "vpmulhrsw", { XM, Vex, EXx } },
9e30b8e0
L
9726 },
9727 {
592a252b 9728 /* VEX_W_0F380C_P_2 */
9e30b8e0 9729 { "vpermilps", { XM, Vex, EXx } },
9e30b8e0
L
9730 },
9731 {
592a252b 9732 /* VEX_W_0F380D_P_2 */
9e30b8e0 9733 { "vpermilpd", { XM, Vex, EXx } },
9e30b8e0
L
9734 },
9735 {
592a252b 9736 /* VEX_W_0F380E_P_2 */
9e30b8e0 9737 { "vtestps", { XM, EXx } },
9e30b8e0
L
9738 },
9739 {
592a252b 9740 /* VEX_W_0F380F_P_2 */
9e30b8e0 9741 { "vtestpd", { XM, EXx } },
9e30b8e0 9742 },
6c30d220
L
9743 {
9744 /* VEX_W_0F3816_P_2 */
9745 { "vpermps", { XM, Vex, EXx } },
9746 },
9e30b8e0 9747 {
592a252b 9748 /* VEX_W_0F3817_P_2 */
9e30b8e0 9749 { "vptest", { XM, EXx } },
9e30b8e0 9750 },
bcf2684f 9751 {
6c30d220
L
9752 /* VEX_W_0F3818_P_2 */
9753 { "vbroadcastss", { XM, EXxmm_md } },
bcf2684f 9754 },
9e30b8e0 9755 {
6c30d220
L
9756 /* VEX_W_0F3819_P_2 */
9757 { "vbroadcastsd", { XM, EXxmm_mq } },
9e30b8e0
L
9758 },
9759 {
592a252b 9760 /* VEX_W_0F381A_P_2_M_0 */
9e30b8e0 9761 { "vbroadcastf128", { XM, Mxmm } },
9e30b8e0
L
9762 },
9763 {
592a252b 9764 /* VEX_W_0F381C_P_2 */
9e30b8e0 9765 { "vpabsb", { XM, EXx } },
9e30b8e0
L
9766 },
9767 {
592a252b 9768 /* VEX_W_0F381D_P_2 */
9e30b8e0 9769 { "vpabsw", { XM, EXx } },
9e30b8e0
L
9770 },
9771 {
592a252b 9772 /* VEX_W_0F381E_P_2 */
9e30b8e0 9773 { "vpabsd", { XM, EXx } },
9e30b8e0
L
9774 },
9775 {
592a252b 9776 /* VEX_W_0F3820_P_2 */
6c30d220 9777 { "vpmovsxbw", { XM, EXxmmq } },
9e30b8e0
L
9778 },
9779 {
592a252b 9780 /* VEX_W_0F3821_P_2 */
6c30d220 9781 { "vpmovsxbd", { XM, EXxmmqd } },
9e30b8e0
L
9782 },
9783 {
592a252b 9784 /* VEX_W_0F3822_P_2 */
6c30d220 9785 { "vpmovsxbq", { XM, EXxmmdw } },
9e30b8e0
L
9786 },
9787 {
592a252b 9788 /* VEX_W_0F3823_P_2 */
6c30d220 9789 { "vpmovsxwd", { XM, EXxmmq } },
9e30b8e0
L
9790 },
9791 {
592a252b 9792 /* VEX_W_0F3824_P_2 */
6c30d220 9793 { "vpmovsxwq", { XM, EXxmmqd } },
9e30b8e0
L
9794 },
9795 {
592a252b 9796 /* VEX_W_0F3825_P_2 */
6c30d220 9797 { "vpmovsxdq", { XM, EXxmmq } },
9e30b8e0
L
9798 },
9799 {
592a252b 9800 /* VEX_W_0F3828_P_2 */
6c30d220 9801 { "vpmuldq", { XM, Vex, EXx } },
9e30b8e0
L
9802 },
9803 {
592a252b 9804 /* VEX_W_0F3829_P_2 */
6c30d220 9805 { "vpcmpeqq", { XM, Vex, EXx } },
9e30b8e0
L
9806 },
9807 {
592a252b 9808 /* VEX_W_0F382A_P_2_M_0 */
9e30b8e0 9809 { "vmovntdqa", { XM, Mx } },
9e30b8e0
L
9810 },
9811 {
592a252b 9812 /* VEX_W_0F382B_P_2 */
6c30d220 9813 { "vpackusdw", { XM, Vex, EXx } },
9e30b8e0 9814 },
53aa04a0 9815 {
592a252b 9816 /* VEX_W_0F382C_P_2_M_0 */
53aa04a0 9817 { "vmaskmovps", { XM, Vex, Mx } },
53aa04a0
L
9818 },
9819 {
592a252b 9820 /* VEX_W_0F382D_P_2_M_0 */
53aa04a0 9821 { "vmaskmovpd", { XM, Vex, Mx } },
53aa04a0
L
9822 },
9823 {
592a252b 9824 /* VEX_W_0F382E_P_2_M_0 */
53aa04a0 9825 { "vmaskmovps", { Mx, Vex, XM } },
53aa04a0
L
9826 },
9827 {
592a252b 9828 /* VEX_W_0F382F_P_2_M_0 */
53aa04a0 9829 { "vmaskmovpd", { Mx, Vex, XM } },
53aa04a0 9830 },
9e30b8e0 9831 {
592a252b 9832 /* VEX_W_0F3830_P_2 */
6c30d220 9833 { "vpmovzxbw", { XM, EXxmmq } },
9e30b8e0
L
9834 },
9835 {
592a252b 9836 /* VEX_W_0F3831_P_2 */
6c30d220 9837 { "vpmovzxbd", { XM, EXxmmqd } },
9e30b8e0
L
9838 },
9839 {
592a252b 9840 /* VEX_W_0F3832_P_2 */
6c30d220 9841 { "vpmovzxbq", { XM, EXxmmdw } },
9e30b8e0
L
9842 },
9843 {
592a252b 9844 /* VEX_W_0F3833_P_2 */
6c30d220 9845 { "vpmovzxwd", { XM, EXxmmq } },
9e30b8e0
L
9846 },
9847 {
592a252b 9848 /* VEX_W_0F3834_P_2 */
6c30d220 9849 { "vpmovzxwq", { XM, EXxmmqd } },
9e30b8e0
L
9850 },
9851 {
592a252b 9852 /* VEX_W_0F3835_P_2 */
6c30d220
L
9853 { "vpmovzxdq", { XM, EXxmmq } },
9854 },
9855 {
9856 /* VEX_W_0F3836_P_2 */
9857 { "vpermd", { XM, Vex, EXx } },
9e30b8e0
L
9858 },
9859 {
592a252b 9860 /* VEX_W_0F3837_P_2 */
6c30d220 9861 { "vpcmpgtq", { XM, Vex, EXx } },
9e30b8e0
L
9862 },
9863 {
592a252b 9864 /* VEX_W_0F3838_P_2 */
6c30d220 9865 { "vpminsb", { XM, Vex, EXx } },
9e30b8e0
L
9866 },
9867 {
592a252b 9868 /* VEX_W_0F3839_P_2 */
6c30d220 9869 { "vpminsd", { XM, Vex, EXx } },
9e30b8e0
L
9870 },
9871 {
592a252b 9872 /* VEX_W_0F383A_P_2 */
6c30d220 9873 { "vpminuw", { XM, Vex, EXx } },
9e30b8e0
L
9874 },
9875 {
592a252b 9876 /* VEX_W_0F383B_P_2 */
6c30d220 9877 { "vpminud", { XM, Vex, EXx } },
9e30b8e0
L
9878 },
9879 {
592a252b 9880 /* VEX_W_0F383C_P_2 */
6c30d220 9881 { "vpmaxsb", { XM, Vex, EXx } },
9e30b8e0
L
9882 },
9883 {
592a252b 9884 /* VEX_W_0F383D_P_2 */
6c30d220 9885 { "vpmaxsd", { XM, Vex, EXx } },
9e30b8e0
L
9886 },
9887 {
592a252b 9888 /* VEX_W_0F383E_P_2 */
6c30d220 9889 { "vpmaxuw", { XM, Vex, EXx } },
9e30b8e0
L
9890 },
9891 {
592a252b 9892 /* VEX_W_0F383F_P_2 */
6c30d220 9893 { "vpmaxud", { XM, Vex, EXx } },
9e30b8e0
L
9894 },
9895 {
592a252b 9896 /* VEX_W_0F3840_P_2 */
6c30d220 9897 { "vpmulld", { XM, Vex, EXx } },
9e30b8e0
L
9898 },
9899 {
592a252b 9900 /* VEX_W_0F3841_P_2 */
9e30b8e0 9901 { "vphminposuw", { XM, EXx } },
9e30b8e0 9902 },
6c30d220
L
9903 {
9904 /* VEX_W_0F3846_P_2 */
9905 { "vpsravd", { XM, Vex, EXx } },
9906 },
9907 {
9908 /* VEX_W_0F3858_P_2 */
9909 { "vpbroadcastd", { XM, EXxmm_md } },
9910 },
9911 {
9912 /* VEX_W_0F3859_P_2 */
9913 { "vpbroadcastq", { XM, EXxmm_mq } },
9914 },
9915 {
9916 /* VEX_W_0F385A_P_2_M_0 */
9917 { "vbroadcasti128", { XM, Mxmm } },
9918 },
9919 {
9920 /* VEX_W_0F3878_P_2 */
9921 { "vpbroadcastb", { XM, EXxmm_mb } },
9922 },
9923 {
9924 /* VEX_W_0F3879_P_2 */
9925 { "vpbroadcastw", { XM, EXxmm_mw } },
9926 },
9e30b8e0 9927 {
592a252b 9928 /* VEX_W_0F38DB_P_2 */
9e30b8e0 9929 { "vaesimc", { XM, EXx } },
9e30b8e0
L
9930 },
9931 {
592a252b 9932 /* VEX_W_0F38DC_P_2 */
9e30b8e0 9933 { "vaesenc", { XM, Vex128, EXx } },
9e30b8e0
L
9934 },
9935 {
592a252b 9936 /* VEX_W_0F38DD_P_2 */
9e30b8e0 9937 { "vaesenclast", { XM, Vex128, EXx } },
9e30b8e0
L
9938 },
9939 {
592a252b 9940 /* VEX_W_0F38DE_P_2 */
9e30b8e0 9941 { "vaesdec", { XM, Vex128, EXx } },
9e30b8e0
L
9942 },
9943 {
592a252b 9944 /* VEX_W_0F38DF_P_2 */
9e30b8e0 9945 { "vaesdeclast", { XM, Vex128, EXx } },
9e30b8e0 9946 },
6c30d220
L
9947 {
9948 /* VEX_W_0F3A00_P_2 */
9949 { Bad_Opcode },
9950 { "vpermq", { XM, EXx, Ib } },
9951 },
9952 {
9953 /* VEX_W_0F3A01_P_2 */
9954 { Bad_Opcode },
9955 { "vpermpd", { XM, EXx, Ib } },
9956 },
9957 {
9958 /* VEX_W_0F3A02_P_2 */
9959 { "vpblendd", { XM, Vex, EXx, Ib } },
9960 },
9e30b8e0 9961 {
592a252b 9962 /* VEX_W_0F3A04_P_2 */
9e30b8e0 9963 { "vpermilps", { XM, EXx, Ib } },
9e30b8e0
L
9964 },
9965 {
592a252b 9966 /* VEX_W_0F3A05_P_2 */
9e30b8e0 9967 { "vpermilpd", { XM, EXx, Ib } },
9e30b8e0
L
9968 },
9969 {
592a252b 9970 /* VEX_W_0F3A06_P_2 */
9e30b8e0 9971 { "vperm2f128", { XM, Vex256, EXx, Ib } },
9e30b8e0
L
9972 },
9973 {
592a252b 9974 /* VEX_W_0F3A08_P_2 */
9e30b8e0 9975 { "vroundps", { XM, EXx, Ib } },
9e30b8e0
L
9976 },
9977 {
592a252b 9978 /* VEX_W_0F3A09_P_2 */
9e30b8e0 9979 { "vroundpd", { XM, EXx, Ib } },
9e30b8e0
L
9980 },
9981 {
592a252b 9982 /* VEX_W_0F3A0A_P_2 */
539f890d 9983 { "vroundss", { XMScalar, VexScalar, EXdScalar, Ib } },
9e30b8e0
L
9984 },
9985 {
592a252b 9986 /* VEX_W_0F3A0B_P_2 */
539f890d 9987 { "vroundsd", { XMScalar, VexScalar, EXqScalar, Ib } },
9e30b8e0
L
9988 },
9989 {
592a252b 9990 /* VEX_W_0F3A0C_P_2 */
9e30b8e0 9991 { "vblendps", { XM, Vex, EXx, Ib } },
9e30b8e0
L
9992 },
9993 {
592a252b 9994 /* VEX_W_0F3A0D_P_2 */
9e30b8e0 9995 { "vblendpd", { XM, Vex, EXx, Ib } },
9e30b8e0
L
9996 },
9997 {
592a252b 9998 /* VEX_W_0F3A0E_P_2 */
6c30d220 9999 { "vpblendw", { XM, Vex, EXx, Ib } },
9e30b8e0
L
10000 },
10001 {
592a252b 10002 /* VEX_W_0F3A0F_P_2 */
6c30d220 10003 { "vpalignr", { XM, Vex, EXx, Ib } },
9e30b8e0
L
10004 },
10005 {
592a252b 10006 /* VEX_W_0F3A14_P_2 */
9e30b8e0 10007 { "vpextrb", { Edqb, XM, Ib } },
9e30b8e0
L
10008 },
10009 {
592a252b 10010 /* VEX_W_0F3A15_P_2 */
9e30b8e0 10011 { "vpextrw", { Edqw, XM, Ib } },
9e30b8e0
L
10012 },
10013 {
592a252b 10014 /* VEX_W_0F3A18_P_2 */
9e30b8e0 10015 { "vinsertf128", { XM, Vex256, EXxmm, Ib } },
9e30b8e0
L
10016 },
10017 {
592a252b 10018 /* VEX_W_0F3A19_P_2 */
9e30b8e0 10019 { "vextractf128", { EXxmm, XM, Ib } },
9e30b8e0
L
10020 },
10021 {
592a252b 10022 /* VEX_W_0F3A20_P_2 */
9e30b8e0 10023 { "vpinsrb", { XM, Vex128, Edqb, Ib } },
9e30b8e0
L
10024 },
10025 {
592a252b 10026 /* VEX_W_0F3A21_P_2 */
9e30b8e0 10027 { "vinsertps", { XM, Vex128, EXd, Ib } },
9e30b8e0 10028 },
6c30d220
L
10029 {
10030 /* VEX_W_0F3A38_P_2 */
10031 { "vinserti128", { XM, Vex256, EXxmm, Ib } },
10032 },
10033 {
10034 /* VEX_W_0F3A39_P_2 */
10035 { "vextracti128", { EXxmm, XM, Ib } },
10036 },
9e30b8e0 10037 {
592a252b 10038 /* VEX_W_0F3A40_P_2 */
9e30b8e0 10039 { "vdpps", { XM, Vex, EXx, Ib } },
9e30b8e0
L
10040 },
10041 {
592a252b 10042 /* VEX_W_0F3A41_P_2 */
9e30b8e0 10043 { "vdppd", { XM, Vex128, EXx, Ib } },
9e30b8e0
L
10044 },
10045 {
592a252b 10046 /* VEX_W_0F3A42_P_2 */
6c30d220 10047 { "vmpsadbw", { XM, Vex, EXx, Ib } },
9e30b8e0
L
10048 },
10049 {
592a252b 10050 /* VEX_W_0F3A44_P_2 */
9e30b8e0 10051 { "vpclmulqdq", { XM, Vex128, EXx, PCLMUL } },
9e30b8e0 10052 },
6c30d220
L
10053 {
10054 /* VEX_W_0F3A46_P_2 */
10055 { "vperm2i128", { XM, Vex256, EXx, Ib } },
10056 },
a683cc34 10057 {
592a252b 10058 /* VEX_W_0F3A48_P_2 */
a683cc34
SP
10059 { "vpermil2ps", { XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW } },
10060 { "vpermil2ps", { XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW } },
10061 },
10062 {
592a252b 10063 /* VEX_W_0F3A49_P_2 */
a683cc34
SP
10064 { "vpermil2pd", { XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW } },
10065 { "vpermil2pd", { XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW } },
10066 },
9e30b8e0 10067 {
592a252b 10068 /* VEX_W_0F3A4A_P_2 */
9e30b8e0 10069 { "vblendvps", { XM, Vex, EXx, XMVexI4 } },
9e30b8e0
L
10070 },
10071 {
592a252b 10072 /* VEX_W_0F3A4B_P_2 */
9e30b8e0 10073 { "vblendvpd", { XM, Vex, EXx, XMVexI4 } },
9e30b8e0
L
10074 },
10075 {
592a252b 10076 /* VEX_W_0F3A4C_P_2 */
6c30d220 10077 { "vpblendvb", { XM, Vex, EXx, XMVexI4 } },
9e30b8e0
L
10078 },
10079 {
592a252b 10080 /* VEX_W_0F3A60_P_2 */
9e30b8e0 10081 { "vpcmpestrm", { XM, EXx, Ib } },
9e30b8e0
L
10082 },
10083 {
592a252b 10084 /* VEX_W_0F3A61_P_2 */
9e30b8e0 10085 { "vpcmpestri", { XM, EXx, Ib } },
9e30b8e0
L
10086 },
10087 {
592a252b 10088 /* VEX_W_0F3A62_P_2 */
9e30b8e0 10089 { "vpcmpistrm", { XM, EXx, Ib } },
9e30b8e0
L
10090 },
10091 {
592a252b 10092 /* VEX_W_0F3A63_P_2 */
9e30b8e0 10093 { "vpcmpistri", { XM, EXx, Ib } },
9e30b8e0
L
10094 },
10095 {
592a252b 10096 /* VEX_W_0F3ADF_P_2 */
9e30b8e0 10097 { "vaeskeygenassist", { XM, EXx, Ib } },
9e30b8e0
L
10098 },
10099};
10100
10101static const struct dis386 mod_table[][2] = {
10102 {
10103 /* MOD_8D */
10104 { "leaS", { Gv, M } },
9e30b8e0 10105 },
42164a71
L
10106 {
10107 /* MOD_C6_REG_7 */
10108 { Bad_Opcode },
10109 { RM_TABLE (RM_C6_REG_7) },
10110 },
10111 {
10112 /* MOD_C7_REG_7 */
10113 { Bad_Opcode },
10114 { RM_TABLE (RM_C7_REG_7) },
10115 },
9e30b8e0
L
10116 {
10117 /* MOD_0F01_REG_0 */
10118 { X86_64_TABLE (X86_64_0F01_REG_0) },
10119 { RM_TABLE (RM_0F01_REG_0) },
10120 },
10121 {
10122 /* MOD_0F01_REG_1 */
10123 { X86_64_TABLE (X86_64_0F01_REG_1) },
10124 { RM_TABLE (RM_0F01_REG_1) },
10125 },
10126 {
10127 /* MOD_0F01_REG_2 */
10128 { X86_64_TABLE (X86_64_0F01_REG_2) },
10129 { RM_TABLE (RM_0F01_REG_2) },
10130 },
10131 {
10132 /* MOD_0F01_REG_3 */
10133 { X86_64_TABLE (X86_64_0F01_REG_3) },
10134 { RM_TABLE (RM_0F01_REG_3) },
10135 },
10136 {
10137 /* MOD_0F01_REG_7 */
10138 { "invlpg", { Mb } },
10139 { RM_TABLE (RM_0F01_REG_7) },
10140 },
10141 {
10142 /* MOD_0F12_PREFIX_0 */
10143 { "movlps", { XM, EXq } },
10144 { "movhlps", { XM, EXq } },
10145 },
10146 {
10147 /* MOD_0F13 */
10148 { "movlpX", { EXq, XM } },
9e30b8e0
L
10149 },
10150 {
10151 /* MOD_0F16_PREFIX_0 */
10152 { "movhps", { XM, EXq } },
10153 { "movlhps", { XM, EXq } },
10154 },
10155 {
10156 /* MOD_0F17 */
10157 { "movhpX", { EXq, XM } },
9e30b8e0
L
10158 },
10159 {
10160 /* MOD_0F18_REG_0 */
10161 { "prefetchnta", { Mb } },
9e30b8e0
L
10162 },
10163 {
10164 /* MOD_0F18_REG_1 */
10165 { "prefetcht0", { Mb } },
9e30b8e0
L
10166 },
10167 {
10168 /* MOD_0F18_REG_2 */
10169 { "prefetcht1", { Mb } },
9e30b8e0
L
10170 },
10171 {
10172 /* MOD_0F18_REG_3 */
10173 { "prefetcht2", { Mb } },
9e30b8e0
L
10174 },
10175 {
10176 /* MOD_0F20 */
592d1631 10177 { Bad_Opcode },
9e30b8e0
L
10178 { "movZ", { Rm, Cm } },
10179 },
10180 {
10181 /* MOD_0F21 */
592d1631 10182 { Bad_Opcode },
9e30b8e0
L
10183 { "movZ", { Rm, Dm } },
10184 },
10185 {
10186 /* MOD_0F22 */
592d1631 10187 { Bad_Opcode },
9e30b8e0 10188 { "movZ", { Cm, Rm } },
b844680a
L
10189 },
10190 {
92fddf8e 10191 /* MOD_0F23 */
592d1631 10192 { Bad_Opcode },
92fddf8e 10193 { "movZ", { Dm, Rm } },
b844680a
L
10194 },
10195 {
92fddf8e 10196 /* MOD_0F24 */
592d1631 10197 { Bad_Opcode },
92fddf8e 10198 { "movL", { Rd, Td } },
b844680a
L
10199 },
10200 {
92fddf8e 10201 /* MOD_0F26 */
592d1631 10202 { Bad_Opcode },
92fddf8e 10203 { "movL", { Td, Rd } },
b844680a 10204 },
75c135a8
L
10205 {
10206 /* MOD_0F2B_PREFIX_0 */
4ee52178 10207 {"movntps", { Mx, XM } },
75c135a8
L
10208 },
10209 {
10210 /* MOD_0F2B_PREFIX_1 */
4ee52178 10211 {"movntss", { Md, XM } },
75c135a8
L
10212 },
10213 {
10214 /* MOD_0F2B_PREFIX_2 */
4ee52178 10215 {"movntpd", { Mx, XM } },
75c135a8
L
10216 },
10217 {
10218 /* MOD_0F2B_PREFIX_3 */
4ee52178 10219 {"movntsd", { Mq, XM } },
75c135a8
L
10220 },
10221 {
10222 /* MOD_0F51 */
592d1631 10223 { Bad_Opcode },
75c135a8
L
10224 { "movmskpX", { Gdq, XS } },
10225 },
b844680a 10226 {
1ceb70f8 10227 /* MOD_0F71_REG_2 */
592d1631 10228 { Bad_Opcode },
4e7d34a6 10229 { "psrlw", { MS, Ib } },
b844680a
L
10230 },
10231 {
1ceb70f8 10232 /* MOD_0F71_REG_4 */
592d1631 10233 { Bad_Opcode },
4e7d34a6 10234 { "psraw", { MS, Ib } },
b844680a
L
10235 },
10236 {
1ceb70f8 10237 /* MOD_0F71_REG_6 */
592d1631 10238 { Bad_Opcode },
4e7d34a6 10239 { "psllw", { MS, Ib } },
b844680a
L
10240 },
10241 {
1ceb70f8 10242 /* MOD_0F72_REG_2 */
592d1631 10243 { Bad_Opcode },
4e7d34a6 10244 { "psrld", { MS, Ib } },
b844680a
L
10245 },
10246 {
1ceb70f8 10247 /* MOD_0F72_REG_4 */
592d1631 10248 { Bad_Opcode },
4e7d34a6 10249 { "psrad", { MS, Ib } },
b844680a
L
10250 },
10251 {
1ceb70f8 10252 /* MOD_0F72_REG_6 */
592d1631 10253 { Bad_Opcode },
4e7d34a6 10254 { "pslld", { MS, Ib } },
b844680a
L
10255 },
10256 {
1ceb70f8 10257 /* MOD_0F73_REG_2 */
592d1631 10258 { Bad_Opcode },
4e7d34a6 10259 { "psrlq", { MS, Ib } },
b844680a
L
10260 },
10261 {
1ceb70f8 10262 /* MOD_0F73_REG_3 */
592d1631 10263 { Bad_Opcode },
c0f3af97
L
10264 { PREFIX_TABLE (PREFIX_0F73_REG_3) },
10265 },
10266 {
10267 /* MOD_0F73_REG_6 */
592d1631 10268 { Bad_Opcode },
c0f3af97
L
10269 { "psllq", { MS, Ib } },
10270 },
10271 {
10272 /* MOD_0F73_REG_7 */
592d1631 10273 { Bad_Opcode },
c0f3af97
L
10274 { PREFIX_TABLE (PREFIX_0F73_REG_7) },
10275 },
10276 {
10277 /* MOD_0FAE_REG_0 */
eacc9c89 10278 { "fxsave", { FXSAVE } },
c7b8aa3a 10279 { PREFIX_TABLE (PREFIX_0FAE_REG_0) },
c0f3af97
L
10280 },
10281 {
10282 /* MOD_0FAE_REG_1 */
eacc9c89 10283 { "fxrstor", { FXSAVE } },
c7b8aa3a 10284 { PREFIX_TABLE (PREFIX_0FAE_REG_1) },
c0f3af97
L
10285 },
10286 {
10287 /* MOD_0FAE_REG_2 */
10288 { "ldmxcsr", { Md } },
c7b8aa3a 10289 { PREFIX_TABLE (PREFIX_0FAE_REG_2) },
c0f3af97
L
10290 },
10291 {
10292 /* MOD_0FAE_REG_3 */
10293 { "stmxcsr", { Md } },
c7b8aa3a 10294 { PREFIX_TABLE (PREFIX_0FAE_REG_3) },
c0f3af97
L
10295 },
10296 {
10297 /* MOD_0FAE_REG_4 */
73bb6729 10298 { "xsave", { FXSAVE } },
c0f3af97
L
10299 },
10300 {
10301 /* MOD_0FAE_REG_5 */
73bb6729 10302 { "xrstor", { FXSAVE } },
c0f3af97
L
10303 { RM_TABLE (RM_0FAE_REG_5) },
10304 },
10305 {
10306 /* MOD_0FAE_REG_6 */
c7b8aa3a 10307 { "xsaveopt", { FXSAVE } },
c0f3af97
L
10308 { RM_TABLE (RM_0FAE_REG_6) },
10309 },
10310 {
10311 /* MOD_0FAE_REG_7 */
10312 { "clflush", { Mb } },
10313 { RM_TABLE (RM_0FAE_REG_7) },
10314 },
10315 {
10316 /* MOD_0FB2 */
10317 { "lssS", { Gv, Mp } },
c0f3af97
L
10318 },
10319 {
10320 /* MOD_0FB4 */
10321 { "lfsS", { Gv, Mp } },
c0f3af97
L
10322 },
10323 {
10324 /* MOD_0FB5 */
10325 { "lgsS", { Gv, Mp } },
c0f3af97
L
10326 },
10327 {
10328 /* MOD_0FC7_REG_6 */
10329 { PREFIX_TABLE (PREFIX_0FC7_REG_6) },
d7d9a9f8 10330 { "rdrand", { Ev } },
c0f3af97
L
10331 },
10332 {
10333 /* MOD_0FC7_REG_7 */
10334 { "vmptrst", { Mq } },
e2e1fcde 10335 { "rdseed", { Ev } },
c0f3af97
L
10336 },
10337 {
10338 /* MOD_0FD7 */
592d1631 10339 { Bad_Opcode },
c0f3af97
L
10340 { "pmovmskb", { Gdq, MS } },
10341 },
10342 {
10343 /* MOD_0FE7_PREFIX_2 */
10344 { "movntdq", { Mx, XM } },
c0f3af97
L
10345 },
10346 {
10347 /* MOD_0FF0_PREFIX_3 */
10348 { "lddqu", { XM, M } },
c0f3af97
L
10349 },
10350 {
10351 /* MOD_0F382A_PREFIX_2 */
10352 { "movntdqa", { XM, Mx } },
c0f3af97
L
10353 },
10354 {
10355 /* MOD_62_32BIT */
10356 { "bound{S|}", { Gv, Ma } },
c0f3af97
L
10357 },
10358 {
10359 /* MOD_C4_32BIT */
10360 { "lesS", { Gv, Mp } },
10361 { VEX_C4_TABLE (VEX_0F) },
10362 },
10363 {
10364 /* MOD_C5_32BIT */
10365 { "ldsS", { Gv, Mp } },
10366 { VEX_C5_TABLE (VEX_0F) },
10367 },
10368 {
592a252b
L
10369 /* MOD_VEX_0F12_PREFIX_0 */
10370 { VEX_LEN_TABLE (VEX_LEN_0F12_P_0_M_0) },
10371 { VEX_LEN_TABLE (VEX_LEN_0F12_P_0_M_1) },
c0f3af97
L
10372 },
10373 {
592a252b
L
10374 /* MOD_VEX_0F13 */
10375 { VEX_LEN_TABLE (VEX_LEN_0F13_M_0) },
c0f3af97
L
10376 },
10377 {
592a252b
L
10378 /* MOD_VEX_0F16_PREFIX_0 */
10379 { VEX_LEN_TABLE (VEX_LEN_0F16_P_0_M_0) },
10380 { VEX_LEN_TABLE (VEX_LEN_0F16_P_0_M_1) },
c0f3af97
L
10381 },
10382 {
592a252b
L
10383 /* MOD_VEX_0F17 */
10384 { VEX_LEN_TABLE (VEX_LEN_0F17_M_0) },
c0f3af97
L
10385 },
10386 {
592a252b
L
10387 /* MOD_VEX_0F2B */
10388 { VEX_W_TABLE (VEX_W_0F2B_M_0) },
c0f3af97
L
10389 },
10390 {
592a252b 10391 /* MOD_VEX_0F50 */
592d1631 10392 { Bad_Opcode },
592a252b 10393 { VEX_W_TABLE (VEX_W_0F50_M_0) },
c0f3af97
L
10394 },
10395 {
592a252b 10396 /* MOD_VEX_0F71_REG_2 */
592d1631 10397 { Bad_Opcode },
592a252b 10398 { PREFIX_TABLE (PREFIX_VEX_0F71_REG_2) },
b844680a
L
10399 },
10400 {
592a252b 10401 /* MOD_VEX_0F71_REG_4 */
592d1631 10402 { Bad_Opcode },
592a252b 10403 { PREFIX_TABLE (PREFIX_VEX_0F71_REG_4) },
b844680a
L
10404 },
10405 {
592a252b 10406 /* MOD_VEX_0F71_REG_6 */
592d1631 10407 { Bad_Opcode },
592a252b 10408 { PREFIX_TABLE (PREFIX_VEX_0F71_REG_6) },
b844680a
L
10409 },
10410 {
592a252b 10411 /* MOD_VEX_0F72_REG_2 */
592d1631 10412 { Bad_Opcode },
592a252b 10413 { PREFIX_TABLE (PREFIX_VEX_0F72_REG_2) },
b844680a 10414 },
d8faab4e 10415 {
592a252b 10416 /* MOD_VEX_0F72_REG_4 */
592d1631 10417 { Bad_Opcode },
592a252b 10418 { PREFIX_TABLE (PREFIX_VEX_0F72_REG_4) },
d8faab4e
L
10419 },
10420 {
592a252b 10421 /* MOD_VEX_0F72_REG_6 */
592d1631 10422 { Bad_Opcode },
592a252b 10423 { PREFIX_TABLE (PREFIX_VEX_0F72_REG_6) },
d8faab4e 10424 },
876d4bfa 10425 {
592a252b 10426 /* MOD_VEX_0F73_REG_2 */
592d1631 10427 { Bad_Opcode },
592a252b 10428 { PREFIX_TABLE (PREFIX_VEX_0F73_REG_2) },
876d4bfa
L
10429 },
10430 {
592a252b 10431 /* MOD_VEX_0F73_REG_3 */
592d1631 10432 { Bad_Opcode },
592a252b 10433 { PREFIX_TABLE (PREFIX_VEX_0F73_REG_3) },
475a2301
L
10434 },
10435 {
592a252b 10436 /* MOD_VEX_0F73_REG_6 */
592d1631 10437 { Bad_Opcode },
592a252b 10438 { PREFIX_TABLE (PREFIX_VEX_0F73_REG_6) },
876d4bfa
L
10439 },
10440 {
592a252b 10441 /* MOD_VEX_0F73_REG_7 */
592d1631 10442 { Bad_Opcode },
592a252b 10443 { PREFIX_TABLE (PREFIX_VEX_0F73_REG_7) },
876d4bfa
L
10444 },
10445 {
592a252b
L
10446 /* MOD_VEX_0FAE_REG_2 */
10447 { VEX_LEN_TABLE (VEX_LEN_0FAE_R_2_M_0) },
876d4bfa 10448 },
bbedc832 10449 {
592a252b
L
10450 /* MOD_VEX_0FAE_REG_3 */
10451 { VEX_LEN_TABLE (VEX_LEN_0FAE_R_3_M_0) },
bbedc832 10452 },
144c41d9 10453 {
592a252b 10454 /* MOD_VEX_0FD7_PREFIX_2 */
592d1631 10455 { Bad_Opcode },
6c30d220 10456 { VEX_W_TABLE (VEX_W_0FD7_P_2_M_1) },
144c41d9 10457 },
1afd85e3 10458 {
592a252b
L
10459 /* MOD_VEX_0FE7_PREFIX_2 */
10460 { VEX_W_TABLE (VEX_W_0FE7_P_2_M_0) },
1afd85e3
L
10461 },
10462 {
592a252b
L
10463 /* MOD_VEX_0FF0_PREFIX_3 */
10464 { VEX_W_TABLE (VEX_W_0FF0_P_3_M_0) },
92fddf8e 10465 },
75c135a8 10466 {
592a252b
L
10467 /* MOD_VEX_0F381A_PREFIX_2 */
10468 { VEX_LEN_TABLE (VEX_LEN_0F381A_P_2_M_0) },
75c135a8 10469 },
1afd85e3 10470 {
592a252b 10471 /* MOD_VEX_0F382A_PREFIX_2 */
6c30d220 10472 { VEX_W_TABLE (VEX_W_0F382A_P_2_M_0) },
1afd85e3 10473 },
75c135a8 10474 {
592a252b
L
10475 /* MOD_VEX_0F382C_PREFIX_2 */
10476 { VEX_W_TABLE (VEX_W_0F382C_P_2_M_0) },
75c135a8 10477 },
1afd85e3 10478 {
592a252b
L
10479 /* MOD_VEX_0F382D_PREFIX_2 */
10480 { VEX_W_TABLE (VEX_W_0F382D_P_2_M_0) },
1afd85e3
L
10481 },
10482 {
592a252b
L
10483 /* MOD_VEX_0F382E_PREFIX_2 */
10484 { VEX_W_TABLE (VEX_W_0F382E_P_2_M_0) },
1afd85e3
L
10485 },
10486 {
592a252b
L
10487 /* MOD_VEX_0F382F_PREFIX_2 */
10488 { VEX_W_TABLE (VEX_W_0F382F_P_2_M_0) },
1afd85e3 10489 },
6c30d220
L
10490 {
10491 /* MOD_VEX_0F385A_PREFIX_2 */
10492 { VEX_LEN_TABLE (VEX_LEN_0F385A_P_2_M_0) },
10493 },
10494 {
10495 /* MOD_VEX_0F388C_PREFIX_2 */
10496 { "vpmaskmov%LW", { XM, Vex, Mx } },
10497 },
10498 {
10499 /* MOD_VEX_0F388E_PREFIX_2 */
10500 { "vpmaskmov%LW", { Mx, Vex, XM } },
10501 },
b844680a
L
10502};
10503
1ceb70f8 10504static const struct dis386 rm_table[][8] = {
42164a71
L
10505 {
10506 /* RM_C6_REG_7 */
10507 { "xabort", { Skip_MODRM, Ib } },
10508 },
10509 {
10510 /* RM_C7_REG_7 */
10511 { "xbeginT", { Skip_MODRM, Jv } },
10512 },
b844680a 10513 {
1ceb70f8 10514 /* RM_0F01_REG_0 */
592d1631 10515 { Bad_Opcode },
b844680a
L
10516 { "vmcall", { Skip_MODRM } },
10517 { "vmlaunch", { Skip_MODRM } },
10518 { "vmresume", { Skip_MODRM } },
10519 { "vmxoff", { Skip_MODRM } },
b844680a
L
10520 },
10521 {
1ceb70f8 10522 /* RM_0F01_REG_1 */
b844680a
L
10523 { "monitor", { { OP_Monitor, 0 } } },
10524 { "mwait", { { OP_Mwait, 0 } } },
b844680a 10525 },
475a2301
L
10526 {
10527 /* RM_0F01_REG_2 */
10528 { "xgetbv", { Skip_MODRM } },
10529 { "xsetbv", { Skip_MODRM } },
8729a6f6
L
10530 { Bad_Opcode },
10531 { Bad_Opcode },
10532 { "vmfunc", { Skip_MODRM } },
42164a71
L
10533 { "xend", { Skip_MODRM } },
10534 { "xtest", { Skip_MODRM } },
10535 { Bad_Opcode },
475a2301 10536 },
b844680a 10537 {
1ceb70f8 10538 /* RM_0F01_REG_3 */
4e7d34a6
L
10539 { "vmrun", { Skip_MODRM } },
10540 { "vmmcall", { Skip_MODRM } },
10541 { "vmload", { Skip_MODRM } },
10542 { "vmsave", { Skip_MODRM } },
10543 { "stgi", { Skip_MODRM } },
10544 { "clgi", { Skip_MODRM } },
10545 { "skinit", { Skip_MODRM } },
10546 { "invlpga", { Skip_MODRM } },
10547 },
10548 {
1ceb70f8 10549 /* RM_0F01_REG_7 */
4e7d34a6
L
10550 { "swapgs", { Skip_MODRM } },
10551 { "rdtscp", { Skip_MODRM } },
b844680a
L
10552 },
10553 {
1ceb70f8 10554 /* RM_0FAE_REG_5 */
4e7d34a6 10555 { "lfence", { Skip_MODRM } },
b844680a
L
10556 },
10557 {
1ceb70f8 10558 /* RM_0FAE_REG_6 */
4e7d34a6 10559 { "mfence", { Skip_MODRM } },
b844680a 10560 },
bbedc832 10561 {
1ceb70f8 10562 /* RM_0FAE_REG_7 */
4e7d34a6 10563 { "sfence", { Skip_MODRM } },
144c41d9 10564 },
b844680a
L
10565};
10566
c608c12e
AM
10567#define INTERNAL_DISASSEMBLER_ERROR _("<internal disassembler error>")
10568
f16cd0d5
L
10569/* We use the high bit to indicate different name for the same
10570 prefix. */
10571#define ADDR16_PREFIX (0x67 | 0x100)
10572#define ADDR32_PREFIX (0x67 | 0x200)
10573#define DATA16_PREFIX (0x66 | 0x100)
10574#define DATA32_PREFIX (0x66 | 0x200)
10575#define REP_PREFIX (0xf3 | 0x100)
42164a71
L
10576#define XACQUIRE_PREFIX (0xf2 | 0x200)
10577#define XRELEASE_PREFIX (0xf3 | 0x400)
f16cd0d5
L
10578
10579static int
26ca5450 10580ckprefix (void)
252b5132 10581{
f16cd0d5 10582 int newrex, i, length;
52b15da3 10583 rex = 0;
c0f3af97 10584 rex_ignored = 0;
252b5132 10585 prefixes = 0;
7d421014 10586 used_prefixes = 0;
52b15da3 10587 rex_used = 0;
f16cd0d5
L
10588 last_lock_prefix = -1;
10589 last_repz_prefix = -1;
10590 last_repnz_prefix = -1;
10591 last_data_prefix = -1;
10592 last_addr_prefix = -1;
10593 last_rex_prefix = -1;
10594 last_seg_prefix = -1;
f310f33d
L
10595 for (i = 0; i < (int) ARRAY_SIZE (all_prefixes); i++)
10596 all_prefixes[i] = 0;
10597 i = 0;
f16cd0d5
L
10598 length = 0;
10599 /* The maximum instruction length is 15bytes. */
10600 while (length < MAX_CODE_LENGTH - 1)
252b5132
RH
10601 {
10602 FETCH_DATA (the_info, codep + 1);
52b15da3 10603 newrex = 0;
252b5132
RH
10604 switch (*codep)
10605 {
52b15da3
JH
10606 /* REX prefixes family. */
10607 case 0x40:
10608 case 0x41:
10609 case 0x42:
10610 case 0x43:
10611 case 0x44:
10612 case 0x45:
10613 case 0x46:
10614 case 0x47:
10615 case 0x48:
10616 case 0x49:
10617 case 0x4a:
10618 case 0x4b:
10619 case 0x4c:
10620 case 0x4d:
10621 case 0x4e:
10622 case 0x4f:
f16cd0d5
L
10623 if (address_mode == mode_64bit)
10624 newrex = *codep;
10625 else
10626 return 1;
10627 last_rex_prefix = i;
52b15da3 10628 break;
252b5132
RH
10629 case 0xf3:
10630 prefixes |= PREFIX_REPZ;
f16cd0d5 10631 last_repz_prefix = i;
252b5132
RH
10632 break;
10633 case 0xf2:
10634 prefixes |= PREFIX_REPNZ;
f16cd0d5 10635 last_repnz_prefix = i;
252b5132
RH
10636 break;
10637 case 0xf0:
10638 prefixes |= PREFIX_LOCK;
f16cd0d5 10639 last_lock_prefix = i;
252b5132
RH
10640 break;
10641 case 0x2e:
10642 prefixes |= PREFIX_CS;
f16cd0d5 10643 last_seg_prefix = i;
252b5132
RH
10644 break;
10645 case 0x36:
10646 prefixes |= PREFIX_SS;
f16cd0d5 10647 last_seg_prefix = i;
252b5132
RH
10648 break;
10649 case 0x3e:
10650 prefixes |= PREFIX_DS;
f16cd0d5 10651 last_seg_prefix = i;
252b5132
RH
10652 break;
10653 case 0x26:
10654 prefixes |= PREFIX_ES;
f16cd0d5 10655 last_seg_prefix = i;
252b5132
RH
10656 break;
10657 case 0x64:
10658 prefixes |= PREFIX_FS;
f16cd0d5 10659 last_seg_prefix = i;
252b5132
RH
10660 break;
10661 case 0x65:
10662 prefixes |= PREFIX_GS;
f16cd0d5 10663 last_seg_prefix = i;
252b5132
RH
10664 break;
10665 case 0x66:
10666 prefixes |= PREFIX_DATA;
f16cd0d5 10667 last_data_prefix = i;
252b5132
RH
10668 break;
10669 case 0x67:
10670 prefixes |= PREFIX_ADDR;
f16cd0d5 10671 last_addr_prefix = i;
252b5132 10672 break;
5076851f 10673 case FWAIT_OPCODE:
252b5132
RH
10674 /* fwait is really an instruction. If there are prefixes
10675 before the fwait, they belong to the fwait, *not* to the
10676 following instruction. */
3e7d61b2 10677 if (prefixes || rex)
252b5132
RH
10678 {
10679 prefixes |= PREFIX_FWAIT;
10680 codep++;
f16cd0d5 10681 return 1;
252b5132
RH
10682 }
10683 prefixes = PREFIX_FWAIT;
10684 break;
10685 default:
f16cd0d5 10686 return 1;
252b5132 10687 }
52b15da3
JH
10688 /* Rex is ignored when followed by another prefix. */
10689 if (rex)
10690 {
3e7d61b2 10691 rex_used = rex;
f16cd0d5 10692 return 1;
52b15da3 10693 }
f16cd0d5
L
10694 if (*codep != FWAIT_OPCODE)
10695 all_prefixes[i++] = *codep;
52b15da3 10696 rex = newrex;
252b5132 10697 codep++;
f16cd0d5
L
10698 length++;
10699 }
10700 return 0;
10701}
10702
10703static int
10704seg_prefix (int pref)
10705{
10706 switch (pref)
10707 {
10708 case 0x2e:
10709 return PREFIX_CS;
10710 case 0x36:
10711 return PREFIX_SS;
10712 case 0x3e:
10713 return PREFIX_DS;
10714 case 0x26:
10715 return PREFIX_ES;
10716 case 0x64:
10717 return PREFIX_FS;
10718 case 0x65:
10719 return PREFIX_GS;
10720 default:
10721 return 0;
252b5132
RH
10722 }
10723}
10724
7d421014
ILT
10725/* Return the name of the prefix byte PREF, or NULL if PREF is not a
10726 prefix byte. */
10727
10728static const char *
26ca5450 10729prefix_name (int pref, int sizeflag)
7d421014 10730{
0003779b
L
10731 static const char *rexes [16] =
10732 {
10733 "rex", /* 0x40 */
10734 "rex.B", /* 0x41 */
10735 "rex.X", /* 0x42 */
10736 "rex.XB", /* 0x43 */
10737 "rex.R", /* 0x44 */
10738 "rex.RB", /* 0x45 */
10739 "rex.RX", /* 0x46 */
10740 "rex.RXB", /* 0x47 */
10741 "rex.W", /* 0x48 */
10742 "rex.WB", /* 0x49 */
10743 "rex.WX", /* 0x4a */
10744 "rex.WXB", /* 0x4b */
10745 "rex.WR", /* 0x4c */
10746 "rex.WRB", /* 0x4d */
10747 "rex.WRX", /* 0x4e */
10748 "rex.WRXB", /* 0x4f */
10749 };
10750
7d421014
ILT
10751 switch (pref)
10752 {
52b15da3
JH
10753 /* REX prefixes family. */
10754 case 0x40:
52b15da3 10755 case 0x41:
52b15da3 10756 case 0x42:
52b15da3 10757 case 0x43:
52b15da3 10758 case 0x44:
52b15da3 10759 case 0x45:
52b15da3 10760 case 0x46:
52b15da3 10761 case 0x47:
52b15da3 10762 case 0x48:
52b15da3 10763 case 0x49:
52b15da3 10764 case 0x4a:
52b15da3 10765 case 0x4b:
52b15da3 10766 case 0x4c:
52b15da3 10767 case 0x4d:
52b15da3 10768 case 0x4e:
52b15da3 10769 case 0x4f:
0003779b 10770 return rexes [pref - 0x40];
7d421014
ILT
10771 case 0xf3:
10772 return "repz";
10773 case 0xf2:
10774 return "repnz";
10775 case 0xf0:
10776 return "lock";
10777 case 0x2e:
10778 return "cs";
10779 case 0x36:
10780 return "ss";
10781 case 0x3e:
10782 return "ds";
10783 case 0x26:
10784 return "es";
10785 case 0x64:
10786 return "fs";
10787 case 0x65:
10788 return "gs";
10789 case 0x66:
10790 return (sizeflag & DFLAG) ? "data16" : "data32";
10791 case 0x67:
cb712a9e 10792 if (address_mode == mode_64bit)
db6eb5be 10793 return (sizeflag & AFLAG) ? "addr32" : "addr64";
c1a64871 10794 else
2888cb7a 10795 return (sizeflag & AFLAG) ? "addr16" : "addr32";
7d421014
ILT
10796 case FWAIT_OPCODE:
10797 return "fwait";
f16cd0d5
L
10798 case ADDR16_PREFIX:
10799 return "addr16";
10800 case ADDR32_PREFIX:
10801 return "addr32";
10802 case DATA16_PREFIX:
10803 return "data16";
10804 case DATA32_PREFIX:
10805 return "data32";
10806 case REP_PREFIX:
10807 return "rep";
42164a71
L
10808 case XACQUIRE_PREFIX:
10809 return "xacquire";
10810 case XRELEASE_PREFIX:
10811 return "xrelease";
7d421014
ILT
10812 default:
10813 return NULL;
10814 }
10815}
10816
ce518a5f
L
10817static char op_out[MAX_OPERANDS][100];
10818static int op_ad, op_index[MAX_OPERANDS];
1d9f512f 10819static int two_source_ops;
ce518a5f
L
10820static bfd_vma op_address[MAX_OPERANDS];
10821static bfd_vma op_riprel[MAX_OPERANDS];
52b15da3 10822static bfd_vma start_pc;
ce518a5f 10823
252b5132
RH
10824/*
10825 * On the 386's of 1988, the maximum length of an instruction is 15 bytes.
10826 * (see topic "Redundant prefixes" in the "Differences from 8086"
10827 * section of the "Virtual 8086 Mode" chapter.)
10828 * 'pc' should be the address of this instruction, it will
10829 * be used to print the target address if this is a relative jump or call
10830 * The function returns the length of this instruction in bytes.
10831 */
10832
252b5132 10833static char intel_syntax;
9d141669 10834static char intel_mnemonic = !SYSV386_COMPAT;
252b5132
RH
10835static char open_char;
10836static char close_char;
10837static char separator_char;
10838static char scale_char;
10839
e396998b
AM
10840/* Here for backwards compatibility. When gdb stops using
10841 print_insn_i386_att and print_insn_i386_intel these functions can
10842 disappear, and print_insn_i386 be merged into print_insn. */
252b5132 10843int
26ca5450 10844print_insn_i386_att (bfd_vma pc, disassemble_info *info)
252b5132
RH
10845{
10846 intel_syntax = 0;
e396998b
AM
10847
10848 return print_insn (pc, info);
252b5132
RH
10849}
10850
10851int
26ca5450 10852print_insn_i386_intel (bfd_vma pc, disassemble_info *info)
252b5132
RH
10853{
10854 intel_syntax = 1;
e396998b
AM
10855
10856 return print_insn (pc, info);
252b5132
RH
10857}
10858
e396998b 10859int
26ca5450 10860print_insn_i386 (bfd_vma pc, disassemble_info *info)
e396998b
AM
10861{
10862 intel_syntax = -1;
10863
10864 return print_insn (pc, info);
10865}
10866
f59a29b9
L
10867void
10868print_i386_disassembler_options (FILE *stream)
10869{
10870 fprintf (stream, _("\n\
10871The following i386/x86-64 specific disassembler options are supported for use\n\
10872with the -M switch (multiple options should be separated by commas):\n"));
10873
10874 fprintf (stream, _(" x86-64 Disassemble in 64bit mode\n"));
10875 fprintf (stream, _(" i386 Disassemble in 32bit mode\n"));
10876 fprintf (stream, _(" i8086 Disassemble in 16bit mode\n"));
10877 fprintf (stream, _(" att Display instruction in AT&T syntax\n"));
10878 fprintf (stream, _(" intel Display instruction in Intel syntax\n"));
9d141669
L
10879 fprintf (stream, _(" att-mnemonic\n"
10880 " Display instruction in AT&T mnemonic\n"));
10881 fprintf (stream, _(" intel-mnemonic\n"
10882 " Display instruction in Intel mnemonic\n"));
f59a29b9
L
10883 fprintf (stream, _(" addr64 Assume 64bit address size\n"));
10884 fprintf (stream, _(" addr32 Assume 32bit address size\n"));
10885 fprintf (stream, _(" addr16 Assume 16bit address size\n"));
10886 fprintf (stream, _(" data32 Assume 32bit data size\n"));
10887 fprintf (stream, _(" data16 Assume 16bit data size\n"));
10888 fprintf (stream, _(" suffix Always display instruction suffix in AT&T syntax\n"));
10889}
10890
592d1631
L
10891/* Bad opcode. */
10892static const struct dis386 bad_opcode = { "(bad)", { XX } };
10893
b844680a
L
10894/* Get a pointer to struct dis386 with a valid name. */
10895
10896static const struct dis386 *
8bb15339 10897get_valid_dis386 (const struct dis386 *dp, disassemble_info *info)
b844680a 10898{
91d6fa6a 10899 int vindex, vex_table_index;
b844680a
L
10900
10901 if (dp->name != NULL)
10902 return dp;
10903
10904 switch (dp->op[0].bytemode)
10905 {
1ceb70f8
L
10906 case USE_REG_TABLE:
10907 dp = &reg_table[dp->op[1].bytemode][modrm.reg];
10908 break;
10909
10910 case USE_MOD_TABLE:
91d6fa6a
NC
10911 vindex = modrm.mod == 0x3 ? 1 : 0;
10912 dp = &mod_table[dp->op[1].bytemode][vindex];
1ceb70f8
L
10913 break;
10914
10915 case USE_RM_TABLE:
10916 dp = &rm_table[dp->op[1].bytemode][modrm.rm];
b844680a
L
10917 break;
10918
4e7d34a6 10919 case USE_PREFIX_TABLE:
c0f3af97 10920 if (need_vex)
b844680a 10921 {
c0f3af97
L
10922 /* The prefix in VEX is implicit. */
10923 switch (vex.prefix)
10924 {
10925 case 0:
91d6fa6a 10926 vindex = 0;
c0f3af97
L
10927 break;
10928 case REPE_PREFIX_OPCODE:
91d6fa6a 10929 vindex = 1;
c0f3af97
L
10930 break;
10931 case DATA_PREFIX_OPCODE:
91d6fa6a 10932 vindex = 2;
c0f3af97
L
10933 break;
10934 case REPNE_PREFIX_OPCODE:
91d6fa6a 10935 vindex = 3;
c0f3af97
L
10936 break;
10937 default:
10938 abort ();
10939 break;
10940 }
b844680a 10941 }
c0f3af97 10942 else
b844680a 10943 {
91d6fa6a 10944 vindex = 0;
c0f3af97
L
10945 used_prefixes |= (prefixes & PREFIX_REPZ);
10946 if (prefixes & PREFIX_REPZ)
b844680a 10947 {
91d6fa6a 10948 vindex = 1;
f16cd0d5 10949 all_prefixes[last_repz_prefix] = 0;
b844680a
L
10950 }
10951 else
10952 {
c0f3af97
L
10953 /* We should check PREFIX_REPNZ and PREFIX_REPZ before
10954 PREFIX_DATA. */
10955 used_prefixes |= (prefixes & PREFIX_REPNZ);
10956 if (prefixes & PREFIX_REPNZ)
10957 {
91d6fa6a 10958 vindex = 3;
f16cd0d5 10959 all_prefixes[last_repnz_prefix] = 0;
c0f3af97
L
10960 }
10961 else
b844680a 10962 {
c0f3af97
L
10963 used_prefixes |= (prefixes & PREFIX_DATA);
10964 if (prefixes & PREFIX_DATA)
10965 {
91d6fa6a 10966 vindex = 2;
f16cd0d5 10967 all_prefixes[last_data_prefix] = 0;
c0f3af97 10968 }
b844680a
L
10969 }
10970 }
10971 }
91d6fa6a 10972 dp = &prefix_table[dp->op[1].bytemode][vindex];
b844680a
L
10973 break;
10974
4e7d34a6 10975 case USE_X86_64_TABLE:
91d6fa6a
NC
10976 vindex = address_mode == mode_64bit ? 1 : 0;
10977 dp = &x86_64_table[dp->op[1].bytemode][vindex];
b844680a
L
10978 break;
10979
4e7d34a6 10980 case USE_3BYTE_TABLE:
8bb15339 10981 FETCH_DATA (info, codep + 2);
91d6fa6a
NC
10982 vindex = *codep++;
10983 dp = &three_byte_table[dp->op[1].bytemode][vindex];
8bb15339
L
10984 modrm.mod = (*codep >> 6) & 3;
10985 modrm.reg = (*codep >> 3) & 7;
10986 modrm.rm = *codep & 7;
10987 break;
10988
c0f3af97
L
10989 case USE_VEX_LEN_TABLE:
10990 if (!need_vex)
10991 abort ();
10992
10993 switch (vex.length)
10994 {
10995 case 128:
91d6fa6a 10996 vindex = 0;
c0f3af97
L
10997 break;
10998 case 256:
91d6fa6a 10999 vindex = 1;
c0f3af97
L
11000 break;
11001 default:
11002 abort ();
11003 break;
11004 }
11005
91d6fa6a 11006 dp = &vex_len_table[dp->op[1].bytemode][vindex];
c0f3af97
L
11007 break;
11008
f88c9eb0
SP
11009 case USE_XOP_8F_TABLE:
11010 FETCH_DATA (info, codep + 3);
11011 /* All bits in the REX prefix are ignored. */
11012 rex_ignored = rex;
11013 rex = ~(*codep >> 5) & 0x7;
11014
11015 /* VEX_TABLE_INDEX is the mmmmm part of the XOP byte 1 "RCB.mmmmm". */
11016 switch ((*codep & 0x1f))
11017 {
11018 default:
f07af43e
L
11019 dp = &bad_opcode;
11020 return dp;
5dd85c99
SP
11021 case 0x8:
11022 vex_table_index = XOP_08;
11023 break;
f88c9eb0
SP
11024 case 0x9:
11025 vex_table_index = XOP_09;
11026 break;
11027 case 0xa:
11028 vex_table_index = XOP_0A;
11029 break;
11030 }
11031 codep++;
11032 vex.w = *codep & 0x80;
11033 if (vex.w && address_mode == mode_64bit)
11034 rex |= REX_W;
11035
11036 vex.register_specifier = (~(*codep >> 3)) & 0xf;
11037 if (address_mode != mode_64bit
11038 && vex.register_specifier > 0x7)
f07af43e
L
11039 {
11040 dp = &bad_opcode;
11041 return dp;
11042 }
f88c9eb0
SP
11043
11044 vex.length = (*codep & 0x4) ? 256 : 128;
11045 switch ((*codep & 0x3))
11046 {
11047 case 0:
11048 vex.prefix = 0;
11049 break;
11050 case 1:
11051 vex.prefix = DATA_PREFIX_OPCODE;
11052 break;
11053 case 2:
11054 vex.prefix = REPE_PREFIX_OPCODE;
11055 break;
11056 case 3:
11057 vex.prefix = REPNE_PREFIX_OPCODE;
11058 break;
11059 }
11060 need_vex = 1;
11061 need_vex_reg = 1;
11062 codep++;
91d6fa6a
NC
11063 vindex = *codep++;
11064 dp = &xop_table[vex_table_index][vindex];
c48244a5
SP
11065
11066 FETCH_DATA (info, codep + 1);
11067 modrm.mod = (*codep >> 6) & 3;
11068 modrm.reg = (*codep >> 3) & 7;
11069 modrm.rm = *codep & 7;
f88c9eb0
SP
11070 break;
11071
c0f3af97
L
11072 case USE_VEX_C4_TABLE:
11073 FETCH_DATA (info, codep + 3);
11074 /* All bits in the REX prefix are ignored. */
11075 rex_ignored = rex;
11076 rex = ~(*codep >> 5) & 0x7;
11077 switch ((*codep & 0x1f))
11078 {
11079 default:
f07af43e
L
11080 dp = &bad_opcode;
11081 return dp;
c0f3af97 11082 case 0x1:
f88c9eb0 11083 vex_table_index = VEX_0F;
c0f3af97
L
11084 break;
11085 case 0x2:
f88c9eb0 11086 vex_table_index = VEX_0F38;
c0f3af97
L
11087 break;
11088 case 0x3:
f88c9eb0 11089 vex_table_index = VEX_0F3A;
c0f3af97
L
11090 break;
11091 }
11092 codep++;
11093 vex.w = *codep & 0x80;
11094 if (vex.w && address_mode == mode_64bit)
11095 rex |= REX_W;
11096
11097 vex.register_specifier = (~(*codep >> 3)) & 0xf;
11098 if (address_mode != mode_64bit
11099 && vex.register_specifier > 0x7)
f07af43e
L
11100 {
11101 dp = &bad_opcode;
11102 return dp;
11103 }
c0f3af97
L
11104
11105 vex.length = (*codep & 0x4) ? 256 : 128;
11106 switch ((*codep & 0x3))
11107 {
11108 case 0:
11109 vex.prefix = 0;
11110 break;
11111 case 1:
11112 vex.prefix = DATA_PREFIX_OPCODE;
11113 break;
11114 case 2:
11115 vex.prefix = REPE_PREFIX_OPCODE;
11116 break;
11117 case 3:
11118 vex.prefix = REPNE_PREFIX_OPCODE;
11119 break;
11120 }
11121 need_vex = 1;
11122 need_vex_reg = 1;
11123 codep++;
91d6fa6a
NC
11124 vindex = *codep++;
11125 dp = &vex_table[vex_table_index][vindex];
c0f3af97 11126 /* There is no MODRM byte for VEX [82|77]. */
91d6fa6a 11127 if (vindex != 0x77 && vindex != 0x82)
c0f3af97
L
11128 {
11129 FETCH_DATA (info, codep + 1);
11130 modrm.mod = (*codep >> 6) & 3;
11131 modrm.reg = (*codep >> 3) & 7;
11132 modrm.rm = *codep & 7;
11133 }
11134 break;
11135
11136 case USE_VEX_C5_TABLE:
11137 FETCH_DATA (info, codep + 2);
11138 /* All bits in the REX prefix are ignored. */
11139 rex_ignored = rex;
11140 rex = (*codep & 0x80) ? 0 : REX_R;
11141
11142 vex.register_specifier = (~(*codep >> 3)) & 0xf;
11143 if (address_mode != mode_64bit
11144 && vex.register_specifier > 0x7)
f07af43e
L
11145 {
11146 dp = &bad_opcode;
11147 return dp;
11148 }
c0f3af97 11149
759a05ce
L
11150 vex.w = 0;
11151
c0f3af97
L
11152 vex.length = (*codep & 0x4) ? 256 : 128;
11153 switch ((*codep & 0x3))
11154 {
11155 case 0:
11156 vex.prefix = 0;
11157 break;
11158 case 1:
11159 vex.prefix = DATA_PREFIX_OPCODE;
11160 break;
11161 case 2:
11162 vex.prefix = REPE_PREFIX_OPCODE;
11163 break;
11164 case 3:
11165 vex.prefix = REPNE_PREFIX_OPCODE;
11166 break;
11167 }
11168 need_vex = 1;
11169 need_vex_reg = 1;
11170 codep++;
91d6fa6a
NC
11171 vindex = *codep++;
11172 dp = &vex_table[dp->op[1].bytemode][vindex];
c0f3af97 11173 /* There is no MODRM byte for VEX [82|77]. */
91d6fa6a 11174 if (vindex != 0x77 && vindex != 0x82)
c0f3af97
L
11175 {
11176 FETCH_DATA (info, codep + 1);
11177 modrm.mod = (*codep >> 6) & 3;
11178 modrm.reg = (*codep >> 3) & 7;
11179 modrm.rm = *codep & 7;
11180 }
11181 break;
11182
9e30b8e0
L
11183 case USE_VEX_W_TABLE:
11184 if (!need_vex)
11185 abort ();
11186
11187 dp = &vex_w_table[dp->op[1].bytemode][vex.w ? 1 : 0];
11188 break;
11189
592d1631
L
11190 case 0:
11191 dp = &bad_opcode;
11192 break;
11193
b844680a 11194 default:
d34b5006 11195 abort ();
b844680a
L
11196 }
11197
11198 if (dp->name != NULL)
11199 return dp;
11200 else
8bb15339 11201 return get_valid_dis386 (dp, info);
b844680a
L
11202}
11203
dfc8cf43
L
11204static void
11205get_sib (disassemble_info *info)
11206{
11207 /* If modrm.mod == 3, operand must be register. */
11208 if (need_modrm
11209 && address_mode != mode_16bit
11210 && modrm.mod != 3
11211 && modrm.rm == 4)
11212 {
11213 FETCH_DATA (info, codep + 2);
11214 sib.index = (codep [1] >> 3) & 7;
11215 sib.scale = (codep [1] >> 6) & 3;
11216 sib.base = codep [1] & 7;
11217 }
11218}
11219
e396998b 11220static int
26ca5450 11221print_insn (bfd_vma pc, disassemble_info *info)
252b5132 11222{
2da11e11 11223 const struct dis386 *dp;
252b5132 11224 int i;
ce518a5f 11225 char *op_txt[MAX_OPERANDS];
252b5132 11226 int needcomma;
e396998b
AM
11227 int sizeflag;
11228 const char *p;
252b5132 11229 struct dis_private priv;
f16cd0d5
L
11230 int prefix_length;
11231 int default_prefixes;
252b5132 11232
d7921315
L
11233 priv.orig_sizeflag = AFLAG | DFLAG;
11234 if ((info->mach & bfd_mach_i386_i386) != 0)
cb712a9e 11235 address_mode = mode_32bit;
2da11e11 11236 else if (info->mach == bfd_mach_i386_i8086)
d7921315
L
11237 {
11238 address_mode = mode_16bit;
11239 priv.orig_sizeflag = 0;
11240 }
2da11e11 11241 else
d7921315
L
11242 address_mode = mode_64bit;
11243
11244 if (intel_syntax == (char) -1)
11245 intel_syntax = (info->mach & bfd_mach_i386_intel_syntax) != 0;
e396998b
AM
11246
11247 for (p = info->disassembler_options; p != NULL; )
11248 {
0112cd26 11249 if (CONST_STRNEQ (p, "x86-64"))
e396998b 11250 {
cb712a9e 11251 address_mode = mode_64bit;
e396998b
AM
11252 priv.orig_sizeflag = AFLAG | DFLAG;
11253 }
0112cd26 11254 else if (CONST_STRNEQ (p, "i386"))
e396998b 11255 {
cb712a9e 11256 address_mode = mode_32bit;
e396998b
AM
11257 priv.orig_sizeflag = AFLAG | DFLAG;
11258 }
0112cd26 11259 else if (CONST_STRNEQ (p, "i8086"))
e396998b 11260 {
cb712a9e 11261 address_mode = mode_16bit;
e396998b
AM
11262 priv.orig_sizeflag = 0;
11263 }
0112cd26 11264 else if (CONST_STRNEQ (p, "intel"))
e396998b
AM
11265 {
11266 intel_syntax = 1;
9d141669
L
11267 if (CONST_STRNEQ (p + 5, "-mnemonic"))
11268 intel_mnemonic = 1;
e396998b 11269 }
0112cd26 11270 else if (CONST_STRNEQ (p, "att"))
e396998b
AM
11271 {
11272 intel_syntax = 0;
9d141669
L
11273 if (CONST_STRNEQ (p + 3, "-mnemonic"))
11274 intel_mnemonic = 0;
e396998b 11275 }
0112cd26 11276 else if (CONST_STRNEQ (p, "addr"))
e396998b 11277 {
f59a29b9
L
11278 if (address_mode == mode_64bit)
11279 {
11280 if (p[4] == '3' && p[5] == '2')
11281 priv.orig_sizeflag &= ~AFLAG;
11282 else if (p[4] == '6' && p[5] == '4')
11283 priv.orig_sizeflag |= AFLAG;
11284 }
11285 else
11286 {
11287 if (p[4] == '1' && p[5] == '6')
11288 priv.orig_sizeflag &= ~AFLAG;
11289 else if (p[4] == '3' && p[5] == '2')
11290 priv.orig_sizeflag |= AFLAG;
11291 }
e396998b 11292 }
0112cd26 11293 else if (CONST_STRNEQ (p, "data"))
e396998b
AM
11294 {
11295 if (p[4] == '1' && p[5] == '6')
11296 priv.orig_sizeflag &= ~DFLAG;
11297 else if (p[4] == '3' && p[5] == '2')
11298 priv.orig_sizeflag |= DFLAG;
11299 }
0112cd26 11300 else if (CONST_STRNEQ (p, "suffix"))
e396998b
AM
11301 priv.orig_sizeflag |= SUFFIX_ALWAYS;
11302
11303 p = strchr (p, ',');
11304 if (p != NULL)
11305 p++;
11306 }
11307
11308 if (intel_syntax)
11309 {
11310 names64 = intel_names64;
11311 names32 = intel_names32;
11312 names16 = intel_names16;
11313 names8 = intel_names8;
11314 names8rex = intel_names8rex;
11315 names_seg = intel_names_seg;
b9733481
L
11316 names_mm = intel_names_mm;
11317 names_xmm = intel_names_xmm;
11318 names_ymm = intel_names_ymm;
db51cc60
L
11319 index64 = intel_index64;
11320 index32 = intel_index32;
e396998b
AM
11321 index16 = intel_index16;
11322 open_char = '[';
11323 close_char = ']';
11324 separator_char = '+';
11325 scale_char = '*';
11326 }
11327 else
11328 {
11329 names64 = att_names64;
11330 names32 = att_names32;
11331 names16 = att_names16;
11332 names8 = att_names8;
11333 names8rex = att_names8rex;
11334 names_seg = att_names_seg;
b9733481
L
11335 names_mm = att_names_mm;
11336 names_xmm = att_names_xmm;
11337 names_ymm = att_names_ymm;
db51cc60
L
11338 index64 = att_index64;
11339 index32 = att_index32;
e396998b
AM
11340 index16 = att_index16;
11341 open_char = '(';
11342 close_char = ')';
11343 separator_char = ',';
11344 scale_char = ',';
11345 }
2da11e11 11346
4fe53c98 11347 /* The output looks better if we put 7 bytes on a line, since that
8a9036a4
L
11348 puts most long word instructions on a single line. Use 8 bytes
11349 for Intel L1OM. */
d7921315 11350 if ((info->mach & bfd_mach_l1om) != 0)
8a9036a4
L
11351 info->bytes_per_line = 8;
11352 else
11353 info->bytes_per_line = 7;
252b5132 11354
26ca5450 11355 info->private_data = &priv;
252b5132
RH
11356 priv.max_fetched = priv.the_buffer;
11357 priv.insn_start = pc;
252b5132
RH
11358
11359 obuf[0] = 0;
ce518a5f
L
11360 for (i = 0; i < MAX_OPERANDS; ++i)
11361 {
11362 op_out[i][0] = 0;
11363 op_index[i] = -1;
11364 }
252b5132
RH
11365
11366 the_info = info;
11367 start_pc = pc;
e396998b
AM
11368 start_codep = priv.the_buffer;
11369 codep = priv.the_buffer;
252b5132 11370
5076851f
ILT
11371 if (setjmp (priv.bailout) != 0)
11372 {
7d421014
ILT
11373 const char *name;
11374
5076851f 11375 /* Getting here means we tried for data but didn't get it. That
e396998b
AM
11376 means we have an incomplete instruction of some sort. Just
11377 print the first byte as a prefix or a .byte pseudo-op. */
11378 if (codep > priv.the_buffer)
5076851f 11379 {
e396998b 11380 name = prefix_name (priv.the_buffer[0], priv.orig_sizeflag);
7d421014
ILT
11381 if (name != NULL)
11382 (*info->fprintf_func) (info->stream, "%s", name);
11383 else
5076851f 11384 {
7d421014
ILT
11385 /* Just print the first byte as a .byte instruction. */
11386 (*info->fprintf_func) (info->stream, ".byte 0x%x",
e396998b 11387 (unsigned int) priv.the_buffer[0]);
5076851f 11388 }
5076851f 11389
7d421014 11390 return 1;
5076851f
ILT
11391 }
11392
11393 return -1;
11394 }
11395
52b15da3 11396 obufp = obuf;
f16cd0d5
L
11397 sizeflag = priv.orig_sizeflag;
11398
11399 if (!ckprefix () || rex_used)
11400 {
11401 /* Too many prefixes or unused REX prefixes. */
11402 for (i = 0;
f6dd4781 11403 i < (int) ARRAY_SIZE (all_prefixes) && all_prefixes[i];
f16cd0d5
L
11404 i++)
11405 (*info->fprintf_func) (info->stream, "%s",
11406 prefix_name (all_prefixes[i], sizeflag));
11407 return 1;
11408 }
252b5132
RH
11409
11410 insn_codep = codep;
11411
11412 FETCH_DATA (info, codep + 1);
11413 two_source_ops = (*codep == 0x62) || (*codep == 0xc8);
11414
3e7d61b2 11415 if (((prefixes & PREFIX_FWAIT)
f16cd0d5 11416 && ((*codep < 0xd8) || (*codep > 0xdf))))
252b5132 11417 {
f16cd0d5 11418 (*info->fprintf_func) (info->stream, "fwait");
7d421014 11419 return 1;
252b5132
RH
11420 }
11421
252b5132
RH
11422 if (*codep == 0x0f)
11423 {
eec0f4ca 11424 unsigned char threebyte;
252b5132 11425 FETCH_DATA (info, codep + 2);
eec0f4ca
L
11426 threebyte = *++codep;
11427 dp = &dis386_twobyte[threebyte];
252b5132 11428 need_modrm = twobyte_has_modrm[*codep];
eec0f4ca 11429 codep++;
252b5132
RH
11430 }
11431 else
11432 {
6439fc28 11433 dp = &dis386[*codep];
252b5132 11434 need_modrm = onebyte_has_modrm[*codep];
eec0f4ca 11435 codep++;
252b5132 11436 }
246c51aa 11437
b844680a 11438 if ((prefixes & PREFIX_REPZ))
f16cd0d5 11439 used_prefixes |= PREFIX_REPZ;
b844680a 11440 if ((prefixes & PREFIX_REPNZ))
f16cd0d5 11441 used_prefixes |= PREFIX_REPNZ;
b844680a 11442 if ((prefixes & PREFIX_LOCK))
f16cd0d5 11443 used_prefixes |= PREFIX_LOCK;
c608c12e 11444
f16cd0d5 11445 default_prefixes = 0;
c608c12e
AM
11446 if (prefixes & PREFIX_ADDR)
11447 {
11448 sizeflag ^= AFLAG;
ce518a5f 11449 if (dp->op[2].bytemode != loop_jcxz_mode || intel_syntax)
3ffd33cf 11450 {
cb712a9e 11451 if ((sizeflag & AFLAG) || address_mode == mode_64bit)
f16cd0d5 11452 all_prefixes[last_addr_prefix] = ADDR32_PREFIX;
3ffd33cf 11453 else
f16cd0d5
L
11454 all_prefixes[last_addr_prefix] = ADDR16_PREFIX;
11455 default_prefixes |= PREFIX_ADDR;
3ffd33cf
AM
11456 }
11457 }
11458
b844680a 11459 if ((prefixes & PREFIX_DATA))
3ffd33cf
AM
11460 {
11461 sizeflag ^= DFLAG;
ce518a5f
L
11462 if (dp->op[2].bytemode == cond_jump_mode
11463 && dp->op[0].bytemode == v_mode
6439fc28 11464 && !intel_syntax)
3ffd33cf
AM
11465 {
11466 if (sizeflag & DFLAG)
f16cd0d5 11467 all_prefixes[last_data_prefix] = DATA32_PREFIX;
3ffd33cf 11468 else
f16cd0d5
L
11469 all_prefixes[last_data_prefix] = DATA16_PREFIX;
11470 default_prefixes |= PREFIX_DATA;
11471 }
11472 else if (rex & REX_W)
11473 {
11474 /* REX_W will override PREFIX_DATA. */
11475 default_prefixes |= PREFIX_DATA;
3ffd33cf
AM
11476 }
11477 }
11478
8bb15339 11479 if (need_modrm)
252b5132
RH
11480 {
11481 FETCH_DATA (info, codep + 1);
7967e09e
L
11482 modrm.mod = (*codep >> 6) & 3;
11483 modrm.reg = (*codep >> 3) & 7;
11484 modrm.rm = *codep & 7;
252b5132
RH
11485 }
11486
42d5f9c6
MS
11487 need_vex = 0;
11488 need_vex_reg = 0;
11489 vex_w_done = 0;
55b126d4 11490
ce518a5f 11491 if (dp->name == NULL && dp->op[0].bytemode == FLOATCODE)
252b5132 11492 {
dfc8cf43 11493 get_sib (info);
252b5132
RH
11494 dofloat (sizeflag);
11495 }
11496 else
11497 {
8bb15339 11498 dp = get_valid_dis386 (dp, info);
b844680a 11499 if (dp != NULL && putop (dp->name, sizeflag) == 0)
ce518a5f 11500 {
dfc8cf43 11501 get_sib (info);
ce518a5f
L
11502 for (i = 0; i < MAX_OPERANDS; ++i)
11503 {
246c51aa 11504 obufp = op_out[i];
ce518a5f
L
11505 op_ad = MAX_OPERANDS - 1 - i;
11506 if (dp->op[i].rtn)
11507 (*dp->op[i].rtn) (dp->op[i].bytemode, sizeflag);
11508 }
6439fc28 11509 }
252b5132
RH
11510 }
11511
7d421014
ILT
11512 /* See if any prefixes were not used. If so, print the first one
11513 separately. If we don't do this, we'll wind up printing an
11514 instruction stream which does not precisely correspond to the
11515 bytes we are disassembling. */
f16cd0d5 11516 if ((prefixes & ~(used_prefixes | default_prefixes)) != 0)
7d421014 11517 {
f16cd0d5
L
11518 for (i = 0; i < (int) ARRAY_SIZE (all_prefixes); i++)
11519 if (all_prefixes[i])
11520 {
11521 const char *name;
11522 name = prefix_name (all_prefixes[i], priv.orig_sizeflag);
11523 if (name == NULL)
11524 name = INTERNAL_DISASSEMBLER_ERROR;
11525 (*info->fprintf_func) (info->stream, "%s", name);
11526 return 1;
11527 }
52b15da3 11528 }
7d421014 11529
d869730d 11530 /* Check if the REX prefix is used. */
2a70cca4 11531 if (rex_ignored == 0 && (rex ^ rex_used) == 0)
f16cd0d5
L
11532 all_prefixes[last_rex_prefix] = 0;
11533
5e6718e4 11534 /* Check if the SEG prefix is used. */
f16cd0d5
L
11535 if ((prefixes & (PREFIX_CS | PREFIX_SS | PREFIX_DS | PREFIX_ES
11536 | PREFIX_FS | PREFIX_GS)) != 0
11537 && (used_prefixes
11538 & seg_prefix (all_prefixes[last_seg_prefix])) != 0)
11539 all_prefixes[last_seg_prefix] = 0;
11540
5e6718e4 11541 /* Check if the ADDR prefix is used. */
f16cd0d5
L
11542 if ((prefixes & PREFIX_ADDR) != 0
11543 && (used_prefixes & PREFIX_ADDR) != 0)
11544 all_prefixes[last_addr_prefix] = 0;
11545
5e6718e4 11546 /* Check if the DATA prefix is used. */
f16cd0d5
L
11547 if ((prefixes & PREFIX_DATA) != 0
11548 && (used_prefixes & PREFIX_DATA) != 0)
11549 all_prefixes[last_data_prefix] = 0;
11550
11551 prefix_length = 0;
f310f33d 11552 for (i = 0; i < (int) ARRAY_SIZE (all_prefixes); i++)
f16cd0d5
L
11553 if (all_prefixes[i])
11554 {
11555 const char *name;
11556 name = prefix_name (all_prefixes[i], sizeflag);
11557 if (name == NULL)
11558 abort ();
11559 prefix_length += strlen (name) + 1;
11560 (*info->fprintf_func) (info->stream, "%s ", name);
11561 }
b844680a 11562
f16cd0d5
L
11563 /* Check maximum code length. */
11564 if ((codep - start_codep) > MAX_CODE_LENGTH)
11565 {
11566 (*info->fprintf_func) (info->stream, "(bad)");
11567 return MAX_CODE_LENGTH;
11568 }
b844680a 11569
ea397f5b 11570 obufp = mnemonicendp;
f16cd0d5 11571 for (i = strlen (obuf) + prefix_length; i < 6; i++)
252b5132
RH
11572 oappend (" ");
11573 oappend (" ");
11574 (*info->fprintf_func) (info->stream, "%s", obuf);
11575
11576 /* The enter and bound instructions are printed with operands in the same
11577 order as the intel book; everything else is printed in reverse order. */
2da11e11 11578 if (intel_syntax || two_source_ops)
252b5132 11579 {
185b1163
L
11580 bfd_vma riprel;
11581
ce518a5f
L
11582 for (i = 0; i < MAX_OPERANDS; ++i)
11583 op_txt[i] = op_out[i];
246c51aa 11584
ce518a5f
L
11585 for (i = 0; i < (MAX_OPERANDS >> 1); ++i)
11586 {
11587 op_ad = op_index[i];
11588 op_index[i] = op_index[MAX_OPERANDS - 1 - i];
11589 op_index[MAX_OPERANDS - 1 - i] = op_ad;
185b1163
L
11590 riprel = op_riprel[i];
11591 op_riprel[i] = op_riprel [MAX_OPERANDS - 1 - i];
11592 op_riprel[MAX_OPERANDS - 1 - i] = riprel;
ce518a5f 11593 }
252b5132
RH
11594 }
11595 else
11596 {
ce518a5f
L
11597 for (i = 0; i < MAX_OPERANDS; ++i)
11598 op_txt[MAX_OPERANDS - 1 - i] = op_out[i];
050dfa73
MM
11599 }
11600
ce518a5f
L
11601 needcomma = 0;
11602 for (i = 0; i < MAX_OPERANDS; ++i)
11603 if (*op_txt[i])
11604 {
11605 if (needcomma)
11606 (*info->fprintf_func) (info->stream, ",");
11607 if (op_index[i] != -1 && !op_riprel[i])
11608 (*info->print_address_func) ((bfd_vma) op_address[op_index[i]], info);
11609 else
11610 (*info->fprintf_func) (info->stream, "%s", op_txt[i]);
11611 needcomma = 1;
11612 }
050dfa73 11613
ce518a5f 11614 for (i = 0; i < MAX_OPERANDS; i++)
52b15da3
JH
11615 if (op_index[i] != -1 && op_riprel[i])
11616 {
11617 (*info->fprintf_func) (info->stream, " # ");
11618 (*info->print_address_func) ((bfd_vma) (start_pc + codep - start_codep
11619 + op_address[op_index[i]]), info);
185b1163 11620 break;
52b15da3 11621 }
e396998b 11622 return codep - priv.the_buffer;
252b5132
RH
11623}
11624
6439fc28 11625static const char *float_mem[] = {
252b5132 11626 /* d8 */
7c52e0e8
L
11627 "fadd{s|}",
11628 "fmul{s|}",
11629 "fcom{s|}",
11630 "fcomp{s|}",
11631 "fsub{s|}",
11632 "fsubr{s|}",
11633 "fdiv{s|}",
11634 "fdivr{s|}",
db6eb5be 11635 /* d9 */
7c52e0e8 11636 "fld{s|}",
252b5132 11637 "(bad)",
7c52e0e8
L
11638 "fst{s|}",
11639 "fstp{s|}",
9306ca4a 11640 "fldenvIC",
252b5132 11641 "fldcw",
9306ca4a 11642 "fNstenvIC",
252b5132
RH
11643 "fNstcw",
11644 /* da */
7c52e0e8
L
11645 "fiadd{l|}",
11646 "fimul{l|}",
11647 "ficom{l|}",
11648 "ficomp{l|}",
11649 "fisub{l|}",
11650 "fisubr{l|}",
11651 "fidiv{l|}",
11652 "fidivr{l|}",
252b5132 11653 /* db */
7c52e0e8
L
11654 "fild{l|}",
11655 "fisttp{l|}",
11656 "fist{l|}",
11657 "fistp{l|}",
252b5132 11658 "(bad)",
6439fc28 11659 "fld{t||t|}",
252b5132 11660 "(bad)",
6439fc28 11661 "fstp{t||t|}",
252b5132 11662 /* dc */
7c52e0e8
L
11663 "fadd{l|}",
11664 "fmul{l|}",
11665 "fcom{l|}",
11666 "fcomp{l|}",
11667 "fsub{l|}",
11668 "fsubr{l|}",
11669 "fdiv{l|}",
11670 "fdivr{l|}",
252b5132 11671 /* dd */
7c52e0e8
L
11672 "fld{l|}",
11673 "fisttp{ll|}",
11674 "fst{l||}",
11675 "fstp{l|}",
9306ca4a 11676 "frstorIC",
252b5132 11677 "(bad)",
9306ca4a 11678 "fNsaveIC",
252b5132
RH
11679 "fNstsw",
11680 /* de */
11681 "fiadd",
11682 "fimul",
11683 "ficom",
11684 "ficomp",
11685 "fisub",
11686 "fisubr",
11687 "fidiv",
11688 "fidivr",
11689 /* df */
11690 "fild",
ca164297 11691 "fisttp",
252b5132
RH
11692 "fist",
11693 "fistp",
11694 "fbld",
7c52e0e8 11695 "fild{ll|}",
252b5132 11696 "fbstp",
7c52e0e8 11697 "fistp{ll|}",
1d9f512f
AM
11698};
11699
11700static const unsigned char float_mem_mode[] = {
11701 /* d8 */
11702 d_mode,
11703 d_mode,
11704 d_mode,
11705 d_mode,
11706 d_mode,
11707 d_mode,
11708 d_mode,
11709 d_mode,
11710 /* d9 */
11711 d_mode,
11712 0,
11713 d_mode,
11714 d_mode,
11715 0,
11716 w_mode,
11717 0,
11718 w_mode,
11719 /* da */
11720 d_mode,
11721 d_mode,
11722 d_mode,
11723 d_mode,
11724 d_mode,
11725 d_mode,
11726 d_mode,
11727 d_mode,
11728 /* db */
11729 d_mode,
11730 d_mode,
11731 d_mode,
11732 d_mode,
11733 0,
9306ca4a 11734 t_mode,
1d9f512f 11735 0,
9306ca4a 11736 t_mode,
1d9f512f
AM
11737 /* dc */
11738 q_mode,
11739 q_mode,
11740 q_mode,
11741 q_mode,
11742 q_mode,
11743 q_mode,
11744 q_mode,
11745 q_mode,
11746 /* dd */
11747 q_mode,
11748 q_mode,
11749 q_mode,
11750 q_mode,
11751 0,
11752 0,
11753 0,
11754 w_mode,
11755 /* de */
11756 w_mode,
11757 w_mode,
11758 w_mode,
11759 w_mode,
11760 w_mode,
11761 w_mode,
11762 w_mode,
11763 w_mode,
11764 /* df */
11765 w_mode,
11766 w_mode,
11767 w_mode,
11768 w_mode,
9306ca4a 11769 t_mode,
1d9f512f 11770 q_mode,
9306ca4a 11771 t_mode,
1d9f512f 11772 q_mode
252b5132
RH
11773};
11774
ce518a5f
L
11775#define ST { OP_ST, 0 }
11776#define STi { OP_STi, 0 }
252b5132 11777
4efba78c
L
11778#define FGRPd9_2 NULL, { { NULL, 0 } }
11779#define FGRPd9_4 NULL, { { NULL, 1 } }
11780#define FGRPd9_5 NULL, { { NULL, 2 } }
11781#define FGRPd9_6 NULL, { { NULL, 3 } }
11782#define FGRPd9_7 NULL, { { NULL, 4 } }
11783#define FGRPda_5 NULL, { { NULL, 5 } }
11784#define FGRPdb_4 NULL, { { NULL, 6 } }
11785#define FGRPde_3 NULL, { { NULL, 7 } }
11786#define FGRPdf_4 NULL, { { NULL, 8 } }
252b5132 11787
2da11e11 11788static const struct dis386 float_reg[][8] = {
252b5132
RH
11789 /* d8 */
11790 {
ce518a5f
L
11791 { "fadd", { ST, STi } },
11792 { "fmul", { ST, STi } },
11793 { "fcom", { STi } },
11794 { "fcomp", { STi } },
11795 { "fsub", { ST, STi } },
11796 { "fsubr", { ST, STi } },
11797 { "fdiv", { ST, STi } },
11798 { "fdivr", { ST, STi } },
252b5132
RH
11799 },
11800 /* d9 */
11801 {
ce518a5f
L
11802 { "fld", { STi } },
11803 { "fxch", { STi } },
252b5132 11804 { FGRPd9_2 },
592d1631 11805 { Bad_Opcode },
252b5132
RH
11806 { FGRPd9_4 },
11807 { FGRPd9_5 },
11808 { FGRPd9_6 },
11809 { FGRPd9_7 },
11810 },
11811 /* da */
11812 {
ce518a5f
L
11813 { "fcmovb", { ST, STi } },
11814 { "fcmove", { ST, STi } },
11815 { "fcmovbe",{ ST, STi } },
11816 { "fcmovu", { ST, STi } },
592d1631 11817 { Bad_Opcode },
252b5132 11818 { FGRPda_5 },
592d1631
L
11819 { Bad_Opcode },
11820 { Bad_Opcode },
252b5132
RH
11821 },
11822 /* db */
11823 {
ce518a5f
L
11824 { "fcmovnb",{ ST, STi } },
11825 { "fcmovne",{ ST, STi } },
11826 { "fcmovnbe",{ ST, STi } },
11827 { "fcmovnu",{ ST, STi } },
252b5132 11828 { FGRPdb_4 },
ce518a5f
L
11829 { "fucomi", { ST, STi } },
11830 { "fcomi", { ST, STi } },
592d1631 11831 { Bad_Opcode },
252b5132
RH
11832 },
11833 /* dc */
11834 {
ce518a5f
L
11835 { "fadd", { STi, ST } },
11836 { "fmul", { STi, ST } },
592d1631
L
11837 { Bad_Opcode },
11838 { Bad_Opcode },
9d141669
L
11839 { "fsub!M", { STi, ST } },
11840 { "fsubM", { STi, ST } },
11841 { "fdiv!M", { STi, ST } },
11842 { "fdivM", { STi, ST } },
252b5132
RH
11843 },
11844 /* dd */
11845 {
ce518a5f 11846 { "ffree", { STi } },
592d1631 11847 { Bad_Opcode },
ce518a5f
L
11848 { "fst", { STi } },
11849 { "fstp", { STi } },
11850 { "fucom", { STi } },
11851 { "fucomp", { STi } },
592d1631
L
11852 { Bad_Opcode },
11853 { Bad_Opcode },
252b5132
RH
11854 },
11855 /* de */
11856 {
ce518a5f
L
11857 { "faddp", { STi, ST } },
11858 { "fmulp", { STi, ST } },
592d1631 11859 { Bad_Opcode },
252b5132 11860 { FGRPde_3 },
9d141669
L
11861 { "fsub!Mp", { STi, ST } },
11862 { "fsubMp", { STi, ST } },
11863 { "fdiv!Mp", { STi, ST } },
11864 { "fdivMp", { STi, ST } },
252b5132
RH
11865 },
11866 /* df */
11867 {
ce518a5f 11868 { "ffreep", { STi } },
592d1631
L
11869 { Bad_Opcode },
11870 { Bad_Opcode },
11871 { Bad_Opcode },
252b5132 11872 { FGRPdf_4 },
ce518a5f
L
11873 { "fucomip", { ST, STi } },
11874 { "fcomip", { ST, STi } },
592d1631 11875 { Bad_Opcode },
252b5132
RH
11876 },
11877};
11878
252b5132
RH
11879static char *fgrps[][8] = {
11880 /* d9_2 0 */
11881 {
11882 "fnop","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
11883 },
11884
11885 /* d9_4 1 */
11886 {
11887 "fchs","fabs","(bad)","(bad)","ftst","fxam","(bad)","(bad)",
11888 },
11889
11890 /* d9_5 2 */
11891 {
11892 "fld1","fldl2t","fldl2e","fldpi","fldlg2","fldln2","fldz","(bad)",
11893 },
11894
11895 /* d9_6 3 */
11896 {
11897 "f2xm1","fyl2x","fptan","fpatan","fxtract","fprem1","fdecstp","fincstp",
11898 },
11899
11900 /* d9_7 4 */
11901 {
11902 "fprem","fyl2xp1","fsqrt","fsincos","frndint","fscale","fsin","fcos",
11903 },
11904
11905 /* da_5 5 */
11906 {
11907 "(bad)","fucompp","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
11908 },
11909
11910 /* db_4 6 */
11911 {
309d3373
JB
11912 "fNeni(8087 only)","fNdisi(8087 only)","fNclex","fNinit",
11913 "fNsetpm(287 only)","frstpm(287 only)","(bad)","(bad)",
252b5132
RH
11914 },
11915
11916 /* de_3 7 */
11917 {
11918 "(bad)","fcompp","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
11919 },
11920
11921 /* df_4 8 */
11922 {
11923 "fNstsw","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
11924 },
11925};
11926
b6169b20
L
11927static void
11928swap_operand (void)
11929{
11930 mnemonicendp[0] = '.';
11931 mnemonicendp[1] = 's';
11932 mnemonicendp += 2;
11933}
11934
b844680a
L
11935static void
11936OP_Skip_MODRM (int bytemode ATTRIBUTE_UNUSED,
11937 int sizeflag ATTRIBUTE_UNUSED)
11938{
11939 /* Skip mod/rm byte. */
11940 MODRM_CHECK;
11941 codep++;
11942}
11943
252b5132 11944static void
26ca5450 11945dofloat (int sizeflag)
252b5132 11946{
2da11e11 11947 const struct dis386 *dp;
252b5132
RH
11948 unsigned char floatop;
11949
11950 floatop = codep[-1];
11951
7967e09e 11952 if (modrm.mod != 3)
252b5132 11953 {
7967e09e 11954 int fp_indx = (floatop - 0xd8) * 8 + modrm.reg;
1d9f512f
AM
11955
11956 putop (float_mem[fp_indx], sizeflag);
ce518a5f 11957 obufp = op_out[0];
6e50d963 11958 op_ad = 2;
1d9f512f 11959 OP_E (float_mem_mode[fp_indx], sizeflag);
252b5132
RH
11960 return;
11961 }
6608db57 11962 /* Skip mod/rm byte. */
4bba6815 11963 MODRM_CHECK;
252b5132
RH
11964 codep++;
11965
7967e09e 11966 dp = &float_reg[floatop - 0xd8][modrm.reg];
252b5132
RH
11967 if (dp->name == NULL)
11968 {
7967e09e 11969 putop (fgrps[dp->op[0].bytemode][modrm.rm], sizeflag);
252b5132 11970
6608db57 11971 /* Instruction fnstsw is only one with strange arg. */
252b5132 11972 if (floatop == 0xdf && codep[-1] == 0xe0)
ce518a5f 11973 strcpy (op_out[0], names16[0]);
252b5132
RH
11974 }
11975 else
11976 {
11977 putop (dp->name, sizeflag);
11978
ce518a5f 11979 obufp = op_out[0];
6e50d963 11980 op_ad = 2;
ce518a5f
L
11981 if (dp->op[0].rtn)
11982 (*dp->op[0].rtn) (dp->op[0].bytemode, sizeflag);
6e50d963 11983
ce518a5f 11984 obufp = op_out[1];
6e50d963 11985 op_ad = 1;
ce518a5f
L
11986 if (dp->op[1].rtn)
11987 (*dp->op[1].rtn) (dp->op[1].bytemode, sizeflag);
252b5132
RH
11988 }
11989}
11990
252b5132 11991static void
26ca5450 11992OP_ST (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 11993{
422673a9 11994 oappend ("%st" + intel_syntax);
252b5132
RH
11995}
11996
252b5132 11997static void
26ca5450 11998OP_STi (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 11999{
7967e09e 12000 sprintf (scratchbuf, "%%st(%d)", modrm.rm);
d708bcba 12001 oappend (scratchbuf + intel_syntax);
252b5132
RH
12002}
12003
6608db57 12004/* Capital letters in template are macros. */
6439fc28 12005static int
d3ce72d0 12006putop (const char *in_template, int sizeflag)
252b5132 12007{
2da11e11 12008 const char *p;
9306ca4a 12009 int alt = 0;
9d141669 12010 int cond = 1;
98b528ac
L
12011 unsigned int l = 0, len = 1;
12012 char last[4];
12013
12014#define SAVE_LAST(c) \
12015 if (l < len && l < sizeof (last)) \
12016 last[l++] = c; \
12017 else \
12018 abort ();
252b5132 12019
d3ce72d0 12020 for (p = in_template; *p; p++)
252b5132
RH
12021 {
12022 switch (*p)
12023 {
12024 default:
12025 *obufp++ = *p;
12026 break;
98b528ac
L
12027 case '%':
12028 len++;
12029 break;
9d141669
L
12030 case '!':
12031 cond = 0;
12032 break;
6439fc28
AM
12033 case '{':
12034 alt = 0;
12035 if (intel_syntax)
6439fc28
AM
12036 {
12037 while (*++p != '|')
7c52e0e8
L
12038 if (*p == '}' || *p == '\0')
12039 abort ();
6439fc28 12040 }
9306ca4a
JB
12041 /* Fall through. */
12042 case 'I':
12043 alt = 1;
12044 continue;
6439fc28
AM
12045 case '|':
12046 while (*++p != '}')
12047 {
12048 if (*p == '\0')
12049 abort ();
12050 }
12051 break;
12052 case '}':
12053 break;
252b5132 12054 case 'A':
db6eb5be
AM
12055 if (intel_syntax)
12056 break;
7967e09e 12057 if (modrm.mod != 3 || (sizeflag & SUFFIX_ALWAYS))
252b5132
RH
12058 *obufp++ = 'b';
12059 break;
12060 case 'B':
4b06377f
L
12061 if (l == 0 && len == 1)
12062 {
12063case_B:
12064 if (intel_syntax)
12065 break;
12066 if (sizeflag & SUFFIX_ALWAYS)
12067 *obufp++ = 'b';
12068 }
12069 else
12070 {
12071 if (l != 1
12072 || len != 2
12073 || last[0] != 'L')
12074 {
12075 SAVE_LAST (*p);
12076 break;
12077 }
12078
12079 if (address_mode == mode_64bit
12080 && !(prefixes & PREFIX_ADDR))
12081 {
12082 *obufp++ = 'a';
12083 *obufp++ = 'b';
12084 *obufp++ = 's';
12085 }
12086
12087 goto case_B;
12088 }
252b5132 12089 break;
9306ca4a
JB
12090 case 'C':
12091 if (intel_syntax && !alt)
12092 break;
12093 if ((prefixes & PREFIX_DATA) || (sizeflag & SUFFIX_ALWAYS))
12094 {
12095 if (sizeflag & DFLAG)
12096 *obufp++ = intel_syntax ? 'd' : 'l';
12097 else
12098 *obufp++ = intel_syntax ? 'w' : 's';
12099 used_prefixes |= (prefixes & PREFIX_DATA);
12100 }
12101 break;
ed7841b3
JB
12102 case 'D':
12103 if (intel_syntax || !(sizeflag & SUFFIX_ALWAYS))
12104 break;
161a04f6 12105 USED_REX (REX_W);
7967e09e 12106 if (modrm.mod == 3)
ed7841b3 12107 {
161a04f6 12108 if (rex & REX_W)
ed7841b3 12109 *obufp++ = 'q';
ed7841b3 12110 else
f16cd0d5
L
12111 {
12112 if (sizeflag & DFLAG)
12113 *obufp++ = intel_syntax ? 'd' : 'l';
12114 else
12115 *obufp++ = 'w';
12116 used_prefixes |= (prefixes & PREFIX_DATA);
12117 }
ed7841b3
JB
12118 }
12119 else
12120 *obufp++ = 'w';
12121 break;
252b5132 12122 case 'E': /* For jcxz/jecxz */
cb712a9e 12123 if (address_mode == mode_64bit)
c1a64871
JH
12124 {
12125 if (sizeflag & AFLAG)
12126 *obufp++ = 'r';
12127 else
12128 *obufp++ = 'e';
12129 }
12130 else
12131 if (sizeflag & AFLAG)
12132 *obufp++ = 'e';
3ffd33cf
AM
12133 used_prefixes |= (prefixes & PREFIX_ADDR);
12134 break;
12135 case 'F':
db6eb5be
AM
12136 if (intel_syntax)
12137 break;
e396998b 12138 if ((prefixes & PREFIX_ADDR) || (sizeflag & SUFFIX_ALWAYS))
3ffd33cf
AM
12139 {
12140 if (sizeflag & AFLAG)
cb712a9e 12141 *obufp++ = address_mode == mode_64bit ? 'q' : 'l';
3ffd33cf 12142 else
cb712a9e 12143 *obufp++ = address_mode == mode_64bit ? 'l' : 'w';
3ffd33cf
AM
12144 used_prefixes |= (prefixes & PREFIX_ADDR);
12145 }
252b5132 12146 break;
52fd6d94
JB
12147 case 'G':
12148 if (intel_syntax || (obufp[-1] != 's' && !(sizeflag & SUFFIX_ALWAYS)))
12149 break;
161a04f6 12150 if ((rex & REX_W) || (sizeflag & DFLAG))
52fd6d94
JB
12151 *obufp++ = 'l';
12152 else
12153 *obufp++ = 'w';
161a04f6 12154 if (!(rex & REX_W))
52fd6d94
JB
12155 used_prefixes |= (prefixes & PREFIX_DATA);
12156 break;
5dd0794d 12157 case 'H':
db6eb5be
AM
12158 if (intel_syntax)
12159 break;
5dd0794d
AM
12160 if ((prefixes & (PREFIX_CS | PREFIX_DS)) == PREFIX_CS
12161 || (prefixes & (PREFIX_CS | PREFIX_DS)) == PREFIX_DS)
12162 {
12163 used_prefixes |= prefixes & (PREFIX_CS | PREFIX_DS);
12164 *obufp++ = ',';
12165 *obufp++ = 'p';
12166 if (prefixes & PREFIX_DS)
12167 *obufp++ = 't';
12168 else
12169 *obufp++ = 'n';
12170 }
12171 break;
9306ca4a
JB
12172 case 'J':
12173 if (intel_syntax)
12174 break;
12175 *obufp++ = 'l';
12176 break;
42903f7f
L
12177 case 'K':
12178 USED_REX (REX_W);
12179 if (rex & REX_W)
12180 *obufp++ = 'q';
12181 else
12182 *obufp++ = 'd';
12183 break;
6dd5059a
L
12184 case 'Z':
12185 if (intel_syntax)
12186 break;
12187 if (address_mode == mode_64bit && (sizeflag & SUFFIX_ALWAYS))
12188 {
12189 *obufp++ = 'q';
12190 break;
12191 }
12192 /* Fall through. */
98b528ac 12193 goto case_L;
252b5132 12194 case 'L':
98b528ac
L
12195 if (l != 0 || len != 1)
12196 {
12197 SAVE_LAST (*p);
12198 break;
12199 }
12200case_L:
db6eb5be
AM
12201 if (intel_syntax)
12202 break;
252b5132
RH
12203 if (sizeflag & SUFFIX_ALWAYS)
12204 *obufp++ = 'l';
252b5132 12205 break;
9d141669
L
12206 case 'M':
12207 if (intel_mnemonic != cond)
12208 *obufp++ = 'r';
12209 break;
252b5132
RH
12210 case 'N':
12211 if ((prefixes & PREFIX_FWAIT) == 0)
12212 *obufp++ = 'n';
7d421014
ILT
12213 else
12214 used_prefixes |= PREFIX_FWAIT;
252b5132 12215 break;
52b15da3 12216 case 'O':
161a04f6
L
12217 USED_REX (REX_W);
12218 if (rex & REX_W)
6439fc28 12219 *obufp++ = 'o';
a35ca55a
JB
12220 else if (intel_syntax && (sizeflag & DFLAG))
12221 *obufp++ = 'q';
52b15da3
JH
12222 else
12223 *obufp++ = 'd';
161a04f6 12224 if (!(rex & REX_W))
a35ca55a 12225 used_prefixes |= (prefixes & PREFIX_DATA);
52b15da3 12226 break;
6439fc28 12227 case 'T':
d9e3625e
L
12228 if (!intel_syntax
12229 && address_mode == mode_64bit
12230 && (sizeflag & DFLAG))
6439fc28
AM
12231 {
12232 *obufp++ = 'q';
12233 break;
12234 }
6608db57 12235 /* Fall through. */
252b5132 12236 case 'P':
db6eb5be 12237 if (intel_syntax)
d9e3625e
L
12238 {
12239 if ((rex & REX_W) == 0
12240 && (prefixes & PREFIX_DATA))
12241 {
12242 if ((sizeflag & DFLAG) == 0)
12243 *obufp++ = 'w';
12244 used_prefixes |= (prefixes & PREFIX_DATA);
12245 }
12246 break;
12247 }
252b5132 12248 if ((prefixes & PREFIX_DATA)
161a04f6 12249 || (rex & REX_W)
e396998b 12250 || (sizeflag & SUFFIX_ALWAYS))
252b5132 12251 {
161a04f6
L
12252 USED_REX (REX_W);
12253 if (rex & REX_W)
52b15da3 12254 *obufp++ = 'q';
c2419411 12255 else
52b15da3
JH
12256 {
12257 if (sizeflag & DFLAG)
12258 *obufp++ = 'l';
12259 else
12260 *obufp++ = 'w';
f16cd0d5 12261 used_prefixes |= (prefixes & PREFIX_DATA);
52b15da3 12262 }
252b5132
RH
12263 }
12264 break;
6439fc28 12265 case 'U':
db6eb5be
AM
12266 if (intel_syntax)
12267 break;
cb712a9e 12268 if (address_mode == mode_64bit && (sizeflag & DFLAG))
6439fc28 12269 {
7967e09e 12270 if (modrm.mod != 3 || (sizeflag & SUFFIX_ALWAYS))
1a114b12 12271 *obufp++ = 'q';
6439fc28
AM
12272 break;
12273 }
6608db57 12274 /* Fall through. */
98b528ac 12275 goto case_Q;
252b5132 12276 case 'Q':
98b528ac 12277 if (l == 0 && len == 1)
252b5132 12278 {
98b528ac
L
12279case_Q:
12280 if (intel_syntax && !alt)
12281 break;
12282 USED_REX (REX_W);
12283 if (modrm.mod != 3 || (sizeflag & SUFFIX_ALWAYS))
52b15da3 12284 {
98b528ac
L
12285 if (rex & REX_W)
12286 *obufp++ = 'q';
52b15da3 12287 else
98b528ac
L
12288 {
12289 if (sizeflag & DFLAG)
12290 *obufp++ = intel_syntax ? 'd' : 'l';
12291 else
12292 *obufp++ = 'w';
f16cd0d5 12293 used_prefixes |= (prefixes & PREFIX_DATA);
98b528ac 12294 }
52b15da3 12295 }
98b528ac
L
12296 }
12297 else
12298 {
12299 if (l != 1 || len != 2 || last[0] != 'L')
12300 {
12301 SAVE_LAST (*p);
12302 break;
12303 }
12304 if (intel_syntax
12305 || (modrm.mod == 3 && !(sizeflag & SUFFIX_ALWAYS)))
12306 break;
12307 if ((rex & REX_W))
12308 {
12309 USED_REX (REX_W);
12310 *obufp++ = 'q';
12311 }
12312 else
12313 *obufp++ = 'l';
252b5132
RH
12314 }
12315 break;
12316 case 'R':
161a04f6
L
12317 USED_REX (REX_W);
12318 if (rex & REX_W)
a35ca55a
JB
12319 *obufp++ = 'q';
12320 else if (sizeflag & DFLAG)
c608c12e 12321 {
a35ca55a 12322 if (intel_syntax)
c608c12e 12323 *obufp++ = 'd';
c608c12e 12324 else
a35ca55a 12325 *obufp++ = 'l';
c608c12e 12326 }
252b5132 12327 else
a35ca55a
JB
12328 *obufp++ = 'w';
12329 if (intel_syntax && !p[1]
161a04f6 12330 && ((rex & REX_W) || (sizeflag & DFLAG)))
a35ca55a 12331 *obufp++ = 'e';
161a04f6 12332 if (!(rex & REX_W))
52b15da3 12333 used_prefixes |= (prefixes & PREFIX_DATA);
252b5132 12334 break;
1a114b12 12335 case 'V':
4b06377f 12336 if (l == 0 && len == 1)
1a114b12 12337 {
4b06377f
L
12338 if (intel_syntax)
12339 break;
12340 if (address_mode == mode_64bit && (sizeflag & DFLAG))
12341 {
12342 if (sizeflag & SUFFIX_ALWAYS)
12343 *obufp++ = 'q';
12344 break;
12345 }
12346 }
12347 else
12348 {
12349 if (l != 1
12350 || len != 2
12351 || last[0] != 'L')
12352 {
12353 SAVE_LAST (*p);
12354 break;
12355 }
12356
12357 if (rex & REX_W)
12358 {
12359 *obufp++ = 'a';
12360 *obufp++ = 'b';
12361 *obufp++ = 's';
12362 }
1a114b12
JB
12363 }
12364 /* Fall through. */
4b06377f 12365 goto case_S;
252b5132 12366 case 'S':
4b06377f 12367 if (l == 0 && len == 1)
252b5132 12368 {
4b06377f
L
12369case_S:
12370 if (intel_syntax)
12371 break;
12372 if (sizeflag & SUFFIX_ALWAYS)
52b15da3 12373 {
4b06377f
L
12374 if (rex & REX_W)
12375 *obufp++ = 'q';
52b15da3 12376 else
4b06377f
L
12377 {
12378 if (sizeflag & DFLAG)
12379 *obufp++ = 'l';
12380 else
12381 *obufp++ = 'w';
12382 used_prefixes |= (prefixes & PREFIX_DATA);
12383 }
12384 }
12385 }
12386 else
12387 {
12388 if (l != 1
12389 || len != 2
12390 || last[0] != 'L')
12391 {
12392 SAVE_LAST (*p);
12393 break;
52b15da3 12394 }
4b06377f
L
12395
12396 if (address_mode == mode_64bit
12397 && !(prefixes & PREFIX_ADDR))
12398 {
12399 *obufp++ = 'a';
12400 *obufp++ = 'b';
12401 *obufp++ = 's';
12402 }
12403
12404 goto case_S;
252b5132 12405 }
252b5132 12406 break;
041bd2e0 12407 case 'X':
c0f3af97
L
12408 if (l != 0 || len != 1)
12409 {
12410 SAVE_LAST (*p);
12411 break;
12412 }
12413 if (need_vex && vex.prefix)
12414 {
12415 if (vex.prefix == DATA_PREFIX_OPCODE)
12416 *obufp++ = 'd';
12417 else
12418 *obufp++ = 's';
12419 }
041bd2e0 12420 else
f16cd0d5
L
12421 {
12422 if (prefixes & PREFIX_DATA)
12423 *obufp++ = 'd';
12424 else
12425 *obufp++ = 's';
12426 used_prefixes |= (prefixes & PREFIX_DATA);
12427 }
041bd2e0 12428 break;
76f227a5 12429 case 'Y':
c0f3af97 12430 if (l == 0 && len == 1)
76f227a5 12431 {
c0f3af97
L
12432 if (intel_syntax || !(sizeflag & SUFFIX_ALWAYS))
12433 break;
12434 if (rex & REX_W)
12435 {
12436 USED_REX (REX_W);
12437 *obufp++ = 'q';
12438 }
12439 break;
12440 }
12441 else
12442 {
12443 if (l != 1 || len != 2 || last[0] != 'X')
12444 {
12445 SAVE_LAST (*p);
12446 break;
12447 }
12448 if (!need_vex)
12449 abort ();
12450 if (intel_syntax
12451 || (modrm.mod == 3 && !(sizeflag & SUFFIX_ALWAYS)))
12452 break;
12453 switch (vex.length)
12454 {
12455 case 128:
12456 *obufp++ = 'x';
12457 break;
12458 case 256:
12459 *obufp++ = 'y';
12460 break;
12461 default:
12462 abort ();
12463 }
76f227a5
JH
12464 }
12465 break;
252b5132 12466 case 'W':
0bfee649 12467 if (l == 0 && len == 1)
a35ca55a 12468 {
0bfee649
L
12469 /* operand size flag for cwtl, cbtw */
12470 USED_REX (REX_W);
12471 if (rex & REX_W)
12472 {
12473 if (intel_syntax)
12474 *obufp++ = 'd';
12475 else
12476 *obufp++ = 'l';
12477 }
12478 else if (sizeflag & DFLAG)
12479 *obufp++ = 'w';
a35ca55a 12480 else
0bfee649
L
12481 *obufp++ = 'b';
12482 if (!(rex & REX_W))
12483 used_prefixes |= (prefixes & PREFIX_DATA);
a35ca55a 12484 }
252b5132 12485 else
0bfee649 12486 {
6c30d220
L
12487 if (l != 1
12488 || len != 2
12489 || (last[0] != 'X'
12490 && last[0] != 'L'))
0bfee649
L
12491 {
12492 SAVE_LAST (*p);
12493 break;
12494 }
12495 if (!need_vex)
12496 abort ();
6c30d220
L
12497 if (last[0] == 'X')
12498 *obufp++ = vex.w ? 'd': 's';
12499 else
12500 *obufp++ = vex.w ? 'q': 'd';
0bfee649 12501 }
252b5132
RH
12502 break;
12503 }
9306ca4a 12504 alt = 0;
252b5132
RH
12505 }
12506 *obufp = 0;
ea397f5b 12507 mnemonicendp = obufp;
6439fc28 12508 return 0;
252b5132
RH
12509}
12510
12511static void
26ca5450 12512oappend (const char *s)
252b5132 12513{
ea397f5b 12514 obufp = stpcpy (obufp, s);
252b5132
RH
12515}
12516
12517static void
26ca5450 12518append_seg (void)
252b5132
RH
12519{
12520 if (prefixes & PREFIX_CS)
7d421014 12521 {
7d421014 12522 used_prefixes |= PREFIX_CS;
d708bcba 12523 oappend ("%cs:" + intel_syntax);
7d421014 12524 }
252b5132 12525 if (prefixes & PREFIX_DS)
7d421014 12526 {
7d421014 12527 used_prefixes |= PREFIX_DS;
d708bcba 12528 oappend ("%ds:" + intel_syntax);
7d421014 12529 }
252b5132 12530 if (prefixes & PREFIX_SS)
7d421014 12531 {
7d421014 12532 used_prefixes |= PREFIX_SS;
d708bcba 12533 oappend ("%ss:" + intel_syntax);
7d421014 12534 }
252b5132 12535 if (prefixes & PREFIX_ES)
7d421014 12536 {
7d421014 12537 used_prefixes |= PREFIX_ES;
d708bcba 12538 oappend ("%es:" + intel_syntax);
7d421014 12539 }
252b5132 12540 if (prefixes & PREFIX_FS)
7d421014 12541 {
7d421014 12542 used_prefixes |= PREFIX_FS;
d708bcba 12543 oappend ("%fs:" + intel_syntax);
7d421014 12544 }
252b5132 12545 if (prefixes & PREFIX_GS)
7d421014 12546 {
7d421014 12547 used_prefixes |= PREFIX_GS;
d708bcba 12548 oappend ("%gs:" + intel_syntax);
7d421014 12549 }
252b5132
RH
12550}
12551
12552static void
26ca5450 12553OP_indirE (int bytemode, int sizeflag)
252b5132
RH
12554{
12555 if (!intel_syntax)
12556 oappend ("*");
12557 OP_E (bytemode, sizeflag);
12558}
12559
52b15da3 12560static void
26ca5450 12561print_operand_value (char *buf, int hex, bfd_vma disp)
52b15da3 12562{
cb712a9e 12563 if (address_mode == mode_64bit)
52b15da3
JH
12564 {
12565 if (hex)
12566 {
12567 char tmp[30];
12568 int i;
12569 buf[0] = '0';
12570 buf[1] = 'x';
12571 sprintf_vma (tmp, disp);
6608db57 12572 for (i = 0; tmp[i] == '0' && tmp[i + 1]; i++);
52b15da3
JH
12573 strcpy (buf + 2, tmp + i);
12574 }
12575 else
12576 {
12577 bfd_signed_vma v = disp;
12578 char tmp[30];
12579 int i;
12580 if (v < 0)
12581 {
12582 *(buf++) = '-';
12583 v = -disp;
6608db57 12584 /* Check for possible overflow on 0x8000000000000000. */
52b15da3
JH
12585 if (v < 0)
12586 {
12587 strcpy (buf, "9223372036854775808");
12588 return;
12589 }
12590 }
12591 if (!v)
12592 {
12593 strcpy (buf, "0");
12594 return;
12595 }
12596
12597 i = 0;
12598 tmp[29] = 0;
12599 while (v)
12600 {
6608db57 12601 tmp[28 - i] = (v % 10) + '0';
52b15da3
JH
12602 v /= 10;
12603 i++;
12604 }
12605 strcpy (buf, tmp + 29 - i);
12606 }
12607 }
12608 else
12609 {
12610 if (hex)
12611 sprintf (buf, "0x%x", (unsigned int) disp);
12612 else
12613 sprintf (buf, "%d", (int) disp);
12614 }
12615}
12616
5d669648
L
12617/* Put DISP in BUF as signed hex number. */
12618
12619static void
12620print_displacement (char *buf, bfd_vma disp)
12621{
12622 bfd_signed_vma val = disp;
12623 char tmp[30];
12624 int i, j = 0;
12625
12626 if (val < 0)
12627 {
12628 buf[j++] = '-';
12629 val = -disp;
12630
12631 /* Check for possible overflow. */
12632 if (val < 0)
12633 {
12634 switch (address_mode)
12635 {
12636 case mode_64bit:
12637 strcpy (buf + j, "0x8000000000000000");
12638 break;
12639 case mode_32bit:
12640 strcpy (buf + j, "0x80000000");
12641 break;
12642 case mode_16bit:
12643 strcpy (buf + j, "0x8000");
12644 break;
12645 }
12646 return;
12647 }
12648 }
12649
12650 buf[j++] = '0';
12651 buf[j++] = 'x';
12652
0af1713e 12653 sprintf_vma (tmp, (bfd_vma) val);
5d669648
L
12654 for (i = 0; tmp[i] == '0'; i++)
12655 continue;
12656 if (tmp[i] == '\0')
12657 i--;
12658 strcpy (buf + j, tmp + i);
12659}
12660
3f31e633
JB
12661static void
12662intel_operand_size (int bytemode, int sizeflag)
12663{
12664 switch (bytemode)
12665 {
12666 case b_mode:
b6169b20 12667 case b_swap_mode:
42903f7f 12668 case dqb_mode:
3f31e633
JB
12669 oappend ("BYTE PTR ");
12670 break;
12671 case w_mode:
12672 case dqw_mode:
12673 oappend ("WORD PTR ");
12674 break;
1a114b12 12675 case stack_v_mode:
cb712a9e 12676 if (address_mode == mode_64bit && (sizeflag & DFLAG))
3f31e633
JB
12677 {
12678 oappend ("QWORD PTR ");
3f31e633
JB
12679 break;
12680 }
12681 /* FALLTHRU */
12682 case v_mode:
b6169b20 12683 case v_swap_mode:
3f31e633 12684 case dq_mode:
161a04f6
L
12685 USED_REX (REX_W);
12686 if (rex & REX_W)
3f31e633 12687 oappend ("QWORD PTR ");
3f31e633 12688 else
f16cd0d5
L
12689 {
12690 if ((sizeflag & DFLAG) || bytemode == dq_mode)
12691 oappend ("DWORD PTR ");
12692 else
12693 oappend ("WORD PTR ");
12694 used_prefixes |= (prefixes & PREFIX_DATA);
12695 }
3f31e633 12696 break;
52fd6d94 12697 case z_mode:
161a04f6 12698 if ((rex & REX_W) || (sizeflag & DFLAG))
52fd6d94
JB
12699 *obufp++ = 'D';
12700 oappend ("WORD PTR ");
161a04f6 12701 if (!(rex & REX_W))
52fd6d94
JB
12702 used_prefixes |= (prefixes & PREFIX_DATA);
12703 break;
34b772a6
JB
12704 case a_mode:
12705 if (sizeflag & DFLAG)
12706 oappend ("QWORD PTR ");
12707 else
12708 oappend ("DWORD PTR ");
12709 used_prefixes |= (prefixes & PREFIX_DATA);
12710 break;
3f31e633 12711 case d_mode:
539f890d
L
12712 case d_scalar_mode:
12713 case d_scalar_swap_mode:
fa99fab2 12714 case d_swap_mode:
42903f7f 12715 case dqd_mode:
3f31e633
JB
12716 oappend ("DWORD PTR ");
12717 break;
12718 case q_mode:
539f890d
L
12719 case q_scalar_mode:
12720 case q_scalar_swap_mode:
b6169b20 12721 case q_swap_mode:
3f31e633
JB
12722 oappend ("QWORD PTR ");
12723 break;
12724 case m_mode:
cb712a9e 12725 if (address_mode == mode_64bit)
3f31e633
JB
12726 oappend ("QWORD PTR ");
12727 else
12728 oappend ("DWORD PTR ");
12729 break;
12730 case f_mode:
12731 if (sizeflag & DFLAG)
12732 oappend ("FWORD PTR ");
12733 else
12734 oappend ("DWORD PTR ");
12735 used_prefixes |= (prefixes & PREFIX_DATA);
12736 break;
12737 case t_mode:
12738 oappend ("TBYTE PTR ");
12739 break;
12740 case x_mode:
b6169b20 12741 case x_swap_mode:
c0f3af97
L
12742 if (need_vex)
12743 {
12744 switch (vex.length)
12745 {
12746 case 128:
12747 oappend ("XMMWORD PTR ");
12748 break;
12749 case 256:
12750 oappend ("YMMWORD PTR ");
12751 break;
12752 default:
12753 abort ();
12754 }
12755 }
12756 else
12757 oappend ("XMMWORD PTR ");
12758 break;
12759 case xmm_mode:
3f31e633
JB
12760 oappend ("XMMWORD PTR ");
12761 break;
c0f3af97
L
12762 case xmmq_mode:
12763 if (!need_vex)
12764 abort ();
12765
12766 switch (vex.length)
12767 {
12768 case 128:
12769 oappend ("QWORD PTR ");
12770 break;
12771 case 256:
12772 oappend ("XMMWORD PTR ");
12773 break;
12774 default:
12775 abort ();
12776 }
12777 break;
6c30d220
L
12778 case xmm_mb_mode:
12779 if (!need_vex)
12780 abort ();
12781
12782 switch (vex.length)
12783 {
12784 case 128:
12785 case 256:
12786 oappend ("BYTE PTR ");
12787 break;
12788 default:
12789 abort ();
12790 }
12791 break;
12792 case xmm_mw_mode:
12793 if (!need_vex)
12794 abort ();
12795
12796 switch (vex.length)
12797 {
12798 case 128:
12799 case 256:
12800 oappend ("WORD PTR ");
12801 break;
12802 default:
12803 abort ();
12804 }
12805 break;
12806 case xmm_md_mode:
12807 if (!need_vex)
12808 abort ();
12809
12810 switch (vex.length)
12811 {
12812 case 128:
12813 case 256:
12814 oappend ("DWORD PTR ");
12815 break;
12816 default:
12817 abort ();
12818 }
12819 break;
12820 case xmm_mq_mode:
12821 if (!need_vex)
12822 abort ();
12823
12824 switch (vex.length)
12825 {
12826 case 128:
12827 case 256:
12828 oappend ("QWORD PTR ");
12829 break;
12830 default:
12831 abort ();
12832 }
12833 break;
12834 case xmmdw_mode:
12835 if (!need_vex)
12836 abort ();
12837
12838 switch (vex.length)
12839 {
12840 case 128:
12841 oappend ("WORD PTR ");
12842 break;
12843 case 256:
12844 oappend ("DWORD PTR ");
12845 break;
12846 default:
12847 abort ();
12848 }
12849 break;
12850 case xmmqd_mode:
12851 if (!need_vex)
12852 abort ();
12853
12854 switch (vex.length)
12855 {
12856 case 128:
12857 oappend ("DWORD PTR ");
12858 break;
12859 case 256:
12860 oappend ("QWORD PTR ");
12861 break;
12862 default:
12863 abort ();
12864 }
12865 break;
c0f3af97
L
12866 case ymmq_mode:
12867 if (!need_vex)
12868 abort ();
12869
12870 switch (vex.length)
12871 {
12872 case 128:
12873 oappend ("QWORD PTR ");
12874 break;
12875 case 256:
12876 oappend ("YMMWORD PTR ");
12877 break;
12878 default:
12879 abort ();
12880 }
12881 break;
6c30d220
L
12882 case ymmxmm_mode:
12883 if (!need_vex)
12884 abort ();
12885
12886 switch (vex.length)
12887 {
12888 case 128:
12889 case 256:
12890 oappend ("XMMWORD PTR ");
12891 break;
12892 default:
12893 abort ();
12894 }
12895 break;
fb9c77c7
L
12896 case o_mode:
12897 oappend ("OWORD PTR ");
12898 break;
0bfee649 12899 case vex_w_dq_mode:
1c480963 12900 case vex_scalar_w_dq_mode:
6c30d220
L
12901 case vex_vsib_d_w_dq_mode:
12902 case vex_vsib_q_w_dq_mode:
0bfee649
L
12903 if (!need_vex)
12904 abort ();
12905
12906 if (vex.w)
12907 oappend ("QWORD PTR ");
12908 else
12909 oappend ("DWORD PTR ");
12910 break;
3f31e633
JB
12911 default:
12912 break;
12913 }
12914}
12915
252b5132 12916static void
c0f3af97 12917OP_E_register (int bytemode, int sizeflag)
252b5132 12918{
c0f3af97
L
12919 int reg = modrm.rm;
12920 const char **names;
252b5132 12921
c0f3af97
L
12922 USED_REX (REX_B);
12923 if ((rex & REX_B))
12924 reg += 8;
252b5132 12925
b6169b20
L
12926 if ((sizeflag & SUFFIX_ALWAYS)
12927 && (bytemode == b_swap_mode || bytemode == v_swap_mode))
12928 swap_operand ();
12929
c0f3af97 12930 switch (bytemode)
252b5132 12931 {
c0f3af97 12932 case b_mode:
b6169b20 12933 case b_swap_mode:
c0f3af97
L
12934 USED_REX (0);
12935 if (rex)
12936 names = names8rex;
12937 else
12938 names = names8;
12939 break;
12940 case w_mode:
12941 names = names16;
12942 break;
12943 case d_mode:
12944 names = names32;
12945 break;
12946 case q_mode:
12947 names = names64;
12948 break;
12949 case m_mode:
12950 names = address_mode == mode_64bit ? names64 : names32;
12951 break;
12952 case stack_v_mode:
12953 if (address_mode == mode_64bit && (sizeflag & DFLAG))
252b5132 12954 {
c0f3af97 12955 names = names64;
252b5132 12956 break;
252b5132 12957 }
c0f3af97
L
12958 bytemode = v_mode;
12959 /* FALLTHRU */
12960 case v_mode:
b6169b20 12961 case v_swap_mode:
c0f3af97
L
12962 case dq_mode:
12963 case dqb_mode:
12964 case dqd_mode:
12965 case dqw_mode:
12966 USED_REX (REX_W);
12967 if (rex & REX_W)
12968 names = names64;
c0f3af97 12969 else
f16cd0d5
L
12970 {
12971 if ((sizeflag & DFLAG)
12972 || (bytemode != v_mode
12973 && bytemode != v_swap_mode))
12974 names = names32;
12975 else
12976 names = names16;
12977 used_prefixes |= (prefixes & PREFIX_DATA);
12978 }
c0f3af97
L
12979 break;
12980 case 0:
12981 return;
12982 default:
12983 oappend (INTERNAL_DISASSEMBLER_ERROR);
252b5132
RH
12984 return;
12985 }
c0f3af97
L
12986 oappend (names[reg]);
12987}
12988
12989static void
c1e679ec 12990OP_E_memory (int bytemode, int sizeflag)
c0f3af97
L
12991{
12992 bfd_vma disp = 0;
12993 int add = (rex & REX_B) ? 8 : 0;
12994 int riprel = 0;
252b5132 12995
c0f3af97 12996 USED_REX (REX_B);
3f31e633
JB
12997 if (intel_syntax)
12998 intel_operand_size (bytemode, sizeflag);
252b5132
RH
12999 append_seg ();
13000
5d669648 13001 if ((sizeflag & AFLAG) || address_mode == mode_64bit)
252b5132 13002 {
5d669648
L
13003 /* 32/64 bit address mode */
13004 int havedisp;
252b5132
RH
13005 int havesib;
13006 int havebase;
0f7da397 13007 int haveindex;
20afcfb7 13008 int needindex;
82c18208 13009 int base, rbase;
91d6fa6a 13010 int vindex = 0;
252b5132 13011 int scale = 0;
6c30d220
L
13012 const char **indexes64 = names64;
13013 const char **indexes32 = names32;
252b5132
RH
13014
13015 havesib = 0;
13016 havebase = 1;
0f7da397 13017 haveindex = 0;
7967e09e 13018 base = modrm.rm;
252b5132
RH
13019
13020 if (base == 4)
13021 {
13022 havesib = 1;
dfc8cf43 13023 vindex = sib.index;
161a04f6
L
13024 USED_REX (REX_X);
13025 if (rex & REX_X)
91d6fa6a 13026 vindex += 8;
6c30d220
L
13027 switch (bytemode)
13028 {
13029 case vex_vsib_d_w_dq_mode:
13030 case vex_vsib_q_w_dq_mode:
13031 if (!need_vex)
13032 abort ();
13033
13034 haveindex = 1;
13035 switch (vex.length)
13036 {
13037 case 128:
13038 indexes64 = indexes32 = names_xmm;
13039 break;
13040 case 256:
13041 if (!vex.w || bytemode == vex_vsib_q_w_dq_mode)
13042 indexes64 = indexes32 = names_ymm;
13043 else
13044 indexes64 = indexes32 = names_xmm;
13045 break;
13046 default:
13047 abort ();
13048 }
13049 break;
13050 default:
13051 haveindex = vindex != 4;
13052 break;
13053 }
13054 scale = sib.scale;
13055 base = sib.base;
252b5132
RH
13056 codep++;
13057 }
82c18208 13058 rbase = base + add;
252b5132 13059
7967e09e 13060 switch (modrm.mod)
252b5132
RH
13061 {
13062 case 0:
82c18208 13063 if (base == 5)
252b5132
RH
13064 {
13065 havebase = 0;
cb712a9e 13066 if (address_mode == mode_64bit && !havesib)
52b15da3
JH
13067 riprel = 1;
13068 disp = get32s ();
252b5132
RH
13069 }
13070 break;
13071 case 1:
13072 FETCH_DATA (the_info, codep + 1);
13073 disp = *codep++;
13074 if ((disp & 0x80) != 0)
13075 disp -= 0x100;
13076 break;
13077 case 2:
52b15da3 13078 disp = get32s ();
252b5132
RH
13079 break;
13080 }
13081
20afcfb7
L
13082 /* In 32bit mode, we need index register to tell [offset] from
13083 [eiz*1 + offset]. */
13084 needindex = (havesib
13085 && !havebase
13086 && !haveindex
13087 && address_mode == mode_32bit);
13088 havedisp = (havebase
13089 || needindex
13090 || (havesib && (haveindex || scale != 0)));
5d669648 13091
252b5132 13092 if (!intel_syntax)
82c18208 13093 if (modrm.mod != 0 || base == 5)
db6eb5be 13094 {
5d669648
L
13095 if (havedisp || riprel)
13096 print_displacement (scratchbuf, disp);
13097 else
13098 print_operand_value (scratchbuf, 1, disp);
db6eb5be 13099 oappend (scratchbuf);
52b15da3
JH
13100 if (riprel)
13101 {
13102 set_op (disp, 1);
87767711 13103 oappend (sizeflag & AFLAG ? "(%rip)" : "(%eip)");
52b15da3 13104 }
db6eb5be 13105 }
2da11e11 13106
87767711
JB
13107 if (havebase || haveindex || riprel)
13108 used_prefixes |= PREFIX_ADDR;
13109
5d669648 13110 if (havedisp || (intel_syntax && riprel))
252b5132 13111 {
252b5132 13112 *obufp++ = open_char;
52b15da3 13113 if (intel_syntax && riprel)
185b1163
L
13114 {
13115 set_op (disp, 1);
87767711 13116 oappend (sizeflag & AFLAG ? "rip" : "eip");
185b1163 13117 }
db6eb5be 13118 *obufp = '\0';
252b5132 13119 if (havebase)
cb712a9e 13120 oappend (address_mode == mode_64bit && (sizeflag & AFLAG)
82c18208 13121 ? names64[rbase] : names32[rbase]);
252b5132
RH
13122 if (havesib)
13123 {
db51cc60
L
13124 /* ESP/RSP won't allow index. If base isn't ESP/RSP,
13125 print index to tell base + index from base. */
13126 if (scale != 0
20afcfb7 13127 || needindex
db51cc60
L
13128 || haveindex
13129 || (havebase && base != ESP_REG_NUM))
252b5132 13130 {
9306ca4a 13131 if (!intel_syntax || havebase)
db6eb5be 13132 {
9306ca4a
JB
13133 *obufp++ = separator_char;
13134 *obufp = '\0';
db6eb5be 13135 }
db51cc60
L
13136 if (haveindex)
13137 oappend (address_mode == mode_64bit
13138 && (sizeflag & AFLAG)
6c30d220 13139 ? indexes64[vindex] : indexes32[vindex]);
db51cc60
L
13140 else
13141 oappend (address_mode == mode_64bit
13142 && (sizeflag & AFLAG)
13143 ? index64 : index32);
13144
db6eb5be
AM
13145 *obufp++ = scale_char;
13146 *obufp = '\0';
13147 sprintf (scratchbuf, "%d", 1 << scale);
13148 oappend (scratchbuf);
13149 }
252b5132 13150 }
185b1163 13151 if (intel_syntax
82c18208 13152 && (disp || modrm.mod != 0 || base == 5))
3d456fa1 13153 {
db51cc60 13154 if (!havedisp || (bfd_signed_vma) disp >= 0)
3d456fa1
JB
13155 {
13156 *obufp++ = '+';
13157 *obufp = '\0';
13158 }
05203043 13159 else if (modrm.mod != 1 && disp != -disp)
3d456fa1
JB
13160 {
13161 *obufp++ = '-';
13162 *obufp = '\0';
13163 disp = - (bfd_signed_vma) disp;
13164 }
13165
db51cc60
L
13166 if (havedisp)
13167 print_displacement (scratchbuf, disp);
13168 else
13169 print_operand_value (scratchbuf, 1, disp);
3d456fa1
JB
13170 oappend (scratchbuf);
13171 }
252b5132
RH
13172
13173 *obufp++ = close_char;
db6eb5be 13174 *obufp = '\0';
252b5132
RH
13175 }
13176 else if (intel_syntax)
db6eb5be 13177 {
82c18208 13178 if (modrm.mod != 0 || base == 5)
db6eb5be 13179 {
252b5132
RH
13180 if (prefixes & (PREFIX_CS | PREFIX_SS | PREFIX_DS
13181 | PREFIX_ES | PREFIX_FS | PREFIX_GS))
13182 ;
13183 else
13184 {
d708bcba 13185 oappend (names_seg[ds_reg - es_reg]);
252b5132
RH
13186 oappend (":");
13187 }
52b15da3 13188 print_operand_value (scratchbuf, 1, disp);
db6eb5be
AM
13189 oappend (scratchbuf);
13190 }
13191 }
252b5132
RH
13192 }
13193 else
f16cd0d5
L
13194 {
13195 /* 16 bit address mode */
13196 used_prefixes |= prefixes & PREFIX_ADDR;
7967e09e 13197 switch (modrm.mod)
252b5132
RH
13198 {
13199 case 0:
7967e09e 13200 if (modrm.rm == 6)
252b5132
RH
13201 {
13202 disp = get16 ();
13203 if ((disp & 0x8000) != 0)
13204 disp -= 0x10000;
13205 }
13206 break;
13207 case 1:
13208 FETCH_DATA (the_info, codep + 1);
13209 disp = *codep++;
13210 if ((disp & 0x80) != 0)
13211 disp -= 0x100;
13212 break;
13213 case 2:
13214 disp = get16 ();
13215 if ((disp & 0x8000) != 0)
13216 disp -= 0x10000;
13217 break;
13218 }
13219
13220 if (!intel_syntax)
7967e09e 13221 if (modrm.mod != 0 || modrm.rm == 6)
db6eb5be 13222 {
5d669648 13223 print_displacement (scratchbuf, disp);
db6eb5be
AM
13224 oappend (scratchbuf);
13225 }
252b5132 13226
7967e09e 13227 if (modrm.mod != 0 || modrm.rm != 6)
252b5132
RH
13228 {
13229 *obufp++ = open_char;
db6eb5be 13230 *obufp = '\0';
7967e09e 13231 oappend (index16[modrm.rm]);
5d669648
L
13232 if (intel_syntax
13233 && (disp || modrm.mod != 0 || modrm.rm == 6))
3d456fa1 13234 {
5d669648 13235 if ((bfd_signed_vma) disp >= 0)
3d456fa1
JB
13236 {
13237 *obufp++ = '+';
13238 *obufp = '\0';
13239 }
7967e09e 13240 else if (modrm.mod != 1)
3d456fa1
JB
13241 {
13242 *obufp++ = '-';
13243 *obufp = '\0';
13244 disp = - (bfd_signed_vma) disp;
13245 }
13246
5d669648 13247 print_displacement (scratchbuf, disp);
3d456fa1
JB
13248 oappend (scratchbuf);
13249 }
13250
db6eb5be
AM
13251 *obufp++ = close_char;
13252 *obufp = '\0';
252b5132 13253 }
3d456fa1
JB
13254 else if (intel_syntax)
13255 {
13256 if (prefixes & (PREFIX_CS | PREFIX_SS | PREFIX_DS
13257 | PREFIX_ES | PREFIX_FS | PREFIX_GS))
13258 ;
13259 else
13260 {
13261 oappend (names_seg[ds_reg - es_reg]);
13262 oappend (":");
13263 }
13264 print_operand_value (scratchbuf, 1, disp & 0xffff);
13265 oappend (scratchbuf);
13266 }
252b5132
RH
13267 }
13268}
13269
c0f3af97 13270static void
8b3f93e7 13271OP_E (int bytemode, int sizeflag)
c0f3af97
L
13272{
13273 /* Skip mod/rm byte. */
13274 MODRM_CHECK;
13275 codep++;
13276
13277 if (modrm.mod == 3)
13278 OP_E_register (bytemode, sizeflag);
13279 else
c1e679ec 13280 OP_E_memory (bytemode, sizeflag);
c0f3af97
L
13281}
13282
252b5132 13283static void
26ca5450 13284OP_G (int bytemode, int sizeflag)
252b5132 13285{
52b15da3 13286 int add = 0;
161a04f6
L
13287 USED_REX (REX_R);
13288 if (rex & REX_R)
52b15da3 13289 add += 8;
252b5132
RH
13290 switch (bytemode)
13291 {
13292 case b_mode:
52b15da3
JH
13293 USED_REX (0);
13294 if (rex)
7967e09e 13295 oappend (names8rex[modrm.reg + add]);
52b15da3 13296 else
7967e09e 13297 oappend (names8[modrm.reg + add]);
252b5132
RH
13298 break;
13299 case w_mode:
7967e09e 13300 oappend (names16[modrm.reg + add]);
252b5132
RH
13301 break;
13302 case d_mode:
7967e09e 13303 oappend (names32[modrm.reg + add]);
52b15da3
JH
13304 break;
13305 case q_mode:
7967e09e 13306 oappend (names64[modrm.reg + add]);
252b5132
RH
13307 break;
13308 case v_mode:
9306ca4a 13309 case dq_mode:
42903f7f
L
13310 case dqb_mode:
13311 case dqd_mode:
9306ca4a 13312 case dqw_mode:
161a04f6
L
13313 USED_REX (REX_W);
13314 if (rex & REX_W)
7967e09e 13315 oappend (names64[modrm.reg + add]);
252b5132 13316 else
f16cd0d5
L
13317 {
13318 if ((sizeflag & DFLAG) || bytemode != v_mode)
13319 oappend (names32[modrm.reg + add]);
13320 else
13321 oappend (names16[modrm.reg + add]);
13322 used_prefixes |= (prefixes & PREFIX_DATA);
13323 }
252b5132 13324 break;
90700ea2 13325 case m_mode:
cb712a9e 13326 if (address_mode == mode_64bit)
7967e09e 13327 oappend (names64[modrm.reg + add]);
90700ea2 13328 else
7967e09e 13329 oappend (names32[modrm.reg + add]);
90700ea2 13330 break;
252b5132
RH
13331 default:
13332 oappend (INTERNAL_DISASSEMBLER_ERROR);
13333 break;
13334 }
13335}
13336
52b15da3 13337static bfd_vma
26ca5450 13338get64 (void)
52b15da3 13339{
5dd0794d 13340 bfd_vma x;
52b15da3 13341#ifdef BFD64
5dd0794d
AM
13342 unsigned int a;
13343 unsigned int b;
13344
52b15da3
JH
13345 FETCH_DATA (the_info, codep + 8);
13346 a = *codep++ & 0xff;
13347 a |= (*codep++ & 0xff) << 8;
13348 a |= (*codep++ & 0xff) << 16;
13349 a |= (*codep++ & 0xff) << 24;
5dd0794d 13350 b = *codep++ & 0xff;
52b15da3
JH
13351 b |= (*codep++ & 0xff) << 8;
13352 b |= (*codep++ & 0xff) << 16;
13353 b |= (*codep++ & 0xff) << 24;
13354 x = a + ((bfd_vma) b << 32);
13355#else
6608db57 13356 abort ();
5dd0794d 13357 x = 0;
52b15da3
JH
13358#endif
13359 return x;
13360}
13361
13362static bfd_signed_vma
26ca5450 13363get32 (void)
252b5132 13364{
52b15da3 13365 bfd_signed_vma x = 0;
252b5132
RH
13366
13367 FETCH_DATA (the_info, codep + 4);
52b15da3
JH
13368 x = *codep++ & (bfd_signed_vma) 0xff;
13369 x |= (*codep++ & (bfd_signed_vma) 0xff) << 8;
13370 x |= (*codep++ & (bfd_signed_vma) 0xff) << 16;
13371 x |= (*codep++ & (bfd_signed_vma) 0xff) << 24;
13372 return x;
13373}
13374
13375static bfd_signed_vma
26ca5450 13376get32s (void)
52b15da3
JH
13377{
13378 bfd_signed_vma x = 0;
13379
13380 FETCH_DATA (the_info, codep + 4);
13381 x = *codep++ & (bfd_signed_vma) 0xff;
13382 x |= (*codep++ & (bfd_signed_vma) 0xff) << 8;
13383 x |= (*codep++ & (bfd_signed_vma) 0xff) << 16;
13384 x |= (*codep++ & (bfd_signed_vma) 0xff) << 24;
13385
13386 x = (x ^ ((bfd_signed_vma) 1 << 31)) - ((bfd_signed_vma) 1 << 31);
13387
252b5132
RH
13388 return x;
13389}
13390
13391static int
26ca5450 13392get16 (void)
252b5132
RH
13393{
13394 int x = 0;
13395
13396 FETCH_DATA (the_info, codep + 2);
13397 x = *codep++ & 0xff;
13398 x |= (*codep++ & 0xff) << 8;
13399 return x;
13400}
13401
13402static void
26ca5450 13403set_op (bfd_vma op, int riprel)
252b5132
RH
13404{
13405 op_index[op_ad] = op_ad;
cb712a9e 13406 if (address_mode == mode_64bit)
7081ff04
AJ
13407 {
13408 op_address[op_ad] = op;
13409 op_riprel[op_ad] = riprel;
13410 }
13411 else
13412 {
13413 /* Mask to get a 32-bit address. */
13414 op_address[op_ad] = op & 0xffffffff;
13415 op_riprel[op_ad] = riprel & 0xffffffff;
13416 }
252b5132
RH
13417}
13418
13419static void
26ca5450 13420OP_REG (int code, int sizeflag)
252b5132 13421{
2da11e11 13422 const char *s;
9b60702d 13423 int add;
161a04f6
L
13424 USED_REX (REX_B);
13425 if (rex & REX_B)
52b15da3 13426 add = 8;
9b60702d
L
13427 else
13428 add = 0;
52b15da3
JH
13429
13430 switch (code)
13431 {
52b15da3
JH
13432 case ax_reg: case cx_reg: case dx_reg: case bx_reg:
13433 case sp_reg: case bp_reg: case si_reg: case di_reg:
13434 s = names16[code - ax_reg + add];
13435 break;
13436 case es_reg: case ss_reg: case cs_reg:
13437 case ds_reg: case fs_reg: case gs_reg:
13438 s = names_seg[code - es_reg + add];
13439 break;
13440 case al_reg: case ah_reg: case cl_reg: case ch_reg:
13441 case dl_reg: case dh_reg: case bl_reg: case bh_reg:
13442 USED_REX (0);
13443 if (rex)
13444 s = names8rex[code - al_reg + add];
13445 else
13446 s = names8[code - al_reg];
13447 break;
6439fc28
AM
13448 case rAX_reg: case rCX_reg: case rDX_reg: case rBX_reg:
13449 case rSP_reg: case rBP_reg: case rSI_reg: case rDI_reg:
cb712a9e 13450 if (address_mode == mode_64bit && (sizeflag & DFLAG))
6439fc28
AM
13451 {
13452 s = names64[code - rAX_reg + add];
13453 break;
13454 }
13455 code += eAX_reg - rAX_reg;
6608db57 13456 /* Fall through. */
52b15da3
JH
13457 case eAX_reg: case eCX_reg: case eDX_reg: case eBX_reg:
13458 case eSP_reg: case eBP_reg: case eSI_reg: case eDI_reg:
161a04f6
L
13459 USED_REX (REX_W);
13460 if (rex & REX_W)
52b15da3 13461 s = names64[code - eAX_reg + add];
52b15da3 13462 else
f16cd0d5
L
13463 {
13464 if (sizeflag & DFLAG)
13465 s = names32[code - eAX_reg + add];
13466 else
13467 s = names16[code - eAX_reg + add];
13468 used_prefixes |= (prefixes & PREFIX_DATA);
13469 }
52b15da3 13470 break;
52b15da3
JH
13471 default:
13472 s = INTERNAL_DISASSEMBLER_ERROR;
13473 break;
13474 }
13475 oappend (s);
13476}
13477
13478static void
26ca5450 13479OP_IMREG (int code, int sizeflag)
52b15da3
JH
13480{
13481 const char *s;
252b5132
RH
13482
13483 switch (code)
13484 {
13485 case indir_dx_reg:
d708bcba 13486 if (intel_syntax)
52fd6d94 13487 s = "dx";
d708bcba 13488 else
db6eb5be 13489 s = "(%dx)";
252b5132
RH
13490 break;
13491 case ax_reg: case cx_reg: case dx_reg: case bx_reg:
13492 case sp_reg: case bp_reg: case si_reg: case di_reg:
13493 s = names16[code - ax_reg];
13494 break;
13495 case es_reg: case ss_reg: case cs_reg:
13496 case ds_reg: case fs_reg: case gs_reg:
13497 s = names_seg[code - es_reg];
13498 break;
13499 case al_reg: case ah_reg: case cl_reg: case ch_reg:
13500 case dl_reg: case dh_reg: case bl_reg: case bh_reg:
52b15da3
JH
13501 USED_REX (0);
13502 if (rex)
13503 s = names8rex[code - al_reg];
13504 else
13505 s = names8[code - al_reg];
252b5132
RH
13506 break;
13507 case eAX_reg: case eCX_reg: case eDX_reg: case eBX_reg:
13508 case eSP_reg: case eBP_reg: case eSI_reg: case eDI_reg:
161a04f6
L
13509 USED_REX (REX_W);
13510 if (rex & REX_W)
52b15da3 13511 s = names64[code - eAX_reg];
252b5132 13512 else
f16cd0d5
L
13513 {
13514 if (sizeflag & DFLAG)
13515 s = names32[code - eAX_reg];
13516 else
13517 s = names16[code - eAX_reg];
13518 used_prefixes |= (prefixes & PREFIX_DATA);
13519 }
252b5132 13520 break;
52fd6d94 13521 case z_mode_ax_reg:
161a04f6 13522 if ((rex & REX_W) || (sizeflag & DFLAG))
52fd6d94
JB
13523 s = *names32;
13524 else
13525 s = *names16;
161a04f6 13526 if (!(rex & REX_W))
52fd6d94
JB
13527 used_prefixes |= (prefixes & PREFIX_DATA);
13528 break;
252b5132
RH
13529 default:
13530 s = INTERNAL_DISASSEMBLER_ERROR;
13531 break;
13532 }
13533 oappend (s);
13534}
13535
13536static void
26ca5450 13537OP_I (int bytemode, int sizeflag)
252b5132 13538{
52b15da3
JH
13539 bfd_signed_vma op;
13540 bfd_signed_vma mask = -1;
252b5132
RH
13541
13542 switch (bytemode)
13543 {
13544 case b_mode:
13545 FETCH_DATA (the_info, codep + 1);
52b15da3
JH
13546 op = *codep++;
13547 mask = 0xff;
13548 break;
13549 case q_mode:
cb712a9e 13550 if (address_mode == mode_64bit)
6439fc28
AM
13551 {
13552 op = get32s ();
13553 break;
13554 }
6608db57 13555 /* Fall through. */
252b5132 13556 case v_mode:
161a04f6
L
13557 USED_REX (REX_W);
13558 if (rex & REX_W)
52b15da3 13559 op = get32s ();
252b5132 13560 else
52b15da3 13561 {
f16cd0d5
L
13562 if (sizeflag & DFLAG)
13563 {
13564 op = get32 ();
13565 mask = 0xffffffff;
13566 }
13567 else
13568 {
13569 op = get16 ();
13570 mask = 0xfffff;
13571 }
13572 used_prefixes |= (prefixes & PREFIX_DATA);
52b15da3 13573 }
252b5132
RH
13574 break;
13575 case w_mode:
52b15da3 13576 mask = 0xfffff;
252b5132
RH
13577 op = get16 ();
13578 break;
9306ca4a
JB
13579 case const_1_mode:
13580 if (intel_syntax)
13581 oappend ("1");
13582 return;
252b5132
RH
13583 default:
13584 oappend (INTERNAL_DISASSEMBLER_ERROR);
13585 return;
13586 }
13587
52b15da3
JH
13588 op &= mask;
13589 scratchbuf[0] = '$';
d708bcba
AM
13590 print_operand_value (scratchbuf + 1, 1, op);
13591 oappend (scratchbuf + intel_syntax);
52b15da3
JH
13592 scratchbuf[0] = '\0';
13593}
13594
13595static void
26ca5450 13596OP_I64 (int bytemode, int sizeflag)
52b15da3
JH
13597{
13598 bfd_signed_vma op;
13599 bfd_signed_vma mask = -1;
13600
cb712a9e 13601 if (address_mode != mode_64bit)
6439fc28
AM
13602 {
13603 OP_I (bytemode, sizeflag);
13604 return;
13605 }
13606
52b15da3
JH
13607 switch (bytemode)
13608 {
13609 case b_mode:
13610 FETCH_DATA (the_info, codep + 1);
13611 op = *codep++;
13612 mask = 0xff;
13613 break;
13614 case v_mode:
161a04f6
L
13615 USED_REX (REX_W);
13616 if (rex & REX_W)
52b15da3 13617 op = get64 ();
52b15da3
JH
13618 else
13619 {
f16cd0d5
L
13620 if (sizeflag & DFLAG)
13621 {
13622 op = get32 ();
13623 mask = 0xffffffff;
13624 }
13625 else
13626 {
13627 op = get16 ();
13628 mask = 0xfffff;
13629 }
13630 used_prefixes |= (prefixes & PREFIX_DATA);
52b15da3 13631 }
52b15da3
JH
13632 break;
13633 case w_mode:
13634 mask = 0xfffff;
13635 op = get16 ();
13636 break;
13637 default:
13638 oappend (INTERNAL_DISASSEMBLER_ERROR);
13639 return;
13640 }
13641
13642 op &= mask;
13643 scratchbuf[0] = '$';
d708bcba
AM
13644 print_operand_value (scratchbuf + 1, 1, op);
13645 oappend (scratchbuf + intel_syntax);
252b5132
RH
13646 scratchbuf[0] = '\0';
13647}
13648
13649static void
26ca5450 13650OP_sI (int bytemode, int sizeflag)
252b5132 13651{
52b15da3 13652 bfd_signed_vma op;
252b5132
RH
13653
13654 switch (bytemode)
13655 {
13656 case b_mode:
e3949f17 13657 case b_T_mode:
252b5132
RH
13658 FETCH_DATA (the_info, codep + 1);
13659 op = *codep++;
13660 if ((op & 0x80) != 0)
13661 op -= 0x100;
e3949f17
L
13662 if (bytemode == b_T_mode)
13663 {
13664 if (address_mode != mode_64bit
13665 || !(sizeflag & DFLAG))
13666 {
13667 if (sizeflag & DFLAG)
13668 op &= 0xffffffff;
13669 else
13670 op &= 0xffff;
13671 }
13672 }
13673 else
13674 {
13675 if (!(rex & REX_W))
13676 {
13677 if (sizeflag & DFLAG)
13678 op &= 0xffffffff;
13679 else
13680 op &= 0xffff;
13681 }
13682 }
252b5132
RH
13683 break;
13684 case v_mode:
d9e3625e 13685 if (sizeflag & DFLAG)
52b15da3 13686 op = get32s ();
252b5132 13687 else
d9e3625e 13688 op = get16 ();
252b5132
RH
13689 break;
13690 default:
13691 oappend (INTERNAL_DISASSEMBLER_ERROR);
13692 return;
13693 }
52b15da3
JH
13694
13695 scratchbuf[0] = '$';
13696 print_operand_value (scratchbuf + 1, 1, op);
d708bcba 13697 oappend (scratchbuf + intel_syntax);
252b5132
RH
13698}
13699
13700static void
26ca5450 13701OP_J (int bytemode, int sizeflag)
252b5132 13702{
52b15da3 13703 bfd_vma disp;
7081ff04 13704 bfd_vma mask = -1;
65ca155d 13705 bfd_vma segment = 0;
252b5132
RH
13706
13707 switch (bytemode)
13708 {
13709 case b_mode:
13710 FETCH_DATA (the_info, codep + 1);
13711 disp = *codep++;
13712 if ((disp & 0x80) != 0)
13713 disp -= 0x100;
13714 break;
13715 case v_mode:
f16cd0d5 13716 USED_REX (REX_W);
161a04f6 13717 if ((sizeflag & DFLAG) || (rex & REX_W))
52b15da3 13718 disp = get32s ();
252b5132
RH
13719 else
13720 {
13721 disp = get16 ();
206717e8
L
13722 if ((disp & 0x8000) != 0)
13723 disp -= 0x10000;
65ca155d
L
13724 /* In 16bit mode, address is wrapped around at 64k within
13725 the same segment. Otherwise, a data16 prefix on a jump
13726 instruction means that the pc is masked to 16 bits after
13727 the displacement is added! */
13728 mask = 0xffff;
13729 if ((prefixes & PREFIX_DATA) == 0)
13730 segment = ((start_pc + codep - start_codep)
13731 & ~((bfd_vma) 0xffff));
252b5132 13732 }
f16cd0d5
L
13733 if (!(rex & REX_W))
13734 used_prefixes |= (prefixes & PREFIX_DATA);
252b5132
RH
13735 break;
13736 default:
13737 oappend (INTERNAL_DISASSEMBLER_ERROR);
13738 return;
13739 }
42d5f9c6 13740 disp = ((start_pc + (codep - start_codep) + disp) & mask) | segment;
52b15da3
JH
13741 set_op (disp, 0);
13742 print_operand_value (scratchbuf, 1, disp);
252b5132
RH
13743 oappend (scratchbuf);
13744}
13745
252b5132 13746static void
ed7841b3 13747OP_SEG (int bytemode, int sizeflag)
252b5132 13748{
ed7841b3 13749 if (bytemode == w_mode)
7967e09e 13750 oappend (names_seg[modrm.reg]);
ed7841b3 13751 else
7967e09e 13752 OP_E (modrm.mod == 3 ? bytemode : w_mode, sizeflag);
252b5132
RH
13753}
13754
13755static void
26ca5450 13756OP_DIR (int dummy ATTRIBUTE_UNUSED, int sizeflag)
252b5132
RH
13757{
13758 int seg, offset;
13759
c608c12e 13760 if (sizeflag & DFLAG)
252b5132 13761 {
c608c12e
AM
13762 offset = get32 ();
13763 seg = get16 ();
252b5132 13764 }
c608c12e
AM
13765 else
13766 {
13767 offset = get16 ();
13768 seg = get16 ();
13769 }
7d421014 13770 used_prefixes |= (prefixes & PREFIX_DATA);
d708bcba 13771 if (intel_syntax)
3f31e633 13772 sprintf (scratchbuf, "0x%x:0x%x", seg, offset);
d708bcba
AM
13773 else
13774 sprintf (scratchbuf, "$0x%x,$0x%x", seg, offset);
c608c12e 13775 oappend (scratchbuf);
252b5132
RH
13776}
13777
252b5132 13778static void
3f31e633 13779OP_OFF (int bytemode, int sizeflag)
252b5132 13780{
52b15da3 13781 bfd_vma off;
252b5132 13782
3f31e633
JB
13783 if (intel_syntax && (sizeflag & SUFFIX_ALWAYS))
13784 intel_operand_size (bytemode, sizeflag);
252b5132
RH
13785 append_seg ();
13786
cb712a9e 13787 if ((sizeflag & AFLAG) || address_mode == mode_64bit)
252b5132
RH
13788 off = get32 ();
13789 else
13790 off = get16 ();
13791
13792 if (intel_syntax)
13793 {
13794 if (!(prefixes & (PREFIX_CS | PREFIX_SS | PREFIX_DS
db6eb5be 13795 | PREFIX_ES | PREFIX_FS | PREFIX_GS)))
252b5132 13796 {
d708bcba 13797 oappend (names_seg[ds_reg - es_reg]);
252b5132
RH
13798 oappend (":");
13799 }
13800 }
52b15da3
JH
13801 print_operand_value (scratchbuf, 1, off);
13802 oappend (scratchbuf);
13803}
6439fc28 13804
52b15da3 13805static void
3f31e633 13806OP_OFF64 (int bytemode, int sizeflag)
52b15da3
JH
13807{
13808 bfd_vma off;
13809
539e75ad
L
13810 if (address_mode != mode_64bit
13811 || (prefixes & PREFIX_ADDR))
6439fc28
AM
13812 {
13813 OP_OFF (bytemode, sizeflag);
13814 return;
13815 }
13816
3f31e633
JB
13817 if (intel_syntax && (sizeflag & SUFFIX_ALWAYS))
13818 intel_operand_size (bytemode, sizeflag);
52b15da3
JH
13819 append_seg ();
13820
6608db57 13821 off = get64 ();
52b15da3
JH
13822
13823 if (intel_syntax)
13824 {
13825 if (!(prefixes & (PREFIX_CS | PREFIX_SS | PREFIX_DS
db6eb5be 13826 | PREFIX_ES | PREFIX_FS | PREFIX_GS)))
52b15da3 13827 {
d708bcba 13828 oappend (names_seg[ds_reg - es_reg]);
52b15da3
JH
13829 oappend (":");
13830 }
13831 }
13832 print_operand_value (scratchbuf, 1, off);
252b5132
RH
13833 oappend (scratchbuf);
13834}
13835
13836static void
26ca5450 13837ptr_reg (int code, int sizeflag)
252b5132 13838{
2da11e11 13839 const char *s;
d708bcba 13840
1d9f512f 13841 *obufp++ = open_char;
20f0a1fc 13842 used_prefixes |= (prefixes & PREFIX_ADDR);
cb712a9e 13843 if (address_mode == mode_64bit)
c1a64871
JH
13844 {
13845 if (!(sizeflag & AFLAG))
db6eb5be 13846 s = names32[code - eAX_reg];
c1a64871 13847 else
db6eb5be 13848 s = names64[code - eAX_reg];
c1a64871 13849 }
52b15da3 13850 else if (sizeflag & AFLAG)
252b5132
RH
13851 s = names32[code - eAX_reg];
13852 else
13853 s = names16[code - eAX_reg];
13854 oappend (s);
1d9f512f
AM
13855 *obufp++ = close_char;
13856 *obufp = 0;
252b5132
RH
13857}
13858
13859static void
26ca5450 13860OP_ESreg (int code, int sizeflag)
252b5132 13861{
9306ca4a 13862 if (intel_syntax)
52fd6d94
JB
13863 {
13864 switch (codep[-1])
13865 {
13866 case 0x6d: /* insw/insl */
13867 intel_operand_size (z_mode, sizeflag);
13868 break;
13869 case 0xa5: /* movsw/movsl/movsq */
13870 case 0xa7: /* cmpsw/cmpsl/cmpsq */
13871 case 0xab: /* stosw/stosl */
13872 case 0xaf: /* scasw/scasl */
13873 intel_operand_size (v_mode, sizeflag);
13874 break;
13875 default:
13876 intel_operand_size (b_mode, sizeflag);
13877 }
13878 }
d708bcba 13879 oappend ("%es:" + intel_syntax);
252b5132
RH
13880 ptr_reg (code, sizeflag);
13881}
13882
13883static void
26ca5450 13884OP_DSreg (int code, int sizeflag)
252b5132 13885{
9306ca4a 13886 if (intel_syntax)
52fd6d94
JB
13887 {
13888 switch (codep[-1])
13889 {
13890 case 0x6f: /* outsw/outsl */
13891 intel_operand_size (z_mode, sizeflag);
13892 break;
13893 case 0xa5: /* movsw/movsl/movsq */
13894 case 0xa7: /* cmpsw/cmpsl/cmpsq */
13895 case 0xad: /* lodsw/lodsl/lodsq */
13896 intel_operand_size (v_mode, sizeflag);
13897 break;
13898 default:
13899 intel_operand_size (b_mode, sizeflag);
13900 }
13901 }
252b5132
RH
13902 if ((prefixes
13903 & (PREFIX_CS
13904 | PREFIX_DS
13905 | PREFIX_SS
13906 | PREFIX_ES
13907 | PREFIX_FS
13908 | PREFIX_GS)) == 0)
13909 prefixes |= PREFIX_DS;
6608db57 13910 append_seg ();
252b5132
RH
13911 ptr_reg (code, sizeflag);
13912}
13913
252b5132 13914static void
26ca5450 13915OP_C (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 13916{
9b60702d 13917 int add;
161a04f6 13918 if (rex & REX_R)
c4a530c5 13919 {
161a04f6 13920 USED_REX (REX_R);
c4a530c5
JB
13921 add = 8;
13922 }
cb712a9e 13923 else if (address_mode != mode_64bit && (prefixes & PREFIX_LOCK))
c4a530c5 13924 {
f16cd0d5 13925 all_prefixes[last_lock_prefix] = 0;
c4a530c5
JB
13926 used_prefixes |= PREFIX_LOCK;
13927 add = 8;
13928 }
9b60702d
L
13929 else
13930 add = 0;
7967e09e 13931 sprintf (scratchbuf, "%%cr%d", modrm.reg + add);
d708bcba 13932 oappend (scratchbuf + intel_syntax);
252b5132
RH
13933}
13934
252b5132 13935static void
26ca5450 13936OP_D (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 13937{
9b60702d 13938 int add;
161a04f6
L
13939 USED_REX (REX_R);
13940 if (rex & REX_R)
52b15da3 13941 add = 8;
9b60702d
L
13942 else
13943 add = 0;
d708bcba 13944 if (intel_syntax)
7967e09e 13945 sprintf (scratchbuf, "db%d", modrm.reg + add);
d708bcba 13946 else
7967e09e 13947 sprintf (scratchbuf, "%%db%d", modrm.reg + add);
252b5132
RH
13948 oappend (scratchbuf);
13949}
13950
252b5132 13951static void
26ca5450 13952OP_T (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 13953{
7967e09e 13954 sprintf (scratchbuf, "%%tr%d", modrm.reg);
d708bcba 13955 oappend (scratchbuf + intel_syntax);
252b5132
RH
13956}
13957
13958static void
6f74c397 13959OP_R (int bytemode, int sizeflag)
252b5132 13960{
7967e09e 13961 if (modrm.mod == 3)
2da11e11
AM
13962 OP_E (bytemode, sizeflag);
13963 else
6608db57 13964 BadOp ();
252b5132
RH
13965}
13966
13967static void
26ca5450 13968OP_MMX (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 13969{
b9733481
L
13970 int reg = modrm.reg;
13971 const char **names;
13972
041bd2e0
JH
13973 used_prefixes |= (prefixes & PREFIX_DATA);
13974 if (prefixes & PREFIX_DATA)
20f0a1fc 13975 {
b9733481 13976 names = names_xmm;
161a04f6
L
13977 USED_REX (REX_R);
13978 if (rex & REX_R)
b9733481 13979 reg += 8;
20f0a1fc 13980 }
041bd2e0 13981 else
b9733481
L
13982 names = names_mm;
13983 oappend (names[reg]);
252b5132
RH
13984}
13985
c608c12e 13986static void
c0f3af97 13987OP_XMM (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
c608c12e 13988{
b9733481
L
13989 int reg = modrm.reg;
13990 const char **names;
13991
161a04f6
L
13992 USED_REX (REX_R);
13993 if (rex & REX_R)
b9733481 13994 reg += 8;
539f890d
L
13995 if (need_vex
13996 && bytemode != xmm_mode
13997 && bytemode != scalar_mode)
c0f3af97
L
13998 {
13999 switch (vex.length)
14000 {
14001 case 128:
b9733481 14002 names = names_xmm;
c0f3af97
L
14003 break;
14004 case 256:
6c30d220
L
14005 if (vex.w || bytemode != vex_vsib_q_w_dq_mode)
14006 names = names_ymm;
14007 else
14008 names = names_xmm;
c0f3af97
L
14009 break;
14010 default:
14011 abort ();
14012 }
14013 }
14014 else
b9733481
L
14015 names = names_xmm;
14016 oappend (names[reg]);
c608c12e
AM
14017}
14018
252b5132 14019static void
26ca5450 14020OP_EM (int bytemode, int sizeflag)
252b5132 14021{
b9733481
L
14022 int reg;
14023 const char **names;
14024
7967e09e 14025 if (modrm.mod != 3)
252b5132 14026 {
b6169b20
L
14027 if (intel_syntax
14028 && (bytemode == v_mode || bytemode == v_swap_mode))
9306ca4a
JB
14029 {
14030 bytemode = (prefixes & PREFIX_DATA) ? x_mode : q_mode;
14031 used_prefixes |= (prefixes & PREFIX_DATA);
14032 }
252b5132
RH
14033 OP_E (bytemode, sizeflag);
14034 return;
14035 }
14036
b6169b20
L
14037 if ((sizeflag & SUFFIX_ALWAYS) && bytemode == v_swap_mode)
14038 swap_operand ();
14039
6608db57 14040 /* Skip mod/rm byte. */
4bba6815 14041 MODRM_CHECK;
252b5132 14042 codep++;
041bd2e0 14043 used_prefixes |= (prefixes & PREFIX_DATA);
b9733481 14044 reg = modrm.rm;
041bd2e0 14045 if (prefixes & PREFIX_DATA)
20f0a1fc 14046 {
b9733481 14047 names = names_xmm;
161a04f6
L
14048 USED_REX (REX_B);
14049 if (rex & REX_B)
b9733481 14050 reg += 8;
20f0a1fc 14051 }
041bd2e0 14052 else
b9733481
L
14053 names = names_mm;
14054 oappend (names[reg]);
252b5132
RH
14055}
14056
246c51aa
L
14057/* cvt* are the only instructions in sse2 which have
14058 both SSE and MMX operands and also have 0x66 prefix
14059 in their opcode. 0x66 was originally used to differentiate
14060 between SSE and MMX instruction(operands). So we have to handle the
4d9567e0
MM
14061 cvt* separately using OP_EMC and OP_MXC */
14062static void
14063OP_EMC (int bytemode, int sizeflag)
14064{
7967e09e 14065 if (modrm.mod != 3)
4d9567e0
MM
14066 {
14067 if (intel_syntax && bytemode == v_mode)
14068 {
14069 bytemode = (prefixes & PREFIX_DATA) ? x_mode : q_mode;
14070 used_prefixes |= (prefixes & PREFIX_DATA);
14071 }
14072 OP_E (bytemode, sizeflag);
14073 return;
14074 }
246c51aa 14075
4d9567e0
MM
14076 /* Skip mod/rm byte. */
14077 MODRM_CHECK;
14078 codep++;
14079 used_prefixes |= (prefixes & PREFIX_DATA);
b9733481 14080 oappend (names_mm[modrm.rm]);
4d9567e0
MM
14081}
14082
14083static void
14084OP_MXC (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
14085{
14086 used_prefixes |= (prefixes & PREFIX_DATA);
b9733481 14087 oappend (names_mm[modrm.reg]);
4d9567e0
MM
14088}
14089
c608c12e 14090static void
26ca5450 14091OP_EX (int bytemode, int sizeflag)
c608c12e 14092{
b9733481
L
14093 int reg;
14094 const char **names;
d6f574e0
L
14095
14096 /* Skip mod/rm byte. */
14097 MODRM_CHECK;
14098 codep++;
14099
7967e09e 14100 if (modrm.mod != 3)
c608c12e 14101 {
c1e679ec 14102 OP_E_memory (bytemode, sizeflag);
c608c12e
AM
14103 return;
14104 }
d6f574e0 14105
b9733481 14106 reg = modrm.rm;
161a04f6
L
14107 USED_REX (REX_B);
14108 if (rex & REX_B)
b9733481 14109 reg += 8;
c608c12e 14110
b6169b20 14111 if ((sizeflag & SUFFIX_ALWAYS)
fa99fab2
L
14112 && (bytemode == x_swap_mode
14113 || bytemode == d_swap_mode
539f890d
L
14114 || bytemode == d_scalar_swap_mode
14115 || bytemode == q_swap_mode
14116 || bytemode == q_scalar_swap_mode))
b6169b20
L
14117 swap_operand ();
14118
c0f3af97
L
14119 if (need_vex
14120 && bytemode != xmm_mode
6c30d220
L
14121 && bytemode != xmmdw_mode
14122 && bytemode != xmmqd_mode
14123 && bytemode != xmm_mb_mode
14124 && bytemode != xmm_mw_mode
14125 && bytemode != xmm_md_mode
14126 && bytemode != xmm_mq_mode
539f890d
L
14127 && bytemode != xmmq_mode
14128 && bytemode != d_scalar_mode
14129 && bytemode != d_scalar_swap_mode
14130 && bytemode != q_scalar_mode
1c480963
L
14131 && bytemode != q_scalar_swap_mode
14132 && bytemode != vex_scalar_w_dq_mode)
c0f3af97
L
14133 {
14134 switch (vex.length)
14135 {
14136 case 128:
b9733481 14137 names = names_xmm;
c0f3af97
L
14138 break;
14139 case 256:
b9733481 14140 names = names_ymm;
c0f3af97
L
14141 break;
14142 default:
14143 abort ();
14144 }
14145 }
14146 else
b9733481
L
14147 names = names_xmm;
14148 oappend (names[reg]);
c608c12e
AM
14149}
14150
252b5132 14151static void
26ca5450 14152OP_MS (int bytemode, int sizeflag)
252b5132 14153{
7967e09e 14154 if (modrm.mod == 3)
2da11e11
AM
14155 OP_EM (bytemode, sizeflag);
14156 else
6608db57 14157 BadOp ();
252b5132
RH
14158}
14159
992aaec9 14160static void
26ca5450 14161OP_XS (int bytemode, int sizeflag)
992aaec9 14162{
7967e09e 14163 if (modrm.mod == 3)
992aaec9
AM
14164 OP_EX (bytemode, sizeflag);
14165 else
6608db57 14166 BadOp ();
992aaec9
AM
14167}
14168
cc0ec051
AM
14169static void
14170OP_M (int bytemode, int sizeflag)
14171{
7967e09e 14172 if (modrm.mod == 3)
75413a22
L
14173 /* bad bound,lea,lds,les,lfs,lgs,lss,cmpxchg8b,vmptrst modrm */
14174 BadOp ();
cc0ec051
AM
14175 else
14176 OP_E (bytemode, sizeflag);
14177}
14178
14179static void
14180OP_0f07 (int bytemode, int sizeflag)
14181{
7967e09e 14182 if (modrm.mod != 3 || modrm.rm != 0)
cc0ec051
AM
14183 BadOp ();
14184 else
14185 OP_E (bytemode, sizeflag);
14186}
14187
46e883c5 14188/* NOP is an alias of "xchg %ax,%ax" in 16bit mode, "xchg %eax,%eax" in
246c51aa 14189 32bit mode and "xchg %rax,%rax" in 64bit mode. */
46e883c5 14190
cc0ec051 14191static void
46e883c5 14192NOP_Fixup1 (int bytemode, int sizeflag)
cc0ec051 14193{
8b38ad71
L
14194 if ((prefixes & PREFIX_DATA) != 0
14195 || (rex != 0
14196 && rex != 0x48
14197 && address_mode == mode_64bit))
46e883c5
L
14198 OP_REG (bytemode, sizeflag);
14199 else
14200 strcpy (obuf, "nop");
14201}
14202
14203static void
14204NOP_Fixup2 (int bytemode, int sizeflag)
14205{
8b38ad71
L
14206 if ((prefixes & PREFIX_DATA) != 0
14207 || (rex != 0
14208 && rex != 0x48
14209 && address_mode == mode_64bit))
46e883c5 14210 OP_IMREG (bytemode, sizeflag);
cc0ec051
AM
14211}
14212
84037f8c 14213static const char *const Suffix3DNow[] = {
252b5132
RH
14214/* 00 */ NULL, NULL, NULL, NULL,
14215/* 04 */ NULL, NULL, NULL, NULL,
14216/* 08 */ NULL, NULL, NULL, NULL,
9e525108 14217/* 0C */ "pi2fw", "pi2fd", NULL, NULL,
252b5132
RH
14218/* 10 */ NULL, NULL, NULL, NULL,
14219/* 14 */ NULL, NULL, NULL, NULL,
14220/* 18 */ NULL, NULL, NULL, NULL,
9e525108 14221/* 1C */ "pf2iw", "pf2id", NULL, NULL,
252b5132
RH
14222/* 20 */ NULL, NULL, NULL, NULL,
14223/* 24 */ NULL, NULL, NULL, NULL,
14224/* 28 */ NULL, NULL, NULL, NULL,
14225/* 2C */ NULL, NULL, NULL, NULL,
14226/* 30 */ NULL, NULL, NULL, NULL,
14227/* 34 */ NULL, NULL, NULL, NULL,
14228/* 38 */ NULL, NULL, NULL, NULL,
14229/* 3C */ NULL, NULL, NULL, NULL,
14230/* 40 */ NULL, NULL, NULL, NULL,
14231/* 44 */ NULL, NULL, NULL, NULL,
14232/* 48 */ NULL, NULL, NULL, NULL,
14233/* 4C */ NULL, NULL, NULL, NULL,
14234/* 50 */ NULL, NULL, NULL, NULL,
14235/* 54 */ NULL, NULL, NULL, NULL,
14236/* 58 */ NULL, NULL, NULL, NULL,
14237/* 5C */ NULL, NULL, NULL, NULL,
14238/* 60 */ NULL, NULL, NULL, NULL,
14239/* 64 */ NULL, NULL, NULL, NULL,
14240/* 68 */ NULL, NULL, NULL, NULL,
14241/* 6C */ NULL, NULL, NULL, NULL,
14242/* 70 */ NULL, NULL, NULL, NULL,
14243/* 74 */ NULL, NULL, NULL, NULL,
14244/* 78 */ NULL, NULL, NULL, NULL,
14245/* 7C */ NULL, NULL, NULL, NULL,
14246/* 80 */ NULL, NULL, NULL, NULL,
14247/* 84 */ NULL, NULL, NULL, NULL,
9e525108
AM
14248/* 88 */ NULL, NULL, "pfnacc", NULL,
14249/* 8C */ NULL, NULL, "pfpnacc", NULL,
252b5132
RH
14250/* 90 */ "pfcmpge", NULL, NULL, NULL,
14251/* 94 */ "pfmin", NULL, "pfrcp", "pfrsqrt",
14252/* 98 */ NULL, NULL, "pfsub", NULL,
14253/* 9C */ NULL, NULL, "pfadd", NULL,
14254/* A0 */ "pfcmpgt", NULL, NULL, NULL,
14255/* A4 */ "pfmax", NULL, "pfrcpit1", "pfrsqit1",
14256/* A8 */ NULL, NULL, "pfsubr", NULL,
14257/* AC */ NULL, NULL, "pfacc", NULL,
14258/* B0 */ "pfcmpeq", NULL, NULL, NULL,
9beff690 14259/* B4 */ "pfmul", NULL, "pfrcpit2", "pmulhrw",
9e525108 14260/* B8 */ NULL, NULL, NULL, "pswapd",
252b5132
RH
14261/* BC */ NULL, NULL, NULL, "pavgusb",
14262/* C0 */ NULL, NULL, NULL, NULL,
14263/* C4 */ NULL, NULL, NULL, NULL,
14264/* C8 */ NULL, NULL, NULL, NULL,
14265/* CC */ NULL, NULL, NULL, NULL,
14266/* D0 */ NULL, NULL, NULL, NULL,
14267/* D4 */ NULL, NULL, NULL, NULL,
14268/* D8 */ NULL, NULL, NULL, NULL,
14269/* DC */ NULL, NULL, NULL, NULL,
14270/* E0 */ NULL, NULL, NULL, NULL,
14271/* E4 */ NULL, NULL, NULL, NULL,
14272/* E8 */ NULL, NULL, NULL, NULL,
14273/* EC */ NULL, NULL, NULL, NULL,
14274/* F0 */ NULL, NULL, NULL, NULL,
14275/* F4 */ NULL, NULL, NULL, NULL,
14276/* F8 */ NULL, NULL, NULL, NULL,
14277/* FC */ NULL, NULL, NULL, NULL,
14278};
14279
14280static void
26ca5450 14281OP_3DNowSuffix (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132
RH
14282{
14283 const char *mnemonic;
14284
14285 FETCH_DATA (the_info, codep + 1);
14286 /* AMD 3DNow! instructions are specified by an opcode suffix in the
14287 place where an 8-bit immediate would normally go. ie. the last
14288 byte of the instruction. */
ea397f5b 14289 obufp = mnemonicendp;
c608c12e 14290 mnemonic = Suffix3DNow[*codep++ & 0xff];
252b5132 14291 if (mnemonic)
2da11e11 14292 oappend (mnemonic);
252b5132
RH
14293 else
14294 {
14295 /* Since a variable sized modrm/sib chunk is between the start
14296 of the opcode (0x0f0f) and the opcode suffix, we need to do
14297 all the modrm processing first, and don't know until now that
14298 we have a bad opcode. This necessitates some cleaning up. */
ce518a5f
L
14299 op_out[0][0] = '\0';
14300 op_out[1][0] = '\0';
6608db57 14301 BadOp ();
252b5132 14302 }
ea397f5b 14303 mnemonicendp = obufp;
252b5132 14304}
c608c12e 14305
ea397f5b
L
14306static struct op simd_cmp_op[] =
14307{
14308 { STRING_COMMA_LEN ("eq") },
14309 { STRING_COMMA_LEN ("lt") },
14310 { STRING_COMMA_LEN ("le") },
14311 { STRING_COMMA_LEN ("unord") },
14312 { STRING_COMMA_LEN ("neq") },
14313 { STRING_COMMA_LEN ("nlt") },
14314 { STRING_COMMA_LEN ("nle") },
14315 { STRING_COMMA_LEN ("ord") }
c608c12e
AM
14316};
14317
14318static void
ad19981d 14319CMP_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
c608c12e
AM
14320{
14321 unsigned int cmp_type;
14322
14323 FETCH_DATA (the_info, codep + 1);
14324 cmp_type = *codep++ & 0xff;
c0f3af97 14325 if (cmp_type < ARRAY_SIZE (simd_cmp_op))
c608c12e 14326 {
ad19981d 14327 char suffix [3];
ea397f5b 14328 char *p = mnemonicendp - 2;
ad19981d
L
14329 suffix[0] = p[0];
14330 suffix[1] = p[1];
14331 suffix[2] = '\0';
ea397f5b
L
14332 sprintf (p, "%s%s", simd_cmp_op[cmp_type].name, suffix);
14333 mnemonicendp += simd_cmp_op[cmp_type].len;
c608c12e
AM
14334 }
14335 else
14336 {
ad19981d
L
14337 /* We have a reserved extension byte. Output it directly. */
14338 scratchbuf[0] = '$';
14339 print_operand_value (scratchbuf + 1, 1, cmp_type);
14340 oappend (scratchbuf + intel_syntax);
14341 scratchbuf[0] = '\0';
c608c12e
AM
14342 }
14343}
14344
ca164297 14345static void
b844680a
L
14346OP_Mwait (int bytemode ATTRIBUTE_UNUSED,
14347 int sizeflag ATTRIBUTE_UNUSED)
14348{
14349 /* mwait %eax,%ecx */
14350 if (!intel_syntax)
14351 {
14352 const char **names = (address_mode == mode_64bit
14353 ? names64 : names32);
14354 strcpy (op_out[0], names[0]);
14355 strcpy (op_out[1], names[1]);
14356 two_source_ops = 1;
14357 }
14358 /* Skip mod/rm byte. */
14359 MODRM_CHECK;
14360 codep++;
14361}
14362
14363static void
14364OP_Monitor (int bytemode ATTRIBUTE_UNUSED,
14365 int sizeflag ATTRIBUTE_UNUSED)
ca164297 14366{
b844680a
L
14367 /* monitor %eax,%ecx,%edx" */
14368 if (!intel_syntax)
ca164297 14369 {
b844680a 14370 const char **op1_names;
cb712a9e
L
14371 const char **names = (address_mode == mode_64bit
14372 ? names64 : names32);
1d9f512f 14373
b844680a
L
14374 if (!(prefixes & PREFIX_ADDR))
14375 op1_names = (address_mode == mode_16bit
14376 ? names16 : names);
ca164297
L
14377 else
14378 {
b844680a 14379 /* Remove "addr16/addr32". */
f16cd0d5 14380 all_prefixes[last_addr_prefix] = 0;
b844680a
L
14381 op1_names = (address_mode != mode_32bit
14382 ? names32 : names16);
14383 used_prefixes |= PREFIX_ADDR;
ca164297 14384 }
b844680a
L
14385 strcpy (op_out[0], op1_names[0]);
14386 strcpy (op_out[1], names[1]);
14387 strcpy (op_out[2], names[2]);
14388 two_source_ops = 1;
ca164297 14389 }
b844680a
L
14390 /* Skip mod/rm byte. */
14391 MODRM_CHECK;
14392 codep++;
30123838
JB
14393}
14394
6608db57
KH
14395static void
14396BadOp (void)
2da11e11 14397{
6608db57
KH
14398 /* Throw away prefixes and 1st. opcode byte. */
14399 codep = insn_codep + 1;
2da11e11
AM
14400 oappend ("(bad)");
14401}
4cc91dba 14402
35c52694
L
14403static void
14404REP_Fixup (int bytemode, int sizeflag)
14405{
14406 /* The 0xf3 prefix should be displayed as "rep" for ins, outs, movs,
14407 lods and stos. */
35c52694 14408 if (prefixes & PREFIX_REPZ)
f16cd0d5 14409 all_prefixes[last_repz_prefix] = REP_PREFIX;
35c52694
L
14410
14411 switch (bytemode)
14412 {
14413 case al_reg:
14414 case eAX_reg:
14415 case indir_dx_reg:
14416 OP_IMREG (bytemode, sizeflag);
14417 break;
14418 case eDI_reg:
14419 OP_ESreg (bytemode, sizeflag);
14420 break;
14421 case eSI_reg:
14422 OP_DSreg (bytemode, sizeflag);
14423 break;
14424 default:
14425 abort ();
14426 break;
14427 }
14428}
f5804c90 14429
42164a71
L
14430/* Similar to OP_E. But the 0xf2/0xf3 prefixes should be displayed as
14431 "xacquire"/"xrelease" for memory operand if there is a LOCK prefix.
14432 */
14433
14434static void
14435HLE_Fixup1 (int bytemode, int sizeflag)
14436{
14437 if (modrm.mod != 3
14438 && (prefixes & PREFIX_LOCK) != 0)
14439 {
14440 if (prefixes & PREFIX_REPZ)
14441 all_prefixes[last_repz_prefix] = XRELEASE_PREFIX;
14442 if (prefixes & PREFIX_REPNZ)
14443 all_prefixes[last_repnz_prefix] = XACQUIRE_PREFIX;
14444 }
14445
14446 OP_E (bytemode, sizeflag);
14447}
14448
14449/* Similar to OP_E. But the 0xf2/0xf3 prefixes should be displayed as
14450 "xacquire"/"xrelease" for memory operand. No check for LOCK prefix.
14451 */
14452
14453static void
14454HLE_Fixup2 (int bytemode, int sizeflag)
14455{
14456 if (modrm.mod != 3)
14457 {
14458 if (prefixes & PREFIX_REPZ)
14459 all_prefixes[last_repz_prefix] = XRELEASE_PREFIX;
14460 if (prefixes & PREFIX_REPNZ)
14461 all_prefixes[last_repnz_prefix] = XACQUIRE_PREFIX;
14462 }
14463
14464 OP_E (bytemode, sizeflag);
14465}
14466
14467/* Similar to OP_E. But the 0xf3 prefixes should be displayed as
14468 "xrelease" for memory operand. No check for LOCK prefix. */
14469
14470static void
14471HLE_Fixup3 (int bytemode, int sizeflag)
14472{
14473 if (modrm.mod != 3
14474 && last_repz_prefix > last_repnz_prefix
14475 && (prefixes & PREFIX_REPZ) != 0)
14476 all_prefixes[last_repz_prefix] = XRELEASE_PREFIX;
14477
14478 OP_E (bytemode, sizeflag);
14479}
14480
f5804c90
L
14481static void
14482CMPXCHG8B_Fixup (int bytemode, int sizeflag)
14483{
161a04f6
L
14484 USED_REX (REX_W);
14485 if (rex & REX_W)
f5804c90
L
14486 {
14487 /* Change cmpxchg8b to cmpxchg16b. */
ea397f5b
L
14488 char *p = mnemonicendp - 2;
14489 mnemonicendp = stpcpy (p, "16b");
fb9c77c7 14490 bytemode = o_mode;
f5804c90 14491 }
42164a71
L
14492 else if ((prefixes & PREFIX_LOCK) != 0)
14493 {
14494 if (prefixes & PREFIX_REPZ)
14495 all_prefixes[last_repz_prefix] = XRELEASE_PREFIX;
14496 if (prefixes & PREFIX_REPNZ)
14497 all_prefixes[last_repnz_prefix] = XACQUIRE_PREFIX;
14498 }
14499
f5804c90
L
14500 OP_M (bytemode, sizeflag);
14501}
42903f7f
L
14502
14503static void
14504XMM_Fixup (int reg, int sizeflag ATTRIBUTE_UNUSED)
14505{
b9733481
L
14506 const char **names;
14507
c0f3af97
L
14508 if (need_vex)
14509 {
14510 switch (vex.length)
14511 {
14512 case 128:
b9733481 14513 names = names_xmm;
c0f3af97
L
14514 break;
14515 case 256:
b9733481 14516 names = names_ymm;
c0f3af97
L
14517 break;
14518 default:
14519 abort ();
14520 }
14521 }
14522 else
b9733481
L
14523 names = names_xmm;
14524 oappend (names[reg]);
42903f7f 14525}
381d071f
L
14526
14527static void
14528CRC32_Fixup (int bytemode, int sizeflag)
14529{
14530 /* Add proper suffix to "crc32". */
ea397f5b 14531 char *p = mnemonicendp;
381d071f
L
14532
14533 switch (bytemode)
14534 {
14535 case b_mode:
20592a94 14536 if (intel_syntax)
ea397f5b 14537 goto skip;
20592a94 14538
381d071f
L
14539 *p++ = 'b';
14540 break;
14541 case v_mode:
20592a94 14542 if (intel_syntax)
ea397f5b 14543 goto skip;
20592a94 14544
381d071f
L
14545 USED_REX (REX_W);
14546 if (rex & REX_W)
14547 *p++ = 'q';
f16cd0d5
L
14548 else
14549 {
14550 if (sizeflag & DFLAG)
14551 *p++ = 'l';
14552 else
14553 *p++ = 'w';
14554 used_prefixes |= (prefixes & PREFIX_DATA);
14555 }
381d071f
L
14556 break;
14557 default:
14558 oappend (INTERNAL_DISASSEMBLER_ERROR);
14559 break;
14560 }
ea397f5b 14561 mnemonicendp = p;
381d071f
L
14562 *p = '\0';
14563
ea397f5b 14564skip:
381d071f
L
14565 if (modrm.mod == 3)
14566 {
14567 int add;
14568
14569 /* Skip mod/rm byte. */
14570 MODRM_CHECK;
14571 codep++;
14572
14573 USED_REX (REX_B);
14574 add = (rex & REX_B) ? 8 : 0;
14575 if (bytemode == b_mode)
14576 {
14577 USED_REX (0);
14578 if (rex)
14579 oappend (names8rex[modrm.rm + add]);
14580 else
14581 oappend (names8[modrm.rm + add]);
14582 }
14583 else
14584 {
14585 USED_REX (REX_W);
14586 if (rex & REX_W)
14587 oappend (names64[modrm.rm + add]);
14588 else if ((prefixes & PREFIX_DATA))
14589 oappend (names16[modrm.rm + add]);
14590 else
14591 oappend (names32[modrm.rm + add]);
14592 }
14593 }
14594 else
9344ff29 14595 OP_E (bytemode, sizeflag);
381d071f 14596}
85f10a01 14597
eacc9c89
L
14598static void
14599FXSAVE_Fixup (int bytemode, int sizeflag)
14600{
14601 /* Add proper suffix to "fxsave" and "fxrstor". */
14602 USED_REX (REX_W);
14603 if (rex & REX_W)
14604 {
14605 char *p = mnemonicendp;
14606 *p++ = '6';
14607 *p++ = '4';
14608 *p = '\0';
14609 mnemonicendp = p;
14610 }
14611 OP_M (bytemode, sizeflag);
14612}
14613
c0f3af97
L
14614/* Display the destination register operand for instructions with
14615 VEX. */
14616
14617static void
14618OP_VEX (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
14619{
539f890d 14620 int reg;
b9733481
L
14621 const char **names;
14622
c0f3af97
L
14623 if (!need_vex)
14624 abort ();
14625
14626 if (!need_vex_reg)
14627 return;
14628
539f890d
L
14629 reg = vex.register_specifier;
14630 if (bytemode == vex_scalar_mode)
14631 {
14632 oappend (names_xmm[reg]);
14633 return;
14634 }
14635
c0f3af97
L
14636 switch (vex.length)
14637 {
14638 case 128:
14639 switch (bytemode)
14640 {
14641 case vex_mode:
14642 case vex128_mode:
6c30d220 14643 case vex_vsib_q_w_dq_mode:
cb21baef
L
14644 names = names_xmm;
14645 break;
14646 case dq_mode:
14647 if (vex.w)
14648 names = names64;
14649 else
14650 names = names32;
c0f3af97
L
14651 break;
14652 default:
14653 abort ();
14654 return;
14655 }
c0f3af97
L
14656 break;
14657 case 256:
14658 switch (bytemode)
14659 {
14660 case vex_mode:
14661 case vex256_mode:
6c30d220
L
14662 names = names_ymm;
14663 break;
14664 case vex_vsib_q_w_dq_mode:
14665 names = vex.w ? names_ymm : names_xmm;
c0f3af97
L
14666 break;
14667 default:
14668 abort ();
14669 return;
14670 }
c0f3af97
L
14671 break;
14672 default:
14673 abort ();
14674 break;
14675 }
539f890d 14676 oappend (names[reg]);
c0f3af97
L
14677}
14678
922d8de8
DR
14679/* Get the VEX immediate byte without moving codep. */
14680
14681static unsigned char
ccc5981b 14682get_vex_imm8 (int sizeflag, int opnum)
922d8de8
DR
14683{
14684 int bytes_before_imm = 0;
14685
922d8de8
DR
14686 if (modrm.mod != 3)
14687 {
14688 /* There are SIB/displacement bytes. */
14689 if ((sizeflag & AFLAG) || address_mode == mode_64bit)
02e647f9 14690 {
922d8de8 14691 /* 32/64 bit address mode */
02e647f9 14692 int base = modrm.rm;
922d8de8
DR
14693
14694 /* Check SIB byte. */
02e647f9
SP
14695 if (base == 4)
14696 {
14697 FETCH_DATA (the_info, codep + 1);
14698 base = *codep & 7;
14699 /* When decoding the third source, don't increase
14700 bytes_before_imm as this has already been incremented
14701 by one in OP_E_memory while decoding the second
14702 source operand. */
ccc5981b
SP
14703 if (opnum == 0)
14704 bytes_before_imm++;
02e647f9
SP
14705 }
14706
14707 /* Don't increase bytes_before_imm when decoding the third source,
14708 it has already been incremented by OP_E_memory while decoding
14709 the second source operand. */
14710 if (opnum == 0)
14711 {
14712 switch (modrm.mod)
14713 {
14714 case 0:
14715 /* When modrm.rm == 5 or modrm.rm == 4 and base in
14716 SIB == 5, there is a 4 byte displacement. */
14717 if (base != 5)
14718 /* No displacement. */
14719 break;
14720 case 2:
14721 /* 4 byte displacement. */
14722 bytes_before_imm += 4;
14723 break;
14724 case 1:
14725 /* 1 byte displacement. */
14726 bytes_before_imm++;
14727 break;
14728 }
14729 }
14730 }
922d8de8 14731 else
02e647f9
SP
14732 {
14733 /* 16 bit address mode */
14734 /* Don't increase bytes_before_imm when decoding the third source,
14735 it has already been incremented by OP_E_memory while decoding
14736 the second source operand. */
14737 if (opnum == 0)
14738 {
14739 switch (modrm.mod)
14740 {
14741 case 0:
14742 /* When modrm.rm == 6, there is a 2 byte displacement. */
14743 if (modrm.rm != 6)
14744 /* No displacement. */
14745 break;
14746 case 2:
14747 /* 2 byte displacement. */
14748 bytes_before_imm += 2;
14749 break;
14750 case 1:
14751 /* 1 byte displacement: when decoding the third source,
14752 don't increase bytes_before_imm as this has already
14753 been incremented by one in OP_E_memory while decoding
14754 the second source operand. */
14755 if (opnum == 0)
14756 bytes_before_imm++;
ccc5981b 14757
02e647f9
SP
14758 break;
14759 }
922d8de8
DR
14760 }
14761 }
14762 }
14763
14764 FETCH_DATA (the_info, codep + bytes_before_imm + 1);
14765 return codep [bytes_before_imm];
14766}
14767
14768static void
14769OP_EX_VexReg (int bytemode, int sizeflag, int reg)
14770{
b9733481
L
14771 const char **names;
14772
922d8de8
DR
14773 if (reg == -1 && modrm.mod != 3)
14774 {
14775 OP_E_memory (bytemode, sizeflag);
14776 return;
14777 }
14778 else
14779 {
14780 if (reg == -1)
14781 {
14782 reg = modrm.rm;
14783 USED_REX (REX_B);
14784 if (rex & REX_B)
14785 reg += 8;
14786 }
14787 else if (reg > 7 && address_mode != mode_64bit)
14788 BadOp ();
14789 }
14790
14791 switch (vex.length)
14792 {
14793 case 128:
b9733481 14794 names = names_xmm;
922d8de8
DR
14795 break;
14796 case 256:
b9733481 14797 names = names_ymm;
922d8de8
DR
14798 break;
14799 default:
14800 abort ();
14801 }
b9733481 14802 oappend (names[reg]);
922d8de8
DR
14803}
14804
a683cc34
SP
14805static void
14806OP_EX_VexImmW (int bytemode, int sizeflag)
14807{
14808 int reg = -1;
14809 static unsigned char vex_imm8;
14810
14811 if (vex_w_done == 0)
14812 {
14813 vex_w_done = 1;
14814
14815 /* Skip mod/rm byte. */
14816 MODRM_CHECK;
14817 codep++;
14818
14819 vex_imm8 = get_vex_imm8 (sizeflag, 0);
14820
14821 if (vex.w)
14822 reg = vex_imm8 >> 4;
14823
14824 OP_EX_VexReg (bytemode, sizeflag, reg);
14825 }
14826 else if (vex_w_done == 1)
14827 {
14828 vex_w_done = 2;
14829
14830 if (!vex.w)
14831 reg = vex_imm8 >> 4;
14832
14833 OP_EX_VexReg (bytemode, sizeflag, reg);
14834 }
14835 else
14836 {
14837 /* Output the imm8 directly. */
14838 scratchbuf[0] = '$';
14839 print_operand_value (scratchbuf + 1, 1, vex_imm8 & 0xf);
14840 oappend (scratchbuf + intel_syntax);
14841 scratchbuf[0] = '\0';
14842 codep++;
14843 }
14844}
14845
5dd85c99
SP
14846static void
14847OP_Vex_2src (int bytemode, int sizeflag)
14848{
14849 if (modrm.mod == 3)
14850 {
b9733481 14851 int reg = modrm.rm;
5dd85c99 14852 USED_REX (REX_B);
b9733481
L
14853 if (rex & REX_B)
14854 reg += 8;
14855 oappend (names_xmm[reg]);
5dd85c99
SP
14856 }
14857 else
14858 {
14859 if (intel_syntax
14860 && (bytemode == v_mode || bytemode == v_swap_mode))
14861 {
14862 bytemode = (prefixes & PREFIX_DATA) ? x_mode : q_mode;
14863 used_prefixes |= (prefixes & PREFIX_DATA);
14864 }
14865 OP_E (bytemode, sizeflag);
14866 }
14867}
14868
14869static void
14870OP_Vex_2src_1 (int bytemode, int sizeflag)
14871{
14872 if (modrm.mod == 3)
14873 {
14874 /* Skip mod/rm byte. */
14875 MODRM_CHECK;
14876 codep++;
14877 }
14878
14879 if (vex.w)
b9733481 14880 oappend (names_xmm[vex.register_specifier]);
5dd85c99
SP
14881 else
14882 OP_Vex_2src (bytemode, sizeflag);
14883}
14884
14885static void
14886OP_Vex_2src_2 (int bytemode, int sizeflag)
14887{
14888 if (vex.w)
14889 OP_Vex_2src (bytemode, sizeflag);
14890 else
b9733481 14891 oappend (names_xmm[vex.register_specifier]);
5dd85c99
SP
14892}
14893
922d8de8
DR
14894static void
14895OP_EX_VexW (int bytemode, int sizeflag)
14896{
14897 int reg = -1;
14898
14899 if (!vex_w_done)
14900 {
14901 vex_w_done = 1;
41effecb
SP
14902
14903 /* Skip mod/rm byte. */
14904 MODRM_CHECK;
14905 codep++;
14906
922d8de8 14907 if (vex.w)
ccc5981b 14908 reg = get_vex_imm8 (sizeflag, 0) >> 4;
922d8de8
DR
14909 }
14910 else
14911 {
14912 if (!vex.w)
ccc5981b 14913 reg = get_vex_imm8 (sizeflag, 1) >> 4;
922d8de8
DR
14914 }
14915
14916 OP_EX_VexReg (bytemode, sizeflag, reg);
14917}
14918
922d8de8
DR
14919static void
14920VEXI4_Fixup (int bytemode ATTRIBUTE_UNUSED,
14921 int sizeflag ATTRIBUTE_UNUSED)
14922{
14923 /* Skip the immediate byte and check for invalid bits. */
14924 FETCH_DATA (the_info, codep + 1);
14925 if (*codep++ & 0xf)
14926 BadOp ();
14927}
14928
c0f3af97
L
14929static void
14930OP_REG_VexI4 (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
14931{
14932 int reg;
b9733481
L
14933 const char **names;
14934
c0f3af97
L
14935 FETCH_DATA (the_info, codep + 1);
14936 reg = *codep++;
14937
14938 if (bytemode != x_mode)
14939 abort ();
14940
14941 if (reg & 0xf)
14942 BadOp ();
14943
14944 reg >>= 4;
dae39acc
L
14945 if (reg > 7 && address_mode != mode_64bit)
14946 BadOp ();
14947
c0f3af97
L
14948 switch (vex.length)
14949 {
14950 case 128:
b9733481 14951 names = names_xmm;
c0f3af97
L
14952 break;
14953 case 256:
b9733481 14954 names = names_ymm;
c0f3af97
L
14955 break;
14956 default:
14957 abort ();
14958 }
b9733481 14959 oappend (names[reg]);
c0f3af97
L
14960}
14961
922d8de8
DR
14962static void
14963OP_XMM_VexW (int bytemode, int sizeflag)
14964{
14965 /* Turn off the REX.W bit since it is used for swapping operands
14966 now. */
14967 rex &= ~REX_W;
14968 OP_XMM (bytemode, sizeflag);
14969}
14970
c0f3af97
L
14971static void
14972OP_EX_Vex (int bytemode, int sizeflag)
14973{
14974 if (modrm.mod != 3)
14975 {
14976 if (vex.register_specifier != 0)
14977 BadOp ();
14978 need_vex_reg = 0;
14979 }
14980 OP_EX (bytemode, sizeflag);
14981}
14982
14983static void
14984OP_XMM_Vex (int bytemode, int sizeflag)
14985{
14986 if (modrm.mod != 3)
14987 {
14988 if (vex.register_specifier != 0)
14989 BadOp ();
14990 need_vex_reg = 0;
14991 }
14992 OP_XMM (bytemode, sizeflag);
14993}
14994
14995static void
14996VZERO_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
14997{
14998 switch (vex.length)
14999 {
15000 case 128:
ea397f5b 15001 mnemonicendp = stpcpy (obuf, "vzeroupper");
c0f3af97
L
15002 break;
15003 case 256:
ea397f5b 15004 mnemonicendp = stpcpy (obuf, "vzeroall");
c0f3af97
L
15005 break;
15006 default:
15007 abort ();
15008 }
15009}
15010
ea397f5b
L
15011static struct op vex_cmp_op[] =
15012{
15013 { STRING_COMMA_LEN ("eq") },
15014 { STRING_COMMA_LEN ("lt") },
15015 { STRING_COMMA_LEN ("le") },
15016 { STRING_COMMA_LEN ("unord") },
15017 { STRING_COMMA_LEN ("neq") },
15018 { STRING_COMMA_LEN ("nlt") },
15019 { STRING_COMMA_LEN ("nle") },
15020 { STRING_COMMA_LEN ("ord") },
15021 { STRING_COMMA_LEN ("eq_uq") },
15022 { STRING_COMMA_LEN ("nge") },
15023 { STRING_COMMA_LEN ("ngt") },
15024 { STRING_COMMA_LEN ("false") },
15025 { STRING_COMMA_LEN ("neq_oq") },
15026 { STRING_COMMA_LEN ("ge") },
15027 { STRING_COMMA_LEN ("gt") },
15028 { STRING_COMMA_LEN ("true") },
15029 { STRING_COMMA_LEN ("eq_os") },
15030 { STRING_COMMA_LEN ("lt_oq") },
15031 { STRING_COMMA_LEN ("le_oq") },
15032 { STRING_COMMA_LEN ("unord_s") },
15033 { STRING_COMMA_LEN ("neq_us") },
15034 { STRING_COMMA_LEN ("nlt_uq") },
15035 { STRING_COMMA_LEN ("nle_uq") },
15036 { STRING_COMMA_LEN ("ord_s") },
15037 { STRING_COMMA_LEN ("eq_us") },
15038 { STRING_COMMA_LEN ("nge_uq") },
15039 { STRING_COMMA_LEN ("ngt_uq") },
15040 { STRING_COMMA_LEN ("false_os") },
15041 { STRING_COMMA_LEN ("neq_os") },
15042 { STRING_COMMA_LEN ("ge_oq") },
15043 { STRING_COMMA_LEN ("gt_oq") },
15044 { STRING_COMMA_LEN ("true_us") },
c0f3af97
L
15045};
15046
15047static void
15048VCMP_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
15049{
15050 unsigned int cmp_type;
15051
15052 FETCH_DATA (the_info, codep + 1);
15053 cmp_type = *codep++ & 0xff;
15054 if (cmp_type < ARRAY_SIZE (vex_cmp_op))
15055 {
15056 char suffix [3];
ea397f5b 15057 char *p = mnemonicendp - 2;
c0f3af97
L
15058 suffix[0] = p[0];
15059 suffix[1] = p[1];
15060 suffix[2] = '\0';
ea397f5b
L
15061 sprintf (p, "%s%s", vex_cmp_op[cmp_type].name, suffix);
15062 mnemonicendp += vex_cmp_op[cmp_type].len;
c0f3af97
L
15063 }
15064 else
15065 {
15066 /* We have a reserved extension byte. Output it directly. */
15067 scratchbuf[0] = '$';
15068 print_operand_value (scratchbuf + 1, 1, cmp_type);
15069 oappend (scratchbuf + intel_syntax);
15070 scratchbuf[0] = '\0';
15071 }
15072}
15073
ea397f5b
L
15074static const struct op pclmul_op[] =
15075{
15076 { STRING_COMMA_LEN ("lql") },
15077 { STRING_COMMA_LEN ("hql") },
15078 { STRING_COMMA_LEN ("lqh") },
15079 { STRING_COMMA_LEN ("hqh") }
c0f3af97
L
15080};
15081
15082static void
15083PCLMUL_Fixup (int bytemode ATTRIBUTE_UNUSED,
15084 int sizeflag ATTRIBUTE_UNUSED)
15085{
15086 unsigned int pclmul_type;
15087
15088 FETCH_DATA (the_info, codep + 1);
15089 pclmul_type = *codep++ & 0xff;
15090 switch (pclmul_type)
15091 {
15092 case 0x10:
15093 pclmul_type = 2;
15094 break;
15095 case 0x11:
15096 pclmul_type = 3;
15097 break;
15098 default:
15099 break;
15100 }
15101 if (pclmul_type < ARRAY_SIZE (pclmul_op))
15102 {
15103 char suffix [4];
ea397f5b 15104 char *p = mnemonicendp - 3;
c0f3af97
L
15105 suffix[0] = p[0];
15106 suffix[1] = p[1];
15107 suffix[2] = p[2];
15108 suffix[3] = '\0';
ea397f5b
L
15109 sprintf (p, "%s%s", pclmul_op[pclmul_type].name, suffix);
15110 mnemonicendp += pclmul_op[pclmul_type].len;
c0f3af97
L
15111 }
15112 else
15113 {
15114 /* We have a reserved extension byte. Output it directly. */
15115 scratchbuf[0] = '$';
15116 print_operand_value (scratchbuf + 1, 1, pclmul_type);
15117 oappend (scratchbuf + intel_syntax);
15118 scratchbuf[0] = '\0';
15119 }
15120}
15121
f1f8f695
L
15122static void
15123MOVBE_Fixup (int bytemode, int sizeflag)
15124{
15125 /* Add proper suffix to "movbe". */
ea397f5b 15126 char *p = mnemonicendp;
f1f8f695
L
15127
15128 switch (bytemode)
15129 {
15130 case v_mode:
15131 if (intel_syntax)
ea397f5b 15132 goto skip;
f1f8f695
L
15133
15134 USED_REX (REX_W);
15135 if (sizeflag & SUFFIX_ALWAYS)
15136 {
15137 if (rex & REX_W)
15138 *p++ = 'q';
f1f8f695 15139 else
f16cd0d5
L
15140 {
15141 if (sizeflag & DFLAG)
15142 *p++ = 'l';
15143 else
15144 *p++ = 'w';
15145 used_prefixes |= (prefixes & PREFIX_DATA);
15146 }
f1f8f695 15147 }
f1f8f695
L
15148 break;
15149 default:
15150 oappend (INTERNAL_DISASSEMBLER_ERROR);
15151 break;
15152 }
ea397f5b 15153 mnemonicendp = p;
f1f8f695
L
15154 *p = '\0';
15155
ea397f5b 15156skip:
f1f8f695
L
15157 OP_M (bytemode, sizeflag);
15158}
f88c9eb0
SP
15159
15160static void
15161OP_LWPCB_E (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
15162{
15163 int reg;
15164 const char **names;
15165
15166 /* Skip mod/rm byte. */
15167 MODRM_CHECK;
15168 codep++;
15169
15170 if (vex.w)
15171 names = names64;
f88c9eb0 15172 else
ce7d077e 15173 names = names32;
f88c9eb0
SP
15174
15175 reg = modrm.rm;
15176 USED_REX (REX_B);
15177 if (rex & REX_B)
15178 reg += 8;
15179
15180 oappend (names[reg]);
15181}
15182
15183static void
15184OP_LWP_E (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
15185{
15186 const char **names;
15187
15188 if (vex.w)
15189 names = names64;
f88c9eb0 15190 else
ce7d077e 15191 names = names32;
f88c9eb0
SP
15192
15193 oappend (names[vex.register_specifier]);
15194}
15195
This page took 3.579539 seconds and 4 git commands to generate.