* elf32-arm.c (arm_build_one_stub): Use the hash entry of the
[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,
0bfee649 3 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
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 fetch_data (struct disassemble_info *, bfd_byte *);
46static void ckprefix (void);
47static const char *prefix_name (int, int);
48static int print_insn (bfd_vma, disassemble_info *);
49static void dofloat (int);
50static void OP_ST (int, int);
51static void OP_STi (int, int);
52static int putop (const char *, int);
53static void oappend (const char *);
54static void append_seg (void);
55static void OP_indirE (int, int);
56static void print_operand_value (char *, int, bfd_vma);
c0f3af97 57static void OP_E_register (int, int);
c1e679ec
DR
58static void OP_E_memory (int, int);
59static void OP_E_extended (int, int);
5d669648 60static void print_displacement (char *, bfd_vma);
26ca5450
AJ
61static void OP_E (int, int);
62static void OP_G (int, int);
63static bfd_vma get64 (void);
64static bfd_signed_vma get32 (void);
65static bfd_signed_vma get32s (void);
66static int get16 (void);
67static void set_op (bfd_vma, int);
b844680a 68static void OP_Skip_MODRM (int, int);
26ca5450
AJ
69static void OP_REG (int, int);
70static void OP_IMREG (int, int);
71static void OP_I (int, int);
72static void OP_I64 (int, int);
73static void OP_sI (int, int);
74static void OP_J (int, int);
75static void OP_SEG (int, int);
76static void OP_DIR (int, int);
77static void OP_OFF (int, int);
78static void OP_OFF64 (int, int);
79static void ptr_reg (int, int);
80static void OP_ESreg (int, int);
81static void OP_DSreg (int, int);
82static void OP_C (int, int);
83static void OP_D (int, int);
84static void OP_T (int, int);
6f74c397 85static void OP_R (int, int);
26ca5450
AJ
86static void OP_MMX (int, int);
87static void OP_XMM (int, int);
88static void OP_EM (int, int);
89static void OP_EX (int, int);
4d9567e0
MM
90static void OP_EMC (int,int);
91static void OP_MXC (int,int);
26ca5450
AJ
92static void OP_MS (int, int);
93static void OP_XS (int, int);
cc0ec051 94static void OP_M (int, int);
c0f3af97 95static void OP_VEX (int, int);
922d8de8 96static void OP_VEX_FMA (int, int);
c0f3af97 97static void OP_EX_Vex (int, int);
922d8de8 98static void OP_EX_VexW (int, int);
c0f3af97 99static void OP_XMM_Vex (int, int);
922d8de8 100static void OP_XMM_VexW (int, int);
c0f3af97
L
101static void OP_REG_VexI4 (int, int);
102static void PCLMUL_Fixup (int, int);
922d8de8 103static void VEXI4_Fixup (int, int);
c0f3af97
L
104static void VZERO_Fixup (int, int);
105static void VCMP_Fixup (int, int);
cc0ec051 106static void OP_0f07 (int, int);
b844680a
L
107static void OP_Monitor (int, int);
108static void OP_Mwait (int, int);
46e883c5
L
109static void NOP_Fixup1 (int, int);
110static void NOP_Fixup2 (int, int);
26ca5450 111static void OP_3DNowSuffix (int, int);
ad19981d 112static void CMP_Fixup (int, int);
26ca5450 113static void BadOp (void);
35c52694 114static void REP_Fixup (int, int);
f5804c90 115static void CMPXCHG8B_Fixup (int, int);
42903f7f 116static void XMM_Fixup (int, int);
381d071f 117static void CRC32_Fixup (int, int);
c1e679ec 118
f1f8f695 119static void MOVBE_Fixup (int, int);
252b5132 120
6608db57 121struct dis_private {
252b5132
RH
122 /* Points to first byte not fetched. */
123 bfd_byte *max_fetched;
0b1cf022 124 bfd_byte the_buffer[MAX_MNEM_SIZE];
252b5132 125 bfd_vma insn_start;
e396998b 126 int orig_sizeflag;
252b5132
RH
127 jmp_buf bailout;
128};
129
cb712a9e
L
130enum address_mode
131{
132 mode_16bit,
133 mode_32bit,
134 mode_64bit
135};
136
137enum address_mode address_mode;
52b15da3 138
5076851f
ILT
139/* Flags for the prefixes for the current instruction. See below. */
140static int prefixes;
141
52b15da3
JH
142/* REX prefix the current instruction. See below. */
143static int rex;
144/* Bits of REX we've already used. */
145static int rex_used;
c0f3af97
L
146/* Original REX prefix. */
147static int rex_original;
148/* REX bits in original REX prefix ignored. It may not be the same
149 as rex_original since some bits may not be ignored. */
150static int rex_ignored;
52b15da3
JH
151/* Mark parts used in the REX prefix. When we are testing for
152 empty prefix (for 8bit register REX extension), just mask it
153 out. Otherwise test for REX bit is excuse for existence of REX
154 only in case value is nonzero. */
155#define USED_REX(value) \
156 { \
157 if (value) \
161a04f6
L
158 { \
159 if ((rex & value)) \
160 rex_used |= (value) | REX_OPCODE; \
161 } \
52b15da3 162 else \
161a04f6 163 rex_used |= REX_OPCODE; \
52b15da3
JH
164 }
165
7d421014
ILT
166/* Flags for prefixes which we somehow handled when printing the
167 current instruction. */
168static int used_prefixes;
169
5076851f
ILT
170/* Flags stored in PREFIXES. */
171#define PREFIX_REPZ 1
172#define PREFIX_REPNZ 2
173#define PREFIX_LOCK 4
174#define PREFIX_CS 8
175#define PREFIX_SS 0x10
176#define PREFIX_DS 0x20
177#define PREFIX_ES 0x40
178#define PREFIX_FS 0x80
179#define PREFIX_GS 0x100
180#define PREFIX_DATA 0x200
181#define PREFIX_ADDR 0x400
182#define PREFIX_FWAIT 0x800
183
252b5132
RH
184/* Make sure that bytes from INFO->PRIVATE_DATA->BUFFER (inclusive)
185 to ADDR (exclusive) are valid. Returns 1 for success, longjmps
186 on error. */
187#define FETCH_DATA(info, addr) \
6608db57 188 ((addr) <= ((struct dis_private *) (info->private_data))->max_fetched \
252b5132
RH
189 ? 1 : fetch_data ((info), (addr)))
190
191static int
26ca5450 192fetch_data (struct disassemble_info *info, bfd_byte *addr)
252b5132
RH
193{
194 int status;
6608db57 195 struct dis_private *priv = (struct dis_private *) info->private_data;
252b5132
RH
196 bfd_vma start = priv->insn_start + (priv->max_fetched - priv->the_buffer);
197
0b1cf022 198 if (addr <= priv->the_buffer + MAX_MNEM_SIZE)
272c9217
JB
199 status = (*info->read_memory_func) (start,
200 priv->max_fetched,
201 addr - priv->max_fetched,
202 info);
203 else
204 status = -1;
252b5132
RH
205 if (status != 0)
206 {
7d421014 207 /* If we did manage to read at least one byte, then
db6eb5be
AM
208 print_insn_i386 will do something sensible. Otherwise, print
209 an error. We do that here because this is where we know
210 STATUS. */
7d421014 211 if (priv->max_fetched == priv->the_buffer)
5076851f 212 (*info->memory_error_func) (status, start, info);
252b5132
RH
213 longjmp (priv->bailout, 1);
214 }
215 else
216 priv->max_fetched = addr;
217 return 1;
218}
219
ce518a5f
L
220#define XX { NULL, 0 }
221
222#define Eb { OP_E, b_mode }
b6169b20 223#define EbS { OP_E, b_swap_mode }
ce518a5f 224#define Ev { OP_E, v_mode }
b6169b20 225#define EvS { OP_E, v_swap_mode }
ce518a5f
L
226#define Ed { OP_E, d_mode }
227#define Edq { OP_E, dq_mode }
228#define Edqw { OP_E, dqw_mode }
42903f7f
L
229#define Edqb { OP_E, dqb_mode }
230#define Edqd { OP_E, dqd_mode }
09335d05 231#define Eq { OP_E, q_mode }
ce518a5f
L
232#define indirEv { OP_indirE, stack_v_mode }
233#define indirEp { OP_indirE, f_mode }
234#define stackEv { OP_E, stack_v_mode }
235#define Em { OP_E, m_mode }
236#define Ew { OP_E, w_mode }
237#define M { OP_M, 0 } /* lea, lgdt, etc. */
34b772a6 238#define Ma { OP_M, a_mode }
b844680a 239#define Mb { OP_M, b_mode }
d9a5e5e5 240#define Md { OP_M, d_mode }
f1f8f695 241#define Mo { OP_M, o_mode }
ce518a5f
L
242#define Mp { OP_M, f_mode } /* 32 or 48 bit memory operand for LDS, LES etc */
243#define Mq { OP_M, q_mode }
4ee52178 244#define Mx { OP_M, x_mode }
c0f3af97 245#define Mxmm { OP_M, xmm_mode }
ce518a5f
L
246#define Gb { OP_G, b_mode }
247#define Gv { OP_G, v_mode }
248#define Gd { OP_G, d_mode }
249#define Gdq { OP_G, dq_mode }
250#define Gm { OP_G, m_mode }
251#define Gw { OP_G, w_mode }
6f74c397
L
252#define Rd { OP_R, d_mode }
253#define Rm { OP_R, m_mode }
ce518a5f
L
254#define Ib { OP_I, b_mode }
255#define sIb { OP_sI, b_mode } /* sign extened byte */
256#define Iv { OP_I, v_mode }
257#define Iq { OP_I, q_mode }
258#define Iv64 { OP_I64, v_mode }
259#define Iw { OP_I, w_mode }
260#define I1 { OP_I, const_1_mode }
261#define Jb { OP_J, b_mode }
262#define Jv { OP_J, v_mode }
263#define Cm { OP_C, m_mode }
264#define Dm { OP_D, m_mode }
265#define Td { OP_T, d_mode }
b844680a 266#define Skip_MODRM { OP_Skip_MODRM, 0 }
ce518a5f
L
267
268#define RMeAX { OP_REG, eAX_reg }
269#define RMeBX { OP_REG, eBX_reg }
270#define RMeCX { OP_REG, eCX_reg }
271#define RMeDX { OP_REG, eDX_reg }
272#define RMeSP { OP_REG, eSP_reg }
273#define RMeBP { OP_REG, eBP_reg }
274#define RMeSI { OP_REG, eSI_reg }
275#define RMeDI { OP_REG, eDI_reg }
276#define RMrAX { OP_REG, rAX_reg }
277#define RMrBX { OP_REG, rBX_reg }
278#define RMrCX { OP_REG, rCX_reg }
279#define RMrDX { OP_REG, rDX_reg }
280#define RMrSP { OP_REG, rSP_reg }
281#define RMrBP { OP_REG, rBP_reg }
282#define RMrSI { OP_REG, rSI_reg }
283#define RMrDI { OP_REG, rDI_reg }
284#define RMAL { OP_REG, al_reg }
285#define RMAL { OP_REG, al_reg }
286#define RMCL { OP_REG, cl_reg }
287#define RMDL { OP_REG, dl_reg }
288#define RMBL { OP_REG, bl_reg }
289#define RMAH { OP_REG, ah_reg }
290#define RMCH { OP_REG, ch_reg }
291#define RMDH { OP_REG, dh_reg }
292#define RMBH { OP_REG, bh_reg }
293#define RMAX { OP_REG, ax_reg }
294#define RMDX { OP_REG, dx_reg }
295
296#define eAX { OP_IMREG, eAX_reg }
297#define eBX { OP_IMREG, eBX_reg }
298#define eCX { OP_IMREG, eCX_reg }
299#define eDX { OP_IMREG, eDX_reg }
300#define eSP { OP_IMREG, eSP_reg }
301#define eBP { OP_IMREG, eBP_reg }
302#define eSI { OP_IMREG, eSI_reg }
303#define eDI { OP_IMREG, eDI_reg }
304#define AL { OP_IMREG, al_reg }
305#define CL { OP_IMREG, cl_reg }
306#define DL { OP_IMREG, dl_reg }
307#define BL { OP_IMREG, bl_reg }
308#define AH { OP_IMREG, ah_reg }
309#define CH { OP_IMREG, ch_reg }
310#define DH { OP_IMREG, dh_reg }
311#define BH { OP_IMREG, bh_reg }
312#define AX { OP_IMREG, ax_reg }
313#define DX { OP_IMREG, dx_reg }
314#define zAX { OP_IMREG, z_mode_ax_reg }
315#define indirDX { OP_IMREG, indir_dx_reg }
316
317#define Sw { OP_SEG, w_mode }
318#define Sv { OP_SEG, v_mode }
319#define Ap { OP_DIR, 0 }
320#define Ob { OP_OFF64, b_mode }
321#define Ov { OP_OFF64, v_mode }
322#define Xb { OP_DSreg, eSI_reg }
323#define Xv { OP_DSreg, eSI_reg }
324#define Xz { OP_DSreg, eSI_reg }
325#define Yb { OP_ESreg, eDI_reg }
326#define Yv { OP_ESreg, eDI_reg }
327#define DSBX { OP_DSreg, eBX_reg }
328
329#define es { OP_REG, es_reg }
330#define ss { OP_REG, ss_reg }
331#define cs { OP_REG, cs_reg }
332#define ds { OP_REG, ds_reg }
333#define fs { OP_REG, fs_reg }
334#define gs { OP_REG, gs_reg }
335
336#define MX { OP_MMX, 0 }
337#define XM { OP_XMM, 0 }
c0f3af97 338#define XMM { OP_XMM, xmm_mode }
ce518a5f 339#define EM { OP_EM, v_mode }
b6169b20 340#define EMS { OP_EM, v_swap_mode }
09a2c6cf 341#define EMd { OP_EM, d_mode }
14051056 342#define EMx { OP_EM, x_mode }
8976381e 343#define EXw { OP_EX, w_mode }
09a2c6cf 344#define EXd { OP_EX, d_mode }
fa99fab2 345#define EXdS { OP_EX, d_swap_mode }
09a2c6cf 346#define EXq { OP_EX, q_mode }
b6169b20 347#define EXqS { OP_EX, q_swap_mode }
09a2c6cf 348#define EXx { OP_EX, x_mode }
b6169b20 349#define EXxS { OP_EX, x_swap_mode }
c0f3af97
L
350#define EXxmm { OP_EX, xmm_mode }
351#define EXxmmq { OP_EX, xmmq_mode }
352#define EXymmq { OP_EX, ymmq_mode }
0bfee649 353#define EXVexWdq { OP_EX, vex_w_dq_mode }
ce518a5f
L
354#define MS { OP_MS, v_mode }
355#define XS { OP_XS, v_mode }
09335d05 356#define EMCq { OP_EMC, q_mode }
ce518a5f 357#define MXC { OP_MXC, 0 }
ce518a5f 358#define OPSUF { OP_3DNowSuffix, 0 }
ad19981d 359#define CMP { CMP_Fixup, 0 }
42903f7f 360#define XMM0 { XMM_Fixup, 0 }
252b5132 361
c0f3af97
L
362#define Vex { OP_VEX, vex_mode }
363#define Vex128 { OP_VEX, vex128_mode }
364#define Vex256 { OP_VEX, vex256_mode }
922d8de8
DR
365#define VexI4 { VEXI4_Fixup, 0}
366#define VexFMA { OP_VEX_FMA, vex_mode }
367#define Vex128FMA { OP_VEX_FMA, vex128_mode }
c0f3af97 368#define EXdVex { OP_EX_Vex, d_mode }
fa99fab2 369#define EXdVexS { OP_EX_Vex, d_swap_mode }
c0f3af97 370#define EXqVex { OP_EX_Vex, q_mode }
fa99fab2 371#define EXqVexS { OP_EX_Vex, q_swap_mode }
922d8de8
DR
372#define EXVexW { OP_EX_VexW, x_mode }
373#define EXdVexW { OP_EX_VexW, d_mode }
374#define EXqVexW { OP_EX_VexW, q_mode }
c0f3af97 375#define XMVex { OP_XMM_Vex, 0 }
922d8de8 376#define XMVexW { OP_XMM_VexW, 0 }
c0f3af97
L
377#define XMVexI4 { OP_REG_VexI4, x_mode }
378#define PCLMUL { PCLMUL_Fixup, 0 }
379#define VZERO { VZERO_Fixup, 0 }
380#define VCMP { VCMP_Fixup, 0 }
c0f3af97 381
35c52694 382/* Used handle "rep" prefix for string instructions. */
ce518a5f
L
383#define Xbr { REP_Fixup, eSI_reg }
384#define Xvr { REP_Fixup, eSI_reg }
385#define Ybr { REP_Fixup, eDI_reg }
386#define Yvr { REP_Fixup, eDI_reg }
387#define Yzr { REP_Fixup, eDI_reg }
388#define indirDXr { REP_Fixup, indir_dx_reg }
389#define ALr { REP_Fixup, al_reg }
390#define eAXr { REP_Fixup, eAX_reg }
391
392#define cond_jump_flag { NULL, cond_jump_mode }
393#define loop_jcxz_flag { NULL, loop_jcxz_mode }
3ffd33cf 394
252b5132 395/* bits in sizeflag */
252b5132 396#define SUFFIX_ALWAYS 4
252b5132
RH
397#define AFLAG 2
398#define DFLAG 1
399
d55ee72f
L
400/* byte operand */
401#define b_mode 1
b6169b20
L
402/* byte operand with operand swapped */
403#define b_swap_mode (b_mode + 1)
d55ee72f 404/* operand size depends on prefixes */
b6169b20
L
405#define v_mode (b_swap_mode + 1)
406/* operand size depends on prefixes with operand swapped */
407#define v_swap_mode (v_mode + 1)
d55ee72f 408/* word operand */
b6169b20 409#define w_mode (v_swap_mode + 1)
d55ee72f
L
410/* double word operand */
411#define d_mode (w_mode + 1)
fa99fab2
L
412/* double word operand with operand swapped */
413#define d_swap_mode (d_mode + 1)
d55ee72f 414/* quad word operand */
fa99fab2 415#define q_mode (d_swap_mode + 1)
b6169b20
L
416/* quad word operand with operand swapped */
417#define q_swap_mode (q_mode + 1)
d55ee72f 418/* ten-byte operand */
b6169b20 419#define t_mode (q_swap_mode + 1)
c0f3af97 420/* 16-byte XMM or 32-byte YMM operand */
d55ee72f 421#define x_mode (t_mode + 1)
b6169b20
L
422/* 16-byte XMM or 32-byte YMM operand with operand swapped */
423#define x_swap_mode (x_mode + 1)
c0f3af97 424/* 16-byte XMM operand */
b6169b20 425#define xmm_mode (x_swap_mode + 1)
c0f3af97
L
426/* 16-byte XMM or quad word operand */
427#define xmmq_mode (xmm_mode + 1)
428/* 32-byte YMM or quad word operand */
429#define ymmq_mode (xmmq_mode + 1)
d55ee72f 430/* d_mode in 32bit, q_mode in 64bit mode. */
c0f3af97 431#define m_mode (ymmq_mode + 1)
34b772a6
JB
432/* pair of v_mode operands */
433#define a_mode (m_mode + 1)
434#define cond_jump_mode (a_mode + 1)
d55ee72f
L
435#define loop_jcxz_mode (cond_jump_mode + 1)
436/* operand size depends on REX prefixes. */
437#define dq_mode (loop_jcxz_mode + 1)
438/* registers like dq_mode, memory like w_mode. */
439#define dqw_mode (dq_mode + 1)
440/* 4- or 6-byte pointer operand */
441#define f_mode (dqw_mode + 1)
442#define const_1_mode (f_mode + 1)
443/* v_mode for stack-related opcodes. */
444#define stack_v_mode (const_1_mode + 1)
445/* non-quad operand size depends on prefixes */
446#define z_mode (stack_v_mode + 1)
447/* 16-byte operand */
448#define o_mode (z_mode + 1)
449/* registers like dq_mode, memory like b_mode. */
450#define dqb_mode (o_mode + 1)
451/* registers like dq_mode, memory like d_mode. */
452#define dqd_mode (dqb_mode + 1)
c0f3af97
L
453/* normal vex mode */
454#define vex_mode (dqd_mode + 1)
455/* 128bit vex mode */
456#define vex128_mode (vex_mode + 1)
457/* 256bit vex mode */
458#define vex256_mode (vex128_mode + 1)
0bfee649
L
459/* operand size depends on the VEX.W bit. */
460#define vex_w_dq_mode (vex256_mode + 1)
c0f3af97 461
0bfee649 462#define es_reg (vex_w_dq_mode + 1)
d55ee72f
L
463#define cs_reg (es_reg + 1)
464#define ss_reg (cs_reg + 1)
465#define ds_reg (ss_reg + 1)
466#define fs_reg (ds_reg + 1)
467#define gs_reg (fs_reg + 1)
468
469#define eAX_reg (gs_reg + 1)
470#define eCX_reg (eAX_reg + 1)
471#define eDX_reg (eCX_reg + 1)
472#define eBX_reg (eDX_reg + 1)
473#define eSP_reg (eBX_reg + 1)
474#define eBP_reg (eSP_reg + 1)
475#define eSI_reg (eBP_reg + 1)
476#define eDI_reg (eSI_reg + 1)
477
478#define al_reg (eDI_reg + 1)
479#define cl_reg (al_reg + 1)
480#define dl_reg (cl_reg + 1)
481#define bl_reg (dl_reg + 1)
482#define ah_reg (bl_reg + 1)
483#define ch_reg (ah_reg + 1)
484#define dh_reg (ch_reg + 1)
485#define bh_reg (dh_reg + 1)
486
487#define ax_reg (bh_reg + 1)
488#define cx_reg (ax_reg + 1)
489#define dx_reg (cx_reg + 1)
490#define bx_reg (dx_reg + 1)
491#define sp_reg (bx_reg + 1)
492#define bp_reg (sp_reg + 1)
493#define si_reg (bp_reg + 1)
494#define di_reg (si_reg + 1)
495
496#define rAX_reg (di_reg + 1)
497#define rCX_reg (rAX_reg + 1)
498#define rDX_reg (rCX_reg + 1)
499#define rBX_reg (rDX_reg + 1)
500#define rSP_reg (rBX_reg + 1)
501#define rBP_reg (rSP_reg + 1)
502#define rSI_reg (rBP_reg + 1)
503#define rDI_reg (rSI_reg + 1)
504
505#define z_mode_ax_reg (rDI_reg + 1)
506#define indir_dx_reg (z_mode_ax_reg + 1)
507
508#define MAX_BYTEMODE indir_dx_reg
509
252b5132 510
1b0d430b
L
511#define FLOATCODE 1
512#define USE_REG_TABLE (FLOATCODE + 1)
513#define USE_MOD_TABLE (USE_REG_TABLE + 1)
514#define USE_RM_TABLE (USE_MOD_TABLE + 1)
515#define USE_PREFIX_TABLE (USE_RM_TABLE + 1)
516#define USE_X86_64_TABLE (USE_PREFIX_TABLE + 1)
517#define USE_3BYTE_TABLE (USE_X86_64_TABLE + 1)
c0f3af97
L
518#define USE_VEX_C4_TABLE (USE_3BYTE_TABLE + 1)
519#define USE_VEX_C5_TABLE (USE_VEX_C4_TABLE + 1)
520#define USE_VEX_LEN_TABLE (USE_VEX_C5_TABLE + 1)
6439fc28 521
1ceb70f8 522#define FLOAT NULL, { { NULL, FLOATCODE } }
4efba78c 523
4e7d34a6 524#define DIS386(T, I) NULL, { { NULL, (T)}, { NULL, (I) } }
1ceb70f8
L
525#define REG_TABLE(I) DIS386 (USE_REG_TABLE, (I))
526#define MOD_TABLE(I) DIS386 (USE_MOD_TABLE, (I))
527#define RM_TABLE(I) DIS386 (USE_RM_TABLE, (I))
528#define PREFIX_TABLE(I) DIS386 (USE_PREFIX_TABLE, (I))
4e7d34a6
L
529#define X86_64_TABLE(I) DIS386 (USE_X86_64_TABLE, (I))
530#define THREE_BYTE_TABLE(I) DIS386 (USE_3BYTE_TABLE, (I))
c0f3af97
L
531#define VEX_C4_TABLE(I) DIS386 (USE_VEX_C4_TABLE, (I))
532#define VEX_C5_TABLE(I) DIS386 (USE_VEX_C5_TABLE, (I))
533#define VEX_LEN_TABLE(I) DIS386 (USE_VEX_LEN_TABLE, (I))
1ceb70f8
L
534
535#define REG_80 0
536#define REG_81 (REG_80 + 1)
537#define REG_82 (REG_81 + 1)
538#define REG_8F (REG_82 + 1)
539#define REG_C0 (REG_8F + 1)
540#define REG_C1 (REG_C0 + 1)
541#define REG_C6 (REG_C1 + 1)
542#define REG_C7 (REG_C6 + 1)
543#define REG_D0 (REG_C7 + 1)
544#define REG_D1 (REG_D0 + 1)
545#define REG_D2 (REG_D1 + 1)
546#define REG_D3 (REG_D2 + 1)
547#define REG_F6 (REG_D3 + 1)
548#define REG_F7 (REG_F6 + 1)
549#define REG_FE (REG_F7 + 1)
550#define REG_FF (REG_FE + 1)
551#define REG_0F00 (REG_FF + 1)
552#define REG_0F01 (REG_0F00 + 1)
b5b1fc4f
L
553#define REG_0F0D (REG_0F01 + 1)
554#define REG_0F18 (REG_0F0D + 1)
1ceb70f8
L
555#define REG_0F71 (REG_0F18 + 1)
556#define REG_0F72 (REG_0F71 + 1)
557#define REG_0F73 (REG_0F72 + 1)
558#define REG_0FA6 (REG_0F73 + 1)
559#define REG_0FA7 (REG_0FA6 + 1)
560#define REG_0FAE (REG_0FA7 + 1)
561#define REG_0FBA (REG_0FAE + 1)
562#define REG_0FC7 (REG_0FBA + 1)
c0f3af97
L
563#define REG_VEX_71 (REG_0FC7 + 1)
564#define REG_VEX_72 (REG_VEX_71 + 1)
565#define REG_VEX_73 (REG_VEX_72 + 1)
566#define REG_VEX_AE (REG_VEX_73 + 1)
1ceb70f8
L
567
568#define MOD_8D 0
92fddf8e 569#define MOD_0F01_REG_0 (MOD_8D + 1)
1ceb70f8
L
570#define MOD_0F01_REG_1 (MOD_0F01_REG_0 + 1)
571#define MOD_0F01_REG_2 (MOD_0F01_REG_1 + 1)
572#define MOD_0F01_REG_3 (MOD_0F01_REG_2 + 1)
573#define MOD_0F01_REG_7 (MOD_0F01_REG_3 + 1)
92fddf8e
L
574#define MOD_0F12_PREFIX_0 (MOD_0F01_REG_7 + 1)
575#define MOD_0F13 (MOD_0F12_PREFIX_0 + 1)
576#define MOD_0F16_PREFIX_0 (MOD_0F13 + 1)
577#define MOD_0F17 (MOD_0F16_PREFIX_0 + 1)
578#define MOD_0F18_REG_0 (MOD_0F17 + 1)
1ceb70f8
L
579#define MOD_0F18_REG_1 (MOD_0F18_REG_0 + 1)
580#define MOD_0F18_REG_2 (MOD_0F18_REG_1 + 1)
581#define MOD_0F18_REG_3 (MOD_0F18_REG_2 + 1)
92fddf8e
L
582#define MOD_0F20 (MOD_0F18_REG_3 + 1)
583#define MOD_0F21 (MOD_0F20 + 1)
584#define MOD_0F22 (MOD_0F21 + 1)
585#define MOD_0F23 (MOD_0F22 + 1)
586#define MOD_0F24 (MOD_0F23 + 1)
587#define MOD_0F26 (MOD_0F24 + 1)
75c135a8
L
588#define MOD_0F2B_PREFIX_0 (MOD_0F26 + 1)
589#define MOD_0F2B_PREFIX_1 (MOD_0F2B_PREFIX_0 + 1)
590#define MOD_0F2B_PREFIX_2 (MOD_0F2B_PREFIX_1 + 1)
591#define MOD_0F2B_PREFIX_3 (MOD_0F2B_PREFIX_2 + 1)
592#define MOD_0F51 (MOD_0F2B_PREFIX_3 + 1)
593#define MOD_0F71_REG_2 (MOD_0F51 + 1)
1ceb70f8
L
594#define MOD_0F71_REG_4 (MOD_0F71_REG_2 + 1)
595#define MOD_0F71_REG_6 (MOD_0F71_REG_4 + 1)
596#define MOD_0F72_REG_2 (MOD_0F71_REG_6 + 1)
597#define MOD_0F72_REG_4 (MOD_0F72_REG_2 + 1)
598#define MOD_0F72_REG_6 (MOD_0F72_REG_4 + 1)
599#define MOD_0F73_REG_2 (MOD_0F72_REG_6 + 1)
600#define MOD_0F73_REG_3 (MOD_0F73_REG_2 + 1)
601#define MOD_0F73_REG_6 (MOD_0F73_REG_3 + 1)
602#define MOD_0F73_REG_7 (MOD_0F73_REG_6 + 1)
603#define MOD_0FAE_REG_0 (MOD_0F73_REG_7 + 1)
604#define MOD_0FAE_REG_1 (MOD_0FAE_REG_0 + 1)
605#define MOD_0FAE_REG_2 (MOD_0FAE_REG_1 + 1)
606#define MOD_0FAE_REG_3 (MOD_0FAE_REG_2 + 1)
475a2301
L
607#define MOD_0FAE_REG_4 (MOD_0FAE_REG_3 + 1)
608#define MOD_0FAE_REG_5 (MOD_0FAE_REG_4 + 1)
1ceb70f8
L
609#define MOD_0FAE_REG_6 (MOD_0FAE_REG_5 + 1)
610#define MOD_0FAE_REG_7 (MOD_0FAE_REG_6 + 1)
92fddf8e
L
611#define MOD_0FB2 (MOD_0FAE_REG_7 + 1)
612#define MOD_0FB4 (MOD_0FB2 + 1)
613#define MOD_0FB5 (MOD_0FB4 + 1)
614#define MOD_0FC7_REG_6 (MOD_0FB5 + 1)
1ceb70f8 615#define MOD_0FC7_REG_7 (MOD_0FC7_REG_6 + 1)
75c135a8
L
616#define MOD_0FD7 (MOD_0FC7_REG_7 + 1)
617#define MOD_0FE7_PREFIX_2 (MOD_0FD7 + 1)
618#define MOD_0FF0_PREFIX_3 (MOD_0FE7_PREFIX_2 + 1)
619#define MOD_0F382A_PREFIX_2 (MOD_0FF0_PREFIX_3 + 1)
620#define MOD_62_32BIT (MOD_0F382A_PREFIX_2 + 1)
1ceb70f8
L
621#define MOD_C4_32BIT (MOD_62_32BIT + 1)
622#define MOD_C5_32BIT (MOD_C4_32BIT + 1)
c0f3af97
L
623#define MOD_VEX_12_PREFIX_0 (MOD_C5_32BIT + 1)
624#define MOD_VEX_13 (MOD_VEX_12_PREFIX_0 + 1)
625#define MOD_VEX_16_PREFIX_0 (MOD_VEX_13 + 1)
626#define MOD_VEX_17 (MOD_VEX_16_PREFIX_0 + 1)
627#define MOD_VEX_2B (MOD_VEX_17 + 1)
628#define MOD_VEX_51 (MOD_VEX_2B + 1)
629#define MOD_VEX_71_REG_2 (MOD_VEX_51 + 1)
630#define MOD_VEX_71_REG_4 (MOD_VEX_71_REG_2 + 1)
631#define MOD_VEX_71_REG_6 (MOD_VEX_71_REG_4 + 1)
632#define MOD_VEX_72_REG_2 (MOD_VEX_71_REG_6 + 1)
633#define MOD_VEX_72_REG_4 (MOD_VEX_72_REG_2 + 1)
634#define MOD_VEX_72_REG_6 (MOD_VEX_72_REG_4 + 1)
635#define MOD_VEX_73_REG_2 (MOD_VEX_72_REG_6 + 1)
636#define MOD_VEX_73_REG_3 (MOD_VEX_73_REG_2 + 1)
637#define MOD_VEX_73_REG_6 (MOD_VEX_73_REG_3 + 1)
638#define MOD_VEX_73_REG_7 (MOD_VEX_73_REG_6 + 1)
639#define MOD_VEX_AE_REG_2 (MOD_VEX_73_REG_7 + 1)
640#define MOD_VEX_AE_REG_3 (MOD_VEX_AE_REG_2 + 1)
641#define MOD_VEX_D7_PREFIX_2 (MOD_VEX_AE_REG_3 + 1)
642#define MOD_VEX_E7_PREFIX_2 (MOD_VEX_D7_PREFIX_2 + 1)
643#define MOD_VEX_F0_PREFIX_3 (MOD_VEX_E7_PREFIX_2 + 1)
644#define MOD_VEX_3818_PREFIX_2 (MOD_VEX_F0_PREFIX_3 + 1)
645#define MOD_VEX_3819_PREFIX_2 (MOD_VEX_3818_PREFIX_2 + 1)
646#define MOD_VEX_381A_PREFIX_2 (MOD_VEX_3819_PREFIX_2 + 1)
647#define MOD_VEX_382A_PREFIX_2 (MOD_VEX_381A_PREFIX_2 + 1)
648#define MOD_VEX_382C_PREFIX_2 (MOD_VEX_382A_PREFIX_2 + 1)
649#define MOD_VEX_382D_PREFIX_2 (MOD_VEX_382C_PREFIX_2 + 1)
650#define MOD_VEX_382E_PREFIX_2 (MOD_VEX_382D_PREFIX_2 + 1)
651#define MOD_VEX_382F_PREFIX_2 (MOD_VEX_382E_PREFIX_2 + 1)
1ceb70f8
L
652
653#define RM_0F01_REG_0 0
654#define RM_0F01_REG_1 (RM_0F01_REG_0 + 1)
475a2301
L
655#define RM_0F01_REG_2 (RM_0F01_REG_1 + 1)
656#define RM_0F01_REG_3 (RM_0F01_REG_2 + 1)
1ceb70f8
L
657#define RM_0F01_REG_7 (RM_0F01_REG_3 + 1)
658#define RM_0FAE_REG_5 (RM_0F01_REG_7 + 1)
659#define RM_0FAE_REG_6 (RM_0FAE_REG_5 + 1)
660#define RM_0FAE_REG_7 (RM_0FAE_REG_6 + 1)
661
662#define PREFIX_90 0
663#define PREFIX_0F10 (PREFIX_90 + 1)
664#define PREFIX_0F11 (PREFIX_0F10 + 1)
665#define PREFIX_0F12 (PREFIX_0F11 + 1)
666#define PREFIX_0F16 (PREFIX_0F12 + 1)
667#define PREFIX_0F2A (PREFIX_0F16 + 1)
668#define PREFIX_0F2B (PREFIX_0F2A + 1)
669#define PREFIX_0F2C (PREFIX_0F2B + 1)
670#define PREFIX_0F2D (PREFIX_0F2C + 1)
671#define PREFIX_0F2E (PREFIX_0F2D + 1)
672#define PREFIX_0F2F (PREFIX_0F2E + 1)
673#define PREFIX_0F51 (PREFIX_0F2F + 1)
674#define PREFIX_0F52 (PREFIX_0F51 + 1)
675#define PREFIX_0F53 (PREFIX_0F52 + 1)
676#define PREFIX_0F58 (PREFIX_0F53 + 1)
677#define PREFIX_0F59 (PREFIX_0F58 + 1)
678#define PREFIX_0F5A (PREFIX_0F59 + 1)
679#define PREFIX_0F5B (PREFIX_0F5A + 1)
680#define PREFIX_0F5C (PREFIX_0F5B + 1)
681#define PREFIX_0F5D (PREFIX_0F5C + 1)
682#define PREFIX_0F5E (PREFIX_0F5D + 1)
683#define PREFIX_0F5F (PREFIX_0F5E + 1)
684#define PREFIX_0F60 (PREFIX_0F5F + 1)
685#define PREFIX_0F61 (PREFIX_0F60 + 1)
686#define PREFIX_0F62 (PREFIX_0F61 + 1)
687#define PREFIX_0F6C (PREFIX_0F62 + 1)
688#define PREFIX_0F6D (PREFIX_0F6C + 1)
689#define PREFIX_0F6F (PREFIX_0F6D + 1)
690#define PREFIX_0F70 (PREFIX_0F6F + 1)
92fddf8e
L
691#define PREFIX_0F73_REG_3 (PREFIX_0F70 + 1)
692#define PREFIX_0F73_REG_7 (PREFIX_0F73_REG_3 + 1)
693#define PREFIX_0F78 (PREFIX_0F73_REG_7 + 1)
1ceb70f8
L
694#define PREFIX_0F79 (PREFIX_0F78 + 1)
695#define PREFIX_0F7C (PREFIX_0F79 + 1)
696#define PREFIX_0F7D (PREFIX_0F7C + 1)
697#define PREFIX_0F7E (PREFIX_0F7D + 1)
698#define PREFIX_0F7F (PREFIX_0F7E + 1)
699#define PREFIX_0FB8 (PREFIX_0F7F + 1)
700#define PREFIX_0FBD (PREFIX_0FB8 + 1)
701#define PREFIX_0FC2 (PREFIX_0FBD + 1)
4ee52178
L
702#define PREFIX_0FC3 (PREFIX_0FC2 + 1)
703#define PREFIX_0FC7_REG_6 (PREFIX_0FC3 + 1)
92fddf8e 704#define PREFIX_0FD0 (PREFIX_0FC7_REG_6 + 1)
1ceb70f8
L
705#define PREFIX_0FD6 (PREFIX_0FD0 + 1)
706#define PREFIX_0FE6 (PREFIX_0FD6 + 1)
707#define PREFIX_0FE7 (PREFIX_0FE6 + 1)
708#define PREFIX_0FF0 (PREFIX_0FE7 + 1)
709#define PREFIX_0FF7 (PREFIX_0FF0 + 1)
710#define PREFIX_0F3810 (PREFIX_0FF7 + 1)
711#define PREFIX_0F3814 (PREFIX_0F3810 + 1)
712#define PREFIX_0F3815 (PREFIX_0F3814 + 1)
713#define PREFIX_0F3817 (PREFIX_0F3815 + 1)
714#define PREFIX_0F3820 (PREFIX_0F3817 + 1)
715#define PREFIX_0F3821 (PREFIX_0F3820 + 1)
716#define PREFIX_0F3822 (PREFIX_0F3821 + 1)
717#define PREFIX_0F3823 (PREFIX_0F3822 + 1)
718#define PREFIX_0F3824 (PREFIX_0F3823 + 1)
719#define PREFIX_0F3825 (PREFIX_0F3824 + 1)
720#define PREFIX_0F3828 (PREFIX_0F3825 + 1)
721#define PREFIX_0F3829 (PREFIX_0F3828 + 1)
722#define PREFIX_0F382A (PREFIX_0F3829 + 1)
723#define PREFIX_0F382B (PREFIX_0F382A + 1)
724#define PREFIX_0F3830 (PREFIX_0F382B + 1)
725#define PREFIX_0F3831 (PREFIX_0F3830 + 1)
726#define PREFIX_0F3832 (PREFIX_0F3831 + 1)
727#define PREFIX_0F3833 (PREFIX_0F3832 + 1)
728#define PREFIX_0F3834 (PREFIX_0F3833 + 1)
729#define PREFIX_0F3835 (PREFIX_0F3834 + 1)
730#define PREFIX_0F3837 (PREFIX_0F3835 + 1)
731#define PREFIX_0F3838 (PREFIX_0F3837 + 1)
732#define PREFIX_0F3839 (PREFIX_0F3838 + 1)
733#define PREFIX_0F383A (PREFIX_0F3839 + 1)
734#define PREFIX_0F383B (PREFIX_0F383A + 1)
735#define PREFIX_0F383C (PREFIX_0F383B + 1)
736#define PREFIX_0F383D (PREFIX_0F383C + 1)
737#define PREFIX_0F383E (PREFIX_0F383D + 1)
738#define PREFIX_0F383F (PREFIX_0F383E + 1)
739#define PREFIX_0F3840 (PREFIX_0F383F + 1)
740#define PREFIX_0F3841 (PREFIX_0F3840 + 1)
f1f8f695
L
741#define PREFIX_0F3880 (PREFIX_0F3841 + 1)
742#define PREFIX_0F3881 (PREFIX_0F3880 + 1)
743#define PREFIX_0F38DB (PREFIX_0F3881 + 1)
c0f3af97
L
744#define PREFIX_0F38DC (PREFIX_0F38DB + 1)
745#define PREFIX_0F38DD (PREFIX_0F38DC + 1)
746#define PREFIX_0F38DE (PREFIX_0F38DD + 1)
747#define PREFIX_0F38DF (PREFIX_0F38DE + 1)
748#define PREFIX_0F38F0 (PREFIX_0F38DF + 1)
1ceb70f8
L
749#define PREFIX_0F38F1 (PREFIX_0F38F0 + 1)
750#define PREFIX_0F3A08 (PREFIX_0F38F1 + 1)
751#define PREFIX_0F3A09 (PREFIX_0F3A08 + 1)
752#define PREFIX_0F3A0A (PREFIX_0F3A09 + 1)
753#define PREFIX_0F3A0B (PREFIX_0F3A0A + 1)
754#define PREFIX_0F3A0C (PREFIX_0F3A0B + 1)
755#define PREFIX_0F3A0D (PREFIX_0F3A0C + 1)
756#define PREFIX_0F3A0E (PREFIX_0F3A0D + 1)
757#define PREFIX_0F3A14 (PREFIX_0F3A0E + 1)
758#define PREFIX_0F3A15 (PREFIX_0F3A14 + 1)
759#define PREFIX_0F3A16 (PREFIX_0F3A15 + 1)
760#define PREFIX_0F3A17 (PREFIX_0F3A16 + 1)
761#define PREFIX_0F3A20 (PREFIX_0F3A17 + 1)
762#define PREFIX_0F3A21 (PREFIX_0F3A20 + 1)
763#define PREFIX_0F3A22 (PREFIX_0F3A21 + 1)
764#define PREFIX_0F3A40 (PREFIX_0F3A22 + 1)
765#define PREFIX_0F3A41 (PREFIX_0F3A40 + 1)
766#define PREFIX_0F3A42 (PREFIX_0F3A41 + 1)
c0f3af97
L
767#define PREFIX_0F3A44 (PREFIX_0F3A42 + 1)
768#define PREFIX_0F3A60 (PREFIX_0F3A44 + 1)
1ceb70f8
L
769#define PREFIX_0F3A61 (PREFIX_0F3A60 + 1)
770#define PREFIX_0F3A62 (PREFIX_0F3A61 + 1)
771#define PREFIX_0F3A63 (PREFIX_0F3A62 + 1)
c0f3af97
L
772#define PREFIX_0F3ADF (PREFIX_0F3A63 + 1)
773#define PREFIX_VEX_10 (PREFIX_0F3ADF + 1)
774#define PREFIX_VEX_11 (PREFIX_VEX_10 + 1)
775#define PREFIX_VEX_12 (PREFIX_VEX_11 + 1)
776#define PREFIX_VEX_16 (PREFIX_VEX_12 + 1)
777#define PREFIX_VEX_2A (PREFIX_VEX_16 + 1)
778#define PREFIX_VEX_2C (PREFIX_VEX_2A + 1)
779#define PREFIX_VEX_2D (PREFIX_VEX_2C + 1)
780#define PREFIX_VEX_2E (PREFIX_VEX_2D + 1)
781#define PREFIX_VEX_2F (PREFIX_VEX_2E + 1)
782#define PREFIX_VEX_51 (PREFIX_VEX_2F + 1)
783#define PREFIX_VEX_52 (PREFIX_VEX_51 + 1)
784#define PREFIX_VEX_53 (PREFIX_VEX_52 + 1)
785#define PREFIX_VEX_58 (PREFIX_VEX_53 + 1)
786#define PREFIX_VEX_59 (PREFIX_VEX_58 + 1)
787#define PREFIX_VEX_5A (PREFIX_VEX_59 + 1)
788#define PREFIX_VEX_5B (PREFIX_VEX_5A + 1)
789#define PREFIX_VEX_5C (PREFIX_VEX_5B + 1)
790#define PREFIX_VEX_5D (PREFIX_VEX_5C + 1)
791#define PREFIX_VEX_5E (PREFIX_VEX_5D + 1)
792#define PREFIX_VEX_5F (PREFIX_VEX_5E + 1)
793#define PREFIX_VEX_60 (PREFIX_VEX_5F + 1)
794#define PREFIX_VEX_61 (PREFIX_VEX_60 + 1)
795#define PREFIX_VEX_62 (PREFIX_VEX_61 + 1)
796#define PREFIX_VEX_63 (PREFIX_VEX_62 + 1)
797#define PREFIX_VEX_64 (PREFIX_VEX_63 + 1)
798#define PREFIX_VEX_65 (PREFIX_VEX_64 + 1)
799#define PREFIX_VEX_66 (PREFIX_VEX_65 + 1)
800#define PREFIX_VEX_67 (PREFIX_VEX_66 + 1)
801#define PREFIX_VEX_68 (PREFIX_VEX_67 + 1)
802#define PREFIX_VEX_69 (PREFIX_VEX_68 + 1)
803#define PREFIX_VEX_6A (PREFIX_VEX_69 + 1)
804#define PREFIX_VEX_6B (PREFIX_VEX_6A + 1)
805#define PREFIX_VEX_6C (PREFIX_VEX_6B + 1)
806#define PREFIX_VEX_6D (PREFIX_VEX_6C + 1)
807#define PREFIX_VEX_6E (PREFIX_VEX_6D + 1)
808#define PREFIX_VEX_6F (PREFIX_VEX_6E + 1)
809#define PREFIX_VEX_70 (PREFIX_VEX_6F + 1)
810#define PREFIX_VEX_71_REG_2 (PREFIX_VEX_70 + 1)
811#define PREFIX_VEX_71_REG_4 (PREFIX_VEX_71_REG_2 + 1)
812#define PREFIX_VEX_71_REG_6 (PREFIX_VEX_71_REG_4 + 1)
813#define PREFIX_VEX_72_REG_2 (PREFIX_VEX_71_REG_6 + 1)
814#define PREFIX_VEX_72_REG_4 (PREFIX_VEX_72_REG_2 + 1)
815#define PREFIX_VEX_72_REG_6 (PREFIX_VEX_72_REG_4 + 1)
816#define PREFIX_VEX_73_REG_2 (PREFIX_VEX_72_REG_6 + 1)
817#define PREFIX_VEX_73_REG_3 (PREFIX_VEX_73_REG_2 + 1)
818#define PREFIX_VEX_73_REG_6 (PREFIX_VEX_73_REG_3 + 1)
819#define PREFIX_VEX_73_REG_7 (PREFIX_VEX_73_REG_6 + 1)
820#define PREFIX_VEX_74 (PREFIX_VEX_73_REG_7 + 1)
821#define PREFIX_VEX_75 (PREFIX_VEX_74 + 1)
822#define PREFIX_VEX_76 (PREFIX_VEX_75 + 1)
823#define PREFIX_VEX_77 (PREFIX_VEX_76 + 1)
824#define PREFIX_VEX_7C (PREFIX_VEX_77 + 1)
825#define PREFIX_VEX_7D (PREFIX_VEX_7C + 1)
826#define PREFIX_VEX_7E (PREFIX_VEX_7D + 1)
827#define PREFIX_VEX_7F (PREFIX_VEX_7E + 1)
828#define PREFIX_VEX_C2 (PREFIX_VEX_7F + 1)
829#define PREFIX_VEX_C4 (PREFIX_VEX_C2 + 1)
830#define PREFIX_VEX_C5 (PREFIX_VEX_C4 + 1)
831#define PREFIX_VEX_D0 (PREFIX_VEX_C5 + 1)
832#define PREFIX_VEX_D1 (PREFIX_VEX_D0 + 1)
833#define PREFIX_VEX_D2 (PREFIX_VEX_D1 + 1)
834#define PREFIX_VEX_D3 (PREFIX_VEX_D2 + 1)
835#define PREFIX_VEX_D4 (PREFIX_VEX_D3 + 1)
836#define PREFIX_VEX_D5 (PREFIX_VEX_D4 + 1)
837#define PREFIX_VEX_D6 (PREFIX_VEX_D5 + 1)
838#define PREFIX_VEX_D7 (PREFIX_VEX_D6 + 1)
839#define PREFIX_VEX_D8 (PREFIX_VEX_D7 + 1)
840#define PREFIX_VEX_D9 (PREFIX_VEX_D8 + 1)
841#define PREFIX_VEX_DA (PREFIX_VEX_D9 + 1)
842#define PREFIX_VEX_DB (PREFIX_VEX_DA + 1)
843#define PREFIX_VEX_DC (PREFIX_VEX_DB + 1)
844#define PREFIX_VEX_DD (PREFIX_VEX_DC + 1)
845#define PREFIX_VEX_DE (PREFIX_VEX_DD + 1)
846#define PREFIX_VEX_DF (PREFIX_VEX_DE + 1)
847#define PREFIX_VEX_E0 (PREFIX_VEX_DF + 1)
848#define PREFIX_VEX_E1 (PREFIX_VEX_E0 + 1)
849#define PREFIX_VEX_E2 (PREFIX_VEX_E1 + 1)
850#define PREFIX_VEX_E3 (PREFIX_VEX_E2 + 1)
851#define PREFIX_VEX_E4 (PREFIX_VEX_E3 + 1)
852#define PREFIX_VEX_E5 (PREFIX_VEX_E4 + 1)
853#define PREFIX_VEX_E6 (PREFIX_VEX_E5 + 1)
854#define PREFIX_VEX_E7 (PREFIX_VEX_E6 + 1)
855#define PREFIX_VEX_E8 (PREFIX_VEX_E7 + 1)
856#define PREFIX_VEX_E9 (PREFIX_VEX_E8 + 1)
857#define PREFIX_VEX_EA (PREFIX_VEX_E9 + 1)
858#define PREFIX_VEX_EB (PREFIX_VEX_EA + 1)
859#define PREFIX_VEX_EC (PREFIX_VEX_EB + 1)
860#define PREFIX_VEX_ED (PREFIX_VEX_EC + 1)
861#define PREFIX_VEX_EE (PREFIX_VEX_ED + 1)
862#define PREFIX_VEX_EF (PREFIX_VEX_EE + 1)
863#define PREFIX_VEX_F0 (PREFIX_VEX_EF + 1)
864#define PREFIX_VEX_F1 (PREFIX_VEX_F0 + 1)
865#define PREFIX_VEX_F2 (PREFIX_VEX_F1 + 1)
866#define PREFIX_VEX_F3 (PREFIX_VEX_F2 + 1)
867#define PREFIX_VEX_F4 (PREFIX_VEX_F3 + 1)
868#define PREFIX_VEX_F5 (PREFIX_VEX_F4 + 1)
869#define PREFIX_VEX_F6 (PREFIX_VEX_F5 + 1)
870#define PREFIX_VEX_F7 (PREFIX_VEX_F6 + 1)
871#define PREFIX_VEX_F8 (PREFIX_VEX_F7 + 1)
872#define PREFIX_VEX_F9 (PREFIX_VEX_F8 + 1)
873#define PREFIX_VEX_FA (PREFIX_VEX_F9 + 1)
874#define PREFIX_VEX_FB (PREFIX_VEX_FA + 1)
875#define PREFIX_VEX_FC (PREFIX_VEX_FB + 1)
876#define PREFIX_VEX_FD (PREFIX_VEX_FC + 1)
877#define PREFIX_VEX_FE (PREFIX_VEX_FD + 1)
06c8514a
L
878#define PREFIX_VEX_3800 (PREFIX_VEX_FE + 1)
879#define PREFIX_VEX_3801 (PREFIX_VEX_3800 + 1)
880#define PREFIX_VEX_3802 (PREFIX_VEX_3801 + 1)
881#define PREFIX_VEX_3803 (PREFIX_VEX_3802 + 1)
882#define PREFIX_VEX_3804 (PREFIX_VEX_3803 + 1)
883#define PREFIX_VEX_3805 (PREFIX_VEX_3804 + 1)
884#define PREFIX_VEX_3806 (PREFIX_VEX_3805 + 1)
885#define PREFIX_VEX_3807 (PREFIX_VEX_3806 + 1)
886#define PREFIX_VEX_3808 (PREFIX_VEX_3807 + 1)
887#define PREFIX_VEX_3809 (PREFIX_VEX_3808 + 1)
888#define PREFIX_VEX_380A (PREFIX_VEX_3809 + 1)
889#define PREFIX_VEX_380B (PREFIX_VEX_380A + 1)
890#define PREFIX_VEX_380C (PREFIX_VEX_380B + 1)
891#define PREFIX_VEX_380D (PREFIX_VEX_380C + 1)
892#define PREFIX_VEX_380E (PREFIX_VEX_380D + 1)
893#define PREFIX_VEX_380F (PREFIX_VEX_380E + 1)
894#define PREFIX_VEX_3817 (PREFIX_VEX_380F + 1)
895#define PREFIX_VEX_3818 (PREFIX_VEX_3817 + 1)
896#define PREFIX_VEX_3819 (PREFIX_VEX_3818 + 1)
897#define PREFIX_VEX_381A (PREFIX_VEX_3819 + 1)
898#define PREFIX_VEX_381C (PREFIX_VEX_381A + 1)
899#define PREFIX_VEX_381D (PREFIX_VEX_381C + 1)
900#define PREFIX_VEX_381E (PREFIX_VEX_381D + 1)
901#define PREFIX_VEX_3820 (PREFIX_VEX_381E + 1)
902#define PREFIX_VEX_3821 (PREFIX_VEX_3820 + 1)
903#define PREFIX_VEX_3822 (PREFIX_VEX_3821 + 1)
904#define PREFIX_VEX_3823 (PREFIX_VEX_3822 + 1)
905#define PREFIX_VEX_3824 (PREFIX_VEX_3823 + 1)
906#define PREFIX_VEX_3825 (PREFIX_VEX_3824 + 1)
907#define PREFIX_VEX_3828 (PREFIX_VEX_3825 + 1)
908#define PREFIX_VEX_3829 (PREFIX_VEX_3828 + 1)
909#define PREFIX_VEX_382A (PREFIX_VEX_3829 + 1)
910#define PREFIX_VEX_382B (PREFIX_VEX_382A + 1)
911#define PREFIX_VEX_382C (PREFIX_VEX_382B + 1)
912#define PREFIX_VEX_382D (PREFIX_VEX_382C + 1)
913#define PREFIX_VEX_382E (PREFIX_VEX_382D + 1)
914#define PREFIX_VEX_382F (PREFIX_VEX_382E + 1)
915#define PREFIX_VEX_3830 (PREFIX_VEX_382F + 1)
916#define PREFIX_VEX_3831 (PREFIX_VEX_3830 + 1)
917#define PREFIX_VEX_3832 (PREFIX_VEX_3831 + 1)
918#define PREFIX_VEX_3833 (PREFIX_VEX_3832 + 1)
919#define PREFIX_VEX_3834 (PREFIX_VEX_3833 + 1)
920#define PREFIX_VEX_3835 (PREFIX_VEX_3834 + 1)
921#define PREFIX_VEX_3837 (PREFIX_VEX_3835 + 1)
922#define PREFIX_VEX_3838 (PREFIX_VEX_3837 + 1)
923#define PREFIX_VEX_3839 (PREFIX_VEX_3838 + 1)
924#define PREFIX_VEX_383A (PREFIX_VEX_3839 + 1)
925#define PREFIX_VEX_383B (PREFIX_VEX_383A + 1)
926#define PREFIX_VEX_383C (PREFIX_VEX_383B + 1)
927#define PREFIX_VEX_383D (PREFIX_VEX_383C + 1)
928#define PREFIX_VEX_383E (PREFIX_VEX_383D + 1)
929#define PREFIX_VEX_383F (PREFIX_VEX_383E + 1)
930#define PREFIX_VEX_3840 (PREFIX_VEX_383F + 1)
931#define PREFIX_VEX_3841 (PREFIX_VEX_3840 + 1)
0bfee649
L
932#define PREFIX_VEX_3896 (PREFIX_VEX_3841 + 1)
933#define PREFIX_VEX_3897 (PREFIX_VEX_3896 + 1)
934#define PREFIX_VEX_3898 (PREFIX_VEX_3897 + 1)
935#define PREFIX_VEX_3899 (PREFIX_VEX_3898 + 1)
936#define PREFIX_VEX_389A (PREFIX_VEX_3899 + 1)
937#define PREFIX_VEX_389B (PREFIX_VEX_389A + 1)
938#define PREFIX_VEX_389C (PREFIX_VEX_389B + 1)
939#define PREFIX_VEX_389D (PREFIX_VEX_389C + 1)
940#define PREFIX_VEX_389E (PREFIX_VEX_389D + 1)
941#define PREFIX_VEX_389F (PREFIX_VEX_389E + 1)
942#define PREFIX_VEX_38A6 (PREFIX_VEX_389F + 1)
943#define PREFIX_VEX_38A7 (PREFIX_VEX_38A6 + 1)
944#define PREFIX_VEX_38A8 (PREFIX_VEX_38A7 + 1)
945#define PREFIX_VEX_38A9 (PREFIX_VEX_38A8 + 1)
946#define PREFIX_VEX_38AA (PREFIX_VEX_38A9 + 1)
947#define PREFIX_VEX_38AB (PREFIX_VEX_38AA + 1)
948#define PREFIX_VEX_38AC (PREFIX_VEX_38AB + 1)
949#define PREFIX_VEX_38AD (PREFIX_VEX_38AC + 1)
950#define PREFIX_VEX_38AE (PREFIX_VEX_38AD + 1)
951#define PREFIX_VEX_38AF (PREFIX_VEX_38AE + 1)
952#define PREFIX_VEX_38B6 (PREFIX_VEX_38AF + 1)
953#define PREFIX_VEX_38B7 (PREFIX_VEX_38B6 + 1)
954#define PREFIX_VEX_38B8 (PREFIX_VEX_38B7 + 1)
955#define PREFIX_VEX_38B9 (PREFIX_VEX_38B8 + 1)
956#define PREFIX_VEX_38BA (PREFIX_VEX_38B9 + 1)
957#define PREFIX_VEX_38BB (PREFIX_VEX_38BA + 1)
958#define PREFIX_VEX_38BC (PREFIX_VEX_38BB + 1)
959#define PREFIX_VEX_38BD (PREFIX_VEX_38BC + 1)
960#define PREFIX_VEX_38BE (PREFIX_VEX_38BD + 1)
961#define PREFIX_VEX_38BF (PREFIX_VEX_38BE + 1)
962#define PREFIX_VEX_38DB (PREFIX_VEX_38BF + 1)
a5ff0eb2
L
963#define PREFIX_VEX_38DC (PREFIX_VEX_38DB + 1)
964#define PREFIX_VEX_38DD (PREFIX_VEX_38DC + 1)
965#define PREFIX_VEX_38DE (PREFIX_VEX_38DD + 1)
966#define PREFIX_VEX_38DF (PREFIX_VEX_38DE + 1)
967#define PREFIX_VEX_3A04 (PREFIX_VEX_38DF + 1)
06c8514a
L
968#define PREFIX_VEX_3A05 (PREFIX_VEX_3A04 + 1)
969#define PREFIX_VEX_3A06 (PREFIX_VEX_3A05 + 1)
970#define PREFIX_VEX_3A08 (PREFIX_VEX_3A06 + 1)
971#define PREFIX_VEX_3A09 (PREFIX_VEX_3A08 + 1)
972#define PREFIX_VEX_3A0A (PREFIX_VEX_3A09 + 1)
973#define PREFIX_VEX_3A0B (PREFIX_VEX_3A0A + 1)
974#define PREFIX_VEX_3A0C (PREFIX_VEX_3A0B + 1)
975#define PREFIX_VEX_3A0D (PREFIX_VEX_3A0C + 1)
976#define PREFIX_VEX_3A0E (PREFIX_VEX_3A0D + 1)
977#define PREFIX_VEX_3A0F (PREFIX_VEX_3A0E + 1)
978#define PREFIX_VEX_3A14 (PREFIX_VEX_3A0F + 1)
979#define PREFIX_VEX_3A15 (PREFIX_VEX_3A14 + 1)
980#define PREFIX_VEX_3A16 (PREFIX_VEX_3A15 + 1)
981#define PREFIX_VEX_3A17 (PREFIX_VEX_3A16 + 1)
982#define PREFIX_VEX_3A18 (PREFIX_VEX_3A17 + 1)
983#define PREFIX_VEX_3A19 (PREFIX_VEX_3A18 + 1)
984#define PREFIX_VEX_3A20 (PREFIX_VEX_3A19 + 1)
985#define PREFIX_VEX_3A21 (PREFIX_VEX_3A20 + 1)
986#define PREFIX_VEX_3A22 (PREFIX_VEX_3A21 + 1)
987#define PREFIX_VEX_3A40 (PREFIX_VEX_3A22 + 1)
988#define PREFIX_VEX_3A41 (PREFIX_VEX_3A40 + 1)
989#define PREFIX_VEX_3A42 (PREFIX_VEX_3A41 + 1)
ce2f5b3c
L
990#define PREFIX_VEX_3A44 (PREFIX_VEX_3A42 + 1)
991#define PREFIX_VEX_3A4A (PREFIX_VEX_3A44 + 1)
06c8514a
L
992#define PREFIX_VEX_3A4B (PREFIX_VEX_3A4A + 1)
993#define PREFIX_VEX_3A4C (PREFIX_VEX_3A4B + 1)
922d8de8
DR
994#define PREFIX_VEX_3A5C (PREFIX_VEX_3A4C + 1)
995#define PREFIX_VEX_3A5D (PREFIX_VEX_3A5C + 1)
996#define PREFIX_VEX_3A5E (PREFIX_VEX_3A5D + 1)
997#define PREFIX_VEX_3A5F (PREFIX_VEX_3A5E + 1)
998#define PREFIX_VEX_3A60 (PREFIX_VEX_3A5F + 1)
06c8514a
L
999#define PREFIX_VEX_3A61 (PREFIX_VEX_3A60 + 1)
1000#define PREFIX_VEX_3A62 (PREFIX_VEX_3A61 + 1)
1001#define PREFIX_VEX_3A63 (PREFIX_VEX_3A62 + 1)
922d8de8
DR
1002#define PREFIX_VEX_3A68 (PREFIX_VEX_3A63 + 1)
1003#define PREFIX_VEX_3A69 (PREFIX_VEX_3A68 + 1)
1004#define PREFIX_VEX_3A6A (PREFIX_VEX_3A69 + 1)
1005#define PREFIX_VEX_3A6B (PREFIX_VEX_3A6A + 1)
1006#define PREFIX_VEX_3A6C (PREFIX_VEX_3A6B + 1)
1007#define PREFIX_VEX_3A6D (PREFIX_VEX_3A6C + 1)
1008#define PREFIX_VEX_3A6E (PREFIX_VEX_3A6D + 1)
1009#define PREFIX_VEX_3A6F (PREFIX_VEX_3A6E + 1)
1010#define PREFIX_VEX_3A78 (PREFIX_VEX_3A6F + 1)
1011#define PREFIX_VEX_3A79 (PREFIX_VEX_3A78 + 1)
1012#define PREFIX_VEX_3A7A (PREFIX_VEX_3A79 + 1)
1013#define PREFIX_VEX_3A7B (PREFIX_VEX_3A7A + 1)
1014#define PREFIX_VEX_3A7C (PREFIX_VEX_3A7B + 1)
1015#define PREFIX_VEX_3A7D (PREFIX_VEX_3A7C + 1)
1016#define PREFIX_VEX_3A7E (PREFIX_VEX_3A7D + 1)
1017#define PREFIX_VEX_3A7F (PREFIX_VEX_3A7E + 1)
1018#define PREFIX_VEX_3ADF (PREFIX_VEX_3A7F + 1)
4e7d34a6
L
1019
1020#define X86_64_06 0
1021#define X86_64_07 (X86_64_06 + 1)
1022#define X86_64_0D (X86_64_07 + 1)
1023#define X86_64_16 (X86_64_0D + 1)
1024#define X86_64_17 (X86_64_16 + 1)
1025#define X86_64_1E (X86_64_17 + 1)
1026#define X86_64_1F (X86_64_1E + 1)
1027#define X86_64_27 (X86_64_1F + 1)
1028#define X86_64_2F (X86_64_27 + 1)
1029#define X86_64_37 (X86_64_2F + 1)
1030#define X86_64_3F (X86_64_37 + 1)
1031#define X86_64_60 (X86_64_3F + 1)
1032#define X86_64_61 (X86_64_60 + 1)
1033#define X86_64_62 (X86_64_61 + 1)
1034#define X86_64_63 (X86_64_62 + 1)
1035#define X86_64_6D (X86_64_63 + 1)
1036#define X86_64_6F (X86_64_6D + 1)
1037#define X86_64_9A (X86_64_6F + 1)
1038#define X86_64_C4 (X86_64_9A + 1)
1039#define X86_64_C5 (X86_64_C4 + 1)
1040#define X86_64_CE (X86_64_C5 + 1)
1041#define X86_64_D4 (X86_64_CE + 1)
1042#define X86_64_D5 (X86_64_D4 + 1)
1043#define X86_64_EA (X86_64_D5 + 1)
1044#define X86_64_0F01_REG_0 (X86_64_EA + 1)
1045#define X86_64_0F01_REG_1 (X86_64_0F01_REG_0 + 1)
1046#define X86_64_0F01_REG_2 (X86_64_0F01_REG_1 + 1)
1047#define X86_64_0F01_REG_3 (X86_64_0F01_REG_2 + 1)
1048
c1e679ec 1049#define THREE_BYTE_0F38 0
4e7d34a6
L
1050#define THREE_BYTE_0F3A (THREE_BYTE_0F38 + 1)
1051#define THREE_BYTE_0F7A (THREE_BYTE_0F3A + 1)
4e7d34a6 1052
c0f3af97
L
1053#define VEX_0F 0
1054#define VEX_0F38 (VEX_0F + 1)
1055#define VEX_0F3A (VEX_0F38 + 1)
1056
1057#define VEX_LEN_10_P_1 0
1058#define VEX_LEN_10_P_3 (VEX_LEN_10_P_1 + 1)
1059#define VEX_LEN_11_P_1 (VEX_LEN_10_P_3 + 1)
1060#define VEX_LEN_11_P_3 (VEX_LEN_11_P_1 + 1)
1061#define VEX_LEN_12_P_0_M_0 (VEX_LEN_11_P_3 + 1)
1062#define VEX_LEN_12_P_0_M_1 (VEX_LEN_12_P_0_M_0 + 1)
1063#define VEX_LEN_12_P_2 (VEX_LEN_12_P_0_M_1 + 1)
1064#define VEX_LEN_13_M_0 (VEX_LEN_12_P_2 + 1)
1065#define VEX_LEN_16_P_0_M_0 (VEX_LEN_13_M_0 + 1)
1066#define VEX_LEN_16_P_0_M_1 (VEX_LEN_16_P_0_M_0 + 1)
1067#define VEX_LEN_16_P_2 (VEX_LEN_16_P_0_M_1 + 1)
1068#define VEX_LEN_17_M_0 (VEX_LEN_16_P_2 + 1)
1069#define VEX_LEN_2A_P_1 (VEX_LEN_17_M_0 + 1)
1070#define VEX_LEN_2A_P_3 (VEX_LEN_2A_P_1 + 1)
168e3097 1071#define VEX_LEN_2C_P_1 (VEX_LEN_2A_P_3 + 1)
c0f3af97
L
1072#define VEX_LEN_2C_P_3 (VEX_LEN_2C_P_1 + 1)
1073#define VEX_LEN_2D_P_1 (VEX_LEN_2C_P_3 + 1)
1074#define VEX_LEN_2D_P_3 (VEX_LEN_2D_P_1 + 1)
1075#define VEX_LEN_2E_P_0 (VEX_LEN_2D_P_3 + 1)
1076#define VEX_LEN_2E_P_2 (VEX_LEN_2E_P_0 + 1)
1077#define VEX_LEN_2F_P_0 (VEX_LEN_2E_P_2 + 1)
1078#define VEX_LEN_2F_P_2 (VEX_LEN_2F_P_0 + 1)
1079#define VEX_LEN_51_P_1 (VEX_LEN_2F_P_2 + 1)
1080#define VEX_LEN_51_P_3 (VEX_LEN_51_P_1 + 1)
1081#define VEX_LEN_52_P_1 (VEX_LEN_51_P_3 + 1)
1082#define VEX_LEN_53_P_1 (VEX_LEN_52_P_1 + 1)
1083#define VEX_LEN_58_P_1 (VEX_LEN_53_P_1 + 1)
1084#define VEX_LEN_58_P_3 (VEX_LEN_58_P_1 + 1)
1085#define VEX_LEN_59_P_1 (VEX_LEN_58_P_3 + 1)
1086#define VEX_LEN_59_P_3 (VEX_LEN_59_P_1 + 1)
1087#define VEX_LEN_5A_P_1 (VEX_LEN_59_P_3 + 1)
1088#define VEX_LEN_5A_P_3 (VEX_LEN_5A_P_1 + 1)
1089#define VEX_LEN_5C_P_1 (VEX_LEN_5A_P_3 + 1)
1090#define VEX_LEN_5C_P_3 (VEX_LEN_5C_P_1 + 1)
1091#define VEX_LEN_5D_P_1 (VEX_LEN_5C_P_3 + 1)
1092#define VEX_LEN_5D_P_3 (VEX_LEN_5D_P_1 + 1)
1093#define VEX_LEN_5E_P_1 (VEX_LEN_5D_P_3 + 1)
1094#define VEX_LEN_5E_P_3 (VEX_LEN_5E_P_1 + 1)
1095#define VEX_LEN_5F_P_1 (VEX_LEN_5E_P_3 + 1)
1096#define VEX_LEN_5F_P_3 (VEX_LEN_5F_P_1 + 1)
1097#define VEX_LEN_60_P_2 (VEX_LEN_5F_P_3 + 1)
1098#define VEX_LEN_61_P_2 (VEX_LEN_60_P_2 + 1)
1099#define VEX_LEN_62_P_2 (VEX_LEN_61_P_2 + 1)
1100#define VEX_LEN_63_P_2 (VEX_LEN_62_P_2 + 1)
1101#define VEX_LEN_64_P_2 (VEX_LEN_63_P_2 + 1)
1102#define VEX_LEN_65_P_2 (VEX_LEN_64_P_2 + 1)
1103#define VEX_LEN_66_P_2 (VEX_LEN_65_P_2 + 1)
1104#define VEX_LEN_67_P_2 (VEX_LEN_66_P_2 + 1)
1105#define VEX_LEN_68_P_2 (VEX_LEN_67_P_2 + 1)
1106#define VEX_LEN_69_P_2 (VEX_LEN_68_P_2 + 1)
1107#define VEX_LEN_6A_P_2 (VEX_LEN_69_P_2 + 1)
1108#define VEX_LEN_6B_P_2 (VEX_LEN_6A_P_2 + 1)
1109#define VEX_LEN_6C_P_2 (VEX_LEN_6B_P_2 + 1)
1110#define VEX_LEN_6D_P_2 (VEX_LEN_6C_P_2 + 1)
1111#define VEX_LEN_6E_P_2 (VEX_LEN_6D_P_2 + 1)
1112#define VEX_LEN_70_P_1 (VEX_LEN_6E_P_2 + 1)
1113#define VEX_LEN_70_P_2 (VEX_LEN_70_P_1 + 1)
1114#define VEX_LEN_70_P_3 (VEX_LEN_70_P_2 + 1)
1115#define VEX_LEN_71_R_2_P_2 (VEX_LEN_70_P_3 + 1)
1116#define VEX_LEN_71_R_4_P_2 (VEX_LEN_71_R_2_P_2 + 1)
1117#define VEX_LEN_71_R_6_P_2 (VEX_LEN_71_R_4_P_2 + 1)
1118#define VEX_LEN_72_R_2_P_2 (VEX_LEN_71_R_6_P_2 + 1)
1119#define VEX_LEN_72_R_4_P_2 (VEX_LEN_72_R_2_P_2 + 1)
1120#define VEX_LEN_72_R_6_P_2 (VEX_LEN_72_R_4_P_2 + 1)
1121#define VEX_LEN_73_R_2_P_2 (VEX_LEN_72_R_6_P_2 + 1)
1122#define VEX_LEN_73_R_3_P_2 (VEX_LEN_73_R_2_P_2 + 1)
1123#define VEX_LEN_73_R_6_P_2 (VEX_LEN_73_R_3_P_2 + 1)
1124#define VEX_LEN_73_R_7_P_2 (VEX_LEN_73_R_6_P_2 + 1)
1125#define VEX_LEN_74_P_2 (VEX_LEN_73_R_7_P_2 + 1)
1126#define VEX_LEN_75_P_2 (VEX_LEN_74_P_2 + 1)
1127#define VEX_LEN_76_P_2 (VEX_LEN_75_P_2 + 1)
1128#define VEX_LEN_7E_P_1 (VEX_LEN_76_P_2 + 1)
1129#define VEX_LEN_7E_P_2 (VEX_LEN_7E_P_1 + 1)
1130#define VEX_LEN_AE_R_2_M_0 (VEX_LEN_7E_P_2 + 1)
1131#define VEX_LEN_AE_R_3_M_0 (VEX_LEN_AE_R_2_M_0 + 1)
1132#define VEX_LEN_C2_P_1 (VEX_LEN_AE_R_3_M_0 + 1)
1133#define VEX_LEN_C2_P_3 (VEX_LEN_C2_P_1 + 1)
1134#define VEX_LEN_C4_P_2 (VEX_LEN_C2_P_3 + 1)
1135#define VEX_LEN_C5_P_2 (VEX_LEN_C4_P_2 + 1)
1136#define VEX_LEN_D1_P_2 (VEX_LEN_C5_P_2 + 1)
1137#define VEX_LEN_D2_P_2 (VEX_LEN_D1_P_2 + 1)
1138#define VEX_LEN_D3_P_2 (VEX_LEN_D2_P_2 + 1)
1139#define VEX_LEN_D4_P_2 (VEX_LEN_D3_P_2 + 1)
1140#define VEX_LEN_D5_P_2 (VEX_LEN_D4_P_2 + 1)
1141#define VEX_LEN_D6_P_2 (VEX_LEN_D5_P_2 + 1)
1142#define VEX_LEN_D7_P_2_M_1 (VEX_LEN_D6_P_2 + 1)
1143#define VEX_LEN_D8_P_2 (VEX_LEN_D7_P_2_M_1 + 1)
1144#define VEX_LEN_D9_P_2 (VEX_LEN_D8_P_2 + 1)
1145#define VEX_LEN_DA_P_2 (VEX_LEN_D9_P_2 + 1)
1146#define VEX_LEN_DB_P_2 (VEX_LEN_DA_P_2 + 1)
1147#define VEX_LEN_DC_P_2 (VEX_LEN_DB_P_2 + 1)
1148#define VEX_LEN_DD_P_2 (VEX_LEN_DC_P_2 + 1)
1149#define VEX_LEN_DE_P_2 (VEX_LEN_DD_P_2 + 1)
1150#define VEX_LEN_DF_P_2 (VEX_LEN_DE_P_2 + 1)
1151#define VEX_LEN_E0_P_2 (VEX_LEN_DF_P_2 + 1)
1152#define VEX_LEN_E1_P_2 (VEX_LEN_E0_P_2 + 1)
1153#define VEX_LEN_E2_P_2 (VEX_LEN_E1_P_2 + 1)
1154#define VEX_LEN_E3_P_2 (VEX_LEN_E2_P_2 + 1)
1155#define VEX_LEN_E4_P_2 (VEX_LEN_E3_P_2 + 1)
1156#define VEX_LEN_E5_P_2 (VEX_LEN_E4_P_2 + 1)
168e3097 1157#define VEX_LEN_E8_P_2 (VEX_LEN_E5_P_2 + 1)
c0f3af97
L
1158#define VEX_LEN_E9_P_2 (VEX_LEN_E8_P_2 + 1)
1159#define VEX_LEN_EA_P_2 (VEX_LEN_E9_P_2 + 1)
1160#define VEX_LEN_EB_P_2 (VEX_LEN_EA_P_2 + 1)
1161#define VEX_LEN_EC_P_2 (VEX_LEN_EB_P_2 + 1)
1162#define VEX_LEN_ED_P_2 (VEX_LEN_EC_P_2 + 1)
1163#define VEX_LEN_EE_P_2 (VEX_LEN_ED_P_2 + 1)
1164#define VEX_LEN_EF_P_2 (VEX_LEN_EE_P_2 + 1)
1165#define VEX_LEN_F1_P_2 (VEX_LEN_EF_P_2 + 1)
1166#define VEX_LEN_F2_P_2 (VEX_LEN_F1_P_2 + 1)
1167#define VEX_LEN_F3_P_2 (VEX_LEN_F2_P_2 + 1)
1168#define VEX_LEN_F4_P_2 (VEX_LEN_F3_P_2 + 1)
1169#define VEX_LEN_F5_P_2 (VEX_LEN_F4_P_2 + 1)
1170#define VEX_LEN_F6_P_2 (VEX_LEN_F5_P_2 + 1)
1171#define VEX_LEN_F7_P_2 (VEX_LEN_F6_P_2 + 1)
1172#define VEX_LEN_F8_P_2 (VEX_LEN_F7_P_2 + 1)
1173#define VEX_LEN_F9_P_2 (VEX_LEN_F8_P_2 + 1)
1174#define VEX_LEN_FA_P_2 (VEX_LEN_F9_P_2 + 1)
1175#define VEX_LEN_FB_P_2 (VEX_LEN_FA_P_2 + 1)
1176#define VEX_LEN_FC_P_2 (VEX_LEN_FB_P_2 + 1)
1177#define VEX_LEN_FD_P_2 (VEX_LEN_FC_P_2 + 1)
1178#define VEX_LEN_FE_P_2 (VEX_LEN_FD_P_2 + 1)
1179#define VEX_LEN_3800_P_2 (VEX_LEN_FE_P_2 + 1)
1180#define VEX_LEN_3801_P_2 (VEX_LEN_3800_P_2 + 1)
1181#define VEX_LEN_3802_P_2 (VEX_LEN_3801_P_2 + 1)
1182#define VEX_LEN_3803_P_2 (VEX_LEN_3802_P_2 + 1)
1183#define VEX_LEN_3804_P_2 (VEX_LEN_3803_P_2 + 1)
1184#define VEX_LEN_3805_P_2 (VEX_LEN_3804_P_2 + 1)
1185#define VEX_LEN_3806_P_2 (VEX_LEN_3805_P_2 + 1)
1186#define VEX_LEN_3807_P_2 (VEX_LEN_3806_P_2 + 1)
1187#define VEX_LEN_3808_P_2 (VEX_LEN_3807_P_2 + 1)
1188#define VEX_LEN_3809_P_2 (VEX_LEN_3808_P_2 + 1)
1189#define VEX_LEN_380A_P_2 (VEX_LEN_3809_P_2 + 1)
1190#define VEX_LEN_380B_P_2 (VEX_LEN_380A_P_2 + 1)
1191#define VEX_LEN_3819_P_2_M_0 (VEX_LEN_380B_P_2 + 1)
1192#define VEX_LEN_381A_P_2_M_0 (VEX_LEN_3819_P_2_M_0 + 1)
1193#define VEX_LEN_381C_P_2 (VEX_LEN_381A_P_2_M_0 + 1)
1194#define VEX_LEN_381D_P_2 (VEX_LEN_381C_P_2 + 1)
1195#define VEX_LEN_381E_P_2 (VEX_LEN_381D_P_2 + 1)
1196#define VEX_LEN_3820_P_2 (VEX_LEN_381E_P_2 + 1)
1197#define VEX_LEN_3821_P_2 (VEX_LEN_3820_P_2 + 1)
1198#define VEX_LEN_3822_P_2 (VEX_LEN_3821_P_2 + 1)
1199#define VEX_LEN_3823_P_2 (VEX_LEN_3822_P_2 + 1)
1200#define VEX_LEN_3824_P_2 (VEX_LEN_3823_P_2 + 1)
1201#define VEX_LEN_3825_P_2 (VEX_LEN_3824_P_2 + 1)
1202#define VEX_LEN_3828_P_2 (VEX_LEN_3825_P_2 + 1)
1203#define VEX_LEN_3829_P_2 (VEX_LEN_3828_P_2 + 1)
1204#define VEX_LEN_382A_P_2_M_0 (VEX_LEN_3829_P_2 + 1)
1205#define VEX_LEN_382B_P_2 (VEX_LEN_382A_P_2_M_0 + 1)
1206#define VEX_LEN_3830_P_2 (VEX_LEN_382B_P_2 + 1)
1207#define VEX_LEN_3831_P_2 (VEX_LEN_3830_P_2 + 1)
1208#define VEX_LEN_3832_P_2 (VEX_LEN_3831_P_2 + 1)
1209#define VEX_LEN_3833_P_2 (VEX_LEN_3832_P_2 + 1)
1210#define VEX_LEN_3834_P_2 (VEX_LEN_3833_P_2 + 1)
1211#define VEX_LEN_3835_P_2 (VEX_LEN_3834_P_2 + 1)
1212#define VEX_LEN_3837_P_2 (VEX_LEN_3835_P_2 + 1)
1213#define VEX_LEN_3838_P_2 (VEX_LEN_3837_P_2 + 1)
1214#define VEX_LEN_3839_P_2 (VEX_LEN_3838_P_2 + 1)
1215#define VEX_LEN_383A_P_2 (VEX_LEN_3839_P_2 + 1)
1216#define VEX_LEN_383B_P_2 (VEX_LEN_383A_P_2 + 1)
1217#define VEX_LEN_383C_P_2 (VEX_LEN_383B_P_2 + 1)
1218#define VEX_LEN_383D_P_2 (VEX_LEN_383C_P_2 + 1)
1219#define VEX_LEN_383E_P_2 (VEX_LEN_383D_P_2 + 1)
1220#define VEX_LEN_383F_P_2 (VEX_LEN_383E_P_2 + 1)
1221#define VEX_LEN_3840_P_2 (VEX_LEN_383F_P_2 + 1)
1222#define VEX_LEN_3841_P_2 (VEX_LEN_3840_P_2 + 1)
a5ff0eb2
L
1223#define VEX_LEN_38DB_P_2 (VEX_LEN_3841_P_2 + 1)
1224#define VEX_LEN_38DC_P_2 (VEX_LEN_38DB_P_2 + 1)
1225#define VEX_LEN_38DD_P_2 (VEX_LEN_38DC_P_2 + 1)
1226#define VEX_LEN_38DE_P_2 (VEX_LEN_38DD_P_2 + 1)
1227#define VEX_LEN_38DF_P_2 (VEX_LEN_38DE_P_2 + 1)
1228#define VEX_LEN_3A06_P_2 (VEX_LEN_38DF_P_2 + 1)
c0f3af97
L
1229#define VEX_LEN_3A0A_P_2 (VEX_LEN_3A06_P_2 + 1)
1230#define VEX_LEN_3A0B_P_2 (VEX_LEN_3A0A_P_2 + 1)
1231#define VEX_LEN_3A0E_P_2 (VEX_LEN_3A0B_P_2 + 1)
1232#define VEX_LEN_3A0F_P_2 (VEX_LEN_3A0E_P_2 + 1)
1233#define VEX_LEN_3A14_P_2 (VEX_LEN_3A0F_P_2 + 1)
1234#define VEX_LEN_3A15_P_2 (VEX_LEN_3A14_P_2 + 1)
1235#define VEX_LEN_3A16_P_2 (VEX_LEN_3A15_P_2 + 1)
1236#define VEX_LEN_3A17_P_2 (VEX_LEN_3A16_P_2 + 1)
1237#define VEX_LEN_3A18_P_2 (VEX_LEN_3A17_P_2 + 1)
1238#define VEX_LEN_3A19_P_2 (VEX_LEN_3A18_P_2 + 1)
1239#define VEX_LEN_3A20_P_2 (VEX_LEN_3A19_P_2 + 1)
1240#define VEX_LEN_3A21_P_2 (VEX_LEN_3A20_P_2 + 1)
1241#define VEX_LEN_3A22_P_2 (VEX_LEN_3A21_P_2 + 1)
1242#define VEX_LEN_3A41_P_2 (VEX_LEN_3A22_P_2 + 1)
1243#define VEX_LEN_3A42_P_2 (VEX_LEN_3A41_P_2 + 1)
ce2f5b3c
L
1244#define VEX_LEN_3A44_P_2 (VEX_LEN_3A42_P_2 + 1)
1245#define VEX_LEN_3A4C_P_2 (VEX_LEN_3A44_P_2 + 1)
c0f3af97
L
1246#define VEX_LEN_3A60_P_2 (VEX_LEN_3A4C_P_2 + 1)
1247#define VEX_LEN_3A61_P_2 (VEX_LEN_3A60_P_2 + 1)
1248#define VEX_LEN_3A62_P_2 (VEX_LEN_3A61_P_2 + 1)
1249#define VEX_LEN_3A63_P_2 (VEX_LEN_3A62_P_2 + 1)
922d8de8
DR
1250#define VEX_LEN_3A6A_P_2 (VEX_LEN_3A63_P_2 + 1)
1251#define VEX_LEN_3A6B_P_2 (VEX_LEN_3A6A_P_2 + 1)
1252#define VEX_LEN_3A6E_P_2 (VEX_LEN_3A6B_P_2 + 1)
1253#define VEX_LEN_3A6F_P_2 (VEX_LEN_3A6E_P_2 + 1)
1254#define VEX_LEN_3A7A_P_2 (VEX_LEN_3A6F_P_2 + 1)
1255#define VEX_LEN_3A7B_P_2 (VEX_LEN_3A7A_P_2 + 1)
1256#define VEX_LEN_3A7E_P_2 (VEX_LEN_3A7B_P_2 + 1)
1257#define VEX_LEN_3A7F_P_2 (VEX_LEN_3A7E_P_2 + 1)
1258#define VEX_LEN_3ADF_P_2 (VEX_LEN_3A7F_P_2 + 1)
c0f3af97 1259
26ca5450 1260typedef void (*op_rtn) (int bytemode, int sizeflag);
252b5132
RH
1261
1262struct dis386 {
2da11e11 1263 const char *name;
ce518a5f
L
1264 struct
1265 {
1266 op_rtn rtn;
1267 int bytemode;
1268 } op[MAX_OPERANDS];
252b5132
RH
1269};
1270
1271/* Upper case letters in the instruction names here are macros.
1272 'A' => print 'b' if no register operands or suffix_always is true
1273 'B' => print 'b' if suffix_always is true
9306ca4a 1274 'C' => print 's' or 'l' ('w' or 'd' in Intel mode) depending on operand
98b528ac 1275 size prefix
ed7841b3 1276 'D' => print 'w' if no register operands or 'w', 'l' or 'q', if
98b528ac 1277 suffix_always is true
252b5132 1278 'E' => print 'e' if 32-bit form of jcxz
3ffd33cf 1279 'F' => print 'w' or 'l' depending on address size prefix (loop insns)
52fd6d94 1280 'G' => print 'w' or 'l' depending on operand size prefix (i/o insns)
5dd0794d 1281 'H' => print ",pt" or ",pn" branch hint
9306ca4a 1282 'I' => honor following macro letter even in Intel mode (implemented only
98b528ac 1283 for some of the macro letters)
9306ca4a 1284 'J' => print 'l'
42903f7f 1285 'K' => print 'd' or 'q' if rex prefix is present.
252b5132 1286 'L' => print 'l' if suffix_always is true
9d141669 1287 'M' => print 'r' if intel_mnemonic is false.
252b5132 1288 'N' => print 'n' if instruction has no wait "prefix"
a35ca55a 1289 'O' => print 'd' or 'o' (or 'q' in Intel mode)
52b15da3 1290 'P' => print 'w', 'l' or 'q' if instruction has an operand size prefix,
98b528ac
L
1291 or suffix_always is true. print 'q' if rex prefix is present.
1292 'Q' => print 'w', 'l' or 'q' for memory operand or suffix_always
1293 is true
a35ca55a 1294 'R' => print 'w', 'l' or 'q' ('d' for 'l' and 'e' in Intel mode)
52b15da3 1295 'S' => print 'w', 'l' or 'q' if suffix_always is true
6439fc28
AM
1296 'T' => print 'q' in 64bit mode and behave as 'P' otherwise
1297 'U' => print 'q' in 64bit mode and behave as 'Q' otherwise
1a114b12 1298 'V' => print 'q' in 64bit mode and behave as 'S' otherwise
a35ca55a 1299 'W' => print 'b', 'w' or 'l' ('d' in Intel mode)
9306ca4a 1300 'X' => print 's', 'd' depending on data16 prefix (for XMM)
8a72226a
L
1301 'Y' => 'q' if instruction has an REX 64bit overwrite prefix and
1302 suffix_always is true.
6dd5059a 1303 'Z' => print 'q' in 64bit mode and behave as 'L' otherwise
9d141669 1304 '!' => change condition from true to false or from false to true.
98b528ac
L
1305 '%' => add 1 upper case letter to the macro.
1306
1307 2 upper case letter macros:
c0f3af97
L
1308 "XY" => print 'x' or 'y' if no register operands or suffix_always
1309 is true.
0bfee649 1310 'XW' => print 's', 'd' depending on the VEX.W bit (for FMA)
98b528ac
L
1311 'LQ' => print 'l' ('d' in Intel mode) or 'q' for memory operand
1312 or suffix_always is true
52b15da3 1313
6439fc28
AM
1314 Many of the above letters print nothing in Intel mode. See "putop"
1315 for the details.
52b15da3 1316
6439fc28 1317 Braces '{' and '}', and vertical bars '|', indicate alternative
7c52e0e8 1318 mnemonic strings for AT&T and Intel. */
252b5132 1319
6439fc28 1320static const struct dis386 dis386[] = {
252b5132 1321 /* 00 */
ce518a5f
L
1322 { "addB", { Eb, Gb } },
1323 { "addS", { Ev, Gv } },
c7532693
L
1324 { "addB", { Gb, EbS } },
1325 { "addS", { Gv, EvS } },
ce518a5f
L
1326 { "addB", { AL, Ib } },
1327 { "addS", { eAX, Iv } },
4e7d34a6
L
1328 { X86_64_TABLE (X86_64_06) },
1329 { X86_64_TABLE (X86_64_07) },
252b5132 1330 /* 08 */
ce518a5f
L
1331 { "orB", { Eb, Gb } },
1332 { "orS", { Ev, Gv } },
c7532693
L
1333 { "orB", { Gb, EbS } },
1334 { "orS", { Gv, EvS } },
ce518a5f
L
1335 { "orB", { AL, Ib } },
1336 { "orS", { eAX, Iv } },
4e7d34a6 1337 { X86_64_TABLE (X86_64_0D) },
ce518a5f 1338 { "(bad)", { XX } }, /* 0x0f extended opcode escape */
252b5132 1339 /* 10 */
ce518a5f
L
1340 { "adcB", { Eb, Gb } },
1341 { "adcS", { Ev, Gv } },
c7532693
L
1342 { "adcB", { Gb, EbS } },
1343 { "adcS", { Gv, EvS } },
ce518a5f
L
1344 { "adcB", { AL, Ib } },
1345 { "adcS", { eAX, Iv } },
4e7d34a6
L
1346 { X86_64_TABLE (X86_64_16) },
1347 { X86_64_TABLE (X86_64_17) },
252b5132 1348 /* 18 */
ce518a5f
L
1349 { "sbbB", { Eb, Gb } },
1350 { "sbbS", { Ev, Gv } },
c7532693
L
1351 { "sbbB", { Gb, EbS } },
1352 { "sbbS", { Gv, EvS } },
ce518a5f
L
1353 { "sbbB", { AL, Ib } },
1354 { "sbbS", { eAX, Iv } },
4e7d34a6
L
1355 { X86_64_TABLE (X86_64_1E) },
1356 { X86_64_TABLE (X86_64_1F) },
252b5132 1357 /* 20 */
ce518a5f
L
1358 { "andB", { Eb, Gb } },
1359 { "andS", { Ev, Gv } },
c7532693
L
1360 { "andB", { Gb, EbS } },
1361 { "andS", { Gv, EvS } },
ce518a5f
L
1362 { "andB", { AL, Ib } },
1363 { "andS", { eAX, Iv } },
1364 { "(bad)", { XX } }, /* SEG ES prefix */
4e7d34a6 1365 { X86_64_TABLE (X86_64_27) },
252b5132 1366 /* 28 */
ce518a5f
L
1367 { "subB", { Eb, Gb } },
1368 { "subS", { Ev, Gv } },
c7532693
L
1369 { "subB", { Gb, EbS } },
1370 { "subS", { Gv, EvS } },
ce518a5f
L
1371 { "subB", { AL, Ib } },
1372 { "subS", { eAX, Iv } },
1373 { "(bad)", { XX } }, /* SEG CS prefix */
4e7d34a6 1374 { X86_64_TABLE (X86_64_2F) },
252b5132 1375 /* 30 */
ce518a5f
L
1376 { "xorB", { Eb, Gb } },
1377 { "xorS", { Ev, Gv } },
c7532693
L
1378 { "xorB", { Gb, EbS } },
1379 { "xorS", { Gv, EvS } },
ce518a5f
L
1380 { "xorB", { AL, Ib } },
1381 { "xorS", { eAX, Iv } },
1382 { "(bad)", { XX } }, /* SEG SS prefix */
4e7d34a6 1383 { X86_64_TABLE (X86_64_37) },
252b5132 1384 /* 38 */
ce518a5f
L
1385 { "cmpB", { Eb, Gb } },
1386 { "cmpS", { Ev, Gv } },
c7532693
L
1387 { "cmpB", { Gb, EbS } },
1388 { "cmpS", { Gv, EvS } },
ce518a5f
L
1389 { "cmpB", { AL, Ib } },
1390 { "cmpS", { eAX, Iv } },
1391 { "(bad)", { XX } }, /* SEG DS prefix */
4e7d34a6 1392 { X86_64_TABLE (X86_64_3F) },
252b5132 1393 /* 40 */
ce518a5f
L
1394 { "inc{S|}", { RMeAX } },
1395 { "inc{S|}", { RMeCX } },
1396 { "inc{S|}", { RMeDX } },
1397 { "inc{S|}", { RMeBX } },
1398 { "inc{S|}", { RMeSP } },
1399 { "inc{S|}", { RMeBP } },
1400 { "inc{S|}", { RMeSI } },
1401 { "inc{S|}", { RMeDI } },
252b5132 1402 /* 48 */
ce518a5f
L
1403 { "dec{S|}", { RMeAX } },
1404 { "dec{S|}", { RMeCX } },
1405 { "dec{S|}", { RMeDX } },
1406 { "dec{S|}", { RMeBX } },
1407 { "dec{S|}", { RMeSP } },
1408 { "dec{S|}", { RMeBP } },
1409 { "dec{S|}", { RMeSI } },
1410 { "dec{S|}", { RMeDI } },
252b5132 1411 /* 50 */
ce518a5f
L
1412 { "pushV", { RMrAX } },
1413 { "pushV", { RMrCX } },
1414 { "pushV", { RMrDX } },
1415 { "pushV", { RMrBX } },
1416 { "pushV", { RMrSP } },
1417 { "pushV", { RMrBP } },
1418 { "pushV", { RMrSI } },
1419 { "pushV", { RMrDI } },
252b5132 1420 /* 58 */
ce518a5f
L
1421 { "popV", { RMrAX } },
1422 { "popV", { RMrCX } },
1423 { "popV", { RMrDX } },
1424 { "popV", { RMrBX } },
1425 { "popV", { RMrSP } },
1426 { "popV", { RMrBP } },
1427 { "popV", { RMrSI } },
1428 { "popV", { RMrDI } },
252b5132 1429 /* 60 */
4e7d34a6
L
1430 { X86_64_TABLE (X86_64_60) },
1431 { X86_64_TABLE (X86_64_61) },
1432 { X86_64_TABLE (X86_64_62) },
1433 { X86_64_TABLE (X86_64_63) },
ce518a5f
L
1434 { "(bad)", { XX } }, /* seg fs */
1435 { "(bad)", { XX } }, /* seg gs */
1436 { "(bad)", { XX } }, /* op size prefix */
1437 { "(bad)", { XX } }, /* adr size prefix */
252b5132 1438 /* 68 */
ce518a5f
L
1439 { "pushT", { Iq } },
1440 { "imulS", { Gv, Ev, Iv } },
1441 { "pushT", { sIb } },
1442 { "imulS", { Gv, Ev, sIb } },
7c52e0e8 1443 { "ins{b|}", { Ybr, indirDX } },
4e7d34a6 1444 { X86_64_TABLE (X86_64_6D) },
7c52e0e8 1445 { "outs{b|}", { indirDXr, Xb } },
4e7d34a6 1446 { X86_64_TABLE (X86_64_6F) },
252b5132 1447 /* 70 */
ce518a5f
L
1448 { "joH", { Jb, XX, cond_jump_flag } },
1449 { "jnoH", { Jb, XX, cond_jump_flag } },
1450 { "jbH", { Jb, XX, cond_jump_flag } },
1451 { "jaeH", { Jb, XX, cond_jump_flag } },
1452 { "jeH", { Jb, XX, cond_jump_flag } },
1453 { "jneH", { Jb, XX, cond_jump_flag } },
1454 { "jbeH", { Jb, XX, cond_jump_flag } },
1455 { "jaH", { Jb, XX, cond_jump_flag } },
252b5132 1456 /* 78 */
ce518a5f
L
1457 { "jsH", { Jb, XX, cond_jump_flag } },
1458 { "jnsH", { Jb, XX, cond_jump_flag } },
1459 { "jpH", { Jb, XX, cond_jump_flag } },
1460 { "jnpH", { Jb, XX, cond_jump_flag } },
1461 { "jlH", { Jb, XX, cond_jump_flag } },
1462 { "jgeH", { Jb, XX, cond_jump_flag } },
1463 { "jleH", { Jb, XX, cond_jump_flag } },
1464 { "jgH", { Jb, XX, cond_jump_flag } },
252b5132 1465 /* 80 */
1ceb70f8
L
1466 { REG_TABLE (REG_80) },
1467 { REG_TABLE (REG_81) },
ce518a5f 1468 { "(bad)", { XX } },
1ceb70f8 1469 { REG_TABLE (REG_82) },
ce518a5f
L
1470 { "testB", { Eb, Gb } },
1471 { "testS", { Ev, Gv } },
1472 { "xchgB", { Eb, Gb } },
1473 { "xchgS", { Ev, Gv } },
252b5132 1474 /* 88 */
ce518a5f
L
1475 { "movB", { Eb, Gb } },
1476 { "movS", { Ev, Gv } },
b6169b20
L
1477 { "movB", { Gb, EbS } },
1478 { "movS", { Gv, EvS } },
ce518a5f 1479 { "movD", { Sv, Sw } },
1ceb70f8 1480 { MOD_TABLE (MOD_8D) },
ce518a5f 1481 { "movD", { Sw, Sv } },
1ceb70f8 1482 { REG_TABLE (REG_8F) },
252b5132 1483 /* 90 */
1ceb70f8 1484 { PREFIX_TABLE (PREFIX_90) },
ce518a5f
L
1485 { "xchgS", { RMeCX, eAX } },
1486 { "xchgS", { RMeDX, eAX } },
1487 { "xchgS", { RMeBX, eAX } },
1488 { "xchgS", { RMeSP, eAX } },
1489 { "xchgS", { RMeBP, eAX } },
1490 { "xchgS", { RMeSI, eAX } },
1491 { "xchgS", { RMeDI, eAX } },
252b5132 1492 /* 98 */
7c52e0e8
L
1493 { "cW{t|}R", { XX } },
1494 { "cR{t|}O", { XX } },
4e7d34a6 1495 { X86_64_TABLE (X86_64_9A) },
ce518a5f
L
1496 { "(bad)", { XX } }, /* fwait */
1497 { "pushfT", { XX } },
1498 { "popfT", { XX } },
7c52e0e8
L
1499 { "sahf", { XX } },
1500 { "lahf", { XX } },
252b5132 1501 /* a0 */
ce518a5f
L
1502 { "movB", { AL, Ob } },
1503 { "movS", { eAX, Ov } },
1504 { "movB", { Ob, AL } },
1505 { "movS", { Ov, eAX } },
7c52e0e8
L
1506 { "movs{b|}", { Ybr, Xb } },
1507 { "movs{R|}", { Yvr, Xv } },
1508 { "cmps{b|}", { Xb, Yb } },
1509 { "cmps{R|}", { Xv, Yv } },
252b5132 1510 /* a8 */
ce518a5f
L
1511 { "testB", { AL, Ib } },
1512 { "testS", { eAX, Iv } },
1513 { "stosB", { Ybr, AL } },
1514 { "stosS", { Yvr, eAX } },
1515 { "lodsB", { ALr, Xb } },
1516 { "lodsS", { eAXr, Xv } },
1517 { "scasB", { AL, Yb } },
1518 { "scasS", { eAX, Yv } },
252b5132 1519 /* b0 */
ce518a5f
L
1520 { "movB", { RMAL, Ib } },
1521 { "movB", { RMCL, Ib } },
1522 { "movB", { RMDL, Ib } },
1523 { "movB", { RMBL, Ib } },
1524 { "movB", { RMAH, Ib } },
1525 { "movB", { RMCH, Ib } },
1526 { "movB", { RMDH, Ib } },
1527 { "movB", { RMBH, Ib } },
252b5132 1528 /* b8 */
ce518a5f
L
1529 { "movS", { RMeAX, Iv64 } },
1530 { "movS", { RMeCX, Iv64 } },
1531 { "movS", { RMeDX, Iv64 } },
1532 { "movS", { RMeBX, Iv64 } },
1533 { "movS", { RMeSP, Iv64 } },
1534 { "movS", { RMeBP, Iv64 } },
1535 { "movS", { RMeSI, Iv64 } },
1536 { "movS", { RMeDI, Iv64 } },
252b5132 1537 /* c0 */
1ceb70f8
L
1538 { REG_TABLE (REG_C0) },
1539 { REG_TABLE (REG_C1) },
ce518a5f
L
1540 { "retT", { Iw } },
1541 { "retT", { XX } },
4e7d34a6
L
1542 { X86_64_TABLE (X86_64_C4) },
1543 { X86_64_TABLE (X86_64_C5) },
1ceb70f8
L
1544 { REG_TABLE (REG_C6) },
1545 { REG_TABLE (REG_C7) },
252b5132 1546 /* c8 */
ce518a5f
L
1547 { "enterT", { Iw, Ib } },
1548 { "leaveT", { XX } },
ddab3d59
JB
1549 { "Jret{|f}P", { Iw } },
1550 { "Jret{|f}P", { XX } },
ce518a5f
L
1551 { "int3", { XX } },
1552 { "int", { Ib } },
4e7d34a6 1553 { X86_64_TABLE (X86_64_CE) },
ce518a5f 1554 { "iretP", { XX } },
252b5132 1555 /* d0 */
1ceb70f8
L
1556 { REG_TABLE (REG_D0) },
1557 { REG_TABLE (REG_D1) },
1558 { REG_TABLE (REG_D2) },
1559 { REG_TABLE (REG_D3) },
4e7d34a6
L
1560 { X86_64_TABLE (X86_64_D4) },
1561 { X86_64_TABLE (X86_64_D5) },
ce518a5f
L
1562 { "(bad)", { XX } },
1563 { "xlat", { DSBX } },
252b5132
RH
1564 /* d8 */
1565 { FLOAT },
1566 { FLOAT },
1567 { FLOAT },
1568 { FLOAT },
1569 { FLOAT },
1570 { FLOAT },
1571 { FLOAT },
1572 { FLOAT },
1573 /* e0 */
ce518a5f
L
1574 { "loopneFH", { Jb, XX, loop_jcxz_flag } },
1575 { "loopeFH", { Jb, XX, loop_jcxz_flag } },
1576 { "loopFH", { Jb, XX, loop_jcxz_flag } },
1577 { "jEcxzH", { Jb, XX, loop_jcxz_flag } },
1578 { "inB", { AL, Ib } },
1579 { "inG", { zAX, Ib } },
1580 { "outB", { Ib, AL } },
1581 { "outG", { Ib, zAX } },
252b5132 1582 /* e8 */
ce518a5f
L
1583 { "callT", { Jv } },
1584 { "jmpT", { Jv } },
4e7d34a6 1585 { X86_64_TABLE (X86_64_EA) },
ce518a5f
L
1586 { "jmp", { Jb } },
1587 { "inB", { AL, indirDX } },
1588 { "inG", { zAX, indirDX } },
1589 { "outB", { indirDX, AL } },
1590 { "outG", { indirDX, zAX } },
252b5132 1591 /* f0 */
ce518a5f
L
1592 { "(bad)", { XX } }, /* lock prefix */
1593 { "icebp", { XX } },
1594 { "(bad)", { XX } }, /* repne */
1595 { "(bad)", { XX } }, /* repz */
1596 { "hlt", { XX } },
1597 { "cmc", { XX } },
1ceb70f8
L
1598 { REG_TABLE (REG_F6) },
1599 { REG_TABLE (REG_F7) },
252b5132 1600 /* f8 */
ce518a5f
L
1601 { "clc", { XX } },
1602 { "stc", { XX } },
1603 { "cli", { XX } },
1604 { "sti", { XX } },
1605 { "cld", { XX } },
1606 { "std", { XX } },
1ceb70f8
L
1607 { REG_TABLE (REG_FE) },
1608 { REG_TABLE (REG_FF) },
252b5132
RH
1609};
1610
6439fc28 1611static const struct dis386 dis386_twobyte[] = {
252b5132 1612 /* 00 */
1ceb70f8
L
1613 { REG_TABLE (REG_0F00 ) },
1614 { REG_TABLE (REG_0F01 ) },
ce518a5f
L
1615 { "larS", { Gv, Ew } },
1616 { "lslS", { Gv, Ew } },
1617 { "(bad)", { XX } },
1618 { "syscall", { XX } },
1619 { "clts", { XX } },
1620 { "sysretP", { XX } },
252b5132 1621 /* 08 */
ce518a5f
L
1622 { "invd", { XX } },
1623 { "wbinvd", { XX } },
1624 { "(bad)", { XX } },
1625 { "ud2a", { XX } },
1626 { "(bad)", { XX } },
b5b1fc4f 1627 { REG_TABLE (REG_0F0D) },
ce518a5f
L
1628 { "femms", { XX } },
1629 { "", { MX, EM, OPSUF } }, /* See OP_3DNowSuffix. */
252b5132 1630 /* 10 */
1ceb70f8
L
1631 { PREFIX_TABLE (PREFIX_0F10) },
1632 { PREFIX_TABLE (PREFIX_0F11) },
1633 { PREFIX_TABLE (PREFIX_0F12) },
1634 { MOD_TABLE (MOD_0F13) },
f2a421c4
L
1635 { "unpcklpX", { XM, EXx } },
1636 { "unpckhpX", { XM, EXx } },
1ceb70f8
L
1637 { PREFIX_TABLE (PREFIX_0F16) },
1638 { MOD_TABLE (MOD_0F17) },
252b5132 1639 /* 18 */
1ceb70f8 1640 { REG_TABLE (REG_0F18) },
b5b1fc4f
L
1641 { "nopQ", { Ev } },
1642 { "nopQ", { Ev } },
1643 { "nopQ", { Ev } },
1644 { "nopQ", { Ev } },
1645 { "nopQ", { Ev } },
1646 { "nopQ", { Ev } },
ce518a5f 1647 { "nopQ", { Ev } },
252b5132 1648 /* 20 */
1ceb70f8
L
1649 { MOD_TABLE (MOD_0F20) },
1650 { MOD_TABLE (MOD_0F21) },
1651 { MOD_TABLE (MOD_0F22) },
1652 { MOD_TABLE (MOD_0F23) },
1653 { MOD_TABLE (MOD_0F24) },
c1e679ec 1654 { "(bad)", { XX } },
1ceb70f8 1655 { MOD_TABLE (MOD_0F26) },
ce518a5f 1656 { "(bad)", { XX } },
252b5132 1657 /* 28 */
09a2c6cf 1658 { "movapX", { XM, EXx } },
b6169b20 1659 { "movapX", { EXxS, XM } },
1ceb70f8
L
1660 { PREFIX_TABLE (PREFIX_0F2A) },
1661 { PREFIX_TABLE (PREFIX_0F2B) },
1662 { PREFIX_TABLE (PREFIX_0F2C) },
1663 { PREFIX_TABLE (PREFIX_0F2D) },
1664 { PREFIX_TABLE (PREFIX_0F2E) },
1665 { PREFIX_TABLE (PREFIX_0F2F) },
252b5132 1666 /* 30 */
ce518a5f
L
1667 { "wrmsr", { XX } },
1668 { "rdtsc", { XX } },
1669 { "rdmsr", { XX } },
1670 { "rdpmc", { XX } },
1671 { "sysenter", { XX } },
1672 { "sysexit", { XX } },
1673 { "(bad)", { XX } },
47dd174c 1674 { "getsec", { XX } },
252b5132 1675 /* 38 */
4e7d34a6 1676 { THREE_BYTE_TABLE (THREE_BYTE_0F38) },
ce518a5f 1677 { "(bad)", { XX } },
4e7d34a6 1678 { THREE_BYTE_TABLE (THREE_BYTE_0F3A) },
ce518a5f
L
1679 { "(bad)", { XX } },
1680 { "(bad)", { XX } },
1681 { "(bad)", { XX } },
1682 { "(bad)", { XX } },
1683 { "(bad)", { XX } },
252b5132 1684 /* 40 */
b19d5385
JB
1685 { "cmovoS", { Gv, Ev } },
1686 { "cmovnoS", { Gv, Ev } },
1687 { "cmovbS", { Gv, Ev } },
1688 { "cmovaeS", { Gv, Ev } },
1689 { "cmoveS", { Gv, Ev } },
1690 { "cmovneS", { Gv, Ev } },
1691 { "cmovbeS", { Gv, Ev } },
1692 { "cmovaS", { Gv, Ev } },
252b5132 1693 /* 48 */
b19d5385
JB
1694 { "cmovsS", { Gv, Ev } },
1695 { "cmovnsS", { Gv, Ev } },
1696 { "cmovpS", { Gv, Ev } },
1697 { "cmovnpS", { Gv, Ev } },
1698 { "cmovlS", { Gv, Ev } },
1699 { "cmovgeS", { Gv, Ev } },
1700 { "cmovleS", { Gv, Ev } },
1701 { "cmovgS", { Gv, Ev } },
252b5132 1702 /* 50 */
75c135a8 1703 { MOD_TABLE (MOD_0F51) },
1ceb70f8
L
1704 { PREFIX_TABLE (PREFIX_0F51) },
1705 { PREFIX_TABLE (PREFIX_0F52) },
1706 { PREFIX_TABLE (PREFIX_0F53) },
09a2c6cf
L
1707 { "andpX", { XM, EXx } },
1708 { "andnpX", { XM, EXx } },
1709 { "orpX", { XM, EXx } },
1710 { "xorpX", { XM, EXx } },
252b5132 1711 /* 58 */
1ceb70f8
L
1712 { PREFIX_TABLE (PREFIX_0F58) },
1713 { PREFIX_TABLE (PREFIX_0F59) },
1714 { PREFIX_TABLE (PREFIX_0F5A) },
1715 { PREFIX_TABLE (PREFIX_0F5B) },
1716 { PREFIX_TABLE (PREFIX_0F5C) },
1717 { PREFIX_TABLE (PREFIX_0F5D) },
1718 { PREFIX_TABLE (PREFIX_0F5E) },
1719 { PREFIX_TABLE (PREFIX_0F5F) },
252b5132 1720 /* 60 */
1ceb70f8
L
1721 { PREFIX_TABLE (PREFIX_0F60) },
1722 { PREFIX_TABLE (PREFIX_0F61) },
1723 { PREFIX_TABLE (PREFIX_0F62) },
ce518a5f
L
1724 { "packsswb", { MX, EM } },
1725 { "pcmpgtb", { MX, EM } },
1726 { "pcmpgtw", { MX, EM } },
1727 { "pcmpgtd", { MX, EM } },
1728 { "packuswb", { MX, EM } },
252b5132 1729 /* 68 */
ce518a5f
L
1730 { "punpckhbw", { MX, EM } },
1731 { "punpckhwd", { MX, EM } },
1732 { "punpckhdq", { MX, EM } },
1733 { "packssdw", { MX, EM } },
1ceb70f8
L
1734 { PREFIX_TABLE (PREFIX_0F6C) },
1735 { PREFIX_TABLE (PREFIX_0F6D) },
231af070 1736 { "movK", { MX, Edq } },
1ceb70f8 1737 { PREFIX_TABLE (PREFIX_0F6F) },
252b5132 1738 /* 70 */
1ceb70f8
L
1739 { PREFIX_TABLE (PREFIX_0F70) },
1740 { REG_TABLE (REG_0F71) },
1741 { REG_TABLE (REG_0F72) },
1742 { REG_TABLE (REG_0F73) },
ce518a5f
L
1743 { "pcmpeqb", { MX, EM } },
1744 { "pcmpeqw", { MX, EM } },
1745 { "pcmpeqd", { MX, EM } },
1746 { "emms", { XX } },
252b5132 1747 /* 78 */
1ceb70f8
L
1748 { PREFIX_TABLE (PREFIX_0F78) },
1749 { PREFIX_TABLE (PREFIX_0F79) },
4e7d34a6 1750 { THREE_BYTE_TABLE (THREE_BYTE_0F7A) },
c1e679ec 1751 { "(bad)", { XX } },
1ceb70f8
L
1752 { PREFIX_TABLE (PREFIX_0F7C) },
1753 { PREFIX_TABLE (PREFIX_0F7D) },
1754 { PREFIX_TABLE (PREFIX_0F7E) },
1755 { PREFIX_TABLE (PREFIX_0F7F) },
252b5132 1756 /* 80 */
ce518a5f
L
1757 { "joH", { Jv, XX, cond_jump_flag } },
1758 { "jnoH", { Jv, XX, cond_jump_flag } },
1759 { "jbH", { Jv, XX, cond_jump_flag } },
1760 { "jaeH", { Jv, XX, cond_jump_flag } },
1761 { "jeH", { Jv, XX, cond_jump_flag } },
1762 { "jneH", { Jv, XX, cond_jump_flag } },
1763 { "jbeH", { Jv, XX, cond_jump_flag } },
1764 { "jaH", { Jv, XX, cond_jump_flag } },
252b5132 1765 /* 88 */
ce518a5f
L
1766 { "jsH", { Jv, XX, cond_jump_flag } },
1767 { "jnsH", { Jv, XX, cond_jump_flag } },
1768 { "jpH", { Jv, XX, cond_jump_flag } },
1769 { "jnpH", { Jv, XX, cond_jump_flag } },
1770 { "jlH", { Jv, XX, cond_jump_flag } },
1771 { "jgeH", { Jv, XX, cond_jump_flag } },
1772 { "jleH", { Jv, XX, cond_jump_flag } },
1773 { "jgH", { Jv, XX, cond_jump_flag } },
252b5132 1774 /* 90 */
ce518a5f
L
1775 { "seto", { Eb } },
1776 { "setno", { Eb } },
1777 { "setb", { Eb } },
1778 { "setae", { Eb } },
1779 { "sete", { Eb } },
1780 { "setne", { Eb } },
1781 { "setbe", { Eb } },
1782 { "seta", { Eb } },
252b5132 1783 /* 98 */
ce518a5f
L
1784 { "sets", { Eb } },
1785 { "setns", { Eb } },
1786 { "setp", { Eb } },
1787 { "setnp", { Eb } },
1788 { "setl", { Eb } },
1789 { "setge", { Eb } },
1790 { "setle", { Eb } },
1791 { "setg", { Eb } },
252b5132 1792 /* a0 */
ce518a5f
L
1793 { "pushT", { fs } },
1794 { "popT", { fs } },
1795 { "cpuid", { XX } },
1796 { "btS", { Ev, Gv } },
1797 { "shldS", { Ev, Gv, Ib } },
1798 { "shldS", { Ev, Gv, CL } },
1ceb70f8
L
1799 { REG_TABLE (REG_0FA6) },
1800 { REG_TABLE (REG_0FA7) },
252b5132 1801 /* a8 */
ce518a5f
L
1802 { "pushT", { gs } },
1803 { "popT", { gs } },
1804 { "rsm", { XX } },
1805 { "btsS", { Ev, Gv } },
1806 { "shrdS", { Ev, Gv, Ib } },
1807 { "shrdS", { Ev, Gv, CL } },
1ceb70f8 1808 { REG_TABLE (REG_0FAE) },
ce518a5f 1809 { "imulS", { Gv, Ev } },
252b5132 1810 /* b0 */
ce518a5f
L
1811 { "cmpxchgB", { Eb, Gb } },
1812 { "cmpxchgS", { Ev, Gv } },
1ceb70f8 1813 { MOD_TABLE (MOD_0FB2) },
ce518a5f 1814 { "btrS", { Ev, Gv } },
1ceb70f8
L
1815 { MOD_TABLE (MOD_0FB4) },
1816 { MOD_TABLE (MOD_0FB5) },
7c52e0e8
L
1817 { "movz{bR|x}", { Gv, Eb } },
1818 { "movz{wR|x}", { Gv, Ew } }, /* yes, there really is movzww ! */
252b5132 1819 /* b8 */
1ceb70f8 1820 { PREFIX_TABLE (PREFIX_0FB8) },
ce518a5f 1821 { "ud2b", { XX } },
1ceb70f8 1822 { REG_TABLE (REG_0FBA) },
ce518a5f
L
1823 { "btcS", { Ev, Gv } },
1824 { "bsfS", { Gv, Ev } },
1ceb70f8 1825 { PREFIX_TABLE (PREFIX_0FBD) },
7c52e0e8
L
1826 { "movs{bR|x}", { Gv, Eb } },
1827 { "movs{wR|x}", { Gv, Ew } }, /* yes, there really is movsww ! */
252b5132 1828 /* c0 */
ce518a5f
L
1829 { "xaddB", { Eb, Gb } },
1830 { "xaddS", { Ev, Gv } },
1ceb70f8 1831 { PREFIX_TABLE (PREFIX_0FC2) },
4ee52178 1832 { PREFIX_TABLE (PREFIX_0FC3) },
ce518a5f
L
1833 { "pinsrw", { MX, Edqw, Ib } },
1834 { "pextrw", { Gdq, MS, Ib } },
09a2c6cf 1835 { "shufpX", { XM, EXx, Ib } },
1ceb70f8 1836 { REG_TABLE (REG_0FC7) },
252b5132 1837 /* c8 */
ce518a5f
L
1838 { "bswap", { RMeAX } },
1839 { "bswap", { RMeCX } },
1840 { "bswap", { RMeDX } },
1841 { "bswap", { RMeBX } },
1842 { "bswap", { RMeSP } },
1843 { "bswap", { RMeBP } },
1844 { "bswap", { RMeSI } },
1845 { "bswap", { RMeDI } },
252b5132 1846 /* d0 */
1ceb70f8 1847 { PREFIX_TABLE (PREFIX_0FD0) },
ce518a5f
L
1848 { "psrlw", { MX, EM } },
1849 { "psrld", { MX, EM } },
1850 { "psrlq", { MX, EM } },
1851 { "paddq", { MX, EM } },
1852 { "pmullw", { MX, EM } },
1ceb70f8 1853 { PREFIX_TABLE (PREFIX_0FD6) },
75c135a8 1854 { MOD_TABLE (MOD_0FD7) },
252b5132 1855 /* d8 */
ce518a5f
L
1856 { "psubusb", { MX, EM } },
1857 { "psubusw", { MX, EM } },
1858 { "pminub", { MX, EM } },
1859 { "pand", { MX, EM } },
1860 { "paddusb", { MX, EM } },
1861 { "paddusw", { MX, EM } },
1862 { "pmaxub", { MX, EM } },
1863 { "pandn", { MX, EM } },
252b5132 1864 /* e0 */
ce518a5f
L
1865 { "pavgb", { MX, EM } },
1866 { "psraw", { MX, EM } },
1867 { "psrad", { MX, EM } },
1868 { "pavgw", { MX, EM } },
1869 { "pmulhuw", { MX, EM } },
1870 { "pmulhw", { MX, EM } },
1ceb70f8
L
1871 { PREFIX_TABLE (PREFIX_0FE6) },
1872 { PREFIX_TABLE (PREFIX_0FE7) },
252b5132 1873 /* e8 */
ce518a5f
L
1874 { "psubsb", { MX, EM } },
1875 { "psubsw", { MX, EM } },
1876 { "pminsw", { MX, EM } },
1877 { "por", { MX, EM } },
1878 { "paddsb", { MX, EM } },
1879 { "paddsw", { MX, EM } },
1880 { "pmaxsw", { MX, EM } },
1881 { "pxor", { MX, EM } },
252b5132 1882 /* f0 */
1ceb70f8 1883 { PREFIX_TABLE (PREFIX_0FF0) },
ce518a5f
L
1884 { "psllw", { MX, EM } },
1885 { "pslld", { MX, EM } },
1886 { "psllq", { MX, EM } },
1887 { "pmuludq", { MX, EM } },
1888 { "pmaddwd", { MX, EM } },
1889 { "psadbw", { MX, EM } },
1ceb70f8 1890 { PREFIX_TABLE (PREFIX_0FF7) },
252b5132 1891 /* f8 */
ce518a5f
L
1892 { "psubb", { MX, EM } },
1893 { "psubw", { MX, EM } },
1894 { "psubd", { MX, EM } },
1895 { "psubq", { MX, EM } },
1896 { "paddb", { MX, EM } },
1897 { "paddw", { MX, EM } },
1898 { "paddd", { MX, EM } },
1899 { "(bad)", { XX } },
252b5132
RH
1900};
1901
1902static const unsigned char onebyte_has_modrm[256] = {
c608c12e
AM
1903 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
1904 /* ------------------------------- */
1905 /* 00 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 00 */
1906 /* 10 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 10 */
1907 /* 20 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 20 */
1908 /* 30 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 30 */
1909 /* 40 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 40 */
1910 /* 50 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 50 */
1911 /* 60 */ 0,0,1,1,0,0,0,0,0,1,0,1,0,0,0,0, /* 60 */
1912 /* 70 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 70 */
1913 /* 80 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 80 */
1914 /* 90 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 90 */
1915 /* a0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* a0 */
1916 /* b0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* b0 */
1917 /* c0 */ 1,1,0,0,1,1,1,1,0,0,0,0,0,0,0,0, /* c0 */
1918 /* d0 */ 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1, /* d0 */
1919 /* e0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* e0 */
1920 /* f0 */ 0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1 /* f0 */
1921 /* ------------------------------- */
1922 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
252b5132
RH
1923};
1924
1925static const unsigned char twobyte_has_modrm[256] = {
c608c12e
AM
1926 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
1927 /* ------------------------------- */
252b5132 1928 /* 00 */ 1,1,1,1,0,0,0,0,0,0,0,0,0,1,0,1, /* 0f */
b5b1fc4f 1929 /* 10 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 1f */
85f10a01 1930 /* 20 */ 1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1, /* 2f */
331d2d0d 1931 /* 30 */ 0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0, /* 3f */
252b5132 1932 /* 40 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 4f */
4bba6815
AM
1933 /* 50 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 5f */
1934 /* 60 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 6f */
85f10a01 1935 /* 70 */ 1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1, /* 7f */
252b5132
RH
1936 /* 80 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 8f */
1937 /* 90 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 9f */
30d1c836 1938 /* a0 */ 0,0,0,1,1,1,1,1,0,0,0,1,1,1,1,1, /* af */
050dfa73 1939 /* b0 */ 1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1, /* bf */
252b5132 1940 /* c0 */ 1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0, /* cf */
ca164297 1941 /* d0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* df */
4bba6815 1942 /* e0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* ef */
ca164297 1943 /* f0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0 /* ff */
c608c12e
AM
1944 /* ------------------------------- */
1945 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
1946};
1947
252b5132
RH
1948static char obuf[100];
1949static char *obufp;
ea397f5b 1950static char *mnemonicendp;
252b5132
RH
1951static char scratchbuf[100];
1952static unsigned char *start_codep;
1953static unsigned char *insn_codep;
1954static unsigned char *codep;
b844680a
L
1955static const char *lock_prefix;
1956static const char *data_prefix;
1957static const char *addr_prefix;
1958static const char *repz_prefix;
1959static const char *repnz_prefix;
252b5132 1960static disassemble_info *the_info;
7967e09e
L
1961static struct
1962 {
1963 int mod;
7967e09e 1964 int reg;
484c222e 1965 int rm;
7967e09e
L
1966 }
1967modrm;
4bba6815 1968static unsigned char need_modrm;
c0f3af97
L
1969static struct
1970 {
1971 int register_specifier;
1972 int length;
1973 int prefix;
1974 int w;
1975 }
1976vex;
1977static unsigned char need_vex;
1978static unsigned char need_vex_reg;
dae39acc 1979static unsigned char vex_w_done;
252b5132 1980
ea397f5b
L
1981struct op
1982 {
1983 const char *name;
1984 unsigned int len;
1985 };
1986
4bba6815
AM
1987/* If we are accessing mod/rm/reg without need_modrm set, then the
1988 values are stale. Hitting this abort likely indicates that you
1989 need to update onebyte_has_modrm or twobyte_has_modrm. */
1990#define MODRM_CHECK if (!need_modrm) abort ()
1991
d708bcba
AM
1992static const char **names64;
1993static const char **names32;
1994static const char **names16;
1995static const char **names8;
1996static const char **names8rex;
1997static const char **names_seg;
db51cc60
L
1998static const char *index64;
1999static const char *index32;
d708bcba
AM
2000static const char **index16;
2001
2002static const char *intel_names64[] = {
2003 "rax", "rcx", "rdx", "rbx", "rsp", "rbp", "rsi", "rdi",
2004 "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15"
2005};
2006static const char *intel_names32[] = {
2007 "eax", "ecx", "edx", "ebx", "esp", "ebp", "esi", "edi",
2008 "r8d", "r9d", "r10d", "r11d", "r12d", "r13d", "r14d", "r15d"
2009};
2010static const char *intel_names16[] = {
2011 "ax", "cx", "dx", "bx", "sp", "bp", "si", "di",
2012 "r8w", "r9w", "r10w", "r11w", "r12w", "r13w", "r14w", "r15w"
2013};
2014static const char *intel_names8[] = {
2015 "al", "cl", "dl", "bl", "ah", "ch", "dh", "bh",
2016};
2017static const char *intel_names8rex[] = {
2018 "al", "cl", "dl", "bl", "spl", "bpl", "sil", "dil",
2019 "r8b", "r9b", "r10b", "r11b", "r12b", "r13b", "r14b", "r15b"
2020};
2021static const char *intel_names_seg[] = {
2022 "es", "cs", "ss", "ds", "fs", "gs", "?", "?",
2023};
db51cc60
L
2024static const char *intel_index64 = "riz";
2025static const char *intel_index32 = "eiz";
d708bcba
AM
2026static const char *intel_index16[] = {
2027 "bx+si", "bx+di", "bp+si", "bp+di", "si", "di", "bp", "bx"
2028};
2029
2030static const char *att_names64[] = {
2031 "%rax", "%rcx", "%rdx", "%rbx", "%rsp", "%rbp", "%rsi", "%rdi",
52b15da3
JH
2032 "%r8", "%r9", "%r10", "%r11", "%r12", "%r13", "%r14", "%r15"
2033};
d708bcba
AM
2034static const char *att_names32[] = {
2035 "%eax", "%ecx", "%edx", "%ebx", "%esp", "%ebp", "%esi", "%edi",
52b15da3 2036 "%r8d", "%r9d", "%r10d", "%r11d", "%r12d", "%r13d", "%r14d", "%r15d"
252b5132 2037};
d708bcba
AM
2038static const char *att_names16[] = {
2039 "%ax", "%cx", "%dx", "%bx", "%sp", "%bp", "%si", "%di",
52b15da3 2040 "%r8w", "%r9w", "%r10w", "%r11w", "%r12w", "%r13w", "%r14w", "%r15w"
252b5132 2041};
d708bcba
AM
2042static const char *att_names8[] = {
2043 "%al", "%cl", "%dl", "%bl", "%ah", "%ch", "%dh", "%bh",
252b5132 2044};
d708bcba
AM
2045static const char *att_names8rex[] = {
2046 "%al", "%cl", "%dl", "%bl", "%spl", "%bpl", "%sil", "%dil",
52b15da3
JH
2047 "%r8b", "%r9b", "%r10b", "%r11b", "%r12b", "%r13b", "%r14b", "%r15b"
2048};
d708bcba
AM
2049static const char *att_names_seg[] = {
2050 "%es", "%cs", "%ss", "%ds", "%fs", "%gs", "%?", "%?",
252b5132 2051};
db51cc60
L
2052static const char *att_index64 = "%riz";
2053static const char *att_index32 = "%eiz";
d708bcba
AM
2054static const char *att_index16[] = {
2055 "%bx,%si", "%bx,%di", "%bp,%si", "%bp,%di", "%si", "%di", "%bp", "%bx"
252b5132
RH
2056};
2057
1ceb70f8
L
2058static const struct dis386 reg_table[][8] = {
2059 /* REG_80 */
252b5132 2060 {
ce518a5f
L
2061 { "addA", { Eb, Ib } },
2062 { "orA", { Eb, Ib } },
2063 { "adcA", { Eb, Ib } },
2064 { "sbbA", { Eb, Ib } },
2065 { "andA", { Eb, Ib } },
2066 { "subA", { Eb, Ib } },
2067 { "xorA", { Eb, Ib } },
2068 { "cmpA", { Eb, Ib } },
252b5132 2069 },
1ceb70f8 2070 /* REG_81 */
252b5132 2071 {
ce518a5f
L
2072 { "addQ", { Ev, Iv } },
2073 { "orQ", { Ev, Iv } },
2074 { "adcQ", { Ev, Iv } },
2075 { "sbbQ", { Ev, Iv } },
2076 { "andQ", { Ev, Iv } },
2077 { "subQ", { Ev, Iv } },
2078 { "xorQ", { Ev, Iv } },
2079 { "cmpQ", { Ev, Iv } },
252b5132 2080 },
1ceb70f8 2081 /* REG_82 */
252b5132 2082 {
ce518a5f
L
2083 { "addQ", { Ev, sIb } },
2084 { "orQ", { Ev, sIb } },
2085 { "adcQ", { Ev, sIb } },
2086 { "sbbQ", { Ev, sIb } },
2087 { "andQ", { Ev, sIb } },
2088 { "subQ", { Ev, sIb } },
2089 { "xorQ", { Ev, sIb } },
2090 { "cmpQ", { Ev, sIb } },
252b5132 2091 },
1ceb70f8 2092 /* REG_8F */
4e7d34a6
L
2093 {
2094 { "popU", { stackEv } },
2095 { "(bad)", { XX } },
2096 { "(bad)", { XX } },
2097 { "(bad)", { XX } },
2098 { "(bad)", { XX } },
2099 { "(bad)", { XX } },
2100 { "(bad)", { XX } },
2101 { "(bad)", { XX } },
2102 },
1ceb70f8 2103 /* REG_C0 */
252b5132 2104 {
ce518a5f
L
2105 { "rolA", { Eb, Ib } },
2106 { "rorA", { Eb, Ib } },
2107 { "rclA", { Eb, Ib } },
2108 { "rcrA", { Eb, Ib } },
2109 { "shlA", { Eb, Ib } },
2110 { "shrA", { Eb, Ib } },
2111 { "(bad)", { XX } },
2112 { "sarA", { Eb, Ib } },
252b5132 2113 },
1ceb70f8 2114 /* REG_C1 */
252b5132 2115 {
ce518a5f
L
2116 { "rolQ", { Ev, Ib } },
2117 { "rorQ", { Ev, Ib } },
2118 { "rclQ", { Ev, Ib } },
2119 { "rcrQ", { Ev, Ib } },
2120 { "shlQ", { Ev, Ib } },
2121 { "shrQ", { Ev, Ib } },
2122 { "(bad)", { XX } },
2123 { "sarQ", { Ev, Ib } },
252b5132 2124 },
1ceb70f8 2125 /* REG_C6 */
4e7d34a6
L
2126 {
2127 { "movA", { Eb, Ib } },
2128 { "(bad)", { XX } },
2129 { "(bad)", { XX } },
2130 { "(bad)", { XX } },
2131 { "(bad)", { XX } },
2132 { "(bad)", { XX } },
2133 { "(bad)", { XX } },
2134 { "(bad)", { XX } },
2135 },
1ceb70f8 2136 /* REG_C7 */
4e7d34a6
L
2137 {
2138 { "movQ", { Ev, Iv } },
2139 { "(bad)", { XX } },
2140 { "(bad)", { XX } },
2141 { "(bad)", { XX } },
2142 { "(bad)", { XX } },
2143 { "(bad)", { XX } },
2144 { "(bad)", { XX } },
2145 { "(bad)", { XX } },
2146 },
1ceb70f8 2147 /* REG_D0 */
252b5132 2148 {
ce518a5f
L
2149 { "rolA", { Eb, I1 } },
2150 { "rorA", { Eb, I1 } },
2151 { "rclA", { Eb, I1 } },
2152 { "rcrA", { Eb, I1 } },
2153 { "shlA", { Eb, I1 } },
2154 { "shrA", { Eb, I1 } },
2155 { "(bad)", { XX } },
2156 { "sarA", { Eb, I1 } },
252b5132 2157 },
1ceb70f8 2158 /* REG_D1 */
252b5132 2159 {
ce518a5f
L
2160 { "rolQ", { Ev, I1 } },
2161 { "rorQ", { Ev, I1 } },
2162 { "rclQ", { Ev, I1 } },
2163 { "rcrQ", { Ev, I1 } },
2164 { "shlQ", { Ev, I1 } },
2165 { "shrQ", { Ev, I1 } },
2166 { "(bad)", { XX } },
2167 { "sarQ", { Ev, I1 } },
252b5132 2168 },
1ceb70f8 2169 /* REG_D2 */
252b5132 2170 {
ce518a5f
L
2171 { "rolA", { Eb, CL } },
2172 { "rorA", { Eb, CL } },
2173 { "rclA", { Eb, CL } },
2174 { "rcrA", { Eb, CL } },
2175 { "shlA", { Eb, CL } },
2176 { "shrA", { Eb, CL } },
2177 { "(bad)", { XX } },
2178 { "sarA", { Eb, CL } },
252b5132 2179 },
1ceb70f8 2180 /* REG_D3 */
252b5132 2181 {
ce518a5f
L
2182 { "rolQ", { Ev, CL } },
2183 { "rorQ", { Ev, CL } },
2184 { "rclQ", { Ev, CL } },
2185 { "rcrQ", { Ev, CL } },
2186 { "shlQ", { Ev, CL } },
2187 { "shrQ", { Ev, CL } },
2188 { "(bad)", { XX } },
2189 { "sarQ", { Ev, CL } },
252b5132 2190 },
1ceb70f8 2191 /* REG_F6 */
252b5132 2192 {
ce518a5f 2193 { "testA", { Eb, Ib } },
058f233b 2194 { "(bad)", { XX } },
ce518a5f
L
2195 { "notA", { Eb } },
2196 { "negA", { Eb } },
2197 { "mulA", { Eb } }, /* Don't print the implicit %al register, */
2198 { "imulA", { Eb } }, /* to distinguish these opcodes from other */
2199 { "divA", { Eb } }, /* mul/imul opcodes. Do the same for div */
2200 { "idivA", { Eb } }, /* and idiv for consistency. */
252b5132 2201 },
1ceb70f8 2202 /* REG_F7 */
252b5132 2203 {
ce518a5f
L
2204 { "testQ", { Ev, Iv } },
2205 { "(bad)", { XX } },
2206 { "notQ", { Ev } },
2207 { "negQ", { Ev } },
2208 { "mulQ", { Ev } }, /* Don't print the implicit register. */
2209 { "imulQ", { Ev } },
2210 { "divQ", { Ev } },
2211 { "idivQ", { Ev } },
252b5132 2212 },
1ceb70f8 2213 /* REG_FE */
252b5132 2214 {
ce518a5f
L
2215 { "incA", { Eb } },
2216 { "decA", { Eb } },
2217 { "(bad)", { XX } },
2218 { "(bad)", { XX } },
2219 { "(bad)", { XX } },
2220 { "(bad)", { XX } },
2221 { "(bad)", { XX } },
2222 { "(bad)", { XX } },
252b5132 2223 },
1ceb70f8 2224 /* REG_FF */
252b5132 2225 {
ce518a5f
L
2226 { "incQ", { Ev } },
2227 { "decQ", { Ev } },
2228 { "callT", { indirEv } },
2229 { "JcallT", { indirEp } },
2230 { "jmpT", { indirEv } },
2231 { "JjmpT", { indirEp } },
2232 { "pushU", { stackEv } },
2233 { "(bad)", { XX } },
252b5132 2234 },
1ceb70f8 2235 /* REG_0F00 */
252b5132 2236 {
ce518a5f
L
2237 { "sldtD", { Sv } },
2238 { "strD", { Sv } },
2239 { "lldt", { Ew } },
2240 { "ltr", { Ew } },
2241 { "verr", { Ew } },
2242 { "verw", { Ew } },
2243 { "(bad)", { XX } },
2244 { "(bad)", { XX } },
252b5132 2245 },
1ceb70f8 2246 /* REG_0F01 */
252b5132 2247 {
1ceb70f8
L
2248 { MOD_TABLE (MOD_0F01_REG_0) },
2249 { MOD_TABLE (MOD_0F01_REG_1) },
2250 { MOD_TABLE (MOD_0F01_REG_2) },
2251 { MOD_TABLE (MOD_0F01_REG_3) },
ce518a5f
L
2252 { "smswD", { Sv } },
2253 { "(bad)", { XX } },
2254 { "lmsw", { Ew } },
1ceb70f8 2255 { MOD_TABLE (MOD_0F01_REG_7) },
252b5132 2256 },
b5b1fc4f 2257 /* REG_0F0D */
252b5132 2258 {
4e7d34a6
L
2259 { "prefetch", { Eb } },
2260 { "prefetchw", { Eb } },
2261 { "(bad)", { XX } },
2262 { "(bad)", { XX } },
2263 { "(bad)", { XX } },
2264 { "(bad)", { XX } },
2265 { "(bad)", { XX } },
2266 { "(bad)", { XX } },
252b5132 2267 },
1ceb70f8 2268 /* REG_0F18 */
252b5132 2269 {
1ceb70f8
L
2270 { MOD_TABLE (MOD_0F18_REG_0) },
2271 { MOD_TABLE (MOD_0F18_REG_1) },
2272 { MOD_TABLE (MOD_0F18_REG_2) },
2273 { MOD_TABLE (MOD_0F18_REG_3) },
ce518a5f
L
2274 { "(bad)", { XX } },
2275 { "(bad)", { XX } },
2276 { "(bad)", { XX } },
2277 { "(bad)", { XX } },
252b5132 2278 },
1ceb70f8 2279 /* REG_0F71 */
a6bd098c 2280 {
ce518a5f
L
2281 { "(bad)", { XX } },
2282 { "(bad)", { XX } },
1ceb70f8 2283 { MOD_TABLE (MOD_0F71_REG_2) },
ce518a5f 2284 { "(bad)", { XX } },
1ceb70f8 2285 { MOD_TABLE (MOD_0F71_REG_4) },
ce518a5f 2286 { "(bad)", { XX } },
1ceb70f8 2287 { MOD_TABLE (MOD_0F71_REG_6) },
ce518a5f 2288 { "(bad)", { XX } },
a6bd098c 2289 },
1ceb70f8 2290 /* REG_0F72 */
a6bd098c 2291 {
ce518a5f
L
2292 { "(bad)", { XX } },
2293 { "(bad)", { XX } },
1ceb70f8 2294 { MOD_TABLE (MOD_0F72_REG_2) },
ce518a5f 2295 { "(bad)", { XX } },
1ceb70f8 2296 { MOD_TABLE (MOD_0F72_REG_4) },
ce518a5f 2297 { "(bad)", { XX } },
1ceb70f8 2298 { MOD_TABLE (MOD_0F72_REG_6) },
ce518a5f 2299 { "(bad)", { XX } },
a6bd098c 2300 },
1ceb70f8 2301 /* REG_0F73 */
252b5132 2302 {
ce518a5f
L
2303 { "(bad)", { XX } },
2304 { "(bad)", { XX } },
1ceb70f8
L
2305 { MOD_TABLE (MOD_0F73_REG_2) },
2306 { MOD_TABLE (MOD_0F73_REG_3) },
ce518a5f 2307 { "(bad)", { XX } },
ce518a5f 2308 { "(bad)", { XX } },
1ceb70f8
L
2309 { MOD_TABLE (MOD_0F73_REG_6) },
2310 { MOD_TABLE (MOD_0F73_REG_7) },
252b5132 2311 },
1ceb70f8 2312 /* REG_0FA6 */
252b5132 2313 {
4e7d34a6
L
2314 { "montmul", { { OP_0f07, 0 } } },
2315 { "xsha1", { { OP_0f07, 0 } } },
2316 { "xsha256", { { OP_0f07, 0 } } },
2317 { "(bad)", { { OP_0f07, 0 } } },
2318 { "(bad)", { { OP_0f07, 0 } } },
2319 { "(bad)", { { OP_0f07, 0 } } },
2320 { "(bad)", { { OP_0f07, 0 } } },
2321 { "(bad)", { { OP_0f07, 0 } } },
2322 },
1ceb70f8 2323 /* REG_0FA7 */
4e7d34a6
L
2324 {
2325 { "xstore-rng", { { OP_0f07, 0 } } },
2326 { "xcrypt-ecb", { { OP_0f07, 0 } } },
2327 { "xcrypt-cbc", { { OP_0f07, 0 } } },
2328 { "xcrypt-ctr", { { OP_0f07, 0 } } },
2329 { "xcrypt-cfb", { { OP_0f07, 0 } } },
2330 { "xcrypt-ofb", { { OP_0f07, 0 } } },
2331 { "(bad)", { { OP_0f07, 0 } } },
2332 { "(bad)", { { OP_0f07, 0 } } },
2333 },
1ceb70f8 2334 /* REG_0FAE */
4e7d34a6 2335 {
1ceb70f8
L
2336 { MOD_TABLE (MOD_0FAE_REG_0) },
2337 { MOD_TABLE (MOD_0FAE_REG_1) },
2338 { MOD_TABLE (MOD_0FAE_REG_2) },
2339 { MOD_TABLE (MOD_0FAE_REG_3) },
475a2301 2340 { MOD_TABLE (MOD_0FAE_REG_4) },
1ceb70f8
L
2341 { MOD_TABLE (MOD_0FAE_REG_5) },
2342 { MOD_TABLE (MOD_0FAE_REG_6) },
2343 { MOD_TABLE (MOD_0FAE_REG_7) },
252b5132 2344 },
1ceb70f8 2345 /* REG_0FBA */
252b5132 2346 {
ce518a5f
L
2347 { "(bad)", { XX } },
2348 { "(bad)", { XX } },
d8faab4e
L
2349 { "(bad)", { XX } },
2350 { "(bad)", { XX } },
4e7d34a6
L
2351 { "btQ", { Ev, Ib } },
2352 { "btsQ", { Ev, Ib } },
2353 { "btrQ", { Ev, Ib } },
2354 { "btcQ", { Ev, Ib } },
c608c12e 2355 },
1ceb70f8 2356 /* REG_0FC7 */
c608c12e 2357 {
b844680a 2358 { "(bad)", { XX } },
4e7d34a6 2359 { "cmpxchg8b", { { CMPXCHG8B_Fixup, q_mode } } },
d8faab4e 2360 { "(bad)", { XX } },
b844680a
L
2361 { "(bad)", { XX } },
2362 { "(bad)", { XX } },
2363 { "(bad)", { XX } },
1ceb70f8
L
2364 { MOD_TABLE (MOD_0FC7_REG_6) },
2365 { MOD_TABLE (MOD_0FC7_REG_7) },
252b5132 2366 },
c0f3af97
L
2367 /* REG_VEX_71 */
2368 {
2369 { "(bad)", { XX } },
2370 { "(bad)", { XX } },
2371 { MOD_TABLE (MOD_VEX_71_REG_2) },
2372 { "(bad)", { XX } },
2373 { MOD_TABLE (MOD_VEX_71_REG_4) },
2374 { "(bad)", { XX } },
2375 { MOD_TABLE (MOD_VEX_71_REG_6) },
2376 { "(bad)", { XX } },
2377 },
2378 /* REG_VEX_72 */
2379 {
2380 { "(bad)", { XX } },
2381 { "(bad)", { XX } },
2382 { MOD_TABLE (MOD_VEX_72_REG_2) },
2383 { "(bad)", { XX } },
2384 { MOD_TABLE (MOD_VEX_72_REG_4) },
2385 { "(bad)", { XX } },
2386 { MOD_TABLE (MOD_VEX_72_REG_6) },
2387 { "(bad)", { XX } },
2388 },
2389 /* REG_VEX_73 */
2390 {
2391 { "(bad)", { XX } },
2392 { "(bad)", { XX } },
2393 { MOD_TABLE (MOD_VEX_73_REG_2) },
2394 { MOD_TABLE (MOD_VEX_73_REG_3) },
2395 { "(bad)", { XX } },
2396 { "(bad)", { XX } },
2397 { MOD_TABLE (MOD_VEX_73_REG_6) },
2398 { MOD_TABLE (MOD_VEX_73_REG_7) },
2399 },
2400 /* REG_VEX_AE */
2401 {
2402 { "(bad)", { XX } },
2403 { "(bad)", { XX } },
2404 { MOD_TABLE (MOD_VEX_AE_REG_2) },
2405 { MOD_TABLE (MOD_VEX_AE_REG_3) },
2406 { "(bad)", { XX } },
2407 { "(bad)", { XX } },
2408 { "(bad)", { XX } },
2409 { "(bad)", { XX } },
2410 },
4e7d34a6
L
2411};
2412
1ceb70f8
L
2413static const struct dis386 prefix_table[][4] = {
2414 /* PREFIX_90 */
252b5132 2415 {
4e7d34a6
L
2416 { "xchgS", { { NOP_Fixup1, eAX_reg }, { NOP_Fixup2, eAX_reg } } },
2417 { "pause", { XX } },
2418 { "xchgS", { { NOP_Fixup1, eAX_reg }, { NOP_Fixup2, eAX_reg } } },
2419 { "(bad)", { XX } },
0f10071e 2420 },
4e7d34a6 2421
1ceb70f8 2422 /* PREFIX_0F10 */
cc0ec051 2423 {
4e7d34a6
L
2424 { "movups", { XM, EXx } },
2425 { "movss", { XM, EXd } },
2426 { "movupd", { XM, EXx } },
2427 { "movsd", { XM, EXq } },
30d1c836 2428 },
4e7d34a6 2429
1ceb70f8 2430 /* PREFIX_0F11 */
30d1c836 2431 {
b6169b20 2432 { "movups", { EXxS, XM } },
fa99fab2 2433 { "movss", { EXdS, XM } },
b6169b20 2434 { "movupd", { EXxS, XM } },
fa99fab2 2435 { "movsd", { EXqS, XM } },
4e7d34a6 2436 },
252b5132 2437
1ceb70f8 2438 /* PREFIX_0F12 */
c608c12e 2439 {
1ceb70f8 2440 { MOD_TABLE (MOD_0F12_PREFIX_0) },
4e7d34a6
L
2441 { "movsldup", { XM, EXx } },
2442 { "movlpd", { XM, EXq } },
2443 { "movddup", { XM, EXq } },
c608c12e 2444 },
4e7d34a6 2445
1ceb70f8 2446 /* PREFIX_0F16 */
c608c12e 2447 {
1ceb70f8 2448 { MOD_TABLE (MOD_0F16_PREFIX_0) },
4e7d34a6
L
2449 { "movshdup", { XM, EXx } },
2450 { "movhpd", { XM, EXq } },
058f233b 2451 { "(bad)", { XX } },
c608c12e 2452 },
4e7d34a6 2453
1ceb70f8 2454 /* PREFIX_0F2A */
c608c12e 2455 {
09335d05 2456 { "cvtpi2ps", { XM, EMCq } },
98b528ac 2457 { "cvtsi2ss%LQ", { XM, Ev } },
09335d05 2458 { "cvtpi2pd", { XM, EMCq } },
98b528ac 2459 { "cvtsi2sd%LQ", { XM, Ev } },
c608c12e 2460 },
4e7d34a6 2461
1ceb70f8 2462 /* PREFIX_0F2B */
c608c12e 2463 {
75c135a8
L
2464 { MOD_TABLE (MOD_0F2B_PREFIX_0) },
2465 { MOD_TABLE (MOD_0F2B_PREFIX_1) },
2466 { MOD_TABLE (MOD_0F2B_PREFIX_2) },
2467 { MOD_TABLE (MOD_0F2B_PREFIX_3) },
c608c12e 2468 },
4e7d34a6 2469
1ceb70f8 2470 /* PREFIX_0F2C */
c608c12e 2471 {
09335d05
L
2472 { "cvttps2pi", { MXC, EXq } },
2473 { "cvttss2siY", { Gv, EXd } },
09a2c6cf 2474 { "cvttpd2pi", { MXC, EXx } },
09335d05 2475 { "cvttsd2siY", { Gv, EXq } },
c608c12e 2476 },
4e7d34a6 2477
1ceb70f8 2478 /* PREFIX_0F2D */
c608c12e 2479 {
4e7d34a6
L
2480 { "cvtps2pi", { MXC, EXq } },
2481 { "cvtss2siY", { Gv, EXd } },
2482 { "cvtpd2pi", { MXC, EXx } },
2483 { "cvtsd2siY", { Gv, EXq } },
c608c12e 2484 },
4e7d34a6 2485
1ceb70f8 2486 /* PREFIX_0F2E */
c608c12e 2487 {
4e7d34a6
L
2488 { "ucomiss",{ XM, EXd } },
2489 { "(bad)", { XX } },
2490 { "ucomisd",{ XM, EXq } },
2491 { "(bad)", { XX } },
c608c12e 2492 },
4e7d34a6 2493
1ceb70f8 2494 /* PREFIX_0F2F */
c608c12e 2495 {
4e7d34a6
L
2496 { "comiss", { XM, EXd } },
2497 { "(bad)", { XX } },
2498 { "comisd", { XM, EXq } },
2499 { "(bad)", { XX } },
c608c12e 2500 },
4e7d34a6 2501
1ceb70f8 2502 /* PREFIX_0F51 */
c608c12e 2503 {
4e7d34a6
L
2504 { "sqrtps", { XM, EXx } },
2505 { "sqrtss", { XM, EXd } },
2506 { "sqrtpd", { XM, EXx } },
2507 { "sqrtsd", { XM, EXq } },
c608c12e 2508 },
4e7d34a6 2509
1ceb70f8 2510 /* PREFIX_0F52 */
c608c12e 2511 {
4e7d34a6
L
2512 { "rsqrtps",{ XM, EXx } },
2513 { "rsqrtss",{ XM, EXd } },
058f233b
L
2514 { "(bad)", { XX } },
2515 { "(bad)", { XX } },
c608c12e 2516 },
4e7d34a6 2517
1ceb70f8 2518 /* PREFIX_0F53 */
c608c12e 2519 {
4e7d34a6
L
2520 { "rcpps", { XM, EXx } },
2521 { "rcpss", { XM, EXd } },
058f233b
L
2522 { "(bad)", { XX } },
2523 { "(bad)", { XX } },
c608c12e 2524 },
4e7d34a6 2525
1ceb70f8 2526 /* PREFIX_0F58 */
c608c12e 2527 {
4e7d34a6
L
2528 { "addps", { XM, EXx } },
2529 { "addss", { XM, EXd } },
2530 { "addpd", { XM, EXx } },
2531 { "addsd", { XM, EXq } },
c608c12e 2532 },
4e7d34a6 2533
1ceb70f8 2534 /* PREFIX_0F59 */
c608c12e 2535 {
4e7d34a6
L
2536 { "mulps", { XM, EXx } },
2537 { "mulss", { XM, EXd } },
2538 { "mulpd", { XM, EXx } },
2539 { "mulsd", { XM, EXq } },
041bd2e0 2540 },
4e7d34a6 2541
1ceb70f8 2542 /* PREFIX_0F5A */
041bd2e0 2543 {
4e7d34a6
L
2544 { "cvtps2pd", { XM, EXq } },
2545 { "cvtss2sd", { XM, EXd } },
2546 { "cvtpd2ps", { XM, EXx } },
2547 { "cvtsd2ss", { XM, EXq } },
041bd2e0 2548 },
4e7d34a6 2549
1ceb70f8 2550 /* PREFIX_0F5B */
041bd2e0 2551 {
09a2c6cf
L
2552 { "cvtdq2ps", { XM, EXx } },
2553 { "cvttps2dq", { XM, EXx } },
2554 { "cvtps2dq", { XM, EXx } },
058f233b 2555 { "(bad)", { XX } },
041bd2e0 2556 },
4e7d34a6 2557
1ceb70f8 2558 /* PREFIX_0F5C */
041bd2e0 2559 {
4e7d34a6
L
2560 { "subps", { XM, EXx } },
2561 { "subss", { XM, EXd } },
2562 { "subpd", { XM, EXx } },
2563 { "subsd", { XM, EXq } },
041bd2e0 2564 },
4e7d34a6 2565
1ceb70f8 2566 /* PREFIX_0F5D */
041bd2e0 2567 {
4e7d34a6
L
2568 { "minps", { XM, EXx } },
2569 { "minss", { XM, EXd } },
2570 { "minpd", { XM, EXx } },
2571 { "minsd", { XM, EXq } },
041bd2e0 2572 },
4e7d34a6 2573
1ceb70f8 2574 /* PREFIX_0F5E */
041bd2e0 2575 {
4e7d34a6
L
2576 { "divps", { XM, EXx } },
2577 { "divss", { XM, EXd } },
2578 { "divpd", { XM, EXx } },
2579 { "divsd", { XM, EXq } },
041bd2e0 2580 },
4e7d34a6 2581
1ceb70f8 2582 /* PREFIX_0F5F */
041bd2e0 2583 {
4e7d34a6
L
2584 { "maxps", { XM, EXx } },
2585 { "maxss", { XM, EXd } },
2586 { "maxpd", { XM, EXx } },
2587 { "maxsd", { XM, EXq } },
041bd2e0 2588 },
4e7d34a6 2589
1ceb70f8 2590 /* PREFIX_0F60 */
041bd2e0 2591 {
4e7d34a6
L
2592 { "punpcklbw",{ MX, EMd } },
2593 { "(bad)", { XX } },
2594 { "punpcklbw",{ MX, EMx } },
2595 { "(bad)", { XX } },
041bd2e0 2596 },
4e7d34a6 2597
1ceb70f8 2598 /* PREFIX_0F61 */
041bd2e0 2599 {
4e7d34a6
L
2600 { "punpcklwd",{ MX, EMd } },
2601 { "(bad)", { XX } },
2602 { "punpcklwd",{ MX, EMx } },
2603 { "(bad)", { XX } },
041bd2e0 2604 },
4e7d34a6 2605
1ceb70f8 2606 /* PREFIX_0F62 */
041bd2e0 2607 {
4e7d34a6
L
2608 { "punpckldq",{ MX, EMd } },
2609 { "(bad)", { XX } },
2610 { "punpckldq",{ MX, EMx } },
2611 { "(bad)", { XX } },
041bd2e0 2612 },
4e7d34a6 2613
1ceb70f8 2614 /* PREFIX_0F6C */
041bd2e0 2615 {
058f233b
L
2616 { "(bad)", { XX } },
2617 { "(bad)", { XX } },
4e7d34a6 2618 { "punpcklqdq", { XM, EXx } },
058f233b 2619 { "(bad)", { XX } },
0f17484f 2620 },
4e7d34a6 2621
1ceb70f8 2622 /* PREFIX_0F6D */
0f17484f 2623 {
058f233b
L
2624 { "(bad)", { XX } },
2625 { "(bad)", { XX } },
4e7d34a6 2626 { "punpckhqdq", { XM, EXx } },
058f233b 2627 { "(bad)", { XX } },
041bd2e0 2628 },
4e7d34a6 2629
1ceb70f8 2630 /* PREFIX_0F6F */
ca164297 2631 {
4e7d34a6
L
2632 { "movq", { MX, EM } },
2633 { "movdqu", { XM, EXx } },
2634 { "movdqa", { XM, EXx } },
058f233b 2635 { "(bad)", { XX } },
ca164297 2636 },
4e7d34a6 2637
1ceb70f8 2638 /* PREFIX_0F70 */
4e7d34a6
L
2639 {
2640 { "pshufw", { MX, EM, Ib } },
2641 { "pshufhw",{ XM, EXx, Ib } },
2642 { "pshufd", { XM, EXx, Ib } },
2643 { "pshuflw",{ XM, EXx, Ib } },
2644 },
2645
92fddf8e
L
2646 /* PREFIX_0F73_REG_3 */
2647 {
2648 { "(bad)", { XX } },
2649 { "(bad)", { XX } },
2650 { "psrldq", { XS, Ib } },
2651 { "(bad)", { XX } },
2652 },
2653
2654 /* PREFIX_0F73_REG_7 */
2655 {
2656 { "(bad)", { XX } },
2657 { "(bad)", { XX } },
2658 { "pslldq", { XS, Ib } },
2659 { "(bad)", { XX } },
2660 },
2661
1ceb70f8 2662 /* PREFIX_0F78 */
4e7d34a6
L
2663 {
2664 {"vmread", { Em, Gm } },
2665 {"(bad)", { XX } },
2666 {"extrq", { XS, Ib, Ib } },
2667 {"insertq", { XM, XS, Ib, Ib } },
2668 },
2669
1ceb70f8 2670 /* PREFIX_0F79 */
4e7d34a6
L
2671 {
2672 {"vmwrite", { Gm, Em } },
2673 {"(bad)", { XX } },
2674 {"extrq", { XM, XS } },
2675 {"insertq", { XM, XS } },
2676 },
2677
1ceb70f8 2678 /* PREFIX_0F7C */
ca164297 2679 {
058f233b
L
2680 { "(bad)", { XX } },
2681 { "(bad)", { XX } },
09a2c6cf
L
2682 { "haddpd", { XM, EXx } },
2683 { "haddps", { XM, EXx } },
ca164297 2684 },
4e7d34a6 2685
1ceb70f8 2686 /* PREFIX_0F7D */
ca164297 2687 {
058f233b
L
2688 { "(bad)", { XX } },
2689 { "(bad)", { XX } },
09a2c6cf
L
2690 { "hsubpd", { XM, EXx } },
2691 { "hsubps", { XM, EXx } },
ca164297 2692 },
4e7d34a6 2693
1ceb70f8 2694 /* PREFIX_0F7E */
ca164297 2695 {
4e7d34a6
L
2696 { "movK", { Edq, MX } },
2697 { "movq", { XM, EXq } },
2698 { "movK", { Edq, XM } },
058f233b 2699 { "(bad)", { XX } },
ca164297 2700 },
4e7d34a6 2701
1ceb70f8 2702 /* PREFIX_0F7F */
ca164297 2703 {
b6169b20
L
2704 { "movq", { EMS, MX } },
2705 { "movdqu", { EXxS, XM } },
2706 { "movdqa", { EXxS, XM } },
058f233b 2707 { "(bad)", { XX } },
ca164297 2708 },
4e7d34a6 2709
1ceb70f8 2710 /* PREFIX_0FB8 */
ca164297 2711 {
4e7d34a6
L
2712 { "(bad)", { XX } },
2713 { "popcntS", { Gv, Ev } },
2714 { "(bad)", { XX } },
2715 { "(bad)", { XX } },
ca164297 2716 },
4e7d34a6 2717
1ceb70f8 2718 /* PREFIX_0FBD */
050dfa73 2719 {
4e7d34a6
L
2720 { "bsrS", { Gv, Ev } },
2721 { "lzcntS", { Gv, Ev } },
2722 { "bsrS", { Gv, Ev } },
2723 { "(bad)", { XX } },
050dfa73
MM
2724 },
2725
1ceb70f8 2726 /* PREFIX_0FC2 */
050dfa73 2727 {
ad19981d
L
2728 { "cmpps", { XM, EXx, CMP } },
2729 { "cmpss", { XM, EXd, CMP } },
2730 { "cmppd", { XM, EXx, CMP } },
2731 { "cmpsd", { XM, EXq, CMP } },
050dfa73 2732 },
246c51aa 2733
4ee52178
L
2734 /* PREFIX_0FC3 */
2735 {
2736 { "movntiS", { Ma, Gv } },
2737 { "(bad)", { XX } },
2738 { "(bad)", { XX } },
2739 { "(bad)", { XX } },
2740 },
2741
92fddf8e
L
2742 /* PREFIX_0FC7_REG_6 */
2743 {
2744 { "vmptrld",{ Mq } },
2745 { "vmxon", { Mq } },
2746 { "vmclear",{ Mq } },
2747 { "(bad)", { XX } },
2748 },
2749
1ceb70f8 2750 /* PREFIX_0FD0 */
050dfa73 2751 {
058f233b
L
2752 { "(bad)", { XX } },
2753 { "(bad)", { XX } },
4e7d34a6
L
2754 { "addsubpd", { XM, EXx } },
2755 { "addsubps", { XM, EXx } },
246c51aa 2756 },
050dfa73 2757
1ceb70f8 2758 /* PREFIX_0FD6 */
050dfa73 2759 {
058f233b 2760 { "(bad)", { XX } },
4e7d34a6 2761 { "movq2dq",{ XM, MS } },
b6169b20 2762 { "movq", { EXqS, XM } },
4e7d34a6 2763 { "movdq2q",{ MX, XS } },
050dfa73
MM
2764 },
2765
1ceb70f8 2766 /* PREFIX_0FE6 */
7918206c 2767 {
058f233b 2768 { "(bad)", { XX } },
4e7d34a6
L
2769 { "cvtdq2pd", { XM, EXq } },
2770 { "cvttpd2dq", { XM, EXx } },
2771 { "cvtpd2dq", { XM, EXx } },
7918206c 2772 },
8b38ad71 2773
1ceb70f8 2774 /* PREFIX_0FE7 */
8b38ad71 2775 {
4ee52178 2776 { "movntq", { Mq, MX } },
058f233b 2777 { "(bad)", { XX } },
75c135a8 2778 { MOD_TABLE (MOD_0FE7_PREFIX_2) },
058f233b 2779 { "(bad)", { XX } },
4e7d34a6
L
2780 },
2781
1ceb70f8 2782 /* PREFIX_0FF0 */
4e7d34a6 2783 {
058f233b
L
2784 { "(bad)", { XX } },
2785 { "(bad)", { XX } },
2786 { "(bad)", { XX } },
1ceb70f8 2787 { MOD_TABLE (MOD_0FF0_PREFIX_3) },
4e7d34a6
L
2788 },
2789
1ceb70f8 2790 /* PREFIX_0FF7 */
4e7d34a6
L
2791 {
2792 { "maskmovq", { MX, MS } },
058f233b 2793 { "(bad)", { XX } },
4e7d34a6 2794 { "maskmovdqu", { XM, XS } },
058f233b 2795 { "(bad)", { XX } },
8b38ad71 2796 },
42903f7f 2797
1ceb70f8 2798 /* PREFIX_0F3810 */
42903f7f
L
2799 {
2800 { "(bad)", { XX } },
2801 { "(bad)", { XX } },
88a94849 2802 { "pblendvb", { XM, EXx, XMM0 } },
42903f7f
L
2803 { "(bad)", { XX } },
2804 },
2805
1ceb70f8 2806 /* PREFIX_0F3814 */
42903f7f
L
2807 {
2808 { "(bad)", { XX } },
2809 { "(bad)", { XX } },
88a94849 2810 { "blendvps", { XM, EXx, XMM0 } },
42903f7f
L
2811 { "(bad)", { XX } },
2812 },
2813
1ceb70f8 2814 /* PREFIX_0F3815 */
42903f7f
L
2815 {
2816 { "(bad)", { XX } },
2817 { "(bad)", { XX } },
09a2c6cf 2818 { "blendvpd", { XM, EXx, XMM0 } },
42903f7f
L
2819 { "(bad)", { XX } },
2820 },
2821
1ceb70f8 2822 /* PREFIX_0F3817 */
42903f7f
L
2823 {
2824 { "(bad)", { XX } },
2825 { "(bad)", { XX } },
09a2c6cf 2826 { "ptest", { XM, EXx } },
42903f7f
L
2827 { "(bad)", { XX } },
2828 },
2829
1ceb70f8 2830 /* PREFIX_0F3820 */
42903f7f
L
2831 {
2832 { "(bad)", { XX } },
2833 { "(bad)", { XX } },
8976381e 2834 { "pmovsxbw", { XM, EXq } },
42903f7f
L
2835 { "(bad)", { XX } },
2836 },
2837
1ceb70f8 2838 /* PREFIX_0F3821 */
42903f7f
L
2839 {
2840 { "(bad)", { XX } },
2841 { "(bad)", { XX } },
8976381e 2842 { "pmovsxbd", { XM, EXd } },
42903f7f
L
2843 { "(bad)", { XX } },
2844 },
2845
1ceb70f8 2846 /* PREFIX_0F3822 */
42903f7f
L
2847 {
2848 { "(bad)", { XX } },
2849 { "(bad)", { XX } },
8976381e 2850 { "pmovsxbq", { XM, EXw } },
42903f7f
L
2851 { "(bad)", { XX } },
2852 },
2853
1ceb70f8 2854 /* PREFIX_0F3823 */
42903f7f
L
2855 {
2856 { "(bad)", { XX } },
2857 { "(bad)", { XX } },
8976381e 2858 { "pmovsxwd", { XM, EXq } },
42903f7f
L
2859 { "(bad)", { XX } },
2860 },
2861
1ceb70f8 2862 /* PREFIX_0F3824 */
42903f7f
L
2863 {
2864 { "(bad)", { XX } },
2865 { "(bad)", { XX } },
8976381e 2866 { "pmovsxwq", { XM, EXd } },
42903f7f
L
2867 { "(bad)", { XX } },
2868 },
2869
1ceb70f8 2870 /* PREFIX_0F3825 */
42903f7f
L
2871 {
2872 { "(bad)", { XX } },
2873 { "(bad)", { XX } },
8976381e 2874 { "pmovsxdq", { XM, EXq } },
42903f7f
L
2875 { "(bad)", { XX } },
2876 },
2877
1ceb70f8 2878 /* PREFIX_0F3828 */
42903f7f
L
2879 {
2880 { "(bad)", { XX } },
2881 { "(bad)", { XX } },
09a2c6cf 2882 { "pmuldq", { XM, EXx } },
42903f7f
L
2883 { "(bad)", { XX } },
2884 },
2885
1ceb70f8 2886 /* PREFIX_0F3829 */
42903f7f
L
2887 {
2888 { "(bad)", { XX } },
2889 { "(bad)", { XX } },
09a2c6cf 2890 { "pcmpeqq", { XM, EXx } },
42903f7f
L
2891 { "(bad)", { XX } },
2892 },
2893
1ceb70f8 2894 /* PREFIX_0F382A */
42903f7f
L
2895 {
2896 { "(bad)", { XX } },
2897 { "(bad)", { XX } },
75c135a8 2898 { MOD_TABLE (MOD_0F382A_PREFIX_2) },
42903f7f
L
2899 { "(bad)", { XX } },
2900 },
2901
1ceb70f8 2902 /* PREFIX_0F382B */
42903f7f
L
2903 {
2904 { "(bad)", { XX } },
2905 { "(bad)", { XX } },
09a2c6cf 2906 { "packusdw", { XM, EXx } },
42903f7f
L
2907 { "(bad)", { XX } },
2908 },
2909
1ceb70f8 2910 /* PREFIX_0F3830 */
42903f7f
L
2911 {
2912 { "(bad)", { XX } },
2913 { "(bad)", { XX } },
8976381e 2914 { "pmovzxbw", { XM, EXq } },
42903f7f
L
2915 { "(bad)", { XX } },
2916 },
2917
1ceb70f8 2918 /* PREFIX_0F3831 */
42903f7f
L
2919 {
2920 { "(bad)", { XX } },
2921 { "(bad)", { XX } },
8976381e 2922 { "pmovzxbd", { XM, EXd } },
42903f7f
L
2923 { "(bad)", { XX } },
2924 },
2925
1ceb70f8 2926 /* PREFIX_0F3832 */
42903f7f
L
2927 {
2928 { "(bad)", { XX } },
2929 { "(bad)", { XX } },
8976381e 2930 { "pmovzxbq", { XM, EXw } },
42903f7f
L
2931 { "(bad)", { XX } },
2932 },
2933
1ceb70f8 2934 /* PREFIX_0F3833 */
42903f7f
L
2935 {
2936 { "(bad)", { XX } },
2937 { "(bad)", { XX } },
8976381e 2938 { "pmovzxwd", { XM, EXq } },
42903f7f
L
2939 { "(bad)", { XX } },
2940 },
2941
1ceb70f8 2942 /* PREFIX_0F3834 */
42903f7f
L
2943 {
2944 { "(bad)", { XX } },
2945 { "(bad)", { XX } },
8976381e 2946 { "pmovzxwq", { XM, EXd } },
42903f7f
L
2947 { "(bad)", { XX } },
2948 },
2949
1ceb70f8 2950 /* PREFIX_0F3835 */
42903f7f
L
2951 {
2952 { "(bad)", { XX } },
2953 { "(bad)", { XX } },
8976381e 2954 { "pmovzxdq", { XM, EXq } },
42903f7f
L
2955 { "(bad)", { XX } },
2956 },
2957
1ceb70f8 2958 /* PREFIX_0F3837 */
4e7d34a6
L
2959 {
2960 { "(bad)", { XX } },
2961 { "(bad)", { XX } },
2962 { "pcmpgtq", { XM, EXx } },
2963 { "(bad)", { XX } },
2964 },
2965
1ceb70f8 2966 /* PREFIX_0F3838 */
42903f7f
L
2967 {
2968 { "(bad)", { XX } },
2969 { "(bad)", { XX } },
09a2c6cf 2970 { "pminsb", { XM, EXx } },
42903f7f
L
2971 { "(bad)", { XX } },
2972 },
2973
1ceb70f8 2974 /* PREFIX_0F3839 */
42903f7f
L
2975 {
2976 { "(bad)", { XX } },
2977 { "(bad)", { XX } },
09a2c6cf 2978 { "pminsd", { XM, EXx } },
42903f7f
L
2979 { "(bad)", { XX } },
2980 },
2981
1ceb70f8 2982 /* PREFIX_0F383A */
42903f7f
L
2983 {
2984 { "(bad)", { XX } },
2985 { "(bad)", { XX } },
09a2c6cf 2986 { "pminuw", { XM, EXx } },
42903f7f
L
2987 { "(bad)", { XX } },
2988 },
2989
1ceb70f8 2990 /* PREFIX_0F383B */
42903f7f
L
2991 {
2992 { "(bad)", { XX } },
2993 { "(bad)", { XX } },
09a2c6cf 2994 { "pminud", { XM, EXx } },
42903f7f
L
2995 { "(bad)", { XX } },
2996 },
2997
1ceb70f8 2998 /* PREFIX_0F383C */
42903f7f
L
2999 {
3000 { "(bad)", { XX } },
3001 { "(bad)", { XX } },
09a2c6cf 3002 { "pmaxsb", { XM, EXx } },
42903f7f
L
3003 { "(bad)", { XX } },
3004 },
3005
1ceb70f8 3006 /* PREFIX_0F383D */
42903f7f
L
3007 {
3008 { "(bad)", { XX } },
3009 { "(bad)", { XX } },
09a2c6cf 3010 { "pmaxsd", { XM, EXx } },
42903f7f
L
3011 { "(bad)", { XX } },
3012 },
3013
1ceb70f8 3014 /* PREFIX_0F383E */
42903f7f
L
3015 {
3016 { "(bad)", { XX } },
3017 { "(bad)", { XX } },
09a2c6cf 3018 { "pmaxuw", { XM, EXx } },
42903f7f
L
3019 { "(bad)", { XX } },
3020 },
3021
1ceb70f8 3022 /* PREFIX_0F383F */
42903f7f
L
3023 {
3024 { "(bad)", { XX } },
3025 { "(bad)", { XX } },
09a2c6cf 3026 { "pmaxud", { XM, EXx } },
42903f7f
L
3027 { "(bad)", { XX } },
3028 },
3029
1ceb70f8 3030 /* PREFIX_0F3840 */
42903f7f
L
3031 {
3032 { "(bad)", { XX } },
3033 { "(bad)", { XX } },
09a2c6cf 3034 { "pmulld", { XM, EXx } },
42903f7f
L
3035 { "(bad)", { XX } },
3036 },
3037
1ceb70f8 3038 /* PREFIX_0F3841 */
42903f7f
L
3039 {
3040 { "(bad)", { XX } },
3041 { "(bad)", { XX } },
09a2c6cf 3042 { "phminposuw", { XM, EXx } },
42903f7f
L
3043 { "(bad)", { XX } },
3044 },
3045
f1f8f695
L
3046 /* PREFIX_0F3880 */
3047 {
3048 { "(bad)", { XX } },
3049 { "(bad)", { XX } },
3050 { "invept", { Gm, Mo } },
3051 { "(bad)", { XX } },
3052 },
3053
3054 /* PREFIX_0F3881 */
3055 {
3056 { "(bad)", { XX } },
3057 { "(bad)", { XX } },
3058 { "invvpid", { Gm, Mo } },
3059 { "(bad)", { XX } },
3060 },
3061
c0f3af97
L
3062 /* PREFIX_0F38DB */
3063 {
3064 { "(bad)", { XX } },
3065 { "(bad)", { XX } },
3066 { "aesimc", { XM, EXx } },
3067 { "(bad)", { XX } },
3068 },
3069
3070 /* PREFIX_0F38DC */
3071 {
3072 { "(bad)", { XX } },
3073 { "(bad)", { XX } },
3074 { "aesenc", { XM, EXx } },
3075 { "(bad)", { XX } },
3076 },
3077
3078 /* PREFIX_0F38DD */
3079 {
3080 { "(bad)", { XX } },
3081 { "(bad)", { XX } },
3082 { "aesenclast", { XM, EXx } },
3083 { "(bad)", { XX } },
3084 },
3085
3086 /* PREFIX_0F38DE */
3087 {
3088 { "(bad)", { XX } },
3089 { "(bad)", { XX } },
3090 { "aesdec", { XM, EXx } },
3091 { "(bad)", { XX } },
3092 },
3093
3094 /* PREFIX_0F38DF */
3095 {
3096 { "(bad)", { XX } },
3097 { "(bad)", { XX } },
3098 { "aesdeclast", { XM, EXx } },
3099 { "(bad)", { XX } },
3100 },
3101
1ceb70f8 3102 /* PREFIX_0F38F0 */
4e7d34a6 3103 {
f1f8f695 3104 { "movbeS", { Gv, { MOVBE_Fixup, v_mode } } },
4e7d34a6 3105 { "(bad)", { XX } },
f1f8f695 3106 { "movbeS", { Gv, { MOVBE_Fixup, v_mode } } },
4e7d34a6
L
3107 { "crc32", { Gdq, { CRC32_Fixup, b_mode } } },
3108 },
3109
1ceb70f8 3110 /* PREFIX_0F38F1 */
4e7d34a6 3111 {
f1f8f695 3112 { "movbeS", { { MOVBE_Fixup, v_mode }, Gv } },
4e7d34a6 3113 { "(bad)", { XX } },
f1f8f695 3114 { "movbeS", { { MOVBE_Fixup, v_mode }, Gv } },
4e7d34a6
L
3115 { "crc32", { Gdq, { CRC32_Fixup, v_mode } } },
3116 },
3117
1ceb70f8 3118 /* PREFIX_0F3A08 */
42903f7f
L
3119 {
3120 { "(bad)", { XX } },
3121 { "(bad)", { XX } },
09a2c6cf 3122 { "roundps", { XM, EXx, Ib } },
42903f7f
L
3123 { "(bad)", { XX } },
3124 },
3125
1ceb70f8 3126 /* PREFIX_0F3A09 */
42903f7f
L
3127 {
3128 { "(bad)", { XX } },
3129 { "(bad)", { XX } },
09a2c6cf 3130 { "roundpd", { XM, EXx, Ib } },
42903f7f
L
3131 { "(bad)", { XX } },
3132 },
3133
1ceb70f8 3134 /* PREFIX_0F3A0A */
42903f7f
L
3135 {
3136 { "(bad)", { XX } },
3137 { "(bad)", { XX } },
09335d05 3138 { "roundss", { XM, EXd, Ib } },
42903f7f
L
3139 { "(bad)", { XX } },
3140 },
3141
1ceb70f8 3142 /* PREFIX_0F3A0B */
42903f7f
L
3143 {
3144 { "(bad)", { XX } },
3145 { "(bad)", { XX } },
09335d05 3146 { "roundsd", { XM, EXq, Ib } },
42903f7f
L
3147 { "(bad)", { XX } },
3148 },
3149
1ceb70f8 3150 /* PREFIX_0F3A0C */
42903f7f
L
3151 {
3152 { "(bad)", { XX } },
3153 { "(bad)", { XX } },
09a2c6cf 3154 { "blendps", { XM, EXx, Ib } },
42903f7f
L
3155 { "(bad)", { XX } },
3156 },
3157
1ceb70f8 3158 /* PREFIX_0F3A0D */
42903f7f
L
3159 {
3160 { "(bad)", { XX } },
3161 { "(bad)", { XX } },
09a2c6cf 3162 { "blendpd", { XM, EXx, Ib } },
42903f7f
L
3163 { "(bad)", { XX } },
3164 },
3165
1ceb70f8 3166 /* PREFIX_0F3A0E */
42903f7f
L
3167 {
3168 { "(bad)", { XX } },
3169 { "(bad)", { XX } },
09a2c6cf 3170 { "pblendw", { XM, EXx, Ib } },
42903f7f
L
3171 { "(bad)", { XX } },
3172 },
3173
1ceb70f8 3174 /* PREFIX_0F3A14 */
42903f7f
L
3175 {
3176 { "(bad)", { XX } },
3177 { "(bad)", { XX } },
3178 { "pextrb", { Edqb, XM, Ib } },
3179 { "(bad)", { XX } },
3180 },
3181
1ceb70f8 3182 /* PREFIX_0F3A15 */
42903f7f
L
3183 {
3184 { "(bad)", { XX } },
3185 { "(bad)", { XX } },
3186 { "pextrw", { Edqw, XM, Ib } },
3187 { "(bad)", { XX } },
3188 },
3189
1ceb70f8 3190 /* PREFIX_0F3A16 */
42903f7f
L
3191 {
3192 { "(bad)", { XX } },
3193 { "(bad)", { XX } },
3194 { "pextrK", { Edq, XM, Ib } },
3195 { "(bad)", { XX } },
3196 },
3197
1ceb70f8 3198 /* PREFIX_0F3A17 */
42903f7f
L
3199 {
3200 { "(bad)", { XX } },
3201 { "(bad)", { XX } },
3202 { "extractps", { Edqd, XM, Ib } },
3203 { "(bad)", { XX } },
3204 },
3205
1ceb70f8 3206 /* PREFIX_0F3A20 */
42903f7f
L
3207 {
3208 { "(bad)", { XX } },
3209 { "(bad)", { XX } },
3210 { "pinsrb", { XM, Edqb, Ib } },
3211 { "(bad)", { XX } },
3212 },
3213
1ceb70f8 3214 /* PREFIX_0F3A21 */
42903f7f
L
3215 {
3216 { "(bad)", { XX } },
3217 { "(bad)", { XX } },
8976381e 3218 { "insertps", { XM, EXd, Ib } },
42903f7f
L
3219 { "(bad)", { XX } },
3220 },
3221
1ceb70f8 3222 /* PREFIX_0F3A22 */
42903f7f
L
3223 {
3224 { "(bad)", { XX } },
3225 { "(bad)", { XX } },
3226 { "pinsrK", { XM, Edq, Ib } },
3227 { "(bad)", { XX } },
3228 },
3229
1ceb70f8 3230 /* PREFIX_0F3A40 */
42903f7f
L
3231 {
3232 { "(bad)", { XX } },
3233 { "(bad)", { XX } },
09a2c6cf 3234 { "dpps", { XM, EXx, Ib } },
42903f7f
L
3235 { "(bad)", { XX } },
3236 },
3237
1ceb70f8 3238 /* PREFIX_0F3A41 */
42903f7f
L
3239 {
3240 { "(bad)", { XX } },
3241 { "(bad)", { XX } },
09a2c6cf 3242 { "dppd", { XM, EXx, Ib } },
42903f7f
L
3243 { "(bad)", { XX } },
3244 },
3245
1ceb70f8 3246 /* PREFIX_0F3A42 */
42903f7f
L
3247 {
3248 { "(bad)", { XX } },
3249 { "(bad)", { XX } },
09a2c6cf 3250 { "mpsadbw", { XM, EXx, Ib } },
42903f7f
L
3251 { "(bad)", { XX } },
3252 },
381d071f 3253
c0f3af97
L
3254 /* PREFIX_0F3A44 */
3255 {
3256 { "(bad)", { XX } },
3257 { "(bad)", { XX } },
3258 { "pclmulqdq", { XM, EXx, PCLMUL } },
3259 { "(bad)", { XX } },
3260 },
3261
1ceb70f8 3262 /* PREFIX_0F3A60 */
381d071f
L
3263 {
3264 { "(bad)", { XX } },
3265 { "(bad)", { XX } },
4e7d34a6 3266 { "pcmpestrm", { XM, EXx, Ib } },
381d071f
L
3267 { "(bad)", { XX } },
3268 },
3269
1ceb70f8 3270 /* PREFIX_0F3A61 */
381d071f
L
3271 {
3272 { "(bad)", { XX } },
3273 { "(bad)", { XX } },
4e7d34a6 3274 { "pcmpestri", { XM, EXx, Ib } },
381d071f 3275 { "(bad)", { XX } },
381d071f
L
3276 },
3277
1ceb70f8 3278 /* PREFIX_0F3A62 */
381d071f
L
3279 {
3280 { "(bad)", { XX } },
3281 { "(bad)", { XX } },
4e7d34a6 3282 { "pcmpistrm", { XM, EXx, Ib } },
381d071f 3283 { "(bad)", { XX } },
381d071f
L
3284 },
3285
1ceb70f8 3286 /* PREFIX_0F3A63 */
381d071f
L
3287 {
3288 { "(bad)", { XX } },
3289 { "(bad)", { XX } },
4e7d34a6 3290 { "pcmpistri", { XM, EXx, Ib } },
381d071f
L
3291 { "(bad)", { XX } },
3292 },
09a2c6cf 3293
c0f3af97 3294 /* PREFIX_0F3ADF */
09a2c6cf 3295 {
c0f3af97
L
3296 { "(bad)", { XX } },
3297 { "(bad)", { XX } },
3298 { "aeskeygenassist", { XM, EXx, Ib } },
3299 { "(bad)", { XX } },
09a2c6cf
L
3300 },
3301
c0f3af97 3302 /* PREFIX_VEX_10 */
09a2c6cf 3303 {
c0f3af97
L
3304 { "vmovups", { XM, EXx } },
3305 { VEX_LEN_TABLE (VEX_LEN_10_P_1) },
3306 { "vmovupd", { XM, EXx } },
3307 { VEX_LEN_TABLE (VEX_LEN_10_P_3) },
09a2c6cf
L
3308 },
3309
c0f3af97 3310 /* PREFIX_VEX_11 */
09a2c6cf 3311 {
b6169b20 3312 { "vmovups", { EXxS, XM } },
c0f3af97 3313 { VEX_LEN_TABLE (VEX_LEN_11_P_1) },
b6169b20 3314 { "vmovupd", { EXxS, XM } },
c0f3af97 3315 { VEX_LEN_TABLE (VEX_LEN_11_P_3) },
09a2c6cf
L
3316 },
3317
c0f3af97 3318 /* PREFIX_VEX_12 */
09a2c6cf 3319 {
c0f3af97
L
3320 { MOD_TABLE (MOD_VEX_12_PREFIX_0) },
3321 { "vmovsldup", { XM, EXx } },
3322 { VEX_LEN_TABLE (VEX_LEN_12_P_2) },
3323 { "vmovddup", { XM, EXymmq } },
09a2c6cf
L
3324 },
3325
c0f3af97 3326 /* PREFIX_VEX_16 */
09a2c6cf 3327 {
c0f3af97
L
3328 { MOD_TABLE (MOD_VEX_16_PREFIX_0) },
3329 { "vmovshdup", { XM, EXx } },
3330 { VEX_LEN_TABLE (VEX_LEN_16_P_2) },
3331 { "(bad)", { XX } },
5f754f58 3332 },
7c52e0e8 3333
c0f3af97 3334 /* PREFIX_VEX_2A */
5f754f58 3335 {
c0f3af97
L
3336 { "(bad)", { XX } },
3337 { VEX_LEN_TABLE (VEX_LEN_2A_P_1) },
3338 { "(bad)", { XX } },
3339 { VEX_LEN_TABLE (VEX_LEN_2A_P_3) },
5f754f58 3340 },
7c52e0e8 3341
c0f3af97 3342 /* PREFIX_VEX_2C */
5f754f58 3343 {
c0f3af97
L
3344 { "(bad)", { XX } },
3345 { VEX_LEN_TABLE (VEX_LEN_2C_P_1) },
3346 { "(bad)", { XX } },
3347 { VEX_LEN_TABLE (VEX_LEN_2C_P_3) },
5f754f58 3348 },
7c52e0e8 3349
c0f3af97 3350 /* PREFIX_VEX_2D */
7c52e0e8 3351 {
c0f3af97
L
3352 { "(bad)", { XX } },
3353 { VEX_LEN_TABLE (VEX_LEN_2D_P_1) },
3354 { "(bad)", { XX } },
3355 { VEX_LEN_TABLE (VEX_LEN_2D_P_3) },
7c52e0e8
L
3356 },
3357
c0f3af97 3358 /* PREFIX_VEX_2E */
7c52e0e8 3359 {
c0f3af97
L
3360 { VEX_LEN_TABLE (VEX_LEN_2E_P_0) },
3361 { "(bad)", { XX } },
3362 { VEX_LEN_TABLE (VEX_LEN_2E_P_2) },
3363 { "(bad)", { XX } },
7c52e0e8
L
3364 },
3365
c0f3af97 3366 /* PREFIX_VEX_2F */
7c52e0e8 3367 {
c0f3af97
L
3368 { VEX_LEN_TABLE (VEX_LEN_2F_P_0) },
3369 { "(bad)", { XX } },
3370 { VEX_LEN_TABLE (VEX_LEN_2F_P_2) },
3371 { "(bad)", { XX } },
7c52e0e8
L
3372 },
3373
c0f3af97 3374 /* PREFIX_VEX_51 */
7c52e0e8 3375 {
c0f3af97
L
3376 { "vsqrtps", { XM, EXx } },
3377 { VEX_LEN_TABLE (VEX_LEN_51_P_1) },
3378 { "vsqrtpd", { XM, EXx } },
3379 { VEX_LEN_TABLE (VEX_LEN_51_P_3) },
7c52e0e8
L
3380 },
3381
c0f3af97 3382 /* PREFIX_VEX_52 */
7c52e0e8 3383 {
c0f3af97
L
3384 { "vrsqrtps", { XM, EXx } },
3385 { VEX_LEN_TABLE (VEX_LEN_52_P_1) },
3386 { "(bad)", { XX } },
3387 { "(bad)", { XX } },
7c52e0e8
L
3388 },
3389
c0f3af97 3390 /* PREFIX_VEX_53 */
7c52e0e8 3391 {
c0f3af97
L
3392 { "vrcpps", { XM, EXx } },
3393 { VEX_LEN_TABLE (VEX_LEN_53_P_1) },
3394 { "(bad)", { XX } },
3395 { "(bad)", { XX } },
7c52e0e8
L
3396 },
3397
c0f3af97 3398 /* PREFIX_VEX_58 */
7c52e0e8 3399 {
c0f3af97
L
3400 { "vaddps", { XM, Vex, EXx } },
3401 { VEX_LEN_TABLE (VEX_LEN_58_P_1) },
3402 { "vaddpd", { XM, Vex, EXx } },
3403 { VEX_LEN_TABLE (VEX_LEN_58_P_3) },
7c52e0e8
L
3404 },
3405
c0f3af97 3406 /* PREFIX_VEX_59 */
7c52e0e8 3407 {
c0f3af97
L
3408 { "vmulps", { XM, Vex, EXx } },
3409 { VEX_LEN_TABLE (VEX_LEN_59_P_1) },
3410 { "vmulpd", { XM, Vex, EXx } },
3411 { VEX_LEN_TABLE (VEX_LEN_59_P_3) },
7c52e0e8
L
3412 },
3413
c0f3af97 3414 /* PREFIX_VEX_5A */
7c52e0e8 3415 {
c0f3af97
L
3416 { "vcvtps2pd", { XM, EXxmmq } },
3417 { VEX_LEN_TABLE (VEX_LEN_5A_P_1) },
3418 { "vcvtpd2ps%XY", { XMM, EXx } },
3419 { VEX_LEN_TABLE (VEX_LEN_5A_P_3) },
7c52e0e8
L
3420 },
3421
c0f3af97 3422 /* PREFIX_VEX_5B */
7c52e0e8 3423 {
c0f3af97
L
3424 { "vcvtdq2ps", { XM, EXx } },
3425 { "vcvttps2dq", { XM, EXx } },
3426 { "vcvtps2dq", { XM, EXx } },
3427 { "(bad)", { XX } },
7c52e0e8
L
3428 },
3429
c0f3af97 3430 /* PREFIX_VEX_5C */
7c52e0e8 3431 {
c0f3af97
L
3432 { "vsubps", { XM, Vex, EXx } },
3433 { VEX_LEN_TABLE (VEX_LEN_5C_P_1) },
3434 { "vsubpd", { XM, Vex, EXx } },
3435 { VEX_LEN_TABLE (VEX_LEN_5C_P_3) },
7c52e0e8
L
3436 },
3437
c0f3af97 3438 /* PREFIX_VEX_5D */
7c52e0e8 3439 {
c0f3af97
L
3440 { "vminps", { XM, Vex, EXx } },
3441 { VEX_LEN_TABLE (VEX_LEN_5D_P_1) },
3442 { "vminpd", { XM, Vex, EXx } },
3443 { VEX_LEN_TABLE (VEX_LEN_5D_P_3) },
7c52e0e8
L
3444 },
3445
c0f3af97 3446 /* PREFIX_VEX_5E */
7c52e0e8 3447 {
c0f3af97
L
3448 { "vdivps", { XM, Vex, EXx } },
3449 { VEX_LEN_TABLE (VEX_LEN_5E_P_1) },
3450 { "vdivpd", { XM, Vex, EXx } },
3451 { VEX_LEN_TABLE (VEX_LEN_5E_P_3) },
7c52e0e8
L
3452 },
3453
c0f3af97 3454 /* PREFIX_VEX_5F */
7c52e0e8 3455 {
c0f3af97
L
3456 { "vmaxps", { XM, Vex, EXx } },
3457 { VEX_LEN_TABLE (VEX_LEN_5F_P_1) },
3458 { "vmaxpd", { XM, Vex, EXx } },
3459 { VEX_LEN_TABLE (VEX_LEN_5F_P_3) },
7c52e0e8
L
3460 },
3461
c0f3af97 3462 /* PREFIX_VEX_60 */
7c52e0e8 3463 {
c0f3af97
L
3464 { "(bad)", { XX } },
3465 { "(bad)", { XX } },
3466 { VEX_LEN_TABLE (VEX_LEN_60_P_2) },
3467 { "(bad)", { XX } },
7c52e0e8
L
3468 },
3469
c0f3af97 3470 /* PREFIX_VEX_61 */
7c52e0e8 3471 {
c0f3af97
L
3472 { "(bad)", { XX } },
3473 { "(bad)", { XX } },
3474 { VEX_LEN_TABLE (VEX_LEN_61_P_2) },
3475 { "(bad)", { XX } },
7c52e0e8
L
3476 },
3477
c0f3af97 3478 /* PREFIX_VEX_62 */
7c52e0e8 3479 {
c0f3af97
L
3480 { "(bad)", { XX } },
3481 { "(bad)", { XX } },
3482 { VEX_LEN_TABLE (VEX_LEN_62_P_2) },
3483 { "(bad)", { XX } },
7c52e0e8
L
3484 },
3485
c0f3af97 3486 /* PREFIX_VEX_63 */
7c52e0e8 3487 {
c0f3af97
L
3488 { "(bad)", { XX } },
3489 { "(bad)", { XX } },
3490 { VEX_LEN_TABLE (VEX_LEN_63_P_2) },
3491 { "(bad)", { XX } },
7c52e0e8
L
3492 },
3493
c0f3af97 3494 /* PREFIX_VEX_64 */
7c52e0e8 3495 {
c0f3af97
L
3496 { "(bad)", { XX } },
3497 { "(bad)", { XX } },
3498 { VEX_LEN_TABLE (VEX_LEN_64_P_2) },
3499 { "(bad)", { XX } },
7c52e0e8
L
3500 },
3501
c0f3af97 3502 /* PREFIX_VEX_65 */
7c52e0e8 3503 {
c0f3af97
L
3504 { "(bad)", { XX } },
3505 { "(bad)", { XX } },
3506 { VEX_LEN_TABLE (VEX_LEN_65_P_2) },
3507 { "(bad)", { XX } },
7c52e0e8
L
3508 },
3509
c0f3af97 3510 /* PREFIX_VEX_66 */
7c52e0e8 3511 {
c0f3af97
L
3512 { "(bad)", { XX } },
3513 { "(bad)", { XX } },
3514 { VEX_LEN_TABLE (VEX_LEN_66_P_2) },
3515 { "(bad)", { XX } },
7c52e0e8 3516 },
6439fc28 3517
c0f3af97 3518 /* PREFIX_VEX_67 */
331d2d0d 3519 {
c0f3af97
L
3520 { "(bad)", { XX } },
3521 { "(bad)", { XX } },
3522 { VEX_LEN_TABLE (VEX_LEN_67_P_2) },
3523 { "(bad)", { XX } },
3524 },
3525
3526 /* PREFIX_VEX_68 */
3527 {
3528 { "(bad)", { XX } },
3529 { "(bad)", { XX } },
3530 { VEX_LEN_TABLE (VEX_LEN_68_P_2) },
3531 { "(bad)", { XX } },
3532 },
3533
3534 /* PREFIX_VEX_69 */
3535 {
3536 { "(bad)", { XX } },
3537 { "(bad)", { XX } },
3538 { VEX_LEN_TABLE (VEX_LEN_69_P_2) },
3539 { "(bad)", { XX } },
3540 },
3541
3542 /* PREFIX_VEX_6A */
3543 {
3544 { "(bad)", { XX } },
3545 { "(bad)", { XX } },
3546 { VEX_LEN_TABLE (VEX_LEN_6A_P_2) },
3547 { "(bad)", { XX } },
3548 },
3549
3550 /* PREFIX_VEX_6B */
3551 {
3552 { "(bad)", { XX } },
3553 { "(bad)", { XX } },
3554 { VEX_LEN_TABLE (VEX_LEN_6B_P_2) },
3555 { "(bad)", { XX } },
3556 },
3557
3558 /* PREFIX_VEX_6C */
3559 {
3560 { "(bad)", { XX } },
3561 { "(bad)", { XX } },
3562 { VEX_LEN_TABLE (VEX_LEN_6C_P_2) },
3563 { "(bad)", { XX } },
3564 },
3565
3566 /* PREFIX_VEX_6D */
3567 {
3568 { "(bad)", { XX } },
3569 { "(bad)", { XX } },
3570 { VEX_LEN_TABLE (VEX_LEN_6D_P_2) },
3571 { "(bad)", { XX } },
3572 },
3573
3574 /* PREFIX_VEX_6E */
3575 {
3576 { "(bad)", { XX } },
3577 { "(bad)", { XX } },
3578 { VEX_LEN_TABLE (VEX_LEN_6E_P_2) },
3579 { "(bad)", { XX } },
3580 },
3581
3582 /* PREFIX_VEX_6F */
3583 {
3584 { "(bad)", { XX } },
3585 { "vmovdqu", { XM, EXx } },
3586 { "vmovdqa", { XM, EXx } },
3587 { "(bad)", { XX } },
3588 },
3589
3590 /* PREFIX_VEX_70 */
3591 {
3592 { "(bad)", { XX } },
3593 { VEX_LEN_TABLE (VEX_LEN_70_P_1) },
3594 { VEX_LEN_TABLE (VEX_LEN_70_P_2) },
3595 { VEX_LEN_TABLE (VEX_LEN_70_P_3) },
3596 },
3597
3598 /* PREFIX_VEX_71_REG_2 */
3599 {
3600 { "(bad)", { XX } },
3601 { "(bad)", { XX } },
3602 { VEX_LEN_TABLE (VEX_LEN_71_R_2_P_2) },
3603 { "(bad)", { XX } },
3604 },
3605
3606 /* PREFIX_VEX_71_REG_4 */
3607 {
3608 { "(bad)", { XX } },
3609 { "(bad)", { XX } },
3610 { VEX_LEN_TABLE (VEX_LEN_71_R_4_P_2) },
3611 { "(bad)", { XX } },
3612 },
3613
3614 /* PREFIX_VEX_71_REG_6 */
3615 {
3616 { "(bad)", { XX } },
3617 { "(bad)", { XX } },
3618 { VEX_LEN_TABLE (VEX_LEN_71_R_6_P_2) },
3619 { "(bad)", { XX } },
3620 },
3621
3622 /* PREFIX_VEX_72_REG_2 */
3623 {
3624 { "(bad)", { XX } },
3625 { "(bad)", { XX } },
3626 { VEX_LEN_TABLE (VEX_LEN_72_R_2_P_2) },
3627 { "(bad)", { XX } },
3628 },
3629
3630 /* PREFIX_VEX_72_REG_4 */
3631 {
3632 { "(bad)", { XX } },
3633 { "(bad)", { XX } },
3634 { VEX_LEN_TABLE (VEX_LEN_72_R_4_P_2) },
3635 { "(bad)", { XX } },
3636 },
3637
3638 /* PREFIX_VEX_72_REG_6 */
3639 {
3640 { "(bad)", { XX } },
3641 { "(bad)", { XX } },
3642 { VEX_LEN_TABLE (VEX_LEN_72_R_6_P_2) },
3643 { "(bad)", { XX } },
3644 },
3645
3646 /* PREFIX_VEX_73_REG_2 */
3647 {
3648 { "(bad)", { XX } },
3649 { "(bad)", { XX } },
3650 { VEX_LEN_TABLE (VEX_LEN_73_R_2_P_2) },
3651 { "(bad)", { XX } },
3652 },
3653
3654 /* PREFIX_VEX_73_REG_3 */
3655 {
3656 { "(bad)", { XX } },
3657 { "(bad)", { XX } },
3658 { VEX_LEN_TABLE (VEX_LEN_73_R_3_P_2) },
3659 { "(bad)", { XX } },
3660 },
3661
3662 /* PREFIX_VEX_73_REG_6 */
3663 {
3664 { "(bad)", { XX } },
3665 { "(bad)", { XX } },
3666 { VEX_LEN_TABLE (VEX_LEN_73_R_6_P_2) },
3667 { "(bad)", { XX } },
3668 },
3669
3670 /* PREFIX_VEX_73_REG_7 */
3671 {
3672 { "(bad)", { XX } },
3673 { "(bad)", { XX } },
3674 { VEX_LEN_TABLE (VEX_LEN_73_R_7_P_2) },
3675 { "(bad)", { XX } },
3676 },
3677
3678 /* PREFIX_VEX_74 */
3679 {
3680 { "(bad)", { XX } },
3681 { "(bad)", { XX } },
3682 { VEX_LEN_TABLE (VEX_LEN_74_P_2) },
3683 { "(bad)", { XX } },
3684 },
3685
3686 /* PREFIX_VEX_75 */
3687 {
3688 { "(bad)", { XX } },
3689 { "(bad)", { XX } },
3690 { VEX_LEN_TABLE (VEX_LEN_75_P_2) },
3691 { "(bad)", { XX } },
3692 },
3693
3694 /* PREFIX_VEX_76 */
3695 {
3696 { "(bad)", { XX } },
3697 { "(bad)", { XX } },
3698 { VEX_LEN_TABLE (VEX_LEN_76_P_2) },
3699 { "(bad)", { XX } },
3700 },
3701
3702 /* PREFIX_VEX_77 */
3703 {
3704 { "", { VZERO } },
3705 { "(bad)", { XX } },
3706 { "(bad)", { XX } },
3707 { "(bad)", { XX } },
3708 },
3709
3710 /* PREFIX_VEX_7C */
3711 {
3712 { "(bad)", { XX } },
3713 { "(bad)", { XX } },
3714 { "vhaddpd", { XM, Vex, EXx } },
3715 { "vhaddps", { XM, Vex, EXx } },
3716 },
3717
3718 /* PREFIX_VEX_7D */
3719 {
3720 { "(bad)", { XX } },
3721 { "(bad)", { XX } },
3722 { "vhsubpd", { XM, Vex, EXx } },
3723 { "vhsubps", { XM, Vex, EXx } },
3724 },
3725
3726 /* PREFIX_VEX_7E */
3727 {
3728 { "(bad)", { XX } },
3729 { VEX_LEN_TABLE (VEX_LEN_7E_P_1) },
3730 { VEX_LEN_TABLE (VEX_LEN_7E_P_2) },
3731 { "(bad)", { XX } },
3732 },
3733
3734 /* PREFIX_VEX_7F */
3735 {
3736 { "(bad)", { XX } },
b6169b20
L
3737 { "vmovdqu", { EXxS, XM } },
3738 { "vmovdqa", { EXxS, XM } },
c0f3af97
L
3739 { "(bad)", { XX } },
3740 },
3741
3742 /* PREFIX_VEX_C2 */
3743 {
3744 { "vcmpps", { XM, Vex, EXx, VCMP } },
3745 { VEX_LEN_TABLE (VEX_LEN_C2_P_1) },
3746 { "vcmppd", { XM, Vex, EXx, VCMP } },
3747 { VEX_LEN_TABLE (VEX_LEN_C2_P_3) },
3748 },
3749
3750 /* PREFIX_VEX_C4 */
3751 {
3752 { "(bad)", { XX } },
3753 { "(bad)", { XX } },
3754 { VEX_LEN_TABLE (VEX_LEN_C4_P_2) },
3755 { "(bad)", { XX } },
3756 },
3757
3758 /* PREFIX_VEX_C5 */
3759 {
3760 { "(bad)", { XX } },
3761 { "(bad)", { XX } },
3762 { VEX_LEN_TABLE (VEX_LEN_C5_P_2) },
3763 { "(bad)", { XX } },
3764 },
3765
3766 /* PREFIX_VEX_D0 */
3767 {
3768 { "(bad)", { XX } },
3769 { "(bad)", { XX } },
3770 { "vaddsubpd", { XM, Vex, EXx } },
3771 { "vaddsubps", { XM, Vex, EXx } },
3772 },
3773
3774 /* PREFIX_VEX_D1 */
3775 {
3776 { "(bad)", { XX } },
3777 { "(bad)", { XX } },
3778 { VEX_LEN_TABLE (VEX_LEN_D1_P_2) },
3779 { "(bad)", { XX } },
3780 },
3781
3782 /* PREFIX_VEX_D2 */
3783 {
3784 { "(bad)", { XX } },
3785 { "(bad)", { XX } },
3786 { VEX_LEN_TABLE (VEX_LEN_D2_P_2) },
3787 { "(bad)", { XX } },
3788 },
3789
3790 /* PREFIX_VEX_D3 */
3791 {
3792 { "(bad)", { XX } },
3793 { "(bad)", { XX } },
3794 { VEX_LEN_TABLE (VEX_LEN_D3_P_2) },
3795 { "(bad)", { XX } },
3796 },
3797
3798 /* PREFIX_VEX_D4 */
3799 {
3800 { "(bad)", { XX } },
3801 { "(bad)", { XX } },
3802 { VEX_LEN_TABLE (VEX_LEN_D4_P_2) },
3803 { "(bad)", { XX } },
3804 },
3805
3806 /* PREFIX_VEX_D5 */
3807 {
3808 { "(bad)", { XX } },
3809 { "(bad)", { XX } },
3810 { VEX_LEN_TABLE (VEX_LEN_D5_P_2) },
3811 { "(bad)", { XX } },
3812 },
3813
3814 /* PREFIX_VEX_D6 */
3815 {
3816 { "(bad)", { XX } },
3817 { "(bad)", { XX } },
3818 { VEX_LEN_TABLE (VEX_LEN_D6_P_2) },
3819 { "(bad)", { XX } },
3820 },
3821
3822 /* PREFIX_VEX_D7 */
3823 {
3824 { "(bad)", { XX } },
3825 { "(bad)", { XX } },
3826 { MOD_TABLE (MOD_VEX_D7_PREFIX_2) },
3827 { "(bad)", { XX } },
3828 },
3829
3830 /* PREFIX_VEX_D8 */
3831 {
3832 { "(bad)", { XX } },
3833 { "(bad)", { XX } },
3834 { VEX_LEN_TABLE (VEX_LEN_D8_P_2) },
3835 { "(bad)", { XX } },
3836 },
3837
3838 /* PREFIX_VEX_D9 */
3839 {
3840 { "(bad)", { XX } },
3841 { "(bad)", { XX } },
3842 { VEX_LEN_TABLE (VEX_LEN_D9_P_2) },
3843 { "(bad)", { XX } },
3844 },
3845
3846 /* PREFIX_VEX_DA */
3847 {
3848 { "(bad)", { XX } },
3849 { "(bad)", { XX } },
3850 { VEX_LEN_TABLE (VEX_LEN_DA_P_2) },
3851 { "(bad)", { XX } },
3852 },
3853
3854 /* PREFIX_VEX_DB */
3855 {
3856 { "(bad)", { XX } },
3857 { "(bad)", { XX } },
3858 { VEX_LEN_TABLE (VEX_LEN_DB_P_2) },
3859 { "(bad)", { XX } },
3860 },
3861
3862 /* PREFIX_VEX_DC */
3863 {
3864 { "(bad)", { XX } },
3865 { "(bad)", { XX } },
3866 { VEX_LEN_TABLE (VEX_LEN_DC_P_2) },
3867 { "(bad)", { XX } },
3868 },
3869
3870 /* PREFIX_VEX_DD */
3871 {
3872 { "(bad)", { XX } },
3873 { "(bad)", { XX } },
3874 { VEX_LEN_TABLE (VEX_LEN_DD_P_2) },
3875 { "(bad)", { XX } },
3876 },
3877
3878 /* PREFIX_VEX_DE */
3879 {
3880 { "(bad)", { XX } },
3881 { "(bad)", { XX } },
3882 { VEX_LEN_TABLE (VEX_LEN_DE_P_2) },
3883 { "(bad)", { XX } },
3884 },
3885
3886 /* PREFIX_VEX_DF */
3887 {
3888 { "(bad)", { XX } },
3889 { "(bad)", { XX } },
3890 { VEX_LEN_TABLE (VEX_LEN_DF_P_2) },
3891 { "(bad)", { XX } },
3892 },
3893
3894 /* PREFIX_VEX_E0 */
3895 {
3896 { "(bad)", { XX } },
3897 { "(bad)", { XX } },
3898 { VEX_LEN_TABLE (VEX_LEN_E0_P_2) },
3899 { "(bad)", { XX } },
3900 },
3901
3902 /* PREFIX_VEX_E1 */
3903 {
3904 { "(bad)", { XX } },
3905 { "(bad)", { XX } },
3906 { VEX_LEN_TABLE (VEX_LEN_E1_P_2) },
3907 { "(bad)", { XX } },
3908 },
3909
3910 /* PREFIX_VEX_E2 */
3911 {
3912 { "(bad)", { XX } },
3913 { "(bad)", { XX } },
3914 { VEX_LEN_TABLE (VEX_LEN_E2_P_2) },
3915 { "(bad)", { XX } },
3916 },
3917
3918 /* PREFIX_VEX_E3 */
3919 {
3920 { "(bad)", { XX } },
3921 { "(bad)", { XX } },
3922 { VEX_LEN_TABLE (VEX_LEN_E3_P_2) },
3923 { "(bad)", { XX } },
3924 },
3925
3926 /* PREFIX_VEX_E4 */
3927 {
3928 { "(bad)", { XX } },
3929 { "(bad)", { XX } },
3930 { VEX_LEN_TABLE (VEX_LEN_E4_P_2) },
3931 { "(bad)", { XX } },
3932 },
3933
3934 /* PREFIX_VEX_E5 */
3935 {
3936 { "(bad)", { XX } },
3937 { "(bad)", { XX } },
3938 { VEX_LEN_TABLE (VEX_LEN_E5_P_2) },
3939 { "(bad)", { XX } },
3940 },
3941
3942 /* PREFIX_VEX_E6 */
3943 {
3944 { "(bad)", { XX } },
3945 { "vcvtdq2pd", { XM, EXxmmq } },
3946 { "vcvttpd2dq%XY", { XMM, EXx } },
3947 { "vcvtpd2dq%XY", { XMM, EXx } },
3948 },
3949
3950 /* PREFIX_VEX_E7 */
3951 {
3952 { "(bad)", { XX } },
3953 { "(bad)", { XX } },
3954 { MOD_TABLE (MOD_VEX_E7_PREFIX_2) },
3955 { "(bad)", { XX } },
3956 },
3957
3958 /* PREFIX_VEX_E8 */
3959 {
3960 { "(bad)", { XX } },
3961 { "(bad)", { XX } },
3962 { VEX_LEN_TABLE (VEX_LEN_E8_P_2) },
3963 { "(bad)", { XX } },
3964 },
3965
3966 /* PREFIX_VEX_E9 */
3967 {
3968 { "(bad)", { XX } },
3969 { "(bad)", { XX } },
3970 { VEX_LEN_TABLE (VEX_LEN_E9_P_2) },
3971 { "(bad)", { XX } },
3972 },
3973
3974 /* PREFIX_VEX_EA */
3975 {
3976 { "(bad)", { XX } },
3977 { "(bad)", { XX } },
3978 { VEX_LEN_TABLE (VEX_LEN_EA_P_2) },
3979 { "(bad)", { XX } },
3980 },
3981
3982 /* PREFIX_VEX_EB */
3983 {
3984 { "(bad)", { XX } },
3985 { "(bad)", { XX } },
3986 { VEX_LEN_TABLE (VEX_LEN_EB_P_2) },
3987 { "(bad)", { XX } },
3988 },
3989
3990 /* PREFIX_VEX_EC */
3991 {
3992 { "(bad)", { XX } },
3993 { "(bad)", { XX } },
3994 { VEX_LEN_TABLE (VEX_LEN_EC_P_2) },
3995 { "(bad)", { XX } },
3996 },
3997
3998 /* PREFIX_VEX_ED */
3999 {
4000 { "(bad)", { XX } },
4001 { "(bad)", { XX } },
4002 { VEX_LEN_TABLE (VEX_LEN_ED_P_2) },
4003 { "(bad)", { XX } },
4004 },
4005
4006 /* PREFIX_VEX_EE */
4007 {
4008 { "(bad)", { XX } },
4009 { "(bad)", { XX } },
4010 { VEX_LEN_TABLE (VEX_LEN_EE_P_2) },
4011 { "(bad)", { XX } },
4012 },
4013
4014 /* PREFIX_VEX_EF */
4015 {
4016 { "(bad)", { XX } },
4017 { "(bad)", { XX } },
4018 { VEX_LEN_TABLE (VEX_LEN_EF_P_2) },
4019 { "(bad)", { XX } },
4020 },
4021
4022 /* PREFIX_VEX_F0 */
4023 {
4024 { "(bad)", { XX } },
4025 { "(bad)", { XX } },
4026 { "(bad)", { XX } },
4027 { MOD_TABLE (MOD_VEX_F0_PREFIX_3) },
4028 },
4029
4030 /* PREFIX_VEX_F1 */
4031 {
4032 { "(bad)", { XX } },
4033 { "(bad)", { XX } },
4034 { VEX_LEN_TABLE (VEX_LEN_F1_P_2) },
4035 { "(bad)", { XX } },
4036 },
4037
4038 /* PREFIX_VEX_F2 */
4039 {
4040 { "(bad)", { XX } },
4041 { "(bad)", { XX } },
4042 { VEX_LEN_TABLE (VEX_LEN_F2_P_2) },
4043 { "(bad)", { XX } },
4044 },
4045
4046 /* PREFIX_VEX_F3 */
4047 {
4048 { "(bad)", { XX } },
4049 { "(bad)", { XX } },
4050 { VEX_LEN_TABLE (VEX_LEN_F3_P_2) },
4051 { "(bad)", { XX } },
4052 },
4053
4054 /* PREFIX_VEX_F4 */
4055 {
4056 { "(bad)", { XX } },
4057 { "(bad)", { XX } },
4058 { VEX_LEN_TABLE (VEX_LEN_F4_P_2) },
4059 { "(bad)", { XX } },
4060 },
4061
4062 /* PREFIX_VEX_F5 */
4063 {
4064 { "(bad)", { XX } },
4065 { "(bad)", { XX } },
4066 { VEX_LEN_TABLE (VEX_LEN_F5_P_2) },
4067 { "(bad)", { XX } },
4068 },
4069
4070 /* PREFIX_VEX_F6 */
4071 {
4072 { "(bad)", { XX } },
4073 { "(bad)", { XX } },
4074 { VEX_LEN_TABLE (VEX_LEN_F6_P_2) },
4075 { "(bad)", { XX } },
4076 },
4077
4078 /* PREFIX_VEX_F7 */
4079 {
4080 { "(bad)", { XX } },
4081 { "(bad)", { XX } },
4082 { VEX_LEN_TABLE (VEX_LEN_F7_P_2) },
4083 { "(bad)", { XX } },
4084 },
4085
4086 /* PREFIX_VEX_F8 */
4087 {
4088 { "(bad)", { XX } },
4089 { "(bad)", { XX } },
4090 { VEX_LEN_TABLE (VEX_LEN_F8_P_2) },
4091 { "(bad)", { XX } },
4092 },
4093
4094 /* PREFIX_VEX_F9 */
4095 {
4096 { "(bad)", { XX } },
4097 { "(bad)", { XX } },
4098 { VEX_LEN_TABLE (VEX_LEN_F9_P_2) },
4099 { "(bad)", { XX } },
4100 },
4101
4102 /* PREFIX_VEX_FA */
4103 {
4104 { "(bad)", { XX } },
4105 { "(bad)", { XX } },
4106 { VEX_LEN_TABLE (VEX_LEN_FA_P_2) },
4107 { "(bad)", { XX } },
4108 },
4109
4110 /* PREFIX_VEX_FB */
4111 {
4112 { "(bad)", { XX } },
4113 { "(bad)", { XX } },
4114 { VEX_LEN_TABLE (VEX_LEN_FB_P_2) },
4115 { "(bad)", { XX } },
4116 },
4117
4118 /* PREFIX_VEX_FC */
4119 {
4120 { "(bad)", { XX } },
4121 { "(bad)", { XX } },
4122 { VEX_LEN_TABLE (VEX_LEN_FC_P_2) },
4123 { "(bad)", { XX } },
4124 },
4125
4126 /* PREFIX_VEX_FD */
4127 {
4128 { "(bad)", { XX } },
4129 { "(bad)", { XX } },
4130 { VEX_LEN_TABLE (VEX_LEN_FD_P_2) },
4131 { "(bad)", { XX } },
4132 },
4133
4134 /* PREFIX_VEX_FE */
4135 {
4136 { "(bad)", { XX } },
4137 { "(bad)", { XX } },
4138 { VEX_LEN_TABLE (VEX_LEN_FE_P_2) },
4139 { "(bad)", { XX } },
4140 },
4141
4142 /* PREFIX_VEX_3800 */
4143 {
4144 { "(bad)", { XX } },
4145 { "(bad)", { XX } },
4146 { VEX_LEN_TABLE (VEX_LEN_3800_P_2) },
4147 { "(bad)", { XX } },
4148 },
4149
4150 /* PREFIX_VEX_3801 */
4151 {
4152 { "(bad)", { XX } },
4153 { "(bad)", { XX } },
4154 { VEX_LEN_TABLE (VEX_LEN_3801_P_2) },
4155 { "(bad)", { XX } },
4156 },
4157
4158 /* PREFIX_VEX_3802 */
4159 {
4160 { "(bad)", { XX } },
4161 { "(bad)", { XX } },
4162 { VEX_LEN_TABLE (VEX_LEN_3802_P_2) },
4163 { "(bad)", { XX } },
4164 },
4165
4166 /* PREFIX_VEX_3803 */
4167 {
4168 { "(bad)", { XX } },
4169 { "(bad)", { XX } },
4170 { VEX_LEN_TABLE (VEX_LEN_3803_P_2) },
4171 { "(bad)", { XX } },
4172 },
4173
4174 /* PREFIX_VEX_3804 */
4175 {
4176 { "(bad)", { XX } },
4177 { "(bad)", { XX } },
4178 { VEX_LEN_TABLE (VEX_LEN_3804_P_2) },
4179 { "(bad)", { XX } },
4180 },
4181
4182 /* PREFIX_VEX_3805 */
4183 {
4184 { "(bad)", { XX } },
4185 { "(bad)", { XX } },
4186 { VEX_LEN_TABLE (VEX_LEN_3805_P_2) },
4187 { "(bad)", { XX } },
4188 },
4189
4190 /* PREFIX_VEX_3806 */
4191 {
4192 { "(bad)", { XX } },
4193 { "(bad)", { XX } },
4194 { VEX_LEN_TABLE (VEX_LEN_3806_P_2) },
4195 { "(bad)", { XX } },
4196 },
4197
4198 /* PREFIX_VEX_3807 */
4199 {
4200 { "(bad)", { XX } },
4201 { "(bad)", { XX } },
4202 { VEX_LEN_TABLE (VEX_LEN_3807_P_2) },
4203 { "(bad)", { XX } },
4204 },
4205
4206 /* PREFIX_VEX_3808 */
4207 {
4208 { "(bad)", { XX } },
4209 { "(bad)", { XX } },
4210 { VEX_LEN_TABLE (VEX_LEN_3808_P_2) },
4211 { "(bad)", { XX } },
4212 },
4213
4214 /* PREFIX_VEX_3809 */
4215 {
4216 { "(bad)", { XX } },
4217 { "(bad)", { XX } },
4218 { VEX_LEN_TABLE (VEX_LEN_3809_P_2) },
4219 { "(bad)", { XX } },
4220 },
4221
4222 /* PREFIX_VEX_380A */
4223 {
4224 { "(bad)", { XX } },
4225 { "(bad)", { XX } },
4226 { VEX_LEN_TABLE (VEX_LEN_380A_P_2) },
4227 { "(bad)", { XX } },
4228 },
4229
4230 /* PREFIX_VEX_380B */
4231 {
4232 { "(bad)", { XX } },
4233 { "(bad)", { XX } },
4234 { VEX_LEN_TABLE (VEX_LEN_380B_P_2) },
4235 { "(bad)", { XX } },
4236 },
4237
4238 /* PREFIX_VEX_380C */
4239 {
4240 { "(bad)", { XX } },
4241 { "(bad)", { XX } },
4242 { "vpermilps", { XM, Vex, EXx } },
4243 { "(bad)", { XX } },
4244 },
4245
4246 /* PREFIX_VEX_380D */
4247 {
4248 { "(bad)", { XX } },
4249 { "(bad)", { XX } },
4250 { "vpermilpd", { XM, Vex, EXx } },
4251 { "(bad)", { XX } },
4252 },
4253
4254 /* PREFIX_VEX_380E */
4255 {
4256 { "(bad)", { XX } },
4257 { "(bad)", { XX } },
4258 { "vtestps", { XM, EXx } },
4259 { "(bad)", { XX } },
4260 },
4261
4262 /* PREFIX_VEX_380F */
4263 {
4264 { "(bad)", { XX } },
4265 { "(bad)", { XX } },
4266 { "vtestpd", { XM, EXx } },
4267 { "(bad)", { XX } },
4268 },
4269
4270 /* PREFIX_VEX_3817 */
4271 {
4272 { "(bad)", { XX } },
4273 { "(bad)", { XX } },
4274 { "vptest", { XM, EXx } },
4275 { "(bad)", { XX } },
4276 },
4277
4278 /* PREFIX_VEX_3818 */
4279 {
4280 { "(bad)", { XX } },
4281 { "(bad)", { XX } },
4282 { MOD_TABLE (MOD_VEX_3818_PREFIX_2) },
4283 { "(bad)", { XX } },
4284 },
4285
4286 /* PREFIX_VEX_3819 */
4287 {
4288 { "(bad)", { XX } },
4289 { "(bad)", { XX } },
4290 { MOD_TABLE (MOD_VEX_3819_PREFIX_2) },
4291 { "(bad)", { XX } },
4292 },
4293
4294 /* PREFIX_VEX_381A */
4295 {
4296 { "(bad)", { XX } },
4297 { "(bad)", { XX } },
4298 { MOD_TABLE (MOD_VEX_381A_PREFIX_2) },
4299 { "(bad)", { XX } },
4300 },
4301
4302 /* PREFIX_VEX_381C */
4303 {
4304 { "(bad)", { XX } },
4305 { "(bad)", { XX } },
4306 { VEX_LEN_TABLE (VEX_LEN_381C_P_2) },
4307 { "(bad)", { XX } },
4308 },
4309
4310 /* PREFIX_VEX_381D */
4311 {
4312 { "(bad)", { XX } },
4313 { "(bad)", { XX } },
4314 { VEX_LEN_TABLE (VEX_LEN_381D_P_2) },
4315 { "(bad)", { XX } },
4316 },
4317
4318 /* PREFIX_VEX_381E */
4319 {
4320 { "(bad)", { XX } },
4321 { "(bad)", { XX } },
4322 { VEX_LEN_TABLE (VEX_LEN_381E_P_2) },
4323 { "(bad)", { XX } },
4324 },
4325
4326 /* PREFIX_VEX_3820 */
4327 {
4328 { "(bad)", { XX } },
4329 { "(bad)", { XX } },
4330 { VEX_LEN_TABLE (VEX_LEN_3820_P_2) },
4331 { "(bad)", { XX } },
4332 },
4333
4334 /* PREFIX_VEX_3821 */
4335 {
4336 { "(bad)", { XX } },
4337 { "(bad)", { XX } },
4338 { VEX_LEN_TABLE (VEX_LEN_3821_P_2) },
4339 { "(bad)", { XX } },
4340 },
4341
4342 /* PREFIX_VEX_3822 */
4343 {
4344 { "(bad)", { XX } },
4345 { "(bad)", { XX } },
4346 { VEX_LEN_TABLE (VEX_LEN_3822_P_2) },
4347 { "(bad)", { XX } },
4348 },
4349
4350 /* PREFIX_VEX_3823 */
4351 {
4352 { "(bad)", { XX } },
4353 { "(bad)", { XX } },
4354 { VEX_LEN_TABLE (VEX_LEN_3823_P_2) },
4355 { "(bad)", { XX } },
4356 },
4357
4358 /* PREFIX_VEX_3824 */
4359 {
4360 { "(bad)", { XX } },
4361 { "(bad)", { XX } },
4362 { VEX_LEN_TABLE (VEX_LEN_3824_P_2) },
4363 { "(bad)", { XX } },
4364 },
4365
4366 /* PREFIX_VEX_3825 */
4367 {
4368 { "(bad)", { XX } },
4369 { "(bad)", { XX } },
4370 { VEX_LEN_TABLE (VEX_LEN_3825_P_2) },
4371 { "(bad)", { XX } },
4372 },
4373
4374 /* PREFIX_VEX_3828 */
4375 {
4376 { "(bad)", { XX } },
4377 { "(bad)", { XX } },
4378 { VEX_LEN_TABLE (VEX_LEN_3828_P_2) },
4379 { "(bad)", { XX } },
4380 },
4381
4382 /* PREFIX_VEX_3829 */
4383 {
4384 { "(bad)", { XX } },
4385 { "(bad)", { XX } },
4386 { VEX_LEN_TABLE (VEX_LEN_3829_P_2) },
4387 { "(bad)", { XX } },
4388 },
4389
4390 /* PREFIX_VEX_382A */
4391 {
4392 { "(bad)", { XX } },
4393 { "(bad)", { XX } },
4394 { MOD_TABLE (MOD_VEX_382A_PREFIX_2) },
4395 { "(bad)", { XX } },
4396 },
4397
4398 /* PREFIX_VEX_382B */
4399 {
4400 { "(bad)", { XX } },
4401 { "(bad)", { XX } },
4402 { VEX_LEN_TABLE (VEX_LEN_382B_P_2) },
4403 { "(bad)", { XX } },
4404 },
4405
4406 /* PREFIX_VEX_382C */
4407 {
4408 { "(bad)", { XX } },
4409 { "(bad)", { XX } },
4410 { MOD_TABLE (MOD_VEX_382C_PREFIX_2) },
4411 { "(bad)", { XX } },
4412 },
4413
4414 /* PREFIX_VEX_382D */
4415 {
4416 { "(bad)", { XX } },
4417 { "(bad)", { XX } },
4418 { MOD_TABLE (MOD_VEX_382D_PREFIX_2) },
4419 { "(bad)", { XX } },
4420 },
4421
4422 /* PREFIX_VEX_382E */
4423 {
4424 { "(bad)", { XX } },
4425 { "(bad)", { XX } },
4426 { MOD_TABLE (MOD_VEX_382E_PREFIX_2) },
4427 { "(bad)", { XX } },
4428 },
4429
4430 /* PREFIX_VEX_382F */
4431 {
4432 { "(bad)", { XX } },
4433 { "(bad)", { XX } },
4434 { MOD_TABLE (MOD_VEX_382F_PREFIX_2) },
4435 { "(bad)", { XX } },
4436 },
4437
4438 /* PREFIX_VEX_3830 */
4439 {
4440 { "(bad)", { XX } },
4441 { "(bad)", { XX } },
4442 { VEX_LEN_TABLE (VEX_LEN_3830_P_2) },
4443 { "(bad)", { XX } },
4444 },
4445
4446 /* PREFIX_VEX_3831 */
4447 {
4448 { "(bad)", { XX } },
4449 { "(bad)", { XX } },
4450 { VEX_LEN_TABLE (VEX_LEN_3831_P_2) },
4451 { "(bad)", { XX } },
4452 },
4453
4454 /* PREFIX_VEX_3832 */
4455 {
4456 { "(bad)", { XX } },
4457 { "(bad)", { XX } },
4458 { VEX_LEN_TABLE (VEX_LEN_3832_P_2) },
4459 { "(bad)", { XX } },
4460 },
4461
4462 /* PREFIX_VEX_3833 */
4463 {
4464 { "(bad)", { XX } },
4465 { "(bad)", { XX } },
4466 { VEX_LEN_TABLE (VEX_LEN_3833_P_2) },
4467 { "(bad)", { XX } },
4468 },
4469
4470 /* PREFIX_VEX_3834 */
4471 {
4472 { "(bad)", { XX } },
4473 { "(bad)", { XX } },
4474 { VEX_LEN_TABLE (VEX_LEN_3834_P_2) },
4475 { "(bad)", { XX } },
4476 },
4477
4478 /* PREFIX_VEX_3835 */
4479 {
4480 { "(bad)", { XX } },
4481 { "(bad)", { XX } },
4482 { VEX_LEN_TABLE (VEX_LEN_3835_P_2) },
4483 { "(bad)", { XX } },
4484 },
4485
4486 /* PREFIX_VEX_3837 */
4487 {
4488 { "(bad)", { XX } },
4489 { "(bad)", { XX } },
4490 { VEX_LEN_TABLE (VEX_LEN_3837_P_2) },
4491 { "(bad)", { XX } },
4492 },
4493
4494 /* PREFIX_VEX_3838 */
4495 {
4496 { "(bad)", { XX } },
4497 { "(bad)", { XX } },
4498 { VEX_LEN_TABLE (VEX_LEN_3838_P_2) },
4499 { "(bad)", { XX } },
4500 },
4501
4502 /* PREFIX_VEX_3839 */
4503 {
4504 { "(bad)", { XX } },
4505 { "(bad)", { XX } },
4506 { VEX_LEN_TABLE (VEX_LEN_3839_P_2) },
4507 { "(bad)", { XX } },
4508 },
4509
4510 /* PREFIX_VEX_383A */
4511 {
4512 { "(bad)", { XX } },
4513 { "(bad)", { XX } },
4514 { VEX_LEN_TABLE (VEX_LEN_383A_P_2) },
4515 { "(bad)", { XX } },
4516 },
4517
4518 /* PREFIX_VEX_383B */
4519 {
4520 { "(bad)", { XX } },
4521 { "(bad)", { XX } },
4522 { VEX_LEN_TABLE (VEX_LEN_383B_P_2) },
4523 { "(bad)", { XX } },
4524 },
4525
4526 /* PREFIX_VEX_383C */
4527 {
4528 { "(bad)", { XX } },
4529 { "(bad)", { XX } },
4530 { VEX_LEN_TABLE (VEX_LEN_383C_P_2) },
4531 { "(bad)", { XX } },
4532 },
4533
4534 /* PREFIX_VEX_383D */
4535 {
4536 { "(bad)", { XX } },
4537 { "(bad)", { XX } },
4538 { VEX_LEN_TABLE (VEX_LEN_383D_P_2) },
4539 { "(bad)", { XX } },
4540 },
4541
4542 /* PREFIX_VEX_383E */
4543 {
4544 { "(bad)", { XX } },
4545 { "(bad)", { XX } },
4546 { VEX_LEN_TABLE (VEX_LEN_383E_P_2) },
4547 { "(bad)", { XX } },
4548 },
4549
4550 /* PREFIX_VEX_383F */
4551 {
4552 { "(bad)", { XX } },
4553 { "(bad)", { XX } },
4554 { VEX_LEN_TABLE (VEX_LEN_383F_P_2) },
4555 { "(bad)", { XX } },
4556 },
4557
4558 /* PREFIX_VEX_3840 */
4559 {
4560 { "(bad)", { XX } },
4561 { "(bad)", { XX } },
4562 { VEX_LEN_TABLE (VEX_LEN_3840_P_2) },
4563 { "(bad)", { XX } },
4564 },
4565
4566 /* PREFIX_VEX_3841 */
4567 {
4568 { "(bad)", { XX } },
4569 { "(bad)", { XX } },
4570 { VEX_LEN_TABLE (VEX_LEN_3841_P_2) },
4571 { "(bad)", { XX } },
4572 },
4573
0bfee649 4574 /* PREFIX_VEX_3896 */
a5ff0eb2
L
4575 {
4576 { "(bad)", { XX } },
4577 { "(bad)", { XX } },
0bfee649 4578 { "vfmaddsub132p%XW", { XM, Vex, EXx } },
a5ff0eb2
L
4579 { "(bad)", { XX } },
4580 },
4581
0bfee649 4582 /* PREFIX_VEX_3897 */
a5ff0eb2
L
4583 {
4584 { "(bad)", { XX } },
4585 { "(bad)", { XX } },
0bfee649 4586 { "vfmsubadd132p%XW", { XM, Vex, EXx } },
a5ff0eb2
L
4587 { "(bad)", { XX } },
4588 },
4589
0bfee649 4590 /* PREFIX_VEX_3898 */
a5ff0eb2
L
4591 {
4592 { "(bad)", { XX } },
4593 { "(bad)", { XX } },
0bfee649 4594 { "vfmadd132p%XW", { XM, Vex, EXx } },
a5ff0eb2
L
4595 { "(bad)", { XX } },
4596 },
4597
0bfee649 4598 /* PREFIX_VEX_3899 */
a5ff0eb2
L
4599 {
4600 { "(bad)", { XX } },
4601 { "(bad)", { XX } },
0bfee649 4602 { "vfmadd132s%XW", { XM, Vex, EXVexWdq } },
a5ff0eb2
L
4603 { "(bad)", { XX } },
4604 },
4605
0bfee649 4606 /* PREFIX_VEX_389A */
a5ff0eb2
L
4607 {
4608 { "(bad)", { XX } },
4609 { "(bad)", { XX } },
0bfee649 4610 { "vfmsub132p%XW", { XM, Vex, EXx } },
a5ff0eb2
L
4611 { "(bad)", { XX } },
4612 },
4613
0bfee649 4614 /* PREFIX_VEX_389B */
c0f3af97
L
4615 {
4616 { "(bad)", { XX } },
4617 { "(bad)", { XX } },
0bfee649 4618 { "vfmsub132s%XW", { XM, Vex, EXVexWdq } },
c0f3af97
L
4619 { "(bad)", { XX } },
4620 },
4621
0bfee649 4622 /* PREFIX_VEX_389C */
c0f3af97
L
4623 {
4624 { "(bad)", { XX } },
4625 { "(bad)", { XX } },
0bfee649 4626 { "vfnmadd132p%XW", { XM, Vex, EXx } },
c0f3af97
L
4627 { "(bad)", { XX } },
4628 },
4629
0bfee649 4630 /* PREFIX_VEX_389D */
c0f3af97
L
4631 {
4632 { "(bad)", { XX } },
4633 { "(bad)", { XX } },
0bfee649 4634 { "vfnmadd132s%XW", { XM, Vex, EXVexWdq } },
c0f3af97
L
4635 { "(bad)", { XX } },
4636 },
4637
0bfee649 4638 /* PREFIX_VEX_389E */
c0f3af97
L
4639 {
4640 { "(bad)", { XX } },
4641 { "(bad)", { XX } },
0bfee649 4642 { "vfnmsub132p%XW", { XM, Vex, EXx } },
c0f3af97
L
4643 { "(bad)", { XX } },
4644 },
4645
0bfee649 4646 /* PREFIX_VEX_389F */
c0f3af97
L
4647 {
4648 { "(bad)", { XX } },
4649 { "(bad)", { XX } },
0bfee649 4650 { "vfnmsub132s%XW", { XM, Vex, EXVexWdq } },
c0f3af97
L
4651 { "(bad)", { XX } },
4652 },
4653
0bfee649 4654 /* PREFIX_VEX_38A6 */
c0f3af97
L
4655 {
4656 { "(bad)", { XX } },
4657 { "(bad)", { XX } },
0bfee649 4658 { "vfmaddsub213p%XW", { XM, Vex, EXx } },
c0f3af97
L
4659 { "(bad)", { XX } },
4660 },
4661
0bfee649 4662 /* PREFIX_VEX_38A7 */
c0f3af97
L
4663 {
4664 { "(bad)", { XX } },
4665 { "(bad)", { XX } },
0bfee649 4666 { "vfmsubadd213p%XW", { XM, Vex, EXx } },
c0f3af97
L
4667 { "(bad)", { XX } },
4668 },
4669
0bfee649 4670 /* PREFIX_VEX_38A8 */
c0f3af97
L
4671 {
4672 { "(bad)", { XX } },
4673 { "(bad)", { XX } },
0bfee649 4674 { "vfmadd213p%XW", { XM, Vex, EXx } },
c0f3af97
L
4675 { "(bad)", { XX } },
4676 },
4677
0bfee649 4678 /* PREFIX_VEX_38A9 */
c0f3af97
L
4679 {
4680 { "(bad)", { XX } },
4681 { "(bad)", { XX } },
0bfee649 4682 { "vfmadd213s%XW", { XM, Vex, EXVexWdq } },
c0f3af97
L
4683 { "(bad)", { XX } },
4684 },
4685
0bfee649 4686 /* PREFIX_VEX_38AA */
c0f3af97
L
4687 {
4688 { "(bad)", { XX } },
4689 { "(bad)", { XX } },
0bfee649 4690 { "vfmsub213p%XW", { XM, Vex, EXx } },
c0f3af97
L
4691 { "(bad)", { XX } },
4692 },
4693
0bfee649 4694 /* PREFIX_VEX_38AB */
c0f3af97
L
4695 {
4696 { "(bad)", { XX } },
4697 { "(bad)", { XX } },
0bfee649 4698 { "vfmsub213s%XW", { XM, Vex, EXVexWdq } },
c0f3af97
L
4699 { "(bad)", { XX } },
4700 },
4701
0bfee649 4702 /* PREFIX_VEX_38AC */
c0f3af97
L
4703 {
4704 { "(bad)", { XX } },
4705 { "(bad)", { XX } },
0bfee649 4706 { "vfnmadd213p%XW", { XM, Vex, EXx } },
c0f3af97
L
4707 { "(bad)", { XX } },
4708 },
4709
0bfee649 4710 /* PREFIX_VEX_38AD */
c0f3af97
L
4711 {
4712 { "(bad)", { XX } },
4713 { "(bad)", { XX } },
0bfee649 4714 { "vfnmadd213s%XW", { XM, Vex, EXVexWdq } },
c0f3af97
L
4715 { "(bad)", { XX } },
4716 },
4717
0bfee649 4718 /* PREFIX_VEX_38AE */
c0f3af97
L
4719 {
4720 { "(bad)", { XX } },
4721 { "(bad)", { XX } },
0bfee649 4722 { "vfnmsub213p%XW", { XM, Vex, EXx } },
c0f3af97
L
4723 { "(bad)", { XX } },
4724 },
4725
0bfee649 4726 /* PREFIX_VEX_38AF */
c0f3af97
L
4727 {
4728 { "(bad)", { XX } },
4729 { "(bad)", { XX } },
0bfee649 4730 { "vfnmsub213s%XW", { XM, Vex, EXVexWdq } },
c0f3af97
L
4731 { "(bad)", { XX } },
4732 },
4733
0bfee649 4734 /* PREFIX_VEX_38B6 */
c0f3af97
L
4735 {
4736 { "(bad)", { XX } },
4737 { "(bad)", { XX } },
0bfee649 4738 { "vfmaddsub231p%XW", { XM, Vex, EXx } },
c0f3af97
L
4739 { "(bad)", { XX } },
4740 },
4741
0bfee649 4742 /* PREFIX_VEX_38B7 */
c0f3af97
L
4743 {
4744 { "(bad)", { XX } },
4745 { "(bad)", { XX } },
0bfee649 4746 { "vfmsubadd231p%XW", { XM, Vex, EXx } },
c0f3af97
L
4747 { "(bad)", { XX } },
4748 },
4749
0bfee649 4750 /* PREFIX_VEX_38B8 */
c0f3af97
L
4751 {
4752 { "(bad)", { XX } },
4753 { "(bad)", { XX } },
0bfee649 4754 { "vfmadd231p%XW", { XM, Vex, EXx } },
c0f3af97
L
4755 { "(bad)", { XX } },
4756 },
4757
0bfee649 4758 /* PREFIX_VEX_38B9 */
c0f3af97
L
4759 {
4760 { "(bad)", { XX } },
4761 { "(bad)", { XX } },
0bfee649 4762 { "vfmadd231s%XW", { XM, Vex, EXVexWdq } },
c0f3af97
L
4763 { "(bad)", { XX } },
4764 },
4765
0bfee649 4766 /* PREFIX_VEX_38BA */
c0f3af97
L
4767 {
4768 { "(bad)", { XX } },
4769 { "(bad)", { XX } },
0bfee649 4770 { "vfmsub231p%XW", { XM, Vex, EXx } },
c0f3af97
L
4771 { "(bad)", { XX } },
4772 },
4773
0bfee649 4774 /* PREFIX_VEX_38BB */
c0f3af97
L
4775 {
4776 { "(bad)", { XX } },
4777 { "(bad)", { XX } },
0bfee649 4778 { "vfmsub231s%XW", { XM, Vex, EXVexWdq } },
c0f3af97
L
4779 { "(bad)", { XX } },
4780 },
4781
0bfee649 4782 /* PREFIX_VEX_38BC */
c0f3af97
L
4783 {
4784 { "(bad)", { XX } },
4785 { "(bad)", { XX } },
0bfee649 4786 { "vfnmadd231p%XW", { XM, Vex, EXx } },
c0f3af97
L
4787 { "(bad)", { XX } },
4788 },
4789
0bfee649 4790 /* PREFIX_VEX_38BD */
c0f3af97
L
4791 {
4792 { "(bad)", { XX } },
4793 { "(bad)", { XX } },
0bfee649 4794 { "vfnmadd231s%XW", { XM, Vex, EXVexWdq } },
c0f3af97
L
4795 { "(bad)", { XX } },
4796 },
4797
0bfee649 4798 /* PREFIX_VEX_38BE */
c0f3af97
L
4799 {
4800 { "(bad)", { XX } },
4801 { "(bad)", { XX } },
0bfee649 4802 { "vfnmsub231p%XW", { XM, Vex, EXx } },
c0f3af97
L
4803 { "(bad)", { XX } },
4804 },
4805
0bfee649 4806 /* PREFIX_VEX_38BF */
c0f3af97
L
4807 {
4808 { "(bad)", { XX } },
4809 { "(bad)", { XX } },
0bfee649 4810 { "vfnmsub231s%XW", { XM, Vex, EXVexWdq } },
c0f3af97
L
4811 { "(bad)", { XX } },
4812 },
4813
0bfee649 4814 /* PREFIX_VEX_38DB */
c0f3af97
L
4815 {
4816 { "(bad)", { XX } },
4817 { "(bad)", { XX } },
0bfee649 4818 { VEX_LEN_TABLE (VEX_LEN_38DB_P_2) },
c0f3af97
L
4819 { "(bad)", { XX } },
4820 },
4821
0bfee649 4822 /* PREFIX_VEX_38DC */
c0f3af97
L
4823 {
4824 { "(bad)", { XX } },
4825 { "(bad)", { XX } },
0bfee649 4826 { VEX_LEN_TABLE (VEX_LEN_38DC_P_2) },
c0f3af97
L
4827 { "(bad)", { XX } },
4828 },
4829
0bfee649 4830 /* PREFIX_VEX_38DD */
c0f3af97
L
4831 {
4832 { "(bad)", { XX } },
4833 { "(bad)", { XX } },
0bfee649 4834 { VEX_LEN_TABLE (VEX_LEN_38DD_P_2) },
c0f3af97
L
4835 { "(bad)", { XX } },
4836 },
4837
0bfee649 4838 /* PREFIX_VEX_38DE */
c0f3af97
L
4839 {
4840 { "(bad)", { XX } },
4841 { "(bad)", { XX } },
0bfee649 4842 { VEX_LEN_TABLE (VEX_LEN_38DE_P_2) },
c0f3af97
L
4843 { "(bad)", { XX } },
4844 },
4845
0bfee649 4846 /* PREFIX_VEX_38DF */
c0f3af97
L
4847 {
4848 { "(bad)", { XX } },
4849 { "(bad)", { XX } },
0bfee649 4850 { VEX_LEN_TABLE (VEX_LEN_38DF_P_2) },
c0f3af97
L
4851 { "(bad)", { XX } },
4852 },
4853
0bfee649 4854 /* PREFIX_VEX_3A04 */
c0f3af97
L
4855 {
4856 { "(bad)", { XX } },
4857 { "(bad)", { XX } },
0bfee649 4858 { "vpermilps", { XM, EXx, Ib } },
c0f3af97
L
4859 { "(bad)", { XX } },
4860 },
4861
0bfee649 4862 /* PREFIX_VEX_3A05 */
c0f3af97
L
4863 {
4864 { "(bad)", { XX } },
4865 { "(bad)", { XX } },
0bfee649 4866 { "vpermilpd", { XM, EXx, Ib } },
c0f3af97
L
4867 { "(bad)", { XX } },
4868 },
4869
0bfee649 4870 /* PREFIX_VEX_3A06 */
c0f3af97
L
4871 {
4872 { "(bad)", { XX } },
4873 { "(bad)", { XX } },
0bfee649 4874 { VEX_LEN_TABLE (VEX_LEN_3A06_P_2) },
c0f3af97
L
4875 { "(bad)", { XX } },
4876 },
4877
0bfee649 4878 /* PREFIX_VEX_3A08 */
c0f3af97
L
4879 {
4880 { "(bad)", { XX } },
4881 { "(bad)", { XX } },
0bfee649 4882 { "vroundps", { XM, EXx, Ib } },
c0f3af97
L
4883 { "(bad)", { XX } },
4884 },
4885
0bfee649 4886 /* PREFIX_VEX_3A09 */
c0f3af97
L
4887 {
4888 { "(bad)", { XX } },
4889 { "(bad)", { XX } },
0bfee649 4890 { "vroundpd", { XM, EXx, Ib } },
c0f3af97
L
4891 { "(bad)", { XX } },
4892 },
4893
0bfee649 4894 /* PREFIX_VEX_3A0A */
c0f3af97
L
4895 {
4896 { "(bad)", { XX } },
4897 { "(bad)", { XX } },
0bfee649
L
4898 { VEX_LEN_TABLE (VEX_LEN_3A0A_P_2) },
4899 { "(bad)", { XX } },
4900 },
4901
4902 /* PREFIX_VEX_3A0B */
4903 {
4904 { "(bad)", { XX } },
4905 { "(bad)", { XX } },
4906 { VEX_LEN_TABLE (VEX_LEN_3A0B_P_2) },
4907 { "(bad)", { XX } },
4908 },
4909
4910 /* PREFIX_VEX_3A0C */
4911 {
4912 { "(bad)", { XX } },
4913 { "(bad)", { XX } },
4914 { "vblendps", { XM, Vex, EXx, Ib } },
4915 { "(bad)", { XX } },
4916 },
4917
4918 /* PREFIX_VEX_3A0D */
4919 {
4920 { "(bad)", { XX } },
4921 { "(bad)", { XX } },
4922 { "vblendpd", { XM, Vex, EXx, Ib } },
c0f3af97
L
4923 { "(bad)", { XX } },
4924 },
4925
0bfee649
L
4926 /* PREFIX_VEX_3A0E */
4927 {
4928 { "(bad)", { XX } },
4929 { "(bad)", { XX } },
4930 { VEX_LEN_TABLE (VEX_LEN_3A0E_P_2) },
4931 { "(bad)", { XX } },
4932 },
4933
4934 /* PREFIX_VEX_3A0F */
4935 {
4936 { "(bad)", { XX } },
4937 { "(bad)", { XX } },
4938 { VEX_LEN_TABLE (VEX_LEN_3A0F_P_2) },
4939 { "(bad)", { XX } },
4940 },
4941
4942 /* PREFIX_VEX_3A14 */
4943 {
4944 { "(bad)", { XX } },
4945 { "(bad)", { XX } },
4946 { VEX_LEN_TABLE (VEX_LEN_3A14_P_2) },
4947 { "(bad)", { XX } },
4948 },
4949
4950 /* PREFIX_VEX_3A15 */
4951 {
4952 { "(bad)", { XX } },
4953 { "(bad)", { XX } },
4954 { VEX_LEN_TABLE (VEX_LEN_3A15_P_2) },
4955 { "(bad)", { XX } },
4956 },
4957
4958 /* PREFIX_VEX_3A16 */
c0f3af97
L
4959 {
4960 { "(bad)", { XX } },
4961 { "(bad)", { XX } },
0bfee649 4962 { VEX_LEN_TABLE (VEX_LEN_3A16_P_2) },
c0f3af97
L
4963 { "(bad)", { XX } },
4964 },
4965
0bfee649 4966 /* PREFIX_VEX_3A17 */
c0f3af97
L
4967 {
4968 { "(bad)", { XX } },
4969 { "(bad)", { XX } },
0bfee649 4970 { VEX_LEN_TABLE (VEX_LEN_3A17_P_2) },
c0f3af97
L
4971 { "(bad)", { XX } },
4972 },
4973
0bfee649 4974 /* PREFIX_VEX_3A18 */
c0f3af97
L
4975 {
4976 { "(bad)", { XX } },
4977 { "(bad)", { XX } },
0bfee649 4978 { VEX_LEN_TABLE (VEX_LEN_3A18_P_2) },
c0f3af97
L
4979 { "(bad)", { XX } },
4980 },
4981
0bfee649 4982 /* PREFIX_VEX_3A19 */
c0f3af97
L
4983 {
4984 { "(bad)", { XX } },
4985 { "(bad)", { XX } },
0bfee649 4986 { VEX_LEN_TABLE (VEX_LEN_3A19_P_2) },
c0f3af97
L
4987 { "(bad)", { XX } },
4988 },
4989
0bfee649 4990 /* PREFIX_VEX_3A20 */
c0f3af97
L
4991 {
4992 { "(bad)", { XX } },
4993 { "(bad)", { XX } },
0bfee649 4994 { VEX_LEN_TABLE (VEX_LEN_3A20_P_2) },
c0f3af97
L
4995 { "(bad)", { XX } },
4996 },
4997
0bfee649 4998 /* PREFIX_VEX_3A21 */
c0f3af97
L
4999 {
5000 { "(bad)", { XX } },
5001 { "(bad)", { XX } },
0bfee649 5002 { VEX_LEN_TABLE (VEX_LEN_3A21_P_2) },
c0f3af97
L
5003 { "(bad)", { XX } },
5004 },
5005
0bfee649
L
5006 /* PREFIX_VEX_3A22 */
5007 {
5008 { "(bad)", { XX } },
5009 { "(bad)", { XX } },
5010 { VEX_LEN_TABLE (VEX_LEN_3A22_P_2) },
5011 { "(bad)", { XX } },
5012 },
5013
5014 /* PREFIX_VEX_3A40 */
c0f3af97
L
5015 {
5016 { "(bad)", { XX } },
5017 { "(bad)", { XX } },
0bfee649 5018 { "vdpps", { XM, Vex, EXx, Ib } },
c0f3af97
L
5019 { "(bad)", { XX } },
5020 },
5021
0bfee649 5022 /* PREFIX_VEX_3A41 */
c0f3af97
L
5023 {
5024 { "(bad)", { XX } },
5025 { "(bad)", { XX } },
0bfee649 5026 { VEX_LEN_TABLE (VEX_LEN_3A41_P_2) },
c0f3af97
L
5027 { "(bad)", { XX } },
5028 },
5029
0bfee649 5030 /* PREFIX_VEX_3A42 */
c0f3af97
L
5031 {
5032 { "(bad)", { XX } },
5033 { "(bad)", { XX } },
0bfee649 5034 { VEX_LEN_TABLE (VEX_LEN_3A42_P_2) },
c0f3af97
L
5035 { "(bad)", { XX } },
5036 },
5037
ce2f5b3c
L
5038 /* PREFIX_VEX_3A44 */
5039 {
5040 { "(bad)", { XX } },
5041 { "(bad)", { XX } },
5042 { VEX_LEN_TABLE (VEX_LEN_3A44_P_2) },
5043 { "(bad)", { XX } },
5044 },
5045
0bfee649 5046 /* PREFIX_VEX_3A4A */
c0f3af97
L
5047 {
5048 { "(bad)", { XX } },
5049 { "(bad)", { XX } },
0bfee649 5050 { "vblendvps", { XM, Vex, EXx, XMVexI4 } },
c0f3af97
L
5051 { "(bad)", { XX } },
5052 },
5053
0bfee649 5054 /* PREFIX_VEX_3A4B */
c0f3af97
L
5055 {
5056 { "(bad)", { XX } },
5057 { "(bad)", { XX } },
0bfee649 5058 { "vblendvpd", { XM, Vex, EXx, XMVexI4 } },
c0f3af97
L
5059 { "(bad)", { XX } },
5060 },
5061
0bfee649 5062 /* PREFIX_VEX_3A4C */
c0f3af97
L
5063 {
5064 { "(bad)", { XX } },
5065 { "(bad)", { XX } },
0bfee649 5066 { VEX_LEN_TABLE (VEX_LEN_3A4C_P_2) },
c0f3af97
L
5067 { "(bad)", { XX } },
5068 },
5069
922d8de8
DR
5070 /* PREFIX_VEX_3A5C */
5071 {
5072 { "(bad)", { XX } },
5073 { "(bad)", { XX } },
5074 { "vfmaddsubps", { XMVexW, VexFMA, EXVexW, EXVexW, VexI4 } },
5075 { "(bad)", { XX } },
5076 },
5077
5078 /* PREFIX_VEX_3A5D */
5079 {
5080 { "(bad)", { XX } },
5081 { "(bad)", { XX } },
5082 { "vfmaddsubpd", { XMVexW, VexFMA, EXVexW, EXVexW, VexI4 } },
5083 { "(bad)", { XX } },
5084 },
5085
5086 /* PREFIX_VEX_3A5E */
5087 {
5088 { "(bad)", { XX } },
5089 { "(bad)", { XX } },
5090 { "vfmsubaddps", { XMVexW, VexFMA, EXVexW, EXVexW, VexI4 } },
5091 { "(bad)", { XX } },
5092 },
5093
5094 /* PREFIX_VEX_3A5F */
5095 {
5096 { "(bad)", { XX } },
5097 { "(bad)", { XX } },
5098 { "vfmsubaddpd", { XMVexW, VexFMA, EXVexW, EXVexW, VexI4 } },
5099 { "(bad)", { XX } },
5100 },
5101
0bfee649 5102 /* PREFIX_VEX_3A60 */
c0f3af97
L
5103 {
5104 { "(bad)", { XX } },
5105 { "(bad)", { XX } },
0bfee649 5106 { VEX_LEN_TABLE (VEX_LEN_3A60_P_2) },
c0f3af97
L
5107 { "(bad)", { XX } },
5108 },
5109
0bfee649 5110 /* PREFIX_VEX_3A61 */
c0f3af97
L
5111 {
5112 { "(bad)", { XX } },
5113 { "(bad)", { XX } },
0bfee649 5114 { VEX_LEN_TABLE (VEX_LEN_3A61_P_2) },
c0f3af97
L
5115 { "(bad)", { XX } },
5116 },
5117
0bfee649 5118 /* PREFIX_VEX_3A62 */
c0f3af97
L
5119 {
5120 { "(bad)", { XX } },
5121 { "(bad)", { XX } },
0bfee649 5122 { VEX_LEN_TABLE (VEX_LEN_3A62_P_2) },
c0f3af97
L
5123 { "(bad)", { XX } },
5124 },
5125
0bfee649 5126 /* PREFIX_VEX_3A63 */
c0f3af97
L
5127 {
5128 { "(bad)", { XX } },
5129 { "(bad)", { XX } },
0bfee649 5130 { VEX_LEN_TABLE (VEX_LEN_3A63_P_2) },
c0f3af97
L
5131 { "(bad)", { XX } },
5132 },
a5ff0eb2 5133
922d8de8
DR
5134 /* PREFIX_VEX_3A68 */
5135 {
5136 { "(bad)", { XX } },
5137 { "(bad)", { XX } },
5138 { "vfmaddps", { XMVexW, VexFMA, EXVexW, EXVexW, VexI4 } },
5139 { "(bad)", { XX } },
5140 },
5141
5142 /* PREFIX_VEX_3A69 */
5143 {
5144 { "(bad)", { XX } },
5145 { "(bad)", { XX } },
5146 { "vfmaddpd", { XMVexW, VexFMA, EXVexW, EXVexW, VexI4 } },
5147 { "(bad)", { XX } },
5148 },
5149
5150 /* PREFIX_VEX_3A6A */
5151 {
5152 { "(bad)", { XX } },
5153 { "(bad)", { XX } },
5154 { VEX_LEN_TABLE (VEX_LEN_3A6A_P_2) },
5155 { "(bad)", { XX } },
5156 },
5157
5158 /* PREFIX_VEX_3A6B */
5159 {
5160 { "(bad)", { XX } },
5161 { "(bad)", { XX } },
5162 { VEX_LEN_TABLE (VEX_LEN_3A6B_P_2) },
5163 { "(bad)", { XX } },
5164 },
5165
5166 /* PREFIX_VEX_3A6C */
5167 {
5168 { "(bad)", { XX } },
5169 { "(bad)", { XX } },
5170 { "vfmsubps", { XMVexW, VexFMA, EXVexW, EXVexW, VexI4 } },
5171 { "(bad)", { XX } },
5172 },
5173
5174 /* PREFIX_VEX_3A6D */
5175 {
5176 { "(bad)", { XX } },
5177 { "(bad)", { XX } },
5178 { "vfmsubpd", { XMVexW, VexFMA, EXVexW, EXVexW, VexI4 } },
5179 { "(bad)", { XX } },
5180 },
5181
5182 /* PREFIX_VEX_3A6E */
5183 {
5184 { "(bad)", { XX } },
5185 { "(bad)", { XX } },
5186 { VEX_LEN_TABLE (VEX_LEN_3A6E_P_2) },
5187 { "(bad)", { XX } },
5188 },
5189
5190 /* PREFIX_VEX_3A6F */
5191 {
5192 { "(bad)", { XX } },
5193 { "(bad)", { XX } },
5194 { VEX_LEN_TABLE (VEX_LEN_3A6F_P_2) },
5195 { "(bad)", { XX } },
5196 },
5197
5198 /* PREFIX_VEX_3A78 */
5199 {
5200 { "(bad)", { XX } },
5201 { "(bad)", { XX } },
5202 { "vfnmaddps", { XMVexW, VexFMA, EXVexW, EXVexW, VexI4 } },
5203 { "(bad)", { XX } },
5204 },
5205
5206 /* PREFIX_VEX_3A79 */
5207 {
5208 { "(bad)", { XX } },
5209 { "(bad)", { XX } },
5210 { "vfnmaddpd", { XMVexW, VexFMA, EXVexW, EXVexW, VexI4 } },
5211 { "(bad)", { XX } },
5212 },
5213
5214 /* PREFIX_VEX_3A7A */
5215 {
5216 { "(bad)", { XX } },
5217 { "(bad)", { XX } },
5218 { VEX_LEN_TABLE (VEX_LEN_3A7A_P_2) },
5219 { "(bad)", { XX } },
5220 },
5221
5222 /* PREFIX_VEX_3A7B */
5223 {
5224 { "(bad)", { XX } },
5225 { "(bad)", { XX } },
5226 { VEX_LEN_TABLE (VEX_LEN_3A7B_P_2) },
5227 { "(bad)", { XX } },
5228 },
5229
5230 /* PREFIX_VEX_3A7C */
5231 {
5232 { "(bad)", { XX } },
5233 { "(bad)", { XX } },
5234 { "vfnmsubps", { XMVexW, VexFMA, EXVexW, EXVexW, VexI4 } },
5235 { "(bad)", { XX } },
5236 },
5237
5238 /* PREFIX_VEX_3A7D */
5239 {
5240 { "(bad)", { XX } },
5241 { "(bad)", { XX } },
5242 { "vfnmsubpd", { XMVexW, VexFMA, EXVexW, EXVexW, VexI4 } },
5243 { "(bad)", { XX } },
5244 },
5245
5246 /* PREFIX_VEX_3A7E */
5247 {
5248 { "(bad)", { XX } },
5249 { "(bad)", { XX } },
5250 { VEX_LEN_TABLE (VEX_LEN_3A7E_P_2) },
5251 { "(bad)", { XX } },
5252 },
5253
5254 /* PREFIX_VEX_3A7F */
5255 {
5256 { "(bad)", { XX } },
5257 { "(bad)", { XX } },
5258 { VEX_LEN_TABLE (VEX_LEN_3A7F_P_2) },
5259 { "(bad)", { XX } },
5260 },
5261
a5ff0eb2
L
5262 /* PREFIX_VEX_3ADF */
5263 {
5264 { "(bad)", { XX } },
5265 { "(bad)", { XX } },
5266 { VEX_LEN_TABLE (VEX_LEN_3ADF_P_2) },
5267 { "(bad)", { XX } },
5268 },
c0f3af97
L
5269};
5270
5271static const struct dis386 x86_64_table[][2] = {
5272 /* X86_64_06 */
5273 {
5274 { "push{T|}", { es } },
5275 { "(bad)", { XX } },
5276 },
5277
5278 /* X86_64_07 */
5279 {
5280 { "pop{T|}", { es } },
5281 { "(bad)", { XX } },
5282 },
5283
5284 /* X86_64_0D */
5285 {
5286 { "push{T|}", { cs } },
5287 { "(bad)", { XX } },
5288 },
5289
5290 /* X86_64_16 */
5291 {
5292 { "push{T|}", { ss } },
5293 { "(bad)", { XX } },
5294 },
5295
5296 /* X86_64_17 */
5297 {
5298 { "pop{T|}", { ss } },
5299 { "(bad)", { XX } },
5300 },
5301
5302 /* X86_64_1E */
5303 {
5304 { "push{T|}", { ds } },
5305 { "(bad)", { XX } },
5306 },
5307
5308 /* X86_64_1F */
5309 {
5310 { "pop{T|}", { ds } },
5311 { "(bad)", { XX } },
5312 },
5313
5314 /* X86_64_27 */
5315 {
5316 { "daa", { XX } },
5317 { "(bad)", { XX } },
5318 },
5319
5320 /* X86_64_2F */
5321 {
5322 { "das", { XX } },
5323 { "(bad)", { XX } },
5324 },
5325
5326 /* X86_64_37 */
5327 {
5328 { "aaa", { XX } },
5329 { "(bad)", { XX } },
5330 },
5331
5332 /* X86_64_3F */
5333 {
5334 { "aas", { XX } },
5335 { "(bad)", { XX } },
5336 },
5337
5338 /* X86_64_60 */
5339 {
5340 { "pusha{P|}", { XX } },
5341 { "(bad)", { XX } },
5342 },
5343
5344 /* X86_64_61 */
5345 {
5346 { "popa{P|}", { XX } },
5347 { "(bad)", { XX } },
5348 },
5349
5350 /* X86_64_62 */
5351 {
5352 { MOD_TABLE (MOD_62_32BIT) },
5353 { "(bad)", { XX } },
5354 },
5355
5356 /* X86_64_63 */
5357 {
5358 { "arpl", { Ew, Gw } },
5359 { "movs{lq|xd}", { Gv, Ed } },
5360 },
5361
5362 /* X86_64_6D */
5363 {
5364 { "ins{R|}", { Yzr, indirDX } },
5365 { "ins{G|}", { Yzr, indirDX } },
5366 },
5367
5368 /* X86_64_6F */
5369 {
5370 { "outs{R|}", { indirDXr, Xz } },
5371 { "outs{G|}", { indirDXr, Xz } },
5372 },
5373
5374 /* X86_64_9A */
5375 {
5376 { "Jcall{T|}", { Ap } },
5377 { "(bad)", { XX } },
5378 },
5379
5380 /* X86_64_C4 */
5381 {
5382 { MOD_TABLE (MOD_C4_32BIT) },
5383 { VEX_C4_TABLE (VEX_0F) },
5384 },
5385
5386 /* X86_64_C5 */
5387 {
5388 { MOD_TABLE (MOD_C5_32BIT) },
5389 { VEX_C5_TABLE (VEX_0F) },
5390 },
5391
5392 /* X86_64_CE */
5393 {
5394 { "into", { XX } },
5395 { "(bad)", { XX } },
5396 },
5397
5398 /* X86_64_D4 */
5399 {
5400 { "aam", { sIb } },
5401 { "(bad)", { XX } },
5402 },
5403
5404 /* X86_64_D5 */
5405 {
5406 { "aad", { sIb } },
5407 { "(bad)", { XX } },
5408 },
5409
5410 /* X86_64_EA */
5411 {
5412 { "Jjmp{T|}", { Ap } },
5413 { "(bad)", { XX } },
5414 },
5415
5416 /* X86_64_0F01_REG_0 */
5417 {
5418 { "sgdt{Q|IQ}", { M } },
5419 { "sgdt", { M } },
5420 },
5421
5422 /* X86_64_0F01_REG_1 */
5423 {
5424 { "sidt{Q|IQ}", { M } },
5425 { "sidt", { M } },
5426 },
5427
5428 /* X86_64_0F01_REG_2 */
5429 {
5430 { "lgdt{Q|Q}", { M } },
5431 { "lgdt", { M } },
5432 },
5433
5434 /* X86_64_0F01_REG_3 */
5435 {
5436 { "lidt{Q|Q}", { M } },
5437 { "lidt", { M } },
5438 },
5439};
5440
5441static const struct dis386 three_byte_table[][256] = {
c1e679ec
DR
5442
5443 /* THREE_BYTE_0F38 */
c0f3af97
L
5444 {
5445 /* 00 */
c1e679ec
DR
5446 { "pshufb", { MX, EM } },
5447 { "phaddw", { MX, EM } },
5448 { "phaddd", { MX, EM } },
5449 { "phaddsw", { MX, EM } },
5450 { "pmaddubsw", { MX, EM } },
5451 { "phsubw", { MX, EM } },
5452 { "phsubd", { MX, EM } },
5453 { "phsubsw", { MX, EM } },
c0f3af97 5454 /* 08 */
c1e679ec
DR
5455 { "psignb", { MX, EM } },
5456 { "psignw", { MX, EM } },
5457 { "psignd", { MX, EM } },
5458 { "pmulhrsw", { MX, EM } },
c0f3af97
L
5459 { "(bad)", { XX } },
5460 { "(bad)", { XX } },
5461 { "(bad)", { XX } },
5462 { "(bad)", { XX } },
c1e679ec
DR
5463 /* 10 */
5464 { PREFIX_TABLE (PREFIX_0F3810) },
c0f3af97
L
5465 { "(bad)", { XX } },
5466 { "(bad)", { XX } },
5467 { "(bad)", { XX } },
c1e679ec
DR
5468 { PREFIX_TABLE (PREFIX_0F3814) },
5469 { PREFIX_TABLE (PREFIX_0F3815) },
c0f3af97 5470 { "(bad)", { XX } },
c1e679ec
DR
5471 { PREFIX_TABLE (PREFIX_0F3817) },
5472 /* 18 */
c0f3af97
L
5473 { "(bad)", { XX } },
5474 { "(bad)", { XX } },
5475 { "(bad)", { XX } },
5476 { "(bad)", { XX } },
c1e679ec
DR
5477 { "pabsb", { MX, EM } },
5478 { "pabsw", { MX, EM } },
5479 { "pabsd", { MX, EM } },
c0f3af97 5480 { "(bad)", { XX } },
c1e679ec
DR
5481 /* 20 */
5482 { PREFIX_TABLE (PREFIX_0F3820) },
5483 { PREFIX_TABLE (PREFIX_0F3821) },
5484 { PREFIX_TABLE (PREFIX_0F3822) },
5485 { PREFIX_TABLE (PREFIX_0F3823) },
5486 { PREFIX_TABLE (PREFIX_0F3824) },
5487 { PREFIX_TABLE (PREFIX_0F3825) },
c0f3af97
L
5488 { "(bad)", { XX } },
5489 { "(bad)", { XX } },
c1e679ec
DR
5490 /* 28 */
5491 { PREFIX_TABLE (PREFIX_0F3828) },
5492 { PREFIX_TABLE (PREFIX_0F3829) },
5493 { PREFIX_TABLE (PREFIX_0F382A) },
5494 { PREFIX_TABLE (PREFIX_0F382B) },
c0f3af97
L
5495 { "(bad)", { XX } },
5496 { "(bad)", { XX } },
5497 { "(bad)", { XX } },
5498 { "(bad)", { XX } },
c1e679ec
DR
5499 /* 30 */
5500 { PREFIX_TABLE (PREFIX_0F3830) },
5501 { PREFIX_TABLE (PREFIX_0F3831) },
5502 { PREFIX_TABLE (PREFIX_0F3832) },
5503 { PREFIX_TABLE (PREFIX_0F3833) },
5504 { PREFIX_TABLE (PREFIX_0F3834) },
5505 { PREFIX_TABLE (PREFIX_0F3835) },
c0f3af97 5506 { "(bad)", { XX } },
c1e679ec
DR
5507 { PREFIX_TABLE (PREFIX_0F3837) },
5508 /* 38 */
5509 { PREFIX_TABLE (PREFIX_0F3838) },
5510 { PREFIX_TABLE (PREFIX_0F3839) },
5511 { PREFIX_TABLE (PREFIX_0F383A) },
5512 { PREFIX_TABLE (PREFIX_0F383B) },
5513 { PREFIX_TABLE (PREFIX_0F383C) },
5514 { PREFIX_TABLE (PREFIX_0F383D) },
5515 { PREFIX_TABLE (PREFIX_0F383E) },
5516 { PREFIX_TABLE (PREFIX_0F383F) },
c0f3af97 5517 /* 40 */
c1e679ec
DR
5518 { PREFIX_TABLE (PREFIX_0F3840) },
5519 { PREFIX_TABLE (PREFIX_0F3841) },
4e7d34a6
L
5520 { "(bad)", { XX } },
5521 { "(bad)", { XX } },
c0f3af97 5522 { "(bad)", { XX } },
c0f3af97
L
5523 { "(bad)", { XX } },
5524 { "(bad)", { XX } },
5525 { "(bad)", { XX } },
85f10a01 5526 /* 48 */
4e7d34a6
L
5527 { "(bad)", { XX } },
5528 { "(bad)", { XX } },
5529 { "(bad)", { XX } },
5530 { "(bad)", { XX } },
4e7d34a6
L
5531 { "(bad)", { XX } },
5532 { "(bad)", { XX } },
5533 { "(bad)", { XX } },
5534 { "(bad)", { XX } },
c0f3af97 5535 /* 50 */
4e7d34a6
L
5536 { "(bad)", { XX } },
5537 { "(bad)", { XX } },
5538 { "(bad)", { XX } },
5539 { "(bad)", { XX } },
4e7d34a6
L
5540 { "(bad)", { XX } },
5541 { "(bad)", { XX } },
5542 { "(bad)", { XX } },
5543 { "(bad)", { XX } },
c0f3af97 5544 /* 58 */
4e7d34a6
L
5545 { "(bad)", { XX } },
5546 { "(bad)", { XX } },
5547 { "(bad)", { XX } },
5548 { "(bad)", { XX } },
4e7d34a6
L
5549 { "(bad)", { XX } },
5550 { "(bad)", { XX } },
5551 { "(bad)", { XX } },
5552 { "(bad)", { XX } },
c0f3af97 5553 /* 60 */
c1e679ec
DR
5554 { "(bad)", { XX } },
5555 { "(bad)", { XX } },
5556 { "(bad)", { XX } },
5557 { "(bad)", { XX } },
4e7d34a6
L
5558 { "(bad)", { XX } },
5559 { "(bad)", { XX } },
5560 { "(bad)", { XX } },
5561 { "(bad)", { XX } },
5562 /* 68 */
5563 { "(bad)", { XX } },
5564 { "(bad)", { XX } },
5565 { "(bad)", { XX } },
5566 { "(bad)", { XX } },
5567 { "(bad)", { XX } },
5568 { "(bad)", { XX } },
5569 { "(bad)", { XX } },
5570 { "(bad)", { XX } },
85f10a01 5571 /* 70 */
4e7d34a6
L
5572 { "(bad)", { XX } },
5573 { "(bad)", { XX } },
5574 { "(bad)", { XX } },
5575 { "(bad)", { XX } },
5576 { "(bad)", { XX } },
5577 { "(bad)", { XX } },
5578 { "(bad)", { XX } },
5579 { "(bad)", { XX } },
85f10a01 5580 /* 78 */
4e7d34a6
L
5581 { "(bad)", { XX } },
5582 { "(bad)", { XX } },
5583 { "(bad)", { XX } },
5584 { "(bad)", { XX } },
5585 { "(bad)", { XX } },
5586 { "(bad)", { XX } },
5587 { "(bad)", { XX } },
5588 { "(bad)", { XX } },
85f10a01 5589 /* 80 */
c1e679ec
DR
5590 { PREFIX_TABLE (PREFIX_0F3880) },
5591 { PREFIX_TABLE (PREFIX_0F3881) },
4e7d34a6
L
5592 { "(bad)", { XX } },
5593 { "(bad)", { XX } },
5594 { "(bad)", { XX } },
c0f3af97
L
5595 { "(bad)", { XX } },
5596 { "(bad)", { XX } },
5597 { "(bad)", { XX } },
85f10a01 5598 /* 88 */
4e7d34a6
L
5599 { "(bad)", { XX } },
5600 { "(bad)", { XX } },
5601 { "(bad)", { XX } },
5602 { "(bad)", { XX } },
5603 { "(bad)", { XX } },
5604 { "(bad)", { XX } },
c0f3af97
L
5605 { "(bad)", { XX } },
5606 { "(bad)", { XX } },
85f10a01 5607 /* 90 */
4e7d34a6
L
5608 { "(bad)", { XX } },
5609 { "(bad)", { XX } },
5610 { "(bad)", { XX } },
5611 { "(bad)", { XX } },
5612 { "(bad)", { XX } },
c0f3af97
L
5613 { "(bad)", { XX } },
5614 { "(bad)", { XX } },
5615 { "(bad)", { XX } },
85f10a01 5616 /* 98 */
4e7d34a6
L
5617 { "(bad)", { XX } },
5618 { "(bad)", { XX } },
5619 { "(bad)", { XX } },
5620 { "(bad)", { XX } },
5621 { "(bad)", { XX } },
5622 { "(bad)", { XX } },
c0f3af97
L
5623 { "(bad)", { XX } },
5624 { "(bad)", { XX } },
85f10a01 5625 /* a0 */
4e7d34a6
L
5626 { "(bad)", { XX } },
5627 { "(bad)", { XX } },
5628 { "(bad)", { XX } },
5629 { "(bad)", { XX } },
5630 { "(bad)", { XX } },
5631 { "(bad)", { XX } },
c0f3af97 5632 { "(bad)", { XX } },
4e7d34a6 5633 { "(bad)", { XX } },
85f10a01 5634 /* a8 */
4e7d34a6
L
5635 { "(bad)", { XX } },
5636 { "(bad)", { XX } },
5637 { "(bad)", { XX } },
5638 { "(bad)", { XX } },
5639 { "(bad)", { XX } },
5640 { "(bad)", { XX } },
5641 { "(bad)", { XX } },
5642 { "(bad)", { XX } },
85f10a01 5643 /* b0 */
4e7d34a6
L
5644 { "(bad)", { XX } },
5645 { "(bad)", { XX } },
5646 { "(bad)", { XX } },
5647 { "(bad)", { XX } },
5648 { "(bad)", { XX } },
5649 { "(bad)", { XX } },
c0f3af97 5650 { "(bad)", { XX } },
4e7d34a6 5651 { "(bad)", { XX } },
85f10a01 5652 /* b8 */
4e7d34a6
L
5653 { "(bad)", { XX } },
5654 { "(bad)", { XX } },
5655 { "(bad)", { XX } },
5656 { "(bad)", { XX } },
5657 { "(bad)", { XX } },
5658 { "(bad)", { XX } },
5659 { "(bad)", { XX } },
5660 { "(bad)", { XX } },
85f10a01 5661 /* c0 */
4e7d34a6
L
5662 { "(bad)", { XX } },
5663 { "(bad)", { XX } },
5664 { "(bad)", { XX } },
5665 { "(bad)", { XX } },
5666 { "(bad)", { XX } },
5667 { "(bad)", { XX } },
5668 { "(bad)", { XX } },
5669 { "(bad)", { XX } },
85f10a01 5670 /* c8 */
4e7d34a6
L
5671 { "(bad)", { XX } },
5672 { "(bad)", { XX } },
5673 { "(bad)", { XX } },
5674 { "(bad)", { XX } },
5675 { "(bad)", { XX } },
5676 { "(bad)", { XX } },
5677 { "(bad)", { XX } },
5678 { "(bad)", { XX } },
85f10a01 5679 /* d0 */
4e7d34a6
L
5680 { "(bad)", { XX } },
5681 { "(bad)", { XX } },
5682 { "(bad)", { XX } },
5683 { "(bad)", { XX } },
5684 { "(bad)", { XX } },
5685 { "(bad)", { XX } },
5686 { "(bad)", { XX } },
5687 { "(bad)", { XX } },
85f10a01 5688 /* d8 */
4e7d34a6
L
5689 { "(bad)", { XX } },
5690 { "(bad)", { XX } },
5691 { "(bad)", { XX } },
c1e679ec
DR
5692 { PREFIX_TABLE (PREFIX_0F38DB) },
5693 { PREFIX_TABLE (PREFIX_0F38DC) },
5694 { PREFIX_TABLE (PREFIX_0F38DD) },
5695 { PREFIX_TABLE (PREFIX_0F38DE) },
5696 { PREFIX_TABLE (PREFIX_0F38DF) },
85f10a01 5697 /* e0 */
4e7d34a6
L
5698 { "(bad)", { XX } },
5699 { "(bad)", { XX } },
5700 { "(bad)", { XX } },
5701 { "(bad)", { XX } },
5702 { "(bad)", { XX } },
5703 { "(bad)", { XX } },
5704 { "(bad)", { XX } },
5705 { "(bad)", { XX } },
85f10a01 5706 /* e8 */
4e7d34a6
L
5707 { "(bad)", { XX } },
5708 { "(bad)", { XX } },
5709 { "(bad)", { XX } },
5710 { "(bad)", { XX } },
5711 { "(bad)", { XX } },
5712 { "(bad)", { XX } },
5713 { "(bad)", { XX } },
5714 { "(bad)", { XX } },
85f10a01 5715 /* f0 */
c1e679ec
DR
5716 { PREFIX_TABLE (PREFIX_0F38F0) },
5717 { PREFIX_TABLE (PREFIX_0F38F1) },
4e7d34a6
L
5718 { "(bad)", { XX } },
5719 { "(bad)", { XX } },
5720 { "(bad)", { XX } },
5721 { "(bad)", { XX } },
5722 { "(bad)", { XX } },
5723 { "(bad)", { XX } },
85f10a01 5724 /* f8 */
4e7d34a6
L
5725 { "(bad)", { XX } },
5726 { "(bad)", { XX } },
5727 { "(bad)", { XX } },
5728 { "(bad)", { XX } },
5729 { "(bad)", { XX } },
5730 { "(bad)", { XX } },
5731 { "(bad)", { XX } },
5732 { "(bad)", { XX } },
85f10a01 5733 },
c1e679ec 5734 /* THREE_BYTE_0F3A */
85f10a01
MM
5735 {
5736 /* 00 */
4e7d34a6
L
5737 { "(bad)", { XX } },
5738 { "(bad)", { XX } },
5739 { "(bad)", { XX } },
5740 { "(bad)", { XX } },
5741 { "(bad)", { XX } },
5742 { "(bad)", { XX } },
5743 { "(bad)", { XX } },
5744 { "(bad)", { XX } },
85f10a01 5745 /* 08 */
c1e679ec
DR
5746 { PREFIX_TABLE (PREFIX_0F3A08) },
5747 { PREFIX_TABLE (PREFIX_0F3A09) },
5748 { PREFIX_TABLE (PREFIX_0F3A0A) },
5749 { PREFIX_TABLE (PREFIX_0F3A0B) },
5750 { PREFIX_TABLE (PREFIX_0F3A0C) },
5751 { PREFIX_TABLE (PREFIX_0F3A0D) },
5752 { PREFIX_TABLE (PREFIX_0F3A0E) },
5753 { "palignr", { MX, EM, Ib } },
85f10a01 5754 /* 10 */
4e7d34a6
L
5755 { "(bad)", { XX } },
5756 { "(bad)", { XX } },
5757 { "(bad)", { XX } },
5758 { "(bad)", { XX } },
c1e679ec
DR
5759 { PREFIX_TABLE (PREFIX_0F3A14) },
5760 { PREFIX_TABLE (PREFIX_0F3A15) },
5761 { PREFIX_TABLE (PREFIX_0F3A16) },
5762 { PREFIX_TABLE (PREFIX_0F3A17) },
85f10a01 5763 /* 18 */
4e7d34a6
L
5764 { "(bad)", { XX } },
5765 { "(bad)", { XX } },
5766 { "(bad)", { XX } },
5767 { "(bad)", { XX } },
5768 { "(bad)", { XX } },
5769 { "(bad)", { XX } },
5770 { "(bad)", { XX } },
5771 { "(bad)", { XX } },
85f10a01 5772 /* 20 */
c1e679ec
DR
5773 { PREFIX_TABLE (PREFIX_0F3A20) },
5774 { PREFIX_TABLE (PREFIX_0F3A21) },
5775 { PREFIX_TABLE (PREFIX_0F3A22) },
4e7d34a6
L
5776 { "(bad)", { XX } },
5777 { "(bad)", { XX } },
5778 { "(bad)", { XX } },
5779 { "(bad)", { XX } },
5780 { "(bad)", { XX } },
85f10a01 5781 /* 28 */
4e7d34a6
L
5782 { "(bad)", { XX } },
5783 { "(bad)", { XX } },
5784 { "(bad)", { XX } },
5785 { "(bad)", { XX } },
4e7d34a6
L
5786 { "(bad)", { XX } },
5787 { "(bad)", { XX } },
5788 { "(bad)", { XX } },
5789 { "(bad)", { XX } },
c0f3af97 5790 /* 30 */
c1e679ec
DR
5791 { "(bad)", { XX } },
5792 { "(bad)", { XX } },
4e7d34a6 5793 { "(bad)", { XX } },
4e7d34a6
L
5794 { "(bad)", { XX } },
5795 { "(bad)", { XX } },
5796 { "(bad)", { XX } },
5797 { "(bad)", { XX } },
5798 { "(bad)", { XX } },
c0f3af97 5799 /* 38 */
4e7d34a6
L
5800 { "(bad)", { XX } },
5801 { "(bad)", { XX } },
5802 { "(bad)", { XX } },
4e7d34a6
L
5803 { "(bad)", { XX } },
5804 { "(bad)", { XX } },
5805 { "(bad)", { XX } },
5806 { "(bad)", { XX } },
5807 { "(bad)", { XX } },
c0f3af97 5808 /* 40 */
c1e679ec
DR
5809 { PREFIX_TABLE (PREFIX_0F3A40) },
5810 { PREFIX_TABLE (PREFIX_0F3A41) },
5811 { PREFIX_TABLE (PREFIX_0F3A42) },
5812 { "(bad)", { XX } },
5813 { PREFIX_TABLE (PREFIX_0F3A44) },
4e7d34a6
L
5814 { "(bad)", { XX } },
5815 { "(bad)", { XX } },
5816 { "(bad)", { XX } },
85f10a01 5817 /* 48 */
4e7d34a6
L
5818 { "(bad)", { XX } },
5819 { "(bad)", { XX } },
5820 { "(bad)", { XX } },
c1e679ec 5821 { "(bad)", { XX } },
4e7d34a6
L
5822 { "(bad)", { XX } },
5823 { "(bad)", { XX } },
5824 { "(bad)", { XX } },
5825 { "(bad)", { XX } },
c0f3af97 5826 /* 50 */
4e7d34a6
L
5827 { "(bad)", { XX } },
5828 { "(bad)", { XX } },
5829 { "(bad)", { XX } },
c1e679ec
DR
5830 { "(bad)", { XX } },
5831 { "(bad)", { XX } },
5832 { "(bad)", { XX } },
5833 { "(bad)", { XX } },
5834 { "(bad)", { XX } },
85f10a01 5835 /* 58 */
4e7d34a6
L
5836 { "(bad)", { XX } },
5837 { "(bad)", { XX } },
5838 { "(bad)", { XX } },
4e7d34a6
L
5839 { "(bad)", { XX } },
5840 { "(bad)", { XX } },
5841 { "(bad)", { XX } },
5842 { "(bad)", { XX } },
4e7d34a6 5843 { "(bad)", { XX } },
c1e679ec
DR
5844 /* 60 */
5845 { PREFIX_TABLE (PREFIX_0F3A60) },
5846 { PREFIX_TABLE (PREFIX_0F3A61) },
5847 { PREFIX_TABLE (PREFIX_0F3A62) },
5848 { PREFIX_TABLE (PREFIX_0F3A63) },
4e7d34a6
L
5849 { "(bad)", { XX } },
5850 { "(bad)", { XX } },
5851 { "(bad)", { XX } },
5852 { "(bad)", { XX } },
c0f3af97
L
5853 /* 68 */
5854 { "(bad)", { XX } },
4e7d34a6
L
5855 { "(bad)", { XX } },
5856 { "(bad)", { XX } },
5857 { "(bad)", { XX } },
4e7d34a6
L
5858 { "(bad)", { XX } },
5859 { "(bad)", { XX } },
5860 { "(bad)", { XX } },
5861 { "(bad)", { XX } },
85f10a01 5862 /* 70 */
4e7d34a6
L
5863 { "(bad)", { XX } },
5864 { "(bad)", { XX } },
5865 { "(bad)", { XX } },
5866 { "(bad)", { XX } },
5867 { "(bad)", { XX } },
5868 { "(bad)", { XX } },
5869 { "(bad)", { XX } },
5870 { "(bad)", { XX } },
85f10a01 5871 /* 78 */
4e7d34a6
L
5872 { "(bad)", { XX } },
5873 { "(bad)", { XX } },
5874 { "(bad)", { XX } },
5875 { "(bad)", { XX } },
5876 { "(bad)", { XX } },
5877 { "(bad)", { XX } },
5878 { "(bad)", { XX } },
5879 { "(bad)", { XX } },
85f10a01 5880 /* 80 */
4e7d34a6
L
5881 { "(bad)", { XX } },
5882 { "(bad)", { XX } },
5883 { "(bad)", { XX } },
5884 { "(bad)", { XX } },
5885 { "(bad)", { XX } },
5886 { "(bad)", { XX } },
5887 { "(bad)", { XX } },
5888 { "(bad)", { XX } },
5889 /* 88 */
5890 { "(bad)", { XX } },
5891 { "(bad)", { XX } },
5892 { "(bad)", { XX } },
5893 { "(bad)", { XX } },
5894 { "(bad)", { XX } },
5895 { "(bad)", { XX } },
5896 { "(bad)", { XX } },
5897 { "(bad)", { XX } },
5898 /* 90 */
5899 { "(bad)", { XX } },
5900 { "(bad)", { XX } },
5901 { "(bad)", { XX } },
5902 { "(bad)", { XX } },
5903 { "(bad)", { XX } },
5904 { "(bad)", { XX } },
5905 { "(bad)", { XX } },
5906 { "(bad)", { XX } },
5907 /* 98 */
5908 { "(bad)", { XX } },
5909 { "(bad)", { XX } },
5910 { "(bad)", { XX } },
5911 { "(bad)", { XX } },
5912 { "(bad)", { XX } },
5913 { "(bad)", { XX } },
5914 { "(bad)", { XX } },
5915 { "(bad)", { XX } },
5916 /* a0 */
5917 { "(bad)", { XX } },
5918 { "(bad)", { XX } },
5919 { "(bad)", { XX } },
5920 { "(bad)", { XX } },
5921 { "(bad)", { XX } },
5922 { "(bad)", { XX } },
5923 { "(bad)", { XX } },
5924 { "(bad)", { XX } },
5925 /* a8 */
5926 { "(bad)", { XX } },
5927 { "(bad)", { XX } },
5928 { "(bad)", { XX } },
5929 { "(bad)", { XX } },
5930 { "(bad)", { XX } },
5931 { "(bad)", { XX } },
5932 { "(bad)", { XX } },
5933 { "(bad)", { XX } },
5934 /* b0 */
5935 { "(bad)", { XX } },
5936 { "(bad)", { XX } },
5937 { "(bad)", { XX } },
5938 { "(bad)", { XX } },
5939 { "(bad)", { XX } },
5940 { "(bad)", { XX } },
5941 { "(bad)", { XX } },
5942 { "(bad)", { XX } },
5943 /* b8 */
5944 { "(bad)", { XX } },
5945 { "(bad)", { XX } },
5946 { "(bad)", { XX } },
5947 { "(bad)", { XX } },
5948 { "(bad)", { XX } },
5949 { "(bad)", { XX } },
5950 { "(bad)", { XX } },
5951 { "(bad)", { XX } },
5952 /* c0 */
5953 { "(bad)", { XX } },
5954 { "(bad)", { XX } },
5955 { "(bad)", { XX } },
5956 { "(bad)", { XX } },
5957 { "(bad)", { XX } },
5958 { "(bad)", { XX } },
5959 { "(bad)", { XX } },
5960 { "(bad)", { XX } },
5961 /* c8 */
5962 { "(bad)", { XX } },
5963 { "(bad)", { XX } },
5964 { "(bad)", { XX } },
5965 { "(bad)", { XX } },
5966 { "(bad)", { XX } },
5967 { "(bad)", { XX } },
5968 { "(bad)", { XX } },
5969 { "(bad)", { XX } },
5970 /* d0 */
5971 { "(bad)", { XX } },
5972 { "(bad)", { XX } },
5973 { "(bad)", { XX } },
5974 { "(bad)", { XX } },
5975 { "(bad)", { XX } },
5976 { "(bad)", { XX } },
5977 { "(bad)", { XX } },
5978 { "(bad)", { XX } },
5979 /* d8 */
5980 { "(bad)", { XX } },
5981 { "(bad)", { XX } },
5982 { "(bad)", { XX } },
5983 { "(bad)", { XX } },
5984 { "(bad)", { XX } },
5985 { "(bad)", { XX } },
5986 { "(bad)", { XX } },
c1e679ec 5987 { PREFIX_TABLE (PREFIX_0F3ADF) },
4e7d34a6
L
5988 /* e0 */
5989 { "(bad)", { XX } },
5990 { "(bad)", { XX } },
5991 { "(bad)", { XX } },
5992 { "(bad)", { XX } },
5993 { "(bad)", { XX } },
5994 { "(bad)", { XX } },
5995 { "(bad)", { XX } },
5996 { "(bad)", { XX } },
5997 /* e8 */
5998 { "(bad)", { XX } },
5999 { "(bad)", { XX } },
6000 { "(bad)", { XX } },
6001 { "(bad)", { XX } },
6002 { "(bad)", { XX } },
6003 { "(bad)", { XX } },
6004 { "(bad)", { XX } },
6005 { "(bad)", { XX } },
6006 /* f0 */
6007 { "(bad)", { XX } },
6008 { "(bad)", { XX } },
6009 { "(bad)", { XX } },
6010 { "(bad)", { XX } },
6011 { "(bad)", { XX } },
6012 { "(bad)", { XX } },
6013 { "(bad)", { XX } },
6014 { "(bad)", { XX } },
6015 /* f8 */
6016 { "(bad)", { XX } },
6017 { "(bad)", { XX } },
6018 { "(bad)", { XX } },
6019 { "(bad)", { XX } },
6020 { "(bad)", { XX } },
6021 { "(bad)", { XX } },
6022 { "(bad)", { XX } },
6023 { "(bad)", { XX } },
6024 },
c1e679ec
DR
6025
6026 /* THREE_BYTE_0F7A */
4e7d34a6
L
6027 {
6028 /* 00 */
c0f3af97
L
6029 { "(bad)", { XX } },
6030 { "(bad)", { XX } },
6031 { "(bad)", { XX } },
6032 { "(bad)", { XX } },
6033 { "(bad)", { XX } },
6034 { "(bad)", { XX } },
6035 { "(bad)", { XX } },
6036 { "(bad)", { XX } },
4e7d34a6 6037 /* 08 */
c0f3af97
L
6038 { "(bad)", { XX } },
6039 { "(bad)", { XX } },
6040 { "(bad)", { XX } },
6041 { "(bad)", { XX } },
d5d7db8e
L
6042 { "(bad)", { XX } },
6043 { "(bad)", { XX } },
6044 { "(bad)", { XX } },
6045 { "(bad)", { XX } },
4e7d34a6 6046 /* 10 */
d5d7db8e
L
6047 { "(bad)", { XX } },
6048 { "(bad)", { XX } },
6049 { "(bad)", { XX } },
d5d7db8e 6050 { "(bad)", { XX } },
c0f3af97
L
6051 { "(bad)", { XX } },
6052 { "(bad)", { XX } },
6053 { "(bad)", { XX } },
6054 { "(bad)", { XX } },
4e7d34a6 6055 /* 18 */
d5d7db8e
L
6056 { "(bad)", { XX } },
6057 { "(bad)", { XX } },
6058 { "(bad)", { XX } },
6059 { "(bad)", { XX } },
c0f3af97
L
6060 { "(bad)", { XX } },
6061 { "(bad)", { XX } },
6062 { "(bad)", { XX } },
d5d7db8e 6063 { "(bad)", { XX } },
4e7d34a6 6064 /* 20 */
c1e679ec 6065 { "ptest", { XX } },
c0f3af97
L
6066 { "(bad)", { XX } },
6067 { "(bad)", { XX } },
6068 { "(bad)", { XX } },
6069 { "(bad)", { XX } },
6070 { "(bad)", { XX } },
d5d7db8e
L
6071 { "(bad)", { XX } },
6072 { "(bad)", { XX } },
4e7d34a6 6073 /* 28 */
c0f3af97
L
6074 { "(bad)", { XX } },
6075 { "(bad)", { XX } },
6076 { "(bad)", { XX } },
6077 { "(bad)", { XX } },
d5d7db8e
L
6078 { "(bad)", { XX } },
6079 { "(bad)", { XX } },
6080 { "(bad)", { XX } },
6081 { "(bad)", { XX } },
4e7d34a6 6082 /* 30 */
d5d7db8e 6083 { "(bad)", { XX } },
d5d7db8e
L
6084 { "(bad)", { XX } },
6085 { "(bad)", { XX } },
6086 { "(bad)", { XX } },
6087 { "(bad)", { XX } },
6088 { "(bad)", { XX } },
6089 { "(bad)", { XX } },
c0f3af97
L
6090 { "(bad)", { XX } },
6091 /* 38 */
6092 { "(bad)", { XX } },
6093 { "(bad)", { XX } },
6094 { "(bad)", { XX } },
6095 { "(bad)", { XX } },
d5d7db8e
L
6096 { "(bad)", { XX } },
6097 { "(bad)", { XX } },
6098 { "(bad)", { XX } },
6099 { "(bad)", { XX } },
c0f3af97 6100 /* 40 */
c1e679ec
DR
6101 { "(bad)", { XX } },
6102 { "phaddbw", { XM, EXq } },
6103 { "phaddbd", { XM, EXq } },
6104 { "phaddbq", { XM, EXq } },
d5d7db8e
L
6105 { "(bad)", { XX } },
6106 { "(bad)", { XX } },
c1e679ec
DR
6107 { "phaddwd", { XM, EXq } },
6108 { "phaddwq", { XM, EXq } },
6109 /* 48 */
d5d7db8e
L
6110 { "(bad)", { XX } },
6111 { "(bad)", { XX } },
d5d7db8e 6112 { "(bad)", { XX } },
c1e679ec 6113 { "phadddq", { XM, EXq } },
d5d7db8e
L
6114 { "(bad)", { XX } },
6115 { "(bad)", { XX } },
6116 { "(bad)", { XX } },
6117 { "(bad)", { XX } },
c1e679ec 6118 /* 50 */
d5d7db8e 6119 { "(bad)", { XX } },
c1e679ec
DR
6120 { "phaddubw", { XM, EXq } },
6121 { "phaddubd", { XM, EXq } },
6122 { "phaddubq", { XM, EXq } },
d5d7db8e
L
6123 { "(bad)", { XX } },
6124 { "(bad)", { XX } },
c1e679ec
DR
6125 { "phadduwd", { XM, EXq } },
6126 { "phadduwq", { XM, EXq } },
4e7d34a6 6127 /* 58 */
d5d7db8e
L
6128 { "(bad)", { XX } },
6129 { "(bad)", { XX } },
6130 { "(bad)", { XX } },
c1e679ec 6131 { "phaddudq", { XM, EXq } },
d5d7db8e
L
6132 { "(bad)", { XX } },
6133 { "(bad)", { XX } },
6134 { "(bad)", { XX } },
6135 { "(bad)", { XX } },
4e7d34a6 6136 /* 60 */
d5d7db8e 6137 { "(bad)", { XX } },
c1e679ec
DR
6138 { "phsubbw", { XM, EXq } },
6139 { "phsubbd", { XM, EXq } },
6140 { "phsubbq", { XM, EXq } },
d5d7db8e
L
6141 { "(bad)", { XX } },
6142 { "(bad)", { XX } },
6143 { "(bad)", { XX } },
6144 { "(bad)", { XX } },
4e7d34a6 6145 /* 68 */
d5d7db8e
L
6146 { "(bad)", { XX } },
6147 { "(bad)", { XX } },
6148 { "(bad)", { XX } },
6149 { "(bad)", { XX } },
6150 { "(bad)", { XX } },
6151 { "(bad)", { XX } },
6152 { "(bad)", { XX } },
6153 { "(bad)", { XX } },
4e7d34a6 6154 /* 70 */
d5d7db8e
L
6155 { "(bad)", { XX } },
6156 { "(bad)", { XX } },
6157 { "(bad)", { XX } },
6158 { "(bad)", { XX } },
6159 { "(bad)", { XX } },
6160 { "(bad)", { XX } },
6161 { "(bad)", { XX } },
6162 { "(bad)", { XX } },
4e7d34a6 6163 /* 78 */
d5d7db8e
L
6164 { "(bad)", { XX } },
6165 { "(bad)", { XX } },
6166 { "(bad)", { XX } },
6167 { "(bad)", { XX } },
6168 { "(bad)", { XX } },
6169 { "(bad)", { XX } },
6170 { "(bad)", { XX } },
6171 { "(bad)", { XX } },
4e7d34a6 6172 /* 80 */
d5d7db8e
L
6173 { "(bad)", { XX } },
6174 { "(bad)", { XX } },
6175 { "(bad)", { XX } },
6176 { "(bad)", { XX } },
6177 { "(bad)", { XX } },
6178 { "(bad)", { XX } },
6179 { "(bad)", { XX } },
6180 { "(bad)", { XX } },
4e7d34a6 6181 /* 88 */
d5d7db8e
L
6182 { "(bad)", { XX } },
6183 { "(bad)", { XX } },
6184 { "(bad)", { XX } },
6185 { "(bad)", { XX } },
6186 { "(bad)", { XX } },
6187 { "(bad)", { XX } },
6188 { "(bad)", { XX } },
6189 { "(bad)", { XX } },
4e7d34a6 6190 /* 90 */
d5d7db8e
L
6191 { "(bad)", { XX } },
6192 { "(bad)", { XX } },
6193 { "(bad)", { XX } },
6194 { "(bad)", { XX } },
6195 { "(bad)", { XX } },
6196 { "(bad)", { XX } },
6197 { "(bad)", { XX } },
6198 { "(bad)", { XX } },
4e7d34a6 6199 /* 98 */
d5d7db8e
L
6200 { "(bad)", { XX } },
6201 { "(bad)", { XX } },
6202 { "(bad)", { XX } },
6203 { "(bad)", { XX } },
6204 { "(bad)", { XX } },
6205 { "(bad)", { XX } },
6206 { "(bad)", { XX } },
6207 { "(bad)", { XX } },
4e7d34a6 6208 /* a0 */
d5d7db8e
L
6209 { "(bad)", { XX } },
6210 { "(bad)", { XX } },
6211 { "(bad)", { XX } },
6212 { "(bad)", { XX } },
6213 { "(bad)", { XX } },
6214 { "(bad)", { XX } },
6215 { "(bad)", { XX } },
6216 { "(bad)", { XX } },
4e7d34a6 6217 /* a8 */
d5d7db8e
L
6218 { "(bad)", { XX } },
6219 { "(bad)", { XX } },
6220 { "(bad)", { XX } },
6221 { "(bad)", { XX } },
6222 { "(bad)", { XX } },
6223 { "(bad)", { XX } },
6224 { "(bad)", { XX } },
6225 { "(bad)", { XX } },
6226 /* b0 */
6227 { "(bad)", { XX } },
6228 { "(bad)", { XX } },
6229 { "(bad)", { XX } },
6230 { "(bad)", { XX } },
6231 { "(bad)", { XX } },
6232 { "(bad)", { XX } },
6233 { "(bad)", { XX } },
6234 { "(bad)", { XX } },
85f10a01 6235 /* b8 */
d5d7db8e
L
6236 { "(bad)", { XX } },
6237 { "(bad)", { XX } },
6238 { "(bad)", { XX } },
6239 { "(bad)", { XX } },
6240 { "(bad)", { XX } },
6241 { "(bad)", { XX } },
6242 { "(bad)", { XX } },
6243 { "(bad)", { XX } },
85f10a01 6244 /* c0 */
d5d7db8e
L
6245 { "(bad)", { XX } },
6246 { "(bad)", { XX } },
6247 { "(bad)", { XX } },
6248 { "(bad)", { XX } },
6249 { "(bad)", { XX } },
6250 { "(bad)", { XX } },
6251 { "(bad)", { XX } },
6252 { "(bad)", { XX } },
85f10a01 6253 /* c8 */
d5d7db8e
L
6254 { "(bad)", { XX } },
6255 { "(bad)", { XX } },
6256 { "(bad)", { XX } },
6257 { "(bad)", { XX } },
6258 { "(bad)", { XX } },
6259 { "(bad)", { XX } },
6260 { "(bad)", { XX } },
6261 { "(bad)", { XX } },
85f10a01 6262 /* d0 */
d5d7db8e
L
6263 { "(bad)", { XX } },
6264 { "(bad)", { XX } },
6265 { "(bad)", { XX } },
6266 { "(bad)", { XX } },
6267 { "(bad)", { XX } },
6268 { "(bad)", { XX } },
6269 { "(bad)", { XX } },
6270 { "(bad)", { XX } },
85f10a01 6271 /* d8 */
d5d7db8e
L
6272 { "(bad)", { XX } },
6273 { "(bad)", { XX } },
6274 { "(bad)", { XX } },
6275 { "(bad)", { XX } },
6276 { "(bad)", { XX } },
6277 { "(bad)", { XX } },
6278 { "(bad)", { XX } },
6279 { "(bad)", { XX } },
85f10a01 6280 /* e0 */
d5d7db8e
L
6281 { "(bad)", { XX } },
6282 { "(bad)", { XX } },
6283 { "(bad)", { XX } },
6284 { "(bad)", { XX } },
6285 { "(bad)", { XX } },
6286 { "(bad)", { XX } },
6287 { "(bad)", { XX } },
6288 { "(bad)", { XX } },
85f10a01 6289 /* e8 */
d5d7db8e
L
6290 { "(bad)", { XX } },
6291 { "(bad)", { XX } },
6292 { "(bad)", { XX } },
6293 { "(bad)", { XX } },
6294 { "(bad)", { XX } },
6295 { "(bad)", { XX } },
6296 { "(bad)", { XX } },
6297 { "(bad)", { XX } },
85f10a01 6298 /* f0 */
c0f3af97
L
6299 { "(bad)", { XX } },
6300 { "(bad)", { XX } },
d5d7db8e
L
6301 { "(bad)", { XX } },
6302 { "(bad)", { XX } },
6303 { "(bad)", { XX } },
6304 { "(bad)", { XX } },
6305 { "(bad)", { XX } },
6306 { "(bad)", { XX } },
85f10a01 6307 /* f8 */
d5d7db8e
L
6308 { "(bad)", { XX } },
6309 { "(bad)", { XX } },
6310 { "(bad)", { XX } },
6311 { "(bad)", { XX } },
6312 { "(bad)", { XX } },
6313 { "(bad)", { XX } },
6314 { "(bad)", { XX } },
6315 { "(bad)", { XX } },
85f10a01 6316 },
c0f3af97
L
6317};
6318
c1e679ec 6319
c0f3af97
L
6320static const struct dis386 vex_table[][256] = {
6321 /* VEX_0F */
85f10a01
MM
6322 {
6323 /* 00 */
d5d7db8e
L
6324 { "(bad)", { XX } },
6325 { "(bad)", { XX } },
6326 { "(bad)", { XX } },
6327 { "(bad)", { XX } },
6328 { "(bad)", { XX } },
6329 { "(bad)", { XX } },
6330 { "(bad)", { XX } },
6331 { "(bad)", { XX } },
85f10a01 6332 /* 08 */
d5d7db8e
L
6333 { "(bad)", { XX } },
6334 { "(bad)", { XX } },
6335 { "(bad)", { XX } },
6336 { "(bad)", { XX } },
d5d7db8e
L
6337 { "(bad)", { XX } },
6338 { "(bad)", { XX } },
6339 { "(bad)", { XX } },
6340 { "(bad)", { XX } },
c0f3af97
L
6341 /* 10 */
6342 { PREFIX_TABLE (PREFIX_VEX_10) },
6343 { PREFIX_TABLE (PREFIX_VEX_11) },
6344 { PREFIX_TABLE (PREFIX_VEX_12) },
6345 { MOD_TABLE (MOD_VEX_13) },
6346 { "vunpcklpX", { XM, Vex, EXx } },
6347 { "vunpckhpX", { XM, Vex, EXx } },
6348 { PREFIX_TABLE (PREFIX_VEX_16) },
6349 { MOD_TABLE (MOD_VEX_17) },
6350 /* 18 */
d5d7db8e
L
6351 { "(bad)", { XX } },
6352 { "(bad)", { XX } },
6353 { "(bad)", { XX } },
d5d7db8e
L
6354 { "(bad)", { XX } },
6355 { "(bad)", { XX } },
6356 { "(bad)", { XX } },
6357 { "(bad)", { XX } },
6358 { "(bad)", { XX } },
c0f3af97 6359 /* 20 */
d5d7db8e
L
6360 { "(bad)", { XX } },
6361 { "(bad)", { XX } },
6362 { "(bad)", { XX } },
6363 { "(bad)", { XX } },
6364 { "(bad)", { XX } },
6365 { "(bad)", { XX } },
6366 { "(bad)", { XX } },
6367 { "(bad)", { XX } },
c0f3af97
L
6368 /* 28 */
6369 { "vmovapX", { XM, EXx } },
b6169b20 6370 { "vmovapX", { EXxS, XM } },
c0f3af97
L
6371 { PREFIX_TABLE (PREFIX_VEX_2A) },
6372 { MOD_TABLE (MOD_VEX_2B) },
6373 { PREFIX_TABLE (PREFIX_VEX_2C) },
6374 { PREFIX_TABLE (PREFIX_VEX_2D) },
6375 { PREFIX_TABLE (PREFIX_VEX_2E) },
6376 { PREFIX_TABLE (PREFIX_VEX_2F) },
85f10a01 6377 /* 30 */
d5d7db8e
L
6378 { "(bad)", { XX } },
6379 { "(bad)", { XX } },
6380 { "(bad)", { XX } },
6381 { "(bad)", { XX } },
6382 { "(bad)", { XX } },
6383 { "(bad)", { XX } },
6384 { "(bad)", { XX } },
6385 { "(bad)", { XX } },
4e7d34a6 6386 /* 38 */
d5d7db8e
L
6387 { "(bad)", { XX } },
6388 { "(bad)", { XX } },
6389 { "(bad)", { XX } },
6390 { "(bad)", { XX } },
6391 { "(bad)", { XX } },
6392 { "(bad)", { XX } },
6393 { "(bad)", { XX } },
6394 { "(bad)", { XX } },
6395 /* 40 */
c0f3af97
L
6396 { "(bad)", { XX } },
6397 { "(bad)", { XX } },
6398 { "(bad)", { XX } },
d5d7db8e
L
6399 { "(bad)", { XX } },
6400 { "(bad)", { XX } },
6401 { "(bad)", { XX } },
6402 { "(bad)", { XX } },
6403 { "(bad)", { XX } },
85f10a01 6404 /* 48 */
85f10a01
MM
6405 { "(bad)", { XX } },
6406 { "(bad)", { XX } },
6407 { "(bad)", { XX } },
6408 { "(bad)", { XX } },
6409 { "(bad)", { XX } },
6410 { "(bad)", { XX } },
6411 { "(bad)", { XX } },
6412 { "(bad)", { XX } },
d5d7db8e 6413 /* 50 */
c0f3af97
L
6414 { MOD_TABLE (MOD_VEX_51) },
6415 { PREFIX_TABLE (PREFIX_VEX_51) },
6416 { PREFIX_TABLE (PREFIX_VEX_52) },
6417 { PREFIX_TABLE (PREFIX_VEX_53) },
6418 { "vandpX", { XM, Vex, EXx } },
6419 { "vandnpX", { XM, Vex, EXx } },
6420 { "vorpX", { XM, Vex, EXx } },
6421 { "vxorpX", { XM, Vex, EXx } },
6422 /* 58 */
6423 { PREFIX_TABLE (PREFIX_VEX_58) },
6424 { PREFIX_TABLE (PREFIX_VEX_59) },
6425 { PREFIX_TABLE (PREFIX_VEX_5A) },
6426 { PREFIX_TABLE (PREFIX_VEX_5B) },
6427 { PREFIX_TABLE (PREFIX_VEX_5C) },
6428 { PREFIX_TABLE (PREFIX_VEX_5D) },
6429 { PREFIX_TABLE (PREFIX_VEX_5E) },
6430 { PREFIX_TABLE (PREFIX_VEX_5F) },
6431 /* 60 */
6432 { PREFIX_TABLE (PREFIX_VEX_60) },
6433 { PREFIX_TABLE (PREFIX_VEX_61) },
6434 { PREFIX_TABLE (PREFIX_VEX_62) },
6435 { PREFIX_TABLE (PREFIX_VEX_63) },
6436 { PREFIX_TABLE (PREFIX_VEX_64) },
6437 { PREFIX_TABLE (PREFIX_VEX_65) },
6438 { PREFIX_TABLE (PREFIX_VEX_66) },
6439 { PREFIX_TABLE (PREFIX_VEX_67) },
6440 /* 68 */
6441 { PREFIX_TABLE (PREFIX_VEX_68) },
6442 { PREFIX_TABLE (PREFIX_VEX_69) },
6443 { PREFIX_TABLE (PREFIX_VEX_6A) },
6444 { PREFIX_TABLE (PREFIX_VEX_6B) },
6445 { PREFIX_TABLE (PREFIX_VEX_6C) },
6446 { PREFIX_TABLE (PREFIX_VEX_6D) },
6447 { PREFIX_TABLE (PREFIX_VEX_6E) },
6448 { PREFIX_TABLE (PREFIX_VEX_6F) },
6449 /* 70 */
6450 { PREFIX_TABLE (PREFIX_VEX_70) },
6451 { REG_TABLE (REG_VEX_71) },
6452 { REG_TABLE (REG_VEX_72) },
6453 { REG_TABLE (REG_VEX_73) },
6454 { PREFIX_TABLE (PREFIX_VEX_74) },
6455 { PREFIX_TABLE (PREFIX_VEX_75) },
6456 { PREFIX_TABLE (PREFIX_VEX_76) },
6457 { PREFIX_TABLE (PREFIX_VEX_77) },
6458 /* 78 */
85f10a01
MM
6459 { "(bad)", { XX } },
6460 { "(bad)", { XX } },
6461 { "(bad)", { XX } },
6462 { "(bad)", { XX } },
c0f3af97
L
6463 { PREFIX_TABLE (PREFIX_VEX_7C) },
6464 { PREFIX_TABLE (PREFIX_VEX_7D) },
6465 { PREFIX_TABLE (PREFIX_VEX_7E) },
6466 { PREFIX_TABLE (PREFIX_VEX_7F) },
6467 /* 80 */
85f10a01
MM
6468 { "(bad)", { XX } },
6469 { "(bad)", { XX } },
6470 { "(bad)", { XX } },
6471 { "(bad)", { XX } },
85f10a01
MM
6472 { "(bad)", { XX } },
6473 { "(bad)", { XX } },
6474 { "(bad)", { XX } },
6475 { "(bad)", { XX } },
c0f3af97 6476 /* 88 */
85f10a01
MM
6477 { "(bad)", { XX } },
6478 { "(bad)", { XX } },
6479 { "(bad)", { XX } },
6480 { "(bad)", { XX } },
6481 { "(bad)", { XX } },
6482 { "(bad)", { XX } },
6483 { "(bad)", { XX } },
6484 { "(bad)", { XX } },
c0f3af97 6485 /* 90 */
85f10a01
MM
6486 { "(bad)", { XX } },
6487 { "(bad)", { XX } },
6488 { "(bad)", { XX } },
6489 { "(bad)", { XX } },
6490 { "(bad)", { XX } },
6491 { "(bad)", { XX } },
6492 { "(bad)", { XX } },
85f10a01 6493 { "(bad)", { XX } },
c0f3af97 6494 /* 98 */
85f10a01
MM
6495 { "(bad)", { XX } },
6496 { "(bad)", { XX } },
6497 { "(bad)", { XX } },
d5d7db8e
L
6498 { "(bad)", { XX } },
6499 { "(bad)", { XX } },
6500 { "(bad)", { XX } },
6501 { "(bad)", { XX } },
6502 { "(bad)", { XX } },
c0f3af97 6503 /* a0 */
d5d7db8e
L
6504 { "(bad)", { XX } },
6505 { "(bad)", { XX } },
6506 { "(bad)", { XX } },
6507 { "(bad)", { XX } },
6508 { "(bad)", { XX } },
6509 { "(bad)", { XX } },
6510 { "(bad)", { XX } },
6511 { "(bad)", { XX } },
c0f3af97 6512 /* a8 */
d5d7db8e
L
6513 { "(bad)", { XX } },
6514 { "(bad)", { XX } },
6515 { "(bad)", { XX } },
6516 { "(bad)", { XX } },
6517 { "(bad)", { XX } },
6518 { "(bad)", { XX } },
c0f3af97 6519 { REG_TABLE (REG_VEX_AE) },
d5d7db8e 6520 { "(bad)", { XX } },
c0f3af97 6521 /* b0 */
d5d7db8e 6522 { "(bad)", { XX } },
d5d7db8e
L
6523 { "(bad)", { XX } },
6524 { "(bad)", { XX } },
6525 { "(bad)", { XX } },
6526 { "(bad)", { XX } },
6527 { "(bad)", { XX } },
6528 { "(bad)", { XX } },
6529 { "(bad)", { XX } },
c0f3af97 6530 /* b8 */
d5d7db8e 6531 { "(bad)", { XX } },
d5d7db8e
L
6532 { "(bad)", { XX } },
6533 { "(bad)", { XX } },
6534 { "(bad)", { XX } },
6535 { "(bad)", { XX } },
6536 { "(bad)", { XX } },
6537 { "(bad)", { XX } },
6538 { "(bad)", { XX } },
c0f3af97 6539 /* c0 */
d5d7db8e 6540 { "(bad)", { XX } },
d5d7db8e 6541 { "(bad)", { XX } },
c0f3af97 6542 { PREFIX_TABLE (PREFIX_VEX_C2) },
d5d7db8e 6543 { "(bad)", { XX } },
c0f3af97
L
6544 { PREFIX_TABLE (PREFIX_VEX_C4) },
6545 { PREFIX_TABLE (PREFIX_VEX_C5) },
6546 { "vshufpX", { XM, Vex, EXx, Ib } },
d5d7db8e 6547 { "(bad)", { XX } },
c0f3af97 6548 /* c8 */
d5d7db8e
L
6549 { "(bad)", { XX } },
6550 { "(bad)", { XX } },
6551 { "(bad)", { XX } },
6552 { "(bad)", { XX } },
6553 { "(bad)", { XX } },
d5d7db8e
L
6554 { "(bad)", { XX } },
6555 { "(bad)", { XX } },
6556 { "(bad)", { XX } },
c0f3af97
L
6557 /* d0 */
6558 { PREFIX_TABLE (PREFIX_VEX_D0) },
6559 { PREFIX_TABLE (PREFIX_VEX_D1) },
6560 { PREFIX_TABLE (PREFIX_VEX_D2) },
6561 { PREFIX_TABLE (PREFIX_VEX_D3) },
6562 { PREFIX_TABLE (PREFIX_VEX_D4) },
6563 { PREFIX_TABLE (PREFIX_VEX_D5) },
6564 { PREFIX_TABLE (PREFIX_VEX_D6) },
6565 { PREFIX_TABLE (PREFIX_VEX_D7) },
6566 /* d8 */
6567 { PREFIX_TABLE (PREFIX_VEX_D8) },
6568 { PREFIX_TABLE (PREFIX_VEX_D9) },
6569 { PREFIX_TABLE (PREFIX_VEX_DA) },
6570 { PREFIX_TABLE (PREFIX_VEX_DB) },
6571 { PREFIX_TABLE (PREFIX_VEX_DC) },
6572 { PREFIX_TABLE (PREFIX_VEX_DD) },
6573 { PREFIX_TABLE (PREFIX_VEX_DE) },
6574 { PREFIX_TABLE (PREFIX_VEX_DF) },
6575 /* e0 */
6576 { PREFIX_TABLE (PREFIX_VEX_E0) },
6577 { PREFIX_TABLE (PREFIX_VEX_E1) },
6578 { PREFIX_TABLE (PREFIX_VEX_E2) },
6579 { PREFIX_TABLE (PREFIX_VEX_E3) },
6580 { PREFIX_TABLE (PREFIX_VEX_E4) },
6581 { PREFIX_TABLE (PREFIX_VEX_E5) },
6582 { PREFIX_TABLE (PREFIX_VEX_E6) },
6583 { PREFIX_TABLE (PREFIX_VEX_E7) },
6584 /* e8 */
6585 { PREFIX_TABLE (PREFIX_VEX_E8) },
6586 { PREFIX_TABLE (PREFIX_VEX_E9) },
6587 { PREFIX_TABLE (PREFIX_VEX_EA) },
6588 { PREFIX_TABLE (PREFIX_VEX_EB) },
6589 { PREFIX_TABLE (PREFIX_VEX_EC) },
6590 { PREFIX_TABLE (PREFIX_VEX_ED) },
6591 { PREFIX_TABLE (PREFIX_VEX_EE) },
6592 { PREFIX_TABLE (PREFIX_VEX_EF) },
6593 /* f0 */
6594 { PREFIX_TABLE (PREFIX_VEX_F0) },
6595 { PREFIX_TABLE (PREFIX_VEX_F1) },
6596 { PREFIX_TABLE (PREFIX_VEX_F2) },
6597 { PREFIX_TABLE (PREFIX_VEX_F3) },
6598 { PREFIX_TABLE (PREFIX_VEX_F4) },
6599 { PREFIX_TABLE (PREFIX_VEX_F5) },
6600 { PREFIX_TABLE (PREFIX_VEX_F6) },
6601 { PREFIX_TABLE (PREFIX_VEX_F7) },
6602 /* f8 */
6603 { PREFIX_TABLE (PREFIX_VEX_F8) },
6604 { PREFIX_TABLE (PREFIX_VEX_F9) },
6605 { PREFIX_TABLE (PREFIX_VEX_FA) },
6606 { PREFIX_TABLE (PREFIX_VEX_FB) },
6607 { PREFIX_TABLE (PREFIX_VEX_FC) },
6608 { PREFIX_TABLE (PREFIX_VEX_FD) },
6609 { PREFIX_TABLE (PREFIX_VEX_FE) },
d5d7db8e 6610 { "(bad)", { XX } },
c0f3af97
L
6611 },
6612 /* VEX_0F38 */
6613 {
6614 /* 00 */
6615 { PREFIX_TABLE (PREFIX_VEX_3800) },
6616 { PREFIX_TABLE (PREFIX_VEX_3801) },
6617 { PREFIX_TABLE (PREFIX_VEX_3802) },
6618 { PREFIX_TABLE (PREFIX_VEX_3803) },
6619 { PREFIX_TABLE (PREFIX_VEX_3804) },
6620 { PREFIX_TABLE (PREFIX_VEX_3805) },
6621 { PREFIX_TABLE (PREFIX_VEX_3806) },
6622 { PREFIX_TABLE (PREFIX_VEX_3807) },
6623 /* 08 */
6624 { PREFIX_TABLE (PREFIX_VEX_3808) },
6625 { PREFIX_TABLE (PREFIX_VEX_3809) },
6626 { PREFIX_TABLE (PREFIX_VEX_380A) },
6627 { PREFIX_TABLE (PREFIX_VEX_380B) },
6628 { PREFIX_TABLE (PREFIX_VEX_380C) },
6629 { PREFIX_TABLE (PREFIX_VEX_380D) },
6630 { PREFIX_TABLE (PREFIX_VEX_380E) },
6631 { PREFIX_TABLE (PREFIX_VEX_380F) },
6632 /* 10 */
d5d7db8e
L
6633 { "(bad)", { XX } },
6634 { "(bad)", { XX } },
6635 { "(bad)", { XX } },
6636 { "(bad)", { XX } },
d5d7db8e
L
6637 { "(bad)", { XX } },
6638 { "(bad)", { XX } },
6639 { "(bad)", { XX } },
c0f3af97
L
6640 { PREFIX_TABLE (PREFIX_VEX_3817) },
6641 /* 18 */
6642 { PREFIX_TABLE (PREFIX_VEX_3818) },
6643 { PREFIX_TABLE (PREFIX_VEX_3819) },
6644 { PREFIX_TABLE (PREFIX_VEX_381A) },
d5d7db8e 6645 { "(bad)", { XX } },
c0f3af97
L
6646 { PREFIX_TABLE (PREFIX_VEX_381C) },
6647 { PREFIX_TABLE (PREFIX_VEX_381D) },
6648 { PREFIX_TABLE (PREFIX_VEX_381E) },
d5d7db8e 6649 { "(bad)", { XX } },
c0f3af97
L
6650 /* 20 */
6651 { PREFIX_TABLE (PREFIX_VEX_3820) },
6652 { PREFIX_TABLE (PREFIX_VEX_3821) },
6653 { PREFIX_TABLE (PREFIX_VEX_3822) },
6654 { PREFIX_TABLE (PREFIX_VEX_3823) },
6655 { PREFIX_TABLE (PREFIX_VEX_3824) },
6656 { PREFIX_TABLE (PREFIX_VEX_3825) },
d5d7db8e
L
6657 { "(bad)", { XX } },
6658 { "(bad)", { XX } },
c0f3af97
L
6659 /* 28 */
6660 { PREFIX_TABLE (PREFIX_VEX_3828) },
6661 { PREFIX_TABLE (PREFIX_VEX_3829) },
6662 { PREFIX_TABLE (PREFIX_VEX_382A) },
6663 { PREFIX_TABLE (PREFIX_VEX_382B) },
6664 { PREFIX_TABLE (PREFIX_VEX_382C) },
6665 { PREFIX_TABLE (PREFIX_VEX_382D) },
6666 { PREFIX_TABLE (PREFIX_VEX_382E) },
6667 { PREFIX_TABLE (PREFIX_VEX_382F) },
6668 /* 30 */
6669 { PREFIX_TABLE (PREFIX_VEX_3830) },
6670 { PREFIX_TABLE (PREFIX_VEX_3831) },
6671 { PREFIX_TABLE (PREFIX_VEX_3832) },
6672 { PREFIX_TABLE (PREFIX_VEX_3833) },
6673 { PREFIX_TABLE (PREFIX_VEX_3834) },
6674 { PREFIX_TABLE (PREFIX_VEX_3835) },
6675 { "(bad)", { XX } },
6676 { PREFIX_TABLE (PREFIX_VEX_3837) },
6677 /* 38 */
6678 { PREFIX_TABLE (PREFIX_VEX_3838) },
6679 { PREFIX_TABLE (PREFIX_VEX_3839) },
6680 { PREFIX_TABLE (PREFIX_VEX_383A) },
6681 { PREFIX_TABLE (PREFIX_VEX_383B) },
6682 { PREFIX_TABLE (PREFIX_VEX_383C) },
6683 { PREFIX_TABLE (PREFIX_VEX_383D) },
6684 { PREFIX_TABLE (PREFIX_VEX_383E) },
6685 { PREFIX_TABLE (PREFIX_VEX_383F) },
6686 /* 40 */
6687 { PREFIX_TABLE (PREFIX_VEX_3840) },
6688 { PREFIX_TABLE (PREFIX_VEX_3841) },
d5d7db8e 6689 { "(bad)", { XX } },
d5d7db8e
L
6690 { "(bad)", { XX } },
6691 { "(bad)", { XX } },
6692 { "(bad)", { XX } },
6693 { "(bad)", { XX } },
6694 { "(bad)", { XX } },
c0f3af97 6695 /* 48 */
d5d7db8e
L
6696 { "(bad)", { XX } },
6697 { "(bad)", { XX } },
6698 { "(bad)", { XX } },
d5d7db8e
L
6699 { "(bad)", { XX } },
6700 { "(bad)", { XX } },
6701 { "(bad)", { XX } },
6702 { "(bad)", { XX } },
6703 { "(bad)", { XX } },
c0f3af97 6704 /* 50 */
d5d7db8e
L
6705 { "(bad)", { XX } },
6706 { "(bad)", { XX } },
6707 { "(bad)", { XX } },
d5d7db8e
L
6708 { "(bad)", { XX } },
6709 { "(bad)", { XX } },
6710 { "(bad)", { XX } },
6711 { "(bad)", { XX } },
6712 { "(bad)", { XX } },
c0f3af97 6713 /* 58 */
d5d7db8e
L
6714 { "(bad)", { XX } },
6715 { "(bad)", { XX } },
6716 { "(bad)", { XX } },
d5d7db8e
L
6717 { "(bad)", { XX } },
6718 { "(bad)", { XX } },
6719 { "(bad)", { XX } },
6720 { "(bad)", { XX } },
6721 { "(bad)", { XX } },
c0f3af97 6722 /* 60 */
d5d7db8e
L
6723 { "(bad)", { XX } },
6724 { "(bad)", { XX } },
6725 { "(bad)", { XX } },
d5d7db8e
L
6726 { "(bad)", { XX } },
6727 { "(bad)", { XX } },
6728 { "(bad)", { XX } },
6729 { "(bad)", { XX } },
6730 { "(bad)", { XX } },
c0f3af97 6731 /* 68 */
d5d7db8e
L
6732 { "(bad)", { XX } },
6733 { "(bad)", { XX } },
6734 { "(bad)", { XX } },
d5d7db8e
L
6735 { "(bad)", { XX } },
6736 { "(bad)", { XX } },
6737 { "(bad)", { XX } },
6738 { "(bad)", { XX } },
6739 { "(bad)", { XX } },
c0f3af97 6740 /* 70 */
d5d7db8e
L
6741 { "(bad)", { XX } },
6742 { "(bad)", { XX } },
6743 { "(bad)", { XX } },
d5d7db8e
L
6744 { "(bad)", { XX } },
6745 { "(bad)", { XX } },
6746 { "(bad)", { XX } },
6747 { "(bad)", { XX } },
6748 { "(bad)", { XX } },
c0f3af97 6749 /* 78 */
d5d7db8e
L
6750 { "(bad)", { XX } },
6751 { "(bad)", { XX } },
6752 { "(bad)", { XX } },
d5d7db8e
L
6753 { "(bad)", { XX } },
6754 { "(bad)", { XX } },
6755 { "(bad)", { XX } },
6756 { "(bad)", { XX } },
6757 { "(bad)", { XX } },
c0f3af97 6758 /* 80 */
d5d7db8e
L
6759 { "(bad)", { XX } },
6760 { "(bad)", { XX } },
6761 { "(bad)", { XX } },
d5d7db8e
L
6762 { "(bad)", { XX } },
6763 { "(bad)", { XX } },
6764 { "(bad)", { XX } },
6765 { "(bad)", { XX } },
6766 { "(bad)", { XX } },
c0f3af97 6767 /* 88 */
d5d7db8e
L
6768 { "(bad)", { XX } },
6769 { "(bad)", { XX } },
6770 { "(bad)", { XX } },
d5d7db8e
L
6771 { "(bad)", { XX } },
6772 { "(bad)", { XX } },
6773 { "(bad)", { XX } },
6774 { "(bad)", { XX } },
6775 { "(bad)", { XX } },
c0f3af97 6776 /* 90 */
d5d7db8e
L
6777 { "(bad)", { XX } },
6778 { "(bad)", { XX } },
6779 { "(bad)", { XX } },
d5d7db8e
L
6780 { "(bad)", { XX } },
6781 { "(bad)", { XX } },
6782 { "(bad)", { XX } },
0bfee649
L
6783 { PREFIX_TABLE (PREFIX_VEX_3896) },
6784 { PREFIX_TABLE (PREFIX_VEX_3897) },
c0f3af97 6785 /* 98 */
0bfee649
L
6786 { PREFIX_TABLE (PREFIX_VEX_3898) },
6787 { PREFIX_TABLE (PREFIX_VEX_3899) },
6788 { PREFIX_TABLE (PREFIX_VEX_389A) },
6789 { PREFIX_TABLE (PREFIX_VEX_389B) },
6790 { PREFIX_TABLE (PREFIX_VEX_389C) },
6791 { PREFIX_TABLE (PREFIX_VEX_389D) },
6792 { PREFIX_TABLE (PREFIX_VEX_389E) },
6793 { PREFIX_TABLE (PREFIX_VEX_389F) },
c0f3af97 6794 /* a0 */
d5d7db8e
L
6795 { "(bad)", { XX } },
6796 { "(bad)", { XX } },
6797 { "(bad)", { XX } },
d5d7db8e
L
6798 { "(bad)", { XX } },
6799 { "(bad)", { XX } },
6800 { "(bad)", { XX } },
0bfee649
L
6801 { PREFIX_TABLE (PREFIX_VEX_38A6) },
6802 { PREFIX_TABLE (PREFIX_VEX_38A7) },
c0f3af97 6803 /* a8 */
0bfee649
L
6804 { PREFIX_TABLE (PREFIX_VEX_38A8) },
6805 { PREFIX_TABLE (PREFIX_VEX_38A9) },
6806 { PREFIX_TABLE (PREFIX_VEX_38AA) },
6807 { PREFIX_TABLE (PREFIX_VEX_38AB) },
6808 { PREFIX_TABLE (PREFIX_VEX_38AC) },
6809 { PREFIX_TABLE (PREFIX_VEX_38AD) },
6810 { PREFIX_TABLE (PREFIX_VEX_38AE) },
6811 { PREFIX_TABLE (PREFIX_VEX_38AF) },
c0f3af97 6812 /* b0 */
d5d7db8e
L
6813 { "(bad)", { XX } },
6814 { "(bad)", { XX } },
6815 { "(bad)", { XX } },
6816 { "(bad)", { XX } },
6817 { "(bad)", { XX } },
6818 { "(bad)", { XX } },
0bfee649
L
6819 { PREFIX_TABLE (PREFIX_VEX_38B6) },
6820 { PREFIX_TABLE (PREFIX_VEX_38B7) },
c0f3af97 6821 /* b8 */
0bfee649
L
6822 { PREFIX_TABLE (PREFIX_VEX_38B8) },
6823 { PREFIX_TABLE (PREFIX_VEX_38B9) },
6824 { PREFIX_TABLE (PREFIX_VEX_38BA) },
6825 { PREFIX_TABLE (PREFIX_VEX_38BB) },
6826 { PREFIX_TABLE (PREFIX_VEX_38BC) },
6827 { PREFIX_TABLE (PREFIX_VEX_38BD) },
6828 { PREFIX_TABLE (PREFIX_VEX_38BE) },
6829 { PREFIX_TABLE (PREFIX_VEX_38BF) },
c0f3af97 6830 /* c0 */
d5d7db8e
L
6831 { "(bad)", { XX } },
6832 { "(bad)", { XX } },
6833 { "(bad)", { XX } },
6834 { "(bad)", { XX } },
d5d7db8e
L
6835 { "(bad)", { XX } },
6836 { "(bad)", { XX } },
6837 { "(bad)", { XX } },
6838 { "(bad)", { XX } },
c0f3af97 6839 /* c8 */
d5d7db8e
L
6840 { "(bad)", { XX } },
6841 { "(bad)", { XX } },
6842 { "(bad)", { XX } },
6843 { "(bad)", { XX } },
d5d7db8e 6844 { "(bad)", { XX } },
d5d7db8e
L
6845 { "(bad)", { XX } },
6846 { "(bad)", { XX } },
d5d7db8e 6847 { "(bad)", { XX } },
c0f3af97 6848 /* d0 */
d5d7db8e
L
6849 { "(bad)", { XX } },
6850 { "(bad)", { XX } },
d5d7db8e
L
6851 { "(bad)", { XX } },
6852 { "(bad)", { XX } },
6853 { "(bad)", { XX } },
6854 { "(bad)", { XX } },
d5d7db8e 6855 { "(bad)", { XX } },
d5d7db8e 6856 { "(bad)", { XX } },
c0f3af97 6857 /* d8 */
d5d7db8e 6858 { "(bad)", { XX } },
d5d7db8e
L
6859 { "(bad)", { XX } },
6860 { "(bad)", { XX } },
a5ff0eb2
L
6861 { PREFIX_TABLE (PREFIX_VEX_38DB) },
6862 { PREFIX_TABLE (PREFIX_VEX_38DC) },
6863 { PREFIX_TABLE (PREFIX_VEX_38DD) },
6864 { PREFIX_TABLE (PREFIX_VEX_38DE) },
6865 { PREFIX_TABLE (PREFIX_VEX_38DF) },
c0f3af97 6866 /* e0 */
d5d7db8e 6867 { "(bad)", { XX } },
d5d7db8e
L
6868 { "(bad)", { XX } },
6869 { "(bad)", { XX } },
6870 { "(bad)", { XX } },
6871 { "(bad)", { XX } },
d5d7db8e
L
6872 { "(bad)", { XX } },
6873 { "(bad)", { XX } },
6874 { "(bad)", { XX } },
c0f3af97 6875 /* e8 */
d5d7db8e
L
6876 { "(bad)", { XX } },
6877 { "(bad)", { XX } },
6878 { "(bad)", { XX } },
6879 { "(bad)", { XX } },
6880 { "(bad)", { XX } },
d5d7db8e
L
6881 { "(bad)", { XX } },
6882 { "(bad)", { XX } },
6883 { "(bad)", { XX } },
c0f3af97 6884 /* f0 */
d5d7db8e
L
6885 { "(bad)", { XX } },
6886 { "(bad)", { XX } },
6887 { "(bad)", { XX } },
6888 { "(bad)", { XX } },
6889 { "(bad)", { XX } },
d5d7db8e
L
6890 { "(bad)", { XX } },
6891 { "(bad)", { XX } },
6892 { "(bad)", { XX } },
c0f3af97 6893 /* f8 */
d5d7db8e
L
6894 { "(bad)", { XX } },
6895 { "(bad)", { XX } },
6896 { "(bad)", { XX } },
6897 { "(bad)", { XX } },
6898 { "(bad)", { XX } },
d5d7db8e
L
6899 { "(bad)", { XX } },
6900 { "(bad)", { XX } },
6901 { "(bad)", { XX } },
c0f3af97
L
6902 },
6903 /* VEX_0F3A */
6904 {
6905 /* 00 */
d5d7db8e
L
6906 { "(bad)", { XX } },
6907 { "(bad)", { XX } },
6908 { "(bad)", { XX } },
6909 { "(bad)", { XX } },
c0f3af97
L
6910 { PREFIX_TABLE (PREFIX_VEX_3A04) },
6911 { PREFIX_TABLE (PREFIX_VEX_3A05) },
6912 { PREFIX_TABLE (PREFIX_VEX_3A06) },
d5d7db8e 6913 { "(bad)", { XX } },
c0f3af97
L
6914 /* 08 */
6915 { PREFIX_TABLE (PREFIX_VEX_3A08) },
6916 { PREFIX_TABLE (PREFIX_VEX_3A09) },
6917 { PREFIX_TABLE (PREFIX_VEX_3A0A) },
6918 { PREFIX_TABLE (PREFIX_VEX_3A0B) },
6919 { PREFIX_TABLE (PREFIX_VEX_3A0C) },
6920 { PREFIX_TABLE (PREFIX_VEX_3A0D) },
6921 { PREFIX_TABLE (PREFIX_VEX_3A0E) },
6922 { PREFIX_TABLE (PREFIX_VEX_3A0F) },
6923 /* 10 */
d5d7db8e
L
6924 { "(bad)", { XX } },
6925 { "(bad)", { XX } },
6926 { "(bad)", { XX } },
6927 { "(bad)", { XX } },
c0f3af97
L
6928 { PREFIX_TABLE (PREFIX_VEX_3A14) },
6929 { PREFIX_TABLE (PREFIX_VEX_3A15) },
6930 { PREFIX_TABLE (PREFIX_VEX_3A16) },
6931 { PREFIX_TABLE (PREFIX_VEX_3A17) },
6932 /* 18 */
6933 { PREFIX_TABLE (PREFIX_VEX_3A18) },
6934 { PREFIX_TABLE (PREFIX_VEX_3A19) },
d5d7db8e
L
6935 { "(bad)", { XX } },
6936 { "(bad)", { XX } },
6937 { "(bad)", { XX } },
6938 { "(bad)", { XX } },
d5d7db8e
L
6939 { "(bad)", { XX } },
6940 { "(bad)", { XX } },
c0f3af97
L
6941 /* 20 */
6942 { PREFIX_TABLE (PREFIX_VEX_3A20) },
6943 { PREFIX_TABLE (PREFIX_VEX_3A21) },
6944 { PREFIX_TABLE (PREFIX_VEX_3A22) },
d5d7db8e
L
6945 { "(bad)", { XX } },
6946 { "(bad)", { XX } },
6947 { "(bad)", { XX } },
6948 { "(bad)", { XX } },
6949 { "(bad)", { XX } },
c0f3af97 6950 /* 28 */
d5d7db8e 6951 { "(bad)", { XX } },
d5d7db8e
L
6952 { "(bad)", { XX } },
6953 { "(bad)", { XX } },
6954 { "(bad)", { XX } },
6955 { "(bad)", { XX } },
6956 { "(bad)", { XX } },
6957 { "(bad)", { XX } },
6958 { "(bad)", { XX } },
c0f3af97 6959 /* 30 */
d5d7db8e 6960 { "(bad)", { XX } },
d5d7db8e
L
6961 { "(bad)", { XX } },
6962 { "(bad)", { XX } },
6963 { "(bad)", { XX } },
6964 { "(bad)", { XX } },
6965 { "(bad)", { XX } },
6966 { "(bad)", { XX } },
6967 { "(bad)", { XX } },
c0f3af97 6968 /* 38 */
d5d7db8e 6969 { "(bad)", { XX } },
d5d7db8e
L
6970 { "(bad)", { XX } },
6971 { "(bad)", { XX } },
6972 { "(bad)", { XX } },
6973 { "(bad)", { XX } },
6974 { "(bad)", { XX } },
6975 { "(bad)", { XX } },
6976 { "(bad)", { XX } },
c0f3af97
L
6977 /* 40 */
6978 { PREFIX_TABLE (PREFIX_VEX_3A40) },
6979 { PREFIX_TABLE (PREFIX_VEX_3A41) },
6980 { PREFIX_TABLE (PREFIX_VEX_3A42) },
d5d7db8e 6981 { "(bad)", { XX } },
ce2f5b3c 6982 { PREFIX_TABLE (PREFIX_VEX_3A44) },
d5d7db8e
L
6983 { "(bad)", { XX } },
6984 { "(bad)", { XX } },
6985 { "(bad)", { XX } },
c0f3af97 6986 /* 48 */
0bfee649
L
6987 { "(bad)", { XX } },
6988 { "(bad)", { XX } },
c0f3af97
L
6989 { PREFIX_TABLE (PREFIX_VEX_3A4A) },
6990 { PREFIX_TABLE (PREFIX_VEX_3A4B) },
6991 { PREFIX_TABLE (PREFIX_VEX_3A4C) },
d5d7db8e
L
6992 { "(bad)", { XX } },
6993 { "(bad)", { XX } },
6994 { "(bad)", { XX } },
c0f3af97 6995 /* 50 */
d5d7db8e 6996 { "(bad)", { XX } },
d5d7db8e
L
6997 { "(bad)", { XX } },
6998 { "(bad)", { XX } },
6999 { "(bad)", { XX } },
7000 { "(bad)", { XX } },
7001 { "(bad)", { XX } },
7002 { "(bad)", { XX } },
7003 { "(bad)", { XX } },
c0f3af97 7004 /* 58 */
d5d7db8e 7005 { "(bad)", { XX } },
d5d7db8e
L
7006 { "(bad)", { XX } },
7007 { "(bad)", { XX } },
7008 { "(bad)", { XX } },
922d8de8
DR
7009 { PREFIX_TABLE (PREFIX_VEX_3A5C) },
7010 { PREFIX_TABLE (PREFIX_VEX_3A5D) },
7011 { PREFIX_TABLE (PREFIX_VEX_3A5E) },
7012 { PREFIX_TABLE (PREFIX_VEX_3A5F) },
c0f3af97
L
7013 /* 60 */
7014 { PREFIX_TABLE (PREFIX_VEX_3A60) },
7015 { PREFIX_TABLE (PREFIX_VEX_3A61) },
7016 { PREFIX_TABLE (PREFIX_VEX_3A62) },
7017 { PREFIX_TABLE (PREFIX_VEX_3A63) },
d5d7db8e
L
7018 { "(bad)", { XX } },
7019 { "(bad)", { XX } },
7020 { "(bad)", { XX } },
7021 { "(bad)", { XX } },
c0f3af97 7022 /* 68 */
922d8de8
DR
7023 { PREFIX_TABLE (PREFIX_VEX_3A68) },
7024 { PREFIX_TABLE (PREFIX_VEX_3A69) },
7025 { PREFIX_TABLE (PREFIX_VEX_3A6A) },
7026 { PREFIX_TABLE (PREFIX_VEX_3A6B) },
7027 { PREFIX_TABLE (PREFIX_VEX_3A6C) },
7028 { PREFIX_TABLE (PREFIX_VEX_3A6D) },
7029 { PREFIX_TABLE (PREFIX_VEX_3A6E) },
7030 { PREFIX_TABLE (PREFIX_VEX_3A6F) },
c0f3af97 7031 /* 70 */
d5d7db8e 7032 { "(bad)", { XX } },
d5d7db8e
L
7033 { "(bad)", { XX } },
7034 { "(bad)", { XX } },
7035 { "(bad)", { XX } },
7036 { "(bad)", { XX } },
7037 { "(bad)", { XX } },
7038 { "(bad)", { XX } },
7039 { "(bad)", { XX } },
c0f3af97 7040 /* 78 */
922d8de8
DR
7041 { PREFIX_TABLE (PREFIX_VEX_3A78) },
7042 { PREFIX_TABLE (PREFIX_VEX_3A79) },
7043 { PREFIX_TABLE (PREFIX_VEX_3A7A) },
7044 { PREFIX_TABLE (PREFIX_VEX_3A7B) },
7045 { PREFIX_TABLE (PREFIX_VEX_3A7C) },
7046 { PREFIX_TABLE (PREFIX_VEX_3A7D) },
7047 { PREFIX_TABLE (PREFIX_VEX_3A7E) },
7048 { PREFIX_TABLE (PREFIX_VEX_3A7F) },
c0f3af97 7049 /* 80 */
d5d7db8e 7050 { "(bad)", { XX } },
d5d7db8e
L
7051 { "(bad)", { XX } },
7052 { "(bad)", { XX } },
7053 { "(bad)", { XX } },
7054 { "(bad)", { XX } },
7055 { "(bad)", { XX } },
7056 { "(bad)", { XX } },
7057 { "(bad)", { XX } },
c0f3af97 7058 /* 88 */
d5d7db8e 7059 { "(bad)", { XX } },
d5d7db8e
L
7060 { "(bad)", { XX } },
7061 { "(bad)", { XX } },
7062 { "(bad)", { XX } },
7063 { "(bad)", { XX } },
7064 { "(bad)", { XX } },
7065 { "(bad)", { XX } },
7066 { "(bad)", { XX } },
c0f3af97 7067 /* 90 */
d5d7db8e 7068 { "(bad)", { XX } },
d5d7db8e
L
7069 { "(bad)", { XX } },
7070 { "(bad)", { XX } },
7071 { "(bad)", { XX } },
7072 { "(bad)", { XX } },
7073 { "(bad)", { XX } },
7074 { "(bad)", { XX } },
7075 { "(bad)", { XX } },
c0f3af97 7076 /* 98 */
d5d7db8e 7077 { "(bad)", { XX } },
d5d7db8e
L
7078 { "(bad)", { XX } },
7079 { "(bad)", { XX } },
7080 { "(bad)", { XX } },
7081 { "(bad)", { XX } },
7082 { "(bad)", { XX } },
7083 { "(bad)", { XX } },
7084 { "(bad)", { XX } },
c0f3af97 7085 /* a0 */
d5d7db8e 7086 { "(bad)", { XX } },
85f10a01
MM
7087 { "(bad)", { XX } },
7088 { "(bad)", { XX } },
d5d7db8e
L
7089 { "(bad)", { XX } },
7090 { "(bad)", { XX } },
7091 { "(bad)", { XX } },
7092 { "(bad)", { XX } },
7093 { "(bad)", { XX } },
c0f3af97 7094 /* a8 */
d5d7db8e 7095 { "(bad)", { XX } },
d5d7db8e
L
7096 { "(bad)", { XX } },
7097 { "(bad)", { XX } },
7098 { "(bad)", { XX } },
7099 { "(bad)", { XX } },
7100 { "(bad)", { XX } },
7101 { "(bad)", { XX } },
7102 { "(bad)", { XX } },
c0f3af97
L
7103 /* b0 */
7104 { "(bad)", { XX } },
7105 { "(bad)", { XX } },
7106 { "(bad)", { XX } },
7107 { "(bad)", { XX } },
7108 { "(bad)", { XX } },
7109 { "(bad)", { XX } },
7110 { "(bad)", { XX } },
7111 { "(bad)", { XX } },
7112 /* b8 */
7113 { "(bad)", { XX } },
7114 { "(bad)", { XX } },
7115 { "(bad)", { XX } },
7116 { "(bad)", { XX } },
7117 { "(bad)", { XX } },
7118 { "(bad)", { XX } },
7119 { "(bad)", { XX } },
7120 { "(bad)", { XX } },
7121 /* c0 */
7122 { "(bad)", { XX } },
7123 { "(bad)", { XX } },
7124 { "(bad)", { XX } },
7125 { "(bad)", { XX } },
7126 { "(bad)", { XX } },
7127 { "(bad)", { XX } },
7128 { "(bad)", { XX } },
7129 { "(bad)", { XX } },
7130 /* c8 */
7131 { "(bad)", { XX } },
7132 { "(bad)", { XX } },
d5d7db8e 7133 { "(bad)", { XX } },
d5d7db8e
L
7134 { "(bad)", { XX } },
7135 { "(bad)", { XX } },
7136 { "(bad)", { XX } },
7137 { "(bad)", { XX } },
7138 { "(bad)", { XX } },
c0f3af97
L
7139 /* d0 */
7140 { "(bad)", { XX } },
7141 { "(bad)", { XX } },
7142 { "(bad)", { XX } },
d5d7db8e
L
7143 { "(bad)", { XX } },
7144 { "(bad)", { XX } },
7145 { "(bad)", { XX } },
c0f3af97
L
7146 { "(bad)", { XX } },
7147 { "(bad)", { XX } },
7148 /* d8 */
7149 { "(bad)", { XX } },
d5d7db8e
L
7150 { "(bad)", { XX } },
7151 { "(bad)", { XX } },
7152 { "(bad)", { XX } },
7153 { "(bad)", { XX } },
7154 { "(bad)", { XX } },
7155 { "(bad)", { XX } },
a5ff0eb2 7156 { PREFIX_TABLE (PREFIX_VEX_3ADF) },
c0f3af97 7157 /* e0 */
d5d7db8e 7158 { "(bad)", { XX } },
d5d7db8e
L
7159 { "(bad)", { XX } },
7160 { "(bad)", { XX } },
7161 { "(bad)", { XX } },
7162 { "(bad)", { XX } },
7163 { "(bad)", { XX } },
7164 { "(bad)", { XX } },
7165 { "(bad)", { XX } },
c0f3af97 7166 /* e8 */
d5d7db8e 7167 { "(bad)", { XX } },
d5d7db8e
L
7168 { "(bad)", { XX } },
7169 { "(bad)", { XX } },
7170 { "(bad)", { XX } },
7171 { "(bad)", { XX } },
7172 { "(bad)", { XX } },
7173 { "(bad)", { XX } },
7174 { "(bad)", { XX } },
c0f3af97 7175 /* f0 */
d5d7db8e 7176 { "(bad)", { XX } },
d5d7db8e
L
7177 { "(bad)", { XX } },
7178 { "(bad)", { XX } },
7179 { "(bad)", { XX } },
7180 { "(bad)", { XX } },
7181 { "(bad)", { XX } },
7182 { "(bad)", { XX } },
7183 { "(bad)", { XX } },
c0f3af97 7184 /* f8 */
d5d7db8e 7185 { "(bad)", { XX } },
d5d7db8e
L
7186 { "(bad)", { XX } },
7187 { "(bad)", { XX } },
7188 { "(bad)", { XX } },
7189 { "(bad)", { XX } },
7190 { "(bad)", { XX } },
7191 { "(bad)", { XX } },
7192 { "(bad)", { XX } },
c0f3af97
L
7193 },
7194};
7195
7196static const struct dis386 vex_len_table[][2] = {
7197 /* VEX_LEN_10_P_1 */
7198 {
7199 { "vmovss", { XMVex, Vex128, EXd } },
d5d7db8e 7200 { "(bad)", { XX } },
c0f3af97
L
7201 },
7202
7203 /* VEX_LEN_10_P_3 */
7204 {
7205 { "vmovsd", { XMVex, Vex128, EXq } },
d5d7db8e 7206 { "(bad)", { XX } },
c0f3af97
L
7207 },
7208
7209 /* VEX_LEN_11_P_1 */
7210 {
fa99fab2 7211 { "vmovss", { EXdVexS, Vex128, XM } },
d5d7db8e 7212 { "(bad)", { XX } },
c0f3af97
L
7213 },
7214
7215 /* VEX_LEN_11_P_3 */
7216 {
fa99fab2 7217 { "vmovsd", { EXqVexS, Vex128, XM } },
d5d7db8e 7218 { "(bad)", { XX } },
c0f3af97
L
7219 },
7220
7221 /* VEX_LEN_12_P_0_M_0 */
7222 {
7223 { "vmovlps", { XM, Vex128, EXq } },
d5d7db8e 7224 { "(bad)", { XX } },
c0f3af97
L
7225 },
7226
7227 /* VEX_LEN_12_P_0_M_1 */
7228 {
7229 { "vmovhlps", { XM, Vex128, EXq } },
d5d7db8e 7230 { "(bad)", { XX } },
c0f3af97
L
7231 },
7232
7233 /* VEX_LEN_12_P_2 */
7234 {
7235 { "vmovlpd", { XM, Vex128, EXq } },
d5d7db8e 7236 { "(bad)", { XX } },
c0f3af97
L
7237 },
7238
7239 /* VEX_LEN_13_M_0 */
7240 {
7241 { "vmovlpX", { EXq, XM } },
85f10a01 7242 { "(bad)", { XX } },
c0f3af97
L
7243 },
7244
7245 /* VEX_LEN_16_P_0_M_0 */
7246 {
7247 { "vmovhps", { XM, Vex128, EXq } },
85f10a01 7248 { "(bad)", { XX } },
c0f3af97
L
7249 },
7250
7251 /* VEX_LEN_16_P_0_M_1 */
7252 {
7253 { "vmovlhps", { XM, Vex128, EXq } },
85f10a01 7254 { "(bad)", { XX } },
c0f3af97
L
7255 },
7256
7257 /* VEX_LEN_16_P_2 */
7258 {
7259 { "vmovhpd", { XM, Vex128, EXq } },
85f10a01 7260 { "(bad)", { XX } },
c0f3af97
L
7261 },
7262
7263 /* VEX_LEN_17_M_0 */
7264 {
7265 { "vmovhpX", { EXq, XM } },
85f10a01 7266 { "(bad)", { XX } },
c0f3af97
L
7267 },
7268
7269 /* VEX_LEN_2A_P_1 */
7270 {
7271 { "vcvtsi2ss%LQ", { XM, Vex128, Ev } },
d5d7db8e 7272 { "(bad)", { XX } },
c0f3af97
L
7273 },
7274
7275 /* VEX_LEN_2A_P_3 */
7276 {
7277 { "vcvtsi2sd%LQ", { XM, Vex128, Ev } },
d5d7db8e 7278 { "(bad)", { XX } },
c0f3af97
L
7279 },
7280
c0f3af97
L
7281 /* VEX_LEN_2C_P_1 */
7282 {
7283 { "vcvttss2siY", { Gv, EXd } },
d5d7db8e 7284 { "(bad)", { XX } },
c0f3af97
L
7285 },
7286
7287 /* VEX_LEN_2C_P_3 */
7288 {
7289 { "vcvttsd2siY", { Gv, EXq } },
d5d7db8e 7290 { "(bad)", { XX } },
c0f3af97
L
7291 },
7292
7293 /* VEX_LEN_2D_P_1 */
7294 {
7295 { "vcvtss2siY", { Gv, EXd } },
85f10a01 7296 { "(bad)", { XX } },
c0f3af97
L
7297 },
7298
7299 /* VEX_LEN_2D_P_3 */
7300 {
7301 { "vcvtsd2siY", { Gv, EXq } },
d5d7db8e 7302 { "(bad)", { XX } },
c0f3af97
L
7303 },
7304
7305 /* VEX_LEN_2E_P_0 */
7306 {
7307 { "vucomiss", { XM, EXd } },
d5d7db8e 7308 { "(bad)", { XX } },
c0f3af97
L
7309 },
7310
7311 /* VEX_LEN_2E_P_2 */
7312 {
7313 { "vucomisd", { XM, EXq } },
d5d7db8e 7314 { "(bad)", { XX } },
c0f3af97
L
7315 },
7316
7317 /* VEX_LEN_2F_P_0 */
7318 {
7319 { "vcomiss", { XM, EXd } },
d5d7db8e 7320 { "(bad)", { XX } },
c0f3af97
L
7321 },
7322
7323 /* VEX_LEN_2F_P_2 */
7324 {
7325 { "vcomisd", { XM, EXq } },
d5d7db8e 7326 { "(bad)", { XX } },
c0f3af97
L
7327 },
7328
7329 /* VEX_LEN_51_P_1 */
7330 {
7331 { "vsqrtss", { XM, Vex128, EXd } },
d5d7db8e 7332 { "(bad)", { XX } },
c0f3af97
L
7333 },
7334
7335 /* VEX_LEN_51_P_3 */
7336 {
7337 { "vsqrtsd", { XM, Vex128, EXq } },
d5d7db8e 7338 { "(bad)", { XX } },
c0f3af97
L
7339 },
7340
7341 /* VEX_LEN_52_P_1 */
7342 {
7343 { "vrsqrtss", { XM, Vex128, EXd } },
d5d7db8e 7344 { "(bad)", { XX } },
c0f3af97
L
7345 },
7346
7347 /* VEX_LEN_53_P_1 */
7348 {
7349 { "vrcpss", { XM, Vex128, EXd } },
d5d7db8e 7350 { "(bad)", { XX } },
c0f3af97
L
7351 },
7352
7353 /* VEX_LEN_58_P_1 */
7354 {
7355 { "vaddss", { XM, Vex128, EXd } },
d5d7db8e 7356 { "(bad)", { XX } },
c0f3af97
L
7357 },
7358
7359 /* VEX_LEN_58_P_3 */
7360 {
7361 { "vaddsd", { XM, Vex128, EXq } },
d5d7db8e 7362 { "(bad)", { XX } },
c0f3af97
L
7363 },
7364
7365 /* VEX_LEN_59_P_1 */
7366 {
7367 { "vmulss", { XM, Vex128, EXd } },
d5d7db8e 7368 { "(bad)", { XX } },
c0f3af97
L
7369 },
7370
7371 /* VEX_LEN_59_P_3 */
7372 {
7373 { "vmulsd", { XM, Vex128, EXq } },
d5d7db8e 7374 { "(bad)", { XX } },
c0f3af97
L
7375 },
7376
7377 /* VEX_LEN_5A_P_1 */
7378 {
7379 { "vcvtss2sd", { XM, Vex128, EXd } },
d5d7db8e 7380 { "(bad)", { XX } },
c0f3af97
L
7381 },
7382
7383 /* VEX_LEN_5A_P_3 */
7384 {
7385 { "vcvtsd2ss", { XM, Vex128, EXq } },
d5d7db8e 7386 { "(bad)", { XX } },
c0f3af97
L
7387 },
7388
7389 /* VEX_LEN_5C_P_1 */
7390 {
7391 { "vsubss", { XM, Vex128, EXd } },
d5d7db8e 7392 { "(bad)", { XX } },
c0f3af97
L
7393 },
7394
7395 /* VEX_LEN_5C_P_3 */
7396 {
7397 { "vsubsd", { XM, Vex128, EXq } },
d5d7db8e 7398 { "(bad)", { XX } },
c0f3af97
L
7399 },
7400
7401 /* VEX_LEN_5D_P_1 */
7402 {
7403 { "vminss", { XM, Vex128, EXd } },
d5d7db8e 7404 { "(bad)", { XX } },
c0f3af97
L
7405 },
7406
7407 /* VEX_LEN_5D_P_3 */
7408 {
7409 { "vminsd", { XM, Vex128, EXq } },
d5d7db8e 7410 { "(bad)", { XX } },
c0f3af97
L
7411 },
7412
7413 /* VEX_LEN_5E_P_1 */
7414 {
7415 { "vdivss", { XM, Vex128, EXd } },
85f10a01 7416 { "(bad)", { XX } },
c0f3af97
L
7417 },
7418
7419 /* VEX_LEN_5E_P_3 */
7420 {
7421 { "vdivsd", { XM, Vex128, EXq } },
85f10a01 7422 { "(bad)", { XX } },
c0f3af97
L
7423 },
7424
7425 /* VEX_LEN_5F_P_1 */
7426 {
7427 { "vmaxss", { XM, Vex128, EXd } },
85f10a01 7428 { "(bad)", { XX } },
c0f3af97
L
7429 },
7430
7431 /* VEX_LEN_5F_P_3 */
7432 {
7433 { "vmaxsd", { XM, Vex128, EXq } },
85f10a01 7434 { "(bad)", { XX } },
c0f3af97
L
7435 },
7436
7437 /* VEX_LEN_60_P_2 */
7438 {
7439 { "vpunpcklbw", { XM, Vex128, EXx } },
d5d7db8e 7440 { "(bad)", { XX } },
c0f3af97
L
7441 },
7442
7443 /* VEX_LEN_61_P_2 */
7444 {
7445 { "vpunpcklwd", { XM, Vex128, EXx } },
d5d7db8e 7446 { "(bad)", { XX } },
c0f3af97
L
7447 },
7448
7449 /* VEX_LEN_62_P_2 */
7450 {
7451 { "vpunpckldq", { XM, Vex128, EXx } },
d5d7db8e 7452 { "(bad)", { XX } },
c0f3af97
L
7453 },
7454
7455 /* VEX_LEN_63_P_2 */
7456 {
7457 { "vpacksswb", { XM, Vex128, EXx } },
d5d7db8e 7458 { "(bad)", { XX } },
c0f3af97
L
7459 },
7460
7461 /* VEX_LEN_64_P_2 */
7462 {
7463 { "vpcmpgtb", { XM, Vex128, EXx } },
d5d7db8e 7464 { "(bad)", { XX } },
c0f3af97
L
7465 },
7466
7467 /* VEX_LEN_65_P_2 */
7468 {
7469 { "vpcmpgtw", { XM, Vex128, EXx } },
d5d7db8e 7470 { "(bad)", { XX } },
c0f3af97
L
7471 },
7472
7473 /* VEX_LEN_66_P_2 */
7474 {
7475 { "vpcmpgtd", { XM, Vex128, EXx } },
d5d7db8e 7476 { "(bad)", { XX } },
c0f3af97
L
7477 },
7478
7479 /* VEX_LEN_67_P_2 */
7480 {
7481 { "vpackuswb", { XM, Vex128, EXx } },
d5d7db8e 7482 { "(bad)", { XX } },
c0f3af97
L
7483 },
7484
7485 /* VEX_LEN_68_P_2 */
7486 {
7487 { "vpunpckhbw", { XM, Vex128, EXx } },
d5d7db8e 7488 { "(bad)", { XX } },
c0f3af97
L
7489 },
7490
7491 /* VEX_LEN_69_P_2 */
7492 {
7493 { "vpunpckhwd", { XM, Vex128, EXx } },
d5d7db8e 7494 { "(bad)", { XX } },
c0f3af97
L
7495 },
7496
7497 /* VEX_LEN_6A_P_2 */
7498 {
7499 { "vpunpckhdq", { XM, Vex128, EXx } },
d5d7db8e 7500 { "(bad)", { XX } },
c0f3af97
L
7501 },
7502
7503 /* VEX_LEN_6B_P_2 */
7504 {
7505 { "vpackssdw", { XM, Vex128, EXx } },
d5d7db8e 7506 { "(bad)", { XX } },
c0f3af97
L
7507 },
7508
7509 /* VEX_LEN_6C_P_2 */
7510 {
7511 { "vpunpcklqdq", { XM, Vex128, EXx } },
d5d7db8e 7512 { "(bad)", { XX } },
c0f3af97
L
7513 },
7514
7515 /* VEX_LEN_6D_P_2 */
7516 {
7517 { "vpunpckhqdq", { XM, Vex128, EXx } },
d5d7db8e 7518 { "(bad)", { XX } },
c0f3af97
L
7519 },
7520
7521 /* VEX_LEN_6E_P_2 */
7522 {
7523 { "vmovK", { XM, Edq } },
d5d7db8e 7524 { "(bad)", { XX } },
c0f3af97
L
7525 },
7526
7527 /* VEX_LEN_70_P_1 */
7528 {
7529 { "vpshufhw", { XM, EXx, Ib } },
d5d7db8e 7530 { "(bad)", { XX } },
c0f3af97
L
7531 },
7532
7533 /* VEX_LEN_70_P_2 */
7534 {
7535 { "vpshufd", { XM, EXx, Ib } },
d5d7db8e 7536 { "(bad)", { XX } },
c0f3af97
L
7537 },
7538
7539 /* VEX_LEN_70_P_3 */
7540 {
7541 { "vpshuflw", { XM, EXx, Ib } },
d5d7db8e 7542 { "(bad)", { XX } },
c0f3af97
L
7543 },
7544
7545 /* VEX_LEN_71_R_2_P_2 */
7546 {
7547 { "vpsrlw", { Vex128, XS, Ib } },
d5d7db8e 7548 { "(bad)", { XX } },
c0f3af97
L
7549 },
7550
7551 /* VEX_LEN_71_R_4_P_2 */
7552 {
7553 { "vpsraw", { Vex128, XS, Ib } },
d5d7db8e 7554 { "(bad)", { XX } },
c0f3af97
L
7555 },
7556
7557 /* VEX_LEN_71_R_6_P_2 */
7558 {
7559 { "vpsllw", { Vex128, XS, Ib } },
d5d7db8e 7560 { "(bad)", { XX } },
c0f3af97
L
7561 },
7562
7563 /* VEX_LEN_72_R_2_P_2 */
7564 {
7565 { "vpsrld", { Vex128, XS, Ib } },
d5d7db8e 7566 { "(bad)", { XX } },
c0f3af97
L
7567 },
7568
7569 /* VEX_LEN_72_R_4_P_2 */
7570 {
7571 { "vpsrad", { Vex128, XS, Ib } },
d5d7db8e 7572 { "(bad)", { XX } },
c0f3af97
L
7573 },
7574
7575 /* VEX_LEN_72_R_6_P_2 */
7576 {
7577 { "vpslld", { Vex128, XS, Ib } },
d5d7db8e 7578 { "(bad)", { XX } },
c0f3af97
L
7579 },
7580
7581 /* VEX_LEN_73_R_2_P_2 */
7582 {
7583 { "vpsrlq", { Vex128, XS, Ib } },
d5d7db8e 7584 { "(bad)", { XX } },
c0f3af97
L
7585 },
7586
7587 /* VEX_LEN_73_R_3_P_2 */
7588 {
7589 { "vpsrldq", { Vex128, XS, Ib } },
d5d7db8e 7590 { "(bad)", { XX } },
c0f3af97
L
7591 },
7592
7593 /* VEX_LEN_73_R_6_P_2 */
7594 {
7595 { "vpsllq", { Vex128, XS, Ib } },
d5d7db8e 7596 { "(bad)", { XX } },
c0f3af97
L
7597 },
7598
7599 /* VEX_LEN_73_R_7_P_2 */
7600 {
7601 { "vpslldq", { Vex128, XS, Ib } },
d5d7db8e 7602 { "(bad)", { XX } },
c0f3af97
L
7603 },
7604
7605 /* VEX_LEN_74_P_2 */
7606 {
7607 { "vpcmpeqb", { XM, Vex128, EXx } },
d5d7db8e 7608 { "(bad)", { XX } },
c0f3af97
L
7609 },
7610
7611 /* VEX_LEN_75_P_2 */
7612 {
7613 { "vpcmpeqw", { XM, Vex128, EXx } },
d5d7db8e 7614 { "(bad)", { XX } },
c0f3af97
L
7615 },
7616
7617 /* VEX_LEN_76_P_2 */
7618 {
7619 { "vpcmpeqd", { XM, Vex128, EXx } },
d5d7db8e 7620 { "(bad)", { XX } },
c0f3af97
L
7621 },
7622
7623 /* VEX_LEN_7E_P_1 */
7624 {
7625 { "vmovq", { XM, EXq } },
d5d7db8e 7626 { "(bad)", { XX } },
c0f3af97
L
7627 },
7628
7629 /* VEX_LEN_7E_P_2 */
7630 {
7631 { "vmovK", { Edq, XM } },
d5d7db8e 7632 { "(bad)", { XX } },
c0f3af97
L
7633 },
7634
7635 /* VEX_LEN_AE_R_2_M0 */
7636 {
7637 { "vldmxcsr", { Md } },
d5d7db8e 7638 { "(bad)", { XX } },
c0f3af97
L
7639 },
7640
7641 /* VEX_LEN_AE_R_3_M0 */
7642 {
7643 { "vstmxcsr", { Md } },
d5d7db8e 7644 { "(bad)", { XX } },
c0f3af97
L
7645 },
7646
7647 /* VEX_LEN_C2_P_1 */
7648 {
7649 { "vcmpss", { XM, Vex128, EXd, VCMP } },
d5d7db8e 7650 { "(bad)", { XX } },
c0f3af97
L
7651 },
7652
7653 /* VEX_LEN_C2_P_3 */
7654 {
7655 { "vcmpsd", { XM, Vex128, EXq, VCMP } },
d5d7db8e 7656 { "(bad)", { XX } },
c0f3af97
L
7657 },
7658
7659 /* VEX_LEN_C4_P_2 */
7660 {
7661 { "vpinsrw", { XM, Vex128, Edqw, Ib } },
d5d7db8e 7662 { "(bad)", { XX } },
c0f3af97
L
7663 },
7664
7665 /* VEX_LEN_C5_P_2 */
7666 {
7667 { "vpextrw", { Gdq, XS, Ib } },
d5d7db8e 7668 { "(bad)", { XX } },
c0f3af97
L
7669 },
7670
7671 /* VEX_LEN_D1_P_2 */
7672 {
7673 { "vpsrlw", { XM, Vex128, EXx } },
d5d7db8e 7674 { "(bad)", { XX } },
c0f3af97
L
7675 },
7676
7677 /* VEX_LEN_D2_P_2 */
7678 {
7679 { "vpsrld", { XM, Vex128, EXx } },
d5d7db8e 7680 { "(bad)", { XX } },
c0f3af97
L
7681 },
7682
7683 /* VEX_LEN_D3_P_2 */
7684 {
7685 { "vpsrlq", { XM, Vex128, EXx } },
d5d7db8e 7686 { "(bad)", { XX } },
c0f3af97
L
7687 },
7688
7689 /* VEX_LEN_D4_P_2 */
7690 {
7691 { "vpaddq", { XM, Vex128, EXx } },
d5d7db8e 7692 { "(bad)", { XX } },
c0f3af97
L
7693 },
7694
7695 /* VEX_LEN_D5_P_2 */
7696 {
7697 { "vpmullw", { XM, Vex128, EXx } },
d5d7db8e 7698 { "(bad)", { XX } },
c0f3af97
L
7699 },
7700
7701 /* VEX_LEN_D6_P_2 */
7702 {
b6169b20 7703 { "vmovq", { EXqS, XM } },
d5d7db8e 7704 { "(bad)", { XX } },
c0f3af97
L
7705 },
7706
7707 /* VEX_LEN_D7_P_2_M_1 */
7708 {
7709 { "vpmovmskb", { Gdq, XS } },
d5d7db8e 7710 { "(bad)", { XX } },
c0f3af97
L
7711 },
7712
7713 /* VEX_LEN_D8_P_2 */
7714 {
7715 { "vpsubusb", { XM, Vex128, EXx } },
d5d7db8e 7716 { "(bad)", { XX } },
c0f3af97
L
7717 },
7718
7719 /* VEX_LEN_D9_P_2 */
7720 {
7721 { "vpsubusw", { XM, Vex128, EXx } },
d5d7db8e 7722 { "(bad)", { XX } },
c0f3af97
L
7723 },
7724
7725 /* VEX_LEN_DA_P_2 */
7726 {
7727 { "vpminub", { XM, Vex128, EXx } },
d5d7db8e 7728 { "(bad)", { XX } },
c0f3af97
L
7729 },
7730
7731 /* VEX_LEN_DB_P_2 */
7732 {
7733 { "vpand", { XM, Vex128, EXx } },
d5d7db8e 7734 { "(bad)", { XX } },
c0f3af97
L
7735 },
7736
7737 /* VEX_LEN_DC_P_2 */
7738 {
7739 { "vpaddusb", { XM, Vex128, EXx } },
d5d7db8e 7740 { "(bad)", { XX } },
c0f3af97
L
7741 },
7742
7743 /* VEX_LEN_DD_P_2 */
7744 {
7745 { "vpaddusw", { XM, Vex128, EXx } },
d5d7db8e 7746 { "(bad)", { XX } },
c0f3af97
L
7747 },
7748
7749 /* VEX_LEN_DE_P_2 */
7750 {
7751 { "vpmaxub", { XM, Vex128, EXx } },
d5d7db8e 7752 { "(bad)", { XX } },
c0f3af97
L
7753 },
7754
7755 /* VEX_LEN_DF_P_2 */
7756 {
7757 { "vpandn", { XM, Vex128, EXx } },
d5d7db8e 7758 { "(bad)", { XX } },
c0f3af97
L
7759 },
7760
7761 /* VEX_LEN_E0_P_2 */
7762 {
7763 { "vpavgb", { XM, Vex128, EXx } },
d5d7db8e 7764 { "(bad)", { XX } },
c0f3af97
L
7765 },
7766
7767 /* VEX_LEN_E1_P_2 */
7768 {
7769 { "vpsraw", { XM, Vex128, EXx } },
d5d7db8e 7770 { "(bad)", { XX } },
c0f3af97
L
7771 },
7772
7773 /* VEX_LEN_E2_P_2 */
7774 {
7775 { "vpsrad", { XM, Vex128, EXx } },
d5d7db8e 7776 { "(bad)", { XX } },
c0f3af97
L
7777 },
7778
7779 /* VEX_LEN_E3_P_2 */
7780 {
7781 { "vpavgw", { XM, Vex128, EXx } },
d5d7db8e 7782 { "(bad)", { XX } },
c0f3af97
L
7783 },
7784
7785 /* VEX_LEN_E4_P_2 */
7786 {
7787 { "vpmulhuw", { XM, Vex128, EXx } },
d5d7db8e 7788 { "(bad)", { XX } },
c0f3af97
L
7789 },
7790
7791 /* VEX_LEN_E5_P_2 */
7792 {
7793 { "vpmulhw", { XM, Vex128, EXx } },
d5d7db8e 7794 { "(bad)", { XX } },
c0f3af97
L
7795 },
7796
c0f3af97
L
7797 /* VEX_LEN_E8_P_2 */
7798 {
7799 { "vpsubsb", { XM, Vex128, EXx } },
d5d7db8e 7800 { "(bad)", { XX } },
c0f3af97
L
7801 },
7802
7803 /* VEX_LEN_E9_P_2 */
7804 {
7805 { "vpsubsw", { XM, Vex128, EXx } },
d5d7db8e 7806 { "(bad)", { XX } },
c0f3af97
L
7807 },
7808
7809 /* VEX_LEN_EA_P_2 */
7810 {
7811 { "vpminsw", { XM, Vex128, EXx } },
d5d7db8e 7812 { "(bad)", { XX } },
c0f3af97
L
7813 },
7814
7815 /* VEX_LEN_EB_P_2 */
7816 {
7817 { "vpor", { XM, Vex128, EXx } },
d5d7db8e 7818 { "(bad)", { XX } },
c0f3af97
L
7819 },
7820
7821 /* VEX_LEN_EC_P_2 */
7822 {
7823 { "vpaddsb", { XM, Vex128, EXx } },
d5d7db8e 7824 { "(bad)", { XX } },
c0f3af97
L
7825 },
7826
7827 /* VEX_LEN_ED_P_2 */
7828 {
7829 { "vpaddsw", { XM, Vex128, EXx } },
d5d7db8e 7830 { "(bad)", { XX } },
c0f3af97
L
7831 },
7832
7833 /* VEX_LEN_EE_P_2 */
7834 {
7835 { "vpmaxsw", { XM, Vex128, EXx } },
d5d7db8e 7836 { "(bad)", { XX } },
c0f3af97
L
7837 },
7838
7839 /* VEX_LEN_EF_P_2 */
7840 {
7841 { "vpxor", { XM, Vex128, EXx } },
d5d7db8e 7842 { "(bad)", { XX } },
c0f3af97
L
7843 },
7844
7845 /* VEX_LEN_F1_P_2 */
7846 {
7847 { "vpsllw", { XM, Vex128, EXx } },
d5d7db8e 7848 { "(bad)", { XX } },
c0f3af97
L
7849 },
7850
7851 /* VEX_LEN_F2_P_2 */
7852 {
7853 { "vpslld", { XM, Vex128, EXx } },
d5d7db8e 7854 { "(bad)", { XX } },
c0f3af97
L
7855 },
7856
7857 /* VEX_LEN_F3_P_2 */
7858 {
7859 { "vpsllq", { XM, Vex128, EXx } },
d5d7db8e 7860 { "(bad)", { XX } },
c0f3af97
L
7861 },
7862
7863 /* VEX_LEN_F4_P_2 */
7864 {
7865 { "vpmuludq", { XM, Vex128, EXx } },
d5d7db8e 7866 { "(bad)", { XX } },
c0f3af97
L
7867 },
7868
7869 /* VEX_LEN_F5_P_2 */
7870 {
7871 { "vpmaddwd", { XM, Vex128, EXx } },
d5d7db8e 7872 { "(bad)", { XX } },
c0f3af97
L
7873 },
7874
7875 /* VEX_LEN_F6_P_2 */
7876 {
7877 { "vpsadbw", { XM, Vex128, EXx } },
d5d7db8e 7878 { "(bad)", { XX } },
c0f3af97
L
7879 },
7880
7881 /* VEX_LEN_F7_P_2 */
7882 {
7883 { "vmaskmovdqu", { XM, XS } },
d5d7db8e 7884 { "(bad)", { XX } },
c0f3af97
L
7885 },
7886
7887 /* VEX_LEN_F8_P_2 */
7888 {
7889 { "vpsubb", { XM, Vex128, EXx } },
d5d7db8e 7890 { "(bad)", { XX } },
c0f3af97
L
7891 },
7892
7893 /* VEX_LEN_F9_P_2 */
7894 {
7895 { "vpsubw", { XM, Vex128, EXx } },
d5d7db8e 7896 { "(bad)", { XX } },
c0f3af97
L
7897 },
7898
7899 /* VEX_LEN_FA_P_2 */
7900 {
7901 { "vpsubd", { XM, Vex128, EXx } },
d5d7db8e 7902 { "(bad)", { XX } },
c0f3af97
L
7903 },
7904
7905 /* VEX_LEN_FB_P_2 */
7906 {
7907 { "vpsubq", { XM, Vex128, EXx } },
d5d7db8e 7908 { "(bad)", { XX } },
c0f3af97
L
7909 },
7910
7911 /* VEX_LEN_FC_P_2 */
7912 {
7913 { "vpaddb", { XM, Vex128, EXx } },
d5d7db8e 7914 { "(bad)", { XX } },
c0f3af97
L
7915 },
7916
7917 /* VEX_LEN_FD_P_2 */
7918 {
7919 { "vpaddw", { XM, Vex128, EXx } },
d5d7db8e 7920 { "(bad)", { XX } },
c0f3af97
L
7921 },
7922
7923 /* VEX_LEN_FE_P_2 */
7924 {
7925 { "vpaddd", { XM, Vex128, EXx } },
d5d7db8e 7926 { "(bad)", { XX } },
c0f3af97
L
7927 },
7928
7929 /* VEX_LEN_3800_P_2 */
7930 {
7931 { "vpshufb", { XM, Vex128, EXx } },
d5d7db8e 7932 { "(bad)", { XX } },
c0f3af97
L
7933 },
7934
7935 /* VEX_LEN_3801_P_2 */
7936 {
7937 { "vphaddw", { XM, Vex128, EXx } },
d5d7db8e 7938 { "(bad)", { XX } },
c0f3af97
L
7939 },
7940
7941 /* VEX_LEN_3802_P_2 */
7942 {
7943 { "vphaddd", { XM, Vex128, EXx } },
d5d7db8e 7944 { "(bad)", { XX } },
c0f3af97
L
7945 },
7946
7947 /* VEX_LEN_3803_P_2 */
7948 {
7949 { "vphaddsw", { XM, Vex128, EXx } },
d5d7db8e 7950 { "(bad)", { XX } },
c0f3af97
L
7951 },
7952
7953 /* VEX_LEN_3804_P_2 */
7954 {
7955 { "vpmaddubsw", { XM, Vex128, EXx } },
d5d7db8e 7956 { "(bad)", { XX } },
c0f3af97
L
7957 },
7958
7959 /* VEX_LEN_3805_P_2 */
7960 {
7961 { "vphsubw", { XM, Vex128, EXx } },
d5d7db8e 7962 { "(bad)", { XX } },
c0f3af97
L
7963 },
7964
7965 /* VEX_LEN_3806_P_2 */
7966 {
7967 { "vphsubd", { XM, Vex128, EXx } },
d5d7db8e 7968 { "(bad)", { XX } },
c0f3af97
L
7969 },
7970
7971 /* VEX_LEN_3807_P_2 */
7972 {
7973 { "vphsubsw", { XM, Vex128, EXx } },
d5d7db8e 7974 { "(bad)", { XX } },
c0f3af97
L
7975 },
7976
7977 /* VEX_LEN_3808_P_2 */
7978 {
7979 { "vpsignb", { XM, Vex128, EXx } },
d5d7db8e 7980 { "(bad)", { XX } },
c0f3af97
L
7981 },
7982
7983 /* VEX_LEN_3809_P_2 */
7984 {
7985 { "vpsignw", { XM, Vex128, EXx } },
d5d7db8e 7986 { "(bad)", { XX } },
c0f3af97
L
7987 },
7988
7989 /* VEX_LEN_380A_P_2 */
7990 {
7991 { "vpsignd", { XM, Vex128, EXx } },
d5d7db8e 7992 { "(bad)", { XX } },
c0f3af97
L
7993 },
7994
7995 /* VEX_LEN_380B_P_2 */
7996 {
7997 { "vpmulhrsw", { XM, Vex128, EXx } },
d5d7db8e 7998 { "(bad)", { XX } },
c0f3af97
L
7999 },
8000
8001 /* VEX_LEN_3819_P_2_M_0 */
8002 {
d5d7db8e 8003 { "(bad)", { XX } },
c0f3af97
L
8004 { "vbroadcastsd", { XM, Mq } },
8005 },
8006
8007 /* VEX_LEN_381A_P_2_M_0 */
8008 {
d5d7db8e 8009 { "(bad)", { XX } },
c0f3af97
L
8010 { "vbroadcastf128", { XM, Mxmm } },
8011 },
8012
8013 /* VEX_LEN_381C_P_2 */
8014 {
8015 { "vpabsb", { XM, EXx } },
d5d7db8e 8016 { "(bad)", { XX } },
c0f3af97
L
8017 },
8018
8019 /* VEX_LEN_381D_P_2 */
8020 {
8021 { "vpabsw", { XM, EXx } },
d5d7db8e 8022 { "(bad)", { XX } },
c0f3af97
L
8023 },
8024
8025 /* VEX_LEN_381E_P_2 */
8026 {
8027 { "vpabsd", { XM, EXx } },
d5d7db8e 8028 { "(bad)", { XX } },
c0f3af97
L
8029 },
8030
8031 /* VEX_LEN_3820_P_2 */
8032 {
8033 { "vpmovsxbw", { XM, EXq } },
d5d7db8e 8034 { "(bad)", { XX } },
c0f3af97
L
8035 },
8036
8037 /* VEX_LEN_3821_P_2 */
8038 {
8039 { "vpmovsxbd", { XM, EXd } },
d5d7db8e 8040 { "(bad)", { XX } },
c0f3af97
L
8041 },
8042
8043 /* VEX_LEN_3822_P_2 */
8044 {
8045 { "vpmovsxbq", { XM, EXw } },
d5d7db8e 8046 { "(bad)", { XX } },
c0f3af97
L
8047 },
8048
8049 /* VEX_LEN_3823_P_2 */
8050 {
8051 { "vpmovsxwd", { XM, EXq } },
d5d7db8e 8052 { "(bad)", { XX } },
c0f3af97
L
8053 },
8054
8055 /* VEX_LEN_3824_P_2 */
8056 {
8057 { "vpmovsxwq", { XM, EXd } },
d5d7db8e 8058 { "(bad)", { XX } },
c0f3af97
L
8059 },
8060
8061 /* VEX_LEN_3825_P_2 */
8062 {
8063 { "vpmovsxdq", { XM, EXq } },
d5d7db8e 8064 { "(bad)", { XX } },
c0f3af97
L
8065 },
8066
8067 /* VEX_LEN_3828_P_2 */
8068 {
8069 { "vpmuldq", { XM, Vex128, EXx } },
d5d7db8e 8070 { "(bad)", { XX } },
c0f3af97
L
8071 },
8072
8073 /* VEX_LEN_3829_P_2 */
8074 {
8075 { "vpcmpeqq", { XM, Vex128, EXx } },
d5d7db8e 8076 { "(bad)", { XX } },
c0f3af97
L
8077 },
8078
8079 /* VEX_LEN_382A_P_2_M_0 */
8080 {
8081 { "vmovntdqa", { XM, Mx } },
d5d7db8e 8082 { "(bad)", { XX } },
c0f3af97
L
8083 },
8084
8085 /* VEX_LEN_382B_P_2 */
8086 {
8087 { "vpackusdw", { XM, Vex128, EXx } },
d5d7db8e 8088 { "(bad)", { XX } },
c0f3af97
L
8089 },
8090
8091 /* VEX_LEN_3830_P_2 */
8092 {
8093 { "vpmovzxbw", { XM, EXq } },
d5d7db8e 8094 { "(bad)", { XX } },
c0f3af97
L
8095 },
8096
8097 /* VEX_LEN_3831_P_2 */
8098 {
8099 { "vpmovzxbd", { XM, EXd } },
d5d7db8e 8100 { "(bad)", { XX } },
c0f3af97
L
8101 },
8102
8103 /* VEX_LEN_3832_P_2 */
8104 {
8105 { "vpmovzxbq", { XM, EXw } },
d5d7db8e 8106 { "(bad)", { XX } },
c0f3af97
L
8107 },
8108
8109 /* VEX_LEN_3833_P_2 */
8110 {
8111 { "vpmovzxwd", { XM, EXq } },
d5d7db8e 8112 { "(bad)", { XX } },
c0f3af97
L
8113 },
8114
8115 /* VEX_LEN_3834_P_2 */
8116 {
8117 { "vpmovzxwq", { XM, EXd } },
d5d7db8e 8118 { "(bad)", { XX } },
c0f3af97
L
8119 },
8120
8121 /* VEX_LEN_3835_P_2 */
8122 {
8123 { "vpmovzxdq", { XM, EXq } },
d5d7db8e 8124 { "(bad)", { XX } },
c0f3af97
L
8125 },
8126
8127 /* VEX_LEN_3837_P_2 */
8128 {
8129 { "vpcmpgtq", { XM, Vex128, EXx } },
d5d7db8e 8130 { "(bad)", { XX } },
c0f3af97
L
8131 },
8132
8133 /* VEX_LEN_3838_P_2 */
8134 {
8135 { "vpminsb", { XM, Vex128, EXx } },
d5d7db8e 8136 { "(bad)", { XX } },
c0f3af97
L
8137 },
8138
8139 /* VEX_LEN_3839_P_2 */
8140 {
8141 { "vpminsd", { XM, Vex128, EXx } },
d5d7db8e 8142 { "(bad)", { XX } },
c0f3af97
L
8143 },
8144
8145 /* VEX_LEN_383A_P_2 */
8146 {
8147 { "vpminuw", { XM, Vex128, EXx } },
d5d7db8e 8148 { "(bad)", { XX } },
c0f3af97
L
8149 },
8150
8151 /* VEX_LEN_383B_P_2 */
8152 {
8153 { "vpminud", { XM, Vex128, EXx } },
d5d7db8e 8154 { "(bad)", { XX } },
c0f3af97
L
8155 },
8156
8157 /* VEX_LEN_383C_P_2 */
8158 {
8159 { "vpmaxsb", { XM, Vex128, EXx } },
d5d7db8e 8160 { "(bad)", { XX } },
c0f3af97
L
8161 },
8162
8163 /* VEX_LEN_383D_P_2 */
8164 {
8165 { "vpmaxsd", { XM, Vex128, EXx } },
d5d7db8e 8166 { "(bad)", { XX } },
c0f3af97
L
8167 },
8168
8169 /* VEX_LEN_383E_P_2 */
8170 {
8171 { "vpmaxuw", { XM, Vex128, EXx } },
d5d7db8e 8172 { "(bad)", { XX } },
c0f3af97
L
8173 },
8174
8175 /* VEX_LEN_383F_P_2 */
8176 {
8177 { "vpmaxud", { XM, Vex128, EXx } },
d5d7db8e 8178 { "(bad)", { XX } },
c0f3af97
L
8179 },
8180
8181 /* VEX_LEN_3840_P_2 */
8182 {
8183 { "vpmulld", { XM, Vex128, EXx } },
d5d7db8e 8184 { "(bad)", { XX } },
c0f3af97
L
8185 },
8186
8187 /* VEX_LEN_3841_P_2 */
8188 {
8189 { "vphminposuw", { XM, EXx } },
d5d7db8e 8190 { "(bad)", { XX } },
c0f3af97
L
8191 },
8192
a5ff0eb2
L
8193 /* VEX_LEN_38DB_P_2 */
8194 {
8195 { "vaesimc", { XM, EXx } },
8196 { "(bad)", { XX } },
8197 },
8198
8199 /* VEX_LEN_38DC_P_2 */
8200 {
8201 { "vaesenc", { XM, Vex128, EXx } },
8202 { "(bad)", { XX } },
8203 },
8204
8205 /* VEX_LEN_38DD_P_2 */
8206 {
8207 { "vaesenclast", { XM, Vex128, EXx } },
8208 { "(bad)", { XX } },
8209 },
8210
8211 /* VEX_LEN_38DE_P_2 */
8212 {
8213 { "vaesdec", { XM, Vex128, EXx } },
8214 { "(bad)", { XX } },
8215 },
8216
8217 /* VEX_LEN_38DF_P_2 */
8218 {
8219 { "vaesdeclast", { XM, Vex128, EXx } },
8220 { "(bad)", { XX } },
8221 },
8222
c0f3af97
L
8223 /* VEX_LEN_3A06_P_2 */
8224 {
d5d7db8e 8225 { "(bad)", { XX } },
c0f3af97
L
8226 { "vperm2f128", { XM, Vex256, EXx, Ib } },
8227 },
8228
8229 /* VEX_LEN_3A0A_P_2 */
8230 {
8231 { "vroundss", { XM, Vex128, EXd, Ib } },
d5d7db8e 8232 { "(bad)", { XX } },
c0f3af97
L
8233 },
8234
8235 /* VEX_LEN_3A0B_P_2 */
8236 {
8237 { "vroundsd", { XM, Vex128, EXq, Ib } },
d5d7db8e 8238 { "(bad)", { XX } },
c0f3af97
L
8239 },
8240
8241 /* VEX_LEN_3A0E_P_2 */
8242 {
8243 { "vpblendw", { XM, Vex128, EXx, Ib } },
d5d7db8e 8244 { "(bad)", { XX } },
c0f3af97
L
8245 },
8246
8247 /* VEX_LEN_3A0F_P_2 */
8248 {
8249 { "vpalignr", { XM, Vex128, EXx, Ib } },
d5d7db8e 8250 { "(bad)", { XX } },
c0f3af97
L
8251 },
8252
8253 /* VEX_LEN_3A14_P_2 */
8254 {
8255 { "vpextrb", { Edqb, XM, Ib } },
d5d7db8e 8256 { "(bad)", { XX } },
c0f3af97
L
8257 },
8258
8259 /* VEX_LEN_3A15_P_2 */
8260 {
8261 { "vpextrw", { Edqw, XM, Ib } },
d5d7db8e 8262 { "(bad)", { XX } },
c0f3af97
L
8263 },
8264
8265 /* VEX_LEN_3A16_P_2 */
8266 {
8267 { "vpextrK", { Edq, XM, Ib } },
d5d7db8e 8268 { "(bad)", { XX } },
c0f3af97
L
8269 },
8270
8271 /* VEX_LEN_3A17_P_2 */
8272 {
8273 { "vextractps", { Edqd, XM, Ib } },
d5d7db8e 8274 { "(bad)", { XX } },
c0f3af97
L
8275 },
8276
8277 /* VEX_LEN_3A18_P_2 */
8278 {
d5d7db8e 8279 { "(bad)", { XX } },
c0f3af97
L
8280 { "vinsertf128", { XM, Vex256, EXxmm, Ib } },
8281 },
8282
8283 /* VEX_LEN_3A19_P_2 */
8284 {
d5d7db8e 8285 { "(bad)", { XX } },
c0f3af97
L
8286 { "vextractf128", { EXxmm, XM, Ib } },
8287 },
8288
8289 /* VEX_LEN_3A20_P_2 */
8290 {
8291 { "vpinsrb", { XM, Vex128, Edqb, Ib } },
d5d7db8e 8292 { "(bad)", { XX } },
c0f3af97
L
8293 },
8294
8295 /* VEX_LEN_3A21_P_2 */
8296 {
8297 { "vinsertps", { XM, Vex128, EXd, Ib } },
d5d7db8e 8298 { "(bad)", { XX } },
c0f3af97
L
8299 },
8300
8301 /* VEX_LEN_3A22_P_2 */
8302 {
8303 { "vpinsrK", { XM, Vex128, Edq, Ib } },
d5d7db8e 8304 { "(bad)", { XX } },
c0f3af97
L
8305 },
8306
8307 /* VEX_LEN_3A41_P_2 */
8308 {
8309 { "vdppd", { XM, Vex128, EXx, Ib } },
d5d7db8e 8310 { "(bad)", { XX } },
c0f3af97
L
8311 },
8312
8313 /* VEX_LEN_3A42_P_2 */
8314 {
8315 { "vmpsadbw", { XM, Vex128, EXx, Ib } },
d5d7db8e 8316 { "(bad)", { XX } },
c0f3af97
L
8317 },
8318
ce2f5b3c
L
8319 /* VEX_LEN_3A44_P_2 */
8320 {
8321 { "vpclmulqdq", { XM, Vex128, EXx, PCLMUL } },
8322 { "(bad)", { XX } },
8323 },
8324
c0f3af97
L
8325 /* VEX_LEN_3A4C_P_2 */
8326 {
8327 { "vpblendvb", { XM, Vex128, EXx, XMVexI4 } },
d5d7db8e 8328 { "(bad)", { XX } },
c0f3af97
L
8329 },
8330
8331 /* VEX_LEN_3A60_P_2 */
8332 {
8333 { "vpcmpestrm", { XM, EXx, Ib } },
d5d7db8e 8334 { "(bad)", { XX } },
c0f3af97
L
8335 },
8336
8337 /* VEX_LEN_3A61_P_2 */
8338 {
8339 { "vpcmpestri", { XM, EXx, Ib } },
d5d7db8e 8340 { "(bad)", { XX } },
c0f3af97
L
8341 },
8342
8343 /* VEX_LEN_3A62_P_2 */
8344 {
8345 { "vpcmpistrm", { XM, EXx, Ib } },
d5d7db8e 8346 { "(bad)", { XX } },
c0f3af97
L
8347 },
8348
8349 /* VEX_LEN_3A63_P_2 */
8350 {
8351 { "vpcmpistri", { XM, EXx, Ib } },
d5d7db8e 8352 { "(bad)", { XX } },
c0f3af97
L
8353 },
8354
922d8de8
DR
8355 /* VEX_LEN_3A6A_P_2 */
8356 {
8357 { "vfmaddss", { XMVexW, Vex128FMA, EXdVexW, EXdVexW, VexI4 } },
8358 { "(bad)", { XX } },
8359 },
8360
8361 /* VEX_LEN_3A6B_P_2 */
8362 {
8363 { "vfmaddsd", { XMVexW, Vex128FMA, EXqVexW, EXqVexW, VexI4 } },
8364 { "(bad)", { XX } },
8365 },
8366
8367 /* VEX_LEN_3A6E_P_2 */
8368 {
8369 { "vfmsubss", { XMVexW, Vex128FMA, EXdVexW, EXdVexW, VexI4 } },
8370 { "(bad)", { XX } },
8371 },
8372
8373 /* VEX_LEN_3A6F_P_2 */
8374 {
8375 { "vfmsubsd", { XMVexW, Vex128FMA, EXqVexW, EXqVexW, VexI4 } },
8376 { "(bad)", { XX } },
8377 },
8378
8379 /* VEX_LEN_3A7A_P_2 */
8380 {
8381 { "vfnmaddss", { XMVexW, Vex128FMA, EXdVexW, EXdVexW, VexI4 } },
8382 { "(bad)", { XX } },
8383 },
8384
8385 /* VEX_LEN_3A7B_P_2 */
8386 {
8387 { "vfnmaddsd", { XMVexW, Vex128FMA, EXqVexW, EXqVexW, VexI4 } },
8388 { "(bad)", { XX } },
8389 },
8390
8391 /* VEX_LEN_3A7E_P_2 */
8392 {
8393 { "vfnmsubss", { XMVexW, Vex128FMA, EXdVexW, EXdVexW, VexI4 } },
8394 { "(bad)", { XX } },
8395 },
8396
8397 /* VEX_LEN_3A7F_P_2 */
8398 {
8399 { "vfnmsubsd", { XMVexW, Vex128FMA, EXqVexW, EXqVexW, VexI4 } },
8400 { "(bad)", { XX } },
8401 },
8402
a5ff0eb2
L
8403 /* VEX_LEN_3ADF_P_2 */
8404 {
8405 { "vaeskeygenassist", { XM, EXx, Ib } },
8406 { "(bad)", { XX } },
8407 },
331d2d0d
L
8408};
8409
1ceb70f8 8410static const struct dis386 mod_table[][2] = {
b844680a 8411 {
1ceb70f8 8412 /* MOD_8D */
d8faab4e
L
8413 { "leaS", { Gv, M } },
8414 { "(bad)", { XX } },
8415 },
8416 {
92fddf8e
L
8417 /* MOD_0F01_REG_0 */
8418 { X86_64_TABLE (X86_64_0F01_REG_0) },
8419 { RM_TABLE (RM_0F01_REG_0) },
d8faab4e
L
8420 },
8421 {
92fddf8e
L
8422 /* MOD_0F01_REG_1 */
8423 { X86_64_TABLE (X86_64_0F01_REG_1) },
8424 { RM_TABLE (RM_0F01_REG_1) },
d8faab4e
L
8425 },
8426 {
92fddf8e
L
8427 /* MOD_0F01_REG_2 */
8428 { X86_64_TABLE (X86_64_0F01_REG_2) },
475a2301 8429 { RM_TABLE (RM_0F01_REG_2) },
d8faab4e
L
8430 },
8431 {
92fddf8e
L
8432 /* MOD_0F01_REG_3 */
8433 { X86_64_TABLE (X86_64_0F01_REG_3) },
8434 { RM_TABLE (RM_0F01_REG_3) },
d8faab4e
L
8435 },
8436 {
92fddf8e
L
8437 /* MOD_0F01_REG_7 */
8438 { "invlpg", { Mb } },
8439 { RM_TABLE (RM_0F01_REG_7) },
b844680a
L
8440 },
8441 {
92fddf8e
L
8442 /* MOD_0F12_PREFIX_0 */
8443 { "movlps", { XM, EXq } },
8444 { "movhlps", { XM, EXq } },
b844680a
L
8445 },
8446 {
92fddf8e
L
8447 /* MOD_0F13 */
8448 { "movlpX", { EXq, XM } },
d8faab4e
L
8449 { "(bad)", { XX } },
8450 },
8451 {
92fddf8e
L
8452 /* MOD_0F16_PREFIX_0 */
8453 { "movhps", { XM, EXq } },
8454 { "movlhps", { XM, EXq } },
b844680a
L
8455 },
8456 {
92fddf8e
L
8457 /* MOD_0F17 */
8458 { "movhpX", { EXq, XM } },
b844680a
L
8459 { "(bad)", { XX } },
8460 },
8461 {
92fddf8e
L
8462 /* MOD_0F18_REG_0 */
8463 { "prefetchnta", { Mb } },
b844680a 8464 { "(bad)", { XX } },
b844680a
L
8465 },
8466 {
92fddf8e
L
8467 /* MOD_0F18_REG_1 */
8468 { "prefetcht0", { Mb } },
8469 { "(bad)", { XX } },
b844680a
L
8470 },
8471 {
92fddf8e
L
8472 /* MOD_0F18_REG_2 */
8473 { "prefetcht1", { Mb } },
8474 { "(bad)", { XX } },
b844680a
L
8475 },
8476 {
92fddf8e
L
8477 /* MOD_0F18_REG_3 */
8478 { "prefetcht2", { Mb } },
b844680a 8479 { "(bad)", { XX } },
b844680a
L
8480 },
8481 {
92fddf8e
L
8482 /* MOD_0F20 */
8483 { "(bad)", { XX } },
8484 { "movZ", { Rm, Cm } },
b844680a
L
8485 },
8486 {
92fddf8e
L
8487 /* MOD_0F21 */
8488 { "(bad)", { XX } },
8489 { "movZ", { Rm, Dm } },
b844680a
L
8490 },
8491 {
92fddf8e 8492 /* MOD_0F22 */
b844680a 8493 { "(bad)", { XX } },
92fddf8e 8494 { "movZ", { Cm, Rm } },
b844680a
L
8495 },
8496 {
92fddf8e 8497 /* MOD_0F23 */
b844680a 8498 { "(bad)", { XX } },
92fddf8e 8499 { "movZ", { Dm, Rm } },
b844680a
L
8500 },
8501 {
92fddf8e 8502 /* MOD_0F24 */
c1e679ec 8503 { "(bad)", { XX } },
92fddf8e 8504 { "movL", { Rd, Td } },
b844680a
L
8505 },
8506 {
92fddf8e 8507 /* MOD_0F26 */
b844680a 8508 { "(bad)", { XX } },
92fddf8e 8509 { "movL", { Td, Rd } },
b844680a 8510 },
75c135a8
L
8511 {
8512 /* MOD_0F2B_PREFIX_0 */
4ee52178 8513 {"movntps", { Mx, XM } },
75c135a8
L
8514 { "(bad)", { XX } },
8515 },
8516 {
8517 /* MOD_0F2B_PREFIX_1 */
4ee52178 8518 {"movntss", { Md, XM } },
75c135a8
L
8519 { "(bad)", { XX } },
8520 },
8521 {
8522 /* MOD_0F2B_PREFIX_2 */
4ee52178 8523 {"movntpd", { Mx, XM } },
75c135a8
L
8524 { "(bad)", { XX } },
8525 },
8526 {
8527 /* MOD_0F2B_PREFIX_3 */
4ee52178 8528 {"movntsd", { Mq, XM } },
75c135a8
L
8529 { "(bad)", { XX } },
8530 },
8531 {
8532 /* MOD_0F51 */
8533 { "(bad)", { XX } },
8534 { "movmskpX", { Gdq, XS } },
8535 },
b844680a 8536 {
1ceb70f8 8537 /* MOD_0F71_REG_2 */
b844680a 8538 { "(bad)", { XX } },
4e7d34a6 8539 { "psrlw", { MS, Ib } },
b844680a
L
8540 },
8541 {
1ceb70f8 8542 /* MOD_0F71_REG_4 */
b844680a 8543 { "(bad)", { XX } },
4e7d34a6 8544 { "psraw", { MS, Ib } },
b844680a
L
8545 },
8546 {
1ceb70f8 8547 /* MOD_0F71_REG_6 */
b844680a 8548 { "(bad)", { XX } },
4e7d34a6 8549 { "psllw", { MS, Ib } },
b844680a
L
8550 },
8551 {
1ceb70f8 8552 /* MOD_0F72_REG_2 */
b844680a 8553 { "(bad)", { XX } },
4e7d34a6 8554 { "psrld", { MS, Ib } },
b844680a
L
8555 },
8556 {
1ceb70f8 8557 /* MOD_0F72_REG_4 */
b844680a 8558 { "(bad)", { XX } },
4e7d34a6 8559 { "psrad", { MS, Ib } },
b844680a
L
8560 },
8561 {
1ceb70f8 8562 /* MOD_0F72_REG_6 */
b844680a 8563 { "(bad)", { XX } },
4e7d34a6 8564 { "pslld", { MS, Ib } },
b844680a
L
8565 },
8566 {
1ceb70f8 8567 /* MOD_0F73_REG_2 */
4e7d34a6
L
8568 { "(bad)", { XX } },
8569 { "psrlq", { MS, Ib } },
b844680a
L
8570 },
8571 {
1ceb70f8 8572 /* MOD_0F73_REG_3 */
b844680a 8573 { "(bad)", { XX } },
c0f3af97
L
8574 { PREFIX_TABLE (PREFIX_0F73_REG_3) },
8575 },
8576 {
8577 /* MOD_0F73_REG_6 */
8578 { "(bad)", { XX } },
8579 { "psllq", { MS, Ib } },
8580 },
8581 {
8582 /* MOD_0F73_REG_7 */
8583 { "(bad)", { XX } },
8584 { PREFIX_TABLE (PREFIX_0F73_REG_7) },
8585 },
8586 {
8587 /* MOD_0FAE_REG_0 */
8588 { "fxsave", { M } },
8589 { "(bad)", { XX } },
8590 },
8591 {
8592 /* MOD_0FAE_REG_1 */
8593 { "fxrstor", { M } },
8594 { "(bad)", { XX } },
8595 },
8596 {
8597 /* MOD_0FAE_REG_2 */
8598 { "ldmxcsr", { Md } },
8599 { "(bad)", { XX } },
8600 },
8601 {
8602 /* MOD_0FAE_REG_3 */
8603 { "stmxcsr", { Md } },
8604 { "(bad)", { XX } },
8605 },
8606 {
8607 /* MOD_0FAE_REG_4 */
8608 { "xsave", { M } },
8609 { "(bad)", { XX } },
8610 },
8611 {
8612 /* MOD_0FAE_REG_5 */
8613 { "xrstor", { M } },
8614 { RM_TABLE (RM_0FAE_REG_5) },
8615 },
8616 {
8617 /* MOD_0FAE_REG_6 */
8618 { "xsaveopt", { M } },
8619 { RM_TABLE (RM_0FAE_REG_6) },
8620 },
8621 {
8622 /* MOD_0FAE_REG_7 */
8623 { "clflush", { Mb } },
8624 { RM_TABLE (RM_0FAE_REG_7) },
8625 },
8626 {
8627 /* MOD_0FB2 */
8628 { "lssS", { Gv, Mp } },
8629 { "(bad)", { XX } },
8630 },
8631 {
8632 /* MOD_0FB4 */
8633 { "lfsS", { Gv, Mp } },
8634 { "(bad)", { XX } },
8635 },
8636 {
8637 /* MOD_0FB5 */
8638 { "lgsS", { Gv, Mp } },
8639 { "(bad)", { XX } },
8640 },
8641 {
8642 /* MOD_0FC7_REG_6 */
8643 { PREFIX_TABLE (PREFIX_0FC7_REG_6) },
8644 { "(bad)", { XX } },
8645 },
8646 {
8647 /* MOD_0FC7_REG_7 */
8648 { "vmptrst", { Mq } },
8649 { "(bad)", { XX } },
8650 },
8651 {
8652 /* MOD_0FD7 */
8653 { "(bad)", { XX } },
8654 { "pmovmskb", { Gdq, MS } },
8655 },
8656 {
8657 /* MOD_0FE7_PREFIX_2 */
8658 { "movntdq", { Mx, XM } },
8659 { "(bad)", { XX } },
8660 },
8661 {
8662 /* MOD_0FF0_PREFIX_3 */
8663 { "lddqu", { XM, M } },
8664 { "(bad)", { XX } },
8665 },
8666 {
8667 /* MOD_0F382A_PREFIX_2 */
8668 { "movntdqa", { XM, Mx } },
8669 { "(bad)", { XX } },
8670 },
8671 {
8672 /* MOD_62_32BIT */
8673 { "bound{S|}", { Gv, Ma } },
8674 { "(bad)", { XX } },
8675 },
8676 {
8677 /* MOD_C4_32BIT */
8678 { "lesS", { Gv, Mp } },
8679 { VEX_C4_TABLE (VEX_0F) },
8680 },
8681 {
8682 /* MOD_C5_32BIT */
8683 { "ldsS", { Gv, Mp } },
8684 { VEX_C5_TABLE (VEX_0F) },
8685 },
8686 {
8687 /* MOD_VEX_12_PREFIX_0 */
8688 { VEX_LEN_TABLE (VEX_LEN_12_P_0_M_0) },
8689 { VEX_LEN_TABLE (VEX_LEN_12_P_0_M_1) },
8690 },
8691 {
8692 /* MOD_VEX_13 */
8693 { VEX_LEN_TABLE (VEX_LEN_13_M_0) },
8694 { "(bad)", { XX } },
8695 },
8696 {
8697 /* MOD_VEX_16_PREFIX_0 */
8698 { VEX_LEN_TABLE (VEX_LEN_16_P_0_M_0) },
8699 { VEX_LEN_TABLE (VEX_LEN_16_P_0_M_1) },
8700 },
8701 {
8702 /* MOD_VEX_17 */
8703 { VEX_LEN_TABLE (VEX_LEN_17_M_0) },
8704 { "(bad)", { XX } },
8705 },
8706 {
8707 /* MOD_VEX_2B */
168e3097 8708 { "vmovntpX", { Mx, XM } },
c0f3af97
L
8709 { "(bad)", { XX } },
8710 },
8711 {
8712 /* MOD_VEX_51 */
8713 { "(bad)", { XX } },
8714 { "vmovmskpX", { Gdq, XS } },
8715 },
8716 {
8717 /* MOD_VEX_71_REG_2 */
8718 { "(bad)", { XX } },
8719 { PREFIX_TABLE (PREFIX_VEX_71_REG_2) },
b844680a
L
8720 },
8721 {
c0f3af97 8722 /* MOD_VEX_71_REG_4 */
b844680a 8723 { "(bad)", { XX } },
c0f3af97 8724 { PREFIX_TABLE (PREFIX_VEX_71_REG_4) },
b844680a
L
8725 },
8726 {
c0f3af97 8727 /* MOD_VEX_71_REG_6 */
b844680a 8728 { "(bad)", { XX } },
c0f3af97 8729 { PREFIX_TABLE (PREFIX_VEX_71_REG_6) },
b844680a
L
8730 },
8731 {
c0f3af97 8732 /* MOD_VEX_72_REG_2 */
b844680a 8733 { "(bad)", { XX } },
c0f3af97 8734 { PREFIX_TABLE (PREFIX_VEX_72_REG_2) },
b844680a 8735 },
d8faab4e 8736 {
c0f3af97 8737 /* MOD_VEX_72_REG_4 */
d8faab4e 8738 { "(bad)", { XX } },
c0f3af97 8739 { PREFIX_TABLE (PREFIX_VEX_72_REG_4) },
d8faab4e
L
8740 },
8741 {
c0f3af97 8742 /* MOD_VEX_72_REG_6 */
d8faab4e 8743 { "(bad)", { XX } },
c0f3af97 8744 { PREFIX_TABLE (PREFIX_VEX_72_REG_6) },
d8faab4e 8745 },
876d4bfa 8746 {
c0f3af97 8747 /* MOD_VEX_73_REG_2 */
876d4bfa 8748 { "(bad)", { XX } },
c0f3af97 8749 { PREFIX_TABLE (PREFIX_VEX_73_REG_2) },
876d4bfa
L
8750 },
8751 {
c0f3af97 8752 /* MOD_VEX_73_REG_3 */
876d4bfa 8753 { "(bad)", { XX } },
c0f3af97 8754 { PREFIX_TABLE (PREFIX_VEX_73_REG_3) },
475a2301
L
8755 },
8756 {
c0f3af97
L
8757 /* MOD_VEX_73_REG_6 */
8758 { "(bad)", { XX } },
8759 { PREFIX_TABLE (PREFIX_VEX_73_REG_6) },
876d4bfa
L
8760 },
8761 {
c0f3af97 8762 /* MOD_VEX_73_REG_7 */
4e7d34a6 8763 { "(bad)", { XX } },
c0f3af97 8764 { PREFIX_TABLE (PREFIX_VEX_73_REG_7) },
876d4bfa
L
8765 },
8766 {
c0f3af97
L
8767 /* MOD_VEX_AE_REG_2 */
8768 { VEX_LEN_TABLE (VEX_LEN_AE_R_2_M_0) },
8769 { "(bad)", { XX } },
876d4bfa 8770 },
bbedc832 8771 {
c0f3af97
L
8772 /* MOD_VEX_AE_REG_3 */
8773 { VEX_LEN_TABLE (VEX_LEN_AE_R_3_M_0) },
4e7d34a6 8774 { "(bad)", { XX } },
bbedc832 8775 },
144c41d9 8776 {
c0f3af97 8777 /* MOD_VEX_D7_PREFIX_2 */
4e7d34a6 8778 { "(bad)", { XX } },
c0f3af97 8779 { VEX_LEN_TABLE (VEX_LEN_D7_P_2_M_1) },
144c41d9 8780 },
1afd85e3 8781 {
c0f3af97 8782 /* MOD_VEX_E7_PREFIX_2 */
168e3097 8783 { "vmovntdq", { Mx, XM } },
92fddf8e 8784 { "(bad)", { XX } },
1afd85e3
L
8785 },
8786 {
c0f3af97
L
8787 /* MOD_VEX_F0_PREFIX_3 */
8788 { "vlddqu", { XM, M } },
92fddf8e
L
8789 { "(bad)", { XX } },
8790 },
8791 {
c0f3af97
L
8792 /* MOD_VEX_3818_PREFIX_2 */
8793 { "vbroadcastss", { XM, Md } },
92fddf8e 8794 { "(bad)", { XX } },
1afd85e3 8795 },
75c135a8 8796 {
c0f3af97
L
8797 /* MOD_VEX_3819_PREFIX_2 */
8798 { VEX_LEN_TABLE (VEX_LEN_3819_P_2_M_0) },
75c135a8 8799 { "(bad)", { XX } },
75c135a8
L
8800 },
8801 {
c0f3af97
L
8802 /* MOD_VEX_381A_PREFIX_2 */
8803 { VEX_LEN_TABLE (VEX_LEN_381A_P_2_M_0) },
75c135a8
L
8804 { "(bad)", { XX } },
8805 },
1afd85e3 8806 {
c0f3af97
L
8807 /* MOD_VEX_382A_PREFIX_2 */
8808 { VEX_LEN_TABLE (VEX_LEN_382A_P_2_M_0) },
1afd85e3 8809 { "(bad)", { XX } },
1afd85e3 8810 },
75c135a8 8811 {
c0f3af97
L
8812 /* MOD_VEX_382C_PREFIX_2 */
8813 { "vmaskmovps", { XM, Vex, Mx } },
75c135a8
L
8814 { "(bad)", { XX } },
8815 },
1afd85e3 8816 {
c0f3af97
L
8817 /* MOD_VEX_382D_PREFIX_2 */
8818 { "vmaskmovpd", { XM, Vex, Mx } },
1afd85e3 8819 { "(bad)", { XX } },
1afd85e3
L
8820 },
8821 {
c0f3af97
L
8822 /* MOD_VEX_382E_PREFIX_2 */
8823 { "vmaskmovps", { Mx, Vex, XM } },
4e7d34a6 8824 { "(bad)", { XX } },
1afd85e3
L
8825 },
8826 {
c0f3af97
L
8827 /* MOD_VEX_382F_PREFIX_2 */
8828 { "vmaskmovpd", { Mx, Vex, XM } },
1afd85e3 8829 { "(bad)", { XX } },
1afd85e3 8830 },
b844680a
L
8831};
8832
1ceb70f8 8833static const struct dis386 rm_table[][8] = {
b844680a 8834 {
1ceb70f8 8835 /* RM_0F01_REG_0 */
b844680a
L
8836 { "(bad)", { XX } },
8837 { "vmcall", { Skip_MODRM } },
8838 { "vmlaunch", { Skip_MODRM } },
8839 { "vmresume", { Skip_MODRM } },
8840 { "vmxoff", { Skip_MODRM } },
8841 { "(bad)", { XX } },
8842 { "(bad)", { XX } },
8843 { "(bad)", { XX } },
8844 },
8845 {
1ceb70f8 8846 /* RM_0F01_REG_1 */
b844680a
L
8847 { "monitor", { { OP_Monitor, 0 } } },
8848 { "mwait", { { OP_Mwait, 0 } } },
8849 { "(bad)", { XX } },
8850 { "(bad)", { XX } },
8851 { "(bad)", { XX } },
8852 { "(bad)", { XX } },
8853 { "(bad)", { XX } },
8854 { "(bad)", { XX } },
8855 },
475a2301
L
8856 {
8857 /* RM_0F01_REG_2 */
8858 { "xgetbv", { Skip_MODRM } },
8859 { "xsetbv", { Skip_MODRM } },
8860 { "(bad)", { XX } },
8861 { "(bad)", { XX } },
8862 { "(bad)", { XX } },
8863 { "(bad)", { XX } },
8864 { "(bad)", { XX } },
8865 { "(bad)", { XX } },
8866 },
b844680a 8867 {
1ceb70f8 8868 /* RM_0F01_REG_3 */
4e7d34a6
L
8869 { "vmrun", { Skip_MODRM } },
8870 { "vmmcall", { Skip_MODRM } },
8871 { "vmload", { Skip_MODRM } },
8872 { "vmsave", { Skip_MODRM } },
8873 { "stgi", { Skip_MODRM } },
8874 { "clgi", { Skip_MODRM } },
8875 { "skinit", { Skip_MODRM } },
8876 { "invlpga", { Skip_MODRM } },
8877 },
8878 {
1ceb70f8 8879 /* RM_0F01_REG_7 */
4e7d34a6
L
8880 { "swapgs", { Skip_MODRM } },
8881 { "rdtscp", { Skip_MODRM } },
b844680a
L
8882 { "(bad)", { XX } },
8883 { "(bad)", { XX } },
8884 { "(bad)", { XX } },
8885 { "(bad)", { XX } },
8886 { "(bad)", { XX } },
8887 { "(bad)", { XX } },
8888 },
8889 {
1ceb70f8 8890 /* RM_0FAE_REG_5 */
4e7d34a6 8891 { "lfence", { Skip_MODRM } },
b844680a
L
8892 { "(bad)", { XX } },
8893 { "(bad)", { XX } },
8894 { "(bad)", { XX } },
8895 { "(bad)", { XX } },
8896 { "(bad)", { XX } },
8897 { "(bad)", { XX } },
8898 { "(bad)", { XX } },
8899 },
8900 {
1ceb70f8 8901 /* RM_0FAE_REG_6 */
4e7d34a6 8902 { "mfence", { Skip_MODRM } },
b844680a
L
8903 { "(bad)", { XX } },
8904 { "(bad)", { XX } },
8905 { "(bad)", { XX } },
8906 { "(bad)", { XX } },
8907 { "(bad)", { XX } },
8908 { "(bad)", { XX } },
8909 { "(bad)", { XX } },
8910 },
bbedc832 8911 {
1ceb70f8 8912 /* RM_0FAE_REG_7 */
4e7d34a6
L
8913 { "sfence", { Skip_MODRM } },
8914 { "(bad)", { XX } },
bbedc832
L
8915 { "(bad)", { XX } },
8916 { "(bad)", { XX } },
8917 { "(bad)", { XX } },
8918 { "(bad)", { XX } },
8919 { "(bad)", { XX } },
8920 { "(bad)", { XX } },
144c41d9 8921 },
b844680a
L
8922};
8923
c608c12e
AM
8924#define INTERNAL_DISASSEMBLER_ERROR _("<internal disassembler error>")
8925
252b5132 8926static void
26ca5450 8927ckprefix (void)
252b5132 8928{
52b15da3
JH
8929 int newrex;
8930 rex = 0;
c0f3af97
L
8931 rex_original = 0;
8932 rex_ignored = 0;
252b5132 8933 prefixes = 0;
7d421014 8934 used_prefixes = 0;
52b15da3 8935 rex_used = 0;
252b5132
RH
8936 while (1)
8937 {
8938 FETCH_DATA (the_info, codep + 1);
52b15da3 8939 newrex = 0;
252b5132
RH
8940 switch (*codep)
8941 {
52b15da3
JH
8942 /* REX prefixes family. */
8943 case 0x40:
8944 case 0x41:
8945 case 0x42:
8946 case 0x43:
8947 case 0x44:
8948 case 0x45:
8949 case 0x46:
8950 case 0x47:
8951 case 0x48:
8952 case 0x49:
8953 case 0x4a:
8954 case 0x4b:
8955 case 0x4c:
8956 case 0x4d:
8957 case 0x4e:
8958 case 0x4f:
cb712a9e 8959 if (address_mode == mode_64bit)
52b15da3
JH
8960 newrex = *codep;
8961 else
8962 return;
8963 break;
252b5132
RH
8964 case 0xf3:
8965 prefixes |= PREFIX_REPZ;
8966 break;
8967 case 0xf2:
8968 prefixes |= PREFIX_REPNZ;
8969 break;
8970 case 0xf0:
8971 prefixes |= PREFIX_LOCK;
8972 break;
8973 case 0x2e:
8974 prefixes |= PREFIX_CS;
8975 break;
8976 case 0x36:
8977 prefixes |= PREFIX_SS;
8978 break;
8979 case 0x3e:
8980 prefixes |= PREFIX_DS;
8981 break;
8982 case 0x26:
8983 prefixes |= PREFIX_ES;
8984 break;
8985 case 0x64:
8986 prefixes |= PREFIX_FS;
8987 break;
8988 case 0x65:
8989 prefixes |= PREFIX_GS;
8990 break;
8991 case 0x66:
8992 prefixes |= PREFIX_DATA;
8993 break;
8994 case 0x67:
8995 prefixes |= PREFIX_ADDR;
8996 break;
5076851f 8997 case FWAIT_OPCODE:
252b5132
RH
8998 /* fwait is really an instruction. If there are prefixes
8999 before the fwait, they belong to the fwait, *not* to the
9000 following instruction. */
3e7d61b2 9001 if (prefixes || rex)
252b5132
RH
9002 {
9003 prefixes |= PREFIX_FWAIT;
9004 codep++;
9005 return;
9006 }
9007 prefixes = PREFIX_FWAIT;
9008 break;
9009 default:
9010 return;
9011 }
52b15da3
JH
9012 /* Rex is ignored when followed by another prefix. */
9013 if (rex)
9014 {
3e7d61b2
AM
9015 rex_used = rex;
9016 return;
52b15da3
JH
9017 }
9018 rex = newrex;
c0f3af97 9019 rex_original = rex;
252b5132
RH
9020 codep++;
9021 }
9022}
9023
7d421014
ILT
9024/* Return the name of the prefix byte PREF, or NULL if PREF is not a
9025 prefix byte. */
9026
9027static const char *
26ca5450 9028prefix_name (int pref, int sizeflag)
7d421014 9029{
0003779b
L
9030 static const char *rexes [16] =
9031 {
9032 "rex", /* 0x40 */
9033 "rex.B", /* 0x41 */
9034 "rex.X", /* 0x42 */
9035 "rex.XB", /* 0x43 */
9036 "rex.R", /* 0x44 */
9037 "rex.RB", /* 0x45 */
9038 "rex.RX", /* 0x46 */
9039 "rex.RXB", /* 0x47 */
9040 "rex.W", /* 0x48 */
9041 "rex.WB", /* 0x49 */
9042 "rex.WX", /* 0x4a */
9043 "rex.WXB", /* 0x4b */
9044 "rex.WR", /* 0x4c */
9045 "rex.WRB", /* 0x4d */
9046 "rex.WRX", /* 0x4e */
9047 "rex.WRXB", /* 0x4f */
9048 };
9049
7d421014
ILT
9050 switch (pref)
9051 {
52b15da3
JH
9052 /* REX prefixes family. */
9053 case 0x40:
52b15da3 9054 case 0x41:
52b15da3 9055 case 0x42:
52b15da3 9056 case 0x43:
52b15da3 9057 case 0x44:
52b15da3 9058 case 0x45:
52b15da3 9059 case 0x46:
52b15da3 9060 case 0x47:
52b15da3 9061 case 0x48:
52b15da3 9062 case 0x49:
52b15da3 9063 case 0x4a:
52b15da3 9064 case 0x4b:
52b15da3 9065 case 0x4c:
52b15da3 9066 case 0x4d:
52b15da3 9067 case 0x4e:
52b15da3 9068 case 0x4f:
0003779b 9069 return rexes [pref - 0x40];
7d421014
ILT
9070 case 0xf3:
9071 return "repz";
9072 case 0xf2:
9073 return "repnz";
9074 case 0xf0:
9075 return "lock";
9076 case 0x2e:
9077 return "cs";
9078 case 0x36:
9079 return "ss";
9080 case 0x3e:
9081 return "ds";
9082 case 0x26:
9083 return "es";
9084 case 0x64:
9085 return "fs";
9086 case 0x65:
9087 return "gs";
9088 case 0x66:
9089 return (sizeflag & DFLAG) ? "data16" : "data32";
9090 case 0x67:
cb712a9e 9091 if (address_mode == mode_64bit)
db6eb5be 9092 return (sizeflag & AFLAG) ? "addr32" : "addr64";
c1a64871 9093 else
2888cb7a 9094 return (sizeflag & AFLAG) ? "addr16" : "addr32";
7d421014
ILT
9095 case FWAIT_OPCODE:
9096 return "fwait";
9097 default:
9098 return NULL;
9099 }
9100}
9101
ce518a5f
L
9102static char op_out[MAX_OPERANDS][100];
9103static int op_ad, op_index[MAX_OPERANDS];
1d9f512f 9104static int two_source_ops;
ce518a5f
L
9105static bfd_vma op_address[MAX_OPERANDS];
9106static bfd_vma op_riprel[MAX_OPERANDS];
52b15da3 9107static bfd_vma start_pc;
ce518a5f 9108
252b5132
RH
9109/*
9110 * On the 386's of 1988, the maximum length of an instruction is 15 bytes.
9111 * (see topic "Redundant prefixes" in the "Differences from 8086"
9112 * section of the "Virtual 8086 Mode" chapter.)
9113 * 'pc' should be the address of this instruction, it will
9114 * be used to print the target address if this is a relative jump or call
9115 * The function returns the length of this instruction in bytes.
9116 */
9117
252b5132 9118static char intel_syntax;
9d141669 9119static char intel_mnemonic = !SYSV386_COMPAT;
252b5132
RH
9120static char open_char;
9121static char close_char;
9122static char separator_char;
9123static char scale_char;
9124
e396998b
AM
9125/* Here for backwards compatibility. When gdb stops using
9126 print_insn_i386_att and print_insn_i386_intel these functions can
9127 disappear, and print_insn_i386 be merged into print_insn. */
252b5132 9128int
26ca5450 9129print_insn_i386_att (bfd_vma pc, disassemble_info *info)
252b5132
RH
9130{
9131 intel_syntax = 0;
e396998b
AM
9132
9133 return print_insn (pc, info);
252b5132
RH
9134}
9135
9136int
26ca5450 9137print_insn_i386_intel (bfd_vma pc, disassemble_info *info)
252b5132
RH
9138{
9139 intel_syntax = 1;
e396998b
AM
9140
9141 return print_insn (pc, info);
252b5132
RH
9142}
9143
e396998b 9144int
26ca5450 9145print_insn_i386 (bfd_vma pc, disassemble_info *info)
e396998b
AM
9146{
9147 intel_syntax = -1;
9148
9149 return print_insn (pc, info);
9150}
9151
f59a29b9
L
9152void
9153print_i386_disassembler_options (FILE *stream)
9154{
9155 fprintf (stream, _("\n\
9156The following i386/x86-64 specific disassembler options are supported for use\n\
9157with the -M switch (multiple options should be separated by commas):\n"));
9158
9159 fprintf (stream, _(" x86-64 Disassemble in 64bit mode\n"));
9160 fprintf (stream, _(" i386 Disassemble in 32bit mode\n"));
9161 fprintf (stream, _(" i8086 Disassemble in 16bit mode\n"));
9162 fprintf (stream, _(" att Display instruction in AT&T syntax\n"));
9163 fprintf (stream, _(" intel Display instruction in Intel syntax\n"));
9d141669
L
9164 fprintf (stream, _(" att-mnemonic\n"
9165 " Display instruction in AT&T mnemonic\n"));
9166 fprintf (stream, _(" intel-mnemonic\n"
9167 " Display instruction in Intel mnemonic\n"));
f59a29b9
L
9168 fprintf (stream, _(" addr64 Assume 64bit address size\n"));
9169 fprintf (stream, _(" addr32 Assume 32bit address size\n"));
9170 fprintf (stream, _(" addr16 Assume 16bit address size\n"));
9171 fprintf (stream, _(" data32 Assume 32bit data size\n"));
9172 fprintf (stream, _(" data16 Assume 16bit data size\n"));
9173 fprintf (stream, _(" suffix Always display instruction suffix in AT&T syntax\n"));
9174}
9175
b844680a
L
9176/* Get a pointer to struct dis386 with a valid name. */
9177
9178static const struct dis386 *
8bb15339 9179get_valid_dis386 (const struct dis386 *dp, disassemble_info *info)
b844680a 9180{
c0f3af97 9181 int index, vex_table_index;
b844680a
L
9182
9183 if (dp->name != NULL)
9184 return dp;
9185
9186 switch (dp->op[0].bytemode)
9187 {
1ceb70f8
L
9188 case USE_REG_TABLE:
9189 dp = &reg_table[dp->op[1].bytemode][modrm.reg];
9190 break;
9191
9192 case USE_MOD_TABLE:
9193 index = modrm.mod == 0x3 ? 1 : 0;
9194 dp = &mod_table[dp->op[1].bytemode][index];
9195 break;
9196
9197 case USE_RM_TABLE:
9198 dp = &rm_table[dp->op[1].bytemode][modrm.rm];
b844680a
L
9199 break;
9200
4e7d34a6 9201 case USE_PREFIX_TABLE:
c0f3af97 9202 if (need_vex)
b844680a 9203 {
c0f3af97
L
9204 /* The prefix in VEX is implicit. */
9205 switch (vex.prefix)
9206 {
9207 case 0:
9208 index = 0;
9209 break;
9210 case REPE_PREFIX_OPCODE:
9211 index = 1;
9212 break;
9213 case DATA_PREFIX_OPCODE:
9214 index = 2;
9215 break;
9216 case REPNE_PREFIX_OPCODE:
9217 index = 3;
9218 break;
9219 default:
9220 abort ();
9221 break;
9222 }
b844680a 9223 }
c0f3af97 9224 else
b844680a 9225 {
c0f3af97
L
9226 index = 0;
9227 used_prefixes |= (prefixes & PREFIX_REPZ);
9228 if (prefixes & PREFIX_REPZ)
b844680a 9229 {
c0f3af97
L
9230 index = 1;
9231 repz_prefix = NULL;
b844680a
L
9232 }
9233 else
9234 {
c0f3af97
L
9235 /* We should check PREFIX_REPNZ and PREFIX_REPZ before
9236 PREFIX_DATA. */
9237 used_prefixes |= (prefixes & PREFIX_REPNZ);
9238 if (prefixes & PREFIX_REPNZ)
9239 {
9240 index = 3;
9241 repnz_prefix = NULL;
9242 }
9243 else
b844680a 9244 {
c0f3af97
L
9245 used_prefixes |= (prefixes & PREFIX_DATA);
9246 if (prefixes & PREFIX_DATA)
9247 {
9248 index = 2;
9249 data_prefix = NULL;
9250 }
b844680a
L
9251 }
9252 }
9253 }
1ceb70f8 9254 dp = &prefix_table[dp->op[1].bytemode][index];
b844680a
L
9255 break;
9256
4e7d34a6 9257 case USE_X86_64_TABLE:
b844680a
L
9258 index = address_mode == mode_64bit ? 1 : 0;
9259 dp = &x86_64_table[dp->op[1].bytemode][index];
9260 break;
9261
4e7d34a6 9262 case USE_3BYTE_TABLE:
8bb15339
L
9263 FETCH_DATA (info, codep + 2);
9264 index = *codep++;
9265 dp = &three_byte_table[dp->op[1].bytemode][index];
9266 modrm.mod = (*codep >> 6) & 3;
9267 modrm.reg = (*codep >> 3) & 7;
9268 modrm.rm = *codep & 7;
9269 break;
9270
c0f3af97
L
9271 case USE_VEX_LEN_TABLE:
9272 if (!need_vex)
9273 abort ();
9274
9275 switch (vex.length)
9276 {
9277 case 128:
9278 index = 0;
9279 break;
9280 case 256:
9281 index = 1;
9282 break;
9283 default:
9284 abort ();
9285 break;
9286 }
9287
9288 dp = &vex_len_table[dp->op[1].bytemode][index];
9289 break;
9290
9291 case USE_VEX_C4_TABLE:
9292 FETCH_DATA (info, codep + 3);
9293 /* All bits in the REX prefix are ignored. */
9294 rex_ignored = rex;
9295 rex = ~(*codep >> 5) & 0x7;
9296 switch ((*codep & 0x1f))
9297 {
9298 default:
9299 BadOp ();
9300 case 0x1:
9301 vex_table_index = 0;
9302 break;
9303 case 0x2:
9304 vex_table_index = 1;
9305 break;
9306 case 0x3:
9307 vex_table_index = 2;
9308 break;
9309 }
9310 codep++;
9311 vex.w = *codep & 0x80;
9312 if (vex.w && address_mode == mode_64bit)
9313 rex |= REX_W;
9314
9315 vex.register_specifier = (~(*codep >> 3)) & 0xf;
9316 if (address_mode != mode_64bit
9317 && vex.register_specifier > 0x7)
9318 BadOp ();
9319
9320 vex.length = (*codep & 0x4) ? 256 : 128;
9321 switch ((*codep & 0x3))
9322 {
9323 case 0:
9324 vex.prefix = 0;
9325 break;
9326 case 1:
9327 vex.prefix = DATA_PREFIX_OPCODE;
9328 break;
9329 case 2:
9330 vex.prefix = REPE_PREFIX_OPCODE;
9331 break;
9332 case 3:
9333 vex.prefix = REPNE_PREFIX_OPCODE;
9334 break;
9335 }
9336 need_vex = 1;
9337 need_vex_reg = 1;
9338 codep++;
9339 index = *codep++;
9340 dp = &vex_table[vex_table_index][index];
9341 /* There is no MODRM byte for VEX [82|77]. */
9342 if (index != 0x77 && index != 0x82)
9343 {
9344 FETCH_DATA (info, codep + 1);
9345 modrm.mod = (*codep >> 6) & 3;
9346 modrm.reg = (*codep >> 3) & 7;
9347 modrm.rm = *codep & 7;
9348 }
9349 break;
9350
9351 case USE_VEX_C5_TABLE:
9352 FETCH_DATA (info, codep + 2);
9353 /* All bits in the REX prefix are ignored. */
9354 rex_ignored = rex;
9355 rex = (*codep & 0x80) ? 0 : REX_R;
9356
9357 vex.register_specifier = (~(*codep >> 3)) & 0xf;
9358 if (address_mode != mode_64bit
9359 && vex.register_specifier > 0x7)
9360 BadOp ();
9361
9362 vex.length = (*codep & 0x4) ? 256 : 128;
9363 switch ((*codep & 0x3))
9364 {
9365 case 0:
9366 vex.prefix = 0;
9367 break;
9368 case 1:
9369 vex.prefix = DATA_PREFIX_OPCODE;
9370 break;
9371 case 2:
9372 vex.prefix = REPE_PREFIX_OPCODE;
9373 break;
9374 case 3:
9375 vex.prefix = REPNE_PREFIX_OPCODE;
9376 break;
9377 }
9378 need_vex = 1;
9379 need_vex_reg = 1;
9380 codep++;
9381 index = *codep++;
9382 dp = &vex_table[dp->op[1].bytemode][index];
9383 /* There is no MODRM byte for VEX [82|77]. */
9384 if (index != 0x77 && index != 0x82)
9385 {
9386 FETCH_DATA (info, codep + 1);
9387 modrm.mod = (*codep >> 6) & 3;
9388 modrm.reg = (*codep >> 3) & 7;
9389 modrm.rm = *codep & 7;
9390 }
9391 break;
9392
b844680a 9393 default:
d34b5006 9394 abort ();
b844680a
L
9395 }
9396
9397 if (dp->name != NULL)
9398 return dp;
9399 else
8bb15339 9400 return get_valid_dis386 (dp, info);
b844680a
L
9401}
9402
e396998b 9403static int
26ca5450 9404print_insn (bfd_vma pc, disassemble_info *info)
252b5132 9405{
2da11e11 9406 const struct dis386 *dp;
252b5132 9407 int i;
ce518a5f 9408 char *op_txt[MAX_OPERANDS];
252b5132 9409 int needcomma;
e396998b
AM
9410 int sizeflag;
9411 const char *p;
252b5132 9412 struct dis_private priv;
eec0f4ca 9413 unsigned char op;
b844680a
L
9414 char prefix_obuf[32];
9415 char *prefix_obufp;
252b5132 9416
cb712a9e
L
9417 if (info->mach == bfd_mach_x86_64_intel_syntax
9418 || info->mach == bfd_mach_x86_64)
9419 address_mode = mode_64bit;
9420 else
9421 address_mode = mode_32bit;
52b15da3 9422
8373f971 9423 if (intel_syntax == (char) -1)
e396998b
AM
9424 intel_syntax = (info->mach == bfd_mach_i386_i386_intel_syntax
9425 || info->mach == bfd_mach_x86_64_intel_syntax);
9426
2da11e11 9427 if (info->mach == bfd_mach_i386_i386
52b15da3
JH
9428 || info->mach == bfd_mach_x86_64
9429 || info->mach == bfd_mach_i386_i386_intel_syntax
9430 || info->mach == bfd_mach_x86_64_intel_syntax)
e396998b 9431 priv.orig_sizeflag = AFLAG | DFLAG;
2da11e11 9432 else if (info->mach == bfd_mach_i386_i8086)
e396998b 9433 priv.orig_sizeflag = 0;
2da11e11
AM
9434 else
9435 abort ();
e396998b
AM
9436
9437 for (p = info->disassembler_options; p != NULL; )
9438 {
0112cd26 9439 if (CONST_STRNEQ (p, "x86-64"))
e396998b 9440 {
cb712a9e 9441 address_mode = mode_64bit;
e396998b
AM
9442 priv.orig_sizeflag = AFLAG | DFLAG;
9443 }
0112cd26 9444 else if (CONST_STRNEQ (p, "i386"))
e396998b 9445 {
cb712a9e 9446 address_mode = mode_32bit;
e396998b
AM
9447 priv.orig_sizeflag = AFLAG | DFLAG;
9448 }
0112cd26 9449 else if (CONST_STRNEQ (p, "i8086"))
e396998b 9450 {
cb712a9e 9451 address_mode = mode_16bit;
e396998b
AM
9452 priv.orig_sizeflag = 0;
9453 }
0112cd26 9454 else if (CONST_STRNEQ (p, "intel"))
e396998b
AM
9455 {
9456 intel_syntax = 1;
9d141669
L
9457 if (CONST_STRNEQ (p + 5, "-mnemonic"))
9458 intel_mnemonic = 1;
e396998b 9459 }
0112cd26 9460 else if (CONST_STRNEQ (p, "att"))
e396998b
AM
9461 {
9462 intel_syntax = 0;
9d141669
L
9463 if (CONST_STRNEQ (p + 3, "-mnemonic"))
9464 intel_mnemonic = 0;
e396998b 9465 }
0112cd26 9466 else if (CONST_STRNEQ (p, "addr"))
e396998b 9467 {
f59a29b9
L
9468 if (address_mode == mode_64bit)
9469 {
9470 if (p[4] == '3' && p[5] == '2')
9471 priv.orig_sizeflag &= ~AFLAG;
9472 else if (p[4] == '6' && p[5] == '4')
9473 priv.orig_sizeflag |= AFLAG;
9474 }
9475 else
9476 {
9477 if (p[4] == '1' && p[5] == '6')
9478 priv.orig_sizeflag &= ~AFLAG;
9479 else if (p[4] == '3' && p[5] == '2')
9480 priv.orig_sizeflag |= AFLAG;
9481 }
e396998b 9482 }
0112cd26 9483 else if (CONST_STRNEQ (p, "data"))
e396998b
AM
9484 {
9485 if (p[4] == '1' && p[5] == '6')
9486 priv.orig_sizeflag &= ~DFLAG;
9487 else if (p[4] == '3' && p[5] == '2')
9488 priv.orig_sizeflag |= DFLAG;
9489 }
0112cd26 9490 else if (CONST_STRNEQ (p, "suffix"))
e396998b
AM
9491 priv.orig_sizeflag |= SUFFIX_ALWAYS;
9492
9493 p = strchr (p, ',');
9494 if (p != NULL)
9495 p++;
9496 }
9497
9498 if (intel_syntax)
9499 {
9500 names64 = intel_names64;
9501 names32 = intel_names32;
9502 names16 = intel_names16;
9503 names8 = intel_names8;
9504 names8rex = intel_names8rex;
9505 names_seg = intel_names_seg;
db51cc60
L
9506 index64 = intel_index64;
9507 index32 = intel_index32;
e396998b
AM
9508 index16 = intel_index16;
9509 open_char = '[';
9510 close_char = ']';
9511 separator_char = '+';
9512 scale_char = '*';
9513 }
9514 else
9515 {
9516 names64 = att_names64;
9517 names32 = att_names32;
9518 names16 = att_names16;
9519 names8 = att_names8;
9520 names8rex = att_names8rex;
9521 names_seg = att_names_seg;
db51cc60
L
9522 index64 = att_index64;
9523 index32 = att_index32;
e396998b
AM
9524 index16 = att_index16;
9525 open_char = '(';
9526 close_char = ')';
9527 separator_char = ',';
9528 scale_char = ',';
9529 }
2da11e11 9530
4fe53c98 9531 /* The output looks better if we put 7 bytes on a line, since that
c608c12e 9532 puts most long word instructions on a single line. */
4fe53c98 9533 info->bytes_per_line = 7;
252b5132 9534
26ca5450 9535 info->private_data = &priv;
252b5132
RH
9536 priv.max_fetched = priv.the_buffer;
9537 priv.insn_start = pc;
252b5132
RH
9538
9539 obuf[0] = 0;
ce518a5f
L
9540 for (i = 0; i < MAX_OPERANDS; ++i)
9541 {
9542 op_out[i][0] = 0;
9543 op_index[i] = -1;
9544 }
252b5132
RH
9545
9546 the_info = info;
9547 start_pc = pc;
e396998b
AM
9548 start_codep = priv.the_buffer;
9549 codep = priv.the_buffer;
252b5132 9550
5076851f
ILT
9551 if (setjmp (priv.bailout) != 0)
9552 {
7d421014
ILT
9553 const char *name;
9554
5076851f 9555 /* Getting here means we tried for data but didn't get it. That
e396998b
AM
9556 means we have an incomplete instruction of some sort. Just
9557 print the first byte as a prefix or a .byte pseudo-op. */
9558 if (codep > priv.the_buffer)
5076851f 9559 {
e396998b 9560 name = prefix_name (priv.the_buffer[0], priv.orig_sizeflag);
7d421014
ILT
9561 if (name != NULL)
9562 (*info->fprintf_func) (info->stream, "%s", name);
9563 else
5076851f 9564 {
7d421014
ILT
9565 /* Just print the first byte as a .byte instruction. */
9566 (*info->fprintf_func) (info->stream, ".byte 0x%x",
e396998b 9567 (unsigned int) priv.the_buffer[0]);
5076851f 9568 }
5076851f 9569
7d421014 9570 return 1;
5076851f
ILT
9571 }
9572
9573 return -1;
9574 }
9575
52b15da3 9576 obufp = obuf;
252b5132
RH
9577 ckprefix ();
9578
9579 insn_codep = codep;
e396998b 9580 sizeflag = priv.orig_sizeflag;
252b5132
RH
9581
9582 FETCH_DATA (info, codep + 1);
9583 two_source_ops = (*codep == 0x62) || (*codep == 0xc8);
9584
3e7d61b2
AM
9585 if (((prefixes & PREFIX_FWAIT)
9586 && ((*codep < 0xd8) || (*codep > 0xdf)))
9587 || (rex && rex_used))
252b5132 9588 {
7d421014
ILT
9589 const char *name;
9590
3e7d61b2
AM
9591 /* fwait not followed by floating point instruction, or rex followed
9592 by other prefixes. Print the first prefix. */
e396998b 9593 name = prefix_name (priv.the_buffer[0], priv.orig_sizeflag);
7d421014
ILT
9594 if (name == NULL)
9595 name = INTERNAL_DISASSEMBLER_ERROR;
9596 (*info->fprintf_func) (info->stream, "%s", name);
9597 return 1;
252b5132
RH
9598 }
9599
eec0f4ca 9600 op = 0;
c1e679ec 9601
252b5132
RH
9602 if (*codep == 0x0f)
9603 {
eec0f4ca 9604 unsigned char threebyte;
252b5132 9605 FETCH_DATA (info, codep + 2);
eec0f4ca
L
9606 threebyte = *++codep;
9607 dp = &dis386_twobyte[threebyte];
252b5132 9608 need_modrm = twobyte_has_modrm[*codep];
eec0f4ca 9609 codep++;
252b5132
RH
9610 }
9611 else
9612 {
6439fc28 9613 dp = &dis386[*codep];
252b5132 9614 need_modrm = onebyte_has_modrm[*codep];
eec0f4ca 9615 codep++;
252b5132 9616 }
246c51aa 9617
b844680a 9618 if ((prefixes & PREFIX_REPZ))
7d421014 9619 {
b844680a 9620 repz_prefix = "repz ";
7d421014
ILT
9621 used_prefixes |= PREFIX_REPZ;
9622 }
b844680a
L
9623 else
9624 repz_prefix = NULL;
9625
9626 if ((prefixes & PREFIX_REPNZ))
7d421014 9627 {
b844680a 9628 repnz_prefix = "repnz ";
7d421014
ILT
9629 used_prefixes |= PREFIX_REPNZ;
9630 }
b844680a
L
9631 else
9632 repnz_prefix = NULL;
050dfa73 9633
b844680a 9634 if ((prefixes & PREFIX_LOCK))
7d421014 9635 {
b844680a 9636 lock_prefix = "lock ";
7d421014
ILT
9637 used_prefixes |= PREFIX_LOCK;
9638 }
b844680a
L
9639 else
9640 lock_prefix = NULL;
c608c12e 9641
b844680a 9642 addr_prefix = NULL;
c608c12e
AM
9643 if (prefixes & PREFIX_ADDR)
9644 {
9645 sizeflag ^= AFLAG;
ce518a5f 9646 if (dp->op[2].bytemode != loop_jcxz_mode || intel_syntax)
3ffd33cf 9647 {
cb712a9e 9648 if ((sizeflag & AFLAG) || address_mode == mode_64bit)
b844680a 9649 addr_prefix = "addr32 ";
3ffd33cf 9650 else
b844680a 9651 addr_prefix = "addr16 ";
3ffd33cf
AM
9652 used_prefixes |= PREFIX_ADDR;
9653 }
9654 }
9655
b844680a
L
9656 data_prefix = NULL;
9657 if ((prefixes & PREFIX_DATA))
3ffd33cf
AM
9658 {
9659 sizeflag ^= DFLAG;
ce518a5f
L
9660 if (dp->op[2].bytemode == cond_jump_mode
9661 && dp->op[0].bytemode == v_mode
6439fc28 9662 && !intel_syntax)
3ffd33cf
AM
9663 {
9664 if (sizeflag & DFLAG)
b844680a 9665 data_prefix = "data32 ";
3ffd33cf 9666 else
b844680a 9667 data_prefix = "data16 ";
3ffd33cf
AM
9668 used_prefixes |= PREFIX_DATA;
9669 }
9670 }
9671
8bb15339 9672 if (need_modrm)
252b5132
RH
9673 {
9674 FETCH_DATA (info, codep + 1);
7967e09e
L
9675 modrm.mod = (*codep >> 6) & 3;
9676 modrm.reg = (*codep >> 3) & 7;
9677 modrm.rm = *codep & 7;
252b5132
RH
9678 }
9679
ce518a5f 9680 if (dp->name == NULL && dp->op[0].bytemode == FLOATCODE)
252b5132
RH
9681 {
9682 dofloat (sizeflag);
9683 }
9684 else
9685 {
c0f3af97
L
9686 need_vex = 0;
9687 need_vex_reg = 0;
dae39acc 9688 vex_w_done = 0;
8bb15339 9689 dp = get_valid_dis386 (dp, info);
b844680a 9690 if (dp != NULL && putop (dp->name, sizeflag) == 0)
ce518a5f
L
9691 {
9692 for (i = 0; i < MAX_OPERANDS; ++i)
9693 {
246c51aa 9694 obufp = op_out[i];
ce518a5f
L
9695 op_ad = MAX_OPERANDS - 1 - i;
9696 if (dp->op[i].rtn)
9697 (*dp->op[i].rtn) (dp->op[i].bytemode, sizeflag);
9698 }
6439fc28 9699 }
252b5132
RH
9700 }
9701
7d421014
ILT
9702 /* See if any prefixes were not used. If so, print the first one
9703 separately. If we don't do this, we'll wind up printing an
9704 instruction stream which does not precisely correspond to the
9705 bytes we are disassembling. */
9706 if ((prefixes & ~used_prefixes) != 0)
9707 {
9708 const char *name;
9709
e396998b 9710 name = prefix_name (priv.the_buffer[0], priv.orig_sizeflag);
7d421014
ILT
9711 if (name == NULL)
9712 name = INTERNAL_DISASSEMBLER_ERROR;
9713 (*info->fprintf_func) (info->stream, "%s", name);
9714 return 1;
9715 }
c0f3af97 9716 if ((rex_original & ~rex_used) || rex_ignored)
52b15da3
JH
9717 {
9718 const char *name;
c0f3af97 9719 name = prefix_name (rex_original, priv.orig_sizeflag);
52b15da3
JH
9720 if (name == NULL)
9721 name = INTERNAL_DISASSEMBLER_ERROR;
9722 (*info->fprintf_func) (info->stream, "%s ", name);
9723 }
7d421014 9724
b844680a
L
9725 prefix_obuf[0] = 0;
9726 prefix_obufp = prefix_obuf;
9727 if (lock_prefix)
9728 prefix_obufp = stpcpy (prefix_obufp, lock_prefix);
9729 if (repz_prefix)
9730 prefix_obufp = stpcpy (prefix_obufp, repz_prefix);
9731 if (repnz_prefix)
9732 prefix_obufp = stpcpy (prefix_obufp, repnz_prefix);
9733 if (addr_prefix)
9734 prefix_obufp = stpcpy (prefix_obufp, addr_prefix);
9735 if (data_prefix)
9736 prefix_obufp = stpcpy (prefix_obufp, data_prefix);
9737
9738 if (prefix_obuf[0] != 0)
9739 (*info->fprintf_func) (info->stream, "%s", prefix_obuf);
9740
ea397f5b 9741 obufp = mnemonicendp;
b844680a 9742 for (i = strlen (obuf) + strlen (prefix_obuf); i < 6; i++)
252b5132
RH
9743 oappend (" ");
9744 oappend (" ");
9745 (*info->fprintf_func) (info->stream, "%s", obuf);
9746
9747 /* The enter and bound instructions are printed with operands in the same
9748 order as the intel book; everything else is printed in reverse order. */
2da11e11 9749 if (intel_syntax || two_source_ops)
252b5132 9750 {
185b1163
L
9751 bfd_vma riprel;
9752
ce518a5f
L
9753 for (i = 0; i < MAX_OPERANDS; ++i)
9754 op_txt[i] = op_out[i];
246c51aa 9755
ce518a5f
L
9756 for (i = 0; i < (MAX_OPERANDS >> 1); ++i)
9757 {
9758 op_ad = op_index[i];
9759 op_index[i] = op_index[MAX_OPERANDS - 1 - i];
9760 op_index[MAX_OPERANDS - 1 - i] = op_ad;
185b1163
L
9761 riprel = op_riprel[i];
9762 op_riprel[i] = op_riprel [MAX_OPERANDS - 1 - i];
9763 op_riprel[MAX_OPERANDS - 1 - i] = riprel;
ce518a5f 9764 }
252b5132
RH
9765 }
9766 else
9767 {
ce518a5f
L
9768 for (i = 0; i < MAX_OPERANDS; ++i)
9769 op_txt[MAX_OPERANDS - 1 - i] = op_out[i];
050dfa73
MM
9770 }
9771
ce518a5f
L
9772 needcomma = 0;
9773 for (i = 0; i < MAX_OPERANDS; ++i)
9774 if (*op_txt[i])
9775 {
9776 if (needcomma)
9777 (*info->fprintf_func) (info->stream, ",");
9778 if (op_index[i] != -1 && !op_riprel[i])
9779 (*info->print_address_func) ((bfd_vma) op_address[op_index[i]], info);
9780 else
9781 (*info->fprintf_func) (info->stream, "%s", op_txt[i]);
9782 needcomma = 1;
9783 }
050dfa73 9784
ce518a5f 9785 for (i = 0; i < MAX_OPERANDS; i++)
52b15da3
JH
9786 if (op_index[i] != -1 && op_riprel[i])
9787 {
9788 (*info->fprintf_func) (info->stream, " # ");
9789 (*info->print_address_func) ((bfd_vma) (start_pc + codep - start_codep
9790 + op_address[op_index[i]]), info);
185b1163 9791 break;
52b15da3 9792 }
e396998b 9793 return codep - priv.the_buffer;
252b5132
RH
9794}
9795
6439fc28 9796static const char *float_mem[] = {
252b5132 9797 /* d8 */
7c52e0e8
L
9798 "fadd{s|}",
9799 "fmul{s|}",
9800 "fcom{s|}",
9801 "fcomp{s|}",
9802 "fsub{s|}",
9803 "fsubr{s|}",
9804 "fdiv{s|}",
9805 "fdivr{s|}",
db6eb5be 9806 /* d9 */
7c52e0e8 9807 "fld{s|}",
252b5132 9808 "(bad)",
7c52e0e8
L
9809 "fst{s|}",
9810 "fstp{s|}",
9306ca4a 9811 "fldenvIC",
252b5132 9812 "fldcw",
9306ca4a 9813 "fNstenvIC",
252b5132
RH
9814 "fNstcw",
9815 /* da */
7c52e0e8
L
9816 "fiadd{l|}",
9817 "fimul{l|}",
9818 "ficom{l|}",
9819 "ficomp{l|}",
9820 "fisub{l|}",
9821 "fisubr{l|}",
9822 "fidiv{l|}",
9823 "fidivr{l|}",
252b5132 9824 /* db */
7c52e0e8
L
9825 "fild{l|}",
9826 "fisttp{l|}",
9827 "fist{l|}",
9828 "fistp{l|}",
252b5132 9829 "(bad)",
6439fc28 9830 "fld{t||t|}",
252b5132 9831 "(bad)",
6439fc28 9832 "fstp{t||t|}",
252b5132 9833 /* dc */
7c52e0e8
L
9834 "fadd{l|}",
9835 "fmul{l|}",
9836 "fcom{l|}",
9837 "fcomp{l|}",
9838 "fsub{l|}",
9839 "fsubr{l|}",
9840 "fdiv{l|}",
9841 "fdivr{l|}",
252b5132 9842 /* dd */
7c52e0e8
L
9843 "fld{l|}",
9844 "fisttp{ll|}",
9845 "fst{l||}",
9846 "fstp{l|}",
9306ca4a 9847 "frstorIC",
252b5132 9848 "(bad)",
9306ca4a 9849 "fNsaveIC",
252b5132
RH
9850 "fNstsw",
9851 /* de */
9852 "fiadd",
9853 "fimul",
9854 "ficom",
9855 "ficomp",
9856 "fisub",
9857 "fisubr",
9858 "fidiv",
9859 "fidivr",
9860 /* df */
9861 "fild",
ca164297 9862 "fisttp",
252b5132
RH
9863 "fist",
9864 "fistp",
9865 "fbld",
7c52e0e8 9866 "fild{ll|}",
252b5132 9867 "fbstp",
7c52e0e8 9868 "fistp{ll|}",
1d9f512f
AM
9869};
9870
9871static const unsigned char float_mem_mode[] = {
9872 /* d8 */
9873 d_mode,
9874 d_mode,
9875 d_mode,
9876 d_mode,
9877 d_mode,
9878 d_mode,
9879 d_mode,
9880 d_mode,
9881 /* d9 */
9882 d_mode,
9883 0,
9884 d_mode,
9885 d_mode,
9886 0,
9887 w_mode,
9888 0,
9889 w_mode,
9890 /* da */
9891 d_mode,
9892 d_mode,
9893 d_mode,
9894 d_mode,
9895 d_mode,
9896 d_mode,
9897 d_mode,
9898 d_mode,
9899 /* db */
9900 d_mode,
9901 d_mode,
9902 d_mode,
9903 d_mode,
9904 0,
9306ca4a 9905 t_mode,
1d9f512f 9906 0,
9306ca4a 9907 t_mode,
1d9f512f
AM
9908 /* dc */
9909 q_mode,
9910 q_mode,
9911 q_mode,
9912 q_mode,
9913 q_mode,
9914 q_mode,
9915 q_mode,
9916 q_mode,
9917 /* dd */
9918 q_mode,
9919 q_mode,
9920 q_mode,
9921 q_mode,
9922 0,
9923 0,
9924 0,
9925 w_mode,
9926 /* de */
9927 w_mode,
9928 w_mode,
9929 w_mode,
9930 w_mode,
9931 w_mode,
9932 w_mode,
9933 w_mode,
9934 w_mode,
9935 /* df */
9936 w_mode,
9937 w_mode,
9938 w_mode,
9939 w_mode,
9306ca4a 9940 t_mode,
1d9f512f 9941 q_mode,
9306ca4a 9942 t_mode,
1d9f512f 9943 q_mode
252b5132
RH
9944};
9945
ce518a5f
L
9946#define ST { OP_ST, 0 }
9947#define STi { OP_STi, 0 }
252b5132 9948
4efba78c
L
9949#define FGRPd9_2 NULL, { { NULL, 0 } }
9950#define FGRPd9_4 NULL, { { NULL, 1 } }
9951#define FGRPd9_5 NULL, { { NULL, 2 } }
9952#define FGRPd9_6 NULL, { { NULL, 3 } }
9953#define FGRPd9_7 NULL, { { NULL, 4 } }
9954#define FGRPda_5 NULL, { { NULL, 5 } }
9955#define FGRPdb_4 NULL, { { NULL, 6 } }
9956#define FGRPde_3 NULL, { { NULL, 7 } }
9957#define FGRPdf_4 NULL, { { NULL, 8 } }
252b5132 9958
2da11e11 9959static const struct dis386 float_reg[][8] = {
252b5132
RH
9960 /* d8 */
9961 {
ce518a5f
L
9962 { "fadd", { ST, STi } },
9963 { "fmul", { ST, STi } },
9964 { "fcom", { STi } },
9965 { "fcomp", { STi } },
9966 { "fsub", { ST, STi } },
9967 { "fsubr", { ST, STi } },
9968 { "fdiv", { ST, STi } },
9969 { "fdivr", { ST, STi } },
252b5132
RH
9970 },
9971 /* d9 */
9972 {
ce518a5f
L
9973 { "fld", { STi } },
9974 { "fxch", { STi } },
252b5132 9975 { FGRPd9_2 },
ce518a5f 9976 { "(bad)", { XX } },
252b5132
RH
9977 { FGRPd9_4 },
9978 { FGRPd9_5 },
9979 { FGRPd9_6 },
9980 { FGRPd9_7 },
9981 },
9982 /* da */
9983 {
ce518a5f
L
9984 { "fcmovb", { ST, STi } },
9985 { "fcmove", { ST, STi } },
9986 { "fcmovbe",{ ST, STi } },
9987 { "fcmovu", { ST, STi } },
9988 { "(bad)", { XX } },
252b5132 9989 { FGRPda_5 },
ce518a5f
L
9990 { "(bad)", { XX } },
9991 { "(bad)", { XX } },
252b5132
RH
9992 },
9993 /* db */
9994 {
ce518a5f
L
9995 { "fcmovnb",{ ST, STi } },
9996 { "fcmovne",{ ST, STi } },
9997 { "fcmovnbe",{ ST, STi } },
9998 { "fcmovnu",{ ST, STi } },
252b5132 9999 { FGRPdb_4 },
ce518a5f
L
10000 { "fucomi", { ST, STi } },
10001 { "fcomi", { ST, STi } },
10002 { "(bad)", { XX } },
252b5132
RH
10003 },
10004 /* dc */
10005 {
ce518a5f
L
10006 { "fadd", { STi, ST } },
10007 { "fmul", { STi, ST } },
10008 { "(bad)", { XX } },
10009 { "(bad)", { XX } },
9d141669
L
10010 { "fsub!M", { STi, ST } },
10011 { "fsubM", { STi, ST } },
10012 { "fdiv!M", { STi, ST } },
10013 { "fdivM", { STi, ST } },
252b5132
RH
10014 },
10015 /* dd */
10016 {
ce518a5f
L
10017 { "ffree", { STi } },
10018 { "(bad)", { XX } },
10019 { "fst", { STi } },
10020 { "fstp", { STi } },
10021 { "fucom", { STi } },
10022 { "fucomp", { STi } },
10023 { "(bad)", { XX } },
10024 { "(bad)", { XX } },
252b5132
RH
10025 },
10026 /* de */
10027 {
ce518a5f
L
10028 { "faddp", { STi, ST } },
10029 { "fmulp", { STi, ST } },
10030 { "(bad)", { XX } },
252b5132 10031 { FGRPde_3 },
9d141669
L
10032 { "fsub!Mp", { STi, ST } },
10033 { "fsubMp", { STi, ST } },
10034 { "fdiv!Mp", { STi, ST } },
10035 { "fdivMp", { STi, ST } },
252b5132
RH
10036 },
10037 /* df */
10038 {
ce518a5f
L
10039 { "ffreep", { STi } },
10040 { "(bad)", { XX } },
10041 { "(bad)", { XX } },
10042 { "(bad)", { XX } },
252b5132 10043 { FGRPdf_4 },
ce518a5f
L
10044 { "fucomip", { ST, STi } },
10045 { "fcomip", { ST, STi } },
10046 { "(bad)", { XX } },
252b5132
RH
10047 },
10048};
10049
252b5132
RH
10050static char *fgrps[][8] = {
10051 /* d9_2 0 */
10052 {
10053 "fnop","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
10054 },
10055
10056 /* d9_4 1 */
10057 {
10058 "fchs","fabs","(bad)","(bad)","ftst","fxam","(bad)","(bad)",
10059 },
10060
10061 /* d9_5 2 */
10062 {
10063 "fld1","fldl2t","fldl2e","fldpi","fldlg2","fldln2","fldz","(bad)",
10064 },
10065
10066 /* d9_6 3 */
10067 {
10068 "f2xm1","fyl2x","fptan","fpatan","fxtract","fprem1","fdecstp","fincstp",
10069 },
10070
10071 /* d9_7 4 */
10072 {
10073 "fprem","fyl2xp1","fsqrt","fsincos","frndint","fscale","fsin","fcos",
10074 },
10075
10076 /* da_5 5 */
10077 {
10078 "(bad)","fucompp","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
10079 },
10080
10081 /* db_4 6 */
10082 {
10083 "feni(287 only)","fdisi(287 only)","fNclex","fNinit",
10084 "fNsetpm(287 only)","(bad)","(bad)","(bad)",
10085 },
10086
10087 /* de_3 7 */
10088 {
10089 "(bad)","fcompp","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
10090 },
10091
10092 /* df_4 8 */
10093 {
10094 "fNstsw","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
10095 },
10096};
10097
b6169b20
L
10098static void
10099swap_operand (void)
10100{
10101 mnemonicendp[0] = '.';
10102 mnemonicendp[1] = 's';
10103 mnemonicendp += 2;
10104}
10105
b844680a
L
10106static void
10107OP_Skip_MODRM (int bytemode ATTRIBUTE_UNUSED,
10108 int sizeflag ATTRIBUTE_UNUSED)
10109{
10110 /* Skip mod/rm byte. */
10111 MODRM_CHECK;
10112 codep++;
10113}
10114
252b5132 10115static void
26ca5450 10116dofloat (int sizeflag)
252b5132 10117{
2da11e11 10118 const struct dis386 *dp;
252b5132
RH
10119 unsigned char floatop;
10120
10121 floatop = codep[-1];
10122
7967e09e 10123 if (modrm.mod != 3)
252b5132 10124 {
7967e09e 10125 int fp_indx = (floatop - 0xd8) * 8 + modrm.reg;
1d9f512f
AM
10126
10127 putop (float_mem[fp_indx], sizeflag);
ce518a5f 10128 obufp = op_out[0];
6e50d963 10129 op_ad = 2;
1d9f512f 10130 OP_E (float_mem_mode[fp_indx], sizeflag);
252b5132
RH
10131 return;
10132 }
6608db57 10133 /* Skip mod/rm byte. */
4bba6815 10134 MODRM_CHECK;
252b5132
RH
10135 codep++;
10136
7967e09e 10137 dp = &float_reg[floatop - 0xd8][modrm.reg];
252b5132
RH
10138 if (dp->name == NULL)
10139 {
7967e09e 10140 putop (fgrps[dp->op[0].bytemode][modrm.rm], sizeflag);
252b5132 10141
6608db57 10142 /* Instruction fnstsw is only one with strange arg. */
252b5132 10143 if (floatop == 0xdf && codep[-1] == 0xe0)
ce518a5f 10144 strcpy (op_out[0], names16[0]);
252b5132
RH
10145 }
10146 else
10147 {
10148 putop (dp->name, sizeflag);
10149
ce518a5f 10150 obufp = op_out[0];
6e50d963 10151 op_ad = 2;
ce518a5f
L
10152 if (dp->op[0].rtn)
10153 (*dp->op[0].rtn) (dp->op[0].bytemode, sizeflag);
6e50d963 10154
ce518a5f 10155 obufp = op_out[1];
6e50d963 10156 op_ad = 1;
ce518a5f
L
10157 if (dp->op[1].rtn)
10158 (*dp->op[1].rtn) (dp->op[1].bytemode, sizeflag);
252b5132
RH
10159 }
10160}
10161
252b5132 10162static void
26ca5450 10163OP_ST (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 10164{
422673a9 10165 oappend ("%st" + intel_syntax);
252b5132
RH
10166}
10167
252b5132 10168static void
26ca5450 10169OP_STi (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 10170{
7967e09e 10171 sprintf (scratchbuf, "%%st(%d)", modrm.rm);
d708bcba 10172 oappend (scratchbuf + intel_syntax);
252b5132
RH
10173}
10174
6608db57 10175/* Capital letters in template are macros. */
6439fc28 10176static int
26ca5450 10177putop (const char *template, int sizeflag)
252b5132 10178{
2da11e11 10179 const char *p;
9306ca4a 10180 int alt = 0;
9d141669 10181 int cond = 1;
98b528ac
L
10182 unsigned int l = 0, len = 1;
10183 char last[4];
10184
10185#define SAVE_LAST(c) \
10186 if (l < len && l < sizeof (last)) \
10187 last[l++] = c; \
10188 else \
10189 abort ();
252b5132
RH
10190
10191 for (p = template; *p; p++)
10192 {
10193 switch (*p)
10194 {
10195 default:
10196 *obufp++ = *p;
10197 break;
98b528ac
L
10198 case '%':
10199 len++;
10200 break;
9d141669
L
10201 case '!':
10202 cond = 0;
10203 break;
6439fc28
AM
10204 case '{':
10205 alt = 0;
10206 if (intel_syntax)
6439fc28
AM
10207 {
10208 while (*++p != '|')
7c52e0e8
L
10209 if (*p == '}' || *p == '\0')
10210 abort ();
6439fc28 10211 }
9306ca4a
JB
10212 /* Fall through. */
10213 case 'I':
10214 alt = 1;
10215 continue;
6439fc28
AM
10216 case '|':
10217 while (*++p != '}')
10218 {
10219 if (*p == '\0')
10220 abort ();
10221 }
10222 break;
10223 case '}':
10224 break;
252b5132 10225 case 'A':
db6eb5be
AM
10226 if (intel_syntax)
10227 break;
7967e09e 10228 if (modrm.mod != 3 || (sizeflag & SUFFIX_ALWAYS))
252b5132
RH
10229 *obufp++ = 'b';
10230 break;
10231 case 'B':
db6eb5be
AM
10232 if (intel_syntax)
10233 break;
252b5132
RH
10234 if (sizeflag & SUFFIX_ALWAYS)
10235 *obufp++ = 'b';
252b5132 10236 break;
9306ca4a
JB
10237 case 'C':
10238 if (intel_syntax && !alt)
10239 break;
10240 if ((prefixes & PREFIX_DATA) || (sizeflag & SUFFIX_ALWAYS))
10241 {
10242 if (sizeflag & DFLAG)
10243 *obufp++ = intel_syntax ? 'd' : 'l';
10244 else
10245 *obufp++ = intel_syntax ? 'w' : 's';
10246 used_prefixes |= (prefixes & PREFIX_DATA);
10247 }
10248 break;
ed7841b3
JB
10249 case 'D':
10250 if (intel_syntax || !(sizeflag & SUFFIX_ALWAYS))
10251 break;
161a04f6 10252 USED_REX (REX_W);
7967e09e 10253 if (modrm.mod == 3)
ed7841b3 10254 {
161a04f6 10255 if (rex & REX_W)
ed7841b3
JB
10256 *obufp++ = 'q';
10257 else if (sizeflag & DFLAG)
10258 *obufp++ = intel_syntax ? 'd' : 'l';
10259 else
10260 *obufp++ = 'w';
10261 used_prefixes |= (prefixes & PREFIX_DATA);
10262 }
10263 else
10264 *obufp++ = 'w';
10265 break;
252b5132 10266 case 'E': /* For jcxz/jecxz */
cb712a9e 10267 if (address_mode == mode_64bit)
c1a64871
JH
10268 {
10269 if (sizeflag & AFLAG)
10270 *obufp++ = 'r';
10271 else
10272 *obufp++ = 'e';
10273 }
10274 else
10275 if (sizeflag & AFLAG)
10276 *obufp++ = 'e';
3ffd33cf
AM
10277 used_prefixes |= (prefixes & PREFIX_ADDR);
10278 break;
10279 case 'F':
db6eb5be
AM
10280 if (intel_syntax)
10281 break;
e396998b 10282 if ((prefixes & PREFIX_ADDR) || (sizeflag & SUFFIX_ALWAYS))
3ffd33cf
AM
10283 {
10284 if (sizeflag & AFLAG)
cb712a9e 10285 *obufp++ = address_mode == mode_64bit ? 'q' : 'l';
3ffd33cf 10286 else
cb712a9e 10287 *obufp++ = address_mode == mode_64bit ? 'l' : 'w';
3ffd33cf
AM
10288 used_prefixes |= (prefixes & PREFIX_ADDR);
10289 }
252b5132 10290 break;
52fd6d94
JB
10291 case 'G':
10292 if (intel_syntax || (obufp[-1] != 's' && !(sizeflag & SUFFIX_ALWAYS)))
10293 break;
161a04f6 10294 if ((rex & REX_W) || (sizeflag & DFLAG))
52fd6d94
JB
10295 *obufp++ = 'l';
10296 else
10297 *obufp++ = 'w';
161a04f6 10298 if (!(rex & REX_W))
52fd6d94
JB
10299 used_prefixes |= (prefixes & PREFIX_DATA);
10300 break;
5dd0794d 10301 case 'H':
db6eb5be
AM
10302 if (intel_syntax)
10303 break;
5dd0794d
AM
10304 if ((prefixes & (PREFIX_CS | PREFIX_DS)) == PREFIX_CS
10305 || (prefixes & (PREFIX_CS | PREFIX_DS)) == PREFIX_DS)
10306 {
10307 used_prefixes |= prefixes & (PREFIX_CS | PREFIX_DS);
10308 *obufp++ = ',';
10309 *obufp++ = 'p';
10310 if (prefixes & PREFIX_DS)
10311 *obufp++ = 't';
10312 else
10313 *obufp++ = 'n';
10314 }
10315 break;
9306ca4a
JB
10316 case 'J':
10317 if (intel_syntax)
10318 break;
10319 *obufp++ = 'l';
10320 break;
42903f7f
L
10321 case 'K':
10322 USED_REX (REX_W);
10323 if (rex & REX_W)
10324 *obufp++ = 'q';
10325 else
10326 *obufp++ = 'd';
10327 break;
6dd5059a
L
10328 case 'Z':
10329 if (intel_syntax)
10330 break;
10331 if (address_mode == mode_64bit && (sizeflag & SUFFIX_ALWAYS))
10332 {
10333 *obufp++ = 'q';
10334 break;
10335 }
10336 /* Fall through. */
98b528ac 10337 goto case_L;
252b5132 10338 case 'L':
98b528ac
L
10339 if (l != 0 || len != 1)
10340 {
10341 SAVE_LAST (*p);
10342 break;
10343 }
10344case_L:
db6eb5be
AM
10345 if (intel_syntax)
10346 break;
252b5132
RH
10347 if (sizeflag & SUFFIX_ALWAYS)
10348 *obufp++ = 'l';
252b5132 10349 break;
9d141669
L
10350 case 'M':
10351 if (intel_mnemonic != cond)
10352 *obufp++ = 'r';
10353 break;
252b5132
RH
10354 case 'N':
10355 if ((prefixes & PREFIX_FWAIT) == 0)
10356 *obufp++ = 'n';
7d421014
ILT
10357 else
10358 used_prefixes |= PREFIX_FWAIT;
252b5132 10359 break;
52b15da3 10360 case 'O':
161a04f6
L
10361 USED_REX (REX_W);
10362 if (rex & REX_W)
6439fc28 10363 *obufp++ = 'o';
a35ca55a
JB
10364 else if (intel_syntax && (sizeflag & DFLAG))
10365 *obufp++ = 'q';
52b15da3
JH
10366 else
10367 *obufp++ = 'd';
161a04f6 10368 if (!(rex & REX_W))
a35ca55a 10369 used_prefixes |= (prefixes & PREFIX_DATA);
52b15da3 10370 break;
6439fc28 10371 case 'T':
db6eb5be
AM
10372 if (intel_syntax)
10373 break;
cb712a9e 10374 if (address_mode == mode_64bit && (sizeflag & DFLAG))
6439fc28
AM
10375 {
10376 *obufp++ = 'q';
10377 break;
10378 }
6608db57 10379 /* Fall through. */
252b5132 10380 case 'P':
db6eb5be
AM
10381 if (intel_syntax)
10382 break;
252b5132 10383 if ((prefixes & PREFIX_DATA)
161a04f6 10384 || (rex & REX_W)
e396998b 10385 || (sizeflag & SUFFIX_ALWAYS))
252b5132 10386 {
161a04f6
L
10387 USED_REX (REX_W);
10388 if (rex & REX_W)
52b15da3 10389 *obufp++ = 'q';
c2419411 10390 else
52b15da3
JH
10391 {
10392 if (sizeflag & DFLAG)
10393 *obufp++ = 'l';
10394 else
10395 *obufp++ = 'w';
52b15da3 10396 }
1a114b12 10397 used_prefixes |= (prefixes & PREFIX_DATA);
252b5132
RH
10398 }
10399 break;
6439fc28 10400 case 'U':
db6eb5be
AM
10401 if (intel_syntax)
10402 break;
cb712a9e 10403 if (address_mode == mode_64bit && (sizeflag & DFLAG))
6439fc28 10404 {
7967e09e 10405 if (modrm.mod != 3 || (sizeflag & SUFFIX_ALWAYS))
1a114b12 10406 *obufp++ = 'q';
6439fc28
AM
10407 break;
10408 }
6608db57 10409 /* Fall through. */
98b528ac 10410 goto case_Q;
252b5132 10411 case 'Q':
98b528ac 10412 if (l == 0 && len == 1)
252b5132 10413 {
98b528ac
L
10414case_Q:
10415 if (intel_syntax && !alt)
10416 break;
10417 USED_REX (REX_W);
10418 if (modrm.mod != 3 || (sizeflag & SUFFIX_ALWAYS))
52b15da3 10419 {
98b528ac
L
10420 if (rex & REX_W)
10421 *obufp++ = 'q';
52b15da3 10422 else
98b528ac
L
10423 {
10424 if (sizeflag & DFLAG)
10425 *obufp++ = intel_syntax ? 'd' : 'l';
10426 else
10427 *obufp++ = 'w';
10428 }
10429 used_prefixes |= (prefixes & PREFIX_DATA);
52b15da3 10430 }
98b528ac
L
10431 }
10432 else
10433 {
10434 if (l != 1 || len != 2 || last[0] != 'L')
10435 {
10436 SAVE_LAST (*p);
10437 break;
10438 }
10439 if (intel_syntax
10440 || (modrm.mod == 3 && !(sizeflag & SUFFIX_ALWAYS)))
10441 break;
10442 if ((rex & REX_W))
10443 {
10444 USED_REX (REX_W);
10445 *obufp++ = 'q';
10446 }
10447 else
10448 *obufp++ = 'l';
252b5132
RH
10449 }
10450 break;
10451 case 'R':
161a04f6
L
10452 USED_REX (REX_W);
10453 if (rex & REX_W)
a35ca55a
JB
10454 *obufp++ = 'q';
10455 else if (sizeflag & DFLAG)
c608c12e 10456 {
a35ca55a 10457 if (intel_syntax)
c608c12e 10458 *obufp++ = 'd';
c608c12e 10459 else
a35ca55a 10460 *obufp++ = 'l';
c608c12e 10461 }
252b5132 10462 else
a35ca55a
JB
10463 *obufp++ = 'w';
10464 if (intel_syntax && !p[1]
161a04f6 10465 && ((rex & REX_W) || (sizeflag & DFLAG)))
a35ca55a 10466 *obufp++ = 'e';
161a04f6 10467 if (!(rex & REX_W))
52b15da3 10468 used_prefixes |= (prefixes & PREFIX_DATA);
252b5132 10469 break;
1a114b12
JB
10470 case 'V':
10471 if (intel_syntax)
10472 break;
cb712a9e 10473 if (address_mode == mode_64bit && (sizeflag & DFLAG))
1a114b12
JB
10474 {
10475 if (sizeflag & SUFFIX_ALWAYS)
10476 *obufp++ = 'q';
10477 break;
10478 }
10479 /* Fall through. */
252b5132 10480 case 'S':
db6eb5be
AM
10481 if (intel_syntax)
10482 break;
252b5132
RH
10483 if (sizeflag & SUFFIX_ALWAYS)
10484 {
161a04f6 10485 if (rex & REX_W)
52b15da3 10486 *obufp++ = 'q';
252b5132 10487 else
52b15da3
JH
10488 {
10489 if (sizeflag & DFLAG)
10490 *obufp++ = 'l';
10491 else
10492 *obufp++ = 'w';
10493 used_prefixes |= (prefixes & PREFIX_DATA);
10494 }
252b5132 10495 }
252b5132 10496 break;
041bd2e0 10497 case 'X':
c0f3af97
L
10498 if (l != 0 || len != 1)
10499 {
10500 SAVE_LAST (*p);
10501 break;
10502 }
10503 if (need_vex && vex.prefix)
10504 {
10505 if (vex.prefix == DATA_PREFIX_OPCODE)
10506 *obufp++ = 'd';
10507 else
10508 *obufp++ = 's';
10509 }
10510 else if (prefixes & PREFIX_DATA)
041bd2e0
JH
10511 *obufp++ = 'd';
10512 else
10513 *obufp++ = 's';
db6eb5be 10514 used_prefixes |= (prefixes & PREFIX_DATA);
041bd2e0 10515 break;
76f227a5 10516 case 'Y':
c0f3af97 10517 if (l == 0 && len == 1)
76f227a5 10518 {
c0f3af97
L
10519 if (intel_syntax || !(sizeflag & SUFFIX_ALWAYS))
10520 break;
10521 if (rex & REX_W)
10522 {
10523 USED_REX (REX_W);
10524 *obufp++ = 'q';
10525 }
10526 break;
10527 }
10528 else
10529 {
10530 if (l != 1 || len != 2 || last[0] != 'X')
10531 {
10532 SAVE_LAST (*p);
10533 break;
10534 }
10535 if (!need_vex)
10536 abort ();
10537 if (intel_syntax
10538 || (modrm.mod == 3 && !(sizeflag & SUFFIX_ALWAYS)))
10539 break;
10540 switch (vex.length)
10541 {
10542 case 128:
10543 *obufp++ = 'x';
10544 break;
10545 case 256:
10546 *obufp++ = 'y';
10547 break;
10548 default:
10549 abort ();
10550 }
76f227a5
JH
10551 }
10552 break;
252b5132 10553 case 'W':
0bfee649 10554 if (l == 0 && len == 1)
a35ca55a 10555 {
0bfee649
L
10556 /* operand size flag for cwtl, cbtw */
10557 USED_REX (REX_W);
10558 if (rex & REX_W)
10559 {
10560 if (intel_syntax)
10561 *obufp++ = 'd';
10562 else
10563 *obufp++ = 'l';
10564 }
10565 else if (sizeflag & DFLAG)
10566 *obufp++ = 'w';
a35ca55a 10567 else
0bfee649
L
10568 *obufp++ = 'b';
10569 if (!(rex & REX_W))
10570 used_prefixes |= (prefixes & PREFIX_DATA);
a35ca55a 10571 }
252b5132 10572 else
0bfee649
L
10573 {
10574 if (l != 1 || len != 2 || last[0] != 'X')
10575 {
10576 SAVE_LAST (*p);
10577 break;
10578 }
10579 if (!need_vex)
10580 abort ();
10581 *obufp++ = vex.w ? 'd': 's';
10582 }
252b5132
RH
10583 break;
10584 }
9306ca4a 10585 alt = 0;
252b5132
RH
10586 }
10587 *obufp = 0;
ea397f5b 10588 mnemonicendp = obufp;
6439fc28 10589 return 0;
252b5132
RH
10590}
10591
10592static void
26ca5450 10593oappend (const char *s)
252b5132 10594{
ea397f5b 10595 obufp = stpcpy (obufp, s);
252b5132
RH
10596}
10597
10598static void
26ca5450 10599append_seg (void)
252b5132
RH
10600{
10601 if (prefixes & PREFIX_CS)
7d421014 10602 {
7d421014 10603 used_prefixes |= PREFIX_CS;
d708bcba 10604 oappend ("%cs:" + intel_syntax);
7d421014 10605 }
252b5132 10606 if (prefixes & PREFIX_DS)
7d421014 10607 {
7d421014 10608 used_prefixes |= PREFIX_DS;
d708bcba 10609 oappend ("%ds:" + intel_syntax);
7d421014 10610 }
252b5132 10611 if (prefixes & PREFIX_SS)
7d421014 10612 {
7d421014 10613 used_prefixes |= PREFIX_SS;
d708bcba 10614 oappend ("%ss:" + intel_syntax);
7d421014 10615 }
252b5132 10616 if (prefixes & PREFIX_ES)
7d421014 10617 {
7d421014 10618 used_prefixes |= PREFIX_ES;
d708bcba 10619 oappend ("%es:" + intel_syntax);
7d421014 10620 }
252b5132 10621 if (prefixes & PREFIX_FS)
7d421014 10622 {
7d421014 10623 used_prefixes |= PREFIX_FS;
d708bcba 10624 oappend ("%fs:" + intel_syntax);
7d421014 10625 }
252b5132 10626 if (prefixes & PREFIX_GS)
7d421014 10627 {
7d421014 10628 used_prefixes |= PREFIX_GS;
d708bcba 10629 oappend ("%gs:" + intel_syntax);
7d421014 10630 }
252b5132
RH
10631}
10632
10633static void
26ca5450 10634OP_indirE (int bytemode, int sizeflag)
252b5132
RH
10635{
10636 if (!intel_syntax)
10637 oappend ("*");
10638 OP_E (bytemode, sizeflag);
10639}
10640
52b15da3 10641static void
26ca5450 10642print_operand_value (char *buf, int hex, bfd_vma disp)
52b15da3 10643{
cb712a9e 10644 if (address_mode == mode_64bit)
52b15da3
JH
10645 {
10646 if (hex)
10647 {
10648 char tmp[30];
10649 int i;
10650 buf[0] = '0';
10651 buf[1] = 'x';
10652 sprintf_vma (tmp, disp);
6608db57 10653 for (i = 0; tmp[i] == '0' && tmp[i + 1]; i++);
52b15da3
JH
10654 strcpy (buf + 2, tmp + i);
10655 }
10656 else
10657 {
10658 bfd_signed_vma v = disp;
10659 char tmp[30];
10660 int i;
10661 if (v < 0)
10662 {
10663 *(buf++) = '-';
10664 v = -disp;
6608db57 10665 /* Check for possible overflow on 0x8000000000000000. */
52b15da3
JH
10666 if (v < 0)
10667 {
10668 strcpy (buf, "9223372036854775808");
10669 return;
10670 }
10671 }
10672 if (!v)
10673 {
10674 strcpy (buf, "0");
10675 return;
10676 }
10677
10678 i = 0;
10679 tmp[29] = 0;
10680 while (v)
10681 {
6608db57 10682 tmp[28 - i] = (v % 10) + '0';
52b15da3
JH
10683 v /= 10;
10684 i++;
10685 }
10686 strcpy (buf, tmp + 29 - i);
10687 }
10688 }
10689 else
10690 {
10691 if (hex)
10692 sprintf (buf, "0x%x", (unsigned int) disp);
10693 else
10694 sprintf (buf, "%d", (int) disp);
10695 }
10696}
10697
5d669648
L
10698/* Put DISP in BUF as signed hex number. */
10699
10700static void
10701print_displacement (char *buf, bfd_vma disp)
10702{
10703 bfd_signed_vma val = disp;
10704 char tmp[30];
10705 int i, j = 0;
10706
10707 if (val < 0)
10708 {
10709 buf[j++] = '-';
10710 val = -disp;
10711
10712 /* Check for possible overflow. */
10713 if (val < 0)
10714 {
10715 switch (address_mode)
10716 {
10717 case mode_64bit:
10718 strcpy (buf + j, "0x8000000000000000");
10719 break;
10720 case mode_32bit:
10721 strcpy (buf + j, "0x80000000");
10722 break;
10723 case mode_16bit:
10724 strcpy (buf + j, "0x8000");
10725 break;
10726 }
10727 return;
10728 }
10729 }
10730
10731 buf[j++] = '0';
10732 buf[j++] = 'x';
10733
0af1713e 10734 sprintf_vma (tmp, (bfd_vma) val);
5d669648
L
10735 for (i = 0; tmp[i] == '0'; i++)
10736 continue;
10737 if (tmp[i] == '\0')
10738 i--;
10739 strcpy (buf + j, tmp + i);
10740}
10741
3f31e633
JB
10742static void
10743intel_operand_size (int bytemode, int sizeflag)
10744{
10745 switch (bytemode)
10746 {
10747 case b_mode:
b6169b20 10748 case b_swap_mode:
42903f7f 10749 case dqb_mode:
3f31e633
JB
10750 oappend ("BYTE PTR ");
10751 break;
10752 case w_mode:
10753 case dqw_mode:
10754 oappend ("WORD PTR ");
10755 break;
1a114b12 10756 case stack_v_mode:
cb712a9e 10757 if (address_mode == mode_64bit && (sizeflag & DFLAG))
3f31e633
JB
10758 {
10759 oappend ("QWORD PTR ");
10760 used_prefixes |= (prefixes & PREFIX_DATA);
10761 break;
10762 }
10763 /* FALLTHRU */
10764 case v_mode:
b6169b20 10765 case v_swap_mode:
3f31e633 10766 case dq_mode:
161a04f6
L
10767 USED_REX (REX_W);
10768 if (rex & REX_W)
3f31e633
JB
10769 oappend ("QWORD PTR ");
10770 else if ((sizeflag & DFLAG) || bytemode == dq_mode)
10771 oappend ("DWORD PTR ");
10772 else
10773 oappend ("WORD PTR ");
10774 used_prefixes |= (prefixes & PREFIX_DATA);
10775 break;
52fd6d94 10776 case z_mode:
161a04f6 10777 if ((rex & REX_W) || (sizeflag & DFLAG))
52fd6d94
JB
10778 *obufp++ = 'D';
10779 oappend ("WORD PTR ");
161a04f6 10780 if (!(rex & REX_W))
52fd6d94
JB
10781 used_prefixes |= (prefixes & PREFIX_DATA);
10782 break;
34b772a6
JB
10783 case a_mode:
10784 if (sizeflag & DFLAG)
10785 oappend ("QWORD PTR ");
10786 else
10787 oappend ("DWORD PTR ");
10788 used_prefixes |= (prefixes & PREFIX_DATA);
10789 break;
3f31e633 10790 case d_mode:
fa99fab2 10791 case d_swap_mode:
42903f7f 10792 case dqd_mode:
3f31e633
JB
10793 oappend ("DWORD PTR ");
10794 break;
10795 case q_mode:
b6169b20 10796 case q_swap_mode:
3f31e633
JB
10797 oappend ("QWORD PTR ");
10798 break;
10799 case m_mode:
cb712a9e 10800 if (address_mode == mode_64bit)
3f31e633
JB
10801 oappend ("QWORD PTR ");
10802 else
10803 oappend ("DWORD PTR ");
10804 break;
10805 case f_mode:
10806 if (sizeflag & DFLAG)
10807 oappend ("FWORD PTR ");
10808 else
10809 oappend ("DWORD PTR ");
10810 used_prefixes |= (prefixes & PREFIX_DATA);
10811 break;
10812 case t_mode:
10813 oappend ("TBYTE PTR ");
10814 break;
10815 case x_mode:
b6169b20 10816 case x_swap_mode:
c0f3af97
L
10817 if (need_vex)
10818 {
10819 switch (vex.length)
10820 {
10821 case 128:
10822 oappend ("XMMWORD PTR ");
10823 break;
10824 case 256:
10825 oappend ("YMMWORD PTR ");
10826 break;
10827 default:
10828 abort ();
10829 }
10830 }
10831 else
10832 oappend ("XMMWORD PTR ");
10833 break;
10834 case xmm_mode:
3f31e633
JB
10835 oappend ("XMMWORD PTR ");
10836 break;
c0f3af97
L
10837 case xmmq_mode:
10838 if (!need_vex)
10839 abort ();
10840
10841 switch (vex.length)
10842 {
10843 case 128:
10844 oappend ("QWORD PTR ");
10845 break;
10846 case 256:
10847 oappend ("XMMWORD PTR ");
10848 break;
10849 default:
10850 abort ();
10851 }
10852 break;
10853 case ymmq_mode:
10854 if (!need_vex)
10855 abort ();
10856
10857 switch (vex.length)
10858 {
10859 case 128:
10860 oappend ("QWORD PTR ");
10861 break;
10862 case 256:
10863 oappend ("YMMWORD PTR ");
10864 break;
10865 default:
10866 abort ();
10867 }
10868 break;
fb9c77c7
L
10869 case o_mode:
10870 oappend ("OWORD PTR ");
10871 break;
0bfee649
L
10872 case vex_w_dq_mode:
10873 if (!need_vex)
10874 abort ();
10875
10876 if (vex.w)
10877 oappend ("QWORD PTR ");
10878 else
10879 oappend ("DWORD PTR ");
10880 break;
3f31e633
JB
10881 default:
10882 break;
10883 }
10884}
10885
252b5132 10886static void
c0f3af97 10887OP_E_register (int bytemode, int sizeflag)
252b5132 10888{
c0f3af97
L
10889 int reg = modrm.rm;
10890 const char **names;
252b5132 10891
c0f3af97
L
10892 USED_REX (REX_B);
10893 if ((rex & REX_B))
10894 reg += 8;
252b5132 10895
b6169b20
L
10896 if ((sizeflag & SUFFIX_ALWAYS)
10897 && (bytemode == b_swap_mode || bytemode == v_swap_mode))
10898 swap_operand ();
10899
c0f3af97 10900 switch (bytemode)
252b5132 10901 {
c0f3af97 10902 case b_mode:
b6169b20 10903 case b_swap_mode:
c0f3af97
L
10904 USED_REX (0);
10905 if (rex)
10906 names = names8rex;
10907 else
10908 names = names8;
10909 break;
10910 case w_mode:
10911 names = names16;
10912 break;
10913 case d_mode:
10914 names = names32;
10915 break;
10916 case q_mode:
10917 names = names64;
10918 break;
10919 case m_mode:
10920 names = address_mode == mode_64bit ? names64 : names32;
10921 break;
10922 case stack_v_mode:
10923 if (address_mode == mode_64bit && (sizeflag & DFLAG))
252b5132 10924 {
c0f3af97 10925 names = names64;
7d421014 10926 used_prefixes |= (prefixes & PREFIX_DATA);
252b5132 10927 break;
252b5132 10928 }
c0f3af97
L
10929 bytemode = v_mode;
10930 /* FALLTHRU */
10931 case v_mode:
b6169b20 10932 case v_swap_mode:
c0f3af97
L
10933 case dq_mode:
10934 case dqb_mode:
10935 case dqd_mode:
10936 case dqw_mode:
10937 USED_REX (REX_W);
10938 if (rex & REX_W)
10939 names = names64;
b6169b20
L
10940 else if ((sizeflag & DFLAG)
10941 || (bytemode != v_mode
10942 && bytemode != v_swap_mode))
c0f3af97
L
10943 names = names32;
10944 else
10945 names = names16;
10946 used_prefixes |= (prefixes & PREFIX_DATA);
10947 break;
10948 case 0:
10949 return;
10950 default:
10951 oappend (INTERNAL_DISASSEMBLER_ERROR);
252b5132
RH
10952 return;
10953 }
c0f3af97
L
10954 oappend (names[reg]);
10955}
10956
10957static void
c1e679ec 10958OP_E_memory (int bytemode, int sizeflag)
c0f3af97
L
10959{
10960 bfd_vma disp = 0;
10961 int add = (rex & REX_B) ? 8 : 0;
10962 int riprel = 0;
252b5132 10963
c0f3af97 10964 USED_REX (REX_B);
3f31e633
JB
10965 if (intel_syntax)
10966 intel_operand_size (bytemode, sizeflag);
252b5132
RH
10967 append_seg ();
10968
5d669648 10969 if ((sizeflag & AFLAG) || address_mode == mode_64bit)
252b5132 10970 {
5d669648
L
10971 /* 32/64 bit address mode */
10972 int havedisp;
252b5132
RH
10973 int havesib;
10974 int havebase;
0f7da397 10975 int haveindex;
20afcfb7 10976 int needindex;
82c18208 10977 int base, rbase;
252b5132
RH
10978 int index = 0;
10979 int scale = 0;
10980
10981 havesib = 0;
10982 havebase = 1;
0f7da397 10983 haveindex = 0;
7967e09e 10984 base = modrm.rm;
252b5132
RH
10985
10986 if (base == 4)
10987 {
10988 havesib = 1;
10989 FETCH_DATA (the_info, codep + 1);
252b5132 10990 index = (*codep >> 3) & 7;
db51cc60 10991 scale = (*codep >> 6) & 3;
252b5132 10992 base = *codep & 7;
161a04f6
L
10993 USED_REX (REX_X);
10994 if (rex & REX_X)
52b15da3 10995 index += 8;
0f7da397 10996 haveindex = index != 4;
252b5132
RH
10997 codep++;
10998 }
82c18208 10999 rbase = base + add;
252b5132 11000
7967e09e 11001 switch (modrm.mod)
252b5132
RH
11002 {
11003 case 0:
82c18208 11004 if (base == 5)
252b5132
RH
11005 {
11006 havebase = 0;
cb712a9e 11007 if (address_mode == mode_64bit && !havesib)
52b15da3
JH
11008 riprel = 1;
11009 disp = get32s ();
252b5132
RH
11010 }
11011 break;
11012 case 1:
11013 FETCH_DATA (the_info, codep + 1);
11014 disp = *codep++;
11015 if ((disp & 0x80) != 0)
11016 disp -= 0x100;
11017 break;
11018 case 2:
52b15da3 11019 disp = get32s ();
252b5132
RH
11020 break;
11021 }
11022
20afcfb7
L
11023 /* In 32bit mode, we need index register to tell [offset] from
11024 [eiz*1 + offset]. */
11025 needindex = (havesib
11026 && !havebase
11027 && !haveindex
11028 && address_mode == mode_32bit);
11029 havedisp = (havebase
11030 || needindex
11031 || (havesib && (haveindex || scale != 0)));
5d669648 11032
252b5132 11033 if (!intel_syntax)
82c18208 11034 if (modrm.mod != 0 || base == 5)
db6eb5be 11035 {
5d669648
L
11036 if (havedisp || riprel)
11037 print_displacement (scratchbuf, disp);
11038 else
11039 print_operand_value (scratchbuf, 1, disp);
db6eb5be 11040 oappend (scratchbuf);
52b15da3
JH
11041 if (riprel)
11042 {
11043 set_op (disp, 1);
87767711 11044 oappend (sizeflag & AFLAG ? "(%rip)" : "(%eip)");
52b15da3 11045 }
db6eb5be 11046 }
2da11e11 11047
87767711
JB
11048 if (havebase || haveindex || riprel)
11049 used_prefixes |= PREFIX_ADDR;
11050
5d669648 11051 if (havedisp || (intel_syntax && riprel))
252b5132 11052 {
252b5132 11053 *obufp++ = open_char;
52b15da3 11054 if (intel_syntax && riprel)
185b1163
L
11055 {
11056 set_op (disp, 1);
87767711 11057 oappend (sizeflag & AFLAG ? "rip" : "eip");
185b1163 11058 }
db6eb5be 11059 *obufp = '\0';
252b5132 11060 if (havebase)
cb712a9e 11061 oappend (address_mode == mode_64bit && (sizeflag & AFLAG)
82c18208 11062 ? names64[rbase] : names32[rbase]);
252b5132
RH
11063 if (havesib)
11064 {
db51cc60
L
11065 /* ESP/RSP won't allow index. If base isn't ESP/RSP,
11066 print index to tell base + index from base. */
11067 if (scale != 0
20afcfb7 11068 || needindex
db51cc60
L
11069 || haveindex
11070 || (havebase && base != ESP_REG_NUM))
252b5132 11071 {
9306ca4a 11072 if (!intel_syntax || havebase)
db6eb5be 11073 {
9306ca4a
JB
11074 *obufp++ = separator_char;
11075 *obufp = '\0';
db6eb5be 11076 }
db51cc60
L
11077 if (haveindex)
11078 oappend (address_mode == mode_64bit
11079 && (sizeflag & AFLAG)
11080 ? names64[index] : names32[index]);
11081 else
11082 oappend (address_mode == mode_64bit
11083 && (sizeflag & AFLAG)
11084 ? index64 : index32);
11085
db6eb5be
AM
11086 *obufp++ = scale_char;
11087 *obufp = '\0';
11088 sprintf (scratchbuf, "%d", 1 << scale);
11089 oappend (scratchbuf);
11090 }
252b5132 11091 }
185b1163 11092 if (intel_syntax
82c18208 11093 && (disp || modrm.mod != 0 || base == 5))
3d456fa1 11094 {
db51cc60 11095 if (!havedisp || (bfd_signed_vma) disp >= 0)
3d456fa1
JB
11096 {
11097 *obufp++ = '+';
11098 *obufp = '\0';
11099 }
7967e09e 11100 else if (modrm.mod != 1)
3d456fa1
JB
11101 {
11102 *obufp++ = '-';
11103 *obufp = '\0';
11104 disp = - (bfd_signed_vma) disp;
11105 }
11106
db51cc60
L
11107 if (havedisp)
11108 print_displacement (scratchbuf, disp);
11109 else
11110 print_operand_value (scratchbuf, 1, disp);
3d456fa1
JB
11111 oappend (scratchbuf);
11112 }
252b5132
RH
11113
11114 *obufp++ = close_char;
db6eb5be 11115 *obufp = '\0';
252b5132
RH
11116 }
11117 else if (intel_syntax)
db6eb5be 11118 {
82c18208 11119 if (modrm.mod != 0 || base == 5)
db6eb5be 11120 {
252b5132
RH
11121 if (prefixes & (PREFIX_CS | PREFIX_SS | PREFIX_DS
11122 | PREFIX_ES | PREFIX_FS | PREFIX_GS))
11123 ;
11124 else
11125 {
d708bcba 11126 oappend (names_seg[ds_reg - es_reg]);
252b5132
RH
11127 oappend (":");
11128 }
52b15da3 11129 print_operand_value (scratchbuf, 1, disp);
db6eb5be
AM
11130 oappend (scratchbuf);
11131 }
11132 }
252b5132
RH
11133 }
11134 else
11135 { /* 16 bit address mode */
7967e09e 11136 switch (modrm.mod)
252b5132
RH
11137 {
11138 case 0:
7967e09e 11139 if (modrm.rm == 6)
252b5132
RH
11140 {
11141 disp = get16 ();
11142 if ((disp & 0x8000) != 0)
11143 disp -= 0x10000;
11144 }
11145 break;
11146 case 1:
11147 FETCH_DATA (the_info, codep + 1);
11148 disp = *codep++;
11149 if ((disp & 0x80) != 0)
11150 disp -= 0x100;
11151 break;
11152 case 2:
11153 disp = get16 ();
11154 if ((disp & 0x8000) != 0)
11155 disp -= 0x10000;
11156 break;
11157 }
11158
11159 if (!intel_syntax)
7967e09e 11160 if (modrm.mod != 0 || modrm.rm == 6)
db6eb5be 11161 {
5d669648 11162 print_displacement (scratchbuf, disp);
db6eb5be
AM
11163 oappend (scratchbuf);
11164 }
252b5132 11165
7967e09e 11166 if (modrm.mod != 0 || modrm.rm != 6)
252b5132
RH
11167 {
11168 *obufp++ = open_char;
db6eb5be 11169 *obufp = '\0';
7967e09e 11170 oappend (index16[modrm.rm]);
5d669648
L
11171 if (intel_syntax
11172 && (disp || modrm.mod != 0 || modrm.rm == 6))
3d456fa1 11173 {
5d669648 11174 if ((bfd_signed_vma) disp >= 0)
3d456fa1
JB
11175 {
11176 *obufp++ = '+';
11177 *obufp = '\0';
11178 }
7967e09e 11179 else if (modrm.mod != 1)
3d456fa1
JB
11180 {
11181 *obufp++ = '-';
11182 *obufp = '\0';
11183 disp = - (bfd_signed_vma) disp;
11184 }
11185
5d669648 11186 print_displacement (scratchbuf, disp);
3d456fa1
JB
11187 oappend (scratchbuf);
11188 }
11189
db6eb5be
AM
11190 *obufp++ = close_char;
11191 *obufp = '\0';
252b5132 11192 }
3d456fa1
JB
11193 else if (intel_syntax)
11194 {
11195 if (prefixes & (PREFIX_CS | PREFIX_SS | PREFIX_DS
11196 | PREFIX_ES | PREFIX_FS | PREFIX_GS))
11197 ;
11198 else
11199 {
11200 oappend (names_seg[ds_reg - es_reg]);
11201 oappend (":");
11202 }
11203 print_operand_value (scratchbuf, 1, disp & 0xffff);
11204 oappend (scratchbuf);
11205 }
252b5132
RH
11206 }
11207}
11208
c0f3af97 11209static void
c1e679ec 11210OP_E_extended (int bytemode, int sizeflag)
c0f3af97
L
11211{
11212 /* Skip mod/rm byte. */
11213 MODRM_CHECK;
11214 codep++;
11215
11216 if (modrm.mod == 3)
11217 OP_E_register (bytemode, sizeflag);
11218 else
c1e679ec 11219 OP_E_memory (bytemode, sizeflag);
c0f3af97
L
11220}
11221
85f10a01
MM
11222static void
11223OP_E (int bytemode, int sizeflag)
11224{
c1e679ec 11225 OP_E_extended (bytemode, sizeflag);
85f10a01
MM
11226}
11227
11228
252b5132 11229static void
26ca5450 11230OP_G (int bytemode, int sizeflag)
252b5132 11231{
52b15da3 11232 int add = 0;
161a04f6
L
11233 USED_REX (REX_R);
11234 if (rex & REX_R)
52b15da3 11235 add += 8;
252b5132
RH
11236 switch (bytemode)
11237 {
11238 case b_mode:
52b15da3
JH
11239 USED_REX (0);
11240 if (rex)
7967e09e 11241 oappend (names8rex[modrm.reg + add]);
52b15da3 11242 else
7967e09e 11243 oappend (names8[modrm.reg + add]);
252b5132
RH
11244 break;
11245 case w_mode:
7967e09e 11246 oappend (names16[modrm.reg + add]);
252b5132
RH
11247 break;
11248 case d_mode:
7967e09e 11249 oappend (names32[modrm.reg + add]);
52b15da3
JH
11250 break;
11251 case q_mode:
7967e09e 11252 oappend (names64[modrm.reg + add]);
252b5132
RH
11253 break;
11254 case v_mode:
9306ca4a 11255 case dq_mode:
42903f7f
L
11256 case dqb_mode:
11257 case dqd_mode:
9306ca4a 11258 case dqw_mode:
161a04f6
L
11259 USED_REX (REX_W);
11260 if (rex & REX_W)
7967e09e 11261 oappend (names64[modrm.reg + add]);
9306ca4a 11262 else if ((sizeflag & DFLAG) || bytemode != v_mode)
7967e09e 11263 oappend (names32[modrm.reg + add]);
252b5132 11264 else
7967e09e 11265 oappend (names16[modrm.reg + add]);
7d421014 11266 used_prefixes |= (prefixes & PREFIX_DATA);
252b5132 11267 break;
90700ea2 11268 case m_mode:
cb712a9e 11269 if (address_mode == mode_64bit)
7967e09e 11270 oappend (names64[modrm.reg + add]);
90700ea2 11271 else
7967e09e 11272 oappend (names32[modrm.reg + add]);
90700ea2 11273 break;
252b5132
RH
11274 default:
11275 oappend (INTERNAL_DISASSEMBLER_ERROR);
11276 break;
11277 }
11278}
11279
52b15da3 11280static bfd_vma
26ca5450 11281get64 (void)
52b15da3 11282{
5dd0794d 11283 bfd_vma x;
52b15da3 11284#ifdef BFD64
5dd0794d
AM
11285 unsigned int a;
11286 unsigned int b;
11287
52b15da3
JH
11288 FETCH_DATA (the_info, codep + 8);
11289 a = *codep++ & 0xff;
11290 a |= (*codep++ & 0xff) << 8;
11291 a |= (*codep++ & 0xff) << 16;
11292 a |= (*codep++ & 0xff) << 24;
5dd0794d 11293 b = *codep++ & 0xff;
52b15da3
JH
11294 b |= (*codep++ & 0xff) << 8;
11295 b |= (*codep++ & 0xff) << 16;
11296 b |= (*codep++ & 0xff) << 24;
11297 x = a + ((bfd_vma) b << 32);
11298#else
6608db57 11299 abort ();
5dd0794d 11300 x = 0;
52b15da3
JH
11301#endif
11302 return x;
11303}
11304
11305static bfd_signed_vma
26ca5450 11306get32 (void)
252b5132 11307{
52b15da3 11308 bfd_signed_vma x = 0;
252b5132
RH
11309
11310 FETCH_DATA (the_info, codep + 4);
52b15da3
JH
11311 x = *codep++ & (bfd_signed_vma) 0xff;
11312 x |= (*codep++ & (bfd_signed_vma) 0xff) << 8;
11313 x |= (*codep++ & (bfd_signed_vma) 0xff) << 16;
11314 x |= (*codep++ & (bfd_signed_vma) 0xff) << 24;
11315 return x;
11316}
11317
11318static bfd_signed_vma
26ca5450 11319get32s (void)
52b15da3
JH
11320{
11321 bfd_signed_vma x = 0;
11322
11323 FETCH_DATA (the_info, codep + 4);
11324 x = *codep++ & (bfd_signed_vma) 0xff;
11325 x |= (*codep++ & (bfd_signed_vma) 0xff) << 8;
11326 x |= (*codep++ & (bfd_signed_vma) 0xff) << 16;
11327 x |= (*codep++ & (bfd_signed_vma) 0xff) << 24;
11328
11329 x = (x ^ ((bfd_signed_vma) 1 << 31)) - ((bfd_signed_vma) 1 << 31);
11330
252b5132
RH
11331 return x;
11332}
11333
11334static int
26ca5450 11335get16 (void)
252b5132
RH
11336{
11337 int x = 0;
11338
11339 FETCH_DATA (the_info, codep + 2);
11340 x = *codep++ & 0xff;
11341 x |= (*codep++ & 0xff) << 8;
11342 return x;
11343}
11344
11345static void
26ca5450 11346set_op (bfd_vma op, int riprel)
252b5132
RH
11347{
11348 op_index[op_ad] = op_ad;
cb712a9e 11349 if (address_mode == mode_64bit)
7081ff04
AJ
11350 {
11351 op_address[op_ad] = op;
11352 op_riprel[op_ad] = riprel;
11353 }
11354 else
11355 {
11356 /* Mask to get a 32-bit address. */
11357 op_address[op_ad] = op & 0xffffffff;
11358 op_riprel[op_ad] = riprel & 0xffffffff;
11359 }
252b5132
RH
11360}
11361
11362static void
26ca5450 11363OP_REG (int code, int sizeflag)
252b5132 11364{
2da11e11 11365 const char *s;
9b60702d 11366 int add;
161a04f6
L
11367 USED_REX (REX_B);
11368 if (rex & REX_B)
52b15da3 11369 add = 8;
9b60702d
L
11370 else
11371 add = 0;
52b15da3
JH
11372
11373 switch (code)
11374 {
52b15da3
JH
11375 case ax_reg: case cx_reg: case dx_reg: case bx_reg:
11376 case sp_reg: case bp_reg: case si_reg: case di_reg:
11377 s = names16[code - ax_reg + add];
11378 break;
11379 case es_reg: case ss_reg: case cs_reg:
11380 case ds_reg: case fs_reg: case gs_reg:
11381 s = names_seg[code - es_reg + add];
11382 break;
11383 case al_reg: case ah_reg: case cl_reg: case ch_reg:
11384 case dl_reg: case dh_reg: case bl_reg: case bh_reg:
11385 USED_REX (0);
11386 if (rex)
11387 s = names8rex[code - al_reg + add];
11388 else
11389 s = names8[code - al_reg];
11390 break;
6439fc28
AM
11391 case rAX_reg: case rCX_reg: case rDX_reg: case rBX_reg:
11392 case rSP_reg: case rBP_reg: case rSI_reg: case rDI_reg:
cb712a9e 11393 if (address_mode == mode_64bit && (sizeflag & DFLAG))
6439fc28
AM
11394 {
11395 s = names64[code - rAX_reg + add];
11396 break;
11397 }
11398 code += eAX_reg - rAX_reg;
6608db57 11399 /* Fall through. */
52b15da3
JH
11400 case eAX_reg: case eCX_reg: case eDX_reg: case eBX_reg:
11401 case eSP_reg: case eBP_reg: case eSI_reg: case eDI_reg:
161a04f6
L
11402 USED_REX (REX_W);
11403 if (rex & REX_W)
52b15da3
JH
11404 s = names64[code - eAX_reg + add];
11405 else if (sizeflag & DFLAG)
11406 s = names32[code - eAX_reg + add];
11407 else
11408 s = names16[code - eAX_reg + add];
11409 used_prefixes |= (prefixes & PREFIX_DATA);
11410 break;
52b15da3
JH
11411 default:
11412 s = INTERNAL_DISASSEMBLER_ERROR;
11413 break;
11414 }
11415 oappend (s);
11416}
11417
11418static void
26ca5450 11419OP_IMREG (int code, int sizeflag)
52b15da3
JH
11420{
11421 const char *s;
252b5132
RH
11422
11423 switch (code)
11424 {
11425 case indir_dx_reg:
d708bcba 11426 if (intel_syntax)
52fd6d94 11427 s = "dx";
d708bcba 11428 else
db6eb5be 11429 s = "(%dx)";
252b5132
RH
11430 break;
11431 case ax_reg: case cx_reg: case dx_reg: case bx_reg:
11432 case sp_reg: case bp_reg: case si_reg: case di_reg:
11433 s = names16[code - ax_reg];
11434 break;
11435 case es_reg: case ss_reg: case cs_reg:
11436 case ds_reg: case fs_reg: case gs_reg:
11437 s = names_seg[code - es_reg];
11438 break;
11439 case al_reg: case ah_reg: case cl_reg: case ch_reg:
11440 case dl_reg: case dh_reg: case bl_reg: case bh_reg:
52b15da3
JH
11441 USED_REX (0);
11442 if (rex)
11443 s = names8rex[code - al_reg];
11444 else
11445 s = names8[code - al_reg];
252b5132
RH
11446 break;
11447 case eAX_reg: case eCX_reg: case eDX_reg: case eBX_reg:
11448 case eSP_reg: case eBP_reg: case eSI_reg: case eDI_reg:
161a04f6
L
11449 USED_REX (REX_W);
11450 if (rex & REX_W)
52b15da3
JH
11451 s = names64[code - eAX_reg];
11452 else if (sizeflag & DFLAG)
252b5132
RH
11453 s = names32[code - eAX_reg];
11454 else
11455 s = names16[code - eAX_reg];
7d421014 11456 used_prefixes |= (prefixes & PREFIX_DATA);
252b5132 11457 break;
52fd6d94 11458 case z_mode_ax_reg:
161a04f6 11459 if ((rex & REX_W) || (sizeflag & DFLAG))
52fd6d94
JB
11460 s = *names32;
11461 else
11462 s = *names16;
161a04f6 11463 if (!(rex & REX_W))
52fd6d94
JB
11464 used_prefixes |= (prefixes & PREFIX_DATA);
11465 break;
252b5132
RH
11466 default:
11467 s = INTERNAL_DISASSEMBLER_ERROR;
11468 break;
11469 }
11470 oappend (s);
11471}
11472
11473static void
26ca5450 11474OP_I (int bytemode, int sizeflag)
252b5132 11475{
52b15da3
JH
11476 bfd_signed_vma op;
11477 bfd_signed_vma mask = -1;
252b5132
RH
11478
11479 switch (bytemode)
11480 {
11481 case b_mode:
11482 FETCH_DATA (the_info, codep + 1);
52b15da3
JH
11483 op = *codep++;
11484 mask = 0xff;
11485 break;
11486 case q_mode:
cb712a9e 11487 if (address_mode == mode_64bit)
6439fc28
AM
11488 {
11489 op = get32s ();
11490 break;
11491 }
6608db57 11492 /* Fall through. */
252b5132 11493 case v_mode:
161a04f6
L
11494 USED_REX (REX_W);
11495 if (rex & REX_W)
52b15da3
JH
11496 op = get32s ();
11497 else if (sizeflag & DFLAG)
11498 {
11499 op = get32 ();
11500 mask = 0xffffffff;
11501 }
252b5132 11502 else
52b15da3
JH
11503 {
11504 op = get16 ();
11505 mask = 0xfffff;
11506 }
7d421014 11507 used_prefixes |= (prefixes & PREFIX_DATA);
252b5132
RH
11508 break;
11509 case w_mode:
52b15da3 11510 mask = 0xfffff;
252b5132
RH
11511 op = get16 ();
11512 break;
9306ca4a
JB
11513 case const_1_mode:
11514 if (intel_syntax)
11515 oappend ("1");
11516 return;
252b5132
RH
11517 default:
11518 oappend (INTERNAL_DISASSEMBLER_ERROR);
11519 return;
11520 }
11521
52b15da3
JH
11522 op &= mask;
11523 scratchbuf[0] = '$';
d708bcba
AM
11524 print_operand_value (scratchbuf + 1, 1, op);
11525 oappend (scratchbuf + intel_syntax);
52b15da3
JH
11526 scratchbuf[0] = '\0';
11527}
11528
11529static void
26ca5450 11530OP_I64 (int bytemode, int sizeflag)
52b15da3
JH
11531{
11532 bfd_signed_vma op;
11533 bfd_signed_vma mask = -1;
11534
cb712a9e 11535 if (address_mode != mode_64bit)
6439fc28
AM
11536 {
11537 OP_I (bytemode, sizeflag);
11538 return;
11539 }
11540
52b15da3
JH
11541 switch (bytemode)
11542 {
11543 case b_mode:
11544 FETCH_DATA (the_info, codep + 1);
11545 op = *codep++;
11546 mask = 0xff;
11547 break;
11548 case v_mode:
161a04f6
L
11549 USED_REX (REX_W);
11550 if (rex & REX_W)
52b15da3
JH
11551 op = get64 ();
11552 else if (sizeflag & DFLAG)
11553 {
11554 op = get32 ();
11555 mask = 0xffffffff;
11556 }
11557 else
11558 {
11559 op = get16 ();
11560 mask = 0xfffff;
11561 }
11562 used_prefixes |= (prefixes & PREFIX_DATA);
11563 break;
11564 case w_mode:
11565 mask = 0xfffff;
11566 op = get16 ();
11567 break;
11568 default:
11569 oappend (INTERNAL_DISASSEMBLER_ERROR);
11570 return;
11571 }
11572
11573 op &= mask;
11574 scratchbuf[0] = '$';
d708bcba
AM
11575 print_operand_value (scratchbuf + 1, 1, op);
11576 oappend (scratchbuf + intel_syntax);
252b5132
RH
11577 scratchbuf[0] = '\0';
11578}
11579
11580static void
26ca5450 11581OP_sI (int bytemode, int sizeflag)
252b5132 11582{
52b15da3
JH
11583 bfd_signed_vma op;
11584 bfd_signed_vma mask = -1;
252b5132
RH
11585
11586 switch (bytemode)
11587 {
11588 case b_mode:
11589 FETCH_DATA (the_info, codep + 1);
11590 op = *codep++;
11591 if ((op & 0x80) != 0)
11592 op -= 0x100;
52b15da3 11593 mask = 0xffffffff;
252b5132
RH
11594 break;
11595 case v_mode:
161a04f6
L
11596 USED_REX (REX_W);
11597 if (rex & REX_W)
52b15da3
JH
11598 op = get32s ();
11599 else if (sizeflag & DFLAG)
11600 {
11601 op = get32s ();
11602 mask = 0xffffffff;
11603 }
252b5132
RH
11604 else
11605 {
52b15da3 11606 mask = 0xffffffff;
6608db57 11607 op = get16 ();
252b5132
RH
11608 if ((op & 0x8000) != 0)
11609 op -= 0x10000;
11610 }
7d421014 11611 used_prefixes |= (prefixes & PREFIX_DATA);
252b5132
RH
11612 break;
11613 case w_mode:
11614 op = get16 ();
52b15da3 11615 mask = 0xffffffff;
252b5132
RH
11616 if ((op & 0x8000) != 0)
11617 op -= 0x10000;
11618 break;
11619 default:
11620 oappend (INTERNAL_DISASSEMBLER_ERROR);
11621 return;
11622 }
52b15da3
JH
11623
11624 scratchbuf[0] = '$';
11625 print_operand_value (scratchbuf + 1, 1, op);
d708bcba 11626 oappend (scratchbuf + intel_syntax);
252b5132
RH
11627}
11628
11629static void
26ca5450 11630OP_J (int bytemode, int sizeflag)
252b5132 11631{
52b15da3 11632 bfd_vma disp;
7081ff04 11633 bfd_vma mask = -1;
65ca155d 11634 bfd_vma segment = 0;
252b5132
RH
11635
11636 switch (bytemode)
11637 {
11638 case b_mode:
11639 FETCH_DATA (the_info, codep + 1);
11640 disp = *codep++;
11641 if ((disp & 0x80) != 0)
11642 disp -= 0x100;
11643 break;
11644 case v_mode:
161a04f6 11645 if ((sizeflag & DFLAG) || (rex & REX_W))
52b15da3 11646 disp = get32s ();
252b5132
RH
11647 else
11648 {
11649 disp = get16 ();
206717e8
L
11650 if ((disp & 0x8000) != 0)
11651 disp -= 0x10000;
65ca155d
L
11652 /* In 16bit mode, address is wrapped around at 64k within
11653 the same segment. Otherwise, a data16 prefix on a jump
11654 instruction means that the pc is masked to 16 bits after
11655 the displacement is added! */
11656 mask = 0xffff;
11657 if ((prefixes & PREFIX_DATA) == 0)
11658 segment = ((start_pc + codep - start_codep)
11659 & ~((bfd_vma) 0xffff));
252b5132 11660 }
d807a492 11661 used_prefixes |= (prefixes & PREFIX_DATA);
252b5132
RH
11662 break;
11663 default:
11664 oappend (INTERNAL_DISASSEMBLER_ERROR);
11665 return;
11666 }
65ca155d 11667 disp = ((start_pc + codep - start_codep + disp) & mask) | segment;
52b15da3
JH
11668 set_op (disp, 0);
11669 print_operand_value (scratchbuf, 1, disp);
252b5132
RH
11670 oappend (scratchbuf);
11671}
11672
252b5132 11673static void
ed7841b3 11674OP_SEG (int bytemode, int sizeflag)
252b5132 11675{
ed7841b3 11676 if (bytemode == w_mode)
7967e09e 11677 oappend (names_seg[modrm.reg]);
ed7841b3 11678 else
7967e09e 11679 OP_E (modrm.mod == 3 ? bytemode : w_mode, sizeflag);
252b5132
RH
11680}
11681
11682static void
26ca5450 11683OP_DIR (int dummy ATTRIBUTE_UNUSED, int sizeflag)
252b5132
RH
11684{
11685 int seg, offset;
11686
c608c12e 11687 if (sizeflag & DFLAG)
252b5132 11688 {
c608c12e
AM
11689 offset = get32 ();
11690 seg = get16 ();
252b5132 11691 }
c608c12e
AM
11692 else
11693 {
11694 offset = get16 ();
11695 seg = get16 ();
11696 }
7d421014 11697 used_prefixes |= (prefixes & PREFIX_DATA);
d708bcba 11698 if (intel_syntax)
3f31e633 11699 sprintf (scratchbuf, "0x%x:0x%x", seg, offset);
d708bcba
AM
11700 else
11701 sprintf (scratchbuf, "$0x%x,$0x%x", seg, offset);
c608c12e 11702 oappend (scratchbuf);
252b5132
RH
11703}
11704
252b5132 11705static void
3f31e633 11706OP_OFF (int bytemode, int sizeflag)
252b5132 11707{
52b15da3 11708 bfd_vma off;
252b5132 11709
3f31e633
JB
11710 if (intel_syntax && (sizeflag & SUFFIX_ALWAYS))
11711 intel_operand_size (bytemode, sizeflag);
252b5132
RH
11712 append_seg ();
11713
cb712a9e 11714 if ((sizeflag & AFLAG) || address_mode == mode_64bit)
252b5132
RH
11715 off = get32 ();
11716 else
11717 off = get16 ();
11718
11719 if (intel_syntax)
11720 {
11721 if (!(prefixes & (PREFIX_CS | PREFIX_SS | PREFIX_DS
db6eb5be 11722 | PREFIX_ES | PREFIX_FS | PREFIX_GS)))
252b5132 11723 {
d708bcba 11724 oappend (names_seg[ds_reg - es_reg]);
252b5132
RH
11725 oappend (":");
11726 }
11727 }
52b15da3
JH
11728 print_operand_value (scratchbuf, 1, off);
11729 oappend (scratchbuf);
11730}
6439fc28 11731
52b15da3 11732static void
3f31e633 11733OP_OFF64 (int bytemode, int sizeflag)
52b15da3
JH
11734{
11735 bfd_vma off;
11736
539e75ad
L
11737 if (address_mode != mode_64bit
11738 || (prefixes & PREFIX_ADDR))
6439fc28
AM
11739 {
11740 OP_OFF (bytemode, sizeflag);
11741 return;
11742 }
11743
3f31e633
JB
11744 if (intel_syntax && (sizeflag & SUFFIX_ALWAYS))
11745 intel_operand_size (bytemode, sizeflag);
52b15da3
JH
11746 append_seg ();
11747
6608db57 11748 off = get64 ();
52b15da3
JH
11749
11750 if (intel_syntax)
11751 {
11752 if (!(prefixes & (PREFIX_CS | PREFIX_SS | PREFIX_DS
db6eb5be 11753 | PREFIX_ES | PREFIX_FS | PREFIX_GS)))
52b15da3 11754 {
d708bcba 11755 oappend (names_seg[ds_reg - es_reg]);
52b15da3
JH
11756 oappend (":");
11757 }
11758 }
11759 print_operand_value (scratchbuf, 1, off);
252b5132
RH
11760 oappend (scratchbuf);
11761}
11762
11763static void
26ca5450 11764ptr_reg (int code, int sizeflag)
252b5132 11765{
2da11e11 11766 const char *s;
d708bcba 11767
1d9f512f 11768 *obufp++ = open_char;
20f0a1fc 11769 used_prefixes |= (prefixes & PREFIX_ADDR);
cb712a9e 11770 if (address_mode == mode_64bit)
c1a64871
JH
11771 {
11772 if (!(sizeflag & AFLAG))
db6eb5be 11773 s = names32[code - eAX_reg];
c1a64871 11774 else
db6eb5be 11775 s = names64[code - eAX_reg];
c1a64871 11776 }
52b15da3 11777 else if (sizeflag & AFLAG)
252b5132
RH
11778 s = names32[code - eAX_reg];
11779 else
11780 s = names16[code - eAX_reg];
11781 oappend (s);
1d9f512f
AM
11782 *obufp++ = close_char;
11783 *obufp = 0;
252b5132
RH
11784}
11785
11786static void
26ca5450 11787OP_ESreg (int code, int sizeflag)
252b5132 11788{
9306ca4a 11789 if (intel_syntax)
52fd6d94
JB
11790 {
11791 switch (codep[-1])
11792 {
11793 case 0x6d: /* insw/insl */
11794 intel_operand_size (z_mode, sizeflag);
11795 break;
11796 case 0xa5: /* movsw/movsl/movsq */
11797 case 0xa7: /* cmpsw/cmpsl/cmpsq */
11798 case 0xab: /* stosw/stosl */
11799 case 0xaf: /* scasw/scasl */
11800 intel_operand_size (v_mode, sizeflag);
11801 break;
11802 default:
11803 intel_operand_size (b_mode, sizeflag);
11804 }
11805 }
d708bcba 11806 oappend ("%es:" + intel_syntax);
252b5132
RH
11807 ptr_reg (code, sizeflag);
11808}
11809
11810static void
26ca5450 11811OP_DSreg (int code, int sizeflag)
252b5132 11812{
9306ca4a 11813 if (intel_syntax)
52fd6d94
JB
11814 {
11815 switch (codep[-1])
11816 {
11817 case 0x6f: /* outsw/outsl */
11818 intel_operand_size (z_mode, sizeflag);
11819 break;
11820 case 0xa5: /* movsw/movsl/movsq */
11821 case 0xa7: /* cmpsw/cmpsl/cmpsq */
11822 case 0xad: /* lodsw/lodsl/lodsq */
11823 intel_operand_size (v_mode, sizeflag);
11824 break;
11825 default:
11826 intel_operand_size (b_mode, sizeflag);
11827 }
11828 }
252b5132
RH
11829 if ((prefixes
11830 & (PREFIX_CS
11831 | PREFIX_DS
11832 | PREFIX_SS
11833 | PREFIX_ES
11834 | PREFIX_FS
11835 | PREFIX_GS)) == 0)
11836 prefixes |= PREFIX_DS;
6608db57 11837 append_seg ();
252b5132
RH
11838 ptr_reg (code, sizeflag);
11839}
11840
252b5132 11841static void
26ca5450 11842OP_C (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 11843{
9b60702d 11844 int add;
161a04f6 11845 if (rex & REX_R)
c4a530c5 11846 {
161a04f6 11847 USED_REX (REX_R);
c4a530c5
JB
11848 add = 8;
11849 }
cb712a9e 11850 else if (address_mode != mode_64bit && (prefixes & PREFIX_LOCK))
c4a530c5 11851 {
b844680a 11852 lock_prefix = NULL;
c4a530c5
JB
11853 used_prefixes |= PREFIX_LOCK;
11854 add = 8;
11855 }
9b60702d
L
11856 else
11857 add = 0;
7967e09e 11858 sprintf (scratchbuf, "%%cr%d", modrm.reg + add);
d708bcba 11859 oappend (scratchbuf + intel_syntax);
252b5132
RH
11860}
11861
252b5132 11862static void
26ca5450 11863OP_D (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 11864{
9b60702d 11865 int add;
161a04f6
L
11866 USED_REX (REX_R);
11867 if (rex & REX_R)
52b15da3 11868 add = 8;
9b60702d
L
11869 else
11870 add = 0;
d708bcba 11871 if (intel_syntax)
7967e09e 11872 sprintf (scratchbuf, "db%d", modrm.reg + add);
d708bcba 11873 else
7967e09e 11874 sprintf (scratchbuf, "%%db%d", modrm.reg + add);
252b5132
RH
11875 oappend (scratchbuf);
11876}
11877
252b5132 11878static void
26ca5450 11879OP_T (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 11880{
7967e09e 11881 sprintf (scratchbuf, "%%tr%d", modrm.reg);
d708bcba 11882 oappend (scratchbuf + intel_syntax);
252b5132
RH
11883}
11884
11885static void
6f74c397 11886OP_R (int bytemode, int sizeflag)
252b5132 11887{
7967e09e 11888 if (modrm.mod == 3)
2da11e11
AM
11889 OP_E (bytemode, sizeflag);
11890 else
6608db57 11891 BadOp ();
252b5132
RH
11892}
11893
11894static void
26ca5450 11895OP_MMX (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 11896{
041bd2e0
JH
11897 used_prefixes |= (prefixes & PREFIX_DATA);
11898 if (prefixes & PREFIX_DATA)
20f0a1fc 11899 {
9b60702d 11900 int add;
161a04f6
L
11901 USED_REX (REX_R);
11902 if (rex & REX_R)
20f0a1fc 11903 add = 8;
9b60702d
L
11904 else
11905 add = 0;
7967e09e 11906 sprintf (scratchbuf, "%%xmm%d", modrm.reg + add);
20f0a1fc 11907 }
041bd2e0 11908 else
7967e09e 11909 sprintf (scratchbuf, "%%mm%d", modrm.reg);
d708bcba 11910 oappend (scratchbuf + intel_syntax);
252b5132
RH
11911}
11912
c608c12e 11913static void
c0f3af97 11914OP_XMM (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
c608c12e 11915{
9b60702d 11916 int add;
161a04f6
L
11917 USED_REX (REX_R);
11918 if (rex & REX_R)
041bd2e0 11919 add = 8;
9b60702d
L
11920 else
11921 add = 0;
c0f3af97
L
11922 if (need_vex && bytemode != xmm_mode)
11923 {
11924 switch (vex.length)
11925 {
11926 case 128:
11927 sprintf (scratchbuf, "%%xmm%d", modrm.reg + add);
11928 break;
11929 case 256:
11930 sprintf (scratchbuf, "%%ymm%d", modrm.reg + add);
11931 break;
11932 default:
11933 abort ();
11934 }
11935 }
11936 else
11937 sprintf (scratchbuf, "%%xmm%d", modrm.reg + add);
d708bcba 11938 oappend (scratchbuf + intel_syntax);
c608c12e
AM
11939}
11940
252b5132 11941static void
26ca5450 11942OP_EM (int bytemode, int sizeflag)
252b5132 11943{
7967e09e 11944 if (modrm.mod != 3)
252b5132 11945 {
b6169b20
L
11946 if (intel_syntax
11947 && (bytemode == v_mode || bytemode == v_swap_mode))
9306ca4a
JB
11948 {
11949 bytemode = (prefixes & PREFIX_DATA) ? x_mode : q_mode;
11950 used_prefixes |= (prefixes & PREFIX_DATA);
11951 }
252b5132
RH
11952 OP_E (bytemode, sizeflag);
11953 return;
11954 }
11955
b6169b20
L
11956 if ((sizeflag & SUFFIX_ALWAYS) && bytemode == v_swap_mode)
11957 swap_operand ();
11958
6608db57 11959 /* Skip mod/rm byte. */
4bba6815 11960 MODRM_CHECK;
252b5132 11961 codep++;
041bd2e0
JH
11962 used_prefixes |= (prefixes & PREFIX_DATA);
11963 if (prefixes & PREFIX_DATA)
20f0a1fc 11964 {
9b60702d 11965 int add;
20f0a1fc 11966
161a04f6
L
11967 USED_REX (REX_B);
11968 if (rex & REX_B)
20f0a1fc 11969 add = 8;
9b60702d
L
11970 else
11971 add = 0;
7967e09e 11972 sprintf (scratchbuf, "%%xmm%d", modrm.rm + add);
20f0a1fc 11973 }
041bd2e0 11974 else
7967e09e 11975 sprintf (scratchbuf, "%%mm%d", modrm.rm);
d708bcba 11976 oappend (scratchbuf + intel_syntax);
252b5132
RH
11977}
11978
246c51aa
L
11979/* cvt* are the only instructions in sse2 which have
11980 both SSE and MMX operands and also have 0x66 prefix
11981 in their opcode. 0x66 was originally used to differentiate
11982 between SSE and MMX instruction(operands). So we have to handle the
4d9567e0
MM
11983 cvt* separately using OP_EMC and OP_MXC */
11984static void
11985OP_EMC (int bytemode, int sizeflag)
11986{
7967e09e 11987 if (modrm.mod != 3)
4d9567e0
MM
11988 {
11989 if (intel_syntax && bytemode == v_mode)
11990 {
11991 bytemode = (prefixes & PREFIX_DATA) ? x_mode : q_mode;
11992 used_prefixes |= (prefixes & PREFIX_DATA);
11993 }
11994 OP_E (bytemode, sizeflag);
11995 return;
11996 }
246c51aa 11997
4d9567e0
MM
11998 /* Skip mod/rm byte. */
11999 MODRM_CHECK;
12000 codep++;
12001 used_prefixes |= (prefixes & PREFIX_DATA);
7967e09e 12002 sprintf (scratchbuf, "%%mm%d", modrm.rm);
4d9567e0
MM
12003 oappend (scratchbuf + intel_syntax);
12004}
12005
12006static void
12007OP_MXC (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
12008{
12009 used_prefixes |= (prefixes & PREFIX_DATA);
7967e09e 12010 sprintf (scratchbuf, "%%mm%d", modrm.reg);
4d9567e0
MM
12011 oappend (scratchbuf + intel_syntax);
12012}
12013
c608c12e 12014static void
26ca5450 12015OP_EX (int bytemode, int sizeflag)
c608c12e 12016{
9b60702d 12017 int add;
d6f574e0
L
12018
12019 /* Skip mod/rm byte. */
12020 MODRM_CHECK;
12021 codep++;
12022
7967e09e 12023 if (modrm.mod != 3)
c608c12e 12024 {
c1e679ec 12025 OP_E_memory (bytemode, sizeflag);
c608c12e
AM
12026 return;
12027 }
d6f574e0 12028
161a04f6
L
12029 USED_REX (REX_B);
12030 if (rex & REX_B)
041bd2e0 12031 add = 8;
9b60702d
L
12032 else
12033 add = 0;
c608c12e 12034
b6169b20 12035 if ((sizeflag & SUFFIX_ALWAYS)
fa99fab2
L
12036 && (bytemode == x_swap_mode
12037 || bytemode == d_swap_mode
12038 || bytemode == q_swap_mode))
b6169b20
L
12039 swap_operand ();
12040
c0f3af97
L
12041 if (need_vex
12042 && bytemode != xmm_mode
12043 && bytemode != xmmq_mode)
12044 {
12045 switch (vex.length)
12046 {
12047 case 128:
12048 sprintf (scratchbuf, "%%xmm%d", modrm.rm + add);
12049 break;
12050 case 256:
12051 sprintf (scratchbuf, "%%ymm%d", modrm.rm + add);
12052 break;
12053 default:
12054 abort ();
12055 }
12056 }
12057 else
12058 sprintf (scratchbuf, "%%xmm%d", modrm.rm + add);
d708bcba 12059 oappend (scratchbuf + intel_syntax);
c608c12e
AM
12060}
12061
252b5132 12062static void
26ca5450 12063OP_MS (int bytemode, int sizeflag)
252b5132 12064{
7967e09e 12065 if (modrm.mod == 3)
2da11e11
AM
12066 OP_EM (bytemode, sizeflag);
12067 else
6608db57 12068 BadOp ();
252b5132
RH
12069}
12070
992aaec9 12071static void
26ca5450 12072OP_XS (int bytemode, int sizeflag)
992aaec9 12073{
7967e09e 12074 if (modrm.mod == 3)
992aaec9
AM
12075 OP_EX (bytemode, sizeflag);
12076 else
6608db57 12077 BadOp ();
992aaec9
AM
12078}
12079
cc0ec051
AM
12080static void
12081OP_M (int bytemode, int sizeflag)
12082{
7967e09e 12083 if (modrm.mod == 3)
75413a22
L
12084 /* bad bound,lea,lds,les,lfs,lgs,lss,cmpxchg8b,vmptrst modrm */
12085 BadOp ();
cc0ec051
AM
12086 else
12087 OP_E (bytemode, sizeflag);
12088}
12089
12090static void
12091OP_0f07 (int bytemode, int sizeflag)
12092{
7967e09e 12093 if (modrm.mod != 3 || modrm.rm != 0)
cc0ec051
AM
12094 BadOp ();
12095 else
12096 OP_E (bytemode, sizeflag);
12097}
12098
46e883c5 12099/* NOP is an alias of "xchg %ax,%ax" in 16bit mode, "xchg %eax,%eax" in
246c51aa 12100 32bit mode and "xchg %rax,%rax" in 64bit mode. */
46e883c5 12101
cc0ec051 12102static void
46e883c5 12103NOP_Fixup1 (int bytemode, int sizeflag)
cc0ec051 12104{
8b38ad71
L
12105 if ((prefixes & PREFIX_DATA) != 0
12106 || (rex != 0
12107 && rex != 0x48
12108 && address_mode == mode_64bit))
46e883c5
L
12109 OP_REG (bytemode, sizeflag);
12110 else
12111 strcpy (obuf, "nop");
12112}
12113
12114static void
12115NOP_Fixup2 (int bytemode, int sizeflag)
12116{
8b38ad71
L
12117 if ((prefixes & PREFIX_DATA) != 0
12118 || (rex != 0
12119 && rex != 0x48
12120 && address_mode == mode_64bit))
46e883c5 12121 OP_IMREG (bytemode, sizeflag);
cc0ec051
AM
12122}
12123
84037f8c 12124static const char *const Suffix3DNow[] = {
252b5132
RH
12125/* 00 */ NULL, NULL, NULL, NULL,
12126/* 04 */ NULL, NULL, NULL, NULL,
12127/* 08 */ NULL, NULL, NULL, NULL,
9e525108 12128/* 0C */ "pi2fw", "pi2fd", NULL, NULL,
252b5132
RH
12129/* 10 */ NULL, NULL, NULL, NULL,
12130/* 14 */ NULL, NULL, NULL, NULL,
12131/* 18 */ NULL, NULL, NULL, NULL,
9e525108 12132/* 1C */ "pf2iw", "pf2id", NULL, NULL,
252b5132
RH
12133/* 20 */ NULL, NULL, NULL, NULL,
12134/* 24 */ NULL, NULL, NULL, NULL,
12135/* 28 */ NULL, NULL, NULL, NULL,
12136/* 2C */ NULL, NULL, NULL, NULL,
12137/* 30 */ NULL, NULL, NULL, NULL,
12138/* 34 */ NULL, NULL, NULL, NULL,
12139/* 38 */ NULL, NULL, NULL, NULL,
12140/* 3C */ NULL, NULL, NULL, NULL,
12141/* 40 */ NULL, NULL, NULL, NULL,
12142/* 44 */ NULL, NULL, NULL, NULL,
12143/* 48 */ NULL, NULL, NULL, NULL,
12144/* 4C */ NULL, NULL, NULL, NULL,
12145/* 50 */ NULL, NULL, NULL, NULL,
12146/* 54 */ NULL, NULL, NULL, NULL,
12147/* 58 */ NULL, NULL, NULL, NULL,
12148/* 5C */ NULL, NULL, NULL, NULL,
12149/* 60 */ NULL, NULL, NULL, NULL,
12150/* 64 */ NULL, NULL, NULL, NULL,
12151/* 68 */ NULL, NULL, NULL, NULL,
12152/* 6C */ NULL, NULL, NULL, NULL,
12153/* 70 */ NULL, NULL, NULL, NULL,
12154/* 74 */ NULL, NULL, NULL, NULL,
12155/* 78 */ NULL, NULL, NULL, NULL,
12156/* 7C */ NULL, NULL, NULL, NULL,
12157/* 80 */ NULL, NULL, NULL, NULL,
12158/* 84 */ NULL, NULL, NULL, NULL,
9e525108
AM
12159/* 88 */ NULL, NULL, "pfnacc", NULL,
12160/* 8C */ NULL, NULL, "pfpnacc", NULL,
252b5132
RH
12161/* 90 */ "pfcmpge", NULL, NULL, NULL,
12162/* 94 */ "pfmin", NULL, "pfrcp", "pfrsqrt",
12163/* 98 */ NULL, NULL, "pfsub", NULL,
12164/* 9C */ NULL, NULL, "pfadd", NULL,
12165/* A0 */ "pfcmpgt", NULL, NULL, NULL,
12166/* A4 */ "pfmax", NULL, "pfrcpit1", "pfrsqit1",
12167/* A8 */ NULL, NULL, "pfsubr", NULL,
12168/* AC */ NULL, NULL, "pfacc", NULL,
12169/* B0 */ "pfcmpeq", NULL, NULL, NULL,
9beff690 12170/* B4 */ "pfmul", NULL, "pfrcpit2", "pmulhrw",
9e525108 12171/* B8 */ NULL, NULL, NULL, "pswapd",
252b5132
RH
12172/* BC */ NULL, NULL, NULL, "pavgusb",
12173/* C0 */ NULL, NULL, NULL, NULL,
12174/* C4 */ NULL, NULL, NULL, NULL,
12175/* C8 */ NULL, NULL, NULL, NULL,
12176/* CC */ NULL, NULL, NULL, NULL,
12177/* D0 */ NULL, NULL, NULL, NULL,
12178/* D4 */ NULL, NULL, NULL, NULL,
12179/* D8 */ NULL, NULL, NULL, NULL,
12180/* DC */ NULL, NULL, NULL, NULL,
12181/* E0 */ NULL, NULL, NULL, NULL,
12182/* E4 */ NULL, NULL, NULL, NULL,
12183/* E8 */ NULL, NULL, NULL, NULL,
12184/* EC */ NULL, NULL, NULL, NULL,
12185/* F0 */ NULL, NULL, NULL, NULL,
12186/* F4 */ NULL, NULL, NULL, NULL,
12187/* F8 */ NULL, NULL, NULL, NULL,
12188/* FC */ NULL, NULL, NULL, NULL,
12189};
12190
12191static void
26ca5450 12192OP_3DNowSuffix (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132
RH
12193{
12194 const char *mnemonic;
12195
12196 FETCH_DATA (the_info, codep + 1);
12197 /* AMD 3DNow! instructions are specified by an opcode suffix in the
12198 place where an 8-bit immediate would normally go. ie. the last
12199 byte of the instruction. */
ea397f5b 12200 obufp = mnemonicendp;
c608c12e 12201 mnemonic = Suffix3DNow[*codep++ & 0xff];
252b5132 12202 if (mnemonic)
2da11e11 12203 oappend (mnemonic);
252b5132
RH
12204 else
12205 {
12206 /* Since a variable sized modrm/sib chunk is between the start
12207 of the opcode (0x0f0f) and the opcode suffix, we need to do
12208 all the modrm processing first, and don't know until now that
12209 we have a bad opcode. This necessitates some cleaning up. */
ce518a5f
L
12210 op_out[0][0] = '\0';
12211 op_out[1][0] = '\0';
6608db57 12212 BadOp ();
252b5132 12213 }
ea397f5b 12214 mnemonicendp = obufp;
252b5132 12215}
c608c12e 12216
ea397f5b
L
12217static struct op simd_cmp_op[] =
12218{
12219 { STRING_COMMA_LEN ("eq") },
12220 { STRING_COMMA_LEN ("lt") },
12221 { STRING_COMMA_LEN ("le") },
12222 { STRING_COMMA_LEN ("unord") },
12223 { STRING_COMMA_LEN ("neq") },
12224 { STRING_COMMA_LEN ("nlt") },
12225 { STRING_COMMA_LEN ("nle") },
12226 { STRING_COMMA_LEN ("ord") }
c608c12e
AM
12227};
12228
12229static void
ad19981d 12230CMP_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
c608c12e
AM
12231{
12232 unsigned int cmp_type;
12233
12234 FETCH_DATA (the_info, codep + 1);
12235 cmp_type = *codep++ & 0xff;
c0f3af97 12236 if (cmp_type < ARRAY_SIZE (simd_cmp_op))
c608c12e 12237 {
ad19981d 12238 char suffix [3];
ea397f5b 12239 char *p = mnemonicendp - 2;
ad19981d
L
12240 suffix[0] = p[0];
12241 suffix[1] = p[1];
12242 suffix[2] = '\0';
ea397f5b
L
12243 sprintf (p, "%s%s", simd_cmp_op[cmp_type].name, suffix);
12244 mnemonicendp += simd_cmp_op[cmp_type].len;
c608c12e
AM
12245 }
12246 else
12247 {
ad19981d
L
12248 /* We have a reserved extension byte. Output it directly. */
12249 scratchbuf[0] = '$';
12250 print_operand_value (scratchbuf + 1, 1, cmp_type);
12251 oappend (scratchbuf + intel_syntax);
12252 scratchbuf[0] = '\0';
c608c12e
AM
12253 }
12254}
12255
ca164297 12256static void
b844680a
L
12257OP_Mwait (int bytemode ATTRIBUTE_UNUSED,
12258 int sizeflag ATTRIBUTE_UNUSED)
12259{
12260 /* mwait %eax,%ecx */
12261 if (!intel_syntax)
12262 {
12263 const char **names = (address_mode == mode_64bit
12264 ? names64 : names32);
12265 strcpy (op_out[0], names[0]);
12266 strcpy (op_out[1], names[1]);
12267 two_source_ops = 1;
12268 }
12269 /* Skip mod/rm byte. */
12270 MODRM_CHECK;
12271 codep++;
12272}
12273
12274static void
12275OP_Monitor (int bytemode ATTRIBUTE_UNUSED,
12276 int sizeflag ATTRIBUTE_UNUSED)
ca164297 12277{
b844680a
L
12278 /* monitor %eax,%ecx,%edx" */
12279 if (!intel_syntax)
ca164297 12280 {
b844680a 12281 const char **op1_names;
cb712a9e
L
12282 const char **names = (address_mode == mode_64bit
12283 ? names64 : names32);
1d9f512f 12284
b844680a
L
12285 if (!(prefixes & PREFIX_ADDR))
12286 op1_names = (address_mode == mode_16bit
12287 ? names16 : names);
ca164297
L
12288 else
12289 {
b844680a
L
12290 /* Remove "addr16/addr32". */
12291 addr_prefix = NULL;
12292 op1_names = (address_mode != mode_32bit
12293 ? names32 : names16);
12294 used_prefixes |= PREFIX_ADDR;
ca164297 12295 }
b844680a
L
12296 strcpy (op_out[0], op1_names[0]);
12297 strcpy (op_out[1], names[1]);
12298 strcpy (op_out[2], names[2]);
12299 two_source_ops = 1;
ca164297 12300 }
b844680a
L
12301 /* Skip mod/rm byte. */
12302 MODRM_CHECK;
12303 codep++;
30123838
JB
12304}
12305
6608db57
KH
12306static void
12307BadOp (void)
2da11e11 12308{
6608db57
KH
12309 /* Throw away prefixes and 1st. opcode byte. */
12310 codep = insn_codep + 1;
2da11e11
AM
12311 oappend ("(bad)");
12312}
4cc91dba 12313
35c52694
L
12314static void
12315REP_Fixup (int bytemode, int sizeflag)
12316{
12317 /* The 0xf3 prefix should be displayed as "rep" for ins, outs, movs,
12318 lods and stos. */
35c52694 12319 if (prefixes & PREFIX_REPZ)
b844680a 12320 repz_prefix = "rep ";
35c52694
L
12321
12322 switch (bytemode)
12323 {
12324 case al_reg:
12325 case eAX_reg:
12326 case indir_dx_reg:
12327 OP_IMREG (bytemode, sizeflag);
12328 break;
12329 case eDI_reg:
12330 OP_ESreg (bytemode, sizeflag);
12331 break;
12332 case eSI_reg:
12333 OP_DSreg (bytemode, sizeflag);
12334 break;
12335 default:
12336 abort ();
12337 break;
12338 }
12339}
f5804c90
L
12340
12341static void
12342CMPXCHG8B_Fixup (int bytemode, int sizeflag)
12343{
161a04f6
L
12344 USED_REX (REX_W);
12345 if (rex & REX_W)
f5804c90
L
12346 {
12347 /* Change cmpxchg8b to cmpxchg16b. */
ea397f5b
L
12348 char *p = mnemonicendp - 2;
12349 mnemonicendp = stpcpy (p, "16b");
fb9c77c7 12350 bytemode = o_mode;
f5804c90
L
12351 }
12352 OP_M (bytemode, sizeflag);
12353}
42903f7f
L
12354
12355static void
12356XMM_Fixup (int reg, int sizeflag ATTRIBUTE_UNUSED)
12357{
c0f3af97
L
12358 if (need_vex)
12359 {
12360 switch (vex.length)
12361 {
12362 case 128:
12363 sprintf (scratchbuf, "%%xmm%d", reg);
12364 break;
12365 case 256:
12366 sprintf (scratchbuf, "%%ymm%d", reg);
12367 break;
12368 default:
12369 abort ();
12370 }
12371 }
12372 else
12373 sprintf (scratchbuf, "%%xmm%d", reg);
42903f7f
L
12374 oappend (scratchbuf + intel_syntax);
12375}
381d071f
L
12376
12377static void
12378CRC32_Fixup (int bytemode, int sizeflag)
12379{
12380 /* Add proper suffix to "crc32". */
ea397f5b 12381 char *p = mnemonicendp;
381d071f
L
12382
12383 switch (bytemode)
12384 {
12385 case b_mode:
20592a94 12386 if (intel_syntax)
ea397f5b 12387 goto skip;
20592a94 12388
381d071f
L
12389 *p++ = 'b';
12390 break;
12391 case v_mode:
20592a94 12392 if (intel_syntax)
ea397f5b 12393 goto skip;
20592a94 12394
381d071f
L
12395 USED_REX (REX_W);
12396 if (rex & REX_W)
12397 *p++ = 'q';
9344ff29 12398 else if (sizeflag & DFLAG)
20592a94 12399 *p++ = 'l';
381d071f 12400 else
9344ff29
L
12401 *p++ = 'w';
12402 used_prefixes |= (prefixes & PREFIX_DATA);
381d071f
L
12403 break;
12404 default:
12405 oappend (INTERNAL_DISASSEMBLER_ERROR);
12406 break;
12407 }
ea397f5b 12408 mnemonicendp = p;
381d071f
L
12409 *p = '\0';
12410
ea397f5b 12411skip:
381d071f
L
12412 if (modrm.mod == 3)
12413 {
12414 int add;
12415
12416 /* Skip mod/rm byte. */
12417 MODRM_CHECK;
12418 codep++;
12419
12420 USED_REX (REX_B);
12421 add = (rex & REX_B) ? 8 : 0;
12422 if (bytemode == b_mode)
12423 {
12424 USED_REX (0);
12425 if (rex)
12426 oappend (names8rex[modrm.rm + add]);
12427 else
12428 oappend (names8[modrm.rm + add]);
12429 }
12430 else
12431 {
12432 USED_REX (REX_W);
12433 if (rex & REX_W)
12434 oappend (names64[modrm.rm + add]);
12435 else if ((prefixes & PREFIX_DATA))
12436 oappend (names16[modrm.rm + add]);
12437 else
12438 oappend (names32[modrm.rm + add]);
12439 }
12440 }
12441 else
9344ff29 12442 OP_E (bytemode, sizeflag);
381d071f 12443}
85f10a01 12444
c0f3af97
L
12445/* Display the destination register operand for instructions with
12446 VEX. */
12447
12448static void
12449OP_VEX (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
12450{
12451 if (!need_vex)
12452 abort ();
12453
12454 if (!need_vex_reg)
12455 return;
12456
12457 switch (vex.length)
12458 {
12459 case 128:
12460 switch (bytemode)
12461 {
12462 case vex_mode:
12463 case vex128_mode:
12464 break;
12465 default:
12466 abort ();
12467 return;
12468 }
12469
12470 sprintf (scratchbuf, "%%xmm%d", vex.register_specifier);
12471 break;
12472 case 256:
12473 switch (bytemode)
12474 {
12475 case vex_mode:
12476 case vex256_mode:
12477 break;
12478 default:
12479 abort ();
12480 return;
12481 }
12482
12483 sprintf (scratchbuf, "%%ymm%d", vex.register_specifier);
12484 break;
12485 default:
12486 abort ();
12487 break;
12488 }
12489 oappend (scratchbuf + intel_syntax);
12490}
12491
922d8de8
DR
12492/* Get the VEX immediate byte without moving codep. */
12493
12494static unsigned char
12495get_vex_imm8 (int sizeflag)
12496{
12497 int bytes_before_imm = 0;
12498
12499 /* Skip mod/rm byte. */
12500 MODRM_CHECK;
12501 codep++;
12502
12503 if (modrm.mod != 3)
12504 {
12505 /* There are SIB/displacement bytes. */
12506 if ((sizeflag & AFLAG) || address_mode == mode_64bit)
12507 {
12508 /* 32/64 bit address mode */
12509 int base = modrm.rm;
12510
12511 /* Check SIB byte. */
12512 if (base == 4)
12513 {
12514 FETCH_DATA (the_info, codep + 1);
12515 base = *codep & 7;
12516 bytes_before_imm++;
12517 }
12518
12519 switch (modrm.mod)
12520 {
12521 case 0:
12522 /* When modrm.rm == 5 or modrm.rm == 4 and base in
12523 SIB == 5, there is a 4 byte displacement. */
12524 if (base != 5)
12525 /* No displacement. */
12526 break;
12527 case 2:
12528 /* 4 byte displacement. */
12529 bytes_before_imm += 4;
12530 break;
12531 case 1:
12532 /* 1 byte displacement. */
12533 bytes_before_imm++;
12534 break;
12535 }
12536 }
12537 else
12538 { /* 16 bit address mode */
12539 switch (modrm.mod)
12540 {
12541 case 0:
12542 /* When modrm.rm == 6, there is a 2 byte displacement. */
12543 if (modrm.rm != 6)
12544 /* No displacement. */
12545 break;
12546 case 2:
12547 /* 2 byte displacement. */
12548 bytes_before_imm += 2;
12549 break;
12550 case 1:
12551 /* 1 byte displacement. */
12552 bytes_before_imm++;
12553 break;
12554 }
12555 }
12556 }
12557
12558 FETCH_DATA (the_info, codep + bytes_before_imm + 1);
12559 return codep [bytes_before_imm];
12560}
12561
12562static void
12563OP_EX_VexReg (int bytemode, int sizeflag, int reg)
12564{
12565 if (reg == -1 && modrm.mod != 3)
12566 {
12567 OP_E_memory (bytemode, sizeflag);
12568 return;
12569 }
12570 else
12571 {
12572 if (reg == -1)
12573 {
12574 reg = modrm.rm;
12575 USED_REX (REX_B);
12576 if (rex & REX_B)
12577 reg += 8;
12578 }
12579 else if (reg > 7 && address_mode != mode_64bit)
12580 BadOp ();
12581 }
12582
12583 switch (vex.length)
12584 {
12585 case 128:
12586 sprintf (scratchbuf, "%%xmm%d", reg);
12587 break;
12588 case 256:
12589 sprintf (scratchbuf, "%%ymm%d", reg);
12590 break;
12591 default:
12592 abort ();
12593 }
12594 oappend (scratchbuf + intel_syntax);
12595}
12596
12597static void
12598OP_EX_VexW (int bytemode, int sizeflag)
12599{
12600 int reg = -1;
12601
12602 if (!vex_w_done)
12603 {
12604 vex_w_done = 1;
12605 if (vex.w)
12606 reg = vex.register_specifier;
12607 }
12608 else
12609 {
12610 if (!vex.w)
12611 reg = vex.register_specifier;
12612 }
12613
12614 OP_EX_VexReg (bytemode, sizeflag, reg);
12615}
12616
12617static void
12618OP_VEX_FMA (int bytemode, int sizeflag)
12619{
12620 int reg = get_vex_imm8 (sizeflag) >> 4;
12621
12622 if (reg > 7 && address_mode != mode_64bit)
12623 BadOp ();
12624
12625 switch (vex.length)
12626 {
12627 case 128:
12628 switch (bytemode)
12629 {
12630 case vex_mode:
12631 case vex128_mode:
12632 break;
12633 default:
12634 abort ();
12635 return;
12636 }
12637
12638 sprintf (scratchbuf, "%%xmm%d", reg);
12639 break;
12640 case 256:
12641 switch (bytemode)
12642 {
12643 case vex_mode:
12644 break;
12645 default:
12646 abort ();
12647 return;
12648 }
12649
12650 sprintf (scratchbuf, "%%ymm%d", reg);
12651 break;
12652 default:
12653 abort ();
12654 }
12655 oappend (scratchbuf + intel_syntax);
12656}
12657
12658static void
12659VEXI4_Fixup (int bytemode ATTRIBUTE_UNUSED,
12660 int sizeflag ATTRIBUTE_UNUSED)
12661{
12662 /* Skip the immediate byte and check for invalid bits. */
12663 FETCH_DATA (the_info, codep + 1);
12664 if (*codep++ & 0xf)
12665 BadOp ();
12666}
12667
c0f3af97
L
12668static void
12669OP_REG_VexI4 (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
12670{
12671 int reg;
12672 FETCH_DATA (the_info, codep + 1);
12673 reg = *codep++;
12674
12675 if (bytemode != x_mode)
12676 abort ();
12677
12678 if (reg & 0xf)
12679 BadOp ();
12680
12681 reg >>= 4;
dae39acc
L
12682 if (reg > 7 && address_mode != mode_64bit)
12683 BadOp ();
12684
c0f3af97
L
12685 switch (vex.length)
12686 {
12687 case 128:
12688 sprintf (scratchbuf, "%%xmm%d", reg);
12689 break;
12690 case 256:
12691 sprintf (scratchbuf, "%%ymm%d", reg);
12692 break;
12693 default:
12694 abort ();
12695 }
12696 oappend (scratchbuf + intel_syntax);
12697}
12698
922d8de8
DR
12699static void
12700OP_XMM_VexW (int bytemode, int sizeflag)
12701{
12702 /* Turn off the REX.W bit since it is used for swapping operands
12703 now. */
12704 rex &= ~REX_W;
12705 OP_XMM (bytemode, sizeflag);
12706}
12707
c0f3af97
L
12708static void
12709OP_EX_Vex (int bytemode, int sizeflag)
12710{
12711 if (modrm.mod != 3)
12712 {
12713 if (vex.register_specifier != 0)
12714 BadOp ();
12715 need_vex_reg = 0;
12716 }
12717 OP_EX (bytemode, sizeflag);
12718}
12719
12720static void
12721OP_XMM_Vex (int bytemode, int sizeflag)
12722{
12723 if (modrm.mod != 3)
12724 {
12725 if (vex.register_specifier != 0)
12726 BadOp ();
12727 need_vex_reg = 0;
12728 }
12729 OP_XMM (bytemode, sizeflag);
12730}
12731
12732static void
12733VZERO_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
12734{
12735 switch (vex.length)
12736 {
12737 case 128:
ea397f5b 12738 mnemonicendp = stpcpy (obuf, "vzeroupper");
c0f3af97
L
12739 break;
12740 case 256:
ea397f5b 12741 mnemonicendp = stpcpy (obuf, "vzeroall");
c0f3af97
L
12742 break;
12743 default:
12744 abort ();
12745 }
12746}
12747
ea397f5b
L
12748static struct op vex_cmp_op[] =
12749{
12750 { STRING_COMMA_LEN ("eq") },
12751 { STRING_COMMA_LEN ("lt") },
12752 { STRING_COMMA_LEN ("le") },
12753 { STRING_COMMA_LEN ("unord") },
12754 { STRING_COMMA_LEN ("neq") },
12755 { STRING_COMMA_LEN ("nlt") },
12756 { STRING_COMMA_LEN ("nle") },
12757 { STRING_COMMA_LEN ("ord") },
12758 { STRING_COMMA_LEN ("eq_uq") },
12759 { STRING_COMMA_LEN ("nge") },
12760 { STRING_COMMA_LEN ("ngt") },
12761 { STRING_COMMA_LEN ("false") },
12762 { STRING_COMMA_LEN ("neq_oq") },
12763 { STRING_COMMA_LEN ("ge") },
12764 { STRING_COMMA_LEN ("gt") },
12765 { STRING_COMMA_LEN ("true") },
12766 { STRING_COMMA_LEN ("eq_os") },
12767 { STRING_COMMA_LEN ("lt_oq") },
12768 { STRING_COMMA_LEN ("le_oq") },
12769 { STRING_COMMA_LEN ("unord_s") },
12770 { STRING_COMMA_LEN ("neq_us") },
12771 { STRING_COMMA_LEN ("nlt_uq") },
12772 { STRING_COMMA_LEN ("nle_uq") },
12773 { STRING_COMMA_LEN ("ord_s") },
12774 { STRING_COMMA_LEN ("eq_us") },
12775 { STRING_COMMA_LEN ("nge_uq") },
12776 { STRING_COMMA_LEN ("ngt_uq") },
12777 { STRING_COMMA_LEN ("false_os") },
12778 { STRING_COMMA_LEN ("neq_os") },
12779 { STRING_COMMA_LEN ("ge_oq") },
12780 { STRING_COMMA_LEN ("gt_oq") },
12781 { STRING_COMMA_LEN ("true_us") },
c0f3af97
L
12782};
12783
12784static void
12785VCMP_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
12786{
12787 unsigned int cmp_type;
12788
12789 FETCH_DATA (the_info, codep + 1);
12790 cmp_type = *codep++ & 0xff;
12791 if (cmp_type < ARRAY_SIZE (vex_cmp_op))
12792 {
12793 char suffix [3];
ea397f5b 12794 char *p = mnemonicendp - 2;
c0f3af97
L
12795 suffix[0] = p[0];
12796 suffix[1] = p[1];
12797 suffix[2] = '\0';
ea397f5b
L
12798 sprintf (p, "%s%s", vex_cmp_op[cmp_type].name, suffix);
12799 mnemonicendp += vex_cmp_op[cmp_type].len;
c0f3af97
L
12800 }
12801 else
12802 {
12803 /* We have a reserved extension byte. Output it directly. */
12804 scratchbuf[0] = '$';
12805 print_operand_value (scratchbuf + 1, 1, cmp_type);
12806 oappend (scratchbuf + intel_syntax);
12807 scratchbuf[0] = '\0';
12808 }
12809}
12810
ea397f5b
L
12811static const struct op pclmul_op[] =
12812{
12813 { STRING_COMMA_LEN ("lql") },
12814 { STRING_COMMA_LEN ("hql") },
12815 { STRING_COMMA_LEN ("lqh") },
12816 { STRING_COMMA_LEN ("hqh") }
c0f3af97
L
12817};
12818
12819static void
12820PCLMUL_Fixup (int bytemode ATTRIBUTE_UNUSED,
12821 int sizeflag ATTRIBUTE_UNUSED)
12822{
12823 unsigned int pclmul_type;
12824
12825 FETCH_DATA (the_info, codep + 1);
12826 pclmul_type = *codep++ & 0xff;
12827 switch (pclmul_type)
12828 {
12829 case 0x10:
12830 pclmul_type = 2;
12831 break;
12832 case 0x11:
12833 pclmul_type = 3;
12834 break;
12835 default:
12836 break;
12837 }
12838 if (pclmul_type < ARRAY_SIZE (pclmul_op))
12839 {
12840 char suffix [4];
ea397f5b 12841 char *p = mnemonicendp - 3;
c0f3af97
L
12842 suffix[0] = p[0];
12843 suffix[1] = p[1];
12844 suffix[2] = p[2];
12845 suffix[3] = '\0';
ea397f5b
L
12846 sprintf (p, "%s%s", pclmul_op[pclmul_type].name, suffix);
12847 mnemonicendp += pclmul_op[pclmul_type].len;
c0f3af97
L
12848 }
12849 else
12850 {
12851 /* We have a reserved extension byte. Output it directly. */
12852 scratchbuf[0] = '$';
12853 print_operand_value (scratchbuf + 1, 1, pclmul_type);
12854 oappend (scratchbuf + intel_syntax);
12855 scratchbuf[0] = '\0';
12856 }
12857}
12858
f1f8f695
L
12859static void
12860MOVBE_Fixup (int bytemode, int sizeflag)
12861{
12862 /* Add proper suffix to "movbe". */
ea397f5b 12863 char *p = mnemonicendp;
f1f8f695
L
12864
12865 switch (bytemode)
12866 {
12867 case v_mode:
12868 if (intel_syntax)
ea397f5b 12869 goto skip;
f1f8f695
L
12870
12871 USED_REX (REX_W);
12872 if (sizeflag & SUFFIX_ALWAYS)
12873 {
12874 if (rex & REX_W)
12875 *p++ = 'q';
12876 else if (sizeflag & DFLAG)
12877 *p++ = 'l';
12878 else
12879 *p++ = 'w';
12880 }
12881 used_prefixes |= (prefixes & PREFIX_DATA);
12882 break;
12883 default:
12884 oappend (INTERNAL_DISASSEMBLER_ERROR);
12885 break;
12886 }
ea397f5b 12887 mnemonicendp = p;
f1f8f695
L
12888 *p = '\0';
12889
ea397f5b 12890skip:
f1f8f695
L
12891 OP_M (bytemode, sizeflag);
12892}
This page took 1.168168 seconds and 4 git commands to generate.