2013-04-24 Sandra Loosemore <sandra@codesourcery.com>
[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,
7bb15c6f 3 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
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 }
7bb15c6f 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,
d7189fa5
RM
671 MOD_0F18_REG_4,
672 MOD_0F18_REG_5,
673 MOD_0F18_REG_6,
674 MOD_0F18_REG_7,
3873ba12
L
675 MOD_0F20,
676 MOD_0F21,
677 MOD_0F22,
678 MOD_0F23,
679 MOD_0F24,
680 MOD_0F26,
681 MOD_0F2B_PREFIX_0,
682 MOD_0F2B_PREFIX_1,
683 MOD_0F2B_PREFIX_2,
684 MOD_0F2B_PREFIX_3,
685 MOD_0F51,
686 MOD_0F71_REG_2,
687 MOD_0F71_REG_4,
688 MOD_0F71_REG_6,
689 MOD_0F72_REG_2,
690 MOD_0F72_REG_4,
691 MOD_0F72_REG_6,
692 MOD_0F73_REG_2,
693 MOD_0F73_REG_3,
694 MOD_0F73_REG_6,
695 MOD_0F73_REG_7,
696 MOD_0FAE_REG_0,
697 MOD_0FAE_REG_1,
698 MOD_0FAE_REG_2,
699 MOD_0FAE_REG_3,
700 MOD_0FAE_REG_4,
701 MOD_0FAE_REG_5,
702 MOD_0FAE_REG_6,
703 MOD_0FAE_REG_7,
704 MOD_0FB2,
705 MOD_0FB4,
706 MOD_0FB5,
707 MOD_0FC7_REG_6,
708 MOD_0FC7_REG_7,
709 MOD_0FD7,
710 MOD_0FE7_PREFIX_2,
711 MOD_0FF0_PREFIX_3,
712 MOD_0F382A_PREFIX_2,
713 MOD_62_32BIT,
714 MOD_C4_32BIT,
715 MOD_C5_32BIT,
592a252b
L
716 MOD_VEX_0F12_PREFIX_0,
717 MOD_VEX_0F13,
718 MOD_VEX_0F16_PREFIX_0,
719 MOD_VEX_0F17,
720 MOD_VEX_0F2B,
721 MOD_VEX_0F50,
722 MOD_VEX_0F71_REG_2,
723 MOD_VEX_0F71_REG_4,
724 MOD_VEX_0F71_REG_6,
725 MOD_VEX_0F72_REG_2,
726 MOD_VEX_0F72_REG_4,
727 MOD_VEX_0F72_REG_6,
728 MOD_VEX_0F73_REG_2,
729 MOD_VEX_0F73_REG_3,
730 MOD_VEX_0F73_REG_6,
731 MOD_VEX_0F73_REG_7,
732 MOD_VEX_0FAE_REG_2,
733 MOD_VEX_0FAE_REG_3,
734 MOD_VEX_0FD7_PREFIX_2,
735 MOD_VEX_0FE7_PREFIX_2,
736 MOD_VEX_0FF0_PREFIX_3,
592a252b
L
737 MOD_VEX_0F381A_PREFIX_2,
738 MOD_VEX_0F382A_PREFIX_2,
739 MOD_VEX_0F382C_PREFIX_2,
740 MOD_VEX_0F382D_PREFIX_2,
741 MOD_VEX_0F382E_PREFIX_2,
6c30d220
L
742 MOD_VEX_0F382F_PREFIX_2,
743 MOD_VEX_0F385A_PREFIX_2,
744 MOD_VEX_0F388C_PREFIX_2,
745 MOD_VEX_0F388E_PREFIX_2,
51e7da1b 746};
1ceb70f8 747
51e7da1b
L
748enum
749{
42164a71
L
750 RM_C6_REG_7 = 0,
751 RM_C7_REG_7,
752 RM_0F01_REG_0,
3873ba12
L
753 RM_0F01_REG_1,
754 RM_0F01_REG_2,
755 RM_0F01_REG_3,
756 RM_0F01_REG_7,
757 RM_0FAE_REG_5,
758 RM_0FAE_REG_6,
759 RM_0FAE_REG_7
51e7da1b 760};
1ceb70f8 761
51e7da1b
L
762enum
763{
764 PREFIX_90 = 0,
3873ba12
L
765 PREFIX_0F10,
766 PREFIX_0F11,
767 PREFIX_0F12,
768 PREFIX_0F16,
769 PREFIX_0F2A,
770 PREFIX_0F2B,
771 PREFIX_0F2C,
772 PREFIX_0F2D,
773 PREFIX_0F2E,
774 PREFIX_0F2F,
775 PREFIX_0F51,
776 PREFIX_0F52,
777 PREFIX_0F53,
778 PREFIX_0F58,
779 PREFIX_0F59,
780 PREFIX_0F5A,
781 PREFIX_0F5B,
782 PREFIX_0F5C,
783 PREFIX_0F5D,
784 PREFIX_0F5E,
785 PREFIX_0F5F,
786 PREFIX_0F60,
787 PREFIX_0F61,
788 PREFIX_0F62,
789 PREFIX_0F6C,
790 PREFIX_0F6D,
791 PREFIX_0F6F,
792 PREFIX_0F70,
793 PREFIX_0F73_REG_3,
794 PREFIX_0F73_REG_7,
795 PREFIX_0F78,
796 PREFIX_0F79,
797 PREFIX_0F7C,
798 PREFIX_0F7D,
799 PREFIX_0F7E,
800 PREFIX_0F7F,
c7b8aa3a
L
801 PREFIX_0FAE_REG_0,
802 PREFIX_0FAE_REG_1,
803 PREFIX_0FAE_REG_2,
804 PREFIX_0FAE_REG_3,
3873ba12 805 PREFIX_0FB8,
f12dc422 806 PREFIX_0FBC,
3873ba12
L
807 PREFIX_0FBD,
808 PREFIX_0FC2,
809 PREFIX_0FC3,
810 PREFIX_0FC7_REG_6,
811 PREFIX_0FD0,
812 PREFIX_0FD6,
813 PREFIX_0FE6,
814 PREFIX_0FE7,
815 PREFIX_0FF0,
816 PREFIX_0FF7,
817 PREFIX_0F3810,
818 PREFIX_0F3814,
819 PREFIX_0F3815,
820 PREFIX_0F3817,
821 PREFIX_0F3820,
822 PREFIX_0F3821,
823 PREFIX_0F3822,
824 PREFIX_0F3823,
825 PREFIX_0F3824,
826 PREFIX_0F3825,
827 PREFIX_0F3828,
828 PREFIX_0F3829,
829 PREFIX_0F382A,
830 PREFIX_0F382B,
831 PREFIX_0F3830,
832 PREFIX_0F3831,
833 PREFIX_0F3832,
834 PREFIX_0F3833,
835 PREFIX_0F3834,
836 PREFIX_0F3835,
837 PREFIX_0F3837,
838 PREFIX_0F3838,
839 PREFIX_0F3839,
840 PREFIX_0F383A,
841 PREFIX_0F383B,
842 PREFIX_0F383C,
843 PREFIX_0F383D,
844 PREFIX_0F383E,
845 PREFIX_0F383F,
846 PREFIX_0F3840,
847 PREFIX_0F3841,
848 PREFIX_0F3880,
849 PREFIX_0F3881,
6c30d220 850 PREFIX_0F3882,
3873ba12
L
851 PREFIX_0F38DB,
852 PREFIX_0F38DC,
853 PREFIX_0F38DD,
854 PREFIX_0F38DE,
855 PREFIX_0F38DF,
856 PREFIX_0F38F0,
857 PREFIX_0F38F1,
e2e1fcde 858 PREFIX_0F38F6,
3873ba12
L
859 PREFIX_0F3A08,
860 PREFIX_0F3A09,
861 PREFIX_0F3A0A,
862 PREFIX_0F3A0B,
863 PREFIX_0F3A0C,
864 PREFIX_0F3A0D,
865 PREFIX_0F3A0E,
866 PREFIX_0F3A14,
867 PREFIX_0F3A15,
868 PREFIX_0F3A16,
869 PREFIX_0F3A17,
870 PREFIX_0F3A20,
871 PREFIX_0F3A21,
872 PREFIX_0F3A22,
873 PREFIX_0F3A40,
874 PREFIX_0F3A41,
875 PREFIX_0F3A42,
876 PREFIX_0F3A44,
877 PREFIX_0F3A60,
878 PREFIX_0F3A61,
879 PREFIX_0F3A62,
880 PREFIX_0F3A63,
881 PREFIX_0F3ADF,
592a252b
L
882 PREFIX_VEX_0F10,
883 PREFIX_VEX_0F11,
884 PREFIX_VEX_0F12,
885 PREFIX_VEX_0F16,
886 PREFIX_VEX_0F2A,
887 PREFIX_VEX_0F2C,
888 PREFIX_VEX_0F2D,
889 PREFIX_VEX_0F2E,
890 PREFIX_VEX_0F2F,
891 PREFIX_VEX_0F51,
892 PREFIX_VEX_0F52,
893 PREFIX_VEX_0F53,
894 PREFIX_VEX_0F58,
895 PREFIX_VEX_0F59,
896 PREFIX_VEX_0F5A,
897 PREFIX_VEX_0F5B,
898 PREFIX_VEX_0F5C,
899 PREFIX_VEX_0F5D,
900 PREFIX_VEX_0F5E,
901 PREFIX_VEX_0F5F,
902 PREFIX_VEX_0F60,
903 PREFIX_VEX_0F61,
904 PREFIX_VEX_0F62,
905 PREFIX_VEX_0F63,
906 PREFIX_VEX_0F64,
907 PREFIX_VEX_0F65,
908 PREFIX_VEX_0F66,
909 PREFIX_VEX_0F67,
910 PREFIX_VEX_0F68,
911 PREFIX_VEX_0F69,
912 PREFIX_VEX_0F6A,
913 PREFIX_VEX_0F6B,
914 PREFIX_VEX_0F6C,
915 PREFIX_VEX_0F6D,
916 PREFIX_VEX_0F6E,
917 PREFIX_VEX_0F6F,
918 PREFIX_VEX_0F70,
919 PREFIX_VEX_0F71_REG_2,
920 PREFIX_VEX_0F71_REG_4,
921 PREFIX_VEX_0F71_REG_6,
922 PREFIX_VEX_0F72_REG_2,
923 PREFIX_VEX_0F72_REG_4,
924 PREFIX_VEX_0F72_REG_6,
925 PREFIX_VEX_0F73_REG_2,
926 PREFIX_VEX_0F73_REG_3,
927 PREFIX_VEX_0F73_REG_6,
928 PREFIX_VEX_0F73_REG_7,
929 PREFIX_VEX_0F74,
930 PREFIX_VEX_0F75,
931 PREFIX_VEX_0F76,
932 PREFIX_VEX_0F77,
933 PREFIX_VEX_0F7C,
934 PREFIX_VEX_0F7D,
935 PREFIX_VEX_0F7E,
936 PREFIX_VEX_0F7F,
937 PREFIX_VEX_0FC2,
938 PREFIX_VEX_0FC4,
939 PREFIX_VEX_0FC5,
940 PREFIX_VEX_0FD0,
941 PREFIX_VEX_0FD1,
942 PREFIX_VEX_0FD2,
943 PREFIX_VEX_0FD3,
944 PREFIX_VEX_0FD4,
945 PREFIX_VEX_0FD5,
946 PREFIX_VEX_0FD6,
947 PREFIX_VEX_0FD7,
948 PREFIX_VEX_0FD8,
949 PREFIX_VEX_0FD9,
950 PREFIX_VEX_0FDA,
951 PREFIX_VEX_0FDB,
952 PREFIX_VEX_0FDC,
953 PREFIX_VEX_0FDD,
954 PREFIX_VEX_0FDE,
955 PREFIX_VEX_0FDF,
956 PREFIX_VEX_0FE0,
957 PREFIX_VEX_0FE1,
958 PREFIX_VEX_0FE2,
959 PREFIX_VEX_0FE3,
960 PREFIX_VEX_0FE4,
961 PREFIX_VEX_0FE5,
962 PREFIX_VEX_0FE6,
963 PREFIX_VEX_0FE7,
964 PREFIX_VEX_0FE8,
965 PREFIX_VEX_0FE9,
966 PREFIX_VEX_0FEA,
967 PREFIX_VEX_0FEB,
968 PREFIX_VEX_0FEC,
969 PREFIX_VEX_0FED,
970 PREFIX_VEX_0FEE,
971 PREFIX_VEX_0FEF,
972 PREFIX_VEX_0FF0,
973 PREFIX_VEX_0FF1,
974 PREFIX_VEX_0FF2,
975 PREFIX_VEX_0FF3,
976 PREFIX_VEX_0FF4,
977 PREFIX_VEX_0FF5,
978 PREFIX_VEX_0FF6,
979 PREFIX_VEX_0FF7,
980 PREFIX_VEX_0FF8,
981 PREFIX_VEX_0FF9,
982 PREFIX_VEX_0FFA,
983 PREFIX_VEX_0FFB,
984 PREFIX_VEX_0FFC,
985 PREFIX_VEX_0FFD,
986 PREFIX_VEX_0FFE,
987 PREFIX_VEX_0F3800,
988 PREFIX_VEX_0F3801,
989 PREFIX_VEX_0F3802,
990 PREFIX_VEX_0F3803,
991 PREFIX_VEX_0F3804,
992 PREFIX_VEX_0F3805,
993 PREFIX_VEX_0F3806,
994 PREFIX_VEX_0F3807,
995 PREFIX_VEX_0F3808,
996 PREFIX_VEX_0F3809,
997 PREFIX_VEX_0F380A,
998 PREFIX_VEX_0F380B,
999 PREFIX_VEX_0F380C,
1000 PREFIX_VEX_0F380D,
1001 PREFIX_VEX_0F380E,
1002 PREFIX_VEX_0F380F,
1003 PREFIX_VEX_0F3813,
6c30d220 1004 PREFIX_VEX_0F3816,
592a252b
L
1005 PREFIX_VEX_0F3817,
1006 PREFIX_VEX_0F3818,
1007 PREFIX_VEX_0F3819,
1008 PREFIX_VEX_0F381A,
1009 PREFIX_VEX_0F381C,
1010 PREFIX_VEX_0F381D,
1011 PREFIX_VEX_0F381E,
1012 PREFIX_VEX_0F3820,
1013 PREFIX_VEX_0F3821,
1014 PREFIX_VEX_0F3822,
1015 PREFIX_VEX_0F3823,
1016 PREFIX_VEX_0F3824,
1017 PREFIX_VEX_0F3825,
1018 PREFIX_VEX_0F3828,
1019 PREFIX_VEX_0F3829,
1020 PREFIX_VEX_0F382A,
1021 PREFIX_VEX_0F382B,
1022 PREFIX_VEX_0F382C,
1023 PREFIX_VEX_0F382D,
1024 PREFIX_VEX_0F382E,
1025 PREFIX_VEX_0F382F,
1026 PREFIX_VEX_0F3830,
1027 PREFIX_VEX_0F3831,
1028 PREFIX_VEX_0F3832,
1029 PREFIX_VEX_0F3833,
1030 PREFIX_VEX_0F3834,
1031 PREFIX_VEX_0F3835,
6c30d220 1032 PREFIX_VEX_0F3836,
592a252b
L
1033 PREFIX_VEX_0F3837,
1034 PREFIX_VEX_0F3838,
1035 PREFIX_VEX_0F3839,
1036 PREFIX_VEX_0F383A,
1037 PREFIX_VEX_0F383B,
1038 PREFIX_VEX_0F383C,
1039 PREFIX_VEX_0F383D,
1040 PREFIX_VEX_0F383E,
1041 PREFIX_VEX_0F383F,
1042 PREFIX_VEX_0F3840,
1043 PREFIX_VEX_0F3841,
6c30d220
L
1044 PREFIX_VEX_0F3845,
1045 PREFIX_VEX_0F3846,
1046 PREFIX_VEX_0F3847,
1047 PREFIX_VEX_0F3858,
1048 PREFIX_VEX_0F3859,
1049 PREFIX_VEX_0F385A,
1050 PREFIX_VEX_0F3878,
1051 PREFIX_VEX_0F3879,
1052 PREFIX_VEX_0F388C,
1053 PREFIX_VEX_0F388E,
1054 PREFIX_VEX_0F3890,
1055 PREFIX_VEX_0F3891,
1056 PREFIX_VEX_0F3892,
1057 PREFIX_VEX_0F3893,
592a252b
L
1058 PREFIX_VEX_0F3896,
1059 PREFIX_VEX_0F3897,
1060 PREFIX_VEX_0F3898,
1061 PREFIX_VEX_0F3899,
1062 PREFIX_VEX_0F389A,
1063 PREFIX_VEX_0F389B,
1064 PREFIX_VEX_0F389C,
1065 PREFIX_VEX_0F389D,
1066 PREFIX_VEX_0F389E,
1067 PREFIX_VEX_0F389F,
1068 PREFIX_VEX_0F38A6,
1069 PREFIX_VEX_0F38A7,
1070 PREFIX_VEX_0F38A8,
1071 PREFIX_VEX_0F38A9,
1072 PREFIX_VEX_0F38AA,
1073 PREFIX_VEX_0F38AB,
1074 PREFIX_VEX_0F38AC,
1075 PREFIX_VEX_0F38AD,
1076 PREFIX_VEX_0F38AE,
1077 PREFIX_VEX_0F38AF,
1078 PREFIX_VEX_0F38B6,
1079 PREFIX_VEX_0F38B7,
1080 PREFIX_VEX_0F38B8,
1081 PREFIX_VEX_0F38B9,
1082 PREFIX_VEX_0F38BA,
1083 PREFIX_VEX_0F38BB,
1084 PREFIX_VEX_0F38BC,
1085 PREFIX_VEX_0F38BD,
1086 PREFIX_VEX_0F38BE,
1087 PREFIX_VEX_0F38BF,
1088 PREFIX_VEX_0F38DB,
1089 PREFIX_VEX_0F38DC,
1090 PREFIX_VEX_0F38DD,
1091 PREFIX_VEX_0F38DE,
1092 PREFIX_VEX_0F38DF,
f12dc422
L
1093 PREFIX_VEX_0F38F2,
1094 PREFIX_VEX_0F38F3_REG_1,
1095 PREFIX_VEX_0F38F3_REG_2,
1096 PREFIX_VEX_0F38F3_REG_3,
6c30d220
L
1097 PREFIX_VEX_0F38F5,
1098 PREFIX_VEX_0F38F6,
f12dc422 1099 PREFIX_VEX_0F38F7,
6c30d220
L
1100 PREFIX_VEX_0F3A00,
1101 PREFIX_VEX_0F3A01,
1102 PREFIX_VEX_0F3A02,
592a252b
L
1103 PREFIX_VEX_0F3A04,
1104 PREFIX_VEX_0F3A05,
1105 PREFIX_VEX_0F3A06,
1106 PREFIX_VEX_0F3A08,
1107 PREFIX_VEX_0F3A09,
1108 PREFIX_VEX_0F3A0A,
1109 PREFIX_VEX_0F3A0B,
1110 PREFIX_VEX_0F3A0C,
1111 PREFIX_VEX_0F3A0D,
1112 PREFIX_VEX_0F3A0E,
1113 PREFIX_VEX_0F3A0F,
1114 PREFIX_VEX_0F3A14,
1115 PREFIX_VEX_0F3A15,
1116 PREFIX_VEX_0F3A16,
1117 PREFIX_VEX_0F3A17,
1118 PREFIX_VEX_0F3A18,
1119 PREFIX_VEX_0F3A19,
1120 PREFIX_VEX_0F3A1D,
1121 PREFIX_VEX_0F3A20,
1122 PREFIX_VEX_0F3A21,
1123 PREFIX_VEX_0F3A22,
6c30d220
L
1124 PREFIX_VEX_0F3A38,
1125 PREFIX_VEX_0F3A39,
592a252b
L
1126 PREFIX_VEX_0F3A40,
1127 PREFIX_VEX_0F3A41,
1128 PREFIX_VEX_0F3A42,
1129 PREFIX_VEX_0F3A44,
6c30d220 1130 PREFIX_VEX_0F3A46,
592a252b
L
1131 PREFIX_VEX_0F3A48,
1132 PREFIX_VEX_0F3A49,
1133 PREFIX_VEX_0F3A4A,
1134 PREFIX_VEX_0F3A4B,
1135 PREFIX_VEX_0F3A4C,
1136 PREFIX_VEX_0F3A5C,
1137 PREFIX_VEX_0F3A5D,
1138 PREFIX_VEX_0F3A5E,
1139 PREFIX_VEX_0F3A5F,
1140 PREFIX_VEX_0F3A60,
1141 PREFIX_VEX_0F3A61,
1142 PREFIX_VEX_0F3A62,
1143 PREFIX_VEX_0F3A63,
1144 PREFIX_VEX_0F3A68,
1145 PREFIX_VEX_0F3A69,
1146 PREFIX_VEX_0F3A6A,
1147 PREFIX_VEX_0F3A6B,
1148 PREFIX_VEX_0F3A6C,
1149 PREFIX_VEX_0F3A6D,
1150 PREFIX_VEX_0F3A6E,
1151 PREFIX_VEX_0F3A6F,
1152 PREFIX_VEX_0F3A78,
1153 PREFIX_VEX_0F3A79,
1154 PREFIX_VEX_0F3A7A,
1155 PREFIX_VEX_0F3A7B,
1156 PREFIX_VEX_0F3A7C,
1157 PREFIX_VEX_0F3A7D,
1158 PREFIX_VEX_0F3A7E,
1159 PREFIX_VEX_0F3A7F,
6c30d220
L
1160 PREFIX_VEX_0F3ADF,
1161 PREFIX_VEX_0F3AF0
51e7da1b 1162};
4e7d34a6 1163
51e7da1b
L
1164enum
1165{
1166 X86_64_06 = 0,
3873ba12
L
1167 X86_64_07,
1168 X86_64_0D,
1169 X86_64_16,
1170 X86_64_17,
1171 X86_64_1E,
1172 X86_64_1F,
1173 X86_64_27,
1174 X86_64_2F,
1175 X86_64_37,
1176 X86_64_3F,
1177 X86_64_60,
1178 X86_64_61,
1179 X86_64_62,
1180 X86_64_63,
1181 X86_64_6D,
1182 X86_64_6F,
1183 X86_64_9A,
1184 X86_64_C4,
1185 X86_64_C5,
1186 X86_64_CE,
1187 X86_64_D4,
1188 X86_64_D5,
1189 X86_64_EA,
1190 X86_64_0F01_REG_0,
1191 X86_64_0F01_REG_1,
1192 X86_64_0F01_REG_2,
1193 X86_64_0F01_REG_3
51e7da1b 1194};
4e7d34a6 1195
51e7da1b
L
1196enum
1197{
1198 THREE_BYTE_0F38 = 0,
3873ba12
L
1199 THREE_BYTE_0F3A,
1200 THREE_BYTE_0F7A
51e7da1b 1201};
4e7d34a6 1202
f88c9eb0
SP
1203enum
1204{
5dd85c99
SP
1205 XOP_08 = 0,
1206 XOP_09,
f88c9eb0
SP
1207 XOP_0A
1208};
1209
51e7da1b
L
1210enum
1211{
1212 VEX_0F = 0,
3873ba12
L
1213 VEX_0F38,
1214 VEX_0F3A
51e7da1b 1215};
c0f3af97 1216
51e7da1b
L
1217enum
1218{
592a252b
L
1219 VEX_LEN_0F10_P_1 = 0,
1220 VEX_LEN_0F10_P_3,
1221 VEX_LEN_0F11_P_1,
1222 VEX_LEN_0F11_P_3,
1223 VEX_LEN_0F12_P_0_M_0,
1224 VEX_LEN_0F12_P_0_M_1,
1225 VEX_LEN_0F12_P_2,
1226 VEX_LEN_0F13_M_0,
1227 VEX_LEN_0F16_P_0_M_0,
1228 VEX_LEN_0F16_P_0_M_1,
1229 VEX_LEN_0F16_P_2,
1230 VEX_LEN_0F17_M_0,
1231 VEX_LEN_0F2A_P_1,
1232 VEX_LEN_0F2A_P_3,
1233 VEX_LEN_0F2C_P_1,
1234 VEX_LEN_0F2C_P_3,
1235 VEX_LEN_0F2D_P_1,
1236 VEX_LEN_0F2D_P_3,
1237 VEX_LEN_0F2E_P_0,
1238 VEX_LEN_0F2E_P_2,
1239 VEX_LEN_0F2F_P_0,
1240 VEX_LEN_0F2F_P_2,
1241 VEX_LEN_0F51_P_1,
1242 VEX_LEN_0F51_P_3,
1243 VEX_LEN_0F52_P_1,
1244 VEX_LEN_0F53_P_1,
1245 VEX_LEN_0F58_P_1,
1246 VEX_LEN_0F58_P_3,
1247 VEX_LEN_0F59_P_1,
1248 VEX_LEN_0F59_P_3,
1249 VEX_LEN_0F5A_P_1,
1250 VEX_LEN_0F5A_P_3,
1251 VEX_LEN_0F5C_P_1,
1252 VEX_LEN_0F5C_P_3,
1253 VEX_LEN_0F5D_P_1,
1254 VEX_LEN_0F5D_P_3,
1255 VEX_LEN_0F5E_P_1,
1256 VEX_LEN_0F5E_P_3,
1257 VEX_LEN_0F5F_P_1,
1258 VEX_LEN_0F5F_P_3,
592a252b 1259 VEX_LEN_0F6E_P_2,
592a252b
L
1260 VEX_LEN_0F7E_P_1,
1261 VEX_LEN_0F7E_P_2,
1262 VEX_LEN_0FAE_R_2_M_0,
1263 VEX_LEN_0FAE_R_3_M_0,
1264 VEX_LEN_0FC2_P_1,
1265 VEX_LEN_0FC2_P_3,
1266 VEX_LEN_0FC4_P_2,
1267 VEX_LEN_0FC5_P_2,
592a252b 1268 VEX_LEN_0FD6_P_2,
592a252b 1269 VEX_LEN_0FF7_P_2,
6c30d220
L
1270 VEX_LEN_0F3816_P_2,
1271 VEX_LEN_0F3819_P_2,
592a252b 1272 VEX_LEN_0F381A_P_2_M_0,
6c30d220 1273 VEX_LEN_0F3836_P_2,
592a252b 1274 VEX_LEN_0F3841_P_2,
6c30d220 1275 VEX_LEN_0F385A_P_2_M_0,
592a252b
L
1276 VEX_LEN_0F38DB_P_2,
1277 VEX_LEN_0F38DC_P_2,
1278 VEX_LEN_0F38DD_P_2,
1279 VEX_LEN_0F38DE_P_2,
1280 VEX_LEN_0F38DF_P_2,
f12dc422
L
1281 VEX_LEN_0F38F2_P_0,
1282 VEX_LEN_0F38F3_R_1_P_0,
1283 VEX_LEN_0F38F3_R_2_P_0,
1284 VEX_LEN_0F38F3_R_3_P_0,
6c30d220
L
1285 VEX_LEN_0F38F5_P_0,
1286 VEX_LEN_0F38F5_P_1,
1287 VEX_LEN_0F38F5_P_3,
1288 VEX_LEN_0F38F6_P_3,
f12dc422 1289 VEX_LEN_0F38F7_P_0,
6c30d220
L
1290 VEX_LEN_0F38F7_P_1,
1291 VEX_LEN_0F38F7_P_2,
1292 VEX_LEN_0F38F7_P_3,
1293 VEX_LEN_0F3A00_P_2,
1294 VEX_LEN_0F3A01_P_2,
592a252b
L
1295 VEX_LEN_0F3A06_P_2,
1296 VEX_LEN_0F3A0A_P_2,
1297 VEX_LEN_0F3A0B_P_2,
592a252b
L
1298 VEX_LEN_0F3A14_P_2,
1299 VEX_LEN_0F3A15_P_2,
1300 VEX_LEN_0F3A16_P_2,
1301 VEX_LEN_0F3A17_P_2,
1302 VEX_LEN_0F3A18_P_2,
1303 VEX_LEN_0F3A19_P_2,
1304 VEX_LEN_0F3A20_P_2,
1305 VEX_LEN_0F3A21_P_2,
1306 VEX_LEN_0F3A22_P_2,
6c30d220
L
1307 VEX_LEN_0F3A38_P_2,
1308 VEX_LEN_0F3A39_P_2,
592a252b 1309 VEX_LEN_0F3A41_P_2,
592a252b 1310 VEX_LEN_0F3A44_P_2,
6c30d220 1311 VEX_LEN_0F3A46_P_2,
592a252b
L
1312 VEX_LEN_0F3A60_P_2,
1313 VEX_LEN_0F3A61_P_2,
1314 VEX_LEN_0F3A62_P_2,
1315 VEX_LEN_0F3A63_P_2,
1316 VEX_LEN_0F3A6A_P_2,
1317 VEX_LEN_0F3A6B_P_2,
1318 VEX_LEN_0F3A6E_P_2,
1319 VEX_LEN_0F3A6F_P_2,
1320 VEX_LEN_0F3A7A_P_2,
1321 VEX_LEN_0F3A7B_P_2,
1322 VEX_LEN_0F3A7E_P_2,
1323 VEX_LEN_0F3A7F_P_2,
1324 VEX_LEN_0F3ADF_P_2,
6c30d220 1325 VEX_LEN_0F3AF0_P_3,
ff688e1f
L
1326 VEX_LEN_0FXOP_08_CC,
1327 VEX_LEN_0FXOP_08_CD,
1328 VEX_LEN_0FXOP_08_CE,
1329 VEX_LEN_0FXOP_08_CF,
1330 VEX_LEN_0FXOP_08_EC,
1331 VEX_LEN_0FXOP_08_ED,
1332 VEX_LEN_0FXOP_08_EE,
1333 VEX_LEN_0FXOP_08_EF,
592a252b
L
1334 VEX_LEN_0FXOP_09_80,
1335 VEX_LEN_0FXOP_09_81
51e7da1b 1336};
c0f3af97 1337
9e30b8e0
L
1338enum
1339{
592a252b
L
1340 VEX_W_0F10_P_0 = 0,
1341 VEX_W_0F10_P_1,
1342 VEX_W_0F10_P_2,
1343 VEX_W_0F10_P_3,
1344 VEX_W_0F11_P_0,
1345 VEX_W_0F11_P_1,
1346 VEX_W_0F11_P_2,
1347 VEX_W_0F11_P_3,
1348 VEX_W_0F12_P_0_M_0,
1349 VEX_W_0F12_P_0_M_1,
1350 VEX_W_0F12_P_1,
1351 VEX_W_0F12_P_2,
1352 VEX_W_0F12_P_3,
1353 VEX_W_0F13_M_0,
1354 VEX_W_0F14,
1355 VEX_W_0F15,
1356 VEX_W_0F16_P_0_M_0,
1357 VEX_W_0F16_P_0_M_1,
1358 VEX_W_0F16_P_1,
1359 VEX_W_0F16_P_2,
1360 VEX_W_0F17_M_0,
1361 VEX_W_0F28,
1362 VEX_W_0F29,
1363 VEX_W_0F2B_M_0,
1364 VEX_W_0F2E_P_0,
1365 VEX_W_0F2E_P_2,
1366 VEX_W_0F2F_P_0,
1367 VEX_W_0F2F_P_2,
1368 VEX_W_0F50_M_0,
1369 VEX_W_0F51_P_0,
1370 VEX_W_0F51_P_1,
1371 VEX_W_0F51_P_2,
1372 VEX_W_0F51_P_3,
1373 VEX_W_0F52_P_0,
1374 VEX_W_0F52_P_1,
1375 VEX_W_0F53_P_0,
1376 VEX_W_0F53_P_1,
1377 VEX_W_0F58_P_0,
1378 VEX_W_0F58_P_1,
1379 VEX_W_0F58_P_2,
1380 VEX_W_0F58_P_3,
1381 VEX_W_0F59_P_0,
1382 VEX_W_0F59_P_1,
1383 VEX_W_0F59_P_2,
1384 VEX_W_0F59_P_3,
1385 VEX_W_0F5A_P_0,
1386 VEX_W_0F5A_P_1,
1387 VEX_W_0F5A_P_3,
1388 VEX_W_0F5B_P_0,
1389 VEX_W_0F5B_P_1,
1390 VEX_W_0F5B_P_2,
1391 VEX_W_0F5C_P_0,
1392 VEX_W_0F5C_P_1,
1393 VEX_W_0F5C_P_2,
1394 VEX_W_0F5C_P_3,
1395 VEX_W_0F5D_P_0,
1396 VEX_W_0F5D_P_1,
1397 VEX_W_0F5D_P_2,
1398 VEX_W_0F5D_P_3,
1399 VEX_W_0F5E_P_0,
1400 VEX_W_0F5E_P_1,
1401 VEX_W_0F5E_P_2,
1402 VEX_W_0F5E_P_3,
1403 VEX_W_0F5F_P_0,
1404 VEX_W_0F5F_P_1,
1405 VEX_W_0F5F_P_2,
1406 VEX_W_0F5F_P_3,
1407 VEX_W_0F60_P_2,
1408 VEX_W_0F61_P_2,
1409 VEX_W_0F62_P_2,
1410 VEX_W_0F63_P_2,
1411 VEX_W_0F64_P_2,
1412 VEX_W_0F65_P_2,
1413 VEX_W_0F66_P_2,
1414 VEX_W_0F67_P_2,
1415 VEX_W_0F68_P_2,
1416 VEX_W_0F69_P_2,
1417 VEX_W_0F6A_P_2,
1418 VEX_W_0F6B_P_2,
1419 VEX_W_0F6C_P_2,
1420 VEX_W_0F6D_P_2,
1421 VEX_W_0F6F_P_1,
1422 VEX_W_0F6F_P_2,
1423 VEX_W_0F70_P_1,
1424 VEX_W_0F70_P_2,
1425 VEX_W_0F70_P_3,
1426 VEX_W_0F71_R_2_P_2,
1427 VEX_W_0F71_R_4_P_2,
1428 VEX_W_0F71_R_6_P_2,
1429 VEX_W_0F72_R_2_P_2,
1430 VEX_W_0F72_R_4_P_2,
1431 VEX_W_0F72_R_6_P_2,
1432 VEX_W_0F73_R_2_P_2,
1433 VEX_W_0F73_R_3_P_2,
1434 VEX_W_0F73_R_6_P_2,
1435 VEX_W_0F73_R_7_P_2,
1436 VEX_W_0F74_P_2,
1437 VEX_W_0F75_P_2,
1438 VEX_W_0F76_P_2,
1439 VEX_W_0F77_P_0,
1440 VEX_W_0F7C_P_2,
1441 VEX_W_0F7C_P_3,
1442 VEX_W_0F7D_P_2,
1443 VEX_W_0F7D_P_3,
1444 VEX_W_0F7E_P_1,
1445 VEX_W_0F7F_P_1,
1446 VEX_W_0F7F_P_2,
1447 VEX_W_0FAE_R_2_M_0,
1448 VEX_W_0FAE_R_3_M_0,
1449 VEX_W_0FC2_P_0,
1450 VEX_W_0FC2_P_1,
1451 VEX_W_0FC2_P_2,
1452 VEX_W_0FC2_P_3,
1453 VEX_W_0FC4_P_2,
1454 VEX_W_0FC5_P_2,
1455 VEX_W_0FD0_P_2,
1456 VEX_W_0FD0_P_3,
1457 VEX_W_0FD1_P_2,
1458 VEX_W_0FD2_P_2,
1459 VEX_W_0FD3_P_2,
1460 VEX_W_0FD4_P_2,
1461 VEX_W_0FD5_P_2,
1462 VEX_W_0FD6_P_2,
1463 VEX_W_0FD7_P_2_M_1,
1464 VEX_W_0FD8_P_2,
1465 VEX_W_0FD9_P_2,
1466 VEX_W_0FDA_P_2,
1467 VEX_W_0FDB_P_2,
1468 VEX_W_0FDC_P_2,
1469 VEX_W_0FDD_P_2,
1470 VEX_W_0FDE_P_2,
1471 VEX_W_0FDF_P_2,
1472 VEX_W_0FE0_P_2,
1473 VEX_W_0FE1_P_2,
1474 VEX_W_0FE2_P_2,
1475 VEX_W_0FE3_P_2,
1476 VEX_W_0FE4_P_2,
1477 VEX_W_0FE5_P_2,
1478 VEX_W_0FE6_P_1,
1479 VEX_W_0FE6_P_2,
1480 VEX_W_0FE6_P_3,
1481 VEX_W_0FE7_P_2_M_0,
1482 VEX_W_0FE8_P_2,
1483 VEX_W_0FE9_P_2,
1484 VEX_W_0FEA_P_2,
1485 VEX_W_0FEB_P_2,
1486 VEX_W_0FEC_P_2,
1487 VEX_W_0FED_P_2,
1488 VEX_W_0FEE_P_2,
1489 VEX_W_0FEF_P_2,
1490 VEX_W_0FF0_P_3_M_0,
1491 VEX_W_0FF1_P_2,
1492 VEX_W_0FF2_P_2,
1493 VEX_W_0FF3_P_2,
1494 VEX_W_0FF4_P_2,
1495 VEX_W_0FF5_P_2,
1496 VEX_W_0FF6_P_2,
1497 VEX_W_0FF7_P_2,
1498 VEX_W_0FF8_P_2,
1499 VEX_W_0FF9_P_2,
1500 VEX_W_0FFA_P_2,
1501 VEX_W_0FFB_P_2,
1502 VEX_W_0FFC_P_2,
1503 VEX_W_0FFD_P_2,
1504 VEX_W_0FFE_P_2,
1505 VEX_W_0F3800_P_2,
1506 VEX_W_0F3801_P_2,
1507 VEX_W_0F3802_P_2,
1508 VEX_W_0F3803_P_2,
1509 VEX_W_0F3804_P_2,
1510 VEX_W_0F3805_P_2,
1511 VEX_W_0F3806_P_2,
1512 VEX_W_0F3807_P_2,
1513 VEX_W_0F3808_P_2,
1514 VEX_W_0F3809_P_2,
1515 VEX_W_0F380A_P_2,
1516 VEX_W_0F380B_P_2,
1517 VEX_W_0F380C_P_2,
1518 VEX_W_0F380D_P_2,
1519 VEX_W_0F380E_P_2,
1520 VEX_W_0F380F_P_2,
6c30d220 1521 VEX_W_0F3816_P_2,
592a252b 1522 VEX_W_0F3817_P_2,
6c30d220
L
1523 VEX_W_0F3818_P_2,
1524 VEX_W_0F3819_P_2,
592a252b
L
1525 VEX_W_0F381A_P_2_M_0,
1526 VEX_W_0F381C_P_2,
1527 VEX_W_0F381D_P_2,
1528 VEX_W_0F381E_P_2,
1529 VEX_W_0F3820_P_2,
1530 VEX_W_0F3821_P_2,
1531 VEX_W_0F3822_P_2,
1532 VEX_W_0F3823_P_2,
1533 VEX_W_0F3824_P_2,
1534 VEX_W_0F3825_P_2,
1535 VEX_W_0F3828_P_2,
1536 VEX_W_0F3829_P_2,
1537 VEX_W_0F382A_P_2_M_0,
1538 VEX_W_0F382B_P_2,
1539 VEX_W_0F382C_P_2_M_0,
1540 VEX_W_0F382D_P_2_M_0,
1541 VEX_W_0F382E_P_2_M_0,
1542 VEX_W_0F382F_P_2_M_0,
1543 VEX_W_0F3830_P_2,
1544 VEX_W_0F3831_P_2,
1545 VEX_W_0F3832_P_2,
1546 VEX_W_0F3833_P_2,
1547 VEX_W_0F3834_P_2,
1548 VEX_W_0F3835_P_2,
6c30d220 1549 VEX_W_0F3836_P_2,
592a252b
L
1550 VEX_W_0F3837_P_2,
1551 VEX_W_0F3838_P_2,
1552 VEX_W_0F3839_P_2,
1553 VEX_W_0F383A_P_2,
1554 VEX_W_0F383B_P_2,
1555 VEX_W_0F383C_P_2,
1556 VEX_W_0F383D_P_2,
1557 VEX_W_0F383E_P_2,
1558 VEX_W_0F383F_P_2,
1559 VEX_W_0F3840_P_2,
1560 VEX_W_0F3841_P_2,
6c30d220
L
1561 VEX_W_0F3846_P_2,
1562 VEX_W_0F3858_P_2,
1563 VEX_W_0F3859_P_2,
1564 VEX_W_0F385A_P_2_M_0,
1565 VEX_W_0F3878_P_2,
1566 VEX_W_0F3879_P_2,
592a252b
L
1567 VEX_W_0F38DB_P_2,
1568 VEX_W_0F38DC_P_2,
1569 VEX_W_0F38DD_P_2,
1570 VEX_W_0F38DE_P_2,
1571 VEX_W_0F38DF_P_2,
6c30d220
L
1572 VEX_W_0F3A00_P_2,
1573 VEX_W_0F3A01_P_2,
1574 VEX_W_0F3A02_P_2,
592a252b
L
1575 VEX_W_0F3A04_P_2,
1576 VEX_W_0F3A05_P_2,
1577 VEX_W_0F3A06_P_2,
1578 VEX_W_0F3A08_P_2,
1579 VEX_W_0F3A09_P_2,
1580 VEX_W_0F3A0A_P_2,
1581 VEX_W_0F3A0B_P_2,
1582 VEX_W_0F3A0C_P_2,
1583 VEX_W_0F3A0D_P_2,
1584 VEX_W_0F3A0E_P_2,
1585 VEX_W_0F3A0F_P_2,
1586 VEX_W_0F3A14_P_2,
1587 VEX_W_0F3A15_P_2,
1588 VEX_W_0F3A18_P_2,
1589 VEX_W_0F3A19_P_2,
1590 VEX_W_0F3A20_P_2,
1591 VEX_W_0F3A21_P_2,
6c30d220
L
1592 VEX_W_0F3A38_P_2,
1593 VEX_W_0F3A39_P_2,
592a252b
L
1594 VEX_W_0F3A40_P_2,
1595 VEX_W_0F3A41_P_2,
1596 VEX_W_0F3A42_P_2,
1597 VEX_W_0F3A44_P_2,
6c30d220 1598 VEX_W_0F3A46_P_2,
592a252b
L
1599 VEX_W_0F3A48_P_2,
1600 VEX_W_0F3A49_P_2,
1601 VEX_W_0F3A4A_P_2,
1602 VEX_W_0F3A4B_P_2,
1603 VEX_W_0F3A4C_P_2,
1604 VEX_W_0F3A60_P_2,
1605 VEX_W_0F3A61_P_2,
1606 VEX_W_0F3A62_P_2,
1607 VEX_W_0F3A63_P_2,
1608 VEX_W_0F3ADF_P_2
9e30b8e0
L
1609};
1610
26ca5450 1611typedef void (*op_rtn) (int bytemode, int sizeflag);
252b5132
RH
1612
1613struct dis386 {
2da11e11 1614 const char *name;
ce518a5f
L
1615 struct
1616 {
1617 op_rtn rtn;
1618 int bytemode;
1619 } op[MAX_OPERANDS];
252b5132
RH
1620};
1621
1622/* Upper case letters in the instruction names here are macros.
1623 'A' => print 'b' if no register operands or suffix_always is true
1624 'B' => print 'b' if suffix_always is true
9306ca4a 1625 'C' => print 's' or 'l' ('w' or 'd' in Intel mode) depending on operand
98b528ac 1626 size prefix
ed7841b3 1627 'D' => print 'w' if no register operands or 'w', 'l' or 'q', if
98b528ac 1628 suffix_always is true
252b5132 1629 'E' => print 'e' if 32-bit form of jcxz
3ffd33cf 1630 'F' => print 'w' or 'l' depending on address size prefix (loop insns)
52fd6d94 1631 'G' => print 'w' or 'l' depending on operand size prefix (i/o insns)
5dd0794d 1632 'H' => print ",pt" or ",pn" branch hint
9306ca4a 1633 'I' => honor following macro letter even in Intel mode (implemented only
98b528ac 1634 for some of the macro letters)
9306ca4a 1635 'J' => print 'l'
42903f7f 1636 'K' => print 'd' or 'q' if rex prefix is present.
252b5132 1637 'L' => print 'l' if suffix_always is true
9d141669 1638 'M' => print 'r' if intel_mnemonic is false.
252b5132 1639 'N' => print 'n' if instruction has no wait "prefix"
a35ca55a 1640 'O' => print 'd' or 'o' (or 'q' in Intel mode)
52b15da3 1641 'P' => print 'w', 'l' or 'q' if instruction has an operand size prefix,
98b528ac
L
1642 or suffix_always is true. print 'q' if rex prefix is present.
1643 'Q' => print 'w', 'l' or 'q' for memory operand or suffix_always
1644 is true
a35ca55a 1645 'R' => print 'w', 'l' or 'q' ('d' for 'l' and 'e' in Intel mode)
52b15da3 1646 'S' => print 'w', 'l' or 'q' if suffix_always is true
6439fc28
AM
1647 'T' => print 'q' in 64bit mode and behave as 'P' otherwise
1648 'U' => print 'q' in 64bit mode and behave as 'Q' otherwise
1a114b12 1649 'V' => print 'q' in 64bit mode and behave as 'S' otherwise
a35ca55a 1650 'W' => print 'b', 'w' or 'l' ('d' in Intel mode)
9306ca4a 1651 'X' => print 's', 'd' depending on data16 prefix (for XMM)
8a72226a
L
1652 'Y' => 'q' if instruction has an REX 64bit overwrite prefix and
1653 suffix_always is true.
6dd5059a 1654 'Z' => print 'q' in 64bit mode and behave as 'L' otherwise
9d141669 1655 '!' => change condition from true to false or from false to true.
98b528ac
L
1656 '%' => add 1 upper case letter to the macro.
1657
1658 2 upper case letter macros:
c0f3af97
L
1659 "XY" => print 'x' or 'y' if no register operands or suffix_always
1660 is true.
4b06377f
L
1661 "XW" => print 's', 'd' depending on the VEX.W bit (for FMA)
1662 "LQ" => print 'l' ('d' in Intel mode) or 'q' for memory operand
98b528ac 1663 or suffix_always is true
4b06377f
L
1664 "LB" => print "abs" in 64bit mode and behave as 'B' otherwise
1665 "LS" => print "abs" in 64bit mode and behave as 'S' otherwise
1666 "LV" => print "abs" for 64bit operand and behave as 'S' otherwise
6c30d220 1667 "LW" => print 'd', 'q' depending on the VEX.W bit
52b15da3 1668
6439fc28
AM
1669 Many of the above letters print nothing in Intel mode. See "putop"
1670 for the details.
52b15da3 1671
6439fc28 1672 Braces '{' and '}', and vertical bars '|', indicate alternative
7c52e0e8 1673 mnemonic strings for AT&T and Intel. */
252b5132 1674
6439fc28 1675static const struct dis386 dis386[] = {
252b5132 1676 /* 00 */
42164a71
L
1677 { "addB", { Ebh1, Gb } },
1678 { "addS", { Evh1, Gv } },
c7532693
L
1679 { "addB", { Gb, EbS } },
1680 { "addS", { Gv, EvS } },
ce518a5f
L
1681 { "addB", { AL, Ib } },
1682 { "addS", { eAX, Iv } },
4e7d34a6
L
1683 { X86_64_TABLE (X86_64_06) },
1684 { X86_64_TABLE (X86_64_07) },
252b5132 1685 /* 08 */
42164a71
L
1686 { "orB", { Ebh1, Gb } },
1687 { "orS", { Evh1, Gv } },
c7532693
L
1688 { "orB", { Gb, EbS } },
1689 { "orS", { Gv, EvS } },
ce518a5f
L
1690 { "orB", { AL, Ib } },
1691 { "orS", { eAX, Iv } },
4e7d34a6 1692 { X86_64_TABLE (X86_64_0D) },
592d1631 1693 { Bad_Opcode }, /* 0x0f extended opcode escape */
252b5132 1694 /* 10 */
42164a71
L
1695 { "adcB", { Ebh1, Gb } },
1696 { "adcS", { Evh1, Gv } },
c7532693
L
1697 { "adcB", { Gb, EbS } },
1698 { "adcS", { Gv, EvS } },
ce518a5f
L
1699 { "adcB", { AL, Ib } },
1700 { "adcS", { eAX, Iv } },
4e7d34a6
L
1701 { X86_64_TABLE (X86_64_16) },
1702 { X86_64_TABLE (X86_64_17) },
252b5132 1703 /* 18 */
42164a71
L
1704 { "sbbB", { Ebh1, Gb } },
1705 { "sbbS", { Evh1, Gv } },
c7532693
L
1706 { "sbbB", { Gb, EbS } },
1707 { "sbbS", { Gv, EvS } },
ce518a5f
L
1708 { "sbbB", { AL, Ib } },
1709 { "sbbS", { eAX, Iv } },
4e7d34a6
L
1710 { X86_64_TABLE (X86_64_1E) },
1711 { X86_64_TABLE (X86_64_1F) },
252b5132 1712 /* 20 */
42164a71
L
1713 { "andB", { Ebh1, Gb } },
1714 { "andS", { Evh1, Gv } },
c7532693
L
1715 { "andB", { Gb, EbS } },
1716 { "andS", { Gv, EvS } },
ce518a5f
L
1717 { "andB", { AL, Ib } },
1718 { "andS", { eAX, Iv } },
592d1631 1719 { Bad_Opcode }, /* SEG ES prefix */
4e7d34a6 1720 { X86_64_TABLE (X86_64_27) },
252b5132 1721 /* 28 */
42164a71
L
1722 { "subB", { Ebh1, Gb } },
1723 { "subS", { Evh1, Gv } },
c7532693
L
1724 { "subB", { Gb, EbS } },
1725 { "subS", { Gv, EvS } },
ce518a5f
L
1726 { "subB", { AL, Ib } },
1727 { "subS", { eAX, Iv } },
592d1631 1728 { Bad_Opcode }, /* SEG CS prefix */
4e7d34a6 1729 { X86_64_TABLE (X86_64_2F) },
252b5132 1730 /* 30 */
42164a71
L
1731 { "xorB", { Ebh1, Gb } },
1732 { "xorS", { Evh1, Gv } },
c7532693
L
1733 { "xorB", { Gb, EbS } },
1734 { "xorS", { Gv, EvS } },
ce518a5f
L
1735 { "xorB", { AL, Ib } },
1736 { "xorS", { eAX, Iv } },
592d1631 1737 { Bad_Opcode }, /* SEG SS prefix */
4e7d34a6 1738 { X86_64_TABLE (X86_64_37) },
252b5132 1739 /* 38 */
ce518a5f
L
1740 { "cmpB", { Eb, Gb } },
1741 { "cmpS", { Ev, Gv } },
c7532693
L
1742 { "cmpB", { Gb, EbS } },
1743 { "cmpS", { Gv, EvS } },
ce518a5f
L
1744 { "cmpB", { AL, Ib } },
1745 { "cmpS", { eAX, Iv } },
592d1631 1746 { Bad_Opcode }, /* SEG DS prefix */
4e7d34a6 1747 { X86_64_TABLE (X86_64_3F) },
252b5132 1748 /* 40 */
ce518a5f
L
1749 { "inc{S|}", { RMeAX } },
1750 { "inc{S|}", { RMeCX } },
1751 { "inc{S|}", { RMeDX } },
1752 { "inc{S|}", { RMeBX } },
1753 { "inc{S|}", { RMeSP } },
1754 { "inc{S|}", { RMeBP } },
1755 { "inc{S|}", { RMeSI } },
1756 { "inc{S|}", { RMeDI } },
252b5132 1757 /* 48 */
ce518a5f
L
1758 { "dec{S|}", { RMeAX } },
1759 { "dec{S|}", { RMeCX } },
1760 { "dec{S|}", { RMeDX } },
1761 { "dec{S|}", { RMeBX } },
1762 { "dec{S|}", { RMeSP } },
1763 { "dec{S|}", { RMeBP } },
1764 { "dec{S|}", { RMeSI } },
1765 { "dec{S|}", { RMeDI } },
252b5132 1766 /* 50 */
ce518a5f
L
1767 { "pushV", { RMrAX } },
1768 { "pushV", { RMrCX } },
1769 { "pushV", { RMrDX } },
1770 { "pushV", { RMrBX } },
1771 { "pushV", { RMrSP } },
1772 { "pushV", { RMrBP } },
1773 { "pushV", { RMrSI } },
1774 { "pushV", { RMrDI } },
252b5132 1775 /* 58 */
ce518a5f
L
1776 { "popV", { RMrAX } },
1777 { "popV", { RMrCX } },
1778 { "popV", { RMrDX } },
1779 { "popV", { RMrBX } },
1780 { "popV", { RMrSP } },
1781 { "popV", { RMrBP } },
1782 { "popV", { RMrSI } },
1783 { "popV", { RMrDI } },
252b5132 1784 /* 60 */
4e7d34a6
L
1785 { X86_64_TABLE (X86_64_60) },
1786 { X86_64_TABLE (X86_64_61) },
1787 { X86_64_TABLE (X86_64_62) },
1788 { X86_64_TABLE (X86_64_63) },
592d1631
L
1789 { Bad_Opcode }, /* seg fs */
1790 { Bad_Opcode }, /* seg gs */
1791 { Bad_Opcode }, /* op size prefix */
1792 { Bad_Opcode }, /* adr size prefix */
252b5132 1793 /* 68 */
d9e3625e 1794 { "pushT", { sIv } },
ce518a5f 1795 { "imulS", { Gv, Ev, Iv } },
e3949f17 1796 { "pushT", { sIbT } },
ce518a5f 1797 { "imulS", { Gv, Ev, sIb } },
7c52e0e8 1798 { "ins{b|}", { Ybr, indirDX } },
4e7d34a6 1799 { X86_64_TABLE (X86_64_6D) },
7c52e0e8 1800 { "outs{b|}", { indirDXr, Xb } },
4e7d34a6 1801 { X86_64_TABLE (X86_64_6F) },
252b5132 1802 /* 70 */
ce518a5f
L
1803 { "joH", { Jb, XX, cond_jump_flag } },
1804 { "jnoH", { Jb, XX, cond_jump_flag } },
1805 { "jbH", { Jb, XX, cond_jump_flag } },
1806 { "jaeH", { Jb, XX, cond_jump_flag } },
1807 { "jeH", { Jb, XX, cond_jump_flag } },
1808 { "jneH", { Jb, XX, cond_jump_flag } },
1809 { "jbeH", { Jb, XX, cond_jump_flag } },
1810 { "jaH", { Jb, XX, cond_jump_flag } },
252b5132 1811 /* 78 */
ce518a5f
L
1812 { "jsH", { Jb, XX, cond_jump_flag } },
1813 { "jnsH", { Jb, XX, cond_jump_flag } },
1814 { "jpH", { Jb, XX, cond_jump_flag } },
1815 { "jnpH", { Jb, XX, cond_jump_flag } },
1816 { "jlH", { Jb, XX, cond_jump_flag } },
1817 { "jgeH", { Jb, XX, cond_jump_flag } },
1818 { "jleH", { Jb, XX, cond_jump_flag } },
1819 { "jgH", { Jb, XX, cond_jump_flag } },
252b5132 1820 /* 80 */
1ceb70f8
L
1821 { REG_TABLE (REG_80) },
1822 { REG_TABLE (REG_81) },
592d1631 1823 { Bad_Opcode },
1ceb70f8 1824 { REG_TABLE (REG_82) },
ce518a5f
L
1825 { "testB", { Eb, Gb } },
1826 { "testS", { Ev, Gv } },
42164a71
L
1827 { "xchgB", { Ebh2, Gb } },
1828 { "xchgS", { Evh2, Gv } },
252b5132 1829 /* 88 */
42164a71
L
1830 { "movB", { Ebh3, Gb } },
1831 { "movS", { Evh3, Gv } },
b6169b20
L
1832 { "movB", { Gb, EbS } },
1833 { "movS", { Gv, EvS } },
ce518a5f 1834 { "movD", { Sv, Sw } },
1ceb70f8 1835 { MOD_TABLE (MOD_8D) },
ce518a5f 1836 { "movD", { Sw, Sv } },
1ceb70f8 1837 { REG_TABLE (REG_8F) },
252b5132 1838 /* 90 */
1ceb70f8 1839 { PREFIX_TABLE (PREFIX_90) },
ce518a5f
L
1840 { "xchgS", { RMeCX, eAX } },
1841 { "xchgS", { RMeDX, eAX } },
1842 { "xchgS", { RMeBX, eAX } },
1843 { "xchgS", { RMeSP, eAX } },
1844 { "xchgS", { RMeBP, eAX } },
1845 { "xchgS", { RMeSI, eAX } },
1846 { "xchgS", { RMeDI, eAX } },
252b5132 1847 /* 98 */
7c52e0e8
L
1848 { "cW{t|}R", { XX } },
1849 { "cR{t|}O", { XX } },
4e7d34a6 1850 { X86_64_TABLE (X86_64_9A) },
592d1631 1851 { Bad_Opcode }, /* fwait */
ce518a5f
L
1852 { "pushfT", { XX } },
1853 { "popfT", { XX } },
7c52e0e8
L
1854 { "sahf", { XX } },
1855 { "lahf", { XX } },
252b5132 1856 /* a0 */
4b06377f
L
1857 { "mov%LB", { AL, Ob } },
1858 { "mov%LS", { eAX, Ov } },
1859 { "mov%LB", { Ob, AL } },
1860 { "mov%LS", { Ov, eAX } },
7c52e0e8
L
1861 { "movs{b|}", { Ybr, Xb } },
1862 { "movs{R|}", { Yvr, Xv } },
1863 { "cmps{b|}", { Xb, Yb } },
1864 { "cmps{R|}", { Xv, Yv } },
252b5132 1865 /* a8 */
ce518a5f
L
1866 { "testB", { AL, Ib } },
1867 { "testS", { eAX, Iv } },
1868 { "stosB", { Ybr, AL } },
1869 { "stosS", { Yvr, eAX } },
1870 { "lodsB", { ALr, Xb } },
1871 { "lodsS", { eAXr, Xv } },
1872 { "scasB", { AL, Yb } },
1873 { "scasS", { eAX, Yv } },
252b5132 1874 /* b0 */
ce518a5f
L
1875 { "movB", { RMAL, Ib } },
1876 { "movB", { RMCL, Ib } },
1877 { "movB", { RMDL, Ib } },
1878 { "movB", { RMBL, Ib } },
1879 { "movB", { RMAH, Ib } },
1880 { "movB", { RMCH, Ib } },
1881 { "movB", { RMDH, Ib } },
1882 { "movB", { RMBH, Ib } },
252b5132 1883 /* b8 */
4b06377f
L
1884 { "mov%LV", { RMeAX, Iv64 } },
1885 { "mov%LV", { RMeCX, Iv64 } },
1886 { "mov%LV", { RMeDX, Iv64 } },
1887 { "mov%LV", { RMeBX, Iv64 } },
1888 { "mov%LV", { RMeSP, Iv64 } },
1889 { "mov%LV", { RMeBP, Iv64 } },
1890 { "mov%LV", { RMeSI, Iv64 } },
1891 { "mov%LV", { RMeDI, Iv64 } },
252b5132 1892 /* c0 */
1ceb70f8
L
1893 { REG_TABLE (REG_C0) },
1894 { REG_TABLE (REG_C1) },
ce518a5f
L
1895 { "retT", { Iw } },
1896 { "retT", { XX } },
4e7d34a6
L
1897 { X86_64_TABLE (X86_64_C4) },
1898 { X86_64_TABLE (X86_64_C5) },
1ceb70f8
L
1899 { REG_TABLE (REG_C6) },
1900 { REG_TABLE (REG_C7) },
252b5132 1901 /* c8 */
ce518a5f
L
1902 { "enterT", { Iw, Ib } },
1903 { "leaveT", { XX } },
ddab3d59
JB
1904 { "Jret{|f}P", { Iw } },
1905 { "Jret{|f}P", { XX } },
ce518a5f
L
1906 { "int3", { XX } },
1907 { "int", { Ib } },
4e7d34a6 1908 { X86_64_TABLE (X86_64_CE) },
ce518a5f 1909 { "iretP", { XX } },
252b5132 1910 /* d0 */
1ceb70f8
L
1911 { REG_TABLE (REG_D0) },
1912 { REG_TABLE (REG_D1) },
1913 { REG_TABLE (REG_D2) },
1914 { REG_TABLE (REG_D3) },
4e7d34a6
L
1915 { X86_64_TABLE (X86_64_D4) },
1916 { X86_64_TABLE (X86_64_D5) },
592d1631 1917 { Bad_Opcode },
ce518a5f 1918 { "xlat", { DSBX } },
252b5132
RH
1919 /* d8 */
1920 { FLOAT },
1921 { FLOAT },
1922 { FLOAT },
1923 { FLOAT },
1924 { FLOAT },
1925 { FLOAT },
1926 { FLOAT },
1927 { FLOAT },
1928 /* e0 */
ce518a5f
L
1929 { "loopneFH", { Jb, XX, loop_jcxz_flag } },
1930 { "loopeFH", { Jb, XX, loop_jcxz_flag } },
1931 { "loopFH", { Jb, XX, loop_jcxz_flag } },
1932 { "jEcxzH", { Jb, XX, loop_jcxz_flag } },
1933 { "inB", { AL, Ib } },
1934 { "inG", { zAX, Ib } },
1935 { "outB", { Ib, AL } },
1936 { "outG", { Ib, zAX } },
252b5132 1937 /* e8 */
ce518a5f
L
1938 { "callT", { Jv } },
1939 { "jmpT", { Jv } },
4e7d34a6 1940 { X86_64_TABLE (X86_64_EA) },
ce518a5f
L
1941 { "jmp", { Jb } },
1942 { "inB", { AL, indirDX } },
1943 { "inG", { zAX, indirDX } },
1944 { "outB", { indirDX, AL } },
1945 { "outG", { indirDX, zAX } },
252b5132 1946 /* f0 */
592d1631 1947 { Bad_Opcode }, /* lock prefix */
ce518a5f 1948 { "icebp", { XX } },
592d1631
L
1949 { Bad_Opcode }, /* repne */
1950 { Bad_Opcode }, /* repz */
ce518a5f
L
1951 { "hlt", { XX } },
1952 { "cmc", { XX } },
1ceb70f8
L
1953 { REG_TABLE (REG_F6) },
1954 { REG_TABLE (REG_F7) },
252b5132 1955 /* f8 */
ce518a5f
L
1956 { "clc", { XX } },
1957 { "stc", { XX } },
1958 { "cli", { XX } },
1959 { "sti", { XX } },
1960 { "cld", { XX } },
1961 { "std", { XX } },
1ceb70f8
L
1962 { REG_TABLE (REG_FE) },
1963 { REG_TABLE (REG_FF) },
252b5132
RH
1964};
1965
6439fc28 1966static const struct dis386 dis386_twobyte[] = {
252b5132 1967 /* 00 */
1ceb70f8
L
1968 { REG_TABLE (REG_0F00 ) },
1969 { REG_TABLE (REG_0F01 ) },
ce518a5f
L
1970 { "larS", { Gv, Ew } },
1971 { "lslS", { Gv, Ew } },
592d1631 1972 { Bad_Opcode },
ce518a5f
L
1973 { "syscall", { XX } },
1974 { "clts", { XX } },
1975 { "sysretP", { XX } },
252b5132 1976 /* 08 */
ce518a5f
L
1977 { "invd", { XX } },
1978 { "wbinvd", { XX } },
592d1631 1979 { Bad_Opcode },
b414985b 1980 { "ud2", { XX } },
592d1631 1981 { Bad_Opcode },
b5b1fc4f 1982 { REG_TABLE (REG_0F0D) },
ce518a5f
L
1983 { "femms", { XX } },
1984 { "", { MX, EM, OPSUF } }, /* See OP_3DNowSuffix. */
252b5132 1985 /* 10 */
1ceb70f8
L
1986 { PREFIX_TABLE (PREFIX_0F10) },
1987 { PREFIX_TABLE (PREFIX_0F11) },
1988 { PREFIX_TABLE (PREFIX_0F12) },
1989 { MOD_TABLE (MOD_0F13) },
f2a421c4
L
1990 { "unpcklpX", { XM, EXx } },
1991 { "unpckhpX", { XM, EXx } },
1ceb70f8
L
1992 { PREFIX_TABLE (PREFIX_0F16) },
1993 { MOD_TABLE (MOD_0F17) },
252b5132 1994 /* 18 */
1ceb70f8 1995 { REG_TABLE (REG_0F18) },
b5b1fc4f
L
1996 { "nopQ", { Ev } },
1997 { "nopQ", { Ev } },
1998 { "nopQ", { Ev } },
1999 { "nopQ", { Ev } },
2000 { "nopQ", { Ev } },
2001 { "nopQ", { Ev } },
ce518a5f 2002 { "nopQ", { Ev } },
252b5132 2003 /* 20 */
1ceb70f8
L
2004 { MOD_TABLE (MOD_0F20) },
2005 { MOD_TABLE (MOD_0F21) },
2006 { MOD_TABLE (MOD_0F22) },
2007 { MOD_TABLE (MOD_0F23) },
2008 { MOD_TABLE (MOD_0F24) },
592d1631 2009 { Bad_Opcode },
1ceb70f8 2010 { MOD_TABLE (MOD_0F26) },
592d1631 2011 { Bad_Opcode },
252b5132 2012 /* 28 */
09a2c6cf 2013 { "movapX", { XM, EXx } },
b6169b20 2014 { "movapX", { EXxS, XM } },
1ceb70f8
L
2015 { PREFIX_TABLE (PREFIX_0F2A) },
2016 { PREFIX_TABLE (PREFIX_0F2B) },
2017 { PREFIX_TABLE (PREFIX_0F2C) },
2018 { PREFIX_TABLE (PREFIX_0F2D) },
2019 { PREFIX_TABLE (PREFIX_0F2E) },
2020 { PREFIX_TABLE (PREFIX_0F2F) },
252b5132 2021 /* 30 */
ce518a5f
L
2022 { "wrmsr", { XX } },
2023 { "rdtsc", { XX } },
2024 { "rdmsr", { XX } },
2025 { "rdpmc", { XX } },
2026 { "sysenter", { XX } },
2027 { "sysexit", { XX } },
592d1631 2028 { Bad_Opcode },
47dd174c 2029 { "getsec", { XX } },
252b5132 2030 /* 38 */
4e7d34a6 2031 { THREE_BYTE_TABLE (THREE_BYTE_0F38) },
592d1631 2032 { Bad_Opcode },
4e7d34a6 2033 { THREE_BYTE_TABLE (THREE_BYTE_0F3A) },
592d1631
L
2034 { Bad_Opcode },
2035 { Bad_Opcode },
2036 { Bad_Opcode },
2037 { Bad_Opcode },
2038 { Bad_Opcode },
252b5132 2039 /* 40 */
b19d5385
JB
2040 { "cmovoS", { Gv, Ev } },
2041 { "cmovnoS", { Gv, Ev } },
2042 { "cmovbS", { Gv, Ev } },
2043 { "cmovaeS", { Gv, Ev } },
2044 { "cmoveS", { Gv, Ev } },
2045 { "cmovneS", { Gv, Ev } },
2046 { "cmovbeS", { Gv, Ev } },
2047 { "cmovaS", { Gv, Ev } },
252b5132 2048 /* 48 */
b19d5385
JB
2049 { "cmovsS", { Gv, Ev } },
2050 { "cmovnsS", { Gv, Ev } },
2051 { "cmovpS", { Gv, Ev } },
2052 { "cmovnpS", { Gv, Ev } },
2053 { "cmovlS", { Gv, Ev } },
2054 { "cmovgeS", { Gv, Ev } },
2055 { "cmovleS", { Gv, Ev } },
2056 { "cmovgS", { Gv, Ev } },
252b5132 2057 /* 50 */
75c135a8 2058 { MOD_TABLE (MOD_0F51) },
1ceb70f8
L
2059 { PREFIX_TABLE (PREFIX_0F51) },
2060 { PREFIX_TABLE (PREFIX_0F52) },
2061 { PREFIX_TABLE (PREFIX_0F53) },
09a2c6cf
L
2062 { "andpX", { XM, EXx } },
2063 { "andnpX", { XM, EXx } },
2064 { "orpX", { XM, EXx } },
2065 { "xorpX", { XM, EXx } },
252b5132 2066 /* 58 */
1ceb70f8
L
2067 { PREFIX_TABLE (PREFIX_0F58) },
2068 { PREFIX_TABLE (PREFIX_0F59) },
2069 { PREFIX_TABLE (PREFIX_0F5A) },
2070 { PREFIX_TABLE (PREFIX_0F5B) },
2071 { PREFIX_TABLE (PREFIX_0F5C) },
2072 { PREFIX_TABLE (PREFIX_0F5D) },
2073 { PREFIX_TABLE (PREFIX_0F5E) },
2074 { PREFIX_TABLE (PREFIX_0F5F) },
252b5132 2075 /* 60 */
1ceb70f8
L
2076 { PREFIX_TABLE (PREFIX_0F60) },
2077 { PREFIX_TABLE (PREFIX_0F61) },
2078 { PREFIX_TABLE (PREFIX_0F62) },
ce518a5f
L
2079 { "packsswb", { MX, EM } },
2080 { "pcmpgtb", { MX, EM } },
2081 { "pcmpgtw", { MX, EM } },
2082 { "pcmpgtd", { MX, EM } },
2083 { "packuswb", { MX, EM } },
252b5132 2084 /* 68 */
ce518a5f
L
2085 { "punpckhbw", { MX, EM } },
2086 { "punpckhwd", { MX, EM } },
2087 { "punpckhdq", { MX, EM } },
2088 { "packssdw", { MX, EM } },
1ceb70f8
L
2089 { PREFIX_TABLE (PREFIX_0F6C) },
2090 { PREFIX_TABLE (PREFIX_0F6D) },
231af070 2091 { "movK", { MX, Edq } },
1ceb70f8 2092 { PREFIX_TABLE (PREFIX_0F6F) },
252b5132 2093 /* 70 */
1ceb70f8
L
2094 { PREFIX_TABLE (PREFIX_0F70) },
2095 { REG_TABLE (REG_0F71) },
2096 { REG_TABLE (REG_0F72) },
2097 { REG_TABLE (REG_0F73) },
ce518a5f
L
2098 { "pcmpeqb", { MX, EM } },
2099 { "pcmpeqw", { MX, EM } },
2100 { "pcmpeqd", { MX, EM } },
2101 { "emms", { XX } },
252b5132 2102 /* 78 */
1ceb70f8
L
2103 { PREFIX_TABLE (PREFIX_0F78) },
2104 { PREFIX_TABLE (PREFIX_0F79) },
4e7d34a6 2105 { THREE_BYTE_TABLE (THREE_BYTE_0F7A) },
592d1631 2106 { Bad_Opcode },
1ceb70f8
L
2107 { PREFIX_TABLE (PREFIX_0F7C) },
2108 { PREFIX_TABLE (PREFIX_0F7D) },
2109 { PREFIX_TABLE (PREFIX_0F7E) },
2110 { PREFIX_TABLE (PREFIX_0F7F) },
252b5132 2111 /* 80 */
ce518a5f
L
2112 { "joH", { Jv, XX, cond_jump_flag } },
2113 { "jnoH", { Jv, XX, cond_jump_flag } },
2114 { "jbH", { Jv, XX, cond_jump_flag } },
2115 { "jaeH", { Jv, XX, cond_jump_flag } },
2116 { "jeH", { Jv, XX, cond_jump_flag } },
2117 { "jneH", { Jv, XX, cond_jump_flag } },
2118 { "jbeH", { Jv, XX, cond_jump_flag } },
2119 { "jaH", { Jv, XX, cond_jump_flag } },
252b5132 2120 /* 88 */
ce518a5f
L
2121 { "jsH", { Jv, XX, cond_jump_flag } },
2122 { "jnsH", { Jv, XX, cond_jump_flag } },
2123 { "jpH", { Jv, XX, cond_jump_flag } },
2124 { "jnpH", { Jv, XX, cond_jump_flag } },
2125 { "jlH", { Jv, XX, cond_jump_flag } },
2126 { "jgeH", { Jv, XX, cond_jump_flag } },
2127 { "jleH", { Jv, XX, cond_jump_flag } },
2128 { "jgH", { Jv, XX, cond_jump_flag } },
252b5132 2129 /* 90 */
ce518a5f
L
2130 { "seto", { Eb } },
2131 { "setno", { Eb } },
2132 { "setb", { Eb } },
2133 { "setae", { Eb } },
2134 { "sete", { Eb } },
2135 { "setne", { Eb } },
2136 { "setbe", { Eb } },
2137 { "seta", { Eb } },
252b5132 2138 /* 98 */
ce518a5f
L
2139 { "sets", { Eb } },
2140 { "setns", { Eb } },
2141 { "setp", { Eb } },
2142 { "setnp", { Eb } },
2143 { "setl", { Eb } },
2144 { "setge", { Eb } },
2145 { "setle", { Eb } },
2146 { "setg", { Eb } },
252b5132 2147 /* a0 */
ce518a5f
L
2148 { "pushT", { fs } },
2149 { "popT", { fs } },
2150 { "cpuid", { XX } },
2151 { "btS", { Ev, Gv } },
2152 { "shldS", { Ev, Gv, Ib } },
2153 { "shldS", { Ev, Gv, CL } },
1ceb70f8
L
2154 { REG_TABLE (REG_0FA6) },
2155 { REG_TABLE (REG_0FA7) },
252b5132 2156 /* a8 */
ce518a5f
L
2157 { "pushT", { gs } },
2158 { "popT", { gs } },
2159 { "rsm", { XX } },
42164a71 2160 { "btsS", { Evh1, Gv } },
ce518a5f
L
2161 { "shrdS", { Ev, Gv, Ib } },
2162 { "shrdS", { Ev, Gv, CL } },
1ceb70f8 2163 { REG_TABLE (REG_0FAE) },
ce518a5f 2164 { "imulS", { Gv, Ev } },
252b5132 2165 /* b0 */
42164a71
L
2166 { "cmpxchgB", { Ebh1, Gb } },
2167 { "cmpxchgS", { Evh1, Gv } },
1ceb70f8 2168 { MOD_TABLE (MOD_0FB2) },
42164a71 2169 { "btrS", { Evh1, Gv } },
1ceb70f8
L
2170 { MOD_TABLE (MOD_0FB4) },
2171 { MOD_TABLE (MOD_0FB5) },
7c52e0e8
L
2172 { "movz{bR|x}", { Gv, Eb } },
2173 { "movz{wR|x}", { Gv, Ew } }, /* yes, there really is movzww ! */
252b5132 2174 /* b8 */
1ceb70f8 2175 { PREFIX_TABLE (PREFIX_0FB8) },
b414985b 2176 { "ud1", { XX } },
1ceb70f8 2177 { REG_TABLE (REG_0FBA) },
42164a71 2178 { "btcS", { Evh1, Gv } },
f12dc422 2179 { PREFIX_TABLE (PREFIX_0FBC) },
1ceb70f8 2180 { PREFIX_TABLE (PREFIX_0FBD) },
7c52e0e8
L
2181 { "movs{bR|x}", { Gv, Eb } },
2182 { "movs{wR|x}", { Gv, Ew } }, /* yes, there really is movsww ! */
252b5132 2183 /* c0 */
42164a71
L
2184 { "xaddB", { Ebh1, Gb } },
2185 { "xaddS", { Evh1, Gv } },
1ceb70f8 2186 { PREFIX_TABLE (PREFIX_0FC2) },
4ee52178 2187 { PREFIX_TABLE (PREFIX_0FC3) },
ce518a5f
L
2188 { "pinsrw", { MX, Edqw, Ib } },
2189 { "pextrw", { Gdq, MS, Ib } },
09a2c6cf 2190 { "shufpX", { XM, EXx, Ib } },
1ceb70f8 2191 { REG_TABLE (REG_0FC7) },
252b5132 2192 /* c8 */
ce518a5f
L
2193 { "bswap", { RMeAX } },
2194 { "bswap", { RMeCX } },
2195 { "bswap", { RMeDX } },
2196 { "bswap", { RMeBX } },
2197 { "bswap", { RMeSP } },
2198 { "bswap", { RMeBP } },
2199 { "bswap", { RMeSI } },
2200 { "bswap", { RMeDI } },
252b5132 2201 /* d0 */
1ceb70f8 2202 { PREFIX_TABLE (PREFIX_0FD0) },
ce518a5f
L
2203 { "psrlw", { MX, EM } },
2204 { "psrld", { MX, EM } },
2205 { "psrlq", { MX, EM } },
2206 { "paddq", { MX, EM } },
2207 { "pmullw", { MX, EM } },
1ceb70f8 2208 { PREFIX_TABLE (PREFIX_0FD6) },
75c135a8 2209 { MOD_TABLE (MOD_0FD7) },
252b5132 2210 /* d8 */
ce518a5f
L
2211 { "psubusb", { MX, EM } },
2212 { "psubusw", { MX, EM } },
2213 { "pminub", { MX, EM } },
2214 { "pand", { MX, EM } },
2215 { "paddusb", { MX, EM } },
2216 { "paddusw", { MX, EM } },
2217 { "pmaxub", { MX, EM } },
2218 { "pandn", { MX, EM } },
252b5132 2219 /* e0 */
ce518a5f
L
2220 { "pavgb", { MX, EM } },
2221 { "psraw", { MX, EM } },
2222 { "psrad", { MX, EM } },
2223 { "pavgw", { MX, EM } },
2224 { "pmulhuw", { MX, EM } },
2225 { "pmulhw", { MX, EM } },
1ceb70f8
L
2226 { PREFIX_TABLE (PREFIX_0FE6) },
2227 { PREFIX_TABLE (PREFIX_0FE7) },
252b5132 2228 /* e8 */
ce518a5f
L
2229 { "psubsb", { MX, EM } },
2230 { "psubsw", { MX, EM } },
2231 { "pminsw", { MX, EM } },
2232 { "por", { MX, EM } },
2233 { "paddsb", { MX, EM } },
2234 { "paddsw", { MX, EM } },
2235 { "pmaxsw", { MX, EM } },
2236 { "pxor", { MX, EM } },
252b5132 2237 /* f0 */
1ceb70f8 2238 { PREFIX_TABLE (PREFIX_0FF0) },
ce518a5f
L
2239 { "psllw", { MX, EM } },
2240 { "pslld", { MX, EM } },
2241 { "psllq", { MX, EM } },
2242 { "pmuludq", { MX, EM } },
2243 { "pmaddwd", { MX, EM } },
2244 { "psadbw", { MX, EM } },
1ceb70f8 2245 { PREFIX_TABLE (PREFIX_0FF7) },
252b5132 2246 /* f8 */
ce518a5f
L
2247 { "psubb", { MX, EM } },
2248 { "psubw", { MX, EM } },
2249 { "psubd", { MX, EM } },
2250 { "psubq", { MX, EM } },
2251 { "paddb", { MX, EM } },
2252 { "paddw", { MX, EM } },
2253 { "paddd", { MX, EM } },
592d1631 2254 { Bad_Opcode },
252b5132
RH
2255};
2256
2257static const unsigned char onebyte_has_modrm[256] = {
c608c12e
AM
2258 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
2259 /* ------------------------------- */
2260 /* 00 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 00 */
2261 /* 10 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 10 */
2262 /* 20 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 20 */
2263 /* 30 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 30 */
2264 /* 40 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 40 */
2265 /* 50 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 50 */
2266 /* 60 */ 0,0,1,1,0,0,0,0,0,1,0,1,0,0,0,0, /* 60 */
2267 /* 70 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 70 */
2268 /* 80 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 80 */
2269 /* 90 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 90 */
2270 /* a0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* a0 */
2271 /* b0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* b0 */
2272 /* c0 */ 1,1,0,0,1,1,1,1,0,0,0,0,0,0,0,0, /* c0 */
2273 /* d0 */ 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1, /* d0 */
2274 /* e0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* e0 */
2275 /* f0 */ 0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1 /* f0 */
2276 /* ------------------------------- */
2277 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
252b5132
RH
2278};
2279
2280static const unsigned char twobyte_has_modrm[256] = {
c608c12e
AM
2281 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
2282 /* ------------------------------- */
252b5132 2283 /* 00 */ 1,1,1,1,0,0,0,0,0,0,0,0,0,1,0,1, /* 0f */
b5b1fc4f 2284 /* 10 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 1f */
85f10a01 2285 /* 20 */ 1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1, /* 2f */
331d2d0d 2286 /* 30 */ 0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0, /* 3f */
252b5132 2287 /* 40 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 4f */
4bba6815
AM
2288 /* 50 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 5f */
2289 /* 60 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 6f */
85f10a01 2290 /* 70 */ 1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1, /* 7f */
252b5132
RH
2291 /* 80 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 8f */
2292 /* 90 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 9f */
30d1c836 2293 /* a0 */ 0,0,0,1,1,1,1,1,0,0,0,1,1,1,1,1, /* af */
050dfa73 2294 /* b0 */ 1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1, /* bf */
252b5132 2295 /* c0 */ 1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0, /* cf */
ca164297 2296 /* d0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* df */
4bba6815 2297 /* e0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* ef */
ca164297 2298 /* f0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0 /* ff */
c608c12e
AM
2299 /* ------------------------------- */
2300 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
2301};
2302
252b5132
RH
2303static char obuf[100];
2304static char *obufp;
ea397f5b 2305static char *mnemonicendp;
252b5132
RH
2306static char scratchbuf[100];
2307static unsigned char *start_codep;
2308static unsigned char *insn_codep;
2309static unsigned char *codep;
f16cd0d5
L
2310static int last_lock_prefix;
2311static int last_repz_prefix;
2312static int last_repnz_prefix;
2313static int last_data_prefix;
2314static int last_addr_prefix;
2315static int last_rex_prefix;
2316static int last_seg_prefix;
2317#define MAX_CODE_LENGTH 15
2318/* We can up to 14 prefixes since the maximum instruction length is
2319 15bytes. */
2320static int all_prefixes[MAX_CODE_LENGTH - 1];
252b5132 2321static disassemble_info *the_info;
7967e09e
L
2322static struct
2323 {
2324 int mod;
7967e09e 2325 int reg;
484c222e 2326 int rm;
7967e09e
L
2327 }
2328modrm;
4bba6815 2329static unsigned char need_modrm;
dfc8cf43
L
2330static struct
2331 {
2332 int scale;
2333 int index;
2334 int base;
2335 }
2336sib;
c0f3af97
L
2337static struct
2338 {
2339 int register_specifier;
2340 int length;
2341 int prefix;
2342 int w;
2343 }
2344vex;
2345static unsigned char need_vex;
2346static unsigned char need_vex_reg;
dae39acc 2347static unsigned char vex_w_done;
252b5132 2348
ea397f5b
L
2349struct op
2350 {
2351 const char *name;
2352 unsigned int len;
2353 };
2354
4bba6815
AM
2355/* If we are accessing mod/rm/reg without need_modrm set, then the
2356 values are stale. Hitting this abort likely indicates that you
2357 need to update onebyte_has_modrm or twobyte_has_modrm. */
2358#define MODRM_CHECK if (!need_modrm) abort ()
2359
d708bcba
AM
2360static const char **names64;
2361static const char **names32;
2362static const char **names16;
2363static const char **names8;
2364static const char **names8rex;
2365static const char **names_seg;
db51cc60
L
2366static const char *index64;
2367static const char *index32;
d708bcba
AM
2368static const char **index16;
2369
2370static const char *intel_names64[] = {
2371 "rax", "rcx", "rdx", "rbx", "rsp", "rbp", "rsi", "rdi",
2372 "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15"
2373};
2374static const char *intel_names32[] = {
2375 "eax", "ecx", "edx", "ebx", "esp", "ebp", "esi", "edi",
2376 "r8d", "r9d", "r10d", "r11d", "r12d", "r13d", "r14d", "r15d"
2377};
2378static const char *intel_names16[] = {
2379 "ax", "cx", "dx", "bx", "sp", "bp", "si", "di",
2380 "r8w", "r9w", "r10w", "r11w", "r12w", "r13w", "r14w", "r15w"
2381};
2382static const char *intel_names8[] = {
2383 "al", "cl", "dl", "bl", "ah", "ch", "dh", "bh",
2384};
2385static const char *intel_names8rex[] = {
2386 "al", "cl", "dl", "bl", "spl", "bpl", "sil", "dil",
2387 "r8b", "r9b", "r10b", "r11b", "r12b", "r13b", "r14b", "r15b"
2388};
2389static const char *intel_names_seg[] = {
2390 "es", "cs", "ss", "ds", "fs", "gs", "?", "?",
2391};
db51cc60
L
2392static const char *intel_index64 = "riz";
2393static const char *intel_index32 = "eiz";
d708bcba
AM
2394static const char *intel_index16[] = {
2395 "bx+si", "bx+di", "bp+si", "bp+di", "si", "di", "bp", "bx"
2396};
2397
2398static const char *att_names64[] = {
2399 "%rax", "%rcx", "%rdx", "%rbx", "%rsp", "%rbp", "%rsi", "%rdi",
52b15da3
JH
2400 "%r8", "%r9", "%r10", "%r11", "%r12", "%r13", "%r14", "%r15"
2401};
d708bcba
AM
2402static const char *att_names32[] = {
2403 "%eax", "%ecx", "%edx", "%ebx", "%esp", "%ebp", "%esi", "%edi",
52b15da3 2404 "%r8d", "%r9d", "%r10d", "%r11d", "%r12d", "%r13d", "%r14d", "%r15d"
252b5132 2405};
d708bcba
AM
2406static const char *att_names16[] = {
2407 "%ax", "%cx", "%dx", "%bx", "%sp", "%bp", "%si", "%di",
52b15da3 2408 "%r8w", "%r9w", "%r10w", "%r11w", "%r12w", "%r13w", "%r14w", "%r15w"
252b5132 2409};
d708bcba
AM
2410static const char *att_names8[] = {
2411 "%al", "%cl", "%dl", "%bl", "%ah", "%ch", "%dh", "%bh",
252b5132 2412};
d708bcba
AM
2413static const char *att_names8rex[] = {
2414 "%al", "%cl", "%dl", "%bl", "%spl", "%bpl", "%sil", "%dil",
52b15da3
JH
2415 "%r8b", "%r9b", "%r10b", "%r11b", "%r12b", "%r13b", "%r14b", "%r15b"
2416};
d708bcba
AM
2417static const char *att_names_seg[] = {
2418 "%es", "%cs", "%ss", "%ds", "%fs", "%gs", "%?", "%?",
252b5132 2419};
db51cc60
L
2420static const char *att_index64 = "%riz";
2421static const char *att_index32 = "%eiz";
d708bcba
AM
2422static const char *att_index16[] = {
2423 "%bx,%si", "%bx,%di", "%bp,%si", "%bp,%di", "%si", "%di", "%bp", "%bx"
252b5132
RH
2424};
2425
b9733481
L
2426static const char **names_mm;
2427static const char *intel_names_mm[] = {
2428 "mm0", "mm1", "mm2", "mm3",
2429 "mm4", "mm5", "mm6", "mm7"
2430};
2431static const char *att_names_mm[] = {
2432 "%mm0", "%mm1", "%mm2", "%mm3",
2433 "%mm4", "%mm5", "%mm6", "%mm7"
2434};
2435
2436static const char **names_xmm;
2437static const char *intel_names_xmm[] = {
2438 "xmm0", "xmm1", "xmm2", "xmm3",
2439 "xmm4", "xmm5", "xmm6", "xmm7",
2440 "xmm8", "xmm9", "xmm10", "xmm11",
2441 "xmm12", "xmm13", "xmm14", "xmm15"
2442};
2443static const char *att_names_xmm[] = {
2444 "%xmm0", "%xmm1", "%xmm2", "%xmm3",
2445 "%xmm4", "%xmm5", "%xmm6", "%xmm7",
2446 "%xmm8", "%xmm9", "%xmm10", "%xmm11",
2447 "%xmm12", "%xmm13", "%xmm14", "%xmm15"
2448};
2449
2450static const char **names_ymm;
2451static const char *intel_names_ymm[] = {
2452 "ymm0", "ymm1", "ymm2", "ymm3",
2453 "ymm4", "ymm5", "ymm6", "ymm7",
2454 "ymm8", "ymm9", "ymm10", "ymm11",
2455 "ymm12", "ymm13", "ymm14", "ymm15"
2456};
2457static const char *att_names_ymm[] = {
2458 "%ymm0", "%ymm1", "%ymm2", "%ymm3",
2459 "%ymm4", "%ymm5", "%ymm6", "%ymm7",
2460 "%ymm8", "%ymm9", "%ymm10", "%ymm11",
2461 "%ymm12", "%ymm13", "%ymm14", "%ymm15"
2462};
2463
1ceb70f8
L
2464static const struct dis386 reg_table[][8] = {
2465 /* REG_80 */
252b5132 2466 {
42164a71
L
2467 { "addA", { Ebh1, Ib } },
2468 { "orA", { Ebh1, Ib } },
2469 { "adcA", { Ebh1, Ib } },
2470 { "sbbA", { Ebh1, Ib } },
2471 { "andA", { Ebh1, Ib } },
2472 { "subA", { Ebh1, Ib } },
2473 { "xorA", { Ebh1, Ib } },
ce518a5f 2474 { "cmpA", { Eb, Ib } },
252b5132 2475 },
1ceb70f8 2476 /* REG_81 */
252b5132 2477 {
42164a71
L
2478 { "addQ", { Evh1, Iv } },
2479 { "orQ", { Evh1, Iv } },
2480 { "adcQ", { Evh1, Iv } },
2481 { "sbbQ", { Evh1, Iv } },
2482 { "andQ", { Evh1, Iv } },
2483 { "subQ", { Evh1, Iv } },
2484 { "xorQ", { Evh1, Iv } },
ce518a5f 2485 { "cmpQ", { Ev, Iv } },
252b5132 2486 },
1ceb70f8 2487 /* REG_82 */
252b5132 2488 {
42164a71
L
2489 { "addQ", { Evh1, sIb } },
2490 { "orQ", { Evh1, sIb } },
2491 { "adcQ", { Evh1, sIb } },
2492 { "sbbQ", { Evh1, sIb } },
2493 { "andQ", { Evh1, sIb } },
2494 { "subQ", { Evh1, sIb } },
2495 { "xorQ", { Evh1, sIb } },
ce518a5f 2496 { "cmpQ", { Ev, sIb } },
252b5132 2497 },
1ceb70f8 2498 /* REG_8F */
4e7d34a6
L
2499 {
2500 { "popU", { stackEv } },
c48244a5 2501 { XOP_8F_TABLE (XOP_09) },
592d1631
L
2502 { Bad_Opcode },
2503 { Bad_Opcode },
2504 { Bad_Opcode },
f88c9eb0 2505 { XOP_8F_TABLE (XOP_09) },
4e7d34a6 2506 },
1ceb70f8 2507 /* REG_C0 */
252b5132 2508 {
ce518a5f
L
2509 { "rolA", { Eb, Ib } },
2510 { "rorA", { Eb, Ib } },
2511 { "rclA", { Eb, Ib } },
2512 { "rcrA", { Eb, Ib } },
2513 { "shlA", { Eb, Ib } },
2514 { "shrA", { Eb, Ib } },
592d1631 2515 { Bad_Opcode },
ce518a5f 2516 { "sarA", { Eb, Ib } },
252b5132 2517 },
1ceb70f8 2518 /* REG_C1 */
252b5132 2519 {
ce518a5f
L
2520 { "rolQ", { Ev, Ib } },
2521 { "rorQ", { Ev, Ib } },
2522 { "rclQ", { Ev, Ib } },
2523 { "rcrQ", { Ev, Ib } },
2524 { "shlQ", { Ev, Ib } },
2525 { "shrQ", { Ev, Ib } },
592d1631 2526 { Bad_Opcode },
ce518a5f 2527 { "sarQ", { Ev, Ib } },
252b5132 2528 },
1ceb70f8 2529 /* REG_C6 */
4e7d34a6 2530 {
42164a71
L
2531 { "movA", { Ebh3, Ib } },
2532 { Bad_Opcode },
2533 { Bad_Opcode },
2534 { Bad_Opcode },
2535 { Bad_Opcode },
2536 { Bad_Opcode },
2537 { Bad_Opcode },
2538 { MOD_TABLE (MOD_C6_REG_7) },
4e7d34a6 2539 },
1ceb70f8 2540 /* REG_C7 */
4e7d34a6 2541 {
42164a71
L
2542 { "movQ", { Evh3, Iv } },
2543 { Bad_Opcode },
2544 { Bad_Opcode },
2545 { Bad_Opcode },
2546 { Bad_Opcode },
2547 { Bad_Opcode },
2548 { Bad_Opcode },
2549 { MOD_TABLE (MOD_C7_REG_7) },
4e7d34a6 2550 },
1ceb70f8 2551 /* REG_D0 */
252b5132 2552 {
ce518a5f
L
2553 { "rolA", { Eb, I1 } },
2554 { "rorA", { Eb, I1 } },
2555 { "rclA", { Eb, I1 } },
2556 { "rcrA", { Eb, I1 } },
2557 { "shlA", { Eb, I1 } },
2558 { "shrA", { Eb, I1 } },
592d1631 2559 { Bad_Opcode },
ce518a5f 2560 { "sarA", { Eb, I1 } },
252b5132 2561 },
1ceb70f8 2562 /* REG_D1 */
252b5132 2563 {
ce518a5f
L
2564 { "rolQ", { Ev, I1 } },
2565 { "rorQ", { Ev, I1 } },
2566 { "rclQ", { Ev, I1 } },
2567 { "rcrQ", { Ev, I1 } },
2568 { "shlQ", { Ev, I1 } },
2569 { "shrQ", { Ev, I1 } },
592d1631 2570 { Bad_Opcode },
ce518a5f 2571 { "sarQ", { Ev, I1 } },
252b5132 2572 },
1ceb70f8 2573 /* REG_D2 */
252b5132 2574 {
ce518a5f
L
2575 { "rolA", { Eb, CL } },
2576 { "rorA", { Eb, CL } },
2577 { "rclA", { Eb, CL } },
2578 { "rcrA", { Eb, CL } },
2579 { "shlA", { Eb, CL } },
2580 { "shrA", { Eb, CL } },
592d1631 2581 { Bad_Opcode },
ce518a5f 2582 { "sarA", { Eb, CL } },
252b5132 2583 },
1ceb70f8 2584 /* REG_D3 */
252b5132 2585 {
ce518a5f
L
2586 { "rolQ", { Ev, CL } },
2587 { "rorQ", { Ev, CL } },
2588 { "rclQ", { Ev, CL } },
2589 { "rcrQ", { Ev, CL } },
2590 { "shlQ", { Ev, CL } },
2591 { "shrQ", { Ev, CL } },
592d1631 2592 { Bad_Opcode },
ce518a5f 2593 { "sarQ", { Ev, CL } },
252b5132 2594 },
1ceb70f8 2595 /* REG_F6 */
252b5132 2596 {
ce518a5f 2597 { "testA", { Eb, Ib } },
592d1631 2598 { Bad_Opcode },
42164a71
L
2599 { "notA", { Ebh1 } },
2600 { "negA", { Ebh1 } },
ce518a5f
L
2601 { "mulA", { Eb } }, /* Don't print the implicit %al register, */
2602 { "imulA", { Eb } }, /* to distinguish these opcodes from other */
2603 { "divA", { Eb } }, /* mul/imul opcodes. Do the same for div */
2604 { "idivA", { Eb } }, /* and idiv for consistency. */
252b5132 2605 },
1ceb70f8 2606 /* REG_F7 */
252b5132 2607 {
ce518a5f 2608 { "testQ", { Ev, Iv } },
592d1631 2609 { Bad_Opcode },
42164a71
L
2610 { "notQ", { Evh1 } },
2611 { "negQ", { Evh1 } },
ce518a5f
L
2612 { "mulQ", { Ev } }, /* Don't print the implicit register. */
2613 { "imulQ", { Ev } },
2614 { "divQ", { Ev } },
2615 { "idivQ", { Ev } },
252b5132 2616 },
1ceb70f8 2617 /* REG_FE */
252b5132 2618 {
42164a71
L
2619 { "incA", { Ebh1 } },
2620 { "decA", { Ebh1 } },
252b5132 2621 },
1ceb70f8 2622 /* REG_FF */
252b5132 2623 {
42164a71
L
2624 { "incQ", { Evh1 } },
2625 { "decQ", { Evh1 } },
d9e3625e
L
2626 { "call{T|}", { indirEv } },
2627 { "Jcall{T|}", { indirEp } },
2628 { "jmp{T|}", { indirEv } },
2629 { "Jjmp{T|}", { indirEp } },
ce518a5f 2630 { "pushU", { stackEv } },
592d1631 2631 { Bad_Opcode },
252b5132 2632 },
1ceb70f8 2633 /* REG_0F00 */
252b5132 2634 {
ce518a5f
L
2635 { "sldtD", { Sv } },
2636 { "strD", { Sv } },
2637 { "lldt", { Ew } },
2638 { "ltr", { Ew } },
2639 { "verr", { Ew } },
2640 { "verw", { Ew } },
592d1631
L
2641 { Bad_Opcode },
2642 { Bad_Opcode },
252b5132 2643 },
1ceb70f8 2644 /* REG_0F01 */
252b5132 2645 {
1ceb70f8
L
2646 { MOD_TABLE (MOD_0F01_REG_0) },
2647 { MOD_TABLE (MOD_0F01_REG_1) },
2648 { MOD_TABLE (MOD_0F01_REG_2) },
2649 { MOD_TABLE (MOD_0F01_REG_3) },
ce518a5f 2650 { "smswD", { Sv } },
592d1631 2651 { Bad_Opcode },
ce518a5f 2652 { "lmsw", { Ew } },
1ceb70f8 2653 { MOD_TABLE (MOD_0F01_REG_7) },
252b5132 2654 },
b5b1fc4f 2655 /* REG_0F0D */
252b5132 2656 {
1ab03f4b
L
2657 { "prefetch", { Mb } },
2658 { "prefetchw", { Mb } },
d7189fa5
RM
2659 { "prefetch", { Mb } },
2660 { "prefetch", { Mb } },
2661 { "prefetch", { Mb } },
2662 { "prefetch", { Mb } },
2663 { "prefetch", { Mb } },
2664 { "prefetch", { Mb } },
252b5132 2665 },
1ceb70f8 2666 /* REG_0F18 */
252b5132 2667 {
1ceb70f8
L
2668 { MOD_TABLE (MOD_0F18_REG_0) },
2669 { MOD_TABLE (MOD_0F18_REG_1) },
2670 { MOD_TABLE (MOD_0F18_REG_2) },
2671 { MOD_TABLE (MOD_0F18_REG_3) },
d7189fa5
RM
2672 { MOD_TABLE (MOD_0F18_REG_4) },
2673 { MOD_TABLE (MOD_0F18_REG_5) },
2674 { MOD_TABLE (MOD_0F18_REG_6) },
2675 { MOD_TABLE (MOD_0F18_REG_7) },
252b5132 2676 },
1ceb70f8 2677 /* REG_0F71 */
a6bd098c 2678 {
592d1631
L
2679 { Bad_Opcode },
2680 { Bad_Opcode },
1ceb70f8 2681 { MOD_TABLE (MOD_0F71_REG_2) },
592d1631 2682 { Bad_Opcode },
1ceb70f8 2683 { MOD_TABLE (MOD_0F71_REG_4) },
592d1631 2684 { Bad_Opcode },
1ceb70f8 2685 { MOD_TABLE (MOD_0F71_REG_6) },
a6bd098c 2686 },
1ceb70f8 2687 /* REG_0F72 */
a6bd098c 2688 {
592d1631
L
2689 { Bad_Opcode },
2690 { Bad_Opcode },
1ceb70f8 2691 { MOD_TABLE (MOD_0F72_REG_2) },
592d1631 2692 { Bad_Opcode },
1ceb70f8 2693 { MOD_TABLE (MOD_0F72_REG_4) },
592d1631 2694 { Bad_Opcode },
1ceb70f8 2695 { MOD_TABLE (MOD_0F72_REG_6) },
a6bd098c 2696 },
1ceb70f8 2697 /* REG_0F73 */
252b5132 2698 {
592d1631
L
2699 { Bad_Opcode },
2700 { Bad_Opcode },
1ceb70f8
L
2701 { MOD_TABLE (MOD_0F73_REG_2) },
2702 { MOD_TABLE (MOD_0F73_REG_3) },
592d1631
L
2703 { Bad_Opcode },
2704 { Bad_Opcode },
1ceb70f8
L
2705 { MOD_TABLE (MOD_0F73_REG_6) },
2706 { MOD_TABLE (MOD_0F73_REG_7) },
252b5132 2707 },
1ceb70f8 2708 /* REG_0FA6 */
252b5132 2709 {
4e7d34a6
L
2710 { "montmul", { { OP_0f07, 0 } } },
2711 { "xsha1", { { OP_0f07, 0 } } },
2712 { "xsha256", { { OP_0f07, 0 } } },
4e7d34a6 2713 },
1ceb70f8 2714 /* REG_0FA7 */
4e7d34a6
L
2715 {
2716 { "xstore-rng", { { OP_0f07, 0 } } },
2717 { "xcrypt-ecb", { { OP_0f07, 0 } } },
2718 { "xcrypt-cbc", { { OP_0f07, 0 } } },
2719 { "xcrypt-ctr", { { OP_0f07, 0 } } },
2720 { "xcrypt-cfb", { { OP_0f07, 0 } } },
2721 { "xcrypt-ofb", { { OP_0f07, 0 } } },
4e7d34a6 2722 },
1ceb70f8 2723 /* REG_0FAE */
4e7d34a6 2724 {
1ceb70f8
L
2725 { MOD_TABLE (MOD_0FAE_REG_0) },
2726 { MOD_TABLE (MOD_0FAE_REG_1) },
2727 { MOD_TABLE (MOD_0FAE_REG_2) },
2728 { MOD_TABLE (MOD_0FAE_REG_3) },
475a2301 2729 { MOD_TABLE (MOD_0FAE_REG_4) },
1ceb70f8
L
2730 { MOD_TABLE (MOD_0FAE_REG_5) },
2731 { MOD_TABLE (MOD_0FAE_REG_6) },
2732 { MOD_TABLE (MOD_0FAE_REG_7) },
252b5132 2733 },
1ceb70f8 2734 /* REG_0FBA */
252b5132 2735 {
592d1631
L
2736 { Bad_Opcode },
2737 { Bad_Opcode },
2738 { Bad_Opcode },
2739 { Bad_Opcode },
4e7d34a6 2740 { "btQ", { Ev, Ib } },
42164a71
L
2741 { "btsQ", { Evh1, Ib } },
2742 { "btrQ", { Evh1, Ib } },
2743 { "btcQ", { Evh1, Ib } },
c608c12e 2744 },
1ceb70f8 2745 /* REG_0FC7 */
c608c12e 2746 {
592d1631 2747 { Bad_Opcode },
4e7d34a6 2748 { "cmpxchg8b", { { CMPXCHG8B_Fixup, q_mode } } },
592d1631
L
2749 { Bad_Opcode },
2750 { Bad_Opcode },
2751 { Bad_Opcode },
2752 { Bad_Opcode },
1ceb70f8
L
2753 { MOD_TABLE (MOD_0FC7_REG_6) },
2754 { MOD_TABLE (MOD_0FC7_REG_7) },
252b5132 2755 },
592a252b 2756 /* REG_VEX_0F71 */
c0f3af97 2757 {
592d1631
L
2758 { Bad_Opcode },
2759 { Bad_Opcode },
592a252b 2760 { MOD_TABLE (MOD_VEX_0F71_REG_2) },
592d1631 2761 { Bad_Opcode },
592a252b 2762 { MOD_TABLE (MOD_VEX_0F71_REG_4) },
592d1631 2763 { Bad_Opcode },
592a252b 2764 { MOD_TABLE (MOD_VEX_0F71_REG_6) },
c0f3af97 2765 },
592a252b 2766 /* REG_VEX_0F72 */
c0f3af97 2767 {
592d1631
L
2768 { Bad_Opcode },
2769 { Bad_Opcode },
592a252b 2770 { MOD_TABLE (MOD_VEX_0F72_REG_2) },
592d1631 2771 { Bad_Opcode },
592a252b 2772 { MOD_TABLE (MOD_VEX_0F72_REG_4) },
592d1631 2773 { Bad_Opcode },
592a252b 2774 { MOD_TABLE (MOD_VEX_0F72_REG_6) },
c0f3af97 2775 },
592a252b 2776 /* REG_VEX_0F73 */
c0f3af97 2777 {
592d1631
L
2778 { Bad_Opcode },
2779 { Bad_Opcode },
592a252b
L
2780 { MOD_TABLE (MOD_VEX_0F73_REG_2) },
2781 { MOD_TABLE (MOD_VEX_0F73_REG_3) },
592d1631
L
2782 { Bad_Opcode },
2783 { Bad_Opcode },
592a252b
L
2784 { MOD_TABLE (MOD_VEX_0F73_REG_6) },
2785 { MOD_TABLE (MOD_VEX_0F73_REG_7) },
c0f3af97 2786 },
592a252b 2787 /* REG_VEX_0FAE */
c0f3af97 2788 {
592d1631
L
2789 { Bad_Opcode },
2790 { Bad_Opcode },
592a252b
L
2791 { MOD_TABLE (MOD_VEX_0FAE_REG_2) },
2792 { MOD_TABLE (MOD_VEX_0FAE_REG_3) },
c0f3af97 2793 },
f12dc422
L
2794 /* REG_VEX_0F38F3 */
2795 {
2796 { Bad_Opcode },
2797 { PREFIX_TABLE (PREFIX_VEX_0F38F3_REG_1) },
2798 { PREFIX_TABLE (PREFIX_VEX_0F38F3_REG_2) },
2799 { PREFIX_TABLE (PREFIX_VEX_0F38F3_REG_3) },
2800 },
f88c9eb0
SP
2801 /* REG_XOP_LWPCB */
2802 {
2803 { "llwpcb", { { OP_LWPCB_E, 0 } } },
2804 { "slwpcb", { { OP_LWPCB_E, 0 } } },
f88c9eb0
SP
2805 },
2806 /* REG_XOP_LWP */
2807 {
ce7d077e
SP
2808 { "lwpins", { { OP_LWP_E, 0 }, Ed, Iq } },
2809 { "lwpval", { { OP_LWP_E, 0 }, Ed, Iq } },
f88c9eb0 2810 },
2a2a0f38
QN
2811 /* REG_XOP_TBM_01 */
2812 {
2813 { Bad_Opcode },
2814 { "blcfill", { { OP_LWP_E, 0 }, Ev } },
2815 { "blsfill", { { OP_LWP_E, 0 }, Ev } },
2816 { "blcs", { { OP_LWP_E, 0 }, Ev } },
2817 { "tzmsk", { { OP_LWP_E, 0 }, Ev } },
2818 { "blcic", { { OP_LWP_E, 0 }, Ev } },
2819 { "blsic", { { OP_LWP_E, 0 }, Ev } },
2820 { "t1mskc", { { OP_LWP_E, 0 }, Ev } },
2821 },
2822 /* REG_XOP_TBM_02 */
2823 {
2824 { Bad_Opcode },
2825 { "blcmsk", { { OP_LWP_E, 0 }, Ev } },
2826 { Bad_Opcode },
2827 { Bad_Opcode },
2828 { Bad_Opcode },
2829 { Bad_Opcode },
2830 { "blci", { { OP_LWP_E, 0 }, Ev } },
2831 },
4e7d34a6
L
2832};
2833
1ceb70f8
L
2834static const struct dis386 prefix_table[][4] = {
2835 /* PREFIX_90 */
252b5132 2836 {
4e7d34a6
L
2837 { "xchgS", { { NOP_Fixup1, eAX_reg }, { NOP_Fixup2, eAX_reg } } },
2838 { "pause", { XX } },
2839 { "xchgS", { { NOP_Fixup1, eAX_reg }, { NOP_Fixup2, eAX_reg } } },
0f10071e 2840 },
4e7d34a6 2841
1ceb70f8 2842 /* PREFIX_0F10 */
cc0ec051 2843 {
4e7d34a6
L
2844 { "movups", { XM, EXx } },
2845 { "movss", { XM, EXd } },
2846 { "movupd", { XM, EXx } },
2847 { "movsd", { XM, EXq } },
30d1c836 2848 },
4e7d34a6 2849
1ceb70f8 2850 /* PREFIX_0F11 */
30d1c836 2851 {
b6169b20 2852 { "movups", { EXxS, XM } },
fa99fab2 2853 { "movss", { EXdS, XM } },
b6169b20 2854 { "movupd", { EXxS, XM } },
fa99fab2 2855 { "movsd", { EXqS, XM } },
4e7d34a6 2856 },
252b5132 2857
1ceb70f8 2858 /* PREFIX_0F12 */
c608c12e 2859 {
1ceb70f8 2860 { MOD_TABLE (MOD_0F12_PREFIX_0) },
4e7d34a6
L
2861 { "movsldup", { XM, EXx } },
2862 { "movlpd", { XM, EXq } },
2863 { "movddup", { XM, EXq } },
c608c12e 2864 },
4e7d34a6 2865
1ceb70f8 2866 /* PREFIX_0F16 */
c608c12e 2867 {
1ceb70f8 2868 { MOD_TABLE (MOD_0F16_PREFIX_0) },
4e7d34a6
L
2869 { "movshdup", { XM, EXx } },
2870 { "movhpd", { XM, EXq } },
c608c12e 2871 },
4e7d34a6 2872
1ceb70f8 2873 /* PREFIX_0F2A */
c608c12e 2874 {
09335d05 2875 { "cvtpi2ps", { XM, EMCq } },
98b528ac 2876 { "cvtsi2ss%LQ", { XM, Ev } },
09335d05 2877 { "cvtpi2pd", { XM, EMCq } },
98b528ac 2878 { "cvtsi2sd%LQ", { XM, Ev } },
c608c12e 2879 },
4e7d34a6 2880
1ceb70f8 2881 /* PREFIX_0F2B */
c608c12e 2882 {
75c135a8
L
2883 { MOD_TABLE (MOD_0F2B_PREFIX_0) },
2884 { MOD_TABLE (MOD_0F2B_PREFIX_1) },
2885 { MOD_TABLE (MOD_0F2B_PREFIX_2) },
2886 { MOD_TABLE (MOD_0F2B_PREFIX_3) },
c608c12e 2887 },
4e7d34a6 2888
1ceb70f8 2889 /* PREFIX_0F2C */
c608c12e 2890 {
09335d05
L
2891 { "cvttps2pi", { MXC, EXq } },
2892 { "cvttss2siY", { Gv, EXd } },
09a2c6cf 2893 { "cvttpd2pi", { MXC, EXx } },
09335d05 2894 { "cvttsd2siY", { Gv, EXq } },
c608c12e 2895 },
4e7d34a6 2896
1ceb70f8 2897 /* PREFIX_0F2D */
c608c12e 2898 {
4e7d34a6
L
2899 { "cvtps2pi", { MXC, EXq } },
2900 { "cvtss2siY", { Gv, EXd } },
2901 { "cvtpd2pi", { MXC, EXx } },
2902 { "cvtsd2siY", { Gv, EXq } },
c608c12e 2903 },
4e7d34a6 2904
1ceb70f8 2905 /* PREFIX_0F2E */
c608c12e 2906 {
7bb15c6f 2907 { "ucomiss",{ XM, EXd } },
592d1631 2908 { Bad_Opcode },
7bb15c6f 2909 { "ucomisd",{ XM, EXq } },
c608c12e 2910 },
4e7d34a6 2911
1ceb70f8 2912 /* PREFIX_0F2F */
c608c12e 2913 {
4e7d34a6 2914 { "comiss", { XM, EXd } },
592d1631 2915 { Bad_Opcode },
4e7d34a6 2916 { "comisd", { XM, EXq } },
c608c12e 2917 },
4e7d34a6 2918
1ceb70f8 2919 /* PREFIX_0F51 */
c608c12e 2920 {
4e7d34a6
L
2921 { "sqrtps", { XM, EXx } },
2922 { "sqrtss", { XM, EXd } },
2923 { "sqrtpd", { XM, EXx } },
2924 { "sqrtsd", { XM, EXq } },
c608c12e 2925 },
4e7d34a6 2926
1ceb70f8 2927 /* PREFIX_0F52 */
c608c12e 2928 {
4e7d34a6
L
2929 { "rsqrtps",{ XM, EXx } },
2930 { "rsqrtss",{ XM, EXd } },
c608c12e 2931 },
4e7d34a6 2932
1ceb70f8 2933 /* PREFIX_0F53 */
c608c12e 2934 {
4e7d34a6
L
2935 { "rcpps", { XM, EXx } },
2936 { "rcpss", { XM, EXd } },
c608c12e 2937 },
4e7d34a6 2938
1ceb70f8 2939 /* PREFIX_0F58 */
c608c12e 2940 {
4e7d34a6
L
2941 { "addps", { XM, EXx } },
2942 { "addss", { XM, EXd } },
2943 { "addpd", { XM, EXx } },
2944 { "addsd", { XM, EXq } },
c608c12e 2945 },
4e7d34a6 2946
1ceb70f8 2947 /* PREFIX_0F59 */
c608c12e 2948 {
4e7d34a6
L
2949 { "mulps", { XM, EXx } },
2950 { "mulss", { XM, EXd } },
2951 { "mulpd", { XM, EXx } },
2952 { "mulsd", { XM, EXq } },
041bd2e0 2953 },
4e7d34a6 2954
1ceb70f8 2955 /* PREFIX_0F5A */
041bd2e0 2956 {
4e7d34a6
L
2957 { "cvtps2pd", { XM, EXq } },
2958 { "cvtss2sd", { XM, EXd } },
2959 { "cvtpd2ps", { XM, EXx } },
2960 { "cvtsd2ss", { XM, EXq } },
041bd2e0 2961 },
4e7d34a6 2962
1ceb70f8 2963 /* PREFIX_0F5B */
041bd2e0 2964 {
09a2c6cf
L
2965 { "cvtdq2ps", { XM, EXx } },
2966 { "cvttps2dq", { XM, EXx } },
2967 { "cvtps2dq", { XM, EXx } },
041bd2e0 2968 },
4e7d34a6 2969
1ceb70f8 2970 /* PREFIX_0F5C */
041bd2e0 2971 {
4e7d34a6
L
2972 { "subps", { XM, EXx } },
2973 { "subss", { XM, EXd } },
2974 { "subpd", { XM, EXx } },
2975 { "subsd", { XM, EXq } },
041bd2e0 2976 },
4e7d34a6 2977
1ceb70f8 2978 /* PREFIX_0F5D */
041bd2e0 2979 {
4e7d34a6
L
2980 { "minps", { XM, EXx } },
2981 { "minss", { XM, EXd } },
2982 { "minpd", { XM, EXx } },
2983 { "minsd", { XM, EXq } },
041bd2e0 2984 },
4e7d34a6 2985
1ceb70f8 2986 /* PREFIX_0F5E */
041bd2e0 2987 {
4e7d34a6
L
2988 { "divps", { XM, EXx } },
2989 { "divss", { XM, EXd } },
2990 { "divpd", { XM, EXx } },
2991 { "divsd", { XM, EXq } },
041bd2e0 2992 },
4e7d34a6 2993
1ceb70f8 2994 /* PREFIX_0F5F */
041bd2e0 2995 {
4e7d34a6
L
2996 { "maxps", { XM, EXx } },
2997 { "maxss", { XM, EXd } },
2998 { "maxpd", { XM, EXx } },
2999 { "maxsd", { XM, EXq } },
041bd2e0 3000 },
4e7d34a6 3001
1ceb70f8 3002 /* PREFIX_0F60 */
041bd2e0 3003 {
4e7d34a6 3004 { "punpcklbw",{ MX, EMd } },
592d1631 3005 { Bad_Opcode },
4e7d34a6 3006 { "punpcklbw",{ MX, EMx } },
041bd2e0 3007 },
4e7d34a6 3008
1ceb70f8 3009 /* PREFIX_0F61 */
041bd2e0 3010 {
4e7d34a6 3011 { "punpcklwd",{ MX, EMd } },
592d1631 3012 { Bad_Opcode },
4e7d34a6 3013 { "punpcklwd",{ MX, EMx } },
041bd2e0 3014 },
4e7d34a6 3015
1ceb70f8 3016 /* PREFIX_0F62 */
041bd2e0 3017 {
4e7d34a6 3018 { "punpckldq",{ MX, EMd } },
592d1631 3019 { Bad_Opcode },
4e7d34a6 3020 { "punpckldq",{ MX, EMx } },
041bd2e0 3021 },
4e7d34a6 3022
1ceb70f8 3023 /* PREFIX_0F6C */
041bd2e0 3024 {
592d1631
L
3025 { Bad_Opcode },
3026 { Bad_Opcode },
4e7d34a6 3027 { "punpcklqdq", { XM, EXx } },
0f17484f 3028 },
4e7d34a6 3029
1ceb70f8 3030 /* PREFIX_0F6D */
0f17484f 3031 {
592d1631
L
3032 { Bad_Opcode },
3033 { Bad_Opcode },
4e7d34a6 3034 { "punpckhqdq", { XM, EXx } },
041bd2e0 3035 },
4e7d34a6 3036
1ceb70f8 3037 /* PREFIX_0F6F */
ca164297 3038 {
4e7d34a6
L
3039 { "movq", { MX, EM } },
3040 { "movdqu", { XM, EXx } },
3041 { "movdqa", { XM, EXx } },
ca164297 3042 },
4e7d34a6 3043
1ceb70f8 3044 /* PREFIX_0F70 */
4e7d34a6
L
3045 {
3046 { "pshufw", { MX, EM, Ib } },
3047 { "pshufhw",{ XM, EXx, Ib } },
3048 { "pshufd", { XM, EXx, Ib } },
3049 { "pshuflw",{ XM, EXx, Ib } },
3050 },
3051
92fddf8e
L
3052 /* PREFIX_0F73_REG_3 */
3053 {
592d1631
L
3054 { Bad_Opcode },
3055 { Bad_Opcode },
92fddf8e 3056 { "psrldq", { XS, Ib } },
92fddf8e
L
3057 },
3058
3059 /* PREFIX_0F73_REG_7 */
3060 {
592d1631
L
3061 { Bad_Opcode },
3062 { Bad_Opcode },
92fddf8e 3063 { "pslldq", { XS, Ib } },
92fddf8e
L
3064 },
3065
1ceb70f8 3066 /* PREFIX_0F78 */
4e7d34a6
L
3067 {
3068 {"vmread", { Em, Gm } },
592d1631 3069 { Bad_Opcode },
4e7d34a6
L
3070 {"extrq", { XS, Ib, Ib } },
3071 {"insertq", { XM, XS, Ib, Ib } },
3072 },
3073
1ceb70f8 3074 /* PREFIX_0F79 */
4e7d34a6
L
3075 {
3076 {"vmwrite", { Gm, Em } },
592d1631 3077 { Bad_Opcode },
4e7d34a6
L
3078 {"extrq", { XM, XS } },
3079 {"insertq", { XM, XS } },
3080 },
3081
1ceb70f8 3082 /* PREFIX_0F7C */
ca164297 3083 {
592d1631
L
3084 { Bad_Opcode },
3085 { Bad_Opcode },
09a2c6cf
L
3086 { "haddpd", { XM, EXx } },
3087 { "haddps", { XM, EXx } },
ca164297 3088 },
4e7d34a6 3089
1ceb70f8 3090 /* PREFIX_0F7D */
ca164297 3091 {
592d1631
L
3092 { Bad_Opcode },
3093 { Bad_Opcode },
09a2c6cf
L
3094 { "hsubpd", { XM, EXx } },
3095 { "hsubps", { XM, EXx } },
ca164297 3096 },
4e7d34a6 3097
1ceb70f8 3098 /* PREFIX_0F7E */
ca164297 3099 {
4e7d34a6
L
3100 { "movK", { Edq, MX } },
3101 { "movq", { XM, EXq } },
3102 { "movK", { Edq, XM } },
ca164297 3103 },
4e7d34a6 3104
1ceb70f8 3105 /* PREFIX_0F7F */
ca164297 3106 {
b6169b20
L
3107 { "movq", { EMS, MX } },
3108 { "movdqu", { EXxS, XM } },
3109 { "movdqa", { EXxS, XM } },
ca164297 3110 },
4e7d34a6 3111
c7b8aa3a
L
3112 /* PREFIX_0FAE_REG_0 */
3113 {
3114 { Bad_Opcode },
3115 { "rdfsbase", { Ev } },
3116 },
3117
3118 /* PREFIX_0FAE_REG_1 */
3119 {
3120 { Bad_Opcode },
3121 { "rdgsbase", { Ev } },
3122 },
3123
3124 /* PREFIX_0FAE_REG_2 */
3125 {
3126 { Bad_Opcode },
3127 { "wrfsbase", { Ev } },
3128 },
3129
3130 /* PREFIX_0FAE_REG_3 */
3131 {
3132 { Bad_Opcode },
3133 { "wrgsbase", { Ev } },
3134 },
3135
1ceb70f8 3136 /* PREFIX_0FB8 */
ca164297 3137 {
592d1631 3138 { Bad_Opcode },
4e7d34a6 3139 { "popcntS", { Gv, Ev } },
ca164297 3140 },
4e7d34a6 3141
f12dc422
L
3142 /* PREFIX_0FBC */
3143 {
3144 { "bsfS", { Gv, Ev } },
3145 { "tzcntS", { Gv, Ev } },
3146 { "bsfS", { Gv, Ev } },
3147 },
3148
1ceb70f8 3149 /* PREFIX_0FBD */
050dfa73 3150 {
4e7d34a6
L
3151 { "bsrS", { Gv, Ev } },
3152 { "lzcntS", { Gv, Ev } },
3153 { "bsrS", { Gv, Ev } },
050dfa73
MM
3154 },
3155
1ceb70f8 3156 /* PREFIX_0FC2 */
050dfa73 3157 {
ad19981d
L
3158 { "cmpps", { XM, EXx, CMP } },
3159 { "cmpss", { XM, EXd, CMP } },
3160 { "cmppd", { XM, EXx, CMP } },
3161 { "cmpsd", { XM, EXq, CMP } },
050dfa73 3162 },
246c51aa 3163
4ee52178
L
3164 /* PREFIX_0FC3 */
3165 {
3166 { "movntiS", { Ma, Gv } },
4ee52178
L
3167 },
3168
92fddf8e
L
3169 /* PREFIX_0FC7_REG_6 */
3170 {
3171 { "vmptrld",{ Mq } },
3172 { "vmxon", { Mq } },
3173 { "vmclear",{ Mq } },
92fddf8e
L
3174 },
3175
1ceb70f8 3176 /* PREFIX_0FD0 */
050dfa73 3177 {
592d1631
L
3178 { Bad_Opcode },
3179 { Bad_Opcode },
4e7d34a6
L
3180 { "addsubpd", { XM, EXx } },
3181 { "addsubps", { XM, EXx } },
246c51aa 3182 },
050dfa73 3183
1ceb70f8 3184 /* PREFIX_0FD6 */
050dfa73 3185 {
592d1631 3186 { Bad_Opcode },
4e7d34a6 3187 { "movq2dq",{ XM, MS } },
b6169b20 3188 { "movq", { EXqS, XM } },
4e7d34a6 3189 { "movdq2q",{ MX, XS } },
050dfa73
MM
3190 },
3191
1ceb70f8 3192 /* PREFIX_0FE6 */
7918206c 3193 {
592d1631 3194 { Bad_Opcode },
4e7d34a6
L
3195 { "cvtdq2pd", { XM, EXq } },
3196 { "cvttpd2dq", { XM, EXx } },
3197 { "cvtpd2dq", { XM, EXx } },
7918206c 3198 },
8b38ad71 3199
1ceb70f8 3200 /* PREFIX_0FE7 */
8b38ad71 3201 {
4ee52178 3202 { "movntq", { Mq, MX } },
592d1631 3203 { Bad_Opcode },
75c135a8 3204 { MOD_TABLE (MOD_0FE7_PREFIX_2) },
4e7d34a6
L
3205 },
3206
1ceb70f8 3207 /* PREFIX_0FF0 */
4e7d34a6 3208 {
592d1631
L
3209 { Bad_Opcode },
3210 { Bad_Opcode },
3211 { Bad_Opcode },
1ceb70f8 3212 { MOD_TABLE (MOD_0FF0_PREFIX_3) },
4e7d34a6
L
3213 },
3214
1ceb70f8 3215 /* PREFIX_0FF7 */
4e7d34a6
L
3216 {
3217 { "maskmovq", { MX, MS } },
592d1631 3218 { Bad_Opcode },
4e7d34a6 3219 { "maskmovdqu", { XM, XS } },
8b38ad71 3220 },
42903f7f 3221
1ceb70f8 3222 /* PREFIX_0F3810 */
42903f7f 3223 {
592d1631
L
3224 { Bad_Opcode },
3225 { Bad_Opcode },
88a94849 3226 { "pblendvb", { XM, EXx, XMM0 } },
42903f7f
L
3227 },
3228
1ceb70f8 3229 /* PREFIX_0F3814 */
42903f7f 3230 {
592d1631
L
3231 { Bad_Opcode },
3232 { Bad_Opcode },
88a94849 3233 { "blendvps", { XM, EXx, XMM0 } },
42903f7f
L
3234 },
3235
1ceb70f8 3236 /* PREFIX_0F3815 */
42903f7f 3237 {
592d1631
L
3238 { Bad_Opcode },
3239 { Bad_Opcode },
09a2c6cf 3240 { "blendvpd", { XM, EXx, XMM0 } },
42903f7f
L
3241 },
3242
1ceb70f8 3243 /* PREFIX_0F3817 */
42903f7f 3244 {
592d1631
L
3245 { Bad_Opcode },
3246 { Bad_Opcode },
09a2c6cf 3247 { "ptest", { XM, EXx } },
42903f7f
L
3248 },
3249
1ceb70f8 3250 /* PREFIX_0F3820 */
42903f7f 3251 {
592d1631
L
3252 { Bad_Opcode },
3253 { Bad_Opcode },
8976381e 3254 { "pmovsxbw", { XM, EXq } },
42903f7f
L
3255 },
3256
1ceb70f8 3257 /* PREFIX_0F3821 */
42903f7f 3258 {
592d1631
L
3259 { Bad_Opcode },
3260 { Bad_Opcode },
8976381e 3261 { "pmovsxbd", { XM, EXd } },
42903f7f
L
3262 },
3263
1ceb70f8 3264 /* PREFIX_0F3822 */
42903f7f 3265 {
592d1631
L
3266 { Bad_Opcode },
3267 { Bad_Opcode },
8976381e 3268 { "pmovsxbq", { XM, EXw } },
42903f7f
L
3269 },
3270
1ceb70f8 3271 /* PREFIX_0F3823 */
42903f7f 3272 {
592d1631
L
3273 { Bad_Opcode },
3274 { Bad_Opcode },
8976381e 3275 { "pmovsxwd", { XM, EXq } },
42903f7f
L
3276 },
3277
1ceb70f8 3278 /* PREFIX_0F3824 */
42903f7f 3279 {
592d1631
L
3280 { Bad_Opcode },
3281 { Bad_Opcode },
8976381e 3282 { "pmovsxwq", { XM, EXd } },
42903f7f
L
3283 },
3284
1ceb70f8 3285 /* PREFIX_0F3825 */
42903f7f 3286 {
592d1631
L
3287 { Bad_Opcode },
3288 { Bad_Opcode },
8976381e 3289 { "pmovsxdq", { XM, EXq } },
42903f7f
L
3290 },
3291
1ceb70f8 3292 /* PREFIX_0F3828 */
42903f7f 3293 {
592d1631
L
3294 { Bad_Opcode },
3295 { Bad_Opcode },
09a2c6cf 3296 { "pmuldq", { XM, EXx } },
42903f7f
L
3297 },
3298
1ceb70f8 3299 /* PREFIX_0F3829 */
42903f7f 3300 {
592d1631
L
3301 { Bad_Opcode },
3302 { Bad_Opcode },
09a2c6cf 3303 { "pcmpeqq", { XM, EXx } },
42903f7f
L
3304 },
3305
1ceb70f8 3306 /* PREFIX_0F382A */
42903f7f 3307 {
592d1631
L
3308 { Bad_Opcode },
3309 { Bad_Opcode },
75c135a8 3310 { MOD_TABLE (MOD_0F382A_PREFIX_2) },
42903f7f
L
3311 },
3312
1ceb70f8 3313 /* PREFIX_0F382B */
42903f7f 3314 {
592d1631
L
3315 { Bad_Opcode },
3316 { Bad_Opcode },
09a2c6cf 3317 { "packusdw", { XM, EXx } },
42903f7f
L
3318 },
3319
1ceb70f8 3320 /* PREFIX_0F3830 */
42903f7f 3321 {
592d1631
L
3322 { Bad_Opcode },
3323 { Bad_Opcode },
8976381e 3324 { "pmovzxbw", { XM, EXq } },
42903f7f
L
3325 },
3326
1ceb70f8 3327 /* PREFIX_0F3831 */
42903f7f 3328 {
592d1631
L
3329 { Bad_Opcode },
3330 { Bad_Opcode },
8976381e 3331 { "pmovzxbd", { XM, EXd } },
42903f7f
L
3332 },
3333
1ceb70f8 3334 /* PREFIX_0F3832 */
42903f7f 3335 {
592d1631
L
3336 { Bad_Opcode },
3337 { Bad_Opcode },
8976381e 3338 { "pmovzxbq", { XM, EXw } },
42903f7f
L
3339 },
3340
1ceb70f8 3341 /* PREFIX_0F3833 */
42903f7f 3342 {
592d1631
L
3343 { Bad_Opcode },
3344 { Bad_Opcode },
8976381e 3345 { "pmovzxwd", { XM, EXq } },
42903f7f
L
3346 },
3347
1ceb70f8 3348 /* PREFIX_0F3834 */
42903f7f 3349 {
592d1631
L
3350 { Bad_Opcode },
3351 { Bad_Opcode },
8976381e 3352 { "pmovzxwq", { XM, EXd } },
42903f7f
L
3353 },
3354
1ceb70f8 3355 /* PREFIX_0F3835 */
42903f7f 3356 {
592d1631
L
3357 { Bad_Opcode },
3358 { Bad_Opcode },
8976381e 3359 { "pmovzxdq", { XM, EXq } },
42903f7f
L
3360 },
3361
1ceb70f8 3362 /* PREFIX_0F3837 */
4e7d34a6 3363 {
592d1631
L
3364 { Bad_Opcode },
3365 { Bad_Opcode },
4e7d34a6 3366 { "pcmpgtq", { XM, EXx } },
4e7d34a6
L
3367 },
3368
1ceb70f8 3369 /* PREFIX_0F3838 */
42903f7f 3370 {
592d1631
L
3371 { Bad_Opcode },
3372 { Bad_Opcode },
09a2c6cf 3373 { "pminsb", { XM, EXx } },
42903f7f
L
3374 },
3375
1ceb70f8 3376 /* PREFIX_0F3839 */
42903f7f 3377 {
592d1631
L
3378 { Bad_Opcode },
3379 { Bad_Opcode },
09a2c6cf 3380 { "pminsd", { XM, EXx } },
42903f7f
L
3381 },
3382
1ceb70f8 3383 /* PREFIX_0F383A */
42903f7f 3384 {
592d1631
L
3385 { Bad_Opcode },
3386 { Bad_Opcode },
09a2c6cf 3387 { "pminuw", { XM, EXx } },
42903f7f
L
3388 },
3389
1ceb70f8 3390 /* PREFIX_0F383B */
42903f7f 3391 {
592d1631
L
3392 { Bad_Opcode },
3393 { Bad_Opcode },
09a2c6cf 3394 { "pminud", { XM, EXx } },
42903f7f
L
3395 },
3396
1ceb70f8 3397 /* PREFIX_0F383C */
42903f7f 3398 {
592d1631
L
3399 { Bad_Opcode },
3400 { Bad_Opcode },
09a2c6cf 3401 { "pmaxsb", { XM, EXx } },
42903f7f
L
3402 },
3403
1ceb70f8 3404 /* PREFIX_0F383D */
42903f7f 3405 {
592d1631
L
3406 { Bad_Opcode },
3407 { Bad_Opcode },
09a2c6cf 3408 { "pmaxsd", { XM, EXx } },
42903f7f
L
3409 },
3410
1ceb70f8 3411 /* PREFIX_0F383E */
42903f7f 3412 {
592d1631
L
3413 { Bad_Opcode },
3414 { Bad_Opcode },
09a2c6cf 3415 { "pmaxuw", { XM, EXx } },
42903f7f
L
3416 },
3417
1ceb70f8 3418 /* PREFIX_0F383F */
42903f7f 3419 {
592d1631
L
3420 { Bad_Opcode },
3421 { Bad_Opcode },
09a2c6cf 3422 { "pmaxud", { XM, EXx } },
42903f7f
L
3423 },
3424
1ceb70f8 3425 /* PREFIX_0F3840 */
42903f7f 3426 {
592d1631
L
3427 { Bad_Opcode },
3428 { Bad_Opcode },
09a2c6cf 3429 { "pmulld", { XM, EXx } },
42903f7f
L
3430 },
3431
1ceb70f8 3432 /* PREFIX_0F3841 */
42903f7f 3433 {
592d1631
L
3434 { Bad_Opcode },
3435 { Bad_Opcode },
09a2c6cf 3436 { "phminposuw", { XM, EXx } },
42903f7f
L
3437 },
3438
f1f8f695
L
3439 /* PREFIX_0F3880 */
3440 {
592d1631
L
3441 { Bad_Opcode },
3442 { Bad_Opcode },
f1f8f695 3443 { "invept", { Gm, Mo } },
f1f8f695
L
3444 },
3445
3446 /* PREFIX_0F3881 */
3447 {
592d1631
L
3448 { Bad_Opcode },
3449 { Bad_Opcode },
f1f8f695 3450 { "invvpid", { Gm, Mo } },
f1f8f695
L
3451 },
3452
6c30d220
L
3453 /* PREFIX_0F3882 */
3454 {
3455 { Bad_Opcode },
3456 { Bad_Opcode },
3457 { "invpcid", { Gm, M } },
3458 },
3459
c0f3af97
L
3460 /* PREFIX_0F38DB */
3461 {
592d1631
L
3462 { Bad_Opcode },
3463 { Bad_Opcode },
c0f3af97 3464 { "aesimc", { XM, EXx } },
c0f3af97
L
3465 },
3466
3467 /* PREFIX_0F38DC */
3468 {
592d1631
L
3469 { Bad_Opcode },
3470 { Bad_Opcode },
c0f3af97 3471 { "aesenc", { XM, EXx } },
c0f3af97
L
3472 },
3473
3474 /* PREFIX_0F38DD */
3475 {
592d1631
L
3476 { Bad_Opcode },
3477 { Bad_Opcode },
c0f3af97 3478 { "aesenclast", { XM, EXx } },
c0f3af97
L
3479 },
3480
3481 /* PREFIX_0F38DE */
3482 {
592d1631
L
3483 { Bad_Opcode },
3484 { Bad_Opcode },
c0f3af97 3485 { "aesdec", { XM, EXx } },
c0f3af97
L
3486 },
3487
3488 /* PREFIX_0F38DF */
3489 {
592d1631
L
3490 { Bad_Opcode },
3491 { Bad_Opcode },
c0f3af97 3492 { "aesdeclast", { XM, EXx } },
c0f3af97
L
3493 },
3494
1ceb70f8 3495 /* PREFIX_0F38F0 */
4e7d34a6 3496 {
f1f8f695 3497 { "movbeS", { Gv, { MOVBE_Fixup, v_mode } } },
592d1631 3498 { Bad_Opcode },
f1f8f695 3499 { "movbeS", { Gv, { MOVBE_Fixup, v_mode } } },
7bb15c6f 3500 { "crc32", { Gdq, { CRC32_Fixup, b_mode } } },
4e7d34a6
L
3501 },
3502
1ceb70f8 3503 /* PREFIX_0F38F1 */
4e7d34a6 3504 {
f1f8f695 3505 { "movbeS", { { MOVBE_Fixup, v_mode }, Gv } },
592d1631 3506 { Bad_Opcode },
f1f8f695 3507 { "movbeS", { { MOVBE_Fixup, v_mode }, Gv } },
7bb15c6f 3508 { "crc32", { Gdq, { CRC32_Fixup, v_mode } } },
4e7d34a6
L
3509 },
3510
e2e1fcde
L
3511 /* PREFIX_0F38F6 */
3512 {
3513 { Bad_Opcode },
3514 { "adoxS", { Gdq, Edq} },
3515 { "adcxS", { Gdq, Edq} },
3516 { Bad_Opcode },
3517 },
3518
1ceb70f8 3519 /* PREFIX_0F3A08 */
42903f7f 3520 {
592d1631
L
3521 { Bad_Opcode },
3522 { Bad_Opcode },
09a2c6cf 3523 { "roundps", { XM, EXx, Ib } },
42903f7f
L
3524 },
3525
1ceb70f8 3526 /* PREFIX_0F3A09 */
42903f7f 3527 {
592d1631
L
3528 { Bad_Opcode },
3529 { Bad_Opcode },
09a2c6cf 3530 { "roundpd", { XM, EXx, Ib } },
42903f7f
L
3531 },
3532
1ceb70f8 3533 /* PREFIX_0F3A0A */
42903f7f 3534 {
592d1631
L
3535 { Bad_Opcode },
3536 { Bad_Opcode },
09335d05 3537 { "roundss", { XM, EXd, Ib } },
42903f7f
L
3538 },
3539
1ceb70f8 3540 /* PREFIX_0F3A0B */
42903f7f 3541 {
592d1631
L
3542 { Bad_Opcode },
3543 { Bad_Opcode },
09335d05 3544 { "roundsd", { XM, EXq, Ib } },
42903f7f
L
3545 },
3546
1ceb70f8 3547 /* PREFIX_0F3A0C */
42903f7f 3548 {
592d1631
L
3549 { Bad_Opcode },
3550 { Bad_Opcode },
09a2c6cf 3551 { "blendps", { XM, EXx, Ib } },
42903f7f
L
3552 },
3553
1ceb70f8 3554 /* PREFIX_0F3A0D */
42903f7f 3555 {
592d1631
L
3556 { Bad_Opcode },
3557 { Bad_Opcode },
09a2c6cf 3558 { "blendpd", { XM, EXx, Ib } },
42903f7f
L
3559 },
3560
1ceb70f8 3561 /* PREFIX_0F3A0E */
42903f7f 3562 {
592d1631
L
3563 { Bad_Opcode },
3564 { Bad_Opcode },
09a2c6cf 3565 { "pblendw", { XM, EXx, Ib } },
42903f7f
L
3566 },
3567
1ceb70f8 3568 /* PREFIX_0F3A14 */
42903f7f 3569 {
592d1631
L
3570 { Bad_Opcode },
3571 { Bad_Opcode },
42903f7f 3572 { "pextrb", { Edqb, XM, Ib } },
42903f7f
L
3573 },
3574
1ceb70f8 3575 /* PREFIX_0F3A15 */
42903f7f 3576 {
592d1631
L
3577 { Bad_Opcode },
3578 { Bad_Opcode },
42903f7f 3579 { "pextrw", { Edqw, XM, Ib } },
42903f7f
L
3580 },
3581
1ceb70f8 3582 /* PREFIX_0F3A16 */
42903f7f 3583 {
592d1631
L
3584 { Bad_Opcode },
3585 { Bad_Opcode },
42903f7f 3586 { "pextrK", { Edq, XM, Ib } },
42903f7f
L
3587 },
3588
1ceb70f8 3589 /* PREFIX_0F3A17 */
42903f7f 3590 {
592d1631
L
3591 { Bad_Opcode },
3592 { Bad_Opcode },
42903f7f 3593 { "extractps", { Edqd, XM, Ib } },
42903f7f
L
3594 },
3595
1ceb70f8 3596 /* PREFIX_0F3A20 */
42903f7f 3597 {
592d1631
L
3598 { Bad_Opcode },
3599 { Bad_Opcode },
42903f7f 3600 { "pinsrb", { XM, Edqb, Ib } },
42903f7f
L
3601 },
3602
1ceb70f8 3603 /* PREFIX_0F3A21 */
42903f7f 3604 {
592d1631
L
3605 { Bad_Opcode },
3606 { Bad_Opcode },
8976381e 3607 { "insertps", { XM, EXd, Ib } },
42903f7f
L
3608 },
3609
1ceb70f8 3610 /* PREFIX_0F3A22 */
42903f7f 3611 {
592d1631
L
3612 { Bad_Opcode },
3613 { Bad_Opcode },
42903f7f 3614 { "pinsrK", { XM, Edq, Ib } },
42903f7f
L
3615 },
3616
1ceb70f8 3617 /* PREFIX_0F3A40 */
42903f7f 3618 {
592d1631
L
3619 { Bad_Opcode },
3620 { Bad_Opcode },
09a2c6cf 3621 { "dpps", { XM, EXx, Ib } },
42903f7f
L
3622 },
3623
1ceb70f8 3624 /* PREFIX_0F3A41 */
42903f7f 3625 {
592d1631
L
3626 { Bad_Opcode },
3627 { Bad_Opcode },
09a2c6cf 3628 { "dppd", { XM, EXx, Ib } },
42903f7f
L
3629 },
3630
1ceb70f8 3631 /* PREFIX_0F3A42 */
42903f7f 3632 {
592d1631
L
3633 { Bad_Opcode },
3634 { Bad_Opcode },
09a2c6cf 3635 { "mpsadbw", { XM, EXx, Ib } },
42903f7f 3636 },
381d071f 3637
c0f3af97
L
3638 /* PREFIX_0F3A44 */
3639 {
592d1631
L
3640 { Bad_Opcode },
3641 { Bad_Opcode },
c0f3af97 3642 { "pclmulqdq", { XM, EXx, PCLMUL } },
c0f3af97
L
3643 },
3644
1ceb70f8 3645 /* PREFIX_0F3A60 */
381d071f 3646 {
592d1631
L
3647 { Bad_Opcode },
3648 { Bad_Opcode },
4e7d34a6 3649 { "pcmpestrm", { XM, EXx, Ib } },
381d071f
L
3650 },
3651
1ceb70f8 3652 /* PREFIX_0F3A61 */
381d071f 3653 {
592d1631
L
3654 { Bad_Opcode },
3655 { Bad_Opcode },
4e7d34a6 3656 { "pcmpestri", { XM, EXx, Ib } },
381d071f
L
3657 },
3658
1ceb70f8 3659 /* PREFIX_0F3A62 */
381d071f 3660 {
592d1631
L
3661 { Bad_Opcode },
3662 { Bad_Opcode },
4e7d34a6 3663 { "pcmpistrm", { XM, EXx, Ib } },
381d071f
L
3664 },
3665
1ceb70f8 3666 /* PREFIX_0F3A63 */
381d071f 3667 {
592d1631
L
3668 { Bad_Opcode },
3669 { Bad_Opcode },
4e7d34a6 3670 { "pcmpistri", { XM, EXx, Ib } },
381d071f 3671 },
09a2c6cf 3672
c0f3af97 3673 /* PREFIX_0F3ADF */
09a2c6cf 3674 {
592d1631
L
3675 { Bad_Opcode },
3676 { Bad_Opcode },
c0f3af97 3677 { "aeskeygenassist", { XM, EXx, Ib } },
09a2c6cf
L
3678 },
3679
592a252b 3680 /* PREFIX_VEX_0F10 */
09a2c6cf 3681 {
592a252b
L
3682 { VEX_W_TABLE (VEX_W_0F10_P_0) },
3683 { VEX_LEN_TABLE (VEX_LEN_0F10_P_1) },
3684 { VEX_W_TABLE (VEX_W_0F10_P_2) },
3685 { VEX_LEN_TABLE (VEX_LEN_0F10_P_3) },
09a2c6cf
L
3686 },
3687
592a252b 3688 /* PREFIX_VEX_0F11 */
09a2c6cf 3689 {
592a252b
L
3690 { VEX_W_TABLE (VEX_W_0F11_P_0) },
3691 { VEX_LEN_TABLE (VEX_LEN_0F11_P_1) },
3692 { VEX_W_TABLE (VEX_W_0F11_P_2) },
3693 { VEX_LEN_TABLE (VEX_LEN_0F11_P_3) },
09a2c6cf
L
3694 },
3695
592a252b 3696 /* PREFIX_VEX_0F12 */
09a2c6cf 3697 {
592a252b
L
3698 { MOD_TABLE (MOD_VEX_0F12_PREFIX_0) },
3699 { VEX_W_TABLE (VEX_W_0F12_P_1) },
3700 { VEX_LEN_TABLE (VEX_LEN_0F12_P_2) },
3701 { VEX_W_TABLE (VEX_W_0F12_P_3) },
09a2c6cf
L
3702 },
3703
592a252b 3704 /* PREFIX_VEX_0F16 */
09a2c6cf 3705 {
592a252b
L
3706 { MOD_TABLE (MOD_VEX_0F16_PREFIX_0) },
3707 { VEX_W_TABLE (VEX_W_0F16_P_1) },
3708 { VEX_LEN_TABLE (VEX_LEN_0F16_P_2) },
5f754f58 3709 },
7c52e0e8 3710
592a252b 3711 /* PREFIX_VEX_0F2A */
5f754f58 3712 {
592d1631 3713 { Bad_Opcode },
592a252b 3714 { VEX_LEN_TABLE (VEX_LEN_0F2A_P_1) },
592d1631 3715 { Bad_Opcode },
592a252b 3716 { VEX_LEN_TABLE (VEX_LEN_0F2A_P_3) },
5f754f58 3717 },
7c52e0e8 3718
592a252b 3719 /* PREFIX_VEX_0F2C */
5f754f58 3720 {
592d1631 3721 { Bad_Opcode },
592a252b 3722 { VEX_LEN_TABLE (VEX_LEN_0F2C_P_1) },
592d1631 3723 { Bad_Opcode },
592a252b 3724 { VEX_LEN_TABLE (VEX_LEN_0F2C_P_3) },
5f754f58 3725 },
7c52e0e8 3726
592a252b 3727 /* PREFIX_VEX_0F2D */
7c52e0e8 3728 {
592d1631 3729 { Bad_Opcode },
592a252b 3730 { VEX_LEN_TABLE (VEX_LEN_0F2D_P_1) },
592d1631 3731 { Bad_Opcode },
592a252b 3732 { VEX_LEN_TABLE (VEX_LEN_0F2D_P_3) },
7c52e0e8
L
3733 },
3734
592a252b 3735 /* PREFIX_VEX_0F2E */
7c52e0e8 3736 {
592a252b 3737 { VEX_LEN_TABLE (VEX_LEN_0F2E_P_0) },
592d1631 3738 { Bad_Opcode },
592a252b 3739 { VEX_LEN_TABLE (VEX_LEN_0F2E_P_2) },
7c52e0e8
L
3740 },
3741
592a252b 3742 /* PREFIX_VEX_0F2F */
7c52e0e8 3743 {
592a252b 3744 { VEX_LEN_TABLE (VEX_LEN_0F2F_P_0) },
592d1631 3745 { Bad_Opcode },
592a252b 3746 { VEX_LEN_TABLE (VEX_LEN_0F2F_P_2) },
7c52e0e8
L
3747 },
3748
592a252b 3749 /* PREFIX_VEX_0F51 */
7c52e0e8 3750 {
592a252b
L
3751 { VEX_W_TABLE (VEX_W_0F51_P_0) },
3752 { VEX_LEN_TABLE (VEX_LEN_0F51_P_1) },
3753 { VEX_W_TABLE (VEX_W_0F51_P_2) },
3754 { VEX_LEN_TABLE (VEX_LEN_0F51_P_3) },
7c52e0e8
L
3755 },
3756
592a252b 3757 /* PREFIX_VEX_0F52 */
7c52e0e8 3758 {
592a252b
L
3759 { VEX_W_TABLE (VEX_W_0F52_P_0) },
3760 { VEX_LEN_TABLE (VEX_LEN_0F52_P_1) },
7c52e0e8
L
3761 },
3762
592a252b 3763 /* PREFIX_VEX_0F53 */
7c52e0e8 3764 {
592a252b
L
3765 { VEX_W_TABLE (VEX_W_0F53_P_0) },
3766 { VEX_LEN_TABLE (VEX_LEN_0F53_P_1) },
7c52e0e8
L
3767 },
3768
592a252b 3769 /* PREFIX_VEX_0F58 */
7c52e0e8 3770 {
592a252b
L
3771 { VEX_W_TABLE (VEX_W_0F58_P_0) },
3772 { VEX_LEN_TABLE (VEX_LEN_0F58_P_1) },
3773 { VEX_W_TABLE (VEX_W_0F58_P_2) },
3774 { VEX_LEN_TABLE (VEX_LEN_0F58_P_3) },
7c52e0e8
L
3775 },
3776
592a252b 3777 /* PREFIX_VEX_0F59 */
7c52e0e8 3778 {
592a252b
L
3779 { VEX_W_TABLE (VEX_W_0F59_P_0) },
3780 { VEX_LEN_TABLE (VEX_LEN_0F59_P_1) },
3781 { VEX_W_TABLE (VEX_W_0F59_P_2) },
3782 { VEX_LEN_TABLE (VEX_LEN_0F59_P_3) },
7c52e0e8
L
3783 },
3784
592a252b 3785 /* PREFIX_VEX_0F5A */
7c52e0e8 3786 {
592a252b
L
3787 { VEX_W_TABLE (VEX_W_0F5A_P_0) },
3788 { VEX_LEN_TABLE (VEX_LEN_0F5A_P_1) },
c0f3af97 3789 { "vcvtpd2ps%XY", { XMM, EXx } },
592a252b 3790 { VEX_LEN_TABLE (VEX_LEN_0F5A_P_3) },
7c52e0e8
L
3791 },
3792
592a252b 3793 /* PREFIX_VEX_0F5B */
7c52e0e8 3794 {
592a252b
L
3795 { VEX_W_TABLE (VEX_W_0F5B_P_0) },
3796 { VEX_W_TABLE (VEX_W_0F5B_P_1) },
3797 { VEX_W_TABLE (VEX_W_0F5B_P_2) },
7c52e0e8
L
3798 },
3799
592a252b 3800 /* PREFIX_VEX_0F5C */
7c52e0e8 3801 {
592a252b
L
3802 { VEX_W_TABLE (VEX_W_0F5C_P_0) },
3803 { VEX_LEN_TABLE (VEX_LEN_0F5C_P_1) },
3804 { VEX_W_TABLE (VEX_W_0F5C_P_2) },
3805 { VEX_LEN_TABLE (VEX_LEN_0F5C_P_3) },
7c52e0e8
L
3806 },
3807
592a252b 3808 /* PREFIX_VEX_0F5D */
7c52e0e8 3809 {
592a252b
L
3810 { VEX_W_TABLE (VEX_W_0F5D_P_0) },
3811 { VEX_LEN_TABLE (VEX_LEN_0F5D_P_1) },
3812 { VEX_W_TABLE (VEX_W_0F5D_P_2) },
3813 { VEX_LEN_TABLE (VEX_LEN_0F5D_P_3) },
7c52e0e8
L
3814 },
3815
592a252b 3816 /* PREFIX_VEX_0F5E */
7c52e0e8 3817 {
592a252b
L
3818 { VEX_W_TABLE (VEX_W_0F5E_P_0) },
3819 { VEX_LEN_TABLE (VEX_LEN_0F5E_P_1) },
3820 { VEX_W_TABLE (VEX_W_0F5E_P_2) },
3821 { VEX_LEN_TABLE (VEX_LEN_0F5E_P_3) },
7c52e0e8
L
3822 },
3823
592a252b 3824 /* PREFIX_VEX_0F5F */
7c52e0e8 3825 {
592a252b
L
3826 { VEX_W_TABLE (VEX_W_0F5F_P_0) },
3827 { VEX_LEN_TABLE (VEX_LEN_0F5F_P_1) },
3828 { VEX_W_TABLE (VEX_W_0F5F_P_2) },
3829 { VEX_LEN_TABLE (VEX_LEN_0F5F_P_3) },
7c52e0e8
L
3830 },
3831
592a252b 3832 /* PREFIX_VEX_0F60 */
7c52e0e8 3833 {
592d1631
L
3834 { Bad_Opcode },
3835 { Bad_Opcode },
6c30d220 3836 { VEX_W_TABLE (VEX_W_0F60_P_2) },
7c52e0e8
L
3837 },
3838
592a252b 3839 /* PREFIX_VEX_0F61 */
7c52e0e8 3840 {
592d1631
L
3841 { Bad_Opcode },
3842 { Bad_Opcode },
6c30d220 3843 { VEX_W_TABLE (VEX_W_0F61_P_2) },
7c52e0e8
L
3844 },
3845
592a252b 3846 /* PREFIX_VEX_0F62 */
7c52e0e8 3847 {
592d1631
L
3848 { Bad_Opcode },
3849 { Bad_Opcode },
6c30d220 3850 { VEX_W_TABLE (VEX_W_0F62_P_2) },
7c52e0e8
L
3851 },
3852
592a252b 3853 /* PREFIX_VEX_0F63 */
7c52e0e8 3854 {
592d1631
L
3855 { Bad_Opcode },
3856 { Bad_Opcode },
6c30d220 3857 { VEX_W_TABLE (VEX_W_0F63_P_2) },
7c52e0e8
L
3858 },
3859
592a252b 3860 /* PREFIX_VEX_0F64 */
7c52e0e8 3861 {
592d1631
L
3862 { Bad_Opcode },
3863 { Bad_Opcode },
6c30d220 3864 { VEX_W_TABLE (VEX_W_0F64_P_2) },
7c52e0e8
L
3865 },
3866
592a252b 3867 /* PREFIX_VEX_0F65 */
7c52e0e8 3868 {
592d1631
L
3869 { Bad_Opcode },
3870 { Bad_Opcode },
6c30d220 3871 { VEX_W_TABLE (VEX_W_0F65_P_2) },
7c52e0e8
L
3872 },
3873
592a252b 3874 /* PREFIX_VEX_0F66 */
7c52e0e8 3875 {
592d1631
L
3876 { Bad_Opcode },
3877 { Bad_Opcode },
6c30d220 3878 { VEX_W_TABLE (VEX_W_0F66_P_2) },
7c52e0e8 3879 },
6439fc28 3880
592a252b 3881 /* PREFIX_VEX_0F67 */
331d2d0d 3882 {
592d1631
L
3883 { Bad_Opcode },
3884 { Bad_Opcode },
6c30d220 3885 { VEX_W_TABLE (VEX_W_0F67_P_2) },
c0f3af97
L
3886 },
3887
592a252b 3888 /* PREFIX_VEX_0F68 */
c0f3af97 3889 {
592d1631
L
3890 { Bad_Opcode },
3891 { Bad_Opcode },
6c30d220 3892 { VEX_W_TABLE (VEX_W_0F68_P_2) },
c0f3af97
L
3893 },
3894
592a252b 3895 /* PREFIX_VEX_0F69 */
c0f3af97 3896 {
592d1631
L
3897 { Bad_Opcode },
3898 { Bad_Opcode },
6c30d220 3899 { VEX_W_TABLE (VEX_W_0F69_P_2) },
c0f3af97
L
3900 },
3901
592a252b 3902 /* PREFIX_VEX_0F6A */
c0f3af97 3903 {
592d1631
L
3904 { Bad_Opcode },
3905 { Bad_Opcode },
6c30d220 3906 { VEX_W_TABLE (VEX_W_0F6A_P_2) },
c0f3af97
L
3907 },
3908
592a252b 3909 /* PREFIX_VEX_0F6B */
c0f3af97 3910 {
592d1631
L
3911 { Bad_Opcode },
3912 { Bad_Opcode },
6c30d220 3913 { VEX_W_TABLE (VEX_W_0F6B_P_2) },
c0f3af97
L
3914 },
3915
592a252b 3916 /* PREFIX_VEX_0F6C */
c0f3af97 3917 {
592d1631
L
3918 { Bad_Opcode },
3919 { Bad_Opcode },
6c30d220 3920 { VEX_W_TABLE (VEX_W_0F6C_P_2) },
c0f3af97
L
3921 },
3922
592a252b 3923 /* PREFIX_VEX_0F6D */
c0f3af97 3924 {
592d1631
L
3925 { Bad_Opcode },
3926 { Bad_Opcode },
6c30d220 3927 { VEX_W_TABLE (VEX_W_0F6D_P_2) },
c0f3af97
L
3928 },
3929
592a252b 3930 /* PREFIX_VEX_0F6E */
c0f3af97 3931 {
592d1631
L
3932 { Bad_Opcode },
3933 { Bad_Opcode },
592a252b 3934 { VEX_LEN_TABLE (VEX_LEN_0F6E_P_2) },
c0f3af97
L
3935 },
3936
592a252b 3937 /* PREFIX_VEX_0F6F */
c0f3af97 3938 {
592d1631 3939 { Bad_Opcode },
592a252b
L
3940 { VEX_W_TABLE (VEX_W_0F6F_P_1) },
3941 { VEX_W_TABLE (VEX_W_0F6F_P_2) },
c0f3af97
L
3942 },
3943
592a252b 3944 /* PREFIX_VEX_0F70 */
c0f3af97 3945 {
592d1631 3946 { Bad_Opcode },
6c30d220
L
3947 { VEX_W_TABLE (VEX_W_0F70_P_1) },
3948 { VEX_W_TABLE (VEX_W_0F70_P_2) },
3949 { VEX_W_TABLE (VEX_W_0F70_P_3) },
c0f3af97
L
3950 },
3951
592a252b 3952 /* PREFIX_VEX_0F71_REG_2 */
c0f3af97 3953 {
592d1631
L
3954 { Bad_Opcode },
3955 { Bad_Opcode },
6c30d220 3956 { VEX_W_TABLE (VEX_W_0F71_R_2_P_2) },
c0f3af97
L
3957 },
3958
592a252b 3959 /* PREFIX_VEX_0F71_REG_4 */
c0f3af97 3960 {
592d1631
L
3961 { Bad_Opcode },
3962 { Bad_Opcode },
6c30d220 3963 { VEX_W_TABLE (VEX_W_0F71_R_4_P_2) },
c0f3af97
L
3964 },
3965
592a252b 3966 /* PREFIX_VEX_0F71_REG_6 */
c0f3af97 3967 {
592d1631
L
3968 { Bad_Opcode },
3969 { Bad_Opcode },
6c30d220 3970 { VEX_W_TABLE (VEX_W_0F71_R_6_P_2) },
c0f3af97
L
3971 },
3972
592a252b 3973 /* PREFIX_VEX_0F72_REG_2 */
c0f3af97 3974 {
592d1631
L
3975 { Bad_Opcode },
3976 { Bad_Opcode },
6c30d220 3977 { VEX_W_TABLE (VEX_W_0F72_R_2_P_2) },
c0f3af97
L
3978 },
3979
592a252b 3980 /* PREFIX_VEX_0F72_REG_4 */
c0f3af97 3981 {
592d1631
L
3982 { Bad_Opcode },
3983 { Bad_Opcode },
6c30d220 3984 { VEX_W_TABLE (VEX_W_0F72_R_4_P_2) },
c0f3af97
L
3985 },
3986
592a252b 3987 /* PREFIX_VEX_0F72_REG_6 */
c0f3af97 3988 {
592d1631
L
3989 { Bad_Opcode },
3990 { Bad_Opcode },
6c30d220 3991 { VEX_W_TABLE (VEX_W_0F72_R_6_P_2) },
c0f3af97
L
3992 },
3993
592a252b 3994 /* PREFIX_VEX_0F73_REG_2 */
c0f3af97 3995 {
592d1631
L
3996 { Bad_Opcode },
3997 { Bad_Opcode },
6c30d220 3998 { VEX_W_TABLE (VEX_W_0F73_R_2_P_2) },
c0f3af97
L
3999 },
4000
592a252b 4001 /* PREFIX_VEX_0F73_REG_3 */
c0f3af97 4002 {
592d1631
L
4003 { Bad_Opcode },
4004 { Bad_Opcode },
6c30d220 4005 { VEX_W_TABLE (VEX_W_0F73_R_3_P_2) },
c0f3af97
L
4006 },
4007
592a252b 4008 /* PREFIX_VEX_0F73_REG_6 */
c0f3af97 4009 {
592d1631
L
4010 { Bad_Opcode },
4011 { Bad_Opcode },
6c30d220 4012 { VEX_W_TABLE (VEX_W_0F73_R_6_P_2) },
c0f3af97
L
4013 },
4014
592a252b 4015 /* PREFIX_VEX_0F73_REG_7 */
c0f3af97 4016 {
592d1631
L
4017 { Bad_Opcode },
4018 { Bad_Opcode },
6c30d220 4019 { VEX_W_TABLE (VEX_W_0F73_R_7_P_2) },
c0f3af97
L
4020 },
4021
592a252b 4022 /* PREFIX_VEX_0F74 */
c0f3af97 4023 {
592d1631
L
4024 { Bad_Opcode },
4025 { Bad_Opcode },
6c30d220 4026 { VEX_W_TABLE (VEX_W_0F74_P_2) },
c0f3af97
L
4027 },
4028
592a252b 4029 /* PREFIX_VEX_0F75 */
c0f3af97 4030 {
592d1631
L
4031 { Bad_Opcode },
4032 { Bad_Opcode },
6c30d220 4033 { VEX_W_TABLE (VEX_W_0F75_P_2) },
c0f3af97
L
4034 },
4035
592a252b 4036 /* PREFIX_VEX_0F76 */
c0f3af97 4037 {
592d1631
L
4038 { Bad_Opcode },
4039 { Bad_Opcode },
6c30d220 4040 { VEX_W_TABLE (VEX_W_0F76_P_2) },
c0f3af97
L
4041 },
4042
592a252b 4043 /* PREFIX_VEX_0F77 */
c0f3af97 4044 {
592a252b 4045 { VEX_W_TABLE (VEX_W_0F77_P_0) },
c0f3af97
L
4046 },
4047
592a252b 4048 /* PREFIX_VEX_0F7C */
c0f3af97 4049 {
592d1631
L
4050 { Bad_Opcode },
4051 { Bad_Opcode },
592a252b
L
4052 { VEX_W_TABLE (VEX_W_0F7C_P_2) },
4053 { VEX_W_TABLE (VEX_W_0F7C_P_3) },
c0f3af97
L
4054 },
4055
592a252b 4056 /* PREFIX_VEX_0F7D */
c0f3af97 4057 {
592d1631
L
4058 { Bad_Opcode },
4059 { Bad_Opcode },
592a252b
L
4060 { VEX_W_TABLE (VEX_W_0F7D_P_2) },
4061 { VEX_W_TABLE (VEX_W_0F7D_P_3) },
c0f3af97
L
4062 },
4063
592a252b 4064 /* PREFIX_VEX_0F7E */
c0f3af97 4065 {
592d1631 4066 { Bad_Opcode },
592a252b
L
4067 { VEX_LEN_TABLE (VEX_LEN_0F7E_P_1) },
4068 { VEX_LEN_TABLE (VEX_LEN_0F7E_P_2) },
c0f3af97
L
4069 },
4070
592a252b 4071 /* PREFIX_VEX_0F7F */
c0f3af97 4072 {
592d1631 4073 { Bad_Opcode },
592a252b
L
4074 { VEX_W_TABLE (VEX_W_0F7F_P_1) },
4075 { VEX_W_TABLE (VEX_W_0F7F_P_2) },
c0f3af97
L
4076 },
4077
592a252b 4078 /* PREFIX_VEX_0FC2 */
c0f3af97 4079 {
592a252b
L
4080 { VEX_W_TABLE (VEX_W_0FC2_P_0) },
4081 { VEX_LEN_TABLE (VEX_LEN_0FC2_P_1) },
4082 { VEX_W_TABLE (VEX_W_0FC2_P_2) },
4083 { VEX_LEN_TABLE (VEX_LEN_0FC2_P_3) },
c0f3af97
L
4084 },
4085
592a252b 4086 /* PREFIX_VEX_0FC4 */
c0f3af97 4087 {
592d1631
L
4088 { Bad_Opcode },
4089 { Bad_Opcode },
592a252b 4090 { VEX_LEN_TABLE (VEX_LEN_0FC4_P_2) },
c0f3af97
L
4091 },
4092
592a252b 4093 /* PREFIX_VEX_0FC5 */
c0f3af97 4094 {
592d1631
L
4095 { Bad_Opcode },
4096 { Bad_Opcode },
592a252b 4097 { VEX_LEN_TABLE (VEX_LEN_0FC5_P_2) },
c0f3af97
L
4098 },
4099
592a252b 4100 /* PREFIX_VEX_0FD0 */
c0f3af97 4101 {
592d1631
L
4102 { Bad_Opcode },
4103 { Bad_Opcode },
592a252b
L
4104 { VEX_W_TABLE (VEX_W_0FD0_P_2) },
4105 { VEX_W_TABLE (VEX_W_0FD0_P_3) },
c0f3af97
L
4106 },
4107
592a252b 4108 /* PREFIX_VEX_0FD1 */
c0f3af97 4109 {
592d1631
L
4110 { Bad_Opcode },
4111 { Bad_Opcode },
6c30d220 4112 { VEX_W_TABLE (VEX_W_0FD1_P_2) },
c0f3af97
L
4113 },
4114
592a252b 4115 /* PREFIX_VEX_0FD2 */
c0f3af97 4116 {
592d1631
L
4117 { Bad_Opcode },
4118 { Bad_Opcode },
6c30d220 4119 { VEX_W_TABLE (VEX_W_0FD2_P_2) },
c0f3af97
L
4120 },
4121
592a252b 4122 /* PREFIX_VEX_0FD3 */
c0f3af97 4123 {
592d1631
L
4124 { Bad_Opcode },
4125 { Bad_Opcode },
6c30d220 4126 { VEX_W_TABLE (VEX_W_0FD3_P_2) },
c0f3af97
L
4127 },
4128
592a252b 4129 /* PREFIX_VEX_0FD4 */
c0f3af97 4130 {
592d1631
L
4131 { Bad_Opcode },
4132 { Bad_Opcode },
6c30d220 4133 { VEX_W_TABLE (VEX_W_0FD4_P_2) },
c0f3af97
L
4134 },
4135
592a252b 4136 /* PREFIX_VEX_0FD5 */
c0f3af97 4137 {
592d1631
L
4138 { Bad_Opcode },
4139 { Bad_Opcode },
6c30d220 4140 { VEX_W_TABLE (VEX_W_0FD5_P_2) },
c0f3af97
L
4141 },
4142
592a252b 4143 /* PREFIX_VEX_0FD6 */
c0f3af97 4144 {
592d1631
L
4145 { Bad_Opcode },
4146 { Bad_Opcode },
592a252b 4147 { VEX_LEN_TABLE (VEX_LEN_0FD6_P_2) },
c0f3af97
L
4148 },
4149
592a252b 4150 /* PREFIX_VEX_0FD7 */
c0f3af97 4151 {
592d1631
L
4152 { Bad_Opcode },
4153 { Bad_Opcode },
592a252b 4154 { MOD_TABLE (MOD_VEX_0FD7_PREFIX_2) },
c0f3af97
L
4155 },
4156
592a252b 4157 /* PREFIX_VEX_0FD8 */
c0f3af97 4158 {
592d1631
L
4159 { Bad_Opcode },
4160 { Bad_Opcode },
6c30d220 4161 { VEX_W_TABLE (VEX_W_0FD8_P_2) },
c0f3af97
L
4162 },
4163
592a252b 4164 /* PREFIX_VEX_0FD9 */
c0f3af97 4165 {
592d1631
L
4166 { Bad_Opcode },
4167 { Bad_Opcode },
6c30d220 4168 { VEX_W_TABLE (VEX_W_0FD9_P_2) },
c0f3af97
L
4169 },
4170
592a252b 4171 /* PREFIX_VEX_0FDA */
c0f3af97 4172 {
592d1631
L
4173 { Bad_Opcode },
4174 { Bad_Opcode },
6c30d220 4175 { VEX_W_TABLE (VEX_W_0FDA_P_2) },
c0f3af97
L
4176 },
4177
592a252b 4178 /* PREFIX_VEX_0FDB */
c0f3af97 4179 {
592d1631
L
4180 { Bad_Opcode },
4181 { Bad_Opcode },
6c30d220 4182 { VEX_W_TABLE (VEX_W_0FDB_P_2) },
c0f3af97
L
4183 },
4184
592a252b 4185 /* PREFIX_VEX_0FDC */
c0f3af97 4186 {
592d1631
L
4187 { Bad_Opcode },
4188 { Bad_Opcode },
6c30d220 4189 { VEX_W_TABLE (VEX_W_0FDC_P_2) },
c0f3af97
L
4190 },
4191
592a252b 4192 /* PREFIX_VEX_0FDD */
c0f3af97 4193 {
592d1631
L
4194 { Bad_Opcode },
4195 { Bad_Opcode },
6c30d220 4196 { VEX_W_TABLE (VEX_W_0FDD_P_2) },
c0f3af97
L
4197 },
4198
592a252b 4199 /* PREFIX_VEX_0FDE */
c0f3af97 4200 {
592d1631
L
4201 { Bad_Opcode },
4202 { Bad_Opcode },
6c30d220 4203 { VEX_W_TABLE (VEX_W_0FDE_P_2) },
c0f3af97
L
4204 },
4205
592a252b 4206 /* PREFIX_VEX_0FDF */
c0f3af97 4207 {
592d1631
L
4208 { Bad_Opcode },
4209 { Bad_Opcode },
6c30d220 4210 { VEX_W_TABLE (VEX_W_0FDF_P_2) },
c0f3af97
L
4211 },
4212
592a252b 4213 /* PREFIX_VEX_0FE0 */
c0f3af97 4214 {
592d1631
L
4215 { Bad_Opcode },
4216 { Bad_Opcode },
6c30d220 4217 { VEX_W_TABLE (VEX_W_0FE0_P_2) },
c0f3af97
L
4218 },
4219
592a252b 4220 /* PREFIX_VEX_0FE1 */
c0f3af97 4221 {
592d1631
L
4222 { Bad_Opcode },
4223 { Bad_Opcode },
6c30d220 4224 { VEX_W_TABLE (VEX_W_0FE1_P_2) },
c0f3af97
L
4225 },
4226
592a252b 4227 /* PREFIX_VEX_0FE2 */
c0f3af97 4228 {
592d1631
L
4229 { Bad_Opcode },
4230 { Bad_Opcode },
6c30d220 4231 { VEX_W_TABLE (VEX_W_0FE2_P_2) },
c0f3af97
L
4232 },
4233
592a252b 4234 /* PREFIX_VEX_0FE3 */
c0f3af97 4235 {
592d1631
L
4236 { Bad_Opcode },
4237 { Bad_Opcode },
6c30d220 4238 { VEX_W_TABLE (VEX_W_0FE3_P_2) },
c0f3af97
L
4239 },
4240
592a252b 4241 /* PREFIX_VEX_0FE4 */
c0f3af97 4242 {
592d1631
L
4243 { Bad_Opcode },
4244 { Bad_Opcode },
6c30d220 4245 { VEX_W_TABLE (VEX_W_0FE4_P_2) },
c0f3af97
L
4246 },
4247
592a252b 4248 /* PREFIX_VEX_0FE5 */
c0f3af97 4249 {
592d1631
L
4250 { Bad_Opcode },
4251 { Bad_Opcode },
6c30d220 4252 { VEX_W_TABLE (VEX_W_0FE5_P_2) },
c0f3af97
L
4253 },
4254
592a252b 4255 /* PREFIX_VEX_0FE6 */
c0f3af97 4256 {
592d1631 4257 { Bad_Opcode },
592a252b
L
4258 { VEX_W_TABLE (VEX_W_0FE6_P_1) },
4259 { VEX_W_TABLE (VEX_W_0FE6_P_2) },
4260 { VEX_W_TABLE (VEX_W_0FE6_P_3) },
c0f3af97
L
4261 },
4262
592a252b 4263 /* PREFIX_VEX_0FE7 */
c0f3af97 4264 {
592d1631
L
4265 { Bad_Opcode },
4266 { Bad_Opcode },
592a252b 4267 { MOD_TABLE (MOD_VEX_0FE7_PREFIX_2) },
c0f3af97
L
4268 },
4269
592a252b 4270 /* PREFIX_VEX_0FE8 */
c0f3af97 4271 {
592d1631
L
4272 { Bad_Opcode },
4273 { Bad_Opcode },
6c30d220 4274 { VEX_W_TABLE (VEX_W_0FE8_P_2) },
c0f3af97
L
4275 },
4276
592a252b 4277 /* PREFIX_VEX_0FE9 */
c0f3af97 4278 {
592d1631
L
4279 { Bad_Opcode },
4280 { Bad_Opcode },
6c30d220 4281 { VEX_W_TABLE (VEX_W_0FE9_P_2) },
c0f3af97
L
4282 },
4283
592a252b 4284 /* PREFIX_VEX_0FEA */
c0f3af97 4285 {
592d1631
L
4286 { Bad_Opcode },
4287 { Bad_Opcode },
6c30d220 4288 { VEX_W_TABLE (VEX_W_0FEA_P_2) },
c0f3af97
L
4289 },
4290
592a252b 4291 /* PREFIX_VEX_0FEB */
c0f3af97 4292 {
592d1631
L
4293 { Bad_Opcode },
4294 { Bad_Opcode },
6c30d220 4295 { VEX_W_TABLE (VEX_W_0FEB_P_2) },
c0f3af97
L
4296 },
4297
592a252b 4298 /* PREFIX_VEX_0FEC */
c0f3af97 4299 {
592d1631
L
4300 { Bad_Opcode },
4301 { Bad_Opcode },
6c30d220 4302 { VEX_W_TABLE (VEX_W_0FEC_P_2) },
c0f3af97
L
4303 },
4304
592a252b 4305 /* PREFIX_VEX_0FED */
c0f3af97 4306 {
592d1631
L
4307 { Bad_Opcode },
4308 { Bad_Opcode },
6c30d220 4309 { VEX_W_TABLE (VEX_W_0FED_P_2) },
c0f3af97
L
4310 },
4311
592a252b 4312 /* PREFIX_VEX_0FEE */
c0f3af97 4313 {
592d1631
L
4314 { Bad_Opcode },
4315 { Bad_Opcode },
6c30d220 4316 { VEX_W_TABLE (VEX_W_0FEE_P_2) },
c0f3af97
L
4317 },
4318
592a252b 4319 /* PREFIX_VEX_0FEF */
c0f3af97 4320 {
592d1631
L
4321 { Bad_Opcode },
4322 { Bad_Opcode },
6c30d220 4323 { VEX_W_TABLE (VEX_W_0FEF_P_2) },
c0f3af97
L
4324 },
4325
592a252b 4326 /* PREFIX_VEX_0FF0 */
c0f3af97 4327 {
592d1631
L
4328 { Bad_Opcode },
4329 { Bad_Opcode },
4330 { Bad_Opcode },
592a252b 4331 { MOD_TABLE (MOD_VEX_0FF0_PREFIX_3) },
c0f3af97
L
4332 },
4333
592a252b 4334 /* PREFIX_VEX_0FF1 */
c0f3af97 4335 {
592d1631
L
4336 { Bad_Opcode },
4337 { Bad_Opcode },
6c30d220 4338 { VEX_W_TABLE (VEX_W_0FF1_P_2) },
c0f3af97
L
4339 },
4340
592a252b 4341 /* PREFIX_VEX_0FF2 */
c0f3af97 4342 {
592d1631
L
4343 { Bad_Opcode },
4344 { Bad_Opcode },
6c30d220 4345 { VEX_W_TABLE (VEX_W_0FF2_P_2) },
c0f3af97
L
4346 },
4347
592a252b 4348 /* PREFIX_VEX_0FF3 */
c0f3af97 4349 {
592d1631
L
4350 { Bad_Opcode },
4351 { Bad_Opcode },
6c30d220 4352 { VEX_W_TABLE (VEX_W_0FF3_P_2) },
c0f3af97
L
4353 },
4354
592a252b 4355 /* PREFIX_VEX_0FF4 */
c0f3af97 4356 {
592d1631
L
4357 { Bad_Opcode },
4358 { Bad_Opcode },
6c30d220 4359 { VEX_W_TABLE (VEX_W_0FF4_P_2) },
c0f3af97
L
4360 },
4361
592a252b 4362 /* PREFIX_VEX_0FF5 */
c0f3af97 4363 {
592d1631
L
4364 { Bad_Opcode },
4365 { Bad_Opcode },
6c30d220 4366 { VEX_W_TABLE (VEX_W_0FF5_P_2) },
c0f3af97
L
4367 },
4368
592a252b 4369 /* PREFIX_VEX_0FF6 */
c0f3af97 4370 {
592d1631
L
4371 { Bad_Opcode },
4372 { Bad_Opcode },
6c30d220 4373 { VEX_W_TABLE (VEX_W_0FF6_P_2) },
c0f3af97
L
4374 },
4375
592a252b 4376 /* PREFIX_VEX_0FF7 */
c0f3af97 4377 {
592d1631
L
4378 { Bad_Opcode },
4379 { Bad_Opcode },
592a252b 4380 { VEX_LEN_TABLE (VEX_LEN_0FF7_P_2) },
c0f3af97
L
4381 },
4382
592a252b 4383 /* PREFIX_VEX_0FF8 */
c0f3af97 4384 {
592d1631
L
4385 { Bad_Opcode },
4386 { Bad_Opcode },
6c30d220 4387 { VEX_W_TABLE (VEX_W_0FF8_P_2) },
c0f3af97
L
4388 },
4389
592a252b 4390 /* PREFIX_VEX_0FF9 */
c0f3af97 4391 {
592d1631
L
4392 { Bad_Opcode },
4393 { Bad_Opcode },
6c30d220 4394 { VEX_W_TABLE (VEX_W_0FF9_P_2) },
c0f3af97
L
4395 },
4396
592a252b 4397 /* PREFIX_VEX_0FFA */
c0f3af97 4398 {
592d1631
L
4399 { Bad_Opcode },
4400 { Bad_Opcode },
6c30d220 4401 { VEX_W_TABLE (VEX_W_0FFA_P_2) },
c0f3af97
L
4402 },
4403
592a252b 4404 /* PREFIX_VEX_0FFB */
c0f3af97 4405 {
592d1631
L
4406 { Bad_Opcode },
4407 { Bad_Opcode },
6c30d220 4408 { VEX_W_TABLE (VEX_W_0FFB_P_2) },
c0f3af97
L
4409 },
4410
592a252b 4411 /* PREFIX_VEX_0FFC */
c0f3af97 4412 {
592d1631
L
4413 { Bad_Opcode },
4414 { Bad_Opcode },
6c30d220 4415 { VEX_W_TABLE (VEX_W_0FFC_P_2) },
c0f3af97
L
4416 },
4417
592a252b 4418 /* PREFIX_VEX_0FFD */
c0f3af97 4419 {
592d1631
L
4420 { Bad_Opcode },
4421 { Bad_Opcode },
6c30d220 4422 { VEX_W_TABLE (VEX_W_0FFD_P_2) },
c0f3af97
L
4423 },
4424
592a252b 4425 /* PREFIX_VEX_0FFE */
c0f3af97 4426 {
592d1631
L
4427 { Bad_Opcode },
4428 { Bad_Opcode },
6c30d220 4429 { VEX_W_TABLE (VEX_W_0FFE_P_2) },
c0f3af97
L
4430 },
4431
592a252b 4432 /* PREFIX_VEX_0F3800 */
c0f3af97 4433 {
592d1631
L
4434 { Bad_Opcode },
4435 { Bad_Opcode },
6c30d220 4436 { VEX_W_TABLE (VEX_W_0F3800_P_2) },
c0f3af97
L
4437 },
4438
592a252b 4439 /* PREFIX_VEX_0F3801 */
c0f3af97 4440 {
592d1631
L
4441 { Bad_Opcode },
4442 { Bad_Opcode },
6c30d220 4443 { VEX_W_TABLE (VEX_W_0F3801_P_2) },
c0f3af97
L
4444 },
4445
592a252b 4446 /* PREFIX_VEX_0F3802 */
c0f3af97 4447 {
592d1631
L
4448 { Bad_Opcode },
4449 { Bad_Opcode },
6c30d220 4450 { VEX_W_TABLE (VEX_W_0F3802_P_2) },
c0f3af97
L
4451 },
4452
592a252b 4453 /* PREFIX_VEX_0F3803 */
c0f3af97 4454 {
592d1631
L
4455 { Bad_Opcode },
4456 { Bad_Opcode },
6c30d220 4457 { VEX_W_TABLE (VEX_W_0F3803_P_2) },
c0f3af97
L
4458 },
4459
592a252b 4460 /* PREFIX_VEX_0F3804 */
c0f3af97 4461 {
592d1631
L
4462 { Bad_Opcode },
4463 { Bad_Opcode },
6c30d220 4464 { VEX_W_TABLE (VEX_W_0F3804_P_2) },
c0f3af97
L
4465 },
4466
592a252b 4467 /* PREFIX_VEX_0F3805 */
c0f3af97 4468 {
592d1631
L
4469 { Bad_Opcode },
4470 { Bad_Opcode },
6c30d220 4471 { VEX_W_TABLE (VEX_W_0F3805_P_2) },
c0f3af97
L
4472 },
4473
592a252b 4474 /* PREFIX_VEX_0F3806 */
c0f3af97 4475 {
592d1631
L
4476 { Bad_Opcode },
4477 { Bad_Opcode },
6c30d220 4478 { VEX_W_TABLE (VEX_W_0F3806_P_2) },
c0f3af97
L
4479 },
4480
592a252b 4481 /* PREFIX_VEX_0F3807 */
c0f3af97 4482 {
592d1631
L
4483 { Bad_Opcode },
4484 { Bad_Opcode },
6c30d220 4485 { VEX_W_TABLE (VEX_W_0F3807_P_2) },
c0f3af97
L
4486 },
4487
592a252b 4488 /* PREFIX_VEX_0F3808 */
c0f3af97 4489 {
592d1631
L
4490 { Bad_Opcode },
4491 { Bad_Opcode },
6c30d220 4492 { VEX_W_TABLE (VEX_W_0F3808_P_2) },
c0f3af97
L
4493 },
4494
592a252b 4495 /* PREFIX_VEX_0F3809 */
c0f3af97 4496 {
592d1631
L
4497 { Bad_Opcode },
4498 { Bad_Opcode },
6c30d220 4499 { VEX_W_TABLE (VEX_W_0F3809_P_2) },
c0f3af97
L
4500 },
4501
592a252b 4502 /* PREFIX_VEX_0F380A */
c0f3af97 4503 {
592d1631
L
4504 { Bad_Opcode },
4505 { Bad_Opcode },
6c30d220 4506 { VEX_W_TABLE (VEX_W_0F380A_P_2) },
c0f3af97
L
4507 },
4508
592a252b 4509 /* PREFIX_VEX_0F380B */
c0f3af97 4510 {
592d1631
L
4511 { Bad_Opcode },
4512 { Bad_Opcode },
6c30d220 4513 { VEX_W_TABLE (VEX_W_0F380B_P_2) },
c0f3af97
L
4514 },
4515
592a252b 4516 /* PREFIX_VEX_0F380C */
c0f3af97 4517 {
592d1631
L
4518 { Bad_Opcode },
4519 { Bad_Opcode },
592a252b 4520 { VEX_W_TABLE (VEX_W_0F380C_P_2) },
c0f3af97
L
4521 },
4522
592a252b 4523 /* PREFIX_VEX_0F380D */
c0f3af97 4524 {
592d1631
L
4525 { Bad_Opcode },
4526 { Bad_Opcode },
592a252b 4527 { VEX_W_TABLE (VEX_W_0F380D_P_2) },
c0f3af97
L
4528 },
4529
592a252b 4530 /* PREFIX_VEX_0F380E */
c0f3af97 4531 {
592d1631
L
4532 { Bad_Opcode },
4533 { Bad_Opcode },
592a252b 4534 { VEX_W_TABLE (VEX_W_0F380E_P_2) },
c0f3af97
L
4535 },
4536
592a252b 4537 /* PREFIX_VEX_0F380F */
c0f3af97 4538 {
592d1631
L
4539 { Bad_Opcode },
4540 { Bad_Opcode },
592a252b 4541 { VEX_W_TABLE (VEX_W_0F380F_P_2) },
c0f3af97
L
4542 },
4543
592a252b 4544 /* PREFIX_VEX_0F3813 */
c7b8aa3a
L
4545 {
4546 { Bad_Opcode },
4547 { Bad_Opcode },
4548 { "vcvtph2ps", { XM, EXxmmq } },
4549 },
4550
6c30d220
L
4551 /* PREFIX_VEX_0F3816 */
4552 {
4553 { Bad_Opcode },
4554 { Bad_Opcode },
4555 { VEX_LEN_TABLE (VEX_LEN_0F3816_P_2) },
4556 },
4557
592a252b 4558 /* PREFIX_VEX_0F3817 */
c0f3af97 4559 {
592d1631
L
4560 { Bad_Opcode },
4561 { Bad_Opcode },
592a252b 4562 { VEX_W_TABLE (VEX_W_0F3817_P_2) },
c0f3af97
L
4563 },
4564
592a252b 4565 /* PREFIX_VEX_0F3818 */
c0f3af97 4566 {
592d1631
L
4567 { Bad_Opcode },
4568 { Bad_Opcode },
6c30d220 4569 { VEX_W_TABLE (VEX_W_0F3818_P_2) },
c0f3af97
L
4570 },
4571
592a252b 4572 /* PREFIX_VEX_0F3819 */
c0f3af97 4573 {
592d1631
L
4574 { Bad_Opcode },
4575 { Bad_Opcode },
6c30d220 4576 { VEX_LEN_TABLE (VEX_LEN_0F3819_P_2) },
c0f3af97
L
4577 },
4578
592a252b 4579 /* PREFIX_VEX_0F381A */
c0f3af97 4580 {
592d1631
L
4581 { Bad_Opcode },
4582 { Bad_Opcode },
592a252b 4583 { MOD_TABLE (MOD_VEX_0F381A_PREFIX_2) },
c0f3af97
L
4584 },
4585
592a252b 4586 /* PREFIX_VEX_0F381C */
c0f3af97 4587 {
592d1631
L
4588 { Bad_Opcode },
4589 { Bad_Opcode },
6c30d220 4590 { VEX_W_TABLE (VEX_W_0F381C_P_2) },
c0f3af97
L
4591 },
4592
592a252b 4593 /* PREFIX_VEX_0F381D */
c0f3af97 4594 {
592d1631
L
4595 { Bad_Opcode },
4596 { Bad_Opcode },
6c30d220 4597 { VEX_W_TABLE (VEX_W_0F381D_P_2) },
c0f3af97
L
4598 },
4599
592a252b 4600 /* PREFIX_VEX_0F381E */
c0f3af97 4601 {
592d1631
L
4602 { Bad_Opcode },
4603 { Bad_Opcode },
6c30d220 4604 { VEX_W_TABLE (VEX_W_0F381E_P_2) },
c0f3af97
L
4605 },
4606
592a252b 4607 /* PREFIX_VEX_0F3820 */
c0f3af97 4608 {
592d1631
L
4609 { Bad_Opcode },
4610 { Bad_Opcode },
6c30d220 4611 { VEX_W_TABLE (VEX_W_0F3820_P_2) },
c0f3af97
L
4612 },
4613
592a252b 4614 /* PREFIX_VEX_0F3821 */
c0f3af97 4615 {
592d1631
L
4616 { Bad_Opcode },
4617 { Bad_Opcode },
6c30d220 4618 { VEX_W_TABLE (VEX_W_0F3821_P_2) },
c0f3af97
L
4619 },
4620
592a252b 4621 /* PREFIX_VEX_0F3822 */
c0f3af97 4622 {
592d1631
L
4623 { Bad_Opcode },
4624 { Bad_Opcode },
6c30d220 4625 { VEX_W_TABLE (VEX_W_0F3822_P_2) },
c0f3af97
L
4626 },
4627
592a252b 4628 /* PREFIX_VEX_0F3823 */
c0f3af97 4629 {
592d1631
L
4630 { Bad_Opcode },
4631 { Bad_Opcode },
6c30d220 4632 { VEX_W_TABLE (VEX_W_0F3823_P_2) },
c0f3af97
L
4633 },
4634
592a252b 4635 /* PREFIX_VEX_0F3824 */
c0f3af97 4636 {
592d1631
L
4637 { Bad_Opcode },
4638 { Bad_Opcode },
6c30d220 4639 { VEX_W_TABLE (VEX_W_0F3824_P_2) },
c0f3af97
L
4640 },
4641
592a252b 4642 /* PREFIX_VEX_0F3825 */
c0f3af97 4643 {
592d1631
L
4644 { Bad_Opcode },
4645 { Bad_Opcode },
6c30d220 4646 { VEX_W_TABLE (VEX_W_0F3825_P_2) },
c0f3af97
L
4647 },
4648
592a252b 4649 /* PREFIX_VEX_0F3828 */
c0f3af97 4650 {
592d1631
L
4651 { Bad_Opcode },
4652 { Bad_Opcode },
6c30d220 4653 { VEX_W_TABLE (VEX_W_0F3828_P_2) },
c0f3af97
L
4654 },
4655
592a252b 4656 /* PREFIX_VEX_0F3829 */
c0f3af97 4657 {
592d1631
L
4658 { Bad_Opcode },
4659 { Bad_Opcode },
6c30d220 4660 { VEX_W_TABLE (VEX_W_0F3829_P_2) },
c0f3af97
L
4661 },
4662
592a252b 4663 /* PREFIX_VEX_0F382A */
c0f3af97 4664 {
592d1631
L
4665 { Bad_Opcode },
4666 { Bad_Opcode },
592a252b 4667 { MOD_TABLE (MOD_VEX_0F382A_PREFIX_2) },
c0f3af97
L
4668 },
4669
592a252b 4670 /* PREFIX_VEX_0F382B */
c0f3af97 4671 {
592d1631
L
4672 { Bad_Opcode },
4673 { Bad_Opcode },
6c30d220 4674 { VEX_W_TABLE (VEX_W_0F382B_P_2) },
c0f3af97
L
4675 },
4676
592a252b 4677 /* PREFIX_VEX_0F382C */
c0f3af97 4678 {
592d1631
L
4679 { Bad_Opcode },
4680 { Bad_Opcode },
592a252b 4681 { MOD_TABLE (MOD_VEX_0F382C_PREFIX_2) },
c0f3af97
L
4682 },
4683
592a252b 4684 /* PREFIX_VEX_0F382D */
c0f3af97 4685 {
592d1631
L
4686 { Bad_Opcode },
4687 { Bad_Opcode },
592a252b 4688 { MOD_TABLE (MOD_VEX_0F382D_PREFIX_2) },
c0f3af97
L
4689 },
4690
592a252b 4691 /* PREFIX_VEX_0F382E */
c0f3af97 4692 {
592d1631
L
4693 { Bad_Opcode },
4694 { Bad_Opcode },
592a252b 4695 { MOD_TABLE (MOD_VEX_0F382E_PREFIX_2) },
c0f3af97
L
4696 },
4697
592a252b 4698 /* PREFIX_VEX_0F382F */
c0f3af97 4699 {
592d1631
L
4700 { Bad_Opcode },
4701 { Bad_Opcode },
592a252b 4702 { MOD_TABLE (MOD_VEX_0F382F_PREFIX_2) },
c0f3af97
L
4703 },
4704
592a252b 4705 /* PREFIX_VEX_0F3830 */
c0f3af97 4706 {
592d1631
L
4707 { Bad_Opcode },
4708 { Bad_Opcode },
6c30d220 4709 { VEX_W_TABLE (VEX_W_0F3830_P_2) },
c0f3af97
L
4710 },
4711
592a252b 4712 /* PREFIX_VEX_0F3831 */
c0f3af97 4713 {
592d1631
L
4714 { Bad_Opcode },
4715 { Bad_Opcode },
6c30d220 4716 { VEX_W_TABLE (VEX_W_0F3831_P_2) },
c0f3af97
L
4717 },
4718
592a252b 4719 /* PREFIX_VEX_0F3832 */
c0f3af97 4720 {
592d1631
L
4721 { Bad_Opcode },
4722 { Bad_Opcode },
6c30d220 4723 { VEX_W_TABLE (VEX_W_0F3832_P_2) },
c0f3af97
L
4724 },
4725
592a252b 4726 /* PREFIX_VEX_0F3833 */
c0f3af97 4727 {
592d1631
L
4728 { Bad_Opcode },
4729 { Bad_Opcode },
6c30d220 4730 { VEX_W_TABLE (VEX_W_0F3833_P_2) },
c0f3af97
L
4731 },
4732
592a252b 4733 /* PREFIX_VEX_0F3834 */
c0f3af97 4734 {
592d1631
L
4735 { Bad_Opcode },
4736 { Bad_Opcode },
6c30d220 4737 { VEX_W_TABLE (VEX_W_0F3834_P_2) },
c0f3af97
L
4738 },
4739
592a252b 4740 /* PREFIX_VEX_0F3835 */
c0f3af97 4741 {
592d1631
L
4742 { Bad_Opcode },
4743 { Bad_Opcode },
6c30d220
L
4744 { VEX_W_TABLE (VEX_W_0F3835_P_2) },
4745 },
4746
4747 /* PREFIX_VEX_0F3836 */
4748 {
4749 { Bad_Opcode },
4750 { Bad_Opcode },
4751 { VEX_LEN_TABLE (VEX_LEN_0F3836_P_2) },
c0f3af97
L
4752 },
4753
592a252b 4754 /* PREFIX_VEX_0F3837 */
c0f3af97 4755 {
592d1631
L
4756 { Bad_Opcode },
4757 { Bad_Opcode },
6c30d220 4758 { VEX_W_TABLE (VEX_W_0F3837_P_2) },
c0f3af97
L
4759 },
4760
592a252b 4761 /* PREFIX_VEX_0F3838 */
c0f3af97 4762 {
592d1631
L
4763 { Bad_Opcode },
4764 { Bad_Opcode },
6c30d220 4765 { VEX_W_TABLE (VEX_W_0F3838_P_2) },
c0f3af97
L
4766 },
4767
592a252b 4768 /* PREFIX_VEX_0F3839 */
c0f3af97 4769 {
592d1631
L
4770 { Bad_Opcode },
4771 { Bad_Opcode },
6c30d220 4772 { VEX_W_TABLE (VEX_W_0F3839_P_2) },
c0f3af97
L
4773 },
4774
592a252b 4775 /* PREFIX_VEX_0F383A */
c0f3af97 4776 {
592d1631
L
4777 { Bad_Opcode },
4778 { Bad_Opcode },
6c30d220 4779 { VEX_W_TABLE (VEX_W_0F383A_P_2) },
c0f3af97
L
4780 },
4781
592a252b 4782 /* PREFIX_VEX_0F383B */
c0f3af97 4783 {
592d1631
L
4784 { Bad_Opcode },
4785 { Bad_Opcode },
6c30d220 4786 { VEX_W_TABLE (VEX_W_0F383B_P_2) },
c0f3af97
L
4787 },
4788
592a252b 4789 /* PREFIX_VEX_0F383C */
c0f3af97 4790 {
592d1631
L
4791 { Bad_Opcode },
4792 { Bad_Opcode },
6c30d220 4793 { VEX_W_TABLE (VEX_W_0F383C_P_2) },
c0f3af97
L
4794 },
4795
592a252b 4796 /* PREFIX_VEX_0F383D */
c0f3af97 4797 {
592d1631
L
4798 { Bad_Opcode },
4799 { Bad_Opcode },
6c30d220 4800 { VEX_W_TABLE (VEX_W_0F383D_P_2) },
c0f3af97
L
4801 },
4802
592a252b 4803 /* PREFIX_VEX_0F383E */
c0f3af97 4804 {
592d1631
L
4805 { Bad_Opcode },
4806 { Bad_Opcode },
6c30d220 4807 { VEX_W_TABLE (VEX_W_0F383E_P_2) },
c0f3af97
L
4808 },
4809
592a252b 4810 /* PREFIX_VEX_0F383F */
c0f3af97 4811 {
592d1631
L
4812 { Bad_Opcode },
4813 { Bad_Opcode },
6c30d220 4814 { VEX_W_TABLE (VEX_W_0F383F_P_2) },
c0f3af97
L
4815 },
4816
592a252b 4817 /* PREFIX_VEX_0F3840 */
c0f3af97 4818 {
592d1631
L
4819 { Bad_Opcode },
4820 { Bad_Opcode },
6c30d220 4821 { VEX_W_TABLE (VEX_W_0F3840_P_2) },
c0f3af97
L
4822 },
4823
592a252b 4824 /* PREFIX_VEX_0F3841 */
c0f3af97 4825 {
592d1631
L
4826 { Bad_Opcode },
4827 { Bad_Opcode },
592a252b 4828 { VEX_LEN_TABLE (VEX_LEN_0F3841_P_2) },
c0f3af97
L
4829 },
4830
6c30d220
L
4831 /* PREFIX_VEX_0F3845 */
4832 {
4833 { Bad_Opcode },
4834 { Bad_Opcode },
4835 { "vpsrlv%LW", { XM, Vex, EXx } },
4836 },
4837
4838 /* PREFIX_VEX_0F3846 */
4839 {
4840 { Bad_Opcode },
4841 { Bad_Opcode },
4842 { VEX_W_TABLE (VEX_W_0F3846_P_2) },
4843 },
4844
4845 /* PREFIX_VEX_0F3847 */
4846 {
4847 { Bad_Opcode },
4848 { Bad_Opcode },
4849 { "vpsllv%LW", { XM, Vex, EXx } },
4850 },
4851
4852 /* PREFIX_VEX_0F3858 */
4853 {
4854 { Bad_Opcode },
4855 { Bad_Opcode },
4856 { VEX_W_TABLE (VEX_W_0F3858_P_2) },
4857 },
4858
4859 /* PREFIX_VEX_0F3859 */
4860 {
4861 { Bad_Opcode },
4862 { Bad_Opcode },
4863 { VEX_W_TABLE (VEX_W_0F3859_P_2) },
4864 },
4865
4866 /* PREFIX_VEX_0F385A */
4867 {
4868 { Bad_Opcode },
4869 { Bad_Opcode },
4870 { MOD_TABLE (MOD_VEX_0F385A_PREFIX_2) },
4871 },
4872
4873 /* PREFIX_VEX_0F3878 */
4874 {
4875 { Bad_Opcode },
4876 { Bad_Opcode },
4877 { VEX_W_TABLE (VEX_W_0F3878_P_2) },
4878 },
4879
4880 /* PREFIX_VEX_0F3879 */
4881 {
4882 { Bad_Opcode },
4883 { Bad_Opcode },
4884 { VEX_W_TABLE (VEX_W_0F3879_P_2) },
4885 },
4886
4887 /* PREFIX_VEX_0F388C */
4888 {
4889 { Bad_Opcode },
4890 { Bad_Opcode },
f7002f42 4891 { MOD_TABLE (MOD_VEX_0F388C_PREFIX_2) },
6c30d220
L
4892 },
4893
4894 /* PREFIX_VEX_0F388E */
4895 {
4896 { Bad_Opcode },
4897 { Bad_Opcode },
f7002f42 4898 { MOD_TABLE (MOD_VEX_0F388E_PREFIX_2) },
6c30d220
L
4899 },
4900
4901 /* PREFIX_VEX_0F3890 */
4902 {
4903 { Bad_Opcode },
4904 { Bad_Opcode },
4905 { "vpgatherd%LW", { XM, MVexVSIBDWpX, Vex } },
4906 },
4907
4908 /* PREFIX_VEX_0F3891 */
4909 {
4910 { Bad_Opcode },
4911 { Bad_Opcode },
4912 { "vpgatherq%LW", { XMGatherQ, MVexVSIBQWpX, VexGatherQ } },
4913 },
4914
4915 /* PREFIX_VEX_0F3892 */
4916 {
4917 { Bad_Opcode },
4918 { Bad_Opcode },
4919 { "vgatherdp%XW", { XM, MVexVSIBDWpX, Vex } },
4920 },
4921
4922 /* PREFIX_VEX_0F3893 */
4923 {
4924 { Bad_Opcode },
4925 { Bad_Opcode },
4926 { "vgatherqp%XW", { XMGatherQ, MVexVSIBQWpX, VexGatherQ } },
4927 },
4928
592a252b 4929 /* PREFIX_VEX_0F3896 */
a5ff0eb2 4930 {
592d1631
L
4931 { Bad_Opcode },
4932 { Bad_Opcode },
0bfee649 4933 { "vfmaddsub132p%XW", { XM, Vex, EXx } },
a5ff0eb2
L
4934 },
4935
592a252b 4936 /* PREFIX_VEX_0F3897 */
a5ff0eb2 4937 {
592d1631
L
4938 { Bad_Opcode },
4939 { Bad_Opcode },
0bfee649 4940 { "vfmsubadd132p%XW", { XM, Vex, EXx } },
a5ff0eb2
L
4941 },
4942
592a252b 4943 /* PREFIX_VEX_0F3898 */
a5ff0eb2 4944 {
592d1631
L
4945 { Bad_Opcode },
4946 { Bad_Opcode },
0bfee649 4947 { "vfmadd132p%XW", { XM, Vex, EXx } },
a5ff0eb2
L
4948 },
4949
592a252b 4950 /* PREFIX_VEX_0F3899 */
a5ff0eb2 4951 {
592d1631
L
4952 { Bad_Opcode },
4953 { Bad_Opcode },
1c480963 4954 { "vfmadd132s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
a5ff0eb2
L
4955 },
4956
592a252b 4957 /* PREFIX_VEX_0F389A */
a5ff0eb2 4958 {
592d1631
L
4959 { Bad_Opcode },
4960 { Bad_Opcode },
0bfee649 4961 { "vfmsub132p%XW", { XM, Vex, EXx } },
a5ff0eb2
L
4962 },
4963
592a252b 4964 /* PREFIX_VEX_0F389B */
c0f3af97 4965 {
592d1631
L
4966 { Bad_Opcode },
4967 { Bad_Opcode },
1c480963 4968 { "vfmsub132s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
c0f3af97
L
4969 },
4970
592a252b 4971 /* PREFIX_VEX_0F389C */
c0f3af97 4972 {
592d1631
L
4973 { Bad_Opcode },
4974 { Bad_Opcode },
0bfee649 4975 { "vfnmadd132p%XW", { XM, Vex, EXx } },
c0f3af97
L
4976 },
4977
592a252b 4978 /* PREFIX_VEX_0F389D */
c0f3af97 4979 {
592d1631
L
4980 { Bad_Opcode },
4981 { Bad_Opcode },
1c480963 4982 { "vfnmadd132s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
c0f3af97
L
4983 },
4984
592a252b 4985 /* PREFIX_VEX_0F389E */
c0f3af97 4986 {
592d1631
L
4987 { Bad_Opcode },
4988 { Bad_Opcode },
0bfee649 4989 { "vfnmsub132p%XW", { XM, Vex, EXx } },
c0f3af97
L
4990 },
4991
592a252b 4992 /* PREFIX_VEX_0F389F */
c0f3af97 4993 {
592d1631
L
4994 { Bad_Opcode },
4995 { Bad_Opcode },
1c480963 4996 { "vfnmsub132s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
c0f3af97
L
4997 },
4998
592a252b 4999 /* PREFIX_VEX_0F38A6 */
c0f3af97 5000 {
592d1631
L
5001 { Bad_Opcode },
5002 { Bad_Opcode },
0bfee649 5003 { "vfmaddsub213p%XW", { XM, Vex, EXx } },
592d1631 5004 { Bad_Opcode },
c0f3af97
L
5005 },
5006
592a252b 5007 /* PREFIX_VEX_0F38A7 */
c0f3af97 5008 {
592d1631
L
5009 { Bad_Opcode },
5010 { Bad_Opcode },
0bfee649 5011 { "vfmsubadd213p%XW", { XM, Vex, EXx } },
c0f3af97
L
5012 },
5013
592a252b 5014 /* PREFIX_VEX_0F38A8 */
c0f3af97 5015 {
592d1631
L
5016 { Bad_Opcode },
5017 { Bad_Opcode },
0bfee649 5018 { "vfmadd213p%XW", { XM, Vex, EXx } },
c0f3af97
L
5019 },
5020
592a252b 5021 /* PREFIX_VEX_0F38A9 */
c0f3af97 5022 {
592d1631
L
5023 { Bad_Opcode },
5024 { Bad_Opcode },
1c480963 5025 { "vfmadd213s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
c0f3af97
L
5026 },
5027
592a252b 5028 /* PREFIX_VEX_0F38AA */
c0f3af97 5029 {
592d1631
L
5030 { Bad_Opcode },
5031 { Bad_Opcode },
0bfee649 5032 { "vfmsub213p%XW", { XM, Vex, EXx } },
c0f3af97
L
5033 },
5034
592a252b 5035 /* PREFIX_VEX_0F38AB */
c0f3af97 5036 {
592d1631
L
5037 { Bad_Opcode },
5038 { Bad_Opcode },
1c480963 5039 { "vfmsub213s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
c0f3af97
L
5040 },
5041
592a252b 5042 /* PREFIX_VEX_0F38AC */
c0f3af97 5043 {
592d1631
L
5044 { Bad_Opcode },
5045 { Bad_Opcode },
0bfee649 5046 { "vfnmadd213p%XW", { XM, Vex, EXx } },
c0f3af97
L
5047 },
5048
592a252b 5049 /* PREFIX_VEX_0F38AD */
c0f3af97 5050 {
592d1631
L
5051 { Bad_Opcode },
5052 { Bad_Opcode },
1c480963 5053 { "vfnmadd213s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
c0f3af97
L
5054 },
5055
592a252b 5056 /* PREFIX_VEX_0F38AE */
c0f3af97 5057 {
592d1631
L
5058 { Bad_Opcode },
5059 { Bad_Opcode },
0bfee649 5060 { "vfnmsub213p%XW", { XM, Vex, EXx } },
c0f3af97
L
5061 },
5062
592a252b 5063 /* PREFIX_VEX_0F38AF */
c0f3af97 5064 {
592d1631
L
5065 { Bad_Opcode },
5066 { Bad_Opcode },
1c480963 5067 { "vfnmsub213s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
c0f3af97
L
5068 },
5069
592a252b 5070 /* PREFIX_VEX_0F38B6 */
c0f3af97 5071 {
592d1631
L
5072 { Bad_Opcode },
5073 { Bad_Opcode },
0bfee649 5074 { "vfmaddsub231p%XW", { XM, Vex, EXx } },
c0f3af97
L
5075 },
5076
592a252b 5077 /* PREFIX_VEX_0F38B7 */
c0f3af97 5078 {
592d1631
L
5079 { Bad_Opcode },
5080 { Bad_Opcode },
0bfee649 5081 { "vfmsubadd231p%XW", { XM, Vex, EXx } },
c0f3af97
L
5082 },
5083
592a252b 5084 /* PREFIX_VEX_0F38B8 */
c0f3af97 5085 {
592d1631
L
5086 { Bad_Opcode },
5087 { Bad_Opcode },
0bfee649 5088 { "vfmadd231p%XW", { XM, Vex, EXx } },
c0f3af97
L
5089 },
5090
592a252b 5091 /* PREFIX_VEX_0F38B9 */
c0f3af97 5092 {
592d1631
L
5093 { Bad_Opcode },
5094 { Bad_Opcode },
1c480963 5095 { "vfmadd231s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
c0f3af97
L
5096 },
5097
592a252b 5098 /* PREFIX_VEX_0F38BA */
c0f3af97 5099 {
592d1631
L
5100 { Bad_Opcode },
5101 { Bad_Opcode },
0bfee649 5102 { "vfmsub231p%XW", { XM, Vex, EXx } },
c0f3af97
L
5103 },
5104
592a252b 5105 /* PREFIX_VEX_0F38BB */
c0f3af97 5106 {
592d1631
L
5107 { Bad_Opcode },
5108 { Bad_Opcode },
1c480963 5109 { "vfmsub231s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
c0f3af97
L
5110 },
5111
592a252b 5112 /* PREFIX_VEX_0F38BC */
c0f3af97 5113 {
592d1631
L
5114 { Bad_Opcode },
5115 { Bad_Opcode },
0bfee649 5116 { "vfnmadd231p%XW", { XM, Vex, EXx } },
c0f3af97
L
5117 },
5118
592a252b 5119 /* PREFIX_VEX_0F38BD */
c0f3af97 5120 {
592d1631
L
5121 { Bad_Opcode },
5122 { Bad_Opcode },
1c480963 5123 { "vfnmadd231s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
c0f3af97
L
5124 },
5125
592a252b 5126 /* PREFIX_VEX_0F38BE */
c0f3af97 5127 {
592d1631
L
5128 { Bad_Opcode },
5129 { Bad_Opcode },
0bfee649 5130 { "vfnmsub231p%XW", { XM, Vex, EXx } },
c0f3af97
L
5131 },
5132
592a252b 5133 /* PREFIX_VEX_0F38BF */
c0f3af97 5134 {
592d1631
L
5135 { Bad_Opcode },
5136 { Bad_Opcode },
1c480963 5137 { "vfnmsub231s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
c0f3af97
L
5138 },
5139
592a252b 5140 /* PREFIX_VEX_0F38DB */
c0f3af97 5141 {
592d1631
L
5142 { Bad_Opcode },
5143 { Bad_Opcode },
592a252b 5144 { VEX_LEN_TABLE (VEX_LEN_0F38DB_P_2) },
c0f3af97
L
5145 },
5146
592a252b 5147 /* PREFIX_VEX_0F38DC */
c0f3af97 5148 {
592d1631
L
5149 { Bad_Opcode },
5150 { Bad_Opcode },
592a252b 5151 { VEX_LEN_TABLE (VEX_LEN_0F38DC_P_2) },
c0f3af97
L
5152 },
5153
592a252b 5154 /* PREFIX_VEX_0F38DD */
c0f3af97 5155 {
592d1631
L
5156 { Bad_Opcode },
5157 { Bad_Opcode },
592a252b 5158 { VEX_LEN_TABLE (VEX_LEN_0F38DD_P_2) },
c0f3af97
L
5159 },
5160
592a252b 5161 /* PREFIX_VEX_0F38DE */
c0f3af97 5162 {
592d1631
L
5163 { Bad_Opcode },
5164 { Bad_Opcode },
592a252b 5165 { VEX_LEN_TABLE (VEX_LEN_0F38DE_P_2) },
c0f3af97
L
5166 },
5167
592a252b 5168 /* PREFIX_VEX_0F38DF */
c0f3af97 5169 {
592d1631
L
5170 { Bad_Opcode },
5171 { Bad_Opcode },
592a252b 5172 { VEX_LEN_TABLE (VEX_LEN_0F38DF_P_2) },
c0f3af97
L
5173 },
5174
f12dc422
L
5175 /* PREFIX_VEX_0F38F2 */
5176 {
5177 { VEX_LEN_TABLE (VEX_LEN_0F38F2_P_0) },
5178 },
5179
5180 /* PREFIX_VEX_0F38F3_REG_1 */
5181 {
5182 { VEX_LEN_TABLE (VEX_LEN_0F38F3_R_1_P_0) },
5183 },
5184
5185 /* PREFIX_VEX_0F38F3_REG_2 */
5186 {
5187 { VEX_LEN_TABLE (VEX_LEN_0F38F3_R_2_P_0) },
5188 },
5189
5190 /* PREFIX_VEX_0F38F3_REG_3 */
5191 {
5192 { VEX_LEN_TABLE (VEX_LEN_0F38F3_R_3_P_0) },
5193 },
5194
6c30d220
L
5195 /* PREFIX_VEX_0F38F5 */
5196 {
5197 { VEX_LEN_TABLE (VEX_LEN_0F38F5_P_0) },
5198 { VEX_LEN_TABLE (VEX_LEN_0F38F5_P_1) },
5199 { Bad_Opcode },
5200 { VEX_LEN_TABLE (VEX_LEN_0F38F5_P_3) },
5201 },
5202
5203 /* PREFIX_VEX_0F38F6 */
5204 {
5205 { Bad_Opcode },
5206 { Bad_Opcode },
5207 { Bad_Opcode },
5208 { VEX_LEN_TABLE (VEX_LEN_0F38F6_P_3) },
5209 },
5210
f12dc422
L
5211 /* PREFIX_VEX_0F38F7 */
5212 {
5213 { VEX_LEN_TABLE (VEX_LEN_0F38F7_P_0) },
6c30d220
L
5214 { VEX_LEN_TABLE (VEX_LEN_0F38F7_P_1) },
5215 { VEX_LEN_TABLE (VEX_LEN_0F38F7_P_2) },
5216 { VEX_LEN_TABLE (VEX_LEN_0F38F7_P_3) },
5217 },
5218
5219 /* PREFIX_VEX_0F3A00 */
5220 {
5221 { Bad_Opcode },
5222 { Bad_Opcode },
5223 { VEX_LEN_TABLE (VEX_LEN_0F3A00_P_2) },
5224 },
5225
5226 /* PREFIX_VEX_0F3A01 */
5227 {
5228 { Bad_Opcode },
5229 { Bad_Opcode },
5230 { VEX_LEN_TABLE (VEX_LEN_0F3A01_P_2) },
5231 },
5232
5233 /* PREFIX_VEX_0F3A02 */
5234 {
5235 { Bad_Opcode },
5236 { Bad_Opcode },
5237 { VEX_W_TABLE (VEX_W_0F3A02_P_2) },
f12dc422
L
5238 },
5239
592a252b 5240 /* PREFIX_VEX_0F3A04 */
c0f3af97 5241 {
592d1631
L
5242 { Bad_Opcode },
5243 { Bad_Opcode },
592a252b 5244 { VEX_W_TABLE (VEX_W_0F3A04_P_2) },
c0f3af97
L
5245 },
5246
592a252b 5247 /* PREFIX_VEX_0F3A05 */
c0f3af97 5248 {
592d1631
L
5249 { Bad_Opcode },
5250 { Bad_Opcode },
592a252b 5251 { VEX_W_TABLE (VEX_W_0F3A05_P_2) },
c0f3af97
L
5252 },
5253
592a252b 5254 /* PREFIX_VEX_0F3A06 */
c0f3af97 5255 {
592d1631
L
5256 { Bad_Opcode },
5257 { Bad_Opcode },
592a252b 5258 { VEX_LEN_TABLE (VEX_LEN_0F3A06_P_2) },
c0f3af97
L
5259 },
5260
592a252b 5261 /* PREFIX_VEX_0F3A08 */
c0f3af97 5262 {
592d1631
L
5263 { Bad_Opcode },
5264 { Bad_Opcode },
592a252b 5265 { VEX_W_TABLE (VEX_W_0F3A08_P_2) },
c0f3af97
L
5266 },
5267
592a252b 5268 /* PREFIX_VEX_0F3A09 */
c0f3af97 5269 {
592d1631
L
5270 { Bad_Opcode },
5271 { Bad_Opcode },
592a252b 5272 { VEX_W_TABLE (VEX_W_0F3A09_P_2) },
c0f3af97
L
5273 },
5274
592a252b 5275 /* PREFIX_VEX_0F3A0A */
c0f3af97 5276 {
592d1631
L
5277 { Bad_Opcode },
5278 { Bad_Opcode },
592a252b 5279 { VEX_LEN_TABLE (VEX_LEN_0F3A0A_P_2) },
0bfee649
L
5280 },
5281
592a252b 5282 /* PREFIX_VEX_0F3A0B */
0bfee649 5283 {
592d1631
L
5284 { Bad_Opcode },
5285 { Bad_Opcode },
592a252b 5286 { VEX_LEN_TABLE (VEX_LEN_0F3A0B_P_2) },
0bfee649
L
5287 },
5288
592a252b 5289 /* PREFIX_VEX_0F3A0C */
0bfee649 5290 {
592d1631
L
5291 { Bad_Opcode },
5292 { Bad_Opcode },
592a252b 5293 { VEX_W_TABLE (VEX_W_0F3A0C_P_2) },
0bfee649
L
5294 },
5295
592a252b 5296 /* PREFIX_VEX_0F3A0D */
0bfee649 5297 {
592d1631
L
5298 { Bad_Opcode },
5299 { Bad_Opcode },
592a252b 5300 { VEX_W_TABLE (VEX_W_0F3A0D_P_2) },
c0f3af97
L
5301 },
5302
592a252b 5303 /* PREFIX_VEX_0F3A0E */
0bfee649 5304 {
592d1631
L
5305 { Bad_Opcode },
5306 { Bad_Opcode },
6c30d220 5307 { VEX_W_TABLE (VEX_W_0F3A0E_P_2) },
0bfee649
L
5308 },
5309
592a252b 5310 /* PREFIX_VEX_0F3A0F */
0bfee649 5311 {
592d1631
L
5312 { Bad_Opcode },
5313 { Bad_Opcode },
6c30d220 5314 { VEX_W_TABLE (VEX_W_0F3A0F_P_2) },
0bfee649
L
5315 },
5316
592a252b 5317 /* PREFIX_VEX_0F3A14 */
0bfee649 5318 {
592d1631
L
5319 { Bad_Opcode },
5320 { Bad_Opcode },
592a252b 5321 { VEX_LEN_TABLE (VEX_LEN_0F3A14_P_2) },
0bfee649
L
5322 },
5323
592a252b 5324 /* PREFIX_VEX_0F3A15 */
0bfee649 5325 {
592d1631
L
5326 { Bad_Opcode },
5327 { Bad_Opcode },
592a252b 5328 { VEX_LEN_TABLE (VEX_LEN_0F3A15_P_2) },
0bfee649
L
5329 },
5330
592a252b 5331 /* PREFIX_VEX_0F3A16 */
c0f3af97 5332 {
592d1631
L
5333 { Bad_Opcode },
5334 { Bad_Opcode },
592a252b 5335 { VEX_LEN_TABLE (VEX_LEN_0F3A16_P_2) },
c0f3af97
L
5336 },
5337
592a252b 5338 /* PREFIX_VEX_0F3A17 */
c0f3af97 5339 {
592d1631
L
5340 { Bad_Opcode },
5341 { Bad_Opcode },
592a252b 5342 { VEX_LEN_TABLE (VEX_LEN_0F3A17_P_2) },
c0f3af97
L
5343 },
5344
592a252b 5345 /* PREFIX_VEX_0F3A18 */
c0f3af97 5346 {
592d1631
L
5347 { Bad_Opcode },
5348 { Bad_Opcode },
592a252b 5349 { VEX_LEN_TABLE (VEX_LEN_0F3A18_P_2) },
c0f3af97
L
5350 },
5351
592a252b 5352 /* PREFIX_VEX_0F3A19 */
c0f3af97 5353 {
592d1631
L
5354 { Bad_Opcode },
5355 { Bad_Opcode },
592a252b 5356 { VEX_LEN_TABLE (VEX_LEN_0F3A19_P_2) },
c0f3af97
L
5357 },
5358
592a252b 5359 /* PREFIX_VEX_0F3A1D */
c7b8aa3a
L
5360 {
5361 { Bad_Opcode },
5362 { Bad_Opcode },
5363 { "vcvtps2ph", { EXxmmq, XM, Ib } },
5364 },
5365
592a252b 5366 /* PREFIX_VEX_0F3A20 */
c0f3af97 5367 {
592d1631
L
5368 { Bad_Opcode },
5369 { Bad_Opcode },
592a252b 5370 { VEX_LEN_TABLE (VEX_LEN_0F3A20_P_2) },
c0f3af97
L
5371 },
5372
592a252b 5373 /* PREFIX_VEX_0F3A21 */
c0f3af97 5374 {
592d1631
L
5375 { Bad_Opcode },
5376 { Bad_Opcode },
592a252b 5377 { VEX_LEN_TABLE (VEX_LEN_0F3A21_P_2) },
c0f3af97
L
5378 },
5379
592a252b 5380 /* PREFIX_VEX_0F3A22 */
0bfee649 5381 {
592d1631
L
5382 { Bad_Opcode },
5383 { Bad_Opcode },
592a252b 5384 { VEX_LEN_TABLE (VEX_LEN_0F3A22_P_2) },
0bfee649
L
5385 },
5386
6c30d220
L
5387 /* PREFIX_VEX_0F3A38 */
5388 {
5389 { Bad_Opcode },
5390 { Bad_Opcode },
5391 { VEX_LEN_TABLE (VEX_LEN_0F3A38_P_2) },
5392 },
5393
5394 /* PREFIX_VEX_0F3A39 */
5395 {
5396 { Bad_Opcode },
5397 { Bad_Opcode },
5398 { VEX_LEN_TABLE (VEX_LEN_0F3A39_P_2) },
5399 },
5400
592a252b 5401 /* PREFIX_VEX_0F3A40 */
c0f3af97 5402 {
592d1631
L
5403 { Bad_Opcode },
5404 { Bad_Opcode },
592a252b 5405 { VEX_W_TABLE (VEX_W_0F3A40_P_2) },
c0f3af97
L
5406 },
5407
592a252b 5408 /* PREFIX_VEX_0F3A41 */
c0f3af97 5409 {
592d1631
L
5410 { Bad_Opcode },
5411 { Bad_Opcode },
592a252b 5412 { VEX_LEN_TABLE (VEX_LEN_0F3A41_P_2) },
c0f3af97
L
5413 },
5414
592a252b 5415 /* PREFIX_VEX_0F3A42 */
c0f3af97 5416 {
592d1631
L
5417 { Bad_Opcode },
5418 { Bad_Opcode },
6c30d220 5419 { VEX_W_TABLE (VEX_W_0F3A42_P_2) },
c0f3af97
L
5420 },
5421
592a252b 5422 /* PREFIX_VEX_0F3A44 */
ce2f5b3c 5423 {
592d1631
L
5424 { Bad_Opcode },
5425 { Bad_Opcode },
592a252b 5426 { VEX_LEN_TABLE (VEX_LEN_0F3A44_P_2) },
ce2f5b3c
L
5427 },
5428
6c30d220
L
5429 /* PREFIX_VEX_0F3A46 */
5430 {
5431 { Bad_Opcode },
5432 { Bad_Opcode },
5433 { VEX_LEN_TABLE (VEX_LEN_0F3A46_P_2) },
5434 },
5435
592a252b 5436 /* PREFIX_VEX_0F3A48 */
a683cc34
SP
5437 {
5438 { Bad_Opcode },
5439 { Bad_Opcode },
592a252b 5440 { VEX_W_TABLE (VEX_W_0F3A48_P_2) },
a683cc34
SP
5441 },
5442
592a252b 5443 /* PREFIX_VEX_0F3A49 */
a683cc34
SP
5444 {
5445 { Bad_Opcode },
5446 { Bad_Opcode },
592a252b 5447 { VEX_W_TABLE (VEX_W_0F3A49_P_2) },
a683cc34
SP
5448 },
5449
592a252b 5450 /* PREFIX_VEX_0F3A4A */
c0f3af97 5451 {
592d1631
L
5452 { Bad_Opcode },
5453 { Bad_Opcode },
592a252b 5454 { VEX_W_TABLE (VEX_W_0F3A4A_P_2) },
c0f3af97
L
5455 },
5456
592a252b 5457 /* PREFIX_VEX_0F3A4B */
c0f3af97 5458 {
592d1631
L
5459 { Bad_Opcode },
5460 { Bad_Opcode },
592a252b 5461 { VEX_W_TABLE (VEX_W_0F3A4B_P_2) },
c0f3af97
L
5462 },
5463
592a252b 5464 /* PREFIX_VEX_0F3A4C */
c0f3af97 5465 {
592d1631
L
5466 { Bad_Opcode },
5467 { Bad_Opcode },
6c30d220 5468 { VEX_W_TABLE (VEX_W_0F3A4C_P_2) },
c0f3af97
L
5469 },
5470
592a252b 5471 /* PREFIX_VEX_0F3A5C */
922d8de8 5472 {
592d1631
L
5473 { Bad_Opcode },
5474 { Bad_Opcode },
206c2556 5475 { "vfmaddsubps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
922d8de8
DR
5476 },
5477
592a252b 5478 /* PREFIX_VEX_0F3A5D */
922d8de8 5479 {
592d1631
L
5480 { Bad_Opcode },
5481 { Bad_Opcode },
206c2556 5482 { "vfmaddsubpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
922d8de8
DR
5483 },
5484
592a252b 5485 /* PREFIX_VEX_0F3A5E */
922d8de8 5486 {
592d1631
L
5487 { Bad_Opcode },
5488 { Bad_Opcode },
206c2556 5489 { "vfmsubaddps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
922d8de8
DR
5490 },
5491
592a252b 5492 /* PREFIX_VEX_0F3A5F */
922d8de8 5493 {
592d1631
L
5494 { Bad_Opcode },
5495 { Bad_Opcode },
206c2556 5496 { "vfmsubaddpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
922d8de8
DR
5497 },
5498
592a252b 5499 /* PREFIX_VEX_0F3A60 */
c0f3af97 5500 {
592d1631
L
5501 { Bad_Opcode },
5502 { Bad_Opcode },
592a252b 5503 { VEX_LEN_TABLE (VEX_LEN_0F3A60_P_2) },
592d1631 5504 { Bad_Opcode },
c0f3af97
L
5505 },
5506
592a252b 5507 /* PREFIX_VEX_0F3A61 */
c0f3af97 5508 {
592d1631
L
5509 { Bad_Opcode },
5510 { Bad_Opcode },
592a252b 5511 { VEX_LEN_TABLE (VEX_LEN_0F3A61_P_2) },
c0f3af97
L
5512 },
5513
592a252b 5514 /* PREFIX_VEX_0F3A62 */
c0f3af97 5515 {
592d1631
L
5516 { Bad_Opcode },
5517 { Bad_Opcode },
592a252b 5518 { VEX_LEN_TABLE (VEX_LEN_0F3A62_P_2) },
c0f3af97
L
5519 },
5520
592a252b 5521 /* PREFIX_VEX_0F3A63 */
c0f3af97 5522 {
592d1631
L
5523 { Bad_Opcode },
5524 { Bad_Opcode },
592a252b 5525 { VEX_LEN_TABLE (VEX_LEN_0F3A63_P_2) },
c0f3af97 5526 },
a5ff0eb2 5527
592a252b 5528 /* PREFIX_VEX_0F3A68 */
922d8de8 5529 {
592d1631
L
5530 { Bad_Opcode },
5531 { Bad_Opcode },
206c2556 5532 { "vfmaddps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
922d8de8
DR
5533 },
5534
592a252b 5535 /* PREFIX_VEX_0F3A69 */
922d8de8 5536 {
592d1631
L
5537 { Bad_Opcode },
5538 { Bad_Opcode },
206c2556 5539 { "vfmaddpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
922d8de8
DR
5540 },
5541
592a252b 5542 /* PREFIX_VEX_0F3A6A */
922d8de8 5543 {
592d1631
L
5544 { Bad_Opcode },
5545 { Bad_Opcode },
592a252b 5546 { VEX_LEN_TABLE (VEX_LEN_0F3A6A_P_2) },
922d8de8
DR
5547 },
5548
592a252b 5549 /* PREFIX_VEX_0F3A6B */
922d8de8 5550 {
592d1631
L
5551 { Bad_Opcode },
5552 { Bad_Opcode },
592a252b 5553 { VEX_LEN_TABLE (VEX_LEN_0F3A6B_P_2) },
922d8de8
DR
5554 },
5555
592a252b 5556 /* PREFIX_VEX_0F3A6C */
922d8de8 5557 {
592d1631
L
5558 { Bad_Opcode },
5559 { Bad_Opcode },
206c2556 5560 { "vfmsubps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
922d8de8
DR
5561 },
5562
592a252b 5563 /* PREFIX_VEX_0F3A6D */
922d8de8 5564 {
592d1631
L
5565 { Bad_Opcode },
5566 { Bad_Opcode },
206c2556 5567 { "vfmsubpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
922d8de8
DR
5568 },
5569
592a252b 5570 /* PREFIX_VEX_0F3A6E */
922d8de8 5571 {
592d1631
L
5572 { Bad_Opcode },
5573 { Bad_Opcode },
592a252b 5574 { VEX_LEN_TABLE (VEX_LEN_0F3A6E_P_2) },
922d8de8
DR
5575 },
5576
592a252b 5577 /* PREFIX_VEX_0F3A6F */
922d8de8 5578 {
592d1631
L
5579 { Bad_Opcode },
5580 { Bad_Opcode },
592a252b 5581 { VEX_LEN_TABLE (VEX_LEN_0F3A6F_P_2) },
922d8de8
DR
5582 },
5583
592a252b 5584 /* PREFIX_VEX_0F3A78 */
922d8de8 5585 {
592d1631
L
5586 { Bad_Opcode },
5587 { Bad_Opcode },
206c2556 5588 { "vfnmaddps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
922d8de8
DR
5589 },
5590
592a252b 5591 /* PREFIX_VEX_0F3A79 */
922d8de8 5592 {
592d1631
L
5593 { Bad_Opcode },
5594 { Bad_Opcode },
206c2556 5595 { "vfnmaddpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
922d8de8
DR
5596 },
5597
592a252b 5598 /* PREFIX_VEX_0F3A7A */
922d8de8 5599 {
592d1631
L
5600 { Bad_Opcode },
5601 { Bad_Opcode },
592a252b 5602 { VEX_LEN_TABLE (VEX_LEN_0F3A7A_P_2) },
922d8de8
DR
5603 },
5604
592a252b 5605 /* PREFIX_VEX_0F3A7B */
922d8de8 5606 {
592d1631
L
5607 { Bad_Opcode },
5608 { Bad_Opcode },
592a252b 5609 { VEX_LEN_TABLE (VEX_LEN_0F3A7B_P_2) },
922d8de8
DR
5610 },
5611
592a252b 5612 /* PREFIX_VEX_0F3A7C */
922d8de8 5613 {
592d1631
L
5614 { Bad_Opcode },
5615 { Bad_Opcode },
206c2556 5616 { "vfnmsubps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
592d1631 5617 { Bad_Opcode },
922d8de8
DR
5618 },
5619
592a252b 5620 /* PREFIX_VEX_0F3A7D */
922d8de8 5621 {
592d1631
L
5622 { Bad_Opcode },
5623 { Bad_Opcode },
206c2556 5624 { "vfnmsubpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
922d8de8
DR
5625 },
5626
592a252b 5627 /* PREFIX_VEX_0F3A7E */
922d8de8 5628 {
592d1631
L
5629 { Bad_Opcode },
5630 { Bad_Opcode },
592a252b 5631 { VEX_LEN_TABLE (VEX_LEN_0F3A7E_P_2) },
922d8de8
DR
5632 },
5633
592a252b 5634 /* PREFIX_VEX_0F3A7F */
922d8de8 5635 {
592d1631
L
5636 { Bad_Opcode },
5637 { Bad_Opcode },
592a252b 5638 { VEX_LEN_TABLE (VEX_LEN_0F3A7F_P_2) },
922d8de8
DR
5639 },
5640
592a252b 5641 /* PREFIX_VEX_0F3ADF */
a5ff0eb2 5642 {
592d1631
L
5643 { Bad_Opcode },
5644 { Bad_Opcode },
592a252b 5645 { VEX_LEN_TABLE (VEX_LEN_0F3ADF_P_2) },
a5ff0eb2 5646 },
6c30d220
L
5647
5648 /* PREFIX_VEX_0F3AF0 */
5649 {
5650 { Bad_Opcode },
5651 { Bad_Opcode },
5652 { Bad_Opcode },
5653 { VEX_LEN_TABLE (VEX_LEN_0F3AF0_P_3) },
5654 },
c0f3af97
L
5655};
5656
5657static const struct dis386 x86_64_table[][2] = {
5658 /* X86_64_06 */
5659 {
d9e3625e 5660 { "pushP", { es } },
c0f3af97
L
5661 },
5662
5663 /* X86_64_07 */
5664 {
d9e3625e 5665 { "popP", { es } },
c0f3af97
L
5666 },
5667
5668 /* X86_64_0D */
5669 {
d9e3625e 5670 { "pushP", { cs } },
c0f3af97
L
5671 },
5672
5673 /* X86_64_16 */
5674 {
d9e3625e 5675 { "pushP", { ss } },
c0f3af97
L
5676 },
5677
5678 /* X86_64_17 */
5679 {
d9e3625e 5680 { "popP", { ss } },
c0f3af97
L
5681 },
5682
5683 /* X86_64_1E */
5684 {
d9e3625e 5685 { "pushP", { ds } },
c0f3af97
L
5686 },
5687
5688 /* X86_64_1F */
5689 {
d9e3625e 5690 { "popP", { ds } },
c0f3af97
L
5691 },
5692
5693 /* X86_64_27 */
5694 {
5695 { "daa", { XX } },
c0f3af97
L
5696 },
5697
5698 /* X86_64_2F */
5699 {
5700 { "das", { XX } },
c0f3af97
L
5701 },
5702
5703 /* X86_64_37 */
5704 {
5705 { "aaa", { XX } },
c0f3af97
L
5706 },
5707
5708 /* X86_64_3F */
5709 {
5710 { "aas", { XX } },
c0f3af97
L
5711 },
5712
5713 /* X86_64_60 */
5714 {
d9e3625e 5715 { "pushaP", { XX } },
c0f3af97
L
5716 },
5717
5718 /* X86_64_61 */
5719 {
d9e3625e 5720 { "popaP", { XX } },
c0f3af97
L
5721 },
5722
5723 /* X86_64_62 */
5724 {
5725 { MOD_TABLE (MOD_62_32BIT) },
c0f3af97
L
5726 },
5727
5728 /* X86_64_63 */
5729 {
5730 { "arpl", { Ew, Gw } },
5731 { "movs{lq|xd}", { Gv, Ed } },
5732 },
5733
5734 /* X86_64_6D */
5735 {
5736 { "ins{R|}", { Yzr, indirDX } },
5737 { "ins{G|}", { Yzr, indirDX } },
5738 },
5739
5740 /* X86_64_6F */
5741 {
5742 { "outs{R|}", { indirDXr, Xz } },
5743 { "outs{G|}", { indirDXr, Xz } },
5744 },
5745
5746 /* X86_64_9A */
5747 {
5748 { "Jcall{T|}", { Ap } },
c0f3af97
L
5749 },
5750
5751 /* X86_64_C4 */
5752 {
5753 { MOD_TABLE (MOD_C4_32BIT) },
5754 { VEX_C4_TABLE (VEX_0F) },
5755 },
5756
5757 /* X86_64_C5 */
5758 {
5759 { MOD_TABLE (MOD_C5_32BIT) },
5760 { VEX_C5_TABLE (VEX_0F) },
5761 },
5762
5763 /* X86_64_CE */
5764 {
5765 { "into", { XX } },
c0f3af97
L
5766 },
5767
5768 /* X86_64_D4 */
5769 {
e3949f17 5770 { "aam", { Ib } },
c0f3af97
L
5771 },
5772
5773 /* X86_64_D5 */
5774 {
e3949f17 5775 { "aad", { Ib } },
c0f3af97
L
5776 },
5777
5778 /* X86_64_EA */
5779 {
5780 { "Jjmp{T|}", { Ap } },
c0f3af97
L
5781 },
5782
5783 /* X86_64_0F01_REG_0 */
5784 {
5785 { "sgdt{Q|IQ}", { M } },
5786 { "sgdt", { M } },
5787 },
5788
5789 /* X86_64_0F01_REG_1 */
5790 {
5791 { "sidt{Q|IQ}", { M } },
5792 { "sidt", { M } },
5793 },
5794
5795 /* X86_64_0F01_REG_2 */
5796 {
5797 { "lgdt{Q|Q}", { M } },
5798 { "lgdt", { M } },
5799 },
5800
5801 /* X86_64_0F01_REG_3 */
5802 {
5803 { "lidt{Q|Q}", { M } },
5804 { "lidt", { M } },
5805 },
5806};
5807
5808static const struct dis386 three_byte_table[][256] = {
c1e679ec
DR
5809
5810 /* THREE_BYTE_0F38 */
c0f3af97
L
5811 {
5812 /* 00 */
c1e679ec
DR
5813 { "pshufb", { MX, EM } },
5814 { "phaddw", { MX, EM } },
5815 { "phaddd", { MX, EM } },
5816 { "phaddsw", { MX, EM } },
5817 { "pmaddubsw", { MX, EM } },
5818 { "phsubw", { MX, EM } },
5819 { "phsubd", { MX, EM } },
5820 { "phsubsw", { MX, EM } },
c0f3af97 5821 /* 08 */
c1e679ec
DR
5822 { "psignb", { MX, EM } },
5823 { "psignw", { MX, EM } },
5824 { "psignd", { MX, EM } },
5825 { "pmulhrsw", { MX, EM } },
592d1631
L
5826 { Bad_Opcode },
5827 { Bad_Opcode },
5828 { Bad_Opcode },
5829 { Bad_Opcode },
f88c9eb0
SP
5830 /* 10 */
5831 { PREFIX_TABLE (PREFIX_0F3810) },
592d1631
L
5832 { Bad_Opcode },
5833 { Bad_Opcode },
5834 { Bad_Opcode },
f88c9eb0
SP
5835 { PREFIX_TABLE (PREFIX_0F3814) },
5836 { PREFIX_TABLE (PREFIX_0F3815) },
592d1631 5837 { Bad_Opcode },
f88c9eb0
SP
5838 { PREFIX_TABLE (PREFIX_0F3817) },
5839 /* 18 */
592d1631
L
5840 { Bad_Opcode },
5841 { Bad_Opcode },
5842 { Bad_Opcode },
5843 { Bad_Opcode },
f88c9eb0
SP
5844 { "pabsb", { MX, EM } },
5845 { "pabsw", { MX, EM } },
5846 { "pabsd", { MX, EM } },
592d1631 5847 { Bad_Opcode },
f88c9eb0
SP
5848 /* 20 */
5849 { PREFIX_TABLE (PREFIX_0F3820) },
5850 { PREFIX_TABLE (PREFIX_0F3821) },
5851 { PREFIX_TABLE (PREFIX_0F3822) },
5852 { PREFIX_TABLE (PREFIX_0F3823) },
5853 { PREFIX_TABLE (PREFIX_0F3824) },
5854 { PREFIX_TABLE (PREFIX_0F3825) },
592d1631
L
5855 { Bad_Opcode },
5856 { Bad_Opcode },
f88c9eb0
SP
5857 /* 28 */
5858 { PREFIX_TABLE (PREFIX_0F3828) },
5859 { PREFIX_TABLE (PREFIX_0F3829) },
5860 { PREFIX_TABLE (PREFIX_0F382A) },
5861 { PREFIX_TABLE (PREFIX_0F382B) },
592d1631
L
5862 { Bad_Opcode },
5863 { Bad_Opcode },
5864 { Bad_Opcode },
5865 { Bad_Opcode },
f88c9eb0
SP
5866 /* 30 */
5867 { PREFIX_TABLE (PREFIX_0F3830) },
5868 { PREFIX_TABLE (PREFIX_0F3831) },
5869 { PREFIX_TABLE (PREFIX_0F3832) },
5870 { PREFIX_TABLE (PREFIX_0F3833) },
5871 { PREFIX_TABLE (PREFIX_0F3834) },
5872 { PREFIX_TABLE (PREFIX_0F3835) },
592d1631 5873 { Bad_Opcode },
f88c9eb0
SP
5874 { PREFIX_TABLE (PREFIX_0F3837) },
5875 /* 38 */
5876 { PREFIX_TABLE (PREFIX_0F3838) },
5877 { PREFIX_TABLE (PREFIX_0F3839) },
5878 { PREFIX_TABLE (PREFIX_0F383A) },
5879 { PREFIX_TABLE (PREFIX_0F383B) },
5880 { PREFIX_TABLE (PREFIX_0F383C) },
5881 { PREFIX_TABLE (PREFIX_0F383D) },
5882 { PREFIX_TABLE (PREFIX_0F383E) },
5883 { PREFIX_TABLE (PREFIX_0F383F) },
5884 /* 40 */
5885 { PREFIX_TABLE (PREFIX_0F3840) },
5886 { PREFIX_TABLE (PREFIX_0F3841) },
592d1631
L
5887 { Bad_Opcode },
5888 { Bad_Opcode },
5889 { Bad_Opcode },
5890 { Bad_Opcode },
5891 { Bad_Opcode },
5892 { Bad_Opcode },
f88c9eb0 5893 /* 48 */
592d1631
L
5894 { Bad_Opcode },
5895 { Bad_Opcode },
5896 { Bad_Opcode },
5897 { Bad_Opcode },
5898 { Bad_Opcode },
5899 { Bad_Opcode },
5900 { Bad_Opcode },
5901 { Bad_Opcode },
f88c9eb0 5902 /* 50 */
592d1631
L
5903 { Bad_Opcode },
5904 { Bad_Opcode },
5905 { Bad_Opcode },
5906 { Bad_Opcode },
5907 { Bad_Opcode },
5908 { Bad_Opcode },
5909 { Bad_Opcode },
5910 { Bad_Opcode },
f88c9eb0 5911 /* 58 */
592d1631
L
5912 { Bad_Opcode },
5913 { Bad_Opcode },
5914 { Bad_Opcode },
5915 { Bad_Opcode },
5916 { Bad_Opcode },
5917 { Bad_Opcode },
5918 { Bad_Opcode },
5919 { Bad_Opcode },
f88c9eb0 5920 /* 60 */
592d1631
L
5921 { Bad_Opcode },
5922 { Bad_Opcode },
5923 { Bad_Opcode },
5924 { Bad_Opcode },
5925 { Bad_Opcode },
5926 { Bad_Opcode },
5927 { Bad_Opcode },
5928 { Bad_Opcode },
f88c9eb0 5929 /* 68 */
592d1631
L
5930 { Bad_Opcode },
5931 { Bad_Opcode },
5932 { Bad_Opcode },
5933 { Bad_Opcode },
5934 { Bad_Opcode },
5935 { Bad_Opcode },
5936 { Bad_Opcode },
5937 { Bad_Opcode },
f88c9eb0 5938 /* 70 */
592d1631
L
5939 { Bad_Opcode },
5940 { Bad_Opcode },
5941 { Bad_Opcode },
5942 { Bad_Opcode },
5943 { Bad_Opcode },
5944 { Bad_Opcode },
5945 { Bad_Opcode },
5946 { Bad_Opcode },
f88c9eb0 5947 /* 78 */
592d1631
L
5948 { Bad_Opcode },
5949 { Bad_Opcode },
5950 { Bad_Opcode },
5951 { Bad_Opcode },
5952 { Bad_Opcode },
5953 { Bad_Opcode },
5954 { Bad_Opcode },
5955 { Bad_Opcode },
f88c9eb0
SP
5956 /* 80 */
5957 { PREFIX_TABLE (PREFIX_0F3880) },
5958 { PREFIX_TABLE (PREFIX_0F3881) },
6c30d220 5959 { PREFIX_TABLE (PREFIX_0F3882) },
592d1631
L
5960 { Bad_Opcode },
5961 { Bad_Opcode },
5962 { Bad_Opcode },
5963 { Bad_Opcode },
5964 { Bad_Opcode },
f88c9eb0 5965 /* 88 */
592d1631
L
5966 { Bad_Opcode },
5967 { Bad_Opcode },
5968 { Bad_Opcode },
5969 { Bad_Opcode },
5970 { Bad_Opcode },
5971 { Bad_Opcode },
5972 { Bad_Opcode },
5973 { Bad_Opcode },
f88c9eb0 5974 /* 90 */
592d1631
L
5975 { Bad_Opcode },
5976 { Bad_Opcode },
5977 { Bad_Opcode },
5978 { Bad_Opcode },
5979 { Bad_Opcode },
5980 { Bad_Opcode },
5981 { Bad_Opcode },
5982 { Bad_Opcode },
f88c9eb0 5983 /* 98 */
592d1631
L
5984 { Bad_Opcode },
5985 { Bad_Opcode },
5986 { Bad_Opcode },
5987 { Bad_Opcode },
5988 { Bad_Opcode },
5989 { Bad_Opcode },
5990 { Bad_Opcode },
5991 { Bad_Opcode },
f88c9eb0 5992 /* a0 */
592d1631
L
5993 { Bad_Opcode },
5994 { Bad_Opcode },
5995 { Bad_Opcode },
5996 { Bad_Opcode },
5997 { Bad_Opcode },
5998 { Bad_Opcode },
5999 { Bad_Opcode },
6000 { Bad_Opcode },
f88c9eb0 6001 /* a8 */
592d1631
L
6002 { Bad_Opcode },
6003 { Bad_Opcode },
6004 { Bad_Opcode },
6005 { Bad_Opcode },
6006 { Bad_Opcode },
6007 { Bad_Opcode },
6008 { Bad_Opcode },
6009 { Bad_Opcode },
f88c9eb0 6010 /* b0 */
592d1631
L
6011 { Bad_Opcode },
6012 { Bad_Opcode },
6013 { Bad_Opcode },
6014 { Bad_Opcode },
6015 { Bad_Opcode },
6016 { Bad_Opcode },
6017 { Bad_Opcode },
6018 { Bad_Opcode },
f88c9eb0 6019 /* b8 */
592d1631
L
6020 { Bad_Opcode },
6021 { Bad_Opcode },
6022 { Bad_Opcode },
6023 { Bad_Opcode },
6024 { Bad_Opcode },
6025 { Bad_Opcode },
6026 { Bad_Opcode },
6027 { Bad_Opcode },
f88c9eb0 6028 /* c0 */
592d1631
L
6029 { Bad_Opcode },
6030 { Bad_Opcode },
6031 { Bad_Opcode },
6032 { Bad_Opcode },
6033 { Bad_Opcode },
6034 { Bad_Opcode },
6035 { Bad_Opcode },
6036 { Bad_Opcode },
f88c9eb0 6037 /* c8 */
592d1631
L
6038 { Bad_Opcode },
6039 { Bad_Opcode },
6040 { Bad_Opcode },
6041 { Bad_Opcode },
6042 { Bad_Opcode },
6043 { Bad_Opcode },
6044 { Bad_Opcode },
6045 { Bad_Opcode },
f88c9eb0 6046 /* d0 */
592d1631
L
6047 { Bad_Opcode },
6048 { Bad_Opcode },
6049 { Bad_Opcode },
6050 { Bad_Opcode },
6051 { Bad_Opcode },
6052 { Bad_Opcode },
6053 { Bad_Opcode },
6054 { Bad_Opcode },
f88c9eb0 6055 /* d8 */
592d1631
L
6056 { Bad_Opcode },
6057 { Bad_Opcode },
6058 { Bad_Opcode },
f88c9eb0
SP
6059 { PREFIX_TABLE (PREFIX_0F38DB) },
6060 { PREFIX_TABLE (PREFIX_0F38DC) },
6061 { PREFIX_TABLE (PREFIX_0F38DD) },
6062 { PREFIX_TABLE (PREFIX_0F38DE) },
6063 { PREFIX_TABLE (PREFIX_0F38DF) },
6064 /* e0 */
592d1631
L
6065 { Bad_Opcode },
6066 { Bad_Opcode },
6067 { Bad_Opcode },
6068 { Bad_Opcode },
6069 { Bad_Opcode },
6070 { Bad_Opcode },
6071 { Bad_Opcode },
6072 { Bad_Opcode },
f88c9eb0 6073 /* e8 */
592d1631
L
6074 { Bad_Opcode },
6075 { Bad_Opcode },
6076 { Bad_Opcode },
6077 { Bad_Opcode },
6078 { Bad_Opcode },
6079 { Bad_Opcode },
6080 { Bad_Opcode },
6081 { Bad_Opcode },
f88c9eb0
SP
6082 /* f0 */
6083 { PREFIX_TABLE (PREFIX_0F38F0) },
6084 { PREFIX_TABLE (PREFIX_0F38F1) },
592d1631
L
6085 { Bad_Opcode },
6086 { Bad_Opcode },
6087 { Bad_Opcode },
6088 { Bad_Opcode },
e2e1fcde 6089 { PREFIX_TABLE (PREFIX_0F38F6) },
592d1631 6090 { Bad_Opcode },
f88c9eb0 6091 /* f8 */
592d1631
L
6092 { Bad_Opcode },
6093 { Bad_Opcode },
6094 { Bad_Opcode },
6095 { Bad_Opcode },
6096 { Bad_Opcode },
6097 { Bad_Opcode },
6098 { Bad_Opcode },
6099 { Bad_Opcode },
f88c9eb0
SP
6100 },
6101 /* THREE_BYTE_0F3A */
6102 {
6103 /* 00 */
592d1631
L
6104 { Bad_Opcode },
6105 { Bad_Opcode },
6106 { Bad_Opcode },
6107 { Bad_Opcode },
6108 { Bad_Opcode },
6109 { Bad_Opcode },
6110 { Bad_Opcode },
6111 { Bad_Opcode },
f88c9eb0
SP
6112 /* 08 */
6113 { PREFIX_TABLE (PREFIX_0F3A08) },
6114 { PREFIX_TABLE (PREFIX_0F3A09) },
6115 { PREFIX_TABLE (PREFIX_0F3A0A) },
6116 { PREFIX_TABLE (PREFIX_0F3A0B) },
6117 { PREFIX_TABLE (PREFIX_0F3A0C) },
6118 { PREFIX_TABLE (PREFIX_0F3A0D) },
6119 { PREFIX_TABLE (PREFIX_0F3A0E) },
6120 { "palignr", { MX, EM, Ib } },
6121 /* 10 */
592d1631
L
6122 { Bad_Opcode },
6123 { Bad_Opcode },
6124 { Bad_Opcode },
6125 { Bad_Opcode },
f88c9eb0
SP
6126 { PREFIX_TABLE (PREFIX_0F3A14) },
6127 { PREFIX_TABLE (PREFIX_0F3A15) },
6128 { PREFIX_TABLE (PREFIX_0F3A16) },
6129 { PREFIX_TABLE (PREFIX_0F3A17) },
6130 /* 18 */
592d1631
L
6131 { Bad_Opcode },
6132 { Bad_Opcode },
6133 { Bad_Opcode },
6134 { Bad_Opcode },
6135 { Bad_Opcode },
6136 { Bad_Opcode },
6137 { Bad_Opcode },
6138 { Bad_Opcode },
f88c9eb0
SP
6139 /* 20 */
6140 { PREFIX_TABLE (PREFIX_0F3A20) },
6141 { PREFIX_TABLE (PREFIX_0F3A21) },
6142 { PREFIX_TABLE (PREFIX_0F3A22) },
592d1631
L
6143 { Bad_Opcode },
6144 { Bad_Opcode },
6145 { Bad_Opcode },
6146 { Bad_Opcode },
6147 { Bad_Opcode },
f88c9eb0 6148 /* 28 */
592d1631
L
6149 { Bad_Opcode },
6150 { Bad_Opcode },
6151 { Bad_Opcode },
6152 { Bad_Opcode },
6153 { Bad_Opcode },
6154 { Bad_Opcode },
6155 { Bad_Opcode },
6156 { Bad_Opcode },
f88c9eb0 6157 /* 30 */
592d1631
L
6158 { Bad_Opcode },
6159 { Bad_Opcode },
6160 { Bad_Opcode },
6161 { Bad_Opcode },
6162 { Bad_Opcode },
6163 { Bad_Opcode },
6164 { Bad_Opcode },
6165 { Bad_Opcode },
f88c9eb0 6166 /* 38 */
592d1631
L
6167 { Bad_Opcode },
6168 { Bad_Opcode },
6169 { Bad_Opcode },
6170 { Bad_Opcode },
6171 { Bad_Opcode },
6172 { Bad_Opcode },
6173 { Bad_Opcode },
6174 { Bad_Opcode },
f88c9eb0
SP
6175 /* 40 */
6176 { PREFIX_TABLE (PREFIX_0F3A40) },
6177 { PREFIX_TABLE (PREFIX_0F3A41) },
6178 { PREFIX_TABLE (PREFIX_0F3A42) },
592d1631 6179 { Bad_Opcode },
f88c9eb0 6180 { PREFIX_TABLE (PREFIX_0F3A44) },
592d1631
L
6181 { Bad_Opcode },
6182 { Bad_Opcode },
6183 { Bad_Opcode },
f88c9eb0 6184 /* 48 */
592d1631
L
6185 { Bad_Opcode },
6186 { Bad_Opcode },
6187 { Bad_Opcode },
6188 { Bad_Opcode },
6189 { Bad_Opcode },
6190 { Bad_Opcode },
6191 { Bad_Opcode },
6192 { Bad_Opcode },
f88c9eb0 6193 /* 50 */
592d1631
L
6194 { Bad_Opcode },
6195 { Bad_Opcode },
6196 { Bad_Opcode },
6197 { Bad_Opcode },
6198 { Bad_Opcode },
6199 { Bad_Opcode },
6200 { Bad_Opcode },
6201 { Bad_Opcode },
f88c9eb0 6202 /* 58 */
592d1631
L
6203 { Bad_Opcode },
6204 { Bad_Opcode },
6205 { Bad_Opcode },
6206 { Bad_Opcode },
6207 { Bad_Opcode },
6208 { Bad_Opcode },
6209 { Bad_Opcode },
6210 { Bad_Opcode },
f88c9eb0
SP
6211 /* 60 */
6212 { PREFIX_TABLE (PREFIX_0F3A60) },
6213 { PREFIX_TABLE (PREFIX_0F3A61) },
6214 { PREFIX_TABLE (PREFIX_0F3A62) },
6215 { PREFIX_TABLE (PREFIX_0F3A63) },
592d1631
L
6216 { Bad_Opcode },
6217 { Bad_Opcode },
6218 { Bad_Opcode },
6219 { Bad_Opcode },
f88c9eb0 6220 /* 68 */
592d1631
L
6221 { Bad_Opcode },
6222 { Bad_Opcode },
6223 { Bad_Opcode },
6224 { Bad_Opcode },
6225 { Bad_Opcode },
6226 { Bad_Opcode },
6227 { Bad_Opcode },
6228 { Bad_Opcode },
f88c9eb0 6229 /* 70 */
592d1631
L
6230 { Bad_Opcode },
6231 { Bad_Opcode },
6232 { Bad_Opcode },
6233 { Bad_Opcode },
6234 { Bad_Opcode },
6235 { Bad_Opcode },
6236 { Bad_Opcode },
6237 { Bad_Opcode },
f88c9eb0 6238 /* 78 */
592d1631
L
6239 { Bad_Opcode },
6240 { Bad_Opcode },
6241 { Bad_Opcode },
6242 { Bad_Opcode },
6243 { Bad_Opcode },
6244 { Bad_Opcode },
6245 { Bad_Opcode },
6246 { Bad_Opcode },
f88c9eb0 6247 /* 80 */
592d1631
L
6248 { Bad_Opcode },
6249 { Bad_Opcode },
6250 { Bad_Opcode },
6251 { Bad_Opcode },
6252 { Bad_Opcode },
6253 { Bad_Opcode },
6254 { Bad_Opcode },
6255 { Bad_Opcode },
f88c9eb0 6256 /* 88 */
592d1631
L
6257 { Bad_Opcode },
6258 { Bad_Opcode },
6259 { Bad_Opcode },
6260 { Bad_Opcode },
6261 { Bad_Opcode },
6262 { Bad_Opcode },
6263 { Bad_Opcode },
6264 { Bad_Opcode },
f88c9eb0 6265 /* 90 */
592d1631
L
6266 { Bad_Opcode },
6267 { Bad_Opcode },
6268 { Bad_Opcode },
6269 { Bad_Opcode },
6270 { Bad_Opcode },
6271 { Bad_Opcode },
6272 { Bad_Opcode },
6273 { Bad_Opcode },
f88c9eb0 6274 /* 98 */
592d1631
L
6275 { Bad_Opcode },
6276 { Bad_Opcode },
6277 { Bad_Opcode },
6278 { Bad_Opcode },
6279 { Bad_Opcode },
6280 { Bad_Opcode },
6281 { Bad_Opcode },
6282 { Bad_Opcode },
f88c9eb0 6283 /* a0 */
592d1631
L
6284 { Bad_Opcode },
6285 { Bad_Opcode },
6286 { Bad_Opcode },
6287 { Bad_Opcode },
6288 { Bad_Opcode },
6289 { Bad_Opcode },
6290 { Bad_Opcode },
6291 { Bad_Opcode },
f88c9eb0 6292 /* a8 */
592d1631
L
6293 { Bad_Opcode },
6294 { Bad_Opcode },
6295 { Bad_Opcode },
6296 { Bad_Opcode },
6297 { Bad_Opcode },
6298 { Bad_Opcode },
6299 { Bad_Opcode },
6300 { Bad_Opcode },
f88c9eb0 6301 /* b0 */
592d1631
L
6302 { Bad_Opcode },
6303 { Bad_Opcode },
6304 { Bad_Opcode },
6305 { Bad_Opcode },
6306 { Bad_Opcode },
6307 { Bad_Opcode },
6308 { Bad_Opcode },
6309 { Bad_Opcode },
f88c9eb0 6310 /* b8 */
592d1631
L
6311 { Bad_Opcode },
6312 { Bad_Opcode },
6313 { Bad_Opcode },
6314 { Bad_Opcode },
6315 { Bad_Opcode },
6316 { Bad_Opcode },
6317 { Bad_Opcode },
6318 { Bad_Opcode },
f88c9eb0 6319 /* c0 */
592d1631
L
6320 { Bad_Opcode },
6321 { Bad_Opcode },
6322 { Bad_Opcode },
6323 { Bad_Opcode },
6324 { Bad_Opcode },
6325 { Bad_Opcode },
6326 { Bad_Opcode },
6327 { Bad_Opcode },
f88c9eb0 6328 /* c8 */
592d1631
L
6329 { Bad_Opcode },
6330 { Bad_Opcode },
6331 { Bad_Opcode },
6332 { Bad_Opcode },
6333 { Bad_Opcode },
6334 { Bad_Opcode },
6335 { Bad_Opcode },
6336 { Bad_Opcode },
f88c9eb0 6337 /* d0 */
592d1631
L
6338 { Bad_Opcode },
6339 { Bad_Opcode },
6340 { Bad_Opcode },
6341 { Bad_Opcode },
6342 { Bad_Opcode },
6343 { Bad_Opcode },
6344 { Bad_Opcode },
6345 { Bad_Opcode },
f88c9eb0 6346 /* d8 */
592d1631
L
6347 { Bad_Opcode },
6348 { Bad_Opcode },
6349 { Bad_Opcode },
6350 { Bad_Opcode },
6351 { Bad_Opcode },
6352 { Bad_Opcode },
6353 { Bad_Opcode },
f88c9eb0
SP
6354 { PREFIX_TABLE (PREFIX_0F3ADF) },
6355 /* e0 */
592d1631
L
6356 { Bad_Opcode },
6357 { Bad_Opcode },
6358 { Bad_Opcode },
6359 { Bad_Opcode },
6360 { Bad_Opcode },
6361 { Bad_Opcode },
6362 { Bad_Opcode },
6363 { Bad_Opcode },
f88c9eb0 6364 /* e8 */
592d1631
L
6365 { Bad_Opcode },
6366 { Bad_Opcode },
6367 { Bad_Opcode },
6368 { Bad_Opcode },
6369 { Bad_Opcode },
6370 { Bad_Opcode },
6371 { Bad_Opcode },
6372 { Bad_Opcode },
f88c9eb0 6373 /* f0 */
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 /* f8 */
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
SP
6391 },
6392
6393 /* THREE_BYTE_0F7A */
6394 {
6395 /* 00 */
592d1631
L
6396 { Bad_Opcode },
6397 { Bad_Opcode },
6398 { Bad_Opcode },
6399 { Bad_Opcode },
6400 { Bad_Opcode },
6401 { Bad_Opcode },
6402 { Bad_Opcode },
6403 { Bad_Opcode },
f88c9eb0 6404 /* 08 */
592d1631
L
6405 { Bad_Opcode },
6406 { Bad_Opcode },
6407 { Bad_Opcode },
6408 { Bad_Opcode },
6409 { Bad_Opcode },
6410 { Bad_Opcode },
6411 { Bad_Opcode },
6412 { Bad_Opcode },
f88c9eb0 6413 /* 10 */
592d1631
L
6414 { Bad_Opcode },
6415 { Bad_Opcode },
6416 { Bad_Opcode },
6417 { Bad_Opcode },
6418 { Bad_Opcode },
6419 { Bad_Opcode },
6420 { Bad_Opcode },
6421 { Bad_Opcode },
f88c9eb0 6422 /* 18 */
592d1631
L
6423 { Bad_Opcode },
6424 { Bad_Opcode },
6425 { Bad_Opcode },
6426 { Bad_Opcode },
6427 { Bad_Opcode },
6428 { Bad_Opcode },
6429 { Bad_Opcode },
6430 { Bad_Opcode },
f88c9eb0
SP
6431 /* 20 */
6432 { "ptest", { XX } },
592d1631
L
6433 { Bad_Opcode },
6434 { Bad_Opcode },
6435 { Bad_Opcode },
6436 { Bad_Opcode },
6437 { Bad_Opcode },
6438 { Bad_Opcode },
6439 { Bad_Opcode },
f88c9eb0 6440 /* 28 */
592d1631
L
6441 { Bad_Opcode },
6442 { Bad_Opcode },
6443 { Bad_Opcode },
6444 { Bad_Opcode },
6445 { Bad_Opcode },
6446 { Bad_Opcode },
6447 { Bad_Opcode },
6448 { Bad_Opcode },
f88c9eb0 6449 /* 30 */
592d1631
L
6450 { Bad_Opcode },
6451 { Bad_Opcode },
6452 { Bad_Opcode },
6453 { Bad_Opcode },
6454 { Bad_Opcode },
6455 { Bad_Opcode },
6456 { Bad_Opcode },
6457 { Bad_Opcode },
f88c9eb0 6458 /* 38 */
592d1631
L
6459 { Bad_Opcode },
6460 { Bad_Opcode },
6461 { Bad_Opcode },
6462 { Bad_Opcode },
6463 { Bad_Opcode },
6464 { Bad_Opcode },
6465 { Bad_Opcode },
6466 { Bad_Opcode },
f88c9eb0 6467 /* 40 */
592d1631 6468 { Bad_Opcode },
f88c9eb0
SP
6469 { "phaddbw", { XM, EXq } },
6470 { "phaddbd", { XM, EXq } },
6471 { "phaddbq", { XM, EXq } },
592d1631
L
6472 { Bad_Opcode },
6473 { Bad_Opcode },
f88c9eb0
SP
6474 { "phaddwd", { XM, EXq } },
6475 { "phaddwq", { XM, EXq } },
6476 /* 48 */
592d1631
L
6477 { Bad_Opcode },
6478 { Bad_Opcode },
6479 { Bad_Opcode },
f88c9eb0 6480 { "phadddq", { XM, EXq } },
592d1631
L
6481 { Bad_Opcode },
6482 { Bad_Opcode },
6483 { Bad_Opcode },
6484 { Bad_Opcode },
f88c9eb0 6485 /* 50 */
592d1631 6486 { Bad_Opcode },
f88c9eb0
SP
6487 { "phaddubw", { XM, EXq } },
6488 { "phaddubd", { XM, EXq } },
6489 { "phaddubq", { XM, EXq } },
592d1631
L
6490 { Bad_Opcode },
6491 { Bad_Opcode },
f88c9eb0
SP
6492 { "phadduwd", { XM, EXq } },
6493 { "phadduwq", { XM, EXq } },
6494 /* 58 */
592d1631
L
6495 { Bad_Opcode },
6496 { Bad_Opcode },
6497 { Bad_Opcode },
f88c9eb0 6498 { "phaddudq", { XM, EXq } },
592d1631
L
6499 { Bad_Opcode },
6500 { Bad_Opcode },
6501 { Bad_Opcode },
6502 { Bad_Opcode },
f88c9eb0 6503 /* 60 */
592d1631 6504 { Bad_Opcode },
f88c9eb0
SP
6505 { "phsubbw", { XM, EXq } },
6506 { "phsubbd", { XM, EXq } },
6507 { "phsubbq", { XM, EXq } },
592d1631
L
6508 { Bad_Opcode },
6509 { Bad_Opcode },
6510 { Bad_Opcode },
6511 { Bad_Opcode },
4e7d34a6 6512 /* 68 */
592d1631
L
6513 { Bad_Opcode },
6514 { Bad_Opcode },
6515 { Bad_Opcode },
6516 { Bad_Opcode },
6517 { Bad_Opcode },
6518 { Bad_Opcode },
6519 { Bad_Opcode },
6520 { Bad_Opcode },
85f10a01 6521 /* 70 */
592d1631
L
6522 { Bad_Opcode },
6523 { Bad_Opcode },
6524 { Bad_Opcode },
6525 { Bad_Opcode },
6526 { Bad_Opcode },
6527 { Bad_Opcode },
6528 { Bad_Opcode },
6529 { Bad_Opcode },
85f10a01 6530 /* 78 */
592d1631
L
6531 { Bad_Opcode },
6532 { Bad_Opcode },
6533 { Bad_Opcode },
6534 { Bad_Opcode },
6535 { Bad_Opcode },
6536 { Bad_Opcode },
6537 { Bad_Opcode },
6538 { Bad_Opcode },
85f10a01 6539 /* 80 */
592d1631
L
6540 { Bad_Opcode },
6541 { Bad_Opcode },
6542 { Bad_Opcode },
6543 { Bad_Opcode },
6544 { Bad_Opcode },
6545 { Bad_Opcode },
6546 { Bad_Opcode },
6547 { Bad_Opcode },
85f10a01 6548 /* 88 */
592d1631
L
6549 { Bad_Opcode },
6550 { Bad_Opcode },
6551 { Bad_Opcode },
6552 { Bad_Opcode },
6553 { Bad_Opcode },
6554 { Bad_Opcode },
6555 { Bad_Opcode },
6556 { Bad_Opcode },
85f10a01 6557 /* 90 */
592d1631
L
6558 { Bad_Opcode },
6559 { Bad_Opcode },
6560 { Bad_Opcode },
6561 { Bad_Opcode },
6562 { Bad_Opcode },
6563 { Bad_Opcode },
6564 { Bad_Opcode },
6565 { Bad_Opcode },
85f10a01 6566 /* 98 */
592d1631
L
6567 { Bad_Opcode },
6568 { Bad_Opcode },
6569 { Bad_Opcode },
6570 { Bad_Opcode },
6571 { Bad_Opcode },
6572 { Bad_Opcode },
6573 { Bad_Opcode },
6574 { Bad_Opcode },
85f10a01 6575 /* a0 */
592d1631
L
6576 { Bad_Opcode },
6577 { Bad_Opcode },
6578 { Bad_Opcode },
6579 { Bad_Opcode },
6580 { Bad_Opcode },
6581 { Bad_Opcode },
6582 { Bad_Opcode },
6583 { Bad_Opcode },
85f10a01 6584 /* a8 */
592d1631
L
6585 { Bad_Opcode },
6586 { Bad_Opcode },
6587 { Bad_Opcode },
6588 { Bad_Opcode },
6589 { Bad_Opcode },
6590 { Bad_Opcode },
6591 { Bad_Opcode },
6592 { Bad_Opcode },
85f10a01 6593 /* b0 */
592d1631
L
6594 { Bad_Opcode },
6595 { Bad_Opcode },
6596 { Bad_Opcode },
6597 { Bad_Opcode },
6598 { Bad_Opcode },
6599 { Bad_Opcode },
6600 { Bad_Opcode },
6601 { Bad_Opcode },
85f10a01 6602 /* b8 */
592d1631
L
6603 { Bad_Opcode },
6604 { Bad_Opcode },
6605 { Bad_Opcode },
6606 { Bad_Opcode },
6607 { Bad_Opcode },
6608 { Bad_Opcode },
6609 { Bad_Opcode },
6610 { Bad_Opcode },
85f10a01 6611 /* c0 */
592d1631
L
6612 { Bad_Opcode },
6613 { Bad_Opcode },
6614 { Bad_Opcode },
6615 { Bad_Opcode },
6616 { Bad_Opcode },
6617 { Bad_Opcode },
6618 { Bad_Opcode },
6619 { Bad_Opcode },
85f10a01 6620 /* c8 */
592d1631
L
6621 { Bad_Opcode },
6622 { Bad_Opcode },
6623 { Bad_Opcode },
6624 { Bad_Opcode },
6625 { Bad_Opcode },
6626 { Bad_Opcode },
6627 { Bad_Opcode },
6628 { Bad_Opcode },
85f10a01 6629 /* d0 */
592d1631
L
6630 { Bad_Opcode },
6631 { Bad_Opcode },
6632 { Bad_Opcode },
6633 { Bad_Opcode },
6634 { Bad_Opcode },
6635 { Bad_Opcode },
6636 { Bad_Opcode },
6637 { Bad_Opcode },
85f10a01 6638 /* d8 */
592d1631
L
6639 { Bad_Opcode },
6640 { Bad_Opcode },
6641 { Bad_Opcode },
6642 { Bad_Opcode },
6643 { Bad_Opcode },
6644 { Bad_Opcode },
6645 { Bad_Opcode },
6646 { Bad_Opcode },
85f10a01 6647 /* e0 */
592d1631
L
6648 { Bad_Opcode },
6649 { Bad_Opcode },
6650 { Bad_Opcode },
6651 { Bad_Opcode },
6652 { Bad_Opcode },
6653 { Bad_Opcode },
6654 { Bad_Opcode },
6655 { Bad_Opcode },
85f10a01 6656 /* e8 */
592d1631
L
6657 { Bad_Opcode },
6658 { Bad_Opcode },
6659 { Bad_Opcode },
6660 { Bad_Opcode },
6661 { Bad_Opcode },
6662 { Bad_Opcode },
6663 { Bad_Opcode },
6664 { Bad_Opcode },
85f10a01 6665 /* f0 */
592d1631
L
6666 { Bad_Opcode },
6667 { Bad_Opcode },
6668 { Bad_Opcode },
6669 { Bad_Opcode },
6670 { Bad_Opcode },
6671 { Bad_Opcode },
6672 { Bad_Opcode },
6673 { Bad_Opcode },
85f10a01 6674 /* f8 */
592d1631
L
6675 { Bad_Opcode },
6676 { Bad_Opcode },
6677 { Bad_Opcode },
6678 { Bad_Opcode },
6679 { Bad_Opcode },
6680 { Bad_Opcode },
6681 { Bad_Opcode },
6682 { Bad_Opcode },
85f10a01 6683 },
f88c9eb0
SP
6684};
6685
6686static const struct dis386 xop_table[][256] = {
5dd85c99 6687 /* XOP_08 */
85f10a01
MM
6688 {
6689 /* 00 */
592d1631
L
6690 { Bad_Opcode },
6691 { Bad_Opcode },
6692 { Bad_Opcode },
6693 { Bad_Opcode },
6694 { Bad_Opcode },
6695 { Bad_Opcode },
6696 { Bad_Opcode },
6697 { Bad_Opcode },
85f10a01 6698 /* 08 */
592d1631
L
6699 { Bad_Opcode },
6700 { Bad_Opcode },
6701 { Bad_Opcode },
6702 { Bad_Opcode },
6703 { Bad_Opcode },
6704 { Bad_Opcode },
6705 { Bad_Opcode },
6706 { Bad_Opcode },
85f10a01 6707 /* 10 */
3929df09 6708 { Bad_Opcode },
592d1631
L
6709 { Bad_Opcode },
6710 { Bad_Opcode },
6711 { Bad_Opcode },
6712 { Bad_Opcode },
6713 { Bad_Opcode },
6714 { Bad_Opcode },
6715 { Bad_Opcode },
85f10a01 6716 /* 18 */
592d1631
L
6717 { Bad_Opcode },
6718 { Bad_Opcode },
6719 { Bad_Opcode },
6720 { Bad_Opcode },
6721 { Bad_Opcode },
6722 { Bad_Opcode },
6723 { Bad_Opcode },
6724 { Bad_Opcode },
85f10a01 6725 /* 20 */
592d1631
L
6726 { Bad_Opcode },
6727 { Bad_Opcode },
6728 { Bad_Opcode },
6729 { Bad_Opcode },
6730 { Bad_Opcode },
6731 { Bad_Opcode },
6732 { Bad_Opcode },
6733 { Bad_Opcode },
85f10a01 6734 /* 28 */
592d1631
L
6735 { Bad_Opcode },
6736 { Bad_Opcode },
6737 { Bad_Opcode },
6738 { Bad_Opcode },
6739 { Bad_Opcode },
6740 { Bad_Opcode },
6741 { Bad_Opcode },
6742 { Bad_Opcode },
c0f3af97 6743 /* 30 */
592d1631
L
6744 { Bad_Opcode },
6745 { Bad_Opcode },
6746 { Bad_Opcode },
6747 { Bad_Opcode },
6748 { Bad_Opcode },
6749 { Bad_Opcode },
6750 { Bad_Opcode },
6751 { Bad_Opcode },
c0f3af97 6752 /* 38 */
592d1631
L
6753 { Bad_Opcode },
6754 { Bad_Opcode },
6755 { Bad_Opcode },
6756 { Bad_Opcode },
6757 { Bad_Opcode },
6758 { Bad_Opcode },
6759 { Bad_Opcode },
6760 { Bad_Opcode },
c0f3af97 6761 /* 40 */
592d1631
L
6762 { Bad_Opcode },
6763 { Bad_Opcode },
6764 { Bad_Opcode },
6765 { Bad_Opcode },
6766 { Bad_Opcode },
6767 { Bad_Opcode },
6768 { Bad_Opcode },
6769 { Bad_Opcode },
85f10a01 6770 /* 48 */
592d1631
L
6771 { Bad_Opcode },
6772 { Bad_Opcode },
6773 { Bad_Opcode },
6774 { Bad_Opcode },
6775 { Bad_Opcode },
6776 { Bad_Opcode },
6777 { Bad_Opcode },
6778 { Bad_Opcode },
c0f3af97 6779 /* 50 */
592d1631
L
6780 { Bad_Opcode },
6781 { Bad_Opcode },
6782 { Bad_Opcode },
6783 { Bad_Opcode },
6784 { Bad_Opcode },
6785 { Bad_Opcode },
6786 { Bad_Opcode },
6787 { Bad_Opcode },
85f10a01 6788 /* 58 */
592d1631
L
6789 { Bad_Opcode },
6790 { Bad_Opcode },
6791 { Bad_Opcode },
6792 { Bad_Opcode },
6793 { Bad_Opcode },
6794 { Bad_Opcode },
6795 { Bad_Opcode },
6796 { Bad_Opcode },
c1e679ec 6797 /* 60 */
592d1631
L
6798 { Bad_Opcode },
6799 { Bad_Opcode },
6800 { Bad_Opcode },
6801 { Bad_Opcode },
6802 { Bad_Opcode },
6803 { Bad_Opcode },
6804 { Bad_Opcode },
6805 { Bad_Opcode },
c0f3af97 6806 /* 68 */
592d1631
L
6807 { Bad_Opcode },
6808 { Bad_Opcode },
6809 { Bad_Opcode },
6810 { Bad_Opcode },
6811 { Bad_Opcode },
6812 { Bad_Opcode },
6813 { Bad_Opcode },
6814 { Bad_Opcode },
85f10a01 6815 /* 70 */
592d1631
L
6816 { Bad_Opcode },
6817 { Bad_Opcode },
6818 { Bad_Opcode },
6819 { Bad_Opcode },
6820 { Bad_Opcode },
6821 { Bad_Opcode },
6822 { Bad_Opcode },
6823 { Bad_Opcode },
85f10a01 6824 /* 78 */
592d1631
L
6825 { Bad_Opcode },
6826 { Bad_Opcode },
6827 { Bad_Opcode },
6828 { Bad_Opcode },
6829 { Bad_Opcode },
6830 { Bad_Opcode },
6831 { Bad_Opcode },
6832 { Bad_Opcode },
85f10a01 6833 /* 80 */
592d1631
L
6834 { Bad_Opcode },
6835 { Bad_Opcode },
6836 { Bad_Opcode },
6837 { Bad_Opcode },
6838 { Bad_Opcode },
5dd85c99
SP
6839 { "vpmacssww", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
6840 { "vpmacsswd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
6841 { "vpmacssdql", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
6842 /* 88 */
592d1631
L
6843 { Bad_Opcode },
6844 { Bad_Opcode },
6845 { Bad_Opcode },
6846 { Bad_Opcode },
6847 { Bad_Opcode },
6848 { Bad_Opcode },
5dd85c99
SP
6849 { "vpmacssdd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
6850 { "vpmacssdqh", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
6851 /* 90 */
592d1631
L
6852 { Bad_Opcode },
6853 { Bad_Opcode },
6854 { Bad_Opcode },
6855 { Bad_Opcode },
6856 { Bad_Opcode },
5dd85c99
SP
6857 { "vpmacsww", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
6858 { "vpmacswd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
6859 { "vpmacsdql", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
6860 /* 98 */
592d1631
L
6861 { Bad_Opcode },
6862 { Bad_Opcode },
6863 { Bad_Opcode },
6864 { Bad_Opcode },
6865 { Bad_Opcode },
6866 { Bad_Opcode },
5dd85c99
SP
6867 { "vpmacsdd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
6868 { "vpmacsdqh", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
6869 /* a0 */
592d1631
L
6870 { Bad_Opcode },
6871 { Bad_Opcode },
5dd85c99
SP
6872 { "vpcmov", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
6873 { "vpperm", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
592d1631
L
6874 { Bad_Opcode },
6875 { Bad_Opcode },
5dd85c99 6876 { "vpmadcsswd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
592d1631 6877 { Bad_Opcode },
5dd85c99 6878 /* a8 */
592d1631
L
6879 { Bad_Opcode },
6880 { Bad_Opcode },
6881 { Bad_Opcode },
6882 { Bad_Opcode },
6883 { Bad_Opcode },
6884 { Bad_Opcode },
6885 { Bad_Opcode },
6886 { Bad_Opcode },
5dd85c99 6887 /* b0 */
592d1631
L
6888 { Bad_Opcode },
6889 { Bad_Opcode },
6890 { Bad_Opcode },
6891 { Bad_Opcode },
6892 { Bad_Opcode },
6893 { Bad_Opcode },
5dd85c99 6894 { "vpmadcswd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
592d1631 6895 { Bad_Opcode },
5dd85c99 6896 /* b8 */
592d1631
L
6897 { Bad_Opcode },
6898 { Bad_Opcode },
6899 { Bad_Opcode },
6900 { Bad_Opcode },
6901 { Bad_Opcode },
6902 { Bad_Opcode },
6903 { Bad_Opcode },
6904 { Bad_Opcode },
5dd85c99
SP
6905 /* c0 */
6906 { "vprotb", { XM, Vex_2src_1, Ib } },
6907 { "vprotw", { XM, Vex_2src_1, Ib } },
6908 { "vprotd", { XM, Vex_2src_1, Ib } },
6909 { "vprotq", { XM, Vex_2src_1, Ib } },
592d1631
L
6910 { Bad_Opcode },
6911 { Bad_Opcode },
6912 { Bad_Opcode },
6913 { Bad_Opcode },
5dd85c99 6914 /* c8 */
592d1631
L
6915 { Bad_Opcode },
6916 { Bad_Opcode },
6917 { Bad_Opcode },
6918 { Bad_Opcode },
ff688e1f
L
6919 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_CC) },
6920 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_CD) },
6921 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_CE) },
6922 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_CF) },
5dd85c99 6923 /* d0 */
592d1631
L
6924 { Bad_Opcode },
6925 { Bad_Opcode },
6926 { Bad_Opcode },
6927 { Bad_Opcode },
6928 { Bad_Opcode },
6929 { Bad_Opcode },
6930 { Bad_Opcode },
6931 { Bad_Opcode },
5dd85c99 6932 /* d8 */
592d1631
L
6933 { Bad_Opcode },
6934 { Bad_Opcode },
6935 { Bad_Opcode },
6936 { Bad_Opcode },
6937 { Bad_Opcode },
6938 { Bad_Opcode },
6939 { Bad_Opcode },
6940 { Bad_Opcode },
5dd85c99 6941 /* e0 */
592d1631
L
6942 { Bad_Opcode },
6943 { Bad_Opcode },
6944 { Bad_Opcode },
6945 { Bad_Opcode },
6946 { Bad_Opcode },
6947 { Bad_Opcode },
6948 { Bad_Opcode },
6949 { Bad_Opcode },
5dd85c99 6950 /* e8 */
592d1631
L
6951 { Bad_Opcode },
6952 { Bad_Opcode },
6953 { Bad_Opcode },
6954 { Bad_Opcode },
ff688e1f
L
6955 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_EC) },
6956 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_ED) },
6957 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_EE) },
6958 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_EF) },
5dd85c99 6959 /* f0 */
592d1631
L
6960 { Bad_Opcode },
6961 { Bad_Opcode },
6962 { Bad_Opcode },
6963 { Bad_Opcode },
6964 { Bad_Opcode },
6965 { Bad_Opcode },
6966 { Bad_Opcode },
6967 { Bad_Opcode },
5dd85c99 6968 /* f8 */
592d1631
L
6969 { Bad_Opcode },
6970 { Bad_Opcode },
6971 { Bad_Opcode },
6972 { Bad_Opcode },
6973 { Bad_Opcode },
6974 { Bad_Opcode },
6975 { Bad_Opcode },
6976 { Bad_Opcode },
5dd85c99
SP
6977 },
6978 /* XOP_09 */
6979 {
6980 /* 00 */
592d1631 6981 { Bad_Opcode },
2a2a0f38
QN
6982 { REG_TABLE (REG_XOP_TBM_01) },
6983 { REG_TABLE (REG_XOP_TBM_02) },
592d1631
L
6984 { Bad_Opcode },
6985 { Bad_Opcode },
6986 { Bad_Opcode },
6987 { Bad_Opcode },
6988 { Bad_Opcode },
5dd85c99 6989 /* 08 */
592d1631
L
6990 { Bad_Opcode },
6991 { Bad_Opcode },
6992 { Bad_Opcode },
6993 { Bad_Opcode },
6994 { Bad_Opcode },
6995 { Bad_Opcode },
6996 { Bad_Opcode },
6997 { Bad_Opcode },
5dd85c99 6998 /* 10 */
592d1631
L
6999 { Bad_Opcode },
7000 { Bad_Opcode },
5dd85c99 7001 { REG_TABLE (REG_XOP_LWPCB) },
592d1631
L
7002 { Bad_Opcode },
7003 { Bad_Opcode },
7004 { Bad_Opcode },
7005 { Bad_Opcode },
7006 { Bad_Opcode },
5dd85c99 7007 /* 18 */
592d1631
L
7008 { Bad_Opcode },
7009 { Bad_Opcode },
7010 { Bad_Opcode },
7011 { Bad_Opcode },
7012 { Bad_Opcode },
7013 { Bad_Opcode },
7014 { Bad_Opcode },
7015 { Bad_Opcode },
5dd85c99 7016 /* 20 */
592d1631
L
7017 { Bad_Opcode },
7018 { Bad_Opcode },
7019 { Bad_Opcode },
7020 { Bad_Opcode },
7021 { Bad_Opcode },
7022 { Bad_Opcode },
7023 { Bad_Opcode },
7024 { Bad_Opcode },
5dd85c99 7025 /* 28 */
592d1631
L
7026 { Bad_Opcode },
7027 { Bad_Opcode },
7028 { Bad_Opcode },
7029 { Bad_Opcode },
7030 { Bad_Opcode },
7031 { Bad_Opcode },
7032 { Bad_Opcode },
7033 { Bad_Opcode },
5dd85c99 7034 /* 30 */
592d1631
L
7035 { Bad_Opcode },
7036 { Bad_Opcode },
7037 { Bad_Opcode },
7038 { Bad_Opcode },
7039 { Bad_Opcode },
7040 { Bad_Opcode },
7041 { Bad_Opcode },
7042 { Bad_Opcode },
5dd85c99 7043 /* 38 */
592d1631
L
7044 { Bad_Opcode },
7045 { Bad_Opcode },
7046 { Bad_Opcode },
7047 { Bad_Opcode },
7048 { Bad_Opcode },
7049 { Bad_Opcode },
7050 { Bad_Opcode },
7051 { Bad_Opcode },
5dd85c99 7052 /* 40 */
592d1631
L
7053 { Bad_Opcode },
7054 { Bad_Opcode },
7055 { Bad_Opcode },
7056 { Bad_Opcode },
7057 { Bad_Opcode },
7058 { Bad_Opcode },
7059 { Bad_Opcode },
7060 { Bad_Opcode },
5dd85c99 7061 /* 48 */
592d1631
L
7062 { Bad_Opcode },
7063 { Bad_Opcode },
7064 { Bad_Opcode },
7065 { Bad_Opcode },
7066 { Bad_Opcode },
7067 { Bad_Opcode },
7068 { Bad_Opcode },
7069 { Bad_Opcode },
5dd85c99 7070 /* 50 */
592d1631
L
7071 { Bad_Opcode },
7072 { Bad_Opcode },
7073 { Bad_Opcode },
7074 { Bad_Opcode },
7075 { Bad_Opcode },
7076 { Bad_Opcode },
7077 { Bad_Opcode },
7078 { Bad_Opcode },
5dd85c99 7079 /* 58 */
592d1631
L
7080 { Bad_Opcode },
7081 { Bad_Opcode },
7082 { Bad_Opcode },
7083 { Bad_Opcode },
7084 { Bad_Opcode },
7085 { Bad_Opcode },
7086 { Bad_Opcode },
7087 { Bad_Opcode },
5dd85c99 7088 /* 60 */
592d1631
L
7089 { Bad_Opcode },
7090 { Bad_Opcode },
7091 { Bad_Opcode },
7092 { Bad_Opcode },
7093 { Bad_Opcode },
7094 { Bad_Opcode },
7095 { Bad_Opcode },
7096 { Bad_Opcode },
5dd85c99 7097 /* 68 */
592d1631
L
7098 { Bad_Opcode },
7099 { Bad_Opcode },
7100 { Bad_Opcode },
7101 { Bad_Opcode },
7102 { Bad_Opcode },
7103 { Bad_Opcode },
7104 { Bad_Opcode },
7105 { Bad_Opcode },
5dd85c99 7106 /* 70 */
592d1631
L
7107 { Bad_Opcode },
7108 { Bad_Opcode },
7109 { Bad_Opcode },
7110 { Bad_Opcode },
7111 { Bad_Opcode },
7112 { Bad_Opcode },
7113 { Bad_Opcode },
7114 { Bad_Opcode },
5dd85c99 7115 /* 78 */
592d1631
L
7116 { Bad_Opcode },
7117 { Bad_Opcode },
7118 { Bad_Opcode },
7119 { Bad_Opcode },
7120 { Bad_Opcode },
7121 { Bad_Opcode },
7122 { Bad_Opcode },
7123 { Bad_Opcode },
5dd85c99 7124 /* 80 */
592a252b
L
7125 { VEX_LEN_TABLE (VEX_LEN_0FXOP_09_80) },
7126 { VEX_LEN_TABLE (VEX_LEN_0FXOP_09_81) },
5dd85c99
SP
7127 { "vfrczss", { XM, EXd } },
7128 { "vfrczsd", { XM, EXq } },
592d1631
L
7129 { Bad_Opcode },
7130 { Bad_Opcode },
7131 { Bad_Opcode },
7132 { Bad_Opcode },
5dd85c99 7133 /* 88 */
592d1631
L
7134 { Bad_Opcode },
7135 { Bad_Opcode },
7136 { Bad_Opcode },
7137 { Bad_Opcode },
7138 { Bad_Opcode },
7139 { Bad_Opcode },
7140 { Bad_Opcode },
7141 { Bad_Opcode },
5dd85c99
SP
7142 /* 90 */
7143 { "vprotb", { XM, Vex_2src_1, Vex_2src_2 } },
7144 { "vprotw", { XM, Vex_2src_1, Vex_2src_2 } },
7145 { "vprotd", { XM, Vex_2src_1, Vex_2src_2 } },
7146 { "vprotq", { XM, Vex_2src_1, Vex_2src_2 } },
7147 { "vpshlb", { XM, Vex_2src_1, Vex_2src_2 } },
7148 { "vpshlw", { XM, Vex_2src_1, Vex_2src_2 } },
7149 { "vpshld", { XM, Vex_2src_1, Vex_2src_2 } },
7150 { "vpshlq", { XM, Vex_2src_1, Vex_2src_2 } },
7151 /* 98 */
7152 { "vpshab", { XM, Vex_2src_1, Vex_2src_2 } },
7153 { "vpshaw", { XM, Vex_2src_1, Vex_2src_2 } },
7154 { "vpshad", { XM, Vex_2src_1, Vex_2src_2 } },
7155 { "vpshaq", { XM, Vex_2src_1, Vex_2src_2 } },
592d1631
L
7156 { Bad_Opcode },
7157 { Bad_Opcode },
7158 { Bad_Opcode },
7159 { Bad_Opcode },
5dd85c99 7160 /* a0 */
592d1631
L
7161 { Bad_Opcode },
7162 { Bad_Opcode },
7163 { Bad_Opcode },
7164 { Bad_Opcode },
7165 { Bad_Opcode },
7166 { Bad_Opcode },
7167 { Bad_Opcode },
7168 { Bad_Opcode },
5dd85c99 7169 /* a8 */
592d1631
L
7170 { Bad_Opcode },
7171 { Bad_Opcode },
7172 { Bad_Opcode },
7173 { Bad_Opcode },
7174 { Bad_Opcode },
7175 { Bad_Opcode },
7176 { Bad_Opcode },
7177 { Bad_Opcode },
5dd85c99 7178 /* b0 */
592d1631
L
7179 { Bad_Opcode },
7180 { Bad_Opcode },
7181 { Bad_Opcode },
7182 { Bad_Opcode },
7183 { Bad_Opcode },
7184 { Bad_Opcode },
7185 { Bad_Opcode },
7186 { Bad_Opcode },
5dd85c99 7187 /* b8 */
592d1631
L
7188 { Bad_Opcode },
7189 { Bad_Opcode },
7190 { Bad_Opcode },
7191 { Bad_Opcode },
7192 { Bad_Opcode },
7193 { Bad_Opcode },
7194 { Bad_Opcode },
7195 { Bad_Opcode },
5dd85c99 7196 /* c0 */
592d1631 7197 { Bad_Opcode },
5dd85c99
SP
7198 { "vphaddbw", { XM, EXxmm } },
7199 { "vphaddbd", { XM, EXxmm } },
7200 { "vphaddbq", { XM, EXxmm } },
592d1631
L
7201 { Bad_Opcode },
7202 { Bad_Opcode },
5dd85c99
SP
7203 { "vphaddwd", { XM, EXxmm } },
7204 { "vphaddwq", { XM, EXxmm } },
7205 /* c8 */
592d1631
L
7206 { Bad_Opcode },
7207 { Bad_Opcode },
7208 { Bad_Opcode },
5dd85c99 7209 { "vphadddq", { XM, EXxmm } },
592d1631
L
7210 { Bad_Opcode },
7211 { Bad_Opcode },
7212 { Bad_Opcode },
7213 { Bad_Opcode },
5dd85c99 7214 /* d0 */
592d1631 7215 { Bad_Opcode },
5dd85c99
SP
7216 { "vphaddubw", { XM, EXxmm } },
7217 { "vphaddubd", { XM, EXxmm } },
7218 { "vphaddubq", { XM, EXxmm } },
592d1631
L
7219 { Bad_Opcode },
7220 { Bad_Opcode },
5dd85c99
SP
7221 { "vphadduwd", { XM, EXxmm } },
7222 { "vphadduwq", { XM, EXxmm } },
7223 /* d8 */
592d1631
L
7224 { Bad_Opcode },
7225 { Bad_Opcode },
7226 { Bad_Opcode },
5dd85c99 7227 { "vphaddudq", { XM, EXxmm } },
592d1631
L
7228 { Bad_Opcode },
7229 { Bad_Opcode },
7230 { Bad_Opcode },
7231 { Bad_Opcode },
5dd85c99 7232 /* e0 */
592d1631 7233 { Bad_Opcode },
5dd85c99
SP
7234 { "vphsubbw", { XM, EXxmm } },
7235 { "vphsubwd", { XM, EXxmm } },
7236 { "vphsubdq", { XM, EXxmm } },
592d1631
L
7237 { Bad_Opcode },
7238 { Bad_Opcode },
7239 { Bad_Opcode },
7240 { Bad_Opcode },
4e7d34a6 7241 /* e8 */
592d1631
L
7242 { Bad_Opcode },
7243 { Bad_Opcode },
7244 { Bad_Opcode },
7245 { Bad_Opcode },
7246 { Bad_Opcode },
7247 { Bad_Opcode },
7248 { Bad_Opcode },
7249 { Bad_Opcode },
4e7d34a6 7250 /* f0 */
592d1631
L
7251 { Bad_Opcode },
7252 { Bad_Opcode },
7253 { Bad_Opcode },
7254 { Bad_Opcode },
7255 { Bad_Opcode },
7256 { Bad_Opcode },
7257 { Bad_Opcode },
7258 { Bad_Opcode },
4e7d34a6 7259 /* f8 */
592d1631
L
7260 { Bad_Opcode },
7261 { Bad_Opcode },
7262 { Bad_Opcode },
7263 { Bad_Opcode },
7264 { Bad_Opcode },
7265 { Bad_Opcode },
7266 { Bad_Opcode },
7267 { Bad_Opcode },
4e7d34a6 7268 },
f88c9eb0 7269 /* XOP_0A */
4e7d34a6
L
7270 {
7271 /* 00 */
592d1631
L
7272 { Bad_Opcode },
7273 { Bad_Opcode },
7274 { Bad_Opcode },
7275 { Bad_Opcode },
7276 { Bad_Opcode },
7277 { Bad_Opcode },
7278 { Bad_Opcode },
7279 { Bad_Opcode },
4e7d34a6 7280 /* 08 */
592d1631
L
7281 { Bad_Opcode },
7282 { Bad_Opcode },
7283 { Bad_Opcode },
7284 { Bad_Opcode },
7285 { Bad_Opcode },
7286 { Bad_Opcode },
7287 { Bad_Opcode },
7288 { Bad_Opcode },
4e7d34a6 7289 /* 10 */
2a2a0f38 7290 { "bextr", { Gv, Ev, Iq } },
592d1631 7291 { Bad_Opcode },
f88c9eb0 7292 { REG_TABLE (REG_XOP_LWP) },
592d1631
L
7293 { Bad_Opcode },
7294 { Bad_Opcode },
7295 { Bad_Opcode },
7296 { Bad_Opcode },
7297 { Bad_Opcode },
4e7d34a6 7298 /* 18 */
592d1631
L
7299 { Bad_Opcode },
7300 { Bad_Opcode },
7301 { Bad_Opcode },
7302 { Bad_Opcode },
7303 { Bad_Opcode },
7304 { Bad_Opcode },
7305 { Bad_Opcode },
7306 { Bad_Opcode },
4e7d34a6 7307 /* 20 */
592d1631
L
7308 { Bad_Opcode },
7309 { Bad_Opcode },
7310 { Bad_Opcode },
7311 { Bad_Opcode },
7312 { Bad_Opcode },
7313 { Bad_Opcode },
7314 { Bad_Opcode },
7315 { Bad_Opcode },
4e7d34a6 7316 /* 28 */
592d1631
L
7317 { Bad_Opcode },
7318 { Bad_Opcode },
7319 { Bad_Opcode },
7320 { Bad_Opcode },
7321 { Bad_Opcode },
7322 { Bad_Opcode },
7323 { Bad_Opcode },
7324 { Bad_Opcode },
4e7d34a6 7325 /* 30 */
592d1631
L
7326 { Bad_Opcode },
7327 { Bad_Opcode },
7328 { Bad_Opcode },
7329 { Bad_Opcode },
7330 { Bad_Opcode },
7331 { Bad_Opcode },
7332 { Bad_Opcode },
7333 { Bad_Opcode },
c0f3af97 7334 /* 38 */
592d1631
L
7335 { Bad_Opcode },
7336 { Bad_Opcode },
7337 { Bad_Opcode },
7338 { Bad_Opcode },
7339 { Bad_Opcode },
7340 { Bad_Opcode },
7341 { Bad_Opcode },
7342 { Bad_Opcode },
c0f3af97 7343 /* 40 */
592d1631
L
7344 { Bad_Opcode },
7345 { Bad_Opcode },
7346 { Bad_Opcode },
7347 { Bad_Opcode },
7348 { Bad_Opcode },
7349 { Bad_Opcode },
7350 { Bad_Opcode },
7351 { Bad_Opcode },
c1e679ec 7352 /* 48 */
592d1631
L
7353 { Bad_Opcode },
7354 { Bad_Opcode },
7355 { Bad_Opcode },
7356 { Bad_Opcode },
7357 { Bad_Opcode },
7358 { Bad_Opcode },
7359 { Bad_Opcode },
7360 { Bad_Opcode },
c1e679ec 7361 /* 50 */
592d1631
L
7362 { Bad_Opcode },
7363 { Bad_Opcode },
7364 { Bad_Opcode },
7365 { Bad_Opcode },
7366 { Bad_Opcode },
7367 { Bad_Opcode },
7368 { Bad_Opcode },
7369 { Bad_Opcode },
4e7d34a6 7370 /* 58 */
592d1631
L
7371 { Bad_Opcode },
7372 { Bad_Opcode },
7373 { Bad_Opcode },
7374 { Bad_Opcode },
7375 { Bad_Opcode },
7376 { Bad_Opcode },
7377 { Bad_Opcode },
7378 { Bad_Opcode },
4e7d34a6 7379 /* 60 */
592d1631
L
7380 { Bad_Opcode },
7381 { Bad_Opcode },
7382 { Bad_Opcode },
7383 { Bad_Opcode },
7384 { Bad_Opcode },
7385 { Bad_Opcode },
7386 { Bad_Opcode },
7387 { Bad_Opcode },
4e7d34a6 7388 /* 68 */
592d1631
L
7389 { Bad_Opcode },
7390 { Bad_Opcode },
7391 { Bad_Opcode },
7392 { Bad_Opcode },
7393 { Bad_Opcode },
7394 { Bad_Opcode },
7395 { Bad_Opcode },
7396 { Bad_Opcode },
4e7d34a6 7397 /* 70 */
592d1631
L
7398 { Bad_Opcode },
7399 { Bad_Opcode },
7400 { Bad_Opcode },
7401 { Bad_Opcode },
7402 { Bad_Opcode },
7403 { Bad_Opcode },
7404 { Bad_Opcode },
7405 { Bad_Opcode },
4e7d34a6 7406 /* 78 */
592d1631
L
7407 { Bad_Opcode },
7408 { Bad_Opcode },
7409 { Bad_Opcode },
7410 { Bad_Opcode },
7411 { Bad_Opcode },
7412 { Bad_Opcode },
7413 { Bad_Opcode },
7414 { Bad_Opcode },
4e7d34a6 7415 /* 80 */
592d1631
L
7416 { Bad_Opcode },
7417 { Bad_Opcode },
7418 { Bad_Opcode },
7419 { Bad_Opcode },
7420 { Bad_Opcode },
7421 { Bad_Opcode },
7422 { Bad_Opcode },
7423 { Bad_Opcode },
4e7d34a6 7424 /* 88 */
592d1631
L
7425 { Bad_Opcode },
7426 { Bad_Opcode },
7427 { Bad_Opcode },
7428 { Bad_Opcode },
7429 { Bad_Opcode },
7430 { Bad_Opcode },
7431 { Bad_Opcode },
7432 { Bad_Opcode },
4e7d34a6 7433 /* 90 */
592d1631
L
7434 { Bad_Opcode },
7435 { Bad_Opcode },
7436 { Bad_Opcode },
7437 { Bad_Opcode },
7438 { Bad_Opcode },
7439 { Bad_Opcode },
7440 { Bad_Opcode },
7441 { Bad_Opcode },
4e7d34a6 7442 /* 98 */
592d1631
L
7443 { Bad_Opcode },
7444 { Bad_Opcode },
7445 { Bad_Opcode },
7446 { Bad_Opcode },
7447 { Bad_Opcode },
7448 { Bad_Opcode },
7449 { Bad_Opcode },
7450 { Bad_Opcode },
4e7d34a6 7451 /* a0 */
592d1631
L
7452 { Bad_Opcode },
7453 { Bad_Opcode },
7454 { Bad_Opcode },
7455 { Bad_Opcode },
7456 { Bad_Opcode },
7457 { Bad_Opcode },
7458 { Bad_Opcode },
7459 { Bad_Opcode },
4e7d34a6 7460 /* a8 */
592d1631
L
7461 { Bad_Opcode },
7462 { Bad_Opcode },
7463 { Bad_Opcode },
7464 { Bad_Opcode },
7465 { Bad_Opcode },
7466 { Bad_Opcode },
7467 { Bad_Opcode },
7468 { Bad_Opcode },
d5d7db8e 7469 /* b0 */
592d1631
L
7470 { Bad_Opcode },
7471 { Bad_Opcode },
7472 { Bad_Opcode },
7473 { Bad_Opcode },
7474 { Bad_Opcode },
7475 { Bad_Opcode },
7476 { Bad_Opcode },
7477 { Bad_Opcode },
85f10a01 7478 /* b8 */
592d1631
L
7479 { Bad_Opcode },
7480 { Bad_Opcode },
7481 { Bad_Opcode },
7482 { Bad_Opcode },
7483 { Bad_Opcode },
7484 { Bad_Opcode },
7485 { Bad_Opcode },
7486 { Bad_Opcode },
85f10a01 7487 /* c0 */
592d1631
L
7488 { Bad_Opcode },
7489 { Bad_Opcode },
7490 { Bad_Opcode },
7491 { Bad_Opcode },
7492 { Bad_Opcode },
7493 { Bad_Opcode },
7494 { Bad_Opcode },
7495 { Bad_Opcode },
85f10a01 7496 /* c8 */
592d1631
L
7497 { Bad_Opcode },
7498 { Bad_Opcode },
7499 { Bad_Opcode },
7500 { Bad_Opcode },
7501 { Bad_Opcode },
7502 { Bad_Opcode },
7503 { Bad_Opcode },
7504 { Bad_Opcode },
85f10a01 7505 /* d0 */
592d1631
L
7506 { Bad_Opcode },
7507 { Bad_Opcode },
7508 { Bad_Opcode },
7509 { Bad_Opcode },
7510 { Bad_Opcode },
7511 { Bad_Opcode },
7512 { Bad_Opcode },
7513 { Bad_Opcode },
85f10a01 7514 /* d8 */
592d1631
L
7515 { Bad_Opcode },
7516 { Bad_Opcode },
7517 { Bad_Opcode },
7518 { Bad_Opcode },
7519 { Bad_Opcode },
7520 { Bad_Opcode },
7521 { Bad_Opcode },
7522 { Bad_Opcode },
85f10a01 7523 /* e0 */
592d1631
L
7524 { Bad_Opcode },
7525 { Bad_Opcode },
7526 { Bad_Opcode },
7527 { Bad_Opcode },
7528 { Bad_Opcode },
7529 { Bad_Opcode },
7530 { Bad_Opcode },
7531 { Bad_Opcode },
85f10a01 7532 /* e8 */
592d1631
L
7533 { Bad_Opcode },
7534 { Bad_Opcode },
7535 { Bad_Opcode },
7536 { Bad_Opcode },
7537 { Bad_Opcode },
7538 { Bad_Opcode },
7539 { Bad_Opcode },
7540 { Bad_Opcode },
85f10a01 7541 /* f0 */
592d1631
L
7542 { Bad_Opcode },
7543 { Bad_Opcode },
7544 { Bad_Opcode },
7545 { Bad_Opcode },
7546 { Bad_Opcode },
7547 { Bad_Opcode },
7548 { Bad_Opcode },
7549 { Bad_Opcode },
85f10a01 7550 /* f8 */
592d1631
L
7551 { Bad_Opcode },
7552 { Bad_Opcode },
7553 { Bad_Opcode },
7554 { Bad_Opcode },
7555 { Bad_Opcode },
7556 { Bad_Opcode },
7557 { Bad_Opcode },
7558 { Bad_Opcode },
85f10a01 7559 },
c0f3af97
L
7560};
7561
7562static const struct dis386 vex_table[][256] = {
7563 /* VEX_0F */
85f10a01
MM
7564 {
7565 /* 00 */
592d1631
L
7566 { Bad_Opcode },
7567 { Bad_Opcode },
7568 { Bad_Opcode },
7569 { Bad_Opcode },
7570 { Bad_Opcode },
7571 { Bad_Opcode },
7572 { Bad_Opcode },
7573 { Bad_Opcode },
85f10a01 7574 /* 08 */
592d1631
L
7575 { Bad_Opcode },
7576 { Bad_Opcode },
7577 { Bad_Opcode },
7578 { Bad_Opcode },
7579 { Bad_Opcode },
7580 { Bad_Opcode },
7581 { Bad_Opcode },
7582 { Bad_Opcode },
c0f3af97 7583 /* 10 */
592a252b
L
7584 { PREFIX_TABLE (PREFIX_VEX_0F10) },
7585 { PREFIX_TABLE (PREFIX_VEX_0F11) },
7586 { PREFIX_TABLE (PREFIX_VEX_0F12) },
7587 { MOD_TABLE (MOD_VEX_0F13) },
7588 { VEX_W_TABLE (VEX_W_0F14) },
7589 { VEX_W_TABLE (VEX_W_0F15) },
7590 { PREFIX_TABLE (PREFIX_VEX_0F16) },
7591 { MOD_TABLE (MOD_VEX_0F17) },
c0f3af97 7592 /* 18 */
592d1631
L
7593 { Bad_Opcode },
7594 { Bad_Opcode },
7595 { Bad_Opcode },
7596 { Bad_Opcode },
7597 { Bad_Opcode },
7598 { Bad_Opcode },
7599 { Bad_Opcode },
7600 { Bad_Opcode },
c0f3af97 7601 /* 20 */
592d1631
L
7602 { Bad_Opcode },
7603 { Bad_Opcode },
7604 { Bad_Opcode },
7605 { Bad_Opcode },
7606 { Bad_Opcode },
7607 { Bad_Opcode },
7608 { Bad_Opcode },
7609 { Bad_Opcode },
c0f3af97 7610 /* 28 */
592a252b
L
7611 { VEX_W_TABLE (VEX_W_0F28) },
7612 { VEX_W_TABLE (VEX_W_0F29) },
7613 { PREFIX_TABLE (PREFIX_VEX_0F2A) },
7614 { MOD_TABLE (MOD_VEX_0F2B) },
7615 { PREFIX_TABLE (PREFIX_VEX_0F2C) },
7616 { PREFIX_TABLE (PREFIX_VEX_0F2D) },
7617 { PREFIX_TABLE (PREFIX_VEX_0F2E) },
7618 { PREFIX_TABLE (PREFIX_VEX_0F2F) },
85f10a01 7619 /* 30 */
592d1631
L
7620 { Bad_Opcode },
7621 { Bad_Opcode },
7622 { Bad_Opcode },
7623 { Bad_Opcode },
7624 { Bad_Opcode },
7625 { Bad_Opcode },
7626 { Bad_Opcode },
7627 { Bad_Opcode },
4e7d34a6 7628 /* 38 */
592d1631
L
7629 { Bad_Opcode },
7630 { Bad_Opcode },
7631 { Bad_Opcode },
7632 { Bad_Opcode },
7633 { Bad_Opcode },
7634 { Bad_Opcode },
7635 { Bad_Opcode },
7636 { Bad_Opcode },
d5d7db8e 7637 /* 40 */
592d1631
L
7638 { Bad_Opcode },
7639 { Bad_Opcode },
7640 { Bad_Opcode },
7641 { Bad_Opcode },
7642 { Bad_Opcode },
7643 { Bad_Opcode },
7644 { Bad_Opcode },
7645 { Bad_Opcode },
85f10a01 7646 /* 48 */
592d1631
L
7647 { Bad_Opcode },
7648 { Bad_Opcode },
7649 { Bad_Opcode },
7650 { Bad_Opcode },
7651 { Bad_Opcode },
7652 { Bad_Opcode },
7653 { Bad_Opcode },
7654 { Bad_Opcode },
d5d7db8e 7655 /* 50 */
592a252b
L
7656 { MOD_TABLE (MOD_VEX_0F50) },
7657 { PREFIX_TABLE (PREFIX_VEX_0F51) },
7658 { PREFIX_TABLE (PREFIX_VEX_0F52) },
7659 { PREFIX_TABLE (PREFIX_VEX_0F53) },
c0f3af97
L
7660 { "vandpX", { XM, Vex, EXx } },
7661 { "vandnpX", { XM, Vex, EXx } },
7662 { "vorpX", { XM, Vex, EXx } },
7663 { "vxorpX", { XM, Vex, EXx } },
7664 /* 58 */
592a252b
L
7665 { PREFIX_TABLE (PREFIX_VEX_0F58) },
7666 { PREFIX_TABLE (PREFIX_VEX_0F59) },
7667 { PREFIX_TABLE (PREFIX_VEX_0F5A) },
7668 { PREFIX_TABLE (PREFIX_VEX_0F5B) },
7669 { PREFIX_TABLE (PREFIX_VEX_0F5C) },
7670 { PREFIX_TABLE (PREFIX_VEX_0F5D) },
7671 { PREFIX_TABLE (PREFIX_VEX_0F5E) },
7672 { PREFIX_TABLE (PREFIX_VEX_0F5F) },
c0f3af97 7673 /* 60 */
592a252b
L
7674 { PREFIX_TABLE (PREFIX_VEX_0F60) },
7675 { PREFIX_TABLE (PREFIX_VEX_0F61) },
7676 { PREFIX_TABLE (PREFIX_VEX_0F62) },
7677 { PREFIX_TABLE (PREFIX_VEX_0F63) },
7678 { PREFIX_TABLE (PREFIX_VEX_0F64) },
7679 { PREFIX_TABLE (PREFIX_VEX_0F65) },
7680 { PREFIX_TABLE (PREFIX_VEX_0F66) },
7681 { PREFIX_TABLE (PREFIX_VEX_0F67) },
c0f3af97 7682 /* 68 */
592a252b
L
7683 { PREFIX_TABLE (PREFIX_VEX_0F68) },
7684 { PREFIX_TABLE (PREFIX_VEX_0F69) },
7685 { PREFIX_TABLE (PREFIX_VEX_0F6A) },
7686 { PREFIX_TABLE (PREFIX_VEX_0F6B) },
7687 { PREFIX_TABLE (PREFIX_VEX_0F6C) },
7688 { PREFIX_TABLE (PREFIX_VEX_0F6D) },
7689 { PREFIX_TABLE (PREFIX_VEX_0F6E) },
7690 { PREFIX_TABLE (PREFIX_VEX_0F6F) },
c0f3af97 7691 /* 70 */
592a252b
L
7692 { PREFIX_TABLE (PREFIX_VEX_0F70) },
7693 { REG_TABLE (REG_VEX_0F71) },
7694 { REG_TABLE (REG_VEX_0F72) },
7695 { REG_TABLE (REG_VEX_0F73) },
7696 { PREFIX_TABLE (PREFIX_VEX_0F74) },
7697 { PREFIX_TABLE (PREFIX_VEX_0F75) },
7698 { PREFIX_TABLE (PREFIX_VEX_0F76) },
7699 { PREFIX_TABLE (PREFIX_VEX_0F77) },
c0f3af97 7700 /* 78 */
592d1631
L
7701 { Bad_Opcode },
7702 { Bad_Opcode },
7703 { Bad_Opcode },
7704 { Bad_Opcode },
592a252b
L
7705 { PREFIX_TABLE (PREFIX_VEX_0F7C) },
7706 { PREFIX_TABLE (PREFIX_VEX_0F7D) },
7707 { PREFIX_TABLE (PREFIX_VEX_0F7E) },
7708 { PREFIX_TABLE (PREFIX_VEX_0F7F) },
c0f3af97 7709 /* 80 */
592d1631
L
7710 { Bad_Opcode },
7711 { Bad_Opcode },
7712 { Bad_Opcode },
7713 { Bad_Opcode },
7714 { Bad_Opcode },
7715 { Bad_Opcode },
7716 { Bad_Opcode },
7717 { Bad_Opcode },
c0f3af97 7718 /* 88 */
592d1631
L
7719 { Bad_Opcode },
7720 { Bad_Opcode },
7721 { Bad_Opcode },
7722 { Bad_Opcode },
7723 { Bad_Opcode },
7724 { Bad_Opcode },
7725 { Bad_Opcode },
7726 { Bad_Opcode },
c0f3af97 7727 /* 90 */
592d1631
L
7728 { Bad_Opcode },
7729 { Bad_Opcode },
7730 { Bad_Opcode },
7731 { Bad_Opcode },
7732 { Bad_Opcode },
7733 { Bad_Opcode },
7734 { Bad_Opcode },
7735 { Bad_Opcode },
c0f3af97 7736 /* 98 */
592d1631
L
7737 { Bad_Opcode },
7738 { Bad_Opcode },
7739 { Bad_Opcode },
7740 { Bad_Opcode },
7741 { Bad_Opcode },
7742 { Bad_Opcode },
7743 { Bad_Opcode },
7744 { Bad_Opcode },
c0f3af97 7745 /* a0 */
592d1631
L
7746 { Bad_Opcode },
7747 { Bad_Opcode },
7748 { Bad_Opcode },
7749 { Bad_Opcode },
7750 { Bad_Opcode },
7751 { Bad_Opcode },
7752 { Bad_Opcode },
7753 { Bad_Opcode },
c0f3af97 7754 /* a8 */
592d1631
L
7755 { Bad_Opcode },
7756 { Bad_Opcode },
7757 { Bad_Opcode },
7758 { Bad_Opcode },
7759 { Bad_Opcode },
7760 { Bad_Opcode },
592a252b 7761 { REG_TABLE (REG_VEX_0FAE) },
592d1631 7762 { Bad_Opcode },
c0f3af97 7763 /* b0 */
592d1631
L
7764 { Bad_Opcode },
7765 { Bad_Opcode },
7766 { Bad_Opcode },
7767 { Bad_Opcode },
7768 { Bad_Opcode },
7769 { Bad_Opcode },
7770 { Bad_Opcode },
7771 { Bad_Opcode },
c0f3af97 7772 /* b8 */
592d1631
L
7773 { Bad_Opcode },
7774 { Bad_Opcode },
7775 { Bad_Opcode },
7776 { Bad_Opcode },
7777 { Bad_Opcode },
7778 { Bad_Opcode },
7779 { Bad_Opcode },
7780 { Bad_Opcode },
c0f3af97 7781 /* c0 */
592d1631
L
7782 { Bad_Opcode },
7783 { Bad_Opcode },
592a252b 7784 { PREFIX_TABLE (PREFIX_VEX_0FC2) },
592d1631 7785 { Bad_Opcode },
592a252b
L
7786 { PREFIX_TABLE (PREFIX_VEX_0FC4) },
7787 { PREFIX_TABLE (PREFIX_VEX_0FC5) },
c0f3af97 7788 { "vshufpX", { XM, Vex, EXx, Ib } },
592d1631 7789 { Bad_Opcode },
c0f3af97 7790 /* c8 */
592d1631
L
7791 { Bad_Opcode },
7792 { Bad_Opcode },
7793 { Bad_Opcode },
7794 { Bad_Opcode },
7795 { Bad_Opcode },
7796 { Bad_Opcode },
7797 { Bad_Opcode },
7798 { Bad_Opcode },
c0f3af97 7799 /* d0 */
592a252b
L
7800 { PREFIX_TABLE (PREFIX_VEX_0FD0) },
7801 { PREFIX_TABLE (PREFIX_VEX_0FD1) },
7802 { PREFIX_TABLE (PREFIX_VEX_0FD2) },
7803 { PREFIX_TABLE (PREFIX_VEX_0FD3) },
7804 { PREFIX_TABLE (PREFIX_VEX_0FD4) },
7805 { PREFIX_TABLE (PREFIX_VEX_0FD5) },
7806 { PREFIX_TABLE (PREFIX_VEX_0FD6) },
7807 { PREFIX_TABLE (PREFIX_VEX_0FD7) },
c0f3af97 7808 /* d8 */
592a252b
L
7809 { PREFIX_TABLE (PREFIX_VEX_0FD8) },
7810 { PREFIX_TABLE (PREFIX_VEX_0FD9) },
7811 { PREFIX_TABLE (PREFIX_VEX_0FDA) },
7812 { PREFIX_TABLE (PREFIX_VEX_0FDB) },
7813 { PREFIX_TABLE (PREFIX_VEX_0FDC) },
7814 { PREFIX_TABLE (PREFIX_VEX_0FDD) },
7815 { PREFIX_TABLE (PREFIX_VEX_0FDE) },
7816 { PREFIX_TABLE (PREFIX_VEX_0FDF) },
c0f3af97 7817 /* e0 */
592a252b
L
7818 { PREFIX_TABLE (PREFIX_VEX_0FE0) },
7819 { PREFIX_TABLE (PREFIX_VEX_0FE1) },
7820 { PREFIX_TABLE (PREFIX_VEX_0FE2) },
7821 { PREFIX_TABLE (PREFIX_VEX_0FE3) },
7822 { PREFIX_TABLE (PREFIX_VEX_0FE4) },
7823 { PREFIX_TABLE (PREFIX_VEX_0FE5) },
7824 { PREFIX_TABLE (PREFIX_VEX_0FE6) },
7825 { PREFIX_TABLE (PREFIX_VEX_0FE7) },
c0f3af97 7826 /* e8 */
592a252b
L
7827 { PREFIX_TABLE (PREFIX_VEX_0FE8) },
7828 { PREFIX_TABLE (PREFIX_VEX_0FE9) },
7829 { PREFIX_TABLE (PREFIX_VEX_0FEA) },
7830 { PREFIX_TABLE (PREFIX_VEX_0FEB) },
7831 { PREFIX_TABLE (PREFIX_VEX_0FEC) },
7832 { PREFIX_TABLE (PREFIX_VEX_0FED) },
7833 { PREFIX_TABLE (PREFIX_VEX_0FEE) },
7834 { PREFIX_TABLE (PREFIX_VEX_0FEF) },
c0f3af97 7835 /* f0 */
592a252b
L
7836 { PREFIX_TABLE (PREFIX_VEX_0FF0) },
7837 { PREFIX_TABLE (PREFIX_VEX_0FF1) },
7838 { PREFIX_TABLE (PREFIX_VEX_0FF2) },
7839 { PREFIX_TABLE (PREFIX_VEX_0FF3) },
7840 { PREFIX_TABLE (PREFIX_VEX_0FF4) },
7841 { PREFIX_TABLE (PREFIX_VEX_0FF5) },
7842 { PREFIX_TABLE (PREFIX_VEX_0FF6) },
7843 { PREFIX_TABLE (PREFIX_VEX_0FF7) },
c0f3af97 7844 /* f8 */
592a252b
L
7845 { PREFIX_TABLE (PREFIX_VEX_0FF8) },
7846 { PREFIX_TABLE (PREFIX_VEX_0FF9) },
7847 { PREFIX_TABLE (PREFIX_VEX_0FFA) },
7848 { PREFIX_TABLE (PREFIX_VEX_0FFB) },
7849 { PREFIX_TABLE (PREFIX_VEX_0FFC) },
7850 { PREFIX_TABLE (PREFIX_VEX_0FFD) },
7851 { PREFIX_TABLE (PREFIX_VEX_0FFE) },
592d1631 7852 { Bad_Opcode },
c0f3af97
L
7853 },
7854 /* VEX_0F38 */
7855 {
7856 /* 00 */
592a252b
L
7857 { PREFIX_TABLE (PREFIX_VEX_0F3800) },
7858 { PREFIX_TABLE (PREFIX_VEX_0F3801) },
7859 { PREFIX_TABLE (PREFIX_VEX_0F3802) },
7860 { PREFIX_TABLE (PREFIX_VEX_0F3803) },
7861 { PREFIX_TABLE (PREFIX_VEX_0F3804) },
7862 { PREFIX_TABLE (PREFIX_VEX_0F3805) },
7863 { PREFIX_TABLE (PREFIX_VEX_0F3806) },
7864 { PREFIX_TABLE (PREFIX_VEX_0F3807) },
c0f3af97 7865 /* 08 */
592a252b
L
7866 { PREFIX_TABLE (PREFIX_VEX_0F3808) },
7867 { PREFIX_TABLE (PREFIX_VEX_0F3809) },
7868 { PREFIX_TABLE (PREFIX_VEX_0F380A) },
7869 { PREFIX_TABLE (PREFIX_VEX_0F380B) },
7870 { PREFIX_TABLE (PREFIX_VEX_0F380C) },
7871 { PREFIX_TABLE (PREFIX_VEX_0F380D) },
7872 { PREFIX_TABLE (PREFIX_VEX_0F380E) },
7873 { PREFIX_TABLE (PREFIX_VEX_0F380F) },
c0f3af97 7874 /* 10 */
592d1631
L
7875 { Bad_Opcode },
7876 { Bad_Opcode },
7877 { Bad_Opcode },
592a252b 7878 { PREFIX_TABLE (PREFIX_VEX_0F3813) },
592d1631
L
7879 { Bad_Opcode },
7880 { Bad_Opcode },
6c30d220 7881 { PREFIX_TABLE (PREFIX_VEX_0F3816) },
592a252b 7882 { PREFIX_TABLE (PREFIX_VEX_0F3817) },
c0f3af97 7883 /* 18 */
592a252b
L
7884 { PREFIX_TABLE (PREFIX_VEX_0F3818) },
7885 { PREFIX_TABLE (PREFIX_VEX_0F3819) },
7886 { PREFIX_TABLE (PREFIX_VEX_0F381A) },
592d1631 7887 { Bad_Opcode },
592a252b
L
7888 { PREFIX_TABLE (PREFIX_VEX_0F381C) },
7889 { PREFIX_TABLE (PREFIX_VEX_0F381D) },
7890 { PREFIX_TABLE (PREFIX_VEX_0F381E) },
592d1631 7891 { Bad_Opcode },
c0f3af97 7892 /* 20 */
592a252b
L
7893 { PREFIX_TABLE (PREFIX_VEX_0F3820) },
7894 { PREFIX_TABLE (PREFIX_VEX_0F3821) },
7895 { PREFIX_TABLE (PREFIX_VEX_0F3822) },
7896 { PREFIX_TABLE (PREFIX_VEX_0F3823) },
7897 { PREFIX_TABLE (PREFIX_VEX_0F3824) },
7898 { PREFIX_TABLE (PREFIX_VEX_0F3825) },
592d1631
L
7899 { Bad_Opcode },
7900 { Bad_Opcode },
c0f3af97 7901 /* 28 */
592a252b
L
7902 { PREFIX_TABLE (PREFIX_VEX_0F3828) },
7903 { PREFIX_TABLE (PREFIX_VEX_0F3829) },
7904 { PREFIX_TABLE (PREFIX_VEX_0F382A) },
7905 { PREFIX_TABLE (PREFIX_VEX_0F382B) },
7906 { PREFIX_TABLE (PREFIX_VEX_0F382C) },
7907 { PREFIX_TABLE (PREFIX_VEX_0F382D) },
7908 { PREFIX_TABLE (PREFIX_VEX_0F382E) },
7909 { PREFIX_TABLE (PREFIX_VEX_0F382F) },
c0f3af97 7910 /* 30 */
592a252b
L
7911 { PREFIX_TABLE (PREFIX_VEX_0F3830) },
7912 { PREFIX_TABLE (PREFIX_VEX_0F3831) },
7913 { PREFIX_TABLE (PREFIX_VEX_0F3832) },
7914 { PREFIX_TABLE (PREFIX_VEX_0F3833) },
7915 { PREFIX_TABLE (PREFIX_VEX_0F3834) },
7916 { PREFIX_TABLE (PREFIX_VEX_0F3835) },
6c30d220 7917 { PREFIX_TABLE (PREFIX_VEX_0F3836) },
592a252b 7918 { PREFIX_TABLE (PREFIX_VEX_0F3837) },
c0f3af97 7919 /* 38 */
592a252b
L
7920 { PREFIX_TABLE (PREFIX_VEX_0F3838) },
7921 { PREFIX_TABLE (PREFIX_VEX_0F3839) },
7922 { PREFIX_TABLE (PREFIX_VEX_0F383A) },
7923 { PREFIX_TABLE (PREFIX_VEX_0F383B) },
7924 { PREFIX_TABLE (PREFIX_VEX_0F383C) },
7925 { PREFIX_TABLE (PREFIX_VEX_0F383D) },
7926 { PREFIX_TABLE (PREFIX_VEX_0F383E) },
7927 { PREFIX_TABLE (PREFIX_VEX_0F383F) },
c0f3af97 7928 /* 40 */
592a252b
L
7929 { PREFIX_TABLE (PREFIX_VEX_0F3840) },
7930 { PREFIX_TABLE (PREFIX_VEX_0F3841) },
592d1631
L
7931 { Bad_Opcode },
7932 { Bad_Opcode },
7933 { Bad_Opcode },
6c30d220
L
7934 { PREFIX_TABLE (PREFIX_VEX_0F3845) },
7935 { PREFIX_TABLE (PREFIX_VEX_0F3846) },
7936 { PREFIX_TABLE (PREFIX_VEX_0F3847) },
c0f3af97 7937 /* 48 */
592d1631
L
7938 { Bad_Opcode },
7939 { Bad_Opcode },
7940 { Bad_Opcode },
7941 { Bad_Opcode },
7942 { Bad_Opcode },
7943 { Bad_Opcode },
7944 { Bad_Opcode },
7945 { Bad_Opcode },
c0f3af97 7946 /* 50 */
592d1631
L
7947 { Bad_Opcode },
7948 { Bad_Opcode },
7949 { Bad_Opcode },
7950 { Bad_Opcode },
7951 { Bad_Opcode },
7952 { Bad_Opcode },
7953 { Bad_Opcode },
7954 { Bad_Opcode },
c0f3af97 7955 /* 58 */
6c30d220
L
7956 { PREFIX_TABLE (PREFIX_VEX_0F3858) },
7957 { PREFIX_TABLE (PREFIX_VEX_0F3859) },
7958 { PREFIX_TABLE (PREFIX_VEX_0F385A) },
592d1631
L
7959 { Bad_Opcode },
7960 { Bad_Opcode },
7961 { Bad_Opcode },
7962 { Bad_Opcode },
7963 { Bad_Opcode },
c0f3af97 7964 /* 60 */
592d1631
L
7965 { Bad_Opcode },
7966 { Bad_Opcode },
7967 { Bad_Opcode },
7968 { Bad_Opcode },
7969 { Bad_Opcode },
7970 { Bad_Opcode },
7971 { Bad_Opcode },
7972 { Bad_Opcode },
c0f3af97 7973 /* 68 */
592d1631
L
7974 { Bad_Opcode },
7975 { Bad_Opcode },
7976 { Bad_Opcode },
7977 { Bad_Opcode },
7978 { Bad_Opcode },
7979 { Bad_Opcode },
7980 { Bad_Opcode },
7981 { Bad_Opcode },
c0f3af97 7982 /* 70 */
592d1631
L
7983 { Bad_Opcode },
7984 { Bad_Opcode },
7985 { Bad_Opcode },
7986 { Bad_Opcode },
7987 { Bad_Opcode },
7988 { Bad_Opcode },
7989 { Bad_Opcode },
7990 { Bad_Opcode },
c0f3af97 7991 /* 78 */
6c30d220
L
7992 { PREFIX_TABLE (PREFIX_VEX_0F3878) },
7993 { PREFIX_TABLE (PREFIX_VEX_0F3879) },
592d1631
L
7994 { Bad_Opcode },
7995 { Bad_Opcode },
7996 { Bad_Opcode },
7997 { Bad_Opcode },
7998 { Bad_Opcode },
7999 { Bad_Opcode },
c0f3af97 8000 /* 80 */
592d1631
L
8001 { Bad_Opcode },
8002 { Bad_Opcode },
8003 { Bad_Opcode },
8004 { Bad_Opcode },
8005 { Bad_Opcode },
8006 { Bad_Opcode },
8007 { Bad_Opcode },
8008 { Bad_Opcode },
c0f3af97 8009 /* 88 */
592d1631
L
8010 { Bad_Opcode },
8011 { Bad_Opcode },
8012 { Bad_Opcode },
8013 { Bad_Opcode },
6c30d220 8014 { PREFIX_TABLE (PREFIX_VEX_0F388C) },
592d1631 8015 { Bad_Opcode },
6c30d220 8016 { PREFIX_TABLE (PREFIX_VEX_0F388E) },
592d1631 8017 { Bad_Opcode },
c0f3af97 8018 /* 90 */
6c30d220
L
8019 { PREFIX_TABLE (PREFIX_VEX_0F3890) },
8020 { PREFIX_TABLE (PREFIX_VEX_0F3891) },
8021 { PREFIX_TABLE (PREFIX_VEX_0F3892) },
8022 { PREFIX_TABLE (PREFIX_VEX_0F3893) },
592d1631
L
8023 { Bad_Opcode },
8024 { Bad_Opcode },
592a252b
L
8025 { PREFIX_TABLE (PREFIX_VEX_0F3896) },
8026 { PREFIX_TABLE (PREFIX_VEX_0F3897) },
c0f3af97 8027 /* 98 */
592a252b
L
8028 { PREFIX_TABLE (PREFIX_VEX_0F3898) },
8029 { PREFIX_TABLE (PREFIX_VEX_0F3899) },
8030 { PREFIX_TABLE (PREFIX_VEX_0F389A) },
8031 { PREFIX_TABLE (PREFIX_VEX_0F389B) },
8032 { PREFIX_TABLE (PREFIX_VEX_0F389C) },
8033 { PREFIX_TABLE (PREFIX_VEX_0F389D) },
8034 { PREFIX_TABLE (PREFIX_VEX_0F389E) },
8035 { PREFIX_TABLE (PREFIX_VEX_0F389F) },
c0f3af97 8036 /* a0 */
592d1631
L
8037 { Bad_Opcode },
8038 { Bad_Opcode },
8039 { Bad_Opcode },
8040 { Bad_Opcode },
8041 { Bad_Opcode },
8042 { Bad_Opcode },
592a252b
L
8043 { PREFIX_TABLE (PREFIX_VEX_0F38A6) },
8044 { PREFIX_TABLE (PREFIX_VEX_0F38A7) },
c0f3af97 8045 /* a8 */
592a252b
L
8046 { PREFIX_TABLE (PREFIX_VEX_0F38A8) },
8047 { PREFIX_TABLE (PREFIX_VEX_0F38A9) },
8048 { PREFIX_TABLE (PREFIX_VEX_0F38AA) },
8049 { PREFIX_TABLE (PREFIX_VEX_0F38AB) },
8050 { PREFIX_TABLE (PREFIX_VEX_0F38AC) },
8051 { PREFIX_TABLE (PREFIX_VEX_0F38AD) },
8052 { PREFIX_TABLE (PREFIX_VEX_0F38AE) },
8053 { PREFIX_TABLE (PREFIX_VEX_0F38AF) },
c0f3af97 8054 /* b0 */
592d1631
L
8055 { Bad_Opcode },
8056 { Bad_Opcode },
8057 { Bad_Opcode },
8058 { Bad_Opcode },
8059 { Bad_Opcode },
8060 { Bad_Opcode },
592a252b
L
8061 { PREFIX_TABLE (PREFIX_VEX_0F38B6) },
8062 { PREFIX_TABLE (PREFIX_VEX_0F38B7) },
c0f3af97 8063 /* b8 */
592a252b
L
8064 { PREFIX_TABLE (PREFIX_VEX_0F38B8) },
8065 { PREFIX_TABLE (PREFIX_VEX_0F38B9) },
8066 { PREFIX_TABLE (PREFIX_VEX_0F38BA) },
8067 { PREFIX_TABLE (PREFIX_VEX_0F38BB) },
8068 { PREFIX_TABLE (PREFIX_VEX_0F38BC) },
8069 { PREFIX_TABLE (PREFIX_VEX_0F38BD) },
8070 { PREFIX_TABLE (PREFIX_VEX_0F38BE) },
8071 { PREFIX_TABLE (PREFIX_VEX_0F38BF) },
c0f3af97 8072 /* c0 */
592d1631
L
8073 { Bad_Opcode },
8074 { Bad_Opcode },
8075 { Bad_Opcode },
8076 { Bad_Opcode },
8077 { Bad_Opcode },
8078 { Bad_Opcode },
8079 { Bad_Opcode },
8080 { Bad_Opcode },
c0f3af97 8081 /* c8 */
592d1631
L
8082 { Bad_Opcode },
8083 { Bad_Opcode },
8084 { Bad_Opcode },
8085 { Bad_Opcode },
8086 { Bad_Opcode },
8087 { Bad_Opcode },
8088 { Bad_Opcode },
8089 { Bad_Opcode },
c0f3af97 8090 /* d0 */
592d1631
L
8091 { Bad_Opcode },
8092 { Bad_Opcode },
8093 { Bad_Opcode },
8094 { Bad_Opcode },
8095 { Bad_Opcode },
8096 { Bad_Opcode },
8097 { Bad_Opcode },
8098 { Bad_Opcode },
c0f3af97 8099 /* d8 */
592d1631
L
8100 { Bad_Opcode },
8101 { Bad_Opcode },
8102 { Bad_Opcode },
592a252b
L
8103 { PREFIX_TABLE (PREFIX_VEX_0F38DB) },
8104 { PREFIX_TABLE (PREFIX_VEX_0F38DC) },
8105 { PREFIX_TABLE (PREFIX_VEX_0F38DD) },
8106 { PREFIX_TABLE (PREFIX_VEX_0F38DE) },
8107 { PREFIX_TABLE (PREFIX_VEX_0F38DF) },
c0f3af97 8108 /* e0 */
592d1631
L
8109 { Bad_Opcode },
8110 { Bad_Opcode },
8111 { Bad_Opcode },
8112 { Bad_Opcode },
8113 { Bad_Opcode },
8114 { Bad_Opcode },
8115 { Bad_Opcode },
8116 { Bad_Opcode },
c0f3af97 8117 /* e8 */
592d1631
L
8118 { Bad_Opcode },
8119 { Bad_Opcode },
8120 { Bad_Opcode },
8121 { Bad_Opcode },
8122 { Bad_Opcode },
8123 { Bad_Opcode },
8124 { Bad_Opcode },
8125 { Bad_Opcode },
c0f3af97 8126 /* f0 */
592d1631
L
8127 { Bad_Opcode },
8128 { Bad_Opcode },
f12dc422
L
8129 { PREFIX_TABLE (PREFIX_VEX_0F38F2) },
8130 { REG_TABLE (REG_VEX_0F38F3) },
592d1631 8131 { Bad_Opcode },
6c30d220
L
8132 { PREFIX_TABLE (PREFIX_VEX_0F38F5) },
8133 { PREFIX_TABLE (PREFIX_VEX_0F38F6) },
f12dc422 8134 { PREFIX_TABLE (PREFIX_VEX_0F38F7) },
c0f3af97 8135 /* f8 */
592d1631
L
8136 { Bad_Opcode },
8137 { Bad_Opcode },
8138 { Bad_Opcode },
8139 { Bad_Opcode },
8140 { Bad_Opcode },
8141 { Bad_Opcode },
8142 { Bad_Opcode },
8143 { Bad_Opcode },
c0f3af97
L
8144 },
8145 /* VEX_0F3A */
8146 {
8147 /* 00 */
6c30d220
L
8148 { PREFIX_TABLE (PREFIX_VEX_0F3A00) },
8149 { PREFIX_TABLE (PREFIX_VEX_0F3A01) },
8150 { PREFIX_TABLE (PREFIX_VEX_0F3A02) },
592d1631 8151 { Bad_Opcode },
592a252b
L
8152 { PREFIX_TABLE (PREFIX_VEX_0F3A04) },
8153 { PREFIX_TABLE (PREFIX_VEX_0F3A05) },
8154 { PREFIX_TABLE (PREFIX_VEX_0F3A06) },
592d1631 8155 { Bad_Opcode },
c0f3af97 8156 /* 08 */
592a252b
L
8157 { PREFIX_TABLE (PREFIX_VEX_0F3A08) },
8158 { PREFIX_TABLE (PREFIX_VEX_0F3A09) },
8159 { PREFIX_TABLE (PREFIX_VEX_0F3A0A) },
8160 { PREFIX_TABLE (PREFIX_VEX_0F3A0B) },
8161 { PREFIX_TABLE (PREFIX_VEX_0F3A0C) },
8162 { PREFIX_TABLE (PREFIX_VEX_0F3A0D) },
8163 { PREFIX_TABLE (PREFIX_VEX_0F3A0E) },
8164 { PREFIX_TABLE (PREFIX_VEX_0F3A0F) },
c0f3af97 8165 /* 10 */
592d1631
L
8166 { Bad_Opcode },
8167 { Bad_Opcode },
8168 { Bad_Opcode },
8169 { Bad_Opcode },
592a252b
L
8170 { PREFIX_TABLE (PREFIX_VEX_0F3A14) },
8171 { PREFIX_TABLE (PREFIX_VEX_0F3A15) },
8172 { PREFIX_TABLE (PREFIX_VEX_0F3A16) },
8173 { PREFIX_TABLE (PREFIX_VEX_0F3A17) },
c0f3af97 8174 /* 18 */
592a252b
L
8175 { PREFIX_TABLE (PREFIX_VEX_0F3A18) },
8176 { PREFIX_TABLE (PREFIX_VEX_0F3A19) },
592d1631
L
8177 { Bad_Opcode },
8178 { Bad_Opcode },
8179 { Bad_Opcode },
592a252b 8180 { PREFIX_TABLE (PREFIX_VEX_0F3A1D) },
592d1631
L
8181 { Bad_Opcode },
8182 { Bad_Opcode },
c0f3af97 8183 /* 20 */
592a252b
L
8184 { PREFIX_TABLE (PREFIX_VEX_0F3A20) },
8185 { PREFIX_TABLE (PREFIX_VEX_0F3A21) },
8186 { PREFIX_TABLE (PREFIX_VEX_0F3A22) },
592d1631
L
8187 { Bad_Opcode },
8188 { Bad_Opcode },
8189 { Bad_Opcode },
8190 { Bad_Opcode },
8191 { Bad_Opcode },
c0f3af97 8192 /* 28 */
592d1631
L
8193 { Bad_Opcode },
8194 { Bad_Opcode },
8195 { Bad_Opcode },
8196 { Bad_Opcode },
8197 { Bad_Opcode },
8198 { Bad_Opcode },
8199 { Bad_Opcode },
8200 { Bad_Opcode },
c0f3af97 8201 /* 30 */
592d1631
L
8202 { Bad_Opcode },
8203 { Bad_Opcode },
8204 { Bad_Opcode },
8205 { Bad_Opcode },
8206 { Bad_Opcode },
8207 { Bad_Opcode },
8208 { Bad_Opcode },
8209 { Bad_Opcode },
c0f3af97 8210 /* 38 */
6c30d220
L
8211 { PREFIX_TABLE (PREFIX_VEX_0F3A38) },
8212 { PREFIX_TABLE (PREFIX_VEX_0F3A39) },
592d1631
L
8213 { Bad_Opcode },
8214 { Bad_Opcode },
8215 { Bad_Opcode },
8216 { Bad_Opcode },
8217 { Bad_Opcode },
8218 { Bad_Opcode },
c0f3af97 8219 /* 40 */
592a252b
L
8220 { PREFIX_TABLE (PREFIX_VEX_0F3A40) },
8221 { PREFIX_TABLE (PREFIX_VEX_0F3A41) },
8222 { PREFIX_TABLE (PREFIX_VEX_0F3A42) },
592d1631 8223 { Bad_Opcode },
592a252b 8224 { PREFIX_TABLE (PREFIX_VEX_0F3A44) },
592d1631 8225 { Bad_Opcode },
6c30d220 8226 { PREFIX_TABLE (PREFIX_VEX_0F3A46) },
592d1631 8227 { Bad_Opcode },
c0f3af97 8228 /* 48 */
592a252b
L
8229 { PREFIX_TABLE (PREFIX_VEX_0F3A48) },
8230 { PREFIX_TABLE (PREFIX_VEX_0F3A49) },
8231 { PREFIX_TABLE (PREFIX_VEX_0F3A4A) },
8232 { PREFIX_TABLE (PREFIX_VEX_0F3A4B) },
8233 { PREFIX_TABLE (PREFIX_VEX_0F3A4C) },
592d1631
L
8234 { Bad_Opcode },
8235 { Bad_Opcode },
8236 { Bad_Opcode },
c0f3af97 8237 /* 50 */
592d1631
L
8238 { Bad_Opcode },
8239 { Bad_Opcode },
8240 { Bad_Opcode },
8241 { Bad_Opcode },
8242 { Bad_Opcode },
8243 { Bad_Opcode },
8244 { Bad_Opcode },
8245 { Bad_Opcode },
c0f3af97 8246 /* 58 */
592d1631
L
8247 { Bad_Opcode },
8248 { Bad_Opcode },
8249 { Bad_Opcode },
8250 { Bad_Opcode },
592a252b
L
8251 { PREFIX_TABLE (PREFIX_VEX_0F3A5C) },
8252 { PREFIX_TABLE (PREFIX_VEX_0F3A5D) },
8253 { PREFIX_TABLE (PREFIX_VEX_0F3A5E) },
8254 { PREFIX_TABLE (PREFIX_VEX_0F3A5F) },
c0f3af97 8255 /* 60 */
592a252b
L
8256 { PREFIX_TABLE (PREFIX_VEX_0F3A60) },
8257 { PREFIX_TABLE (PREFIX_VEX_0F3A61) },
8258 { PREFIX_TABLE (PREFIX_VEX_0F3A62) },
8259 { PREFIX_TABLE (PREFIX_VEX_0F3A63) },
592d1631
L
8260 { Bad_Opcode },
8261 { Bad_Opcode },
8262 { Bad_Opcode },
8263 { Bad_Opcode },
c0f3af97 8264 /* 68 */
592a252b
L
8265 { PREFIX_TABLE (PREFIX_VEX_0F3A68) },
8266 { PREFIX_TABLE (PREFIX_VEX_0F3A69) },
8267 { PREFIX_TABLE (PREFIX_VEX_0F3A6A) },
8268 { PREFIX_TABLE (PREFIX_VEX_0F3A6B) },
8269 { PREFIX_TABLE (PREFIX_VEX_0F3A6C) },
8270 { PREFIX_TABLE (PREFIX_VEX_0F3A6D) },
8271 { PREFIX_TABLE (PREFIX_VEX_0F3A6E) },
8272 { PREFIX_TABLE (PREFIX_VEX_0F3A6F) },
c0f3af97 8273 /* 70 */
592d1631
L
8274 { Bad_Opcode },
8275 { Bad_Opcode },
8276 { Bad_Opcode },
8277 { Bad_Opcode },
8278 { Bad_Opcode },
8279 { Bad_Opcode },
8280 { Bad_Opcode },
8281 { Bad_Opcode },
c0f3af97 8282 /* 78 */
592a252b
L
8283 { PREFIX_TABLE (PREFIX_VEX_0F3A78) },
8284 { PREFIX_TABLE (PREFIX_VEX_0F3A79) },
8285 { PREFIX_TABLE (PREFIX_VEX_0F3A7A) },
8286 { PREFIX_TABLE (PREFIX_VEX_0F3A7B) },
8287 { PREFIX_TABLE (PREFIX_VEX_0F3A7C) },
8288 { PREFIX_TABLE (PREFIX_VEX_0F3A7D) },
8289 { PREFIX_TABLE (PREFIX_VEX_0F3A7E) },
8290 { PREFIX_TABLE (PREFIX_VEX_0F3A7F) },
c0f3af97 8291 /* 80 */
592d1631
L
8292 { Bad_Opcode },
8293 { Bad_Opcode },
8294 { Bad_Opcode },
8295 { Bad_Opcode },
8296 { Bad_Opcode },
8297 { Bad_Opcode },
8298 { Bad_Opcode },
8299 { Bad_Opcode },
c0f3af97 8300 /* 88 */
592d1631
L
8301 { Bad_Opcode },
8302 { Bad_Opcode },
8303 { Bad_Opcode },
8304 { Bad_Opcode },
8305 { Bad_Opcode },
8306 { Bad_Opcode },
8307 { Bad_Opcode },
8308 { Bad_Opcode },
c0f3af97 8309 /* 90 */
592d1631
L
8310 { Bad_Opcode },
8311 { Bad_Opcode },
8312 { Bad_Opcode },
8313 { Bad_Opcode },
8314 { Bad_Opcode },
8315 { Bad_Opcode },
8316 { Bad_Opcode },
8317 { Bad_Opcode },
c0f3af97 8318 /* 98 */
592d1631
L
8319 { Bad_Opcode },
8320 { Bad_Opcode },
8321 { Bad_Opcode },
8322 { Bad_Opcode },
8323 { Bad_Opcode },
8324 { Bad_Opcode },
8325 { Bad_Opcode },
8326 { Bad_Opcode },
c0f3af97 8327 /* a0 */
592d1631
L
8328 { Bad_Opcode },
8329 { Bad_Opcode },
8330 { Bad_Opcode },
8331 { Bad_Opcode },
8332 { Bad_Opcode },
8333 { Bad_Opcode },
8334 { Bad_Opcode },
8335 { Bad_Opcode },
c0f3af97 8336 /* a8 */
592d1631
L
8337 { Bad_Opcode },
8338 { Bad_Opcode },
8339 { Bad_Opcode },
8340 { Bad_Opcode },
8341 { Bad_Opcode },
8342 { Bad_Opcode },
8343 { Bad_Opcode },
8344 { Bad_Opcode },
c0f3af97 8345 /* b0 */
592d1631
L
8346 { Bad_Opcode },
8347 { Bad_Opcode },
8348 { Bad_Opcode },
8349 { Bad_Opcode },
8350 { Bad_Opcode },
8351 { Bad_Opcode },
8352 { Bad_Opcode },
8353 { Bad_Opcode },
c0f3af97 8354 /* b8 */
592d1631
L
8355 { Bad_Opcode },
8356 { Bad_Opcode },
8357 { Bad_Opcode },
8358 { Bad_Opcode },
8359 { Bad_Opcode },
8360 { Bad_Opcode },
8361 { Bad_Opcode },
8362 { Bad_Opcode },
c0f3af97 8363 /* c0 */
592d1631
L
8364 { Bad_Opcode },
8365 { Bad_Opcode },
8366 { Bad_Opcode },
8367 { Bad_Opcode },
8368 { Bad_Opcode },
8369 { Bad_Opcode },
8370 { Bad_Opcode },
8371 { Bad_Opcode },
c0f3af97 8372 /* c8 */
592d1631
L
8373 { Bad_Opcode },
8374 { Bad_Opcode },
8375 { Bad_Opcode },
8376 { Bad_Opcode },
8377 { Bad_Opcode },
8378 { Bad_Opcode },
8379 { Bad_Opcode },
8380 { Bad_Opcode },
c0f3af97 8381 /* d0 */
592d1631
L
8382 { Bad_Opcode },
8383 { Bad_Opcode },
8384 { Bad_Opcode },
8385 { Bad_Opcode },
8386 { Bad_Opcode },
8387 { Bad_Opcode },
8388 { Bad_Opcode },
8389 { Bad_Opcode },
c0f3af97 8390 /* d8 */
592d1631
L
8391 { Bad_Opcode },
8392 { Bad_Opcode },
8393 { Bad_Opcode },
8394 { Bad_Opcode },
8395 { Bad_Opcode },
8396 { Bad_Opcode },
8397 { Bad_Opcode },
592a252b 8398 { PREFIX_TABLE (PREFIX_VEX_0F3ADF) },
c0f3af97 8399 /* e0 */
592d1631
L
8400 { Bad_Opcode },
8401 { Bad_Opcode },
8402 { Bad_Opcode },
8403 { Bad_Opcode },
8404 { Bad_Opcode },
8405 { Bad_Opcode },
8406 { Bad_Opcode },
8407 { Bad_Opcode },
c0f3af97 8408 /* e8 */
592d1631
L
8409 { Bad_Opcode },
8410 { Bad_Opcode },
8411 { Bad_Opcode },
8412 { Bad_Opcode },
8413 { Bad_Opcode },
8414 { Bad_Opcode },
8415 { Bad_Opcode },
8416 { Bad_Opcode },
c0f3af97 8417 /* f0 */
6c30d220 8418 { PREFIX_TABLE (PREFIX_VEX_0F3AF0) },
592d1631
L
8419 { Bad_Opcode },
8420 { Bad_Opcode },
8421 { Bad_Opcode },
8422 { Bad_Opcode },
8423 { Bad_Opcode },
8424 { Bad_Opcode },
8425 { Bad_Opcode },
c0f3af97 8426 /* f8 */
592d1631
L
8427 { Bad_Opcode },
8428 { Bad_Opcode },
8429 { Bad_Opcode },
8430 { Bad_Opcode },
8431 { Bad_Opcode },
8432 { Bad_Opcode },
8433 { Bad_Opcode },
8434 { Bad_Opcode },
c0f3af97
L
8435 },
8436};
8437
8438static const struct dis386 vex_len_table[][2] = {
592a252b 8439 /* VEX_LEN_0F10_P_1 */
c0f3af97 8440 {
592a252b
L
8441 { VEX_W_TABLE (VEX_W_0F10_P_1) },
8442 { VEX_W_TABLE (VEX_W_0F10_P_1) },
c0f3af97
L
8443 },
8444
592a252b 8445 /* VEX_LEN_0F10_P_3 */
c0f3af97 8446 {
592a252b
L
8447 { VEX_W_TABLE (VEX_W_0F10_P_3) },
8448 { VEX_W_TABLE (VEX_W_0F10_P_3) },
c0f3af97
L
8449 },
8450
592a252b 8451 /* VEX_LEN_0F11_P_1 */
c0f3af97 8452 {
592a252b
L
8453 { VEX_W_TABLE (VEX_W_0F11_P_1) },
8454 { VEX_W_TABLE (VEX_W_0F11_P_1) },
c0f3af97
L
8455 },
8456
592a252b 8457 /* VEX_LEN_0F11_P_3 */
c0f3af97 8458 {
592a252b
L
8459 { VEX_W_TABLE (VEX_W_0F11_P_3) },
8460 { VEX_W_TABLE (VEX_W_0F11_P_3) },
c0f3af97
L
8461 },
8462
592a252b 8463 /* VEX_LEN_0F12_P_0_M_0 */
c0f3af97 8464 {
592a252b 8465 { VEX_W_TABLE (VEX_W_0F12_P_0_M_0) },
c0f3af97
L
8466 },
8467
592a252b 8468 /* VEX_LEN_0F12_P_0_M_1 */
c0f3af97 8469 {
592a252b 8470 { VEX_W_TABLE (VEX_W_0F12_P_0_M_1) },
c0f3af97
L
8471 },
8472
592a252b 8473 /* VEX_LEN_0F12_P_2 */
c0f3af97 8474 {
592a252b 8475 { VEX_W_TABLE (VEX_W_0F12_P_2) },
c0f3af97
L
8476 },
8477
592a252b 8478 /* VEX_LEN_0F13_M_0 */
c0f3af97 8479 {
592a252b 8480 { VEX_W_TABLE (VEX_W_0F13_M_0) },
c0f3af97
L
8481 },
8482
592a252b 8483 /* VEX_LEN_0F16_P_0_M_0 */
c0f3af97 8484 {
592a252b 8485 { VEX_W_TABLE (VEX_W_0F16_P_0_M_0) },
c0f3af97
L
8486 },
8487
592a252b 8488 /* VEX_LEN_0F16_P_0_M_1 */
c0f3af97 8489 {
592a252b 8490 { VEX_W_TABLE (VEX_W_0F16_P_0_M_1) },
c0f3af97
L
8491 },
8492
592a252b 8493 /* VEX_LEN_0F16_P_2 */
c0f3af97 8494 {
592a252b 8495 { VEX_W_TABLE (VEX_W_0F16_P_2) },
c0f3af97
L
8496 },
8497
592a252b 8498 /* VEX_LEN_0F17_M_0 */
c0f3af97 8499 {
592a252b 8500 { VEX_W_TABLE (VEX_W_0F17_M_0) },
c0f3af97
L
8501 },
8502
592a252b 8503 /* VEX_LEN_0F2A_P_1 */
c0f3af97 8504 {
539f890d
L
8505 { "vcvtsi2ss%LQ", { XMScalar, VexScalar, Ev } },
8506 { "vcvtsi2ss%LQ", { XMScalar, VexScalar, Ev } },
c0f3af97
L
8507 },
8508
592a252b 8509 /* VEX_LEN_0F2A_P_3 */
c0f3af97 8510 {
539f890d
L
8511 { "vcvtsi2sd%LQ", { XMScalar, VexScalar, Ev } },
8512 { "vcvtsi2sd%LQ", { XMScalar, VexScalar, Ev } },
c0f3af97
L
8513 },
8514
592a252b 8515 /* VEX_LEN_0F2C_P_1 */
c0f3af97 8516 {
539f890d
L
8517 { "vcvttss2siY", { Gv, EXdScalar } },
8518 { "vcvttss2siY", { Gv, EXdScalar } },
c0f3af97
L
8519 },
8520
592a252b 8521 /* VEX_LEN_0F2C_P_3 */
c0f3af97 8522 {
539f890d
L
8523 { "vcvttsd2siY", { Gv, EXqScalar } },
8524 { "vcvttsd2siY", { Gv, EXqScalar } },
c0f3af97
L
8525 },
8526
592a252b 8527 /* VEX_LEN_0F2D_P_1 */
c0f3af97 8528 {
539f890d
L
8529 { "vcvtss2siY", { Gv, EXdScalar } },
8530 { "vcvtss2siY", { Gv, EXdScalar } },
c0f3af97
L
8531 },
8532
592a252b 8533 /* VEX_LEN_0F2D_P_3 */
c0f3af97 8534 {
539f890d
L
8535 { "vcvtsd2siY", { Gv, EXqScalar } },
8536 { "vcvtsd2siY", { Gv, EXqScalar } },
c0f3af97
L
8537 },
8538
592a252b 8539 /* VEX_LEN_0F2E_P_0 */
c0f3af97 8540 {
592a252b
L
8541 { VEX_W_TABLE (VEX_W_0F2E_P_0) },
8542 { VEX_W_TABLE (VEX_W_0F2E_P_0) },
c0f3af97
L
8543 },
8544
592a252b 8545 /* VEX_LEN_0F2E_P_2 */
c0f3af97 8546 {
592a252b
L
8547 { VEX_W_TABLE (VEX_W_0F2E_P_2) },
8548 { VEX_W_TABLE (VEX_W_0F2E_P_2) },
c0f3af97
L
8549 },
8550
592a252b 8551 /* VEX_LEN_0F2F_P_0 */
c0f3af97 8552 {
592a252b
L
8553 { VEX_W_TABLE (VEX_W_0F2F_P_0) },
8554 { VEX_W_TABLE (VEX_W_0F2F_P_0) },
c0f3af97
L
8555 },
8556
592a252b 8557 /* VEX_LEN_0F2F_P_2 */
c0f3af97 8558 {
592a252b
L
8559 { VEX_W_TABLE (VEX_W_0F2F_P_2) },
8560 { VEX_W_TABLE (VEX_W_0F2F_P_2) },
c0f3af97
L
8561 },
8562
592a252b 8563 /* VEX_LEN_0F51_P_1 */
c0f3af97 8564 {
592a252b
L
8565 { VEX_W_TABLE (VEX_W_0F51_P_1) },
8566 { VEX_W_TABLE (VEX_W_0F51_P_1) },
c0f3af97
L
8567 },
8568
592a252b 8569 /* VEX_LEN_0F51_P_3 */
c0f3af97 8570 {
592a252b
L
8571 { VEX_W_TABLE (VEX_W_0F51_P_3) },
8572 { VEX_W_TABLE (VEX_W_0F51_P_3) },
c0f3af97
L
8573 },
8574
592a252b 8575 /* VEX_LEN_0F52_P_1 */
c0f3af97 8576 {
592a252b
L
8577 { VEX_W_TABLE (VEX_W_0F52_P_1) },
8578 { VEX_W_TABLE (VEX_W_0F52_P_1) },
c0f3af97
L
8579 },
8580
592a252b 8581 /* VEX_LEN_0F53_P_1 */
c0f3af97 8582 {
592a252b
L
8583 { VEX_W_TABLE (VEX_W_0F53_P_1) },
8584 { VEX_W_TABLE (VEX_W_0F53_P_1) },
c0f3af97
L
8585 },
8586
592a252b 8587 /* VEX_LEN_0F58_P_1 */
c0f3af97 8588 {
592a252b
L
8589 { VEX_W_TABLE (VEX_W_0F58_P_1) },
8590 { VEX_W_TABLE (VEX_W_0F58_P_1) },
c0f3af97
L
8591 },
8592
592a252b 8593 /* VEX_LEN_0F58_P_3 */
c0f3af97 8594 {
592a252b
L
8595 { VEX_W_TABLE (VEX_W_0F58_P_3) },
8596 { VEX_W_TABLE (VEX_W_0F58_P_3) },
c0f3af97
L
8597 },
8598
592a252b 8599 /* VEX_LEN_0F59_P_1 */
c0f3af97 8600 {
592a252b
L
8601 { VEX_W_TABLE (VEX_W_0F59_P_1) },
8602 { VEX_W_TABLE (VEX_W_0F59_P_1) },
c0f3af97
L
8603 },
8604
592a252b 8605 /* VEX_LEN_0F59_P_3 */
c0f3af97 8606 {
592a252b
L
8607 { VEX_W_TABLE (VEX_W_0F59_P_3) },
8608 { VEX_W_TABLE (VEX_W_0F59_P_3) },
c0f3af97
L
8609 },
8610
592a252b 8611 /* VEX_LEN_0F5A_P_1 */
c0f3af97 8612 {
592a252b
L
8613 { VEX_W_TABLE (VEX_W_0F5A_P_1) },
8614 { VEX_W_TABLE (VEX_W_0F5A_P_1) },
c0f3af97
L
8615 },
8616
592a252b 8617 /* VEX_LEN_0F5A_P_3 */
c0f3af97 8618 {
592a252b
L
8619 { VEX_W_TABLE (VEX_W_0F5A_P_3) },
8620 { VEX_W_TABLE (VEX_W_0F5A_P_3) },
c0f3af97
L
8621 },
8622
592a252b 8623 /* VEX_LEN_0F5C_P_1 */
c0f3af97 8624 {
592a252b
L
8625 { VEX_W_TABLE (VEX_W_0F5C_P_1) },
8626 { VEX_W_TABLE (VEX_W_0F5C_P_1) },
c0f3af97
L
8627 },
8628
592a252b 8629 /* VEX_LEN_0F5C_P_3 */
c0f3af97 8630 {
592a252b
L
8631 { VEX_W_TABLE (VEX_W_0F5C_P_3) },
8632 { VEX_W_TABLE (VEX_W_0F5C_P_3) },
c0f3af97
L
8633 },
8634
592a252b 8635 /* VEX_LEN_0F5D_P_1 */
c0f3af97 8636 {
592a252b
L
8637 { VEX_W_TABLE (VEX_W_0F5D_P_1) },
8638 { VEX_W_TABLE (VEX_W_0F5D_P_1) },
c0f3af97
L
8639 },
8640
592a252b 8641 /* VEX_LEN_0F5D_P_3 */
c0f3af97 8642 {
592a252b
L
8643 { VEX_W_TABLE (VEX_W_0F5D_P_3) },
8644 { VEX_W_TABLE (VEX_W_0F5D_P_3) },
c0f3af97
L
8645 },
8646
592a252b 8647 /* VEX_LEN_0F5E_P_1 */
c0f3af97 8648 {
592a252b
L
8649 { VEX_W_TABLE (VEX_W_0F5E_P_1) },
8650 { VEX_W_TABLE (VEX_W_0F5E_P_1) },
c0f3af97
L
8651 },
8652
592a252b 8653 /* VEX_LEN_0F5E_P_3 */
c0f3af97 8654 {
592a252b
L
8655 { VEX_W_TABLE (VEX_W_0F5E_P_3) },
8656 { VEX_W_TABLE (VEX_W_0F5E_P_3) },
c0f3af97
L
8657 },
8658
592a252b 8659 /* VEX_LEN_0F5F_P_1 */
c0f3af97 8660 {
592a252b
L
8661 { VEX_W_TABLE (VEX_W_0F5F_P_1) },
8662 { VEX_W_TABLE (VEX_W_0F5F_P_1) },
c0f3af97
L
8663 },
8664
592a252b 8665 /* VEX_LEN_0F5F_P_3 */
c0f3af97 8666 {
592a252b
L
8667 { VEX_W_TABLE (VEX_W_0F5F_P_3) },
8668 { VEX_W_TABLE (VEX_W_0F5F_P_3) },
c0f3af97
L
8669 },
8670
592a252b 8671 /* VEX_LEN_0F6E_P_2 */
c0f3af97 8672 {
539f890d
L
8673 { "vmovK", { XMScalar, Edq } },
8674 { "vmovK", { XMScalar, Edq } },
c0f3af97
L
8675 },
8676
592a252b 8677 /* VEX_LEN_0F7E_P_1 */
c0f3af97 8678 {
592a252b
L
8679 { VEX_W_TABLE (VEX_W_0F7E_P_1) },
8680 { VEX_W_TABLE (VEX_W_0F7E_P_1) },
c0f3af97
L
8681 },
8682
592a252b 8683 /* VEX_LEN_0F7E_P_2 */
c0f3af97 8684 {
539f890d 8685 { "vmovK", { Edq, XMScalar } },
6c30d220 8686 { "vmovK", { Edq, XMScalar } },
c0f3af97
L
8687 },
8688
6c30d220 8689 /* VEX_LEN_0FAE_R_2_M_0 */
c0f3af97 8690 {
6c30d220 8691 { VEX_W_TABLE (VEX_W_0FAE_R_2_M_0) },
c0f3af97
L
8692 },
8693
6c30d220 8694 /* VEX_LEN_0FAE_R_3_M_0 */
c0f3af97 8695 {
6c30d220 8696 { VEX_W_TABLE (VEX_W_0FAE_R_3_M_0) },
c0f3af97
L
8697 },
8698
6c30d220 8699 /* VEX_LEN_0FC2_P_1 */
c0f3af97 8700 {
6c30d220
L
8701 { VEX_W_TABLE (VEX_W_0FC2_P_1) },
8702 { VEX_W_TABLE (VEX_W_0FC2_P_1) },
c0f3af97
L
8703 },
8704
6c30d220 8705 /* VEX_LEN_0FC2_P_3 */
c0f3af97 8706 {
6c30d220
L
8707 { VEX_W_TABLE (VEX_W_0FC2_P_3) },
8708 { VEX_W_TABLE (VEX_W_0FC2_P_3) },
c0f3af97
L
8709 },
8710
6c30d220 8711 /* VEX_LEN_0FC4_P_2 */
c0f3af97 8712 {
6c30d220 8713 { VEX_W_TABLE (VEX_W_0FC4_P_2) },
c0f3af97
L
8714 },
8715
6c30d220 8716 /* VEX_LEN_0FC5_P_2 */
c0f3af97 8717 {
6c30d220 8718 { VEX_W_TABLE (VEX_W_0FC5_P_2) },
c0f3af97
L
8719 },
8720
6c30d220 8721 /* VEX_LEN_0FD6_P_2 */
c0f3af97 8722 {
6c30d220
L
8723 { VEX_W_TABLE (VEX_W_0FD6_P_2) },
8724 { VEX_W_TABLE (VEX_W_0FD6_P_2) },
c0f3af97
L
8725 },
8726
6c30d220 8727 /* VEX_LEN_0FF7_P_2 */
c0f3af97 8728 {
6c30d220 8729 { VEX_W_TABLE (VEX_W_0FF7_P_2) },
c0f3af97
L
8730 },
8731
6c30d220 8732 /* VEX_LEN_0F3816_P_2 */
c0f3af97 8733 {
6c30d220
L
8734 { Bad_Opcode },
8735 { VEX_W_TABLE (VEX_W_0F3816_P_2) },
c0f3af97
L
8736 },
8737
6c30d220 8738 /* VEX_LEN_0F3819_P_2 */
c0f3af97 8739 {
6c30d220
L
8740 { Bad_Opcode },
8741 { VEX_W_TABLE (VEX_W_0F3819_P_2) },
c0f3af97
L
8742 },
8743
6c30d220 8744 /* VEX_LEN_0F381A_P_2_M_0 */
c0f3af97 8745 {
6c30d220
L
8746 { Bad_Opcode },
8747 { VEX_W_TABLE (VEX_W_0F381A_P_2_M_0) },
c0f3af97
L
8748 },
8749
6c30d220 8750 /* VEX_LEN_0F3836_P_2 */
c0f3af97 8751 {
6c30d220
L
8752 { Bad_Opcode },
8753 { VEX_W_TABLE (VEX_W_0F3836_P_2) },
c0f3af97
L
8754 },
8755
592a252b 8756 /* VEX_LEN_0F3841_P_2 */
c0f3af97 8757 {
592a252b 8758 { VEX_W_TABLE (VEX_W_0F3841_P_2) },
c0f3af97
L
8759 },
8760
6c30d220
L
8761 /* VEX_LEN_0F385A_P_2_M_0 */
8762 {
8763 { Bad_Opcode },
8764 { VEX_W_TABLE (VEX_W_0F385A_P_2_M_0) },
8765 },
8766
592a252b 8767 /* VEX_LEN_0F38DB_P_2 */
a5ff0eb2 8768 {
592a252b 8769 { VEX_W_TABLE (VEX_W_0F38DB_P_2) },
a5ff0eb2
L
8770 },
8771
592a252b 8772 /* VEX_LEN_0F38DC_P_2 */
a5ff0eb2 8773 {
592a252b 8774 { VEX_W_TABLE (VEX_W_0F38DC_P_2) },
a5ff0eb2
L
8775 },
8776
592a252b 8777 /* VEX_LEN_0F38DD_P_2 */
a5ff0eb2 8778 {
592a252b 8779 { VEX_W_TABLE (VEX_W_0F38DD_P_2) },
a5ff0eb2
L
8780 },
8781
592a252b 8782 /* VEX_LEN_0F38DE_P_2 */
a5ff0eb2 8783 {
592a252b 8784 { VEX_W_TABLE (VEX_W_0F38DE_P_2) },
a5ff0eb2
L
8785 },
8786
592a252b 8787 /* VEX_LEN_0F38DF_P_2 */
a5ff0eb2 8788 {
592a252b 8789 { VEX_W_TABLE (VEX_W_0F38DF_P_2) },
a5ff0eb2
L
8790 },
8791
f12dc422
L
8792 /* VEX_LEN_0F38F2_P_0 */
8793 {
8794 { "andnS", { Gdq, VexGdq, Edq } },
8795 },
8796
8797 /* VEX_LEN_0F38F3_R_1_P_0 */
8798 {
8799 { "blsrS", { VexGdq, Edq } },
8800 },
8801
8802 /* VEX_LEN_0F38F3_R_2_P_0 */
8803 {
8804 { "blsmskS", { VexGdq, Edq } },
8805 },
8806
8807 /* VEX_LEN_0F38F3_R_3_P_0 */
8808 {
8809 { "blsiS", { VexGdq, Edq } },
8810 },
8811
6c30d220
L
8812 /* VEX_LEN_0F38F5_P_0 */
8813 {
8814 { "bzhiS", { Gdq, Edq, VexGdq } },
8815 },
8816
8817 /* VEX_LEN_0F38F5_P_1 */
8818 {
8819 { "pextS", { Gdq, VexGdq, Edq } },
8820 },
8821
8822 /* VEX_LEN_0F38F5_P_3 */
8823 {
8824 { "pdepS", { Gdq, VexGdq, Edq } },
8825 },
8826
8827 /* VEX_LEN_0F38F6_P_3 */
8828 {
8829 { "mulxS", { Gdq, VexGdq, Edq } },
8830 },
8831
f12dc422
L
8832 /* VEX_LEN_0F38F7_P_0 */
8833 {
8834 { "bextrS", { Gdq, Edq, VexGdq } },
8835 },
8836
6c30d220
L
8837 /* VEX_LEN_0F38F7_P_1 */
8838 {
8839 { "sarxS", { Gdq, Edq, VexGdq } },
8840 },
8841
8842 /* VEX_LEN_0F38F7_P_2 */
8843 {
8844 { "shlxS", { Gdq, Edq, VexGdq } },
8845 },
8846
8847 /* VEX_LEN_0F38F7_P_3 */
8848 {
8849 { "shrxS", { Gdq, Edq, VexGdq } },
8850 },
8851
8852 /* VEX_LEN_0F3A00_P_2 */
8853 {
8854 { Bad_Opcode },
8855 { VEX_W_TABLE (VEX_W_0F3A00_P_2) },
8856 },
8857
8858 /* VEX_LEN_0F3A01_P_2 */
8859 {
8860 { Bad_Opcode },
8861 { VEX_W_TABLE (VEX_W_0F3A01_P_2) },
8862 },
8863
592a252b 8864 /* VEX_LEN_0F3A06_P_2 */
c0f3af97 8865 {
592d1631 8866 { Bad_Opcode },
592a252b 8867 { VEX_W_TABLE (VEX_W_0F3A06_P_2) },
c0f3af97
L
8868 },
8869
592a252b 8870 /* VEX_LEN_0F3A0A_P_2 */
c0f3af97 8871 {
592a252b
L
8872 { VEX_W_TABLE (VEX_W_0F3A0A_P_2) },
8873 { VEX_W_TABLE (VEX_W_0F3A0A_P_2) },
c0f3af97
L
8874 },
8875
592a252b 8876 /* VEX_LEN_0F3A0B_P_2 */
c0f3af97 8877 {
592a252b
L
8878 { VEX_W_TABLE (VEX_W_0F3A0B_P_2) },
8879 { VEX_W_TABLE (VEX_W_0F3A0B_P_2) },
c0f3af97
L
8880 },
8881
592a252b 8882 /* VEX_LEN_0F3A14_P_2 */
c0f3af97 8883 {
592a252b 8884 { VEX_W_TABLE (VEX_W_0F3A14_P_2) },
c0f3af97
L
8885 },
8886
592a252b 8887 /* VEX_LEN_0F3A15_P_2 */
c0f3af97 8888 {
592a252b 8889 { VEX_W_TABLE (VEX_W_0F3A15_P_2) },
c0f3af97
L
8890 },
8891
592a252b 8892 /* VEX_LEN_0F3A16_P_2 */
c0f3af97
L
8893 {
8894 { "vpextrK", { Edq, XM, Ib } },
c0f3af97
L
8895 },
8896
592a252b 8897 /* VEX_LEN_0F3A17_P_2 */
c0f3af97
L
8898 {
8899 { "vextractps", { Edqd, XM, Ib } },
c0f3af97
L
8900 },
8901
592a252b 8902 /* VEX_LEN_0F3A18_P_2 */
c0f3af97 8903 {
592d1631 8904 { Bad_Opcode },
592a252b 8905 { VEX_W_TABLE (VEX_W_0F3A18_P_2) },
c0f3af97
L
8906 },
8907
592a252b 8908 /* VEX_LEN_0F3A19_P_2 */
c0f3af97 8909 {
592d1631 8910 { Bad_Opcode },
592a252b 8911 { VEX_W_TABLE (VEX_W_0F3A19_P_2) },
c0f3af97
L
8912 },
8913
592a252b 8914 /* VEX_LEN_0F3A20_P_2 */
c0f3af97 8915 {
592a252b 8916 { VEX_W_TABLE (VEX_W_0F3A20_P_2) },
c0f3af97
L
8917 },
8918
592a252b 8919 /* VEX_LEN_0F3A21_P_2 */
c0f3af97 8920 {
592a252b 8921 { VEX_W_TABLE (VEX_W_0F3A21_P_2) },
c0f3af97
L
8922 },
8923
592a252b 8924 /* VEX_LEN_0F3A22_P_2 */
c0f3af97
L
8925 {
8926 { "vpinsrK", { XM, Vex128, Edq, Ib } },
c0f3af97
L
8927 },
8928
6c30d220 8929 /* VEX_LEN_0F3A38_P_2 */
c0f3af97 8930 {
6c30d220
L
8931 { Bad_Opcode },
8932 { VEX_W_TABLE (VEX_W_0F3A38_P_2) },
c0f3af97
L
8933 },
8934
6c30d220 8935 /* VEX_LEN_0F3A39_P_2 */
c0f3af97 8936 {
6c30d220
L
8937 { Bad_Opcode },
8938 { VEX_W_TABLE (VEX_W_0F3A39_P_2) },
8939 },
8940
8941 /* VEX_LEN_0F3A41_P_2 */
8942 {
8943 { VEX_W_TABLE (VEX_W_0F3A41_P_2) },
c0f3af97
L
8944 },
8945
592a252b 8946 /* VEX_LEN_0F3A44_P_2 */
ce2f5b3c 8947 {
592a252b 8948 { VEX_W_TABLE (VEX_W_0F3A44_P_2) },
ce2f5b3c
L
8949 },
8950
6c30d220 8951 /* VEX_LEN_0F3A46_P_2 */
c0f3af97 8952 {
6c30d220
L
8953 { Bad_Opcode },
8954 { VEX_W_TABLE (VEX_W_0F3A46_P_2) },
c0f3af97
L
8955 },
8956
592a252b 8957 /* VEX_LEN_0F3A60_P_2 */
c0f3af97 8958 {
592a252b 8959 { VEX_W_TABLE (VEX_W_0F3A60_P_2) },
c0f3af97
L
8960 },
8961
592a252b 8962 /* VEX_LEN_0F3A61_P_2 */
c0f3af97 8963 {
592a252b 8964 { VEX_W_TABLE (VEX_W_0F3A61_P_2) },
c0f3af97
L
8965 },
8966
592a252b 8967 /* VEX_LEN_0F3A62_P_2 */
c0f3af97 8968 {
592a252b 8969 { VEX_W_TABLE (VEX_W_0F3A62_P_2) },
c0f3af97
L
8970 },
8971
592a252b 8972 /* VEX_LEN_0F3A63_P_2 */
c0f3af97 8973 {
592a252b 8974 { VEX_W_TABLE (VEX_W_0F3A63_P_2) },
c0f3af97
L
8975 },
8976
592a252b 8977 /* VEX_LEN_0F3A6A_P_2 */
922d8de8 8978 {
206c2556 8979 { "vfmaddss", { XMVexW, Vex128, EXdVexW, EXdVexW, VexI4 } },
922d8de8
DR
8980 },
8981
592a252b 8982 /* VEX_LEN_0F3A6B_P_2 */
922d8de8 8983 {
206c2556 8984 { "vfmaddsd", { XMVexW, Vex128, EXqVexW, EXqVexW, VexI4 } },
922d8de8
DR
8985 },
8986
592a252b 8987 /* VEX_LEN_0F3A6E_P_2 */
922d8de8 8988 {
206c2556 8989 { "vfmsubss", { XMVexW, Vex128, EXdVexW, EXdVexW, VexI4 } },
922d8de8
DR
8990 },
8991
592a252b 8992 /* VEX_LEN_0F3A6F_P_2 */
922d8de8 8993 {
206c2556 8994 { "vfmsubsd", { XMVexW, Vex128, EXqVexW, EXqVexW, VexI4 } },
922d8de8
DR
8995 },
8996
592a252b 8997 /* VEX_LEN_0F3A7A_P_2 */
922d8de8 8998 {
206c2556 8999 { "vfnmaddss", { XMVexW, Vex128, EXdVexW, EXdVexW, VexI4 } },
922d8de8
DR
9000 },
9001
592a252b 9002 /* VEX_LEN_0F3A7B_P_2 */
922d8de8 9003 {
206c2556 9004 { "vfnmaddsd", { XMVexW, Vex128, EXqVexW, EXqVexW, VexI4 } },
922d8de8
DR
9005 },
9006
592a252b 9007 /* VEX_LEN_0F3A7E_P_2 */
922d8de8 9008 {
206c2556 9009 { "vfnmsubss", { XMVexW, Vex128, EXdVexW, EXdVexW, VexI4 } },
922d8de8
DR
9010 },
9011
592a252b 9012 /* VEX_LEN_0F3A7F_P_2 */
922d8de8 9013 {
206c2556 9014 { "vfnmsubsd", { XMVexW, Vex128, EXqVexW, EXqVexW, VexI4 } },
922d8de8
DR
9015 },
9016
592a252b 9017 /* VEX_LEN_0F3ADF_P_2 */
a5ff0eb2 9018 {
592a252b 9019 { VEX_W_TABLE (VEX_W_0F3ADF_P_2) },
a5ff0eb2 9020 },
4c807e72 9021
6c30d220
L
9022 /* VEX_LEN_0F3AF0_P_3 */
9023 {
182ae480 9024 { "rorxS", { Gdq, Edq, Ib } },
6c30d220
L
9025 },
9026
ff688e1f
L
9027 /* VEX_LEN_0FXOP_08_CC */
9028 {
9029 { "vpcomb", { XM, Vex128, EXx, Ib } },
9030 },
9031
9032 /* VEX_LEN_0FXOP_08_CD */
9033 {
9034 { "vpcomw", { XM, Vex128, EXx, Ib } },
9035 },
9036
9037 /* VEX_LEN_0FXOP_08_CE */
9038 {
9039 { "vpcomd", { XM, Vex128, EXx, Ib } },
9040 },
9041
9042 /* VEX_LEN_0FXOP_08_CF */
9043 {
9044 { "vpcomq", { XM, Vex128, EXx, Ib } },
9045 },
9046
9047 /* VEX_LEN_0FXOP_08_EC */
9048 {
9049 { "vpcomub", { XM, Vex128, EXx, Ib } },
9050 },
9051
9052 /* VEX_LEN_0FXOP_08_ED */
9053 {
9054 { "vpcomuw", { XM, Vex128, EXx, Ib } },
9055 },
9056
9057 /* VEX_LEN_0FXOP_08_EE */
9058 {
9059 { "vpcomud", { XM, Vex128, EXx, Ib } },
9060 },
9061
9062 /* VEX_LEN_0FXOP_08_EF */
9063 {
9064 { "vpcomuq", { XM, Vex128, EXx, Ib } },
9065 },
9066
592a252b 9067 /* VEX_LEN_0FXOP_09_80 */
5dd85c99 9068 {
4c807e72
L
9069 { "vfrczps", { XM, EXxmm } },
9070 { "vfrczps", { XM, EXymmq } },
5dd85c99 9071 },
4c807e72 9072
592a252b 9073 /* VEX_LEN_0FXOP_09_81 */
5dd85c99 9074 {
4c807e72
L
9075 { "vfrczpd", { XM, EXxmm } },
9076 { "vfrczpd", { XM, EXymmq } },
5dd85c99 9077 },
331d2d0d
L
9078};
9079
9e30b8e0 9080static const struct dis386 vex_w_table[][2] = {
b844680a 9081 {
592a252b 9082 /* VEX_W_0F10_P_0 */
9e30b8e0 9083 { "vmovups", { XM, EXx } },
d8faab4e
L
9084 },
9085 {
592a252b 9086 /* VEX_W_0F10_P_1 */
539f890d 9087 { "vmovss", { XMVexScalar, VexScalar, EXdScalar } },
d8faab4e
L
9088 },
9089 {
592a252b 9090 /* VEX_W_0F10_P_2 */
9e30b8e0 9091 { "vmovupd", { XM, EXx } },
d8faab4e
L
9092 },
9093 {
592a252b 9094 /* VEX_W_0F10_P_3 */
539f890d 9095 { "vmovsd", { XMVexScalar, VexScalar, EXqScalar } },
d8faab4e
L
9096 },
9097 {
592a252b 9098 /* VEX_W_0F11_P_0 */
9e30b8e0 9099 { "vmovups", { EXxS, XM } },
d8faab4e
L
9100 },
9101 {
592a252b 9102 /* VEX_W_0F11_P_1 */
539f890d 9103 { "vmovss", { EXdVexScalarS, VexScalar, XMScalar } },
b844680a
L
9104 },
9105 {
592a252b 9106 /* VEX_W_0F11_P_2 */
9e30b8e0 9107 { "vmovupd", { EXxS, XM } },
b844680a
L
9108 },
9109 {
592a252b 9110 /* VEX_W_0F11_P_3 */
539f890d 9111 { "vmovsd", { EXqVexScalarS, VexScalar, XMScalar } },
d8faab4e
L
9112 },
9113 {
592a252b 9114 /* VEX_W_0F12_P_0_M_0 */
9e30b8e0 9115 { "vmovlps", { XM, Vex128, EXq } },
b844680a
L
9116 },
9117 {
592a252b 9118 /* VEX_W_0F12_P_0_M_1 */
9e30b8e0 9119 { "vmovhlps", { XM, Vex128, EXq } },
b844680a
L
9120 },
9121 {
592a252b 9122 /* VEX_W_0F12_P_1 */
9e30b8e0 9123 { "vmovsldup", { XM, EXx } },
b844680a
L
9124 },
9125 {
592a252b 9126 /* VEX_W_0F12_P_2 */
9e30b8e0 9127 { "vmovlpd", { XM, Vex128, EXq } },
b844680a
L
9128 },
9129 {
592a252b 9130 /* VEX_W_0F12_P_3 */
9e30b8e0 9131 { "vmovddup", { XM, EXymmq } },
b844680a
L
9132 },
9133 {
592a252b 9134 /* VEX_W_0F13_M_0 */
9e30b8e0 9135 { "vmovlpX", { EXq, XM } },
b844680a
L
9136 },
9137 {
592a252b 9138 /* VEX_W_0F14 */
9e30b8e0 9139 { "vunpcklpX", { XM, Vex, EXx } },
b844680a
L
9140 },
9141 {
592a252b 9142 /* VEX_W_0F15 */
9e30b8e0 9143 { "vunpckhpX", { XM, Vex, EXx } },
b844680a
L
9144 },
9145 {
592a252b 9146 /* VEX_W_0F16_P_0_M_0 */
9e30b8e0 9147 { "vmovhps", { XM, Vex128, EXq } },
9e30b8e0
L
9148 },
9149 {
592a252b 9150 /* VEX_W_0F16_P_0_M_1 */
9e30b8e0 9151 { "vmovlhps", { XM, Vex128, EXq } },
9e30b8e0
L
9152 },
9153 {
592a252b 9154 /* VEX_W_0F16_P_1 */
9e30b8e0 9155 { "vmovshdup", { XM, EXx } },
9e30b8e0
L
9156 },
9157 {
592a252b 9158 /* VEX_W_0F16_P_2 */
9e30b8e0 9159 { "vmovhpd", { XM, Vex128, EXq } },
9e30b8e0
L
9160 },
9161 {
592a252b 9162 /* VEX_W_0F17_M_0 */
9e30b8e0 9163 { "vmovhpX", { EXq, XM } },
9e30b8e0
L
9164 },
9165 {
592a252b 9166 /* VEX_W_0F28 */
9e30b8e0 9167 { "vmovapX", { XM, EXx } },
9e30b8e0
L
9168 },
9169 {
592a252b 9170 /* VEX_W_0F29 */
9e30b8e0 9171 { "vmovapX", { EXxS, XM } },
9e30b8e0
L
9172 },
9173 {
592a252b 9174 /* VEX_W_0F2B_M_0 */
9e30b8e0 9175 { "vmovntpX", { Mx, XM } },
9e30b8e0
L
9176 },
9177 {
592a252b 9178 /* VEX_W_0F2E_P_0 */
7bb15c6f 9179 { "vucomiss", { XMScalar, EXdScalar } },
9e30b8e0
L
9180 },
9181 {
592a252b 9182 /* VEX_W_0F2E_P_2 */
7bb15c6f 9183 { "vucomisd", { XMScalar, EXqScalar } },
9e30b8e0
L
9184 },
9185 {
592a252b 9186 /* VEX_W_0F2F_P_0 */
539f890d 9187 { "vcomiss", { XMScalar, EXdScalar } },
9e30b8e0
L
9188 },
9189 {
592a252b 9190 /* VEX_W_0F2F_P_2 */
539f890d 9191 { "vcomisd", { XMScalar, EXqScalar } },
9e30b8e0
L
9192 },
9193 {
592a252b 9194 /* VEX_W_0F50_M_0 */
9e30b8e0 9195 { "vmovmskpX", { Gdq, XS } },
9e30b8e0
L
9196 },
9197 {
592a252b 9198 /* VEX_W_0F51_P_0 */
9e30b8e0 9199 { "vsqrtps", { XM, EXx } },
9e30b8e0
L
9200 },
9201 {
592a252b 9202 /* VEX_W_0F51_P_1 */
539f890d 9203 { "vsqrtss", { XMScalar, VexScalar, EXdScalar } },
9e30b8e0
L
9204 },
9205 {
592a252b 9206 /* VEX_W_0F51_P_2 */
9e30b8e0 9207 { "vsqrtpd", { XM, EXx } },
9e30b8e0
L
9208 },
9209 {
592a252b 9210 /* VEX_W_0F51_P_3 */
539f890d 9211 { "vsqrtsd", { XMScalar, VexScalar, EXqScalar } },
9e30b8e0
L
9212 },
9213 {
592a252b 9214 /* VEX_W_0F52_P_0 */
9e30b8e0 9215 { "vrsqrtps", { XM, EXx } },
9e30b8e0
L
9216 },
9217 {
592a252b 9218 /* VEX_W_0F52_P_1 */
539f890d 9219 { "vrsqrtss", { XMScalar, VexScalar, EXdScalar } },
9e30b8e0
L
9220 },
9221 {
592a252b 9222 /* VEX_W_0F53_P_0 */
9e30b8e0 9223 { "vrcpps", { XM, EXx } },
9e30b8e0
L
9224 },
9225 {
592a252b 9226 /* VEX_W_0F53_P_1 */
539f890d 9227 { "vrcpss", { XMScalar, VexScalar, EXdScalar } },
9e30b8e0
L
9228 },
9229 {
592a252b 9230 /* VEX_W_0F58_P_0 */
9e30b8e0 9231 { "vaddps", { XM, Vex, EXx } },
9e30b8e0
L
9232 },
9233 {
592a252b 9234 /* VEX_W_0F58_P_1 */
539f890d 9235 { "vaddss", { XMScalar, VexScalar, EXdScalar } },
9e30b8e0
L
9236 },
9237 {
592a252b 9238 /* VEX_W_0F58_P_2 */
9e30b8e0 9239 { "vaddpd", { XM, Vex, EXx } },
9e30b8e0
L
9240 },
9241 {
592a252b 9242 /* VEX_W_0F58_P_3 */
539f890d 9243 { "vaddsd", { XMScalar, VexScalar, EXqScalar } },
9e30b8e0
L
9244 },
9245 {
592a252b 9246 /* VEX_W_0F59_P_0 */
9e30b8e0 9247 { "vmulps", { XM, Vex, EXx } },
9e30b8e0
L
9248 },
9249 {
592a252b 9250 /* VEX_W_0F59_P_1 */
539f890d 9251 { "vmulss", { XMScalar, VexScalar, EXdScalar } },
9e30b8e0
L
9252 },
9253 {
592a252b 9254 /* VEX_W_0F59_P_2 */
9e30b8e0 9255 { "vmulpd", { XM, Vex, EXx } },
9e30b8e0
L
9256 },
9257 {
592a252b 9258 /* VEX_W_0F59_P_3 */
539f890d 9259 { "vmulsd", { XMScalar, VexScalar, EXqScalar } },
9e30b8e0
L
9260 },
9261 {
592a252b 9262 /* VEX_W_0F5A_P_0 */
9e30b8e0 9263 { "vcvtps2pd", { XM, EXxmmq } },
9e30b8e0
L
9264 },
9265 {
592a252b 9266 /* VEX_W_0F5A_P_1 */
539f890d 9267 { "vcvtss2sd", { XMScalar, VexScalar, EXdScalar } },
9e30b8e0
L
9268 },
9269 {
592a252b 9270 /* VEX_W_0F5A_P_3 */
539f890d 9271 { "vcvtsd2ss", { XMScalar, VexScalar, EXqScalar } },
9e30b8e0
L
9272 },
9273 {
592a252b 9274 /* VEX_W_0F5B_P_0 */
9e30b8e0 9275 { "vcvtdq2ps", { XM, EXx } },
9e30b8e0
L
9276 },
9277 {
592a252b 9278 /* VEX_W_0F5B_P_1 */
9e30b8e0 9279 { "vcvttps2dq", { XM, EXx } },
9e30b8e0
L
9280 },
9281 {
592a252b 9282 /* VEX_W_0F5B_P_2 */
9e30b8e0 9283 { "vcvtps2dq", { XM, EXx } },
9e30b8e0
L
9284 },
9285 {
592a252b 9286 /* VEX_W_0F5C_P_0 */
9e30b8e0 9287 { "vsubps", { XM, Vex, EXx } },
9e30b8e0
L
9288 },
9289 {
592a252b 9290 /* VEX_W_0F5C_P_1 */
539f890d 9291 { "vsubss", { XMScalar, VexScalar, EXdScalar } },
9e30b8e0
L
9292 },
9293 {
592a252b 9294 /* VEX_W_0F5C_P_2 */
9e30b8e0 9295 { "vsubpd", { XM, Vex, EXx } },
9e30b8e0
L
9296 },
9297 {
592a252b 9298 /* VEX_W_0F5C_P_3 */
539f890d 9299 { "vsubsd", { XMScalar, VexScalar, EXqScalar } },
9e30b8e0
L
9300 },
9301 {
592a252b 9302 /* VEX_W_0F5D_P_0 */
9e30b8e0 9303 { "vminps", { XM, Vex, EXx } },
9e30b8e0
L
9304 },
9305 {
592a252b 9306 /* VEX_W_0F5D_P_1 */
539f890d 9307 { "vminss", { XMScalar, VexScalar, EXdScalar } },
9e30b8e0
L
9308 },
9309 {
592a252b 9310 /* VEX_W_0F5D_P_2 */
9e30b8e0 9311 { "vminpd", { XM, Vex, EXx } },
9e30b8e0
L
9312 },
9313 {
592a252b 9314 /* VEX_W_0F5D_P_3 */
539f890d 9315 { "vminsd", { XMScalar, VexScalar, EXqScalar } },
9e30b8e0
L
9316 },
9317 {
592a252b 9318 /* VEX_W_0F5E_P_0 */
9e30b8e0 9319 { "vdivps", { XM, Vex, EXx } },
9e30b8e0
L
9320 },
9321 {
592a252b 9322 /* VEX_W_0F5E_P_1 */
539f890d 9323 { "vdivss", { XMScalar, VexScalar, EXdScalar } },
9e30b8e0
L
9324 },
9325 {
592a252b 9326 /* VEX_W_0F5E_P_2 */
9e30b8e0 9327 { "vdivpd", { XM, Vex, EXx } },
9e30b8e0
L
9328 },
9329 {
592a252b 9330 /* VEX_W_0F5E_P_3 */
539f890d 9331 { "vdivsd", { XMScalar, VexScalar, EXqScalar } },
9e30b8e0
L
9332 },
9333 {
592a252b 9334 /* VEX_W_0F5F_P_0 */
9e30b8e0 9335 { "vmaxps", { XM, Vex, EXx } },
9e30b8e0
L
9336 },
9337 {
592a252b 9338 /* VEX_W_0F5F_P_1 */
539f890d 9339 { "vmaxss", { XMScalar, VexScalar, EXdScalar } },
9e30b8e0
L
9340 },
9341 {
592a252b 9342 /* VEX_W_0F5F_P_2 */
9e30b8e0 9343 { "vmaxpd", { XM, Vex, EXx } },
9e30b8e0
L
9344 },
9345 {
592a252b 9346 /* VEX_W_0F5F_P_3 */
539f890d 9347 { "vmaxsd", { XMScalar, VexScalar, EXqScalar } },
9e30b8e0
L
9348 },
9349 {
592a252b 9350 /* VEX_W_0F60_P_2 */
6c30d220 9351 { "vpunpcklbw", { XM, Vex, EXx } },
9e30b8e0
L
9352 },
9353 {
592a252b 9354 /* VEX_W_0F61_P_2 */
6c30d220 9355 { "vpunpcklwd", { XM, Vex, EXx } },
9e30b8e0
L
9356 },
9357 {
592a252b 9358 /* VEX_W_0F62_P_2 */
6c30d220 9359 { "vpunpckldq", { XM, Vex, EXx } },
9e30b8e0
L
9360 },
9361 {
592a252b 9362 /* VEX_W_0F63_P_2 */
6c30d220 9363 { "vpacksswb", { XM, Vex, EXx } },
9e30b8e0
L
9364 },
9365 {
592a252b 9366 /* VEX_W_0F64_P_2 */
6c30d220 9367 { "vpcmpgtb", { XM, Vex, EXx } },
9e30b8e0
L
9368 },
9369 {
592a252b 9370 /* VEX_W_0F65_P_2 */
6c30d220 9371 { "vpcmpgtw", { XM, Vex, EXx } },
9e30b8e0
L
9372 },
9373 {
592a252b 9374 /* VEX_W_0F66_P_2 */
6c30d220 9375 { "vpcmpgtd", { XM, Vex, EXx } },
9e30b8e0
L
9376 },
9377 {
592a252b 9378 /* VEX_W_0F67_P_2 */
6c30d220 9379 { "vpackuswb", { XM, Vex, EXx } },
9e30b8e0
L
9380 },
9381 {
592a252b 9382 /* VEX_W_0F68_P_2 */
6c30d220 9383 { "vpunpckhbw", { XM, Vex, EXx } },
9e30b8e0
L
9384 },
9385 {
592a252b 9386 /* VEX_W_0F69_P_2 */
6c30d220 9387 { "vpunpckhwd", { XM, Vex, EXx } },
9e30b8e0
L
9388 },
9389 {
592a252b 9390 /* VEX_W_0F6A_P_2 */
6c30d220 9391 { "vpunpckhdq", { XM, Vex, EXx } },
9e30b8e0
L
9392 },
9393 {
592a252b 9394 /* VEX_W_0F6B_P_2 */
6c30d220 9395 { "vpackssdw", { XM, Vex, EXx } },
9e30b8e0
L
9396 },
9397 {
592a252b 9398 /* VEX_W_0F6C_P_2 */
6c30d220 9399 { "vpunpcklqdq", { XM, Vex, EXx } },
9e30b8e0
L
9400 },
9401 {
592a252b 9402 /* VEX_W_0F6D_P_2 */
6c30d220 9403 { "vpunpckhqdq", { XM, Vex, EXx } },
9e30b8e0
L
9404 },
9405 {
592a252b 9406 /* VEX_W_0F6F_P_1 */
efdb52b7 9407 { "vmovdqu", { XM, EXx } },
9e30b8e0
L
9408 },
9409 {
592a252b 9410 /* VEX_W_0F6F_P_2 */
efdb52b7 9411 { "vmovdqa", { XM, EXx } },
9e30b8e0
L
9412 },
9413 {
592a252b 9414 /* VEX_W_0F70_P_1 */
9e30b8e0 9415 { "vpshufhw", { XM, EXx, Ib } },
9e30b8e0
L
9416 },
9417 {
592a252b 9418 /* VEX_W_0F70_P_2 */
9e30b8e0 9419 { "vpshufd", { XM, EXx, Ib } },
9e30b8e0
L
9420 },
9421 {
592a252b 9422 /* VEX_W_0F70_P_3 */
9e30b8e0 9423 { "vpshuflw", { XM, EXx, Ib } },
9e30b8e0
L
9424 },
9425 {
592a252b 9426 /* VEX_W_0F71_R_2_P_2 */
6c30d220 9427 { "vpsrlw", { Vex, XS, Ib } },
9e30b8e0
L
9428 },
9429 {
592a252b 9430 /* VEX_W_0F71_R_4_P_2 */
6c30d220 9431 { "vpsraw", { Vex, XS, Ib } },
9e30b8e0
L
9432 },
9433 {
592a252b 9434 /* VEX_W_0F71_R_6_P_2 */
6c30d220 9435 { "vpsllw", { Vex, XS, Ib } },
9e30b8e0
L
9436 },
9437 {
592a252b 9438 /* VEX_W_0F72_R_2_P_2 */
6c30d220 9439 { "vpsrld", { Vex, XS, Ib } },
9e30b8e0
L
9440 },
9441 {
592a252b 9442 /* VEX_W_0F72_R_4_P_2 */
6c30d220 9443 { "vpsrad", { Vex, XS, Ib } },
9e30b8e0
L
9444 },
9445 {
592a252b 9446 /* VEX_W_0F72_R_6_P_2 */
6c30d220 9447 { "vpslld", { Vex, XS, Ib } },
9e30b8e0
L
9448 },
9449 {
592a252b 9450 /* VEX_W_0F73_R_2_P_2 */
6c30d220 9451 { "vpsrlq", { Vex, XS, Ib } },
9e30b8e0
L
9452 },
9453 {
592a252b 9454 /* VEX_W_0F73_R_3_P_2 */
6c30d220 9455 { "vpsrldq", { Vex, XS, Ib } },
9e30b8e0
L
9456 },
9457 {
592a252b 9458 /* VEX_W_0F73_R_6_P_2 */
6c30d220 9459 { "vpsllq", { Vex, XS, Ib } },
9e30b8e0
L
9460 },
9461 {
592a252b 9462 /* VEX_W_0F73_R_7_P_2 */
6c30d220 9463 { "vpslldq", { Vex, XS, Ib } },
9e30b8e0
L
9464 },
9465 {
592a252b 9466 /* VEX_W_0F74_P_2 */
6c30d220 9467 { "vpcmpeqb", { XM, Vex, EXx } },
9e30b8e0
L
9468 },
9469 {
592a252b 9470 /* VEX_W_0F75_P_2 */
6c30d220 9471 { "vpcmpeqw", { XM, Vex, EXx } },
9e30b8e0
L
9472 },
9473 {
592a252b 9474 /* VEX_W_0F76_P_2 */
6c30d220 9475 { "vpcmpeqd", { XM, Vex, EXx } },
9e30b8e0
L
9476 },
9477 {
592a252b 9478 /* VEX_W_0F77_P_0 */
9e30b8e0 9479 { "", { VZERO } },
9e30b8e0
L
9480 },
9481 {
592a252b 9482 /* VEX_W_0F7C_P_2 */
9e30b8e0 9483 { "vhaddpd", { XM, Vex, EXx } },
9e30b8e0
L
9484 },
9485 {
592a252b 9486 /* VEX_W_0F7C_P_3 */
9e30b8e0 9487 { "vhaddps", { XM, Vex, EXx } },
9e30b8e0
L
9488 },
9489 {
592a252b 9490 /* VEX_W_0F7D_P_2 */
9e30b8e0 9491 { "vhsubpd", { XM, Vex, EXx } },
9e30b8e0
L
9492 },
9493 {
592a252b 9494 /* VEX_W_0F7D_P_3 */
9e30b8e0 9495 { "vhsubps", { XM, Vex, EXx } },
9e30b8e0
L
9496 },
9497 {
592a252b 9498 /* VEX_W_0F7E_P_1 */
539f890d 9499 { "vmovq", { XMScalar, EXqScalar } },
9e30b8e0
L
9500 },
9501 {
592a252b 9502 /* VEX_W_0F7F_P_1 */
9e30b8e0 9503 { "vmovdqu", { EXxS, XM } },
9e30b8e0
L
9504 },
9505 {
592a252b 9506 /* VEX_W_0F7F_P_2 */
9e30b8e0 9507 { "vmovdqa", { EXxS, XM } },
9e30b8e0
L
9508 },
9509 {
592a252b 9510 /* VEX_W_0FAE_R_2_M_0 */
9e30b8e0 9511 { "vldmxcsr", { Md } },
9e30b8e0
L
9512 },
9513 {
592a252b 9514 /* VEX_W_0FAE_R_3_M_0 */
9e30b8e0 9515 { "vstmxcsr", { Md } },
9e30b8e0
L
9516 },
9517 {
592a252b 9518 /* VEX_W_0FC2_P_0 */
9e30b8e0 9519 { "vcmpps", { XM, Vex, EXx, VCMP } },
9e30b8e0
L
9520 },
9521 {
592a252b 9522 /* VEX_W_0FC2_P_1 */
539f890d 9523 { "vcmpss", { XMScalar, VexScalar, EXdScalar, VCMP } },
9e30b8e0
L
9524 },
9525 {
592a252b 9526 /* VEX_W_0FC2_P_2 */
9e30b8e0 9527 { "vcmppd", { XM, Vex, EXx, VCMP } },
9e30b8e0
L
9528 },
9529 {
592a252b 9530 /* VEX_W_0FC2_P_3 */
539f890d 9531 { "vcmpsd", { XMScalar, VexScalar, EXqScalar, VCMP } },
9e30b8e0
L
9532 },
9533 {
592a252b 9534 /* VEX_W_0FC4_P_2 */
9e30b8e0 9535 { "vpinsrw", { XM, Vex128, Edqw, Ib } },
9e30b8e0
L
9536 },
9537 {
592a252b 9538 /* VEX_W_0FC5_P_2 */
9e30b8e0 9539 { "vpextrw", { Gdq, XS, Ib } },
9e30b8e0
L
9540 },
9541 {
592a252b 9542 /* VEX_W_0FD0_P_2 */
9e30b8e0 9543 { "vaddsubpd", { XM, Vex, EXx } },
9e30b8e0
L
9544 },
9545 {
592a252b 9546 /* VEX_W_0FD0_P_3 */
9e30b8e0 9547 { "vaddsubps", { XM, Vex, EXx } },
9e30b8e0
L
9548 },
9549 {
592a252b 9550 /* VEX_W_0FD1_P_2 */
6c30d220 9551 { "vpsrlw", { XM, Vex, EXxmm } },
9e30b8e0
L
9552 },
9553 {
592a252b 9554 /* VEX_W_0FD2_P_2 */
6c30d220 9555 { "vpsrld", { XM, Vex, EXxmm } },
9e30b8e0
L
9556 },
9557 {
592a252b 9558 /* VEX_W_0FD3_P_2 */
6c30d220 9559 { "vpsrlq", { XM, Vex, EXxmm } },
9e30b8e0
L
9560 },
9561 {
592a252b 9562 /* VEX_W_0FD4_P_2 */
6c30d220 9563 { "vpaddq", { XM, Vex, EXx } },
9e30b8e0
L
9564 },
9565 {
592a252b 9566 /* VEX_W_0FD5_P_2 */
6c30d220 9567 { "vpmullw", { XM, Vex, EXx } },
9e30b8e0
L
9568 },
9569 {
592a252b 9570 /* VEX_W_0FD6_P_2 */
539f890d 9571 { "vmovq", { EXqScalarS, XMScalar } },
9e30b8e0
L
9572 },
9573 {
592a252b 9574 /* VEX_W_0FD7_P_2_M_1 */
9e30b8e0 9575 { "vpmovmskb", { Gdq, XS } },
9e30b8e0
L
9576 },
9577 {
592a252b 9578 /* VEX_W_0FD8_P_2 */
6c30d220 9579 { "vpsubusb", { XM, Vex, EXx } },
9e30b8e0
L
9580 },
9581 {
592a252b 9582 /* VEX_W_0FD9_P_2 */
6c30d220 9583 { "vpsubusw", { XM, Vex, EXx } },
9e30b8e0
L
9584 },
9585 {
592a252b 9586 /* VEX_W_0FDA_P_2 */
6c30d220 9587 { "vpminub", { XM, Vex, EXx } },
9e30b8e0
L
9588 },
9589 {
592a252b 9590 /* VEX_W_0FDB_P_2 */
6c30d220 9591 { "vpand", { XM, Vex, EXx } },
9e30b8e0
L
9592 },
9593 {
592a252b 9594 /* VEX_W_0FDC_P_2 */
6c30d220 9595 { "vpaddusb", { XM, Vex, EXx } },
9e30b8e0
L
9596 },
9597 {
592a252b 9598 /* VEX_W_0FDD_P_2 */
6c30d220 9599 { "vpaddusw", { XM, Vex, EXx } },
9e30b8e0
L
9600 },
9601 {
592a252b 9602 /* VEX_W_0FDE_P_2 */
6c30d220 9603 { "vpmaxub", { XM, Vex, EXx } },
9e30b8e0
L
9604 },
9605 {
592a252b 9606 /* VEX_W_0FDF_P_2 */
6c30d220 9607 { "vpandn", { XM, Vex, EXx } },
9e30b8e0
L
9608 },
9609 {
592a252b 9610 /* VEX_W_0FE0_P_2 */
6c30d220 9611 { "vpavgb", { XM, Vex, EXx } },
9e30b8e0
L
9612 },
9613 {
592a252b 9614 /* VEX_W_0FE1_P_2 */
6c30d220 9615 { "vpsraw", { XM, Vex, EXxmm } },
9e30b8e0
L
9616 },
9617 {
592a252b 9618 /* VEX_W_0FE2_P_2 */
6c30d220 9619 { "vpsrad", { XM, Vex, EXxmm } },
9e30b8e0
L
9620 },
9621 {
592a252b 9622 /* VEX_W_0FE3_P_2 */
6c30d220 9623 { "vpavgw", { XM, Vex, EXx } },
9e30b8e0
L
9624 },
9625 {
592a252b 9626 /* VEX_W_0FE4_P_2 */
6c30d220 9627 { "vpmulhuw", { XM, Vex, EXx } },
9e30b8e0
L
9628 },
9629 {
592a252b 9630 /* VEX_W_0FE5_P_2 */
6c30d220 9631 { "vpmulhw", { XM, Vex, EXx } },
9e30b8e0
L
9632 },
9633 {
592a252b 9634 /* VEX_W_0FE6_P_1 */
efdb52b7 9635 { "vcvtdq2pd", { XM, EXxmmq } },
9e30b8e0
L
9636 },
9637 {
592a252b 9638 /* VEX_W_0FE6_P_2 */
a179a9fd 9639 { "vcvttpd2dq%XY", { XMM, EXx } },
9e30b8e0
L
9640 },
9641 {
592a252b 9642 /* VEX_W_0FE6_P_3 */
a179a9fd 9643 { "vcvtpd2dq%XY", { XMM, EXx } },
9e30b8e0
L
9644 },
9645 {
592a252b 9646 /* VEX_W_0FE7_P_2_M_0 */
9e30b8e0 9647 { "vmovntdq", { Mx, XM } },
9e30b8e0
L
9648 },
9649 {
592a252b 9650 /* VEX_W_0FE8_P_2 */
6c30d220 9651 { "vpsubsb", { XM, Vex, EXx } },
9e30b8e0
L
9652 },
9653 {
592a252b 9654 /* VEX_W_0FE9_P_2 */
6c30d220 9655 { "vpsubsw", { XM, Vex, EXx } },
9e30b8e0
L
9656 },
9657 {
592a252b 9658 /* VEX_W_0FEA_P_2 */
6c30d220 9659 { "vpminsw", { XM, Vex, EXx } },
9e30b8e0
L
9660 },
9661 {
592a252b 9662 /* VEX_W_0FEB_P_2 */
6c30d220 9663 { "vpor", { XM, Vex, EXx } },
9e30b8e0
L
9664 },
9665 {
592a252b 9666 /* VEX_W_0FEC_P_2 */
6c30d220 9667 { "vpaddsb", { XM, Vex, EXx } },
9e30b8e0
L
9668 },
9669 {
592a252b 9670 /* VEX_W_0FED_P_2 */
6c30d220 9671 { "vpaddsw", { XM, Vex, EXx } },
9e30b8e0
L
9672 },
9673 {
592a252b 9674 /* VEX_W_0FEE_P_2 */
6c30d220 9675 { "vpmaxsw", { XM, Vex, EXx } },
9e30b8e0
L
9676 },
9677 {
592a252b 9678 /* VEX_W_0FEF_P_2 */
6c30d220 9679 { "vpxor", { XM, Vex, EXx } },
9e30b8e0
L
9680 },
9681 {
592a252b 9682 /* VEX_W_0FF0_P_3_M_0 */
9e30b8e0 9683 { "vlddqu", { XM, M } },
9e30b8e0
L
9684 },
9685 {
592a252b 9686 /* VEX_W_0FF1_P_2 */
6c30d220 9687 { "vpsllw", { XM, Vex, EXxmm } },
9e30b8e0
L
9688 },
9689 {
592a252b 9690 /* VEX_W_0FF2_P_2 */
6c30d220 9691 { "vpslld", { XM, Vex, EXxmm } },
9e30b8e0
L
9692 },
9693 {
592a252b 9694 /* VEX_W_0FF3_P_2 */
6c30d220 9695 { "vpsllq", { XM, Vex, EXxmm } },
9e30b8e0
L
9696 },
9697 {
592a252b 9698 /* VEX_W_0FF4_P_2 */
6c30d220 9699 { "vpmuludq", { XM, Vex, EXx } },
9e30b8e0
L
9700 },
9701 {
592a252b 9702 /* VEX_W_0FF5_P_2 */
6c30d220 9703 { "vpmaddwd", { XM, Vex, EXx } },
9e30b8e0
L
9704 },
9705 {
592a252b 9706 /* VEX_W_0FF6_P_2 */
6c30d220 9707 { "vpsadbw", { XM, Vex, EXx } },
9e30b8e0
L
9708 },
9709 {
592a252b 9710 /* VEX_W_0FF7_P_2 */
9e30b8e0 9711 { "vmaskmovdqu", { XM, XS } },
9e30b8e0
L
9712 },
9713 {
592a252b 9714 /* VEX_W_0FF8_P_2 */
6c30d220 9715 { "vpsubb", { XM, Vex, EXx } },
9e30b8e0
L
9716 },
9717 {
592a252b 9718 /* VEX_W_0FF9_P_2 */
6c30d220 9719 { "vpsubw", { XM, Vex, EXx } },
9e30b8e0
L
9720 },
9721 {
592a252b 9722 /* VEX_W_0FFA_P_2 */
6c30d220 9723 { "vpsubd", { XM, Vex, EXx } },
9e30b8e0
L
9724 },
9725 {
592a252b 9726 /* VEX_W_0FFB_P_2 */
6c30d220 9727 { "vpsubq", { XM, Vex, EXx } },
9e30b8e0
L
9728 },
9729 {
592a252b 9730 /* VEX_W_0FFC_P_2 */
6c30d220 9731 { "vpaddb", { XM, Vex, EXx } },
9e30b8e0
L
9732 },
9733 {
592a252b 9734 /* VEX_W_0FFD_P_2 */
6c30d220 9735 { "vpaddw", { XM, Vex, EXx } },
9e30b8e0
L
9736 },
9737 {
592a252b 9738 /* VEX_W_0FFE_P_2 */
6c30d220 9739 { "vpaddd", { XM, Vex, EXx } },
9e30b8e0
L
9740 },
9741 {
592a252b 9742 /* VEX_W_0F3800_P_2 */
6c30d220 9743 { "vpshufb", { XM, Vex, EXx } },
9e30b8e0
L
9744 },
9745 {
592a252b 9746 /* VEX_W_0F3801_P_2 */
6c30d220 9747 { "vphaddw", { XM, Vex, EXx } },
9e30b8e0
L
9748 },
9749 {
592a252b 9750 /* VEX_W_0F3802_P_2 */
6c30d220 9751 { "vphaddd", { XM, Vex, EXx } },
9e30b8e0
L
9752 },
9753 {
592a252b 9754 /* VEX_W_0F3803_P_2 */
6c30d220 9755 { "vphaddsw", { XM, Vex, EXx } },
9e30b8e0
L
9756 },
9757 {
592a252b 9758 /* VEX_W_0F3804_P_2 */
6c30d220 9759 { "vpmaddubsw", { XM, Vex, EXx } },
9e30b8e0
L
9760 },
9761 {
592a252b 9762 /* VEX_W_0F3805_P_2 */
6c30d220 9763 { "vphsubw", { XM, Vex, EXx } },
9e30b8e0
L
9764 },
9765 {
592a252b 9766 /* VEX_W_0F3806_P_2 */
6c30d220 9767 { "vphsubd", { XM, Vex, EXx } },
9e30b8e0
L
9768 },
9769 {
592a252b 9770 /* VEX_W_0F3807_P_2 */
6c30d220 9771 { "vphsubsw", { XM, Vex, EXx } },
9e30b8e0
L
9772 },
9773 {
592a252b 9774 /* VEX_W_0F3808_P_2 */
6c30d220 9775 { "vpsignb", { XM, Vex, EXx } },
9e30b8e0
L
9776 },
9777 {
592a252b 9778 /* VEX_W_0F3809_P_2 */
6c30d220 9779 { "vpsignw", { XM, Vex, EXx } },
9e30b8e0
L
9780 },
9781 {
592a252b 9782 /* VEX_W_0F380A_P_2 */
6c30d220 9783 { "vpsignd", { XM, Vex, EXx } },
9e30b8e0
L
9784 },
9785 {
592a252b 9786 /* VEX_W_0F380B_P_2 */
6c30d220 9787 { "vpmulhrsw", { XM, Vex, EXx } },
9e30b8e0
L
9788 },
9789 {
592a252b 9790 /* VEX_W_0F380C_P_2 */
9e30b8e0 9791 { "vpermilps", { XM, Vex, EXx } },
9e30b8e0
L
9792 },
9793 {
592a252b 9794 /* VEX_W_0F380D_P_2 */
9e30b8e0 9795 { "vpermilpd", { XM, Vex, EXx } },
9e30b8e0
L
9796 },
9797 {
592a252b 9798 /* VEX_W_0F380E_P_2 */
9e30b8e0 9799 { "vtestps", { XM, EXx } },
9e30b8e0
L
9800 },
9801 {
592a252b 9802 /* VEX_W_0F380F_P_2 */
9e30b8e0 9803 { "vtestpd", { XM, EXx } },
9e30b8e0 9804 },
6c30d220
L
9805 {
9806 /* VEX_W_0F3816_P_2 */
9807 { "vpermps", { XM, Vex, EXx } },
9808 },
9e30b8e0 9809 {
592a252b 9810 /* VEX_W_0F3817_P_2 */
9e30b8e0 9811 { "vptest", { XM, EXx } },
9e30b8e0 9812 },
bcf2684f 9813 {
6c30d220
L
9814 /* VEX_W_0F3818_P_2 */
9815 { "vbroadcastss", { XM, EXxmm_md } },
bcf2684f 9816 },
9e30b8e0 9817 {
6c30d220
L
9818 /* VEX_W_0F3819_P_2 */
9819 { "vbroadcastsd", { XM, EXxmm_mq } },
9e30b8e0
L
9820 },
9821 {
592a252b 9822 /* VEX_W_0F381A_P_2_M_0 */
9e30b8e0 9823 { "vbroadcastf128", { XM, Mxmm } },
9e30b8e0
L
9824 },
9825 {
592a252b 9826 /* VEX_W_0F381C_P_2 */
9e30b8e0 9827 { "vpabsb", { XM, EXx } },
9e30b8e0
L
9828 },
9829 {
592a252b 9830 /* VEX_W_0F381D_P_2 */
9e30b8e0 9831 { "vpabsw", { XM, EXx } },
9e30b8e0
L
9832 },
9833 {
592a252b 9834 /* VEX_W_0F381E_P_2 */
9e30b8e0 9835 { "vpabsd", { XM, EXx } },
9e30b8e0
L
9836 },
9837 {
592a252b 9838 /* VEX_W_0F3820_P_2 */
6c30d220 9839 { "vpmovsxbw", { XM, EXxmmq } },
9e30b8e0
L
9840 },
9841 {
592a252b 9842 /* VEX_W_0F3821_P_2 */
6c30d220 9843 { "vpmovsxbd", { XM, EXxmmqd } },
9e30b8e0
L
9844 },
9845 {
592a252b 9846 /* VEX_W_0F3822_P_2 */
6c30d220 9847 { "vpmovsxbq", { XM, EXxmmdw } },
9e30b8e0
L
9848 },
9849 {
592a252b 9850 /* VEX_W_0F3823_P_2 */
6c30d220 9851 { "vpmovsxwd", { XM, EXxmmq } },
9e30b8e0
L
9852 },
9853 {
592a252b 9854 /* VEX_W_0F3824_P_2 */
6c30d220 9855 { "vpmovsxwq", { XM, EXxmmqd } },
9e30b8e0
L
9856 },
9857 {
592a252b 9858 /* VEX_W_0F3825_P_2 */
6c30d220 9859 { "vpmovsxdq", { XM, EXxmmq } },
9e30b8e0
L
9860 },
9861 {
592a252b 9862 /* VEX_W_0F3828_P_2 */
6c30d220 9863 { "vpmuldq", { XM, Vex, EXx } },
9e30b8e0
L
9864 },
9865 {
592a252b 9866 /* VEX_W_0F3829_P_2 */
6c30d220 9867 { "vpcmpeqq", { XM, Vex, EXx } },
9e30b8e0
L
9868 },
9869 {
592a252b 9870 /* VEX_W_0F382A_P_2_M_0 */
9e30b8e0 9871 { "vmovntdqa", { XM, Mx } },
9e30b8e0
L
9872 },
9873 {
592a252b 9874 /* VEX_W_0F382B_P_2 */
6c30d220 9875 { "vpackusdw", { XM, Vex, EXx } },
9e30b8e0 9876 },
53aa04a0 9877 {
592a252b 9878 /* VEX_W_0F382C_P_2_M_0 */
53aa04a0 9879 { "vmaskmovps", { XM, Vex, Mx } },
53aa04a0
L
9880 },
9881 {
592a252b 9882 /* VEX_W_0F382D_P_2_M_0 */
53aa04a0 9883 { "vmaskmovpd", { XM, Vex, Mx } },
53aa04a0
L
9884 },
9885 {
592a252b 9886 /* VEX_W_0F382E_P_2_M_0 */
53aa04a0 9887 { "vmaskmovps", { Mx, Vex, XM } },
53aa04a0
L
9888 },
9889 {
592a252b 9890 /* VEX_W_0F382F_P_2_M_0 */
53aa04a0 9891 { "vmaskmovpd", { Mx, Vex, XM } },
53aa04a0 9892 },
9e30b8e0 9893 {
592a252b 9894 /* VEX_W_0F3830_P_2 */
6c30d220 9895 { "vpmovzxbw", { XM, EXxmmq } },
9e30b8e0
L
9896 },
9897 {
592a252b 9898 /* VEX_W_0F3831_P_2 */
6c30d220 9899 { "vpmovzxbd", { XM, EXxmmqd } },
9e30b8e0
L
9900 },
9901 {
592a252b 9902 /* VEX_W_0F3832_P_2 */
6c30d220 9903 { "vpmovzxbq", { XM, EXxmmdw } },
9e30b8e0
L
9904 },
9905 {
592a252b 9906 /* VEX_W_0F3833_P_2 */
6c30d220 9907 { "vpmovzxwd", { XM, EXxmmq } },
9e30b8e0
L
9908 },
9909 {
592a252b 9910 /* VEX_W_0F3834_P_2 */
6c30d220 9911 { "vpmovzxwq", { XM, EXxmmqd } },
9e30b8e0
L
9912 },
9913 {
592a252b 9914 /* VEX_W_0F3835_P_2 */
6c30d220
L
9915 { "vpmovzxdq", { XM, EXxmmq } },
9916 },
9917 {
9918 /* VEX_W_0F3836_P_2 */
9919 { "vpermd", { XM, Vex, EXx } },
9e30b8e0
L
9920 },
9921 {
592a252b 9922 /* VEX_W_0F3837_P_2 */
6c30d220 9923 { "vpcmpgtq", { XM, Vex, EXx } },
9e30b8e0
L
9924 },
9925 {
592a252b 9926 /* VEX_W_0F3838_P_2 */
6c30d220 9927 { "vpminsb", { XM, Vex, EXx } },
9e30b8e0
L
9928 },
9929 {
592a252b 9930 /* VEX_W_0F3839_P_2 */
6c30d220 9931 { "vpminsd", { XM, Vex, EXx } },
9e30b8e0
L
9932 },
9933 {
592a252b 9934 /* VEX_W_0F383A_P_2 */
6c30d220 9935 { "vpminuw", { XM, Vex, EXx } },
9e30b8e0
L
9936 },
9937 {
592a252b 9938 /* VEX_W_0F383B_P_2 */
6c30d220 9939 { "vpminud", { XM, Vex, EXx } },
9e30b8e0
L
9940 },
9941 {
592a252b 9942 /* VEX_W_0F383C_P_2 */
6c30d220 9943 { "vpmaxsb", { XM, Vex, EXx } },
9e30b8e0
L
9944 },
9945 {
592a252b 9946 /* VEX_W_0F383D_P_2 */
6c30d220 9947 { "vpmaxsd", { XM, Vex, EXx } },
9e30b8e0
L
9948 },
9949 {
592a252b 9950 /* VEX_W_0F383E_P_2 */
6c30d220 9951 { "vpmaxuw", { XM, Vex, EXx } },
9e30b8e0
L
9952 },
9953 {
592a252b 9954 /* VEX_W_0F383F_P_2 */
6c30d220 9955 { "vpmaxud", { XM, Vex, EXx } },
9e30b8e0
L
9956 },
9957 {
592a252b 9958 /* VEX_W_0F3840_P_2 */
6c30d220 9959 { "vpmulld", { XM, Vex, EXx } },
9e30b8e0
L
9960 },
9961 {
592a252b 9962 /* VEX_W_0F3841_P_2 */
9e30b8e0 9963 { "vphminposuw", { XM, EXx } },
9e30b8e0 9964 },
6c30d220
L
9965 {
9966 /* VEX_W_0F3846_P_2 */
9967 { "vpsravd", { XM, Vex, EXx } },
9968 },
9969 {
9970 /* VEX_W_0F3858_P_2 */
9971 { "vpbroadcastd", { XM, EXxmm_md } },
9972 },
9973 {
9974 /* VEX_W_0F3859_P_2 */
9975 { "vpbroadcastq", { XM, EXxmm_mq } },
9976 },
9977 {
9978 /* VEX_W_0F385A_P_2_M_0 */
9979 { "vbroadcasti128", { XM, Mxmm } },
9980 },
9981 {
9982 /* VEX_W_0F3878_P_2 */
9983 { "vpbroadcastb", { XM, EXxmm_mb } },
9984 },
9985 {
9986 /* VEX_W_0F3879_P_2 */
9987 { "vpbroadcastw", { XM, EXxmm_mw } },
9988 },
9e30b8e0 9989 {
592a252b 9990 /* VEX_W_0F38DB_P_2 */
9e30b8e0 9991 { "vaesimc", { XM, EXx } },
9e30b8e0
L
9992 },
9993 {
592a252b 9994 /* VEX_W_0F38DC_P_2 */
9e30b8e0 9995 { "vaesenc", { XM, Vex128, EXx } },
9e30b8e0
L
9996 },
9997 {
592a252b 9998 /* VEX_W_0F38DD_P_2 */
9e30b8e0 9999 { "vaesenclast", { XM, Vex128, EXx } },
9e30b8e0
L
10000 },
10001 {
592a252b 10002 /* VEX_W_0F38DE_P_2 */
9e30b8e0 10003 { "vaesdec", { XM, Vex128, EXx } },
9e30b8e0
L
10004 },
10005 {
592a252b 10006 /* VEX_W_0F38DF_P_2 */
9e30b8e0 10007 { "vaesdeclast", { XM, Vex128, EXx } },
9e30b8e0 10008 },
6c30d220
L
10009 {
10010 /* VEX_W_0F3A00_P_2 */
10011 { Bad_Opcode },
10012 { "vpermq", { XM, EXx, Ib } },
10013 },
10014 {
10015 /* VEX_W_0F3A01_P_2 */
10016 { Bad_Opcode },
10017 { "vpermpd", { XM, EXx, Ib } },
10018 },
10019 {
10020 /* VEX_W_0F3A02_P_2 */
10021 { "vpblendd", { XM, Vex, EXx, Ib } },
10022 },
9e30b8e0 10023 {
592a252b 10024 /* VEX_W_0F3A04_P_2 */
9e30b8e0 10025 { "vpermilps", { XM, EXx, Ib } },
9e30b8e0
L
10026 },
10027 {
592a252b 10028 /* VEX_W_0F3A05_P_2 */
9e30b8e0 10029 { "vpermilpd", { XM, EXx, Ib } },
9e30b8e0
L
10030 },
10031 {
592a252b 10032 /* VEX_W_0F3A06_P_2 */
9e30b8e0 10033 { "vperm2f128", { XM, Vex256, EXx, Ib } },
9e30b8e0
L
10034 },
10035 {
592a252b 10036 /* VEX_W_0F3A08_P_2 */
9e30b8e0 10037 { "vroundps", { XM, EXx, Ib } },
9e30b8e0
L
10038 },
10039 {
592a252b 10040 /* VEX_W_0F3A09_P_2 */
9e30b8e0 10041 { "vroundpd", { XM, EXx, Ib } },
9e30b8e0
L
10042 },
10043 {
592a252b 10044 /* VEX_W_0F3A0A_P_2 */
539f890d 10045 { "vroundss", { XMScalar, VexScalar, EXdScalar, Ib } },
9e30b8e0
L
10046 },
10047 {
592a252b 10048 /* VEX_W_0F3A0B_P_2 */
539f890d 10049 { "vroundsd", { XMScalar, VexScalar, EXqScalar, Ib } },
9e30b8e0
L
10050 },
10051 {
592a252b 10052 /* VEX_W_0F3A0C_P_2 */
9e30b8e0 10053 { "vblendps", { XM, Vex, EXx, Ib } },
9e30b8e0
L
10054 },
10055 {
592a252b 10056 /* VEX_W_0F3A0D_P_2 */
9e30b8e0 10057 { "vblendpd", { XM, Vex, EXx, Ib } },
9e30b8e0
L
10058 },
10059 {
592a252b 10060 /* VEX_W_0F3A0E_P_2 */
6c30d220 10061 { "vpblendw", { XM, Vex, EXx, Ib } },
9e30b8e0
L
10062 },
10063 {
592a252b 10064 /* VEX_W_0F3A0F_P_2 */
6c30d220 10065 { "vpalignr", { XM, Vex, EXx, Ib } },
9e30b8e0
L
10066 },
10067 {
592a252b 10068 /* VEX_W_0F3A14_P_2 */
9e30b8e0 10069 { "vpextrb", { Edqb, XM, Ib } },
9e30b8e0
L
10070 },
10071 {
592a252b 10072 /* VEX_W_0F3A15_P_2 */
9e30b8e0 10073 { "vpextrw", { Edqw, XM, Ib } },
9e30b8e0
L
10074 },
10075 {
592a252b 10076 /* VEX_W_0F3A18_P_2 */
9e30b8e0 10077 { "vinsertf128", { XM, Vex256, EXxmm, Ib } },
9e30b8e0
L
10078 },
10079 {
592a252b 10080 /* VEX_W_0F3A19_P_2 */
9e30b8e0 10081 { "vextractf128", { EXxmm, XM, Ib } },
9e30b8e0
L
10082 },
10083 {
592a252b 10084 /* VEX_W_0F3A20_P_2 */
9e30b8e0 10085 { "vpinsrb", { XM, Vex128, Edqb, Ib } },
9e30b8e0
L
10086 },
10087 {
592a252b 10088 /* VEX_W_0F3A21_P_2 */
9e30b8e0 10089 { "vinsertps", { XM, Vex128, EXd, Ib } },
9e30b8e0 10090 },
6c30d220
L
10091 {
10092 /* VEX_W_0F3A38_P_2 */
10093 { "vinserti128", { XM, Vex256, EXxmm, Ib } },
10094 },
10095 {
10096 /* VEX_W_0F3A39_P_2 */
10097 { "vextracti128", { EXxmm, XM, Ib } },
10098 },
9e30b8e0 10099 {
592a252b 10100 /* VEX_W_0F3A40_P_2 */
9e30b8e0 10101 { "vdpps", { XM, Vex, EXx, Ib } },
9e30b8e0
L
10102 },
10103 {
592a252b 10104 /* VEX_W_0F3A41_P_2 */
9e30b8e0 10105 { "vdppd", { XM, Vex128, EXx, Ib } },
9e30b8e0
L
10106 },
10107 {
592a252b 10108 /* VEX_W_0F3A42_P_2 */
6c30d220 10109 { "vmpsadbw", { XM, Vex, EXx, Ib } },
9e30b8e0
L
10110 },
10111 {
592a252b 10112 /* VEX_W_0F3A44_P_2 */
9e30b8e0 10113 { "vpclmulqdq", { XM, Vex128, EXx, PCLMUL } },
9e30b8e0 10114 },
6c30d220
L
10115 {
10116 /* VEX_W_0F3A46_P_2 */
10117 { "vperm2i128", { XM, Vex256, EXx, Ib } },
10118 },
a683cc34 10119 {
592a252b 10120 /* VEX_W_0F3A48_P_2 */
a683cc34
SP
10121 { "vpermil2ps", { XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW } },
10122 { "vpermil2ps", { XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW } },
10123 },
10124 {
592a252b 10125 /* VEX_W_0F3A49_P_2 */
a683cc34
SP
10126 { "vpermil2pd", { XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW } },
10127 { "vpermil2pd", { XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW } },
10128 },
9e30b8e0 10129 {
592a252b 10130 /* VEX_W_0F3A4A_P_2 */
9e30b8e0 10131 { "vblendvps", { XM, Vex, EXx, XMVexI4 } },
9e30b8e0
L
10132 },
10133 {
592a252b 10134 /* VEX_W_0F3A4B_P_2 */
9e30b8e0 10135 { "vblendvpd", { XM, Vex, EXx, XMVexI4 } },
9e30b8e0
L
10136 },
10137 {
592a252b 10138 /* VEX_W_0F3A4C_P_2 */
6c30d220 10139 { "vpblendvb", { XM, Vex, EXx, XMVexI4 } },
9e30b8e0
L
10140 },
10141 {
592a252b 10142 /* VEX_W_0F3A60_P_2 */
9e30b8e0 10143 { "vpcmpestrm", { XM, EXx, Ib } },
9e30b8e0
L
10144 },
10145 {
592a252b 10146 /* VEX_W_0F3A61_P_2 */
9e30b8e0 10147 { "vpcmpestri", { XM, EXx, Ib } },
9e30b8e0
L
10148 },
10149 {
592a252b 10150 /* VEX_W_0F3A62_P_2 */
9e30b8e0 10151 { "vpcmpistrm", { XM, EXx, Ib } },
9e30b8e0
L
10152 },
10153 {
592a252b 10154 /* VEX_W_0F3A63_P_2 */
9e30b8e0 10155 { "vpcmpistri", { XM, EXx, Ib } },
9e30b8e0
L
10156 },
10157 {
592a252b 10158 /* VEX_W_0F3ADF_P_2 */
9e30b8e0 10159 { "vaeskeygenassist", { XM, EXx, Ib } },
9e30b8e0
L
10160 },
10161};
10162
10163static const struct dis386 mod_table[][2] = {
10164 {
10165 /* MOD_8D */
10166 { "leaS", { Gv, M } },
9e30b8e0 10167 },
42164a71
L
10168 {
10169 /* MOD_C6_REG_7 */
10170 { Bad_Opcode },
10171 { RM_TABLE (RM_C6_REG_7) },
10172 },
10173 {
10174 /* MOD_C7_REG_7 */
10175 { Bad_Opcode },
10176 { RM_TABLE (RM_C7_REG_7) },
10177 },
9e30b8e0
L
10178 {
10179 /* MOD_0F01_REG_0 */
10180 { X86_64_TABLE (X86_64_0F01_REG_0) },
10181 { RM_TABLE (RM_0F01_REG_0) },
10182 },
10183 {
10184 /* MOD_0F01_REG_1 */
10185 { X86_64_TABLE (X86_64_0F01_REG_1) },
10186 { RM_TABLE (RM_0F01_REG_1) },
10187 },
10188 {
10189 /* MOD_0F01_REG_2 */
10190 { X86_64_TABLE (X86_64_0F01_REG_2) },
10191 { RM_TABLE (RM_0F01_REG_2) },
10192 },
10193 {
10194 /* MOD_0F01_REG_3 */
10195 { X86_64_TABLE (X86_64_0F01_REG_3) },
10196 { RM_TABLE (RM_0F01_REG_3) },
10197 },
10198 {
10199 /* MOD_0F01_REG_7 */
10200 { "invlpg", { Mb } },
10201 { RM_TABLE (RM_0F01_REG_7) },
10202 },
10203 {
10204 /* MOD_0F12_PREFIX_0 */
10205 { "movlps", { XM, EXq } },
10206 { "movhlps", { XM, EXq } },
10207 },
10208 {
10209 /* MOD_0F13 */
10210 { "movlpX", { EXq, XM } },
9e30b8e0
L
10211 },
10212 {
10213 /* MOD_0F16_PREFIX_0 */
10214 { "movhps", { XM, EXq } },
10215 { "movlhps", { XM, EXq } },
10216 },
10217 {
10218 /* MOD_0F17 */
10219 { "movhpX", { EXq, XM } },
9e30b8e0
L
10220 },
10221 {
10222 /* MOD_0F18_REG_0 */
10223 { "prefetchnta", { Mb } },
9e30b8e0
L
10224 },
10225 {
10226 /* MOD_0F18_REG_1 */
10227 { "prefetcht0", { Mb } },
9e30b8e0
L
10228 },
10229 {
10230 /* MOD_0F18_REG_2 */
10231 { "prefetcht1", { Mb } },
9e30b8e0
L
10232 },
10233 {
10234 /* MOD_0F18_REG_3 */
10235 { "prefetcht2", { Mb } },
9e30b8e0 10236 },
d7189fa5
RM
10237 {
10238 /* MOD_0F18_REG_4 */
10239 { "nop/reserved", { Mb } },
10240 },
10241 {
10242 /* MOD_0F18_REG_5 */
10243 { "nop/reserved", { Mb } },
10244 },
10245 {
10246 /* MOD_0F18_REG_6 */
10247 { "nop/reserved", { Mb } },
10248 },
10249 {
10250 /* MOD_0F18_REG_7 */
10251 { "nop/reserved", { Mb } },
10252 },
9e30b8e0
L
10253 {
10254 /* MOD_0F20 */
592d1631 10255 { Bad_Opcode },
9e30b8e0
L
10256 { "movZ", { Rm, Cm } },
10257 },
10258 {
10259 /* MOD_0F21 */
592d1631 10260 { Bad_Opcode },
9e30b8e0
L
10261 { "movZ", { Rm, Dm } },
10262 },
10263 {
10264 /* MOD_0F22 */
592d1631 10265 { Bad_Opcode },
9e30b8e0 10266 { "movZ", { Cm, Rm } },
b844680a
L
10267 },
10268 {
92fddf8e 10269 /* MOD_0F23 */
592d1631 10270 { Bad_Opcode },
92fddf8e 10271 { "movZ", { Dm, Rm } },
b844680a
L
10272 },
10273 {
92fddf8e 10274 /* MOD_0F24 */
7bb15c6f 10275 { Bad_Opcode },
92fddf8e 10276 { "movL", { Rd, Td } },
b844680a
L
10277 },
10278 {
92fddf8e 10279 /* MOD_0F26 */
592d1631 10280 { Bad_Opcode },
92fddf8e 10281 { "movL", { Td, Rd } },
b844680a 10282 },
75c135a8
L
10283 {
10284 /* MOD_0F2B_PREFIX_0 */
4ee52178 10285 {"movntps", { Mx, XM } },
75c135a8
L
10286 },
10287 {
10288 /* MOD_0F2B_PREFIX_1 */
4ee52178 10289 {"movntss", { Md, XM } },
75c135a8
L
10290 },
10291 {
10292 /* MOD_0F2B_PREFIX_2 */
4ee52178 10293 {"movntpd", { Mx, XM } },
75c135a8
L
10294 },
10295 {
10296 /* MOD_0F2B_PREFIX_3 */
4ee52178 10297 {"movntsd", { Mq, XM } },
75c135a8
L
10298 },
10299 {
10300 /* MOD_0F51 */
592d1631 10301 { Bad_Opcode },
75c135a8
L
10302 { "movmskpX", { Gdq, XS } },
10303 },
b844680a 10304 {
1ceb70f8 10305 /* MOD_0F71_REG_2 */
592d1631 10306 { Bad_Opcode },
4e7d34a6 10307 { "psrlw", { MS, Ib } },
b844680a
L
10308 },
10309 {
1ceb70f8 10310 /* MOD_0F71_REG_4 */
592d1631 10311 { Bad_Opcode },
4e7d34a6 10312 { "psraw", { MS, Ib } },
b844680a
L
10313 },
10314 {
1ceb70f8 10315 /* MOD_0F71_REG_6 */
592d1631 10316 { Bad_Opcode },
4e7d34a6 10317 { "psllw", { MS, Ib } },
b844680a
L
10318 },
10319 {
1ceb70f8 10320 /* MOD_0F72_REG_2 */
592d1631 10321 { Bad_Opcode },
4e7d34a6 10322 { "psrld", { MS, Ib } },
b844680a
L
10323 },
10324 {
1ceb70f8 10325 /* MOD_0F72_REG_4 */
592d1631 10326 { Bad_Opcode },
4e7d34a6 10327 { "psrad", { MS, Ib } },
b844680a
L
10328 },
10329 {
1ceb70f8 10330 /* MOD_0F72_REG_6 */
592d1631 10331 { Bad_Opcode },
4e7d34a6 10332 { "pslld", { MS, Ib } },
b844680a
L
10333 },
10334 {
1ceb70f8 10335 /* MOD_0F73_REG_2 */
592d1631 10336 { Bad_Opcode },
4e7d34a6 10337 { "psrlq", { MS, Ib } },
b844680a
L
10338 },
10339 {
1ceb70f8 10340 /* MOD_0F73_REG_3 */
592d1631 10341 { Bad_Opcode },
c0f3af97
L
10342 { PREFIX_TABLE (PREFIX_0F73_REG_3) },
10343 },
10344 {
10345 /* MOD_0F73_REG_6 */
592d1631 10346 { Bad_Opcode },
c0f3af97
L
10347 { "psllq", { MS, Ib } },
10348 },
10349 {
10350 /* MOD_0F73_REG_7 */
592d1631 10351 { Bad_Opcode },
c0f3af97
L
10352 { PREFIX_TABLE (PREFIX_0F73_REG_7) },
10353 },
10354 {
10355 /* MOD_0FAE_REG_0 */
eacc9c89 10356 { "fxsave", { FXSAVE } },
c7b8aa3a 10357 { PREFIX_TABLE (PREFIX_0FAE_REG_0) },
c0f3af97
L
10358 },
10359 {
10360 /* MOD_0FAE_REG_1 */
eacc9c89 10361 { "fxrstor", { FXSAVE } },
c7b8aa3a 10362 { PREFIX_TABLE (PREFIX_0FAE_REG_1) },
c0f3af97
L
10363 },
10364 {
10365 /* MOD_0FAE_REG_2 */
10366 { "ldmxcsr", { Md } },
c7b8aa3a 10367 { PREFIX_TABLE (PREFIX_0FAE_REG_2) },
c0f3af97
L
10368 },
10369 {
10370 /* MOD_0FAE_REG_3 */
10371 { "stmxcsr", { Md } },
c7b8aa3a 10372 { PREFIX_TABLE (PREFIX_0FAE_REG_3) },
c0f3af97
L
10373 },
10374 {
10375 /* MOD_0FAE_REG_4 */
73bb6729 10376 { "xsave", { FXSAVE } },
c0f3af97
L
10377 },
10378 {
10379 /* MOD_0FAE_REG_5 */
73bb6729 10380 { "xrstor", { FXSAVE } },
c0f3af97
L
10381 { RM_TABLE (RM_0FAE_REG_5) },
10382 },
10383 {
10384 /* MOD_0FAE_REG_6 */
c7b8aa3a 10385 { "xsaveopt", { FXSAVE } },
c0f3af97
L
10386 { RM_TABLE (RM_0FAE_REG_6) },
10387 },
10388 {
10389 /* MOD_0FAE_REG_7 */
10390 { "clflush", { Mb } },
10391 { RM_TABLE (RM_0FAE_REG_7) },
10392 },
10393 {
10394 /* MOD_0FB2 */
10395 { "lssS", { Gv, Mp } },
c0f3af97
L
10396 },
10397 {
10398 /* MOD_0FB4 */
10399 { "lfsS", { Gv, Mp } },
c0f3af97
L
10400 },
10401 {
10402 /* MOD_0FB5 */
10403 { "lgsS", { Gv, Mp } },
c0f3af97
L
10404 },
10405 {
10406 /* MOD_0FC7_REG_6 */
10407 { PREFIX_TABLE (PREFIX_0FC7_REG_6) },
d7d9a9f8 10408 { "rdrand", { Ev } },
c0f3af97
L
10409 },
10410 {
10411 /* MOD_0FC7_REG_7 */
10412 { "vmptrst", { Mq } },
e2e1fcde 10413 { "rdseed", { Ev } },
c0f3af97
L
10414 },
10415 {
10416 /* MOD_0FD7 */
592d1631 10417 { Bad_Opcode },
c0f3af97
L
10418 { "pmovmskb", { Gdq, MS } },
10419 },
10420 {
10421 /* MOD_0FE7_PREFIX_2 */
10422 { "movntdq", { Mx, XM } },
c0f3af97
L
10423 },
10424 {
10425 /* MOD_0FF0_PREFIX_3 */
10426 { "lddqu", { XM, M } },
c0f3af97
L
10427 },
10428 {
10429 /* MOD_0F382A_PREFIX_2 */
10430 { "movntdqa", { XM, Mx } },
c0f3af97
L
10431 },
10432 {
10433 /* MOD_62_32BIT */
10434 { "bound{S|}", { Gv, Ma } },
c0f3af97
L
10435 },
10436 {
10437 /* MOD_C4_32BIT */
10438 { "lesS", { Gv, Mp } },
10439 { VEX_C4_TABLE (VEX_0F) },
10440 },
10441 {
10442 /* MOD_C5_32BIT */
10443 { "ldsS", { Gv, Mp } },
10444 { VEX_C5_TABLE (VEX_0F) },
10445 },
10446 {
592a252b
L
10447 /* MOD_VEX_0F12_PREFIX_0 */
10448 { VEX_LEN_TABLE (VEX_LEN_0F12_P_0_M_0) },
10449 { VEX_LEN_TABLE (VEX_LEN_0F12_P_0_M_1) },
c0f3af97
L
10450 },
10451 {
592a252b
L
10452 /* MOD_VEX_0F13 */
10453 { VEX_LEN_TABLE (VEX_LEN_0F13_M_0) },
c0f3af97
L
10454 },
10455 {
592a252b
L
10456 /* MOD_VEX_0F16_PREFIX_0 */
10457 { VEX_LEN_TABLE (VEX_LEN_0F16_P_0_M_0) },
10458 { VEX_LEN_TABLE (VEX_LEN_0F16_P_0_M_1) },
c0f3af97
L
10459 },
10460 {
592a252b
L
10461 /* MOD_VEX_0F17 */
10462 { VEX_LEN_TABLE (VEX_LEN_0F17_M_0) },
c0f3af97
L
10463 },
10464 {
592a252b
L
10465 /* MOD_VEX_0F2B */
10466 { VEX_W_TABLE (VEX_W_0F2B_M_0) },
c0f3af97
L
10467 },
10468 {
592a252b 10469 /* MOD_VEX_0F50 */
592d1631 10470 { Bad_Opcode },
592a252b 10471 { VEX_W_TABLE (VEX_W_0F50_M_0) },
c0f3af97
L
10472 },
10473 {
592a252b 10474 /* MOD_VEX_0F71_REG_2 */
592d1631 10475 { Bad_Opcode },
592a252b 10476 { PREFIX_TABLE (PREFIX_VEX_0F71_REG_2) },
b844680a
L
10477 },
10478 {
592a252b 10479 /* MOD_VEX_0F71_REG_4 */
592d1631 10480 { Bad_Opcode },
592a252b 10481 { PREFIX_TABLE (PREFIX_VEX_0F71_REG_4) },
b844680a
L
10482 },
10483 {
592a252b 10484 /* MOD_VEX_0F71_REG_6 */
592d1631 10485 { Bad_Opcode },
592a252b 10486 { PREFIX_TABLE (PREFIX_VEX_0F71_REG_6) },
b844680a
L
10487 },
10488 {
592a252b 10489 /* MOD_VEX_0F72_REG_2 */
592d1631 10490 { Bad_Opcode },
592a252b 10491 { PREFIX_TABLE (PREFIX_VEX_0F72_REG_2) },
b844680a 10492 },
d8faab4e 10493 {
592a252b 10494 /* MOD_VEX_0F72_REG_4 */
592d1631 10495 { Bad_Opcode },
592a252b 10496 { PREFIX_TABLE (PREFIX_VEX_0F72_REG_4) },
d8faab4e
L
10497 },
10498 {
592a252b 10499 /* MOD_VEX_0F72_REG_6 */
592d1631 10500 { Bad_Opcode },
592a252b 10501 { PREFIX_TABLE (PREFIX_VEX_0F72_REG_6) },
d8faab4e 10502 },
876d4bfa 10503 {
592a252b 10504 /* MOD_VEX_0F73_REG_2 */
592d1631 10505 { Bad_Opcode },
592a252b 10506 { PREFIX_TABLE (PREFIX_VEX_0F73_REG_2) },
876d4bfa
L
10507 },
10508 {
592a252b 10509 /* MOD_VEX_0F73_REG_3 */
592d1631 10510 { Bad_Opcode },
592a252b 10511 { PREFIX_TABLE (PREFIX_VEX_0F73_REG_3) },
475a2301
L
10512 },
10513 {
592a252b 10514 /* MOD_VEX_0F73_REG_6 */
592d1631 10515 { Bad_Opcode },
592a252b 10516 { PREFIX_TABLE (PREFIX_VEX_0F73_REG_6) },
876d4bfa
L
10517 },
10518 {
592a252b 10519 /* MOD_VEX_0F73_REG_7 */
592d1631 10520 { Bad_Opcode },
592a252b 10521 { PREFIX_TABLE (PREFIX_VEX_0F73_REG_7) },
876d4bfa
L
10522 },
10523 {
592a252b
L
10524 /* MOD_VEX_0FAE_REG_2 */
10525 { VEX_LEN_TABLE (VEX_LEN_0FAE_R_2_M_0) },
876d4bfa 10526 },
bbedc832 10527 {
592a252b
L
10528 /* MOD_VEX_0FAE_REG_3 */
10529 { VEX_LEN_TABLE (VEX_LEN_0FAE_R_3_M_0) },
bbedc832 10530 },
144c41d9 10531 {
592a252b 10532 /* MOD_VEX_0FD7_PREFIX_2 */
592d1631 10533 { Bad_Opcode },
6c30d220 10534 { VEX_W_TABLE (VEX_W_0FD7_P_2_M_1) },
144c41d9 10535 },
1afd85e3 10536 {
592a252b
L
10537 /* MOD_VEX_0FE7_PREFIX_2 */
10538 { VEX_W_TABLE (VEX_W_0FE7_P_2_M_0) },
1afd85e3
L
10539 },
10540 {
592a252b
L
10541 /* MOD_VEX_0FF0_PREFIX_3 */
10542 { VEX_W_TABLE (VEX_W_0FF0_P_3_M_0) },
92fddf8e 10543 },
75c135a8 10544 {
592a252b
L
10545 /* MOD_VEX_0F381A_PREFIX_2 */
10546 { VEX_LEN_TABLE (VEX_LEN_0F381A_P_2_M_0) },
75c135a8 10547 },
1afd85e3 10548 {
592a252b 10549 /* MOD_VEX_0F382A_PREFIX_2 */
6c30d220 10550 { VEX_W_TABLE (VEX_W_0F382A_P_2_M_0) },
1afd85e3 10551 },
75c135a8 10552 {
592a252b
L
10553 /* MOD_VEX_0F382C_PREFIX_2 */
10554 { VEX_W_TABLE (VEX_W_0F382C_P_2_M_0) },
75c135a8 10555 },
1afd85e3 10556 {
592a252b
L
10557 /* MOD_VEX_0F382D_PREFIX_2 */
10558 { VEX_W_TABLE (VEX_W_0F382D_P_2_M_0) },
1afd85e3
L
10559 },
10560 {
592a252b
L
10561 /* MOD_VEX_0F382E_PREFIX_2 */
10562 { VEX_W_TABLE (VEX_W_0F382E_P_2_M_0) },
1afd85e3
L
10563 },
10564 {
592a252b
L
10565 /* MOD_VEX_0F382F_PREFIX_2 */
10566 { VEX_W_TABLE (VEX_W_0F382F_P_2_M_0) },
1afd85e3 10567 },
6c30d220
L
10568 {
10569 /* MOD_VEX_0F385A_PREFIX_2 */
10570 { VEX_LEN_TABLE (VEX_LEN_0F385A_P_2_M_0) },
10571 },
10572 {
10573 /* MOD_VEX_0F388C_PREFIX_2 */
10574 { "vpmaskmov%LW", { XM, Vex, Mx } },
10575 },
10576 {
10577 /* MOD_VEX_0F388E_PREFIX_2 */
10578 { "vpmaskmov%LW", { Mx, Vex, XM } },
10579 },
b844680a
L
10580};
10581
1ceb70f8 10582static const struct dis386 rm_table[][8] = {
42164a71
L
10583 {
10584 /* RM_C6_REG_7 */
10585 { "xabort", { Skip_MODRM, Ib } },
10586 },
10587 {
10588 /* RM_C7_REG_7 */
10589 { "xbeginT", { Skip_MODRM, Jv } },
10590 },
b844680a 10591 {
1ceb70f8 10592 /* RM_0F01_REG_0 */
592d1631 10593 { Bad_Opcode },
b844680a
L
10594 { "vmcall", { Skip_MODRM } },
10595 { "vmlaunch", { Skip_MODRM } },
10596 { "vmresume", { Skip_MODRM } },
10597 { "vmxoff", { Skip_MODRM } },
b844680a
L
10598 },
10599 {
1ceb70f8 10600 /* RM_0F01_REG_1 */
b844680a
L
10601 { "monitor", { { OP_Monitor, 0 } } },
10602 { "mwait", { { OP_Mwait, 0 } } },
5c111e37
L
10603 { "clac", { Skip_MODRM } },
10604 { "stac", { Skip_MODRM } },
b844680a 10605 },
475a2301
L
10606 {
10607 /* RM_0F01_REG_2 */
10608 { "xgetbv", { Skip_MODRM } },
10609 { "xsetbv", { Skip_MODRM } },
8729a6f6
L
10610 { Bad_Opcode },
10611 { Bad_Opcode },
10612 { "vmfunc", { Skip_MODRM } },
42164a71
L
10613 { "xend", { Skip_MODRM } },
10614 { "xtest", { Skip_MODRM } },
10615 { Bad_Opcode },
475a2301 10616 },
b844680a 10617 {
1ceb70f8 10618 /* RM_0F01_REG_3 */
4e7d34a6
L
10619 { "vmrun", { Skip_MODRM } },
10620 { "vmmcall", { Skip_MODRM } },
10621 { "vmload", { Skip_MODRM } },
10622 { "vmsave", { Skip_MODRM } },
10623 { "stgi", { Skip_MODRM } },
10624 { "clgi", { Skip_MODRM } },
10625 { "skinit", { Skip_MODRM } },
10626 { "invlpga", { Skip_MODRM } },
10627 },
10628 {
1ceb70f8 10629 /* RM_0F01_REG_7 */
4e7d34a6
L
10630 { "swapgs", { Skip_MODRM } },
10631 { "rdtscp", { Skip_MODRM } },
b844680a
L
10632 },
10633 {
1ceb70f8 10634 /* RM_0FAE_REG_5 */
4e7d34a6 10635 { "lfence", { Skip_MODRM } },
b844680a
L
10636 },
10637 {
1ceb70f8 10638 /* RM_0FAE_REG_6 */
4e7d34a6 10639 { "mfence", { Skip_MODRM } },
b844680a 10640 },
bbedc832 10641 {
1ceb70f8 10642 /* RM_0FAE_REG_7 */
4e7d34a6 10643 { "sfence", { Skip_MODRM } },
144c41d9 10644 },
b844680a
L
10645};
10646
c608c12e
AM
10647#define INTERNAL_DISASSEMBLER_ERROR _("<internal disassembler error>")
10648
f16cd0d5
L
10649/* We use the high bit to indicate different name for the same
10650 prefix. */
10651#define ADDR16_PREFIX (0x67 | 0x100)
10652#define ADDR32_PREFIX (0x67 | 0x200)
10653#define DATA16_PREFIX (0x66 | 0x100)
10654#define DATA32_PREFIX (0x66 | 0x200)
10655#define REP_PREFIX (0xf3 | 0x100)
42164a71
L
10656#define XACQUIRE_PREFIX (0xf2 | 0x200)
10657#define XRELEASE_PREFIX (0xf3 | 0x400)
f16cd0d5
L
10658
10659static int
26ca5450 10660ckprefix (void)
252b5132 10661{
f16cd0d5 10662 int newrex, i, length;
52b15da3 10663 rex = 0;
c0f3af97 10664 rex_ignored = 0;
252b5132 10665 prefixes = 0;
7d421014 10666 used_prefixes = 0;
52b15da3 10667 rex_used = 0;
f16cd0d5
L
10668 last_lock_prefix = -1;
10669 last_repz_prefix = -1;
10670 last_repnz_prefix = -1;
10671 last_data_prefix = -1;
10672 last_addr_prefix = -1;
10673 last_rex_prefix = -1;
10674 last_seg_prefix = -1;
f310f33d
L
10675 for (i = 0; i < (int) ARRAY_SIZE (all_prefixes); i++)
10676 all_prefixes[i] = 0;
10677 i = 0;
f16cd0d5
L
10678 length = 0;
10679 /* The maximum instruction length is 15bytes. */
10680 while (length < MAX_CODE_LENGTH - 1)
252b5132
RH
10681 {
10682 FETCH_DATA (the_info, codep + 1);
52b15da3 10683 newrex = 0;
252b5132
RH
10684 switch (*codep)
10685 {
52b15da3
JH
10686 /* REX prefixes family. */
10687 case 0x40:
10688 case 0x41:
10689 case 0x42:
10690 case 0x43:
10691 case 0x44:
10692 case 0x45:
10693 case 0x46:
10694 case 0x47:
10695 case 0x48:
10696 case 0x49:
10697 case 0x4a:
10698 case 0x4b:
10699 case 0x4c:
10700 case 0x4d:
10701 case 0x4e:
10702 case 0x4f:
f16cd0d5
L
10703 if (address_mode == mode_64bit)
10704 newrex = *codep;
10705 else
10706 return 1;
10707 last_rex_prefix = i;
52b15da3 10708 break;
252b5132
RH
10709 case 0xf3:
10710 prefixes |= PREFIX_REPZ;
f16cd0d5 10711 last_repz_prefix = i;
252b5132
RH
10712 break;
10713 case 0xf2:
10714 prefixes |= PREFIX_REPNZ;
f16cd0d5 10715 last_repnz_prefix = i;
252b5132
RH
10716 break;
10717 case 0xf0:
10718 prefixes |= PREFIX_LOCK;
f16cd0d5 10719 last_lock_prefix = i;
252b5132
RH
10720 break;
10721 case 0x2e:
10722 prefixes |= PREFIX_CS;
f16cd0d5 10723 last_seg_prefix = i;
252b5132
RH
10724 break;
10725 case 0x36:
10726 prefixes |= PREFIX_SS;
f16cd0d5 10727 last_seg_prefix = i;
252b5132
RH
10728 break;
10729 case 0x3e:
10730 prefixes |= PREFIX_DS;
f16cd0d5 10731 last_seg_prefix = i;
252b5132
RH
10732 break;
10733 case 0x26:
10734 prefixes |= PREFIX_ES;
f16cd0d5 10735 last_seg_prefix = i;
252b5132
RH
10736 break;
10737 case 0x64:
10738 prefixes |= PREFIX_FS;
f16cd0d5 10739 last_seg_prefix = i;
252b5132
RH
10740 break;
10741 case 0x65:
10742 prefixes |= PREFIX_GS;
f16cd0d5 10743 last_seg_prefix = i;
252b5132
RH
10744 break;
10745 case 0x66:
10746 prefixes |= PREFIX_DATA;
f16cd0d5 10747 last_data_prefix = i;
252b5132
RH
10748 break;
10749 case 0x67:
10750 prefixes |= PREFIX_ADDR;
f16cd0d5 10751 last_addr_prefix = i;
252b5132 10752 break;
5076851f 10753 case FWAIT_OPCODE:
252b5132
RH
10754 /* fwait is really an instruction. If there are prefixes
10755 before the fwait, they belong to the fwait, *not* to the
10756 following instruction. */
3e7d61b2 10757 if (prefixes || rex)
252b5132
RH
10758 {
10759 prefixes |= PREFIX_FWAIT;
10760 codep++;
6c067bbb
RM
10761 /* This ensures that the previous REX prefixes are noticed
10762 as unused prefixes, as in the return case below. */
10763 rex_used = rex;
f16cd0d5 10764 return 1;
252b5132
RH
10765 }
10766 prefixes = PREFIX_FWAIT;
10767 break;
10768 default:
f16cd0d5 10769 return 1;
252b5132 10770 }
52b15da3
JH
10771 /* Rex is ignored when followed by another prefix. */
10772 if (rex)
10773 {
3e7d61b2 10774 rex_used = rex;
f16cd0d5 10775 return 1;
52b15da3 10776 }
f16cd0d5
L
10777 if (*codep != FWAIT_OPCODE)
10778 all_prefixes[i++] = *codep;
52b15da3 10779 rex = newrex;
252b5132 10780 codep++;
f16cd0d5
L
10781 length++;
10782 }
10783 return 0;
10784}
10785
10786static int
10787seg_prefix (int pref)
10788{
10789 switch (pref)
10790 {
10791 case 0x2e:
10792 return PREFIX_CS;
10793 case 0x36:
10794 return PREFIX_SS;
10795 case 0x3e:
10796 return PREFIX_DS;
10797 case 0x26:
10798 return PREFIX_ES;
10799 case 0x64:
10800 return PREFIX_FS;
10801 case 0x65:
10802 return PREFIX_GS;
10803 default:
10804 return 0;
252b5132
RH
10805 }
10806}
10807
7d421014
ILT
10808/* Return the name of the prefix byte PREF, or NULL if PREF is not a
10809 prefix byte. */
10810
10811static const char *
26ca5450 10812prefix_name (int pref, int sizeflag)
7d421014 10813{
0003779b
L
10814 static const char *rexes [16] =
10815 {
10816 "rex", /* 0x40 */
10817 "rex.B", /* 0x41 */
10818 "rex.X", /* 0x42 */
10819 "rex.XB", /* 0x43 */
10820 "rex.R", /* 0x44 */
10821 "rex.RB", /* 0x45 */
10822 "rex.RX", /* 0x46 */
10823 "rex.RXB", /* 0x47 */
10824 "rex.W", /* 0x48 */
10825 "rex.WB", /* 0x49 */
10826 "rex.WX", /* 0x4a */
10827 "rex.WXB", /* 0x4b */
10828 "rex.WR", /* 0x4c */
10829 "rex.WRB", /* 0x4d */
10830 "rex.WRX", /* 0x4e */
10831 "rex.WRXB", /* 0x4f */
10832 };
10833
7d421014
ILT
10834 switch (pref)
10835 {
52b15da3
JH
10836 /* REX prefixes family. */
10837 case 0x40:
52b15da3 10838 case 0x41:
52b15da3 10839 case 0x42:
52b15da3 10840 case 0x43:
52b15da3 10841 case 0x44:
52b15da3 10842 case 0x45:
52b15da3 10843 case 0x46:
52b15da3 10844 case 0x47:
52b15da3 10845 case 0x48:
52b15da3 10846 case 0x49:
52b15da3 10847 case 0x4a:
52b15da3 10848 case 0x4b:
52b15da3 10849 case 0x4c:
52b15da3 10850 case 0x4d:
52b15da3 10851 case 0x4e:
52b15da3 10852 case 0x4f:
0003779b 10853 return rexes [pref - 0x40];
7d421014
ILT
10854 case 0xf3:
10855 return "repz";
10856 case 0xf2:
10857 return "repnz";
10858 case 0xf0:
10859 return "lock";
10860 case 0x2e:
10861 return "cs";
10862 case 0x36:
10863 return "ss";
10864 case 0x3e:
10865 return "ds";
10866 case 0x26:
10867 return "es";
10868 case 0x64:
10869 return "fs";
10870 case 0x65:
10871 return "gs";
10872 case 0x66:
10873 return (sizeflag & DFLAG) ? "data16" : "data32";
10874 case 0x67:
cb712a9e 10875 if (address_mode == mode_64bit)
db6eb5be 10876 return (sizeflag & AFLAG) ? "addr32" : "addr64";
c1a64871 10877 else
2888cb7a 10878 return (sizeflag & AFLAG) ? "addr16" : "addr32";
7d421014
ILT
10879 case FWAIT_OPCODE:
10880 return "fwait";
f16cd0d5
L
10881 case ADDR16_PREFIX:
10882 return "addr16";
10883 case ADDR32_PREFIX:
10884 return "addr32";
10885 case DATA16_PREFIX:
10886 return "data16";
10887 case DATA32_PREFIX:
10888 return "data32";
10889 case REP_PREFIX:
10890 return "rep";
42164a71
L
10891 case XACQUIRE_PREFIX:
10892 return "xacquire";
10893 case XRELEASE_PREFIX:
10894 return "xrelease";
7d421014
ILT
10895 default:
10896 return NULL;
10897 }
10898}
10899
ce518a5f
L
10900static char op_out[MAX_OPERANDS][100];
10901static int op_ad, op_index[MAX_OPERANDS];
1d9f512f 10902static int two_source_ops;
ce518a5f
L
10903static bfd_vma op_address[MAX_OPERANDS];
10904static bfd_vma op_riprel[MAX_OPERANDS];
52b15da3 10905static bfd_vma start_pc;
ce518a5f 10906
252b5132
RH
10907/*
10908 * On the 386's of 1988, the maximum length of an instruction is 15 bytes.
10909 * (see topic "Redundant prefixes" in the "Differences from 8086"
10910 * section of the "Virtual 8086 Mode" chapter.)
10911 * 'pc' should be the address of this instruction, it will
10912 * be used to print the target address if this is a relative jump or call
10913 * The function returns the length of this instruction in bytes.
10914 */
10915
252b5132 10916static char intel_syntax;
9d141669 10917static char intel_mnemonic = !SYSV386_COMPAT;
252b5132
RH
10918static char open_char;
10919static char close_char;
10920static char separator_char;
10921static char scale_char;
10922
e396998b
AM
10923/* Here for backwards compatibility. When gdb stops using
10924 print_insn_i386_att and print_insn_i386_intel these functions can
10925 disappear, and print_insn_i386 be merged into print_insn. */
252b5132 10926int
26ca5450 10927print_insn_i386_att (bfd_vma pc, disassemble_info *info)
252b5132
RH
10928{
10929 intel_syntax = 0;
e396998b
AM
10930
10931 return print_insn (pc, info);
252b5132
RH
10932}
10933
10934int
26ca5450 10935print_insn_i386_intel (bfd_vma pc, disassemble_info *info)
252b5132
RH
10936{
10937 intel_syntax = 1;
e396998b
AM
10938
10939 return print_insn (pc, info);
252b5132
RH
10940}
10941
e396998b 10942int
26ca5450 10943print_insn_i386 (bfd_vma pc, disassemble_info *info)
e396998b
AM
10944{
10945 intel_syntax = -1;
10946
10947 return print_insn (pc, info);
10948}
10949
f59a29b9
L
10950void
10951print_i386_disassembler_options (FILE *stream)
10952{
10953 fprintf (stream, _("\n\
10954The following i386/x86-64 specific disassembler options are supported for use\n\
10955with the -M switch (multiple options should be separated by commas):\n"));
10956
10957 fprintf (stream, _(" x86-64 Disassemble in 64bit mode\n"));
10958 fprintf (stream, _(" i386 Disassemble in 32bit mode\n"));
10959 fprintf (stream, _(" i8086 Disassemble in 16bit mode\n"));
10960 fprintf (stream, _(" att Display instruction in AT&T syntax\n"));
10961 fprintf (stream, _(" intel Display instruction in Intel syntax\n"));
9d141669
L
10962 fprintf (stream, _(" att-mnemonic\n"
10963 " Display instruction in AT&T mnemonic\n"));
10964 fprintf (stream, _(" intel-mnemonic\n"
10965 " Display instruction in Intel mnemonic\n"));
f59a29b9
L
10966 fprintf (stream, _(" addr64 Assume 64bit address size\n"));
10967 fprintf (stream, _(" addr32 Assume 32bit address size\n"));
10968 fprintf (stream, _(" addr16 Assume 16bit address size\n"));
10969 fprintf (stream, _(" data32 Assume 32bit data size\n"));
10970 fprintf (stream, _(" data16 Assume 16bit data size\n"));
10971 fprintf (stream, _(" suffix Always display instruction suffix in AT&T syntax\n"));
10972}
10973
592d1631
L
10974/* Bad opcode. */
10975static const struct dis386 bad_opcode = { "(bad)", { XX } };
10976
b844680a
L
10977/* Get a pointer to struct dis386 with a valid name. */
10978
10979static const struct dis386 *
8bb15339 10980get_valid_dis386 (const struct dis386 *dp, disassemble_info *info)
b844680a 10981{
91d6fa6a 10982 int vindex, vex_table_index;
b844680a
L
10983
10984 if (dp->name != NULL)
10985 return dp;
10986
10987 switch (dp->op[0].bytemode)
10988 {
1ceb70f8
L
10989 case USE_REG_TABLE:
10990 dp = &reg_table[dp->op[1].bytemode][modrm.reg];
10991 break;
10992
10993 case USE_MOD_TABLE:
91d6fa6a
NC
10994 vindex = modrm.mod == 0x3 ? 1 : 0;
10995 dp = &mod_table[dp->op[1].bytemode][vindex];
1ceb70f8
L
10996 break;
10997
10998 case USE_RM_TABLE:
10999 dp = &rm_table[dp->op[1].bytemode][modrm.rm];
b844680a
L
11000 break;
11001
4e7d34a6 11002 case USE_PREFIX_TABLE:
c0f3af97 11003 if (need_vex)
b844680a 11004 {
c0f3af97
L
11005 /* The prefix in VEX is implicit. */
11006 switch (vex.prefix)
11007 {
11008 case 0:
91d6fa6a 11009 vindex = 0;
c0f3af97
L
11010 break;
11011 case REPE_PREFIX_OPCODE:
91d6fa6a 11012 vindex = 1;
c0f3af97
L
11013 break;
11014 case DATA_PREFIX_OPCODE:
91d6fa6a 11015 vindex = 2;
c0f3af97
L
11016 break;
11017 case REPNE_PREFIX_OPCODE:
91d6fa6a 11018 vindex = 3;
c0f3af97
L
11019 break;
11020 default:
11021 abort ();
11022 break;
11023 }
b844680a 11024 }
7bb15c6f 11025 else
b844680a 11026 {
91d6fa6a 11027 vindex = 0;
c0f3af97
L
11028 used_prefixes |= (prefixes & PREFIX_REPZ);
11029 if (prefixes & PREFIX_REPZ)
b844680a 11030 {
91d6fa6a 11031 vindex = 1;
f16cd0d5 11032 all_prefixes[last_repz_prefix] = 0;
b844680a
L
11033 }
11034 else
11035 {
c0f3af97
L
11036 /* We should check PREFIX_REPNZ and PREFIX_REPZ before
11037 PREFIX_DATA. */
11038 used_prefixes |= (prefixes & PREFIX_REPNZ);
11039 if (prefixes & PREFIX_REPNZ)
11040 {
91d6fa6a 11041 vindex = 3;
f16cd0d5 11042 all_prefixes[last_repnz_prefix] = 0;
c0f3af97
L
11043 }
11044 else
b844680a 11045 {
c0f3af97
L
11046 used_prefixes |= (prefixes & PREFIX_DATA);
11047 if (prefixes & PREFIX_DATA)
11048 {
91d6fa6a 11049 vindex = 2;
f16cd0d5 11050 all_prefixes[last_data_prefix] = 0;
c0f3af97 11051 }
b844680a
L
11052 }
11053 }
11054 }
91d6fa6a 11055 dp = &prefix_table[dp->op[1].bytemode][vindex];
b844680a
L
11056 break;
11057
4e7d34a6 11058 case USE_X86_64_TABLE:
91d6fa6a
NC
11059 vindex = address_mode == mode_64bit ? 1 : 0;
11060 dp = &x86_64_table[dp->op[1].bytemode][vindex];
b844680a
L
11061 break;
11062
4e7d34a6 11063 case USE_3BYTE_TABLE:
8bb15339 11064 FETCH_DATA (info, codep + 2);
91d6fa6a
NC
11065 vindex = *codep++;
11066 dp = &three_byte_table[dp->op[1].bytemode][vindex];
8bb15339
L
11067 modrm.mod = (*codep >> 6) & 3;
11068 modrm.reg = (*codep >> 3) & 7;
11069 modrm.rm = *codep & 7;
11070 break;
11071
c0f3af97
L
11072 case USE_VEX_LEN_TABLE:
11073 if (!need_vex)
11074 abort ();
11075
11076 switch (vex.length)
11077 {
11078 case 128:
91d6fa6a 11079 vindex = 0;
c0f3af97
L
11080 break;
11081 case 256:
91d6fa6a 11082 vindex = 1;
c0f3af97
L
11083 break;
11084 default:
11085 abort ();
11086 break;
11087 }
11088
91d6fa6a 11089 dp = &vex_len_table[dp->op[1].bytemode][vindex];
c0f3af97
L
11090 break;
11091
f88c9eb0
SP
11092 case USE_XOP_8F_TABLE:
11093 FETCH_DATA (info, codep + 3);
11094 /* All bits in the REX prefix are ignored. */
11095 rex_ignored = rex;
11096 rex = ~(*codep >> 5) & 0x7;
11097
11098 /* VEX_TABLE_INDEX is the mmmmm part of the XOP byte 1 "RCB.mmmmm". */
11099 switch ((*codep & 0x1f))
11100 {
11101 default:
f07af43e
L
11102 dp = &bad_opcode;
11103 return dp;
5dd85c99
SP
11104 case 0x8:
11105 vex_table_index = XOP_08;
11106 break;
f88c9eb0
SP
11107 case 0x9:
11108 vex_table_index = XOP_09;
11109 break;
11110 case 0xa:
11111 vex_table_index = XOP_0A;
11112 break;
11113 }
11114 codep++;
11115 vex.w = *codep & 0x80;
11116 if (vex.w && address_mode == mode_64bit)
11117 rex |= REX_W;
11118
11119 vex.register_specifier = (~(*codep >> 3)) & 0xf;
11120 if (address_mode != mode_64bit
11121 && vex.register_specifier > 0x7)
f07af43e
L
11122 {
11123 dp = &bad_opcode;
11124 return dp;
11125 }
f88c9eb0
SP
11126
11127 vex.length = (*codep & 0x4) ? 256 : 128;
11128 switch ((*codep & 0x3))
11129 {
11130 case 0:
11131 vex.prefix = 0;
11132 break;
11133 case 1:
11134 vex.prefix = DATA_PREFIX_OPCODE;
11135 break;
11136 case 2:
11137 vex.prefix = REPE_PREFIX_OPCODE;
11138 break;
11139 case 3:
11140 vex.prefix = REPNE_PREFIX_OPCODE;
11141 break;
11142 }
11143 need_vex = 1;
11144 need_vex_reg = 1;
11145 codep++;
91d6fa6a
NC
11146 vindex = *codep++;
11147 dp = &xop_table[vex_table_index][vindex];
c48244a5
SP
11148
11149 FETCH_DATA (info, codep + 1);
11150 modrm.mod = (*codep >> 6) & 3;
11151 modrm.reg = (*codep >> 3) & 7;
11152 modrm.rm = *codep & 7;
f88c9eb0
SP
11153 break;
11154
c0f3af97
L
11155 case USE_VEX_C4_TABLE:
11156 FETCH_DATA (info, codep + 3);
11157 /* All bits in the REX prefix are ignored. */
11158 rex_ignored = rex;
11159 rex = ~(*codep >> 5) & 0x7;
11160 switch ((*codep & 0x1f))
11161 {
11162 default:
f07af43e
L
11163 dp = &bad_opcode;
11164 return dp;
c0f3af97 11165 case 0x1:
f88c9eb0 11166 vex_table_index = VEX_0F;
c0f3af97
L
11167 break;
11168 case 0x2:
f88c9eb0 11169 vex_table_index = VEX_0F38;
c0f3af97
L
11170 break;
11171 case 0x3:
f88c9eb0 11172 vex_table_index = VEX_0F3A;
c0f3af97
L
11173 break;
11174 }
11175 codep++;
11176 vex.w = *codep & 0x80;
11177 if (vex.w && address_mode == mode_64bit)
11178 rex |= REX_W;
11179
11180 vex.register_specifier = (~(*codep >> 3)) & 0xf;
11181 if (address_mode != mode_64bit
11182 && vex.register_specifier > 0x7)
f07af43e
L
11183 {
11184 dp = &bad_opcode;
11185 return dp;
11186 }
c0f3af97
L
11187
11188 vex.length = (*codep & 0x4) ? 256 : 128;
11189 switch ((*codep & 0x3))
11190 {
11191 case 0:
11192 vex.prefix = 0;
11193 break;
11194 case 1:
11195 vex.prefix = DATA_PREFIX_OPCODE;
11196 break;
11197 case 2:
11198 vex.prefix = REPE_PREFIX_OPCODE;
11199 break;
11200 case 3:
11201 vex.prefix = REPNE_PREFIX_OPCODE;
11202 break;
11203 }
11204 need_vex = 1;
11205 need_vex_reg = 1;
11206 codep++;
91d6fa6a
NC
11207 vindex = *codep++;
11208 dp = &vex_table[vex_table_index][vindex];
c0f3af97 11209 /* There is no MODRM byte for VEX [82|77]. */
91d6fa6a 11210 if (vindex != 0x77 && vindex != 0x82)
c0f3af97
L
11211 {
11212 FETCH_DATA (info, codep + 1);
11213 modrm.mod = (*codep >> 6) & 3;
11214 modrm.reg = (*codep >> 3) & 7;
11215 modrm.rm = *codep & 7;
11216 }
11217 break;
11218
11219 case USE_VEX_C5_TABLE:
11220 FETCH_DATA (info, codep + 2);
11221 /* All bits in the REX prefix are ignored. */
11222 rex_ignored = rex;
11223 rex = (*codep & 0x80) ? 0 : REX_R;
11224
11225 vex.register_specifier = (~(*codep >> 3)) & 0xf;
11226 if (address_mode != mode_64bit
11227 && vex.register_specifier > 0x7)
f07af43e
L
11228 {
11229 dp = &bad_opcode;
11230 return dp;
11231 }
c0f3af97 11232
759a05ce
L
11233 vex.w = 0;
11234
c0f3af97
L
11235 vex.length = (*codep & 0x4) ? 256 : 128;
11236 switch ((*codep & 0x3))
11237 {
11238 case 0:
11239 vex.prefix = 0;
11240 break;
11241 case 1:
11242 vex.prefix = DATA_PREFIX_OPCODE;
11243 break;
11244 case 2:
11245 vex.prefix = REPE_PREFIX_OPCODE;
11246 break;
11247 case 3:
11248 vex.prefix = REPNE_PREFIX_OPCODE;
11249 break;
11250 }
11251 need_vex = 1;
11252 need_vex_reg = 1;
11253 codep++;
91d6fa6a
NC
11254 vindex = *codep++;
11255 dp = &vex_table[dp->op[1].bytemode][vindex];
c0f3af97 11256 /* There is no MODRM byte for VEX [82|77]. */
91d6fa6a 11257 if (vindex != 0x77 && vindex != 0x82)
c0f3af97
L
11258 {
11259 FETCH_DATA (info, codep + 1);
11260 modrm.mod = (*codep >> 6) & 3;
11261 modrm.reg = (*codep >> 3) & 7;
11262 modrm.rm = *codep & 7;
11263 }
11264 break;
11265
9e30b8e0
L
11266 case USE_VEX_W_TABLE:
11267 if (!need_vex)
11268 abort ();
11269
11270 dp = &vex_w_table[dp->op[1].bytemode][vex.w ? 1 : 0];
11271 break;
11272
592d1631
L
11273 case 0:
11274 dp = &bad_opcode;
11275 break;
11276
b844680a 11277 default:
d34b5006 11278 abort ();
b844680a
L
11279 }
11280
11281 if (dp->name != NULL)
11282 return dp;
11283 else
8bb15339 11284 return get_valid_dis386 (dp, info);
b844680a
L
11285}
11286
dfc8cf43 11287static void
55cf16e1 11288get_sib (disassemble_info *info, int sizeflag)
dfc8cf43
L
11289{
11290 /* If modrm.mod == 3, operand must be register. */
11291 if (need_modrm
55cf16e1 11292 && ((sizeflag & AFLAG) || address_mode == mode_64bit)
dfc8cf43
L
11293 && modrm.mod != 3
11294 && modrm.rm == 4)
11295 {
11296 FETCH_DATA (info, codep + 2);
11297 sib.index = (codep [1] >> 3) & 7;
11298 sib.scale = (codep [1] >> 6) & 3;
11299 sib.base = codep [1] & 7;
11300 }
11301}
11302
e396998b 11303static int
26ca5450 11304print_insn (bfd_vma pc, disassemble_info *info)
252b5132 11305{
2da11e11 11306 const struct dis386 *dp;
252b5132 11307 int i;
ce518a5f 11308 char *op_txt[MAX_OPERANDS];
252b5132 11309 int needcomma;
e396998b
AM
11310 int sizeflag;
11311 const char *p;
252b5132 11312 struct dis_private priv;
f16cd0d5
L
11313 int prefix_length;
11314 int default_prefixes;
252b5132 11315
d7921315
L
11316 priv.orig_sizeflag = AFLAG | DFLAG;
11317 if ((info->mach & bfd_mach_i386_i386) != 0)
cb712a9e 11318 address_mode = mode_32bit;
2da11e11 11319 else if (info->mach == bfd_mach_i386_i8086)
d7921315
L
11320 {
11321 address_mode = mode_16bit;
11322 priv.orig_sizeflag = 0;
11323 }
2da11e11 11324 else
d7921315
L
11325 address_mode = mode_64bit;
11326
11327 if (intel_syntax == (char) -1)
11328 intel_syntax = (info->mach & bfd_mach_i386_intel_syntax) != 0;
e396998b
AM
11329
11330 for (p = info->disassembler_options; p != NULL; )
11331 {
0112cd26 11332 if (CONST_STRNEQ (p, "x86-64"))
e396998b 11333 {
cb712a9e 11334 address_mode = mode_64bit;
e396998b
AM
11335 priv.orig_sizeflag = AFLAG | DFLAG;
11336 }
0112cd26 11337 else if (CONST_STRNEQ (p, "i386"))
e396998b 11338 {
cb712a9e 11339 address_mode = mode_32bit;
e396998b
AM
11340 priv.orig_sizeflag = AFLAG | DFLAG;
11341 }
0112cd26 11342 else if (CONST_STRNEQ (p, "i8086"))
e396998b 11343 {
cb712a9e 11344 address_mode = mode_16bit;
e396998b
AM
11345 priv.orig_sizeflag = 0;
11346 }
0112cd26 11347 else if (CONST_STRNEQ (p, "intel"))
e396998b
AM
11348 {
11349 intel_syntax = 1;
9d141669
L
11350 if (CONST_STRNEQ (p + 5, "-mnemonic"))
11351 intel_mnemonic = 1;
e396998b 11352 }
0112cd26 11353 else if (CONST_STRNEQ (p, "att"))
e396998b
AM
11354 {
11355 intel_syntax = 0;
9d141669
L
11356 if (CONST_STRNEQ (p + 3, "-mnemonic"))
11357 intel_mnemonic = 0;
e396998b 11358 }
0112cd26 11359 else if (CONST_STRNEQ (p, "addr"))
e396998b 11360 {
f59a29b9
L
11361 if (address_mode == mode_64bit)
11362 {
11363 if (p[4] == '3' && p[5] == '2')
11364 priv.orig_sizeflag &= ~AFLAG;
11365 else if (p[4] == '6' && p[5] == '4')
11366 priv.orig_sizeflag |= AFLAG;
11367 }
11368 else
11369 {
11370 if (p[4] == '1' && p[5] == '6')
11371 priv.orig_sizeflag &= ~AFLAG;
11372 else if (p[4] == '3' && p[5] == '2')
11373 priv.orig_sizeflag |= AFLAG;
11374 }
e396998b 11375 }
0112cd26 11376 else if (CONST_STRNEQ (p, "data"))
e396998b
AM
11377 {
11378 if (p[4] == '1' && p[5] == '6')
11379 priv.orig_sizeflag &= ~DFLAG;
11380 else if (p[4] == '3' && p[5] == '2')
11381 priv.orig_sizeflag |= DFLAG;
11382 }
0112cd26 11383 else if (CONST_STRNEQ (p, "suffix"))
e396998b
AM
11384 priv.orig_sizeflag |= SUFFIX_ALWAYS;
11385
11386 p = strchr (p, ',');
11387 if (p != NULL)
11388 p++;
11389 }
11390
11391 if (intel_syntax)
11392 {
11393 names64 = intel_names64;
11394 names32 = intel_names32;
11395 names16 = intel_names16;
11396 names8 = intel_names8;
11397 names8rex = intel_names8rex;
11398 names_seg = intel_names_seg;
b9733481
L
11399 names_mm = intel_names_mm;
11400 names_xmm = intel_names_xmm;
11401 names_ymm = intel_names_ymm;
db51cc60
L
11402 index64 = intel_index64;
11403 index32 = intel_index32;
e396998b
AM
11404 index16 = intel_index16;
11405 open_char = '[';
11406 close_char = ']';
11407 separator_char = '+';
11408 scale_char = '*';
11409 }
11410 else
11411 {
11412 names64 = att_names64;
11413 names32 = att_names32;
11414 names16 = att_names16;
11415 names8 = att_names8;
11416 names8rex = att_names8rex;
11417 names_seg = att_names_seg;
b9733481
L
11418 names_mm = att_names_mm;
11419 names_xmm = att_names_xmm;
11420 names_ymm = att_names_ymm;
db51cc60
L
11421 index64 = att_index64;
11422 index32 = att_index32;
e396998b
AM
11423 index16 = att_index16;
11424 open_char = '(';
11425 close_char = ')';
11426 separator_char = ',';
11427 scale_char = ',';
11428 }
2da11e11 11429
4fe53c98 11430 /* The output looks better if we put 7 bytes on a line, since that
8a9036a4
L
11431 puts most long word instructions on a single line. Use 8 bytes
11432 for Intel L1OM. */
d7921315 11433 if ((info->mach & bfd_mach_l1om) != 0)
8a9036a4
L
11434 info->bytes_per_line = 8;
11435 else
11436 info->bytes_per_line = 7;
252b5132 11437
26ca5450 11438 info->private_data = &priv;
252b5132
RH
11439 priv.max_fetched = priv.the_buffer;
11440 priv.insn_start = pc;
252b5132
RH
11441
11442 obuf[0] = 0;
ce518a5f
L
11443 for (i = 0; i < MAX_OPERANDS; ++i)
11444 {
11445 op_out[i][0] = 0;
11446 op_index[i] = -1;
11447 }
252b5132
RH
11448
11449 the_info = info;
11450 start_pc = pc;
e396998b
AM
11451 start_codep = priv.the_buffer;
11452 codep = priv.the_buffer;
252b5132 11453
5076851f
ILT
11454 if (setjmp (priv.bailout) != 0)
11455 {
7d421014
ILT
11456 const char *name;
11457
5076851f 11458 /* Getting here means we tried for data but didn't get it. That
e396998b
AM
11459 means we have an incomplete instruction of some sort. Just
11460 print the first byte as a prefix or a .byte pseudo-op. */
11461 if (codep > priv.the_buffer)
5076851f 11462 {
e396998b 11463 name = prefix_name (priv.the_buffer[0], priv.orig_sizeflag);
7d421014
ILT
11464 if (name != NULL)
11465 (*info->fprintf_func) (info->stream, "%s", name);
11466 else
5076851f 11467 {
7d421014
ILT
11468 /* Just print the first byte as a .byte instruction. */
11469 (*info->fprintf_func) (info->stream, ".byte 0x%x",
e396998b 11470 (unsigned int) priv.the_buffer[0]);
5076851f 11471 }
5076851f 11472
7d421014 11473 return 1;
5076851f
ILT
11474 }
11475
11476 return -1;
11477 }
11478
52b15da3 11479 obufp = obuf;
f16cd0d5
L
11480 sizeflag = priv.orig_sizeflag;
11481
11482 if (!ckprefix () || rex_used)
11483 {
11484 /* Too many prefixes or unused REX prefixes. */
11485 for (i = 0;
f6dd4781 11486 i < (int) ARRAY_SIZE (all_prefixes) && all_prefixes[i];
f16cd0d5 11487 i++)
de882298 11488 (*info->fprintf_func) (info->stream, "%s%s",
6c067bbb 11489 i == 0 ? "" : " ",
f16cd0d5 11490 prefix_name (all_prefixes[i], sizeflag));
de882298 11491 return i;
f16cd0d5 11492 }
252b5132
RH
11493
11494 insn_codep = codep;
11495
11496 FETCH_DATA (info, codep + 1);
11497 two_source_ops = (*codep == 0x62) || (*codep == 0xc8);
11498
3e7d61b2 11499 if (((prefixes & PREFIX_FWAIT)
f16cd0d5 11500 && ((*codep < 0xd8) || (*codep > 0xdf))))
252b5132 11501 {
f16cd0d5 11502 (*info->fprintf_func) (info->stream, "fwait");
7d421014 11503 return 1;
252b5132
RH
11504 }
11505
252b5132
RH
11506 if (*codep == 0x0f)
11507 {
eec0f4ca 11508 unsigned char threebyte;
252b5132 11509 FETCH_DATA (info, codep + 2);
eec0f4ca
L
11510 threebyte = *++codep;
11511 dp = &dis386_twobyte[threebyte];
252b5132 11512 need_modrm = twobyte_has_modrm[*codep];
eec0f4ca 11513 codep++;
252b5132
RH
11514 }
11515 else
11516 {
6439fc28 11517 dp = &dis386[*codep];
252b5132 11518 need_modrm = onebyte_has_modrm[*codep];
eec0f4ca 11519 codep++;
252b5132 11520 }
246c51aa 11521
b844680a 11522 if ((prefixes & PREFIX_REPZ))
f16cd0d5 11523 used_prefixes |= PREFIX_REPZ;
b844680a 11524 if ((prefixes & PREFIX_REPNZ))
f16cd0d5 11525 used_prefixes |= PREFIX_REPNZ;
b844680a 11526 if ((prefixes & PREFIX_LOCK))
f16cd0d5 11527 used_prefixes |= PREFIX_LOCK;
c608c12e 11528
f16cd0d5 11529 default_prefixes = 0;
c608c12e
AM
11530 if (prefixes & PREFIX_ADDR)
11531 {
11532 sizeflag ^= AFLAG;
ce518a5f 11533 if (dp->op[2].bytemode != loop_jcxz_mode || intel_syntax)
3ffd33cf 11534 {
cb712a9e 11535 if ((sizeflag & AFLAG) || address_mode == mode_64bit)
f16cd0d5 11536 all_prefixes[last_addr_prefix] = ADDR32_PREFIX;
3ffd33cf 11537 else
f16cd0d5
L
11538 all_prefixes[last_addr_prefix] = ADDR16_PREFIX;
11539 default_prefixes |= PREFIX_ADDR;
3ffd33cf
AM
11540 }
11541 }
11542
b844680a 11543 if ((prefixes & PREFIX_DATA))
3ffd33cf
AM
11544 {
11545 sizeflag ^= DFLAG;
ce518a5f
L
11546 if (dp->op[2].bytemode == cond_jump_mode
11547 && dp->op[0].bytemode == v_mode
6439fc28 11548 && !intel_syntax)
3ffd33cf
AM
11549 {
11550 if (sizeflag & DFLAG)
f16cd0d5 11551 all_prefixes[last_data_prefix] = DATA32_PREFIX;
3ffd33cf 11552 else
f16cd0d5
L
11553 all_prefixes[last_data_prefix] = DATA16_PREFIX;
11554 default_prefixes |= PREFIX_DATA;
11555 }
11556 else if (rex & REX_W)
11557 {
11558 /* REX_W will override PREFIX_DATA. */
11559 default_prefixes |= PREFIX_DATA;
3ffd33cf
AM
11560 }
11561 }
11562
8bb15339 11563 if (need_modrm)
252b5132
RH
11564 {
11565 FETCH_DATA (info, codep + 1);
7967e09e
L
11566 modrm.mod = (*codep >> 6) & 3;
11567 modrm.reg = (*codep >> 3) & 7;
11568 modrm.rm = *codep & 7;
252b5132
RH
11569 }
11570
42d5f9c6
MS
11571 need_vex = 0;
11572 need_vex_reg = 0;
11573 vex_w_done = 0;
55b126d4 11574
ce518a5f 11575 if (dp->name == NULL && dp->op[0].bytemode == FLOATCODE)
252b5132 11576 {
55cf16e1 11577 get_sib (info, sizeflag);
252b5132
RH
11578 dofloat (sizeflag);
11579 }
11580 else
11581 {
8bb15339 11582 dp = get_valid_dis386 (dp, info);
b844680a 11583 if (dp != NULL && putop (dp->name, sizeflag) == 0)
6c067bbb 11584 {
55cf16e1 11585 get_sib (info, sizeflag);
ce518a5f
L
11586 for (i = 0; i < MAX_OPERANDS; ++i)
11587 {
246c51aa 11588 obufp = op_out[i];
ce518a5f
L
11589 op_ad = MAX_OPERANDS - 1 - i;
11590 if (dp->op[i].rtn)
11591 (*dp->op[i].rtn) (dp->op[i].bytemode, sizeflag);
11592 }
6439fc28 11593 }
252b5132
RH
11594 }
11595
7d421014
ILT
11596 /* See if any prefixes were not used. If so, print the first one
11597 separately. If we don't do this, we'll wind up printing an
11598 instruction stream which does not precisely correspond to the
11599 bytes we are disassembling. */
f16cd0d5 11600 if ((prefixes & ~(used_prefixes | default_prefixes)) != 0)
7d421014 11601 {
f16cd0d5
L
11602 for (i = 0; i < (int) ARRAY_SIZE (all_prefixes); i++)
11603 if (all_prefixes[i])
11604 {
11605 const char *name;
11606 name = prefix_name (all_prefixes[i], priv.orig_sizeflag);
11607 if (name == NULL)
11608 name = INTERNAL_DISASSEMBLER_ERROR;
11609 (*info->fprintf_func) (info->stream, "%s", name);
11610 return 1;
11611 }
52b15da3 11612 }
7d421014 11613
d869730d 11614 /* Check if the REX prefix is used. */
2a70cca4 11615 if (rex_ignored == 0 && (rex ^ rex_used) == 0)
f16cd0d5
L
11616 all_prefixes[last_rex_prefix] = 0;
11617
5e6718e4 11618 /* Check if the SEG prefix is used. */
f16cd0d5
L
11619 if ((prefixes & (PREFIX_CS | PREFIX_SS | PREFIX_DS | PREFIX_ES
11620 | PREFIX_FS | PREFIX_GS)) != 0
11621 && (used_prefixes
11622 & seg_prefix (all_prefixes[last_seg_prefix])) != 0)
11623 all_prefixes[last_seg_prefix] = 0;
11624
5e6718e4 11625 /* Check if the ADDR prefix is used. */
f16cd0d5
L
11626 if ((prefixes & PREFIX_ADDR) != 0
11627 && (used_prefixes & PREFIX_ADDR) != 0)
11628 all_prefixes[last_addr_prefix] = 0;
11629
5e6718e4 11630 /* Check if the DATA prefix is used. */
f16cd0d5
L
11631 if ((prefixes & PREFIX_DATA) != 0
11632 && (used_prefixes & PREFIX_DATA) != 0)
11633 all_prefixes[last_data_prefix] = 0;
11634
11635 prefix_length = 0;
f310f33d 11636 for (i = 0; i < (int) ARRAY_SIZE (all_prefixes); i++)
f16cd0d5
L
11637 if (all_prefixes[i])
11638 {
11639 const char *name;
11640 name = prefix_name (all_prefixes[i], sizeflag);
11641 if (name == NULL)
11642 abort ();
11643 prefix_length += strlen (name) + 1;
11644 (*info->fprintf_func) (info->stream, "%s ", name);
11645 }
b844680a 11646
f16cd0d5
L
11647 /* Check maximum code length. */
11648 if ((codep - start_codep) > MAX_CODE_LENGTH)
11649 {
11650 (*info->fprintf_func) (info->stream, "(bad)");
11651 return MAX_CODE_LENGTH;
11652 }
b844680a 11653
ea397f5b 11654 obufp = mnemonicendp;
f16cd0d5 11655 for (i = strlen (obuf) + prefix_length; i < 6; i++)
252b5132
RH
11656 oappend (" ");
11657 oappend (" ");
11658 (*info->fprintf_func) (info->stream, "%s", obuf);
11659
11660 /* The enter and bound instructions are printed with operands in the same
11661 order as the intel book; everything else is printed in reverse order. */
2da11e11 11662 if (intel_syntax || two_source_ops)
252b5132 11663 {
185b1163
L
11664 bfd_vma riprel;
11665
ce518a5f 11666 for (i = 0; i < MAX_OPERANDS; ++i)
6c067bbb 11667 op_txt[i] = op_out[i];
246c51aa 11668
ce518a5f
L
11669 for (i = 0; i < (MAX_OPERANDS >> 1); ++i)
11670 {
6c067bbb
RM
11671 op_ad = op_index[i];
11672 op_index[i] = op_index[MAX_OPERANDS - 1 - i];
11673 op_index[MAX_OPERANDS - 1 - i] = op_ad;
185b1163
L
11674 riprel = op_riprel[i];
11675 op_riprel[i] = op_riprel [MAX_OPERANDS - 1 - i];
11676 op_riprel[MAX_OPERANDS - 1 - i] = riprel;
ce518a5f 11677 }
252b5132
RH
11678 }
11679 else
11680 {
ce518a5f 11681 for (i = 0; i < MAX_OPERANDS; ++i)
6c067bbb 11682 op_txt[MAX_OPERANDS - 1 - i] = op_out[i];
050dfa73
MM
11683 }
11684
ce518a5f
L
11685 needcomma = 0;
11686 for (i = 0; i < MAX_OPERANDS; ++i)
11687 if (*op_txt[i])
11688 {
11689 if (needcomma)
11690 (*info->fprintf_func) (info->stream, ",");
11691 if (op_index[i] != -1 && !op_riprel[i])
11692 (*info->print_address_func) ((bfd_vma) op_address[op_index[i]], info);
11693 else
11694 (*info->fprintf_func) (info->stream, "%s", op_txt[i]);
11695 needcomma = 1;
11696 }
050dfa73 11697
ce518a5f 11698 for (i = 0; i < MAX_OPERANDS; i++)
52b15da3
JH
11699 if (op_index[i] != -1 && op_riprel[i])
11700 {
11701 (*info->fprintf_func) (info->stream, " # ");
11702 (*info->print_address_func) ((bfd_vma) (start_pc + codep - start_codep
11703 + op_address[op_index[i]]), info);
185b1163 11704 break;
52b15da3 11705 }
e396998b 11706 return codep - priv.the_buffer;
252b5132
RH
11707}
11708
6439fc28 11709static const char *float_mem[] = {
252b5132 11710 /* d8 */
7c52e0e8
L
11711 "fadd{s|}",
11712 "fmul{s|}",
11713 "fcom{s|}",
11714 "fcomp{s|}",
11715 "fsub{s|}",
11716 "fsubr{s|}",
11717 "fdiv{s|}",
11718 "fdivr{s|}",
db6eb5be 11719 /* d9 */
7c52e0e8 11720 "fld{s|}",
252b5132 11721 "(bad)",
7c52e0e8
L
11722 "fst{s|}",
11723 "fstp{s|}",
9306ca4a 11724 "fldenvIC",
252b5132 11725 "fldcw",
9306ca4a 11726 "fNstenvIC",
252b5132
RH
11727 "fNstcw",
11728 /* da */
7c52e0e8
L
11729 "fiadd{l|}",
11730 "fimul{l|}",
11731 "ficom{l|}",
11732 "ficomp{l|}",
11733 "fisub{l|}",
11734 "fisubr{l|}",
11735 "fidiv{l|}",
11736 "fidivr{l|}",
252b5132 11737 /* db */
7c52e0e8
L
11738 "fild{l|}",
11739 "fisttp{l|}",
11740 "fist{l|}",
11741 "fistp{l|}",
252b5132 11742 "(bad)",
6439fc28 11743 "fld{t||t|}",
252b5132 11744 "(bad)",
6439fc28 11745 "fstp{t||t|}",
252b5132 11746 /* dc */
7c52e0e8
L
11747 "fadd{l|}",
11748 "fmul{l|}",
11749 "fcom{l|}",
11750 "fcomp{l|}",
11751 "fsub{l|}",
11752 "fsubr{l|}",
11753 "fdiv{l|}",
11754 "fdivr{l|}",
252b5132 11755 /* dd */
7c52e0e8
L
11756 "fld{l|}",
11757 "fisttp{ll|}",
11758 "fst{l||}",
11759 "fstp{l|}",
9306ca4a 11760 "frstorIC",
252b5132 11761 "(bad)",
9306ca4a 11762 "fNsaveIC",
252b5132
RH
11763 "fNstsw",
11764 /* de */
11765 "fiadd",
11766 "fimul",
11767 "ficom",
11768 "ficomp",
11769 "fisub",
11770 "fisubr",
11771 "fidiv",
11772 "fidivr",
11773 /* df */
11774 "fild",
ca164297 11775 "fisttp",
252b5132
RH
11776 "fist",
11777 "fistp",
11778 "fbld",
7c52e0e8 11779 "fild{ll|}",
252b5132 11780 "fbstp",
7c52e0e8 11781 "fistp{ll|}",
1d9f512f
AM
11782};
11783
11784static const unsigned char float_mem_mode[] = {
11785 /* d8 */
11786 d_mode,
11787 d_mode,
11788 d_mode,
11789 d_mode,
11790 d_mode,
11791 d_mode,
11792 d_mode,
11793 d_mode,
11794 /* d9 */
11795 d_mode,
11796 0,
11797 d_mode,
11798 d_mode,
11799 0,
11800 w_mode,
11801 0,
11802 w_mode,
11803 /* da */
11804 d_mode,
11805 d_mode,
11806 d_mode,
11807 d_mode,
11808 d_mode,
11809 d_mode,
11810 d_mode,
11811 d_mode,
11812 /* db */
11813 d_mode,
11814 d_mode,
11815 d_mode,
11816 d_mode,
11817 0,
9306ca4a 11818 t_mode,
1d9f512f 11819 0,
9306ca4a 11820 t_mode,
1d9f512f
AM
11821 /* dc */
11822 q_mode,
11823 q_mode,
11824 q_mode,
11825 q_mode,
11826 q_mode,
11827 q_mode,
11828 q_mode,
11829 q_mode,
11830 /* dd */
11831 q_mode,
11832 q_mode,
11833 q_mode,
11834 q_mode,
11835 0,
11836 0,
11837 0,
11838 w_mode,
11839 /* de */
11840 w_mode,
11841 w_mode,
11842 w_mode,
11843 w_mode,
11844 w_mode,
11845 w_mode,
11846 w_mode,
11847 w_mode,
11848 /* df */
11849 w_mode,
11850 w_mode,
11851 w_mode,
11852 w_mode,
9306ca4a 11853 t_mode,
1d9f512f 11854 q_mode,
9306ca4a 11855 t_mode,
1d9f512f 11856 q_mode
252b5132
RH
11857};
11858
ce518a5f
L
11859#define ST { OP_ST, 0 }
11860#define STi { OP_STi, 0 }
252b5132 11861
4efba78c
L
11862#define FGRPd9_2 NULL, { { NULL, 0 } }
11863#define FGRPd9_4 NULL, { { NULL, 1 } }
11864#define FGRPd9_5 NULL, { { NULL, 2 } }
11865#define FGRPd9_6 NULL, { { NULL, 3 } }
11866#define FGRPd9_7 NULL, { { NULL, 4 } }
11867#define FGRPda_5 NULL, { { NULL, 5 } }
11868#define FGRPdb_4 NULL, { { NULL, 6 } }
11869#define FGRPde_3 NULL, { { NULL, 7 } }
11870#define FGRPdf_4 NULL, { { NULL, 8 } }
252b5132 11871
2da11e11 11872static const struct dis386 float_reg[][8] = {
252b5132
RH
11873 /* d8 */
11874 {
ce518a5f
L
11875 { "fadd", { ST, STi } },
11876 { "fmul", { ST, STi } },
11877 { "fcom", { STi } },
11878 { "fcomp", { STi } },
11879 { "fsub", { ST, STi } },
11880 { "fsubr", { ST, STi } },
11881 { "fdiv", { ST, STi } },
11882 { "fdivr", { ST, STi } },
252b5132
RH
11883 },
11884 /* d9 */
11885 {
ce518a5f
L
11886 { "fld", { STi } },
11887 { "fxch", { STi } },
252b5132 11888 { FGRPd9_2 },
592d1631 11889 { Bad_Opcode },
252b5132
RH
11890 { FGRPd9_4 },
11891 { FGRPd9_5 },
11892 { FGRPd9_6 },
11893 { FGRPd9_7 },
11894 },
11895 /* da */
11896 {
ce518a5f
L
11897 { "fcmovb", { ST, STi } },
11898 { "fcmove", { ST, STi } },
11899 { "fcmovbe",{ ST, STi } },
11900 { "fcmovu", { ST, STi } },
592d1631 11901 { Bad_Opcode },
252b5132 11902 { FGRPda_5 },
592d1631
L
11903 { Bad_Opcode },
11904 { Bad_Opcode },
252b5132
RH
11905 },
11906 /* db */
11907 {
ce518a5f
L
11908 { "fcmovnb",{ ST, STi } },
11909 { "fcmovne",{ ST, STi } },
11910 { "fcmovnbe",{ ST, STi } },
11911 { "fcmovnu",{ ST, STi } },
252b5132 11912 { FGRPdb_4 },
ce518a5f
L
11913 { "fucomi", { ST, STi } },
11914 { "fcomi", { ST, STi } },
592d1631 11915 { Bad_Opcode },
252b5132
RH
11916 },
11917 /* dc */
11918 {
ce518a5f
L
11919 { "fadd", { STi, ST } },
11920 { "fmul", { STi, ST } },
592d1631
L
11921 { Bad_Opcode },
11922 { Bad_Opcode },
9d141669
L
11923 { "fsub!M", { STi, ST } },
11924 { "fsubM", { STi, ST } },
11925 { "fdiv!M", { STi, ST } },
11926 { "fdivM", { STi, ST } },
252b5132
RH
11927 },
11928 /* dd */
11929 {
ce518a5f 11930 { "ffree", { STi } },
592d1631 11931 { Bad_Opcode },
ce518a5f
L
11932 { "fst", { STi } },
11933 { "fstp", { STi } },
11934 { "fucom", { STi } },
11935 { "fucomp", { STi } },
592d1631
L
11936 { Bad_Opcode },
11937 { Bad_Opcode },
252b5132
RH
11938 },
11939 /* de */
11940 {
ce518a5f
L
11941 { "faddp", { STi, ST } },
11942 { "fmulp", { STi, ST } },
592d1631 11943 { Bad_Opcode },
252b5132 11944 { FGRPde_3 },
9d141669
L
11945 { "fsub!Mp", { STi, ST } },
11946 { "fsubMp", { STi, ST } },
11947 { "fdiv!Mp", { STi, ST } },
11948 { "fdivMp", { STi, ST } },
252b5132
RH
11949 },
11950 /* df */
11951 {
ce518a5f 11952 { "ffreep", { STi } },
592d1631
L
11953 { Bad_Opcode },
11954 { Bad_Opcode },
11955 { Bad_Opcode },
252b5132 11956 { FGRPdf_4 },
ce518a5f
L
11957 { "fucomip", { ST, STi } },
11958 { "fcomip", { ST, STi } },
592d1631 11959 { Bad_Opcode },
252b5132
RH
11960 },
11961};
11962
252b5132
RH
11963static char *fgrps[][8] = {
11964 /* d9_2 0 */
11965 {
11966 "fnop","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
11967 },
11968
11969 /* d9_4 1 */
11970 {
11971 "fchs","fabs","(bad)","(bad)","ftst","fxam","(bad)","(bad)",
11972 },
11973
11974 /* d9_5 2 */
11975 {
11976 "fld1","fldl2t","fldl2e","fldpi","fldlg2","fldln2","fldz","(bad)",
11977 },
11978
11979 /* d9_6 3 */
11980 {
11981 "f2xm1","fyl2x","fptan","fpatan","fxtract","fprem1","fdecstp","fincstp",
11982 },
11983
11984 /* d9_7 4 */
11985 {
11986 "fprem","fyl2xp1","fsqrt","fsincos","frndint","fscale","fsin","fcos",
11987 },
11988
11989 /* da_5 5 */
11990 {
11991 "(bad)","fucompp","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
11992 },
11993
11994 /* db_4 6 */
11995 {
309d3373
JB
11996 "fNeni(8087 only)","fNdisi(8087 only)","fNclex","fNinit",
11997 "fNsetpm(287 only)","frstpm(287 only)","(bad)","(bad)",
252b5132
RH
11998 },
11999
12000 /* de_3 7 */
12001 {
12002 "(bad)","fcompp","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
12003 },
12004
12005 /* df_4 8 */
12006 {
12007 "fNstsw","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
12008 },
12009};
12010
b6169b20
L
12011static void
12012swap_operand (void)
12013{
12014 mnemonicendp[0] = '.';
12015 mnemonicendp[1] = 's';
12016 mnemonicendp += 2;
12017}
12018
b844680a
L
12019static void
12020OP_Skip_MODRM (int bytemode ATTRIBUTE_UNUSED,
12021 int sizeflag ATTRIBUTE_UNUSED)
12022{
12023 /* Skip mod/rm byte. */
12024 MODRM_CHECK;
12025 codep++;
12026}
12027
252b5132 12028static void
26ca5450 12029dofloat (int sizeflag)
252b5132 12030{
2da11e11 12031 const struct dis386 *dp;
252b5132
RH
12032 unsigned char floatop;
12033
12034 floatop = codep[-1];
12035
7967e09e 12036 if (modrm.mod != 3)
252b5132 12037 {
7967e09e 12038 int fp_indx = (floatop - 0xd8) * 8 + modrm.reg;
1d9f512f
AM
12039
12040 putop (float_mem[fp_indx], sizeflag);
ce518a5f 12041 obufp = op_out[0];
6e50d963 12042 op_ad = 2;
1d9f512f 12043 OP_E (float_mem_mode[fp_indx], sizeflag);
252b5132
RH
12044 return;
12045 }
6608db57 12046 /* Skip mod/rm byte. */
4bba6815 12047 MODRM_CHECK;
252b5132
RH
12048 codep++;
12049
7967e09e 12050 dp = &float_reg[floatop - 0xd8][modrm.reg];
252b5132
RH
12051 if (dp->name == NULL)
12052 {
7967e09e 12053 putop (fgrps[dp->op[0].bytemode][modrm.rm], sizeflag);
252b5132 12054
6608db57 12055 /* Instruction fnstsw is only one with strange arg. */
252b5132 12056 if (floatop == 0xdf && codep[-1] == 0xe0)
ce518a5f 12057 strcpy (op_out[0], names16[0]);
252b5132
RH
12058 }
12059 else
12060 {
12061 putop (dp->name, sizeflag);
12062
ce518a5f 12063 obufp = op_out[0];
6e50d963 12064 op_ad = 2;
ce518a5f
L
12065 if (dp->op[0].rtn)
12066 (*dp->op[0].rtn) (dp->op[0].bytemode, sizeflag);
6e50d963 12067
ce518a5f 12068 obufp = op_out[1];
6e50d963 12069 op_ad = 1;
ce518a5f
L
12070 if (dp->op[1].rtn)
12071 (*dp->op[1].rtn) (dp->op[1].bytemode, sizeflag);
252b5132
RH
12072 }
12073}
12074
252b5132 12075static void
26ca5450 12076OP_ST (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 12077{
422673a9 12078 oappend ("%st" + intel_syntax);
252b5132
RH
12079}
12080
252b5132 12081static void
26ca5450 12082OP_STi (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 12083{
7967e09e 12084 sprintf (scratchbuf, "%%st(%d)", modrm.rm);
d708bcba 12085 oappend (scratchbuf + intel_syntax);
252b5132
RH
12086}
12087
6608db57 12088/* Capital letters in template are macros. */
6439fc28 12089static int
d3ce72d0 12090putop (const char *in_template, int sizeflag)
252b5132 12091{
2da11e11 12092 const char *p;
9306ca4a 12093 int alt = 0;
9d141669 12094 int cond = 1;
98b528ac
L
12095 unsigned int l = 0, len = 1;
12096 char last[4];
12097
12098#define SAVE_LAST(c) \
12099 if (l < len && l < sizeof (last)) \
12100 last[l++] = c; \
12101 else \
12102 abort ();
252b5132 12103
d3ce72d0 12104 for (p = in_template; *p; p++)
252b5132
RH
12105 {
12106 switch (*p)
12107 {
12108 default:
12109 *obufp++ = *p;
12110 break;
98b528ac
L
12111 case '%':
12112 len++;
12113 break;
9d141669
L
12114 case '!':
12115 cond = 0;
12116 break;
6439fc28
AM
12117 case '{':
12118 alt = 0;
12119 if (intel_syntax)
6439fc28
AM
12120 {
12121 while (*++p != '|')
7c52e0e8
L
12122 if (*p == '}' || *p == '\0')
12123 abort ();
6439fc28 12124 }
9306ca4a
JB
12125 /* Fall through. */
12126 case 'I':
12127 alt = 1;
12128 continue;
6439fc28
AM
12129 case '|':
12130 while (*++p != '}')
12131 {
12132 if (*p == '\0')
12133 abort ();
12134 }
12135 break;
12136 case '}':
12137 break;
252b5132 12138 case 'A':
db6eb5be
AM
12139 if (intel_syntax)
12140 break;
7967e09e 12141 if (modrm.mod != 3 || (sizeflag & SUFFIX_ALWAYS))
252b5132
RH
12142 *obufp++ = 'b';
12143 break;
12144 case 'B':
4b06377f
L
12145 if (l == 0 && len == 1)
12146 {
12147case_B:
12148 if (intel_syntax)
12149 break;
12150 if (sizeflag & SUFFIX_ALWAYS)
12151 *obufp++ = 'b';
12152 }
12153 else
12154 {
12155 if (l != 1
12156 || len != 2
12157 || last[0] != 'L')
12158 {
12159 SAVE_LAST (*p);
12160 break;
12161 }
12162
12163 if (address_mode == mode_64bit
12164 && !(prefixes & PREFIX_ADDR))
12165 {
12166 *obufp++ = 'a';
12167 *obufp++ = 'b';
12168 *obufp++ = 's';
12169 }
12170
12171 goto case_B;
12172 }
252b5132 12173 break;
9306ca4a
JB
12174 case 'C':
12175 if (intel_syntax && !alt)
12176 break;
12177 if ((prefixes & PREFIX_DATA) || (sizeflag & SUFFIX_ALWAYS))
12178 {
12179 if (sizeflag & DFLAG)
12180 *obufp++ = intel_syntax ? 'd' : 'l';
12181 else
12182 *obufp++ = intel_syntax ? 'w' : 's';
12183 used_prefixes |= (prefixes & PREFIX_DATA);
12184 }
12185 break;
ed7841b3
JB
12186 case 'D':
12187 if (intel_syntax || !(sizeflag & SUFFIX_ALWAYS))
12188 break;
161a04f6 12189 USED_REX (REX_W);
7967e09e 12190 if (modrm.mod == 3)
ed7841b3 12191 {
161a04f6 12192 if (rex & REX_W)
ed7841b3 12193 *obufp++ = 'q';
ed7841b3 12194 else
f16cd0d5
L
12195 {
12196 if (sizeflag & DFLAG)
12197 *obufp++ = intel_syntax ? 'd' : 'l';
12198 else
12199 *obufp++ = 'w';
12200 used_prefixes |= (prefixes & PREFIX_DATA);
12201 }
ed7841b3
JB
12202 }
12203 else
12204 *obufp++ = 'w';
12205 break;
252b5132 12206 case 'E': /* For jcxz/jecxz */
cb712a9e 12207 if (address_mode == mode_64bit)
c1a64871
JH
12208 {
12209 if (sizeflag & AFLAG)
12210 *obufp++ = 'r';
12211 else
12212 *obufp++ = 'e';
12213 }
12214 else
12215 if (sizeflag & AFLAG)
12216 *obufp++ = 'e';
3ffd33cf
AM
12217 used_prefixes |= (prefixes & PREFIX_ADDR);
12218 break;
12219 case 'F':
db6eb5be
AM
12220 if (intel_syntax)
12221 break;
e396998b 12222 if ((prefixes & PREFIX_ADDR) || (sizeflag & SUFFIX_ALWAYS))
3ffd33cf
AM
12223 {
12224 if (sizeflag & AFLAG)
cb712a9e 12225 *obufp++ = address_mode == mode_64bit ? 'q' : 'l';
3ffd33cf 12226 else
cb712a9e 12227 *obufp++ = address_mode == mode_64bit ? 'l' : 'w';
3ffd33cf
AM
12228 used_prefixes |= (prefixes & PREFIX_ADDR);
12229 }
252b5132 12230 break;
52fd6d94
JB
12231 case 'G':
12232 if (intel_syntax || (obufp[-1] != 's' && !(sizeflag & SUFFIX_ALWAYS)))
12233 break;
161a04f6 12234 if ((rex & REX_W) || (sizeflag & DFLAG))
52fd6d94
JB
12235 *obufp++ = 'l';
12236 else
12237 *obufp++ = 'w';
161a04f6 12238 if (!(rex & REX_W))
52fd6d94
JB
12239 used_prefixes |= (prefixes & PREFIX_DATA);
12240 break;
5dd0794d 12241 case 'H':
db6eb5be
AM
12242 if (intel_syntax)
12243 break;
5dd0794d
AM
12244 if ((prefixes & (PREFIX_CS | PREFIX_DS)) == PREFIX_CS
12245 || (prefixes & (PREFIX_CS | PREFIX_DS)) == PREFIX_DS)
12246 {
12247 used_prefixes |= prefixes & (PREFIX_CS | PREFIX_DS);
12248 *obufp++ = ',';
12249 *obufp++ = 'p';
12250 if (prefixes & PREFIX_DS)
12251 *obufp++ = 't';
12252 else
12253 *obufp++ = 'n';
12254 }
12255 break;
9306ca4a
JB
12256 case 'J':
12257 if (intel_syntax)
12258 break;
12259 *obufp++ = 'l';
12260 break;
42903f7f
L
12261 case 'K':
12262 USED_REX (REX_W);
12263 if (rex & REX_W)
12264 *obufp++ = 'q';
12265 else
12266 *obufp++ = 'd';
12267 break;
6dd5059a
L
12268 case 'Z':
12269 if (intel_syntax)
12270 break;
12271 if (address_mode == mode_64bit && (sizeflag & SUFFIX_ALWAYS))
12272 {
12273 *obufp++ = 'q';
12274 break;
12275 }
12276 /* Fall through. */
98b528ac 12277 goto case_L;
252b5132 12278 case 'L':
98b528ac
L
12279 if (l != 0 || len != 1)
12280 {
12281 SAVE_LAST (*p);
12282 break;
12283 }
12284case_L:
db6eb5be
AM
12285 if (intel_syntax)
12286 break;
252b5132
RH
12287 if (sizeflag & SUFFIX_ALWAYS)
12288 *obufp++ = 'l';
252b5132 12289 break;
9d141669
L
12290 case 'M':
12291 if (intel_mnemonic != cond)
12292 *obufp++ = 'r';
12293 break;
252b5132
RH
12294 case 'N':
12295 if ((prefixes & PREFIX_FWAIT) == 0)
12296 *obufp++ = 'n';
7d421014
ILT
12297 else
12298 used_prefixes |= PREFIX_FWAIT;
252b5132 12299 break;
52b15da3 12300 case 'O':
161a04f6
L
12301 USED_REX (REX_W);
12302 if (rex & REX_W)
6439fc28 12303 *obufp++ = 'o';
a35ca55a
JB
12304 else if (intel_syntax && (sizeflag & DFLAG))
12305 *obufp++ = 'q';
52b15da3
JH
12306 else
12307 *obufp++ = 'd';
161a04f6 12308 if (!(rex & REX_W))
a35ca55a 12309 used_prefixes |= (prefixes & PREFIX_DATA);
52b15da3 12310 break;
6439fc28 12311 case 'T':
d9e3625e
L
12312 if (!intel_syntax
12313 && address_mode == mode_64bit
7bb15c6f 12314 && ((sizeflag & DFLAG) || (rex & REX_W)))
6439fc28
AM
12315 {
12316 *obufp++ = 'q';
12317 break;
12318 }
6608db57 12319 /* Fall through. */
252b5132 12320 case 'P':
db6eb5be 12321 if (intel_syntax)
d9e3625e
L
12322 {
12323 if ((rex & REX_W) == 0
12324 && (prefixes & PREFIX_DATA))
12325 {
12326 if ((sizeflag & DFLAG) == 0)
12327 *obufp++ = 'w';
12328 used_prefixes |= (prefixes & PREFIX_DATA);
12329 }
12330 break;
12331 }
252b5132 12332 if ((prefixes & PREFIX_DATA)
161a04f6 12333 || (rex & REX_W)
e396998b 12334 || (sizeflag & SUFFIX_ALWAYS))
252b5132 12335 {
161a04f6
L
12336 USED_REX (REX_W);
12337 if (rex & REX_W)
52b15da3 12338 *obufp++ = 'q';
c2419411 12339 else
52b15da3
JH
12340 {
12341 if (sizeflag & DFLAG)
12342 *obufp++ = 'l';
12343 else
12344 *obufp++ = 'w';
f16cd0d5 12345 used_prefixes |= (prefixes & PREFIX_DATA);
52b15da3 12346 }
252b5132
RH
12347 }
12348 break;
6439fc28 12349 case 'U':
db6eb5be
AM
12350 if (intel_syntax)
12351 break;
7bb15c6f 12352 if (address_mode == mode_64bit
6c067bbb 12353 && ((sizeflag & DFLAG) || (rex & REX_W)))
6439fc28 12354 {
7967e09e 12355 if (modrm.mod != 3 || (sizeflag & SUFFIX_ALWAYS))
1a114b12 12356 *obufp++ = 'q';
6439fc28
AM
12357 break;
12358 }
6608db57 12359 /* Fall through. */
98b528ac 12360 goto case_Q;
252b5132 12361 case 'Q':
98b528ac 12362 if (l == 0 && len == 1)
252b5132 12363 {
98b528ac
L
12364case_Q:
12365 if (intel_syntax && !alt)
12366 break;
12367 USED_REX (REX_W);
12368 if (modrm.mod != 3 || (sizeflag & SUFFIX_ALWAYS))
52b15da3 12369 {
98b528ac
L
12370 if (rex & REX_W)
12371 *obufp++ = 'q';
52b15da3 12372 else
98b528ac
L
12373 {
12374 if (sizeflag & DFLAG)
12375 *obufp++ = intel_syntax ? 'd' : 'l';
12376 else
12377 *obufp++ = 'w';
f16cd0d5 12378 used_prefixes |= (prefixes & PREFIX_DATA);
98b528ac 12379 }
52b15da3 12380 }
98b528ac
L
12381 }
12382 else
12383 {
12384 if (l != 1 || len != 2 || last[0] != 'L')
12385 {
12386 SAVE_LAST (*p);
12387 break;
12388 }
12389 if (intel_syntax
12390 || (modrm.mod == 3 && !(sizeflag & SUFFIX_ALWAYS)))
12391 break;
12392 if ((rex & REX_W))
12393 {
12394 USED_REX (REX_W);
12395 *obufp++ = 'q';
12396 }
12397 else
12398 *obufp++ = 'l';
252b5132
RH
12399 }
12400 break;
12401 case 'R':
161a04f6
L
12402 USED_REX (REX_W);
12403 if (rex & REX_W)
a35ca55a
JB
12404 *obufp++ = 'q';
12405 else if (sizeflag & DFLAG)
c608c12e 12406 {
a35ca55a 12407 if (intel_syntax)
c608c12e 12408 *obufp++ = 'd';
c608c12e 12409 else
a35ca55a 12410 *obufp++ = 'l';
c608c12e 12411 }
252b5132 12412 else
a35ca55a
JB
12413 *obufp++ = 'w';
12414 if (intel_syntax && !p[1]
161a04f6 12415 && ((rex & REX_W) || (sizeflag & DFLAG)))
a35ca55a 12416 *obufp++ = 'e';
161a04f6 12417 if (!(rex & REX_W))
52b15da3 12418 used_prefixes |= (prefixes & PREFIX_DATA);
252b5132 12419 break;
1a114b12 12420 case 'V':
4b06377f 12421 if (l == 0 && len == 1)
1a114b12 12422 {
4b06377f
L
12423 if (intel_syntax)
12424 break;
7bb15c6f 12425 if (address_mode == mode_64bit
6c067bbb 12426 && ((sizeflag & DFLAG) || (rex & REX_W)))
4b06377f
L
12427 {
12428 if (sizeflag & SUFFIX_ALWAYS)
12429 *obufp++ = 'q';
12430 break;
12431 }
12432 }
12433 else
12434 {
12435 if (l != 1
12436 || len != 2
12437 || last[0] != 'L')
12438 {
12439 SAVE_LAST (*p);
12440 break;
12441 }
12442
12443 if (rex & REX_W)
12444 {
12445 *obufp++ = 'a';
12446 *obufp++ = 'b';
12447 *obufp++ = 's';
12448 }
1a114b12
JB
12449 }
12450 /* Fall through. */
4b06377f 12451 goto case_S;
252b5132 12452 case 'S':
4b06377f 12453 if (l == 0 && len == 1)
252b5132 12454 {
4b06377f
L
12455case_S:
12456 if (intel_syntax)
12457 break;
12458 if (sizeflag & SUFFIX_ALWAYS)
52b15da3 12459 {
4b06377f
L
12460 if (rex & REX_W)
12461 *obufp++ = 'q';
52b15da3 12462 else
4b06377f
L
12463 {
12464 if (sizeflag & DFLAG)
12465 *obufp++ = 'l';
12466 else
12467 *obufp++ = 'w';
12468 used_prefixes |= (prefixes & PREFIX_DATA);
12469 }
12470 }
12471 }
12472 else
12473 {
12474 if (l != 1
12475 || len != 2
12476 || last[0] != 'L')
12477 {
12478 SAVE_LAST (*p);
12479 break;
52b15da3 12480 }
4b06377f
L
12481
12482 if (address_mode == mode_64bit
12483 && !(prefixes & PREFIX_ADDR))
12484 {
12485 *obufp++ = 'a';
12486 *obufp++ = 'b';
12487 *obufp++ = 's';
12488 }
12489
12490 goto case_S;
252b5132 12491 }
252b5132 12492 break;
041bd2e0 12493 case 'X':
c0f3af97
L
12494 if (l != 0 || len != 1)
12495 {
12496 SAVE_LAST (*p);
12497 break;
12498 }
12499 if (need_vex && vex.prefix)
12500 {
12501 if (vex.prefix == DATA_PREFIX_OPCODE)
12502 *obufp++ = 'd';
12503 else
12504 *obufp++ = 's';
12505 }
041bd2e0 12506 else
f16cd0d5
L
12507 {
12508 if (prefixes & PREFIX_DATA)
12509 *obufp++ = 'd';
12510 else
12511 *obufp++ = 's';
12512 used_prefixes |= (prefixes & PREFIX_DATA);
12513 }
041bd2e0 12514 break;
76f227a5 12515 case 'Y':
c0f3af97 12516 if (l == 0 && len == 1)
76f227a5 12517 {
c0f3af97
L
12518 if (intel_syntax || !(sizeflag & SUFFIX_ALWAYS))
12519 break;
12520 if (rex & REX_W)
12521 {
12522 USED_REX (REX_W);
12523 *obufp++ = 'q';
12524 }
12525 break;
12526 }
12527 else
12528 {
12529 if (l != 1 || len != 2 || last[0] != 'X')
12530 {
12531 SAVE_LAST (*p);
12532 break;
12533 }
12534 if (!need_vex)
12535 abort ();
12536 if (intel_syntax
12537 || (modrm.mod == 3 && !(sizeflag & SUFFIX_ALWAYS)))
12538 break;
12539 switch (vex.length)
12540 {
12541 case 128:
12542 *obufp++ = 'x';
12543 break;
12544 case 256:
12545 *obufp++ = 'y';
12546 break;
12547 default:
12548 abort ();
12549 }
76f227a5
JH
12550 }
12551 break;
252b5132 12552 case 'W':
0bfee649 12553 if (l == 0 && len == 1)
a35ca55a 12554 {
0bfee649
L
12555 /* operand size flag for cwtl, cbtw */
12556 USED_REX (REX_W);
12557 if (rex & REX_W)
12558 {
12559 if (intel_syntax)
12560 *obufp++ = 'd';
12561 else
12562 *obufp++ = 'l';
12563 }
12564 else if (sizeflag & DFLAG)
12565 *obufp++ = 'w';
a35ca55a 12566 else
0bfee649
L
12567 *obufp++ = 'b';
12568 if (!(rex & REX_W))
12569 used_prefixes |= (prefixes & PREFIX_DATA);
a35ca55a 12570 }
252b5132 12571 else
0bfee649 12572 {
6c30d220
L
12573 if (l != 1
12574 || len != 2
12575 || (last[0] != 'X'
12576 && last[0] != 'L'))
0bfee649
L
12577 {
12578 SAVE_LAST (*p);
12579 break;
12580 }
12581 if (!need_vex)
12582 abort ();
6c30d220
L
12583 if (last[0] == 'X')
12584 *obufp++ = vex.w ? 'd': 's';
12585 else
12586 *obufp++ = vex.w ? 'q': 'd';
0bfee649 12587 }
252b5132
RH
12588 break;
12589 }
9306ca4a 12590 alt = 0;
252b5132
RH
12591 }
12592 *obufp = 0;
ea397f5b 12593 mnemonicendp = obufp;
6439fc28 12594 return 0;
252b5132
RH
12595}
12596
12597static void
26ca5450 12598oappend (const char *s)
252b5132 12599{
ea397f5b 12600 obufp = stpcpy (obufp, s);
252b5132
RH
12601}
12602
12603static void
26ca5450 12604append_seg (void)
252b5132
RH
12605{
12606 if (prefixes & PREFIX_CS)
7d421014 12607 {
7d421014 12608 used_prefixes |= PREFIX_CS;
d708bcba 12609 oappend ("%cs:" + intel_syntax);
7d421014 12610 }
252b5132 12611 if (prefixes & PREFIX_DS)
7d421014 12612 {
7d421014 12613 used_prefixes |= PREFIX_DS;
d708bcba 12614 oappend ("%ds:" + intel_syntax);
7d421014 12615 }
252b5132 12616 if (prefixes & PREFIX_SS)
7d421014 12617 {
7d421014 12618 used_prefixes |= PREFIX_SS;
d708bcba 12619 oappend ("%ss:" + intel_syntax);
7d421014 12620 }
252b5132 12621 if (prefixes & PREFIX_ES)
7d421014 12622 {
7d421014 12623 used_prefixes |= PREFIX_ES;
d708bcba 12624 oappend ("%es:" + intel_syntax);
7d421014 12625 }
252b5132 12626 if (prefixes & PREFIX_FS)
7d421014 12627 {
7d421014 12628 used_prefixes |= PREFIX_FS;
d708bcba 12629 oappend ("%fs:" + intel_syntax);
7d421014 12630 }
252b5132 12631 if (prefixes & PREFIX_GS)
7d421014 12632 {
7d421014 12633 used_prefixes |= PREFIX_GS;
d708bcba 12634 oappend ("%gs:" + intel_syntax);
7d421014 12635 }
252b5132
RH
12636}
12637
12638static void
26ca5450 12639OP_indirE (int bytemode, int sizeflag)
252b5132
RH
12640{
12641 if (!intel_syntax)
12642 oappend ("*");
12643 OP_E (bytemode, sizeflag);
12644}
12645
52b15da3 12646static void
26ca5450 12647print_operand_value (char *buf, int hex, bfd_vma disp)
52b15da3 12648{
cb712a9e 12649 if (address_mode == mode_64bit)
52b15da3
JH
12650 {
12651 if (hex)
12652 {
12653 char tmp[30];
12654 int i;
12655 buf[0] = '0';
12656 buf[1] = 'x';
12657 sprintf_vma (tmp, disp);
6608db57 12658 for (i = 0; tmp[i] == '0' && tmp[i + 1]; i++);
52b15da3
JH
12659 strcpy (buf + 2, tmp + i);
12660 }
12661 else
12662 {
12663 bfd_signed_vma v = disp;
12664 char tmp[30];
12665 int i;
12666 if (v < 0)
12667 {
12668 *(buf++) = '-';
12669 v = -disp;
6608db57 12670 /* Check for possible overflow on 0x8000000000000000. */
52b15da3
JH
12671 if (v < 0)
12672 {
12673 strcpy (buf, "9223372036854775808");
12674 return;
12675 }
12676 }
12677 if (!v)
12678 {
12679 strcpy (buf, "0");
12680 return;
12681 }
12682
12683 i = 0;
12684 tmp[29] = 0;
12685 while (v)
12686 {
6608db57 12687 tmp[28 - i] = (v % 10) + '0';
52b15da3
JH
12688 v /= 10;
12689 i++;
12690 }
12691 strcpy (buf, tmp + 29 - i);
12692 }
12693 }
12694 else
12695 {
12696 if (hex)
12697 sprintf (buf, "0x%x", (unsigned int) disp);
12698 else
12699 sprintf (buf, "%d", (int) disp);
12700 }
12701}
12702
5d669648
L
12703/* Put DISP in BUF as signed hex number. */
12704
12705static void
12706print_displacement (char *buf, bfd_vma disp)
12707{
12708 bfd_signed_vma val = disp;
12709 char tmp[30];
12710 int i, j = 0;
12711
12712 if (val < 0)
12713 {
12714 buf[j++] = '-';
12715 val = -disp;
12716
12717 /* Check for possible overflow. */
12718 if (val < 0)
12719 {
12720 switch (address_mode)
12721 {
12722 case mode_64bit:
12723 strcpy (buf + j, "0x8000000000000000");
12724 break;
12725 case mode_32bit:
12726 strcpy (buf + j, "0x80000000");
12727 break;
12728 case mode_16bit:
12729 strcpy (buf + j, "0x8000");
12730 break;
12731 }
12732 return;
12733 }
12734 }
12735
12736 buf[j++] = '0';
12737 buf[j++] = 'x';
12738
0af1713e 12739 sprintf_vma (tmp, (bfd_vma) val);
5d669648
L
12740 for (i = 0; tmp[i] == '0'; i++)
12741 continue;
12742 if (tmp[i] == '\0')
12743 i--;
12744 strcpy (buf + j, tmp + i);
12745}
12746
3f31e633
JB
12747static void
12748intel_operand_size (int bytemode, int sizeflag)
12749{
12750 switch (bytemode)
12751 {
12752 case b_mode:
b6169b20 12753 case b_swap_mode:
42903f7f 12754 case dqb_mode:
3f31e633
JB
12755 oappend ("BYTE PTR ");
12756 break;
12757 case w_mode:
12758 case dqw_mode:
12759 oappend ("WORD PTR ");
12760 break;
1a114b12 12761 case stack_v_mode:
7bb15c6f 12762 if (address_mode == mode_64bit && ((sizeflag & DFLAG) || (rex & REX_W)))
3f31e633
JB
12763 {
12764 oappend ("QWORD PTR ");
3f31e633
JB
12765 break;
12766 }
12767 /* FALLTHRU */
12768 case v_mode:
b6169b20 12769 case v_swap_mode:
3f31e633 12770 case dq_mode:
161a04f6
L
12771 USED_REX (REX_W);
12772 if (rex & REX_W)
3f31e633 12773 oappend ("QWORD PTR ");
3f31e633 12774 else
f16cd0d5
L
12775 {
12776 if ((sizeflag & DFLAG) || bytemode == dq_mode)
12777 oappend ("DWORD PTR ");
12778 else
12779 oappend ("WORD PTR ");
12780 used_prefixes |= (prefixes & PREFIX_DATA);
12781 }
3f31e633 12782 break;
52fd6d94 12783 case z_mode:
161a04f6 12784 if ((rex & REX_W) || (sizeflag & DFLAG))
52fd6d94
JB
12785 *obufp++ = 'D';
12786 oappend ("WORD PTR ");
161a04f6 12787 if (!(rex & REX_W))
52fd6d94
JB
12788 used_prefixes |= (prefixes & PREFIX_DATA);
12789 break;
34b772a6
JB
12790 case a_mode:
12791 if (sizeflag & DFLAG)
12792 oappend ("QWORD PTR ");
12793 else
12794 oappend ("DWORD PTR ");
12795 used_prefixes |= (prefixes & PREFIX_DATA);
12796 break;
3f31e633 12797 case d_mode:
539f890d
L
12798 case d_scalar_mode:
12799 case d_scalar_swap_mode:
fa99fab2 12800 case d_swap_mode:
42903f7f 12801 case dqd_mode:
3f31e633
JB
12802 oappend ("DWORD PTR ");
12803 break;
12804 case q_mode:
539f890d
L
12805 case q_scalar_mode:
12806 case q_scalar_swap_mode:
b6169b20 12807 case q_swap_mode:
3f31e633
JB
12808 oappend ("QWORD PTR ");
12809 break;
12810 case m_mode:
cb712a9e 12811 if (address_mode == mode_64bit)
3f31e633
JB
12812 oappend ("QWORD PTR ");
12813 else
12814 oappend ("DWORD PTR ");
12815 break;
12816 case f_mode:
12817 if (sizeflag & DFLAG)
12818 oappend ("FWORD PTR ");
12819 else
12820 oappend ("DWORD PTR ");
12821 used_prefixes |= (prefixes & PREFIX_DATA);
12822 break;
12823 case t_mode:
12824 oappend ("TBYTE PTR ");
12825 break;
12826 case x_mode:
b6169b20 12827 case x_swap_mode:
c0f3af97
L
12828 if (need_vex)
12829 {
12830 switch (vex.length)
12831 {
12832 case 128:
12833 oappend ("XMMWORD PTR ");
12834 break;
12835 case 256:
12836 oappend ("YMMWORD PTR ");
12837 break;
12838 default:
12839 abort ();
12840 }
12841 }
12842 else
12843 oappend ("XMMWORD PTR ");
12844 break;
12845 case xmm_mode:
3f31e633
JB
12846 oappend ("XMMWORD PTR ");
12847 break;
c0f3af97
L
12848 case xmmq_mode:
12849 if (!need_vex)
12850 abort ();
12851
12852 switch (vex.length)
12853 {
12854 case 128:
12855 oappend ("QWORD PTR ");
12856 break;
12857 case 256:
12858 oappend ("XMMWORD PTR ");
12859 break;
12860 default:
12861 abort ();
12862 }
12863 break;
6c30d220
L
12864 case xmm_mb_mode:
12865 if (!need_vex)
12866 abort ();
12867
12868 switch (vex.length)
12869 {
12870 case 128:
12871 case 256:
12872 oappend ("BYTE PTR ");
12873 break;
12874 default:
12875 abort ();
12876 }
12877 break;
12878 case xmm_mw_mode:
12879 if (!need_vex)
12880 abort ();
12881
12882 switch (vex.length)
12883 {
12884 case 128:
12885 case 256:
12886 oappend ("WORD PTR ");
12887 break;
12888 default:
12889 abort ();
12890 }
12891 break;
12892 case xmm_md_mode:
12893 if (!need_vex)
12894 abort ();
12895
12896 switch (vex.length)
12897 {
12898 case 128:
12899 case 256:
12900 oappend ("DWORD PTR ");
12901 break;
12902 default:
12903 abort ();
12904 }
12905 break;
12906 case xmm_mq_mode:
12907 if (!need_vex)
12908 abort ();
12909
12910 switch (vex.length)
12911 {
12912 case 128:
12913 case 256:
12914 oappend ("QWORD PTR ");
12915 break;
12916 default:
12917 abort ();
12918 }
12919 break;
12920 case xmmdw_mode:
12921 if (!need_vex)
12922 abort ();
12923
12924 switch (vex.length)
12925 {
12926 case 128:
12927 oappend ("WORD PTR ");
12928 break;
12929 case 256:
12930 oappend ("DWORD PTR ");
12931 break;
12932 default:
12933 abort ();
12934 }
12935 break;
12936 case xmmqd_mode:
12937 if (!need_vex)
12938 abort ();
12939
12940 switch (vex.length)
12941 {
12942 case 128:
12943 oappend ("DWORD PTR ");
12944 break;
12945 case 256:
12946 oappend ("QWORD PTR ");
12947 break;
12948 default:
12949 abort ();
12950 }
12951 break;
c0f3af97
L
12952 case ymmq_mode:
12953 if (!need_vex)
12954 abort ();
12955
12956 switch (vex.length)
12957 {
12958 case 128:
12959 oappend ("QWORD PTR ");
12960 break;
12961 case 256:
12962 oappend ("YMMWORD PTR ");
12963 break;
12964 default:
12965 abort ();
12966 }
12967 break;
6c30d220
L
12968 case ymmxmm_mode:
12969 if (!need_vex)
12970 abort ();
12971
12972 switch (vex.length)
12973 {
12974 case 128:
12975 case 256:
12976 oappend ("XMMWORD PTR ");
12977 break;
12978 default:
12979 abort ();
12980 }
12981 break;
fb9c77c7
L
12982 case o_mode:
12983 oappend ("OWORD PTR ");
12984 break;
0bfee649 12985 case vex_w_dq_mode:
1c480963 12986 case vex_scalar_w_dq_mode:
6c30d220
L
12987 case vex_vsib_d_w_dq_mode:
12988 case vex_vsib_q_w_dq_mode:
0bfee649
L
12989 if (!need_vex)
12990 abort ();
12991
12992 if (vex.w)
12993 oappend ("QWORD PTR ");
12994 else
12995 oappend ("DWORD PTR ");
12996 break;
3f31e633
JB
12997 default:
12998 break;
12999 }
13000}
13001
252b5132 13002static void
c0f3af97 13003OP_E_register (int bytemode, int sizeflag)
252b5132 13004{
c0f3af97
L
13005 int reg = modrm.rm;
13006 const char **names;
252b5132 13007
c0f3af97
L
13008 USED_REX (REX_B);
13009 if ((rex & REX_B))
13010 reg += 8;
252b5132 13011
b6169b20
L
13012 if ((sizeflag & SUFFIX_ALWAYS)
13013 && (bytemode == b_swap_mode || bytemode == v_swap_mode))
13014 swap_operand ();
13015
c0f3af97 13016 switch (bytemode)
252b5132 13017 {
c0f3af97 13018 case b_mode:
b6169b20 13019 case b_swap_mode:
c0f3af97
L
13020 USED_REX (0);
13021 if (rex)
13022 names = names8rex;
13023 else
13024 names = names8;
13025 break;
13026 case w_mode:
13027 names = names16;
13028 break;
13029 case d_mode:
13030 names = names32;
13031 break;
13032 case q_mode:
13033 names = names64;
13034 break;
13035 case m_mode:
13036 names = address_mode == mode_64bit ? names64 : names32;
13037 break;
13038 case stack_v_mode:
7bb15c6f 13039 if (address_mode == mode_64bit && ((sizeflag & DFLAG) || (rex & REX_W)))
252b5132 13040 {
c0f3af97 13041 names = names64;
252b5132 13042 break;
252b5132 13043 }
c0f3af97
L
13044 bytemode = v_mode;
13045 /* FALLTHRU */
13046 case v_mode:
b6169b20 13047 case v_swap_mode:
c0f3af97
L
13048 case dq_mode:
13049 case dqb_mode:
13050 case dqd_mode:
13051 case dqw_mode:
13052 USED_REX (REX_W);
13053 if (rex & REX_W)
13054 names = names64;
c0f3af97 13055 else
f16cd0d5 13056 {
7bb15c6f 13057 if ((sizeflag & DFLAG)
f16cd0d5
L
13058 || (bytemode != v_mode
13059 && bytemode != v_swap_mode))
13060 names = names32;
13061 else
13062 names = names16;
13063 used_prefixes |= (prefixes & PREFIX_DATA);
13064 }
c0f3af97
L
13065 break;
13066 case 0:
13067 return;
13068 default:
13069 oappend (INTERNAL_DISASSEMBLER_ERROR);
252b5132
RH
13070 return;
13071 }
c0f3af97
L
13072 oappend (names[reg]);
13073}
13074
13075static void
c1e679ec 13076OP_E_memory (int bytemode, int sizeflag)
c0f3af97
L
13077{
13078 bfd_vma disp = 0;
13079 int add = (rex & REX_B) ? 8 : 0;
13080 int riprel = 0;
252b5132 13081
c0f3af97 13082 USED_REX (REX_B);
3f31e633
JB
13083 if (intel_syntax)
13084 intel_operand_size (bytemode, sizeflag);
252b5132
RH
13085 append_seg ();
13086
5d669648 13087 if ((sizeflag & AFLAG) || address_mode == mode_64bit)
252b5132 13088 {
5d669648
L
13089 /* 32/64 bit address mode */
13090 int havedisp;
252b5132
RH
13091 int havesib;
13092 int havebase;
0f7da397 13093 int haveindex;
20afcfb7 13094 int needindex;
82c18208 13095 int base, rbase;
91d6fa6a 13096 int vindex = 0;
252b5132 13097 int scale = 0;
6c30d220
L
13098 const char **indexes64 = names64;
13099 const char **indexes32 = names32;
252b5132
RH
13100
13101 havesib = 0;
13102 havebase = 1;
0f7da397 13103 haveindex = 0;
7967e09e 13104 base = modrm.rm;
252b5132
RH
13105
13106 if (base == 4)
13107 {
13108 havesib = 1;
dfc8cf43 13109 vindex = sib.index;
161a04f6
L
13110 USED_REX (REX_X);
13111 if (rex & REX_X)
91d6fa6a 13112 vindex += 8;
6c30d220
L
13113 switch (bytemode)
13114 {
13115 case vex_vsib_d_w_dq_mode:
13116 case vex_vsib_q_w_dq_mode:
13117 if (!need_vex)
13118 abort ();
13119
13120 haveindex = 1;
13121 switch (vex.length)
13122 {
13123 case 128:
7bb15c6f 13124 indexes64 = indexes32 = names_xmm;
6c30d220
L
13125 break;
13126 case 256:
13127 if (!vex.w || bytemode == vex_vsib_q_w_dq_mode)
7bb15c6f 13128 indexes64 = indexes32 = names_ymm;
6c30d220 13129 else
7bb15c6f 13130 indexes64 = indexes32 = names_xmm;
6c30d220
L
13131 break;
13132 default:
13133 abort ();
13134 }
13135 break;
13136 default:
13137 haveindex = vindex != 4;
13138 break;
13139 }
13140 scale = sib.scale;
13141 base = sib.base;
252b5132
RH
13142 codep++;
13143 }
82c18208 13144 rbase = base + add;
252b5132 13145
7967e09e 13146 switch (modrm.mod)
252b5132
RH
13147 {
13148 case 0:
82c18208 13149 if (base == 5)
252b5132
RH
13150 {
13151 havebase = 0;
cb712a9e 13152 if (address_mode == mode_64bit && !havesib)
52b15da3
JH
13153 riprel = 1;
13154 disp = get32s ();
252b5132
RH
13155 }
13156 break;
13157 case 1:
13158 FETCH_DATA (the_info, codep + 1);
13159 disp = *codep++;
13160 if ((disp & 0x80) != 0)
13161 disp -= 0x100;
13162 break;
13163 case 2:
52b15da3 13164 disp = get32s ();
252b5132
RH
13165 break;
13166 }
13167
20afcfb7
L
13168 /* In 32bit mode, we need index register to tell [offset] from
13169 [eiz*1 + offset]. */
13170 needindex = (havesib
13171 && !havebase
13172 && !haveindex
13173 && address_mode == mode_32bit);
13174 havedisp = (havebase
13175 || needindex
13176 || (havesib && (haveindex || scale != 0)));
5d669648 13177
252b5132 13178 if (!intel_syntax)
82c18208 13179 if (modrm.mod != 0 || base == 5)
db6eb5be 13180 {
5d669648
L
13181 if (havedisp || riprel)
13182 print_displacement (scratchbuf, disp);
13183 else
13184 print_operand_value (scratchbuf, 1, disp);
db6eb5be 13185 oappend (scratchbuf);
52b15da3
JH
13186 if (riprel)
13187 {
13188 set_op (disp, 1);
87767711 13189 oappend (sizeflag & AFLAG ? "(%rip)" : "(%eip)");
52b15da3 13190 }
db6eb5be 13191 }
2da11e11 13192
87767711
JB
13193 if (havebase || haveindex || riprel)
13194 used_prefixes |= PREFIX_ADDR;
13195
5d669648 13196 if (havedisp || (intel_syntax && riprel))
252b5132 13197 {
252b5132 13198 *obufp++ = open_char;
52b15da3 13199 if (intel_syntax && riprel)
185b1163
L
13200 {
13201 set_op (disp, 1);
87767711 13202 oappend (sizeflag & AFLAG ? "rip" : "eip");
185b1163 13203 }
db6eb5be 13204 *obufp = '\0';
252b5132 13205 if (havebase)
cb712a9e 13206 oappend (address_mode == mode_64bit && (sizeflag & AFLAG)
82c18208 13207 ? names64[rbase] : names32[rbase]);
252b5132
RH
13208 if (havesib)
13209 {
db51cc60
L
13210 /* ESP/RSP won't allow index. If base isn't ESP/RSP,
13211 print index to tell base + index from base. */
13212 if (scale != 0
20afcfb7 13213 || needindex
db51cc60
L
13214 || haveindex
13215 || (havebase && base != ESP_REG_NUM))
252b5132 13216 {
9306ca4a 13217 if (!intel_syntax || havebase)
db6eb5be 13218 {
9306ca4a
JB
13219 *obufp++ = separator_char;
13220 *obufp = '\0';
db6eb5be 13221 }
db51cc60 13222 if (haveindex)
7bb15c6f 13223 oappend (address_mode == mode_64bit
db51cc60 13224 && (sizeflag & AFLAG)
6c30d220 13225 ? indexes64[vindex] : indexes32[vindex]);
db51cc60 13226 else
7bb15c6f 13227 oappend (address_mode == mode_64bit
db51cc60
L
13228 && (sizeflag & AFLAG)
13229 ? index64 : index32);
13230
db6eb5be
AM
13231 *obufp++ = scale_char;
13232 *obufp = '\0';
13233 sprintf (scratchbuf, "%d", 1 << scale);
13234 oappend (scratchbuf);
13235 }
252b5132 13236 }
185b1163 13237 if (intel_syntax
82c18208 13238 && (disp || modrm.mod != 0 || base == 5))
3d456fa1 13239 {
db51cc60 13240 if (!havedisp || (bfd_signed_vma) disp >= 0)
3d456fa1
JB
13241 {
13242 *obufp++ = '+';
13243 *obufp = '\0';
13244 }
05203043 13245 else if (modrm.mod != 1 && disp != -disp)
3d456fa1
JB
13246 {
13247 *obufp++ = '-';
13248 *obufp = '\0';
13249 disp = - (bfd_signed_vma) disp;
13250 }
13251
db51cc60
L
13252 if (havedisp)
13253 print_displacement (scratchbuf, disp);
13254 else
13255 print_operand_value (scratchbuf, 1, disp);
3d456fa1
JB
13256 oappend (scratchbuf);
13257 }
252b5132
RH
13258
13259 *obufp++ = close_char;
db6eb5be 13260 *obufp = '\0';
252b5132
RH
13261 }
13262 else if (intel_syntax)
db6eb5be 13263 {
82c18208 13264 if (modrm.mod != 0 || base == 5)
db6eb5be 13265 {
252b5132
RH
13266 if (prefixes & (PREFIX_CS | PREFIX_SS | PREFIX_DS
13267 | PREFIX_ES | PREFIX_FS | PREFIX_GS))
13268 ;
13269 else
13270 {
d708bcba 13271 oappend (names_seg[ds_reg - es_reg]);
252b5132
RH
13272 oappend (":");
13273 }
52b15da3 13274 print_operand_value (scratchbuf, 1, disp);
db6eb5be
AM
13275 oappend (scratchbuf);
13276 }
13277 }
252b5132
RH
13278 }
13279 else
f16cd0d5
L
13280 {
13281 /* 16 bit address mode */
13282 used_prefixes |= prefixes & PREFIX_ADDR;
7967e09e 13283 switch (modrm.mod)
252b5132
RH
13284 {
13285 case 0:
7967e09e 13286 if (modrm.rm == 6)
252b5132
RH
13287 {
13288 disp = get16 ();
13289 if ((disp & 0x8000) != 0)
13290 disp -= 0x10000;
13291 }
13292 break;
13293 case 1:
13294 FETCH_DATA (the_info, codep + 1);
13295 disp = *codep++;
13296 if ((disp & 0x80) != 0)
13297 disp -= 0x100;
13298 break;
13299 case 2:
13300 disp = get16 ();
13301 if ((disp & 0x8000) != 0)
13302 disp -= 0x10000;
13303 break;
13304 }
13305
13306 if (!intel_syntax)
7967e09e 13307 if (modrm.mod != 0 || modrm.rm == 6)
db6eb5be 13308 {
5d669648 13309 print_displacement (scratchbuf, disp);
db6eb5be
AM
13310 oappend (scratchbuf);
13311 }
252b5132 13312
7967e09e 13313 if (modrm.mod != 0 || modrm.rm != 6)
252b5132
RH
13314 {
13315 *obufp++ = open_char;
db6eb5be 13316 *obufp = '\0';
7967e09e 13317 oappend (index16[modrm.rm]);
5d669648
L
13318 if (intel_syntax
13319 && (disp || modrm.mod != 0 || modrm.rm == 6))
3d456fa1 13320 {
5d669648 13321 if ((bfd_signed_vma) disp >= 0)
3d456fa1
JB
13322 {
13323 *obufp++ = '+';
13324 *obufp = '\0';
13325 }
7967e09e 13326 else if (modrm.mod != 1)
3d456fa1
JB
13327 {
13328 *obufp++ = '-';
13329 *obufp = '\0';
13330 disp = - (bfd_signed_vma) disp;
13331 }
13332
5d669648 13333 print_displacement (scratchbuf, disp);
3d456fa1
JB
13334 oappend (scratchbuf);
13335 }
13336
db6eb5be
AM
13337 *obufp++ = close_char;
13338 *obufp = '\0';
252b5132 13339 }
3d456fa1
JB
13340 else if (intel_syntax)
13341 {
13342 if (prefixes & (PREFIX_CS | PREFIX_SS | PREFIX_DS
13343 | PREFIX_ES | PREFIX_FS | PREFIX_GS))
13344 ;
13345 else
13346 {
13347 oappend (names_seg[ds_reg - es_reg]);
13348 oappend (":");
13349 }
13350 print_operand_value (scratchbuf, 1, disp & 0xffff);
13351 oappend (scratchbuf);
13352 }
252b5132
RH
13353 }
13354}
13355
c0f3af97 13356static void
8b3f93e7 13357OP_E (int bytemode, int sizeflag)
c0f3af97
L
13358{
13359 /* Skip mod/rm byte. */
13360 MODRM_CHECK;
13361 codep++;
13362
13363 if (modrm.mod == 3)
13364 OP_E_register (bytemode, sizeflag);
13365 else
c1e679ec 13366 OP_E_memory (bytemode, sizeflag);
c0f3af97
L
13367}
13368
252b5132 13369static void
26ca5450 13370OP_G (int bytemode, int sizeflag)
252b5132 13371{
52b15da3 13372 int add = 0;
161a04f6
L
13373 USED_REX (REX_R);
13374 if (rex & REX_R)
52b15da3 13375 add += 8;
252b5132
RH
13376 switch (bytemode)
13377 {
13378 case b_mode:
52b15da3
JH
13379 USED_REX (0);
13380 if (rex)
7967e09e 13381 oappend (names8rex[modrm.reg + add]);
52b15da3 13382 else
7967e09e 13383 oappend (names8[modrm.reg + add]);
252b5132
RH
13384 break;
13385 case w_mode:
7967e09e 13386 oappend (names16[modrm.reg + add]);
252b5132
RH
13387 break;
13388 case d_mode:
7967e09e 13389 oappend (names32[modrm.reg + add]);
52b15da3
JH
13390 break;
13391 case q_mode:
7967e09e 13392 oappend (names64[modrm.reg + add]);
252b5132
RH
13393 break;
13394 case v_mode:
9306ca4a 13395 case dq_mode:
42903f7f
L
13396 case dqb_mode:
13397 case dqd_mode:
9306ca4a 13398 case dqw_mode:
161a04f6
L
13399 USED_REX (REX_W);
13400 if (rex & REX_W)
7967e09e 13401 oappend (names64[modrm.reg + add]);
252b5132 13402 else
f16cd0d5
L
13403 {
13404 if ((sizeflag & DFLAG) || bytemode != v_mode)
13405 oappend (names32[modrm.reg + add]);
13406 else
13407 oappend (names16[modrm.reg + add]);
13408 used_prefixes |= (prefixes & PREFIX_DATA);
13409 }
252b5132 13410 break;
90700ea2 13411 case m_mode:
cb712a9e 13412 if (address_mode == mode_64bit)
7967e09e 13413 oappend (names64[modrm.reg + add]);
90700ea2 13414 else
7967e09e 13415 oappend (names32[modrm.reg + add]);
90700ea2 13416 break;
252b5132
RH
13417 default:
13418 oappend (INTERNAL_DISASSEMBLER_ERROR);
13419 break;
13420 }
13421}
13422
52b15da3 13423static bfd_vma
26ca5450 13424get64 (void)
52b15da3 13425{
5dd0794d 13426 bfd_vma x;
52b15da3 13427#ifdef BFD64
5dd0794d
AM
13428 unsigned int a;
13429 unsigned int b;
13430
52b15da3
JH
13431 FETCH_DATA (the_info, codep + 8);
13432 a = *codep++ & 0xff;
13433 a |= (*codep++ & 0xff) << 8;
13434 a |= (*codep++ & 0xff) << 16;
13435 a |= (*codep++ & 0xff) << 24;
5dd0794d 13436 b = *codep++ & 0xff;
52b15da3
JH
13437 b |= (*codep++ & 0xff) << 8;
13438 b |= (*codep++ & 0xff) << 16;
13439 b |= (*codep++ & 0xff) << 24;
13440 x = a + ((bfd_vma) b << 32);
13441#else
6608db57 13442 abort ();
5dd0794d 13443 x = 0;
52b15da3
JH
13444#endif
13445 return x;
13446}
13447
13448static bfd_signed_vma
26ca5450 13449get32 (void)
252b5132 13450{
52b15da3 13451 bfd_signed_vma x = 0;
252b5132
RH
13452
13453 FETCH_DATA (the_info, codep + 4);
52b15da3
JH
13454 x = *codep++ & (bfd_signed_vma) 0xff;
13455 x |= (*codep++ & (bfd_signed_vma) 0xff) << 8;
13456 x |= (*codep++ & (bfd_signed_vma) 0xff) << 16;
13457 x |= (*codep++ & (bfd_signed_vma) 0xff) << 24;
13458 return x;
13459}
13460
13461static bfd_signed_vma
26ca5450 13462get32s (void)
52b15da3
JH
13463{
13464 bfd_signed_vma x = 0;
13465
13466 FETCH_DATA (the_info, codep + 4);
13467 x = *codep++ & (bfd_signed_vma) 0xff;
13468 x |= (*codep++ & (bfd_signed_vma) 0xff) << 8;
13469 x |= (*codep++ & (bfd_signed_vma) 0xff) << 16;
13470 x |= (*codep++ & (bfd_signed_vma) 0xff) << 24;
13471
13472 x = (x ^ ((bfd_signed_vma) 1 << 31)) - ((bfd_signed_vma) 1 << 31);
13473
252b5132
RH
13474 return x;
13475}
13476
13477static int
26ca5450 13478get16 (void)
252b5132
RH
13479{
13480 int x = 0;
13481
13482 FETCH_DATA (the_info, codep + 2);
13483 x = *codep++ & 0xff;
13484 x |= (*codep++ & 0xff) << 8;
13485 return x;
13486}
13487
13488static void
26ca5450 13489set_op (bfd_vma op, int riprel)
252b5132
RH
13490{
13491 op_index[op_ad] = op_ad;
cb712a9e 13492 if (address_mode == mode_64bit)
7081ff04
AJ
13493 {
13494 op_address[op_ad] = op;
13495 op_riprel[op_ad] = riprel;
13496 }
13497 else
13498 {
13499 /* Mask to get a 32-bit address. */
13500 op_address[op_ad] = op & 0xffffffff;
13501 op_riprel[op_ad] = riprel & 0xffffffff;
13502 }
252b5132
RH
13503}
13504
13505static void
26ca5450 13506OP_REG (int code, int sizeflag)
252b5132 13507{
2da11e11 13508 const char *s;
9b60702d 13509 int add;
de882298
RM
13510
13511 switch (code)
13512 {
13513 case es_reg: case ss_reg: case cs_reg:
13514 case ds_reg: case fs_reg: case gs_reg:
13515 oappend (names_seg[code - es_reg]);
13516 return;
13517 }
13518
161a04f6
L
13519 USED_REX (REX_B);
13520 if (rex & REX_B)
52b15da3 13521 add = 8;
9b60702d
L
13522 else
13523 add = 0;
52b15da3
JH
13524
13525 switch (code)
13526 {
52b15da3
JH
13527 case ax_reg: case cx_reg: case dx_reg: case bx_reg:
13528 case sp_reg: case bp_reg: case si_reg: case di_reg:
13529 s = names16[code - ax_reg + add];
13530 break;
52b15da3
JH
13531 case al_reg: case ah_reg: case cl_reg: case ch_reg:
13532 case dl_reg: case dh_reg: case bl_reg: case bh_reg:
13533 USED_REX (0);
13534 if (rex)
13535 s = names8rex[code - al_reg + add];
13536 else
13537 s = names8[code - al_reg];
13538 break;
6439fc28
AM
13539 case rAX_reg: case rCX_reg: case rDX_reg: case rBX_reg:
13540 case rSP_reg: case rBP_reg: case rSI_reg: case rDI_reg:
7bb15c6f 13541 if (address_mode == mode_64bit
6c067bbb 13542 && ((sizeflag & DFLAG) || (rex & REX_W)))
6439fc28
AM
13543 {
13544 s = names64[code - rAX_reg + add];
13545 break;
13546 }
13547 code += eAX_reg - rAX_reg;
6608db57 13548 /* Fall through. */
52b15da3
JH
13549 case eAX_reg: case eCX_reg: case eDX_reg: case eBX_reg:
13550 case eSP_reg: case eBP_reg: case eSI_reg: case eDI_reg:
161a04f6
L
13551 USED_REX (REX_W);
13552 if (rex & REX_W)
52b15da3 13553 s = names64[code - eAX_reg + add];
52b15da3 13554 else
f16cd0d5
L
13555 {
13556 if (sizeflag & DFLAG)
13557 s = names32[code - eAX_reg + add];
13558 else
13559 s = names16[code - eAX_reg + add];
13560 used_prefixes |= (prefixes & PREFIX_DATA);
13561 }
52b15da3 13562 break;
52b15da3
JH
13563 default:
13564 s = INTERNAL_DISASSEMBLER_ERROR;
13565 break;
13566 }
13567 oappend (s);
13568}
13569
13570static void
26ca5450 13571OP_IMREG (int code, int sizeflag)
52b15da3
JH
13572{
13573 const char *s;
252b5132
RH
13574
13575 switch (code)
13576 {
13577 case indir_dx_reg:
d708bcba 13578 if (intel_syntax)
52fd6d94 13579 s = "dx";
d708bcba 13580 else
db6eb5be 13581 s = "(%dx)";
252b5132
RH
13582 break;
13583 case ax_reg: case cx_reg: case dx_reg: case bx_reg:
13584 case sp_reg: case bp_reg: case si_reg: case di_reg:
13585 s = names16[code - ax_reg];
13586 break;
13587 case es_reg: case ss_reg: case cs_reg:
13588 case ds_reg: case fs_reg: case gs_reg:
13589 s = names_seg[code - es_reg];
13590 break;
13591 case al_reg: case ah_reg: case cl_reg: case ch_reg:
13592 case dl_reg: case dh_reg: case bl_reg: case bh_reg:
52b15da3
JH
13593 USED_REX (0);
13594 if (rex)
13595 s = names8rex[code - al_reg];
13596 else
13597 s = names8[code - al_reg];
252b5132
RH
13598 break;
13599 case eAX_reg: case eCX_reg: case eDX_reg: case eBX_reg:
13600 case eSP_reg: case eBP_reg: case eSI_reg: case eDI_reg:
161a04f6
L
13601 USED_REX (REX_W);
13602 if (rex & REX_W)
52b15da3 13603 s = names64[code - eAX_reg];
252b5132 13604 else
f16cd0d5
L
13605 {
13606 if (sizeflag & DFLAG)
13607 s = names32[code - eAX_reg];
13608 else
13609 s = names16[code - eAX_reg];
13610 used_prefixes |= (prefixes & PREFIX_DATA);
13611 }
252b5132 13612 break;
52fd6d94 13613 case z_mode_ax_reg:
161a04f6 13614 if ((rex & REX_W) || (sizeflag & DFLAG))
52fd6d94
JB
13615 s = *names32;
13616 else
13617 s = *names16;
161a04f6 13618 if (!(rex & REX_W))
52fd6d94
JB
13619 used_prefixes |= (prefixes & PREFIX_DATA);
13620 break;
252b5132
RH
13621 default:
13622 s = INTERNAL_DISASSEMBLER_ERROR;
13623 break;
13624 }
13625 oappend (s);
13626}
13627
13628static void
26ca5450 13629OP_I (int bytemode, int sizeflag)
252b5132 13630{
52b15da3
JH
13631 bfd_signed_vma op;
13632 bfd_signed_vma mask = -1;
252b5132
RH
13633
13634 switch (bytemode)
13635 {
13636 case b_mode:
13637 FETCH_DATA (the_info, codep + 1);
52b15da3
JH
13638 op = *codep++;
13639 mask = 0xff;
13640 break;
13641 case q_mode:
cb712a9e 13642 if (address_mode == mode_64bit)
6439fc28
AM
13643 {
13644 op = get32s ();
13645 break;
13646 }
6608db57 13647 /* Fall through. */
252b5132 13648 case v_mode:
161a04f6
L
13649 USED_REX (REX_W);
13650 if (rex & REX_W)
52b15da3 13651 op = get32s ();
252b5132 13652 else
52b15da3 13653 {
f16cd0d5
L
13654 if (sizeflag & DFLAG)
13655 {
13656 op = get32 ();
13657 mask = 0xffffffff;
13658 }
13659 else
13660 {
13661 op = get16 ();
13662 mask = 0xfffff;
13663 }
13664 used_prefixes |= (prefixes & PREFIX_DATA);
52b15da3 13665 }
252b5132
RH
13666 break;
13667 case w_mode:
52b15da3 13668 mask = 0xfffff;
252b5132
RH
13669 op = get16 ();
13670 break;
9306ca4a
JB
13671 case const_1_mode:
13672 if (intel_syntax)
6c067bbb 13673 oappend ("1");
9306ca4a 13674 return;
252b5132
RH
13675 default:
13676 oappend (INTERNAL_DISASSEMBLER_ERROR);
13677 return;
13678 }
13679
52b15da3
JH
13680 op &= mask;
13681 scratchbuf[0] = '$';
d708bcba
AM
13682 print_operand_value (scratchbuf + 1, 1, op);
13683 oappend (scratchbuf + intel_syntax);
52b15da3
JH
13684 scratchbuf[0] = '\0';
13685}
13686
13687static void
26ca5450 13688OP_I64 (int bytemode, int sizeflag)
52b15da3
JH
13689{
13690 bfd_signed_vma op;
13691 bfd_signed_vma mask = -1;
13692
cb712a9e 13693 if (address_mode != mode_64bit)
6439fc28
AM
13694 {
13695 OP_I (bytemode, sizeflag);
13696 return;
13697 }
13698
52b15da3
JH
13699 switch (bytemode)
13700 {
13701 case b_mode:
13702 FETCH_DATA (the_info, codep + 1);
13703 op = *codep++;
13704 mask = 0xff;
13705 break;
13706 case v_mode:
161a04f6
L
13707 USED_REX (REX_W);
13708 if (rex & REX_W)
52b15da3 13709 op = get64 ();
52b15da3
JH
13710 else
13711 {
f16cd0d5
L
13712 if (sizeflag & DFLAG)
13713 {
13714 op = get32 ();
13715 mask = 0xffffffff;
13716 }
13717 else
13718 {
13719 op = get16 ();
13720 mask = 0xfffff;
13721 }
13722 used_prefixes |= (prefixes & PREFIX_DATA);
52b15da3 13723 }
52b15da3
JH
13724 break;
13725 case w_mode:
13726 mask = 0xfffff;
13727 op = get16 ();
13728 break;
13729 default:
13730 oappend (INTERNAL_DISASSEMBLER_ERROR);
13731 return;
13732 }
13733
13734 op &= mask;
13735 scratchbuf[0] = '$';
d708bcba
AM
13736 print_operand_value (scratchbuf + 1, 1, op);
13737 oappend (scratchbuf + intel_syntax);
252b5132
RH
13738 scratchbuf[0] = '\0';
13739}
13740
13741static void
26ca5450 13742OP_sI (int bytemode, int sizeflag)
252b5132 13743{
52b15da3 13744 bfd_signed_vma op;
252b5132
RH
13745
13746 switch (bytemode)
13747 {
13748 case b_mode:
e3949f17 13749 case b_T_mode:
252b5132
RH
13750 FETCH_DATA (the_info, codep + 1);
13751 op = *codep++;
13752 if ((op & 0x80) != 0)
13753 op -= 0x100;
e3949f17
L
13754 if (bytemode == b_T_mode)
13755 {
13756 if (address_mode != mode_64bit
7bb15c6f 13757 || !((sizeflag & DFLAG) || (rex & REX_W)))
e3949f17 13758 {
6c067bbb
RM
13759 /* The operand-size prefix is overridden by a REX prefix. */
13760 if ((sizeflag & DFLAG) || (rex & REX_W))
e3949f17
L
13761 op &= 0xffffffff;
13762 else
13763 op &= 0xffff;
13764 }
13765 }
13766 else
13767 {
13768 if (!(rex & REX_W))
13769 {
13770 if (sizeflag & DFLAG)
13771 op &= 0xffffffff;
13772 else
13773 op &= 0xffff;
13774 }
13775 }
252b5132
RH
13776 break;
13777 case v_mode:
7bb15c6f
RM
13778 /* The operand-size prefix is overridden by a REX prefix. */
13779 if ((sizeflag & DFLAG) || (rex & REX_W))
52b15da3 13780 op = get32s ();
252b5132 13781 else
d9e3625e 13782 op = get16 ();
252b5132
RH
13783 break;
13784 default:
13785 oappend (INTERNAL_DISASSEMBLER_ERROR);
13786 return;
13787 }
52b15da3
JH
13788
13789 scratchbuf[0] = '$';
13790 print_operand_value (scratchbuf + 1, 1, op);
d708bcba 13791 oappend (scratchbuf + intel_syntax);
252b5132
RH
13792}
13793
13794static void
26ca5450 13795OP_J (int bytemode, int sizeflag)
252b5132 13796{
52b15da3 13797 bfd_vma disp;
7081ff04 13798 bfd_vma mask = -1;
65ca155d 13799 bfd_vma segment = 0;
252b5132
RH
13800
13801 switch (bytemode)
13802 {
13803 case b_mode:
13804 FETCH_DATA (the_info, codep + 1);
13805 disp = *codep++;
13806 if ((disp & 0x80) != 0)
13807 disp -= 0x100;
13808 break;
13809 case v_mode:
f16cd0d5 13810 USED_REX (REX_W);
161a04f6 13811 if ((sizeflag & DFLAG) || (rex & REX_W))
52b15da3 13812 disp = get32s ();
252b5132
RH
13813 else
13814 {
13815 disp = get16 ();
206717e8
L
13816 if ((disp & 0x8000) != 0)
13817 disp -= 0x10000;
65ca155d
L
13818 /* In 16bit mode, address is wrapped around at 64k within
13819 the same segment. Otherwise, a data16 prefix on a jump
13820 instruction means that the pc is masked to 16 bits after
13821 the displacement is added! */
13822 mask = 0xffff;
13823 if ((prefixes & PREFIX_DATA) == 0)
13824 segment = ((start_pc + codep - start_codep)
13825 & ~((bfd_vma) 0xffff));
252b5132 13826 }
f16cd0d5
L
13827 if (!(rex & REX_W))
13828 used_prefixes |= (prefixes & PREFIX_DATA);
252b5132
RH
13829 break;
13830 default:
13831 oappend (INTERNAL_DISASSEMBLER_ERROR);
13832 return;
13833 }
42d5f9c6 13834 disp = ((start_pc + (codep - start_codep) + disp) & mask) | segment;
52b15da3
JH
13835 set_op (disp, 0);
13836 print_operand_value (scratchbuf, 1, disp);
252b5132
RH
13837 oappend (scratchbuf);
13838}
13839
252b5132 13840static void
ed7841b3 13841OP_SEG (int bytemode, int sizeflag)
252b5132 13842{
ed7841b3 13843 if (bytemode == w_mode)
7967e09e 13844 oappend (names_seg[modrm.reg]);
ed7841b3 13845 else
7967e09e 13846 OP_E (modrm.mod == 3 ? bytemode : w_mode, sizeflag);
252b5132
RH
13847}
13848
13849static void
26ca5450 13850OP_DIR (int dummy ATTRIBUTE_UNUSED, int sizeflag)
252b5132
RH
13851{
13852 int seg, offset;
13853
c608c12e 13854 if (sizeflag & DFLAG)
252b5132 13855 {
c608c12e
AM
13856 offset = get32 ();
13857 seg = get16 ();
252b5132 13858 }
c608c12e
AM
13859 else
13860 {
13861 offset = get16 ();
13862 seg = get16 ();
13863 }
7d421014 13864 used_prefixes |= (prefixes & PREFIX_DATA);
d708bcba 13865 if (intel_syntax)
3f31e633 13866 sprintf (scratchbuf, "0x%x:0x%x", seg, offset);
d708bcba
AM
13867 else
13868 sprintf (scratchbuf, "$0x%x,$0x%x", seg, offset);
c608c12e 13869 oappend (scratchbuf);
252b5132
RH
13870}
13871
252b5132 13872static void
3f31e633 13873OP_OFF (int bytemode, int sizeflag)
252b5132 13874{
52b15da3 13875 bfd_vma off;
252b5132 13876
3f31e633
JB
13877 if (intel_syntax && (sizeflag & SUFFIX_ALWAYS))
13878 intel_operand_size (bytemode, sizeflag);
252b5132
RH
13879 append_seg ();
13880
cb712a9e 13881 if ((sizeflag & AFLAG) || address_mode == mode_64bit)
252b5132
RH
13882 off = get32 ();
13883 else
13884 off = get16 ();
13885
13886 if (intel_syntax)
13887 {
13888 if (!(prefixes & (PREFIX_CS | PREFIX_SS | PREFIX_DS
db6eb5be 13889 | PREFIX_ES | PREFIX_FS | PREFIX_GS)))
252b5132 13890 {
d708bcba 13891 oappend (names_seg[ds_reg - es_reg]);
252b5132
RH
13892 oappend (":");
13893 }
13894 }
52b15da3
JH
13895 print_operand_value (scratchbuf, 1, off);
13896 oappend (scratchbuf);
13897}
6439fc28 13898
52b15da3 13899static void
3f31e633 13900OP_OFF64 (int bytemode, int sizeflag)
52b15da3
JH
13901{
13902 bfd_vma off;
13903
539e75ad
L
13904 if (address_mode != mode_64bit
13905 || (prefixes & PREFIX_ADDR))
6439fc28
AM
13906 {
13907 OP_OFF (bytemode, sizeflag);
13908 return;
13909 }
13910
3f31e633
JB
13911 if (intel_syntax && (sizeflag & SUFFIX_ALWAYS))
13912 intel_operand_size (bytemode, sizeflag);
52b15da3
JH
13913 append_seg ();
13914
6608db57 13915 off = get64 ();
52b15da3
JH
13916
13917 if (intel_syntax)
13918 {
13919 if (!(prefixes & (PREFIX_CS | PREFIX_SS | PREFIX_DS
db6eb5be 13920 | PREFIX_ES | PREFIX_FS | PREFIX_GS)))
52b15da3 13921 {
d708bcba 13922 oappend (names_seg[ds_reg - es_reg]);
52b15da3
JH
13923 oappend (":");
13924 }
13925 }
13926 print_operand_value (scratchbuf, 1, off);
252b5132
RH
13927 oappend (scratchbuf);
13928}
13929
13930static void
26ca5450 13931ptr_reg (int code, int sizeflag)
252b5132 13932{
2da11e11 13933 const char *s;
d708bcba 13934
1d9f512f 13935 *obufp++ = open_char;
20f0a1fc 13936 used_prefixes |= (prefixes & PREFIX_ADDR);
cb712a9e 13937 if (address_mode == mode_64bit)
c1a64871
JH
13938 {
13939 if (!(sizeflag & AFLAG))
db6eb5be 13940 s = names32[code - eAX_reg];
c1a64871 13941 else
db6eb5be 13942 s = names64[code - eAX_reg];
c1a64871 13943 }
52b15da3 13944 else if (sizeflag & AFLAG)
252b5132
RH
13945 s = names32[code - eAX_reg];
13946 else
13947 s = names16[code - eAX_reg];
13948 oappend (s);
1d9f512f
AM
13949 *obufp++ = close_char;
13950 *obufp = 0;
252b5132
RH
13951}
13952
13953static void
26ca5450 13954OP_ESreg (int code, int sizeflag)
252b5132 13955{
9306ca4a 13956 if (intel_syntax)
52fd6d94
JB
13957 {
13958 switch (codep[-1])
13959 {
13960 case 0x6d: /* insw/insl */
13961 intel_operand_size (z_mode, sizeflag);
13962 break;
13963 case 0xa5: /* movsw/movsl/movsq */
13964 case 0xa7: /* cmpsw/cmpsl/cmpsq */
13965 case 0xab: /* stosw/stosl */
13966 case 0xaf: /* scasw/scasl */
13967 intel_operand_size (v_mode, sizeflag);
13968 break;
13969 default:
13970 intel_operand_size (b_mode, sizeflag);
13971 }
13972 }
d708bcba 13973 oappend ("%es:" + intel_syntax);
252b5132
RH
13974 ptr_reg (code, sizeflag);
13975}
13976
13977static void
26ca5450 13978OP_DSreg (int code, int sizeflag)
252b5132 13979{
9306ca4a 13980 if (intel_syntax)
52fd6d94
JB
13981 {
13982 switch (codep[-1])
13983 {
13984 case 0x6f: /* outsw/outsl */
13985 intel_operand_size (z_mode, sizeflag);
13986 break;
13987 case 0xa5: /* movsw/movsl/movsq */
13988 case 0xa7: /* cmpsw/cmpsl/cmpsq */
13989 case 0xad: /* lodsw/lodsl/lodsq */
13990 intel_operand_size (v_mode, sizeflag);
13991 break;
13992 default:
13993 intel_operand_size (b_mode, sizeflag);
13994 }
13995 }
252b5132
RH
13996 if ((prefixes
13997 & (PREFIX_CS
13998 | PREFIX_DS
13999 | PREFIX_SS
14000 | PREFIX_ES
14001 | PREFIX_FS
14002 | PREFIX_GS)) == 0)
14003 prefixes |= PREFIX_DS;
6608db57 14004 append_seg ();
252b5132
RH
14005 ptr_reg (code, sizeflag);
14006}
14007
252b5132 14008static void
26ca5450 14009OP_C (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 14010{
9b60702d 14011 int add;
161a04f6 14012 if (rex & REX_R)
c4a530c5 14013 {
161a04f6 14014 USED_REX (REX_R);
c4a530c5
JB
14015 add = 8;
14016 }
cb712a9e 14017 else if (address_mode != mode_64bit && (prefixes & PREFIX_LOCK))
c4a530c5 14018 {
f16cd0d5 14019 all_prefixes[last_lock_prefix] = 0;
c4a530c5
JB
14020 used_prefixes |= PREFIX_LOCK;
14021 add = 8;
14022 }
9b60702d
L
14023 else
14024 add = 0;
7967e09e 14025 sprintf (scratchbuf, "%%cr%d", modrm.reg + add);
d708bcba 14026 oappend (scratchbuf + intel_syntax);
252b5132
RH
14027}
14028
252b5132 14029static void
26ca5450 14030OP_D (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 14031{
9b60702d 14032 int add;
161a04f6
L
14033 USED_REX (REX_R);
14034 if (rex & REX_R)
52b15da3 14035 add = 8;
9b60702d
L
14036 else
14037 add = 0;
d708bcba 14038 if (intel_syntax)
7967e09e 14039 sprintf (scratchbuf, "db%d", modrm.reg + add);
d708bcba 14040 else
7967e09e 14041 sprintf (scratchbuf, "%%db%d", modrm.reg + add);
252b5132
RH
14042 oappend (scratchbuf);
14043}
14044
252b5132 14045static void
26ca5450 14046OP_T (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 14047{
7967e09e 14048 sprintf (scratchbuf, "%%tr%d", modrm.reg);
d708bcba 14049 oappend (scratchbuf + intel_syntax);
252b5132
RH
14050}
14051
14052static void
6f74c397 14053OP_R (int bytemode, int sizeflag)
252b5132 14054{
7967e09e 14055 if (modrm.mod == 3)
2da11e11
AM
14056 OP_E (bytemode, sizeflag);
14057 else
6608db57 14058 BadOp ();
252b5132
RH
14059}
14060
14061static void
26ca5450 14062OP_MMX (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 14063{
b9733481
L
14064 int reg = modrm.reg;
14065 const char **names;
14066
041bd2e0
JH
14067 used_prefixes |= (prefixes & PREFIX_DATA);
14068 if (prefixes & PREFIX_DATA)
20f0a1fc 14069 {
b9733481 14070 names = names_xmm;
161a04f6
L
14071 USED_REX (REX_R);
14072 if (rex & REX_R)
b9733481 14073 reg += 8;
20f0a1fc 14074 }
041bd2e0 14075 else
b9733481
L
14076 names = names_mm;
14077 oappend (names[reg]);
252b5132
RH
14078}
14079
c608c12e 14080static void
c0f3af97 14081OP_XMM (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
c608c12e 14082{
b9733481
L
14083 int reg = modrm.reg;
14084 const char **names;
14085
161a04f6
L
14086 USED_REX (REX_R);
14087 if (rex & REX_R)
b9733481 14088 reg += 8;
539f890d
L
14089 if (need_vex
14090 && bytemode != xmm_mode
14091 && bytemode != scalar_mode)
c0f3af97
L
14092 {
14093 switch (vex.length)
14094 {
14095 case 128:
b9733481 14096 names = names_xmm;
c0f3af97
L
14097 break;
14098 case 256:
6c30d220
L
14099 if (vex.w || bytemode != vex_vsib_q_w_dq_mode)
14100 names = names_ymm;
14101 else
14102 names = names_xmm;
c0f3af97
L
14103 break;
14104 default:
14105 abort ();
14106 }
14107 }
14108 else
b9733481
L
14109 names = names_xmm;
14110 oappend (names[reg]);
c608c12e
AM
14111}
14112
252b5132 14113static void
26ca5450 14114OP_EM (int bytemode, int sizeflag)
252b5132 14115{
b9733481
L
14116 int reg;
14117 const char **names;
14118
7967e09e 14119 if (modrm.mod != 3)
252b5132 14120 {
b6169b20
L
14121 if (intel_syntax
14122 && (bytemode == v_mode || bytemode == v_swap_mode))
9306ca4a
JB
14123 {
14124 bytemode = (prefixes & PREFIX_DATA) ? x_mode : q_mode;
14125 used_prefixes |= (prefixes & PREFIX_DATA);
6c067bbb 14126 }
252b5132
RH
14127 OP_E (bytemode, sizeflag);
14128 return;
14129 }
14130
b6169b20
L
14131 if ((sizeflag & SUFFIX_ALWAYS) && bytemode == v_swap_mode)
14132 swap_operand ();
14133
6608db57 14134 /* Skip mod/rm byte. */
4bba6815 14135 MODRM_CHECK;
252b5132 14136 codep++;
041bd2e0 14137 used_prefixes |= (prefixes & PREFIX_DATA);
b9733481 14138 reg = modrm.rm;
041bd2e0 14139 if (prefixes & PREFIX_DATA)
20f0a1fc 14140 {
b9733481 14141 names = names_xmm;
161a04f6
L
14142 USED_REX (REX_B);
14143 if (rex & REX_B)
b9733481 14144 reg += 8;
20f0a1fc 14145 }
041bd2e0 14146 else
b9733481
L
14147 names = names_mm;
14148 oappend (names[reg]);
252b5132
RH
14149}
14150
246c51aa
L
14151/* cvt* are the only instructions in sse2 which have
14152 both SSE and MMX operands and also have 0x66 prefix
14153 in their opcode. 0x66 was originally used to differentiate
14154 between SSE and MMX instruction(operands). So we have to handle the
4d9567e0
MM
14155 cvt* separately using OP_EMC and OP_MXC */
14156static void
14157OP_EMC (int bytemode, int sizeflag)
14158{
7967e09e 14159 if (modrm.mod != 3)
4d9567e0
MM
14160 {
14161 if (intel_syntax && bytemode == v_mode)
14162 {
14163 bytemode = (prefixes & PREFIX_DATA) ? x_mode : q_mode;
14164 used_prefixes |= (prefixes & PREFIX_DATA);
6c067bbb 14165 }
4d9567e0
MM
14166 OP_E (bytemode, sizeflag);
14167 return;
14168 }
246c51aa 14169
4d9567e0
MM
14170 /* Skip mod/rm byte. */
14171 MODRM_CHECK;
14172 codep++;
14173 used_prefixes |= (prefixes & PREFIX_DATA);
b9733481 14174 oappend (names_mm[modrm.rm]);
4d9567e0
MM
14175}
14176
14177static void
14178OP_MXC (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
14179{
14180 used_prefixes |= (prefixes & PREFIX_DATA);
b9733481 14181 oappend (names_mm[modrm.reg]);
4d9567e0
MM
14182}
14183
c608c12e 14184static void
26ca5450 14185OP_EX (int bytemode, int sizeflag)
c608c12e 14186{
b9733481
L
14187 int reg;
14188 const char **names;
d6f574e0
L
14189
14190 /* Skip mod/rm byte. */
14191 MODRM_CHECK;
14192 codep++;
14193
7967e09e 14194 if (modrm.mod != 3)
c608c12e 14195 {
c1e679ec 14196 OP_E_memory (bytemode, sizeflag);
c608c12e
AM
14197 return;
14198 }
d6f574e0 14199
b9733481 14200 reg = modrm.rm;
161a04f6
L
14201 USED_REX (REX_B);
14202 if (rex & REX_B)
b9733481 14203 reg += 8;
c608c12e 14204
b6169b20 14205 if ((sizeflag & SUFFIX_ALWAYS)
fa99fab2
L
14206 && (bytemode == x_swap_mode
14207 || bytemode == d_swap_mode
7bb15c6f 14208 || bytemode == d_scalar_swap_mode
539f890d
L
14209 || bytemode == q_swap_mode
14210 || bytemode == q_scalar_swap_mode))
b6169b20
L
14211 swap_operand ();
14212
c0f3af97
L
14213 if (need_vex
14214 && bytemode != xmm_mode
6c30d220
L
14215 && bytemode != xmmdw_mode
14216 && bytemode != xmmqd_mode
14217 && bytemode != xmm_mb_mode
14218 && bytemode != xmm_mw_mode
14219 && bytemode != xmm_md_mode
14220 && bytemode != xmm_mq_mode
539f890d
L
14221 && bytemode != xmmq_mode
14222 && bytemode != d_scalar_mode
7bb15c6f 14223 && bytemode != d_scalar_swap_mode
539f890d 14224 && bytemode != q_scalar_mode
1c480963
L
14225 && bytemode != q_scalar_swap_mode
14226 && bytemode != vex_scalar_w_dq_mode)
c0f3af97
L
14227 {
14228 switch (vex.length)
14229 {
14230 case 128:
b9733481 14231 names = names_xmm;
c0f3af97
L
14232 break;
14233 case 256:
b9733481 14234 names = names_ymm;
c0f3af97
L
14235 break;
14236 default:
14237 abort ();
14238 }
14239 }
14240 else
b9733481
L
14241 names = names_xmm;
14242 oappend (names[reg]);
c608c12e
AM
14243}
14244
252b5132 14245static void
26ca5450 14246OP_MS (int bytemode, int sizeflag)
252b5132 14247{
7967e09e 14248 if (modrm.mod == 3)
2da11e11
AM
14249 OP_EM (bytemode, sizeflag);
14250 else
6608db57 14251 BadOp ();
252b5132
RH
14252}
14253
992aaec9 14254static void
26ca5450 14255OP_XS (int bytemode, int sizeflag)
992aaec9 14256{
7967e09e 14257 if (modrm.mod == 3)
992aaec9
AM
14258 OP_EX (bytemode, sizeflag);
14259 else
6608db57 14260 BadOp ();
992aaec9
AM
14261}
14262
cc0ec051
AM
14263static void
14264OP_M (int bytemode, int sizeflag)
14265{
7967e09e 14266 if (modrm.mod == 3)
75413a22
L
14267 /* bad bound,lea,lds,les,lfs,lgs,lss,cmpxchg8b,vmptrst modrm */
14268 BadOp ();
cc0ec051
AM
14269 else
14270 OP_E (bytemode, sizeflag);
14271}
14272
14273static void
14274OP_0f07 (int bytemode, int sizeflag)
14275{
7967e09e 14276 if (modrm.mod != 3 || modrm.rm != 0)
cc0ec051
AM
14277 BadOp ();
14278 else
14279 OP_E (bytemode, sizeflag);
14280}
14281
46e883c5 14282/* NOP is an alias of "xchg %ax,%ax" in 16bit mode, "xchg %eax,%eax" in
246c51aa 14283 32bit mode and "xchg %rax,%rax" in 64bit mode. */
46e883c5 14284
cc0ec051 14285static void
46e883c5 14286NOP_Fixup1 (int bytemode, int sizeflag)
cc0ec051 14287{
8b38ad71
L
14288 if ((prefixes & PREFIX_DATA) != 0
14289 || (rex != 0
14290 && rex != 0x48
14291 && address_mode == mode_64bit))
46e883c5
L
14292 OP_REG (bytemode, sizeflag);
14293 else
14294 strcpy (obuf, "nop");
14295}
14296
14297static void
14298NOP_Fixup2 (int bytemode, int sizeflag)
14299{
8b38ad71
L
14300 if ((prefixes & PREFIX_DATA) != 0
14301 || (rex != 0
14302 && rex != 0x48
14303 && address_mode == mode_64bit))
46e883c5 14304 OP_IMREG (bytemode, sizeflag);
cc0ec051
AM
14305}
14306
84037f8c 14307static const char *const Suffix3DNow[] = {
252b5132
RH
14308/* 00 */ NULL, NULL, NULL, NULL,
14309/* 04 */ NULL, NULL, NULL, NULL,
14310/* 08 */ NULL, NULL, NULL, NULL,
9e525108 14311/* 0C */ "pi2fw", "pi2fd", NULL, NULL,
252b5132
RH
14312/* 10 */ NULL, NULL, NULL, NULL,
14313/* 14 */ NULL, NULL, NULL, NULL,
14314/* 18 */ NULL, NULL, NULL, NULL,
9e525108 14315/* 1C */ "pf2iw", "pf2id", NULL, NULL,
252b5132
RH
14316/* 20 */ NULL, NULL, NULL, NULL,
14317/* 24 */ NULL, NULL, NULL, NULL,
14318/* 28 */ NULL, NULL, NULL, NULL,
14319/* 2C */ NULL, NULL, NULL, NULL,
14320/* 30 */ NULL, NULL, NULL, NULL,
14321/* 34 */ NULL, NULL, NULL, NULL,
14322/* 38 */ NULL, NULL, NULL, NULL,
14323/* 3C */ NULL, NULL, NULL, NULL,
14324/* 40 */ NULL, NULL, NULL, NULL,
14325/* 44 */ NULL, NULL, NULL, NULL,
14326/* 48 */ NULL, NULL, NULL, NULL,
14327/* 4C */ NULL, NULL, NULL, NULL,
14328/* 50 */ NULL, NULL, NULL, NULL,
14329/* 54 */ NULL, NULL, NULL, NULL,
14330/* 58 */ NULL, NULL, NULL, NULL,
14331/* 5C */ NULL, NULL, NULL, NULL,
14332/* 60 */ NULL, NULL, NULL, NULL,
14333/* 64 */ NULL, NULL, NULL, NULL,
14334/* 68 */ NULL, NULL, NULL, NULL,
14335/* 6C */ NULL, NULL, NULL, NULL,
14336/* 70 */ NULL, NULL, NULL, NULL,
14337/* 74 */ NULL, NULL, NULL, NULL,
14338/* 78 */ NULL, NULL, NULL, NULL,
14339/* 7C */ NULL, NULL, NULL, NULL,
14340/* 80 */ NULL, NULL, NULL, NULL,
14341/* 84 */ NULL, NULL, NULL, NULL,
9e525108
AM
14342/* 88 */ NULL, NULL, "pfnacc", NULL,
14343/* 8C */ NULL, NULL, "pfpnacc", NULL,
252b5132
RH
14344/* 90 */ "pfcmpge", NULL, NULL, NULL,
14345/* 94 */ "pfmin", NULL, "pfrcp", "pfrsqrt",
14346/* 98 */ NULL, NULL, "pfsub", NULL,
14347/* 9C */ NULL, NULL, "pfadd", NULL,
14348/* A0 */ "pfcmpgt", NULL, NULL, NULL,
14349/* A4 */ "pfmax", NULL, "pfrcpit1", "pfrsqit1",
14350/* A8 */ NULL, NULL, "pfsubr", NULL,
14351/* AC */ NULL, NULL, "pfacc", NULL,
14352/* B0 */ "pfcmpeq", NULL, NULL, NULL,
9beff690 14353/* B4 */ "pfmul", NULL, "pfrcpit2", "pmulhrw",
9e525108 14354/* B8 */ NULL, NULL, NULL, "pswapd",
252b5132
RH
14355/* BC */ NULL, NULL, NULL, "pavgusb",
14356/* C0 */ NULL, NULL, NULL, NULL,
14357/* C4 */ NULL, NULL, NULL, NULL,
14358/* C8 */ NULL, NULL, NULL, NULL,
14359/* CC */ NULL, NULL, NULL, NULL,
14360/* D0 */ NULL, NULL, NULL, NULL,
14361/* D4 */ NULL, NULL, NULL, NULL,
14362/* D8 */ NULL, NULL, NULL, NULL,
14363/* DC */ NULL, NULL, NULL, NULL,
14364/* E0 */ NULL, NULL, NULL, NULL,
14365/* E4 */ NULL, NULL, NULL, NULL,
14366/* E8 */ NULL, NULL, NULL, NULL,
14367/* EC */ NULL, NULL, NULL, NULL,
14368/* F0 */ NULL, NULL, NULL, NULL,
14369/* F4 */ NULL, NULL, NULL, NULL,
14370/* F8 */ NULL, NULL, NULL, NULL,
14371/* FC */ NULL, NULL, NULL, NULL,
14372};
14373
14374static void
26ca5450 14375OP_3DNowSuffix (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132
RH
14376{
14377 const char *mnemonic;
14378
14379 FETCH_DATA (the_info, codep + 1);
14380 /* AMD 3DNow! instructions are specified by an opcode suffix in the
14381 place where an 8-bit immediate would normally go. ie. the last
14382 byte of the instruction. */
ea397f5b 14383 obufp = mnemonicendp;
c608c12e 14384 mnemonic = Suffix3DNow[*codep++ & 0xff];
252b5132 14385 if (mnemonic)
2da11e11 14386 oappend (mnemonic);
252b5132
RH
14387 else
14388 {
14389 /* Since a variable sized modrm/sib chunk is between the start
14390 of the opcode (0x0f0f) and the opcode suffix, we need to do
14391 all the modrm processing first, and don't know until now that
14392 we have a bad opcode. This necessitates some cleaning up. */
ce518a5f
L
14393 op_out[0][0] = '\0';
14394 op_out[1][0] = '\0';
6608db57 14395 BadOp ();
252b5132 14396 }
ea397f5b 14397 mnemonicendp = obufp;
252b5132 14398}
c608c12e 14399
ea397f5b
L
14400static struct op simd_cmp_op[] =
14401{
14402 { STRING_COMMA_LEN ("eq") },
14403 { STRING_COMMA_LEN ("lt") },
14404 { STRING_COMMA_LEN ("le") },
14405 { STRING_COMMA_LEN ("unord") },
14406 { STRING_COMMA_LEN ("neq") },
14407 { STRING_COMMA_LEN ("nlt") },
14408 { STRING_COMMA_LEN ("nle") },
14409 { STRING_COMMA_LEN ("ord") }
c608c12e
AM
14410};
14411
14412static void
ad19981d 14413CMP_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
c608c12e
AM
14414{
14415 unsigned int cmp_type;
14416
14417 FETCH_DATA (the_info, codep + 1);
14418 cmp_type = *codep++ & 0xff;
c0f3af97 14419 if (cmp_type < ARRAY_SIZE (simd_cmp_op))
c608c12e 14420 {
ad19981d 14421 char suffix [3];
ea397f5b 14422 char *p = mnemonicendp - 2;
ad19981d
L
14423 suffix[0] = p[0];
14424 suffix[1] = p[1];
14425 suffix[2] = '\0';
ea397f5b
L
14426 sprintf (p, "%s%s", simd_cmp_op[cmp_type].name, suffix);
14427 mnemonicendp += simd_cmp_op[cmp_type].len;
c608c12e
AM
14428 }
14429 else
14430 {
ad19981d
L
14431 /* We have a reserved extension byte. Output it directly. */
14432 scratchbuf[0] = '$';
14433 print_operand_value (scratchbuf + 1, 1, cmp_type);
14434 oappend (scratchbuf + intel_syntax);
14435 scratchbuf[0] = '\0';
c608c12e
AM
14436 }
14437}
14438
ca164297 14439static void
b844680a
L
14440OP_Mwait (int bytemode ATTRIBUTE_UNUSED,
14441 int sizeflag ATTRIBUTE_UNUSED)
14442{
14443 /* mwait %eax,%ecx */
14444 if (!intel_syntax)
14445 {
14446 const char **names = (address_mode == mode_64bit
14447 ? names64 : names32);
14448 strcpy (op_out[0], names[0]);
14449 strcpy (op_out[1], names[1]);
14450 two_source_ops = 1;
14451 }
14452 /* Skip mod/rm byte. */
14453 MODRM_CHECK;
14454 codep++;
14455}
14456
14457static void
14458OP_Monitor (int bytemode ATTRIBUTE_UNUSED,
14459 int sizeflag ATTRIBUTE_UNUSED)
ca164297 14460{
b844680a
L
14461 /* monitor %eax,%ecx,%edx" */
14462 if (!intel_syntax)
ca164297 14463 {
b844680a 14464 const char **op1_names;
cb712a9e
L
14465 const char **names = (address_mode == mode_64bit
14466 ? names64 : names32);
1d9f512f 14467
b844680a
L
14468 if (!(prefixes & PREFIX_ADDR))
14469 op1_names = (address_mode == mode_16bit
14470 ? names16 : names);
ca164297
L
14471 else
14472 {
b844680a 14473 /* Remove "addr16/addr32". */
f16cd0d5 14474 all_prefixes[last_addr_prefix] = 0;
b844680a
L
14475 op1_names = (address_mode != mode_32bit
14476 ? names32 : names16);
14477 used_prefixes |= PREFIX_ADDR;
ca164297 14478 }
b844680a
L
14479 strcpy (op_out[0], op1_names[0]);
14480 strcpy (op_out[1], names[1]);
14481 strcpy (op_out[2], names[2]);
14482 two_source_ops = 1;
ca164297 14483 }
b844680a
L
14484 /* Skip mod/rm byte. */
14485 MODRM_CHECK;
14486 codep++;
30123838
JB
14487}
14488
6608db57
KH
14489static void
14490BadOp (void)
2da11e11 14491{
6608db57
KH
14492 /* Throw away prefixes and 1st. opcode byte. */
14493 codep = insn_codep + 1;
2da11e11
AM
14494 oappend ("(bad)");
14495}
4cc91dba 14496
35c52694
L
14497static void
14498REP_Fixup (int bytemode, int sizeflag)
14499{
14500 /* The 0xf3 prefix should be displayed as "rep" for ins, outs, movs,
14501 lods and stos. */
35c52694 14502 if (prefixes & PREFIX_REPZ)
f16cd0d5 14503 all_prefixes[last_repz_prefix] = REP_PREFIX;
35c52694
L
14504
14505 switch (bytemode)
14506 {
14507 case al_reg:
14508 case eAX_reg:
14509 case indir_dx_reg:
14510 OP_IMREG (bytemode, sizeflag);
14511 break;
14512 case eDI_reg:
14513 OP_ESreg (bytemode, sizeflag);
14514 break;
14515 case eSI_reg:
14516 OP_DSreg (bytemode, sizeflag);
14517 break;
14518 default:
14519 abort ();
14520 break;
14521 }
14522}
f5804c90 14523
42164a71
L
14524/* Similar to OP_E. But the 0xf2/0xf3 prefixes should be displayed as
14525 "xacquire"/"xrelease" for memory operand if there is a LOCK prefix.
14526 */
14527
14528static void
14529HLE_Fixup1 (int bytemode, int sizeflag)
14530{
14531 if (modrm.mod != 3
14532 && (prefixes & PREFIX_LOCK) != 0)
14533 {
14534 if (prefixes & PREFIX_REPZ)
14535 all_prefixes[last_repz_prefix] = XRELEASE_PREFIX;
14536 if (prefixes & PREFIX_REPNZ)
14537 all_prefixes[last_repnz_prefix] = XACQUIRE_PREFIX;
14538 }
14539
14540 OP_E (bytemode, sizeflag);
14541}
14542
14543/* Similar to OP_E. But the 0xf2/0xf3 prefixes should be displayed as
14544 "xacquire"/"xrelease" for memory operand. No check for LOCK prefix.
14545 */
14546
14547static void
14548HLE_Fixup2 (int bytemode, int sizeflag)
14549{
14550 if (modrm.mod != 3)
14551 {
14552 if (prefixes & PREFIX_REPZ)
14553 all_prefixes[last_repz_prefix] = XRELEASE_PREFIX;
14554 if (prefixes & PREFIX_REPNZ)
14555 all_prefixes[last_repnz_prefix] = XACQUIRE_PREFIX;
14556 }
14557
14558 OP_E (bytemode, sizeflag);
14559}
14560
14561/* Similar to OP_E. But the 0xf3 prefixes should be displayed as
14562 "xrelease" for memory operand. No check for LOCK prefix. */
14563
14564static void
14565HLE_Fixup3 (int bytemode, int sizeflag)
14566{
14567 if (modrm.mod != 3
14568 && last_repz_prefix > last_repnz_prefix
14569 && (prefixes & PREFIX_REPZ) != 0)
14570 all_prefixes[last_repz_prefix] = XRELEASE_PREFIX;
14571
14572 OP_E (bytemode, sizeflag);
14573}
14574
f5804c90
L
14575static void
14576CMPXCHG8B_Fixup (int bytemode, int sizeflag)
14577{
161a04f6
L
14578 USED_REX (REX_W);
14579 if (rex & REX_W)
f5804c90
L
14580 {
14581 /* Change cmpxchg8b to cmpxchg16b. */
ea397f5b
L
14582 char *p = mnemonicendp - 2;
14583 mnemonicendp = stpcpy (p, "16b");
fb9c77c7 14584 bytemode = o_mode;
f5804c90 14585 }
42164a71
L
14586 else if ((prefixes & PREFIX_LOCK) != 0)
14587 {
14588 if (prefixes & PREFIX_REPZ)
14589 all_prefixes[last_repz_prefix] = XRELEASE_PREFIX;
14590 if (prefixes & PREFIX_REPNZ)
14591 all_prefixes[last_repnz_prefix] = XACQUIRE_PREFIX;
14592 }
14593
f5804c90
L
14594 OP_M (bytemode, sizeflag);
14595}
42903f7f
L
14596
14597static void
14598XMM_Fixup (int reg, int sizeflag ATTRIBUTE_UNUSED)
14599{
b9733481
L
14600 const char **names;
14601
c0f3af97
L
14602 if (need_vex)
14603 {
14604 switch (vex.length)
14605 {
14606 case 128:
b9733481 14607 names = names_xmm;
c0f3af97
L
14608 break;
14609 case 256:
b9733481 14610 names = names_ymm;
c0f3af97
L
14611 break;
14612 default:
14613 abort ();
14614 }
14615 }
14616 else
b9733481
L
14617 names = names_xmm;
14618 oappend (names[reg]);
42903f7f 14619}
381d071f
L
14620
14621static void
14622CRC32_Fixup (int bytemode, int sizeflag)
14623{
14624 /* Add proper suffix to "crc32". */
ea397f5b 14625 char *p = mnemonicendp;
381d071f
L
14626
14627 switch (bytemode)
14628 {
14629 case b_mode:
20592a94 14630 if (intel_syntax)
ea397f5b 14631 goto skip;
20592a94 14632
381d071f
L
14633 *p++ = 'b';
14634 break;
14635 case v_mode:
20592a94 14636 if (intel_syntax)
ea397f5b 14637 goto skip;
20592a94 14638
381d071f
L
14639 USED_REX (REX_W);
14640 if (rex & REX_W)
14641 *p++ = 'q';
7bb15c6f 14642 else
f16cd0d5
L
14643 {
14644 if (sizeflag & DFLAG)
14645 *p++ = 'l';
14646 else
14647 *p++ = 'w';
14648 used_prefixes |= (prefixes & PREFIX_DATA);
14649 }
381d071f
L
14650 break;
14651 default:
14652 oappend (INTERNAL_DISASSEMBLER_ERROR);
14653 break;
14654 }
ea397f5b 14655 mnemonicendp = p;
381d071f
L
14656 *p = '\0';
14657
ea397f5b 14658skip:
381d071f
L
14659 if (modrm.mod == 3)
14660 {
14661 int add;
14662
14663 /* Skip mod/rm byte. */
14664 MODRM_CHECK;
14665 codep++;
14666
14667 USED_REX (REX_B);
14668 add = (rex & REX_B) ? 8 : 0;
14669 if (bytemode == b_mode)
14670 {
14671 USED_REX (0);
14672 if (rex)
14673 oappend (names8rex[modrm.rm + add]);
14674 else
14675 oappend (names8[modrm.rm + add]);
14676 }
14677 else
14678 {
14679 USED_REX (REX_W);
14680 if (rex & REX_W)
14681 oappend (names64[modrm.rm + add]);
14682 else if ((prefixes & PREFIX_DATA))
14683 oappend (names16[modrm.rm + add]);
14684 else
14685 oappend (names32[modrm.rm + add]);
14686 }
14687 }
14688 else
9344ff29 14689 OP_E (bytemode, sizeflag);
381d071f 14690}
85f10a01 14691
eacc9c89
L
14692static void
14693FXSAVE_Fixup (int bytemode, int sizeflag)
14694{
14695 /* Add proper suffix to "fxsave" and "fxrstor". */
14696 USED_REX (REX_W);
14697 if (rex & REX_W)
14698 {
14699 char *p = mnemonicendp;
14700 *p++ = '6';
14701 *p++ = '4';
14702 *p = '\0';
14703 mnemonicendp = p;
14704 }
14705 OP_M (bytemode, sizeflag);
14706}
14707
c0f3af97
L
14708/* Display the destination register operand for instructions with
14709 VEX. */
14710
14711static void
14712OP_VEX (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
14713{
539f890d 14714 int reg;
b9733481
L
14715 const char **names;
14716
c0f3af97
L
14717 if (!need_vex)
14718 abort ();
14719
14720 if (!need_vex_reg)
14721 return;
14722
539f890d
L
14723 reg = vex.register_specifier;
14724 if (bytemode == vex_scalar_mode)
14725 {
14726 oappend (names_xmm[reg]);
14727 return;
14728 }
14729
c0f3af97
L
14730 switch (vex.length)
14731 {
14732 case 128:
14733 switch (bytemode)
14734 {
14735 case vex_mode:
14736 case vex128_mode:
6c30d220 14737 case vex_vsib_q_w_dq_mode:
cb21baef
L
14738 names = names_xmm;
14739 break;
14740 case dq_mode:
14741 if (vex.w)
14742 names = names64;
14743 else
14744 names = names32;
c0f3af97
L
14745 break;
14746 default:
14747 abort ();
14748 return;
14749 }
c0f3af97
L
14750 break;
14751 case 256:
14752 switch (bytemode)
14753 {
14754 case vex_mode:
14755 case vex256_mode:
6c30d220
L
14756 names = names_ymm;
14757 break;
14758 case vex_vsib_q_w_dq_mode:
14759 names = vex.w ? names_ymm : names_xmm;
c0f3af97
L
14760 break;
14761 default:
14762 abort ();
14763 return;
14764 }
c0f3af97
L
14765 break;
14766 default:
14767 abort ();
14768 break;
14769 }
539f890d 14770 oappend (names[reg]);
c0f3af97
L
14771}
14772
922d8de8
DR
14773/* Get the VEX immediate byte without moving codep. */
14774
14775static unsigned char
ccc5981b 14776get_vex_imm8 (int sizeflag, int opnum)
922d8de8
DR
14777{
14778 int bytes_before_imm = 0;
14779
922d8de8
DR
14780 if (modrm.mod != 3)
14781 {
14782 /* There are SIB/displacement bytes. */
14783 if ((sizeflag & AFLAG) || address_mode == mode_64bit)
6c067bbb 14784 {
922d8de8 14785 /* 32/64 bit address mode */
6c067bbb 14786 int base = modrm.rm;
922d8de8
DR
14787
14788 /* Check SIB byte. */
6c067bbb
RM
14789 if (base == 4)
14790 {
14791 FETCH_DATA (the_info, codep + 1);
14792 base = *codep & 7;
14793 /* When decoding the third source, don't increase
14794 bytes_before_imm as this has already been incremented
14795 by one in OP_E_memory while decoding the second
14796 source operand. */
14797 if (opnum == 0)
14798 bytes_before_imm++;
14799 }
14800
14801 /* Don't increase bytes_before_imm when decoding the third source,
14802 it has already been incremented by OP_E_memory while decoding
14803 the second source operand. */
14804 if (opnum == 0)
14805 {
14806 switch (modrm.mod)
14807 {
14808 case 0:
14809 /* When modrm.rm == 5 or modrm.rm == 4 and base in
14810 SIB == 5, there is a 4 byte displacement. */
14811 if (base != 5)
14812 /* No displacement. */
14813 break;
14814 case 2:
14815 /* 4 byte displacement. */
14816 bytes_before_imm += 4;
14817 break;
14818 case 1:
14819 /* 1 byte displacement. */
14820 bytes_before_imm++;
14821 break;
14822 }
14823 }
14824 }
922d8de8 14825 else
02e647f9
SP
14826 {
14827 /* 16 bit address mode */
6c067bbb
RM
14828 /* Don't increase bytes_before_imm when decoding the third source,
14829 it has already been incremented by OP_E_memory while decoding
14830 the second source operand. */
14831 if (opnum == 0)
14832 {
02e647f9
SP
14833 switch (modrm.mod)
14834 {
14835 case 0:
14836 /* When modrm.rm == 6, there is a 2 byte displacement. */
14837 if (modrm.rm != 6)
14838 /* No displacement. */
14839 break;
14840 case 2:
14841 /* 2 byte displacement. */
14842 bytes_before_imm += 2;
14843 break;
14844 case 1:
14845 /* 1 byte displacement: when decoding the third source,
14846 don't increase bytes_before_imm as this has already
14847 been incremented by one in OP_E_memory while decoding
14848 the second source operand. */
14849 if (opnum == 0)
14850 bytes_before_imm++;
ccc5981b 14851
02e647f9
SP
14852 break;
14853 }
922d8de8
DR
14854 }
14855 }
14856 }
14857
14858 FETCH_DATA (the_info, codep + bytes_before_imm + 1);
14859 return codep [bytes_before_imm];
14860}
14861
14862static void
14863OP_EX_VexReg (int bytemode, int sizeflag, int reg)
14864{
b9733481
L
14865 const char **names;
14866
922d8de8
DR
14867 if (reg == -1 && modrm.mod != 3)
14868 {
14869 OP_E_memory (bytemode, sizeflag);
14870 return;
14871 }
14872 else
14873 {
14874 if (reg == -1)
14875 {
14876 reg = modrm.rm;
14877 USED_REX (REX_B);
14878 if (rex & REX_B)
14879 reg += 8;
14880 }
14881 else if (reg > 7 && address_mode != mode_64bit)
14882 BadOp ();
14883 }
14884
14885 switch (vex.length)
14886 {
14887 case 128:
b9733481 14888 names = names_xmm;
922d8de8
DR
14889 break;
14890 case 256:
b9733481 14891 names = names_ymm;
922d8de8
DR
14892 break;
14893 default:
14894 abort ();
14895 }
b9733481 14896 oappend (names[reg]);
922d8de8
DR
14897}
14898
a683cc34
SP
14899static void
14900OP_EX_VexImmW (int bytemode, int sizeflag)
14901{
14902 int reg = -1;
14903 static unsigned char vex_imm8;
14904
14905 if (vex_w_done == 0)
14906 {
14907 vex_w_done = 1;
14908
14909 /* Skip mod/rm byte. */
14910 MODRM_CHECK;
14911 codep++;
14912
14913 vex_imm8 = get_vex_imm8 (sizeflag, 0);
14914
14915 if (vex.w)
14916 reg = vex_imm8 >> 4;
14917
14918 OP_EX_VexReg (bytemode, sizeflag, reg);
14919 }
14920 else if (vex_w_done == 1)
14921 {
14922 vex_w_done = 2;
14923
14924 if (!vex.w)
14925 reg = vex_imm8 >> 4;
14926
14927 OP_EX_VexReg (bytemode, sizeflag, reg);
14928 }
14929 else
14930 {
14931 /* Output the imm8 directly. */
14932 scratchbuf[0] = '$';
14933 print_operand_value (scratchbuf + 1, 1, vex_imm8 & 0xf);
14934 oappend (scratchbuf + intel_syntax);
14935 scratchbuf[0] = '\0';
14936 codep++;
14937 }
14938}
14939
5dd85c99
SP
14940static void
14941OP_Vex_2src (int bytemode, int sizeflag)
14942{
14943 if (modrm.mod == 3)
14944 {
b9733481 14945 int reg = modrm.rm;
5dd85c99 14946 USED_REX (REX_B);
b9733481
L
14947 if (rex & REX_B)
14948 reg += 8;
14949 oappend (names_xmm[reg]);
5dd85c99
SP
14950 }
14951 else
14952 {
14953 if (intel_syntax
14954 && (bytemode == v_mode || bytemode == v_swap_mode))
14955 {
14956 bytemode = (prefixes & PREFIX_DATA) ? x_mode : q_mode;
14957 used_prefixes |= (prefixes & PREFIX_DATA);
14958 }
14959 OP_E (bytemode, sizeflag);
14960 }
14961}
14962
14963static void
14964OP_Vex_2src_1 (int bytemode, int sizeflag)
14965{
14966 if (modrm.mod == 3)
14967 {
14968 /* Skip mod/rm byte. */
14969 MODRM_CHECK;
14970 codep++;
14971 }
14972
14973 if (vex.w)
b9733481 14974 oappend (names_xmm[vex.register_specifier]);
5dd85c99
SP
14975 else
14976 OP_Vex_2src (bytemode, sizeflag);
14977}
14978
14979static void
14980OP_Vex_2src_2 (int bytemode, int sizeflag)
14981{
14982 if (vex.w)
14983 OP_Vex_2src (bytemode, sizeflag);
14984 else
b9733481 14985 oappend (names_xmm[vex.register_specifier]);
5dd85c99
SP
14986}
14987
922d8de8
DR
14988static void
14989OP_EX_VexW (int bytemode, int sizeflag)
14990{
14991 int reg = -1;
14992
14993 if (!vex_w_done)
14994 {
14995 vex_w_done = 1;
41effecb
SP
14996
14997 /* Skip mod/rm byte. */
14998 MODRM_CHECK;
14999 codep++;
15000
922d8de8 15001 if (vex.w)
ccc5981b 15002 reg = get_vex_imm8 (sizeflag, 0) >> 4;
922d8de8
DR
15003 }
15004 else
15005 {
15006 if (!vex.w)
ccc5981b 15007 reg = get_vex_imm8 (sizeflag, 1) >> 4;
922d8de8
DR
15008 }
15009
15010 OP_EX_VexReg (bytemode, sizeflag, reg);
15011}
15012
922d8de8
DR
15013static void
15014VEXI4_Fixup (int bytemode ATTRIBUTE_UNUSED,
15015 int sizeflag ATTRIBUTE_UNUSED)
15016{
15017 /* Skip the immediate byte and check for invalid bits. */
15018 FETCH_DATA (the_info, codep + 1);
15019 if (*codep++ & 0xf)
15020 BadOp ();
15021}
15022
c0f3af97
L
15023static void
15024OP_REG_VexI4 (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
15025{
15026 int reg;
b9733481
L
15027 const char **names;
15028
c0f3af97
L
15029 FETCH_DATA (the_info, codep + 1);
15030 reg = *codep++;
15031
15032 if (bytemode != x_mode)
15033 abort ();
15034
15035 if (reg & 0xf)
15036 BadOp ();
15037
15038 reg >>= 4;
dae39acc
L
15039 if (reg > 7 && address_mode != mode_64bit)
15040 BadOp ();
15041
c0f3af97
L
15042 switch (vex.length)
15043 {
15044 case 128:
b9733481 15045 names = names_xmm;
c0f3af97
L
15046 break;
15047 case 256:
b9733481 15048 names = names_ymm;
c0f3af97
L
15049 break;
15050 default:
15051 abort ();
15052 }
b9733481 15053 oappend (names[reg]);
c0f3af97
L
15054}
15055
922d8de8
DR
15056static void
15057OP_XMM_VexW (int bytemode, int sizeflag)
15058{
15059 /* Turn off the REX.W bit since it is used for swapping operands
15060 now. */
15061 rex &= ~REX_W;
15062 OP_XMM (bytemode, sizeflag);
15063}
15064
c0f3af97
L
15065static void
15066OP_EX_Vex (int bytemode, int sizeflag)
15067{
15068 if (modrm.mod != 3)
15069 {
15070 if (vex.register_specifier != 0)
15071 BadOp ();
15072 need_vex_reg = 0;
15073 }
15074 OP_EX (bytemode, sizeflag);
15075}
15076
15077static void
15078OP_XMM_Vex (int bytemode, int sizeflag)
15079{
15080 if (modrm.mod != 3)
15081 {
15082 if (vex.register_specifier != 0)
15083 BadOp ();
15084 need_vex_reg = 0;
15085 }
15086 OP_XMM (bytemode, sizeflag);
15087}
15088
15089static void
15090VZERO_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
15091{
15092 switch (vex.length)
15093 {
15094 case 128:
ea397f5b 15095 mnemonicendp = stpcpy (obuf, "vzeroupper");
c0f3af97
L
15096 break;
15097 case 256:
ea397f5b 15098 mnemonicendp = stpcpy (obuf, "vzeroall");
c0f3af97
L
15099 break;
15100 default:
15101 abort ();
15102 }
15103}
15104
ea397f5b
L
15105static struct op vex_cmp_op[] =
15106{
15107 { STRING_COMMA_LEN ("eq") },
15108 { STRING_COMMA_LEN ("lt") },
15109 { STRING_COMMA_LEN ("le") },
15110 { STRING_COMMA_LEN ("unord") },
15111 { STRING_COMMA_LEN ("neq") },
15112 { STRING_COMMA_LEN ("nlt") },
15113 { STRING_COMMA_LEN ("nle") },
15114 { STRING_COMMA_LEN ("ord") },
15115 { STRING_COMMA_LEN ("eq_uq") },
15116 { STRING_COMMA_LEN ("nge") },
15117 { STRING_COMMA_LEN ("ngt") },
15118 { STRING_COMMA_LEN ("false") },
15119 { STRING_COMMA_LEN ("neq_oq") },
15120 { STRING_COMMA_LEN ("ge") },
15121 { STRING_COMMA_LEN ("gt") },
15122 { STRING_COMMA_LEN ("true") },
15123 { STRING_COMMA_LEN ("eq_os") },
15124 { STRING_COMMA_LEN ("lt_oq") },
15125 { STRING_COMMA_LEN ("le_oq") },
15126 { STRING_COMMA_LEN ("unord_s") },
15127 { STRING_COMMA_LEN ("neq_us") },
15128 { STRING_COMMA_LEN ("nlt_uq") },
15129 { STRING_COMMA_LEN ("nle_uq") },
15130 { STRING_COMMA_LEN ("ord_s") },
15131 { STRING_COMMA_LEN ("eq_us") },
15132 { STRING_COMMA_LEN ("nge_uq") },
15133 { STRING_COMMA_LEN ("ngt_uq") },
15134 { STRING_COMMA_LEN ("false_os") },
15135 { STRING_COMMA_LEN ("neq_os") },
15136 { STRING_COMMA_LEN ("ge_oq") },
15137 { STRING_COMMA_LEN ("gt_oq") },
15138 { STRING_COMMA_LEN ("true_us") },
c0f3af97
L
15139};
15140
15141static void
15142VCMP_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
15143{
15144 unsigned int cmp_type;
15145
15146 FETCH_DATA (the_info, codep + 1);
15147 cmp_type = *codep++ & 0xff;
15148 if (cmp_type < ARRAY_SIZE (vex_cmp_op))
15149 {
15150 char suffix [3];
ea397f5b 15151 char *p = mnemonicendp - 2;
c0f3af97
L
15152 suffix[0] = p[0];
15153 suffix[1] = p[1];
15154 suffix[2] = '\0';
ea397f5b
L
15155 sprintf (p, "%s%s", vex_cmp_op[cmp_type].name, suffix);
15156 mnemonicendp += vex_cmp_op[cmp_type].len;
c0f3af97
L
15157 }
15158 else
15159 {
15160 /* We have a reserved extension byte. Output it directly. */
15161 scratchbuf[0] = '$';
15162 print_operand_value (scratchbuf + 1, 1, cmp_type);
15163 oappend (scratchbuf + intel_syntax);
15164 scratchbuf[0] = '\0';
15165 }
15166}
15167
ea397f5b
L
15168static const struct op pclmul_op[] =
15169{
15170 { STRING_COMMA_LEN ("lql") },
15171 { STRING_COMMA_LEN ("hql") },
15172 { STRING_COMMA_LEN ("lqh") },
15173 { STRING_COMMA_LEN ("hqh") }
c0f3af97
L
15174};
15175
15176static void
15177PCLMUL_Fixup (int bytemode ATTRIBUTE_UNUSED,
15178 int sizeflag ATTRIBUTE_UNUSED)
15179{
15180 unsigned int pclmul_type;
15181
15182 FETCH_DATA (the_info, codep + 1);
15183 pclmul_type = *codep++ & 0xff;
15184 switch (pclmul_type)
15185 {
15186 case 0x10:
15187 pclmul_type = 2;
15188 break;
15189 case 0x11:
15190 pclmul_type = 3;
15191 break;
15192 default:
15193 break;
7bb15c6f 15194 }
c0f3af97
L
15195 if (pclmul_type < ARRAY_SIZE (pclmul_op))
15196 {
15197 char suffix [4];
ea397f5b 15198 char *p = mnemonicendp - 3;
c0f3af97
L
15199 suffix[0] = p[0];
15200 suffix[1] = p[1];
15201 suffix[2] = p[2];
15202 suffix[3] = '\0';
ea397f5b
L
15203 sprintf (p, "%s%s", pclmul_op[pclmul_type].name, suffix);
15204 mnemonicendp += pclmul_op[pclmul_type].len;
c0f3af97
L
15205 }
15206 else
15207 {
15208 /* We have a reserved extension byte. Output it directly. */
15209 scratchbuf[0] = '$';
15210 print_operand_value (scratchbuf + 1, 1, pclmul_type);
15211 oappend (scratchbuf + intel_syntax);
15212 scratchbuf[0] = '\0';
15213 }
15214}
15215
f1f8f695
L
15216static void
15217MOVBE_Fixup (int bytemode, int sizeflag)
15218{
15219 /* Add proper suffix to "movbe". */
ea397f5b 15220 char *p = mnemonicendp;
f1f8f695
L
15221
15222 switch (bytemode)
15223 {
15224 case v_mode:
15225 if (intel_syntax)
ea397f5b 15226 goto skip;
f1f8f695
L
15227
15228 USED_REX (REX_W);
15229 if (sizeflag & SUFFIX_ALWAYS)
15230 {
15231 if (rex & REX_W)
15232 *p++ = 'q';
f1f8f695 15233 else
f16cd0d5
L
15234 {
15235 if (sizeflag & DFLAG)
15236 *p++ = 'l';
15237 else
15238 *p++ = 'w';
15239 used_prefixes |= (prefixes & PREFIX_DATA);
15240 }
f1f8f695 15241 }
f1f8f695
L
15242 break;
15243 default:
15244 oappend (INTERNAL_DISASSEMBLER_ERROR);
15245 break;
15246 }
ea397f5b 15247 mnemonicendp = p;
f1f8f695
L
15248 *p = '\0';
15249
ea397f5b 15250skip:
f1f8f695
L
15251 OP_M (bytemode, sizeflag);
15252}
f88c9eb0
SP
15253
15254static void
15255OP_LWPCB_E (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
15256{
15257 int reg;
15258 const char **names;
15259
15260 /* Skip mod/rm byte. */
15261 MODRM_CHECK;
15262 codep++;
15263
15264 if (vex.w)
15265 names = names64;
f88c9eb0 15266 else
ce7d077e 15267 names = names32;
f88c9eb0
SP
15268
15269 reg = modrm.rm;
15270 USED_REX (REX_B);
15271 if (rex & REX_B)
15272 reg += 8;
15273
15274 oappend (names[reg]);
15275}
15276
15277static void
15278OP_LWP_E (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
15279{
15280 const char **names;
15281
15282 if (vex.w)
15283 names = names64;
f88c9eb0 15284 else
ce7d077e 15285 names = names32;
f88c9eb0
SP
15286
15287 oappend (names[vex.register_specifier]);
15288}
This page took 1.598904 seconds and 4 git commands to generate.